Update prebuilt Clang to r365631c1 from Android.

The version we had was segfaulting.

Bug: 132420445
Change-Id: Icb45a6fe0b4e2166f7895e669df1157cec9fb4e0
diff --git a/linux-x64/clang/include/c++/v1/__config b/linux-x64/clang/include/c++/v1/__config
index 3ca6615..1ecced9 100644
--- a/linux-x64/clang/include/c++/v1/__config
+++ b/linux-x64/clang/include/c++/v1/__config
@@ -38,6 +38,10 @@
 #  define _LIBCPP_ABI_VERSION 1
 #endif
 
+#ifndef __STDC_HOSTED__
+#  define _LIBCPP_FREESTANDING
+#endif
+
 #ifndef _LIBCPP_STD_VER
 #  if  __cplusplus <= 201103L
 #    define _LIBCPP_STD_VER 11
@@ -92,10 +96,12 @@
 // Enable optimized version of __do_get_(un)signed which avoids redundant copies.
 #  define _LIBCPP_ABI_OPTIMIZED_LOCALE_NUM_GET
 // Use the smallest possible integer type to represent the index of the variant.
-// Previously libc++ used "unsigned int" exclusivly.
+// Previously libc++ used "unsigned int" exclusively.
 #  define _LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION
 // Unstable attempt to provide a more optimized std::function
 #  define _LIBCPP_ABI_OPTIMIZED_FUNCTION
+// All the regex constants must be distinct and nonzero.
+#  define _LIBCPP_ABI_REGEX_CONSTANTS_NONZERO
 #elif _LIBCPP_ABI_VERSION == 1
 #  if !defined(_LIBCPP_OBJECT_FORMAT_COFF)
 // Enable compiling copies of now inline methods into the dylib to support
@@ -181,6 +187,10 @@
 #define _LIBCPP_CLANG_VER 0
 #endif
 
+#if defined(_LIBCPP_COMPILER_GCC) && __cplusplus < 201103L
+#error "libc++ does not support using GCC with C++03. Please enable C++11"
+#endif
+
 // FIXME: ABI detection should be done via compiler builtin macros. This
 // is just a placeholder until Clang implements such macros. For now assume
 // that Windows compilers pretending to be MSVC++ target the Microsoft ABI,
@@ -200,6 +210,10 @@
 #  endif
 #endif
 
+#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
+# define _LIBCPP_ABI_VCRUNTIME
+#endif
+
 // Need to detect which libc we're using if we're on Linux.
 #if defined(__linux__)
 #  include <features.h>
@@ -256,7 +270,7 @@
 #  define _LIBCPP_WIN32API
 #  define _LIBCPP_LITTLE_ENDIAN
 #  define _LIBCPP_SHORT_WCHAR   1
-// Both MinGW and native MSVC provide a "MSVC"-like enviroment
+// Both MinGW and native MSVC provide a "MSVC"-like environment
 #  define _LIBCPP_MSVCRT_LIKE
 // If mingw not explicitly detected, assume using MS C runtime only if
 // a MS compatibility version is specified.
@@ -297,7 +311,7 @@
    // random data even when using sandboxing mechanisms such as chroots,
    // Capsicum, etc.
 #  define _LIBCPP_USING_ARC4_RANDOM
-#elif defined(__Fuchsia__)
+#elif defined(__Fuchsia__) || defined(__wasi__)
 #  define _LIBCPP_USING_GETENTROPY
 #elif defined(__native_client__)
    // NaCl's sandbox (which PNaCl also runs in) doesn't allow filesystem access,
@@ -331,7 +345,7 @@
 #  if defined(__FreeBSD__)
 #    define _LIBCPP_HAS_QUICK_EXIT
 #    define _LIBCPP_HAS_C11_FEATURES
-#  elif defined(__Fuchsia__)
+#  elif defined(__Fuchsia__) || defined(__wasi__)
 #    define _LIBCPP_HAS_QUICK_EXIT
 #    define _LIBCPP_HAS_TIMESPEC_GET
 #    define _LIBCPP_HAS_C11_FEATURES
@@ -399,10 +413,6 @@
 #define _LIBCPP_HAS_NO_STRONG_ENUMS
 #endif
 
-#if !(__has_feature(cxx_decltype))
-#define _LIBCPP_HAS_NO_DECLTYPE
-#endif
-
 #if __has_feature(cxx_attributes)
 #  define _LIBCPP_NORETURN [[noreturn]]
 #else
@@ -433,18 +443,6 @@
 #define _LIBCPP_HAS_NO_VARIADICS
 #endif
 
-#if !(__has_feature(cxx_generalized_initializers))
-#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-#endif
-
-#if __has_feature(is_base_of)
-#define _LIBCPP_HAS_IS_BASE_OF
-#endif
-
-#if __has_feature(is_final)
-#define _LIBCPP_HAS_IS_FINAL
-#endif
-
 // Objective-C++ features (opt-in)
 #if __has_feature(objc_arc)
 #define _LIBCPP_HAS_OBJC_ARC
@@ -454,10 +452,6 @@
 #define _LIBCPP_HAS_OBJC_ARC_WEAK
 #endif
 
-#if !(__has_feature(cxx_constexpr))
-#define _LIBCPP_HAS_NO_CONSTEXPR
-#endif
-
 #if !(__has_feature(cxx_relaxed_constexpr))
 #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR
 #endif
@@ -470,14 +464,6 @@
 #define _LIBCPP_HAS_NO_NOEXCEPT
 #endif
 
-#if __has_feature(underlying_type)
-#define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T)
-#endif
-
-#if __has_feature(is_literal)
-#define _LIBCPP_IS_LITERAL(T) __is_literal(T)
-#endif
-
 #if !defined(_LIBCPP_HAS_NO_ASAN) && !__has_feature(address_sanitizer)
 #define _LIBCPP_HAS_NO_ASAN
 #endif
@@ -509,69 +495,20 @@
 
 #define _LIBCPP_NORETURN __attribute__((noreturn))
 
-#if _GNUC_VER >= 407
-#define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T)
-#define _LIBCPP_IS_LITERAL(T) __is_literal_type(T)
-#define _LIBCPP_HAS_IS_FINAL
-#endif
-
-#if defined(__GNUC__) && _GNUC_VER >= 403
-#define _LIBCPP_HAS_IS_BASE_OF
-#endif
-
 #if !__EXCEPTIONS && !defined(_LIBCPP_NO_EXCEPTIONS)
 #define _LIBCPP_NO_EXCEPTIONS
 #endif
 
-// constexpr was added to GCC in 4.6.
-#if _GNUC_VER < 406
-#  define _LIBCPP_HAS_NO_CONSTEXPR
-// Can only use constexpr in c++11 mode.
-#elif !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L
-#  define _LIBCPP_HAS_NO_CONSTEXPR
-#endif
-
 // Determine if GCC supports relaxed constexpr
 #if !defined(__cpp_constexpr) || __cpp_constexpr < 201304L
 #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR
 #endif
 
-// GCC 5 will support variable templates
+// GCC 5 supports variable templates
 #if !defined(__cpp_variable_templates) || __cpp_variable_templates < 201304L
 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES
 #endif
 
-#ifndef __GXX_EXPERIMENTAL_CXX0X__
-
-#define _LIBCPP_HAS_NO_DECLTYPE
-#define _LIBCPP_HAS_NO_NULLPTR
-#define _LIBCPP_HAS_NO_UNICODE_CHARS
-#define _LIBCPP_HAS_NO_VARIADICS
-#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
-#define _LIBCPP_HAS_NO_STRONG_ENUMS
-#define _LIBCPP_HAS_NO_NOEXCEPT
-
-#else  // __GXX_EXPERIMENTAL_CXX0X__
-
-#if _GNUC_VER < 403
-#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
-#endif
-
-
-#if _GNUC_VER < 404
-#define _LIBCPP_HAS_NO_DECLTYPE
-#define _LIBCPP_HAS_NO_UNICODE_CHARS
-#define _LIBCPP_HAS_NO_VARIADICS
-#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-#endif  // _GNUC_VER < 404
-
-#if _GNUC_VER < 406
-#define _LIBCPP_HAS_NO_NOEXCEPT
-#define _LIBCPP_HAS_NO_NULLPTR
-#endif
-
-#endif  // __GXX_EXPERIMENTAL_CXX0X__
-
 #if !defined(_LIBCPP_HAS_NO_ASAN) && !defined(__SANITIZE_ADDRESS__)
 #define _LIBCPP_HAS_NO_ASAN
 #endif
@@ -596,16 +533,12 @@
 #error "MSVC versions prior to Visual Studio 2015 are not supported"
 #endif
 
-#define _LIBCPP_HAS_IS_BASE_OF
-#define _LIBCPP_HAS_NO_CONSTEXPR
 #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR
 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES
-#define _LIBCPP_HAS_NO_NOEXCEPT
 #define __alignof__ __alignof
 #define _LIBCPP_NORETURN __declspec(noreturn)
 #define _ALIGNAS(x) __declspec(align(x))
 #define _ALIGNAS_TYPE(x) alignas(x)
-#define _LIBCPP_HAS_NO_VARIADICS
 
 #define _LIBCPP_WEAK
 
@@ -622,12 +555,7 @@
 #define _ATTRIBUTE(x) __attribute__((x))
 #define _LIBCPP_NORETURN __attribute__((noreturn))
 
-#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-#define _LIBCPP_HAS_NO_NOEXCEPT
-#define _LIBCPP_HAS_NO_NULLPTR
 #define _LIBCPP_HAS_NO_UNICODE_CHARS
-#define _LIBCPP_HAS_IS_BASE_OF
-#define _LIBCPP_HAS_IS_FINAL
 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES
 
 #if defined(_AIX)
@@ -658,8 +586,13 @@
 #  define _LIBCPP_EXPORTED_FROM_ABI
 #elif defined(_LIBCPP_BUILDING_LIBRARY)
 #  define _LIBCPP_DLL_VIS __declspec(dllexport)
-#  define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
-#  define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS _LIBCPP_DLL_VIS
+#  if defined(__MINGW32__)
+#    define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS _LIBCPP_DLL_VIS
+#    define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS
+#  else
+#    define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
+#    define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS _LIBCPP_DLL_VIS
+#  endif
 #  define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_DLL_VIS
 #  define _LIBCPP_EXPORTED_FROM_ABI __declspec(dllexport)
 #else
@@ -776,7 +709,7 @@
 #else
    // Try to approximate the effect of exclude_from_explicit_instantiation
    // (which is that entities are not assumed to be provided by explicit
-   // template instantitations in the dylib) by always inlining those entities.
+   // template instantiations in the dylib) by always inlining those entities.
 #  define _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION _LIBCPP_ALWAYS_INLINE
 #endif
 
@@ -788,6 +721,16 @@
 #  endif
 #endif
 
+#ifndef _LIBCPP_HAS_MERGED_TYPEINFO_NAMES_DEFAULT
+# ifdef _LIBCPP_OBJECT_FORMAT_COFF // Windows binaries can't merge typeinfos.
+# define _LIBCPP_HAS_MERGED_TYPEINFO_NAMES_DEFAULT 0
+#else
+// TODO: This isn't strictly correct on ELF platforms due to llvm.org/PR37398
+// And we should consider defaulting to OFF.
+# define _LIBCPP_HAS_MERGED_TYPEINFO_NAMES_DEFAULT 1
+#endif
+#endif
+
 #ifndef _LIBCPP_HIDE_FROM_ABI
 #  if _LIBCPP_HIDE_FROM_ABI_PER_TU
 #    define _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDDEN _LIBCPP_INTERNAL_LINKAGE
@@ -842,22 +785,6 @@
 #  define _NOEXCEPT_(x)
 #endif
 
-#if defined(_LIBCPP_DEBUG_USE_EXCEPTIONS)
-#  if !defined(_LIBCPP_DEBUG)
-#    error cannot use _LIBCPP_DEBUG_USE_EXCEPTIONS unless _LIBCPP_DEBUG is defined
-#  endif
-#  ifdef _LIBCPP_HAS_NO_NOEXCEPT
-#    define _NOEXCEPT_DEBUG
-#    define _NOEXCEPT_DEBUG_(x)
-#  else
-#    define _NOEXCEPT_DEBUG noexcept(false)
-#    define _NOEXCEPT_DEBUG_(x) noexcept(false)
-#  endif
-#else
-#  define _NOEXCEPT_DEBUG _NOEXCEPT
-#  define _NOEXCEPT_DEBUG_(x) _NOEXCEPT_(x)
-#endif
-
 #ifdef _LIBCPP_HAS_NO_UNICODE_CHARS
 typedef unsigned short char16_t;
 typedef unsigned int   char32_t;
@@ -868,30 +795,11 @@
 #endif
 
 #ifdef _LIBCPP_CXX03_LANG
-#  if __has_extension(c_static_assert)
-#    define static_assert(__b, __m) _Static_assert(__b, __m)
-#  else
-extern "C++" {
-template <bool> struct __static_assert_test;
-template <> struct __static_assert_test<true> {};
-template <unsigned> struct __static_assert_check {};
-}
-#    define static_assert(__b, __m) \
-       typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
-       _LIBCPP_CONCAT(__t, __LINE__)
-#  endif // __has_extension(c_static_assert)
+# define static_assert(...) _Static_assert(__VA_ARGS__)
+# define decltype(...) __decltype(__VA_ARGS__)
 #endif  // _LIBCPP_CXX03_LANG
 
-#ifdef _LIBCPP_HAS_NO_DECLTYPE
-// GCC 4.6 provides __decltype in all standard modes.
-#  if __has_keyword(__decltype) || _LIBCPP_CLANG_VER >= 304 || _GNUC_VER >= 406
-#    define decltype(__x) __decltype(__x)
-#  else
-#    define decltype(__x) __typeof__(__x)
-#  endif
-#endif
-
-#ifdef _LIBCPP_HAS_NO_CONSTEXPR
+#ifdef _LIBCPP_CXX03_LANG
 #  define _LIBCPP_CONSTEXPR
 #else
 #  define _LIBCPP_CONSTEXPR constexpr
@@ -910,9 +818,9 @@
 #endif
 
 #ifdef __GNUC__
-#  define _NOALIAS __attribute__((__malloc__))
+#  define _LIBCPP_NOALIAS __attribute__((__malloc__))
 #else
-#  define _NOALIAS
+#  define _LIBCPP_NOALIAS
 #endif
 
 #if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__) || \
@@ -965,10 +873,6 @@
 #define _LIBCPP_EXTERN_TEMPLATE2(...) extern template __VA_ARGS__;
 #endif
 
-#if defined(__APPLE__) && defined(__LP64__) && !defined(__x86_64__)
-#define _LIBCPP_NONUNIQUE_RTTI_BIT (1ULL << 63)
-#endif
-
 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(_LIBCPP_MSVCRT_LIKE) || \
     defined(__sun__) || defined(__NetBSD__) || defined(__CloudABI__)
 #define _LIBCPP_LOCALE__L_EXTENSIONS 1
@@ -985,16 +889,12 @@
 #define _DECLARE_C99_LDBL_MATH 1
 #endif
 
-#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
-#  define _LIBCPP_DEFER_NEW_TO_VCRUNTIME
-#endif
-
 // If we are getting operator new from the MSVC CRT, then allocation overloads
 // for align_val_t were added in 19.12, aka VS 2017 version 15.3.
 #if defined(_LIBCPP_MSVCRT) && defined(_MSC_VER) && _MSC_VER < 1912
 #  define _LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION
-#elif defined(_LIBCPP_DEFER_NEW_TO_VCRUNTIME) && !defined(__cpp_aligned_new)
-   // We're defering to Microsoft's STL to provide aligned new et al. We don't
+#elif defined(_LIBCPP_ABI_VCRUNTIME) && !defined(__cpp_aligned_new)
+   // We're deferring to Microsoft's STL to provide aligned new et al. We don't
    // have it unless the language feature test macro is defined.
 #  define _LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION
 #endif
@@ -1025,8 +925,10 @@
 #endif
 
 // Deprecation macros.
-// Deprecations warnings are only enabled when _LIBCPP_ENABLE_DEPRECATION_WARNINGS is defined.
-#if defined(_LIBCPP_ENABLE_DEPRECATION_WARNINGS)
+//
+// Deprecations warnings are always enabled, except when users explicitly opt-out
+// by defining _LIBCPP_DISABLE_DEPRECATION_WARNINGS.
+#if !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS)
 #  if __has_attribute(deprecated)
 #    define _LIBCPP_DEPRECATED __attribute__ ((deprecated))
 #  elif _LIBCPP_STD_VER > 11
@@ -1128,6 +1030,12 @@
 #endif
 #endif
 
+#if __has_attribute(no_destroy)
+#  define _LIBCPP_NO_DESTROY __attribute__((__no_destroy__))
+#else
+#  define _LIBCPP_NO_DESTROY
+#endif
+
 #ifndef _LIBCPP_HAS_NO_ASAN
 _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
   const void *, const void *, const void *, const void *);
@@ -1158,6 +1066,7 @@
     !defined(_LIBCPP_HAS_THREAD_API_EXTERNAL)
 #  if defined(__FreeBSD__) || \
       defined(__Fuchsia__) || \
+      defined(__wasi__) || \
       defined(__NetBSD__) || \
       defined(__linux__) || \
       defined(__GNU__) || \
@@ -1188,6 +1097,23 @@
        _LIBCPP_HAS_NO_THREADS is defined.
 #endif
 
+// The Apple, glibc, and Bionic implementation of pthreads implements
+// pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32
+// mutexes have no destroy mechanism.
+// TODO(EricWF): Enable this optimization on Apple and Bionic platforms after
+// speaking to their respective stakeholders.
+#if (defined(_LIBCPP_HAS_THREAD_API_PTHREAD) && defined(__GLIBC__)) \
+  || defined(_LIBCPP_HAS_THREAD_API_WIN32)
+# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION
+#endif
+
+// Destroying a condvar is a nop on Windows.
+// TODO(EricWF): This is potentially true for some pthread implementations
+// as well.
+#if defined(_LIBCPP_HAS_THREAD_API_WIN32)
+# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION
+#endif
+
 // Systems that use capability-based security (FreeBSD with Capsicum,
 // Nuxi CloudABI) may only provide local filesystem access (using *at()).
 // Functions like open(), rename(), unlink() and stat() should not be
@@ -1204,7 +1130,7 @@
 #endif
 
 #if defined(__BIONIC__) || defined(__CloudABI__) ||                            \
-    defined(__Fuchsia__) || defined(_LIBCPP_HAS_MUSL_LIBC)
+    defined(__Fuchsia__) || defined(__wasi__) || defined(_LIBCPP_HAS_MUSL_LIBC)
 #define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
 #endif
 
@@ -1216,13 +1142,22 @@
 
 #if __has_feature(cxx_atomic) || __has_extension(c_atomic) || __has_keyword(_Atomic)
 #  define _LIBCPP_HAS_C_ATOMIC_IMP
-#elif _GNUC_VER > 407
+#elif defined(_LIBCPP_COMPILER_GCC)
 #  define _LIBCPP_HAS_GCC_ATOMIC_IMP
 #endif
 
-#if (!defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP)) \
+#if (!defined(_LIBCPP_HAS_C_ATOMIC_IMP) && \
+     !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP) && \
+     !defined(_LIBCPP_HAS_EXTERNAL_ATOMIC_IMP)) \
      || defined(_LIBCPP_HAS_NO_THREADS)
-#define _LIBCPP_HAS_NO_ATOMIC_HEADER
+#  define _LIBCPP_HAS_NO_ATOMIC_HEADER
+#else
+#  ifndef _LIBCPP_ATOMIC_FLAG_TYPE
+#    define _LIBCPP_ATOMIC_FLAG_TYPE bool
+#  endif
+#  ifdef _LIBCPP_FREESTANDING
+#    define _LIBCPP_ATOMIC_ONLY_USE_BUILTINS
+#  endif
 #endif
 
 #ifndef _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
@@ -1250,6 +1185,10 @@
 #define _LIBCPP_HAS_NO_BUILTIN_ADDRESSOF
 #endif
 
+#if !__has_builtin(__builtin_is_constant_evaluated) && _GNUC_VER < 900
+#define _LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED
+#endif
+
 #if !defined(_LIBCPP_HAS_NO_OFF_T_FUNCTIONS)
 #  if defined(_LIBCPP_MSVCRT) || defined(_NEWLIB_VERSION)
 #    define _LIBCPP_HAS_NO_OFF_T_FUNCTIONS
@@ -1277,6 +1216,21 @@
 #  define _LIBCPP_FALLTHROUGH() ((void)0)
 #endif
 
+#if __has_attribute(__nodebug__)
+#define _LIBCPP_NODEBUG __attribute__((__nodebug__))
+#else
+#define _LIBCPP_NODEBUG
+#endif
+
+#ifndef _LIBCPP_NODEBUG_TYPE
+#if __has_attribute(__nodebug__) && \
+    (defined(_LIBCPP_COMPILER_CLANG) && _LIBCPP_CLANG_VER >= 900)
+#define _LIBCPP_NODEBUG_TYPE __attribute__((nodebug))
+#else
+#define _LIBCPP_NODEBUG_TYPE
+#endif
+#endif // !defined(_LIBCPP_NODEBUG_TYPE)
+
 #if defined(_LIBCPP_ABI_MICROSOFT) && \
     (defined(_LIBCPP_COMPILER_MSVC) || __has_declspec_attribute(empty_bases))
 #  define _LIBCPP_DECLSPEC_EMPTY_BASES __declspec(empty_bases)
@@ -1312,7 +1266,8 @@
 #if !defined(_LIBCPP_BUILDING_LIBRARY) &&                                      \
     !defined(_LIBCPP_DISABLE_AVAILABILITY) &&                                  \
     __has_feature(attribute_availability_with_strict) &&                       \
-    __has_feature(attribute_availability_in_templates)
+    __has_feature(attribute_availability_in_templates) &&                      \
+    __has_extension(pragma_clang_attribute_external_declaration)
 #  ifdef __APPLE__
 #    define _LIBCPP_USE_AVAILABILITY_APPLE
 #  endif
@@ -1355,6 +1310,21 @@
 #  define _LIBCPP_AVAILABILITY_ATOMIC_SHARED_PTR                               \
      __attribute__((availability(macosx,strict,introduced=10.9)))              \
      __attribute__((availability(ios,strict,introduced=7.0)))
+#  define _LIBCPP_AVAILABILITY_FILESYSTEM                                      \
+     __attribute__((availability(macosx,strict,introduced=10.15)))             \
+     __attribute__((availability(ios,strict,introduced=13.0)))                 \
+     __attribute__((availability(tvos,strict,introduced=13.0)))                \
+     __attribute__((availability(watchos,strict,introduced=6.0)))
+#  define _LIBCPP_AVAILABILITY_FILESYSTEM_PUSH                                 \
+     _Pragma("clang attribute push(__attribute__((availability(macosx,strict,introduced=10.15))), apply_to=any(function,record))") \
+     _Pragma("clang attribute push(__attribute__((availability(ios,strict,introduced=13.0))), apply_to=any(function,record))")     \
+     _Pragma("clang attribute push(__attribute__((availability(tvos,strict,introduced=13.0))), apply_to=any(function,record))")    \
+     _Pragma("clang attribute push(__attribute__((availability(watchos,strict,introduced=6.0))), apply_to=any(function,record))")
+#  define _LIBCPP_AVAILABILITY_FILESYSTEM_POP                                  \
+     _Pragma("clang attribute pop")                                            \
+     _Pragma("clang attribute pop")                                            \
+     _Pragma("clang attribute pop")                                            \
+     _Pragma("clang attribute pop")
 #else
 #  define _LIBCPP_AVAILABILITY_SHARED_MUTEX
 #  define _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS
@@ -1366,6 +1336,9 @@
 #  define _LIBCPP_AVAILABILITY_TYPEINFO_VTABLE
 #  define _LIBCPP_AVAILABILITY_LOCALE_CATEGORY
 #  define _LIBCPP_AVAILABILITY_ATOMIC_SHARED_PTR
+#  define _LIBCPP_AVAILABILITY_FILESYSTEM
+#  define _LIBCPP_AVAILABILITY_FILESYSTEM_PUSH
+#  define _LIBCPP_AVAILABILITY_FILESYSTEM_POP
 #endif
 
 // Define availability that depends on _LIBCPP_NO_EXCEPTIONS.
diff --git a/linux-x64/clang/include/c++/v1/__cxxabi_config.h b/linux-x64/clang/include/c++/v1/__cxxabi_config.h
index c5e6e89..1e0edca 100644
--- a/linux-x64/clang/include/c++/v1/__cxxabi_config.h
+++ b/linux-x64/clang/include/c++/v1/__cxxabi_config.h
@@ -61,6 +61,8 @@
 
 #if defined(__clang__)
 #define _LIBCXXABI_COMPILER_CLANG
+#elif defined(__GNUC__)
+#define _LIBCXXABI_COMPILER_GCC
 #endif
 
 #if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG)
@@ -69,4 +71,8 @@
 #define _LIBCXXABI_NO_CFI
 #endif
 
+#if defined(__arm__)
+#  define _LIBCXXABI_GUARD_ABI_ARM
+#endif
+
 #endif // ____CXXABI_CONFIG_H
diff --git a/linux-x64/clang/include/c++/v1/__debug b/linux-x64/clang/include/c++/v1/__debug
index 6ccb72c..524c5ff 100644
--- a/linux-x64/clang/include/c++/v1/__debug
+++ b/linux-x64/clang/include/c++/v1/__debug
@@ -11,6 +11,7 @@
 #define _LIBCPP_DEBUG_H
 
 #include <__config>
+#include <iosfwd>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
@@ -24,7 +25,6 @@
 #   include <cstdlib>
 #   include <cstdio>
 #   include <cstddef>
-#   include <exception>
 #endif
 
 #if _LIBCPP_DEBUG_LEVEL >= 1 && !defined(_LIBCPP_ASSERT)
@@ -49,10 +49,6 @@
 #define _LIBCPP_DEBUG_MODE(...) ((void)0)
 #endif
 
-#if _LIBCPP_DEBUG_LEVEL < 1
-class _LIBCPP_EXCEPTION_ABI __libcpp_debug_exception;
-#endif
-
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 struct _LIBCPP_TEMPLATE_VIS __libcpp_debug_info {
@@ -62,6 +58,9 @@
   _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
   __libcpp_debug_info(const char* __f, int __l, const char* __p, const char* __m)
     : __file_(__f), __line_(__l), __pred_(__p), __msg_(__m) {}
+
+  _LIBCPP_FUNC_VIS std::string what() const;
+
   const char* __file_;
   int __line_;
   const char* __pred_;
@@ -79,38 +78,11 @@
 _LIBCPP_NORETURN _LIBCPP_FUNC_VIS
 void __libcpp_abort_debug_function(__libcpp_debug_info const&);
 
-/// __libcpp_throw_debug_function - A debug handler that throws
-///   an instance of __libcpp_debug_exception when called.
- _LIBCPP_NORETURN _LIBCPP_FUNC_VIS
-void __libcpp_throw_debug_function(__libcpp_debug_info const&);
-
 /// __libcpp_set_debug_function - Set the debug handler to the specified
 ///    function.
 _LIBCPP_FUNC_VIS
 bool __libcpp_set_debug_function(__libcpp_debug_function_type __func);
 
-// Setup the throwing debug handler during dynamic initialization.
-#if _LIBCPP_DEBUG_LEVEL >= 1 && defined(_LIBCPP_DEBUG_USE_EXCEPTIONS)
-# if defined(_LIBCPP_NO_EXCEPTIONS)
-#   error _LIBCPP_DEBUG_USE_EXCEPTIONS cannot be used when exceptions are disabled.
-# endif
-static bool __init_dummy = __libcpp_set_debug_function(__libcpp_throw_debug_function);
-#endif
-
-#if _LIBCPP_DEBUG_LEVEL >= 1 || defined(_LIBCPP_BUILDING_LIBRARY)
-class _LIBCPP_EXCEPTION_ABI __libcpp_debug_exception : public exception {
-public:
-  __libcpp_debug_exception() _NOEXCEPT;
-  explicit __libcpp_debug_exception(__libcpp_debug_info const& __i);
-  __libcpp_debug_exception(__libcpp_debug_exception const&);
-  ~__libcpp_debug_exception() _NOEXCEPT;
-  const char* what() const _NOEXCEPT;
-private:
-  struct __libcpp_debug_exception_imp;
-  __libcpp_debug_exception_imp *__imp_;
-};
-#endif
-
 #if _LIBCPP_DEBUG_LEVEL >= 2 || defined(_LIBCPP_BUILDING_LIBRARY)
 
 struct _LIBCPP_TYPE_VIS __c_node;
@@ -250,16 +222,22 @@
     __db_c_const_iterator __c_end() const;
     __db_i_const_iterator __i_end() const;
 
+    typedef __c_node*(_InsertConstruct)(void*, void*, __c_node*);
+
+    template <class _Cont>
+    _LIBCPP_INLINE_VISIBILITY static __c_node* __create_C_node(void *__mem, void *__c, __c_node *__next) {
+        return ::new(__mem) _C_node<_Cont>(__c, __next);
+    }
+
     template <class _Cont>
     _LIBCPP_INLINE_VISIBILITY
     void __insert_c(_Cont* __c)
     {
-        __c_node* __n = __insert_c(static_cast<void*>(__c));
-        ::new(__n) _C_node<_Cont>(__n->__c_, __n->__next_);
+        __insert_c(static_cast<void*>(__c), &__create_C_node<_Cont>);
     }
 
     void __insert_i(void* __i);
-    __c_node* __insert_c(void* __c);
+    void __insert_c(void* __c, _InsertConstruct* __fn);
     void __erase_c(void* __c);
 
     void __insert_ic(void* __i, const void* __c);
diff --git a/linux-x64/clang/include/c++/v1/__functional_base b/linux-x64/clang/include/c++/v1/__functional_base
index 8da8324..9587d7a 100644
--- a/linux-x64/clang/include/c++/v1/__functional_base
+++ b/linux-x64/clang/include/c++/v1/__functional_base
@@ -125,7 +125,7 @@
     : public __maybe_derive_from_unary_function<_Tp>,
       public __maybe_derive_from_binary_function<_Tp>
 {
-    typedef typename _Tp::result_type result_type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Tp::result_type result_type;
 };
 
 template <class _Tp>
@@ -146,19 +146,19 @@
 template <class _Rp>
 struct __weak_result_type<_Rp ()>
 {
-    typedef _Rp result_type;
+    typedef _LIBCPP_NODEBUG_TYPE  _Rp result_type;
 };
 
 template <class _Rp>
 struct __weak_result_type<_Rp (&)()>
 {
-    typedef _Rp result_type;
+    typedef _LIBCPP_NODEBUG_TYPE  _Rp result_type;
 };
 
 template <class _Rp>
 struct __weak_result_type<_Rp (*)()>
 {
-    typedef _Rp result_type;
+    typedef _LIBCPP_NODEBUG_TYPE  _Rp result_type;
 };
 
 // 1 argument case
@@ -610,7 +610,7 @@
 template <class _Tp, class _Alloc, class ..._Args>
 struct __uses_alloc_ctor_imp
 {
-    typedef typename __uncvref<_Alloc>::type _RawAlloc;
+    typedef _LIBCPP_NODEBUG_TYPE typename __uncvref<_Alloc>::type _RawAlloc;
     static const bool __ua = uses_allocator<_Tp, _RawAlloc>::value;
     static const bool __ic =
         is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>::value;
diff --git a/linux-x64/clang/include/c++/v1/__hash_table b/linux-x64/clang/include/c++/v1/__hash_table
index 4409d6d..e02d347 100644
--- a/linux-x64/clang/include/c++/v1/__hash_table
+++ b/linux-x64/clang/include/c++/v1/__hash_table
@@ -875,9 +875,9 @@
 template <class _Key, class _Hash, class _Equal>
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_DIAGNOSE_WARNING(!__invokable<_Equal const&, _Key const&, _Key const&>::value,
-    "the specified comparator type does not provide a const call operator")
+    "the specified comparator type does not provide a viable const call operator")
     _LIBCPP_DIAGNOSE_WARNING(!__invokable<_Hash const&, _Key const&>::value,
-    "the specified hash functor does not provide a const call operator")
+    "the specified hash functor does not provide a viable const call operator")
 #endif
 typename __enforce_unordered_container_requirements<_Key, _Hash, _Equal>::type
 __diagnose_unordered_container_requirements(int);
@@ -1260,7 +1260,7 @@
 
     void swap(__hash_table& __u)
 #if _LIBCPP_STD_VER <= 11
-        _NOEXCEPT_DEBUG_(
+        _NOEXCEPT_(
             __is_nothrow_swappable<hasher>::value && __is_nothrow_swappable<key_equal>::value
             && (!allocator_traits<__pointer_allocator>::propagate_on_container_swap::value
                   || __is_nothrow_swappable<__pointer_allocator>::value)
@@ -1268,7 +1268,7 @@
                   || __is_nothrow_swappable<__node_allocator>::value)
             );
 #else
-     _NOEXCEPT_DEBUG_(__is_nothrow_swappable<hasher>::value && __is_nothrow_swappable<key_equal>::value);
+     _NOEXCEPT_(__is_nothrow_swappable<hasher>::value && __is_nothrow_swappable<key_equal>::value);
 #endif
 
     _LIBCPP_INLINE_VISIBILITY
@@ -2248,7 +2248,7 @@
         return _InsertReturnType{end(), false, _NodeHandle()};
     pair<iterator, bool> __result = __node_insert_unique(__nh.__ptr_);
     if (__result.second)
-        __nh.__release();
+        __nh.__release_ptr();
     return _InsertReturnType{__result.first, __result.second, _VSTD::move(__nh)};
 }
 
@@ -2263,7 +2263,7 @@
         return end();
     pair<iterator, bool> __result = __node_insert_unique(__nh.__ptr_);
     if (__result.second)
-        __nh.__release();
+        __nh.__release_ptr();
     return __result.first;
 }
 
@@ -2327,7 +2327,7 @@
     if (__nh.empty())
         return end();
     iterator __result = __node_insert_multi(__nh.__ptr_);
-    __nh.__release();
+    __nh.__release_ptr();
     return __result;
 }
 
@@ -2341,7 +2341,7 @@
     if (__nh.empty())
         return end();
     iterator __result = __node_insert_multi(__hint, __nh.__ptr_);
-    __nh.__release();
+    __nh.__release_ptr();
     return __result;
 }
 
@@ -2807,7 +2807,7 @@
 void
 __hash_table<_Tp, _Hash, _Equal, _Alloc>::swap(__hash_table& __u)
 #if _LIBCPP_STD_VER <= 11
-    _NOEXCEPT_DEBUG_(
+    _NOEXCEPT_(
         __is_nothrow_swappable<hasher>::value && __is_nothrow_swappable<key_equal>::value
         && (!allocator_traits<__pointer_allocator>::propagate_on_container_swap::value
               || __is_nothrow_swappable<__pointer_allocator>::value)
@@ -2815,7 +2815,7 @@
               || __is_nothrow_swappable<__node_allocator>::value)
             )
 #else
-  _NOEXCEPT_DEBUG_(__is_nothrow_swappable<hasher>::value && __is_nothrow_swappable<key_equal>::value)
+  _NOEXCEPT_(__is_nothrow_swappable<hasher>::value && __is_nothrow_swappable<key_equal>::value)
 #endif
 {
     _LIBCPP_ASSERT(__node_traits::propagate_on_container_swap::value ||
diff --git a/linux-x64/clang/include/c++/v1/__locale b/linux-x64/clang/include/c++/v1/__locale
index d1d66f9..d382e4d 100644
--- a/linux-x64/clang/include/c++/v1/__locale
+++ b/linux-x64/clang/include/c++/v1/__locale
@@ -19,6 +19,7 @@
 #include <cctype>
 #include <locale.h>
 #if defined(_LIBCPP_MSVCRT_LIKE)
+# include <cstring>
 # include <support/win32/locale_win32.h>
 #elif defined(_AIX)
 # include <support/ibm/xlocale.h>
@@ -34,6 +35,9 @@
 # include <xlocale.h>
 #elif defined(__Fuchsia__)
 # include <support/fuchsia/xlocale.h>
+#elif defined(__wasi__)
+// WASI libc uses musl's locales support.
+# include <support/musl/xlocale.h>
 #elif defined(_LIBCPP_HAS_MUSL_LIBC)
 # include <support/musl/xlocale.h>
 #endif
@@ -63,28 +67,41 @@
 #elif defined(_LIBCPP_MSVCRT_LIKE)
 struct __libcpp_locale_guard {
     __libcpp_locale_guard(locale_t __l) :
-        __status(_configthreadlocale(_ENABLE_PER_THREAD_LOCALE)),
-        __locale_collate(setlocale(LC_COLLATE, __l.__get_locale())),
-        __locale_ctype(setlocale(LC_CTYPE, __l.__get_locale())),
-        __locale_monetary(setlocale(LC_MONETARY, __l.__get_locale())),
-        __locale_numeric(setlocale(LC_NUMERIC, __l.__get_locale())),
-        __locale_time(setlocale(LC_TIME, __l.__get_locale()))
-        // LC_MESSAGES is not supported on Windows.
-    {}
+        __status(_configthreadlocale(_ENABLE_PER_THREAD_LOCALE)) {
+      // Setting the locale can be expensive even when the locale given is
+      // already the current locale, so do an explicit check to see if the
+      // current locale is already the one we want.
+      const char* __lc = __setlocale(nullptr);
+      // If every category is the same, the locale string will simply be the
+      // locale name, otherwise it will be a semicolon-separated string listing
+      // each category.  In the second case, we know at least one category won't
+      // be what we want, so we only have to check the first case.
+      if (strcmp(__l.__get_locale(), __lc) != 0) {
+        __locale_all = _strdup(__lc);
+        if (__locale_all == nullptr)
+          __throw_bad_alloc();
+        __setlocale(__l.__get_locale());
+      }
+    }
     ~__libcpp_locale_guard() {
-        setlocale(LC_COLLATE, __locale_collate);
-        setlocale(LC_CTYPE, __locale_ctype);
-        setlocale(LC_MONETARY, __locale_monetary);
-        setlocale(LC_NUMERIC, __locale_numeric);
-        setlocale(LC_TIME, __locale_time);
-        _configthreadlocale(__status);
+      // The CRT documentation doesn't explicitly say, but setlocale() does the
+      // right thing when given a semicolon-separated list of locale settings
+      // for the different categories in the same format as returned by
+      // setlocale(LC_ALL, nullptr).
+      if (__locale_all != nullptr) {
+        __setlocale(__locale_all);
+        free(__locale_all);
+      }
+      _configthreadlocale(__status);
+    }
+    static const char* __setlocale(const char* __locale) {
+      const char* __new_locale = setlocale(LC_ALL, __locale);
+      if (__new_locale == nullptr)
+        __throw_bad_alloc();
+      return __new_locale;
     }
     int __status;
-    char* __locale_collate;
-    char* __locale_ctype;
-    char* __locale_monetary;
-    char* __locale_numeric;
-    char* __locale_time;
+    char* __locale_all = nullptr;
 };
 #endif
 
@@ -254,7 +271,10 @@
         return do_compare(__lo1, __hi1, __lo2, __hi2);
     }
 
+    // FIXME(EricWF): The _LIBCPP_ALWAYS_INLINE is needed on Windows to work
+    // around a dllimport bug that expects an external instantiation.
     _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_ALWAYS_INLINE
     string_type transform(const char_type* __lo, const char_type* __hi) const
     {
         return do_transform(__lo, __hi);
@@ -388,6 +408,11 @@
     static const mask punct  = _ISpunct;
     static const mask xdigit = _ISxdigit;
     static const mask blank  = _ISblank;
+#if defined(__mips__)
+    static const mask __regex_word = static_cast<char_class_type>(_ISbit(15));
+#else
+    static const mask __regex_word = 0x80;
+#endif
 #elif defined(_LIBCPP_MSVCRT_LIKE)
     typedef unsigned short mask;
     static const mask space  = _SPACE;
@@ -400,6 +425,7 @@
     static const mask punct  = _PUNCT;
     static const mask xdigit = _HEX;
     static const mask blank  = _BLANK;
+    static const mask __regex_word = 0x80;
 # define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_PRINT
 #elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__EMSCRIPTEN__) || defined(__NetBSD__)
 # ifdef __APPLE__
@@ -421,8 +447,12 @@
 
 # if defined(__NetBSD__)
     static const mask blank  = _CTYPE_BL;
+    // NetBSD defines classes up to 0x2000
+    // see sys/ctype_bits.h, _CTYPE_Q
+    static const mask __regex_word = 0x8000;
 # else
     static const mask blank  = _CTYPE_B;
+    static const mask __regex_word = 0x80;
 # endif
 #elif defined(__sun__) || defined(_AIX)
     typedef unsigned int mask;
@@ -436,6 +466,7 @@
     static const mask punct  = _ISPUNCT;
     static const mask xdigit = _ISXDIGIT;
     static const mask blank  = _ISBLANK;
+    static const mask __regex_word = 0x80;
 #elif defined(_NEWLIB_VERSION)
     // Same type as Newlib's _ctype_ array in newlib/libc/include/ctype.h.
     typedef char mask;
@@ -449,6 +480,7 @@
     static const mask punct  = _P;
     static const mask xdigit = _X | _N;
     static const mask blank  = _B;
+    static const mask __regex_word = 0x80;
 # define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_PRINT
 # define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_ALPHA
 # define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_XDIGIT
@@ -464,6 +496,7 @@
     static const mask punct  = 1<<7;
     static const mask xdigit = 1<<8;
     static const mask blank  = 1<<9;
+    static const mask __regex_word = 1<<10;
 #endif
     static const mask alnum  = alpha | digit;
     static const mask graph  = alnum | punct;
@@ -1229,8 +1262,6 @@
 _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<char16_t, char, mbstate_t>)
 _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<char32_t, char, mbstate_t>)
 
-_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*);
-
 template <size_t _Np>
 struct __narrow_to_utf8
 {
diff --git a/linux-x64/clang/include/c++/v1/__mutex_base b/linux-x64/clang/include/c++/v1/__mutex_base
index 008be95..f828bea 100644
--- a/linux-x64/clang/include/c++/v1/__mutex_base
+++ b/linux-x64/clang/include/c++/v1/__mutex_base
@@ -36,28 +36,24 @@
 #  endif
 #endif  // _LIBCPP_THREAD_SAFETY_ANNOTATION
 
+
 class _LIBCPP_TYPE_VIS _LIBCPP_THREAD_SAFETY_ANNOTATION(capability("mutex")) mutex
 {
-#ifndef _LIBCPP_CXX03_LANG
     __libcpp_mutex_t __m_ = _LIBCPP_MUTEX_INITIALIZER;
-#else
-    __libcpp_mutex_t __m_;
-#endif
 
 public:
     _LIBCPP_INLINE_VISIBILITY
-#ifndef _LIBCPP_CXX03_LANG
-    constexpr mutex() = default;
+    _LIBCPP_CONSTEXPR mutex() = default;
+
+    mutex(const mutex&) = delete;
+    mutex& operator=(const mutex&) = delete;
+
+#if defined(_LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION)
+    ~mutex() = default;
 #else
-    mutex() _NOEXCEPT {__m_ = (__libcpp_mutex_t)_LIBCPP_MUTEX_INITIALIZER;}
+    ~mutex() _NOEXCEPT;
 #endif
-    ~mutex();
 
-private:
-    mutex(const mutex&);// = delete;
-    mutex& operator=(const mutex&);// = delete;
-
-public:
     void lock() _LIBCPP_THREAD_SAFETY_ANNOTATION(acquire_capability());
     bool try_lock() _NOEXCEPT _LIBCPP_THREAD_SAFETY_ANNOTATION(try_acquire_capability(true));
     void unlock() _NOEXCEPT _LIBCPP_THREAD_SAFETY_ANNOTATION(release_capability());
@@ -286,26 +282,20 @@
 
 class _LIBCPP_TYPE_VIS condition_variable
 {
-#ifndef _LIBCPP_CXX03_LANG
     __libcpp_condvar_t __cv_ = _LIBCPP_CONDVAR_INITIALIZER;
-#else
-    __libcpp_condvar_t __cv_;
-#endif
-
 public:
     _LIBCPP_INLINE_VISIBILITY
-#ifndef _LIBCPP_CXX03_LANG
-    constexpr condition_variable() _NOEXCEPT = default;
+    _LIBCPP_CONSTEXPR condition_variable() _NOEXCEPT = default;
+
+#ifdef _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION
+    ~condition_variable() = default;
 #else
-    condition_variable() _NOEXCEPT {__cv_ = (__libcpp_condvar_t)_LIBCPP_CONDVAR_INITIALIZER;}
-#endif
     ~condition_variable();
+#endif
 
-private:
-    condition_variable(const condition_variable&); // = delete;
-    condition_variable& operator=(const condition_variable&); // = delete;
+    condition_variable(const condition_variable&) = delete;
+    condition_variable& operator=(const condition_variable&) = delete;
 
-public:
     void notify_one() _NOEXCEPT;
     void notify_all() _NOEXCEPT;
 
diff --git a/linux-x64/clang/include/c++/v1/__node_handle b/linux-x64/clang/include/c++/v1/__node_handle
index 7f3bd9d..be1fe17 100644
--- a/linux-x64/clang/include/c++/v1/__node_handle
+++ b/linux-x64/clang/include/c++/v1/__node_handle
@@ -56,7 +56,7 @@
     optional<allocator_type> __alloc_;
 
     _LIBCPP_INLINE_VISIBILITY
-    void __release()
+    void __release_ptr()
     {
         __ptr_ = nullptr;
         __alloc_ = _VSTD::nullopt;
@@ -193,8 +193,7 @@
     __basic_node_handle< _NodeType, _Alloc, __map_node_handle_specifics>;
 
 template <class _Iterator, class _NodeType>
-_LIBCPP_TEMPLATE_VIS
-struct __insert_return_type
+struct _LIBCPP_TEMPLATE_VIS __insert_return_type
 {
     _Iterator position;
     bool inserted;
diff --git a/linux-x64/clang/include/c++/v1/__threading_support b/linux-x64/clang/include/c++/v1/__threading_support
index baa1222..589fe20 100644
--- a/linux-x64/clang/include/c++/v1/__threading_support
+++ b/linux-x64/clang/include/c++/v1/__threading_support
@@ -22,6 +22,8 @@
 # include <__external_threading>
 #elif !defined(_LIBCPP_HAS_NO_THREADS)
 
+typedef ::timespec __libcpp_timespec_t;
+
 #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
 # include <pthread.h>
 # include <sched.h>
@@ -148,7 +150,7 @@
 
 _LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_condvar_timedwait(__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,
-                               timespec *__ts);
+                               __libcpp_timespec_t *__ts);
 
 _LIBCPP_THREAD_ABI_VISIBILITY
 int __libcpp_condvar_destroy(__libcpp_condvar_t* __cv);
@@ -156,7 +158,7 @@
 // Execute once
 _LIBCPP_THREAD_ABI_VISIBILITY
 int __libcpp_execute_once(__libcpp_exec_once_flag *flag,
-                          void (*init_routine)(void));
+                          void (*init_routine)());
 
 // Thread id
 _LIBCPP_THREAD_ABI_VISIBILITY
@@ -287,7 +289,7 @@
 }
 
 int __libcpp_condvar_timedwait(__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,
-                               timespec *__ts)
+                               __libcpp_timespec_t *__ts)
 {
   return pthread_cond_timedwait(__cv, __m, __ts);
 }
@@ -299,7 +301,7 @@
 
 // Execute once
 int __libcpp_execute_once(__libcpp_exec_once_flag *flag,
-                          void (*init_routine)(void)) {
+                          void (*init_routine)()) {
   return pthread_once(flag, init_routine);
 }
 
@@ -356,7 +358,7 @@
 {
    using namespace chrono;
    seconds __s = duration_cast<seconds>(__ns);
-   timespec __ts;
+   __libcpp_timespec_t __ts;
    typedef decltype(__ts.tv_sec) ts_sec;
    _LIBCPP_CONSTEXPR ts_sec __ts_sec_max = numeric_limits<ts_sec>::max();
 
diff --git a/linux-x64/clang/include/c++/v1/__tree b/linux-x64/clang/include/c++/v1/__tree
index 9f0931e..4473ac3 100644
--- a/linux-x64/clang/include/c++/v1/__tree
+++ b/linux-x64/clang/include/c++/v1/__tree
@@ -971,7 +971,7 @@
 template<class _Tp, class _Compare>
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_DIAGNOSE_WARNING(!std::__invokable<_Compare const&, _Tp const&, _Tp const&>::value,
-        "the specified comparator type does not provide a const call operator")
+        "the specified comparator type does not provide a viable const call operator")
 #endif
 int __diagnose_non_const_comparator();
 
@@ -2414,7 +2414,7 @@
 
     __insert_node_at(__parent, __child,
                      static_cast<__node_base_pointer>(__ptr));
-    __nh.__release();
+    __nh.__release_ptr();
     return _InsertReturnType{iterator(__ptr), true, _NodeHandle()};
 }
 
@@ -2439,7 +2439,7 @@
         __insert_node_at(__parent, __child,
                          static_cast<__node_base_pointer>(__ptr));
         __r = __ptr;
-        __nh.__release();
+        __nh.__release_ptr();
     }
     return iterator(__r);
 }
@@ -2504,7 +2504,7 @@
     __node_base_pointer& __child = __find_leaf_high(
         __parent, _NodeTypes::__get_key(__ptr->__value_));
     __insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__ptr));
-    __nh.__release();
+    __nh.__release_ptr();
     return iterator(__ptr);
 }
 
@@ -2523,7 +2523,7 @@
     __node_base_pointer& __child = __find_leaf(__hint, __parent,
                                                _NodeTypes::__get_key(__ptr->__value_));
     __insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__ptr));
-    __nh.__release();
+    __nh.__release_ptr();
     return iterator(__ptr);
 }
 
diff --git a/linux-x64/clang/include/c++/v1/__tuple b/linux-x64/clang/include/c++/v1/__tuple
index 89134b5..196f3c2 100644
--- a/linux-x64/clang/include/c++/v1/__tuple
+++ b/linux-x64/clang/include/c++/v1/__tuple
@@ -53,27 +53,24 @@
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS tuple_size<const volatile _Tp> : public tuple_size<_Tp> {};
 #endif
 
-template <size_t _Ip, class _Tp> class _LIBCPP_TEMPLATE_VIS tuple_element;
+template <size_t _Ip, class _Tp> struct _LIBCPP_TEMPLATE_VIS tuple_element;
 
 template <size_t _Ip, class _Tp>
-class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const _Tp>
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const _Tp>
 {
-public:
-    typedef typename add_const<typename tuple_element<_Ip, _Tp>::type>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename add_const<typename tuple_element<_Ip, _Tp>::type>::type type;
 };
 
 template <size_t _Ip, class _Tp>
-class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, volatile _Tp>
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, volatile _Tp>
 {
-public:
-    typedef typename add_volatile<typename tuple_element<_Ip, _Tp>::type>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename add_volatile<typename tuple_element<_Ip, _Tp>::type>::type type;
 };
 
 template <size_t _Ip, class _Tp>
-class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp>
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp>
 {
-public:
-    typedef typename add_cv<typename tuple_element<_Ip, _Tp>::type>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename add_cv<typename tuple_element<_Ip, _Tp>::type>::type type;
 };
 
 template <class _Tp> struct __tuple_like : false_type {};
@@ -102,7 +99,7 @@
 
 template<typename _Tp, size_t ..._Extra> struct __repeat;
 template<typename _Tp, _Tp ..._Np, size_t ..._Extra> struct __repeat<__integer_sequence<_Tp, _Np...>, _Extra...> {
-  typedef __integer_sequence<_Tp,
+  typedef _LIBCPP_NODEBUG_TYPE __integer_sequence<_Tp,
                            _Np...,
                            sizeof...(_Np) + _Np...,
                            2 * sizeof...(_Np) + _Np...,
@@ -256,7 +253,7 @@
 namespace __indexer_detail {
 
 template <size_t _Idx, class _Tp>
-struct __indexed { using type = _Tp; };
+struct __indexed { using type _LIBCPP_NODEBUG_TYPE = _Tp; };
 
 template <class _Types, class _Indexes> struct __indexer;
 
@@ -271,7 +268,7 @@
 } // namespace __indexer_detail
 
 template <size_t _Idx, class ..._Types>
-using __type_pack_element = typename decltype(
+using __type_pack_element _LIBCPP_NODEBUG_TYPE = typename decltype(
     __indexer_detail::__at_index<_Idx>(
         __indexer_detail::__indexer<
             __tuple_types<_Types...>,
@@ -281,11 +278,10 @@
 #endif
 
 template <size_t _Ip, class ..._Types>
-class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, __tuple_types<_Types...>>
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, __tuple_types<_Types...>>
 {
-public:
     static_assert(_Ip < sizeof...(_Types), "tuple_element index out of range");
-    typedef __type_pack_element<_Ip, _Types...> type;
+    typedef _LIBCPP_NODEBUG_TYPE __type_pack_element<_Ip, _Types...> type;
 };
 
 
@@ -305,34 +301,34 @@
 };
 template <>
 struct __apply_cv_mf<false, true, false> {
-  template <class _Tp> using __apply = const _Tp;
+  template <class _Tp> using __apply _LIBCPP_NODEBUG_TYPE  = const _Tp;
 };
 template <>
 struct __apply_cv_mf<false, false, true> {
-  template <class _Tp> using __apply = volatile _Tp;
+  template <class _Tp> using __apply _LIBCPP_NODEBUG_TYPE  = volatile _Tp;
 };
 template <>
 struct __apply_cv_mf<false, true, true> {
-  template <class _Tp> using __apply = const volatile _Tp;
+  template <class _Tp> using __apply _LIBCPP_NODEBUG_TYPE  = const volatile _Tp;
 };
 template <>
 struct __apply_cv_mf<true, false, false> {
-  template <class _Tp> using __apply = _Tp&;
+  template <class _Tp> using __apply _LIBCPP_NODEBUG_TYPE  = _Tp&;
 };
 template <>
 struct __apply_cv_mf<true, true, false> {
-  template <class _Tp> using __apply = const _Tp&;
+  template <class _Tp> using __apply _LIBCPP_NODEBUG_TYPE  = const _Tp&;
 };
 template <>
 struct __apply_cv_mf<true, false, true> {
-  template <class _Tp> using __apply = volatile _Tp&;
+  template <class _Tp> using __apply _LIBCPP_NODEBUG_TYPE  = volatile _Tp&;
 };
 template <>
 struct __apply_cv_mf<true, true, true> {
-  template <class _Tp> using __apply = const volatile _Tp&;
+  template <class _Tp> using __apply _LIBCPP_NODEBUG_TYPE = const volatile _Tp&;
 };
 template <class _Tp, class _RawTp = typename remove_reference<_Tp>::type>
-using __apply_cv_t = __apply_cv_mf<
+using __apply_cv_t _LIBCPP_NODEBUG_TYPE  = __apply_cv_mf<
     is_lvalue_reference<_Tp>::value,
     is_const<_RawTp>::value,
     is_volatile<_RawTp>::value>;
@@ -351,7 +347,7 @@
 struct __make_tuple_types_flat<_Tuple<_Types...>, __tuple_indices<_Idx...>> {
   // Specialization for pair, tuple, and __tuple_types
   template <class _Tp, class _ApplyFn = __apply_cv_t<_Tp>>
-  using __apply_quals = __tuple_types<
+  using __apply_quals _LIBCPP_NODEBUG_TYPE = __tuple_types<
       typename _ApplyFn::template __apply<__type_pack_element<_Idx, _Types...>>...
     >;
 };
@@ -379,19 +375,19 @@
 
 template <class ..._Types, size_t _Ep>
 struct __make_tuple_types<tuple<_Types...>, _Ep, 0, true> {
-  typedef __tuple_types<_Types...> type;
+  typedef _LIBCPP_NODEBUG_TYPE __tuple_types<_Types...> type;
 };
 
 template <class ..._Types, size_t _Ep>
 struct __make_tuple_types<__tuple_types<_Types...>, _Ep, 0, true> {
-  typedef __tuple_types<_Types...> type;
+  typedef _LIBCPP_NODEBUG_TYPE __tuple_types<_Types...> type;
 };
 
 template <bool ..._Preds>
 struct __all_dummy;
 
 template <bool ..._Pred>
-using __all = is_same<__all_dummy<_Pred...>, __all_dummy<((void)_Pred, true)...>>;
+using __all = _IsSame<__all_dummy<_Pred...>, __all_dummy<((void)_Pred, true)...>>;
 
 struct __tuple_sfinae_base {
   template <template <class, class...> class _Trait,
@@ -456,15 +452,14 @@
 
 
 template <size_t _Ip, class ..._Tp>
-class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, tuple<_Tp...> >
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, tuple<_Tp...> >
 {
-public:
-    typedef typename tuple_element<_Ip, __tuple_types<_Tp...> >::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename tuple_element<_Ip, __tuple_types<_Tp...> >::type type;
 };
 
 #if _LIBCPP_STD_VER > 11
 template <size_t _Ip, class ..._Tp>
-using tuple_element_t = typename tuple_element <_Ip, _Tp...>::type;
+using tuple_element_t _LIBCPP_NODEBUG_TYPE  = typename tuple_element <_Ip, _Tp...>::type;
 #endif
 
 template <bool _IsTuple, class _SizeTrait, size_t _Expected>
@@ -476,7 +471,7 @@
 
 template <class _Tuple, size_t _ExpectedSize,
           class _RawTuple = typename __uncvref<_Tuple>::type>
-using __tuple_like_with_size = __tuple_like_with_size_imp<
+using __tuple_like_with_size _LIBCPP_NODEBUG_TYPE = __tuple_like_with_size_imp<
                                    __tuple_like<_RawTuple>::value,
                                    tuple_size<_RawTuple>, _ExpectedSize
                               >;
diff --git a/linux-x64/clang/include/c++/v1/algorithm b/linux-x64/clang/include/c++/v1/algorithm
index 7da753a..d17666a 100644
--- a/linux-x64/clang/include/c++/v1/algorithm
+++ b/linux-x64/clang/include/c++/v1/algorithm
@@ -780,11 +780,23 @@
 template <class _Compare>
 struct __debug_less
 {
-    _Compare __comp_;
+    _Compare &__comp_;
+    _LIBCPP_CONSTEXPR_AFTER_CXX17
     __debug_less(_Compare& __c) : __comp_(__c) {}
 
     template <class _Tp, class _Up>
-    bool operator()(const _Tp& __x, const _Up& __y)
+    _LIBCPP_CONSTEXPR_AFTER_CXX17
+    bool operator()(const _Tp& __x,  const _Up& __y)
+    {
+        bool __r = __comp_(__x, __y);
+        if (__r)
+            __do_compare_assert(0, __y, __x);
+        return __r;
+    }
+
+    template <class _Tp, class _Up>
+    _LIBCPP_CONSTEXPR_AFTER_CXX17
+    bool operator()(_Tp& __x,  _Up& __y)
     {
         bool __r = __comp_(__x, __y);
         if (__r)
@@ -793,25 +805,39 @@
     }
 
     template <class _LHS, class _RHS>
+    _LIBCPP_CONSTEXPR_AFTER_CXX17
     inline _LIBCPP_INLINE_VISIBILITY
     decltype((void)_VSTD::declval<_Compare&>()(
-        _VSTD::declval<_LHS const&>(), _VSTD::declval<_RHS const&>()))
-    __do_compare_assert(int, _LHS const& __l, _RHS const& __r) {
+        _VSTD::declval<_LHS &>(), _VSTD::declval<_RHS &>()))
+    __do_compare_assert(int, _LHS & __l, _RHS & __r) {
         _LIBCPP_ASSERT(!__comp_(__l, __r),
             "Comparator does not induce a strict weak ordering");
     }
 
     template <class _LHS, class _RHS>
+    _LIBCPP_CONSTEXPR_AFTER_CXX17
     inline _LIBCPP_INLINE_VISIBILITY
-    void __do_compare_assert(long, _LHS const&, _RHS const&) {}
+    void __do_compare_assert(long, _LHS &, _RHS &) {}
 };
 
-#endif  // _LIBCPP_DEBUG
+#endif // _LIBCPP_DEBUG
+
+template <class _Comp>
+struct __comp_ref_type {
+  // Pass the comparator by lvalue reference. Or in debug mode, using a
+  // debugging wrapper that stores a reference.
+#ifndef _LIBCPP_DEBUG
+  typedef typename add_lvalue_reference<_Comp>::type type;
+#else
+  typedef __debug_less<_Comp> type;
+#endif
+};
 
 // all_of
 
 template <class _InputIterator, class _Predicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
 {
@@ -824,7 +850,8 @@
 // any_of
 
 template <class _InputIterator, class _Predicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
 {
@@ -837,7 +864,8 @@
 // none_of
 
 template <class _InputIterator, class _Predicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
 {
@@ -882,7 +910,8 @@
 // find
 
 template <class _InputIterator, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _InputIterator
 find(_InputIterator __first, _InputIterator __last, const _Tp& __value_)
 {
@@ -895,7 +924,8 @@
 // find_if
 
 template <class _InputIterator, class _Predicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _InputIterator
 find_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
 {
@@ -908,7 +938,8 @@
 // find_if_not
 
 template<class _InputIterator, class _Predicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _InputIterator
 find_if_not(_InputIterator __first, _InputIterator __last, _Predicate __pred)
 {
@@ -1043,7 +1074,8 @@
 }
 
 template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator1
 find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
          _ForwardIterator2 __first2, _ForwardIterator2 __last2, _BinaryPredicate __pred)
@@ -1055,7 +1087,8 @@
 }
 
 template <class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator1
 find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
          _ForwardIterator2 __first2, _ForwardIterator2 __last2)
@@ -1081,7 +1114,8 @@
 
 
 template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY  _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator1
 find_first_of(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
               _ForwardIterator2 __first2, _ForwardIterator2 __last2, _BinaryPredicate __pred)
@@ -1090,7 +1124,8 @@
 }
 
 template <class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY  _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator1
 find_first_of(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
               _ForwardIterator2 __first2, _ForwardIterator2 __last2)
@@ -1103,7 +1138,8 @@
 // adjacent_find
 
 template <class _ForwardIterator, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 adjacent_find(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred)
 {
@@ -1121,7 +1157,8 @@
 }
 
 template <class _ForwardIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
 {
@@ -1132,7 +1169,8 @@
 // count
 
 template <class _InputIterator, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 typename iterator_traits<_InputIterator>::difference_type
 count(_InputIterator __first, _InputIterator __last, const _Tp& __value_)
 {
@@ -1146,7 +1184,8 @@
 // count_if
 
 template <class _InputIterator, class _Predicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 typename iterator_traits<_InputIterator>::difference_type
 count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
 {
@@ -1160,7 +1199,8 @@
 // mismatch
 
 template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 pair<_InputIterator1, _InputIterator2>
 mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
          _InputIterator2 __first2, _BinaryPredicate __pred)
@@ -1172,7 +1212,8 @@
 }
 
 template <class _InputIterator1, class _InputIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 pair<_InputIterator1, _InputIterator2>
 mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2)
 {
@@ -1183,7 +1224,8 @@
 
 #if _LIBCPP_STD_VER > 11
 template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 pair<_InputIterator1, _InputIterator2>
 mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
          _InputIterator2 __first2, _InputIterator2 __last2,
@@ -1196,7 +1238,8 @@
 }
 
 template <class _InputIterator1, class _InputIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 pair<_InputIterator1, _InputIterator2>
 mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
          _InputIterator2 __first2, _InputIterator2 __last2)
@@ -1210,7 +1253,8 @@
 // equal
 
 template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __pred)
 {
@@ -1221,7 +1265,8 @@
 }
 
 template <class _InputIterator1, class _InputIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2)
 {
@@ -1259,7 +1304,8 @@
 }
 
 template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 equal(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2, _BinaryPredicate __pred )
@@ -1271,7 +1317,8 @@
 }
 
 template <class _InputIterator1, class _InputIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 equal(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2)
@@ -1287,7 +1334,7 @@
 // is_permutation
 
 template<class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
-_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
                _ForwardIterator2 __first2, _BinaryPredicate __pred)
 {
@@ -1334,7 +1381,8 @@
 }
 
 template<class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
                _ForwardIterator2 __first2)
@@ -1413,7 +1461,8 @@
 }
 
 template<class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
                _ForwardIterator2 __first2, _ForwardIterator2 __last2,
@@ -1426,7 +1475,8 @@
 }
 
 template<class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
                _ForwardIterator2 __first2, _ForwardIterator2 __last2)
@@ -1444,7 +1494,8 @@
 // __search is in <functional>
 
 template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator1
 search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
        _ForwardIterator2 __first2, _ForwardIterator2 __last2, _BinaryPredicate __pred)
@@ -1457,7 +1508,8 @@
 }
 
 template <class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator1
 search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
        _ForwardIterator2 __first2, _ForwardIterator2 __last2)
@@ -1470,7 +1522,7 @@
 
 #if _LIBCPP_STD_VER > 14
 template <class _ForwardIterator, class _Searcher>
-_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator search(_ForwardIterator __f, _ForwardIterator __l, const _Searcher &__s)
 { return __s(__f, __l).first; }
 #endif
@@ -1555,7 +1607,8 @@
 }
 
 template <class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 search_n(_ForwardIterator __first, _ForwardIterator __last,
          _Size __count, const _Tp& __value_, _BinaryPredicate __pred)
@@ -1566,7 +1619,8 @@
 }
 
 template <class _ForwardIterator, class _Size, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 search_n(_ForwardIterator __first, _ForwardIterator __last, _Size __count, const _Tp& __value_)
 {
@@ -1995,7 +2049,7 @@
 // generate_n
 
 template <class _OutputIterator, class _Size, class _Generator>
-inline _LIBCPP_INLINE_VISIBILITY  _LIBCPP_CONSTEXPR_AFTER_CXX17
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _OutputIterator
 generate_n(_OutputIterator __first, _Size __orig_n, _Generator __gen)
 {
@@ -2009,7 +2063,7 @@
 // remove
 
 template <class _ForwardIterator, class _Tp>
-_LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
 remove(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_)
 {
     __first = _VSTD::find(__first, __last, __value_);
@@ -2031,7 +2085,7 @@
 // remove_if
 
 template <class _ForwardIterator, class _Predicate>
-_LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
 remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
 {
     __first = _VSTD::find_if<_ForwardIterator, typename add_lvalue_reference<_Predicate>::type>
@@ -2090,7 +2144,7 @@
 // unique
 
 template <class _ForwardIterator, class _BinaryPredicate>
-_LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
 unique(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred)
 {
     __first = _VSTD::adjacent_find<_ForwardIterator, typename add_lvalue_reference<_BinaryPredicate>::type>
@@ -2109,7 +2163,8 @@
 }
 
 template <class _ForwardIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 unique(_ForwardIterator __first, _ForwardIterator __last)
 {
@@ -2432,7 +2487,8 @@
 // min_element
 
 template <class _ForwardIterator, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _ForwardIterator
 min_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp)
 {
@@ -2449,7 +2505,8 @@
 }
 
 template <class _ForwardIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _ForwardIterator
 min_element(_ForwardIterator __first, _ForwardIterator __last)
 {
@@ -2460,7 +2517,8 @@
 // min
 
 template <class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 const _Tp&
 min(const _Tp& __a, const _Tp& __b, _Compare __comp)
 {
@@ -2468,7 +2526,8 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 const _Tp&
 min(const _Tp& __a, const _Tp& __b)
 {
@@ -2478,7 +2537,8 @@
 #ifndef _LIBCPP_CXX03_LANG
 
 template<class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _Tp
 min(initializer_list<_Tp> __t, _Compare __comp)
 {
@@ -2486,7 +2546,8 @@
 }
 
 template<class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _Tp
 min(initializer_list<_Tp> __t)
 {
@@ -2498,7 +2559,8 @@
 // max_element
 
 template <class _ForwardIterator, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _ForwardIterator
 max_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp)
 {
@@ -2516,7 +2578,8 @@
 
 
 template <class _ForwardIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _ForwardIterator
 max_element(_ForwardIterator __first, _ForwardIterator __last)
 {
@@ -2527,7 +2590,8 @@
 // max
 
 template <class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 const _Tp&
 max(const _Tp& __a, const _Tp& __b, _Compare __comp)
 {
@@ -2535,7 +2599,8 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 const _Tp&
 max(const _Tp& __a, const _Tp& __b)
 {
@@ -2545,7 +2610,8 @@
 #ifndef _LIBCPP_CXX03_LANG
 
 template<class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _Tp
 max(initializer_list<_Tp> __t, _Compare __comp)
 {
@@ -2553,7 +2619,8 @@
 }
 
 template<class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _Tp
 max(initializer_list<_Tp> __t)
 {
@@ -2565,7 +2632,8 @@
 #if _LIBCPP_STD_VER > 14
 // clamp
 template<class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
 const _Tp&
 clamp(const _Tp& __v, const _Tp& __lo, const _Tp& __hi, _Compare __comp)
 {
@@ -2575,7 +2643,8 @@
 }
 
 template<class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
 const _Tp&
 clamp(const _Tp& __v, const _Tp& __lo, const _Tp& __hi)
 {
@@ -2586,7 +2655,7 @@
 // minmax_element
 
 template <class _ForwardIterator, class _Compare>
-_LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX11
 std::pair<_ForwardIterator, _ForwardIterator>
 minmax_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp)
 {
@@ -2636,7 +2705,8 @@
 }
 
 template <class _ForwardIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 std::pair<_ForwardIterator, _ForwardIterator>
 minmax_element(_ForwardIterator __first, _ForwardIterator __last)
 {
@@ -2647,7 +2717,8 @@
 // minmax
 
 template<class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 pair<const _Tp&, const _Tp&>
 minmax(const _Tp& __a, const _Tp& __b, _Compare __comp)
 {
@@ -2656,7 +2727,8 @@
 }
 
 template<class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 pair<const _Tp&, const _Tp&>
 minmax(const _Tp& __a, const _Tp& __b)
 {
@@ -2666,7 +2738,8 @@
 #ifndef _LIBCPP_CXX03_LANG
 
 template<class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 pair<_Tp, _Tp>
 minmax(initializer_list<_Tp> __t, _Compare __comp)
 {
@@ -2703,7 +2776,8 @@
 }
 
 template<class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 pair<_Tp, _Tp>
 minmax(initializer_list<_Tp> __t)
 {
@@ -3107,11 +3181,7 @@
 
 template<class _RandomAccessIterator, class _UniformRandomNumberGenerator>
     void shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
-#ifndef _LIBCPP_CXX03_LANG
                  _UniformRandomNumberGenerator&& __g)
-#else
-                 _UniformRandomNumberGenerator& __g)
-#endif
 {
     typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type;
     typedef uniform_int_distribution<ptrdiff_t> _Dp;
@@ -3130,7 +3200,7 @@
 }
 
 template <class _InputIterator, class _Predicate>
-_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 is_partitioned(_InputIterator __first, _InputIterator __last, _Predicate __pred)
 {
     for (; __first != __last; ++__first)
@@ -3538,7 +3608,7 @@
 // is_sorted_until
 
 template <class _ForwardIterator, class _Compare>
-_LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
 is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp)
 {
     if (__first != __last)
@@ -3555,7 +3625,8 @@
 }
 
 template<class _ForwardIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 is_sorted_until(_ForwardIterator __first, _ForwardIterator __last)
 {
@@ -3565,7 +3636,8 @@
 // is_sorted
 
 template <class _ForwardIterator, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 is_sorted(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp)
 {
@@ -3573,7 +3645,8 @@
 }
 
 template<class _ForwardIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 is_sorted(_ForwardIterator __first, _ForwardIterator __last)
 {
@@ -4020,14 +4093,8 @@
 void
 sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __sort<_Comp_ref>(__first, __last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
-    __sort<_Comp_ref>(__first, __last, __comp);
-#endif  // _LIBCPP_DEBUG
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
+    _VSTD::__sort<_Comp_ref>(__first, __last, _Comp_ref(__comp));
 }
 
 template <class _RandomAccessIterator>
@@ -4122,7 +4189,8 @@
 }
 
 template <class _ForwardIterator, class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_, _Compare __comp)
 {
@@ -4131,7 +4199,8 @@
 }
 
 template <class _ForwardIterator, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_)
 {
@@ -4164,7 +4233,8 @@
 }
 
 template <class _ForwardIterator, class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_, _Compare __comp)
 {
@@ -4173,7 +4243,8 @@
 }
 
 template <class _ForwardIterator, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator
 upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_)
 {
@@ -4218,22 +4289,18 @@
 }
 
 template <class _ForwardIterator, class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 pair<_ForwardIterator, _ForwardIterator>
 equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __equal_range<_Comp_ref>(__first, __last, __value_, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __equal_range<_Comp_ref>(__first, __last, __value_, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _ForwardIterator, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 pair<_ForwardIterator, _ForwardIterator>
 equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_)
 {
@@ -4253,22 +4320,18 @@
 }
 
 template <class _ForwardIterator, class _Tp, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __binary_search<_Comp_ref>(__first, __last, __value_, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __binary_search<_Comp_ref>(__first, __last, __value_, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _ForwardIterator, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_)
 {
@@ -4307,14 +4370,8 @@
 merge(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2, _OutputIterator __result, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return _VSTD::__merge<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return _VSTD::__merge<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator1, class _InputIterator2, class _OutputIterator>
@@ -4489,17 +4546,9 @@
     difference_type __buf_size = _VSTD::min(__len1, __len2);
     pair<value_type*, ptrdiff_t> __buf = _VSTD::get_temporary_buffer<value_type>(__buf_size);
     unique_ptr<value_type, __return_temporary_buffer> __h(__buf.first);
-
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return _VSTD::__inplace_merge<_Comp_ref>(__first, __middle, __last, __c, __len1, __len2,
-                                            __buf.first, __buf.second);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return _VSTD::__inplace_merge<_Comp_ref>(__first, __middle, __last, __comp, __len1, __len2,
                                             __buf.first, __buf.second);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _BidirectionalIterator>
@@ -4701,14 +4750,8 @@
         __buf = _VSTD::get_temporary_buffer<value_type>(__len);
         __h.reset(__buf.first);
     }
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __stable_sort<_Comp_ref>(__first, __last, __c, __len, __buf.first, __buf.second);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     __stable_sort<_Comp_ref>(__first, __last, __comp, __len, __buf.first, __buf.second);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _RandomAccessIterator>
@@ -4722,7 +4765,7 @@
 // is_heap_until
 
 template <class _RandomAccessIterator, class _Compare>
-_LIBCPP_CONSTEXPR_AFTER_CXX17 _RandomAccessIterator
+_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 _RandomAccessIterator
 is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
 {
     typedef typename _VSTD::iterator_traits<_RandomAccessIterator>::difference_type difference_type;
@@ -4749,7 +4792,8 @@
 }
 
 template<class _RandomAccessIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _RandomAccessIterator
 is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last)
 {
@@ -4759,7 +4803,8 @@
 // is_heap
 
 template <class _RandomAccessIterator, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
 {
@@ -4767,7 +4812,8 @@
 }
 
 template<class _RandomAccessIterator>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
 {
@@ -4808,14 +4854,8 @@
 void
 push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __sift_up<_Comp_ref>(__first, __last, __c, __last - __first);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     __sift_up<_Comp_ref>(__first, __last, __comp, __last - __first);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _RandomAccessIterator>
@@ -4901,14 +4941,8 @@
 void
 pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __pop_heap<_Comp_ref>(__first, __last, __c, __last - __first);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     __pop_heap<_Comp_ref>(__first, __last, __comp, __last - __first);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _RandomAccessIterator>
@@ -4942,14 +4976,8 @@
 void
 make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __make_heap<_Comp_ref>(__first, __last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     __make_heap<_Comp_ref>(__first, __last, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _RandomAccessIterator>
@@ -4976,14 +5004,8 @@
 void
 sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __sort_heap<_Comp_ref>(__first, __last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     __sort_heap<_Comp_ref>(__first, __last, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _RandomAccessIterator>
@@ -5020,14 +5042,8 @@
 partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, _RandomAccessIterator __last,
              _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __partial_sort<_Comp_ref>(__first, __middle, __last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     __partial_sort<_Comp_ref>(__first, __middle, __last, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _RandomAccessIterator>
@@ -5070,14 +5086,8 @@
 partial_sort_copy(_InputIterator __first, _InputIterator __last,
                   _RandomAccessIterator __result_first, _RandomAccessIterator __result_last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __partial_sort_copy<_Comp_ref>(__first, __last, __result_first, __result_last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __partial_sort_copy<_Comp_ref>(__first, __last, __result_first, __result_last, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator, class _RandomAccessIterator>
@@ -5284,14 +5294,8 @@
 void
 nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    __nth_element<_Comp_ref>(__first, __nth, __last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     __nth_element<_Comp_ref>(__first, __nth, __last, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _RandomAccessIterator>
@@ -5320,23 +5324,19 @@
 }
 
 template <class _InputIterator1, class _InputIterator2, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2,
          _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __includes<_Comp_ref>(__first1, __last1, __first2, __last2, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __includes<_Comp_ref>(__first1, __last1, __first2, __last2, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator1, class _InputIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2)
 {
@@ -5378,14 +5378,8 @@
 set_union(_InputIterator1 __first1, _InputIterator1 __last1,
           _InputIterator2 __first2, _InputIterator2 __last2, _OutputIterator __result, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __set_union<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __set_union<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator1, class _InputIterator2, class _OutputIterator>
@@ -5430,14 +5424,8 @@
 set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
                  _InputIterator2 __first2, _InputIterator2 __last2, _OutputIterator __result, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __set_intersection<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __set_intersection<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator1, class _InputIterator2, class _OutputIterator>
@@ -5484,14 +5472,8 @@
 set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
                _InputIterator2 __first2, _InputIterator2 __last2, _OutputIterator __result, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __set_difference<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __set_difference<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator1, class _InputIterator2, class _OutputIterator>
@@ -5543,14 +5525,8 @@
 set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
                          _InputIterator2 __first2, _InputIterator2 __last2, _OutputIterator __result, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __set_symmetric_difference<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __set_symmetric_difference<_Comp_ref>(__first1, __last1, __first2, __last2, __result, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator1, class _InputIterator2, class _OutputIterator>
@@ -5582,23 +5558,19 @@
 }
 
 template <class _InputIterator1, class _InputIterator2, class _Compare>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 lexicographical_compare(_InputIterator1 __first1, _InputIterator1 __last1,
                         _InputIterator2 __first2, _InputIterator2 __last2, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __lexicographical_compare<_Comp_ref>(__first1, __last1, __first2, __last2, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __lexicographical_compare<_Comp_ref>(__first1, __last1, __first2, __last2, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _InputIterator1, class _InputIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_LIBCPP_NODISCARD_EXT inline
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 bool
 lexicographical_compare(_InputIterator1 __first1, _InputIterator1 __last1,
                         _InputIterator2 __first2, _InputIterator2 __last2)
@@ -5642,14 +5614,8 @@
 bool
 next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __next_permutation<_Comp_ref>(__first, __last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __next_permutation<_Comp_ref>(__first, __last, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _BidirectionalIterator>
@@ -5695,14 +5661,8 @@
 bool
 prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp)
 {
-#ifdef _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<__debug_less<_Compare> >::type _Comp_ref;
-    __debug_less<_Compare> __c(__comp);
-    return __prev_permutation<_Comp_ref>(__first, __last, __c);
-#else  // _LIBCPP_DEBUG
-    typedef typename add_lvalue_reference<_Compare>::type _Comp_ref;
+    typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
     return __prev_permutation<_Comp_ref>(__first, __last, __comp);
-#endif  // _LIBCPP_DEBUG
 }
 
 template <class _BidirectionalIterator>
diff --git a/linux-x64/clang/include/c++/v1/any b/linux-x64/clang/include/c++/v1/any
index f3518c3..36b07c9 100644
--- a/linux-x64/clang/include/c++/v1/any
+++ b/linux-x64/clang/include/c++/v1/any
@@ -507,7 +507,7 @@
 template <class _ValueType, class ..._Args, class _Tp, class>
 any::any(in_place_type_t<_ValueType>, _Args&&... __args) {
   __any_imp::_Handler<_Tp>::__create(*this, _VSTD::forward<_Args>(__args)...);
-};
+}
 
 template <class _ValueType, class _Up, class ..._Args, class _Tp, class>
 any::any(in_place_type_t<_ValueType>, initializer_list<_Up> __il, _Args&&... __args) {
diff --git a/linux-x64/clang/include/c++/v1/array b/linux-x64/clang/include/c++/v1/array
index 05c4b65..88e9d57 100644
--- a/linux-x64/clang/include/c++/v1/array
+++ b/linux-x64/clang/include/c++/v1/array
@@ -91,7 +91,7 @@
   void swap(array<T,N>& x, array<T,N>& y) noexcept(noexcept(x.swap(y))); // C++17
 
 template <class T> struct tuple_size;
-template <size_t I, class T> class tuple_element;
+template <size_t I, class T> struct tuple_element;
 template <class T, size_t N> struct tuple_size<array<T, N>>;
 template <size_t I, class T, size_t N> struct tuple_element<I, array<T, N>>;
 template <size_t I, class T, size_t N> T& get(array<T, N>&) noexcept; // constexpr in C++14
@@ -190,17 +190,17 @@
 
     // element access:
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
-    reference operator[](size_type __n)             {return __elems_[__n];}
+    reference operator[](size_type __n)             _NOEXCEPT {return __elems_[__n];}
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
-    const_reference operator[](size_type __n) const {return __elems_[__n];}
+    const_reference operator[](size_type __n) const _NOEXCEPT {return __elems_[__n];}
 
     _LIBCPP_CONSTEXPR_AFTER_CXX14       reference at(size_type __n);
     _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference at(size_type __n) const;
 
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 reference front()             {return __elems_[0];}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference front() const {return __elems_[0];}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 reference back()              {return __elems_[_Size - 1];}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference back() const  {return __elems_[_Size - 1];}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 reference front()             _NOEXCEPT {return __elems_[0];}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference front() const _NOEXCEPT {return __elems_[0];}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 reference back()              _NOEXCEPT {return __elems_[_Size - 1];}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference back() const  _NOEXCEPT {return __elems_[_Size - 1];}
 
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
     value_type* data() _NOEXCEPT {return __elems_;}
@@ -303,13 +303,13 @@
 
     // element access:
     _LIBCPP_INLINE_VISIBILITY
-    reference operator[](size_type) {
+    reference operator[](size_type) _NOEXCEPT {
       _LIBCPP_ASSERT(false, "cannot call array<T, 0>::operator[] on a zero-sized array");
       _LIBCPP_UNREACHABLE();
     }
 
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
-    const_reference operator[](size_type) const {
+    const_reference operator[](size_type) const _NOEXCEPT {
       _LIBCPP_ASSERT(false, "cannot call array<T, 0>::operator[] on a zero-sized array");
       _LIBCPP_UNREACHABLE();
     }
@@ -327,25 +327,25 @@
     }
 
     _LIBCPP_INLINE_VISIBILITY
-    reference front() {
+    reference front() _NOEXCEPT {
       _LIBCPP_ASSERT(false, "cannot call array<T, 0>::front() on a zero-sized array");
       _LIBCPP_UNREACHABLE();
     }
 
     _LIBCPP_INLINE_VISIBILITY
-    const_reference front() const {
+    const_reference front() const _NOEXCEPT {
       _LIBCPP_ASSERT(false, "cannot call array<T, 0>::front() on a zero-sized array");
       _LIBCPP_UNREACHABLE();
     }
 
     _LIBCPP_INLINE_VISIBILITY
-    reference back() {
+    reference back() _NOEXCEPT {
       _LIBCPP_ASSERT(false, "cannot call array<T, 0>::back() on a zero-sized array");
       _LIBCPP_UNREACHABLE();
     }
 
     _LIBCPP_INLINE_VISIBILITY
-    const_reference back() const {
+    const_reference back() const _NOEXCEPT {
       _LIBCPP_ASSERT(false, "cannot call array<T, 0>::back() on a zero-sized array");
       _LIBCPP_UNREACHABLE();
     }
@@ -433,10 +433,9 @@
     : public integral_constant<size_t, _Size> {};
 
 template <size_t _Ip, class _Tp, size_t _Size>
-class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> >
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> >
 {
     static_assert(_Ip < _Size, "Index out of bounds in std::tuple_element<> (std::array)");
-public:
     typedef _Tp type;
 };
 
diff --git a/linux-x64/clang/include/c++/v1/atomic b/linux-x64/clang/include/c++/v1/atomic
index 60057f1..afb431e 100644
--- a/linux-x64/clang/include/c++/v1/atomic
+++ b/linux-x64/clang/include/c++/v1/atomic
@@ -20,17 +20,24 @@
 
 #define __cpp_lib_atomic_is_always_lock_free // as specified by SG10
 
-// order and consistency
+ // order and consistency
 
-typedef enum memory_order
-{
-    memory_order_relaxed,
-    memory_order_consume,  // load-consume
-    memory_order_acquire,  // load-acquire
-    memory_order_release,  // store-release
-    memory_order_acq_rel,  // store-release load-acquire
-    memory_order_seq_cst   // store-release load-acquire
-} memory_order;
+ enum memory_order: unspecified // enum class in C++20
+ {
+    relaxed,
+    consume, // load-consume
+    acquire, // load-acquire
+    release, // store-release
+    acq_rel, // store-release load-acquire
+    seq_cst // store-release load-acquire
+ };
+
+ inline constexpr auto memory_order_relaxed = memory_order::relaxed;
+ inline constexpr auto memory_order_consume = memory_order::consume;
+ inline constexpr auto memory_order_acquire = memory_order::acquire;
+ inline constexpr auto memory_order_release = memory_order::release;
+ inline constexpr auto memory_order_acq_rel = memory_order::acq_rel;
+ inline constexpr auto memory_order_seq_cst = memory_order::seq_cst;
 
 template <class T> T kill_dependency(T y) noexcept;
 
@@ -550,13 +557,13 @@
 #endif
 
 #ifdef _LIBCPP_HAS_NO_THREADS
-#error <atomic> is not supported on this single threaded system
+# error <atomic> is not supported on this single threaded system
 #endif
-#if !defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP)
-#error <atomic> is not implemented
+#ifdef _LIBCPP_HAS_NO_ATOMIC_HEADER
+# error <atomic> is not implemented
 #endif
 #ifdef kill_dependency
-#error C++ standard library is incompatible with <stdatomic.h>
+# error C++ standard library is incompatible with <stdatomic.h>
 #endif
 
 #define _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) \
@@ -577,49 +584,94 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-typedef enum memory_order
-{
-    memory_order_relaxed, memory_order_consume, memory_order_acquire,
-    memory_order_release, memory_order_acq_rel, memory_order_seq_cst
+// Figure out what the underlying type for `memory_order` would be if it were
+// declared as an unscoped enum (accounting for -fshort-enums). Use this result
+// to pin the underlying type in C++20.
+enum __legacy_memory_order {
+    __mo_relaxed,
+    __mo_consume,
+    __mo_acquire,
+    __mo_release,
+    __mo_acq_rel,
+    __mo_seq_cst
+};
+
+typedef underlying_type<__legacy_memory_order>::type __memory_order_underlying_t;
+
+#if _LIBCPP_STD_VER > 17
+
+enum class memory_order : __memory_order_underlying_t {
+  relaxed = __mo_relaxed,
+  consume = __mo_consume,
+  acquire = __mo_acquire,
+  release = __mo_release,
+  acq_rel = __mo_acq_rel,
+  seq_cst = __mo_seq_cst
+};
+
+inline constexpr auto memory_order_relaxed = memory_order::relaxed;
+inline constexpr auto memory_order_consume = memory_order::consume;
+inline constexpr auto memory_order_acquire = memory_order::acquire;
+inline constexpr auto memory_order_release = memory_order::release;
+inline constexpr auto memory_order_acq_rel = memory_order::acq_rel;
+inline constexpr auto memory_order_seq_cst = memory_order::seq_cst;
+
+#else
+
+typedef enum memory_order {
+  memory_order_relaxed = __mo_relaxed,
+  memory_order_consume = __mo_consume,
+  memory_order_acquire = __mo_acquire,
+  memory_order_release = __mo_release,
+  memory_order_acq_rel = __mo_acq_rel,
+  memory_order_seq_cst = __mo_seq_cst,
 } memory_order;
 
-#if defined(_LIBCPP_HAS_GCC_ATOMIC_IMP)
-namespace __gcc_atomic {
-template <typename _Tp>
-struct __gcc_atomic_t {
+#endif // _LIBCPP_STD_VER > 17
 
-#if _GNUC_VER >= 501
-    static_assert(is_trivially_copyable<_Tp>::value,
-      "std::atomic<Tp> requires that 'Tp' be a trivially copyable type");
+static_assert((is_same<underlying_type<memory_order>::type, __memory_order_underlying_t>::value),
+  "unexpected underlying type for std::memory_order");
+
+#if defined(_LIBCPP_HAS_GCC_ATOMIC_IMP) || \
+	defined(_LIBCPP_ATOMIC_ONLY_USE_BUILTINS)
+
+// [atomics.types.generic]p1 guarantees _Tp is trivially copyable. Because
+// the default operator= in an object is not volatile, a byte-by-byte copy
+// is required.
+template <typename _Tp, typename _Tv> _LIBCPP_INLINE_VISIBILITY
+typename enable_if<is_assignable<_Tp&, _Tv>::value>::type
+__cxx_atomic_assign_volatile(_Tp& __a_value, _Tv const& __val) {
+  __a_value = __val;
+}
+template <typename _Tp, typename _Tv> _LIBCPP_INLINE_VISIBILITY
+typename enable_if<is_assignable<_Tp&, _Tv>::value>::type
+__cxx_atomic_assign_volatile(_Tp volatile& __a_value, _Tv volatile const& __val) {
+  volatile char* __to = reinterpret_cast<volatile char*>(&__a_value);
+  volatile char* __end = __to + sizeof(_Tp);
+  volatile const char* __from = reinterpret_cast<volatile const char*>(&__val);
+  while (__to != __end)
+    *__to++ = *__from++;
+}
+
 #endif
 
+#if defined(_LIBCPP_HAS_GCC_ATOMIC_IMP)
+
+template <typename _Tp>
+struct __cxx_atomic_base_impl {
+
   _LIBCPP_INLINE_VISIBILITY
 #ifndef _LIBCPP_CXX03_LANG
-    __gcc_atomic_t() _NOEXCEPT = default;
+    __cxx_atomic_base_impl() _NOEXCEPT = default;
 #else
-    __gcc_atomic_t() _NOEXCEPT : __a_value() {}
+    __cxx_atomic_base_impl() _NOEXCEPT : __a_value() {}
 #endif // _LIBCPP_CXX03_LANG
-  _LIBCPP_CONSTEXPR explicit __gcc_atomic_t(_Tp value) _NOEXCEPT
+  _LIBCPP_CONSTEXPR explicit __cxx_atomic_base_impl(_Tp value) _NOEXCEPT
     : __a_value(value) {}
   _Tp __a_value;
 };
-#define _Atomic(x) __gcc_atomic::__gcc_atomic_t<x>
 
-template <typename _Tp> _Tp __create();
-
-template <typename _Tp, typename _Td>
-typename enable_if<sizeof(_Tp()->__a_value = __create<_Td>()), char>::type
-    __test_atomic_assignable(int);
-template <typename _Tp, typename _Up>
-__two __test_atomic_assignable(...);
-
-template <typename _Tp, typename _Td>
-struct __can_assign {
-  static const bool value =
-      sizeof(__test_atomic_assignable<_Tp, _Td>(1)) == sizeof(char);
-};
-
-static inline _LIBCPP_CONSTEXPR int __to_gcc_order(memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR int __to_gcc_order(memory_order __order) {
   // Avoid switch statement to make this a constexpr.
   return __order == memory_order_relaxed ? __ATOMIC_RELAXED:
          (__order == memory_order_acquire ? __ATOMIC_ACQUIRE:
@@ -629,7 +681,7 @@
               __ATOMIC_CONSUME))));
 }
 
-static inline _LIBCPP_CONSTEXPR int __to_gcc_failure_order(memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR int __to_gcc_failure_order(memory_order __order) {
   // Avoid switch statement to make this a constexpr.
   return __order == memory_order_relaxed ? __ATOMIC_RELAXED:
          (__order == memory_order_acquire ? __ATOMIC_ACQUIRE:
@@ -639,133 +691,125 @@
               __ATOMIC_CONSUME))));
 }
 
-} // namespace __gcc_atomic
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_init(volatile __cxx_atomic_base_impl<_Tp>* __a,  _Tp __val) {
+  __cxx_atomic_assign_volatile(__a->__a_value, __val);
+}
 
 template <typename _Tp>
-static inline
-typename enable_if<
-    __gcc_atomic::__can_assign<volatile _Atomic(_Tp)*, _Tp>::value>::type
-__c11_atomic_init(volatile _Atomic(_Tp)* __a,  _Tp __val) {
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp>* __a,  _Tp __val) {
   __a->__a_value = __val;
 }
 
-template <typename _Tp>
-static inline
-typename enable_if<
-    !__gcc_atomic::__can_assign<volatile _Atomic(_Tp)*, _Tp>::value &&
-     __gcc_atomic::__can_assign<         _Atomic(_Tp)*, _Tp>::value>::type
-__c11_atomic_init(volatile _Atomic(_Tp)* __a,  _Tp __val) {
-  // [atomics.types.generic]p1 guarantees _Tp is trivially copyable. Because
-  // the default operator= in an object is not volatile, a byte-by-byte copy
-  // is required.
-  volatile char* to = reinterpret_cast<volatile char*>(&__a->__a_value);
-  volatile char* end = to + sizeof(_Tp);
-  char* from = reinterpret_cast<char*>(&__val);
-  while (to != end) {
-    *to++ = *from++;
-  }
+_LIBCPP_INLINE_VISIBILITY inline
+void __cxx_atomic_thread_fence(memory_order __order) {
+  __atomic_thread_fence(__to_gcc_order(__order));
+}
+
+_LIBCPP_INLINE_VISIBILITY inline
+void __cxx_atomic_signal_fence(memory_order __order) {
+  __atomic_signal_fence(__to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline void __c11_atomic_init(_Atomic(_Tp)* __a,  _Tp __val) {
-  __a->__a_value = __val;
-}
-
-static inline void __c11_atomic_thread_fence(memory_order __order) {
-  __atomic_thread_fence(__gcc_atomic::__to_gcc_order(__order));
-}
-
-static inline void __c11_atomic_signal_fence(memory_order __order) {
-  __atomic_signal_fence(__gcc_atomic::__to_gcc_order(__order));
-}
-
-template <typename _Tp>
-static inline void __c11_atomic_store(volatile _Atomic(_Tp)* __a,  _Tp __val,
-                                      memory_order __order) {
-  return __atomic_store(&__a->__a_value, &__val,
-                        __gcc_atomic::__to_gcc_order(__order));
-}
-
-template <typename _Tp>
-static inline void __c11_atomic_store(_Atomic(_Tp)* __a,  _Tp __val,
-                                      memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_store(volatile __cxx_atomic_base_impl<_Tp>* __a,  _Tp __val,
+                        memory_order __order) {
   __atomic_store(&__a->__a_value, &__val,
-                 __gcc_atomic::__to_gcc_order(__order));
+                 __to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_load(const volatile _Atomic(_Tp)* __a,
-                                    memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_store(__cxx_atomic_base_impl<_Tp>* __a,  _Tp __val,
+                        memory_order __order) {
+  __atomic_store(&__a->__a_value, &__val,
+                 __to_gcc_order(__order));
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_load(const volatile __cxx_atomic_base_impl<_Tp>* __a,
+                      memory_order __order) {
   _Tp __ret;
   __atomic_load(&__a->__a_value, &__ret,
-                __gcc_atomic::__to_gcc_order(__order));
+                __to_gcc_order(__order));
   return __ret;
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_load(const _Atomic(_Tp)* __a, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_load(const __cxx_atomic_base_impl<_Tp>* __a, memory_order __order) {
   _Tp __ret;
   __atomic_load(&__a->__a_value, &__ret,
-                __gcc_atomic::__to_gcc_order(__order));
+                __to_gcc_order(__order));
   return __ret;
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_exchange(volatile _Atomic(_Tp)* __a,
-                                        _Tp __value, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_exchange(volatile __cxx_atomic_base_impl<_Tp>* __a,
+                          _Tp __value, memory_order __order) {
   _Tp __ret;
   __atomic_exchange(&__a->__a_value, &__value, &__ret,
-                    __gcc_atomic::__to_gcc_order(__order));
+                    __to_gcc_order(__order));
   return __ret;
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_exchange(_Atomic(_Tp)* __a, _Tp __value,
-                                        memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp>* __a, _Tp __value,
+                          memory_order __order) {
   _Tp __ret;
   __atomic_exchange(&__a->__a_value, &__value, &__ret,
-                    __gcc_atomic::__to_gcc_order(__order));
+                    __to_gcc_order(__order));
   return __ret;
 }
 
 template <typename _Tp>
-static inline bool __c11_atomic_compare_exchange_strong(
-    volatile _Atomic(_Tp)* __a, _Tp* __expected, _Tp __value,
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_strong(
+    volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value,
     memory_order __success, memory_order __failure) {
   return __atomic_compare_exchange(&__a->__a_value, __expected, &__value,
                                    false,
-                                   __gcc_atomic::__to_gcc_order(__success),
-                                   __gcc_atomic::__to_gcc_failure_order(__failure));
+                                   __to_gcc_order(__success),
+                                   __to_gcc_failure_order(__failure));
 }
 
 template <typename _Tp>
-static inline bool __c11_atomic_compare_exchange_strong(
-    _Atomic(_Tp)* __a, _Tp* __expected, _Tp __value, memory_order __success,
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_strong(
+    __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success,
     memory_order __failure) {
   return __atomic_compare_exchange(&__a->__a_value, __expected, &__value,
                                    false,
-                                   __gcc_atomic::__to_gcc_order(__success),
-                                   __gcc_atomic::__to_gcc_failure_order(__failure));
+                                   __to_gcc_order(__success),
+                                   __to_gcc_failure_order(__failure));
 }
 
 template <typename _Tp>
-static inline bool __c11_atomic_compare_exchange_weak(
-    volatile _Atomic(_Tp)* __a, _Tp* __expected, _Tp __value,
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_weak(
+    volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value,
     memory_order __success, memory_order __failure) {
   return __atomic_compare_exchange(&__a->__a_value, __expected, &__value,
                                    true,
-                                   __gcc_atomic::__to_gcc_order(__success),
-                                   __gcc_atomic::__to_gcc_failure_order(__failure));
+                                   __to_gcc_order(__success),
+                                   __to_gcc_failure_order(__failure));
 }
 
 template <typename _Tp>
-static inline bool __c11_atomic_compare_exchange_weak(
-    _Atomic(_Tp)* __a, _Tp* __expected, _Tp __value, memory_order __success,
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_weak(
+    __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success,
     memory_order __failure) {
   return __atomic_compare_exchange(&__a->__a_value, __expected, &__value,
                                    true,
-                                   __gcc_atomic::__to_gcc_order(__success),
-                                   __gcc_atomic::__to_gcc_failure_order(__failure));
+                                   __to_gcc_order(__success),
+                                   __to_gcc_failure_order(__failure));
 }
 
 template <typename _Tp>
@@ -782,80 +826,264 @@
 struct __skip_amt<_Tp[n]> { };
 
 template <typename _Tp, typename _Td>
-static inline _Tp __c11_atomic_fetch_add(volatile _Atomic(_Tp)* __a,
-                                         _Td __delta, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_add(volatile __cxx_atomic_base_impl<_Tp>* __a,
+                           _Td __delta, memory_order __order) {
   return __atomic_fetch_add(&__a->__a_value, __delta * __skip_amt<_Tp>::value,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
 
 template <typename _Tp, typename _Td>
-static inline _Tp __c11_atomic_fetch_add(_Atomic(_Tp)* __a, _Td __delta,
-                                         memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp>* __a, _Td __delta,
+                           memory_order __order) {
   return __atomic_fetch_add(&__a->__a_value, __delta * __skip_amt<_Tp>::value,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
 
 template <typename _Tp, typename _Td>
-static inline _Tp __c11_atomic_fetch_sub(volatile _Atomic(_Tp)* __a,
-                                         _Td __delta, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_sub(volatile __cxx_atomic_base_impl<_Tp>* __a,
+                           _Td __delta, memory_order __order) {
   return __atomic_fetch_sub(&__a->__a_value, __delta * __skip_amt<_Tp>::value,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
 
 template <typename _Tp, typename _Td>
-static inline _Tp __c11_atomic_fetch_sub(_Atomic(_Tp)* __a, _Td __delta,
-                                         memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp>* __a, _Td __delta,
+                           memory_order __order) {
   return __atomic_fetch_sub(&__a->__a_value, __delta * __skip_amt<_Tp>::value,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_fetch_and(volatile _Atomic(_Tp)* __a,
-                                         _Tp __pattern, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_and(volatile __cxx_atomic_base_impl<_Tp>* __a,
+                           _Tp __pattern, memory_order __order) {
   return __atomic_fetch_and(&__a->__a_value, __pattern,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_fetch_and(_Atomic(_Tp)* __a,
-                                         _Tp __pattern, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp>* __a,
+                           _Tp __pattern, memory_order __order) {
   return __atomic_fetch_and(&__a->__a_value, __pattern,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_fetch_or(volatile _Atomic(_Tp)* __a,
-                                        _Tp __pattern, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_or(volatile __cxx_atomic_base_impl<_Tp>* __a,
+                          _Tp __pattern, memory_order __order) {
   return __atomic_fetch_or(&__a->__a_value, __pattern,
-                           __gcc_atomic::__to_gcc_order(__order));
+                           __to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_fetch_or(_Atomic(_Tp)* __a, _Tp __pattern,
-                                        memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern,
+                          memory_order __order) {
   return __atomic_fetch_or(&__a->__a_value, __pattern,
-                           __gcc_atomic::__to_gcc_order(__order));
+                           __to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_fetch_xor(volatile _Atomic(_Tp)* __a,
-                                         _Tp __pattern, memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_xor(volatile __cxx_atomic_base_impl<_Tp>* __a,
+                           _Tp __pattern, memory_order __order) {
   return __atomic_fetch_xor(&__a->__a_value, __pattern,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_fetch_xor(_Atomic(_Tp)* __a, _Tp __pattern,
-                                         memory_order __order) {
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern,
+                           memory_order __order) {
   return __atomic_fetch_xor(&__a->__a_value, __pattern,
-                            __gcc_atomic::__to_gcc_order(__order));
+                            __to_gcc_order(__order));
 }
-#endif // _LIBCPP_HAS_GCC_ATOMIC_IMP
+
+#define __cxx_atomic_is_lock_free(__s) __atomic_is_lock_free(__s, 0)
+
+#elif defined(_LIBCPP_HAS_C_ATOMIC_IMP)
+
+template <typename _Tp>
+struct __cxx_atomic_base_impl {
+
+  _LIBCPP_INLINE_VISIBILITY
+#ifndef _LIBCPP_CXX03_LANG
+    __cxx_atomic_base_impl() _NOEXCEPT = default;
+#else
+    __cxx_atomic_base_impl() _NOEXCEPT : __a_value() {}
+#endif // _LIBCPP_CXX03_LANG
+  _LIBCPP_CONSTEXPR explicit __cxx_atomic_base_impl(_Tp value) _NOEXCEPT
+    : __a_value(value) {}
+  _Atomic(_Tp) __a_value;
+};
+
+#define __cxx_atomic_is_lock_free(__s) __c11_atomic_is_lock_free(__s)
+
+_LIBCPP_INLINE_VISIBILITY inline
+void __cxx_atomic_thread_fence(memory_order __order) _NOEXCEPT {
+    __c11_atomic_thread_fence(static_cast<__memory_order_underlying_t>(__order));
+}
+
+_LIBCPP_INLINE_VISIBILITY inline
+void __cxx_atomic_signal_fence(memory_order __order) _NOEXCEPT {
+    __c11_atomic_signal_fence(static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __val) _NOEXCEPT {
+    __c11_atomic_init(&__a->__a_value, __val);
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp> * __a, _Tp __val) _NOEXCEPT {
+    __c11_atomic_init(&__a->__a_value, __val);
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_store(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __val, memory_order __order) _NOEXCEPT {
+    __c11_atomic_store(&__a->__a_value, __val, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_store(__cxx_atomic_base_impl<_Tp> * __a, _Tp __val, memory_order __order) _NOEXCEPT {
+    __c11_atomic_store(&__a->__a_value, __val, static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_load(__cxx_atomic_base_impl<_Tp> const volatile* __a, memory_order __order) _NOEXCEPT {
+    using __ptr_type = typename remove_const<decltype(__a->__a_value)>::type*;
+    return __c11_atomic_load(const_cast<__ptr_type>(&__a->__a_value), static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_load(__cxx_atomic_base_impl<_Tp> const* __a, memory_order __order) _NOEXCEPT {
+    using __ptr_type = typename remove_const<decltype(__a->__a_value)>::type*;
+    return __c11_atomic_load(const_cast<__ptr_type>(&__a->__a_value), static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __value, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_exchange(&__a->__a_value, __value, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp> * __a, _Tp __value, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_exchange(&__a->__a_value, __value, static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_strong(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) _NOEXCEPT {
+    return __c11_atomic_compare_exchange_strong(&__a->__a_value, __expected, __value, static_cast<__memory_order_underlying_t>(__success), static_cast<__memory_order_underlying_t>(__failure));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_strong(__cxx_atomic_base_impl<_Tp> * __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) _NOEXCEPT {
+    return __c11_atomic_compare_exchange_strong(&__a->__a_value, __expected, __value, static_cast<__memory_order_underlying_t>(__success), static_cast<__memory_order_underlying_t>(__failure));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_weak(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) _NOEXCEPT {
+    return __c11_atomic_compare_exchange_weak(&__a->__a_value, __expected, __value, static_cast<__memory_order_underlying_t>(__success), static_cast<__memory_order_underlying_t>(__failure));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_weak(__cxx_atomic_base_impl<_Tp> * __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) _NOEXCEPT {
+    return __c11_atomic_compare_exchange_weak(&__a->__a_value, __expected, __value,  static_cast<__memory_order_underlying_t>(__success), static_cast<__memory_order_underlying_t>(__failure));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_add(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp> * __a, _Tp __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_add(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp* __cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_add(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp* __cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp*> * __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_add(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_sub(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp> * __a, _Tp __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_sub(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp* __cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_sub(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp* __cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp*> * __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_sub(&__a->__a_value, __delta, static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_and(&__a->__a_value, __pattern, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp> * __a, _Tp __pattern, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_and(&__a->__a_value, __pattern, static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_or(&__a->__a_value, __pattern, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp> * __a, _Tp __pattern, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_or(&__a->__a_value, __pattern, static_cast<__memory_order_underlying_t>(__order));
+}
+
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_xor(&__a->__a_value, __pattern, static_cast<__memory_order_underlying_t>(__order));
+}
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp> * __a, _Tp __pattern, memory_order __order) _NOEXCEPT {
+    return __c11_atomic_fetch_xor(&__a->__a_value, __pattern, static_cast<__memory_order_underlying_t>(__order));
+}
+
+#endif // _LIBCPP_HAS_GCC_ATOMIC_IMP, _LIBCPP_HAS_C_ATOMIC_IMP
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
-_Tp
-kill_dependency(_Tp __y) _NOEXCEPT
+_LIBCPP_INLINE_VISIBILITY
+_Tp kill_dependency(_Tp __y) _NOEXCEPT
 {
     return __y;
 }
@@ -871,7 +1099,7 @@
 # define ATOMIC_LONG_LOCK_FREE      __CLANG_ATOMIC_LONG_LOCK_FREE
 # define ATOMIC_LLONG_LOCK_FREE     __CLANG_ATOMIC_LLONG_LOCK_FREE
 # define ATOMIC_POINTER_LOCK_FREE   __CLANG_ATOMIC_POINTER_LOCK_FREE
-#else
+#elif defined(__GCC_ATOMIC_BOOL_LOCK_FREE)
 # define ATOMIC_BOOL_LOCK_FREE      __GCC_ATOMIC_BOOL_LOCK_FREE
 # define ATOMIC_CHAR_LOCK_FREE      __GCC_ATOMIC_CHAR_LOCK_FREE
 # define ATOMIC_CHAR16_T_LOCK_FREE  __GCC_ATOMIC_CHAR16_T_LOCK_FREE
@@ -884,12 +1112,352 @@
 # define ATOMIC_POINTER_LOCK_FREE   __GCC_ATOMIC_POINTER_LOCK_FREE
 #endif
 
+#ifdef _LIBCPP_ATOMIC_ONLY_USE_BUILTINS
+
+template<typename _Tp>
+struct __cxx_atomic_lock_impl {
+
+  _LIBCPP_INLINE_VISIBILITY
+  __cxx_atomic_lock_impl() _NOEXCEPT
+    : __a_value(), __a_lock(0) {}
+  _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR explicit
+  __cxx_atomic_lock_impl(_Tp value) _NOEXCEPT
+    : __a_value(value), __a_lock(0) {}
+
+  _Tp __a_value;
+  mutable __cxx_atomic_base_impl<_LIBCPP_ATOMIC_FLAG_TYPE> __a_lock;
+
+  _LIBCPP_INLINE_VISIBILITY void __lock() const volatile {
+    while(1 == __cxx_atomic_exchange(&__a_lock, _LIBCPP_ATOMIC_FLAG_TYPE(true), memory_order_acquire))
+        /*spin*/;
+  }
+  _LIBCPP_INLINE_VISIBILITY void __lock() const {
+    while(1 == __cxx_atomic_exchange(&__a_lock, _LIBCPP_ATOMIC_FLAG_TYPE(true), memory_order_acquire))
+        /*spin*/;
+  }
+  _LIBCPP_INLINE_VISIBILITY void __unlock() const volatile {
+    __cxx_atomic_store(&__a_lock, _LIBCPP_ATOMIC_FLAG_TYPE(false), memory_order_release);
+  }
+  _LIBCPP_INLINE_VISIBILITY void __unlock() const {
+    __cxx_atomic_store(&__a_lock, _LIBCPP_ATOMIC_FLAG_TYPE(false), memory_order_release);
+  }
+  _LIBCPP_INLINE_VISIBILITY _Tp __read() const volatile {
+    __lock();
+    _Tp __old;
+    __cxx_atomic_assign_volatile(__old, __a_value);
+    __unlock();
+    return __old;
+  }
+  _LIBCPP_INLINE_VISIBILITY _Tp __read() const {
+    __lock();
+    _Tp __old = __a_value;
+    __unlock();
+    return __old;
+  }
+};
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_init(volatile __cxx_atomic_lock_impl<_Tp>* __a,  _Tp __val) {
+  __cxx_atomic_assign_volatile(__a->__a_value, __val);
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_init(__cxx_atomic_lock_impl<_Tp>* __a,  _Tp __val) {
+  __a->__a_value = __val;
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_store(volatile __cxx_atomic_lock_impl<_Tp>* __a,  _Tp __val, memory_order) {
+  __a->__lock();
+  __cxx_atomic_assign_volatile(__a->__a_value, __val);
+  __a->__unlock();
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+void __cxx_atomic_store(__cxx_atomic_lock_impl<_Tp>* __a,  _Tp __val, memory_order) {
+  __a->__lock();
+  __a->__a_value = __val;
+  __a->__unlock();
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_load(const volatile __cxx_atomic_lock_impl<_Tp>* __a, memory_order) {
+  return __a->__read();
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_load(const __cxx_atomic_lock_impl<_Tp>* __a, memory_order) {
+  return __a->__read();
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_exchange(volatile __cxx_atomic_lock_impl<_Tp>* __a, _Tp __value, memory_order) {
+  __a->__lock();
+  _Tp __old;
+  __cxx_atomic_assign_volatile(__old, __a->__a_value);
+  __cxx_atomic_assign_volatile(__a->__a_value, __value);
+  __a->__unlock();
+  return __old;
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_exchange(__cxx_atomic_lock_impl<_Tp>* __a, _Tp __value, memory_order) {
+  __a->__lock();
+  _Tp __old = __a->__a_value;
+  __a->__a_value = __value;
+  __a->__unlock();
+  return __old;
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_strong(volatile __cxx_atomic_lock_impl<_Tp>* __a,
+                                          _Tp* __expected, _Tp __value, memory_order, memory_order) {
+  __a->__lock();
+  _Tp temp;
+  __cxx_atomic_assign_volatile(temp, __a->__a_value);
+  bool __ret = temp == *__expected;
+  if(__ret)
+    __cxx_atomic_assign_volatile(__a->__a_value, __value);
+  else
+    __cxx_atomic_assign_volatile(*__expected, __a->__a_value);
+  __a->__unlock();
+  return __ret;
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_strong(__cxx_atomic_lock_impl<_Tp>* __a,
+                                          _Tp* __expected, _Tp __value, memory_order, memory_order) {
+  __a->__lock();
+  bool __ret = __a->__a_value == *__expected;
+  if(__ret)
+    __a->__a_value = __value;
+  else
+    *__expected = __a->__a_value;
+  __a->__unlock();
+  return __ret;
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_weak(volatile __cxx_atomic_lock_impl<_Tp>* __a,
+                                        _Tp* __expected, _Tp __value, memory_order, memory_order) {
+  __a->__lock();
+  _Tp temp;
+  __cxx_atomic_assign_volatile(temp, __a->__a_value);
+  bool __ret = temp == *__expected;
+  if(__ret)
+    __cxx_atomic_assign_volatile(__a->__a_value, __value);
+  else
+    __cxx_atomic_assign_volatile(*__expected, __a->__a_value);
+  __a->__unlock();
+  return __ret;
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+bool __cxx_atomic_compare_exchange_weak(__cxx_atomic_lock_impl<_Tp>* __a,
+                                        _Tp* __expected, _Tp __value, memory_order, memory_order) {
+  __a->__lock();
+  bool __ret = __a->__a_value == *__expected;
+  if(__ret)
+    __a->__a_value = __value;
+  else
+    *__expected = __a->__a_value;
+  __a->__unlock();
+  return __ret;
+}
+
+template <typename _Tp, typename _Td>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_add(volatile __cxx_atomic_lock_impl<_Tp>* __a,
+                           _Td __delta, memory_order) {
+  __a->__lock();
+  _Tp __old;
+  __cxx_atomic_assign_volatile(__old, __a->__a_value);
+  __cxx_atomic_assign_volatile(__a->__a_value, _Tp(__old + __delta));
+  __a->__unlock();
+  return __old;
+}
+template <typename _Tp, typename _Td>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_add(__cxx_atomic_lock_impl<_Tp>* __a,
+                           _Td __delta, memory_order) {
+  __a->__lock();
+  _Tp __old = __a->__a_value;
+  __a->__a_value += __delta;
+  __a->__unlock();
+  return __old;
+}
+
+template <typename _Tp, typename _Td>
+_LIBCPP_INLINE_VISIBILITY
+_Tp* __cxx_atomic_fetch_add(volatile __cxx_atomic_lock_impl<_Tp*>* __a,
+                           ptrdiff_t __delta, memory_order) {
+  __a->__lock();
+  _Tp* __old;
+  __cxx_atomic_assign_volatile(__old, __a->__a_value);
+  __cxx_atomic_assign_volatile(__a->__a_value, __old + __delta);
+  __a->__unlock();
+  return __old;
+}
+template <typename _Tp, typename _Td>
+_LIBCPP_INLINE_VISIBILITY
+_Tp* __cxx_atomic_fetch_add(__cxx_atomic_lock_impl<_Tp*>* __a,
+                           ptrdiff_t __delta, memory_order) {
+  __a->__lock();
+  _Tp* __old = __a->__a_value;
+  __a->__a_value += __delta;
+  __a->__unlock();
+  return __old;
+}
+
+template <typename _Tp, typename _Td>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_sub(volatile __cxx_atomic_lock_impl<_Tp>* __a,
+                           _Td __delta, memory_order) {
+  __a->__lock();
+  _Tp __old;
+  __cxx_atomic_assign_volatile(__old, __a->__a_value);
+  __cxx_atomic_assign_volatile(__a->__a_value, _Tp(__old - __delta));
+  __a->__unlock();
+  return __old;
+}
+template <typename _Tp, typename _Td>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_sub(__cxx_atomic_lock_impl<_Tp>* __a,
+                           _Td __delta, memory_order) {
+  __a->__lock();
+  _Tp __old = __a->__a_value;
+  __a->__a_value -= __delta;
+  __a->__unlock();
+  return __old;
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_and(volatile __cxx_atomic_lock_impl<_Tp>* __a,
+                           _Tp __pattern, memory_order) {
+  __a->__lock();
+  _Tp __old;
+  __cxx_atomic_assign_volatile(__old, __a->__a_value);
+  __cxx_atomic_assign_volatile(__a->__a_value, _Tp(__old & __pattern));
+  __a->__unlock();
+  return __old;
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_and(__cxx_atomic_lock_impl<_Tp>* __a,
+                           _Tp __pattern, memory_order) {
+  __a->__lock();
+  _Tp __old = __a->__a_value;
+  __a->__a_value &= __pattern;
+  __a->__unlock();
+  return __old;
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_or(volatile __cxx_atomic_lock_impl<_Tp>* __a,
+                          _Tp __pattern, memory_order) {
+  __a->__lock();
+  _Tp __old;
+  __cxx_atomic_assign_volatile(__old, __a->__a_value);
+  __cxx_atomic_assign_volatile(__a->__a_value, _Tp(__old | __pattern));
+  __a->__unlock();
+  return __old;
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_or(__cxx_atomic_lock_impl<_Tp>* __a,
+                          _Tp __pattern, memory_order) {
+  __a->__lock();
+  _Tp __old = __a->__a_value;
+  __a->__a_value |= __pattern;
+  __a->__unlock();
+  return __old;
+}
+
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_xor(volatile __cxx_atomic_lock_impl<_Tp>* __a,
+                           _Tp __pattern, memory_order) {
+  __a->__lock();
+  _Tp __old;
+  __cxx_atomic_assign_volatile(__old, __a->__a_value);
+  __cxx_atomic_assign_volatile(__a->__a_value, _Tp(__old ^ __pattern));
+  __a->__unlock();
+  return __old;
+}
+template <typename _Tp>
+_LIBCPP_INLINE_VISIBILITY
+_Tp __cxx_atomic_fetch_xor(__cxx_atomic_lock_impl<_Tp>* __a,
+                           _Tp __pattern, memory_order) {
+  __a->__lock();
+  _Tp __old = __a->__a_value;
+  __a->__a_value ^= __pattern;
+  __a->__unlock();
+  return __old;
+}
+
+#ifdef __cpp_lib_atomic_is_always_lock_free
+
+template<typename _Tp> struct __cxx_is_always_lock_free {
+    enum { __value = __atomic_always_lock_free(sizeof(_Tp), 0) }; };
+
+#else
+
+template<typename _Tp> struct __cxx_is_always_lock_free { enum { __value = false }; };
+// Implementations must match the C ATOMIC_*_LOCK_FREE macro values.
+template<> struct __cxx_is_always_lock_free<bool> { enum { __value = 2 == ATOMIC_BOOL_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<char> { enum { __value = 2 == ATOMIC_CHAR_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<signed char> { enum { __value = 2 == ATOMIC_CHAR_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<unsigned char> { enum { __value = 2 == ATOMIC_CHAR_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<char16_t> { enum { __value = 2 == ATOMIC_CHAR16_T_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<char32_t> { enum { __value = 2 == ATOMIC_CHAR32_T_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<wchar_t> { enum { __value = 2 == ATOMIC_WCHAR_T_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<short> { enum { __value = 2 == ATOMIC_SHORT_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<unsigned short> { enum { __value = 2 == ATOMIC_SHORT_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<int> { enum { __value = 2 == ATOMIC_INT_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<unsigned int> { enum { __value = 2 == ATOMIC_INT_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<long> { enum { __value = 2 == ATOMIC_LONG_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<unsigned long> { enum { __value = 2 == ATOMIC_LONG_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<long long> { enum { __value = 2 == ATOMIC_LLONG_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<unsigned long long> { enum { __value = 2 == ATOMIC_LLONG_LOCK_FREE }; };
+template<typename _Tp> struct __cxx_is_always_lock_free<_Tp*> { enum { __value = 2 == ATOMIC_POINTER_LOCK_FREE }; };
+template<> struct __cxx_is_always_lock_free<std::nullptr_t> { enum { __value = 2 == ATOMIC_POINTER_LOCK_FREE }; };
+
+#endif //__cpp_lib_atomic_is_always_lock_free
+
+template <typename _Tp,
+          typename _Base = typename conditional<__cxx_is_always_lock_free<_Tp>::__value,
+                                                __cxx_atomic_base_impl<_Tp>,
+                                                __cxx_atomic_lock_impl<_Tp> >::type>
+#else
+template <typename _Tp,
+          typename _Base = __cxx_atomic_base_impl<_Tp> >
+#endif //_LIBCPP_ATOMIC_ONLY_USE_BUILTINS
+struct __cxx_atomic_impl : public _Base {
+
+#if _GNUC_VER >= 501
+    static_assert(is_trivially_copyable<_Tp>::value,
+      "std::atomic<Tp> requires that 'Tp' be a trivially copyable type");
+#endif
+
+  _LIBCPP_INLINE_VISIBILITY __cxx_atomic_impl() _NOEXCEPT _LIBCPP_DEFAULT
+  _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR explicit __cxx_atomic_impl(_Tp value) _NOEXCEPT
+    : _Base(value) {}
+};
+
 // general atomic<T>
 
 template <class _Tp, bool = is_integral<_Tp>::value && !is_same<_Tp, bool>::value>
 struct __atomic_base  // false
 {
-    mutable _Atomic(_Tp) __a_;
+    mutable __cxx_atomic_impl<_Tp> __a_;
 
 #if defined(__cpp_lib_atomic_is_always_lock_free)
   static _LIBCPP_CONSTEXPR bool is_always_lock_free = __atomic_always_lock_free(sizeof(__a_), 0);
@@ -897,88 +1465,79 @@
 
     _LIBCPP_INLINE_VISIBILITY
     bool is_lock_free() const volatile _NOEXCEPT
-    {
-#if defined(_LIBCPP_HAS_C_ATOMIC_IMP)
-    return __c11_atomic_is_lock_free(sizeof(_Tp));
-#else
-    return __atomic_is_lock_free(sizeof(_Tp), 0);
-#endif
-    }
+        {return __cxx_atomic_is_lock_free(sizeof(_Tp));}
     _LIBCPP_INLINE_VISIBILITY
     bool is_lock_free() const _NOEXCEPT
         {return static_cast<__atomic_base const volatile*>(this)->is_lock_free();}
     _LIBCPP_INLINE_VISIBILITY
     void store(_Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
       _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m)
-        {__c11_atomic_store(&__a_, __d, __m);}
+        {__cxx_atomic_store(&__a_, __d, __m);}
     _LIBCPP_INLINE_VISIBILITY
     void store(_Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT
       _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m)
-        {__c11_atomic_store(&__a_, __d, __m);}
+        {__cxx_atomic_store(&__a_, __d, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp load(memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT
       _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m)
-        {return __c11_atomic_load(&__a_, __m);}
+        {return __cxx_atomic_load(&__a_, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp load(memory_order __m = memory_order_seq_cst) const _NOEXCEPT
       _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m)
-        {return __c11_atomic_load(&__a_, __m);}
+        {return __cxx_atomic_load(&__a_, __m);}
     _LIBCPP_INLINE_VISIBILITY
     operator _Tp() const volatile _NOEXCEPT {return load();}
     _LIBCPP_INLINE_VISIBILITY
     operator _Tp() const _NOEXCEPT          {return load();}
     _LIBCPP_INLINE_VISIBILITY
     _Tp exchange(_Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_exchange(&__a_, __d, __m);}
+        {return __cxx_atomic_exchange(&__a_, __d, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp exchange(_Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_exchange(&__a_, __d, __m);}
+        {return __cxx_atomic_exchange(&__a_, __d, __m);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_weak(_Tp& __e, _Tp __d,
                                memory_order __s, memory_order __f) volatile _NOEXCEPT
       _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f)
-        {return __c11_atomic_compare_exchange_weak(&__a_, &__e, __d, __s, __f);}
+        {return __cxx_atomic_compare_exchange_weak(&__a_, &__e, __d, __s, __f);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_weak(_Tp& __e, _Tp __d,
                                memory_order __s, memory_order __f) _NOEXCEPT
       _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f)
-        {return __c11_atomic_compare_exchange_weak(&__a_, &__e, __d, __s, __f);}
+        {return __cxx_atomic_compare_exchange_weak(&__a_, &__e, __d, __s, __f);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_strong(_Tp& __e, _Tp __d,
                                  memory_order __s, memory_order __f) volatile _NOEXCEPT
       _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f)
-        {return __c11_atomic_compare_exchange_strong(&__a_, &__e, __d, __s, __f);}
+        {return __cxx_atomic_compare_exchange_strong(&__a_, &__e, __d, __s, __f);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_strong(_Tp& __e, _Tp __d,
                                  memory_order __s, memory_order __f) _NOEXCEPT
       _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f)
-        {return __c11_atomic_compare_exchange_strong(&__a_, &__e, __d, __s, __f);}
+        {return __cxx_atomic_compare_exchange_strong(&__a_, &__e, __d, __s, __f);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_weak(_Tp& __e, _Tp __d,
                               memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_compare_exchange_weak(&__a_, &__e, __d, __m, __m);}
+        {return __cxx_atomic_compare_exchange_weak(&__a_, &__e, __d, __m, __m);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_weak(_Tp& __e, _Tp __d,
                                memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_compare_exchange_weak(&__a_, &__e, __d, __m, __m);}
+        {return __cxx_atomic_compare_exchange_weak(&__a_, &__e, __d, __m, __m);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_strong(_Tp& __e, _Tp __d,
                               memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_compare_exchange_strong(&__a_, &__e, __d, __m, __m);}
+        {return __cxx_atomic_compare_exchange_strong(&__a_, &__e, __d, __m, __m);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_strong(_Tp& __e, _Tp __d,
                                  memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_compare_exchange_strong(&__a_, &__e, __d, __m, __m);}
+        {return __cxx_atomic_compare_exchange_strong(&__a_, &__e, __d, __m, __m);}
 
     _LIBCPP_INLINE_VISIBILITY
-#ifndef _LIBCPP_CXX03_LANG
-    __atomic_base() _NOEXCEPT = default;
-#else
-    __atomic_base() _NOEXCEPT : __a_() {}
-#endif // _LIBCPP_CXX03_LANG
+    __atomic_base() _NOEXCEPT _LIBCPP_DEFAULT
 
-    _LIBCPP_INLINE_VISIBILITY
-    _LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+    __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {}
+
 #ifndef _LIBCPP_CXX03_LANG
     __atomic_base(const __atomic_base&) = delete;
     __atomic_base& operator=(const __atomic_base&) = delete;
@@ -1010,34 +1569,34 @@
 
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_fetch_add(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_add(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_fetch_add(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_add(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_fetch_sub(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_sub(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_fetch_sub(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_sub(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_fetch_and(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_and(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_fetch_and(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_and(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_fetch_or(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_or(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_fetch_or(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_or(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_fetch_xor(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_xor(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_fetch_xor(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_xor(&this->__a_, __op, __m);}
 
     _LIBCPP_INLINE_VISIBILITY
     _Tp operator++(int) volatile _NOEXCEPT      {return fetch_add(_Tp(1));}
@@ -1119,17 +1678,17 @@
     _LIBCPP_INLINE_VISIBILITY
     _Tp* fetch_add(ptrdiff_t __op, memory_order __m = memory_order_seq_cst)
                                                                         volatile _NOEXCEPT
-        {return __c11_atomic_fetch_add(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_add(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp* fetch_add(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_fetch_add(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_add(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp* fetch_sub(ptrdiff_t __op, memory_order __m = memory_order_seq_cst)
                                                                         volatile _NOEXCEPT
-        {return __c11_atomic_fetch_sub(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_sub(&this->__a_, __op, __m);}
     _LIBCPP_INLINE_VISIBILITY
     _Tp* fetch_sub(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_fetch_sub(&this->__a_, __op, __m);}
+        {return __cxx_atomic_fetch_sub(&this->__a_, __op, __m);}
 
     _LIBCPP_INLINE_VISIBILITY
     _Tp* operator++(int) volatile _NOEXCEPT            {return fetch_add(1);}
@@ -1160,7 +1719,7 @@
 // atomic_is_lock_free
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_is_lock_free(const volatile atomic<_Tp>* __o) _NOEXCEPT
 {
@@ -1168,7 +1727,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_is_lock_free(const atomic<_Tp>* __o) _NOEXCEPT
 {
@@ -1178,25 +1737,25 @@
 // atomic_init
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 void
 atomic_init(volatile atomic<_Tp>* __o, _Tp __d) _NOEXCEPT
 {
-    __c11_atomic_init(&__o->__a_, __d);
+    __cxx_atomic_init(&__o->__a_, __d);
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 void
 atomic_init(atomic<_Tp>* __o, _Tp __d) _NOEXCEPT
 {
-    __c11_atomic_init(&__o->__a_, __d);
+    __cxx_atomic_init(&__o->__a_, __d);
 }
 
 // atomic_store
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 void
 atomic_store(volatile atomic<_Tp>* __o, _Tp __d) _NOEXCEPT
 {
@@ -1204,7 +1763,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 void
 atomic_store(atomic<_Tp>* __o, _Tp __d) _NOEXCEPT
 {
@@ -1214,7 +1773,7 @@
 // atomic_store_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 void
 atomic_store_explicit(volatile atomic<_Tp>* __o, _Tp __d, memory_order __m) _NOEXCEPT
   _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m)
@@ -1223,7 +1782,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 void
 atomic_store_explicit(atomic<_Tp>* __o, _Tp __d, memory_order __m) _NOEXCEPT
   _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m)
@@ -1234,7 +1793,7 @@
 // atomic_load
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_load(const volatile atomic<_Tp>* __o) _NOEXCEPT
 {
@@ -1242,7 +1801,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_load(const atomic<_Tp>* __o) _NOEXCEPT
 {
@@ -1252,7 +1811,7 @@
 // atomic_load_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_load_explicit(const volatile atomic<_Tp>* __o, memory_order __m) _NOEXCEPT
   _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m)
@@ -1261,7 +1820,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_load_explicit(const atomic<_Tp>* __o, memory_order __m) _NOEXCEPT
   _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m)
@@ -1272,7 +1831,7 @@
 // atomic_exchange
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_exchange(volatile atomic<_Tp>* __o, _Tp __d) _NOEXCEPT
 {
@@ -1280,7 +1839,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_exchange(atomic<_Tp>* __o, _Tp __d) _NOEXCEPT
 {
@@ -1290,7 +1849,7 @@
 // atomic_exchange_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_exchange_explicit(volatile atomic<_Tp>* __o, _Tp __d, memory_order __m) _NOEXCEPT
 {
@@ -1298,7 +1857,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp
 atomic_exchange_explicit(atomic<_Tp>* __o, _Tp __d, memory_order __m) _NOEXCEPT
 {
@@ -1308,7 +1867,7 @@
 // atomic_compare_exchange_weak
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_weak(volatile atomic<_Tp>* __o, _Tp* __e, _Tp __d) _NOEXCEPT
 {
@@ -1316,7 +1875,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_weak(atomic<_Tp>* __o, _Tp* __e, _Tp __d) _NOEXCEPT
 {
@@ -1326,7 +1885,7 @@
 // atomic_compare_exchange_strong
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_strong(volatile atomic<_Tp>* __o, _Tp* __e, _Tp __d) _NOEXCEPT
 {
@@ -1334,7 +1893,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_strong(atomic<_Tp>* __o, _Tp* __e, _Tp __d) _NOEXCEPT
 {
@@ -1344,7 +1903,7 @@
 // atomic_compare_exchange_weak_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_weak_explicit(volatile atomic<_Tp>* __o, _Tp* __e,
                                       _Tp __d,
@@ -1355,7 +1914,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_weak_explicit(atomic<_Tp>* __o, _Tp* __e, _Tp __d,
                                       memory_order __s, memory_order __f) _NOEXCEPT
@@ -1367,7 +1926,7 @@
 // atomic_compare_exchange_strong_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_strong_explicit(volatile atomic<_Tp>* __o,
                                         _Tp* __e, _Tp __d,
@@ -1378,7 +1937,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 bool
 atomic_compare_exchange_strong_explicit(atomic<_Tp>* __o, _Tp* __e,
                                         _Tp __d,
@@ -1391,7 +1950,7 @@
 // atomic_fetch_add
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1403,7 +1962,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1415,7 +1974,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_add(volatile atomic<_Tp*>* __o, ptrdiff_t __op) _NOEXCEPT
 {
@@ -1423,7 +1982,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_add(atomic<_Tp*>* __o, ptrdiff_t __op) _NOEXCEPT
 {
@@ -1433,7 +1992,7 @@
 // atomic_fetch_add_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1445,7 +2004,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1457,7 +2016,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_add_explicit(volatile atomic<_Tp*>* __o, ptrdiff_t __op,
                           memory_order __m) _NOEXCEPT
@@ -1466,7 +2025,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_add_explicit(atomic<_Tp*>* __o, ptrdiff_t __op, memory_order __m) _NOEXCEPT
 {
@@ -1476,7 +2035,7 @@
 // atomic_fetch_sub
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1488,7 +2047,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1500,7 +2059,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_sub(volatile atomic<_Tp*>* __o, ptrdiff_t __op) _NOEXCEPT
 {
@@ -1508,7 +2067,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_sub(atomic<_Tp*>* __o, ptrdiff_t __op) _NOEXCEPT
 {
@@ -1518,7 +2077,7 @@
 // atomic_fetch_sub_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1530,7 +2089,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1542,7 +2101,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_sub_explicit(volatile atomic<_Tp*>* __o, ptrdiff_t __op,
                           memory_order __m) _NOEXCEPT
@@ -1551,7 +2110,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 _Tp*
 atomic_fetch_sub_explicit(atomic<_Tp*>* __o, ptrdiff_t __op, memory_order __m) _NOEXCEPT
 {
@@ -1561,7 +2120,7 @@
 // atomic_fetch_and
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1573,7 +2132,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1587,7 +2146,7 @@
 // atomic_fetch_and_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1599,7 +2158,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1613,7 +2172,7 @@
 // atomic_fetch_or
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1625,7 +2184,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1639,7 +2198,7 @@
 // atomic_fetch_or_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1651,7 +2210,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1665,7 +2224,7 @@
 // atomic_fetch_xor
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1677,7 +2236,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1691,7 +2250,7 @@
 // atomic_fetch_xor_explicit
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1703,7 +2262,7 @@
 }
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     is_integral<_Tp>::value && !is_same<_Tp, bool>::value,
@@ -1718,27 +2277,23 @@
 
 typedef struct atomic_flag
 {
-    _Atomic(bool) __a_;
+    __cxx_atomic_impl<_LIBCPP_ATOMIC_FLAG_TYPE> __a_;
 
     _LIBCPP_INLINE_VISIBILITY
     bool test_and_set(memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {return __c11_atomic_exchange(&__a_, true, __m);}
+        {return __cxx_atomic_exchange(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(true), __m);}
     _LIBCPP_INLINE_VISIBILITY
     bool test_and_set(memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {return __c11_atomic_exchange(&__a_, true, __m);}
+        {return __cxx_atomic_exchange(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(true), __m);}
     _LIBCPP_INLINE_VISIBILITY
     void clear(memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
-        {__c11_atomic_store(&__a_, false, __m);}
+        {__cxx_atomic_store(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(false), __m);}
     _LIBCPP_INLINE_VISIBILITY
     void clear(memory_order __m = memory_order_seq_cst) _NOEXCEPT
-        {__c11_atomic_store(&__a_, false, __m);}
+        {__cxx_atomic_store(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(false), __m);}
 
     _LIBCPP_INLINE_VISIBILITY
-#ifndef _LIBCPP_CXX03_LANG
-    atomic_flag() _NOEXCEPT = default;
-#else
-    atomic_flag() _NOEXCEPT : __a_() {}
-#endif // _LIBCPP_CXX03_LANG
+    atomic_flag() _NOEXCEPT _LIBCPP_DEFAULT
 
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
     atomic_flag(bool __b) _NOEXCEPT : __a_(__b) {} // EXTENSION
@@ -1817,14 +2372,14 @@
 void
 atomic_thread_fence(memory_order __m) _NOEXCEPT
 {
-    __c11_atomic_thread_fence(__m);
+    __cxx_atomic_thread_fence(__m);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
 void
 atomic_signal_fence(memory_order __m) _NOEXCEPT
 {
-    __c11_atomic_signal_fence(__m);
+    __cxx_atomic_signal_fence(__m);
 }
 
 // Atomics for standard typedef types
diff --git a/linux-x64/clang/include/c++/v1/bit b/linux-x64/clang/include/c++/v1/bit
index a2ca3bc..dbf7f8a 100644
--- a/linux-x64/clang/include/c++/v1/bit
+++ b/linux-x64/clang/include/c++/v1/bit
@@ -15,12 +15,42 @@
 
 namespace std {
 
+  template <class T>
+    constexpr bool ispow2(T x) noexcept; // C++20
+  template <class T>
+    constexpr T ceil2(T x);              // C++20
+  template <class T>
+    constexpr T floor2(T x) noexcept;    // C++20
+  template <class T>
+    constexpr T log2p1(T x) noexcept;    // C++20
+
+  // 23.20.2, rotating
+  template<class T>
+    constexpr T rotl(T x, unsigned int s) noexcept; // C++20
+  template<class T>
+    constexpr T rotr(T x, unsigned int s) noexcept; // C++20
+
+  // 23.20.3, counting
+  template<class T>
+    constexpr int countl_zero(T x) noexcept;  // C++20
+  template<class T>
+    constexpr int countl_one(T x) noexcept;   // C++20
+  template<class T>
+    constexpr int countr_zero(T x) noexcept;  // C++20
+  template<class T>
+    constexpr int countr_one(T x) noexcept;   // C++20
+  template<class T>
+    constexpr int popcount(T x) noexcept;     // C++20
+
 } // namespace std
 
 */
 
 #include <__config>
+#include <limits>
+#include <type_traits>
 #include <version>
+#include <__debug>
 
 #if defined(__IBMCPP__)
 #include "support/ibm/support.h"
@@ -33,38 +63,41 @@
 #pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #ifndef _LIBCPP_COMPILER_MSVC
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __ctz(unsigned __x)           { return __builtin_ctz(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __ctz(unsigned __x)           _NOEXCEPT { return __builtin_ctz(__x); }
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __ctz(unsigned long __x)      { return __builtin_ctzl(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __ctz(unsigned long __x)      _NOEXCEPT { return __builtin_ctzl(__x); }
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __ctz(unsigned long long __x) { return __builtin_ctzll(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __ctz(unsigned long long __x) _NOEXCEPT { return __builtin_ctzll(__x); }
 
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __clz(unsigned __x)           { return __builtin_clz(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __clz(unsigned __x)           _NOEXCEPT { return __builtin_clz(__x); }
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __clz(unsigned long __x)      { return __builtin_clzl(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __clz(unsigned long __x)      _NOEXCEPT { return __builtin_clzl(__x); }
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __clz(unsigned long long __x) { return __builtin_clzll(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __clz(unsigned long long __x) _NOEXCEPT { return __builtin_clzll(__x); }
 
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __popcount(unsigned __x)           { return __builtin_popcount(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __popcount(unsigned __x)           _NOEXCEPT { return __builtin_popcount(__x); }
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __popcount(unsigned long __x)      { return __builtin_popcountl(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __popcount(unsigned long __x)      _NOEXCEPT { return __builtin_popcountl(__x); }
 
-inline _LIBCPP_INLINE_VISIBILITY
-int __popcount(unsigned long long __x) { return __builtin_popcountll(__x); }
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
+int __popcount(unsigned long long __x) _NOEXCEPT { return __builtin_popcountll(__x); }
 
 #else  // _LIBCPP_COMPILER_MSVC
 
@@ -152,6 +185,205 @@
 
 #endif // _LIBCPP_COMPILER_MSVC
 
+#if _LIBCPP_STD_VER > 17
+
+template <class _Tp>
+using __bitop_unsigned_integer _LIBCPP_NODEBUG_TYPE = integral_constant<bool,
+         is_integral_v<_Tp> &&
+         is_unsigned_v<_Tp> &&
+        _IsNotSame<remove_cv_t<_Tp>, bool>::value &&
+        _IsNotSame<remove_cv_t<_Tp>, signed char>::value &&
+        _IsNotSame<remove_cv_t<_Tp>, wchar_t>::value &&
+        _IsNotSame<remove_cv_t<_Tp>, char16_t>::value &&
+        _IsNotSame<remove_cv_t<_Tp>, char32_t>::value
+    >;
+
+
+// rotl
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, _Tp>
+rotl(_Tp __t, unsigned int __cnt) noexcept
+{
+    const unsigned int __dig = numeric_limits<_Tp>::digits;
+    if ((__cnt % __dig) == 0)
+        return __t;
+    return (__t << (__cnt % __dig)) | (__t >> (__dig - (__cnt % __dig)));
+}
+
+
+// rotr
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, _Tp>
+rotr(_Tp __t, unsigned int __cnt) noexcept
+{
+    const unsigned int __dig = numeric_limits<_Tp>::digits;
+    if ((__cnt % __dig) == 0)
+        return __t;
+    return (__t >> (__cnt % __dig)) | (__t << (__dig - (__cnt % __dig)));
+}
+
+
+// countl_zero
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, int>
+countl_zero(_Tp __t) noexcept
+{
+    if (__t == 0)
+        return numeric_limits<_Tp>::digits;
+
+    if      constexpr (sizeof(_Tp) <= sizeof(unsigned int))
+        return __clz(static_cast<unsigned int>(__t))
+              - (numeric_limits<unsigned int>::digits - numeric_limits<_Tp>::digits);
+    else if constexpr (sizeof(_Tp) <= sizeof(unsigned long))
+        return __clz(static_cast<unsigned long>(__t))
+              - (numeric_limits<unsigned long>::digits - numeric_limits<_Tp>::digits);
+    else if constexpr (sizeof(_Tp) <= sizeof(unsigned long long))
+        return __clz(static_cast<unsigned long long>(__t))
+              - (numeric_limits<unsigned long long>::digits - numeric_limits<_Tp>::digits);
+    else
+    {
+        int __ret = 0;
+        int __iter = 0;
+        const unsigned int __ulldigits = numeric_limits<unsigned long long>::digits;
+        while (true) {
+            __t = rotr(__t, __ulldigits);
+            if ((__iter = countl_zero(static_cast<unsigned long long>(__t))) != __ulldigits)
+                break;
+            __ret += __iter;
+            }
+        return __ret + __iter;
+    }
+}
+
+
+// countl_one
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, int>
+countl_one(_Tp __t) noexcept
+{
+    return __t != numeric_limits<_Tp>::max()
+        ? countl_zero(static_cast<_Tp>(~__t))
+        : numeric_limits<_Tp>::digits;
+}
+
+
+// countr_zero
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, int>
+countr_zero(_Tp __t) noexcept
+{
+    if (__t == 0)
+        return numeric_limits<_Tp>::digits;
+
+    if      constexpr (sizeof(_Tp) <= sizeof(unsigned int))
+        return __ctz(static_cast<unsigned int>(__t));
+    else if constexpr (sizeof(_Tp) <= sizeof(unsigned long))
+        return __ctz(static_cast<unsigned long>(__t));
+    else if constexpr (sizeof(_Tp) <= sizeof(unsigned long long))
+        return __ctz(static_cast<unsigned long long>(__t));
+    else
+    {
+        int __ret = 0;
+        int __iter = 0;
+        const unsigned int __ulldigits = numeric_limits<unsigned long long>::digits;
+        while ((__iter = countr_zero(static_cast<unsigned long long>(__t))) == __ulldigits)
+        {
+            __ret += __iter;
+            __t >>= __ulldigits;
+        }
+        return __ret + __iter;
+    }
+}
+
+
+// countr_one
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, int>
+countr_one(_Tp __t) noexcept
+{
+    return __t != numeric_limits<_Tp>::max()
+        ? countr_zero(static_cast<_Tp>(~__t))
+        : numeric_limits<_Tp>::digits;
+}
+
+
+// popcount
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, int>
+popcount(_Tp __t) noexcept
+{
+    if      constexpr (sizeof(_Tp) <= sizeof(unsigned int))
+        return __popcount(static_cast<unsigned int>(__t));
+    else if constexpr (sizeof(_Tp) <= sizeof(unsigned long))
+        return __popcount(static_cast<unsigned long>(__t));
+    else if constexpr (sizeof(_Tp) <= sizeof(unsigned long long))
+        return __popcount(static_cast<unsigned long long>(__t));
+    else
+    {
+        int __ret = 0;
+        while (__t != 0)
+        {
+            __ret += __popcount(static_cast<unsigned long long>(__t));
+            __t >>= numeric_limits<unsigned long long>::digits;
+        }
+        return __ret;
+    }
+}
+
+
+// integral log base 2
+template<class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+unsigned __bit_log2(_Tp __t) noexcept
+{ return std::numeric_limits<_Tp>::digits - 1 - countl_zero(__t); }
+
+
+template <class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, bool>
+ispow2(_Tp __t) noexcept { return popcount(__t) == 1; }
+
+template <class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, _Tp>
+floor2(_Tp __t) noexcept { return __t == 0 ? 0 : _Tp{1} << __bit_log2(__t); }
+
+template <class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, _Tp>
+ceil2(_Tp __t) noexcept
+{
+    if (__t < 2) return 1;
+    const unsigned __n = numeric_limits<_Tp>::digits - countl_zero((_Tp)(__t - 1u));
+    _LIBCPP_DEBUG_ASSERT(__libcpp_is_constant_evaluated() || __n != numeric_limits<_Tp>::digits, "Bad input to ceil2");
+
+    if constexpr (sizeof(_Tp) >= sizeof(unsigned))
+        return _Tp{1} << __n;
+    else
+    {
+        const unsigned __extra = numeric_limits<unsigned>::digits  - numeric_limits<_Tp>::digits;
+        const unsigned __retVal = 1u << (__n + __extra);
+        return (_Tp) (__retVal >> __extra);
+    }
+}
+
+template <class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<__bitop_unsigned_integer<_Tp>::value, _Tp>
+log2p1(_Tp __t) noexcept
+{ return __t == 0 ? 0 : __bit_log2(__t) + 1; }
+
+#endif // _LIBCPP_STD_VER > 17
+
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP_BIT
diff --git a/linux-x64/clang/include/c++/v1/bitset b/linux-x64/clang/include/c++/v1/bitset
index 9fb91e9..4755fbe 100644
--- a/linux-x64/clang/include/c++/v1/bitset
+++ b/linux-x64/clang/include/c++/v1/bitset
@@ -679,7 +679,7 @@
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR bitset() _NOEXCEPT {}
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
         bitset(unsigned long long __v) _NOEXCEPT : base(__v) {}
-    template<class _CharT>
+    template<class _CharT, class = _EnableIf<_IsCharLikeType<_CharT>::value> >
         explicit bitset(const _CharT* __str,
                         typename basic_string<_CharT>::size_type __n = basic_string<_CharT>::npos,
                         _CharT __zero = _CharT('0'), _CharT __one = _CharT('1'));
@@ -760,7 +760,7 @@
 };
 
 template <size_t _Size>
-template<class _CharT>
+template<class _CharT, class>
 bitset<_Size>::bitset(const _CharT* __str,
                       typename basic_string<_CharT>::size_type __n,
                       _CharT __zero, _CharT __one)
diff --git a/linux-x64/clang/include/c++/v1/charconv b/linux-x64/clang/include/c++/v1/charconv
index ec9baa8..a644fe0 100644
--- a/linux-x64/clang/include/c++/v1/charconv
+++ b/linux-x64/clang/include/c++/v1/charconv
@@ -96,7 +96,7 @@
 _LIBCPP_FUNC_VIS char* __u32toa(uint32_t __value, char* __buffer);
 }
 
-#if _LIBCPP_STD_VER > 11
+#ifndef _LIBCPP_CXX03_LANG
 
 enum class _LIBCPP_ENUM_VIS chars_format
 {
@@ -124,7 +124,7 @@
 namespace __itoa
 {
 
-static constexpr uint64_t __pow10_64[] = {
+static _LIBCPP_CONSTEXPR uint64_t __pow10_64[] = {
     UINT64_C(0),
     UINT64_C(10),
     UINT64_C(100),
@@ -147,7 +147,7 @@
     UINT64_C(10000000000000000000),
 };
 
-static constexpr uint32_t __pow10_32[] = {
+static _LIBCPP_CONSTEXPR uint32_t __pow10_32[] = {
     UINT32_C(0),          UINT32_C(10),       UINT32_C(100),
     UINT32_C(1000),       UINT32_C(10000),    UINT32_C(100000),
     UINT32_C(1000000),    UINT32_C(10000000), UINT32_C(100000000),
@@ -172,7 +172,7 @@
         return __u64toa(__v, __p);
     }
 
-    static _LIBCPP_INLINE_VISIBILITY auto& __pow() { return __pow10_64; }
+    static _LIBCPP_INLINE_VISIBILITY decltype(__pow10_64)& __pow() { return __pow10_64; }
 };
 
 template <typename _Tp>
@@ -194,7 +194,7 @@
         return __u32toa(__v, __p);
     }
 
-    static _LIBCPP_INLINE_VISIBILITY auto& __pow() { return __pow10_32; }
+    static _LIBCPP_INLINE_VISIBILITY decltype(__pow10_32)& __pow() { return __pow10_32; }
 };
 
 template <typename _Tp>
@@ -239,7 +239,7 @@
 template <typename _Tp>
 struct _LIBCPP_HIDDEN __traits : __traits_base<_Tp>
 {
-    static constexpr int digits = numeric_limits<_Tp>::digits10 + 1;
+    static _LIBCPP_CONSTEXPR int digits = numeric_limits<_Tp>::digits10 + 1;
     using __traits_base<_Tp>::__pow;
     using typename __traits_base<_Tp>::type;
 
@@ -285,10 +285,10 @@
 }
 
 template <typename _Tp>
-inline _LIBCPP_INLINE_VISIBILITY auto
+inline _LIBCPP_INLINE_VISIBILITY typename make_unsigned<_Tp>::type
 __to_unsigned(_Tp __x)
 {
-    return static_cast<make_unsigned_t<_Tp>>(__x);
+    return static_cast<typename make_unsigned<_Tp>::type>(__x);
 }
 
 template <typename _Tp>
@@ -314,7 +314,7 @@
 
 #if !defined(_LIBCPP_COMPILER_MSVC)
     if (__tx::digits <= __diff || __tx::__width(__value) <= __diff)
-        return {__tx::__convert(__value, __first), {}};
+        return {__tx::__convert(__value, __first), errc(0)};
     else
         return {__last, errc::value_too_large};
 #else
@@ -379,14 +379,14 @@
     }
 }
 
-template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_integral<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY to_chars_result
 to_chars(char* __first, char* __last, _Tp __value)
 {
     return __to_chars_itoa(__first, __last, __value, is_signed<_Tp>());
 }
 
-template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_integral<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY to_chars_result
 to_chars(char* __first, char* __last, _Tp __value, int __base)
 {
@@ -501,7 +501,7 @@
     return __r;
 }
 
-template <typename _Tp, enable_if_t<is_unsigned<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_unsigned<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY from_chars_result
 __from_chars_atoi(const char* __first, const char* __last, _Tp& __value)
 {
@@ -527,7 +527,7 @@
         });
 }
 
-template <typename _Tp, enable_if_t<is_signed<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_signed<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY from_chars_result
 __from_chars_atoi(const char* __first, const char* __last, _Tp& __value)
 {
@@ -535,7 +535,7 @@
     return __sign_combinator(__first, __last, __value, __from_chars_atoi<__t>);
 }
 
-template <typename _Tp, enable_if_t<is_unsigned<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_unsigned<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY from_chars_result
 __from_chars_integral(const char* __first, const char* __last, _Tp& __value,
                       int __base)
@@ -582,7 +582,7 @@
         __base);
 }
 
-template <typename _Tp, enable_if_t<is_signed<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_signed<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY from_chars_result
 __from_chars_integral(const char* __first, const char* __last, _Tp& __value,
                       int __base)
@@ -592,14 +592,14 @@
                              __from_chars_integral<__t>, __base);
 }
 
-template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_integral<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY from_chars_result
 from_chars(const char* __first, const char* __last, _Tp& __value)
 {
     return __from_chars_atoi(__first, __last, __value);
 }
 
-template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+template <typename _Tp, typename enable_if<is_integral<_Tp>::value, int>::type = 0>
 inline _LIBCPP_INLINE_VISIBILITY from_chars_result
 from_chars(const char* __first, const char* __last, _Tp& __value, int __base)
 {
@@ -607,7 +607,7 @@
     return __from_chars_integral(__first, __last, __value, __base);
 }
 
-#endif  // _LIBCPP_STD_VER > 11
+#endif  // _LIBCPP_CXX03_LANG
 
 _LIBCPP_END_NAMESPACE_STD
 
diff --git a/linux-x64/clang/include/c++/v1/chrono b/linux-x64/clang/include/c++/v1/chrono
index a003751..1b90757 100644
--- a/linux-x64/clang/include/c++/v1/chrono
+++ b/linux-x64/clang/include/c++/v1/chrono
@@ -1262,34 +1262,15 @@
 
 // Duration /
 
-template <class _Duration, class _Rep, bool = __is_duration<_Rep>::value>
-struct __duration_divide_result
-{
-};
-
-template <class _Duration, class _Rep2,
-    bool = is_convertible<_Rep2,
-                          typename common_type<typename _Duration::rep, _Rep2>::type>::value>
-struct __duration_divide_imp
-{
-};
-
-template <class _Rep1, class _Period, class _Rep2>
-struct __duration_divide_imp<duration<_Rep1, _Period>, _Rep2, true>
-{
-    typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period> type;
-};
-
-template <class _Rep1, class _Period, class _Rep2>
-struct __duration_divide_result<duration<_Rep1, _Period>, _Rep2, false>
-    : __duration_divide_imp<duration<_Rep1, _Period>, _Rep2>
-{
-};
-
 template <class _Rep1, class _Period, class _Rep2>
 inline _LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR
-typename __duration_divide_result<duration<_Rep1, _Period>, _Rep2>::type
+typename enable_if
+<
+    !__is_duration<_Rep2>::value &&
+      is_convertible<_Rep2, typename common_type<_Rep1, _Rep2>::type>::value,
+    duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+>::type
 operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
 {
     typedef typename common_type<_Rep1, _Rep2>::type _Cr;
@@ -1312,7 +1293,12 @@
 template <class _Rep1, class _Period, class _Rep2>
 inline _LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR
-typename __duration_divide_result<duration<_Rep1, _Period>, _Rep2>::type
+typename enable_if
+<
+    !__is_duration<_Rep2>::value &&
+      is_convertible<_Rep2, typename common_type<_Rep1, _Rep2>::type>::value,
+    duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+>::type
 operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
 {
     typedef typename common_type<_Rep1, _Rep2>::type _Cr;
@@ -1604,9 +1590,9 @@
 using local_days    = local_time<days>;
 
 
-struct _LIBCPP_TYPE_VIS last_spec { explicit last_spec() = default; };
+struct last_spec { explicit last_spec() = default; };
 
-class _LIBCPP_TYPE_VIS day {
+class day {
 private:
     unsigned char __d;
 public:
@@ -1671,7 +1657,7 @@
 { *this = *this - __dd; return *this; }
 
 
-class _LIBCPP_TYPE_VIS month {
+class month {
 private:
     unsigned char __m;
 public:
@@ -1742,7 +1728,7 @@
 { *this = *this - __dm; return *this; }
 
 
-class _LIBCPP_TYPE_VIS year {
+class year {
 private:
     short __y;
 public:
@@ -1816,10 +1802,10 @@
 inline constexpr bool year::ok() const noexcept
 { return static_cast<int>(min()) <= __y && __y <= static_cast<int>(max()); }
 
-class _LIBCPP_TYPE_VIS weekday_indexed;
-class _LIBCPP_TYPE_VIS weekday_last;
+class weekday_indexed;
+class weekday_last;
 
-class _LIBCPP_TYPE_VIS weekday {
+class weekday {
 private:
     unsigned char __wd;
 public:
@@ -1905,7 +1891,7 @@
 { *this = *this - __dd; return *this; }
 
 
-class _LIBCPP_TYPE_VIS weekday_indexed {
+class weekday_indexed {
 private:
     _VSTD::chrono::weekday __wd;
     unsigned char          __idx;
@@ -1927,7 +1913,7 @@
 { return !(__lhs == __rhs); }
 
 
-class _LIBCPP_TYPE_VIS weekday_last {
+class weekday_last {
 private:
     _VSTD::chrono::weekday __wd;
 public:
@@ -1948,7 +1934,7 @@
 inline constexpr
 weekday_indexed weekday::operator[](unsigned __index) const noexcept { return weekday_indexed{*this, __index}; }
 
-inline constexpr 
+inline constexpr
 weekday_last    weekday::operator[](last_spec) const noexcept { return weekday_last{*this}; }
 
 
@@ -1975,7 +1961,7 @@
 inline constexpr month December{12};
 
 
-class _LIBCPP_TYPE_VIS month_day {
+class month_day {
 private:
    chrono::month __m;
    chrono::day   __d;
@@ -2050,7 +2036,7 @@
 
 
 
-class _LIBCPP_TYPE_VIS month_day_last {
+class month_day_last {
 private:
     chrono::month __m;
 public:
@@ -2101,7 +2087,7 @@
 { return month_day_last{month(__rhs)}; }
 
 
-class _LIBCPP_TYPE_VIS month_weekday {
+class month_weekday {
 private:
     chrono::month __m;
     chrono::weekday_indexed __wdi;
@@ -2139,7 +2125,7 @@
 { return month_weekday{month(__rhs), __lhs}; }
 
 
-class _LIBCPP_TYPE_VIS month_weekday_last {
+class month_weekday_last {
     chrono::month        __m;
     chrono::weekday_last __wdl;
   public:
@@ -2176,7 +2162,7 @@
 { return month_weekday_last{month(__rhs), __lhs}; }
 
 
-class _LIBCPP_TYPE_VIS year_month {
+class year_month {
     chrono::year  __y;
     chrono::month __m;
 public:
@@ -2250,7 +2236,7 @@
 
 class year_month_day_last;
 
-class _LIBCPP_TYPE_VIS year_month_day {
+class year_month_day {
 private:
     chrono::year  __y;
     chrono::month __m;
@@ -2259,7 +2245,7 @@
      year_month_day() = default;
      inline constexpr year_month_day(
             const chrono::year& __yval, const chrono::month& __mval, const chrono::day& __dval) noexcept
-            : __y{__yval}, __m{__mval}, __d{__dval} {}  
+            : __y{__yval}, __m{__mval}, __d{__dval} {}
             constexpr year_month_day(const year_month_day_last& __ymdl) noexcept;
      inline constexpr year_month_day(const sys_days& __sysd) noexcept
             : year_month_day(__from_days(__sysd.time_since_epoch())) {}
@@ -2404,7 +2390,7 @@
 inline constexpr year_month_day& year_month_day::operator+=(const years& __dy)  noexcept { *this = *this + __dy; return *this; }
 inline constexpr year_month_day& year_month_day::operator-=(const years& __dy)  noexcept { *this = *this - __dy; return *this; }
 
-class _LIBCPP_TYPE_VIS year_month_day_last {
+class year_month_day_last {
 private:
     chrono::year           __y;
     chrono::month_day_last __mdl;
@@ -2514,7 +2500,7 @@
 inline constexpr year_month_day_last& year_month_day_last::operator-=(const years& __dy)  noexcept { *this = *this - __dy; return *this; }
 
 inline constexpr year_month_day::year_month_day(const year_month_day_last& __ymdl) noexcept
-    : __y{__ymdl.year()}, __m{__ymdl.month()}, __d{__ymdl.day()} {}  
+    : __y{__ymdl.year()}, __m{__ymdl.month()}, __d{__ymdl.day()} {}
 
 inline constexpr bool year_month_day::ok() const noexcept
 {
@@ -2522,7 +2508,7 @@
     return chrono::day{1} <= __d && __d <= (__y / __m / last).day();
 }
 
-class _LIBCPP_TYPE_VIS year_month_weekday {
+class year_month_weekday {
     chrono::year            __y;
     chrono::month           __m;
     chrono::weekday_indexed __wdi;
@@ -2565,7 +2551,7 @@
     const sys_days      __sysd{__d};
     const chrono::weekday __wd = chrono::weekday(__sysd);
     const year_month_day __ymd = year_month_day(__sysd);
-    return year_month_weekday{__ymd.year(), __ymd.month(), 
+    return year_month_weekday{__ymd.year(), __ymd.month(),
                               __wd[(static_cast<unsigned>(__ymd.day())-1)/7+1]};
 }
 
@@ -2636,7 +2622,7 @@
 inline constexpr year_month_weekday& year_month_weekday::operator+=(const years& __dy)  noexcept { *this = *this + __dy; return *this; }
 inline constexpr year_month_weekday& year_month_weekday::operator-=(const years& __dy)  noexcept { *this = *this - __dy; return *this; }
 
-class _LIBCPP_TYPE_VIS year_month_weekday_last {
+class year_month_weekday_last {
 private:
     chrono::year         __y;
     chrono::month        __m;
@@ -2657,9 +2643,9 @@
     inline constexpr operator                 sys_days() const noexcept { return   sys_days{__to_days()}; }
     inline explicit constexpr operator      local_days() const noexcept { return local_days{__to_days()}; }
     inline constexpr bool ok() const noexcept { return __y.ok() && __m.ok() && __wdl.ok(); }
-    
+
     constexpr days __to_days() const noexcept;
-    
+
 };
 
 inline constexpr
@@ -2697,7 +2683,7 @@
 
 inline constexpr
 year_month_weekday_last operator/(const month_weekday_last& __lhs, int __rhs) noexcept
-{ return year(__rhs) / __lhs; }  
+{ return year(__rhs) / __lhs; }
 
 
 inline constexpr
@@ -2809,7 +2795,7 @@
     {
         return chrono::day(static_cast<unsigned>(__d));
     }
- 
+
     constexpr chrono::year operator ""y(unsigned long long __y) noexcept
     {
         return chrono::year(static_cast<int>(__y));
@@ -2841,7 +2827,7 @@
 
   static _LIBCPP_CONSTEXPR_AFTER_CXX11 const bool is_steady = false;
 
-  _LIBCPP_FUNC_VIS static time_point now() noexcept;
+  _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_FUNC_VIS static time_point now() noexcept;
 
   _LIBCPP_INLINE_VISIBILITY
   static time_t to_time_t(const time_point& __t) noexcept {
diff --git a/linux-x64/clang/include/c++/v1/cmath b/linux-x64/clang/include/c++/v1/cmath
index 3af9f54..f5864be 100644
--- a/linux-x64/clang/include/c++/v1/cmath
+++ b/linux-x64/clang/include/c++/v1/cmath
@@ -529,7 +529,7 @@
 
 template <class _A1, class _A2, class _A3>
 inline _LIBCPP_INLINE_VISIBILITY
-typename __lazy_enable_if
+typename _EnableIf
 <
     is_arithmetic<_A1>::value &&
     is_arithmetic<_A2>::value &&
@@ -606,6 +606,32 @@
     return isfinite(__lcpp_x);
 }
 
+#if _LIBCPP_STD_VER > 17
+template <typename _Fp>
+constexpr
+_Fp __lerp(_Fp __a, _Fp __b, _Fp __t) noexcept {
+    if ((__a <= 0 && __b >= 0) || (__a >= 0 && __b <= 0))
+        return __t * __b + (1 - __t) * __a;
+
+    if (__t == 1) return __b;
+    const _Fp __x = __a + __t * (__b - __a);
+    if (__t > 1 == __b > __a)
+    	return __b < __x ? __x : __b;
+    else
+    	return __x < __b ? __x : __b;
+}
+
+constexpr float
+lerp(float __a, float __b, float __t)                   _NOEXCEPT { return __lerp(__a, __b, __t); }
+
+constexpr double
+lerp(double __a, double __b, double __t)                _NOEXCEPT { return __lerp(__a, __b, __t); }
+
+constexpr long double
+lerp(long double __a, long double __b, long double __t) _NOEXCEPT { return __lerp(__a, __b, __t); }
+
+#endif // _LIBCPP_STD_VER > 17
+
 _LIBCPP_END_NAMESPACE_STD
 
 #endif  // _LIBCPP_CMATH
diff --git a/linux-x64/clang/include/c++/v1/complex b/linux-x64/clang/include/c++/v1/complex
index ff702b4..c168406 100644
--- a/linux-x64/clang/include/c++/v1/complex
+++ b/linux-x64/clang/include/c++/v1/complex
@@ -1449,10 +1449,10 @@
     return __os << __s.str();
 }
 
-#if _LIBCPP_STD_VER > 11 
+#if _LIBCPP_STD_VER > 11
 // Literal suffix for complex number literals [complex.literals]
 inline namespace literals
-{ 
+{
   inline namespace complex_literals
   {
     constexpr complex<long double> operator""il(long double __im)
diff --git a/linux-x64/clang/include/c++/v1/cxxabi.h b/linux-x64/clang/include/c++/v1/cxxabi.h
index 2c2d073..c1271fd 100644
--- a/linux-x64/clang/include/c++/v1/cxxabi.h
+++ b/linux-x64/clang/include/c++/v1/cxxabi.h
@@ -77,7 +77,7 @@
 extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_deleted_virtual(void);
 
 // 3.3.2 One-time Construction API
-#ifdef __arm__
+#if defined(_LIBCXXABI_GUARD_ABI_ARM)
 extern _LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(uint32_t *);
 extern _LIBCXXABI_FUNC_VIS void __cxa_guard_release(uint32_t *);
 extern _LIBCXXABI_FUNC_VIS void __cxa_guard_abort(uint32_t *);
diff --git a/linux-x64/clang/include/c++/v1/deque b/linux-x64/clang/include/c++/v1/deque
index 60a1130..d3ccf2e 100644
--- a/linux-x64/clang/include/c++/v1/deque
+++ b/linux-x64/clang/include/c++/v1/deque
@@ -1330,21 +1330,21 @@
 
     // element access:
     _LIBCPP_INLINE_VISIBILITY
-    reference operator[](size_type __i);
+    reference operator[](size_type __i) _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
-    const_reference operator[](size_type __i) const;
+    const_reference operator[](size_type __i) const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     reference at(size_type __i);
     _LIBCPP_INLINE_VISIBILITY
     const_reference at(size_type __i) const;
     _LIBCPP_INLINE_VISIBILITY
-    reference front();
+    reference front() _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
-    const_reference front() const;
+    const_reference front() const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
-    reference back();
+    reference back() _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
-    const_reference back() const;
+    const_reference back() const _NOEXCEPT;
 
     // 23.2.2.3 modifiers:
     void push_front(const value_type& __v);
@@ -1745,7 +1745,7 @@
 template <class _Tp, class _Allocator>
 inline
 typename deque<_Tp, _Allocator>::reference
-deque<_Tp, _Allocator>::operator[](size_type __i)
+deque<_Tp, _Allocator>::operator[](size_type __i) _NOEXCEPT
 {
     size_type __p = __base::__start_ + __i;
     return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
@@ -1754,7 +1754,7 @@
 template <class _Tp, class _Allocator>
 inline
 typename deque<_Tp, _Allocator>::const_reference
-deque<_Tp, _Allocator>::operator[](size_type __i) const
+deque<_Tp, _Allocator>::operator[](size_type __i) const _NOEXCEPT
 {
     size_type __p = __base::__start_ + __i;
     return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
@@ -1785,7 +1785,7 @@
 template <class _Tp, class _Allocator>
 inline
 typename deque<_Tp, _Allocator>::reference
-deque<_Tp, _Allocator>::front()
+deque<_Tp, _Allocator>::front() _NOEXCEPT
 {
     return *(*(__base::__map_.begin() + __base::__start_ / __base::__block_size)
                                       + __base::__start_ % __base::__block_size);
@@ -1794,7 +1794,7 @@
 template <class _Tp, class _Allocator>
 inline
 typename deque<_Tp, _Allocator>::const_reference
-deque<_Tp, _Allocator>::front() const
+deque<_Tp, _Allocator>::front() const _NOEXCEPT
 {
     return *(*(__base::__map_.begin() + __base::__start_ / __base::__block_size)
                                       + __base::__start_ % __base::__block_size);
@@ -1803,7 +1803,7 @@
 template <class _Tp, class _Allocator>
 inline
 typename deque<_Tp, _Allocator>::reference
-deque<_Tp, _Allocator>::back()
+deque<_Tp, _Allocator>::back() _NOEXCEPT
 {
     size_type __p = __base::size() + __base::__start_ - 1;
     return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
@@ -1812,7 +1812,7 @@
 template <class _Tp, class _Allocator>
 inline
 typename deque<_Tp, _Allocator>::const_reference
-deque<_Tp, _Allocator>::back() const
+deque<_Tp, _Allocator>::back() const _NOEXCEPT
 {
     size_type __p = __base::size() + __base::__start_ - 1;
     return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
diff --git a/linux-x64/clang/include/c++/v1/exception b/linux-x64/clang/include/c++/v1/exception
index 63d8ad2..c7dcac2 100644
--- a/linux-x64/clang/include/c++/v1/exception
+++ b/linux-x64/clang/include/c++/v1/exception
@@ -82,7 +82,7 @@
 #include <type_traits>
 #include <version>
 
-#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
+#if defined(_LIBCPP_ABI_VCRUNTIME)
 #include <vcruntime_exception.h>
 #endif
 
@@ -93,7 +93,7 @@
 namespace std  // purposefully not using versioning namespace
 {
 
-#if !defined(_LIBCPP_ABI_MICROSOFT) || defined(_LIBCPP_NO_VCRUNTIME)
+#if !defined(_LIBCPP_ABI_VCRUNTIME)
 class _LIBCPP_EXCEPTION_ABI exception
 {
 public:
@@ -110,7 +110,7 @@
     virtual ~bad_exception() _NOEXCEPT;
     virtual const char* what() const _NOEXCEPT;
 };
-#endif // !_LIBCPP_ABI_MICROSOFT || _LIBCPP_NO_VCRUNTIME
+#endif // !_LIBCPP_ABI_VCRUNTIME
 
 #if _LIBCPP_STD_VER <= 14 \
     || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS) \
@@ -260,11 +260,7 @@
 template <class _Tp, class _Up>
 struct __throw_with_nested<_Tp, _Up, true> {
     _LIBCPP_NORETURN static inline _LIBCPP_INLINE_VISIBILITY void
-#ifndef _LIBCPP_CXX03_LANG
     __do_throw(_Tp&& __t)
-#else
-    __do_throw (_Tp& __t)
-#endif  // _LIBCPP_CXX03_LANG
     {
         throw __nested<_Up>(_VSTD::forward<_Tp>(__t));
     }
@@ -287,11 +283,7 @@
 template <class _Tp>
 _LIBCPP_NORETURN
 void
-#ifndef _LIBCPP_CXX03_LANG
 throw_with_nested(_Tp&& __t)
-#else
-throw_with_nested (_Tp& __t)
-#endif // _LIBCPP_CXX03_LANG
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     typedef typename decay<_Tp>::type _Up;
diff --git a/linux-x64/clang/include/c++/v1/experimental/__config b/linux-x64/clang/include/c++/v1/experimental/__config
index d3667b5..375dc37 100644
--- a/linux-x64/clang/include/c++/v1/experimental/__config
+++ b/linux-x64/clang/include/c++/v1/experimental/__config
@@ -36,8 +36,14 @@
   namespace chrono { namespace experimental { inline namespace fundamentals_v1 {
 #define _LIBCPP_END_NAMESPACE_CHRONO_LFTS _LIBCPP_END_NAMESPACE_STD } } }
 
+#if defined(_LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_FILESYSTEM)
+#   define _LIBCPP_DEPRECATED_EXPERIMENTAL_FILESYSTEM /* nothing */
+#else
+#   define _LIBCPP_DEPRECATED_EXPERIMENTAL_FILESYSTEM __attribute__((deprecated("std::experimental::filesystem has now been deprecated in favor of C++17's std::filesystem. Please stop using it and start using std::filesystem. This experimental version will be removed in LLVM 11. You can remove this warning by defining the _LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_FILESYSTEM macro.")))
+#endif
+
 #define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM \
-    _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL namespace filesystem { \
+    _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL namespace filesystem _LIBCPP_DEPRECATED_EXPERIMENTAL_FILESYSTEM { \
     inline namespace v1 {
 
 #define _LIBCPP_END_NAMESPACE_EXPERIMENTAL_FILESYSTEM \
diff --git a/linux-x64/clang/include/c++/v1/experimental/any b/linux-x64/clang/include/c++/v1/experimental/any
deleted file mode 100644
index c8050e3..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/any
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===------------------------------- any ----------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_ANY
-#define _LIBCPP_EXPERIMENTAL_ANY
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/any> has been removed. Use <any> instead.")
-#else
-# warning "<experimental/any> has been removed. Use <any> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_ANY
diff --git a/linux-x64/clang/include/c++/v1/experimental/chrono b/linux-x64/clang/include/c++/v1/experimental/chrono
deleted file mode 100644
index f3ceaae..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/chrono
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===---------------------------- chrono ----------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_CHRONO
-#define _LIBCPP_EXPERIMENTAL_CHRONO
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/chrono> has been removed. Use <chrono> instead.")
-#else
-# warning "<experimental/chrono> has been removed. Use <chrono> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_CHRONO
diff --git a/linux-x64/clang/include/c++/v1/experimental/coroutine b/linux-x64/clang/include/c++/v1/experimental/coroutine
index 13e3262..e2f0a25 100644
--- a/linux-x64/clang/include/c++/v1/experimental/coroutine
+++ b/linux-x64/clang/include/c++/v1/experimental/coroutine
@@ -81,7 +81,7 @@
 };
 
 template <typename _Ret, typename... _Args>
-struct _LIBCPP_TEMPLATE_VIS coroutine_traits
+struct coroutine_traits
     : public __coroutine_traits_sfinae<_Ret>
 {
 };
@@ -298,7 +298,7 @@
 }
 #endif // __has_builtin(__builtin_coro_noop)
 
-struct _LIBCPP_TYPE_VIS suspend_never {
+struct suspend_never {
   _LIBCPP_INLINE_VISIBILITY
   bool await_ready() const _NOEXCEPT { return true; }
   _LIBCPP_INLINE_VISIBILITY
@@ -307,7 +307,7 @@
   void await_resume() const _NOEXCEPT {}
 };
 
-struct _LIBCPP_TYPE_VIS suspend_always {
+struct suspend_always {
   _LIBCPP_INLINE_VISIBILITY
   bool await_ready() const _NOEXCEPT { return false; }
   _LIBCPP_INLINE_VISIBILITY
diff --git a/linux-x64/clang/include/c++/v1/experimental/functional b/linux-x64/clang/include/c++/v1/experimental/functional
index 8c55f4f..755eda6 100644
--- a/linux-x64/clang/include/c++/v1/experimental/functional
+++ b/linux-x64/clang/include/c++/v1/experimental/functional
@@ -109,8 +109,7 @@
 #if _LIBCPP_STD_VER > 11
 // default searcher
 template<class _ForwardIterator, class _BinaryPredicate = equal_to<>>
-_LIBCPP_TYPE_VIS
-class default_searcher {
+class _LIBCPP_TYPE_VIS default_searcher {
 public:
     _LIBCPP_INLINE_VISIBILITY
     default_searcher(_ForwardIterator __f, _ForwardIterator __l, 
@@ -208,8 +207,7 @@
 template <class _RandomAccessIterator1, 
           class _Hash = hash<typename iterator_traits<_RandomAccessIterator1>::value_type>, 
           class _BinaryPredicate = equal_to<>>
-_LIBCPP_TYPE_VIS
-class boyer_moore_searcher {
+class _LIBCPP_TYPE_VIS boyer_moore_searcher {
 private:
     typedef typename std::iterator_traits<_RandomAccessIterator1>::difference_type difference_type;
     typedef typename std::iterator_traits<_RandomAccessIterator1>::value_type      value_type;
@@ -360,8 +358,7 @@
 template <class _RandomAccessIterator1, 
           class _Hash = hash<typename iterator_traits<_RandomAccessIterator1>::value_type>, 
           class _BinaryPredicate = equal_to<>>
-_LIBCPP_TYPE_VIS
-class boyer_moore_horspool_searcher {
+class _LIBCPP_TYPE_VIS boyer_moore_horspool_searcher {
 private:
     typedef typename std::iterator_traits<_RandomAccessIterator1>::difference_type difference_type;
     typedef typename std::iterator_traits<_RandomAccessIterator1>::value_type      value_type;
diff --git a/linux-x64/clang/include/c++/v1/experimental/numeric b/linux-x64/clang/include/c++/v1/experimental/numeric
deleted file mode 100644
index 4ea1306..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/numeric
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===--------------------------- numeric ----------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_NUMERIC
-#define _LIBCPP_EXPERIMENTAL_NUMERIC
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/numeric> has been removed. Use <numeric> instead.")
-#else
-# warning "<experimental/numeric> has been removed. Use <numeric> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_NUMERIC
diff --git a/linux-x64/clang/include/c++/v1/experimental/optional b/linux-x64/clang/include/c++/v1/experimental/optional
deleted file mode 100644
index 1749cd6..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/optional
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===-------------------------- optional ----------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_OPTIONAL
-#define _LIBCPP_EXPERIMENTAL_OPTIONAL
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/optional> has been removed. Use <optional> instead.")
-#else
-# warning "<experimental/optional> has been removed. Use <optional> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_OPTIONAL
diff --git a/linux-x64/clang/include/c++/v1/experimental/ratio b/linux-x64/clang/include/c++/v1/experimental/ratio
deleted file mode 100644
index 4cd4fa0..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/ratio
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===----------------------------- ratio ----------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_RATIO
-#define _LIBCPP_EXPERIMENTAL_RATIO
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/ratio> has been removed. Use <ratio> instead.")
-#else
-# warning "<experimental/ratio> has been removed. Use <ratio> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_RATIO
diff --git a/linux-x64/clang/include/c++/v1/experimental/string_view b/linux-x64/clang/include/c++/v1/experimental/string_view
deleted file mode 100644
index 4b59e6d..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/string_view
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===------------------------ string_view ---------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_STRING_VIEW
-#define _LIBCPP_EXPERIMENTAL_STRING_VIEW
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/string_view> has been removed. Use <string_view> instead.")
-#else
-# warning "<experimental/string_view> has been removed. Use <string_view> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_STRING_VIEW
diff --git a/linux-x64/clang/include/c++/v1/experimental/system_error b/linux-x64/clang/include/c++/v1/experimental/system_error
deleted file mode 100644
index 094e6d3..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/system_error
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===-------------------------- system_error ------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_SYSTEM_ERROR
-#define _LIBCPP_EXPERIMENTAL_SYSTEM_ERROR
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/system_error> has been removed. Use <system_error> instead.")
-#else
-# warning "<experimental/system_error> has been removed. Use <system_error> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_SYSTEM_ERROR
diff --git a/linux-x64/clang/include/c++/v1/experimental/tuple b/linux-x64/clang/include/c++/v1/experimental/tuple
deleted file mode 100644
index 827ef37..0000000
--- a/linux-x64/clang/include/c++/v1/experimental/tuple
+++ /dev/null
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===----------------------------- tuple ----------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP_EXPERIMENTAL_TUPLE
-#define _LIBCPP_EXPERIMENTAL_TUPLE
-
-#include <__config>
-
-#ifdef _LIBCPP_WARNING
-_LIBCPP_WARNING("<experimental/tuple> has been removed. Use <tuple> instead.")
-#else
-# warning "<experimental/tuple> has been removed. Use <tuple> instead."
-#endif
-
-#endif // _LIBCPP_EXPERIMENTAL_TUPLE
diff --git a/linux-x64/clang/include/c++/v1/experimental/type_traits b/linux-x64/clang/include/c++/v1/experimental/type_traits
index 3127c0e..19466e9 100644
--- a/linux-x64/clang/include/c++/v1/experimental/type_traits
+++ b/linux-x64/clang/include/c++/v1/experimental/type_traits
@@ -72,6 +72,7 @@
 
 #if _LIBCPP_STD_VER > 11
 
+#include <initializer_list>
 #include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -104,11 +105,10 @@
 // 3.3.4, Detection idiom
 template <class...> using void_t = void;
 
-struct nonesuch {
-    nonesuch()  = delete;
-    ~nonesuch() = delete;
-    nonesuch      (nonesuch const&) = delete;
-    void operator=(nonesuch const&) = delete;
+struct nonesuch : private _VSTD::__nat { // make nonesuch "not an aggregate"
+  ~nonesuch() = delete;
+  nonesuch      (nonesuch const&) = delete;
+  void operator=(nonesuch const&) = delete;
   };
 
 template <class _Default, class _AlwaysVoid, template <class...> class _Op, class... _Args>
diff --git a/linux-x64/clang/include/c++/v1/ext/__hash b/linux-x64/clang/include/c++/v1/ext/__hash
index 98a9544..d03f101 100644
--- a/linux-x64/clang/include/c++/v1/ext/__hash
+++ b/linux-x64/clang/include/c++/v1/ext/__hash
@@ -16,32 +16,31 @@
 #include <cstring>
 
 namespace __gnu_cxx {
-using namespace std;
 
 template <typename _Tp> struct _LIBCPP_TEMPLATE_VIS hash { };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<const char*>
-    : public unary_function<const char*, size_t>
+ : public std::unary_function<const char*, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(const char *__c) const _NOEXCEPT
     {
-        return __do_string_hash(__c, __c + strlen(__c));
+        return std::__do_string_hash(__c, __c + strlen(__c));
     }
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<char *>
-    : public unary_function<char*, size_t>
+ : public std::unary_function<char*, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(char *__c) const _NOEXCEPT
     {
-        return __do_string_hash<const char *>(__c, __c + strlen(__c));
+        return std::__do_string_hash<const char *>(__c, __c + strlen(__c));
     }
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<char>
-    : public unary_function<char, size_t>
+ : public std::unary_function<char, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(char __c) const _NOEXCEPT
@@ -51,7 +50,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<signed char>
-    : public unary_function<signed char, size_t>
+ : public std::unary_function<signed char, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(signed char __c) const _NOEXCEPT
@@ -61,7 +60,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned char>
-    : public unary_function<unsigned char, size_t>
+ : public std::unary_function<unsigned char, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(unsigned char __c) const _NOEXCEPT
@@ -71,7 +70,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<short>
-    : public unary_function<short, size_t>
+ : public std::unary_function<short, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(short __c) const _NOEXCEPT
@@ -81,7 +80,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned short>
-    : public unary_function<unsigned short, size_t>
+ : public std::unary_function<unsigned short, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(unsigned short __c) const _NOEXCEPT
@@ -91,7 +90,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<int>
-    : public unary_function<int, size_t>
+    : public std::unary_function<int, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(int __c) const _NOEXCEPT
@@ -101,7 +100,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned int>
-    : public unary_function<unsigned int, size_t>
+    : public std::unary_function<unsigned int, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(unsigned int __c) const _NOEXCEPT
@@ -111,7 +110,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<long>
-    : public unary_function<long, size_t>
+    : public std::unary_function<long, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(long __c) const _NOEXCEPT
@@ -121,7 +120,7 @@
 };
 
 template <> struct _LIBCPP_TEMPLATE_VIS hash<unsigned long>
-    : public unary_function<unsigned long, size_t>
+    : public std::unary_function<unsigned long, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(unsigned long __c) const _NOEXCEPT
diff --git a/linux-x64/clang/include/c++/v1/ext/hash_map b/linux-x64/clang/include/c++/v1/ext/hash_map
index d06a9e3..24823c6 100644
--- a/linux-x64/clang/include/c++/v1/ext/hash_map
+++ b/linux-x64/clang/include/c++/v1/ext/hash_map
@@ -219,10 +219,8 @@
 
 namespace __gnu_cxx {
 
-using namespace std;
-
 template <class _Tp, class _Hash,
-          bool = is_empty<_Hash>::value && !__libcpp_is_final<_Hash>::value
+          bool = std::is_empty<_Hash>::value && !std::__libcpp_is_final<_Hash>::value
         >
 class __hash_map_hasher
     : private _Hash
@@ -256,7 +254,7 @@
 };
 
 template <class _Tp, class _Pred,
-          bool = is_empty<_Pred>::value && !__libcpp_is_final<_Pred>::value
+          bool = std::is_empty<_Pred>::value && !std::__libcpp_is_final<_Pred>::value
          >
 class __hash_map_equal
     : private _Pred
@@ -307,7 +305,7 @@
 class __hash_map_node_destructor
 {
     typedef _Alloc                              allocator_type;
-    typedef allocator_traits<allocator_type>    __alloc_traits;
+    typedef std::allocator_traits<allocator_type>    __alloc_traits;
     typedef typename __alloc_traits::value_type::__node_value_type value_type;
 public:
     typedef typename __alloc_traits::pointer    pointer;
@@ -332,7 +330,7 @@
 
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
-    __hash_map_node_destructor(__hash_node_destructor<allocator_type>&& __x)
+    __hash_map_node_destructor(std::__hash_node_destructor<allocator_type>&& __x)
         : __na_(__x.__na_),
           __first_constructed(__x.__value_constructed),
           __second_constructed(__x.__value_constructed)
@@ -341,7 +339,7 @@
         }
 #else  // _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
-    __hash_map_node_destructor(const __hash_node_destructor<allocator_type>& __x)
+    __hash_map_node_destructor(const std::__hash_node_destructor<allocator_type>& __x)
         : __na_(__x.__na_),
           __first_constructed(__x.__value_constructed),
           __second_constructed(__x.__value_constructed)
@@ -370,11 +368,11 @@
     typedef const typename _HashIterator::value_type::first_type key_type;
     typedef typename _HashIterator::value_type::second_type      mapped_type;
 public:
-    typedef forward_iterator_tag                                 iterator_category;
-    typedef pair<key_type, mapped_type>                          value_type;
+    typedef std::forward_iterator_tag                            iterator_category;
+    typedef std::pair<key_type, mapped_type>                     value_type;
     typedef typename _HashIterator::difference_type              difference_type;
     typedef value_type&                                          reference;
-    typedef typename __rebind_pointer<typename _HashIterator::pointer, value_type>::type
+    typedef typename std::__rebind_pointer<typename _HashIterator::pointer, value_type>::type
         pointer;
 
     _LIBCPP_INLINE_VISIBILITY __hash_map_iterator() {}
@@ -415,11 +413,11 @@
     typedef const typename _HashIterator::value_type::first_type key_type;
     typedef typename _HashIterator::value_type::second_type      mapped_type;
 public:
-    typedef forward_iterator_tag                                 iterator_category;
-    typedef pair<key_type, mapped_type>                          value_type;
+    typedef std::forward_iterator_tag                            iterator_category;
+    typedef std::pair<key_type, mapped_type>                     value_type;
     typedef typename _HashIterator::difference_type              difference_type;
     typedef const value_type&                                    reference;
-    typedef typename __rebind_pointer<typename _HashIterator::pointer, const value_type>::type
+    typedef typename std::__rebind_pointer<typename _HashIterator::pointer, const value_type>::type
         pointer;
 
     _LIBCPP_INLINE_VISIBILITY __hash_map_const_iterator() {}
@@ -459,8 +457,8 @@
     template <class> friend class _LIBCPP_TEMPLATE_VIS __hash_const_local_iterator;
 };
 
-template <class _Key, class _Tp, class _Hash = hash<_Key>, class _Pred = equal_to<_Key>,
-          class _Alloc = allocator<pair<const _Key, _Tp> > >
+template <class _Key, class _Tp, class _Hash = hash<_Key>, class _Pred = std::equal_to<_Key>,
+          class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
 class _LIBCPP_TEMPLATE_VIS hash_map
 {
 public:
@@ -471,17 +469,18 @@
     typedef _Hash                                          hasher;
     typedef _Pred                                          key_equal;
     typedef _Alloc                                         allocator_type;
-    typedef pair<const key_type, mapped_type>              value_type;
+    typedef std::pair<const key_type, mapped_type>         value_type;
     typedef value_type&                                    reference;
     typedef const value_type&                              const_reference;
 
 private:
-    typedef pair<key_type, mapped_type>                    __value_type;
+    typedef std::pair<key_type, mapped_type>                    __value_type;
     typedef __hash_map_hasher<__value_type, hasher>   __hasher;
     typedef __hash_map_equal<__value_type, key_equal> __key_equal;
-    typedef typename __rebind_alloc_helper<allocator_traits<allocator_type>, __value_type>::type __allocator_type;
+    typedef typename std::__rebind_alloc_helper<
+        std::allocator_traits<allocator_type>, __value_type>::type __allocator_type;
 
-    typedef __hash_table<__value_type, __hasher,
+    typedef std::__hash_table<__value_type, __hasher,
                          __key_equal,  __allocator_type>   __table;
 
     __table __table_;
@@ -492,8 +491,8 @@
     typedef typename __table::__node_allocator             __node_allocator;
     typedef typename __table::__node                       __node;
     typedef __hash_map_node_destructor<__node_allocator>   _Dp;
-    typedef unique_ptr<__node, _Dp>                         __node_holder;
-    typedef allocator_traits<allocator_type>               __alloc_traits;
+    typedef std::unique_ptr<__node, _Dp>                   __node_holder;
+    typedef std::allocator_traits<allocator_type>          __alloc_traits;
 public:
     typedef typename __alloc_traits::pointer         pointer;
     typedef typename __alloc_traits::const_pointer   const_pointer;
@@ -543,7 +542,7 @@
     const_iterator end()    const {return __table_.end();}
 
     _LIBCPP_INLINE_VISIBILITY
-    pair<iterator, bool> insert(const value_type& __x)
+    std::pair<iterator, bool> insert(const value_type& __x)
         {return __table_.__insert_unique(__x);}
     _LIBCPP_INLINE_VISIBILITY
     iterator insert(const_iterator, const value_type& __x) {return insert(__x).first;}
@@ -578,10 +577,10 @@
     _LIBCPP_INLINE_VISIBILITY
     size_type count(const key_type& __k) const {return __table_.__count_unique(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<iterator, iterator>             equal_range(const key_type& __k)
+    std::pair<iterator, iterator>             equal_range(const key_type& __k)
         {return __table_.__equal_range_unique(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
+    std::pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
         {return __table_.__equal_range_unique(__k);}
 
     mapped_type& operator[](const key_type& __k);
@@ -691,7 +690,7 @@
     if (__i != end())
         return __i->second;
     __node_holder __h = __construct_node(__k);
-    pair<iterator, bool> __r = __table_.__node_insert_unique(__h.get());
+    std::pair<iterator, bool> __r = __table_.__node_insert_unique(__h.get());
     __h.release();
     return __r.first->second;
 }
@@ -733,8 +732,8 @@
     return !(__x == __y);
 }
 
-template <class _Key, class _Tp, class _Hash = hash<_Key>, class _Pred = equal_to<_Key>,
-          class _Alloc = allocator<pair<const _Key, _Tp> > >
+template <class _Key, class _Tp, class _Hash = hash<_Key>, class _Pred = std::equal_to<_Key>,
+          class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
 class _LIBCPP_TEMPLATE_VIS hash_multimap
 {
 public:
@@ -745,17 +744,17 @@
     typedef _Hash                                          hasher;
     typedef _Pred                                          key_equal;
     typedef _Alloc                                         allocator_type;
-    typedef pair<const key_type, mapped_type>              value_type;
+    typedef std::pair<const key_type, mapped_type>         value_type;
     typedef value_type&                                    reference;
     typedef const value_type&                              const_reference;
 
 private:
-    typedef pair<key_type, mapped_type>                    __value_type;
+    typedef std::pair<key_type, mapped_type>               __value_type;
     typedef __hash_map_hasher<__value_type, hasher>   __hasher;
     typedef __hash_map_equal<__value_type, key_equal> __key_equal;
-    typedef typename __rebind_alloc_helper<allocator_traits<allocator_type>, __value_type>::type __allocator_type;
+    typedef typename std::__rebind_alloc_helper<std::allocator_traits<allocator_type>, __value_type>::type __allocator_type;
 
-    typedef __hash_table<__value_type, __hasher,
+    typedef std::__hash_table<__value_type, __hasher,
                          __key_equal,  __allocator_type>   __table;
 
     __table __table_;
@@ -764,8 +763,8 @@
     typedef typename __table::__node_allocator             __node_allocator;
     typedef typename __table::__node                       __node;
     typedef __hash_map_node_destructor<__node_allocator>   _Dp;
-    typedef unique_ptr<__node, _Dp>                         __node_holder;
-    typedef allocator_traits<allocator_type>               __alloc_traits;
+    typedef std::unique_ptr<__node, _Dp>                         __node_holder;
+    typedef std::allocator_traits<allocator_type>               __alloc_traits;
 public:
     typedef typename __alloc_traits::pointer         pointer;
     typedef typename __alloc_traits::const_pointer   const_pointer;
@@ -850,10 +849,10 @@
     _LIBCPP_INLINE_VISIBILITY
     size_type count(const key_type& __k) const {return __table_.__count_multi(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<iterator, iterator>             equal_range(const key_type& __k)
+    std::pair<iterator, iterator>             equal_range(const key_type& __k)
         {return __table_.__equal_range_multi(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
+    std::pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
         {return __table_.__equal_range_multi(__k);}
 
     _LIBCPP_INLINE_VISIBILITY
@@ -955,7 +954,7 @@
         return false;
     typedef typename hash_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::const_iterator
                                                                  const_iterator;
-    typedef pair<const_iterator, const_iterator> _EqRng;
+    typedef std::pair<const_iterator, const_iterator> _EqRng;
     for (const_iterator __i = __x.begin(), __ex = __x.end(); __i != __ex;)
     {
         _EqRng __xeq = __x.equal_range(__i->first);
diff --git a/linux-x64/clang/include/c++/v1/ext/hash_set b/linux-x64/clang/include/c++/v1/ext/hash_set
index 21e6687..e514182 100644
--- a/linux-x64/clang/include/c++/v1/ext/hash_set
+++ b/linux-x64/clang/include/c++/v1/ext/hash_set
@@ -207,10 +207,9 @@
 
 namespace __gnu_cxx {
 
-using namespace std;
 
-template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>,
-          class _Alloc = allocator<_Value> >
+template <class _Value, class _Hash = hash<_Value>, class _Pred = std::equal_to<_Value>,
+          class _Alloc = std::allocator<_Value> >
 class _LIBCPP_TEMPLATE_VIS hash_set
 {
 public:
@@ -224,7 +223,7 @@
     typedef const value_type&                                          const_reference;
 
 private:
-    typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
+    typedef std::__hash_table<value_type, hasher, key_equal, allocator_type> __table;
 
     __table __table_;
 
@@ -276,7 +275,7 @@
     const_iterator end()    const {return __table_.end();}
 
     _LIBCPP_INLINE_VISIBILITY
-    pair<iterator, bool> insert(const value_type& __x)
+    std::pair<iterator, bool> insert(const value_type& __x)
         {return __table_.__insert_unique(__x);}
     _LIBCPP_INLINE_VISIBILITY
     iterator insert(const_iterator, const value_type& __x) {return insert(__x).first;}
@@ -309,10 +308,10 @@
     _LIBCPP_INLINE_VISIBILITY
     size_type count(const key_type& __k) const {return __table_.__count_unique(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<iterator, iterator>             equal_range(const key_type& __k)
+    std::pair<iterator, iterator>             equal_range(const key_type& __k)
         {return __table_.__equal_range_unique(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
+    std::pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
         {return __table_.__equal_range_unique(__k);}
 
     _LIBCPP_INLINE_VISIBILITY
@@ -431,8 +430,8 @@
     return !(__x == __y);
 }
 
-template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>,
-          class _Alloc = allocator<_Value> >
+template <class _Value, class _Hash = hash<_Value>, class _Pred = std::equal_to<_Value>,
+          class _Alloc = std::allocator<_Value> >
 class _LIBCPP_TEMPLATE_VIS hash_multiset
 {
 public:
@@ -446,7 +445,7 @@
     typedef const value_type&                                          const_reference;
 
 private:
-    typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
+    typedef std::__hash_table<value_type, hasher, key_equal, allocator_type> __table;
 
     __table __table_;
 
@@ -530,10 +529,10 @@
     _LIBCPP_INLINE_VISIBILITY
     size_type count(const key_type& __k) const {return __table_.__count_multi(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<iterator, iterator>             equal_range(const key_type& __k)
+    std::pair<iterator, iterator>             equal_range(const key_type& __k)
         {return __table_.__equal_range_multi(__k);}
     _LIBCPP_INLINE_VISIBILITY
-    pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
+    std::pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
         {return __table_.__equal_range_multi(__k);}
 
     _LIBCPP_INLINE_VISIBILITY
@@ -610,7 +609,7 @@
 inline
 void
 hash_multiset<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first,
-                                                         _InputIterator __last)
+                                                    _InputIterator __last)
 {
     for (; __first != __last; ++__first)
         __table_.__insert_multi(*__first);
@@ -634,7 +633,7 @@
         return false;
     typedef typename hash_multiset<_Value, _Hash, _Pred, _Alloc>::const_iterator
                                                                  const_iterator;
-    typedef pair<const_iterator, const_iterator> _EqRng;
+    typedef std::pair<const_iterator, const_iterator> _EqRng;
     for (const_iterator __i = __x.begin(), __ex = __x.end(); __i != __ex;)
     {
         _EqRng __xeq = __x.equal_range(*__i);
diff --git a/linux-x64/clang/include/c++/v1/fenv.h b/linux-x64/clang/include/c++/v1/fenv.h
index 7cede4b..988cd9b 100644
--- a/linux-x64/clang/include/c++/v1/fenv.h
+++ b/linux-x64/clang/include/c++/v1/fenv.h
@@ -51,12 +51,13 @@
 */
 
 #include <__config>
-#include_next <fenv.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
 #endif
 
+#include_next <fenv.h>
+
 #ifdef __cplusplus
 
 extern "C++" {
diff --git a/linux-x64/clang/include/c++/v1/filesystem b/linux-x64/clang/include/c++/v1/filesystem
index 7a151d9..3aaa798 100644
--- a/linux-x64/clang/include/c++/v1/filesystem
+++ b/linux-x64/clang/include/c++/v1/filesystem
@@ -258,6 +258,8 @@
 
 _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM
 
+_LIBCPP_AVAILABILITY_FILESYSTEM_PUSH
+
 typedef chrono::time_point<_FilesystemClock> file_time_type;
 
 struct _LIBCPP_TYPE_VIS space_info {
@@ -1310,7 +1312,11 @@
   return !(__lhs == __rhs);
 }
 
-class _LIBCPP_EXCEPTION_ABI filesystem_error : public system_error {
+// TODO(ldionne): We need to pop the pragma and push it again after
+//                filesystem_error to work around PR41078.
+_LIBCPP_AVAILABILITY_FILESYSTEM_POP
+
+class _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_EXCEPTION_ABI filesystem_error : public system_error {
 public:
   _LIBCPP_INLINE_VISIBILITY
   filesystem_error(const string& __what, error_code __ec)
@@ -1350,7 +1356,7 @@
   void __create_what(int __num_paths);
 
 private:
-  struct _Storage {
+  struct _LIBCPP_HIDDEN _Storage {
     _LIBCPP_INLINE_VISIBILITY
     _Storage(const path& __p1, const path& __p2) : __p1_(__p1), __p2_(__p2) {}
 
@@ -1361,6 +1367,8 @@
   shared_ptr<_Storage> __storage_;
 };
 
+_LIBCPP_AVAILABILITY_FILESYSTEM_PUSH
+
 template <class... _Args>
 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 #ifndef _LIBCPP_NO_EXCEPTIONS
@@ -1934,7 +1942,7 @@
 
 class directory_iterator;
 class recursive_directory_iterator;
-class __dir_stream;
+class _LIBCPP_HIDDEN __dir_stream;
 
 class directory_entry {
   typedef _VSTD_FS::path _Path;
@@ -2597,7 +2605,7 @@
   operator==(const recursive_directory_iterator&,
              const recursive_directory_iterator&) noexcept;
 
-  struct __shared_imp;
+  struct _LIBCPP_HIDDEN __shared_imp;
   shared_ptr<__shared_imp> __imp_;
   bool __rec_;
 }; // class recursive_directory_iterator
@@ -2624,6 +2632,8 @@
   return recursive_directory_iterator();
 }
 
+_LIBCPP_AVAILABILITY_FILESYSTEM_POP
+
 _LIBCPP_END_NAMESPACE_FILESYSTEM
 
 #endif // !_LIBCPP_CXX03_LANG
diff --git a/linux-x64/clang/include/c++/v1/forward_list b/linux-x64/clang/include/c++/v1/forward_list
index bbea71e..d59ddd4 100644
--- a/linux-x64/clang/include/c++/v1/forward_list
+++ b/linux-x64/clang/include/c++/v1/forward_list
@@ -120,10 +120,12 @@
                       const_iterator first, const_iterator last);
     void splice_after(const_iterator p, forward_list&& x,
                       const_iterator first, const_iterator last);
-    void remove(const value_type& v);
-    template <class Predicate> void remove_if(Predicate pred);
-    void unique();
-    template <class BinaryPredicate> void unique(BinaryPredicate binary_pred);
+    size_type remove(const value_type& v);           // void before C++20
+    template <class Predicate>
+      size_type remove_if(Predicate pred);           // void before C++20
+    size_type unique();                              // void before C++20
+    template <class BinaryPredicate>
+      size_type unique(BinaryPredicate binary_pred); // void before C++20
     void merge(forward_list& x);
     void merge(forward_list&& x);
     template <class Compare> void merge(forward_list& x, Compare comp);
@@ -530,7 +532,7 @@
 #if _LIBCPP_STD_VER >= 14
         _NOEXCEPT;
 #else
-        _NOEXCEPT_(!__node_traits::propagate_on_container_move_assignment::value || 
+        _NOEXCEPT_(!__node_traits::propagate_on_container_move_assignment::value ||
                     __is_nothrow_swappable<__node_allocator>::value);
 #endif
 protected:
@@ -595,11 +597,11 @@
 #if _LIBCPP_STD_VER >= 14
         _NOEXCEPT
 #else
-        _NOEXCEPT_(!__node_traits::propagate_on_container_move_assignment::value || 
+        _NOEXCEPT_(!__node_traits::propagate_on_container_move_assignment::value ||
                     __is_nothrow_swappable<__node_allocator>::value)
 #endif
 {
-    __swap_allocator(__alloc(), __x.__alloc(), 
+    __swap_allocator(__alloc(), __x.__alloc(),
             integral_constant<bool, __node_traits::propagate_on_container_swap::value>());
     using _VSTD::swap;
     swap(__before_begin()->__next_, __x.__before_begin()->__next_);
@@ -647,6 +649,11 @@
 
     typedef typename base::iterator       iterator;
     typedef typename base::const_iterator const_iterator;
+#if _LIBCPP_STD_VER > 17
+    typedef size_type                                __remove_return_type;
+#else
+    typedef void                                     __remove_return_type;
+#endif
 
     _LIBCPP_INLINE_VISIBILITY
     forward_list()
@@ -808,7 +815,6 @@
     _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT {base::clear();}
 
-#ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
     void splice_after(const_iterator __p, forward_list&& __x);
     _LIBCPP_INLINE_VISIBILITY
@@ -816,16 +822,15 @@
     _LIBCPP_INLINE_VISIBILITY
     void splice_after(const_iterator __p, forward_list&& __x,
                       const_iterator __f, const_iterator __l);
-#endif  // _LIBCPP_CXX03_LANG
     void splice_after(const_iterator __p, forward_list& __x);
     void splice_after(const_iterator __p, forward_list& __x, const_iterator __i);
     void splice_after(const_iterator __p, forward_list& __x,
                       const_iterator __f, const_iterator __l);
-    void remove(const value_type& __v);
-    template <class _Predicate> void remove_if(_Predicate __pred);
+    __remove_return_type remove(const value_type& __v);
+    template <class _Predicate> __remove_return_type remove_if(_Predicate __pred);
     _LIBCPP_INLINE_VISIBILITY
-    void unique() {unique(__equal_to<value_type>());}
-    template <class _BinaryPredicate> void unique(_BinaryPredicate __binary_pred);
+    __remove_return_type unique() {return unique(__equal_to<value_type>());}
+    template <class _BinaryPredicate> __remove_return_type unique(_BinaryPredicate __binary_pred);
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
     void merge(forward_list&& __x) {merge(__x, __less<value_type>());}
@@ -1468,8 +1473,6 @@
     }
 }
 
-#ifndef _LIBCPP_CXX03_LANG
-
 template <class _Tp, class _Alloc>
 inline _LIBCPP_INLINE_VISIBILITY
 void
@@ -1499,21 +1502,21 @@
     splice_after(__p, __x, __f, __l);
 }
 
-#endif  // _LIBCPP_CXX03_LANG
-
 template <class _Tp, class _Alloc>
-void
+typename forward_list<_Tp, _Alloc>::__remove_return_type
 forward_list<_Tp, _Alloc>::remove(const value_type& __v)
 {
-    forward_list<_Tp, _Alloc> __deleted_nodes; // collect the nodes we're removing
-    iterator __e = end();
+    forward_list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing
+    typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0;
+    const iterator __e = end();
     for (iterator __i = before_begin(); __i.__get_begin()->__next_ != nullptr;)
     {
         if (__i.__get_begin()->__next_->__value_ == __v)
         {
+            ++__count_removed;
             iterator __j = _VSTD::next(__i, 2);
             for (; __j != __e && *__j == __v; ++__j)
-                ;
+                ++__count_removed;
             __deleted_nodes.splice_after(__deleted_nodes.before_begin(), *this, __i, __j);
             if (__j == __e)
                 break;
@@ -1522,22 +1525,27 @@
         else
             ++__i;
     }
+    
+    return (__remove_return_type) __count_removed;
 }
 
 template <class _Tp, class _Alloc>
 template <class _Predicate>
-void
+typename forward_list<_Tp, _Alloc>::__remove_return_type
 forward_list<_Tp, _Alloc>::remove_if(_Predicate __pred)
 {
-    iterator __e = end();
+    forward_list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing
+    typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0;
+    const iterator __e = end();
     for (iterator __i = before_begin(); __i.__get_begin()->__next_ != nullptr;)
     {
         if (__pred(__i.__get_begin()->__next_->__value_))
         {
+            ++__count_removed;
             iterator __j = _VSTD::next(__i, 2);
             for (; __j != __e && __pred(*__j); ++__j)
-                ;
-            erase_after(__i, __j);
+                ++__count_removed;
+            __deleted_nodes.splice_after(__deleted_nodes.before_begin(), *this, __i, __j);
             if (__j == __e)
                 break;
             __i = __j;
@@ -1545,22 +1553,28 @@
         else
             ++__i;
     }
+    
+    return (__remove_return_type) __count_removed;
 }
 
 template <class _Tp, class _Alloc>
 template <class _BinaryPredicate>
-void
+typename forward_list<_Tp, _Alloc>::__remove_return_type
 forward_list<_Tp, _Alloc>::unique(_BinaryPredicate __binary_pred)
 {
+    forward_list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing
+    typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0;
     for (iterator __i = begin(), __e = end(); __i != __e;)
     {
         iterator __j = _VSTD::next(__i);
         for (; __j != __e && __binary_pred(*__i, *__j); ++__j)
-            ;
+            ++__count_removed;
         if (__i.__get_begin()->__next_ != __j.__get_unsafe_node_pointer())
-            erase_after(__i, __j);
+            __deleted_nodes.splice_after(__deleted_nodes.before_begin(), *this, __i, __j);
         __i = __j;
     }
+    
+    return (__remove_return_type) __count_removed;
 }
 
 template <class _Tp, class _Alloc>
diff --git a/linux-x64/clang/include/c++/v1/fstream b/linux-x64/clang/include/c++/v1/fstream
index 1902ce9..60a05b0 100644
--- a/linux-x64/clang/include/c++/v1/fstream
+++ b/linux-x64/clang/include/c++/v1/fstream
@@ -235,7 +235,7 @@
     basic_filebuf* open(const string& __s, ios_base::openmode __mode);
 
 #if _LIBCPP_STD_VER >= 17
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_INLINE_VISIBILITY
     basic_filebuf* open(const _VSTD_FS::path& __p, ios_base::openmode __mode) {
       return open(__p.c_str(), __mode);
     }
@@ -757,7 +757,7 @@
                                        this->eback() + __ibs_, __inext);
                 if (__r == codecvt_base::noconv)
                 {
-                    this->setg((char_type*)__extbuf_, (char_type*)__extbuf_, 
+                    this->setg((char_type*)__extbuf_, (char_type*)__extbuf_,
                                           (char_type*)const_cast<char *>(__extbufend_));
                     __c = traits_type::to_int_type(*this->gptr());
                 }
@@ -1151,7 +1151,7 @@
     _LIBCPP_INLINE_VISIBILITY
     explicit basic_ifstream(const string& __s, ios_base::openmode __mode = ios_base::in);
 #if _LIBCPP_STD_VER >= 17
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_INLINE_VISIBILITY
     explicit basic_ifstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in)
       : basic_ifstream(__p.c_str(), __mode) {}
 #endif // _LIBCPP_STD_VER >= 17
@@ -1177,7 +1177,7 @@
 #endif
     void open(const string& __s, ios_base::openmode __mode = ios_base::in);
 #if _LIBCPP_STD_VER >= 17
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_INLINE_VISIBILITY
     void open(const filesystem::path& __p,
               ios_base::openmode __mode = ios_base::in) {
       return open(__p.c_str(), __mode);
@@ -1365,7 +1365,7 @@
     explicit basic_ofstream(const string& __s, ios_base::openmode __mode = ios_base::out);
 
 #if _LIBCPP_STD_VER >= 17
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_INLINE_VISIBILITY
     explicit basic_ofstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::out)
       : basic_ofstream(__p.c_str(), __mode) {}
 #endif // _LIBCPP_STD_VER >= 17
@@ -1392,7 +1392,7 @@
     void open(const string& __s, ios_base::openmode __mode = ios_base::out);
 
 #if _LIBCPP_STD_VER >= 17
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_INLINE_VISIBILITY
     void open(const filesystem::path& __p, ios_base::openmode __mode = ios_base::out)
     { return open(__p.c_str(), __mode); }
 #endif // _LIBCPP_STD_VER >= 17
@@ -1579,7 +1579,7 @@
     explicit basic_fstream(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
 
 #if _LIBCPP_STD_VER >= 17
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_INLINE_VISIBILITY
     explicit basic_fstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in | ios_base::out)
       : basic_fstream(__p.c_str(), __mode) {}
 #endif // _LIBCPP_STD_VER >= 17
@@ -1607,7 +1607,7 @@
     void open(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
 
 #if _LIBCPP_STD_VER >= 17
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_INLINE_VISIBILITY
     void open(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in|ios_base::out)
     { return open(__p.c_str(), __mode); }
 #endif // _LIBCPP_STD_VER >= 17
diff --git a/linux-x64/clang/include/c++/v1/functional b/linux-x64/clang/include/c++/v1/functional
index def8a75..bcd74a9 100644
--- a/linux-x64/clang/include/c++/v1/functional
+++ b/linux-x64/clang/include/c++/v1/functional
@@ -230,6 +230,10 @@
 template<class R, class Fn, class... BoundArgs>
   unspecified bind(Fn&&, BoundArgs&&...);
 
+template<class F, class... Args>
+ invoke_result_t<F, Args...> invoke(F&& f, Args&&... args) // C++17
+    noexcept(is_nothrow_invocable_v<F, Args...>);
+
 namespace placeholders {
   // M is the implementation-defined number of placeholders
   extern unspecified _1;
@@ -1475,6 +1479,8 @@
 // __alloc_func holds a functor and an allocator.
 
 template <class _Fp, class _Ap, class _FB> class __alloc_func;
+template <class _Fp, class _FB>
+class __default_alloc_func;
 
 template <class _Fp, class _Ap, class _Rp, class... _ArgTypes>
 class __alloc_func<_Fp, _Ap, _Rp(_ArgTypes...)>
@@ -1482,8 +1488,8 @@
     __compressed_pair<_Fp, _Ap> __f_;
 
   public:
-    typedef _Fp _Target;
-    typedef _Ap _Alloc;
+    typedef _LIBCPP_NODEBUG_TYPE _Fp _Target;
+    typedef _LIBCPP_NODEBUG_TYPE _Ap _Alloc;
 
     _LIBCPP_INLINE_VISIBILITY
     const _Target& __target() const { return __f_.first(); }
@@ -1544,6 +1550,56 @@
 
     _LIBCPP_INLINE_VISIBILITY
     void destroy() _NOEXCEPT { __f_.~__compressed_pair<_Target, _Alloc>(); }
+
+    static void __destroy_and_delete(__alloc_func* __f) {
+      typedef allocator_traits<_Alloc> __alloc_traits;
+      typedef typename __rebind_alloc_helper<__alloc_traits, __alloc_func>::type
+          _FunAlloc;
+      _FunAlloc __a(__f->__get_allocator());
+      __f->destroy();
+      __a.deallocate(__f, 1);
+    }
+};
+
+template <class _Fp, class _Rp, class... _ArgTypes>
+class __default_alloc_func<_Fp, _Rp(_ArgTypes...)> {
+  _Fp __f_;
+
+public:
+  typedef _LIBCPP_NODEBUG_TYPE _Fp _Target;
+
+  _LIBCPP_INLINE_VISIBILITY
+  const _Target& __target() const { return __f_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit __default_alloc_func(_Target&& __f) : __f_(std::move(__f)) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit __default_alloc_func(const _Target& __f) : __f_(__f) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  _Rp operator()(_ArgTypes&&... __arg) {
+    typedef __invoke_void_return_wrapper<_Rp> _Invoker;
+    return _Invoker::__call(__f_, _VSTD::forward<_ArgTypes>(__arg)...);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  __default_alloc_func* __clone() const {
+      __builtin_new_allocator::__holder_t __hold =
+        __builtin_new_allocator::__allocate_type<__default_alloc_func>(1);
+    __default_alloc_func* __res =
+        ::new (__hold.get()) __default_alloc_func(__f_);
+    (void)__hold.release();
+    return __res;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void destroy() _NOEXCEPT { __f_.~_Target(); }
+
+  static void __destroy_and_delete(__default_alloc_func* __f) {
+    __f->destroy();
+      __builtin_new_allocator::__deallocate_type<__default_alloc_func>(__f, 1);
+  }
 };
 
 // __base provides an abstract interface for copyable functors.
@@ -1692,7 +1748,7 @@
     __value_func() _NOEXCEPT : __f_(0) {}
 
     template <class _Fp, class _Alloc>
-    _LIBCPP_INLINE_VISIBILITY __value_func(_Fp&& __f, const _Alloc __a)
+    _LIBCPP_INLINE_VISIBILITY __value_func(_Fp&& __f, const _Alloc& __a)
         : __f_(0)
     {
         typedef allocator_traits<_Alloc> __alloc_traits;
@@ -1720,6 +1776,11 @@
         }
     }
 
+    template <class _Fp,
+        class = typename enable_if<!is_same<typename decay<_Fp>::type, __value_func>::value>::type>
+    _LIBCPP_INLINE_VISIBILITY explicit __value_func(_Fp&& __f)
+        : __value_func(std::forward<_Fp>(__f), allocator<_Fp>()) {}
+
     _LIBCPP_INLINE_VISIBILITY
     __value_func(const __value_func& __f)
     {
@@ -1919,29 +1980,22 @@
         return __f->__clone();
     }
 
-    template <typename _Fun> static void __large_destroy(void* __s)
-    {
-        typedef allocator_traits<typename _Fun::_Alloc> __alloc_traits;
-        typedef typename __rebind_alloc_helper<__alloc_traits, _Fun>::type
-            _FunAlloc;
-        _Fun* __f = static_cast<_Fun*>(__s);
-        _FunAlloc __a(__f->__get_allocator());
-        __f->destroy();
-        __a.deallocate(__f, 1);
+    template <typename _Fun>
+    static void __large_destroy(void* __s) {
+      _Fun::__destroy_and_delete(static_cast<_Fun*>(__s));
     }
 
     template <typename _Fun>
     _LIBCPP_INLINE_VISIBILITY static const __policy*
-        __choose_policy(/* is_small = */ false_type)
-    {
-        static const _LIBCPP_CONSTEXPR __policy __policy_ = {
-            &__large_clone<_Fun>, &__large_destroy<_Fun>, false,
+    __choose_policy(/* is_small = */ false_type) {
+      static const _LIBCPP_CONSTEXPR __policy __policy_ = {
+          &__large_clone<_Fun>, &__large_destroy<_Fun>, false,
 #ifndef _LIBCPP_NO_RTTI
-            &typeid(typename _Fun::_Target)
+          &typeid(typename _Fun::_Target)
 #else
-            nullptr
+          nullptr
 #endif
-        };
+      };
         return &__policy_;
     }
 
@@ -2066,6 +2120,25 @@
         }
     }
 
+    template <class _Fp, class = typename enable_if<!is_same<typename decay<_Fp>::type, __policy_func>::value>::type>
+    _LIBCPP_INLINE_VISIBILITY explicit __policy_func(_Fp&& __f)
+        : __policy_(__policy::__create_empty()) {
+      typedef __default_alloc_func<_Fp, _Rp(_ArgTypes...)> _Fun;
+
+      if (__function::__not_null(__f)) {
+        __invoker_ = __invoker::template __create<_Fun>();
+        __policy_ = __policy::__create<_Fun>();
+        if (__use_small_storage<_Fun>()) {
+          ::new ((void*)&__buf_.__small) _Fun(_VSTD::move(__f));
+        } else {
+          __builtin_new_allocator::__holder_t __hold =
+              __builtin_new_allocator::__allocate_type<_Fun>(1);
+          __buf_.__large = ::new (__hold.get()) _Fun(_VSTD::move(__f));
+          (void)__hold.release();
+        }
+      }
+    }
+
     _LIBCPP_INLINE_VISIBILITY
     __policy_func(const __policy_func& __f)
         : __buf_(__f.__buf_), __invoker_(__f.__invoker_),
@@ -2173,8 +2246,8 @@
 
     __func __f_;
 
-    template <class _Fp, bool = __lazy_and<
-        integral_constant<bool, !is_same<__uncvref_t<_Fp>, function>::value>,
+    template <class _Fp, bool = _And<
+        _IsNotSame<__uncvref_t<_Fp>, function>,
         __invokable<_Fp&, _ArgTypes...>
     >::value>
     struct __callable;
@@ -2286,8 +2359,7 @@
 
 template <class _Rp, class... _ArgTypes>
 template <class _Fp, class>
-function<_Rp(_ArgTypes...)>::function(_Fp __f)
-    : __f_(_VSTD::move(__f), allocator<_Fp>()) {}
+function<_Rp(_ArgTypes...)>::function(_Fp __f) : __f_(_VSTD::move(__f)) {}
 
 #if _LIBCPP_STD_VER <= 14
 template <class _Rp, class... _ArgTypes>
@@ -2484,7 +2556,7 @@
 
 template <class _Ti, class ..._Uj>
 inline _LIBCPP_INLINE_VISIBILITY
-typename __lazy_enable_if
+typename _EnableIf
 <
     is_bind_expression<_Ti>::value,
     __invoke_of<_Ti&, _Uj...>
@@ -2769,9 +2841,9 @@
 #if _LIBCPP_STD_VER > 14
 
 template <class _Fn, class ..._Args>
-result_of_t<_Fn&&(_Args&&...)>
+invoke_result_t<_Fn, _Args...>
 invoke(_Fn&& __f, _Args&&... __args)
-    noexcept(noexcept(_VSTD::__invoke(_VSTD::forward<_Fn>(__f), _VSTD::forward<_Args>(__args)...)))
+    noexcept(is_nothrow_invocable_v<_Fn, _Args...>)
 {
     return _VSTD::__invoke(_VSTD::forward<_Fn>(__f), _VSTD::forward<_Args>(__args)...);
 }
diff --git a/linux-x64/clang/include/c++/v1/future b/linux-x64/clang/include/c++/v1/future
index 50bdd2d..6da88c6 100644
--- a/linux-x64/clang/include/c++/v1/future
+++ b/linux-x64/clang/include/c++/v1/future
@@ -408,11 +408,7 @@
 
 #ifndef _LIBCPP_HAS_NO_STRONG_ENUMS
 
-#ifdef _LIBCPP_UNDERLYING_TYPE
 typedef underlying_type<launch>::type __launch_underlying_type;
-#else
-typedef int __launch_underlying_type;
-#endif
 
 inline _LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR
@@ -2015,7 +2011,7 @@
               class = typename enable_if
               <
                   !is_same<
-                      typename __uncvref<_Fp>::type, 
+                      typename __uncvref<_Fp>::type,
                       packaged_task
                       >::value
                   >::type
@@ -2026,7 +2022,7 @@
               class = typename enable_if
               <
                   !is_same<
-                      typename __uncvref<_Fp>::type, 
+                      typename __uncvref<_Fp>::type,
                       packaged_task
                       >::value
                   >::type
@@ -2144,7 +2140,7 @@
               class = typename enable_if
               <
                   !is_same<
-                      typename __uncvref<_Fp>::type, 
+                      typename __uncvref<_Fp>::type,
                       packaged_task
                       >::value
                   >::type
@@ -2155,11 +2151,11 @@
               class = typename enable_if
               <
                   !is_same<
-                      typename __uncvref<_Fp>::type, 
+                      typename __uncvref<_Fp>::type,
                       packaged_task
                       >::value
                   >::type
-              >    
+              >
         _LIBCPP_INLINE_VISIBILITY
         packaged_task(allocator_arg_t, const _Allocator& __a, _Fp&& __f)
              : __f_(allocator_arg, __a, _VSTD::forward<_Fp>(__f)),
diff --git a/linux-x64/clang/include/c++/v1/initializer_list b/linux-x64/clang/include/c++/v1/initializer_list
index 6c4493b..893736f 100644
--- a/linux-x64/clang/include/c++/v1/initializer_list
+++ b/linux-x64/clang/include/c++/v1/initializer_list
@@ -82,7 +82,7 @@
     _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11
     size_t    size()  const _NOEXCEPT {return __size_;}
-    
+
     _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11
     const _Ep* begin() const _NOEXCEPT {return __begin_;}
diff --git a/linux-x64/clang/include/c++/v1/inttypes.h b/linux-x64/clang/include/c++/v1/inttypes.h
index 0f1d4f4..e136b23 100644
--- a/linux-x64/clang/include/c++/v1/inttypes.h
+++ b/linux-x64/clang/include/c++/v1/inttypes.h
@@ -8,7 +8,12 @@
 //===----------------------------------------------------------------------===//
 
 #ifndef _LIBCPP_INTTYPES_H
+// AIX system headers need inttypes.h to be re-enterable while _STD_TYPES_T
+// is defined until an inclusion of it without _STD_TYPES_T occurs, in which
+// case the header guard macro is defined.
+#if !defined(_AIX) || !defined(_STD_TYPES_T)
 #define _LIBCPP_INTTYPES_H
+#endif // _STD_TYPES_T
 
 /*
     inttypes.h synopsis
diff --git a/linux-x64/clang/include/c++/v1/iomanip b/linux-x64/clang/include/c++/v1/iomanip
index 82b7603..3f78f4d 100644
--- a/linux-x64/clang/include/c++/v1/iomanip
+++ b/linux-x64/clang/include/c++/v1/iomanip
@@ -515,7 +515,7 @@
 
 template <class _CharT, class _Traits, class _ForwardIterator>
 std::basic_ostream<_CharT, _Traits> &
-__quoted_output ( basic_ostream<_CharT, _Traits> &__os, 
+__quoted_output ( basic_ostream<_CharT, _Traits> &__os,
         _ForwardIterator __first, _ForwardIterator __last, _CharT __delim, _CharT __escape )
 {
     _VSTD::basic_string<_CharT, _Traits> __str;
@@ -570,7 +570,7 @@
 
 template <class _CharT, class _Traits, class _Iter>
 basic_ostream<_CharT, _Traits>& operator<<(
-         basic_ostream<_CharT, _Traits>& __os, 
+         basic_ostream<_CharT, _Traits>& __os,
          const __quoted_output_proxy<_CharT, _Iter, _Traits> & __proxy)
 {
     return __quoted_output (__os, __proxy.__first, __proxy.__last, __proxy.__delim, __proxy.__escape);
@@ -590,7 +590,7 @@
 template <class _CharT, class _Traits, class _Allocator>
 _LIBCPP_INLINE_VISIBILITY
 basic_ostream<_CharT, _Traits>& operator<<(
-        basic_ostream<_CharT, _Traits>& __os, 
+        basic_ostream<_CharT, _Traits>& __os,
         const __quoted_proxy<_CharT, _Traits, _Allocator> & __proxy)
 {
     return __quoted_output (__os, __proxy.__string.cbegin (), __proxy.__string.cend (), __proxy.__delim, __proxy.__escape);
@@ -600,7 +600,7 @@
 template <class _CharT, class _Traits, class _Allocator>
 _LIBCPP_INLINE_VISIBILITY
 basic_istream<_CharT, _Traits>& operator>>(
-        basic_istream<_CharT, _Traits>& __is, 
+        basic_istream<_CharT, _Traits>& __is,
         const __quoted_proxy<_CharT, _Traits, _Allocator> & __proxy)
 {
     return __quoted_input ( __is, __proxy.__string, __proxy.__delim, __proxy.__escape );
@@ -660,7 +660,7 @@
 quoted (basic_string_view <_CharT, _Traits> __sv,
              _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))
 {
-    return __quoted_output_proxy<_CharT, const _CharT *, _Traits> 
+    return __quoted_output_proxy<_CharT, const _CharT *, _Traits>
          ( __sv.data(), __sv.data() + __sv.size(), __delim, __escape );
 }
 #endif
diff --git a/linux-x64/clang/include/c++/v1/ios b/linux-x64/clang/include/c++/v1/ios
index 96e84eb..88efefb 100644
--- a/linux-x64/clang/include/c++/v1/ios
+++ b/linux-x64/clang/include/c++/v1/ios
@@ -202,8 +202,8 @@
 };
 
 concept_map ErrorCodeEnum<io_errc> { };
-error_code make_error_code(io_errc e) noexcept; 
-error_condition make_error_condition(io_errc e) noexcept; 
+error_code make_error_code(io_errc e) noexcept;
+error_condition make_error_condition(io_errc e) noexcept;
 storage-class-specifier const error_category& iostream_category() noexcept;
 
 }  // std
@@ -330,6 +330,15 @@
     void __set_badbit_and_consider_rethrow();
     void __set_failbit_and_consider_rethrow();
 
+    _LIBCPP_INLINE_VISIBILITY
+    void __setstate_nothrow(iostate __state)
+    {
+        if (__rdbuf_)
+            __rdstate_ |= __state;
+        else
+            __rdstate_ |= __state | ios_base::badbit;
+    }
+
 protected:
     _LIBCPP_INLINE_VISIBILITY
     ios_base() {// purposefully does no initialization
@@ -635,47 +644,47 @@
     virtual ~basic_ios();
 
     // 27.5.4.2 Members:
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     basic_ostream<char_type, traits_type>* tie() const;
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr);
 
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     basic_streambuf<char_type, traits_type>* rdbuf() const;
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb);
 
     basic_ios& copyfmt(const basic_ios& __rhs);
 
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     char_type fill() const;
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     char_type fill(char_type __ch);
 
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     locale imbue(const locale& __loc);
 
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     char narrow(char_type __c, char __dfault) const;
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     char_type widen(char __c) const;
 
 protected:
     _LIBCPP_INLINE_VISIBILITY
     basic_ios() {// purposefully does no initialization
                 }
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     void init(basic_streambuf<char_type, traits_type>* __sb);
 
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     void move(basic_ios& __rhs);
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
     void move(basic_ios&& __rhs) {move(__rhs);}
 #endif
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     void swap(basic_ios& __rhs) _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY 
+    _LIBCPP_INLINE_VISIBILITY
     void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb);
 private:
     basic_ostream<char_type, traits_type>* __tie_;
diff --git a/linux-x64/clang/include/c++/v1/istream b/linux-x64/clang/include/c++/v1/istream
index bedd738..d6217bb 100644
--- a/linux-x64/clang/include/c++/v1/istream
+++ b/linux-x64/clang/include/c++/v1/istream
@@ -362,26 +362,31 @@
 _LIBCPP_INLINE_VISIBILITY
 basic_istream<_CharT, _Traits>&
 __input_arithmetic(basic_istream<_CharT, _Traits>& __is, _Tp& __n) {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __s(__is);
+    if (__s)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __s(__is);
-        if (__s)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif  // _LIBCPP_NO_EXCEPTIONS
             typedef istreambuf_iterator<_CharT, _Traits> _Ip;
             typedef num_get<_CharT, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __err, __n);
-            __is.setstate(__err);
-        }
+            use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __state, __n);
 #ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif
+        __is.setstate(__state);
     }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
     return __is;
 }
 
@@ -466,39 +471,46 @@
 _LIBCPP_INLINE_VISIBILITY
 basic_istream<_CharT, _Traits>&
 __input_arithmetic_with_numeric_limits(basic_istream<_CharT, _Traits>& __is, _Tp& __n) {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __s(__is);
+    if (__s)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __s(__is);
-        if (__s)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif  // _LIBCPP_NO_EXCEPTIONS
             typedef istreambuf_iterator<_CharT, _Traits> _Ip;
             typedef num_get<_CharT, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
             long __temp;
-            use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __err, __temp);
+            use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __state, __temp);
             if (__temp < numeric_limits<_Tp>::min())
             {
-                __err |= ios_base::failbit;
+                __state |= ios_base::failbit;
                 __n = numeric_limits<_Tp>::min();
             }
             else if (__temp > numeric_limits<_Tp>::max())
             {
-                __err |= ios_base::failbit;
+                __state |= ios_base::failbit;
                 __n = numeric_limits<_Tp>::max();
             }
             else
+            {
                 __n = static_cast<_Tp>(__temp);
-            __is.setstate(__err);
-        }
+            }
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        __is.setstate(__state);
+    }
     return __is;
 }
 
@@ -521,22 +533,22 @@
 basic_istream<_CharT, _Traits>&
 __input_c_string(basic_istream<_CharT, _Traits>& __is, _CharT* __p, size_t __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            auto __s = __p;
+#endif
+            _CharT* __s = __p;
             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
-            ios_base::iostate __err = ios_base::goodbit;
             while (__s != __p + (__n-1))
             {
                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
                 if (_Traits::eq_int_type(__i, _Traits::eof()))
                 {
-                   __err |= ios_base::eofbit;
+                   __state |= ios_base::eofbit;
                    break;
                 }
                 _CharT __ch = _Traits::to_char_type(__i);
@@ -548,16 +560,21 @@
             *__s = _CharT();
             __is.width(0);
             if (__s == __p)
-               __err |= ios_base::failbit;
-            __is.setstate(__err);
-        }
+               __state |= ios_base::failbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif
+        __is.setstate(__state);
     }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
     return __is;
 }
 
@@ -568,7 +585,7 @@
 basic_istream<_CharT, _Traits>&
 operator>>(basic_istream<_CharT, _Traits>& __is, _CharT (&__buf)[_Np])
 {
-    auto __n = _Np;
+    size_t __n = _Np;
     if (__is.width() > 0)
         __n = _VSTD::min(size_t(__is.width()), _Np);
     return _VSTD::__input_c_string(__is, __buf, __n);
@@ -625,26 +642,33 @@
 basic_istream<_CharT, _Traits>&
 operator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif
             typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
             if (_Traits::eq_int_type(__i, _Traits::eof()))
-                __is.setstate(ios_base::eofbit | ios_base::failbit);
+                __state |= ios_base::eofbit | ios_base::failbit;
             else
                 __c = _Traits::to_char_type(__i);
-        }
 #ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif
+        __is.setstate(__state);
     }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
     return __is;
 }
 
@@ -668,58 +692,56 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(basic_streambuf<char_type, traits_type>* __sb)
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __s(*this, true);
+    if (__s)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this, true);
-        if (__s)
+        if (__sb)
         {
-            if (__sb)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+            try
             {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-                try
+#endif // _LIBCPP_NO_EXCEPTIONS
+                while (true)
                 {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-                    ios_base::iostate __err = ios_base::goodbit;
-                    while (true)
+                    typename traits_type::int_type __i = this->rdbuf()->sgetc();
+                    if (traits_type::eq_int_type(__i, _Traits::eof()))
                     {
-                        typename traits_type::int_type __i = this->rdbuf()->sgetc();
-                        if (traits_type::eq_int_type(__i, _Traits::eof()))
-                        {
-                           __err |= ios_base::eofbit;
-                           break;
-                        }
-                        if (traits_type::eq_int_type(
-                                __sb->sputc(traits_type::to_char_type(__i)),
-                                traits_type::eof()))
-                            break;
-                        ++__gc_;
-                        this->rdbuf()->sbumpc();
+                       __state |= ios_base::eofbit;
+                       break;
                     }
-                    if (__gc_ == 0)
-                       __err |= ios_base::failbit;
-                    this->setstate(__err);
+                    if (traits_type::eq_int_type(
+                            __sb->sputc(traits_type::to_char_type(__i)),
+                            traits_type::eof()))
+                        break;
+                    ++__gc_;
+                    this->rdbuf()->sbumpc();
+                }
+                if (__gc_ == 0)
+                   __state |= ios_base::failbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
-                }
-                catch (...)
-                {
-                    if (__gc_ == 0)
-                        this->__set_failbit_and_consider_rethrow();
-                }
-#endif  // _LIBCPP_NO_EXCEPTIONS
             }
-            else
-                this->setstate(ios_base::failbit);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+            catch (...)
+            {
+                __state |= ios_base::badbit;
+                if (__gc_ == 0)
+                    __state |= ios_base::failbit;
+
+                this->__setstate_nothrow(__state);
+                if (this->exceptions() & ios_base::failbit || this->exceptions() & ios_base::badbit)
+                {
+                    throw;
+                }
+            }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        }
+        else
+        {
+            __state |= ios_base::failbit;
+        }
+        this->setstate(__state);
+    }
     return *this;
 }
 
@@ -727,28 +749,34 @@
 typename basic_istream<_CharT, _Traits>::int_type
 basic_istream<_CharT, _Traits>::get()
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
     int_type __r = traits_type::eof();
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __s(*this, true);
+    if (__s)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this, true);
-        if (__s)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif
             __r = this->rdbuf()->sbumpc();
             if (traits_type::eq_int_type(__r, traits_type::eof()))
-               this->setstate(ios_base::failbit | ios_base::eofbit);
+               __state |= ios_base::failbit | ios_base::eofbit;
             else
                 __gc_ = 1;
-        }
 #ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            this->__setstate_nothrow(this->rdstate() | ios_base::badbit);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif
+        this->setstate(__state);
     }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
     return __r;
 }
 
@@ -756,23 +784,23 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n, char_type __dlm)
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+        if (__n > 0)
         {
-            if (__n > 0)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+            try
             {
-                ios_base::iostate __err = ios_base::goodbit;
+#endif
                 while (__gc_ < __n-1)
                 {
                     int_type __i = this->rdbuf()->sgetc();
                     if (traits_type::eq_int_type(__i, traits_type::eof()))
                     {
-                       __err |= ios_base::eofbit;
+                       __state |= ios_base::eofbit;
                        break;
                     }
                     char_type __ch = traits_type::to_char_type(__i);
@@ -783,23 +811,33 @@
                      this->rdbuf()->sbumpc();
                 }
                 if (__gc_ == 0)
-                   __err |= ios_base::failbit;
-                this->setstate(__err);
-            }
-            else
-                this->setstate(ios_base::failbit);
-        }
-        if (__n > 0)
-            *__s = char_type();
+                   __state |= ios_base::failbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
+            }
+            catch (...)
+            {
+                __state |= ios_base::badbit;
+                this->__setstate_nothrow(__state);
+                if (this->exceptions() & ios_base::badbit)
+                {
+                    if (__n > 0)
+                        *__s = char_type();
+                    throw;
+                }
+            }
+#endif
+        }
+        else
+        {
+            __state |= ios_base::failbit;
+        }
+
         if (__n > 0)
             *__s = char_type();
-        this->__set_badbit_and_consider_rethrow();
+        this->setstate(__state);
     }
-#endif  // _LIBCPP_NO_EXCEPTIONS
+    if (__n > 0)
+        *__s = char_type();
     return *this;
 }
 
@@ -808,52 +846,43 @@
 basic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __sb,
                                     char_type __dlm)
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            ios_base::iostate __err = ios_base::goodbit;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-            try
-            {
 #endif  // _LIBCPP_NO_EXCEPTIONS
-                while (true)
+            while (true)
+            {
+                typename traits_type::int_type __i = this->rdbuf()->sgetc();
+                if (traits_type::eq_int_type(__i, traits_type::eof()))
                 {
-                    typename traits_type::int_type __i = this->rdbuf()->sgetc();
-                    if (traits_type::eq_int_type(__i, traits_type::eof()))
-                    {
-                       __err |= ios_base::eofbit;
-                       break;
-                    }
-                    char_type __ch = traits_type::to_char_type(__i);
-                    if (traits_type::eq(__ch, __dlm))
-                        break;
-                    if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type::eof()))
-                        break;
-                    ++__gc_;
-                    this->rdbuf()->sbumpc();
+                   __state |= ios_base::eofbit;
+                   break;
                 }
+                char_type __ch = traits_type::to_char_type(__i);
+                if (traits_type::eq(__ch, __dlm))
+                    break;
+                if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type::eof()))
+                    break;
+                ++__gc_;
+                this->rdbuf()->sbumpc();
+            }
 #ifndef _LIBCPP_NO_EXCEPTIONS
-            }
-            catch (...)
-            {
-            }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-            if (__gc_ == 0)
-               __err |= ios_base::failbit;
-            this->setstate(__err);
         }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            // according to the spec, exceptions here are caught but not rethrown
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        if (__gc_ == 0)
+           __state |= ios_base::failbit;
+        this->setstate(__state);
+    }
     return *this;
 }
 
@@ -861,21 +890,21 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_type __dlm)
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            ios_base::iostate __err = ios_base::goodbit;
+#endif  // _LIBCPP_NO_EXCEPTIONS
             while (true)
             {
                 typename traits_type::int_type __i = this->rdbuf()->sgetc();
                 if (traits_type::eq_int_type(__i, traits_type::eof()))
                 {
-                   __err |= ios_base::eofbit;
+                   __state |= ios_base::eofbit;
                    break;
                 }
                 char_type __ch = traits_type::to_char_type(__i);
@@ -887,28 +916,35 @@
                 }
                 if (__gc_ >= __n-1)
                 {
-                    __err |= ios_base::failbit;
+                    __state |= ios_base::failbit;
                     break;
                 }
                 *__s++ = __ch;
                 this->rdbuf()->sbumpc();
                 ++__gc_;
             }
-            if (__gc_ == 0)
-               __err |= ios_base::failbit;
-            this->setstate(__err);
-        }
-        if (__n > 0)
-            *__s = char_type();
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        if (__n > 0)
-            *__s = char_type();
-        this->__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                if (__n > 0)
+                    *__s = char_type();
+                if (__gc_ == 0)
+                    __state |= ios_base::failbit;
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+    }
+    if (__n > 0)
+        *__s = char_type();
+    if (__gc_ == 0)
+        __state |= ios_base::failbit;
+    this->setstate(__state);
     return *this;
 }
 
@@ -916,15 +952,15 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::ignore(streamsize __n, int_type __dlm)
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            ios_base::iostate __err = ios_base::goodbit;
+#endif  // _LIBCPP_NO_EXCEPTIONS
             if (__n == numeric_limits<streamsize>::max())
             {
                 while (true)
@@ -932,7 +968,7 @@
                     typename traits_type::int_type __i = this->rdbuf()->sbumpc();
                     if (traits_type::eq_int_type(__i, traits_type::eof()))
                     {
-                       __err |= ios_base::eofbit;
+                       __state |= ios_base::eofbit;
                        break;
                     }
                     ++__gc_;
@@ -947,7 +983,7 @@
                     typename traits_type::int_type __i = this->rdbuf()->sbumpc();
                     if (traits_type::eq_int_type(__i, traits_type::eof()))
                     {
-                       __err |= ios_base::eofbit;
+                       __state |= ios_base::eofbit;
                        break;
                     }
                     ++__gc_;
@@ -955,15 +991,20 @@
                         break;
                 }
             }
-            this->setstate(__err);
-        }
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        this->setstate(__state);
+    }
     return *this;
 }
 
@@ -971,26 +1012,33 @@
 typename basic_istream<_CharT, _Traits>::int_type
 basic_istream<_CharT, _Traits>::peek()
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
     int_type __r = traits_type::eof();
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif  // _LIBCPP_NO_EXCEPTIONS
             __r = this->rdbuf()->sgetc();
             if (traits_type::eq_int_type(__r, traits_type::eof()))
-                this->setstate(ios_base::eofbit);
-        }
+                __state |= ios_base::eofbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        this->setstate(__state);
+    }
     return __r;
 }
 
@@ -998,27 +1046,36 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::read(char_type* __s, streamsize __n)
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif  // _LIBCPP_NO_EXCEPTIONS
             __gc_ = this->rdbuf()->sgetn(__s, __n);
             if (__gc_ != __n)
-                this->setstate(ios_base::failbit | ios_base::eofbit);
-        }
-        else
-            this->setstate(ios_base::failbit);
+                __state |= ios_base::failbit | ios_base::eofbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+    }
+    else
+    {
+        __state |= ios_base::failbit;
+    }
+    this->setstate(__state);
     return *this;
 }
 
@@ -1026,36 +1083,48 @@
 streamsize
 basic_istream<_CharT, _Traits>::readsome(char_type* __s, streamsize __n)
 {
+    ios_base::iostate __state = ios_base::goodbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif  // _LIBCPP_NO_EXCEPTIONS
             streamsize __c = this->rdbuf()->in_avail();
             switch (__c)
             {
             case -1:
-                this->setstate(ios_base::eofbit);
+                __state |= ios_base::eofbit;
                 break;
             case 0:
                 break;
             default:
-                read(__s, _VSTD::min(__c, __n));
+                __n = _VSTD::min(__c, __n);
+                __gc_ = this->rdbuf()->sgetn(__s, __n);
+                if (__gc_ != __n)
+                    __state |= ios_base::failbit | ios_base::eofbit;
                 break;
             }
-        }
-        else
-            this->setstate(ios_base::failbit);
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+    }
+    else
+    {
+        __state |= ios_base::failbit;
+    }
+    this->setstate(__state);
     return __gc_;
 }
 
@@ -1063,27 +1132,36 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::putback(char_type __c)
 {
+    ios_base::iostate __state = this->rdstate() & ~ios_base::eofbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    this->clear(__state);
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        this->clear(this->rdstate() & ~ios_base::eofbit);
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            if (this->rdbuf() == 0 || this->rdbuf()->sputbackc(__c) == traits_type::eof())
-                this->setstate(ios_base::badbit);
-        }
-        else
-            this->setstate(ios_base::failbit);
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+            if (this->rdbuf() == 0 || this->rdbuf()->sputbackc(__c) == traits_type::eof())
+                __state |= ios_base::badbit;
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif  // _LIBCPP_NO_EXCEPTIONS
+    }
+    else
+    {
+        __state |= ios_base::failbit;
+    }
+    this->setstate(__state);
     return *this;
 }
 
@@ -1091,27 +1169,36 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::unget()
 {
+    ios_base::iostate __state = this->rdstate() & ~ios_base::eofbit;
     __gc_ = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    this->clear(__state);
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        this->clear(this->rdstate() & ~ios_base::eofbit);
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            if (this->rdbuf() == 0 || this->rdbuf()->sungetc() == traits_type::eof())
-                this->setstate(ios_base::badbit);
-        }
-        else
-            this->setstate(ios_base::failbit);
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+            if (this->rdbuf() == 0 || this->rdbuf()->sungetc() == traits_type::eof())
+                __state |= ios_base::badbit;
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif  // _LIBCPP_NO_EXCEPTIONS
+    }
+    else
+    {
+        __state |= ios_base::failbit;
+    }
+    this->setstate(__state);
     return *this;
 }
 
@@ -1119,29 +1206,36 @@
 int
 basic_istream<_CharT, _Traits>::sync()
 {
+    ios_base::iostate __state = ios_base::goodbit;
     int __r = 0;
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif  // _LIBCPP_NO_EXCEPTIONS
             if (this->rdbuf() == 0)
                 return -1;
             if (this->rdbuf()->pubsync() == -1)
             {
-                this->setstate(ios_base::badbit);
+                __state |= ios_base::badbit;
                 return -1;
             }
-        }
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        this->setstate(__state);
+    }
     return __r;
 }
 
@@ -1149,21 +1243,30 @@
 typename basic_istream<_CharT, _Traits>::pos_type
 basic_istream<_CharT, _Traits>::tellg()
 {
+    ios_base::iostate __state = ios_base::goodbit;
     pos_type __r(-1);
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __sen(*this, true);
-        if (__sen)
-            __r = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
+        try
+        {
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        __r = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif  // _LIBCPP_NO_EXCEPTIONS
+        this->setstate(__state);
+    }
     return __r;
 }
 
@@ -1171,24 +1274,31 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::seekg(pos_type __pos)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = this->rdstate() & ~ios_base::eofbit;
+    this->clear(__state);
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        this->clear(this->rdstate() & ~ios_base::eofbit);
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            if (this->rdbuf()->pubseekpos(__pos, ios_base::in) == pos_type(-1))
-                this->setstate(ios_base::failbit);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+            if (this->rdbuf()->pubseekpos(__pos, ios_base::in) == pos_type(-1))
+                __state |= ios_base::failbit;
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif  // _LIBCPP_NO_EXCEPTIONS
+        this->setstate(__state);
+    }
     return *this;
 }
 
@@ -1196,24 +1306,31 @@
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::seekg(off_type __off, ios_base::seekdir __dir)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = this->rdstate() & ~ios_base::eofbit;
+    this->clear(__state);
+    sentry __sen(*this, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        this->clear(this->rdstate() & ~ios_base::eofbit);
-        sentry __sen(*this, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
-            if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::in) == pos_type(-1))
-                this->setstate(ios_base::failbit);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+            if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::in) == pos_type(-1))
+                __state |= ios_base::failbit;
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            this->__setstate_nothrow(__state);
+            if (this->exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif  // _LIBCPP_NO_EXCEPTIONS
+        this->setstate(__state);
+    }
     return *this;
 }
 
@@ -1221,34 +1338,41 @@
 basic_istream<_CharT, _Traits>&
 ws(basic_istream<_CharT, _Traits>& __is)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif  // _LIBCPP_NO_EXCEPTIONS
             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
             while (true)
             {
                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
                 if (_Traits::eq_int_type(__i, _Traits::eof()))
                 {
-                   __is.setstate(ios_base::eofbit);
+                   __state |= ios_base::eofbit;
                    break;
                 }
                 if (!__ct.is(__ct.space, _Traits::to_char_type(__i)))
                     break;
                 __is.rdbuf()->sbumpc();
             }
-        }
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
 #endif  // _LIBCPP_NO_EXCEPTIONS
+        __is.setstate(__state);
+    }
     return __is;
 }
 
@@ -1297,7 +1421,6 @@
     inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
     void swap(basic_iostream& __rhs)
     { basic_istream<char_type, traits_type>::swap(__rhs); }
-public:
 };
 
 #ifndef _LIBCPP_CXX03_LANG
@@ -1328,13 +1451,14 @@
 operator>>(basic_istream<_CharT, _Traits>& __is,
            basic_string<_CharT, _Traits, _Allocator>& __str)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif
             __str.clear();
             streamsize __n = __is.width();
             if (__n <= 0)
@@ -1343,13 +1467,12 @@
                 __n = numeric_limits<streamsize>::max();
             streamsize __c = 0;
             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
-            ios_base::iostate __err = ios_base::goodbit;
             while (__c < __n)
             {
                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
                 if (_Traits::eq_int_type(__i, _Traits::eof()))
                 {
-                   __err |= ios_base::eofbit;
+                   __state |= ios_base::eofbit;
                    break;
                 }
                 _CharT __ch = _Traits::to_char_type(__i);
@@ -1361,18 +1484,21 @@
             }
             __is.width(0);
             if (__c == 0)
-               __err |= ios_base::failbit;
-            __is.setstate(__err);
-        }
-        else
-            __is.setstate(ios_base::failbit);
+               __state |= ios_base::failbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif
+        __is.setstate(__state);
     }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
     return __is;
 }
 
@@ -1381,22 +1507,22 @@
 getline(basic_istream<_CharT, _Traits>& __is,
         basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif
             __str.clear();
-            ios_base::iostate __err = ios_base::goodbit;
             streamsize __extr = 0;
             while (true)
             {
                 typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
                 if (_Traits::eq_int_type(__i, _Traits::eof()))
                 {
-                   __err |= ios_base::eofbit;
+                   __state |= ios_base::eofbit;
                    break;
                 }
                 ++__extr;
@@ -1406,21 +1532,26 @@
                 __str.push_back(__ch);
                 if (__str.size() == __str.max_size())
                 {
-                    __err |= ios_base::failbit;
+                    __state |= ios_base::failbit;
                     break;
                 }
             }
             if (__extr == 0)
-               __err |= ios_base::failbit;
-            __is.setstate(__err);
-        }
+               __state |= ios_base::failbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif
+        __is.setstate(__state);
     }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
     return __is;
 }
 
@@ -1459,17 +1590,17 @@
 basic_istream<_CharT, _Traits>&
 operator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Size>& __x)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
+    ios_base::iostate __state = ios_base::goodbit;
+    typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
+    if (__sen)
     {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
-        if (__sen)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+        try
         {
+#endif
             basic_string<_CharT, _Traits> __str;
             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
             size_t __c = 0;
-            ios_base::iostate __err = ios_base::goodbit;
             _CharT __zero = __ct.widen('0');
             _CharT __one = __ct.widen('1');
             while (__c < _Size)
@@ -1477,7 +1608,7 @@
                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
                 if (_Traits::eq_int_type(__i, _Traits::eof()))
                 {
-                   __err |= ios_base::eofbit;
+                   __state |= ios_base::eofbit;
                    break;
                 }
                 _CharT __ch = _Traits::to_char_type(__i);
@@ -1489,18 +1620,21 @@
             }
             __x = bitset<_Size>(__str);
             if (__c == 0)
-               __err |= ios_base::failbit;
-            __is.setstate(__err);
-        }
-        else
-            __is.setstate(ios_base::failbit);
+               __state |= ios_base::failbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
+        }
+        catch (...)
+        {
+            __state |= ios_base::badbit;
+            __is.__setstate_nothrow(__state);
+            if (__is.exceptions() & ios_base::badbit)
+            {
+                throw;
+            }
+        }
+#endif
+        __is.setstate(__state);
     }
-    catch (...)
-    {
-        __is.__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
     return __is;
 }
 
diff --git a/linux-x64/clang/include/c++/v1/iterator b/linux-x64/clang/include/c++/v1/iterator
index 242f188..30801ea 100644
--- a/linux-x64/clang/include/c++/v1/iterator
+++ b/linux-x64/clang/include/c++/v1/iterator
@@ -69,7 +69,7 @@
 
 template <class BidirectionalIterator>  // constexpr in C++17
   constexpr BidirectionalIterator prev(BidirectionalIterator x,
-    typename iterator_traits<BidirectionalIterator>::difference_type n = 1);    
+    typename iterator_traits<BidirectionalIterator>::difference_type n = 1);
 
 template <class Iterator>
 class reverse_iterator
@@ -136,7 +136,7 @@
 
 template <class Iterator>
 constexpr reverse_iterator<Iterator>
-operator+(typename reverse_iterator<Iterator>::difference_type n, 
+operator+(typename reverse_iterator<Iterator>::difference_type n,
           const reverse_iterator<Iterator>& x);   // constexpr in C++17
 
 template <class Iterator>
@@ -216,7 +216,7 @@
     typedef typename iterator_traits<Iterator>::value_type        value_type;
     typedef typename iterator_traits<Iterator>::iterator_category iterator_category;
     typedef value_type&&                                          reference;
- 
+
     constexpr move_iterator();  // all the constexprs are in C++17
     constexpr explicit move_iterator(Iterator i);
     template <class U>
@@ -230,10 +230,10 @@
     constexpr move_iterator operator++(int);
     constexpr move_iterator& operator--();
     constexpr move_iterator operator--(int);
-    constexpr move_iterator operator+(difference_type n) const; 
-    constexpr move_iterator& operator+=(difference_type n); 
-    constexpr move_iterator operator-(difference_type n) const; 
-    constexpr move_iterator& operator-=(difference_type n); 
+    constexpr move_iterator operator+(difference_type n) const;
+    constexpr move_iterator& operator+=(difference_type n);
+    constexpr move_iterator operator-(difference_type n) const;
+    constexpr move_iterator& operator-=(difference_type n);
     constexpr unspecified operator[](difference_type n) const;
 private:
     Iterator current; // exposition only
@@ -270,7 +270,7 @@
 
 template <class Iterator>
 constexpr move_iterator<Iterator> operator+(   // constexpr in C++17
-            typename move_iterator<Iterator>::difference_type n, 
+            typename move_iterator<Iterator>::difference_type n,
             const move_iterator<Iterator>& x);
 
 template <class Iterator>   // constexpr in C++17
@@ -399,6 +399,11 @@
 // 24.8, container access:
 template <class C> constexpr auto size(const C& c) -> decltype(c.size());         // C++17
 template <class T, size_t N> constexpr size_t size(const T (&array)[N]) noexcept; // C++17
+
+template <class C> constexpr auto ssize(const C& c)
+    -> common_type_t<ptrdiff_t, make_signed_t<decltype(c.size())>>;				       // C++20
+template <class T, ptrdiff_t> constexpr ptrdiff_t ssize(const T (&array)[N]) noexcept; // C++20
+
 template <class C> constexpr auto empty(const C& c) -> decltype(c.empty());       // C++17
 template <class T, size_t N> constexpr bool empty(const T (&array)[N]) noexcept;  // C++17
 template <class E> constexpr bool empty(initializer_list<E> il) noexcept;         // C++17
@@ -529,10 +534,26 @@
 
 template <class _Tp>
 struct __is_exactly_input_iterator
-    : public integral_constant<bool, 
-         __has_iterator_category_convertible_to<_Tp, input_iterator_tag>::value && 
+    : public integral_constant<bool,
+         __has_iterator_category_convertible_to<_Tp, input_iterator_tag>::value &&
         !__has_iterator_category_convertible_to<_Tp, forward_iterator_tag>::value> {};
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator>
+using __iter_value_type = typename iterator_traits<_InputIterator>::value_type;
+
+template<class _InputIterator>
+using __iter_key_type = remove_const_t<typename iterator_traits<_InputIterator>::value_type::first_type>;
+
+template<class _InputIterator>
+using __iter_mapped_type = typename iterator_traits<_InputIterator>::value_type::second_type;
+
+template<class _InputIterator>
+using __iter_to_alloc_type = pair<
+    add_const_t<typename iterator_traits<_InputIterator>::value_type::first_type>,
+    typename iterator_traits<_InputIterator>::value_type::second_type>;
+#endif
+
 template<class _Category, class _Tp, class _Distance = ptrdiff_t,
          class _Pointer = _Tp*, class _Reference = _Tp&>
 struct _LIBCPP_TEMPLATE_VIS iterator
@@ -579,6 +600,8 @@
 void advance(_InputIter& __i,
              typename iterator_traits<_InputIter>::difference_type __n)
 {
+    _LIBCPP_ASSERT(__n >= 0 || __is_bidirectional_iterator<_InputIter>::value,
+                       "Attempt to advance(it, -n) on a non-bidi iterator");
     __advance(__i, __n, typename iterator_traits<_InputIter>::iterator_category());
 }
 
@@ -613,26 +636,31 @@
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 typename enable_if
 <
-    __is_input_iterator<_InputIter>::value, 
+    __is_input_iterator<_InputIter>::value,
     _InputIter
 >::type
 next(_InputIter __x,
      typename iterator_traits<_InputIter>::difference_type __n = 1)
 {
+    _LIBCPP_ASSERT(__n >= 0 || __is_bidirectional_iterator<_InputIter>::value,
+                       "Attempt to next(it, -n) on a non-bidi iterator");
+
     _VSTD::advance(__x, __n);
     return __x;
 }
 
-template <class _BidirectionalIter>
+template <class _InputIter>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 typename enable_if
 <
-    __is_bidirectional_iterator<_BidirectionalIter>::value, 
-    _BidirectionalIter
+    __is_input_iterator<_InputIter>::value,
+    _InputIter
 >::type
-prev(_BidirectionalIter __x,
-     typename iterator_traits<_BidirectionalIter>::difference_type __n = 1)
+prev(_InputIter __x,
+     typename iterator_traits<_InputIter>::difference_type __n = 1)
 {
+    _LIBCPP_ASSERT(__n <= 0 || __is_bidirectional_iterator<_InputIter>::value,
+                       "Attempt to prev(it, +n) on a non-bidi iterator");
     _VSTD::advance(__x, -__n);
     return __x;
 }
@@ -1078,10 +1106,6 @@
     _LIBCPP_INLINE_VISIBILITY ostreambuf_iterator& operator++(int) {return *this;}
     _LIBCPP_INLINE_VISIBILITY bool failed() const _NOEXCEPT {return __sbuf_ == 0;}
 
-#if !defined(__APPLE__) || \
-    (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_8) || \
-    (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_6_0)
-
     template <class _Ch, class _Tr>
     friend
     _LIBCPP_HIDDEN
@@ -1089,7 +1113,6 @@
     __pad_and_output(ostreambuf_iterator<_Ch, _Tr> __s,
                      const _Ch* __ob, const _Ch* __op, const _Ch* __oe,
                      ios_base& __iob, _Ch __fl);
-#endif
 };
 
 template <class _Iter>
@@ -1122,7 +1145,7 @@
       _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
       move_iterator(const move_iterator<_Up>& __u) : __i(__u.base()) {}
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 _Iter base() const {return __i;}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
     reference operator*() const { return static_cast<reference>(*__i); }
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
     pointer  operator->() const { return __i;}
@@ -1236,50 +1259,50 @@
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator==(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+operator==(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator<(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+operator<(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator!=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+operator!=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator>(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+operator>(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator>=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+operator>=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator<=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+operator<=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 auto
-operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 -> decltype(__x.base() - __y.base());
 #else
 template <class _Iter1, class _Iter2>
 _LIBCPP_INLINE_VISIBILITY
 typename __wrap_iter<_Iter1>::difference_type
-operator-(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+operator-(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 #endif
 
 template <class _Iter>
 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 __wrap_iter<_Iter>
-operator+(typename __wrap_iter<_Iter>::difference_type, __wrap_iter<_Iter>) _NOEXCEPT_DEBUG;
+operator+(typename __wrap_iter<_Iter>::difference_type, __wrap_iter<_Iter>) _NOEXCEPT;
 
 template <class _Ip, class _Op> _Op _LIBCPP_INLINE_VISIBILITY copy(_Ip, _Ip, _Op);
 template <class _B1, class _B2> _B2 _LIBCPP_INLINE_VISIBILITY copy_backward(_B1, _B1, _B2);
@@ -1323,7 +1346,7 @@
 private:
     iterator_type __i;
 public:
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter() _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter() _NOEXCEPT
 #if _LIBCPP_STD_VER > 11
                 : __i{}
 #endif
@@ -1334,7 +1357,7 @@
     }
     template <class _Up> _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
         __wrap_iter(const __wrap_iter<_Up>& __u,
-            typename enable_if<is_convertible<_Up, iterator_type>::value>::type* = 0) _NOEXCEPT_DEBUG
+            typename enable_if<is_convertible<_Up, iterator_type>::value>::type* = 0) _NOEXCEPT
             : __i(__u.base())
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
@@ -1364,7 +1387,7 @@
         __get_db()->__erase_i(this);
     }
 #endif
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG reference operator*() const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG reference operator*() const _NOEXCEPT
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(this),
@@ -1372,7 +1395,7 @@
 #endif
         return *__i;
     }
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG pointer  operator->() const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG pointer  operator->() const _NOEXCEPT
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(this),
@@ -1380,7 +1403,7 @@
 #endif
         return (pointer)_VSTD::addressof(*__i);
     }
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator++() _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator++() _NOEXCEPT
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(this),
@@ -1389,10 +1412,10 @@
         ++__i;
         return *this;
     }
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator++(int) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator++(int) _NOEXCEPT
         {__wrap_iter __tmp(*this); ++(*this); return __tmp;}
 
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator--() _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator--() _NOEXCEPT
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__decrementable(this),
@@ -1401,11 +1424,11 @@
         --__i;
         return *this;
     }
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator--(int) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator--(int) _NOEXCEPT
         {__wrap_iter __tmp(*this); --(*this); return __tmp;}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator+ (difference_type __n) const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator+ (difference_type __n) const _NOEXCEPT
         {__wrap_iter __w(*this); __w += __n; return __w;}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator+=(difference_type __n) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator+=(difference_type __n) _NOEXCEPT
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__addable(this, __n),
@@ -1414,11 +1437,11 @@
         __i += __n;
         return *this;
     }
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator- (difference_type __n) const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator- (difference_type __n) const _NOEXCEPT
         {return *this + (-__n);}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator-=(difference_type __n) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator-=(difference_type __n) _NOEXCEPT
         {*this += -__n; return *this;}
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG reference    operator[](difference_type __n) const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG reference    operator[](difference_type __n) const _NOEXCEPT
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__subscriptable(this, __n),
@@ -1427,7 +1450,7 @@
         return __i[__n];
     }
 
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG iterator_type base() const _NOEXCEPT_DEBUG {return __i;}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG iterator_type base() const _NOEXCEPT {return __i;}
 
 private:
 #if _LIBCPP_DEBUG_LEVEL >= 2
@@ -1436,61 +1459,61 @@
         __get_db()->__insert_ic(this, __p);
     }
 #else
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter(iterator_type __x) _NOEXCEPT_DEBUG : __i(__x) {}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter(iterator_type __x) _NOEXCEPT : __i(__x) {}
 #endif
 
     template <class _Up> friend class __wrap_iter;
     template <class _CharT, class _Traits, class _Alloc> friend class basic_string;
     template <class _Tp, class _Alloc> friend class _LIBCPP_TEMPLATE_VIS vector;
-    template <class _Tp, ptrdiff_t> friend class _LIBCPP_TEMPLATE_VIS span;
+    template <class _Tp, size_t> friend class _LIBCPP_TEMPLATE_VIS span;
 
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
-    operator==(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+    operator==(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
-    operator<(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+    operator<(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
-    operator!=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+    operator!=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
-    operator>(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+    operator>(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
-    operator>=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+    operator>=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
-    operator<=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+    operator<=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 
 #ifndef _LIBCPP_CXX03_LANG
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     auto
-    operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+    operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
     -> decltype(__x.base() - __y.base());
 #else
     template <class _Iter1, class _Iter2>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     typename __wrap_iter<_Iter1>::difference_type
-    operator-(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
+    operator-(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT;
 #endif
 
     template <class _Iter1>
     _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     __wrap_iter<_Iter1>
-    operator+(typename __wrap_iter<_Iter1>::difference_type, __wrap_iter<_Iter1>) _NOEXCEPT_DEBUG;
+    operator+(typename __wrap_iter<_Iter1>::difference_type, __wrap_iter<_Iter1>) _NOEXCEPT;
 
     template <class _Ip, class _Op> friend _Op copy(_Ip, _Ip, _Op);
     template <class _B1, class _B2> friend _B2 copy_backward(_B1, _B1, _B2);
@@ -1521,7 +1544,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator==(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator==(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 {
     return __x.base() == __y.base();
 }
@@ -1529,7 +1552,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator<(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator<(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 {
 #if _LIBCPP_DEBUG_LEVEL >= 2
     _LIBCPP_ASSERT(__get_const_db()->__less_than_comparable(&__x, &__y),
@@ -1541,7 +1564,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 {
     return !(__x == __y);
 }
@@ -1549,7 +1572,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 {
     return __y < __x;
 }
@@ -1557,7 +1580,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 {
     return !(__x < __y);
 }
@@ -1565,7 +1588,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 {
     return !(__y < __x);
 }
@@ -1573,7 +1596,7 @@
 template <class _Iter1>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
+operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT
 {
     return !(__x == __y);
 }
@@ -1581,7 +1604,7 @@
 template <class _Iter1>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
+operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT
 {
     return __y < __x;
 }
@@ -1589,7 +1612,7 @@
 template <class _Iter1>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
+operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT
 {
     return !(__x < __y);
 }
@@ -1597,7 +1620,7 @@
 template <class _Iter1>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
-operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
+operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT
 {
     return !(__y < __x);
 }
@@ -1606,7 +1629,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 auto
-operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 -> decltype(__x.base() - __y.base())
 {
 #if _LIBCPP_DEBUG_LEVEL >= 2
@@ -1619,7 +1642,7 @@
 template <class _Iter1, class _Iter2>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 typename __wrap_iter<_Iter1>::difference_type
-operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
+operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
 {
 #if _LIBCPP_DEBUG_LEVEL >= 2
     _LIBCPP_ASSERT(__get_const_db()->__less_than_comparable(&__x, &__y),
@@ -1633,7 +1656,7 @@
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 __wrap_iter<_Iter>
 operator+(typename __wrap_iter<_Iter>::difference_type __n,
-          __wrap_iter<_Iter> __x) _NOEXCEPT_DEBUG
+          __wrap_iter<_Iter> __x) _NOEXCEPT
 {
     __x += __n;
     return __x;
@@ -1642,7 +1665,7 @@
 template <class _Iter>
 struct __libcpp_is_trivial_iterator
     : public _LIBCPP_BOOL_CONSTANT(is_pointer<_Iter>::value) {};
-    
+
 template <class _Iter>
 struct __libcpp_is_trivial_iterator<move_iterator<_Iter> >
     : public _LIBCPP_BOOL_CONSTANT(__libcpp_is_trivial_iterator<_Iter>::value) {};
@@ -1657,7 +1680,7 @@
 
 
 template <class _Tp, size_t _Np>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _Tp*
 begin(_Tp (&__array)[_Np])
 {
@@ -1665,7 +1688,7 @@
 }
 
 template <class _Tp, size_t _Np>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 _Tp*
 end(_Tp (&__array)[_Np])
 {
@@ -1675,7 +1698,7 @@
 #if !defined(_LIBCPP_CXX03_LANG)
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto
 begin(_Cp& __c) -> decltype(__c.begin())
 {
@@ -1683,7 +1706,7 @@
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto
 begin(const _Cp& __c) -> decltype(__c.begin())
 {
@@ -1691,7 +1714,7 @@
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto
 end(_Cp& __c) -> decltype(__c.end())
 {
@@ -1699,7 +1722,7 @@
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto
 end(const _Cp& __c) -> decltype(__c.end())
 {
@@ -1709,84 +1732,84 @@
 #if _LIBCPP_STD_VER > 11
 
 template <class _Tp, size_t _Np>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 reverse_iterator<_Tp*> rbegin(_Tp (&__array)[_Np])
 {
     return reverse_iterator<_Tp*>(__array + _Np);
 }
 
 template <class _Tp, size_t _Np>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 reverse_iterator<_Tp*> rend(_Tp (&__array)[_Np])
 {
     return reverse_iterator<_Tp*>(__array);
 }
 
 template <class _Ep>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 reverse_iterator<const _Ep*> rbegin(initializer_list<_Ep> __il)
 {
     return reverse_iterator<const _Ep*>(__il.end());
 }
 
 template <class _Ep>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 reverse_iterator<const _Ep*> rend(initializer_list<_Ep> __il)
 {
     return reverse_iterator<const _Ep*>(__il.begin());
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 auto cbegin(const _Cp& __c) -> decltype(_VSTD::begin(__c))
 {
     return _VSTD::begin(__c);
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
 auto cend(const _Cp& __c) -> decltype(_VSTD::end(__c))
 {
     return _VSTD::end(__c);
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto rbegin(_Cp& __c) -> decltype(__c.rbegin())
 {
     return __c.rbegin();
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto rbegin(const _Cp& __c) -> decltype(__c.rbegin())
 {
     return __c.rbegin();
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto rend(_Cp& __c) -> decltype(__c.rend())
 {
     return __c.rend();
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto rend(const _Cp& __c) -> decltype(__c.rend())
 {
     return __c.rend();
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto crbegin(const _Cp& __c) -> decltype(_VSTD::rbegin(__c))
 {
     return _VSTD::rbegin(__c);
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
 auto crend(const _Cp& __c) -> decltype(_VSTD::rend(__c))
 {
     return _VSTD::rend(__c);
@@ -1798,7 +1821,7 @@
 #else  // defined(_LIBCPP_CXX03_LANG)
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename _Cp::iterator
 begin(_Cp& __c)
 {
@@ -1806,7 +1829,7 @@
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename _Cp::const_iterator
 begin(const _Cp& __c)
 {
@@ -1814,7 +1837,7 @@
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename _Cp::iterator
 end(_Cp& __c)
 {
@@ -1822,7 +1845,7 @@
 }
 
 template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 typename _Cp::const_iterator
 end(const _Cp& __c)
 {
@@ -1848,51 +1871,64 @@
 // #endif
 
 template <class _Cont>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 constexpr auto size(const _Cont& __c)
 _NOEXCEPT_(noexcept(__c.size()))
 -> decltype        (__c.size())
 { return            __c.size(); }
 
 template <class _Tp, size_t _Sz>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 constexpr size_t size(const _Tp (&)[_Sz]) noexcept { return _Sz; }
 
+#if _LIBCPP_STD_VER > 17
 template <class _Cont>
-_LIBCPP_NODISCARD_AFTER_CXX17 inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
+constexpr auto ssize(const _Cont& __c)
+_NOEXCEPT_(noexcept(static_cast<common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>>>(__c.size())))
+->                              common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>>
+{ return            static_cast<common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>>>(__c.size()); }
+
+template <class _Tp, ptrdiff_t _Sz>
+_LIBCPP_INLINE_VISIBILITY
+constexpr ptrdiff_t ssize(const _Tp (&)[_Sz]) noexcept { return _Sz; }
+#endif
+
+template <class _Cont>
+_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY
 constexpr auto empty(const _Cont& __c)
 _NOEXCEPT_(noexcept(__c.empty()))
 -> decltype        (__c.empty())
 { return            __c.empty(); }
 
 template <class _Tp, size_t _Sz>
-_LIBCPP_NODISCARD_AFTER_CXX17 inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY
 constexpr bool empty(const _Tp (&)[_Sz]) noexcept { return false; }
 
 template <class _Ep>
-_LIBCPP_NODISCARD_AFTER_CXX17 inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY
 constexpr bool empty(initializer_list<_Ep> __il) noexcept { return __il.size() == 0; }
 
 template <class _Cont> constexpr
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 auto data(_Cont& __c)
 _NOEXCEPT_(noexcept(__c.data()))
 -> decltype        (__c.data())
 { return            __c.data(); }
 
 template <class _Cont> constexpr
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 auto data(const _Cont& __c)
 _NOEXCEPT_(noexcept(__c.data()))
--> decltype        (__c.data()) 
+-> decltype        (__c.data())
 { return            __c.data(); }
 
 template <class _Tp, size_t _Sz>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 constexpr _Tp* data(_Tp (&__array)[_Sz]) noexcept { return __array; }
 
 template <class _Ep>
-inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY
 constexpr const _Ep* data(initializer_list<_Ep> __il) noexcept { return __il.begin(); }
 #endif
 
diff --git a/linux-x64/clang/include/c++/v1/limits b/linux-x64/clang/include/c++/v1/limits
index 82c1ea1..6d5d1e1 100644
--- a/linux-x64/clang/include/c++/v1/limits
+++ b/linux-x64/clang/include/c++/v1/limits
@@ -409,7 +409,7 @@
     static _LIBCPP_CONSTEXPR const bool is_exact = false;
     static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
     _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;}
-    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
+    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5L;}
 
     static _LIBCPP_CONSTEXPR const int  min_exponent = __LDBL_MIN_EXP__;
     static _LIBCPP_CONSTEXPR const int  min_exponent10 = __LDBL_MIN_10_EXP__;
diff --git a/linux-x64/clang/include/c++/v1/list b/linux-x64/clang/include/c++/v1/list
index 2afe2a2..c92ef79 100644
--- a/linux-x64/clang/include/c++/v1/list
+++ b/linux-x64/clang/include/c++/v1/list
@@ -129,11 +129,12 @@
     void splice(const_iterator position, list&& x, const_iterator first,
                                                   const_iterator last);
 
-    void remove(const value_type& value);
-    template <class Pred> void remove_if(Pred pred);
-    void unique();
+    size_type remove(const value_type& value);       // void before C++20
+    template <class Pred>
+      size_type remove_if(Pred pred);                // void before C++20
+    size_type unique();                              // void before C++20
     template <class BinaryPredicate>
-        void unique(BinaryPredicate binary_pred);
+      size_type unique(BinaryPredicate binary_pred); // void before C++20
     void merge(list& x);
     void merge(list&& x);
     template <class Compare>
@@ -647,9 +648,9 @@
 
     void swap(__list_imp& __c)
 #if _LIBCPP_STD_VER >= 14
-        _NOEXCEPT_DEBUG;
+        _NOEXCEPT;
 #else
-        _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value ||
+        _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
                     __is_nothrow_swappable<allocator_type>::value);
 #endif
 
@@ -769,9 +770,9 @@
 void
 __list_imp<_Tp, _Alloc>::swap(__list_imp& __c)
 #if _LIBCPP_STD_VER >= 14
-        _NOEXCEPT_DEBUG
+        _NOEXCEPT
 #else
-        _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value ||
+        _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
                     __is_nothrow_swappable<allocator_type>::value)
 #endif
 {
@@ -857,6 +858,11 @@
     typedef typename base::const_iterator            const_iterator;
     typedef _VSTD::reverse_iterator<iterator>         reverse_iterator;
     typedef _VSTD::reverse_iterator<const_iterator>   const_reverse_iterator;
+#if _LIBCPP_STD_VER > 17
+    typedef size_type                                __remove_return_type;
+#else
+    typedef void                                     __remove_return_type;
+#endif
 
     _LIBCPP_INLINE_VISIBILITY
     list()
@@ -1038,9 +1044,9 @@
     _LIBCPP_INLINE_VISIBILITY
     void swap(list& __c)
 #if _LIBCPP_STD_VER >= 14
-        _NOEXCEPT_DEBUG
+        _NOEXCEPT
 #else
-        _NOEXCEPT_DEBUG_(!__node_alloc_traits::propagate_on_container_swap::value ||
+        _NOEXCEPT_(!__node_alloc_traits::propagate_on_container_swap::value ||
                    __is_nothrow_swappable<__node_allocator>::value)
 #endif
         {base::swap(__c);}
@@ -1070,12 +1076,12 @@
     void splice(const_iterator __p, list& __c, const_iterator __i);
     void splice(const_iterator __p, list& __c, const_iterator __f, const_iterator __l);
 
-    void remove(const value_type& __x);
-    template <class _Pred> void remove_if(_Pred __pred);
+    __remove_return_type remove(const value_type& __x);
+    template <class _Pred> __remove_return_type remove_if(_Pred __pred);
     _LIBCPP_INLINE_VISIBILITY
-    void unique();
+    __remove_return_type unique() { return unique(__equal_to<value_type>()); }
     template <class _BinaryPred>
-        void unique(_BinaryPred __binary_pred);
+        __remove_return_type unique(_BinaryPred __binary_pred);
     _LIBCPP_INLINE_VISIBILITY
     void merge(list& __c);
 #ifndef _LIBCPP_CXX03_LANG
@@ -2013,22 +2019,24 @@
         base::__sz() += __c.__sz();
         __c.__sz() = 0;
 #if _LIBCPP_DEBUG_LEVEL >= 2
-        __libcpp_db* __db = __get_db();
-        __c_node* __cn1 = __db->__find_c_and_lock(this);
-        __c_node* __cn2 = __db->__find_c(&__c);
-        for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
-        {
-            --__ip;
-            iterator* __i = static_cast<iterator*>((*__ip)->__i_);
-            if (__i->__ptr_ != __c.__end_as_link())
+        if (&__c != this) {
+            __libcpp_db* __db = __get_db();
+            __c_node* __cn1 = __db->__find_c_and_lock(this);
+            __c_node* __cn2 = __db->__find_c(&__c);
+            for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
             {
-                __cn1->__add(*__ip);
-                (*__ip)->__c_ = __cn1;
-                if (--__cn2->end_ != __ip)
-                    memmove(__ip, __ip+1, (__cn2->end_ - __ip)*sizeof(__i_node*));
+                --__ip;
+                iterator* __i = static_cast<iterator*>((*__ip)->__i_);
+                if (__i->__ptr_ != __c.__end_as_link())
+                {
+                    __cn1->__add(*__ip);
+                    (*__ip)->__c_ = __cn1;
+                    if (--__cn2->end_ != __ip)
+                        memmove(__ip, __ip+1, (__cn2->end_ - __ip)*sizeof(__i_node*));
+                }
             }
+            __db->unlock();
         }
-        __db->unlock();
 #endif
     }
 }
@@ -2056,22 +2064,24 @@
         --__c.__sz();
         ++base::__sz();
 #if _LIBCPP_DEBUG_LEVEL >= 2
-        __libcpp_db* __db = __get_db();
-        __c_node* __cn1 = __db->__find_c_and_lock(this);
-        __c_node* __cn2 = __db->__find_c(&__c);
-        for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
-        {
-            --__ip;
-            iterator* __j = static_cast<iterator*>((*__ip)->__i_);
-            if (__j->__ptr_ == __f)
+        if (&__c != this) {
+            __libcpp_db* __db = __get_db();
+            __c_node* __cn1 = __db->__find_c_and_lock(this);
+            __c_node* __cn2 = __db->__find_c(&__c);
+            for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
             {
-                __cn1->__add(*__ip);
-                (*__ip)->__c_ = __cn1;
-                if (--__cn2->end_ != __ip)
-                    memmove(__ip, __ip+1, (__cn2->end_ - __ip)*sizeof(__i_node*));
+                --__ip;
+                iterator* __j = static_cast<iterator*>((*__ip)->__i_);
+                if (__j->__ptr_ == __f)
+                {
+                    __cn1->__add(*__ip);
+                    (*__ip)->__c_ = __cn1;
+                    if (--__cn2->end_ != __ip)
+                        memmove(__ip, __ip+1, (__cn2->end_ - __ip)*sizeof(__i_node*));
+                }
             }
+            __db->unlock();
         }
-        __db->unlock();
 #endif
     }
 }
@@ -2110,32 +2120,34 @@
         base::__unlink_nodes(__first, __last);
         __link_nodes(__p.__ptr_, __first, __last);
 #if _LIBCPP_DEBUG_LEVEL >= 2
-        __libcpp_db* __db = __get_db();
-        __c_node* __cn1 = __db->__find_c_and_lock(this);
-        __c_node* __cn2 = __db->__find_c(&__c);
-        for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
-        {
-            --__ip;
-            iterator* __j = static_cast<iterator*>((*__ip)->__i_);
-            for (__link_pointer __k = __f.__ptr_;
-                                          __k != __l.__ptr_; __k = __k->__next_)
+        if (&__c != this) {
+            __libcpp_db* __db = __get_db();
+            __c_node* __cn1 = __db->__find_c_and_lock(this);
+            __c_node* __cn2 = __db->__find_c(&__c);
+            for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
             {
-                if (__j->__ptr_ == __k)
+                --__ip;
+                iterator* __j = static_cast<iterator*>((*__ip)->__i_);
+                for (__link_pointer __k = __f.__ptr_;
+                                              __k != __l.__ptr_; __k = __k->__next_)
                 {
-                    __cn1->__add(*__ip);
-                    (*__ip)->__c_ = __cn1;
-                    if (--__cn2->end_ != __ip)
-                        memmove(__ip, __ip+1, (__cn2->end_ - __ip)*sizeof(__i_node*));
+                    if (__j->__ptr_ == __k)
+                    {
+                        __cn1->__add(*__ip);
+                        (*__ip)->__c_ = __cn1;
+                        if (--__cn2->end_ != __ip)
+                            memmove(__ip, __ip+1, (__cn2->end_ - __ip)*sizeof(__i_node*));
+                    }
                 }
             }
+            __db->unlock();
         }
-        __db->unlock();
 #endif
     }
 }
 
 template <class _Tp, class _Alloc>
-void
+typename list<_Tp, _Alloc>::__remove_return_type
 list<_Tp, _Alloc>::remove(const value_type& __x)
 {
     list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing
@@ -2154,13 +2166,16 @@
         else
             ++__i;
     }
+
+    return (__remove_return_type) __deleted_nodes.size();
 }
 
 template <class _Tp, class _Alloc>
 template <class _Pred>
-void
+typename list<_Tp, _Alloc>::__remove_return_type
 list<_Tp, _Alloc>::remove_if(_Pred __pred)
 {
+    list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing
     for (iterator __i = begin(), __e = end(); __i != __e;)
     {
         if (__pred(*__i))
@@ -2168,36 +2183,36 @@
             iterator __j = _VSTD::next(__i);
             for (; __j != __e && __pred(*__j); ++__j)
                 ;
-            __i = erase(__i, __j);
+            __deleted_nodes.splice(__deleted_nodes.end(), *this, __i, __j);
+            __i = __j;
             if (__i != __e)
                 ++__i;
         }
         else
             ++__i;
     }
-}
 
-template <class _Tp, class _Alloc>
-inline
-void
-list<_Tp, _Alloc>::unique()
-{
-    unique(__equal_to<value_type>());
+    return (__remove_return_type) __deleted_nodes.size();
 }
 
 template <class _Tp, class _Alloc>
 template <class _BinaryPred>
-void
+typename list<_Tp, _Alloc>::__remove_return_type
 list<_Tp, _Alloc>::unique(_BinaryPred __binary_pred)
 {
+    list<_Tp, _Alloc> __deleted_nodes(get_allocator()); // collect the nodes we're removing
     for (iterator __i = begin(), __e = end(); __i != __e;)
     {
         iterator __j = _VSTD::next(__i);
         for (; __j != __e && __binary_pred(*__i, *__j); ++__j)
             ;
-        if (++__i != __j)
-            __i = erase(__i, __j);
+        if (++__i != __j) {
+            __deleted_nodes.splice(__deleted_nodes.end(), *this, __i, __j);
+            __i = __j;
+            }
     }
+    
+    return (__remove_return_type) __deleted_nodes.size();
 }
 
 template <class _Tp, class _Alloc>
diff --git a/linux-x64/clang/include/c++/v1/locale b/linux-x64/clang/include/c++/v1/locale
index c3c05eb..3fe4430 100644
--- a/linux-x64/clang/include/c++/v1/locale
+++ b/linux-x64/clang/include/c++/v1/locale
@@ -126,7 +126,7 @@
     wbuffer_convert(const wbuffer_convert&) = delete;               // C++14
     wbuffer_convert & operator=(const wbuffer_convert &) = delete;  // C++14
     ~wbuffer_convert();                                             // C++14
-    
+
     streambuf* rdbuf() const;
     streambuf* rdbuf(streambuf* bytebuf);
 
@@ -1372,10 +1372,6 @@
     return __s;
 }
 
-#if !defined(__APPLE__) || \
-    (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_8) || \
-    (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_6_0)
-
 template <class _CharT, class _Traits>
 _LIBCPP_HIDDEN
 ostreambuf_iterator<_CharT, _Traits>
@@ -1422,8 +1418,6 @@
     return __s;
 }
 
-#endif
-
 template <class _CharT, class _OutputIterator>
 _OutputIterator
 num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
@@ -3929,7 +3923,7 @@
     wbuffer_convert(const wbuffer_convert&);
     wbuffer_convert& operator=(const wbuffer_convert&);
 public:
-    _LIBCPP_EXPLICIT_AFTER_CXX11 wbuffer_convert(streambuf* __bytebuf = 0, 
+    _LIBCPP_EXPLICIT_AFTER_CXX11 wbuffer_convert(streambuf* __bytebuf = 0,
             _Codecvt* __pcvt = new _Codecvt, state_type __state = state_type());
     ~wbuffer_convert();
 
@@ -4044,7 +4038,7 @@
                                        this->egptr(), __inext);
                 if (__r == codecvt_base::noconv)
                 {
-                    this->setg((char_type*)__extbuf_, (char_type*)__extbuf_, 
+                    this->setg((char_type*)__extbuf_, (char_type*)__extbuf_,
                                (char_type*) const_cast<char *>(__extbufend_));
                     __c = *this->gptr();
                 }
diff --git a/linux-x64/clang/include/c++/v1/map b/linux-x64/clang/include/c++/v1/map
index e21dd5a..6805a51 100644
--- a/linux-x64/clang/include/c++/v1/map
+++ b/linux-x64/clang/include/c++/v1/map
@@ -902,12 +902,11 @@
     typedef _Key                                     key_type;
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
-    typedef _Compare                                 key_compare;
-    typedef _Allocator                               allocator_type;
+    typedef typename __identity<_Compare>::type      key_compare;
+    typedef typename __identity<_Allocator>::type    allocator_type;
     typedef value_type&                              reference;
     typedef const value_type&                        const_reference;
 
-    static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
     static_assert((is_same<typename allocator_type::value_type, value_type>::value),
                   "Allocator::value_type must be same type as value_type");
 
@@ -1086,6 +1085,11 @@
         }
 
     _LIBCPP_INLINE_VISIBILITY
+    ~map() {
+        static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
           iterator begin() _NOEXCEPT {return __tree_.begin();}
     _LIBCPP_INLINE_VISIBILITY
     const_iterator begin() const _NOEXCEPT {return __tree_.begin();}
@@ -1461,6 +1465,32 @@
 #endif
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator, class _Compare = less<__iter_key_type<_InputIterator>>,
+         class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+         class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+map(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
+  -> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
+
+template<class _Key, class _Tp, class _Compare = less<remove_const_t<_Key>>,
+         class _Allocator = allocator<pair<const _Key, _Tp>>,
+         class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+map(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator = _Allocator())
+  -> map<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
+
+template<class _InputIterator, class _Allocator,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+map(_InputIterator, _InputIterator, _Allocator)
+  -> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
+         less<__iter_key_type<_InputIterator>>, _Allocator>;
+
+template<class _Key, class _Tp, class _Allocator,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+map(initializer_list<pair<_Key, _Tp>>, _Allocator)
+  -> map<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
+#endif
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Key, class _Tp, class _Compare, class _Allocator>
@@ -1633,12 +1663,11 @@
     typedef _Key                                     key_type;
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
-    typedef _Compare                                 key_compare;
-    typedef _Allocator                               allocator_type;
+    typedef typename __identity<_Compare>::type      key_compare;
+    typedef typename __identity<_Allocator>::type    allocator_type;
     typedef value_type&                              reference;
     typedef const value_type&                        const_reference;
 
-    static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
     static_assert((is_same<typename allocator_type::value_type, value_type>::value),
                   "Allocator::value_type must be same type as value_type");
 
@@ -1818,6 +1847,11 @@
         }
 
     _LIBCPP_INLINE_VISIBILITY
+    ~multimap() {
+        static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
           iterator begin() _NOEXCEPT {return __tree_.begin();}
     _LIBCPP_INLINE_VISIBILITY
     const_iterator begin() const _NOEXCEPT {return __tree_.begin();}
@@ -2082,6 +2116,33 @@
     typedef unique_ptr<__node, _Dp> __node_holder;
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator, class _Compare = less<__iter_key_type<_InputIterator>>,
+         class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+         class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+multimap(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
+  -> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
+
+template<class _Key, class _Tp, class _Compare = less<remove_const_t<_Key>>,
+         class _Allocator = allocator<pair<const _Key, _Tp>>,
+         class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+multimap(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator = _Allocator())
+  -> multimap<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
+
+template<class _InputIterator, class _Allocator,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+multimap(_InputIterator, _InputIterator, _Allocator)
+  -> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
+         less<__iter_key_type<_InputIterator>>, _Allocator>;
+
+template<class _Key, class _Tp, class _Allocator,
+         class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
+  -> multimap<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
+#endif
+
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Key, class _Tp, class _Compare, class _Allocator>
 multimap<_Key, _Tp, _Compare, _Allocator>::multimap(multimap&& __m, const allocator_type& __a)
diff --git a/linux-x64/clang/include/c++/v1/math.h b/linux-x64/clang/include/c++/v1/math.h
index 6f9a76b..194df20 100644
--- a/linux-x64/clang/include/c++/v1/math.h
+++ b/linux-x64/clang/include/c++/v1/math.h
@@ -297,6 +297,9 @@
 #pragma GCC system_header
 #endif
 
+#define _LIBCPP_STDLIB_INCLUDE_NEXT
+#include <stdlib.h>
+
 #include_next <math.h>
 
 #ifdef __cplusplus
@@ -754,20 +757,61 @@
 
 // abs
 
+#undef abs
+#undef labs
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
+#undef llabs
+#endif
+
+// MSVCRT already has the correct prototype in <stdlib.h> if __cplusplus is defined
+#if !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX)
+inline _LIBCPP_INLINE_VISIBILITY long abs(long __x) _NOEXCEPT {
+  return ::labs(__x);
+}
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
+inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {
+  return ::llabs(__x);
+}
+#endif // _LIBCPP_HAS_NO_LONG_LONG
+#endif // !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX)
+
+
 #if !(defined(_AIX) || defined(__sun__))
-inline _LIBCPP_INLINE_VISIBILITY
-float
-abs(float __lcpp_x) _NOEXCEPT {return ::fabsf(__lcpp_x);}
+inline _LIBCPP_INLINE_VISIBILITY float abs(float __lcpp_x) _NOEXCEPT {
+  return ::fabsf(__lcpp_x);
+}
 
-inline _LIBCPP_INLINE_VISIBILITY
-double
-abs(double __lcpp_x) _NOEXCEPT {return ::fabs(__lcpp_x);}
+inline _LIBCPP_INLINE_VISIBILITY double abs(double __lcpp_x) _NOEXCEPT {
+  return ::fabs(__lcpp_x);
+}
 
-inline _LIBCPP_INLINE_VISIBILITY
-long double
-abs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);}
+inline _LIBCPP_INLINE_VISIBILITY long double
+abs(long double __lcpp_x) _NOEXCEPT {
+  return ::fabsl(__lcpp_x);
+}
 #endif // !(defined(_AIX) || defined(__sun__))
 
+// div
+
+#undef div
+#undef ldiv
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
+#undef lldiv
+#endif
+
+// MSVCRT already has the correct prototype in <stdlib.h> if __cplusplus is defined
+#if !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX)
+inline _LIBCPP_INLINE_VISIBILITY ldiv_t div(long __x, long __y) _NOEXCEPT {
+  return ::ldiv(__x, __y);
+}
+#ifndef _LIBCPP_HAS_NO_LONG_LONG
+inline _LIBCPP_INLINE_VISIBILITY lldiv_t div(long long __x,
+                                             long long __y) _NOEXCEPT {
+  return ::lldiv(__x, __y);
+}
+#endif // _LIBCPP_HAS_NO_LONG_LONG
+#endif // _LIBCPP_MSVCRT / __sun__ / _AIX
+
 // acos
 
 #if !(defined(_AIX) || defined(__sun__))
@@ -813,7 +857,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -822,8 +866,8 @@
 atan2(_A1 __lcpp_y, _A2 __lcpp_x) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::atan2((__result_type)__lcpp_y, (__result_type)__lcpp_x);
 }
 
@@ -908,7 +952,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -917,8 +961,8 @@
 fmod(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::fmod((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -986,7 +1030,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -995,8 +1039,8 @@
 pow(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::pow((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1113,7 +1157,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1122,8 +1166,8 @@
 copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1174,7 +1218,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1183,8 +1227,8 @@
 fdim(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::fdim((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1195,7 +1239,7 @@
 
 template <class _A1, class _A2, class _A3>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value &&
@@ -1205,9 +1249,9 @@
 fma(_A1 __lcpp_x, _A2 __lcpp_y, _A3 __lcpp_z) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2, _A3>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value &&
-                     std::is_same<_A3, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value &&
+                     std::_IsSame<_A3, __result_type>::value)), "");
     return ::fma((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z);
 }
 
@@ -1218,7 +1262,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1227,8 +1271,8 @@
 fmax(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::fmax((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1239,7 +1283,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1248,8 +1292,8 @@
 fmin(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::fmin((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1260,7 +1304,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1269,8 +1313,8 @@
 hypot(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::hypot((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1383,7 +1427,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1392,8 +1436,8 @@
 nextafter(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::nextafter((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1414,7 +1458,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1423,8 +1467,8 @@
 remainder(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::remainder((__result_type)__lcpp_x, (__result_type)__lcpp_y);
 }
 
@@ -1435,7 +1479,7 @@
 
 template <class _A1, class _A2>
 inline _LIBCPP_INLINE_VISIBILITY
-typename std::__lazy_enable_if
+typename std::_EnableIf
 <
     std::is_arithmetic<_A1>::value &&
     std::is_arithmetic<_A2>::value,
@@ -1444,8 +1488,8 @@
 remquo(_A1 __lcpp_x, _A2 __lcpp_y, int* __lcpp_z) _NOEXCEPT
 {
     typedef typename std::__promote<_A1, _A2>::type __result_type;
-    static_assert((!(std::is_same<_A1, __result_type>::value &&
-                     std::is_same<_A2, __result_type>::value)), "");
+    static_assert((!(std::_IsSame<_A1, __result_type>::value &&
+                     std::_IsSame<_A2, __result_type>::value)), "");
     return ::remquo((__result_type)__lcpp_x, (__result_type)__lcpp_y, __lcpp_z);
 }
 
diff --git a/linux-x64/clang/include/c++/v1/memory b/linux-x64/clang/include/c++/v1/memory
index 3398629..d9222b3 100644
--- a/linux-x64/clang/include/c++/v1/memory
+++ b/linux-x64/clang/include/c++/v1/memory
@@ -548,7 +548,7 @@
 template<class T> struct owner_less;
 
 template<class T>
-struct owner_less<shared_ptr<T>>
+struct owner_less<shared_ptr<T> >
     : binary_function<shared_ptr<T>, shared_ptr<T>, bool>
 {
     typedef bool result_type;
@@ -558,7 +558,7 @@
 };
 
 template<class T>
-struct owner_less<weak_ptr<T>>
+struct owner_less<weak_ptr<T> >
     : binary_function<weak_ptr<T>, weak_ptr<T>, bool>
 {
     typedef bool result_type;
@@ -683,7 +683,7 @@
 _ValueType __libcpp_relaxed_load(_ValueType const* __value) {
 #if !defined(_LIBCPP_HAS_NO_THREADS) && \
     defined(__ATOMIC_RELAXED) &&        \
-    (__has_builtin(__atomic_load_n) || _GNUC_VER >= 407)
+    (__has_builtin(__atomic_load_n) || defined(_LIBCPP_COMPILER_GCC))
     return __atomic_load_n(__value, __ATOMIC_RELAXED);
 #else
     return *__value;
@@ -695,7 +695,7 @@
 _ValueType __libcpp_acquire_load(_ValueType const* __value) {
 #if !defined(_LIBCPP_HAS_NO_THREADS) && \
     defined(__ATOMIC_ACQUIRE) &&        \
-    (__has_builtin(__atomic_load_n) || _GNUC_VER >= 407)
+    (__has_builtin(__atomic_load_n) || defined(_LIBCPP_COMPILER_GCC))
     return __atomic_load_n(__value, __ATOMIC_ACQUIRE);
 #else
     return *__value;
@@ -743,7 +743,7 @@
 template <class _Ptr>
 struct __pointer_traits_element_type<_Ptr, true>
 {
-    typedef typename _Ptr::element_type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Ptr::element_type type;
 };
 
 #ifndef _LIBCPP_HAS_NO_VARIADICS
@@ -751,13 +751,13 @@
 template <template <class, class...> class _Sp, class _Tp, class ..._Args>
 struct __pointer_traits_element_type<_Sp<_Tp, _Args...>, true>
 {
-    typedef typename _Sp<_Tp, _Args...>::element_type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Sp<_Tp, _Args...>::element_type type;
 };
 
 template <template <class, class...> class _Sp, class _Tp, class ..._Args>
 struct __pointer_traits_element_type<_Sp<_Tp, _Args...>, false>
 {
-    typedef _Tp type;
+    typedef _LIBCPP_NODEBUG_TYPE _Tp type;
 };
 
 #else  // _LIBCPP_HAS_NO_VARIADICS
@@ -824,13 +824,13 @@
 template <class _Ptr, bool = __has_difference_type<_Ptr>::value>
 struct __pointer_traits_difference_type
 {
-    typedef ptrdiff_t type;
+    typedef _LIBCPP_NODEBUG_TYPE ptrdiff_t type;
 };
 
 template <class _Ptr>
 struct __pointer_traits_difference_type<_Ptr, true>
 {
-    typedef typename _Ptr::difference_type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Ptr::difference_type type;
 };
 
 template <class _Tp, class _Up>
@@ -848,9 +848,9 @@
 struct __pointer_traits_rebind
 {
 #ifndef _LIBCPP_CXX03_LANG
-    typedef typename _Tp::template rebind<_Up> type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Tp::template rebind<_Up> type;
 #else
-    typedef typename _Tp::template rebind<_Up>::other type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Tp::template rebind<_Up>::other type;
 #endif
 };
 
@@ -860,9 +860,9 @@
 struct __pointer_traits_rebind<_Sp<_Tp, _Args...>, _Up, true>
 {
 #ifndef _LIBCPP_CXX03_LANG
-    typedef typename _Sp<_Tp, _Args...>::template rebind<_Up> type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Sp<_Tp, _Args...>::template rebind<_Up> type;
 #else
-    typedef typename _Sp<_Tp, _Args...>::template rebind<_Up>::other type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Sp<_Tp, _Args...>::template rebind<_Up>::other type;
 #endif
 };
 
@@ -1013,13 +1013,13 @@
 template <class _Tp, class _Dp, bool = __has_pointer_type<_Dp>::value>
 struct __pointer_type
 {
-    typedef typename _Dp::pointer type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Dp::pointer type;
 };
 
 template <class _Tp, class _Dp>
 struct __pointer_type<_Tp, _Dp, false>
 {
-    typedef _Tp* type;
+    typedef _LIBCPP_NODEBUG_TYPE _Tp* type;
 };
 
 }  // __pointer_type_imp
@@ -1027,7 +1027,7 @@
 template <class _Tp, class _Dp>
 struct __pointer_type
 {
-    typedef typename __pointer_type_imp::__pointer_type<_Tp, typename remove_reference<_Dp>::type>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename __pointer_type_imp::__pointer_type<_Tp, typename remove_reference<_Dp>::type>::type type;
 };
 
 template <class _Tp, class = void>
@@ -1040,14 +1040,14 @@
 template <class _Tp, class _Ptr, class _Alloc, bool = __has_const_pointer<_Alloc>::value>
 struct __const_pointer
 {
-    typedef typename _Alloc::const_pointer type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::const_pointer type;
 };
 
 template <class _Tp, class _Ptr, class _Alloc>
 struct __const_pointer<_Tp, _Ptr, _Alloc, false>
 {
 #ifndef _LIBCPP_CXX03_LANG
-    typedef typename pointer_traits<_Ptr>::template rebind<const _Tp> type;
+    typedef _LIBCPP_NODEBUG_TYPE typename pointer_traits<_Ptr>::template rebind<const _Tp> type;
 #else
     typedef typename pointer_traits<_Ptr>::template rebind<const _Tp>::other type;
 #endif
@@ -1063,16 +1063,16 @@
 template <class _Ptr, class _Alloc, bool = __has_void_pointer<_Alloc>::value>
 struct __void_pointer
 {
-    typedef typename _Alloc::void_pointer type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::void_pointer type;
 };
 
 template <class _Ptr, class _Alloc>
 struct __void_pointer<_Ptr, _Alloc, false>
 {
 #ifndef _LIBCPP_CXX03_LANG
-    typedef typename pointer_traits<_Ptr>::template rebind<void> type;
+    typedef _LIBCPP_NODEBUG_TYPE typename pointer_traits<_Ptr>::template rebind<void> type;
 #else
-    typedef typename pointer_traits<_Ptr>::template rebind<void>::other type;
+    typedef _LIBCPP_NODEBUG_TYPE typename pointer_traits<_Ptr>::template rebind<void>::other type;
 #endif
 };
 
@@ -1086,16 +1086,16 @@
 template <class _Ptr, class _Alloc, bool = __has_const_void_pointer<_Alloc>::value>
 struct __const_void_pointer
 {
-    typedef typename _Alloc::const_void_pointer type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::const_void_pointer type;
 };
 
 template <class _Ptr, class _Alloc>
 struct __const_void_pointer<_Ptr, _Alloc, false>
 {
 #ifndef _LIBCPP_CXX03_LANG
-    typedef typename pointer_traits<_Ptr>::template rebind<const void> type;
+    typedef _LIBCPP_NODEBUG_TYPE typename pointer_traits<_Ptr>::template rebind<const void> type;
 #else
-    typedef typename pointer_traits<_Ptr>::template rebind<const void>::other type;
+    typedef _LIBCPP_NODEBUG_TYPE typename pointer_traits<_Ptr>::template rebind<const void>::other type;
 #endif
 };
 
@@ -1161,13 +1161,13 @@
 template <class _Alloc, class _DiffType, bool = __has_size_type<_Alloc>::value>
 struct __size_type
 {
-    typedef typename make_unsigned<_DiffType>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename make_unsigned<_DiffType>::type type;
 };
 
 template <class _Alloc, class _DiffType>
 struct __size_type<_Alloc, _DiffType, true>
 {
-    typedef typename _Alloc::size_type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::size_type type;
 };
 
 template <class _Tp, class = void>
@@ -1181,13 +1181,13 @@
 template <class _Alloc, bool = __has_propagate_on_container_copy_assignment<_Alloc>::value>
 struct __propagate_on_container_copy_assignment
 {
-    typedef false_type type;
+    typedef _LIBCPP_NODEBUG_TYPE false_type type;
 };
 
 template <class _Alloc>
 struct __propagate_on_container_copy_assignment<_Alloc, true>
 {
-    typedef typename _Alloc::propagate_on_container_copy_assignment type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::propagate_on_container_copy_assignment type;
 };
 
 template <class _Tp, class = void>
@@ -1207,7 +1207,7 @@
 template <class _Alloc>
 struct __propagate_on_container_move_assignment<_Alloc, true>
 {
-    typedef typename _Alloc::propagate_on_container_move_assignment type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::propagate_on_container_move_assignment type;
 };
 
 template <class _Tp, class = void>
@@ -1227,7 +1227,7 @@
 template <class _Alloc>
 struct __propagate_on_container_swap<_Alloc, true>
 {
-    typedef typename _Alloc::propagate_on_container_swap type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::propagate_on_container_swap type;
 };
 
 template <class _Tp, class = void>
@@ -1241,13 +1241,13 @@
 template <class _Alloc, bool = __has_is_always_equal<_Alloc>::value>
 struct __is_always_equal
 {
-    typedef typename _VSTD::is_empty<_Alloc>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _VSTD::is_empty<_Alloc>::type type;
 };
 
 template <class _Alloc>
 struct __is_always_equal<_Alloc, true>
 {
-    typedef typename _Alloc::is_always_equal type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::is_always_equal type;
 };
 
 template <class _Tp, class _Up, bool = __has_rebind<_Tp, _Up>::value>
@@ -1270,7 +1270,7 @@
 template <class _Tp, class _Up, bool = __has_rebind_other<_Tp, _Up>::value>
 struct __allocator_traits_rebind
 {
-    typedef typename _Tp::template rebind<_Up>::other type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Tp::template rebind<_Up>::other type;
 };
 
 #ifndef _LIBCPP_HAS_NO_VARIADICS
@@ -1278,13 +1278,13 @@
 template <template <class, class...> class _Alloc, class _Tp, class ..._Args, class _Up>
 struct __allocator_traits_rebind<_Alloc<_Tp, _Args...>, _Up, true>
 {
-    typedef typename _Alloc<_Tp, _Args...>::template rebind<_Up>::other type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc<_Tp, _Args...>::template rebind<_Up>::other type;
 };
 
 template <template <class, class...> class _Alloc, class _Tp, class ..._Args, class _Up>
 struct __allocator_traits_rebind<_Alloc<_Tp, _Args...>, _Up, false>
 {
-    typedef _Alloc<_Up, _Args...> type;
+    typedef _LIBCPP_NODEBUG_TYPE _Alloc<_Up, _Args...> type;
 };
 
 #else  // _LIBCPP_HAS_NO_VARIADICS
@@ -1492,13 +1492,13 @@
 template <class _Alloc, class _Ptr, bool = __has_difference_type<_Alloc>::value>
 struct __alloc_traits_difference_type
 {
-    typedef typename pointer_traits<_Ptr>::difference_type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename pointer_traits<_Ptr>::difference_type type;
 };
 
 template <class _Alloc, class _Ptr>
 struct __alloc_traits_difference_type<_Alloc, _Ptr, true>
 {
-    typedef typename _Alloc::difference_type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Alloc::difference_type type;
 };
 
 template <class _Tp>
@@ -1533,7 +1533,7 @@
 #ifndef _LIBCPP_CXX03_LANG
     template <class _Tp> using rebind_alloc =
                   typename __allocator_traits_rebind<allocator_type, _Tp>::type;
-    template <class _Tp> using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
+    template <class _Tp> using rebind_traits = allocator_traits<rebind_alloc<_Tp> >;
 #else  // _LIBCPP_CXX03_LANG
     template <class _Tp> struct rebind_alloc
         {typedef typename __allocator_traits_rebind<allocator_type, _Tp>::type other;};
@@ -1768,7 +1768,7 @@
 struct __rebind_alloc_helper
 {
 #ifndef _LIBCPP_CXX03_LANG
-    typedef typename _Traits::template rebind_alloc<_Tp>        type;
+    typedef _LIBCPP_NODEBUG_TYPE typename _Traits::template rebind_alloc<_Tp>        type;
 #else
     typedef typename _Traits::template rebind_alloc<_Tp>::other type;
 #endif
@@ -2209,8 +2209,8 @@
 template <class _T1, class _T2>
 class __compressed_pair : private __compressed_pair_elem<_T1, 0>,
                           private __compressed_pair_elem<_T2, 1> {
-  typedef __compressed_pair_elem<_T1, 0> _Base1;
-  typedef __compressed_pair_elem<_T2, 1> _Base2;
+  typedef _LIBCPP_NODEBUG_TYPE __compressed_pair_elem<_T1, 0> _Base1;
+  typedef _LIBCPP_NODEBUG_TYPE __compressed_pair_elem<_T2, 1> _Base2;
 
   // NOTE: This static assert should never fire because __compressed_pair
   // is *almost never* used in a scenario where it's possible for T1 == T2.
@@ -2320,7 +2320,7 @@
     static_assert(!is_function<_Tp>::value,
                   "default_delete cannot be instantiated for function types");
 #ifndef _LIBCPP_CXX03_LANG
-  _LIBCPP_INLINE_VISIBILITY constexpr default_delete() noexcept = default;
+  _LIBCPP_INLINE_VISIBILITY constexpr default_delete() _NOEXCEPT = default;
 #else
   _LIBCPP_INLINE_VISIBILITY default_delete() {}
 #endif
@@ -2348,7 +2348,7 @@
 
 public:
 #ifndef _LIBCPP_CXX03_LANG
-  _LIBCPP_INLINE_VISIBILITY constexpr default_delete() noexcept = default;
+  _LIBCPP_INLINE_VISIBILITY constexpr default_delete() _NOEXCEPT = default;
 #else
   _LIBCPP_INLINE_VISIBILITY default_delete() {}
 #endif
@@ -2370,9 +2370,6 @@
   }
 };
 
-
-
-#ifndef _LIBCPP_CXX03_LANG
 template <class _Deleter>
 struct __unique_ptr_deleter_sfinae {
   static_assert(!is_reference<_Deleter>::value, "incorrect specialization");
@@ -2394,14 +2391,13 @@
   typedef _Deleter&& __bad_rval_ref_type;
   typedef false_type __enable_rval_overload;
 };
-#endif // !defined(_LIBCPP_CXX03_LANG)
 
 template <class _Tp, class _Dp = default_delete<_Tp> >
 class _LIBCPP_TEMPLATE_VIS unique_ptr {
 public:
   typedef _Tp element_type;
   typedef _Dp deleter_type;
-  typedef typename __pointer_type<_Tp, deleter_type>::type pointer;
+  typedef _LIBCPP_NODEBUG_TYPE typename __pointer_type<_Tp, deleter_type>::type pointer;
 
   static_assert(!is_rvalue_reference<deleter_type>::value,
                 "the specified deleter type cannot be an rvalue reference");
@@ -2411,39 +2407,38 @@
 
   struct __nat { int __for_bool_; };
 
-#ifndef _LIBCPP_CXX03_LANG
-  typedef __unique_ptr_deleter_sfinae<_Dp> _DeleterSFINAE;
+  typedef _LIBCPP_NODEBUG_TYPE __unique_ptr_deleter_sfinae<_Dp> _DeleterSFINAE;
 
   template <bool _Dummy>
-  using _LValRefType =
+  using _LValRefType _LIBCPP_NODEBUG_TYPE =
       typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
 
   template <bool _Dummy>
-  using _GoodRValRefType =
+  using _GoodRValRefType _LIBCPP_NODEBUG_TYPE =
       typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
 
   template <bool _Dummy>
-  using _BadRValRefType =
+  using _BadRValRefType _LIBCPP_NODEBUG_TYPE  =
       typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
 
   template <bool _Dummy, class _Deleter = typename __dependent_type<
                              __identity<deleter_type>, _Dummy>::type>
-  using _EnableIfDeleterDefaultConstructible =
+  using _EnableIfDeleterDefaultConstructible _LIBCPP_NODEBUG_TYPE =
       typename enable_if<is_default_constructible<_Deleter>::value &&
                          !is_pointer<_Deleter>::value>::type;
 
   template <class _ArgType>
-  using _EnableIfDeleterConstructible =
+  using _EnableIfDeleterConstructible _LIBCPP_NODEBUG_TYPE  =
       typename enable_if<is_constructible<deleter_type, _ArgType>::value>::type;
 
   template <class _UPtr, class _Up>
-  using _EnableIfMoveConvertible = typename enable_if<
+  using _EnableIfMoveConvertible _LIBCPP_NODEBUG_TYPE  = typename enable_if<
       is_convertible<typename _UPtr::pointer, pointer>::value &&
       !is_array<_Up>::value
   >::type;
 
   template <class _UDel>
-  using _EnableIfDeleterConvertible = typename enable_if<
+  using _EnableIfDeleterConvertible _LIBCPP_NODEBUG_TYPE  = typename enable_if<
       (is_reference<_Dp>::value && is_same<_Dp, _UDel>::value) ||
       (!is_reference<_Dp>::value && is_convertible<_UDel, _Dp>::value)
     >::type;
@@ -2455,42 +2450,42 @@
 
 public:
   template <bool _Dummy = true,
-            class = _EnableIfDeleterDefaultConstructible<_Dummy>>
+            class = _EnableIfDeleterDefaultConstructible<_Dummy> >
   _LIBCPP_INLINE_VISIBILITY
-  constexpr unique_ptr() noexcept : __ptr_(pointer()) {}
+  _LIBCPP_CONSTEXPR unique_ptr() _NOEXCEPT : __ptr_(pointer()) {}
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterDefaultConstructible<_Dummy>>
+            class = _EnableIfDeleterDefaultConstructible<_Dummy> >
   _LIBCPP_INLINE_VISIBILITY
-  constexpr unique_ptr(nullptr_t) noexcept : __ptr_(pointer()) {}
+  _LIBCPP_CONSTEXPR unique_ptr(nullptr_t) _NOEXCEPT : __ptr_(pointer()) {}
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterDefaultConstructible<_Dummy>>
+            class = _EnableIfDeleterDefaultConstructible<_Dummy> >
   _LIBCPP_INLINE_VISIBILITY
-  explicit unique_ptr(pointer __p) noexcept : __ptr_(__p) {}
+  explicit unique_ptr(pointer __p) _NOEXCEPT : __ptr_(__p) {}
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_LValRefType<_Dummy>>>
+            class = _EnableIfDeleterConstructible<_LValRefType<_Dummy> > >
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(pointer __p, _LValRefType<_Dummy> __d) noexcept
+  unique_ptr(pointer __p, _LValRefType<_Dummy> __d) _NOEXCEPT
       : __ptr_(__p, __d) {}
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_GoodRValRefType<_Dummy>>>
+            class = _EnableIfDeleterConstructible<_GoodRValRefType<_Dummy> > >
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(pointer __p, _GoodRValRefType<_Dummy> __d) noexcept
+  unique_ptr(pointer __p, _GoodRValRefType<_Dummy> __d) _NOEXCEPT
       : __ptr_(__p, _VSTD::move(__d)) {
     static_assert(!is_reference<deleter_type>::value,
                   "rvalue deleter bound to reference");
   }
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_BadRValRefType<_Dummy>>>
+            class = _EnableIfDeleterConstructible<_BadRValRefType<_Dummy> > >
   _LIBCPP_INLINE_VISIBILITY
   unique_ptr(pointer __p, _BadRValRefType<_Dummy> __d) = delete;
 
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(unique_ptr&& __u) noexcept
+  unique_ptr(unique_ptr&& __u) _NOEXCEPT
       : __ptr_(__u.release(), _VSTD::forward<deleter_type>(__u.get_deleter())) {
   }
 
@@ -2507,7 +2502,7 @@
   _LIBCPP_INLINE_VISIBILITY
   unique_ptr(auto_ptr<_Up>&& __p,
              typename enable_if<is_convertible<_Up*, _Tp*>::value &&
-                                    is_same<_Dp, default_delete<_Tp>>::value,
+                                    is_same<_Dp, default_delete<_Tp> >::value,
                                 __nat>::type = __nat()) _NOEXCEPT
       : __ptr_(__p.release()) {}
 #endif
@@ -2530,65 +2525,6 @@
     return *this;
   }
 
-#else  // _LIBCPP_CXX03_LANG
-private:
-  unique_ptr(unique_ptr&);
-  template <class _Up, class _Ep> unique_ptr(unique_ptr<_Up, _Ep>&);
-
-  unique_ptr& operator=(unique_ptr&);
-  template <class _Up, class _Ep> unique_ptr& operator=(unique_ptr<_Up, _Ep>&);
-
-public:
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr() : __ptr_(pointer())
-  {
-    static_assert(!is_pointer<deleter_type>::value,
-                  "unique_ptr constructed with null function pointer deleter");
-    static_assert(is_default_constructible<deleter_type>::value,
-                  "unique_ptr::deleter_type is not default constructible");
-  }
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(nullptr_t) : __ptr_(pointer())
-  {
-    static_assert(!is_pointer<deleter_type>::value,
-                  "unique_ptr constructed with null function pointer deleter");
-  }
-  _LIBCPP_INLINE_VISIBILITY
-  explicit unique_ptr(pointer __p)
-      : __ptr_(_VSTD::move(__p)) {
-    static_assert(!is_pointer<deleter_type>::value,
-                  "unique_ptr constructed with null function pointer deleter");
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  operator __rv<unique_ptr>() {
-    return __rv<unique_ptr>(*this);
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(__rv<unique_ptr> __u)
-      : __ptr_(__u->release(),
-               _VSTD::forward<deleter_type>(__u->get_deleter())) {}
-
-  template <class _Up, class _Ep>
-  _LIBCPP_INLINE_VISIBILITY
-  typename enable_if<
-      !is_array<_Up>::value &&
-          is_convertible<typename unique_ptr<_Up, _Ep>::pointer,
-                         pointer>::value &&
-          is_assignable<deleter_type&, _Ep&>::value,
-      unique_ptr&>::type
-  operator=(unique_ptr<_Up, _Ep> __u) {
-    reset(__u.release());
-    __ptr_.second() = _VSTD::forward<_Ep>(__u.get_deleter());
-    return *this;
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(pointer __p, deleter_type __d)
-      : __ptr_(_VSTD::move(__p), _VSTD::move(__d)) {}
-#endif // _LIBCPP_CXX03_LANG
-
 #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
   template <class _Up>
   _LIBCPP_INLINE_VISIBILITY
@@ -2601,6 +2537,12 @@
   }
 #endif
 
+#ifdef _LIBCPP_CXX03_LANG
+  unique_ptr(unique_ptr const&) = delete;
+  unique_ptr& operator=(unique_ptr const&) = delete;
+#endif
+
+
   _LIBCPP_INLINE_VISIBILITY
   ~unique_ptr() { reset(); }
 
@@ -2680,39 +2622,38 @@
       >
   {};
 
-#ifndef _LIBCPP_CXX03_LANG
   typedef __unique_ptr_deleter_sfinae<_Dp> _DeleterSFINAE;
 
   template <bool _Dummy>
-  using _LValRefType =
+  using _LValRefType _LIBCPP_NODEBUG_TYPE =
       typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
 
   template <bool _Dummy>
-  using _GoodRValRefType =
+  using _GoodRValRefType _LIBCPP_NODEBUG_TYPE =
       typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
 
   template <bool _Dummy>
-  using _BadRValRefType =
+  using _BadRValRefType _LIBCPP_NODEBUG_TYPE =
       typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
 
   template <bool _Dummy, class _Deleter = typename __dependent_type<
                              __identity<deleter_type>, _Dummy>::type>
-  using _EnableIfDeleterDefaultConstructible =
+  using _EnableIfDeleterDefaultConstructible _LIBCPP_NODEBUG_TYPE  =
       typename enable_if<is_default_constructible<_Deleter>::value &&
                          !is_pointer<_Deleter>::value>::type;
 
   template <class _ArgType>
-  using _EnableIfDeleterConstructible =
+  using _EnableIfDeleterConstructible _LIBCPP_NODEBUG_TYPE  =
       typename enable_if<is_constructible<deleter_type, _ArgType>::value>::type;
 
   template <class _Pp>
-  using _EnableIfPointerConvertible = typename enable_if<
+  using _EnableIfPointerConvertible _LIBCPP_NODEBUG_TYPE  = typename enable_if<
       _CheckArrayPointerConversion<_Pp>::value
   >::type;
 
   template <class _UPtr, class _Up,
         class _ElemT = typename _UPtr::element_type>
-  using _EnableIfMoveConvertible = typename enable_if<
+  using _EnableIfMoveConvertible _LIBCPP_NODEBUG_TYPE  = typename enable_if<
       is_array<_Up>::value &&
       is_same<pointer, element_type*>::value &&
       is_same<typename _UPtr::pointer, _ElemT*>::value &&
@@ -2720,79 +2661,79 @@
     >::type;
 
   template <class _UDel>
-  using _EnableIfDeleterConvertible = typename enable_if<
+  using _EnableIfDeleterConvertible _LIBCPP_NODEBUG_TYPE  = typename enable_if<
       (is_reference<_Dp>::value && is_same<_Dp, _UDel>::value) ||
       (!is_reference<_Dp>::value && is_convertible<_UDel, _Dp>::value)
     >::type;
 
   template <class _UDel>
-  using _EnableIfDeleterAssignable = typename enable_if<
+  using _EnableIfDeleterAssignable _LIBCPP_NODEBUG_TYPE  = typename enable_if<
       is_assignable<_Dp&, _UDel&&>::value
     >::type;
 
 public:
   template <bool _Dummy = true,
-            class = _EnableIfDeleterDefaultConstructible<_Dummy>>
+            class = _EnableIfDeleterDefaultConstructible<_Dummy> >
   _LIBCPP_INLINE_VISIBILITY
-  constexpr unique_ptr() noexcept : __ptr_(pointer()) {}
+  _LIBCPP_CONSTEXPR unique_ptr() _NOEXCEPT : __ptr_(pointer()) {}
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterDefaultConstructible<_Dummy>>
+            class = _EnableIfDeleterDefaultConstructible<_Dummy> >
   _LIBCPP_INLINE_VISIBILITY
-  constexpr unique_ptr(nullptr_t) noexcept : __ptr_(pointer()) {}
+  _LIBCPP_CONSTEXPR unique_ptr(nullptr_t) _NOEXCEPT : __ptr_(pointer()) {}
 
   template <class _Pp, bool _Dummy = true,
             class = _EnableIfDeleterDefaultConstructible<_Dummy>,
-            class = _EnableIfPointerConvertible<_Pp>>
+            class = _EnableIfPointerConvertible<_Pp> >
   _LIBCPP_INLINE_VISIBILITY
-  explicit unique_ptr(_Pp __p) noexcept
+  explicit unique_ptr(_Pp __p) _NOEXCEPT
       : __ptr_(__p) {}
 
   template <class _Pp, bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_LValRefType<_Dummy>>,
-            class = _EnableIfPointerConvertible<_Pp>>
+            class = _EnableIfDeleterConstructible<_LValRefType<_Dummy> >,
+            class = _EnableIfPointerConvertible<_Pp> >
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(_Pp __p, _LValRefType<_Dummy> __d) noexcept
+  unique_ptr(_Pp __p, _LValRefType<_Dummy> __d) _NOEXCEPT
       : __ptr_(__p, __d) {}
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_LValRefType<_Dummy>>>
+            class = _EnableIfDeleterConstructible<_LValRefType<_Dummy> > >
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(nullptr_t, _LValRefType<_Dummy> __d) noexcept
+  unique_ptr(nullptr_t, _LValRefType<_Dummy> __d) _NOEXCEPT
       : __ptr_(nullptr, __d) {}
 
   template <class _Pp, bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_GoodRValRefType<_Dummy>>,
-            class = _EnableIfPointerConvertible<_Pp>>
+            class = _EnableIfDeleterConstructible<_GoodRValRefType<_Dummy> >,
+            class = _EnableIfPointerConvertible<_Pp> >
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(_Pp __p, _GoodRValRefType<_Dummy> __d) noexcept
+  unique_ptr(_Pp __p, _GoodRValRefType<_Dummy> __d) _NOEXCEPT
       : __ptr_(__p, _VSTD::move(__d)) {
     static_assert(!is_reference<deleter_type>::value,
                   "rvalue deleter bound to reference");
   }
 
   template <bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_GoodRValRefType<_Dummy>>>
+            class = _EnableIfDeleterConstructible<_GoodRValRefType<_Dummy> > >
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(nullptr_t, _GoodRValRefType<_Dummy> __d) noexcept
+  unique_ptr(nullptr_t, _GoodRValRefType<_Dummy> __d) _NOEXCEPT
       : __ptr_(nullptr, _VSTD::move(__d)) {
     static_assert(!is_reference<deleter_type>::value,
                   "rvalue deleter bound to reference");
   }
 
   template <class _Pp, bool _Dummy = true,
-            class = _EnableIfDeleterConstructible<_BadRValRefType<_Dummy>>,
-            class = _EnableIfPointerConvertible<_Pp>>
+            class = _EnableIfDeleterConstructible<_BadRValRefType<_Dummy> >,
+            class = _EnableIfPointerConvertible<_Pp> >
   _LIBCPP_INLINE_VISIBILITY
   unique_ptr(_Pp __p, _BadRValRefType<_Dummy> __d) = delete;
 
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(unique_ptr&& __u) noexcept
+  unique_ptr(unique_ptr&& __u) _NOEXCEPT
       : __ptr_(__u.release(), _VSTD::forward<deleter_type>(__u.get_deleter())) {
   }
 
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr& operator=(unique_ptr&& __u) noexcept {
+  unique_ptr& operator=(unique_ptr&& __u) _NOEXCEPT {
     reset(__u.release());
     __ptr_.second() = _VSTD::forward<deleter_type>(__u.get_deleter());
     return *this;
@@ -2803,7 +2744,7 @@
       class = _EnableIfDeleterConvertible<_Ep>
   >
   _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
+  unique_ptr(unique_ptr<_Up, _Ep>&& __u) _NOEXCEPT
       : __ptr_(__u.release(), _VSTD::forward<_Ep>(__u.get_deleter())) {
   }
 
@@ -2813,73 +2754,16 @@
   >
   _LIBCPP_INLINE_VISIBILITY
   unique_ptr&
-  operator=(unique_ptr<_Up, _Ep>&& __u) noexcept {
+  operator=(unique_ptr<_Up, _Ep>&& __u) _NOEXCEPT {
     reset(__u.release());
     __ptr_.second() = _VSTD::forward<_Ep>(__u.get_deleter());
     return *this;
   }
 
-#else // _LIBCPP_CXX03_LANG
-private:
-  template <class _Up> explicit unique_ptr(_Up);
-
-  unique_ptr(unique_ptr&);
-  template <class _Up> unique_ptr(unique_ptr<_Up>&);
-
-  unique_ptr& operator=(unique_ptr&);
-  template <class _Up> unique_ptr& operator=(unique_ptr<_Up>&);
-
-  template <class _Up>
-  unique_ptr(_Up __u,
-             typename conditional<
-                 is_reference<deleter_type>::value, deleter_type,
-                 typename add_lvalue_reference<const deleter_type>::type>::type,
-             typename enable_if<is_convertible<_Up, pointer>::value,
-                                __nat>::type = __nat());
-public:
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr() : __ptr_(pointer()) {
-    static_assert(!is_pointer<deleter_type>::value,
-                  "unique_ptr constructed with null function pointer deleter");
-  }
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(nullptr_t) : __ptr_(pointer()) {
-    static_assert(!is_pointer<deleter_type>::value,
-                  "unique_ptr constructed with null function pointer deleter");
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  explicit unique_ptr(pointer __p) : __ptr_(__p) {
-    static_assert(!is_pointer<deleter_type>::value,
-                  "unique_ptr constructed with null function pointer deleter");
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(pointer __p, deleter_type __d)
-      : __ptr_(__p, _VSTD::forward<deleter_type>(__d)) {}
-
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(nullptr_t, deleter_type __d)
-      : __ptr_(pointer(), _VSTD::forward<deleter_type>(__d)) {}
-
-  _LIBCPP_INLINE_VISIBILITY
-  operator __rv<unique_ptr>() {
-    return __rv<unique_ptr>(*this);
-  }
-
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr(__rv<unique_ptr> __u)
-      : __ptr_(__u->release(),
-               _VSTD::forward<deleter_type>(__u->get_deleter())) {}
-
-  _LIBCPP_INLINE_VISIBILITY
-  unique_ptr& operator=(__rv<unique_ptr> __u) {
-    reset(__u->release());
-    __ptr_.second() = _VSTD::forward<deleter_type>(__u->get_deleter());
-    return *this;
-  }
-
-#endif // _LIBCPP_CXX03_LANG
+#ifdef _LIBCPP_CXX03_LANG
+  unique_ptr(unique_ptr const&) = delete;
+  unique_ptr& operator=(unique_ptr const&) = delete;
+#endif
 
 public:
   _LIBCPP_INLINE_VISIBILITY
@@ -3091,18 +2975,6 @@
     return !(nullptr < __x);
 }
 
-#ifdef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-template <class _Tp, class _Dp>
-inline _LIBCPP_INLINE_VISIBILITY
-unique_ptr<_Tp, _Dp>
-move(unique_ptr<_Tp, _Dp>& __t)
-{
-    return unique_ptr<_Tp, _Dp>(__rv<unique_ptr<_Tp, _Dp> >(__t));
-}
-
-#endif
-
 #if _LIBCPP_STD_VER > 11
 
 template<class _Tp>
@@ -3151,7 +3023,7 @@
 struct _LIBCPP_TEMPLATE_VIS hash<unique_ptr<_Tp, _Dp> >
 #else
 struct _LIBCPP_TEMPLATE_VIS hash<__enable_hash_helper<
-    unique_ptr<_Tp, _Dp>, typename unique_ptr<_Tp, _Dp>::pointer>>
+    unique_ptr<_Tp, _Dp>, typename unique_ptr<_Tp, _Dp>::pointer> >
 #endif
 {
     typedef unique_ptr<_Tp, _Dp> argument_type;
@@ -3206,10 +3078,10 @@
 template <class _Alloc>
 class __allocator_destructor
 {
-    typedef allocator_traits<_Alloc> __alloc_traits;
+    typedef _LIBCPP_NODEBUG_TYPE allocator_traits<_Alloc> __alloc_traits;
 public:
-    typedef typename __alloc_traits::pointer pointer;
-    typedef typename __alloc_traits::size_type size_type;
+    typedef _LIBCPP_NODEBUG_TYPE typename __alloc_traits::pointer pointer;
+    typedef _LIBCPP_NODEBUG_TYPE typename __alloc_traits::size_type size_type;
 private:
     _Alloc& __alloc_;
     size_type __s_;
@@ -3466,7 +3338,7 @@
                        && defined(__ATOMIC_RELAXED)                  \
                        && defined(__ATOMIC_ACQ_REL)
 #   define _LIBCPP_HAS_BUILTIN_ATOMIC_SUPPORT
-#elif !defined(__clang__) && defined(_GNUC_VER) && _GNUC_VER >= 407
+#elif defined(_LIBCPP_COMPILER_GCC)
 #   define _LIBCPP_HAS_BUILTIN_ATOMIC_SUPPORT
 #endif
 
@@ -5668,6 +5540,52 @@
      >
    : true_type {};
 
+// __builtin_new_allocator -- A non-templated helper for allocating and
+// deallocating memory using __builtin_operator_new and
+// __builtin_operator_delete. It should be used in preference to
+// `std::allocator<T>` to avoid additional instantiations.
+struct __builtin_new_allocator {
+  struct __builtin_new_deleter {
+    typedef void* pointer_type;
+
+    _LIBCPP_CONSTEXPR explicit __builtin_new_deleter(size_t __size, size_t __align)
+        : __size_(__size), __align_(__align) {}
+
+    void operator()(void* p) const _NOEXCEPT {
+        std::__libcpp_deallocate(p, __size_, __align_);
+    }
+
+   private:
+    size_t __size_;
+    size_t __align_;
+  };
+
+  typedef unique_ptr<void, __builtin_new_deleter> __holder_t;
+
+  static __holder_t __allocate_bytes(size_t __s, size_t __align) {
+      return __holder_t(std::__libcpp_allocate(__s, __align),
+                     __builtin_new_deleter(__s, __align));
+  }
+
+  static void __deallocate_bytes(void* __p, size_t __s,
+                                 size_t __align) _NOEXCEPT {
+      std::__libcpp_deallocate(__p, __s, __align);
+  }
+
+  template <class _Tp>
+  _LIBCPP_NODEBUG _LIBCPP_ALWAYS_INLINE
+  static __holder_t __allocate_type(size_t __n) {
+      return __allocate_bytes(__n * sizeof(_Tp), _LIBCPP_ALIGNOF(_Tp));
+  }
+
+  template <class _Tp>
+  _LIBCPP_NODEBUG _LIBCPP_ALWAYS_INLINE
+  static void __deallocate_type(void* __p, size_t __n) _NOEXCEPT {
+      __deallocate_bytes(__p, __n * sizeof(_Tp), _LIBCPP_ALIGNOF(_Tp));
+  }
+};
+
+
 _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
diff --git a/linux-x64/clang/include/c++/v1/mutex b/linux-x64/clang/include/c++/v1/mutex
index 98bd581..20c3ffc 100644
--- a/linux-x64/clang/include/c++/v1/mutex
+++ b/linux-x64/clang/include/c++/v1/mutex
@@ -188,6 +188,7 @@
 
 #include <__config>
 #include <__mutex_base>
+#include <cstdint>
 #include <functional>
 #include <memory>
 #ifndef _LIBCPP_CXX03_LANG
@@ -575,11 +576,18 @@
     _LIBCPP_CONSTEXPR
         once_flag() _NOEXCEPT : __state_(0) {}
 
+#if defined(_LIBCPP_ABI_MICROSOFT)
+   typedef uintptr_t _State_type;
+#else
+   typedef unsigned long _State_type;
+#endif
+
+
 private:
     once_flag(const once_flag&); // = delete;
     once_flag& operator=(const once_flag&); // = delete;
 
-    unsigned long __state_;
+    _State_type __state_;
 
 #ifndef _LIBCPP_CXX03_LANG
     template<class _Callable, class... _Args>
@@ -649,7 +657,8 @@
     (*__p)();
 }
 
-_LIBCPP_FUNC_VIS void __call_once(volatile unsigned long&, void*, void(*)(void*));
+_LIBCPP_FUNC_VIS void __call_once(volatile once_flag::_State_type&, void*,
+                                  void (*)(void*));
 
 #ifndef _LIBCPP_CXX03_LANG
 
@@ -658,7 +667,7 @@
 void
 call_once(once_flag& __flag, _Callable&& __func, _Args&&... __args)
 {
-    if (__libcpp_acquire_load(&__flag.__state_) != ~0ul)
+    if (__libcpp_acquire_load(&__flag.__state_) != ~once_flag::_State_type(0))
     {
         typedef tuple<_Callable&&, _Args&&...> _Gp;
         _Gp __f(_VSTD::forward<_Callable>(__func), _VSTD::forward<_Args>(__args)...);
@@ -674,7 +683,7 @@
 void
 call_once(once_flag& __flag, _Callable& __func)
 {
-    if (__libcpp_acquire_load(&__flag.__state_) != ~0ul)
+    if (__libcpp_acquire_load(&__flag.__state_) != ~once_flag::_State_type(0))
     {
         __call_once_param<_Callable> __p(__func);
         __call_once(__flag.__state_, &__p, &__call_once_proxy<_Callable>);
@@ -686,7 +695,7 @@
 void
 call_once(once_flag& __flag, const _Callable& __func)
 {
-    if (__libcpp_acquire_load(&__flag.__state_) != ~0ul)
+    if (__libcpp_acquire_load(&__flag.__state_) != ~once_flag::_State_type(0))
     {
         __call_once_param<const _Callable> __p(__func);
         __call_once(__flag.__state_, &__p, &__call_once_proxy<const _Callable>);
diff --git a/linux-x64/clang/include/c++/v1/new b/linux-x64/clang/include/c++/v1/new
index b5e8fb4..85e4c4b 100644
--- a/linux-x64/clang/include/c++/v1/new
+++ b/linux-x64/clang/include/c++/v1/new
@@ -33,6 +33,12 @@
 };
 
 enum class align_val_t : size_t {}; // C++17
+
+struct destroying_delete_t { // C++20
+  explicit destroying_delete_t() = default;
+};
+inline constexpr destroying_delete_t destroying_delete{}; // C++20
+
 struct nothrow_t {};
 extern const nothrow_t nothrow;
 typedef void (*new_handler)();
@@ -89,7 +95,7 @@
 #include <cstdlib>
 #endif
 
-#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
+#if defined(_LIBCPP_ABI_VCRUNTIME)
 #include <new.h>
 #endif
 
@@ -119,7 +125,7 @@
 namespace std  // purposefully not using versioning namespace
 {
 
-#if !defined(_LIBCPP_ABI_MICROSOFT) || defined(_LIBCPP_NO_VCRUNTIME)
+#if !defined(_LIBCPP_ABI_VCRUNTIME)
 struct _LIBCPP_TYPE_VIS nothrow_t {};
 extern _LIBCPP_FUNC_VIS const nothrow_t nothrow;
 
@@ -145,12 +151,12 @@
 _LIBCPP_FUNC_VIS new_handler set_new_handler(new_handler) _NOEXCEPT;
 _LIBCPP_FUNC_VIS new_handler get_new_handler() _NOEXCEPT;
 
-#endif // !_LIBCPP_ABI_MICROSOFT || _LIBCPP_NO_VCRUNTIME
+#endif // !_LIBCPP_ABI_VCRUNTIME
 
 _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_bad_alloc();  // not in C++ spec
 
 #if !defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION) && \
-    !defined(_LIBCPP_DEFER_NEW_TO_VCRUNTIME)
+    !defined(_LIBCPP_ABI_VCRUNTIME)
 #ifndef _LIBCPP_CXX03_LANG
 enum class _LIBCPP_ENUM_VIS align_val_t : size_t { };
 #else
@@ -158,6 +164,15 @@
 #endif
 #endif
 
+#if _LIBCPP_STD_VER > 17
+// Enable the declaration even if the compiler doesn't support the language
+// feature.
+struct destroying_delete_t {
+  explicit destroying_delete_t() = default;
+};
+_LIBCPP_INLINE_VAR constexpr destroying_delete_t destroying_delete{};
+#endif // _LIBCPP_STD_VER > 17
+
 }  // std
 
 #if defined(_LIBCPP_CXX03_LANG)
@@ -166,10 +181,10 @@
 #define _THROW_BAD_ALLOC
 #endif
 
-#if !defined(_LIBCPP_DEFER_NEW_TO_VCRUNTIME)
+#if !defined(_LIBCPP_ABI_VCRUNTIME)
 
 _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz) _THROW_BAD_ALLOC;
-_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
+_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete(void* __p) _NOEXCEPT;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT;
 #ifndef _LIBCPP_HAS_NO_LIBRARY_SIZED_DEALLOCATION
@@ -177,7 +192,7 @@
 #endif
 
 _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz) _THROW_BAD_ALLOC;
-_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
+_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete[](void* __p) _NOEXCEPT;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT;
 #ifndef _LIBCPP_HAS_NO_LIBRARY_SIZED_DEALLOCATION
@@ -186,7 +201,7 @@
 
 #ifndef _LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION
 _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, std::align_val_t) _THROW_BAD_ALLOC;
-_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
+_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete(void* __p, std::align_val_t) _NOEXCEPT;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete(void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT;
 #ifndef _LIBCPP_HAS_NO_LIBRARY_SIZED_DEALLOCATION
@@ -194,7 +209,7 @@
 #endif
 
 _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz, std::align_val_t) _THROW_BAD_ALLOC;
-_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
+_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete[](void* __p, std::align_val_t) _NOEXCEPT;
 _LIBCPP_OVERRIDABLE_FUNC_VIS void  operator delete[](void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT;
 #ifndef _LIBCPP_HAS_NO_LIBRARY_SIZED_DEALLOCATION
@@ -207,7 +222,7 @@
 inline _LIBCPP_INLINE_VISIBILITY void  operator delete  (void*, void*) _NOEXCEPT {}
 inline _LIBCPP_INLINE_VISIBILITY void  operator delete[](void*, void*) _NOEXCEPT {}
 
-#endif // !_LIBCPP_DEFER_NEW_TO_VCRUNTIME
+#endif // !_LIBCPP_ABI_VCRUNTIME
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
diff --git a/linux-x64/clang/include/c++/v1/numeric b/linux-x64/clang/include/c++/v1/numeric
index 9941770..2118704 100644
--- a/linux-x64/clang/include/c++/v1/numeric
+++ b/linux-x64/clang/include/c++/v1/numeric
@@ -133,6 +133,10 @@
 template <class M, class N>
     constexpr common_type_t<M,N> lcm(M m, N n);    // C++17
 
+integer         midpoint(integer a, integer b);                  // C++20
+pointer         midpoint(pointer a, pointer b);                  // C++20
+floating_point  midpoint(floating_point a, floating_point b);    // C++20
+
 }  // std
 
 */
@@ -141,6 +145,7 @@
 #include <iterator>
 #include <limits> // for numeric_limits
 #include <functional>
+#include <cmath> // for isnormal
 #include <version>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -455,10 +460,10 @@
 
 
 #if _LIBCPP_STD_VER > 14
-template <typename _Result, typename _Source, bool _IsSigned = is_signed<_Source>::value> struct __abs;
+template <typename _Result, typename _Source, bool _IsSigned = is_signed<_Source>::value> struct __ct_abs;
 
 template <typename _Result, typename _Source>
-struct __abs<_Result, _Source, true> {
+struct __ct_abs<_Result, _Source, true> {
     _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
     _Result operator()(_Source __t) const noexcept
     {
@@ -469,7 +474,7 @@
 };
 
 template <typename _Result, typename _Source>
-struct __abs<_Result, _Source, false> {
+struct __ct_abs<_Result, _Source, false> {
     _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
     _Result operator()(_Source __t) const noexcept { return __t; }
 };
@@ -495,8 +500,8 @@
     using _Rp = common_type_t<_Tp,_Up>;
     using _Wp = make_unsigned_t<_Rp>;
     return static_cast<_Rp>(_VSTD::__gcd(
-        static_cast<_Wp>(__abs<_Rp, _Tp>()(__m)),
-        static_cast<_Wp>(__abs<_Rp, _Up>()(__n))));
+        static_cast<_Wp>(__ct_abs<_Rp, _Tp>()(__m)),
+        static_cast<_Wp>(__ct_abs<_Rp, _Up>()(__n))));
 }
 
 template<class _Tp, class _Up>
@@ -511,14 +516,72 @@
         return 0;
 
     using _Rp = common_type_t<_Tp,_Up>;
-    _Rp __val1 = __abs<_Rp, _Tp>()(__m) / _VSTD::gcd(__m, __n);
-    _Rp __val2 = __abs<_Rp, _Up>()(__n);
+    _Rp __val1 = __ct_abs<_Rp, _Tp>()(__m) / _VSTD::gcd(__m, __n);
+    _Rp __val2 = __ct_abs<_Rp, _Up>()(__n);
     _LIBCPP_ASSERT((numeric_limits<_Rp>::max() / __val1 > __val2), "Overflow in lcm");
     return __val1 * __val2;
 }
 
 #endif /* _LIBCPP_STD_VER > 14 */
 
+#if _LIBCPP_STD_VER > 17
+template <class _Tp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<is_integral_v<_Tp> && !is_same_v<bool, _Tp> && !is_null_pointer_v<_Tp>, _Tp>
+midpoint(_Tp __a, _Tp __b) noexcept
+_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
+{
+    using _Up = std::make_unsigned_t<_Tp>;
+
+    int __sign = 1;
+    _Up __m = __a;
+    _Up __M = __b;
+    if (__a > __b)
+    {
+        __sign = -1;
+        __m = __b;
+        __M = __a;
+    }
+     return __a + __sign * _Tp(_Up(__M-__m) >> 1);
+}
+
+
+template <class _TPtr>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<is_pointer_v<_TPtr>
+             && is_object_v<remove_pointer_t<_TPtr>>
+             && ! is_void_v<remove_pointer_t<_TPtr>>
+             && (sizeof(remove_pointer_t<_TPtr>) > 0), _TPtr>
+midpoint(_TPtr __a, _TPtr __b) noexcept
+{
+    return __a + _VSTD::midpoint(ptrdiff_t(0), __b - __a);
+}
+
+
+template <typename _Tp>
+constexpr int __sign(_Tp __val) {
+    return (_Tp(0) < __val) - (__val < _Tp(0));
+}
+
+template <typename _Fp>
+constexpr _Fp __fp_abs(_Fp __f) { return __f >= 0 ? __f : -__f; }
+
+template <class _Fp>
+_LIBCPP_INLINE_VISIBILITY constexpr
+enable_if_t<is_floating_point_v<_Fp>, _Fp>
+midpoint(_Fp __a, _Fp __b) noexcept
+{
+	constexpr _Fp __lo = numeric_limits<_Fp>::min()*2;
+	constexpr _Fp __hi = numeric_limits<_Fp>::max()/2;
+    return __fp_abs(__a) <= __hi && __fp_abs(__b) <= __hi ?  // typical case: overflow is impossible
+      (__a + __b)/2 :                                        // always correctly rounded
+      __fp_abs(__a) < __lo ? __a + __b/2 :                   // not safe to halve a
+      __fp_abs(__a) < __lo ? __a/2 + __b :                   // not safe to halve b
+      __a/2 + __b/2;                                         // otherwise correctly rounded
+}
+
+#endif // _LIBCPP_STD_VER > 17
+
 _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
diff --git a/linux-x64/clang/include/c++/v1/optional b/linux-x64/clang/include/c++/v1/optional
index be584b3..a147d69 100644
--- a/linux-x64/clang/include/c++/v1/optional
+++ b/linux-x64/clang/include/c++/v1/optional
@@ -592,7 +592,7 @@
 
 private:
      // Disable the reference extension using this static assert.
-    static_assert(!is_same_v<value_type, in_place_t>,
+    static_assert(!is_same_v<__uncvref_t<value_type>, in_place_t>,
         "instantiation of optional with in_place_t is ill-formed");
     static_assert(!is_same_v<__uncvref_t<value_type>, nullopt_t>,
         "instantiation of optional with nullopt_t is ill-formed");
@@ -600,6 +600,8 @@
         "instantiation of optional with a reference type is ill-formed");
     static_assert(is_destructible_v<value_type>,
         "instantiation of optional with a non-destructible type is ill-formed");
+    static_assert(!is_array_v<value_type>,
+        "instantiation of optional with an array type is ill-formed");
 
     // LWG2756: conditionally explicit conversion from _Up
     struct _CheckOptionalArgsConstructor {
@@ -616,16 +618,16 @@
       }
     };
     template <class _Up>
-    using _CheckOptionalArgsCtor = conditional_t<
-        !is_same_v<__uncvref_t<_Up>, in_place_t> &&
-        !is_same_v<__uncvref_t<_Up>, optional>,
+    using _CheckOptionalArgsCtor = _If<
+        _IsNotSame<__uncvref_t<_Up>, in_place_t>::value &&
+        _IsNotSame<__uncvref_t<_Up>, optional>::value,
         _CheckOptionalArgsConstructor,
         __check_tuple_constructor_fail
     >;
     template <class _QualUp>
     struct _CheckOptionalLikeConstructor {
       template <class _Up, class _Opt = optional<_Up>>
-      using __check_constructible_from_opt = __lazy_or<
+      using __check_constructible_from_opt = _Or<
           is_constructible<_Tp, _Opt&>,
           is_constructible<_Tp, _Opt const&>,
           is_constructible<_Tp, _Opt&&>,
@@ -636,7 +638,7 @@
           is_convertible<_Opt const&&, _Tp>
       >;
       template <class _Up, class _Opt = optional<_Up>>
-      using __check_assignable_from_opt = __lazy_or<
+      using __check_assignable_from_opt = _Or<
           is_assignable<_Tp&, _Opt&>,
           is_assignable<_Tp&, _Opt const&>,
           is_assignable<_Tp&, _Opt&&>,
@@ -662,18 +664,18 @@
     };
 
     template <class _Up, class _QualUp>
-    using _CheckOptionalLikeCtor = conditional_t<
-      __lazy_and<
-          __lazy_not<is_same<_Up, _Tp>>,
+    using _CheckOptionalLikeCtor = _If<
+      _And<
+         _IsNotSame<_Up, _Tp>,
           is_constructible<_Tp, _QualUp>
       >::value,
       _CheckOptionalLikeConstructor<_QualUp>,
       __check_tuple_constructor_fail
     >;
     template <class _Up, class _QualUp>
-    using _CheckOptionalLikeAssign = conditional_t<
-      __lazy_and<
-          __lazy_not<is_same<_Up, _Tp>>,
+    using _CheckOptionalLikeAssign = _If<
+      _And<
+          _IsNotSame<_Up, _Tp>,
           is_constructible<_Tp, _QualUp>,
           is_assignable<_Tp&, _QualUp>
       >::value,
@@ -687,28 +689,32 @@
     _LIBCPP_INLINE_VISIBILITY constexpr optional(optional&&) = default;
     _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
 
-    template <class... _Args, class = enable_if_t<
-        is_constructible_v<value_type, _Args...>>
+    template <class _InPlaceT, class... _Args, class = _EnableIf<
+          _And<
+              _IsSame<_InPlaceT, in_place_t>,
+              is_constructible<value_type, _Args...>
+            >::value
+        >
     >
     _LIBCPP_INLINE_VISIBILITY
-    constexpr explicit optional(in_place_t, _Args&&... __args)
+    constexpr explicit optional(_InPlaceT, _Args&&... __args)
         : __base(in_place, _VSTD::forward<_Args>(__args)...) {}
 
-    template <class _Up, class... _Args, class = enable_if_t<
+    template <class _Up, class... _Args, class = _EnableIf<
         is_constructible_v<value_type, initializer_list<_Up>&, _Args...>>
     >
     _LIBCPP_INLINE_VISIBILITY
     constexpr explicit optional(in_place_t, initializer_list<_Up> __il, _Args&&... __args)
         : __base(in_place, __il, _VSTD::forward<_Args>(__args)...) {}
 
-    template <class _Up = value_type, enable_if_t<
+    template <class _Up = value_type, _EnableIf<
         _CheckOptionalArgsCtor<_Up>::template __enable_implicit<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
     constexpr optional(_Up&& __v)
         : __base(in_place, _VSTD::forward<_Up>(__v)) {}
 
-    template <class _Up, enable_if_t<
+    template <class _Up, _EnableIf<
         _CheckOptionalArgsCtor<_Up>::template __enable_explicit<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
@@ -716,7 +722,7 @@
         : __base(in_place, _VSTD::forward<_Up>(__v)) {}
 
     // LWG2756: conditionally explicit conversion from const optional<_Up>&
-    template <class _Up, enable_if_t<
+    template <class _Up, _EnableIf<
         _CheckOptionalLikeCtor<_Up, _Up const&>::template __enable_implicit<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
@@ -724,7 +730,7 @@
     {
         this->__construct_from(__v);
     }
-    template <class _Up, enable_if_t<
+    template <class _Up, _EnableIf<
         _CheckOptionalLikeCtor<_Up, _Up const&>::template __enable_explicit<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
@@ -734,7 +740,7 @@
     }
 
     // LWG2756: conditionally explicit conversion from optional<_Up>&&
-    template <class _Up, enable_if_t<
+    template <class _Up, _EnableIf<
         _CheckOptionalLikeCtor<_Up, _Up &&>::template __enable_implicit<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
@@ -742,7 +748,7 @@
     {
         this->__construct_from(_VSTD::move(__v));
     }
-    template <class _Up, enable_if_t<
+    template <class _Up, _EnableIf<
         _CheckOptionalLikeCtor<_Up, _Up &&>::template __enable_explicit<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
@@ -763,11 +769,12 @@
 
     // LWG2756
     template <class _Up = value_type,
-              class = enable_if_t
-                      <__lazy_and<
-                          integral_constant<bool,
-                              !is_same_v<__uncvref_t<_Up>, optional> &&
-                              !(is_same_v<_Up, value_type> && is_scalar_v<value_type>)
+              class = _EnableIf<
+                      _And<
+                          _IsNotSame<__uncvref_t<_Up>, optional>,
+                          _Or<
+                              _IsNotSame<__uncvref_t<_Up>, value_type>,
+                              _Not<is_scalar<value_type>>
                           >,
                           is_constructible<value_type, _Up>,
                           is_assignable<value_type&, _Up>
@@ -785,7 +792,7 @@
     }
 
     // LWG2756
-    template <class _Up, enable_if_t<
+    template <class _Up, _EnableIf<
         _CheckOptionalLikeAssign<_Up, _Up const&>::template __enable_assign<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
@@ -797,7 +804,7 @@
     }
 
     // LWG2756
-    template <class _Up, enable_if_t<
+    template <class _Up, _EnableIf<
         _CheckOptionalLikeCtor<_Up, _Up &&>::template __enable_assign<_Up>()
     , int> = 0>
     _LIBCPP_INLINE_VISIBILITY
@@ -809,7 +816,7 @@
     }
 
     template <class... _Args,
-              class = enable_if_t
+              class = _EnableIf
                       <
                           is_constructible_v<value_type, _Args...>
                       >
@@ -824,7 +831,7 @@
     }
 
     template <class _Up, class... _Args,
-              class = enable_if_t
+              class = _EnableIf
                       <
                           is_constructible_v<value_type, initializer_list<_Up>&, _Args...>
                       >
@@ -1020,7 +1027,7 @@
 // Comparisons between optionals
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() ==
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1036,7 +1043,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() !=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1052,7 +1059,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() <
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1068,7 +1075,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() >
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1084,7 +1091,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() <=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1100,7 +1107,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() >=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1214,7 +1221,7 @@
 // Comparisons with T
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() ==
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1226,7 +1233,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() ==
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1238,7 +1245,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() !=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1250,7 +1257,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() !=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1262,7 +1269,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() <
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1274,7 +1281,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() <
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1286,7 +1293,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() <=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1298,7 +1305,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() <=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1310,7 +1317,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() >
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1322,7 +1329,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() >
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1334,7 +1341,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() >=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1346,7 +1353,7 @@
 
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
-enable_if_t<
+_EnableIf<
     is_convertible_v<decltype(_VSTD::declval<const _Tp&>() >=
         _VSTD::declval<const _Up&>()), bool>,
     bool
@@ -1359,7 +1366,7 @@
 
 template <class _Tp>
 inline _LIBCPP_INLINE_VISIBILITY
-enable_if_t<
+_EnableIf<
     is_move_constructible_v<_Tp> && is_swappable_v<_Tp>,
     void
 >
diff --git a/linux-x64/clang/include/c++/v1/ostream b/linux-x64/clang/include/c++/v1/ostream
index b20ac34..e6cf9c9 100644
--- a/linux-x64/clang/include/c++/v1/ostream
+++ b/linux-x64/clang/include/c++/v1/ostream
@@ -56,6 +56,7 @@
     basic_ostream& operator<<(long double f);
     basic_ostream& operator<<(const void* p);
     basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
+    basic_ostream& operator<<(nullptr_t);
 
     // 27.7.2.7 Unformatted output:
     basic_ostream& put(char_type c);
@@ -218,6 +219,10 @@
     basic_ostream& operator<<(const void* __p);
     basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
 
+    _LIBCPP_INLINE_VISIBILITY
+    basic_ostream& operator<<(nullptr_t)
+    { return *this << "nullptr"; }
+
     // 27.7.2.7 Unformatted output:
     basic_ostream& put(char_type __c);
     basic_ostream& write(const char_type* __s, streamsize __n);
diff --git a/linux-x64/clang/include/c++/v1/queue b/linux-x64/clang/include/c++/v1/queue
index 55be800..97ec6f6 100644
--- a/linux-x64/clang/include/c++/v1/queue
+++ b/linux-x64/clang/include/c++/v1/queue
@@ -70,8 +70,8 @@
 
 template<class Container>
   queue(Container) -> queue<typename Container::value_type, Container>; // C++17
-  
-template<class Container, class Allocator> 
+
+template<class Container, class Allocator>
   queue(Container, Allocator) -> queue<typename Container::value_type, Container>; // C++17
 
 template <class T, class Container>
@@ -165,13 +165,13 @@
 template <class Compare, class Container>
 priority_queue(Compare, Container)
     -> priority_queue<typename Container::value_type, Container, Compare>; // C++17
-  
-template<class InputIterator, 
+
+template<class InputIterator,
          class Compare = less<typename iterator_traits<InputIterator>::value_type>,
          class Container = vector<typename iterator_traits<InputIterator>::value_type>>
 priority_queue(InputIterator, InputIterator, Compare = Compare(), Container = Container())
     -> priority_queue<typename iterator_traits<InputIterator>::value_type, Container, Compare>; // C++17
-  
+
 template<class Compare, class Container, class Allocator>
 priority_queue(Compare, Container, Allocator)
     -> priority_queue<typename Container::value_type, Container, Compare>; // C++17
@@ -346,7 +346,7 @@
 >
 queue(_Container)
     -> queue<typename _Container::value_type, _Container>;
-  
+
 template<class _Container,
          class _Alloc,
          class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,
@@ -558,8 +558,8 @@
 >
 priority_queue(_Compare, _Container)
     -> priority_queue<typename _Container::value_type, _Container, _Compare>;
-  
-template<class _InputIterator, 
+
+template<class _InputIterator,
          class _Compare   = less<typename iterator_traits<_InputIterator>::value_type>,
          class _Container = vector<typename iterator_traits<_InputIterator>::value_type>,
          class = typename enable_if< __is_input_iterator<_InputIterator>::value, nullptr_t>::type,
@@ -568,8 +568,8 @@
 >
 priority_queue(_InputIterator, _InputIterator, _Compare = _Compare(), _Container = _Container())
     -> priority_queue<typename iterator_traits<_InputIterator>::value_type, _Container, _Compare>;
-  
-template<class _Compare, 
+
+template<class _Compare,
          class _Container,
          class _Alloc,
          class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type,
diff --git a/linux-x64/clang/include/c++/v1/random b/linux-x64/clang/include/c++/v1/random
index a732395..9fefee0 100644
--- a/linux-x64/clang/include/c++/v1/random
+++ b/linux-x64/clang/include/c++/v1/random
@@ -2226,19 +2226,19 @@
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
           _UIntType __a, size_t __u, _UIntType __d, size_t __s,
           _UIntType __b, size_t __t, _UIntType __c, size_t __l, _UIntType __f>
-    _LIBCPP_CONSTEXPR const size_t 
+    _LIBCPP_CONSTEXPR const size_t
     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::state_size;
 
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
           _UIntType __a, size_t __u, _UIntType __d, size_t __s,
           _UIntType __b, size_t __t, _UIntType __c, size_t __l, _UIntType __f>
-    _LIBCPP_CONSTEXPR const size_t 
+    _LIBCPP_CONSTEXPR const size_t
     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::shift_size;
 
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
           _UIntType __a, size_t __u, _UIntType __d, size_t __s,
           _UIntType __b, size_t __t, _UIntType __c, size_t __l, _UIntType __f>
-    _LIBCPP_CONSTEXPR const size_t 
+    _LIBCPP_CONSTEXPR const size_t
     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::mask_bits;
 
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
@@ -2250,7 +2250,7 @@
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
           _UIntType __a, size_t __u, _UIntType __d, size_t __s,
           _UIntType __b, size_t __t, _UIntType __c, size_t __l, _UIntType __f>
-    _LIBCPP_CONSTEXPR const size_t 
+    _LIBCPP_CONSTEXPR const size_t
     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::tempering_u;
 
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
@@ -2262,7 +2262,7 @@
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
           _UIntType __a, size_t __u, _UIntType __d, size_t __s,
           _UIntType __b, size_t __t, _UIntType __c, size_t __l, _UIntType __f>
-    _LIBCPP_CONSTEXPR const size_t 
+    _LIBCPP_CONSTEXPR const size_t
     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::tempering_s;
 
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
@@ -2274,7 +2274,7 @@
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
           _UIntType __a, size_t __u, _UIntType __d, size_t __s,
           _UIntType __b, size_t __t, _UIntType __c, size_t __l, _UIntType __f>
-    _LIBCPP_CONSTEXPR const size_t 
+    _LIBCPP_CONSTEXPR const size_t
     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::tempering_t;
 
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
@@ -2286,7 +2286,7 @@
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
           _UIntType __a, size_t __u, _UIntType __d, size_t __s,
           _UIntType __b, size_t __t, _UIntType __c, size_t __l, _UIntType __f>
-    _LIBCPP_CONSTEXPR const size_t 
+    _LIBCPP_CONSTEXPR const size_t
     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::tempering_l;
 
 template <class _UIntType, size_t __w, size_t __n, size_t __m, size_t __r,
@@ -6426,7 +6426,7 @@
             param_type(size_t __nw, result_type __xmin, result_type __xmax,
                        _UnaryOperation __fw);
         param_type & operator=(const param_type& __rhs);
-        
+
         _LIBCPP_INLINE_VISIBILITY
         vector<result_type> intervals() const {return __b_;}
         _LIBCPP_INLINE_VISIBILITY
diff --git a/linux-x64/clang/include/c++/v1/regex b/linux-x64/clang/include/c++/v1/regex
index c381b51..26efac1 100644
--- a/linux-x64/clang/include/c++/v1/regex
+++ b/linux-x64/clang/include/c++/v1/regex
@@ -677,7 +677,7 @@
                    regex_constants::match_flag_type m = regex_constants::match_default);
     regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
                    const regex_type&& __re,
-                   regex_constants::match_flag_type __m 
+                   regex_constants::match_flag_type __m
                                      = regex_constants::match_default) = delete; // C++14
     regex_iterator(const regex_iterator&);
     regex_iterator& operator=(const regex_iterator&);
@@ -793,7 +793,11 @@
     nosubs     = 1 << 1,
     optimize   = 1 << 2,
     collate    = 1 << 3,
+#ifdef _LIBCPP_ABI_REGEX_CONSTANTS_NONZERO
+    ECMAScript = 1 << 9,
+#else
     ECMAScript = 0,
+#endif
     basic      = 1 << 4,
     extended   = 1 << 5,
     awk        = 1 << 6,
@@ -801,6 +805,16 @@
     egrep      = 1 << 8
 };
 
+inline _LIBCPP_CONSTEXPR
+syntax_option_type __get_grammar(syntax_option_type __g)
+{
+#ifdef _LIBCPP_ABI_REGEX_CONSTANTS_NONZERO
+    return static_cast<syntax_option_type>(__g & 0x3F0);
+#else
+    return static_cast<syntax_option_type>(__g & 0x1F0);
+#endif
+}
+
 inline _LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR
 syntax_option_type
@@ -987,16 +1001,7 @@
     typedef locale                  locale_type;
     typedef ctype_base::mask        char_class_type;
 
-#if defined(__mips__) && defined(__GLIBC__)
-    static const char_class_type __regex_word = static_cast<char_class_type>(_ISbit(15));
-#elif defined(__NetBSD__)
-    // NetBSD defines classes up to 0x2000
-    // see sys/ctype_bits.h, _CTYPE_Q
-    static const char_class_type __regex_word = 0x8000;
-#else
-    static const char_class_type __regex_word = 0x80;
-#endif
-
+    static const char_class_type __regex_word = ctype_base::__regex_word;
 private:
     locale __loc_;
     const ctype<char_type>* __ct_;
@@ -2292,7 +2297,7 @@
             else
             {
                 if (__b.size() != 1 || __e.size() != 1)
-                    __throw_regex_error<regex_constants::error_collate>();
+                    __throw_regex_error<regex_constants::error_range>();
                 if (__icase_)
                 {
                     __b[0] = __traits_.translate_nocase(__b[0]);
@@ -2526,19 +2531,27 @@
     // construct/copy/destroy:
     _LIBCPP_INLINE_VISIBILITY
     basic_regex()
-        : __flags_(), __marked_count_(0), __loop_count_(0), __open_count_(0),
+        : __flags_(regex_constants::ECMAScript), __marked_count_(0), __loop_count_(0), __open_count_(0),
           __end_(0)
         {}
     _LIBCPP_INLINE_VISIBILITY
     explicit basic_regex(const value_type* __p, flag_type __f = regex_constants::ECMAScript)
         : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
           __end_(0)
-        {__parse(__p, __p + __traits_.length(__p));}
+        {
+        if (__get_grammar(__flags_) == 0) __flags_ |= regex_constants::ECMAScript;
+        __parse(__p, __p + __traits_.length(__p));
+        }
+
     _LIBCPP_INLINE_VISIBILITY
     basic_regex(const value_type* __p, size_t __len, flag_type __f = regex_constants::ECMAScript)
         : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
           __end_(0)
-        {__parse(__p, __p + __len);}
+        {
+        if (__get_grammar(__flags_) == 0) __flags_ |= regex_constants::ECMAScript;
+        __parse(__p, __p + __len);
+        }
+
 //     basic_regex(const basic_regex&) = default;
 //     basic_regex(basic_regex&&) = default;
     template <class _ST, class _SA>
@@ -2547,21 +2560,31 @@
                              flag_type __f = regex_constants::ECMAScript)
         : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
           __end_(0)
-        {__parse(__p.begin(), __p.end());}
+        {
+        if (__get_grammar(__flags_) == 0) __flags_ |= regex_constants::ECMAScript;
+        __parse(__p.begin(), __p.end());
+        }
+
     template <class _ForwardIterator>
         _LIBCPP_INLINE_VISIBILITY
         basic_regex(_ForwardIterator __first, _ForwardIterator __last,
                     flag_type __f = regex_constants::ECMAScript)
         : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
           __end_(0)
-        {__parse(__first, __last);}
+        {
+        if (__get_grammar(__flags_) == 0) __flags_ |= regex_constants::ECMAScript;
+        __parse(__first, __last);
+        }
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
     basic_regex(initializer_list<value_type> __il,
                 flag_type __f = regex_constants::ECMAScript)
         : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
           __end_(0)
-        {__parse(__il.begin(), __il.end());}
+        {
+        if (__get_grammar(__flags_) == 0) __flags_ |= regex_constants::ECMAScript;
+        __parse(__il.begin(), __il.end());
+        }
 #endif  // _LIBCPP_CXX03_LANG
 
 //    ~basic_regex() = default;
@@ -3043,7 +3066,7 @@
         __h.release();
         __end_ = __start_.get();
     }
-    switch (__flags_ & 0x1F0)
+    switch (__get_grammar(__flags_))
     {
     case ECMAScript:
         __first = __parse_ecma_exp(__first, __last);
@@ -3378,7 +3401,7 @@
         if (__temp != __last)
         {
             if (*__first == '\\')
-            { 
+            {
                 int __val = __traits_.value(*__temp, 10);
                 if (__val >= 1 && __val <= 9)
                 {
@@ -3512,7 +3535,7 @@
                     __first = ++__temp;
                     break;
                 default:
-                    if ((__flags_ & 0x1F0) == awk)
+                    if (__get_grammar(__flags_) == awk)
                         __first = __parse_awk_escape(++__first, __last);
                     break;
                 }
@@ -3596,7 +3619,7 @@
 {
     if (__first != __last)
     {
-        unsigned __grammar = __flags_ & 0x1F0;
+        unsigned __grammar = __get_grammar(__flags_);
         switch (*__first)
         {
         case '*':
@@ -3717,7 +3740,7 @@
         // __ml owned by *this
         if (__first == __last)
             __throw_regex_error<regex_constants::error_brack>();
-        if ((__flags_ & 0x1F0) != ECMAScript && *__first == ']')
+        if (__get_grammar(__flags_) != ECMAScript && *__first == ']')
         {
             __ml->__add_char(']');
             ++__first;
@@ -3778,7 +3801,7 @@
             else if (*__temp == '.')
                 __first = __parse_collating_symbol(++__temp, __last, __start_range);
         }
-        unsigned __grammar = __flags_ & 0x1F0;
+        unsigned __grammar = __get_grammar(__flags_);
         if (__start_range.empty())
         {
             if ((__grammar == ECMAScript || __grammar == awk) && *__first == '\\')
@@ -4075,7 +4098,7 @@
         if ( __val != -1 )
         {
             __c = __val;
-            for (++__first; 
+            for (++__first;
                  __first != __last && ( __val = __traits_.value(*__first, 10)) != -1;
                  ++__first)
             {
@@ -4455,7 +4478,7 @@
         case 'c':
             if ((__t = _VSTD::next(__first)) != __last)
             {
-                if (('A' <= *__t && *__t <= 'Z') || 
+                if (('A' <= *__t && *__t <= 'Z') ||
                     ('a' <= *__t && *__t <= 'z'))
                 {
                     if (__str)
@@ -4464,7 +4487,7 @@
                         __push_char(_CharT(*__t % 32));
                     __first = ++__t;
                 }
-                else 
+                else
                     __throw_regex_error<regex_constants::error_escape>();
             }
             else
@@ -5264,21 +5287,41 @@
     // element access:
     _LIBCPP_INLINE_VISIBILITY
     difference_type length(size_type __sub = 0) const
-        {return (*this)[__sub].length();}
+        {
+        _LIBCPP_ASSERT(ready(), "match_results::length() called when not ready");
+        return (*this)[__sub].length();
+        }
     _LIBCPP_INLINE_VISIBILITY
     difference_type position(size_type __sub = 0) const
-        {return _VSTD::distance(__position_start_, (*this)[__sub].first);}
+        {
+        _LIBCPP_ASSERT(ready(), "match_results::position() called when not ready");
+        return _VSTD::distance(__position_start_, (*this)[__sub].first);
+        }
     _LIBCPP_INLINE_VISIBILITY
     string_type str(size_type __sub = 0) const
-        {return (*this)[__sub].str();}
+        {
+        _LIBCPP_ASSERT(ready(), "match_results::str() called when not ready");
+        return (*this)[__sub].str();
+        }
     _LIBCPP_INLINE_VISIBILITY
     const_reference operator[](size_type __n) const
-        {return __n < __matches_.size() ? __matches_[__n] : __unmatched_;}
+        {
+        _LIBCPP_ASSERT(ready(), "match_results::operator[]() called when not ready");
+        return __n < __matches_.size() ? __matches_[__n] : __unmatched_;
+        }
 
     _LIBCPP_INLINE_VISIBILITY
-    const_reference prefix() const {return __prefix_;}
+    const_reference prefix() const
+        {
+        _LIBCPP_ASSERT(ready(), "match_results::prefix() called when not ready");
+        return __prefix_;
+        }
     _LIBCPP_INLINE_VISIBILITY
-    const_reference suffix() const {return __suffix_;}
+    const_reference suffix() const
+        {
+        _LIBCPP_ASSERT(ready(), "match_results::suffix() called when not ready");
+        return __suffix_;
+        }
 
     _LIBCPP_INLINE_VISIBILITY
     const_iterator begin() const {return empty() ? __matches_.end() : __matches_.begin();}
@@ -5416,6 +5459,7 @@
         const char_type* __fmt_first, const char_type* __fmt_last,
         regex_constants::match_flag_type __flags) const
 {
+    _LIBCPP_ASSERT(ready(), "match_results::format() called when not ready");
     if (__flags & regex_constants::format_sed)
     {
         for (; __fmt_first != __fmt_last; ++__fmt_first)
@@ -5848,7 +5892,7 @@
         match_results<const _CharT*, _Allocator>& __m,
         regex_constants::match_flag_type __flags, bool __at_first) const
 {
-    if ((__flags_ & 0x1F0) == ECMAScript)
+    if (__get_grammar(__flags_) == ECMAScript)
         return __match_at_start_ecma(__first, __last, __m, __flags, __at_first);
     if (mark_count() == 0)
         return __match_at_start_posix_nosubs(__first, __last, __m, __flags, __at_first);
@@ -5865,7 +5909,7 @@
 {
     __m.__init(1 + mark_count(), __first, __last,
                                     __flags & regex_constants::__no_update_pos);
-    if (__match_at_start(__first, __last, __m, __flags, 
+    if (__match_at_start(__first, __last, __m, __flags,
                                     !(__flags & regex_constants::__no_update_pos)))
     {
         __m.__prefix_.second = __m[0].first;
@@ -6011,7 +6055,7 @@
 regex_search(const basic_string<_Cp, _ST, _SA>&& __s,
              match_results<typename basic_string<_Cp, _ST, _SA>::const_iterator, _Ap>&,
              const basic_regex<_Cp, _Tp>& __e,
-             regex_constants::match_flag_type __flags = regex_constants::match_default) = delete; 
+             regex_constants::match_flag_type __flags = regex_constants::match_default) = delete;
 #endif
 
 // regex_match
@@ -6075,7 +6119,7 @@
 regex_match(const basic_string<_CharT, _ST, _SA>&& __s,
             match_results<typename basic_string<_CharT, _ST, _SA>::const_iterator, _Allocator>& __m,
             const basic_regex<_CharT, _Traits>& __e,
-            regex_constants::match_flag_type __flags = regex_constants::match_default) = delete; 
+            regex_constants::match_flag_type __flags = regex_constants::match_default) = delete;
 #endif
 
 template <class _CharT, class _Traits>
@@ -6128,7 +6172,7 @@
 #if _LIBCPP_STD_VER > 11
     regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
                    const regex_type&& __re,
-                   regex_constants::match_flag_type __m 
+                   regex_constants::match_flag_type __m
                                      = regex_constants::match_default) = delete;
 #endif
 
@@ -6324,7 +6368,7 @@
             __result_ = &__position_->prefix();
         else
             __result_ = &(*__position_)[__subs_[__n_]];
-        }       
+        }
 };
 
 template <class _BidirectionalIterator, class _CharT, class _Traits>
diff --git a/linux-x64/clang/include/c++/v1/set b/linux-x64/clang/include/c++/v1/set
index 1783722..79e8f29 100644
--- a/linux-x64/clang/include/c++/v1/set
+++ b/linux-x64/clang/include/c++/v1/set
@@ -446,11 +446,10 @@
     typedef key_type                                 value_type;
     typedef _Compare                                 key_compare;
     typedef key_compare                              value_compare;
-    typedef _Allocator                               allocator_type;
+    typedef typename __identity<_Allocator>::type    allocator_type;
     typedef value_type&                              reference;
     typedef const value_type&                        const_reference;
 
-    static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
     static_assert((is_same<typename allocator_type::value_type, value_type>::value),
                   "Allocator::value_type must be same type as value_type");
 
@@ -597,6 +596,11 @@
 #endif  // _LIBCPP_CXX03_LANG
 
     _LIBCPP_INLINE_VISIBILITY
+    ~set() {
+        static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
           iterator begin() _NOEXCEPT       {return __tree_.begin();}
     _LIBCPP_INLINE_VISIBILITY
     const_iterator begin() const _NOEXCEPT {return __tree_.begin();}
@@ -836,6 +840,34 @@
 #endif
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator,
+         class _Compare = less<typename iterator_traits<_InputIterator>::value_type>,
+         class _Allocator = allocator<typename iterator_traits<_InputIterator>::value_type>,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type,
+         class = typename enable_if<!__is_allocator<_Compare>::value, void>::type>
+set(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
+  -> set<typename iterator_traits<_InputIterator>::value_type, _Compare, _Allocator>;
+
+template<class _Key, class _Compare = less<_Key>,
+         class _Allocator = allocator<_Key>,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type,
+         class = typename enable_if<!__is_allocator<_Compare>::value, void>::type>
+set(initializer_list<_Key>, _Compare = _Compare(), _Allocator = _Allocator())
+  -> set<_Key, _Compare, _Allocator>;
+
+template<class _InputIterator, class _Allocator,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type>
+set(_InputIterator, _InputIterator, _Allocator)
+  -> set<typename iterator_traits<_InputIterator>::value_type,
+         less<typename iterator_traits<_InputIterator>::value_type>, _Allocator>;
+
+template<class _Key, class _Allocator,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type>
+set(initializer_list<_Key>, _Allocator)
+  -> set<_Key, less<_Key>, _Allocator>;
+#endif
+
 #ifndef _LIBCPP_CXX03_LANG
 
 template <class _Key, class _Compare, class _Allocator>
@@ -934,11 +966,10 @@
     typedef key_type                                 value_type;
     typedef _Compare                                  key_compare;
     typedef key_compare                              value_compare;
-    typedef _Allocator                                allocator_type;
+    typedef typename __identity<_Allocator>::type    allocator_type;
     typedef value_type&                              reference;
     typedef const value_type&                        const_reference;
 
-    static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
     static_assert((is_same<typename allocator_type::value_type, value_type>::value),
                   "Allocator::value_type must be same type as value_type");
 
@@ -1084,6 +1115,11 @@
 #endif  // _LIBCPP_CXX03_LANG
 
     _LIBCPP_INLINE_VISIBILITY
+    ~multiset() {
+        static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
           iterator begin() _NOEXCEPT       {return __tree_.begin();}
     _LIBCPP_INLINE_VISIBILITY
     const_iterator begin() const _NOEXCEPT {return __tree_.begin();}
@@ -1324,6 +1360,34 @@
 #endif
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator,
+         class _Compare = less<typename iterator_traits<_InputIterator>::value_type>,
+         class _Allocator = allocator<typename iterator_traits<_InputIterator>::value_type>,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type,
+         class = typename enable_if<!__is_allocator<_Compare>::value, void>::type>
+multiset(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
+  -> multiset<typename iterator_traits<_InputIterator>::value_type, _Compare, _Allocator>;
+
+template<class _Key, class _Compare = less<_Key>,
+         class _Allocator = allocator<_Key>,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type,
+         class = typename enable_if<!__is_allocator<_Compare>::value, void>::type>
+multiset(initializer_list<_Key>, _Compare = _Compare(), _Allocator = _Allocator())
+  -> multiset<_Key, _Compare, _Allocator>;
+
+template<class _InputIterator, class _Allocator,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type>
+multiset(_InputIterator, _InputIterator, _Allocator)
+  -> multiset<typename iterator_traits<_InputIterator>::value_type,
+         less<typename iterator_traits<_InputIterator>::value_type>, _Allocator>;
+
+template<class _Key, class _Allocator,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type>
+multiset(initializer_list<_Key>, _Allocator)
+  -> multiset<_Key, less<_Key>, _Allocator>;
+#endif
+
 #ifndef _LIBCPP_CXX03_LANG
 
 template <class _Key, class _Compare, class _Allocator>
diff --git a/linux-x64/clang/include/c++/v1/span b/linux-x64/clang/include/c++/v1/span
index 774f698..0694f51 100644
--- a/linux-x64/clang/include/c++/v1/span
+++ b/linux-x64/clang/include/c++/v1/span
@@ -16,33 +16,35 @@
 namespace std {
 
 // constants
-inline constexpr ptrdiff_t dynamic_extent = -1;
+inline constexpr size_t dynamic_extent = numeric_limits<size_t>::max();
 
 // [views.span], class template span
-template <class ElementType, ptrdiff_t Extent = dynamic_extent>
+template <class ElementType, size_t Extent = dynamic_extent>
     class span;
 
 // [span.objectrep], views of object representation
-template <class ElementType, ptrdiff_t Extent>
+template <class ElementType, size_t Extent>
     span<const byte, ((Extent == dynamic_extent) ? dynamic_extent :
-        (static_cast<ptrdiff_t>(sizeof(ElementType)) * Extent))> as_bytes(span<ElementType, Extent> s) noexcept;
+        (sizeof(ElementType) * Extent))> as_bytes(span<ElementType, Extent> s) noexcept;
 
-template <class ElementType, ptrdiff_t Extent>
+template <class ElementType, size_t Extent>
     span<      byte, ((Extent == dynamic_extent) ? dynamic_extent :
-        (static_cast<ptrdiff_t>(sizeof(ElementType)) * Extent))> as_writable_bytes(span<ElementType, Extent> s) noexcept;
+        (sizeof(ElementType) * Extent))> as_writable_bytes(span<ElementType, Extent> s) noexcept;
 
 
 namespace std {
-template <class ElementType, ptrdiff_t Extent = dynamic_extent>
+template <class ElementType, size_t Extent = dynamic_extent>
 class span {
 public:
     // constants and types
     using element_type = ElementType;
     using value_type = remove_cv_t<ElementType>;
-    using index_type = ptrdiff_t;
+    using index_type = size_t;
     using difference_type = ptrdiff_t;
     using pointer = element_type*;
+    using const_pointer = const element_type*;
     using reference = element_type&;
+    using const_reference = const element_type&;
     using iterator = implementation-defined;
     using const_iterator = implementation-defined;
     using reverse_iterator = std::reverse_iterator<iterator>;
@@ -64,17 +66,17 @@
     template <class Container>
         constexpr span(const Container& cont);
     constexpr span(const span& other) noexcept = default;
-    template <class OtherElementType, ptrdiff_t OtherExtent>
+    template <class OtherElementType, size_t OtherExtent>
         constexpr span(const span<OtherElementType, OtherExtent>& s) noexcept;
     ~span() noexcept = default;
     constexpr span& operator=(const span& other) noexcept = default;
 
     // [span.sub], span subviews
-    template <ptrdiff_t Count>
+    template <size_t Count>
         constexpr span<element_type, Count> first() const;
-    template <ptrdiff_t Count>
+    template <size_t Count>
         constexpr span<element_type, Count> last() const;
-    template <ptrdiff_t Offset, ptrdiff_t Count = dynamic_extent>
+    template <size_t Offset, size_t Count = dynamic_extent>
         constexpr span<element_type, see below> subspan() const;
 
     constexpr span<element_type, dynamic_extent> first(index_type count) const;
@@ -88,7 +90,8 @@
 
     // [span.elem], span element access
     constexpr reference operator[](index_type idx) const;
-    constexpr reference operator()(index_type idx) const;
+    constexpr reference front() const;
+    constexpr reference back() const;
     constexpr pointer data() const noexcept;
 
     // [span.iterators], span iterator support
@@ -140,14 +143,14 @@
 
 #if _LIBCPP_STD_VER > 17
 
-inline constexpr ptrdiff_t dynamic_extent = -1;
-template <typename _Tp, ptrdiff_t _Extent = dynamic_extent> class span;
+inline constexpr size_t dynamic_extent = numeric_limits<size_t>::max();
+template <typename _Tp, size_t _Extent = dynamic_extent> class span;
 
 
 template <class _Tp>
 struct __is_span_impl : public false_type {};
 
-template <class _Tp, ptrdiff_t _Extent>
+template <class _Tp, size_t _Extent>
 struct __is_span_impl<span<_Tp, _Extent>> : public true_type {};
 
 template <class _Tp>
@@ -186,25 +189,24 @@
     : public true_type {};
 
 
-template <typename _Tp, ptrdiff_t _Extent>
+template <typename _Tp, size_t _Extent>
 class _LIBCPP_TEMPLATE_VIS span {
 public:
 //  constants and types
     using element_type           = _Tp;
     using value_type             = remove_cv_t<_Tp>;
-    using index_type             = ptrdiff_t;
+    using index_type             = size_t;
     using difference_type        = ptrdiff_t;
     using pointer                = _Tp *;
-    using const_pointer          = const _Tp *; // not in standard
+    using const_pointer          = const _Tp *;
     using reference              = _Tp &;
-    using const_reference        = const _Tp &; // not in standard
+    using const_reference        = const _Tp &;
     using iterator               =  __wrap_iter<pointer>;
     using const_iterator         =  __wrap_iter<const_pointer>;
     using reverse_iterator       = _VSTD::reverse_iterator<iterator>;
     using const_reverse_iterator = _VSTD::reverse_iterator<const_iterator>;
 
     static constexpr index_type extent = _Extent;
-    static_assert (_Extent >= 0, "Can't have a span with an extent < 0");
 
 // [span.cons], span constructors, copy, assignment, and destructor
     _LIBCPP_INLINE_VISIBILITY constexpr span() noexcept : __data{nullptr}
@@ -222,22 +224,8 @@
     _LIBCPP_INLINE_VISIBILITY constexpr span(      array<value_type, _Extent>& __arr) noexcept : __data{__arr.data()} {}
     _LIBCPP_INLINE_VISIBILITY constexpr span(const array<value_type, _Extent>& __arr) noexcept : __data{__arr.data()} {}
 
-    template <class _Container>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span(      _Container& __c,
-            enable_if_t<__is_span_compatible_container<_Container, _Tp>::value, nullptr_t> = nullptr)
-        : __data{_VSTD::data(__c)}
-        { _LIBCPP_ASSERT(_Extent == _VSTD::size(__c), "size mismatch in span's constructor (container)"); }
-
-    template <class _Container>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span(const _Container& __c,
-            enable_if_t<__is_span_compatible_container<const _Container, _Tp>::value, nullptr_t> = nullptr)
-        : __data{_VSTD::data(__c)}
-        { _LIBCPP_ASSERT(_Extent == _VSTD::size(__c), "size mismatch in span's constructor (const container)"); }
-
     template <class _OtherElementType>
-    inline _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY
         constexpr span(const span<_OtherElementType, _Extent>& __other,
                        enable_if_t<
                           is_convertible_v<_OtherElementType(*)[], element_type (*)[]>,
@@ -245,7 +233,7 @@
         : __data{__other.data()} {}
 
     template <class _OtherElementType>
-    inline _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY
         constexpr span(const span<_OtherElementType, dynamic_extent>& __other,
                        enable_if_t<
                           is_convertible_v<_OtherElementType(*)[], element_type (*)[]>,
@@ -255,20 +243,18 @@
 
 //  ~span() noexcept = default;
 
-    template <ptrdiff_t _Count>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span<element_type, _Count> first() const noexcept
+    template <size_t _Count>
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, _Count> first() const noexcept
     {
-        static_assert(_Count >= 0, "Count must be >= 0 in span::first()");
         static_assert(_Count <= _Extent, "Count out of range in span::first()");
         return {data(), _Count};
     }
 
-    template <ptrdiff_t _Count>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span<element_type, _Count> last() const noexcept
+    template <size_t _Count>
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, _Count> last() const noexcept
     {
-        static_assert(_Count >= 0, "Count must be >= 0 in span::last()");
         static_assert(_Count <= _Extent, "Count out of range in span::last()");
         return {data() + size() - _Count, _Count};
     }
@@ -276,36 +262,36 @@
     _LIBCPP_INLINE_VISIBILITY
     constexpr span<element_type, dynamic_extent> first(index_type __count) const noexcept
     {
-        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::first(count)");
+        _LIBCPP_ASSERT(__count <= size(), "Count out of range in span::first(count)");
         return {data(), __count};
     }
 
     _LIBCPP_INLINE_VISIBILITY
     constexpr span<element_type, dynamic_extent> last(index_type __count) const noexcept
     {
-        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::last(count)");
+        _LIBCPP_ASSERT(__count <= size(), "Count out of range in span::last(count)");
         return {data() + size() - __count, __count};
     }
 
-    template <ptrdiff_t _Offset, ptrdiff_t _Count = dynamic_extent>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr auto subspan() const noexcept
+    template <size_t _Offset, size_t _Count = dynamic_extent>
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr auto subspan() const noexcept
         -> span<element_type, _Count != dynamic_extent ? _Count : _Extent - _Offset>
     {
-        _LIBCPP_ASSERT(_Offset >= 0 && _Offset <= size(), "Offset out of range in span::subspan()");
+        static_assert(_Offset <= _Extent, "Offset out of range in span::subspan()");
         return {data() + _Offset, _Count == dynamic_extent ? size() - _Offset : _Count};
     }
 
 
-    inline _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY
     constexpr span<element_type, dynamic_extent>
        subspan(index_type __offset, index_type __count = dynamic_extent) const noexcept
     {
-        _LIBCPP_ASSERT( __offset >= 0 && __offset <= size(), "Offset out of range in span::subspan(offset, count)");
-        _LIBCPP_ASSERT((__count  >= 0 && __count  <= size()) || __count == dynamic_extent, "Count out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT(__offset <= size(), "Offset out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT(__count  <= size() || __count == dynamic_extent, "Count out of range in span::subspan(offset, count)");
         if (__count == dynamic_extent)
             return {data() + __offset, size() - __offset};
-        _LIBCPP_ASSERT(__offset + __count <= size(), "count + offset out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT(__offset <= size() - __count, "count + offset out of range in span::subspan(offset, count)");
         return {data() + __offset, __count};
     }
 
@@ -319,10 +305,16 @@
         return __data[__idx];
     }
 
-    _LIBCPP_INLINE_VISIBILITY constexpr reference operator()(index_type __idx) const noexcept
+    _LIBCPP_INLINE_VISIBILITY constexpr reference front() const noexcept
     {
-        _LIBCPP_ASSERT(__idx >= 0 && __idx < size(), "span<T,N>() index out of bounds");
-        return __data[__idx];
+        static_assert(_Extent > 0, "span<T,N>[].front() on empty span");
+        return __data[0];
+    }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr reference back() const noexcept
+    {
+        static_assert(_Extent > 0, "span<T,N>[].back() on empty span");
+        return __data[size()-1];
     }
 
     _LIBCPP_INLINE_VISIBILITY constexpr pointer data()                         const noexcept { return __data; }
@@ -347,7 +339,7 @@
     _LIBCPP_INLINE_VISIBILITY span<const byte, _Extent * sizeof(element_type)> __as_bytes() const noexcept
     { return {reinterpret_cast<const byte *>(data()), size_bytes()}; }
 
-    _LIBCPP_INLINE_VISIBILITY span<byte, _Extent * sizeof(element_type)> __as_writeable_bytes() const noexcept
+    _LIBCPP_INLINE_VISIBILITY span<byte, _Extent * sizeof(element_type)> __as_writable_bytes() const noexcept
     { return {reinterpret_cast<byte *>(data()), size_bytes()}; }
 
 private:
@@ -364,12 +356,12 @@
 //  constants and types
     using element_type           = _Tp;
     using value_type             = remove_cv_t<_Tp>;
-    using index_type             = ptrdiff_t;
+    using index_type             = size_t;
     using difference_type        = ptrdiff_t;
     using pointer                = _Tp *;
-    using const_pointer          = const _Tp *; // not in standard
+    using const_pointer          = const _Tp *;
     using reference              = _Tp &;
-    using const_reference        = const _Tp &; // not in standard
+    using const_reference        = const _Tp &;
     using iterator               =  __wrap_iter<pointer>;
     using const_iterator         =  __wrap_iter<const_pointer>;
     using reverse_iterator       = _VSTD::reverse_iterator<iterator>;
@@ -384,35 +376,35 @@
     constexpr span& operator=(const span&) noexcept = default;
 
     _LIBCPP_INLINE_VISIBILITY constexpr span(pointer __ptr, index_type __count) : __data{__ptr}, __size{__count} {}
-    _LIBCPP_INLINE_VISIBILITY constexpr span(pointer __f, pointer __l) : __data{__f}, __size{distance(__f, __l)} {}
+    _LIBCPP_INLINE_VISIBILITY constexpr span(pointer __f, pointer __l) : __data{__f}, __size{static_cast<size_t>(distance(__f, __l))} {}
 
     template <size_t _Sz>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span(element_type (&__arr)[_Sz]) noexcept : __data{__arr}, __size{_Sz} {}
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span(element_type (&__arr)[_Sz])          noexcept : __data{__arr}, __size{_Sz} {}
 
     template <size_t _Sz>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span(array<value_type, _Sz>& __arr)       noexcept : __data{__arr.data()}, __size{_Sz} {}
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span(array<value_type, _Sz>& __arr)       noexcept : __data{__arr.data()}, __size{_Sz} {}
 
     template <size_t _Sz>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span(const array<value_type, _Sz>& __arr) noexcept : __data{__arr.data()}, __size{_Sz} {}
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span(const array<value_type, _Sz>& __arr) noexcept : __data{__arr.data()}, __size{_Sz} {}
 
     template <class _Container>
-    inline _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY
         constexpr span(      _Container& __c,
             enable_if_t<__is_span_compatible_container<_Container, _Tp>::value, nullptr_t> = nullptr)
         : __data{_VSTD::data(__c)}, __size{(index_type) _VSTD::size(__c)} {}
 
     template <class _Container>
-    inline _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY
         constexpr span(const _Container& __c,
             enable_if_t<__is_span_compatible_container<const _Container, _Tp>::value, nullptr_t> = nullptr)
         : __data{_VSTD::data(__c)}, __size{(index_type) _VSTD::size(__c)} {}
 
 
-    template <class _OtherElementType, ptrdiff_t _OtherExtent>
-    inline _LIBCPP_INLINE_VISIBILITY
+    template <class _OtherElementType, size_t _OtherExtent>
+    _LIBCPP_INLINE_VISIBILITY
         constexpr span(const span<_OtherElementType, _OtherExtent>& __other,
                        enable_if_t<
                           is_convertible_v<_OtherElementType(*)[], element_type (*)[]>,
@@ -421,20 +413,18 @@
 
 //    ~span() noexcept = default;
 
-    template <ptrdiff_t _Count>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span<element_type, _Count> first() const noexcept
+    template <size_t _Count>
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, _Count> first() const noexcept
     {
-        static_assert(_Count >= 0, "Count must be >= 0 in span::first()");
         _LIBCPP_ASSERT(_Count <= size(), "Count out of range in span::first()");
         return {data(), _Count};
     }
 
-    template <ptrdiff_t _Count>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span<element_type, _Count> last() const noexcept
+    template <size_t _Count>
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, _Count> last() const noexcept
     {
-        static_assert(_Count >= 0, "Count must be >= 0 in span::last()");
         _LIBCPP_ASSERT(_Count <= size(), "Count out of range in span::last()");
         return {data() + size() - _Count, _Count};
     }
@@ -442,35 +432,35 @@
     _LIBCPP_INLINE_VISIBILITY
     constexpr span<element_type, dynamic_extent> first(index_type __count) const noexcept
     {
-        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::first(count)");
+        _LIBCPP_ASSERT(__count <= size(), "Count out of range in span::first(count)");
         return {data(), __count};
     }
 
     _LIBCPP_INLINE_VISIBILITY
     constexpr span<element_type, dynamic_extent> last (index_type __count) const noexcept
     {
-        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::last(count)");
+        _LIBCPP_ASSERT(__count <= size(), "Count out of range in span::last(count)");
         return {data() + size() - __count, __count};
     }
 
-    template <ptrdiff_t _Offset, ptrdiff_t _Count = dynamic_extent>
-    inline _LIBCPP_INLINE_VISIBILITY
-        constexpr span<_Tp, dynamic_extent> subspan() const noexcept
+    template <size_t _Offset, size_t _Count = dynamic_extent>
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<_Tp, dynamic_extent> subspan() const noexcept
     {
-        _LIBCPP_ASSERT(_Offset >= 0 && _Offset <= size(), "Offset out of range in span::subspan()");
+        _LIBCPP_ASSERT(_Offset <= size(), "Offset out of range in span::subspan()");
         _LIBCPP_ASSERT(_Count == dynamic_extent || _Offset + _Count <= size(), "Count out of range in span::subspan()");
         return {data() + _Offset, _Count == dynamic_extent ? size() - _Offset : _Count};
     }
 
     constexpr span<element_type, dynamic_extent>
-    inline _LIBCPP_INLINE_VISIBILITY
-       subspan(index_type __offset, index_type __count = dynamic_extent) const noexcept
+    _LIBCPP_INLINE_VISIBILITY
+    subspan(index_type __offset, index_type __count = dynamic_extent) const noexcept
     {
-        _LIBCPP_ASSERT( __offset >= 0 && __offset <= size(), "Offset out of range in span::subspan(offset, count)");
-        _LIBCPP_ASSERT((__count  >= 0 && __count  <= size()) || __count == dynamic_extent, "count out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT(__offset <= size(), "Offset out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT(__count  <= size() || __count == dynamic_extent, "count out of range in span::subspan(offset, count)");
         if (__count == dynamic_extent)
             return {data() + __offset, size() - __offset};
-        _LIBCPP_ASSERT(__offset + __count <= size(), "Offset + count out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT(__offset <= size() - __count, "Offset + count out of range in span::subspan(offset, count)");
         return {data() + __offset, __count};
     }
 
@@ -484,12 +474,19 @@
         return __data[__idx];
     }
 
-    _LIBCPP_INLINE_VISIBILITY constexpr reference operator()(index_type __idx) const noexcept
+    _LIBCPP_INLINE_VISIBILITY constexpr reference front() const noexcept
     {
-        _LIBCPP_ASSERT(__idx >= 0 && __idx < size(), "span<T>() index out of bounds");
-        return __data[__idx];
+        _LIBCPP_ASSERT(!empty(), "span<T>[].front() on empty span");
+        return __data[0];
     }
 
+    _LIBCPP_INLINE_VISIBILITY constexpr reference back() const noexcept
+    {
+        _LIBCPP_ASSERT(!empty(), "span<T>[].back() on empty span");
+        return __data[size()-1];
+    }
+
+
     _LIBCPP_INLINE_VISIBILITY constexpr pointer data()                         const noexcept { return __data; }
 
 // [span.iter], span iterator support
@@ -516,7 +513,7 @@
     _LIBCPP_INLINE_VISIBILITY span<const byte, dynamic_extent> __as_bytes() const noexcept
     { return {reinterpret_cast<const byte *>(data()), size_bytes()}; }
 
-    _LIBCPP_INLINE_VISIBILITY span<byte, dynamic_extent> __as_writeable_bytes() const noexcept
+    _LIBCPP_INLINE_VISIBILITY span<byte, dynamic_extent> __as_writable_bytes() const noexcept
     { return {reinterpret_cast<byte *>(data()), size_bytes()}; }
 
 private:
@@ -524,20 +521,51 @@
     index_type __size;
 };
 
-//  as_bytes & as_writeable_bytes
-template <class _Tp, ptrdiff_t _Extent>
-    auto as_bytes(span<_Tp, _Extent> __s) noexcept
-    -> decltype(__s.__as_bytes())
-    { return __s.__as_bytes(); }
+//  tuple interface
+template <class _Tp, size_t _Size>
+struct _LIBCPP_TEMPLATE_VIS tuple_size<span<_Tp, _Size>>
+    : public integral_constant<size_t, _Size> {};
 
-template <class _Tp, ptrdiff_t _Extent>
-    auto as_writeable_bytes(span<_Tp, _Extent> __s) noexcept
-    -> typename enable_if<!is_const_v<_Tp>, decltype(__s.__as_writeable_bytes())>::type
-    { return __s.__as_writeable_bytes(); }
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS tuple_size<span<_Tp, dynamic_extent>>; // declared but not defined
 
-template <class _Tp, ptrdiff_t _Extent>
-    constexpr void swap(span<_Tp, _Extent> &__lhs, span<_Tp, _Extent> &__rhs) noexcept
-    { __lhs.swap(__rhs); }
+
+template <size_t _Ip, class _Tp, size_t _Size>
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, span<_Tp, _Size>>
+{
+    static_assert( dynamic_extent != _Size, "std::tuple_element<> not supported for std::span<T, dynamic_extent>");
+    static_assert(_Ip < _Size, "Index out of bounds in std::tuple_element<> (std::span)");
+    typedef _Tp type;
+};
+
+template <size_t _Ip, class _Tp, size_t _Size>
+_LIBCPP_INLINE_VISIBILITY constexpr
+_Tp&
+get(span<_Tp, _Size> __s) noexcept
+{
+    static_assert( dynamic_extent != _Size, "std::get<> not supported for std::span<T, dynamic_extent>");
+    static_assert(_Ip < _Size, "Index out of bounds in std::get<> (std::span)");
+    return __s[_Ip];
+}
+
+
+//  as_bytes & as_writable_bytes
+template <class _Tp, size_t _Extent>
+_LIBCPP_INLINE_VISIBILITY
+auto as_bytes(span<_Tp, _Extent> __s) noexcept
+-> decltype(__s.__as_bytes())
+{ return    __s.__as_bytes(); }
+
+template <class _Tp, size_t _Extent>
+_LIBCPP_INLINE_VISIBILITY
+auto as_writable_bytes(span<_Tp, _Extent> __s) noexcept
+-> enable_if_t<!is_const_v<_Tp>, decltype(__s.__as_writable_bytes())>
+{ return __s.__as_writable_bytes(); }
+
+template <class _Tp, size_t _Extent>
+_LIBCPP_INLINE_VISIBILITY
+constexpr void swap(span<_Tp, _Extent> &__lhs, span<_Tp, _Extent> &__rhs) noexcept
+{ __lhs.swap(__rhs); }
 
 
 //  Deduction guides
diff --git a/linux-x64/clang/include/c++/v1/stack b/linux-x64/clang/include/c++/v1/stack
index b50ca5c..2a2b350 100644
--- a/linux-x64/clang/include/c++/v1/stack
+++ b/linux-x64/clang/include/c++/v1/stack
@@ -62,8 +62,8 @@
 
 template<class Container>
   stack(Container) -> stack<typename Container::value_type, Container>;  // C++17
-  
-template<class Container, class Allocator> 
+
+template<class Container, class Allocator>
   stack(Container, Allocator) -> stack<typename Container::value_type, Container>; // C++17
 
 template <class T, class Container>
@@ -118,7 +118,7 @@
     typedef typename container_type::const_reference const_reference;
     typedef typename container_type::size_type       size_type;
     static_assert((is_same<_Tp, value_type>::value), "" );
-    
+
 protected:
     container_type c;
 
@@ -240,12 +240,12 @@
 >
 stack(_Container)
     -> stack<typename _Container::value_type, _Container>;
-  
+
 template<class _Container,
          class _Alloc,
          class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,
          class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type
-         > 
+         >
 stack(_Container, _Alloc)
     -> stack<typename _Container::value_type, _Container>;
 #endif
diff --git a/linux-x64/clang/include/c++/v1/stdexcept b/linux-x64/clang/include/c++/v1/stdexcept
index 6eda619..481f904 100644
--- a/linux-x64/clang/include/c++/v1/stdexcept
+++ b/linux-x64/clang/include/c++/v1/stdexcept
@@ -54,6 +54,7 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
+#ifndef _LIBCPP_ABI_VCRUNTIME
 class _LIBCPP_HIDDEN __libcpp_refstring
 {
     const char* __imp_;
@@ -67,6 +68,7 @@
 
     const char* c_str() const _NOEXCEPT {return __imp_;}
 };
+#endif // !_LIBCPP_ABI_VCRUNTIME
 
 _LIBCPP_END_NAMESPACE_STD
 
@@ -76,6 +78,7 @@
 class _LIBCPP_EXCEPTION_ABI logic_error
     : public exception
 {
+#ifndef _LIBCPP_ABI_VCRUNTIME
 private:
     _VSTD::__libcpp_refstring __imp_;
 public:
@@ -88,11 +91,17 @@
     virtual ~logic_error() _NOEXCEPT;
 
     virtual const char* what() const _NOEXCEPT;
+#else
+public:
+    explicit logic_error(const _VSTD::string&); // Symbol uses versioned std::string
+    _LIBCPP_INLINE_VISIBILITY explicit logic_error(const char* __s) : exception(__s) {}
+#endif
 };
 
 class _LIBCPP_EXCEPTION_ABI runtime_error
     : public exception
 {
+#ifndef _LIBCPP_ABI_VCRUNTIME
 private:
     _VSTD::__libcpp_refstring __imp_;
 public:
@@ -105,6 +114,11 @@
     virtual ~runtime_error() _NOEXCEPT;
 
     virtual const char* what() const _NOEXCEPT;
+#else
+public:
+   explicit runtime_error(const _VSTD::string&); // Symbol uses versioned std::string
+   _LIBCPP_INLINE_VISIBILITY explicit runtime_error(const char* __s) : exception(__s) {}
+#endif // _LIBCPP_ABI_VCRUNTIME
 };
 
 class _LIBCPP_EXCEPTION_ABI domain_error
@@ -114,7 +128,9 @@
     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {}
     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s)   : logic_error(__s) {}
 
+#ifndef _LIBCPP_ABI_VCRUNTIME
     virtual ~domain_error() _NOEXCEPT;
+#endif
 };
 
 class _LIBCPP_EXCEPTION_ABI invalid_argument
@@ -124,7 +140,9 @@
     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {}
     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s)   : logic_error(__s) {}
 
+#ifndef _LIBCPP_ABI_VCRUNTIME
     virtual ~invalid_argument() _NOEXCEPT;
+#endif
 };
 
 class _LIBCPP_EXCEPTION_ABI length_error
@@ -133,8 +151,9 @@
 public:
     _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {}
     _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s)   : logic_error(__s) {}
-
+#ifndef _LIBCPP_ABI_VCRUNTIME
     virtual ~length_error() _NOEXCEPT;
+#endif
 };
 
 class _LIBCPP_EXCEPTION_ABI out_of_range
@@ -144,7 +163,9 @@
     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {}
     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s)   : logic_error(__s) {}
 
+#ifndef _LIBCPP_ABI_VCRUNTIME
     virtual ~out_of_range() _NOEXCEPT;
+#endif
 };
 
 class _LIBCPP_EXCEPTION_ABI range_error
@@ -154,7 +175,9 @@
     _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {}
     _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s)   : runtime_error(__s) {}
 
+#ifndef _LIBCPP_ABI_VCRUNTIME
     virtual ~range_error() _NOEXCEPT;
+#endif
 };
 
 class _LIBCPP_EXCEPTION_ABI overflow_error
@@ -164,7 +187,9 @@
     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {}
     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s)   : runtime_error(__s) {}
 
+#ifndef _LIBCPP_ABI_VCRUNTIME
     virtual ~overflow_error() _NOEXCEPT;
+#endif
 };
 
 class _LIBCPP_EXCEPTION_ABI underflow_error
@@ -174,7 +199,9 @@
     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {}
     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s)   : runtime_error(__s) {}
 
+#ifndef _LIBCPP_ABI_VCRUNTIME
     virtual ~underflow_error() _NOEXCEPT;
+#endif
 };
 
 }  // std
diff --git a/linux-x64/clang/include/c++/v1/stdint.h b/linux-x64/clang/include/c++/v1/stdint.h
index c892298..d7b6902 100644
--- a/linux-x64/clang/include/c++/v1/stdint.h
+++ b/linux-x64/clang/include/c++/v1/stdint.h
@@ -8,7 +8,12 @@
 //===----------------------------------------------------------------------===//
 
 #ifndef _LIBCPP_STDINT_H
+// AIX system headers need stdint.h to be re-enterable while _STD_TYPES_T
+// is defined until an inclusion of it without _STD_TYPES_T occurs, in which
+// case the header guard macro is defined.
+#if !defined(_AIX) || !defined(_STD_TYPES_T)
 #define _LIBCPP_STDINT_H
+#endif // _STD_TYPES_T
 
 /*
     stdint.h synopsis
diff --git a/linux-x64/clang/include/c++/v1/stdlib.h b/linux-x64/clang/include/c++/v1/stdlib.h
index 2087544..1d68275 100644
--- a/linux-x64/clang/include/c++/v1/stdlib.h
+++ b/linux-x64/clang/include/c++/v1/stdlib.h
@@ -7,12 +7,16 @@
 //
 //===----------------------------------------------------------------------===//
 
-#if defined(__need_malloc_and_calloc)
+#if defined(__need_malloc_and_calloc) || defined(_LIBCPP_STDLIB_INCLUDE_NEXT)
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
 #endif
 
+#if defined(_LIBCPP_STDLIB_INCLUDE_NEXT)
+#undef _LIBCPP_STDLIB_INCLUDE_NEXT
+#endif
+
 #include_next <stdlib.h>
 
 #elif !defined(_LIBCPP_STDLIB_H)
@@ -93,33 +97,7 @@
 #include_next <stdlib.h>
 
 #ifdef __cplusplus
-
-extern "C++" {
-
-#undef abs
-#undef div
-#undef labs
-#undef ldiv
-#ifndef _LIBCPP_HAS_NO_LONG_LONG
-#undef llabs
-#undef lldiv
-#endif
-
-// MSVCRT already has the correct prototype in <stdlib.h> if __cplusplus is defined
-#if !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX)
-inline _LIBCPP_INLINE_VISIBILITY long      abs(     long __x) _NOEXCEPT {return  labs(__x);}
-#ifndef _LIBCPP_HAS_NO_LONG_LONG
-inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {return llabs(__x);}
-#endif // _LIBCPP_HAS_NO_LONG_LONG
-
-inline _LIBCPP_INLINE_VISIBILITY  ldiv_t div(     long __x,      long __y) _NOEXCEPT {return  ldiv(__x, __y);}
-#ifndef _LIBCPP_HAS_NO_LONG_LONG
-inline _LIBCPP_INLINE_VISIBILITY lldiv_t div(long long __x, long long __y) _NOEXCEPT {return lldiv(__x, __y);}
-#endif // _LIBCPP_HAS_NO_LONG_LONG
-#endif // _LIBCPP_MSVCRT / __sun__ / _AIX
-
-}  // extern "C++"
-
+#include <math.h>
 #endif  // __cplusplus
 
 #endif  // _LIBCPP_STDLIB_H
diff --git a/linux-x64/clang/include/c++/v1/string b/linux-x64/clang/include/c++/v1/string
index e6d1614..1e5b098 100644
--- a/linux-x64/clang/include/c++/v1/string
+++ b/linux-x64/clang/include/c++/v1/string
@@ -627,13 +627,13 @@
 #else
 template <class _Iter, bool = __is_forward_iterator<_Iter>::value>
 struct __libcpp_string_gets_noexcept_iterator_impl : public _LIBCPP_BOOL_CONSTANT((
-    noexcept(++(declval<_Iter&>())) && 
-    is_nothrow_assignable<_Iter&, _Iter>::value && 
-    noexcept(declval<_Iter>() == declval<_Iter>()) && 
+    noexcept(++(declval<_Iter&>())) &&
+    is_nothrow_assignable<_Iter&, _Iter>::value &&
+    noexcept(declval<_Iter>() == declval<_Iter>()) &&
     noexcept(*declval<_Iter>())
 )) {};
 
-template <class _Iter> 
+template <class _Iter>
 struct __libcpp_string_gets_noexcept_iterator_impl<_Iter, false> : public false_type {};
 #endif
 
@@ -862,10 +862,10 @@
         _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
         explicit basic_string(const _Tp& __t, const allocator_type& __a);
 
-    template<class _InputIterator>
+    template<class _InputIterator, class = typename enable_if<__is_input_iterator<_InputIterator>::value>::type>
         _LIBCPP_INLINE_VISIBILITY
         basic_string(_InputIterator __first, _InputIterator __last);
-    template<class _InputIterator>
+    template<class _InputIterator, class = typename enable_if<__is_input_iterator<_InputIterator>::value>::type>
         _LIBCPP_INLINE_VISIBILITY
         basic_string(_InputIterator __first, _InputIterator __last, const allocator_type& __a);
 #ifndef _LIBCPP_CXX03_LANG
@@ -1060,10 +1060,10 @@
     void push_back(value_type __c);
     _LIBCPP_INLINE_VISIBILITY
     void pop_back();
-    _LIBCPP_INLINE_VISIBILITY reference       front();
-    _LIBCPP_INLINE_VISIBILITY const_reference front() const;
-    _LIBCPP_INLINE_VISIBILITY reference       back();
-    _LIBCPP_INLINE_VISIBILITY const_reference back() const;
+    _LIBCPP_INLINE_VISIBILITY reference       front() _NOEXCEPT;
+    _LIBCPP_INLINE_VISIBILITY const_reference front() const _NOEXCEPT;
+    _LIBCPP_INLINE_VISIBILITY reference       back() _NOEXCEPT;
+    _LIBCPP_INLINE_VISIBILITY const_reference back() const _NOEXCEPT;
 
     template <class _Tp>
     _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
@@ -1236,9 +1236,9 @@
     _LIBCPP_INLINE_VISIBILITY
     void swap(basic_string& __str)
 #if _LIBCPP_STD_VER >= 14
-        _NOEXCEPT_DEBUG;
+        _NOEXCEPT;
 #else
-        _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value ||
+        _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
                     __is_nothrow_swappable<allocator_type>::value);
 #endif
 
@@ -1420,7 +1420,7 @@
     _LIBCPP_INLINE_VISIBILITY bool __invariants() const;
 
     _LIBCPP_INLINE_VISIBILITY void __clear_and_shrink() _NOEXCEPT;
-    
+
     _LIBCPP_INLINE_VISIBILITY
     bool __is_long() const _NOEXCEPT
         {return bool(__r_.first().__s.__size_ & __short_mask);}
@@ -1682,7 +1682,7 @@
   -> basic_string<_CharT, _Traits, _Allocator>;
 #endif
 
-                  
+
 template <class _CharT, class _Traits, class _Allocator>
 inline
 void
@@ -2077,7 +2077,7 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-template<class _InputIterator>
+template<class _InputIterator, class>
 inline
 basic_string<_CharT, _Traits, _Allocator>::basic_string(_InputIterator __first, _InputIterator __last)
 {
@@ -2088,7 +2088,7 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-template<class _InputIterator>
+template<class _InputIterator, class>
 inline
 basic_string<_CharT, _Traits, _Allocator>::basic_string(_InputIterator __first, _InputIterator __last,
                                                         const allocator_type& __a)
@@ -2525,7 +2525,7 @@
             const basic_string __temp (__first, __last, __alloc());
             append(__temp.data(), __temp.size());
         }
-        else 
+        else
         {
             if (__cap - __sz < __n)
                 __grow_by(__cap, __sz + __n - __cap, __sz, __sz, 0);
@@ -3237,7 +3237,7 @@
 template <class _CharT, class _Traits, class _Allocator>
 inline
 typename basic_string<_CharT, _Traits, _Allocator>::reference
-basic_string<_CharT, _Traits, _Allocator>::front()
+basic_string<_CharT, _Traits, _Allocator>::front() _NOEXCEPT
 {
     _LIBCPP_ASSERT(!empty(), "string::front(): string is empty");
     return *__get_pointer();
@@ -3246,7 +3246,7 @@
 template <class _CharT, class _Traits, class _Allocator>
 inline
 typename basic_string<_CharT, _Traits, _Allocator>::const_reference
-basic_string<_CharT, _Traits, _Allocator>::front() const
+basic_string<_CharT, _Traits, _Allocator>::front() const _NOEXCEPT
 {
     _LIBCPP_ASSERT(!empty(), "string::front(): string is empty");
     return *data();
@@ -3255,7 +3255,7 @@
 template <class _CharT, class _Traits, class _Allocator>
 inline
 typename basic_string<_CharT, _Traits, _Allocator>::reference
-basic_string<_CharT, _Traits, _Allocator>::back()
+basic_string<_CharT, _Traits, _Allocator>::back() _NOEXCEPT
 {
     _LIBCPP_ASSERT(!empty(), "string::back(): string is empty");
     return *(__get_pointer() + size() - 1);
@@ -3264,7 +3264,7 @@
 template <class _CharT, class _Traits, class _Allocator>
 inline
 typename basic_string<_CharT, _Traits, _Allocator>::const_reference
-basic_string<_CharT, _Traits, _Allocator>::back() const
+basic_string<_CharT, _Traits, _Allocator>::back() const _NOEXCEPT
 {
     _LIBCPP_ASSERT(!empty(), "string::back(): string is empty");
     return *(data() + size() - 1);
@@ -3295,9 +3295,9 @@
 void
 basic_string<_CharT, _Traits, _Allocator>::swap(basic_string& __str)
 #if _LIBCPP_STD_VER >= 14
-        _NOEXCEPT_DEBUG
+        _NOEXCEPT
 #else
-        _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value ||
+        _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
                     __is_nothrow_swappable<allocator_type>::value)
 #endif
 {
@@ -3824,7 +3824,7 @@
 
 template<class _CharT, class _Traits, class _Allocator>
 inline
-void 
+void
 basic_string<_CharT, _Traits, _Allocator>::__clear_and_shrink() _NOEXCEPT
 {
     clear();
@@ -3834,7 +3834,7 @@
         __set_long_cap(0);
         __set_short_size(0);
     }
-} 
+}
 
 // operator==
 
@@ -4227,21 +4227,17 @@
     const typename basic_string<_CharT, _Traits, _Allocator>::size_type
                    basic_string<_CharT, _Traits, _Allocator>::npos;
 
-template<class _CharT, class _Traits, class _Allocator>
-struct _LIBCPP_TEMPLATE_VIS hash<basic_string<_CharT, _Traits, _Allocator> >
-    : public unary_function<basic_string<_CharT, _Traits, _Allocator>, size_t>
+template <class _CharT, class _Allocator>
+struct _LIBCPP_TEMPLATE_VIS
+    hash<basic_string<_CharT, char_traits<_CharT>, _Allocator> >
+    : public unary_function<
+          basic_string<_CharT, char_traits<_CharT>, _Allocator>, size_t>
 {
     size_t
-        operator()(const basic_string<_CharT, _Traits, _Allocator>& __val) const _NOEXCEPT;
+    operator()(const basic_string<_CharT, char_traits<_CharT>, _Allocator>& __val) const _NOEXCEPT
+    { return __do_string_hash(__val.data(), __val.data() + __val.size()); }
 };
 
-template<class _CharT, class _Traits, class _Allocator>
-size_t
-hash<basic_string<_CharT, _Traits, _Allocator> >::operator()(
-        const basic_string<_CharT, _Traits, _Allocator>& __val) const _NOEXCEPT
-{
-    return __do_string_hash(__val.data(), __val.data() + __val.size());
-}
 
 template<class _CharT, class _Traits, class _Allocator>
 basic_ostream<_CharT, _Traits>&
@@ -4331,7 +4327,7 @@
 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_string<char>)
 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_string<wchar_t>)
 
-#if _LIBCPP_STD_VER > 11 
+#if _LIBCPP_STD_VER > 11
 // Literal suffixes for basic_string [basic.string.literals]
 inline namespace literals
 {
diff --git a/linux-x64/clang/include/c++/v1/string_view b/linux-x64/clang/include/c++/v1/string_view
index 79565c2..0444831 100644
--- a/linux-x64/clang/include/c++/v1/string_view
+++ b/linux-x64/clang/include/c++/v1/string_view
@@ -228,9 +228,9 @@
     basic_string_view(const _CharT* __s, size_type __len) _NOEXCEPT
         : __data(__s), __size(__len)
     {
-// #if _LIBCPP_STD_VER > 11
-//         _LIBCPP_ASSERT(__len == 0 || __s != nullptr, "string_view::string_view(_CharT *, size_t): received nullptr");
-// #endif
+#if _LIBCPP_STD_VER > 11
+    _LIBCPP_ASSERT(__len == 0 || __s != nullptr, "string_view::string_view(_CharT *, size_t): received nullptr");
+#endif
     }
 
     _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
@@ -288,13 +288,13 @@
     }
 
     _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
-    const_reference front() const
+    const_reference front() const _NOEXCEPT
     {
         return _LIBCPP_ASSERT(!empty(), "string_view::front(): string is empty"), __data[0];
     }
 
     _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
-    const_reference back() const
+    const_reference back() const _NOEXCEPT
     {
         return _LIBCPP_ASSERT(!empty(), "string_view::back(): string is empty"), __data[__size-1];
     }
@@ -364,7 +364,7 @@
     }
 
     _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
-    int compare(                       size_type __pos1, size_type __n1, 
+    int compare(                       size_type __pos1, size_type __n1,
                 basic_string_view __sv, size_type __pos2, size_type __n2) const
     {
         return substr(__pos1, __n1).compare(__sv.substr(__pos2, __n2));
@@ -628,7 +628,7 @@
 
 template<class _CharT, class _Traits>
 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
-bool operator==(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs, 
+bool operator==(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
                 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
 {
     if ( __lhs.size() != __rhs.size()) return false;
@@ -658,7 +658,7 @@
 
 template<class _CharT, class _Traits>
 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
-bool operator!=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs, 
+bool operator!=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
                 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
 {
     if ( __lhs.size() != __rhs.size())
@@ -685,7 +685,7 @@
 
 template<class _CharT, class _Traits>
 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
-bool operator<(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs, 
+bool operator<(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
                 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
 {
     return __lhs.compare(__rhs) < 0;
@@ -710,7 +710,7 @@
 
 template<class _CharT, class _Traits>
 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
-bool operator>(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs, 
+bool operator>(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
                 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
 {
     return __lhs.compare(__rhs) > 0;
@@ -735,7 +735,7 @@
 
 template<class _CharT, class _Traits>
 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
-bool operator<=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs, 
+bool operator<=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
                 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
 {
     return __lhs.compare(__rhs) <= 0;
@@ -761,7 +761,7 @@
 
 template<class _CharT, class _Traits>
 _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
-bool operator>=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs, 
+bool operator>=(typename common_type<basic_string_view<_CharT, _Traits> >::type __lhs,
                 basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT
 {
     return __lhs.compare(__rhs) >= 0;
@@ -776,18 +776,18 @@
 typedef basic_string_view<wchar_t>  wstring_view;
 
 // [string.view.hash]
-template<class _CharT, class _Traits>
-struct _LIBCPP_TEMPLATE_VIS hash<basic_string_view<_CharT, _Traits> >
-    : public unary_function<basic_string_view<_CharT, _Traits>, size_t>
+template<class _CharT>
+struct _LIBCPP_TEMPLATE_VIS hash<basic_string_view<_CharT, char_traits<_CharT> > >
+    : public unary_function<basic_string_view<_CharT, char_traits<_CharT> >, size_t>
 {
     _LIBCPP_INLINE_VISIBILITY
-    size_t operator()(const basic_string_view<_CharT, _Traits> __val) const _NOEXCEPT {
+    size_t operator()(const basic_string_view<_CharT, char_traits<_CharT> > __val) const _NOEXCEPT {
         return __do_string_hash(__val.data(), __val.data() + __val.size());
     }
 };
 
 
-#if _LIBCPP_STD_VER > 11 
+#if _LIBCPP_STD_VER > 11
 inline namespace literals
 {
   inline namespace string_view_literals
diff --git a/linux-x64/clang/include/c++/v1/support/xlocale/xlocale.h b/linux-x64/clang/include/c++/v1/support/xlocale/xlocale.h
deleted file mode 100644
index e69de29..0000000
--- a/linux-x64/clang/include/c++/v1/support/xlocale/xlocale.h
+++ /dev/null
diff --git a/linux-x64/clang/include/c++/v1/thread b/linux-x64/clang/include/c++/v1/thread
index df06ff7..3d8d2ac 100644
--- a/linux-x64/clang/include/c++/v1/thread
+++ b/linux-x64/clang/include/c++/v1/thread
@@ -434,7 +434,12 @@
     using namespace chrono;
     if (__d > duration<_Rep, _Period>::zero())
     {
+#if defined(_LIBCPP_COMPILER_GCC) && (__powerpc__ || __POWERPC__)
+    //  GCC's long double const folding is incomplete for IBM128 long doubles.
         _LIBCPP_CONSTEXPR duration<long double> _Max = nanoseconds::max();
+#else
+        _LIBCPP_CONSTEXPR duration<long double> _Max = duration<long double>(ULLONG_MAX/1000000000ULL) ;
+#endif
         nanoseconds __ns;
         if (__d < _Max)
         {
diff --git a/linux-x64/clang/include/c++/v1/tuple b/linux-x64/clang/include/c++/v1/tuple
index f7e7ee1..de30e86 100644
--- a/linux-x64/clang/include/c++/v1/tuple
+++ b/linux-x64/clang/include/c++/v1/tuple
@@ -87,8 +87,8 @@
 template <class... T> struct tuple_size<tuple<T...>>;
 template <class T>
  inline constexpr size_t tuple_size_v = tuple_size<T>::value; // C++17
-template <size_t I, class T> class tuple_element; // undefined
-template <size_t I, class... T> class tuple_element<I, tuple<T...>>;
+template <size_t I, class T> struct tuple_element; // undefined
+template <size_t I, class... T> struct tuple_element<I, tuple<T...>>;
 template <size_t I, class T>
   using tuple_element_t = typename tuple_element <I, T>::type; // C++14
 
@@ -209,12 +209,12 @@
               "Attempted to default construct a reference element in a tuple");}
 
     template <class _Tp,
-              class = typename enable_if<
-                  __lazy_and<
-                      __lazy_not<is_same<typename __uncvref<_Tp>::type, __tuple_leaf>>
-                    , is_constructible<_Hp, _Tp>
+              class = _EnableIf<
+                  _And<
+                      _IsNotSame<__uncvref_t<_Tp>, __tuple_leaf>,
+                      is_constructible<_Hp, _Tp>
                     >::value
-                >::type
+                >
             >
         _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
         explicit __tuple_leaf(_Tp&& __t) _NOEXCEPT_((is_nothrow_constructible<_Hp, _Tp>::value))
@@ -291,12 +291,12 @@
             : _Hp(__a) {}
 
     template <class _Tp,
-              class = typename enable_if<
-                  __lazy_and<
-                        __lazy_not<is_same<typename __uncvref<_Tp>::type, __tuple_leaf>>
-                      , is_constructible<_Hp, _Tp>
-                    >::value
-                >::type
+              class = _EnableIf<
+                  _And<
+                    _IsNotSame<__uncvref_t<_Tp>, __tuple_leaf>,
+                    is_constructible<_Hp, _Tp>
+                  >::value
+                >
             >
         _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
         explicit __tuple_leaf(_Tp&& __t) _NOEXCEPT_((is_nothrow_constructible<_Hp, _Tp>::value))
@@ -345,9 +345,6 @@
 _LIBCPP_INLINE_VISIBILITY
 void __swallow(_Tp&&...) _NOEXCEPT {}
 
-template <class ..._Tp>
-struct __lazy_all : __all<_Tp::value...> {};
-
 template <class _Tp>
 struct __all_default_constructible;
 
@@ -524,6 +521,13 @@
         template <class ..._Args>
         static constexpr bool __enable_implicit() {
             return
+               __tuple_constructible<
+                    tuple<_Args...>,
+                    typename __make_tuple_types<tuple,
+                             sizeof...(_Args) < sizeof...(_Tp) ?
+                                 sizeof...(_Args) :
+                                 sizeof...(_Tp)>::type
+                >::value &&
                 __tuple_convertible<
                     tuple<_Args...>,
                     typename __make_tuple_types<tuple,
@@ -550,7 +554,8 @@
     {
         template <class _Tuple>
         static constexpr bool __enable_implicit() {
-            return __tuple_convertible<_Tuple, tuple>::value;
+            return __tuple_constructible<_Tuple, tuple>::value
+                && __tuple_convertible<_Tuple, tuple>::value;
         }
 
         template <class _Tuple>
@@ -567,19 +572,20 @@
         // the UTypes... constructor should be selected instead.
         // See LWG issue #2549.
         template <class _Tuple>
-        using _PreferTupleLikeConstructor = __lazy_or<
+        using _PreferTupleLikeConstructor = _Or<
             // Don't attempt the two checks below if the tuple we are given
             // has the same type as this tuple.
-            is_same<typename __uncvref<_Tuple>::type, tuple>,
-            __lazy_and<
-                __lazy_not<is_constructible<_Tp..., _Tuple>>,
-                __lazy_not<is_convertible<_Tuple, _Tp...>>
+            _IsSame<__uncvref_t<_Tuple>, tuple>,
+            _Lazy<_And,
+                _Not<is_constructible<_Tp..., _Tuple>>,
+                _Not<is_convertible<_Tuple, _Tp...>>
             >
         >;
 
         template <class _Tuple>
         static constexpr bool __enable_implicit() {
-            return __lazy_and<
+            return _And<
+                __tuple_constructible<_Tuple, tuple>,
                 __tuple_convertible<_Tuple, tuple>,
                 _PreferTupleLikeConstructor<_Tuple>
             >::value;
@@ -587,10 +593,10 @@
 
         template <class _Tuple>
         static constexpr bool __enable_explicit() {
-            return __lazy_and<
+            return _And<
                 __tuple_constructible<_Tuple, tuple>,
                 _PreferTupleLikeConstructor<_Tuple>,
-                __lazy_not<__tuple_convertible<_Tuple, tuple>>
+                _Not<__tuple_convertible<_Tuple, tuple>>
             >::value;
         }
     };
@@ -615,12 +621,13 @@
     tuple(tuple const&) = default;
     tuple(tuple&&) = default;
 
-    template <class _AllocArgT, class _Alloc, bool _Dummy = true, class = typename enable_if<
-        __lazy_and<
-            is_same<allocator_arg_t, _AllocArgT>,
-            __lazy_all<__dependent_type<is_default_constructible<_Tp>, _Dummy>...>
+    template <class _AllocArgT, class _Alloc, bool _Dummy = true, class = _EnableIf<
+        _And<
+            _IsSame<allocator_arg_t, _AllocArgT>,
+           __dependent_type<is_default_constructible<_Tp>, _Dummy>...
        >::value
-    >::type>
+      >
+    >
     _LIBCPP_INLINE_VISIBILITY
     tuple(_AllocArgT, _Alloc const& __a)
       : __base_(allocator_arg_t(), __a,
@@ -907,7 +914,7 @@
 {
 public:
     _LIBCPP_INLINE_VISIBILITY
-    _LIBCPP_CONSTEXPR tuple() _NOEXCEPT {}
+    _LIBCPP_CONSTEXPR tuple() _NOEXCEPT = default;
     template <class _Alloc>
     _LIBCPP_INLINE_VISIBILITY
         tuple(allocator_arg_t, const _Alloc&) _NOEXCEPT {}
@@ -952,7 +959,7 @@
 typename tuple_element<_Ip, tuple<_Tp...> >::type&
 get(tuple<_Tp...>& __t) _NOEXCEPT
 {
-    typedef typename tuple_element<_Ip, tuple<_Tp...> >::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename tuple_element<_Ip, tuple<_Tp...> >::type type;
     return static_cast<__tuple_leaf<_Ip, type>&>(__t.__base_).get();
 }
 
@@ -961,7 +968,7 @@
 const typename tuple_element<_Ip, tuple<_Tp...> >::type&
 get(const tuple<_Tp...>& __t) _NOEXCEPT
 {
-    typedef typename tuple_element<_Ip, tuple<_Tp...> >::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename tuple_element<_Ip, tuple<_Tp...> >::type type;
     return static_cast<const __tuple_leaf<_Ip, type>&>(__t.__base_).get();
 }
 
@@ -970,7 +977,7 @@
 typename tuple_element<_Ip, tuple<_Tp...> >::type&&
 get(tuple<_Tp...>&& __t) _NOEXCEPT
 {
-    typedef typename tuple_element<_Ip, tuple<_Tp...> >::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename tuple_element<_Ip, tuple<_Tp...> >::type type;
     return static_cast<type&&>(
              static_cast<__tuple_leaf<_Ip, type>&&>(__t.__base_).get());
 }
@@ -980,7 +987,7 @@
 const typename tuple_element<_Ip, tuple<_Tp...> >::type&&
 get(const tuple<_Tp...>&& __t) _NOEXCEPT
 {
-    typedef typename tuple_element<_Ip, tuple<_Tp...> >::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename tuple_element<_Ip, tuple<_Tp...> >::type type;
     return static_cast<const type&&>(
              static_cast<const __tuple_leaf<_Ip, type>&&>(__t.__base_).get());
 }
@@ -1199,7 +1206,7 @@
 template <class ..._Ttypes, class ..._Utypes>
 struct __tuple_cat_type<tuple<_Ttypes...>, __tuple_types<_Utypes...> >
 {
-    typedef tuple<_Ttypes..., _Utypes...> type;
+    typedef _LIBCPP_NODEBUG_TYPE tuple<_Ttypes..., _Utypes...> type;
 };
 
 template <class _ResultTuple, bool _Is_Tuple0TupleLike, class ..._Tuples>
@@ -1210,8 +1217,8 @@
 template <class ..._Types, class _Tuple0>
 struct __tuple_cat_return_1<tuple<_Types...>, true, _Tuple0>
 {
-    typedef typename __tuple_cat_type<tuple<_Types...>,
-            typename __make_tuple_types<typename remove_reference<_Tuple0>::type>::type>::type
+    typedef _LIBCPP_NODEBUG_TYPE typename __tuple_cat_type<tuple<_Types...>,
+            typename __make_tuple_types<typename __uncvref<_Tuple0>::type>::type>::type
                                                                            type;
 };
 
@@ -1220,7 +1227,7 @@
     : public __tuple_cat_return_1<
                  typename __tuple_cat_type<
                      tuple<_Types...>,
-                     typename __make_tuple_types<typename remove_reference<_Tuple0>::type>::type
+                     typename __make_tuple_types<typename __uncvref<_Tuple0>::type>::type
                  >::type,
                  __tuple_like<typename remove_reference<_Tuple1>::type>::value,
                  _Tuple1, _Tuples...>
@@ -1240,7 +1247,7 @@
 template <>
 struct __tuple_cat_return<>
 {
-    typedef tuple<> type;
+    typedef _LIBCPP_NODEBUG_TYPE tuple<> type;
 };
 
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
@@ -1256,7 +1263,7 @@
 template <class ..._Types, size_t ..._I0, class _Tuple0>
 struct __tuple_cat_return_ref_imp<tuple<_Types...>, __tuple_indices<_I0...>, _Tuple0>
 {
-    typedef typename remove_reference<_Tuple0>::type _T0;
+    typedef _LIBCPP_NODEBUG_TYPE typename remove_reference<_Tuple0>::type _T0;
     typedef tuple<_Types..., typename __apply_cv<_Tuple0,
                           typename tuple_element<_I0, _T0>::type>::type&&...> type;
 };
@@ -1303,8 +1310,8 @@
     typename __tuple_cat_return_ref<tuple<_Types...>&&, _Tuple0&&, _Tuple1&&, _Tuples&&...>::type
     operator()(tuple<_Types...> __t, _Tuple0&& __t0, _Tuple1&& __t1, _Tuples&& ...__tpls)
     {
-        typedef typename remove_reference<_Tuple0>::type _T0;
-        typedef typename remove_reference<_Tuple1>::type _T1;
+        typedef _LIBCPP_NODEBUG_TYPE typename remove_reference<_Tuple0>::type _T0;
+        typedef _LIBCPP_NODEBUG_TYPE typename remove_reference<_Tuple1>::type _T1;
         return __tuple_cat<
            tuple<_Types..., typename __apply_cv<_Tuple0, typename tuple_element<_J0, _T0>::type>::type&&...>,
            typename __make_tuple_indices<sizeof ...(_Types) + tuple_size<_T0>::value>::type,
@@ -1323,7 +1330,7 @@
 typename __tuple_cat_return<_Tuple0, _Tuples...>::type
 tuple_cat(_Tuple0&& __t0, _Tuples&&... __tpls)
 {
-    typedef typename remove_reference<_Tuple0>::type _T0;
+    typedef _LIBCPP_NODEBUG_TYPE typename remove_reference<_Tuple0>::type _T0;
     return __tuple_cat<tuple<>, __tuple_indices<>,
                   typename __make_tuple_indices<tuple_size<_T0>::value>::type>()
                   (tuple<>(), _VSTD::forward<_Tuple0>(__t0),
diff --git a/linux-x64/clang/include/c++/v1/type_traits b/linux-x64/clang/include/c++/v1/type_traits
index 37b7ca1..5ccafec 100644
--- a/linux-x64/clang/include/c++/v1/type_traits
+++ b/linux-x64/clang/include/c++/v1/type_traits
@@ -90,6 +90,9 @@
     template <class T> struct remove_extent;
     template <class T> struct remove_all_extents;
 
+    template <class T> struct is_bounded_array;                 // C++20
+    template <class T> struct is_unbounded_array;               // C++20
+
     // Member introspection:
     template <class T> struct is_pod;
     template <class T> struct is_trivial;
@@ -140,7 +143,10 @@
     // Relationships between types:
     template <class T, class U> struct is_same;
     template <class Base, class Derived> struct is_base_of;
+
     template <class From, class To> struct is_convertible;
+    template <typename From, typename To> struct is_nothrow_convertible;                  // C++20
+    template <typename From, typename To> inline constexpr bool is_nothrow_convertible_v; // C++20
 
     template <class Fn, class... ArgTypes> struct is_invocable;
     template <class R, class Fn, class... ArgTypes> struct is_invocable_r;
@@ -196,6 +202,12 @@
     template <class T>
       using remove_all_extents_t = typename remove_all_extents<T>::type;  // C++14
 
+    template <class T>
+      inline constexpr bool is_bounded_array_v
+        = is_bounded_array<T>::value;                                     // C++20
+      inline constexpr bool is_unbounded_array_v
+        = is_unbounded_array<T>::value;                                   // C++20
+
     // pointer modifications:
     template <class T>
       using remove_pointer_t = typename remove_pointer<T>::type;  // C++14
@@ -415,6 +427,96 @@
 template <class _Tp> class _LIBCPP_TEMPLATE_VIS reference_wrapper;
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS hash;
 
+
+template <class _Tp, _Tp __v>
+struct _LIBCPP_TEMPLATE_VIS integral_constant
+{
+  static _LIBCPP_CONSTEXPR const _Tp      value = __v;
+  typedef _Tp               value_type;
+  typedef integral_constant type;
+  _LIBCPP_INLINE_VISIBILITY
+  _LIBCPP_CONSTEXPR operator value_type() const _NOEXCEPT {return value;}
+#if _LIBCPP_STD_VER > 11
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr value_type operator ()() const _NOEXCEPT {return value;}
+#endif
+};
+
+template <class _Tp, _Tp __v>
+_LIBCPP_CONSTEXPR const _Tp integral_constant<_Tp, __v>::value;
+
+#if _LIBCPP_STD_VER > 14
+template <bool __b>
+using bool_constant = integral_constant<bool, __b>;
+#define _LIBCPP_BOOL_CONSTANT(__b) bool_constant<(__b)>
+#else
+#define _LIBCPP_BOOL_CONSTANT(__b) integral_constant<bool,(__b)>
+#endif
+
+typedef _LIBCPP_BOOL_CONSTANT(true)  true_type;
+typedef _LIBCPP_BOOL_CONSTANT(false) false_type;
+
+template <bool _Val>
+using _BoolConstant _LIBCPP_NODEBUG_TYPE = integral_constant<bool, _Val>;
+
+template <bool> struct _MetaBase;
+template <>
+struct _MetaBase<true> {
+  template <class _Tp, class _Up>
+  using _SelectImpl _LIBCPP_NODEBUG_TYPE = _Tp;
+  template <template <class...> class _FirstFn, template <class...> class, class ..._Args>
+  using _SelectApplyImpl _LIBCPP_NODEBUG_TYPE = _FirstFn<_Args...>;
+  template <class _First, class...>
+  using _FirstImpl _LIBCPP_NODEBUG_TYPE = _First;
+  template <class, class _Second, class...>
+  using _SecondImpl _LIBCPP_NODEBUG_TYPE = _Second;
+  template <class _Tp = void>
+  using _EnableIfImpl _LIBCPP_NODEBUG_TYPE = _Tp;
+  template <class _Result, class _First, class ..._Rest>
+  using _OrImpl _LIBCPP_NODEBUG_TYPE = typename _MetaBase<_First::value != true && sizeof...(_Rest) != 0>::template _OrImpl<_First, _Rest...>;
+  template <class _Result, class _First, class ..._Rest>
+  using _AndImpl _LIBCPP_NODEBUG_TYPE = typename _MetaBase<_First::value == true && sizeof...(_Rest) != 0>::template _AndImpl<_First, _Rest...>;
+};
+
+template <>
+struct _MetaBase<false> {
+  template <class _Tp, class _Up>
+  using _SelectImpl _LIBCPP_NODEBUG_TYPE = _Up;
+  template <template <class...> class, template <class...> class _SecondFn, class ..._Args>
+  using _SelectApplyImpl _LIBCPP_NODEBUG_TYPE = _SecondFn<_Args...>;
+  template <class _Result, class ...>
+  using _OrImpl _LIBCPP_NODEBUG_TYPE = _Result;
+  template <class _Result, class ...>
+  using _AndImpl _LIBCPP_NODEBUG_TYPE = _Result;
+};
+template <bool _Cond, class _Ret = void>
+using _EnableIf _LIBCPP_NODEBUG_TYPE = typename _MetaBase<_Cond>::template _EnableIfImpl<_Ret>;
+template <bool _Cond, class _IfRes, class _ElseRes>
+using _If _LIBCPP_NODEBUG_TYPE = typename _MetaBase<_Cond>::template _SelectImpl<_IfRes, _ElseRes>;
+template <class ..._Rest>
+using _Or _LIBCPP_NODEBUG_TYPE = typename _MetaBase< sizeof...(_Rest) != 0 >::template _OrImpl<false_type, _Rest...>;
+template <class ..._Rest>
+using _And _LIBCPP_NODEBUG_TYPE = typename _MetaBase< sizeof...(_Rest) != 0 >::template _AndImpl<true_type, _Rest...>;
+template <class _Pred>
+struct _Not : _BoolConstant<!_Pred::value> {};
+template <class ..._Args>
+using _FirstType _LIBCPP_NODEBUG_TYPE = typename _MetaBase<(sizeof...(_Args) >= 1)>::template _FirstImpl<_Args...>;
+template <class ..._Args>
+using _SecondType _LIBCPP_NODEBUG_TYPE = typename _MetaBase<(sizeof...(_Args) >= 2)>::template _SecondImpl<_Args...>;
+
+template <template <class...> class _Func, class ..._Args>
+struct _Lazy : _Func<_Args...> {};
+
+// Member detector base
+
+template <template <class...> class _Templ, class ..._Args>
+true_type __sfinae_test_impl(_FirstType<int, _Templ<_Args...> >);
+template <template <class...> class, class ...>
+false_type __sfinae_test_impl(...);
+
+template <template <class ...> class _Templ, class ..._Args>
+using _IsValidExpansion _LIBCPP_NODEBUG_TYPE = decltype(std::__sfinae_test_impl<_Templ, _Args...>(0));
+
 template <class>
 struct __void_t { typedef void type; };
 
@@ -433,9 +535,6 @@
 template <bool _Bp, class _If, class _Then> using conditional_t = typename conditional<_Bp, _If, _Then>::type;
 #endif
 
-template <bool, class _Tp> struct _LIBCPP_TEMPLATE_VIS __lazy_enable_if {};
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS __lazy_enable_if<true, _Tp> {typedef typename _Tp::type type;};
-
 template <bool, class _Tp = void> struct _LIBCPP_TEMPLATE_VIS enable_if {};
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS enable_if<true, _Tp> {typedef _Tp type;};
 
@@ -443,6 +542,34 @@
 template <bool _Bp, class _Tp = void> using enable_if_t = typename enable_if<_Bp, _Tp>::type;
 #endif
 
+// is_same
+
+template <class _Tp, class _Up> struct _LIBCPP_TEMPLATE_VIS is_same           : public false_type {};
+template <class _Tp>            struct _LIBCPP_TEMPLATE_VIS is_same<_Tp, _Tp> : public true_type {};
+
+#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
+template <class _Tp, class _Up>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_same_v
+    = is_same<_Tp, _Up>::value;
+#endif
+
+template <class _Tp, class _Up>
+using _IsSame = _BoolConstant<
+#ifdef __clang__
+    __is_same(_Tp, _Up)
+#else
+    _VSTD::is_same<_Tp, _Up>::value
+#endif
+>;
+
+template <class _Tp, class _Up>
+using _IsNotSame = _BoolConstant<
+#ifdef __clang__
+    !__is_same(_Tp, _Up)
+#else
+    !_VSTD::is_same<_Tp, _Up>::value
+#endif
+>;
 // addressof
 #ifndef _LIBCPP_HAS_NO_BUILTIN_ADDRESSOF
 
@@ -516,111 +643,6 @@
 
 // helper class:
 
-template <class _Tp, _Tp __v>
-struct _LIBCPP_TEMPLATE_VIS integral_constant
-{
-    static _LIBCPP_CONSTEXPR const _Tp      value = __v;
-    typedef _Tp               value_type;
-    typedef integral_constant type;
-    _LIBCPP_INLINE_VISIBILITY
-        _LIBCPP_CONSTEXPR operator value_type() const _NOEXCEPT {return value;}
-#if _LIBCPP_STD_VER > 11
-    _LIBCPP_INLINE_VISIBILITY
-         constexpr value_type operator ()() const _NOEXCEPT {return value;}
-#endif
-};
-
-template <class _Tp, _Tp __v>
-_LIBCPP_CONSTEXPR const _Tp integral_constant<_Tp, __v>::value;
-
-#if _LIBCPP_STD_VER > 14
-template <bool __b>
-using bool_constant = integral_constant<bool, __b>;
-#define _LIBCPP_BOOL_CONSTANT(__b) bool_constant<(__b)>
-#else
-#define _LIBCPP_BOOL_CONSTANT(__b) integral_constant<bool,(__b)>
-#endif
-
-typedef _LIBCPP_BOOL_CONSTANT(true)  true_type;
-typedef _LIBCPP_BOOL_CONSTANT(false) false_type;
-
-#if !defined(_LIBCPP_CXX03_LANG)
-
-// __lazy_and
-
-template <bool _Last, class ..._Preds>
-struct __lazy_and_impl;
-
-template <class ..._Preds>
-struct __lazy_and_impl<false, _Preds...> : false_type {};
-
-template <>
-struct __lazy_and_impl<true> : true_type {};
-
-template <class _Pred>
-struct __lazy_and_impl<true, _Pred> : integral_constant<bool, _Pred::type::value> {};
-
-template <class _Hp, class ..._Tp>
-struct __lazy_and_impl<true, _Hp, _Tp...> : __lazy_and_impl<_Hp::type::value, _Tp...> {};
-
-template <class _P1, class ..._Pr>
-struct __lazy_and : __lazy_and_impl<_P1::type::value, _Pr...> {};
-
-// __lazy_or
-
-template <bool _List, class ..._Preds>
-struct __lazy_or_impl;
-
-template <class ..._Preds>
-struct __lazy_or_impl<true, _Preds...> : true_type {};
-
-template <>
-struct __lazy_or_impl<false> : false_type {};
-
-template <class _Hp, class ..._Tp>
-struct __lazy_or_impl<false, _Hp, _Tp...>
-        : __lazy_or_impl<_Hp::type::value, _Tp...> {};
-
-template <class _P1, class ..._Pr>
-struct __lazy_or : __lazy_or_impl<_P1::type::value, _Pr...> {};
-
-// __lazy_not
-
-template <class _Pred>
-struct __lazy_not : integral_constant<bool, !_Pred::type::value> {};
-
-// __and_
-template<class...> struct __and_;
-template<> struct __and_<> : true_type {};
-
-template<class _B0> struct __and_<_B0> : _B0 {};
-
-template<class _B0, class _B1>
-struct __and_<_B0, _B1> : conditional<_B0::value, _B1, _B0>::type {};
-
-template<class _B0, class _B1, class _B2, class... _Bn>
-struct __and_<_B0, _B1, _B2, _Bn...>
-        : conditional<_B0::value, __and_<_B1, _B2, _Bn...>, _B0>::type {};
-
-// __or_
-template<class...> struct __or_;
-template<> struct __or_<> : false_type {};
-
-template<class _B0> struct __or_<_B0> : _B0 {};
-
-template<class _B0, class _B1>
-struct __or_<_B0, _B1> : conditional<_B0::value, _B0, _B1>::type {};
-
-template<class _B0, class _B1, class _B2, class... _Bn>
-struct __or_<_B0, _B1, _B2, _Bn...>
-        : conditional<_B0::value, _B0, __or_<_B1, _B2, _Bn...> >::type {};
-
-// __not_
-template<class _Tp>
-struct __not_ : conditional<_Tp::value, false_type, true_type>::type {};
-
-#endif // !defined(_LIBCPP_CXX03_LANG)
-
 // is_const
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_const            : public false_type {};
@@ -773,8 +795,16 @@
 template <class _Tp> struct __libcpp_is_pointer       : public false_type {};
 template <class _Tp> struct __libcpp_is_pointer<_Tp*> : public true_type {};
 
+template <class _Tp> struct __libcpp_remove_objc_qualifiers { typedef _Tp type; };
+#if defined(_LIBCPP_HAS_OBJC_ARC)
+template <class _Tp> struct __libcpp_remove_objc_qualifiers<_Tp __strong> { typedef _Tp type; };
+template <class _Tp> struct __libcpp_remove_objc_qualifiers<_Tp __weak> { typedef _Tp type; };
+template <class _Tp> struct __libcpp_remove_objc_qualifiers<_Tp __autoreleasing> { typedef _Tp type; };
+template <class _Tp> struct __libcpp_remove_objc_qualifiers<_Tp __unsafe_unretained> { typedef _Tp type; };
+#endif
+
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_pointer
-    : public __libcpp_is_pointer<typename remove_cv<_Tp>::type> {};
+    : public __libcpp_is_pointer<typename __libcpp_remove_objc_qualifiers<typename remove_cv<_Tp>::type>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp>
@@ -788,15 +818,11 @@
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_lvalue_reference<_Tp&> : public true_type {};
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_rvalue_reference        : public false_type {};
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_rvalue_reference<_Tp&&> : public true_type {};
-#endif
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_reference        : public false_type {};
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_reference<_Tp&>  : public true_type {};
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_reference<_Tp&&> : public true_type {};
-#endif
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp>
@@ -813,7 +839,7 @@
 #endif
 // is_union
 
-#if __has_feature(is_union) || (_GNUC_VER >= 403)
+#if __has_feature(is_union) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_union
     : public integral_constant<bool, __is_union(_Tp)> {};
@@ -834,7 +860,7 @@
 
 // is_class
 
-#if __has_feature(is_class) || (_GNUC_VER >= 403)
+#if __has_feature(is_class) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_class
     : public integral_constant<bool, __is_class(_Tp)> {};
@@ -858,17 +884,6 @@
     = is_class<_Tp>::value;
 #endif
 
-// is_same
-
-template <class _Tp, class _Up> struct _LIBCPP_TEMPLATE_VIS is_same           : public false_type {};
-template <class _Tp>            struct _LIBCPP_TEMPLATE_VIS is_same<_Tp, _Tp> : public true_type {};
-
-#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp, class _Up>
-_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_same_v
-    = is_same<_Tp, _Up>::value;
-#endif
-
 // is_function
 
 namespace __libcpp_is_function_imp
@@ -956,7 +971,7 @@
 
 // is_enum
 
-#if __has_feature(is_enum) || (_GNUC_VER >= 403)
+#if __has_feature(is_enum) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_enum
     : public integral_constant<bool, __is_enum(_Tp)> {};
@@ -1060,7 +1075,7 @@
 
 template <class _Tp>
 struct __is_referenceable : integral_constant<bool,
-    !is_same<decltype(__is_referenceable_impl::__test<_Tp>(0)), __two>::value> {};
+    _IsNotSame<decltype(__is_referenceable_impl::__test<_Tp>(0)), __two>::value> {};
 
 
 // add_const
@@ -1068,13 +1083,13 @@
 template <class _Tp, bool = is_reference<_Tp>::value ||
                             is_function<_Tp>::value  ||
                             is_const<_Tp>::value     >
-struct __add_const             {typedef _Tp type;};
+struct __add_const             {typedef _LIBCPP_NODEBUG_TYPE  _Tp type;};
 
 template <class _Tp>
-struct __add_const<_Tp, false> {typedef const _Tp type;};
+struct __add_const<_Tp, false> {typedef _LIBCPP_NODEBUG_TYPE  const _Tp type;};
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS add_const
-    {typedef typename __add_const<_Tp>::type type;};
+    {typedef _LIBCPP_NODEBUG_TYPE  typename __add_const<_Tp>::type type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using add_const_t = typename add_const<_Tp>::type;
@@ -1091,7 +1106,7 @@
 struct __add_volatile<_Tp, false> {typedef volatile _Tp type;};
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS add_volatile
-    {typedef typename __add_volatile<_Tp>::type type;};
+    {typedef _LIBCPP_NODEBUG_TYPE typename __add_volatile<_Tp>::type type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using add_volatile_t = typename add_volatile<_Tp>::type;
@@ -1100,7 +1115,7 @@
 // add_cv
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS add_cv
-    {typedef typename add_const<typename add_volatile<_Tp>::type>::type type;};
+    {typedef _LIBCPP_NODEBUG_TYPE typename add_const<typename add_volatile<_Tp>::type>::type type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using add_cv_t = typename add_cv<_Tp>::type;
@@ -1108,11 +1123,9 @@
 
 // remove_reference
 
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference        {typedef _Tp type;};
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&>  {typedef _Tp type;};
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&&> {typedef _Tp type;};
-#endif
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference        {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&>  {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&&> {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using remove_reference_t = typename remove_reference<_Tp>::type;
@@ -1120,32 +1133,26 @@
 
 // add_lvalue_reference
 
-template <class _Tp, bool = __is_referenceable<_Tp>::value> struct __add_lvalue_reference_impl            { typedef _Tp  type; };
-template <class _Tp                                       > struct __add_lvalue_reference_impl<_Tp, true> { typedef _Tp& type; };
+template <class _Tp, bool = __is_referenceable<_Tp>::value> struct __add_lvalue_reference_impl            { typedef _LIBCPP_NODEBUG_TYPE _Tp  type; };
+template <class _Tp                                       > struct __add_lvalue_reference_impl<_Tp, true> { typedef _LIBCPP_NODEBUG_TYPE _Tp& type; };
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS add_lvalue_reference
-{typedef typename __add_lvalue_reference_impl<_Tp>::type type;};
+{typedef _LIBCPP_NODEBUG_TYPE typename  __add_lvalue_reference_impl<_Tp>::type type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
 #endif
 
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-template <class _Tp, bool = __is_referenceable<_Tp>::value> struct __add_rvalue_reference_impl            { typedef _Tp   type; };
-template <class _Tp                                       > struct __add_rvalue_reference_impl<_Tp, true> { typedef _Tp&& type; };
+template <class _Tp, bool = __is_referenceable<_Tp>::value> struct __add_rvalue_reference_impl            { typedef _LIBCPP_NODEBUG_TYPE  _Tp   type; };
+template <class _Tp                                       > struct __add_rvalue_reference_impl<_Tp, true> { typedef _LIBCPP_NODEBUG_TYPE  _Tp&& type; };
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS add_rvalue_reference
-{typedef typename __add_rvalue_reference_impl<_Tp>::type type;};
+{typedef _LIBCPP_NODEBUG_TYPE  typename __add_rvalue_reference_impl<_Tp>::type type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
 #endif
 
-#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
 template <class _Tp> _Tp&& __declval(int);
 template <class _Tp> _Tp   __declval(long);
 
@@ -1153,35 +1160,27 @@
 decltype(_VSTD::__declval<_Tp>(0))
 declval() _NOEXCEPT;
 
-#else  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-template <class _Tp>
-typename add_lvalue_reference<_Tp>::type
-declval();
-
-#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
 // __uncvref
 
 template <class _Tp>
 struct __uncvref  {
-    typedef typename remove_cv<typename remove_reference<_Tp>::type>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename remove_cv<typename remove_reference<_Tp>::type>::type type;
 };
 
 template <class _Tp>
 struct __unconstref {
-    typedef typename remove_const<typename remove_reference<_Tp>::type>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename remove_const<typename remove_reference<_Tp>::type>::type type;
 };
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Tp>
-using __uncvref_t = typename __uncvref<_Tp>::type;
+using __uncvref_t _LIBCPP_NODEBUG_TYPE = typename __uncvref<_Tp>::type;
 #endif
 
 // __is_same_uncvref
 
 template <class _Tp, class _Up>
-struct __is_same_uncvref : is_same<typename __uncvref<_Tp>::type,
+struct __is_same_uncvref : _IsSame<typename __uncvref<_Tp>::type,
                                    typename __uncvref<_Up>::type> {};
 
 #if _LIBCPP_STD_VER > 17
@@ -1200,11 +1199,11 @@
 
 // remove_pointer
 
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer                      {typedef _Tp type;};
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp*>                {typedef _Tp type;};
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp* const>          {typedef _Tp type;};
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp* volatile>       {typedef _Tp type;};
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp* const volatile> {typedef _Tp type;};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer                      {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp*>                {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp* const>          {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp* volatile>       {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_pointer<_Tp* const volatile> {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using remove_pointer_t = typename remove_pointer<_Tp>::type;
@@ -1214,14 +1213,14 @@
 
 template <class _Tp,
         bool = __is_referenceable<_Tp>::value ||
-                is_same<typename remove_cv<_Tp>::type, void>::value>
+                _IsSame<typename remove_cv<_Tp>::type, void>::value>
 struct __add_pointer_impl
-    {typedef typename remove_reference<_Tp>::type* type;};
+    {typedef _LIBCPP_NODEBUG_TYPE typename remove_reference<_Tp>::type* type;};
 template <class _Tp> struct __add_pointer_impl<_Tp, false>
-    {typedef _Tp type;};
+    {typedef _LIBCPP_NODEBUG_TYPE _Tp type;};
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS add_pointer
-    {typedef typename __add_pointer_impl<_Tp>::type type;};
+    {typedef _LIBCPP_NODEBUG_TYPE typename __add_pointer_impl<_Tp>::type type;};
 
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using add_pointer_t = typename add_pointer<_Tp>::type;
@@ -1335,17 +1334,37 @@
 template <class _Tp> using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
 #endif
 
+#if _LIBCPP_STD_VER > 17
+// is_bounded_array
+
+template <class>                 struct _LIBCPP_TEMPLATE_VIS is_bounded_array           : false_type {};
+template <class _Tp, size_t _Np> struct _LIBCPP_TEMPLATE_VIS is_bounded_array<_Tp[_Np]> : true_type {};
+
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR
+bool is_bounded_array_v  = is_bounded_array<_Tp>::value;
+
+// is_unbounded_array
+
+template <class>     struct _LIBCPP_TEMPLATE_VIS is_unbounded_array        : false_type {};
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_unbounded_array<_Tp[]> : true_type {};
+
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR
+bool is_unbounded_array_v  = is_unbounded_array<_Tp>::value;
+#endif
+
 // decay
 
 template <class _Up, bool>
 struct __decay {
-    typedef typename remove_cv<_Up>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename remove_cv<_Up>::type type;
 };
 
 template <class _Up>
 struct __decay<_Up, true> {
 public:
-    typedef typename conditional
+    typedef _LIBCPP_NODEBUG_TYPE typename conditional
                      <
                          is_array<_Up>::value,
                          typename remove_extent<_Up>::type*,
@@ -1362,9 +1381,9 @@
 struct _LIBCPP_TEMPLATE_VIS decay
 {
 private:
-    typedef typename remove_reference<_Tp>::type _Up;
+    typedef _LIBCPP_NODEBUG_TYPE typename remove_reference<_Tp>::type _Up;
 public:
-    typedef typename __decay<_Up, __is_referenceable<_Up>::value>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename __decay<_Up, __is_referenceable<_Up>::value>::type type;
 };
 
 #if _LIBCPP_STD_VER > 11
@@ -1384,15 +1403,10 @@
 
 // is_final
 
-#if defined(_LIBCPP_HAS_IS_FINAL)
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS
 __libcpp_is_final : public integral_constant<bool, __is_final(_Tp)> {};
-#else
-template <class _Tp> struct _LIBCPP_TEMPLATE_VIS
-__libcpp_is_final : public false_type {};
-#endif
 
-#if defined(_LIBCPP_HAS_IS_FINAL) && _LIBCPP_STD_VER > 11
+#if _LIBCPP_STD_VER > 11
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS
 is_final : public integral_constant<bool, __is_final(_Tp)> {};
 #endif
@@ -1419,39 +1433,10 @@
 
 // is_base_of
 
-#ifdef _LIBCPP_HAS_IS_BASE_OF
-
 template <class _Bp, class _Dp>
 struct _LIBCPP_TEMPLATE_VIS is_base_of
     : public integral_constant<bool, __is_base_of(_Bp, _Dp)> {};
 
-#else  // _LIBCPP_HAS_IS_BASE_OF
-
-namespace __is_base_of_imp
-{
-template <class _Tp>
-struct _Dst
-{
-    _Dst(const volatile _Tp &);
-};
-template <class _Tp>
-struct _Src
-{
-    operator const volatile _Tp &();
-    template <class _Up> operator const _Dst<_Up> &();
-};
-template <size_t> struct __one { typedef char type; };
-template <class _Bp, class _Dp> typename __one<sizeof(_Dst<_Bp>(declval<_Src<_Dp> >()))>::type __test(int);
-template <class _Bp, class _Dp> __two __test(...);
-}
-
-template <class _Bp, class _Dp>
-struct _LIBCPP_TEMPLATE_VIS is_base_of
-    : public integral_constant<bool, is_class<_Bp>::value &&
-                                     sizeof(__is_base_of_imp::__test<_Bp, _Dp>(0)) == 2> {};
-
-#endif  // _LIBCPP_HAS_IS_BASE_OF
-
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Bp, class _Dp>
 _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_base_of_v
@@ -1508,14 +1493,6 @@
 struct __is_convertible
     : public integral_constant<bool,
         __is_convertible_imp::__is_convertible_test<_T1, _T2>::value
-#if defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES)
-         && !(!is_function<_T1>::value && !is_reference<_T1>::value && is_reference<_T2>::value
-              && (!is_const<typename remove_reference<_T2>::type>::value
-                  || is_volatile<typename remove_reference<_T2>::type>::value)
-                  && (is_same<typename remove_cv<_T1>::type,
-                              typename remove_cv<typename remove_reference<_T2>::type>::type>::value
-                      || is_base_of<typename remove_reference<_T2>::type, _T1>::value))
-#endif
     >
 {};
 
@@ -1549,9 +1526,35 @@
     = is_convertible<_From, _To>::value;
 #endif
 
+// is_nothrow_convertible
+
+#if _LIBCPP_STD_VER > 17
+
+template <typename _Tp>
+static void __test_noexcept(_Tp) noexcept;
+
+template<typename _Fm, typename _To>
+static bool_constant<noexcept(__test_noexcept<_To>(declval<_Fm>()))>
+__is_nothrow_convertible_test();
+
+template <typename _Fm, typename _To>
+struct __is_nothrow_convertible_helper: decltype(__is_nothrow_convertible_test<_Fm, _To>())
+{ };
+
+template <typename _Fm, typename _To>
+struct is_nothrow_convertible : _Or<
+    _And<is_void<_To>, is_void<_Fm>>,
+    _Lazy<_And, is_convertible<_Fm, _To>, __is_nothrow_convertible_helper<_Fm, _To>>
+>::type { };
+
+template <typename _Fm, typename _To>
+inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<_Fm, _To>::value;
+
+#endif // _LIBCPP_STD_VER > 17
+
 // is_empty
 
-#if __has_feature(is_empty) || (_GNUC_VER >= 407)
+#if __has_feature(is_empty) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Tp>
 struct _LIBCPP_TEMPLATE_VIS is_empty
@@ -1614,7 +1617,7 @@
 
 // has_virtual_destructor
 
-#if __has_feature(has_virtual_destructor) || (_GNUC_VER >= 403)
+#if __has_feature(has_virtual_destructor) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS has_virtual_destructor
     : public integral_constant<bool, __has_virtual_destructor(_Tp)> {};
@@ -1702,6 +1705,9 @@
     __nat
     > > > > > > > > > > __all_types;
 
+template <size_t _Align>
+struct _ALIGNAS(_Align) __fallback_overaligned {};
+
 template <class _TL, size_t _Align> struct __find_pod;
 
 template <class _Hp, size_t _Align>
@@ -1710,7 +1716,7 @@
     typedef typename conditional<
                              _Align == _Hp::value,
                              typename _Hp::type,
-                             void
+                             __fallback_overaligned<_Align>
                          >::type type;
 };
 
@@ -1747,7 +1753,6 @@
 struct _LIBCPP_TEMPLATE_VIS aligned_storage
 {
     typedef typename __find_pod<__all_types, _Align>::type _Aligner;
-    static_assert(!is_void<_Aligner>::value, "");
     union type
     {
         _Aligner __align;
@@ -1791,7 +1796,6 @@
 
 #undef _CREATE_ALIGNED_STORAGE_SPECIALIZATION
 
-#ifndef _LIBCPP_HAS_NO_VARIADICS
 
 // aligned_union
 
@@ -1825,8 +1829,6 @@
 template <size_t _Len, class ..._Types> using aligned_union_t = typename aligned_union<_Len, _Types...>::type;
 #endif
 
-#endif  // _LIBCPP_HAS_NO_VARIADICS
-
 template <class _Tp>
 struct __numeric_type
 {
@@ -1843,7 +1845,7 @@
    static long double __test(long double);
 
    typedef decltype(__test(declval<_Tp>())) type;
-   static const bool value = !is_same<type, void>::value;
+   static const bool value = _IsNotSame<type, void>::value;
 };
 
 template <>
@@ -1935,26 +1937,26 @@
 template <class _Hp, class _Tp, size_t _Size>
 struct __find_first<__type_list<_Hp, _Tp>, _Size, true>
 {
-    typedef _Hp type;
+    typedef _LIBCPP_NODEBUG_TYPE _Hp type;
 };
 
 template <class _Hp, class _Tp, size_t _Size>
 struct __find_first<__type_list<_Hp, _Tp>, _Size, false>
 {
-    typedef typename __find_first<_Tp, _Size>::type type;
+    typedef _LIBCPP_NODEBUG_TYPE typename __find_first<_Tp, _Size>::type type;
 };
 
 template <class _Tp, class _Up, bool = is_const<typename remove_reference<_Tp>::type>::value,
                              bool = is_volatile<typename remove_reference<_Tp>::type>::value>
 struct __apply_cv
 {
-    typedef _Up type;
+    typedef _LIBCPP_NODEBUG_TYPE _Up type;
 };
 
 template <class _Tp, class _Up>
 struct __apply_cv<_Tp, _Up, true, false>
 {
-    typedef const _Up type;
+    typedef _LIBCPP_NODEBUG_TYPE const _Up type;
 };
 
 template <class _Tp, class _Up>
@@ -2059,87 +2061,43 @@
 template <class _Tp> using make_unsigned_t = typename make_unsigned<_Tp>::type;
 #endif
 
-#ifdef _LIBCPP_HAS_NO_VARIADICS
-
-template <class _Tp, class _Up = void, class _Vp = void>
-struct _LIBCPP_TEMPLATE_VIS common_type
-{
-public:
-    typedef typename common_type<typename common_type<_Tp, _Up>::type, _Vp>::type type;
-};
-
-template <>
-struct _LIBCPP_TEMPLATE_VIS common_type<void, void, void>
-{
-public:
-    typedef void type;
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS common_type<_Tp, void, void>
-{
-public:
-    typedef typename common_type<_Tp, _Tp>::type type;
-};
-
-template <class _Tp, class _Up>
-struct _LIBCPP_TEMPLATE_VIS common_type<_Tp, _Up, void>
-{
-    typedef typename decay<decltype(
-        true ? _VSTD::declval<_Tp>() : _VSTD::declval<_Up>()
-      )>::type type;
-};
-
-#else  // _LIBCPP_HAS_NO_VARIADICS
-
-// bullet 1 - sizeof...(Tp) == 0
-
-template <class ..._Tp>
-struct _LIBCPP_TEMPLATE_VIS common_type {};
-
-// bullet 2 - sizeof...(Tp) == 1
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS common_type<_Tp>
-    : public common_type<_Tp, _Tp> {};
-
-// bullet 3 - sizeof...(Tp) == 2
-
 template <class _Tp, class _Up, class = void>
 struct __common_type2_imp {};
 
 template <class _Tp, class _Up>
 struct __common_type2_imp<_Tp, _Up,
-    typename __void_t<decltype(
-        true ? _VSTD::declval<_Tp>() : _VSTD::declval<_Up>()
-    )>::type>
+                          typename __void_t<decltype(
+                                            true ? _VSTD::declval<_Tp>() : _VSTD::declval<_Up>()
+                                            )>::type>
 {
-    typedef typename decay<decltype(
-        true ? _VSTD::declval<_Tp>() : _VSTD::declval<_Up>()
-    )>::type type;
+  typedef _LIBCPP_NODEBUG_TYPE typename decay<decltype(
+                         true ? _VSTD::declval<_Tp>() : _VSTD::declval<_Up>()
+                         )>::type type;
 };
 
-template <class _Tp, class _Up,
-          class _DTp = typename decay<_Tp>::type,
-          class _DUp = typename decay<_Up>::type>
-using __common_type2 =
-  typename conditional<
-    is_same<_Tp, _DTp>::value && is_same<_Up, _DUp>::value,
-    __common_type2_imp<_Tp, _Up>,
-    common_type<_DTp, _DUp>
-  >::type;
-
-template <class _Tp, class _Up>
-struct _LIBCPP_TEMPLATE_VIS common_type<_Tp, _Up>
-    : __common_type2<_Tp, _Up> {};
-
-// bullet 4 - sizeof...(Tp) > 2
-
-template <class ...Tp> struct __common_types;
-
 template <class, class = void>
 struct __common_type_impl {};
 
+// Clang provides variadic templates in C++03 as an extension.
+#if !defined(_LIBCPP_CXX03_LANG) || defined(__clang__)
+# define _LIBCPP_OPTIONAL_PACK(...) , __VA_ARGS__
+template <class... Tp>
+struct __common_types;
+template <class... _Tp>
+struct _LIBCPP_TEMPLATE_VIS common_type;
+#else
+# define _LIBCPP_OPTIONAL_PACK(...)
+struct __no_arg;
+template <class _Tp, class _Up, class = __no_arg>
+struct __common_types;
+template <class _Tp = __no_arg, class _Up = __no_arg, class _Vp = __no_arg,
+          class _Unused = __no_arg>
+struct common_type {
+  static_assert(sizeof(_Unused) == 0,
+                "common_type accepts at most 3 arguments in C++03");
+};
+#endif // _LIBCPP_CXX03_LANG
+
 template <class _Tp, class _Up>
 struct __common_type_impl<
     __common_types<_Tp, _Up>,
@@ -2148,28 +2106,53 @@
   typedef typename common_type<_Tp, _Up>::type type;
 };
 
-template <class _Tp, class _Up, class ..._Vp>
-struct __common_type_impl<__common_types<_Tp, _Up, _Vp...>,
+template <class _Tp, class _Up, class _Vp _LIBCPP_OPTIONAL_PACK(class... _Rest)>
+struct __common_type_impl<
+    __common_types<_Tp, _Up, _Vp _LIBCPP_OPTIONAL_PACK(_Rest...)>,
     typename __void_t<typename common_type<_Tp, _Up>::type>::type>
-  : __common_type_impl<
-      __common_types<typename common_type<_Tp, _Up>::type, _Vp...> >
-{
-
+    : __common_type_impl<__common_types<typename common_type<_Tp, _Up>::type,
+                                        _Vp _LIBCPP_OPTIONAL_PACK(_Rest...)> > {
 };
 
-template <class _Tp, class _Up, class ..._Vp>
-struct _LIBCPP_TEMPLATE_VIS common_type<_Tp, _Up, _Vp...>
-    : __common_type_impl<__common_types<_Tp, _Up, _Vp...> > {};
+// bullet 1 - sizeof...(Tp) == 0
+
+template <>
+struct _LIBCPP_TEMPLATE_VIS common_type<> {};
+
+// bullet 2 - sizeof...(Tp) == 1
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS common_type<_Tp>
+    : public common_type<_Tp, _Tp> {};
+
+// bullet 3 - sizeof...(Tp) == 2
+
+template <class _Tp, class _Up>
+struct _LIBCPP_TEMPLATE_VIS common_type<_Tp, _Up>
+    : conditional<
+        _IsSame<_Tp, typename decay<_Tp>::type>::value && _IsSame<_Up, typename decay<_Up>::type>::value,
+        __common_type2_imp<_Tp, _Up>,
+        common_type<typename decay<_Tp>::type, typename decay<_Up>::type>
+    >::type
+{};
+
+// bullet 4 - sizeof...(Tp) > 2
+
+template <class _Tp, class _Up, class _Vp _LIBCPP_OPTIONAL_PACK(class... _Rest)>
+struct _LIBCPP_TEMPLATE_VIS
+    common_type<_Tp, _Up, _Vp _LIBCPP_OPTIONAL_PACK(_Rest...)>
+    : __common_type_impl<
+          __common_types<_Tp, _Up, _Vp _LIBCPP_OPTIONAL_PACK(_Rest...)> > {};
+
+#undef _LIBCPP_OPTIONAL_PACK
 
 #if _LIBCPP_STD_VER > 11
 template <class ..._Tp> using common_type_t = typename common_type<_Tp...>::type;
 #endif
 
-#endif  // _LIBCPP_HAS_NO_VARIADICS
-
 // is_assignable
 
-template<typename, typename _Tp> struct __select_2nd { typedef _Tp type; };
+template<typename, typename _Tp> struct __select_2nd { typedef _LIBCPP_NODEBUG_TYPE _Tp type; };
 
 template <class _Tp, class _Arg>
 typename __select_2nd<decltype((_VSTD::declval<_Tp>() = _VSTD::declval<_Arg>())), true_type>::type
@@ -2214,12 +2197,8 @@
 // is_move_assignable
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_move_assignable
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
     : public is_assignable<typename add_lvalue_reference<_Tp>::type,
                            typename add_rvalue_reference<_Tp>::type> {};
-#else
-    : public is_copy_assignable<_Tp> {};
-#endif
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp>
@@ -2293,14 +2272,12 @@
 
 // move
 
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
 template <class _Tp>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
 typename remove_reference<_Tp>::type&&
 move(_Tp&& __t) _NOEXCEPT
 {
-    typedef typename remove_reference<_Tp>::type _Up;
+    typedef _LIBCPP_NODEBUG_TYPE typename remove_reference<_Tp>::type _Up;
     return static_cast<_Up&&>(__t);
 }
 
@@ -2322,49 +2299,6 @@
     return static_cast<_Tp&&>(__t);
 }
 
-#else  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
-_Tp&
-move(_Tp& __t)
-{
-    return __t;
-}
-
-template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
-const _Tp&
-move(const _Tp& __t)
-{
-    return __t;
-}
-
-template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
-_Tp&
-forward(typename remove_reference<_Tp>::type& __t) _NOEXCEPT
-{
-    return __t;
-}
-
-
-template <class _Tp>
-class __rv
-{
-    typedef typename remove_reference<_Tp>::type _Trr;
-    _Trr& t_;
-public:
-    _LIBCPP_INLINE_VISIBILITY
-    _Trr* operator->() {return &t_;}
-    _LIBCPP_INLINE_VISIBILITY
-    explicit __rv(_Trr& __t) : t_(__t) {}
-};
-
-#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
 template <class _Tp>
 inline _LIBCPP_INLINE_VISIBILITY
 typename decay<_Tp>::type
@@ -2373,20 +2307,6 @@
     return _VSTD::forward<_Tp>(__t);
 }
 
-#else
-
-template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
-typename decay<_Tp>::type
-__decay_copy(const _Tp& __t)
-{
-    return _VSTD::forward<_Tp>(__t);
-}
-
-#endif
-
-#ifndef _LIBCPP_HAS_NO_VARIADICS
-
 template <class _Rp, class _Class, class ..._Param>
 struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...), true, false>
 {
@@ -2451,8 +2371,7 @@
     typedef _Rp (_FnType) (_Param..., ...);
 };
 
-#if __has_feature(cxx_reference_qualified_functions) || \
-    (defined(_GNUC_VER) && _GNUC_VER >= 409)
+#if __has_feature(cxx_reference_qualified_functions) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Rp, class _Class, class ..._Param>
 struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) &, true, false>
@@ -2582,267 +2501,8 @@
     typedef _Rp (_FnType) (_Param..., ...);
 };
 
-#endif  // __has_feature(cxx_reference_qualified_functions) || _GNUC_VER >= 409
+#endif  // __has_feature(cxx_reference_qualified_functions) || defined(_LIBCPP_COMPILER_GCC)
 
-#else  // _LIBCPP_HAS_NO_VARIADICS
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) ();
-};
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(...), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (...);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...), true, false>
-{
-    typedef _Class _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
-};
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)() const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) ();
-};
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(...) const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (...);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...) const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...) const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...) const, true, false>
-{
-    typedef _Class const _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
-};
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)() volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) ();
-};
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(...) volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (...);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...) volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...) volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...) volatile, true, false>
-{
-    typedef _Class volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
-};
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)() const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) ();
-};
-
-template <class _Rp, class _Class>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(...) const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (...);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0) const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0);
-};
-
-template <class _Rp, class _Class, class _P0>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, ...) const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1) const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, ...) const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, ...);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2) const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2);
-};
-
-template <class _Rp, class _Class, class _P0, class _P1, class _P2>
-struct __member_pointer_traits_imp<_Rp (_Class::*)(_P0, _P1, _P2, ...) const volatile, true, false>
-{
-    typedef _Class const volatile _ClassType;
-    typedef _Rp _ReturnType;
-    typedef _Rp (_FnType) (_P0, _P1, _P2, ...);
-};
-
-#endif  // _LIBCPP_HAS_NO_VARIADICS
 
 template <class _Rp, class _Class>
 struct __member_pointer_traits_imp<_Rp _Class::*, false, true>
@@ -3041,10 +2701,10 @@
   static_assert(is_reference<_To>::value, "Wrong specialization");
   using _RawFrom = __uncvref_t<_From>;
   using _RawTo = __uncvref_t<_To>;
-  static const bool value = __lazy_and<
-        __lazy_not<is_same<_RawFrom, _RawTo>>,
+  static const bool value = _And<
+        _IsNotSame<_RawFrom, _RawTo>,
         is_base_of<_RawFrom, _RawTo>,
-        __lazy_not<__libcpp_is_constructible<_RawTo, _From>>
+        _Not<__libcpp_is_constructible<_RawTo, _From>>
   >::value;
 };
 
@@ -3057,10 +2717,10 @@
 struct __is_invalid_lvalue_to_rvalue_cast<_ToRef&&, _FromRef&> {
   using _RawFrom = __uncvref_t<_FromRef>;
   using _RawTo = __uncvref_t<_ToRef>;
-  static const bool value = __lazy_and<
-      __lazy_not<is_function<_RawTo>>,
-      __lazy_or<
-        is_same<_RawFrom, _RawTo>,
+  static const bool value = _And<
+      _Not<is_function<_RawTo>>,
+      _Or<
+        _IsSame<_RawFrom, _RawTo>,
         is_base_of<_RawTo, _RawFrom>>
     >::value;
 };
@@ -3151,241 +2811,13 @@
 struct _LIBCPP_TEMPLATE_VIS is_constructible
     : public integral_constant<bool, __is_constructible(_Tp, _Args...)>
     {};
-#elif !defined(_LIBCPP_CXX03_LANG)
+#else
 template <class _Tp, class... _Args>
 struct _LIBCPP_TEMPLATE_VIS is_constructible
     : public __libcpp_is_constructible<_Tp, _Args...>::type {};
-#else
-// template <class T> struct is_constructible0;
+#endif
 
-//      main is_constructible0 test
-
-template <class _Tp>
-decltype((_Tp(), true_type()))
-__is_constructible0_test(_Tp&);
-
-false_type
-__is_constructible0_test(__any);
-
-template <class _Tp, class _A0>
-decltype((_Tp(_VSTD::declval<_A0>()), true_type()))
-__is_constructible1_test(_Tp&, _A0&);
-
-template <class _A0>
-false_type
-__is_constructible1_test(__any, _A0&);
-
-template <class _Tp, class _A0, class _A1>
-decltype((_Tp(_VSTD::declval<_A0>(), _VSTD::declval<_A1>()), true_type()))
-__is_constructible2_test(_Tp&, _A0&, _A1&);
-
-template <class _A0, class _A1>
-false_type
-__is_constructible2_test(__any, _A0&, _A1&);
-
-template <class _Tp, class _A0, class _A1, class _A2>
-decltype((_Tp(_VSTD::declval<_A0>(), _VSTD::declval<_A1>(), _VSTD::declval<_A2>()), true_type()))
-__is_constructible3_test(_Tp&, _A0&, _A1&, _A2&);
-
-template <class _A0, class _A1, class _A2>
-false_type
-__is_constructible3_test(__any, _A0&, _A1&, _A2&);
-
-template <bool, class _Tp>
-struct __is_constructible0_imp // false, _Tp is not a scalar
-    : public common_type
-             <
-                 decltype(__is_constructible0_test(declval<_Tp&>()))
-             >::type
-    {};
-
-template <bool, class _Tp, class _A0>
-struct __is_constructible1_imp // false, _Tp is not a scalar
-    : public common_type
-             <
-                 decltype(__is_constructible1_test(declval<_Tp&>(), declval<_A0&>()))
-             >::type
-    {};
-
-template <bool, class _Tp, class _A0, class _A1>
-struct __is_constructible2_imp // false, _Tp is not a scalar
-    : public common_type
-             <
-                 decltype(__is_constructible2_test(declval<_Tp&>(), declval<_A0>(), declval<_A1>()))
-             >::type
-    {};
-
-template <bool, class _Tp, class _A0, class _A1, class _A2>
-struct __is_constructible3_imp // false, _Tp is not a scalar
-    : public common_type
-             <
-                 decltype(__is_constructible3_test(declval<_Tp&>(), declval<_A0>(), declval<_A1>(), declval<_A2>()))
-             >::type
-    {};
-
-//      handle scalars and reference types
-
-//      Scalars are default constructible, references are not
-
-template <class _Tp>
-struct __is_constructible0_imp<true, _Tp>
-    : public is_scalar<_Tp>
-    {};
-
-template <class _Tp, class _A0>
-struct __is_constructible1_imp<true, _Tp, _A0>
-    : public is_convertible<_A0, _Tp>
-    {};
-
-template <class _Tp, class _A0, class _A1>
-struct __is_constructible2_imp<true, _Tp, _A0, _A1>
-    : public false_type
-    {};
-
-template <class _Tp, class _A0, class _A1, class _A2>
-struct __is_constructible3_imp<true, _Tp, _A0, _A1, _A2>
-    : public false_type
-    {};
-
-//      Treat scalars and reference types separately
-
-template <bool, class _Tp>
-struct __is_constructible0_void_check
-    : public __is_constructible0_imp<is_scalar<_Tp>::value || is_reference<_Tp>::value,
-                                _Tp>
-    {};
-
-template <bool, class _Tp, class _A0>
-struct __is_constructible1_void_check
-    : public __is_constructible1_imp<is_scalar<_Tp>::value || is_reference<_Tp>::value,
-                                _Tp, _A0>
-    {};
-
-template <bool, class _Tp, class _A0, class _A1>
-struct __is_constructible2_void_check
-    : public __is_constructible2_imp<is_scalar<_Tp>::value || is_reference<_Tp>::value,
-                                _Tp, _A0, _A1>
-    {};
-
-template <bool, class _Tp, class _A0, class _A1, class _A2>
-struct __is_constructible3_void_check
-    : public __is_constructible3_imp<is_scalar<_Tp>::value || is_reference<_Tp>::value,
-                                _Tp, _A0, _A1, _A2>
-    {};
-
-//      If any of T or Args is void, is_constructible should be false
-
-template <class _Tp>
-struct __is_constructible0_void_check<true, _Tp>
-    : public false_type
-    {};
-
-template <class _Tp, class _A0>
-struct __is_constructible1_void_check<true, _Tp, _A0>
-    : public false_type
-    {};
-
-template <class _Tp, class _A0, class _A1>
-struct __is_constructible2_void_check<true, _Tp, _A0, _A1>
-    : public false_type
-    {};
-
-template <class _Tp, class _A0, class _A1, class _A2>
-struct __is_constructible3_void_check<true, _Tp, _A0, _A1, _A2>
-    : public false_type
-    {};
-
-//      is_constructible entry point
-
-template <class _Tp, class _A0 = __is_construct::__nat,
-                     class _A1 = __is_construct::__nat,
-                     class _A2 = __is_construct::__nat>
-struct _LIBCPP_TEMPLATE_VIS is_constructible
-    : public __is_constructible3_void_check<is_void<_Tp>::value
-                                        || is_abstract<_Tp>::value
-                                        || is_function<_Tp>::value
-                                        || is_void<_A0>::value
-                                        || is_void<_A1>::value
-                                        || is_void<_A2>::value,
-                                           _Tp, _A0, _A1, _A2>
-    {};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_constructible<_Tp, __is_construct::__nat, __is_construct::__nat>
-    : public __is_constructible0_void_check<is_void<_Tp>::value
-                                        || is_abstract<_Tp>::value
-                                        || is_function<_Tp>::value,
-                                           _Tp>
-    {};
-
-template <class _Tp, class _A0>
-struct _LIBCPP_TEMPLATE_VIS is_constructible<_Tp, _A0, __is_construct::__nat>
-    : public __is_constructible1_void_check<is_void<_Tp>::value
-                                        || is_abstract<_Tp>::value
-                                        || is_function<_Tp>::value
-                                        || is_void<_A0>::value,
-                                           _Tp, _A0>
-    {};
-
-template <class _Tp, class _A0, class _A1>
-struct _LIBCPP_TEMPLATE_VIS is_constructible<_Tp, _A0, _A1, __is_construct::__nat>
-    : public __is_constructible2_void_check<is_void<_Tp>::value
-                                        || is_abstract<_Tp>::value
-                                        || is_function<_Tp>::value
-                                        || is_void<_A0>::value
-                                        || is_void<_A1>::value,
-                                           _Tp, _A0, _A1>
-    {};
-
-//      Array types are default constructible if their element type
-//      is default constructible
-
-template <class _Ap, size_t _Np>
-struct __is_constructible0_imp<false, _Ap[_Np]>
-    : public is_constructible<typename remove_all_extents<_Ap>::type>
-    {};
-
-template <class _Ap, size_t _Np, class _A0>
-struct __is_constructible1_imp<false, _Ap[_Np], _A0>
-    : public false_type
-    {};
-
-template <class _Ap, size_t _Np, class _A0, class _A1>
-struct __is_constructible2_imp<false, _Ap[_Np], _A0, _A1>
-    : public false_type
-    {};
-
-template <class _Ap, size_t _Np, class _A0, class _A1, class _A2>
-struct __is_constructible3_imp<false, _Ap[_Np], _A0, _A1, _A2>
-    : public false_type
-    {};
-
-//      Incomplete array types are not constructible
-
-template <class _Ap>
-struct __is_constructible0_imp<false, _Ap[]>
-    : public false_type
-    {};
-
-template <class _Ap, class _A0>
-struct __is_constructible1_imp<false, _Ap[], _A0>
-    : public false_type
-    {};
-
-template <class _Ap, class _A0, class _A1>
-struct __is_constructible2_imp<false, _Ap[], _A0, _A1>
-    : public false_type
-    {};
-
-template <class _Ap, class _A0, class _A1, class _A2>
-struct __is_constructible3_imp<false, _Ap[], _A0, _A1, _A2>
-    : public false_type
-    {};
-
-#endif // __has_feature(is_constructible)
-
-
-#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
+#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp, class ..._Args>
 _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_constructible_v
     = is_constructible<_Tp, _Args...>::value;
@@ -3421,11 +2853,7 @@
 
 template <class _Tp>
 struct _LIBCPP_TEMPLATE_VIS is_move_constructible
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
     : public is_constructible<_Tp, typename add_rvalue_reference<_Tp>::type>
-#else
-    : public is_copy_constructible<_Tp>
-#endif
     {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -3436,8 +2864,6 @@
 
 // is_trivially_constructible
 
-#ifndef _LIBCPP_HAS_NO_VARIADICS
-
 #if __has_feature(is_trivially_constructible) || _GNUC_VER >= 501
 
 template <class _Tp, class... _Args>
@@ -3456,7 +2882,7 @@
 
 template <class _Tp>
 struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp>
-#if __has_feature(has_trivial_constructor) || (_GNUC_VER >= 403)
+#if __has_feature(has_trivial_constructor) || defined(_LIBCPP_COMPILER_GCC)
     : integral_constant<bool, __has_trivial_constructor(_Tp)>
 #else
     : integral_constant<bool, is_scalar<_Tp>::value>
@@ -3465,11 +2891,7 @@
 };
 
 template <class _Tp>
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, _Tp&&>
-#else
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, _Tp>
-#endif
     : integral_constant<bool, is_scalar<_Tp>::value>
 {
 };
@@ -3488,80 +2910,8 @@
 
 #endif  // !__has_feature(is_trivially_constructible)
 
-#else  // _LIBCPP_HAS_NO_VARIADICS
 
-template <class _Tp, class _A0 = __is_construct::__nat,
-                     class _A1 = __is_construct::__nat>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible
-    : false_type
-{
-};
-
-#if __has_feature(is_trivially_constructible) || _GNUC_VER >= 501
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, __is_construct::__nat,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, __is_trivially_constructible(_Tp)>
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, _Tp,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, __is_trivially_constructible(_Tp, _Tp)>
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, const _Tp&,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, __is_trivially_constructible(_Tp, const _Tp&)>
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, _Tp&,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, __is_trivially_constructible(_Tp, _Tp&)>
-{
-};
-
-#else  // !__has_feature(is_trivially_constructible)
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, __is_construct::__nat,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, is_scalar<_Tp>::value>
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, _Tp,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, is_scalar<_Tp>::value>
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, const _Tp&,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, is_scalar<_Tp>::value>
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_constructible<_Tp, _Tp&,
-                                                       __is_construct::__nat>
-    : integral_constant<bool, is_scalar<_Tp>::value>
-{
-};
-
-#endif  // !__has_feature(is_trivially_constructible)
-
-#endif  // _LIBCPP_HAS_NO_VARIADICS
-
-#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
+#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp, class... _Args>
 _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_trivially_constructible_v
     = is_trivially_constructible<_Tp, _Args...>::value;
@@ -3594,11 +2944,7 @@
 // is_trivially_move_constructible
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_trivially_move_constructible
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
     : public is_trivially_constructible<_Tp, typename add_rvalue_reference<_Tp>::type>
-#else
-    : public is_trivially_copy_constructible<_Tp>
-#endif
     {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -3635,14 +2981,10 @@
 struct is_trivially_assignable<_Tp&, const _Tp&>
     : integral_constant<bool, is_scalar<_Tp>::value> {};
 
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
 template <class _Tp>
 struct is_trivially_assignable<_Tp&, _Tp&&>
     : integral_constant<bool, is_scalar<_Tp>::value> {};
 
-#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
 #endif  // !__has_feature(is_trivially_assignable)
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -3667,11 +3009,7 @@
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_trivially_move_assignable
     : public is_trivially_assignable<typename add_lvalue_reference<_Tp>::type,
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
                                      typename add_rvalue_reference<_Tp>::type>
-#else
-                                     typename add_lvalue_reference<_Tp>::type>
-#endif
     {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -3682,7 +3020,12 @@
 
 // is_trivially_destructible
 
-#if __has_feature(has_trivial_destructor) || (_GNUC_VER >= 403)
+#if __has_keyword(__is_trivially_destructible)
+
+template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_trivially_destructible
+    : public integral_constant<bool, __is_trivially_destructible(_Tp)> {};
+
+#elif __has_feature(has_trivial_destructor) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_trivially_destructible
     : public integral_constant<bool, is_destructible<_Tp>::value && __has_trivial_destructor(_Tp)> {};
@@ -3709,19 +3052,14 @@
 
 // is_nothrow_constructible
 
-#if 0
+#if __has_keyword(__is_nothrow_constructible)
+
 template <class _Tp, class... _Args>
 struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible
-    : public integral_constant<bool, __is_nothrow_constructible(_Tp(_Args...))>
-{
-};
+    : public integral_constant<bool, __is_nothrow_constructible(_Tp, _Args...)> {};
 
 #else
 
-#ifndef _LIBCPP_HAS_NO_VARIADICS
-
-#if __has_feature(cxx_noexcept) || (_GNUC_VER >= 407 && __cplusplus >= 201103L)
-
 template <bool, bool, class _Tp, class... _Args> struct __libcpp_is_nothrow_constructible;
 
 template <class _Tp, class... _Args>
@@ -3757,117 +3095,10 @@
 {
 };
 
-#else  // __has_feature(cxx_noexcept)
+#endif  // _LIBCPP_HAS_NO_NOEXCEPT
 
-template <class _Tp, class... _Args>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible
-    : false_type
-{
-};
 
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp>
-#if __has_feature(has_nothrow_constructor) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_constructor(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-template <class _Tp>
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, _Tp&&>
-#else
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, _Tp>
-#endif
-#if __has_feature(has_nothrow_copy) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_copy(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, const _Tp&>
-#if __has_feature(has_nothrow_copy) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_copy(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, _Tp&>
-#if __has_feature(has_nothrow_copy) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_copy(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-#endif  // __has_feature(cxx_noexcept)
-
-#else  // _LIBCPP_HAS_NO_VARIADICS
-
-template <class _Tp, class _A0 = __is_construct::__nat,
-                     class _A1 = __is_construct::__nat>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible
-    : false_type
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, __is_construct::__nat,
-                                                       __is_construct::__nat>
-#if __has_feature(has_nothrow_constructor) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_constructor(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, _Tp,
-                                                       __is_construct::__nat>
-#if __has_feature(has_nothrow_copy) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_copy(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, const _Tp&,
-                                                       __is_construct::__nat>
-#if __has_feature(has_nothrow_copy) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_copy(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_constructible<_Tp, _Tp&,
-                                                       __is_construct::__nat>
-#if __has_feature(has_nothrow_copy) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_copy(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value>
-#endif
-{
-};
-
-#endif  // _LIBCPP_HAS_NO_VARIADICS
-#endif  // __has_feature(is_nothrow_constructible)
-
-#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
+#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp, class ..._Args>
 _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_nothrow_constructible_v
     = is_nothrow_constructible<_Tp, _Args...>::value;
@@ -3900,11 +3131,7 @@
 // is_nothrow_move_constructible
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_constructible
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
     : public is_nothrow_constructible<_Tp, typename add_rvalue_reference<_Tp>::type>
-#else
-    : public is_nothrow_copy_constructible<_Tp>
-#endif
     {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -3915,7 +3142,13 @@
 
 // is_nothrow_assignable
 
-#if __has_feature(cxx_noexcept) || (_GNUC_VER >= 407 && __cplusplus >= 201103L)
+#if __has_keyword(__is_nothrow_assignable)
+
+template <class _Tp, class _Arg>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_assignable
+    : public integral_constant<bool, __is_nothrow_assignable(_Tp, _Arg)> {};
+
+#else
 
 template <bool, class _Tp, class _Arg> struct __libcpp_is_nothrow_assignable;
 
@@ -3937,49 +3170,7 @@
 {
 };
 
-#else  // __has_feature(cxx_noexcept)
-
-template <class _Tp, class _Arg>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_assignable
-    : public false_type {};
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_assignable<_Tp&, _Tp>
-#if __has_feature(has_nothrow_assign) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_assign(_Tp)> {};
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value> {};
-#endif
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_assignable<_Tp&, _Tp&>
-#if __has_feature(has_nothrow_assign) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_assign(_Tp)> {};
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value> {};
-#endif
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_assignable<_Tp&, const _Tp&>
-#if __has_feature(has_nothrow_assign) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_assign(_Tp)> {};
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value> {};
-#endif
-
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-template <class _Tp>
-struct is_nothrow_assignable<_Tp&, _Tp&&>
-#if __has_feature(has_nothrow_assign) || (_GNUC_VER >= 403)
-    : integral_constant<bool, __has_nothrow_assign(_Tp)> {};
-#else
-    : integral_constant<bool, is_scalar<_Tp>::value> {};
-#endif
-
-#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-#endif  // __has_feature(cxx_noexcept)
+#endif  // _LIBCPP_HAS_NO_NOEXCEPT
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp, class _Arg>
@@ -4003,11 +3194,7 @@
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_assignable
     : public is_nothrow_assignable<typename add_lvalue_reference<_Tp>::type,
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
                                      typename add_rvalue_reference<_Tp>::type>
-#else
-                                     typename add_lvalue_reference<_Tp>::type>
-#endif
     {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -4018,7 +3205,7 @@
 
 // is_nothrow_destructible
 
-#if __has_feature(cxx_noexcept) || (_GNUC_VER >= 407 && __cplusplus >= 201103L)
+#if !defined(_LIBCPP_CXX03_LANG)
 
 template <bool, class _Tp> struct __libcpp_is_nothrow_destructible;
 
@@ -4052,16 +3239,12 @@
 {
 };
 
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
 template <class _Tp>
 struct _LIBCPP_TEMPLATE_VIS is_nothrow_destructible<_Tp&&>
     : public true_type
 {
 };
 
-#endif
-
 #else
 
 template <class _Tp> struct __libcpp_nothrow_destructor
@@ -4085,7 +3268,7 @@
 
 // is_pod
 
-#if __has_feature(is_pod) || (_GNUC_VER >= 403)
+#if __has_feature(is_pod) || defined(_LIBCPP_COMPILER_GCC)
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_pod
     : public integral_constant<bool, __is_pod(_Tp)> {};
@@ -4109,12 +3292,7 @@
 // is_literal_type;
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_literal_type
-#ifdef _LIBCPP_IS_LITERAL
-    : public integral_constant<bool, _LIBCPP_IS_LITERAL(_Tp)>
-#else
-    : integral_constant<bool, is_scalar<typename remove_all_extents<_Tp>::type>::value ||
-                              is_reference<typename remove_all_extents<_Tp>::type>::value>
-#endif
+    : public integral_constant<bool, __is_literal_type(_Tp)>
     {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -4126,7 +3304,7 @@
 // is_standard_layout;
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_standard_layout
-#if __has_feature(is_standard_layout) || (_GNUC_VER >= 407)
+#if __has_feature(is_standard_layout) || defined(_LIBCPP_COMPILER_GCC)
     : public integral_constant<bool, __is_standard_layout(_Tp)>
 #else
     : integral_constant<bool, is_scalar<typename remove_all_extents<_Tp>::type>::value>
@@ -4160,7 +3338,7 @@
 // is_trivial;
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_trivial
-#if __has_feature(is_trivial) || _GNUC_VER >= 407
+#if __has_feature(is_trivial) || defined(_LIBCPP_COMPILER_GCC)
     : public integral_constant<bool, __is_trivial(_Tp)>
 #else
     : integral_constant<bool, is_trivially_copyable<_Tp>::value &&
@@ -4375,7 +3553,7 @@
 
   using type =
   typename conditional<
-      !is_same<_Result, __nat>::value,
+      _IsNotSame<_Result, __nat>::value,
       typename conditional<
           is_void<_Ret>::value,
           true_type,
@@ -4514,6 +3692,7 @@
 #else
 void
 #endif
+_LIBCPP_CONSTEXPR_AFTER_CXX17
 swap(_Tp& __x, _Tp& __y) _NOEXCEPT_(is_nothrow_move_constructible<_Tp>::value &&
                                     is_nothrow_move_assignable<_Tp>::value)
 {
@@ -4523,14 +3702,14 @@
 }
 
 template<class _Tp, size_t _Np>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 typename enable_if<
     __is_swappable<_Tp>::value
 >::type
 swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value);
 
 template <class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 void
 iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
     //                                  _NOEXCEPT_(_NOEXCEPT_(swap(*__a, *__b)))
@@ -4560,8 +3739,8 @@
     typedef decltype((__test_swap<_Tp, _Up>(0))) __swap1;
     typedef decltype((__test_swap<_Up, _Tp>(0))) __swap2;
 
-    static const bool value = !is_same<__swap1, __nat>::value
-                           && !is_same<__swap2, __nat>::value;
+    static const bool value = _IsNotSame<__swap1, __nat>::value
+                           && _IsNotSame<__swap2, __nat>::value;
 };
 
 template <class _Tp, class _Up>
@@ -4651,30 +3830,24 @@
 
 #endif // _LIBCPP_STD_VER > 14
 
-#ifdef _LIBCPP_UNDERLYING_TYPE
+template <class _Tp, bool = is_enum<_Tp>::value> struct __underlying_type_impl;
 
 template <class _Tp>
-struct underlying_type
+struct __underlying_type_impl<_Tp, false> {};
+
+template <class _Tp>
+struct __underlying_type_impl<_Tp, true>
 {
-    typedef _LIBCPP_UNDERLYING_TYPE(_Tp) type;
+    typedef __underlying_type(_Tp) type;
 };
 
+template <class _Tp>
+struct underlying_type : __underlying_type_impl<_Tp, is_enum<_Tp>::value> {};
+
 #if _LIBCPP_STD_VER > 11
 template <class _Tp> using underlying_type_t = typename underlying_type<_Tp>::type;
 #endif
 
-#else  // _LIBCPP_UNDERLYING_TYPE
-
-template <class _Tp, bool _Support = false>
-struct underlying_type
-{
-    static_assert(_Support, "The underyling_type trait requires compiler "
-                            "support. Either no such support exists or "
-                            "libc++ does not know how to use it.");
-};
-
-#endif // _LIBCPP_UNDERLYING_TYPE
-
 
 template <class _Tp, bool = is_enum<_Tp>::value>
 struct __sfinae_underlying_type
@@ -4760,25 +3933,23 @@
 
 template <class...> using void_t = void;
 
-# ifndef _LIBCPP_HAS_NO_VARIADICS
 template <class... _Args>
-struct conjunction : __and_<_Args...> {};
+struct conjunction : _And<_Args...> {};
 template<class... _Args>
 _LIBCPP_INLINE_VAR constexpr bool conjunction_v
     = conjunction<_Args...>::value;
 
 template <class... _Args>
-struct disjunction : __or_<_Args...> {};
+struct disjunction : _Or<_Args...> {};
 template<class... _Args>
 _LIBCPP_INLINE_VAR constexpr bool disjunction_v
     = disjunction<_Args...>::value;
 
 template <class _Tp>
-struct negation : __not_<_Tp> {};
+struct negation : _Not<_Tp> {};
 template<class _Tp>
 _LIBCPP_INLINE_VAR constexpr bool negation_v
     = negation<_Tp>::value;
-# endif // _LIBCPP_HAS_NO_VARIADICS
 #endif  // _LIBCPP_STD_VER > 14
 
 // These traits are used in __tree and __hash_table
@@ -4790,12 +3961,12 @@
 template <class _ValTy, class _Key,
           class _RawValTy = typename __unconstref<_ValTy>::type>
 struct __can_extract_key
-    : conditional<is_same<_RawValTy, _Key>::value, __extract_key_self_tag,
+    : conditional<_IsSame<_RawValTy, _Key>::value, __extract_key_self_tag,
                   __extract_key_fail_tag>::type {};
 
 template <class _Pair, class _Key, class _First, class _Second>
 struct __can_extract_key<_Pair, _Key, pair<_First, _Second>>
-    : conditional<is_same<typename remove_const<_First>::type, _Key>::value,
+    : conditional<_IsSame<typename remove_const<_First>::type, _Key>::value,
                   __extract_key_first_tag, __extract_key_fail_tag>::type {};
 
 // __can_extract_map_key uses true_type/false_type instead of the tags.
@@ -4804,7 +3975,7 @@
 template <class _ValTy, class _Key, class _ContainerValueTy,
           class _RawValTy = typename __unconstref<_ValTy>::type>
 struct __can_extract_map_key
-    : integral_constant<bool, is_same<_RawValTy, _Key>::value> {};
+    : integral_constant<bool, _IsSame<_RawValTy, _Key>::value> {};
 
 // This specialization returns __extract_key_fail_tag for non-map containers
 // because _Key == _ContainerValueTy
@@ -4829,6 +4000,24 @@
 };
 #endif
 
+#ifndef _LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED
+#if _LIBCPP_STD_VER > 17
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr bool is_constant_evaluated() noexcept {
+  return __builtin_is_constant_evaluated();
+}
+#endif
+
+inline _LIBCPP_CONSTEXPR
+bool __libcpp_is_constant_evaluated() _NOEXCEPT { return __builtin_is_constant_evaluated(); }
+#else
+inline _LIBCPP_CONSTEXPR
+bool __libcpp_is_constant_evaluated() _NOEXCEPT { return false; }
+#endif
+
+template <class _CharT>
+using _IsCharLikeType = _And<is_standard_layout<_CharT>, is_trivial<_CharT> >;
+
 _LIBCPP_END_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER > 14
diff --git a/linux-x64/clang/include/c++/v1/typeinfo b/linux-x64/clang/include/c++/v1/typeinfo
index 5bcb6b2..2760176 100644
--- a/linux-x64/clang/include/c++/v1/typeinfo
+++ b/linux-x64/clang/include/c++/v1/typeinfo
@@ -68,17 +68,14 @@
 #pragma GCC system_header
 #endif
 
-#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
+#if defined(_LIBCPP_ABI_VCRUNTIME)
 #include <vcruntime_typeinfo.h>
 #else
 
-#if defined(_LIBCPP_NONUNIQUE_RTTI_BIT) && !defined(_LIBCPP_ABI_MICROSOFT)
-#   define _LIBCPP_HAS_NONUNIQUE_TYPEINFO
-#endif
-
 namespace std  // purposefully not using versioning namespace
 {
 
+
 #if defined(_LIBCPP_ABI_MICROSOFT)
 
 class _LIBCPP_EXCEPTION_ABI type_info
@@ -116,8 +113,32 @@
     { return !operator==(__arg); }
 };
 
-#elif defined(_LIBCPP_HAS_NONUNIQUE_TYPEINFO)
+#else // !defined(_LIBCPP_ABI_MICROSOFT)
 
+// ========================================================================== //
+//                           Implementations
+// ========================================================================== //
+// ------------------------------------------------------------------------- //
+//                               Unique
+// ------------------------------------------------------------------------- //
+// This implementation of type_info assumes a unique copy of the RTTI for a
+// given type inside a program. This is a valid assumption when abiding to
+// Itanium ABI (http://itanium-cxx-abi.github.io/cxx-abi/abi.html#vtable-components).
+// Under this assumption, we can always compare the addresses of the type names
+// to implement equality-comparison of type_infos instead of having to perform
+// a deep string comparison.
+// -------------------------------------------------------------------------- //
+//                             NonUnique
+// -------------------------------------------------------------------------- //
+// This implementation of type_info does not assume there is always a unique
+// copy of the RTTI for a given type inside a program. For various reasons
+// the linker may have failed to merge every copy of a types RTTI
+// (For example: -Bsymbolic or llvm.org/PR37398). Under this assumption, two
+// type_infos are equal if their addresses are equal or if a deep string
+// comparison is equal.
+// -------------------------------------------------------------------------- //
+//                          NonUniqueARMRTTIBit
+// -------------------------------------------------------------------------- //
 // This implementation of type_info does not assume always a unique copy of
 // the RTTI for a given type inside a program. It packs the pointer to the
 // type name into a uintptr_t and reserves the high bit of that pointer (which
@@ -129,91 +150,134 @@
 // faster. If at least one of the type_infos can't guarantee uniqueness, we
 // have no choice but to fall back to a deep string comparison.
 //
+// This implementation is specific to ARM64 on Apple platforms.
+//
 // Note that the compiler is the one setting (or unsetting) the high bit of
 // the pointer when it constructs the type_info, depending on whether it can
 // guarantee uniqueness for that specific type_info.
-class _LIBCPP_EXCEPTION_ABI type_info
-{
-    type_info& operator=(const type_info&);
-    type_info(const type_info&);
 
-    _LIBCPP_INLINE_VISIBILITY
-    int __compare_nonunique_names(const type_info &__arg) const _NOEXCEPT
-    { return __builtin_strcmp(name(), __arg.name()); }
-
-protected:
-    uintptr_t __type_name;
-
-    _LIBCPP_INLINE_VISIBILITY
-    explicit type_info(const char* __n)
-      : __type_name(reinterpret_cast<uintptr_t>(__n)) {}
-
-public:
-    _LIBCPP_AVAILABILITY_TYPEINFO_VTABLE
-    virtual ~type_info();
-
-    _LIBCPP_INLINE_VISIBILITY
-    const char* name() const _NOEXCEPT
-    {
-      return reinterpret_cast<const char*>(__type_name &
-                                           ~_LIBCPP_NONUNIQUE_RTTI_BIT);
+struct __type_info_implementations {
+  struct __string_impl_base {
+    typedef const char* __type_name_t;
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_CONSTEXPR static const char* __type_name_to_string(__type_name_t __v) _NOEXCEPT {
+      return __v;
     }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool before(const type_info& __arg) const _NOEXCEPT
-    {
-      if (!((__type_name & __arg.__type_name) & _LIBCPP_NONUNIQUE_RTTI_BIT))
-        return __type_name < __arg.__type_name;
-      return __compare_nonunique_names(__arg) < 0;
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_CONSTEXPR static __type_name_t __string_to_type_name(const char* __v) _NOEXCEPT {
+      return __v;
     }
+  };
 
-    _LIBCPP_INLINE_VISIBILITY
-    size_t hash_code() const _NOEXCEPT
-    {
-      if (!(__type_name & _LIBCPP_NONUNIQUE_RTTI_BIT))
-        return __type_name;
+  struct __unique_impl : __string_impl_base {
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static size_t __hash(__type_name_t __v) _NOEXCEPT {
+      return reinterpret_cast<size_t>(__v);
+    }
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static bool __eq(__type_name_t __lhs, __type_name_t __rhs) _NOEXCEPT {
+      return __lhs == __rhs;
+    }
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static bool __lt(__type_name_t __lhs, __type_name_t __rhs) _NOEXCEPT {
+      return __lhs < __rhs;
+    }
+  };
 
-      const char* __ptr = name();
+  struct __non_unique_impl : __string_impl_base {
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static size_t __hash(__type_name_t __ptr) _NOEXCEPT {
       size_t __hash = 5381;
       while (unsigned char __c = static_cast<unsigned char>(*__ptr++))
         __hash = (__hash * 33) ^ __c;
       return __hash;
     }
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static bool __eq(__type_name_t __lhs, __type_name_t __rhs) _NOEXCEPT {
+      return __lhs == __rhs || __builtin_strcmp(__lhs, __rhs) == 0;
+    }
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static bool __lt(__type_name_t __lhs, __type_name_t __rhs) _NOEXCEPT {
+      return __builtin_strcmp(__lhs, __rhs) < 0;
+    }
+  };
 
-    _LIBCPP_INLINE_VISIBILITY
-    bool operator==(const type_info& __arg) const _NOEXCEPT
-    {
-      if (__type_name == __arg.__type_name)
-        return true;
+  struct __non_unique_arm_rtti_bit_impl {
+    typedef uintptr_t __type_name_t;
 
-      if (!((__type_name & __arg.__type_name) & _LIBCPP_NONUNIQUE_RTTI_BIT))
-        return false;
-      return __compare_nonunique_names(__arg) == 0;
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static const char* __type_name_to_string(__type_name_t __v) _NOEXCEPT {
+      return reinterpret_cast<const char*>(__v &
+          ~__non_unique_rtti_bit::value);
+    }
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static __type_name_t __string_to_type_name(const char* __v) _NOEXCEPT {
+      return reinterpret_cast<__type_name_t>(__v);
     }
 
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static size_t __hash(__type_name_t __v) _NOEXCEPT {
+      if (__is_type_name_unique(__v))
+        return reinterpret_cast<size_t>(__v);
+      return __non_unique_impl::__hash(__type_name_to_string(__v));
+    }
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static bool __eq(__type_name_t __lhs, __type_name_t __rhs) _NOEXCEPT {
+      if (__lhs == __rhs)
+        return true;
+      if (__is_type_name_unique(__lhs, __rhs))
+        return false;
+      return __builtin_strcmp(__type_name_to_string(__lhs), __type_name_to_string(__rhs)) == 0;
+    }
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
+    static bool __lt(__type_name_t __lhs, __type_name_t __rhs) _NOEXCEPT {
+      if (__is_type_name_unique(__lhs, __rhs))
+        return __lhs < __rhs;
+      return __builtin_strcmp(__type_name_to_string(__lhs), __type_name_to_string(__rhs)) < 0;
+    }
+
+   private:
+    // The unique bit is the top bit. It is expected that __type_name_t is 64 bits when
+    // this implementation is actually used.
+    typedef std::integral_constant<__type_name_t,
+      (1ULL << ((__CHAR_BIT__ * sizeof(__type_name_t)) - 1))> __non_unique_rtti_bit;
+
     _LIBCPP_INLINE_VISIBILITY
-    bool operator!=(const type_info& __arg) const _NOEXCEPT
-    { return !operator==(__arg); }
+    static bool __is_type_name_unique(__type_name_t __lhs) _NOEXCEPT {
+      return !(__lhs & __non_unique_rtti_bit::value);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    static bool __is_type_name_unique(__type_name_t __lhs, __type_name_t __rhs) _NOEXCEPT {
+      return !((__lhs & __rhs) & __non_unique_rtti_bit::value);
+    }
+  };
+
+  typedef
+#if defined(__APPLE__) && defined(__LP64__) && !defined(__x86_64__)
+    __non_unique_arm_rtti_bit_impl
+#elif _LIBCPP_HAS_MERGED_TYPEINFO_NAMES_DEFAULT == 0
+    __non_unique_impl
+#elif _LIBCPP_HAS_MERGED_TYPEINFO_NAMES_DEFAULT == 1
+    __unique_impl
+#else
+#   error invalid configuration for _LIBCPP_HAS_MERGED_TYPEINFO_NAMES_DEFAULT
+#endif
+     __impl;
 };
 
-#else // !_LIBCPP_ABI_MICROSOFT && !_LIBCPP_HAS_NONUNIQUE_TYPEINFO
-
-// This implementation of type_info assumes a unique copy of the RTTI for a
-// given type inside a program. This is a valid assumption when abiding to
-// Itanium ABI (http://itanium-cxx-abi.github.io/cxx-abi/abi.html#vtable-components).
-// Under this assumption, we can always compare the addresses of the type names
-// to implement equality-comparison of type_infos instead of having to perform
-// a deep string comparison.
 class _LIBCPP_EXCEPTION_ABI type_info
 {
-    type_info& operator=(const type_info&);
-    type_info(const type_info&);
+  type_info& operator=(const type_info&);
+  type_info(const type_info&);
 
-protected:
-    const char *__type_name;
+ protected:
+    typedef __type_info_implementations::__impl __impl;
+
+    __impl::__type_name_t __type_name;
 
     _LIBCPP_INLINE_VISIBILITY
-    explicit type_info(const char* __n) : __type_name(__n) {}
+    explicit type_info(const char* __n)
+      : __type_name(__impl::__string_to_type_name(__n)) {}
 
 public:
     _LIBCPP_AVAILABILITY_TYPEINFO_VTABLE
@@ -221,48 +285,55 @@
 
     _LIBCPP_INLINE_VISIBILITY
     const char* name() const _NOEXCEPT
-    { return __type_name; }
+    {
+      return __impl::__type_name_to_string(__type_name);
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     bool before(const type_info& __arg) const _NOEXCEPT
-    { return __type_name < __arg.__type_name; }
+    {
+      return __impl::__lt(__type_name, __arg.__type_name);
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     size_t hash_code() const _NOEXCEPT
-    { return reinterpret_cast<size_t>(__type_name); }
+    {
+      return __impl::__hash(__type_name);
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     bool operator==(const type_info& __arg) const _NOEXCEPT
-    { return __type_name == __arg.__type_name; }
+    {
+      return __impl::__eq(__type_name, __arg.__type_name);
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     bool operator!=(const type_info& __arg) const _NOEXCEPT
     { return !operator==(__arg); }
 };
-
-#endif
+#endif // defined(_LIBCPP_ABI_MICROSOFT)
 
 class _LIBCPP_EXCEPTION_ABI bad_cast
     : public exception
 {
-public:
-    bad_cast() _NOEXCEPT;
-    virtual ~bad_cast() _NOEXCEPT;
-    virtual const char* what() const _NOEXCEPT;
+ public:
+  bad_cast() _NOEXCEPT;
+  virtual ~bad_cast() _NOEXCEPT;
+  virtual const char* what() const _NOEXCEPT;
 };
 
 class _LIBCPP_EXCEPTION_ABI bad_typeid
     : public exception
 {
-public:
-    bad_typeid() _NOEXCEPT;
-    virtual ~bad_typeid() _NOEXCEPT;
-    virtual const char* what() const _NOEXCEPT;
+ public:
+  bad_typeid() _NOEXCEPT;
+  virtual ~bad_typeid() _NOEXCEPT;
+  virtual const char* what() const _NOEXCEPT;
 };
 
 }  // std
 
-#endif // defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
+#endif // defined(_LIBCPP_ABI_VCRUNTIME)
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 _LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
diff --git a/linux-x64/clang/include/c++/v1/unordered_map b/linux-x64/clang/include/c++/v1/unordered_map
index 7ae9805..4dfe698 100644
--- a/linux-x64/clang/include/c++/v1/unordered_map
+++ b/linux-x64/clang/include/c++/v1/unordered_map
@@ -79,12 +79,12 @@
       unordered_map(InputIterator f, InputIterator l, size_type n, const allocator_type& a)
       : unordered_map(f, l, n, hasher(), key_equal(), a) {}  // C++14
     template <class InputIterator>
-      unordered_map(InputIterator f, InputIterator l, size_type n, const hasher& hf, 
+      unordered_map(InputIterator f, InputIterator l, size_type n, const hasher& hf,
         const allocator_type& a)
       : unordered_map(f, l, n, hf, key_equal(), a) {}  // C++14
     unordered_map(initializer_list<value_type> il, size_type n, const allocator_type& a)
       : unordered_map(il, n, hasher(), key_equal(), a) {}  // C++14
-    unordered_map(initializer_list<value_type> il, size_type n, const hasher& hf, 
+    unordered_map(initializer_list<value_type> il, size_type n, const hasher& hf,
       const allocator_type& a)
       : unordered_map(il, n, hf, key_equal(), a) {}  // C++14
     ~unordered_map();
@@ -277,12 +277,12 @@
       unordered_multimap(InputIterator f, InputIterator l, size_type n, const allocator_type& a)
       : unordered_multimap(f, l, n, hasher(), key_equal(), a) {}  // C++14
     template <class InputIterator>
-      unordered_multimap(InputIterator f, InputIterator l, size_type n, const hasher& hf, 
+      unordered_multimap(InputIterator f, InputIterator l, size_type n, const hasher& hf,
         const allocator_type& a)
       : unordered_multimap(f, l, n, hf, key_equal(), a) {}  // C++14
     unordered_multimap(initializer_list<value_type> il, size_type n, const allocator_type& a)
       : unordered_multimap(il, n, hasher(), key_equal(), a) {}  // C++14
-    unordered_multimap(initializer_list<value_type> il, size_type n, const hasher& hf, 
+    unordered_multimap(initializer_list<value_type> il, size_type n, const hasher& hf,
       const allocator_type& a)
       : unordered_multimap(il, n, hf, key_equal(), a) {}  // C++14
     ~unordered_multimap();
@@ -852,7 +852,6 @@
     typedef const value_type&                              const_reference;
     static_assert((is_same<value_type, typename allocator_type::value_type>::value),
                   "Invalid allocator::value_type");
-    static_assert(sizeof(__diagnose_unordered_container_requirements<_Key, _Hash, _Pred>(0)), "");
 
 private:
     typedef __hash_value_type<key_type, mapped_type>                 __value_type;
@@ -952,18 +951,22 @@
       : unordered_map(__first, __last, __n, hasher(), key_equal(), __a) {}
     template <class _InputIterator>
     _LIBCPP_INLINE_VISIBILITY
-      unordered_map(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, 
+      unordered_map(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf,
         const allocator_type& __a)
       : unordered_map(__first, __last, __n, __hf, key_equal(), __a) {}
     _LIBCPP_INLINE_VISIBILITY
     unordered_map(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
       : unordered_map(__il, __n, hasher(), key_equal(), __a) {}
     _LIBCPP_INLINE_VISIBILITY
-    unordered_map(initializer_list<value_type> __il, size_type __n, const hasher& __hf, 
+    unordered_map(initializer_list<value_type> __il, size_type __n, const hasher& __hf,
       const allocator_type& __a)
       : unordered_map(__il, __n, __hf, key_equal(), __a) {}
 #endif
-    // ~unordered_map() = default;
+    _LIBCPP_INLINE_VISIBILITY
+    ~unordered_map() {
+        static_assert(sizeof(__diagnose_unordered_container_requirements<_Key, _Hash, _Pred>(0)), "");
+    }
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_map& operator=(const unordered_map& __u)
     {
@@ -1678,7 +1681,6 @@
     typedef const value_type&                              const_reference;
     static_assert((is_same<value_type, typename allocator_type::value_type>::value),
                   "Invalid allocator::value_type");
-    static_assert(sizeof(__diagnose_unordered_container_requirements<_Key, _Hash, _Pred>(0)), "");
 
 private:
     typedef __hash_value_type<key_type, mapped_type>                 __value_type;
@@ -1776,18 +1778,22 @@
       : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a) {}
     template <class _InputIterator>
     _LIBCPP_INLINE_VISIBILITY
-      unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, 
+      unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf,
         const allocator_type& __a)
       : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a) {}
     _LIBCPP_INLINE_VISIBILITY
     unordered_multimap(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
       : unordered_multimap(__il, __n, hasher(), key_equal(), __a) {}
     _LIBCPP_INLINE_VISIBILITY
-    unordered_multimap(initializer_list<value_type> __il, size_type __n, const hasher& __hf, 
+    unordered_multimap(initializer_list<value_type> __il, size_type __n, const hasher& __hf,
       const allocator_type& __a)
       : unordered_multimap(__il, __n, __hf, key_equal(), __a) {}
 #endif
-    // ~unordered_multimap() = default;
+    _LIBCPP_INLINE_VISIBILITY
+    ~unordered_multimap() {
+        static_assert(sizeof(__diagnose_unordered_container_requirements<_Key, _Hash, _Pred>(0)), "");
+    }
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_multimap& operator=(const unordered_multimap& __u)
     {
diff --git a/linux-x64/clang/include/c++/v1/unordered_set b/linux-x64/clang/include/c++/v1/unordered_set
index 4cfaa86..3661e36 100644
--- a/linux-x64/clang/include/c++/v1/unordered_set
+++ b/linux-x64/clang/include/c++/v1/unordered_set
@@ -75,7 +75,7 @@
     template <class InputIterator>
       unordered_set(InputIterator f, InputIterator l, size_type n, const allocator_type& a); // C++14
     template <class InputIterator>
-      unordered_set(InputIterator f, InputIterator l, size_type n, 
+      unordered_set(InputIterator f, InputIterator l, size_type n,
                     const hasher& hf,  const allocator_type& a); // C++14
     unordered_set(initializer_list<value_type> il, size_type n, const allocator_type& a); // C++14
     unordered_set(initializer_list<value_type> il, size_type n,
@@ -242,7 +242,7 @@
       unordered_multiset(InputIterator f, InputIterator l, size_type n,
                          const hasher& hf, const allocator_type& a); // C++14
     unordered_multiset(initializer_list<value_type> il, size_type n, const allocator_type& a); // C++14
-    unordered_multiset(initializer_list<value_type> il, size_type n, 
+    unordered_multiset(initializer_list<value_type> il, size_type n,
                        const hasher& hf,  const allocator_type& a); // C++14
     ~unordered_multiset();
     unordered_multiset& operator=(const unordered_multiset&);
@@ -390,7 +390,6 @@
     typedef const value_type&                                          const_reference;
     static_assert((is_same<value_type, typename allocator_type::value_type>::value),
                   "Invalid allocator::value_type");
-    static_assert(sizeof(__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
 
 private:
     typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
@@ -451,11 +450,11 @@
 #if _LIBCPP_STD_VER > 11
     template <class _InputIterator>
     inline _LIBCPP_INLINE_VISIBILITY
-        unordered_set(_InputIterator __first, _InputIterator __last, 
+        unordered_set(_InputIterator __first, _InputIterator __last,
                     size_type __n, const allocator_type& __a)
             : unordered_set(__first, __last, __n, hasher(), key_equal(), __a) {}
     template <class _InputIterator>
-        unordered_set(_InputIterator __first, _InputIterator __last, 
+        unordered_set(_InputIterator __first, _InputIterator __last,
                       size_type __n, const hasher& __hf, const allocator_type& __a)
             : unordered_set(__first, __last, __n, __hf, key_equal(), __a) {}
 #endif
@@ -481,12 +480,16 @@
                                                       const allocator_type& __a)
         : unordered_set(__il, __n, hasher(), key_equal(), __a) {}
     inline _LIBCPP_INLINE_VISIBILITY
-    unordered_set(initializer_list<value_type> __il, size_type __n, 
+    unordered_set(initializer_list<value_type> __il, size_type __n,
                                   const hasher& __hf, const allocator_type& __a)
         : unordered_set(__il, __n, __hf, key_equal(), __a) {}
 #endif
 #endif  // _LIBCPP_CXX03_LANG
-    // ~unordered_set() = default;
+    _LIBCPP_INLINE_VISIBILITY
+    ~unordered_set() {
+        static_assert(sizeof(__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
+    }
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_set& operator=(const unordered_set& __u)
     {
@@ -990,7 +993,6 @@
     typedef const value_type&                                          const_reference;
     static_assert((is_same<value_type, typename allocator_type::value_type>::value),
                   "Invalid allocator::value_type");
-    static_assert(sizeof(__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
 
 private:
     typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
@@ -1050,7 +1052,7 @@
 #if _LIBCPP_STD_VER > 11
     template <class _InputIterator>
     inline _LIBCPP_INLINE_VISIBILITY
-    unordered_multiset(_InputIterator __first, _InputIterator __last, 
+    unordered_multiset(_InputIterator __first, _InputIterator __last,
                        size_type __n, const allocator_type& __a)
         : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a) {}
     template <class _InputIterator>
@@ -1084,7 +1086,11 @@
       : unordered_multiset(__il, __n, __hf, key_equal(), __a) {}
 #endif
 #endif  // _LIBCPP_CXX03_LANG
-    // ~unordered_multiset() = default;
+    _LIBCPP_INLINE_VISIBILITY
+    ~unordered_multiset() {
+        static_assert(sizeof(__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
+    }
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_multiset& operator=(const unordered_multiset& __u)
     {
diff --git a/linux-x64/clang/include/c++/v1/utility b/linux-x64/clang/include/c++/v1/utility
index 770d160..3961370 100644
--- a/linux-x64/clang/include/c++/v1/utility
+++ b/linux-x64/clang/include/c++/v1/utility
@@ -103,7 +103,7 @@
 inline constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
 
 template <class T> struct tuple_size;
-template <size_t I, class T> class tuple_element;
+template <size_t I, class T> struct tuple_element;
 
 template <class T1, class T2> struct tuple_size<pair<T1, T2> >;
 template <class T1, class T2> struct tuple_element<0, pair<T1, T2> >;
@@ -252,7 +252,7 @@
 
 
 template <class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 _ForwardIterator2
 swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2)
 {
@@ -263,7 +263,7 @@
 
 // forward declared in <type_traits>
 template<class _Tp, size_t _Np>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
 typename enable_if<
     __is_swappable<_Tp>::value
 >::type
@@ -349,7 +349,7 @@
     }
 #else
     template <bool _Val>
-    using _EnableB = typename enable_if<_Val, bool>::type;
+    using _EnableB _LIBCPP_NODEBUG_TYPE = typename enable_if<_Val, bool>::type;
 
     struct _CheckArgs {
       template <class _U1, class _U2>
@@ -376,7 +376,7 @@
     };
 
     template <bool _MaybeEnable>
-    using _CheckArgsDep = typename conditional<
+    using _CheckArgsDep _LIBCPP_NODEBUG_TYPE = typename conditional<
       _MaybeEnable, _CheckArgs, __check_tuple_constructor_fail>::type;
 
     struct _CheckTupleLikeConstructor {
@@ -398,7 +398,7 @@
     };
 
     template <class _Tuple>
-    using _CheckTLC = typename conditional<
+    using _CheckTLC _LIBCPP_NODEBUG_TYPE = typename conditional<
         __tuple_like_with_size<_Tuple, 2>::value
             && !is_same<typename decay<_Tuple>::type, pair>::value,
         _CheckTupleLikeConstructor,
@@ -637,10 +637,10 @@
 }
 
 template <class _Tp>
-struct __unwrap_reference { typedef _Tp type; };
+struct __unwrap_reference { typedef _LIBCPP_NODEBUG_TYPE _Tp type; };
 
 template <class _Tp>
-struct __unwrap_reference<reference_wrapper<_Tp> > { typedef _Tp& type; };
+struct __unwrap_reference<reference_wrapper<_Tp> > { typedef _LIBCPP_NODEBUG_TYPE _Tp& type; };
 
 #if _LIBCPP_STD_VER > 17
 template <class _Tp>
@@ -687,23 +687,21 @@
     : public integral_constant<size_t, 2> {};
 
 template <size_t _Ip, class _T1, class _T2>
-class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, pair<_T1, _T2> >
+struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, pair<_T1, _T2> >
 {
     static_assert(_Ip < 2, "Index out of bounds in std::tuple_element<std::pair<T1, T2>>");
 };
 
 template <class _T1, class _T2>
-class _LIBCPP_TEMPLATE_VIS tuple_element<0, pair<_T1, _T2> >
+struct _LIBCPP_TEMPLATE_VIS tuple_element<0, pair<_T1, _T2> >
 {
-public:
-    typedef _T1 type;
+    typedef _LIBCPP_NODEBUG_TYPE _T1 type;
 };
 
 template <class _T1, class _T2>
-class _LIBCPP_TEMPLATE_VIS tuple_element<1, pair<_T1, _T2> >
+struct _LIBCPP_TEMPLATE_VIS tuple_element<1, pair<_T1, _T2> >
 {
-public:
-    typedef _T2 type;
+    typedef _LIBCPP_NODEBUG_TYPE _T2 type;
 };
 
 template <size_t _Ip> struct __get_pair;
@@ -882,11 +880,11 @@
 #if __has_builtin(__make_integer_seq) && !defined(_LIBCPP_TESTING_FALLBACK_MAKE_INTEGER_SEQUENCE)
 
 template <class _Tp, _Tp _Ep>
-using __make_integer_sequence = __make_integer_seq<integer_sequence, _Tp, _Ep>;
+using __make_integer_sequence _LIBCPP_NODEBUG_TYPE = __make_integer_seq<integer_sequence, _Tp, _Ep>;
 
 #else
 
-template<typename _Tp, _Tp _Np> using __make_integer_sequence_unchecked =
+template<typename _Tp, _Tp _Np> using __make_integer_sequence_unchecked _LIBCPP_NODEBUG_TYPE  =
   typename __detail::__make<_Np>::type::template __convert<integer_sequence, _Tp>;
 
 template <class _Tp, _Tp _Ep>
@@ -897,11 +895,11 @@
     static_assert(0 <= _Ep, "std::make_integer_sequence must have a non-negative sequence length");
     // Workaround GCC bug by preventing bad installations when 0 <= _Ep
     // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68929
-    typedef __make_integer_sequence_unchecked<_Tp, 0 <= _Ep ? _Ep : 0> type;
+    typedef _LIBCPP_NODEBUG_TYPE  __make_integer_sequence_unchecked<_Tp, 0 <= _Ep ? _Ep : 0> type;
 };
 
 template <class _Tp, _Tp _Ep>
-using __make_integer_sequence = typename __make_integer_sequence_checked<_Tp, _Ep>::type;
+using __make_integer_sequence _LIBCPP_NODEBUG_TYPE = typename __make_integer_sequence_checked<_Tp, _Ep>::type;
 
 #endif
 
@@ -1481,7 +1479,7 @@
     size_t operator()(float __v) const _NOEXCEPT
     {
         // -0.0 and 0.0 should return same hash
-       if (__v == 0.0)
+       if (__v == 0.0f)
            return 0;
         return __scalar_hash<float>::operator()(__v);
     }
@@ -1509,7 +1507,7 @@
     size_t operator()(long double __v) const _NOEXCEPT
     {
         // -0.0 and 0.0 should return same hash
-        if (__v == 0.0)
+        if (__v == 0.0L)
             return 0;
 #if defined(__i386__)
         // Zero out padding bits
@@ -1592,29 +1590,29 @@
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Key, class _Hash>
-using __check_hash_requirements = integral_constant<bool,
+using __check_hash_requirements _LIBCPP_NODEBUG_TYPE  = integral_constant<bool,
     is_copy_constructible<_Hash>::value &&
     is_move_constructible<_Hash>::value &&
     __invokable_r<size_t, _Hash, _Key const&>::value
 >;
 
 template <class _Key, class _Hash = std::hash<_Key> >
-using __has_enabled_hash = integral_constant<bool,
+using __has_enabled_hash _LIBCPP_NODEBUG_TYPE = integral_constant<bool,
     __check_hash_requirements<_Key, _Hash>::value &&
     is_default_constructible<_Hash>::value
 >;
 
 #if _LIBCPP_STD_VER > 14
 template <class _Type, class>
-using __enable_hash_helper_imp = _Type;
+using __enable_hash_helper_imp _LIBCPP_NODEBUG_TYPE  = _Type;
 
 template <class _Type, class ..._Keys>
-using __enable_hash_helper = __enable_hash_helper_imp<_Type,
+using __enable_hash_helper _LIBCPP_NODEBUG_TYPE  = __enable_hash_helper_imp<_Type,
   typename enable_if<__all<__has_enabled_hash<_Keys>::value...>::value>::type
 >;
 #else
 template <class _Type, class ...>
-using __enable_hash_helper = _Type;
+using __enable_hash_helper _LIBCPP_NODEBUG_TYPE = _Type;
 #endif
 
 #endif // !_LIBCPP_CXX03_LANG
diff --git a/linux-x64/clang/include/c++/v1/valarray b/linux-x64/clang/include/c++/v1/valarray
index c9ca08c..8f6221a 100644
--- a/linux-x64/clang/include/c++/v1/valarray
+++ b/linux-x64/clang/include/c++/v1/valarray
@@ -673,6 +673,7 @@
     _LIBCPP_INLINE_VISIBILITY
     size_t size() const {return __size_;}
 
+    template <class> friend class __val_expr;
     template <class> friend class _LIBCPP_TEMPLATE_VIS valarray;
 };
 
@@ -1058,8 +1059,6 @@
     valarray& __assign_range(const value_type* __f, const value_type* __l);
 };
 
-_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::valarray(size_t))
-_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::~valarray())
 _LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t))
 
 template <class _Op, class _Tp>
@@ -2221,6 +2220,7 @@
     _LIBCPP_INLINE_VISIBILITY
     size_t size() const {return __1d_.size();}
 
+    template <class> friend class __val_expr;
     template <class> friend class valarray;
 };
 
@@ -2591,6 +2591,7 @@
     _LIBCPP_INLINE_VISIBILITY
     size_t size() const {return __1d_.size();}
 
+    template <class> friend class __val_expr;
     template <class> friend class _LIBCPP_TEMPLATE_VIS valarray;
 };
 
@@ -2613,19 +2614,31 @@
 
     _LIBCPP_INLINE_VISIBILITY
     __val_expr<__slice_expr<_ValExpr> > operator[](slice __s) const
-        {return __val_expr<__slice_expr<_ValExpr> >(__expr_, __s);}
+    {
+        typedef __slice_expr<_ValExpr> _NewExpr;
+        return __val_expr< _NewExpr >(_NewExpr(__s, __expr_));
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __val_expr<__indirect_expr<_ValExpr> > operator[](const gslice& __gs) const
-        {return __val_expr<__indirect_expr<_ValExpr> >(__expr_, __gs.__1d_);}
+    {
+        typedef __indirect_expr<_ValExpr> _NewExpr;
+        return __val_expr<_NewExpr >(_NewExpr(__gs.__1d_, __expr_));
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __val_expr<__mask_expr<_ValExpr> > operator[](const valarray<bool>& __vb) const
-        {return __val_expr<__mask_expr<_ValExpr> >(__expr_, __vb);}
+    {
+        typedef __mask_expr<_ValExpr> _NewExpr;
+        return __val_expr< _NewExpr >( _NewExpr(__vb, __expr_));
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __val_expr<__indirect_expr<_ValExpr> > operator[](const valarray<size_t>& __vs) const
-        {return __val_expr<__indirect_expr<_ValExpr> >(__expr_, __vs);}
+    {
+        typedef __indirect_expr<_ValExpr> _NewExpr;
+        return __val_expr< _NewExpr >(_NewExpr(__vs, __expr_));
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __val_expr<_UnaryOp<__unary_plus<value_type>, _ValExpr> >
diff --git a/linux-x64/clang/include/c++/v1/variant b/linux-x64/clang/include/c++/v1/variant
index 5d0722b..baf1630 100644
--- a/linux-x64/clang/include/c++/v1/variant
+++ b/linux-x64/clang/include/c++/v1/variant
@@ -1098,11 +1098,39 @@
 template <class _Tp, class... _Types>
 struct __overload<_Tp, _Types...> : __overload<_Types...> {
   using __overload<_Types...>::operator();
-  __identity<_Tp> operator()(_Tp) const;
+
+  static auto __test(_Tp (&&)[1]) -> __identity<_Tp>;
+
+  template <class _Up>
+  auto operator()(_Tp, _Up&& __t) const
+      -> decltype(__test({ _VSTD::forward<_Up>(__t) }));
 };
 
+template <class _Base, class _Tp>
+struct __overload_bool : _Base {
+  using _Base::operator();
+
+  template <class _Up, class _Ap = __uncvref_t<_Up>>
+  auto operator()(bool, _Up&&) const
+      -> enable_if_t<is_same_v<_Ap, bool>, __identity<_Tp>>;
+};
+
+template <class... _Types>
+struct __overload<bool, _Types...>
+    : __overload_bool<__overload<_Types...>, bool> {};
+template <class... _Types>
+struct __overload<bool const, _Types...>
+    : __overload_bool<__overload<_Types...>, bool const> {};
+template <class... _Types>
+struct __overload<bool volatile, _Types...>
+    : __overload_bool<__overload<_Types...>, bool volatile> {};
+template <class... _Types>
+struct __overload<bool const volatile, _Types...>
+    : __overload_bool<__overload<_Types...>, bool const volatile> {};
+
 template <class _Tp, class... _Types>
-using __best_match_t = typename result_of_t<__overload<_Types...>(_Tp&&)>::type;
+using __best_match_t =
+    typename invoke_result_t<__overload<_Types...>, _Tp, _Tp>::type;
 
 } // __variant_detail
 
diff --git a/linux-x64/clang/include/c++/v1/vector b/linux-x64/clang/include/c++/v1/vector
index 79d1767..82bf6e0 100644
--- a/linux-x64/clang/include/c++/v1/vector
+++ b/linux-x64/clang/include/c++/v1/vector
@@ -664,27 +664,27 @@
     void reserve(size_type __n);
     void shrink_to_fit() _NOEXCEPT;
 
-    _LIBCPP_INLINE_VISIBILITY reference       operator[](size_type __n);
-    _LIBCPP_INLINE_VISIBILITY const_reference operator[](size_type __n) const;
+    _LIBCPP_INLINE_VISIBILITY reference       operator[](size_type __n) _NOEXCEPT;
+    _LIBCPP_INLINE_VISIBILITY const_reference operator[](size_type __n) const _NOEXCEPT;
     reference       at(size_type __n);
     const_reference at(size_type __n) const;
 
-    _LIBCPP_INLINE_VISIBILITY reference       front()
+    _LIBCPP_INLINE_VISIBILITY reference       front() _NOEXCEPT
     {
         _LIBCPP_ASSERT(!empty(), "front() called for empty vector");
         return *this->__begin_;
     }
-    _LIBCPP_INLINE_VISIBILITY const_reference front() const
+    _LIBCPP_INLINE_VISIBILITY const_reference front() const _NOEXCEPT
     {
         _LIBCPP_ASSERT(!empty(), "front() called for empty vector");
         return *this->__begin_;
     }
-    _LIBCPP_INLINE_VISIBILITY reference       back()
+    _LIBCPP_INLINE_VISIBILITY reference       back() _NOEXCEPT
     {
         _LIBCPP_ASSERT(!empty(), "back() called for empty vector");
         return *(this->__end_ - 1);
     }
-    _LIBCPP_INLINE_VISIBILITY const_reference back()  const
+    _LIBCPP_INLINE_VISIBILITY const_reference back()  const _NOEXCEPT
     {
         _LIBCPP_ASSERT(!empty(), "back() called for empty vector");
         return *(this->__end_ - 1);
@@ -779,9 +779,9 @@
 
     void swap(vector&)
 #if _LIBCPP_STD_VER >= 14
-        _NOEXCEPT_DEBUG;
+        _NOEXCEPT;
 #else
-        _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value ||
+        _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
                     __is_nothrow_swappable<allocator_type>::value);
 #endif
 
@@ -835,12 +835,17 @@
     }
 
 #ifndef _LIBCPP_CXX03_LANG
-    template <class _Up> void __push_back_slow_path(_Up&& __x);
+    template <class _Up>
+    _LIBCPP_INLINE_VISIBILITY
+    inline void __push_back_slow_path(_Up&& __x);
 
     template <class... _Args>
-    void __emplace_back_slow_path(_Args&&... __args);
+    _LIBCPP_INLINE_VISIBILITY
+    inline void __emplace_back_slow_path(_Args&&... __args);
 #else
-    template <class _Up> void __push_back_slow_path(_Up& __x);
+    template <class _Up>
+    _LIBCPP_INLINE_VISIBILITY
+    inline void __push_back_slow_path(_Up& __x);
 #endif
 
     // The following functions are no-ops outside of AddressSanitizer mode.
@@ -1537,7 +1542,7 @@
 template <class _Tp, class _Allocator>
 inline _LIBCPP_INLINE_VISIBILITY
 typename vector<_Tp, _Allocator>::reference
-vector<_Tp, _Allocator>::operator[](size_type __n)
+vector<_Tp, _Allocator>::operator[](size_type __n) _NOEXCEPT
 {
     _LIBCPP_ASSERT(__n < size(), "vector[] index out of bounds");
     return this->__begin_[__n];
@@ -1546,7 +1551,7 @@
 template <class _Tp, class _Allocator>
 inline _LIBCPP_INLINE_VISIBILITY
 typename vector<_Tp, _Allocator>::const_reference
-vector<_Tp, _Allocator>::operator[](size_type __n) const
+vector<_Tp, _Allocator>::operator[](size_type __n) const _NOEXCEPT
 {
     _LIBCPP_ASSERT(__n < size(), "vector[] index out of bounds");
     return this->__begin_[__n];
@@ -2064,9 +2069,9 @@
 void
 vector<_Tp, _Allocator>::swap(vector& __x)
 #if _LIBCPP_STD_VER >= 14
-    _NOEXCEPT_DEBUG
+    _NOEXCEPT
 #else
-    _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value ||
+    _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
                 __is_nothrow_swappable<allocator_type>::value)
 #endif
 {
diff --git a/linux-x64/clang/include/c++/v1/version b/linux-x64/clang/include/c++/v1/version
index 1037ee5..fe9cfed 100644
--- a/linux-x64/clang/include/c++/v1/version
+++ b/linux-x64/clang/include/c++/v1/version
@@ -58,6 +58,7 @@
 __cpp_lib_incomplete_container_elements                 201505L <forward_list> <list> <vector>
 __cpp_lib_integer_sequence                              201304L <utility>
 __cpp_lib_integral_constant_callable                    201304L <type_traits>
+__cpp_lib_interpolate                                   201902L <numeric>
 __cpp_lib_invoke                                        201411L <functional>
 __cpp_lib_is_aggregate                                  201703L <type_traits>
 __cpp_lib_is_constant_evaluated                         201811L <type_traits>
@@ -219,10 +220,15 @@
 // # define __cpp_lib_concepts                             201806L
 // # define __cpp_lib_constexpr_misc                       201811L
 // # define __cpp_lib_constexpr_swap_algorithms            201806L
-// # define __cpp_lib_destroying_delete                    201806L
+# if _LIBCPP_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L
+#   define __cpp_lib_destroying_delete                  201806L
+# endif
 # define __cpp_lib_erase_if                             201811L
 // # define __cpp_lib_generic_unordered_lookup             201811L
-// # define __cpp_lib_is_constant_evaluated                201811L
+# define __cpp_lib_interpolate                          201902L
+# if !defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED)
+#   define __cpp_lib_is_constant_evaluated              201811L
+# endif
 // # define __cpp_lib_list_remove_return_type              201806L
 // # define __cpp_lib_ranges                               201811L
 // # define __cpp_lib_three_way_comparison                 201711L
diff --git a/linux-x64/clang/include/clang-c/Index.h b/linux-x64/clang/include/clang-c/Index.h
index 38af8aa..74badac 100644
--- a/linux-x64/clang/include/clang-c/Index.h
+++ b/linux-x64/clang/include/clang-c/Index.h
@@ -32,7 +32,7 @@
  * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
  */
 #define CINDEX_VERSION_MAJOR 0
-#define CINDEX_VERSION_MINOR 51
+#define CINDEX_VERSION_MINOR 59
 
 #define CINDEX_VERSION_ENCODE(major, minor) ( \
       ((major) * 10000)                       \
@@ -221,7 +221,12 @@
   /**
    * The exception specification has not been parsed yet.
    */
-  CXCursor_ExceptionSpecificationKind_Unparsed
+  CXCursor_ExceptionSpecificationKind_Unparsed,
+
+  /**
+   * The cursor has a __declspec(nothrow) exception specification.
+   */
+  CXCursor_ExceptionSpecificationKind_NoThrow
 };
 
 /**
@@ -1341,7 +1346,17 @@
   /**
    * Used to indicate that implicit attributes should be visited.
    */
-  CXTranslationUnit_VisitImplicitAttributes = 0x2000
+  CXTranslationUnit_VisitImplicitAttributes = 0x2000,
+
+  /**
+   * Used to indicate that non-errors from included files should be ignored.
+   *
+   * If set, clang_getDiagnosticSetFromTU() will not report e.g. warnings from
+   * included files anymore. This speeds up clang_getDiagnosticSetFromTU() for
+   * the case where these warnings are not of interest, as for an IDE for
+   * example, which typically shows only the diagnostics in the main file.
+   */
+  CXTranslationUnit_IgnoreNonErrorsFromIncludedFiles = 0x4000
 };
 
 /**
@@ -2531,7 +2546,11 @@
    */
   CXCursor_OMPTargetTeamsDistributeSimdDirective = 279,
 
-  CXCursor_LastStmt = CXCursor_OMPTargetTeamsDistributeSimdDirective,
+  /** C++2a std::bit_cast expression.
+   */
+  CXCursor_BuiltinBitCastExpr = 280,
+
+  CXCursor_LastStmt = CXCursor_BuiltinBitCastExpr,
 
   /**
    * Cursor that represents the translation unit itself.
@@ -2587,7 +2606,10 @@
   CXCursor_ObjCBoxable                   = 436,
   CXCursor_FlagEnum                      = 437,
   CXCursor_ConvergentAttr                = 438,
-  CXCursor_LastAttr                      = CXCursor_ConvergentAttr,
+  CXCursor_WarnUnusedAttr                = 439,
+  CXCursor_WarnUnusedResultAttr          = 440,
+  CXCursor_AlignedAttr                   = 441,
+  CXCursor_LastAttr                      = CXCursor_AlignedAttr,
 
   /* Preprocessing */
   CXCursor_PreprocessingDirective        = 500,
@@ -3312,7 +3334,9 @@
   CXType_OCLIntelSubgroupAVCImeResultDualRefStreamout = 173,
   CXType_OCLIntelSubgroupAVCImeSingleRefStreamin = 174,
 
-  CXType_OCLIntelSubgroupAVCImeDualRefStreamin = 175
+  CXType_OCLIntelSubgroupAVCImeDualRefStreamin = 175,
+
+  CXType_ExtVector = 176
 };
 
 /**
@@ -3839,7 +3863,11 @@
   /**
    * The Field name is not valid for this record.
    */
-  CXTypeLayoutError_InvalidFieldName = -5
+  CXTypeLayoutError_InvalidFieldName = -5,
+  /**
+   * The type is undeduced.
+   */
+  CXTypeLayoutError_Undeduced = -6
 };
 
 /**
@@ -3912,10 +3940,22 @@
 CINDEX_LINKAGE long long clang_Cursor_getOffsetOfField(CXCursor C);
 
 /**
+ * Determine whether the given cursor represents an anonymous
+ * tag or namespace
+ */
+CINDEX_LINKAGE unsigned clang_Cursor_isAnonymous(CXCursor C);
+
+/**
  * Determine whether the given cursor represents an anonymous record
  * declaration.
  */
-CINDEX_LINKAGE unsigned clang_Cursor_isAnonymous(CXCursor C);
+CINDEX_LINKAGE unsigned clang_Cursor_isAnonymousRecordDecl(CXCursor C);
+
+/**
+ * Determine whether the given cursor represents an inline namespace
+ * declaration.
+ */
+CINDEX_LINKAGE unsigned clang_Cursor_isInlineNamespace(CXCursor C);
 
 enum CXRefQualifierKind {
   /** No ref-qualifier was provided. */
diff --git a/linux-x64/clang/include/clang/AST/APValue.h b/linux-x64/clang/include/clang/AST/APValue.h
index de5546f..6943479 100644
--- a/linux-x64/clang/include/clang/AST/APValue.h
+++ b/linux-x64/clang/include/clang/AST/APValue.h
@@ -24,14 +24,52 @@
   class AddrLabelExpr;
   class ASTContext;
   class CharUnits;
+  class CXXRecordDecl;
+  class Decl;
   class DiagnosticBuilder;
   class Expr;
   class FieldDecl;
-  class Decl;
+  struct PrintingPolicy;
+  class Type;
   class ValueDecl;
-  class CXXRecordDecl;
-  class QualType;
 
+/// Symbolic representation of typeid(T) for some type T.
+class TypeInfoLValue {
+  const Type *T;
+
+public:
+  TypeInfoLValue() : T() {}
+  explicit TypeInfoLValue(const Type *T);
+
+  const Type *getType() const { return T; }
+  explicit operator bool() const { return T; }
+
+  void *getOpaqueValue() { return const_cast<Type*>(T); }
+  static TypeInfoLValue getFromOpaqueValue(void *Value) {
+    TypeInfoLValue V;
+    V.T = reinterpret_cast<const Type*>(Value);
+    return V;
+  }
+
+  void print(llvm::raw_ostream &Out, const PrintingPolicy &Policy) const;
+};
+}
+
+namespace llvm {
+template<> struct PointerLikeTypeTraits<clang::TypeInfoLValue> {
+  static void *getAsVoidPointer(clang::TypeInfoLValue V) {
+    return V.getOpaqueValue();
+  }
+  static clang::TypeInfoLValue getFromVoidPointer(void *P) {
+    return clang::TypeInfoLValue::getFromOpaqueValue(P);
+  }
+  // Validated by static_assert in APValue.cpp; hardcoded to avoid needing
+  // to include Type.h.
+  static constexpr int NumLowBitsAvailable = 3;
+};
+}
+
+namespace clang {
 /// APValue - This class implements a discriminated union of [uninitialized]
 /// [APSInt] [APFloat], [Complex APSInt] [Complex APFloat], [Expr + Offset],
 /// [Vector: N * APValue], [Array: N * APValue]
@@ -40,7 +78,10 @@
   typedef llvm::APFloat APFloat;
 public:
   enum ValueKind {
-    Uninitialized,
+    /// There is no such object (it's outside its lifetime).
+    None,
+    /// This object has an indeterminate value (C++ [basic.indet]).
+    Indeterminate,
     Int,
     Float,
     FixedPoint,
@@ -56,14 +97,14 @@
   };
 
   class LValueBase {
+    typedef llvm::PointerUnion<const ValueDecl *, const Expr *, TypeInfoLValue>
+        PtrTy;
+
   public:
-    typedef llvm::PointerUnion<const ValueDecl *, const Expr *> PtrTy;
-
-    LValueBase() : CallIndex(0), Version(0) {}
-
-    template <class T>
-    LValueBase(T P, unsigned I = 0, unsigned V = 0)
-        : Ptr(P), CallIndex(I), Version(V) {}
+    LValueBase() : Local{} {}
+    LValueBase(const ValueDecl *P, unsigned I = 0, unsigned V = 0);
+    LValueBase(const Expr *P, unsigned I = 0, unsigned V = 0);
+    static LValueBase getTypeInfo(TypeInfoLValue LV, QualType TypeInfo);
 
     template <class T>
     bool is() const { return Ptr.is<T>(); }
@@ -78,45 +119,73 @@
 
     bool isNull() const;
 
-    explicit operator bool () const;
+    explicit operator bool() const;
 
-    PtrTy getPointer() const {
-      return Ptr;
-    }
+    unsigned getCallIndex() const;
+    unsigned getVersion() const;
+    QualType getTypeInfoType() const;
 
-    unsigned getCallIndex() const {
-      return CallIndex;
+    friend bool operator==(const LValueBase &LHS, const LValueBase &RHS);
+    friend bool operator!=(const LValueBase &LHS, const LValueBase &RHS) {
+      return !(LHS == RHS);
     }
-
-    void setCallIndex(unsigned Index) {
-      CallIndex = Index;
-    }
-
-    unsigned getVersion() const {
-      return Version;
-    }
-
-    bool operator==(const LValueBase &Other) const {
-      return Ptr == Other.Ptr && CallIndex == Other.CallIndex &&
-             Version == Other.Version;
-    }
+    friend llvm::hash_code hash_value(const LValueBase &Base);
 
   private:
     PtrTy Ptr;
-    unsigned CallIndex, Version;
+    struct LocalState {
+      unsigned CallIndex, Version;
+    };
+    union {
+      LocalState Local;
+      /// The type std::type_info, if this is a TypeInfoLValue.
+      void *TypeInfoType;
+    };
   };
 
+  /// A FieldDecl or CXXRecordDecl, along with a flag indicating whether we
+  /// mean a virtual or non-virtual base class subobject.
   typedef llvm::PointerIntPair<const Decl *, 1, bool> BaseOrMemberType;
-  union LValuePathEntry {
-    /// BaseOrMember - The FieldDecl or CXXRecordDecl indicating the next item
-    /// in the path. An opaque value of type BaseOrMemberType.
-    void *BaseOrMember;
-    /// ArrayIndex - The array index of the next item in the path.
-    uint64_t ArrayIndex;
+
+  /// A non-discriminated union of a base, field, or array index.
+  class LValuePathEntry {
+    static_assert(sizeof(uintptr_t) <= sizeof(uint64_t),
+                  "pointer doesn't fit in 64 bits?");
+    uint64_t Value;
+
+  public:
+    LValuePathEntry() : Value() {}
+    LValuePathEntry(BaseOrMemberType BaseOrMember)
+        : Value{reinterpret_cast<uintptr_t>(BaseOrMember.getOpaqueValue())} {}
+    static LValuePathEntry ArrayIndex(uint64_t Index) {
+      LValuePathEntry Result;
+      Result.Value = Index;
+      return Result;
+    }
+
+    BaseOrMemberType getAsBaseOrMember() const {
+      return BaseOrMemberType::getFromOpaqueValue(
+          reinterpret_cast<void *>(Value));
+    }
+    uint64_t getAsArrayIndex() const { return Value; }
+
+    friend bool operator==(LValuePathEntry A, LValuePathEntry B) {
+      return A.Value == B.Value;
+    }
+    friend bool operator!=(LValuePathEntry A, LValuePathEntry B) {
+      return A.Value != B.Value;
+    }
+    friend llvm::hash_code hash_value(LValuePathEntry A) {
+      return llvm::hash_value(A.Value);
+    }
   };
   struct NoLValuePath {};
   struct UninitArray {};
   struct UninitStruct {};
+
+  friend class ASTReader;
+  friend class ASTWriter;
+
 private:
   ValueKind Kind;
 
@@ -169,58 +238,64 @@
   DataType Data;
 
 public:
-  APValue() : Kind(Uninitialized) {}
-  explicit APValue(APSInt I) : Kind(Uninitialized) {
+  APValue() : Kind(None) {}
+  explicit APValue(APSInt I) : Kind(None) {
     MakeInt(); setInt(std::move(I));
   }
-  explicit APValue(APFloat F) : Kind(Uninitialized) {
+  explicit APValue(APFloat F) : Kind(None) {
     MakeFloat(); setFloat(std::move(F));
   }
-  explicit APValue(APFixedPoint FX) : Kind(Uninitialized) {
+  explicit APValue(APFixedPoint FX) : Kind(None) {
     MakeFixedPoint(std::move(FX));
   }
-  explicit APValue(const APValue *E, unsigned N) : Kind(Uninitialized) {
+  explicit APValue(const APValue *E, unsigned N) : Kind(None) {
     MakeVector(); setVector(E, N);
   }
-  APValue(APSInt R, APSInt I) : Kind(Uninitialized) {
+  APValue(APSInt R, APSInt I) : Kind(None) {
     MakeComplexInt(); setComplexInt(std::move(R), std::move(I));
   }
-  APValue(APFloat R, APFloat I) : Kind(Uninitialized) {
+  APValue(APFloat R, APFloat I) : Kind(None) {
     MakeComplexFloat(); setComplexFloat(std::move(R), std::move(I));
   }
   APValue(const APValue &RHS);
-  APValue(APValue &&RHS) : Kind(Uninitialized) { swap(RHS); }
+  APValue(APValue &&RHS) : Kind(None) { swap(RHS); }
   APValue(LValueBase B, const CharUnits &O, NoLValuePath N,
           bool IsNullPtr = false)
-      : Kind(Uninitialized) {
+      : Kind(None) {
     MakeLValue(); setLValue(B, O, N, IsNullPtr);
   }
   APValue(LValueBase B, const CharUnits &O, ArrayRef<LValuePathEntry> Path,
           bool OnePastTheEnd, bool IsNullPtr = false)
-      : Kind(Uninitialized) {
+      : Kind(None) {
     MakeLValue(); setLValue(B, O, Path, OnePastTheEnd, IsNullPtr);
   }
-  APValue(UninitArray, unsigned InitElts, unsigned Size) : Kind(Uninitialized) {
+  APValue(UninitArray, unsigned InitElts, unsigned Size) : Kind(None) {
     MakeArray(InitElts, Size);
   }
-  APValue(UninitStruct, unsigned B, unsigned M) : Kind(Uninitialized) {
+  APValue(UninitStruct, unsigned B, unsigned M) : Kind(None) {
     MakeStruct(B, M);
   }
   explicit APValue(const FieldDecl *D, const APValue &V = APValue())
-      : Kind(Uninitialized) {
+      : Kind(None) {
     MakeUnion(); setUnion(D, V);
   }
   APValue(const ValueDecl *Member, bool IsDerivedMember,
-          ArrayRef<const CXXRecordDecl*> Path) : Kind(Uninitialized) {
+          ArrayRef<const CXXRecordDecl*> Path) : Kind(None) {
     MakeMemberPointer(Member, IsDerivedMember, Path);
   }
   APValue(const AddrLabelExpr* LHSExpr, const AddrLabelExpr* RHSExpr)
-      : Kind(Uninitialized) {
+      : Kind(None) {
     MakeAddrLabelDiff(); setAddrLabelDiff(LHSExpr, RHSExpr);
   }
+  static APValue IndeterminateValue() {
+    APValue Result;
+    Result.Kind = Indeterminate;
+    return Result;
+  }
 
   ~APValue() {
-    MakeUninit();
+    if (Kind != None && Kind != Indeterminate)
+      DestroyDataAndMakeUninit();
   }
 
   /// Returns whether the object performed allocations.
@@ -234,7 +309,11 @@
   void swap(APValue &RHS);
 
   ValueKind getKind() const { return Kind; }
-  bool isUninit() const { return Kind == Uninitialized; }
+
+  bool isAbsent() const { return Kind == None; }
+  bool isIndeterminate() const { return Kind == Indeterminate; }
+  bool hasValue() const { return Kind != None && Kind != Indeterminate; }
+
   bool isInt() const { return Kind == Int; }
   bool isFloat() const { return Kind == Float; }
   bool isFixedPoint() const { return Kind == FixedPoint; }
@@ -251,8 +330,8 @@
   void dump() const;
   void dump(raw_ostream &OS) const;
 
-  void printPretty(raw_ostream &OS, ASTContext &Ctx, QualType Ty) const;
-  std::string getAsString(ASTContext &Ctx, QualType Ty) const;
+  void printPretty(raw_ostream &OS, const ASTContext &Ctx, QualType Ty) const;
+  std::string getAsString(const ASTContext &Ctx, QualType Ty) const;
 
   APSInt &getInt() {
     assert(isInt() && "Invalid accessor");
@@ -474,56 +553,52 @@
 
 private:
   void DestroyDataAndMakeUninit();
-  void MakeUninit() {
-    if (Kind != Uninitialized)
-      DestroyDataAndMakeUninit();
-  }
   void MakeInt() {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)Data.buffer) APSInt(1);
     Kind = Int;
   }
   void MakeFloat() {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)(char*)Data.buffer) APFloat(0.0);
     Kind = Float;
   }
   void MakeFixedPoint(APFixedPoint &&FX) {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void *)(char *)Data.buffer) APFixedPoint(std::move(FX));
     Kind = FixedPoint;
   }
   void MakeVector() {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)(char*)Data.buffer) Vec();
     Kind = Vector;
   }
   void MakeComplexInt() {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)(char*)Data.buffer) ComplexAPSInt();
     Kind = ComplexInt;
   }
   void MakeComplexFloat() {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)(char*)Data.buffer) ComplexAPFloat();
     Kind = ComplexFloat;
   }
   void MakeLValue();
   void MakeArray(unsigned InitElts, unsigned Size);
   void MakeStruct(unsigned B, unsigned M) {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)(char*)Data.buffer) StructData(B, M);
     Kind = Struct;
   }
   void MakeUnion() {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)(char*)Data.buffer) UnionData();
     Kind = Union;
   }
   void MakeMemberPointer(const ValueDecl *Member, bool IsDerivedMember,
                          ArrayRef<const CXXRecordDecl*> Path);
   void MakeAddrLabelDiff() {
-    assert(isUninit() && "Bad state change");
+    assert(isAbsent() && "Bad state change");
     new ((void*)(char*)Data.buffer) AddrLabelDiffData();
     Kind = AddrLabelDiff;
   }
diff --git a/linux-x64/clang/include/clang/AST/ASTContext.h b/linux-x64/clang/include/clang/AST/ASTContext.h
index fe52f81..1d1aaf4 100644
--- a/linux-x64/clang/include/clang/AST/ASTContext.h
+++ b/linux-x64/clang/include/clang/AST/ASTContext.h
@@ -265,17 +265,21 @@
   /// Mapping from __block VarDecls to BlockVarCopyInit.
   llvm::DenseMap<const VarDecl *, BlockVarCopyInit> BlockVarCopyInits;
 
-  /// Mapping from class scope functions specialization to their
-  /// template patterns.
-  llvm::DenseMap<const FunctionDecl*, FunctionDecl*>
-    ClassScopeSpecializationPattern;
-
   /// Mapping from materialized temporaries with static storage duration
   /// that appear in constant initializers to their evaluated values.  These are
   /// allocated in a std::map because their address must be stable.
   llvm::DenseMap<const MaterializeTemporaryExpr *, APValue *>
     MaterializedTemporaryValues;
 
+  /// Used to cleanups APValues stored in the AST.
+  mutable llvm::SmallVector<APValue *, 0> APValueCleanups;
+
+  /// A cache mapping a string value to a StringLiteral object with the same
+  /// value.
+  ///
+  /// This is lazily created.  This is intentionally not serialized.
+  mutable llvm::StringMap<StringLiteral *> StringLiteralCache;
+
   /// Representation of a "canonical" template template parameter that
   /// is used in canonical template names.
   class CanonicalTemplateTemplateParm : public llvm::FoldingSetNode {
@@ -891,11 +895,6 @@
   TemplateOrSpecializationInfo
   getTemplateOrSpecializationInfo(const VarDecl *Var);
 
-  FunctionDecl *getClassScopeSpecializationPattern(const FunctionDecl *FD);
-
-  void setClassScopeSpecializationPattern(FunctionDecl *FD,
-                                          FunctionDecl *Pattern);
-
   /// Note that the static data member \p Inst is an instantiation of
   /// the static data member template \p Tmpl of a class template.
   void setInstantiatedFromStaticDataMember(VarDecl *Inst, VarDecl *Tmpl,
@@ -1333,6 +1332,10 @@
                                 ArrayType::ArraySizeModifier ASM,
                                 unsigned IndexTypeQuals) const;
 
+  /// Return a type for a constant array for a string literal of the
+  /// specified element type and length.
+  QualType getStringLiteralArrayType(QualType EltTy, unsigned Length) const;
+
   /// Returns a vla type where known sizes are replaced with [*].
   QualType getVariableArrayDecayedType(QualType Ty) const;
 
@@ -1451,6 +1454,9 @@
 
   QualType getParenType(QualType NamedType) const;
 
+  QualType getMacroQualifiedType(QualType UnderlyingTy,
+                                 const IdentifierInfo *MacroII) const;
+
   QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
                              NestedNameSpecifier *NNS, QualType NamedType,
                              TagDecl *OwnedTagDecl = nullptr) const;
@@ -1519,7 +1525,7 @@
 
   /// C++11 deduced auto type.
   QualType getAutoType(QualType DeducedType, AutoTypeKeyword Keyword,
-                       bool IsDependent) const;
+                       bool IsDependent, bool IsPack = false) const;
 
   /// C++11 deduction pattern for 'auto' type.
   QualType getAutoDeductType() const;
@@ -1984,6 +1990,7 @@
 
   TemplateName getOverloadedTemplateName(UnresolvedSetIterator Begin,
                                          UnresolvedSetIterator End) const;
+  TemplateName getAssumedTemplateName(DeclarationName Name) const;
 
   TemplateName getQualifiedTemplateName(NestedNameSpecifier *NNS,
                                         bool TemplateKeyword,
@@ -2172,6 +2179,13 @@
   /// pointers and large arrays get extra alignment.
   CharUnits getDeclAlign(const Decl *D, bool ForAlignof = false) const;
 
+  /// Return the alignment (in bytes) of the thrown exception object. This is
+  /// only meaningful for targets that allocate C++ exceptions in a system
+  /// runtime, such as those using the Itanium C++ ABI.
+  CharUnits getExnObjectAlignment() const {
+    return toCharUnitsFromBits(Target->getExnObjectAlignment());
+  }
+
   /// Get or compute information about the layout of the specified
   /// record (struct/union/class) \p D, which indicates its size and field
   /// position information.
@@ -2237,7 +2251,8 @@
 
   VTableContextBase *getVTableContext();
 
-  MangleContext *createMangleContext();
+  /// If \p T is null pointer, assume the target in ASTContext.
+  MangleContext *createMangleContext(const TargetInfo *T = nullptr);
 
   void DeepCollectObjCIvars(const ObjCInterfaceDecl *OI, bool leafClass,
                             SmallVectorImpl<const ObjCIvarDecl*> &Ivars) const;
@@ -2383,7 +2398,8 @@
 
   /// Retrieves the default calling convention for the current target.
   CallingConv getDefaultCallingConvention(bool IsVariadic,
-                                          bool IsCXXMethod) const;
+                                          bool IsCXXMethod,
+                                          bool IsBuiltin = false) const;
 
   /// Retrieves the "canonical" template name that refers to a
   /// given template.
@@ -2500,6 +2516,11 @@
   /// \p LHS < \p RHS, return -1.
   int getFloatingTypeOrder(QualType LHS, QualType RHS) const;
 
+  /// Compare the rank of two floating point types as above, but compare equal
+  /// if both types have the same floating-point semantics on the target (i.e.
+  /// long double and double on AArch64 will return 0).
+  int getFloatingTypeSemanticOrder(QualType LHS, QualType RHS) const;
+
   /// Return a real floating point or a complex type (based on
   /// \p typeDomain/\p typeSize).
   ///
@@ -2695,7 +2716,7 @@
   /// otherwise returns null.
   const ObjCInterfaceDecl *getObjContainingInterface(const NamedDecl *ND) const;
 
-  /// Set the copy inialization expression of a block var decl. \p CanThrow
+  /// Set the copy initialization expression of a block var decl. \p CanThrow
   /// indicates whether the copy expression can throw or not.
   void setBlockVarCopyInit(const VarDecl* VD, Expr *CopyExpr, bool CanThrow);
 
@@ -2730,12 +2751,11 @@
   ///
   /// \param Data Pointer data that will be provided to the callback function
   /// when it is called.
-  void AddDeallocation(void (*Callback)(void*), void *Data);
+  void AddDeallocation(void (*Callback)(void *), void *Data) const;
 
   /// If T isn't trivially destructible, calls AddDeallocation to register it
   /// for destruction.
-  template <typename T>
-  void addDestruction(T *Ptr) {
+  template <typename T> void addDestruction(T *Ptr) const {
     if (!std::is_trivially_destructible<T>::value) {
       auto DestroyPtr = [](void *V) { static_cast<T *>(V)->~T(); };
       AddDeallocation(DestroyPtr, Ptr);
@@ -2798,51 +2818,56 @@
   APValue *getMaterializedTemporaryValue(const MaterializeTemporaryExpr *E,
                                          bool MayCreate);
 
+  /// Return a string representing the human readable name for the specified
+  /// function declaration or file name. Used by SourceLocExpr and
+  /// PredefinedExpr to cache evaluated results.
+  StringLiteral *getPredefinedStringLiteralFromCache(StringRef Key) const;
+
   //===--------------------------------------------------------------------===//
   //                    Statistics
   //===--------------------------------------------------------------------===//
 
   /// The number of implicitly-declared default constructors.
-  static unsigned NumImplicitDefaultConstructors;
+  unsigned NumImplicitDefaultConstructors = 0;
 
   /// The number of implicitly-declared default constructors for
   /// which declarations were built.
-  static unsigned NumImplicitDefaultConstructorsDeclared;
+  unsigned NumImplicitDefaultConstructorsDeclared = 0;
 
   /// The number of implicitly-declared copy constructors.
-  static unsigned NumImplicitCopyConstructors;
+  unsigned NumImplicitCopyConstructors = 0;
 
   /// The number of implicitly-declared copy constructors for
   /// which declarations were built.
-  static unsigned NumImplicitCopyConstructorsDeclared;
+  unsigned NumImplicitCopyConstructorsDeclared = 0;
 
   /// The number of implicitly-declared move constructors.
-  static unsigned NumImplicitMoveConstructors;
+  unsigned NumImplicitMoveConstructors = 0;
 
   /// The number of implicitly-declared move constructors for
   /// which declarations were built.
-  static unsigned NumImplicitMoveConstructorsDeclared;
+  unsigned NumImplicitMoveConstructorsDeclared = 0;
 
   /// The number of implicitly-declared copy assignment operators.
-  static unsigned NumImplicitCopyAssignmentOperators;
+  unsigned NumImplicitCopyAssignmentOperators = 0;
 
   /// The number of implicitly-declared copy assignment operators for
   /// which declarations were built.
-  static unsigned NumImplicitCopyAssignmentOperatorsDeclared;
+  unsigned NumImplicitCopyAssignmentOperatorsDeclared = 0;
 
   /// The number of implicitly-declared move assignment operators.
-  static unsigned NumImplicitMoveAssignmentOperators;
+  unsigned NumImplicitMoveAssignmentOperators = 0;
 
   /// The number of implicitly-declared move assignment operators for
   /// which declarations were built.
-  static unsigned NumImplicitMoveAssignmentOperatorsDeclared;
+  unsigned NumImplicitMoveAssignmentOperatorsDeclared = 0;
 
   /// The number of implicitly-declared destructors.
-  static unsigned NumImplicitDestructors;
+  unsigned NumImplicitDestructors = 0;
 
   /// The number of implicitly-declared destructors for which
   /// declarations were built.
-  static unsigned NumImplicitDestructorsDeclared;
+  unsigned NumImplicitDestructorsDeclared = 0;
 
 public:
   /// Initialize built-in types.
@@ -2857,18 +2882,51 @@
 private:
   void InitBuiltinType(CanQualType &R, BuiltinType::Kind K);
 
+  class ObjCEncOptions {
+    unsigned Bits;
+
+    ObjCEncOptions(unsigned Bits) : Bits(Bits) {}
+
+  public:
+    ObjCEncOptions() : Bits(0) {}
+    ObjCEncOptions(const ObjCEncOptions &RHS) : Bits(RHS.Bits) {}
+
+#define OPT_LIST(V)                                                            \
+  V(ExpandPointedToStructures, 0)                                              \
+  V(ExpandStructures, 1)                                                       \
+  V(IsOutermostType, 2)                                                        \
+  V(EncodingProperty, 3)                                                       \
+  V(IsStructField, 4)                                                          \
+  V(EncodeBlockParameters, 5)                                                  \
+  V(EncodeClassNames, 6)                                                       \
+
+#define V(N,I) ObjCEncOptions& set##N() { Bits |= 1 << I; return *this; }
+OPT_LIST(V)
+#undef V
+
+#define V(N,I) bool N() const { return Bits & 1 << I; }
+OPT_LIST(V)
+#undef V
+
+#undef OPT_LIST
+
+    LLVM_NODISCARD ObjCEncOptions keepingOnly(ObjCEncOptions Mask) const {
+      return Bits & Mask.Bits;
+    }
+
+    LLVM_NODISCARD ObjCEncOptions forComponentType() const {
+      ObjCEncOptions Mask = ObjCEncOptions()
+                                .setIsOutermostType()
+                                .setIsStructField();
+      return Bits & ~Mask.Bits;
+    }
+  };
+
   // Return the Objective-C type encoding for a given type.
   void getObjCEncodingForTypeImpl(QualType t, std::string &S,
-                                  bool ExpandPointedToStructures,
-                                  bool ExpandStructures,
+                                  ObjCEncOptions Options,
                                   const FieldDecl *Field,
-                                  bool OutermostType = false,
-                                  bool EncodingProperty = false,
-                                  bool StructField = false,
-                                  bool EncodeBlockParameters = false,
-                                  bool EncodeClassNames = false,
-                                  bool EncodePointerToObjCTypedef = false,
-                                  QualType *NotEncodedT=nullptr) const;
+                                  QualType *NotEncodedT = nullptr) const;
 
   // Adds the encoding of the structure's members.
   void getObjCEncodingForStructureImpl(RecordDecl *RD, std::string &S,
@@ -2926,7 +2984,7 @@
   // in order to track and run destructors while we're tearing things down.
   using DeallocationFunctionsAndArguments =
       llvm::SmallVector<std::pair<void (*)(void *), void *>, 16>;
-  DeallocationFunctionsAndArguments Deallocations;
+  mutable DeallocationFunctionsAndArguments Deallocations;
 
   // FIXME: This currently contains the set of StoredDeclMaps used
   // by DeclContext objects.  This probably should not be in ASTContext,
diff --git a/linux-x64/clang/include/clang/AST/ASTDumper.h b/linux-x64/clang/include/clang/AST/ASTDumper.h
new file mode 100644
index 0000000..61202f0
--- /dev/null
+++ b/linux-x64/clang/include/clang/AST/ASTDumper.h
@@ -0,0 +1,56 @@
+//===--- ASTDumper.h - Dumping implementation for ASTs --------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_AST_ASTDUMPER_H
+#define LLVM_CLANG_AST_ASTDUMPER_H
+
+#include "clang/AST/ASTNodeTraverser.h"
+#include "clang/AST/TextNodeDumper.h"
+
+namespace clang {
+
+class ASTDumper : public ASTNodeTraverser<ASTDumper, TextNodeDumper> {
+
+  TextNodeDumper NodeDumper;
+
+  raw_ostream &OS;
+
+  const bool ShowColors;
+
+public:
+  ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits,
+            const SourceManager *SM)
+      : ASTDumper(OS, Traits, SM, SM && SM->getDiagnostics().getShowColors()) {}
+
+  ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits,
+            const SourceManager *SM, bool ShowColors)
+      : ASTDumper(OS, Traits, SM, ShowColors, LangOptions()) {}
+  ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits,
+            const SourceManager *SM, bool ShowColors,
+            const PrintingPolicy &PrintPolicy)
+      : NodeDumper(OS, ShowColors, SM, PrintPolicy, Traits), OS(OS),
+        ShowColors(ShowColors) {}
+
+  TextNodeDumper &doGetNodeDelegate() { return NodeDumper; }
+
+  void dumpLookups(const DeclContext *DC, bool DumpDecls);
+
+  template <typename SpecializationDecl>
+  void dumpTemplateDeclSpecialization(const SpecializationDecl *D,
+                                      bool DumpExplicitInst, bool DumpRefOnly);
+  template <typename TemplateDecl>
+  void dumpTemplateDecl(const TemplateDecl *D, bool DumpExplicitInst);
+
+  void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D);
+  void VisitClassTemplateDecl(const ClassTemplateDecl *D);
+  void VisitVarTemplateDecl(const VarTemplateDecl *D);
+};
+
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/AST/ASTDumperUtils.h b/linux-x64/clang/include/clang/AST/ASTDumperUtils.h
index 3e263df..55a0854 100644
--- a/linux-x64/clang/include/clang/AST/ASTDumperUtils.h
+++ b/linux-x64/clang/include/clang/AST/ASTDumperUtils.h
@@ -17,6 +17,12 @@
 
 namespace clang {
 
+/// Used to specify the format for printing AST dump information.
+enum ASTDumpOutputFormat {
+  ADOF_Default,
+  ADOF_JSON
+};
+
 // Colors used for various parts of the AST dump
 // Do not use bold yellow for any text.  It is hard to read on white screens.
 
diff --git a/linux-x64/clang/include/clang/AST/ASTImporter.h b/linux-x64/clang/include/clang/AST/ASTImporter.h
index dd872b1..4a55c12 100644
--- a/linux-x64/clang/include/clang/AST/ASTImporter.h
+++ b/linux-x64/clang/include/clang/AST/ASTImporter.h
@@ -14,6 +14,7 @@
 #ifndef LLVM_CLANG_AST_ASTIMPORTER_H
 #define LLVM_CLANG_AST_ASTIMPORTER_H
 
+#include "clang/AST/DeclBase.h"
 #include "clang/AST/DeclarationName.h"
 #include "clang/AST/NestedNameSpecifier.h"
 #include "clang/AST/TemplateName.h"
@@ -32,7 +33,8 @@
 namespace clang {
 
 class ASTContext;
-class ASTImporterLookupTable;
+class ASTImporterSharedState;
+class Attr;
 class CXXBaseSpecifier;
 class CXXCtorInitializer;
 class Decl;
@@ -42,8 +44,8 @@
 class NamedDecl;
 class Stmt;
 class TagDecl;
+class TranslationUnitDecl;
 class TypeSourceInfo;
-class Attr;
 
   class ImportError : public llvm::ErrorInfo<ImportError> {
   public:
@@ -86,14 +88,140 @@
     using ImportedCXXBaseSpecifierMap =
         llvm::DenseMap<const CXXBaseSpecifier *, CXXBaseSpecifier *>;
 
-  private:
+    // An ImportPath is the list of the AST nodes which we visit during an
+    // Import call.
+    // If node `A` depends on node `B` then the path contains an `A`->`B` edge.
+    // From the call stack of the import functions we can read the very same
+    // path.
+    //
+    // Now imagine the following AST, where the `->` represents dependency in
+    // therms of the import.
+    // ```
+    // A->B->C->D
+    //    `->E
+    // ```
+    // We would like to import A.
+    // The import behaves like a DFS, so we will visit the nodes in this order:
+    // ABCDE.
+    // During the visitation we will have the following ImportPaths:
+    // ```
+    // A
+    // AB
+    // ABC
+    // ABCD
+    // ABC
+    // AB
+    // ABE
+    // AB
+    // A
+    // ```
+    // If during the visit of E there is an error then we set an error for E,
+    // then as the call stack shrinks for B, then for A:
+    // ```
+    // A
+    // AB
+    // ABC
+    // ABCD
+    // ABC
+    // AB
+    // ABE // Error! Set an error to E
+    // AB  // Set an error to B
+    // A   // Set an error to A
+    // ```
+    // However, during the import we could import C and D without any error and
+    // they are independent from A,B and E.
+    // We must not set up an error for C and D.
+    // So, at the end of the import we have an entry in `ImportDeclErrors` for
+    // A,B,E but not for C,D.
+    //
+    // Now what happens if there is a cycle in the import path?
+    // Let's consider this AST:
+    // ```
+    // A->B->C->A
+    //    `->E
+    // ```
+    // During the visitation we will have the below ImportPaths and if during
+    // the visit of E there is an error then we will set up an error for E,B,A.
+    // But what's up with C?
+    // ```
+    // A
+    // AB
+    // ABC
+    // ABCA
+    // ABC
+    // AB
+    // ABE // Error! Set an error to E
+    // AB  // Set an error to B
+    // A   // Set an error to A
+    // ```
+    // This time we know that both B and C are dependent on A.
+    // This means we must set up an error for C too.
+    // As the call stack reverses back we get to A and we must set up an error
+    // to all nodes which depend on A (this includes C).
+    // But C is no longer on the import path, it just had been previously.
+    // Such situation can happen only if during the visitation we had a cycle.
+    // If we didn't have any cycle, then the normal way of passing an Error
+    // object through the call stack could handle the situation.
+    // This is why we must track cycles during the import process for each
+    // visited declaration.
+    class ImportPathTy {
+    public:
+      using VecTy = llvm::SmallVector<Decl *, 32>;
 
-    /// Pointer to the import specific lookup table, which may be shared
-    /// amongst several ASTImporter objects.
-    /// This is an externally managed resource (and should exist during the
-    /// lifetime of the ASTImporter object)
-    /// If not set then the original C/C++ lookup is used.
-    ASTImporterLookupTable *LookupTable = nullptr;
+      void push(Decl *D) {
+        Nodes.push_back(D);
+        ++Aux[D];
+      }
+
+      void pop() {
+        if (Nodes.empty())
+          return;
+        --Aux[Nodes.back()];
+        Nodes.pop_back();
+      }
+
+      /// Returns true if the last element can be found earlier in the path.
+      bool hasCycleAtBack() const {
+        auto Pos = Aux.find(Nodes.back());
+        return Pos != Aux.end() && Pos->second > 1;
+      }
+
+      using Cycle = llvm::iterator_range<VecTy::const_reverse_iterator>;
+      Cycle getCycleAtBack() const {
+        assert(Nodes.size() >= 2);
+        return Cycle(Nodes.rbegin(),
+                     std::find(Nodes.rbegin() + 1, Nodes.rend(), Nodes.back()) +
+                         1);
+      }
+
+      /// Returns the copy of the cycle.
+      VecTy copyCycleAtBack() const {
+        auto R = getCycleAtBack();
+        return VecTy(R.begin(), R.end());
+      }
+
+    private:
+      // All nodes of the path.
+      VecTy Nodes;
+      // Auxiliary container to be able to answer "Do we have a cycle ending
+      // at last element?" as fast as possible.
+      // We count each Decl's occurrence over the path.
+      llvm::SmallDenseMap<Decl *, int, 32> Aux;
+    };
+
+  private:
+    std::shared_ptr<ASTImporterSharedState> SharedState = nullptr;
+
+    /// The path which we go through during the import of a given AST node.
+    ImportPathTy ImportPath;
+    /// Sometimes we have to save some part of an import path, so later we can
+    /// set up properties to the saved nodes.
+    /// We may have several of these import paths associated to one Decl.
+    using SavedImportPathsForOneDecl =
+        llvm::SmallVector<ImportPathTy::VecTy, 32>;
+    using SavedImportPathsTy =
+        llvm::SmallDenseMap<Decl *, SavedImportPathsForOneDecl, 32>;
+    SavedImportPathsTy SavedImportPaths;
 
     /// The contexts we're importing to and from.
     ASTContext &ToContext, &FromContext;
@@ -115,6 +243,18 @@
     /// context to the corresponding declarations in the "to" context.
     llvm::DenseMap<Decl *, Decl *> ImportedDecls;
 
+    /// Mapping from the already-imported declarations in the "from"
+    /// context to the error status of the import of that declaration.
+    /// This map contains only the declarations that were not correctly
+    /// imported. The same declaration may or may not be included in
+    /// ImportedDecls. This map is updated continuously during imports and never
+    /// cleared (like ImportedDecls).
+    llvm::DenseMap<Decl *, ImportError> ImportDeclErrors;
+
+    /// Mapping from the already-imported declarations in the "to"
+    /// context to the corresponding declarations in the "from" context.
+    llvm::DenseMap<Decl *, Decl *> ImportedFromDecls;
+
     /// Mapping from the already-imported statements in the "from"
     /// context to the corresponding statements in the "to" context.
     llvm::DenseMap<Stmt *, Stmt *> ImportedStmts;
@@ -137,6 +277,15 @@
 
     void AddToLookupTable(Decl *ToD);
 
+  protected:
+    /// Can be overwritten by subclasses to implement their own import logic.
+    /// The overwritten method should call this method if it didn't import the
+    /// decl on its own.
+    virtual Expected<Decl *> ImportImpl(Decl *From);
+
+    /// Used only in unittests to verify the behaviour of the error handling.
+    virtual bool returnWithErrorInTest() { return false; };
+
   public:
 
     /// \param ToContext The context we'll be importing into.
@@ -151,13 +300,13 @@
     /// as little as it can, e.g., by importing declarations as forward
     /// declarations that can be completed at a later point.
     ///
-    /// \param LookupTable The importer specific lookup table which may be
+    /// \param SharedState The importer specific lookup table which may be
     /// shared amongst several ASTImporter objects.
     /// If not set then the original C/C++ lookup is used.
     ASTImporter(ASTContext &ToContext, FileManager &ToFileManager,
                 ASTContext &FromContext, FileManager &FromFileManager,
                 bool MinimalImport,
-                ASTImporterLookupTable *LookupTable = nullptr);
+                std::shared_ptr<ASTImporterSharedState> SharedState = nullptr);
 
     virtual ~ASTImporter();
 
@@ -172,63 +321,51 @@
     /// \return Error information (success or error).
     template <typename ImportT>
     LLVM_NODISCARD llvm::Error importInto(ImportT &To, const ImportT &From) {
-      To = Import(From);
-      if (From && !To)
-          return llvm::make_error<ImportError>();
-      return llvm::Error::success();
-      // FIXME: this should be the final code
-      //auto ToOrErr = Import(From);
-      //if (ToOrErr)
-      //  To = *ToOrErr;
-      //return ToOrErr.takeError();
+      auto ToOrErr = Import(From);
+      if (ToOrErr)
+        To = *ToOrErr;
+      return ToOrErr.takeError();
     }
 
     /// Import the given type from the "from" context into the "to"
     /// context. A null type is imported as a null type (no error).
     ///
     /// \returns The equivalent type in the "to" context, or the import error.
-    llvm::Expected<QualType> Import_New(QualType FromT);
-    // FIXME: Remove this version.
-    QualType Import(QualType FromT);
+    llvm::Expected<QualType> Import(QualType FromT);
 
     /// Import the given type source information from the
     /// "from" context into the "to" context.
     ///
     /// \returns The equivalent type source information in the "to"
     /// context, or the import error.
-    llvm::Expected<TypeSourceInfo *> Import_New(TypeSourceInfo *FromTSI);
-    // FIXME: Remove this version.
-    TypeSourceInfo *Import(TypeSourceInfo *FromTSI);
+    llvm::Expected<TypeSourceInfo *> Import(TypeSourceInfo *FromTSI);
 
     /// Import the given attribute from the "from" context into the
     /// "to" context.
     ///
     /// \returns The equivalent attribute in the "to" context, or the import
     /// error.
-    llvm::Expected<Attr *> Import_New(const Attr *FromAttr);
-    // FIXME: Remove this version.
-    Attr *Import(const Attr *FromAttr);
+    llvm::Expected<Attr *> Import(const Attr *FromAttr);
 
     /// Import the given declaration from the "from" context into the
     /// "to" context.
     ///
     /// \returns The equivalent declaration in the "to" context, or the import
     /// error.
-    llvm::Expected<Decl *> Import_New(Decl *FromD);
-    llvm::Expected<Decl *> Import_New(const Decl *FromD) {
-      return Import_New(const_cast<Decl *>(FromD));
-    }
-    // FIXME: Remove this version.
-    Decl *Import(Decl *FromD);
-    Decl *Import(const Decl *FromD) {
+    llvm::Expected<Decl *> Import(Decl *FromD);
+    llvm::Expected<const Decl *> Import(const Decl *FromD) {
       return Import(const_cast<Decl *>(FromD));
     }
 
     /// Return the copy of the given declaration in the "to" context if
     /// it has already been imported from the "from" context.  Otherwise return
-    /// NULL.
+    /// nullptr.
     Decl *GetAlreadyImportedOrNull(const Decl *FromD) const;
 
+    /// Return the translation unit from where the declaration was
+    /// imported. If it does not exist nullptr is returned.
+    TranslationUnitDecl *GetFromTU(Decl *ToD);
+
     /// Import the given declaration context from the "from"
     /// AST context into the "to" AST context.
     ///
@@ -241,28 +378,21 @@
     ///
     /// \returns The equivalent expression in the "to" context, or the import
     /// error.
-    llvm::Expected<Expr *> Import_New(Expr *FromE);
-    // FIXME: Remove this version.
-    Expr *Import(Expr *FromE);
+    llvm::Expected<Expr *> Import(Expr *FromE);
 
     /// Import the given statement from the "from" context into the
     /// "to" context.
     ///
     /// \returns The equivalent statement in the "to" context, or the import
     /// error.
-    llvm::Expected<Stmt *> Import_New(Stmt *FromS);
-    // FIXME: Remove this version.
-    Stmt *Import(Stmt *FromS);
+    llvm::Expected<Stmt *> Import(Stmt *FromS);
 
     /// Import the given nested-name-specifier from the "from"
     /// context into the "to" context.
     ///
     /// \returns The equivalent nested-name-specifier in the "to"
     /// context, or the import error.
-    llvm::Expected<NestedNameSpecifier *>
-    Import_New(NestedNameSpecifier *FromNNS);
-    // FIXME: Remove this version.
-    NestedNameSpecifier *Import(NestedNameSpecifier *FromNNS);
+    llvm::Expected<NestedNameSpecifier *> Import(NestedNameSpecifier *FromNNS);
 
     /// Import the given nested-name-specifier-loc from the "from"
     /// context into the "to" context.
@@ -270,42 +400,32 @@
     /// \returns The equivalent nested-name-specifier-loc in the "to"
     /// context, or the import error.
     llvm::Expected<NestedNameSpecifierLoc>
-    Import_New(NestedNameSpecifierLoc FromNNS);
-    // FIXME: Remove this version.
-    NestedNameSpecifierLoc Import(NestedNameSpecifierLoc FromNNS);
+    Import(NestedNameSpecifierLoc FromNNS);
 
     /// Import the given template name from the "from" context into the
     /// "to" context, or the import error.
-    llvm::Expected<TemplateName> Import_New(TemplateName From);
-    // FIXME: Remove this version.
-    TemplateName Import(TemplateName From);
+    llvm::Expected<TemplateName> Import(TemplateName From);
 
     /// Import the given source location from the "from" context into
     /// the "to" context.
     ///
     /// \returns The equivalent source location in the "to" context, or the
     /// import error.
-    llvm::Expected<SourceLocation> Import_New(SourceLocation FromLoc);
-    // FIXME: Remove this version.
-    SourceLocation Import(SourceLocation FromLoc);
+    llvm::Expected<SourceLocation> Import(SourceLocation FromLoc);
 
     /// Import the given source range from the "from" context into
     /// the "to" context.
     ///
     /// \returns The equivalent source range in the "to" context, or the import
     /// error.
-    llvm::Expected<SourceRange> Import_New(SourceRange FromRange);
-    // FIXME: Remove this version.
-    SourceRange Import(SourceRange FromRange);
+    llvm::Expected<SourceRange> Import(SourceRange FromRange);
 
     /// Import the given declaration name from the "from"
     /// context into the "to" context.
     ///
     /// \returns The equivalent declaration name in the "to" context, or the
     /// import error.
-    llvm::Expected<DeclarationName> Import_New(DeclarationName FromName);
-    // FIXME: Remove this version.
-    DeclarationName Import(DeclarationName FromName);
+    llvm::Expected<DeclarationName> Import(DeclarationName FromName);
 
     /// Import the given identifier from the "from" context
     /// into the "to" context.
@@ -319,46 +439,32 @@
     ///
     /// \returns The equivalent selector in the "to" context, or the import
     /// error.
-    llvm::Expected<Selector> Import_New(Selector FromSel);
-    // FIXME: Remove this version.
-    Selector Import(Selector FromSel);
+    llvm::Expected<Selector> Import(Selector FromSel);
 
     /// Import the given file ID from the "from" context into the
     /// "to" context.
     ///
     /// \returns The equivalent file ID in the source manager of the "to"
     /// context, or the import error.
-    llvm::Expected<FileID> Import_New(FileID);
-    // FIXME: Remove this version.
-    FileID Import(FileID);
+    llvm::Expected<FileID> Import(FileID, bool IsBuiltin = false);
 
     /// Import the given C++ constructor initializer from the "from"
     /// context into the "to" context.
     ///
     /// \returns The equivalent initializer in the "to" context, or the import
     /// error.
-    llvm::Expected<CXXCtorInitializer *>
-    Import_New(CXXCtorInitializer *FromInit);
-    // FIXME: Remove this version.
-    CXXCtorInitializer *Import(CXXCtorInitializer *FromInit);
+    llvm::Expected<CXXCtorInitializer *> Import(CXXCtorInitializer *FromInit);
 
     /// Import the given CXXBaseSpecifier from the "from" context into
     /// the "to" context.
     ///
     /// \returns The equivalent CXXBaseSpecifier in the source manager of the
     /// "to" context, or the import error.
-    llvm::Expected<CXXBaseSpecifier *>
-    Import_New(const CXXBaseSpecifier *FromSpec);
-    // FIXME: Remove this version.
-    CXXBaseSpecifier *Import(const CXXBaseSpecifier *FromSpec);
+    llvm::Expected<CXXBaseSpecifier *> Import(const CXXBaseSpecifier *FromSpec);
 
     /// Import the definition of the given declaration, including all of
     /// the declarations it contains.
-    LLVM_NODISCARD llvm::Error ImportDefinition_New(Decl *From);
-
-    // FIXME: Compatibility function.
-    // Usages of this should be changed to ImportDefinition_New.
-    void ImportDefinition(Decl *From);
+    LLVM_NODISCARD llvm::Error ImportDefinition(Decl *From);
 
     /// Cope with a name conflict when importing a declaration into the
     /// given context.
@@ -421,9 +527,13 @@
 
     /// Subclasses can override this function to observe all of the \c From ->
     /// \c To declaration mappings as they are imported.
-    virtual Decl *Imported(Decl *From, Decl *To) { return To; }
+    virtual void Imported(Decl *From, Decl *To) {}
+
+    void RegisterImportedDecl(Decl *FromD, Decl *ToD);
 
     /// Store and assign the imported declaration to its counterpart.
+    /// It may happen that several decls from the 'from' context are mapped to
+    /// the same decl in the 'to' context.
     Decl *MapImported(Decl *From, Decl *To);
 
     /// Called by StructuralEquivalenceContext.  If a RecordDecl is
@@ -434,6 +544,14 @@
     /// importation, eliminating this loop.
     virtual Decl *GetOriginalDecl(Decl *To) { return nullptr; }
 
+    /// Return if import of the given declaration has failed and if yes
+    /// the kind of the problem. This gives the first error encountered with
+    /// the node.
+    llvm::Optional<ImportError> getImportDeclErrorIfAny(Decl *FromD) const;
+
+    /// Mark (newly) imported declaration with error.
+    void setImportDeclError(Decl *From, ImportError Error);
+
     /// Determine whether the given types are structurally
     /// equivalent.
     bool IsStructurallyEquivalent(QualType From, QualType To,
@@ -444,7 +562,6 @@
     /// \returns The index of the field in its parent context (starting from 0).
     /// On error `None` is returned (parent context is non-record).
     static llvm::Optional<unsigned> getFieldIndex(Decl *F);
-
   };
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/AST/ASTImporterSharedState.h b/linux-x64/clang/include/clang/AST/ASTImporterSharedState.h
new file mode 100644
index 0000000..3635a62
--- /dev/null
+++ b/linux-x64/clang/include/clang/AST/ASTImporterSharedState.h
@@ -0,0 +1,81 @@
+//===- ASTImporterSharedState.h - ASTImporter specific state --*- C++ -*---===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines the ASTImporter specific state, which may be shared
+//  amongst several ASTImporter objects.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_AST_ASTIMPORTERSHAREDSTATE_H
+#define LLVM_CLANG_AST_ASTIMPORTERSHAREDSTATE_H
+
+#include "clang/AST/ASTImporterLookupTable.h"
+#include "clang/AST/Decl.h"
+#include "llvm/ADT/DenseMap.h"
+// FIXME We need this because of ImportError.
+#include "clang/AST/ASTImporter.h"
+
+namespace clang {
+
+class TranslationUnitDecl;
+
+/// Importer specific state, which may be shared amongst several ASTImporter
+/// objects.
+class ASTImporterSharedState {
+
+  /// Pointer to the import specific lookup table.
+  std::unique_ptr<ASTImporterLookupTable> LookupTable;
+
+  /// Mapping from the already-imported declarations in the "to"
+  /// context to the error status of the import of that declaration.
+  /// This map contains only the declarations that were not correctly
+  /// imported. The same declaration may or may not be included in
+  /// ImportedFromDecls. This map is updated continuously during imports and
+  /// never cleared (like ImportedFromDecls).
+  llvm::DenseMap<Decl *, ImportError> ImportErrors;
+
+  // FIXME put ImportedFromDecls here!
+  // And from that point we can better encapsulate the lookup table.
+
+public:
+  ASTImporterSharedState() = default;
+
+  ASTImporterSharedState(TranslationUnitDecl &ToTU) {
+    LookupTable = llvm::make_unique<ASTImporterLookupTable>(ToTU);
+  }
+
+  ASTImporterLookupTable *getLookupTable() { return LookupTable.get(); }
+
+  void addDeclToLookup(Decl *D) {
+    if (LookupTable)
+      if (auto *ND = dyn_cast<NamedDecl>(D))
+        LookupTable->add(ND);
+  }
+
+  void removeDeclFromLookup(Decl *D) {
+    if (LookupTable)
+      if (auto *ND = dyn_cast<NamedDecl>(D))
+        LookupTable->remove(ND);
+  }
+
+  llvm::Optional<ImportError> getImportDeclErrorIfAny(Decl *ToD) const {
+    auto Pos = ImportErrors.find(ToD);
+    if (Pos != ImportErrors.end())
+      return Pos->second;
+    else
+      return Optional<ImportError>();
+  }
+
+  void setImportDeclError(Decl *To, ImportError Error) {
+    ImportErrors[To] = Error;
+  }
+};
+
+} // namespace clang
+#endif // LLVM_CLANG_AST_ASTIMPORTERSHAREDSTATE_H
diff --git a/linux-x64/clang/include/clang/AST/ASTMutationListener.h b/linux-x64/clang/include/clang/AST/ASTMutationListener.h
index ac115d4..8879f9f 100644
--- a/linux-x64/clang/include/clang/AST/ASTMutationListener.h
+++ b/linux-x64/clang/include/clang/AST/ASTMutationListener.h
@@ -127,6 +127,11 @@
   virtual void DeclarationMarkedOpenMPDeclareTarget(const Decl *D,
                                                     const Attr *Attr) {}
 
+  /// A declaration is marked as a variable with OpenMP allocator.
+  ///
+  /// \param D the declaration marked as a variable with OpenMP allocator.
+  virtual void DeclarationMarkedOpenMPAllocate(const Decl *D, const Attr *A) {}
+
   /// A definition has been made visible by being redefined locally.
   ///
   /// \param D The definition that was previously not visible.
diff --git a/linux-x64/clang/include/clang/AST/ASTNodeTraverser.h b/linux-x64/clang/include/clang/AST/ASTNodeTraverser.h
index 44c6f54..1d4025f 100644
--- a/linux-x64/clang/include/clang/AST/ASTNodeTraverser.h
+++ b/linux-x64/clang/include/clang/AST/ASTNodeTraverser.h
@@ -205,6 +205,24 @@
     });
   }
 
+  void Visit(const ast_type_traits::DynTypedNode &N) {
+    // FIXME: Improve this with a switch or a visitor pattern.
+    if (const auto *D = N.get<Decl>())
+      Visit(D);
+    else if (const auto *S = N.get<Stmt>())
+      Visit(S);
+    else if (const auto *QT = N.get<QualType>())
+      Visit(*QT);
+    else if (const auto *T = N.get<Type>())
+      Visit(T);
+    else if (const auto *C = N.get<CXXCtorInitializer>())
+      Visit(C);
+    else if (const auto *C = N.get<OMPClause>())
+      Visit(C);
+    else if (const auto *T = N.get<TemplateArgument>())
+      Visit(*T);
+  }
+
   void dumpDeclContext(const DeclContext *DC) {
     if (!DC)
       return;
@@ -221,8 +239,12 @@
       Visit(TP);
   }
 
-  void dumpTemplateArgumentListInfo(const TemplateArgumentListInfo &TALI) {
-    for (const auto &TA : TALI.arguments())
+  void
+  dumpASTTemplateArgumentListInfo(const ASTTemplateArgumentListInfo *TALI) {
+    if (!TALI)
+      return;
+
+    for (const auto &TA : TALI->arguments())
       dumpTemplateArgumentLoc(TA);
   }
 
@@ -393,6 +415,13 @@
     Visit(D->getInit());
   }
 
+  void VisitOMPAllocateDecl(const OMPAllocateDecl *D) {
+    for (const auto *E : D->varlists())
+      Visit(E);
+    for (const auto *C : D->clauselists())
+      Visit(C);
+  }
+
   template <typename SpecializationDecl>
   void dumpTemplateDeclSpecialization(const SpecializationDecl *D) {
     for (const auto *RedeclWithBadType : D->redecls()) {
@@ -458,8 +487,7 @@
   void VisitClassScopeFunctionSpecializationDecl(
       const ClassScopeFunctionSpecializationDecl *D) {
     Visit(D->getSpecialization());
-    if (D->hasExplicitTemplateArgs())
-      dumpTemplateArgumentListInfo(D->templateArgs());
+    dumpASTTemplateArgumentListInfo(D->getTemplateArgsAsWritten());
   }
   void VisitVarTemplateDecl(const VarTemplateDecl *D) { dumpTemplateDecl(D); }
 
diff --git a/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h b/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h
index 2fcc0ea..70e0daa 100644
--- a/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h
+++ b/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h
@@ -111,6 +111,10 @@
   static llvm::Optional<unsigned>
   findUntaggedStructOrUnionIndex(RecordDecl *Anon);
 
+  // If ErrorOnTagTypeMismatch is set, return the the error, otherwise get the
+  // relevant warning for the input error diagnostic.
+  unsigned getApplicableDiagnostic(unsigned ErrorDiagnostic);
+
 private:
   /// Finish checking all of the structural equivalences.
   ///
diff --git a/linux-x64/clang/include/clang/AST/ASTTypeTraits.h b/linux-x64/clang/include/clang/AST/ASTTypeTraits.h
index 71c0ec4..a29a04e 100644
--- a/linux-x64/clang/include/clang/AST/ASTTypeTraits.h
+++ b/linux-x64/clang/include/clang/AST/ASTTypeTraits.h
@@ -18,6 +18,7 @@
 #include "clang/AST/ASTFwd.h"
 #include "clang/AST/Decl.h"
 #include "clang/AST/NestedNameSpecifier.h"
+#include "clang/AST/OpenMPClause.h"
 #include "clang/AST/Stmt.h"
 #include "clang/AST/TemplateBase.h"
 #include "clang/AST/TypeLoc.h"
@@ -37,6 +38,17 @@
 
 namespace ast_type_traits {
 
+/// Defines how we descend a level in the AST when we pass
+/// through expressions.
+enum TraversalKind {
+  /// Will traverse all child nodes.
+  TK_AsIs,
+
+  /// Will not traverse implicit casts and parentheses.
+  /// Corresponds to Expr::IgnoreParenImpCasts()
+  TK_IgnoreImplicitCastsAndParentheses
+};
+
 /// Kind identifier.
 ///
 /// It can be constructed from any node kind and allows for runtime type
@@ -58,6 +70,7 @@
   static ASTNodeKind getFromNode(const Decl &D);
   static ASTNodeKind getFromNode(const Stmt &S);
   static ASTNodeKind getFromNode(const Type &T);
+  static ASTNodeKind getFromNode(const OMPClause &C);
   /// \}
 
   /// Returns \c true if \c this and \c Other represent the same kind.
@@ -136,6 +149,9 @@
     NKI_Type,
 #define TYPE(DERIVED, BASE) NKI_##DERIVED##Type,
 #include "clang/AST/TypeNodes.def"
+    NKI_OMPClause,
+#define OPENMP_CLAUSE(TextualSpelling, Class) NKI_##Class,
+#include "clang/Basic/OpenMPKinds.def"
     NKI_NumberOfKinds
   };
 
@@ -183,12 +199,15 @@
 KIND_TO_KIND_ID(Decl)
 KIND_TO_KIND_ID(Stmt)
 KIND_TO_KIND_ID(Type)
+KIND_TO_KIND_ID(OMPClause)
 #define DECL(DERIVED, BASE) KIND_TO_KIND_ID(DERIVED##Decl)
 #include "clang/AST/DeclNodes.inc"
 #define STMT(DERIVED, BASE) KIND_TO_KIND_ID(DERIVED)
 #include "clang/AST/StmtNodes.inc"
 #define TYPE(DERIVED, BASE) KIND_TO_KIND_ID(DERIVED##Type)
 #include "clang/AST/TypeNodes.def"
+#define OPENMP_CLAUSE(TextualSpelling, Class) KIND_TO_KIND_ID(Class)
+#include "clang/Basic/OpenMPKinds.def"
 #undef KIND_TO_KIND_ID
 
 inline raw_ostream &operator<<(raw_ostream &OS, ASTNodeKind K) {
@@ -459,6 +478,11 @@
     T, typename std::enable_if<std::is_base_of<Type, T>::value>::type>
     : public DynCastPtrConverter<T, Type> {};
 
+template <typename T>
+struct DynTypedNode::BaseConverter<
+    T, typename std::enable_if<std::is_base_of<OMPClause, T>::value>::type>
+    : public DynCastPtrConverter<T, OMPClause> {};
+
 template <>
 struct DynTypedNode::BaseConverter<
     NestedNameSpecifier, void> : public PtrConverter<NestedNameSpecifier> {};
diff --git a/linux-x64/clang/include/clang/AST/AttrImpl.inc b/linux-x64/clang/include/clang/AST/AttrImpl.inc
index 87f287c..9a4d86d 100644
--- a/linux-x64/clang/include/clang/AST/AttrImpl.inc
+++ b/linux-x64/clang/include/clang/AST/AttrImpl.inc
@@ -3664,48 +3664,6 @@
   }
 }
 
-FortifyStdLibAttr *FortifyStdLibAttr::clone(ASTContext &C) const {
-  auto *A = new (C) FortifyStdLibAttr(getLocation(), C, type, flag, getSpellingListIndex());
-  A->Inherited = Inherited;
-  A->IsPackExpansion = IsPackExpansion;
-  A->Implicit = Implicit;
-  return A;
-}
-
-void FortifyStdLibAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
-  switch (SpellingListIndex) {
-  default:
-    llvm_unreachable("Unknown attribute spelling!");
-    break;
-  case 0 : {
-    OS << " __attribute__((fortify_stdlib(" << getType() << ", " << getFlag() << ")))";
-    break;
-  }
-  case 1 : {
-    OS << " [[clang::fortify_stdlib(" << getType() << ", " << getFlag() << ")]]";
-    break;
-  }
-  case 2 : {
-    OS << " [[clang::fortify_stdlib(" << getType() << ", " << getFlag() << ")]]";
-    break;
-  }
-}
-}
-
-const char *FortifyStdLibAttr::getSpelling() const {
-  switch (SpellingListIndex) {
-  default:
-    llvm_unreachable("Unknown attribute spelling!");
-    return "(No spelling)";
-  case 0:
-    return "fortify_stdlib";
-  case 1:
-    return "fortify_stdlib";
-  case 2:
-    return "fortify_stdlib";
-  }
-}
-
 GNUInlineAttr *GNUInlineAttr::clone(ASTContext &C) const {
   auto *A = new (C) GNUInlineAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -3808,6 +3766,42 @@
   }
 }
 
+HIPPinnedShadowAttr *HIPPinnedShadowAttr::clone(ASTContext &C) const {
+  auto *A = new (C) HIPPinnedShadowAttr(getLocation(), C, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void HIPPinnedShadowAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((hip_pinned_shadow))";
+    break;
+  }
+  case 1 : {
+    OS << " __declspec(__hip_pinned_shadow__)";
+    break;
+  }
+}
+}
+
+const char *HIPPinnedShadowAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "hip_pinned_shadow";
+  case 1:
+    return "__hip_pinned_shadow__";
+  }
+}
+
 HotAttr *HotAttr::clone(ASTContext &C) const {
   auto *A = new (C) HotAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -4385,6 +4379,48 @@
   }
 }
 
+MIGServerRoutineAttr *MIGServerRoutineAttr::clone(ASTContext &C) const {
+  auto *A = new (C) MIGServerRoutineAttr(getLocation(), C, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void MIGServerRoutineAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((mig_server_routine))";
+    break;
+  }
+  case 1 : {
+    OS << " [[clang::mig_server_routine]]";
+    break;
+  }
+  case 2 : {
+    OS << " [[clang::mig_server_routine]]";
+    break;
+  }
+}
+}
+
+const char *MIGServerRoutineAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "mig_server_routine";
+  case 1:
+    return "mig_server_routine";
+  case 2:
+    return "mig_server_routine";
+  }
+}
+
 MSABIAttr *MSABIAttr::clone(ASTContext &C) const {
   auto *A = new (C) MSABIAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -4421,6 +4457,36 @@
   }
 }
 
+MSAllocatorAttr *MSAllocatorAttr::clone(ASTContext &C) const {
+  auto *A = new (C) MSAllocatorAttr(getLocation(), C, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void MSAllocatorAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __declspec(allocator)";
+    break;
+  }
+}
+}
+
+const char *MSAllocatorAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "allocator";
+  }
+}
+
 MSInheritanceAttr *MSInheritanceAttr::clone(ASTContext &C) const {
   auto *A = new (C) MSInheritanceAttr(getLocation(), C, bestCase, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -5936,6 +6002,36 @@
   }
 }
 
+NoUniqueAddressAttr *NoUniqueAddressAttr::clone(ASTContext &C) const {
+  auto *A = new (C) NoUniqueAddressAttr(getLocation(), C, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void NoUniqueAddressAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " [[no_unique_address]]";
+    break;
+  }
+}
+}
+
+const char *NoUniqueAddressAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "no_unique_address";
+  }
+}
+
 NonNullAttr *NonNullAttr::clone(ASTContext &C) const {
   auto *A = new (C) NonNullAttr(getLocation(), C, args_, args_Size, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -6028,6 +6124,21 @@
   }
 }
 
+OMPAllocateDeclAttr *OMPAllocateDeclAttr::clone(ASTContext &C) const {
+  auto *A = new (C) OMPAllocateDeclAttr(getLocation(), C, allocatorType, allocator, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void OMPAllocateDeclAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+}
+
+const char *OMPAllocateDeclAttr::getSpelling() const {
+  return "(No spelling)";
+}
+
 OMPCaptureKindAttr *OMPCaptureKindAttr::clone(ASTContext &C) const {
   auto *A = new (C) OMPCaptureKindAttr(getLocation(), C, captureKind, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -6570,6 +6681,48 @@
   }
 }
 
+ObjCClassStubAttr *ObjCClassStubAttr::clone(ASTContext &C) const {
+  auto *A = new (C) ObjCClassStubAttr(getLocation(), C, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void ObjCClassStubAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((objc_class_stub))";
+    break;
+  }
+  case 1 : {
+    OS << " [[clang::objc_class_stub]]";
+    break;
+  }
+  case 2 : {
+    OS << " [[clang::objc_class_stub]]";
+    break;
+  }
+}
+}
+
+const char *ObjCClassStubAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "objc_class_stub";
+  case 1:
+    return "objc_class_stub";
+  case 2:
+    return "objc_class_stub";
+  }
+}
+
 ObjCDesignatedInitializerAttr *ObjCDesignatedInitializerAttr::clone(ASTContext &C) const {
   auto *A = new (C) ObjCDesignatedInitializerAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -8128,6 +8281,18 @@
     OS << " [[clang::pass_object_size(" << getType() << ")]]";
     break;
   }
+  case 3 : {
+    OS << " __attribute__((pass_dynamic_object_size(" << getType() << ")))";
+    break;
+  }
+  case 4 : {
+    OS << " [[clang::pass_dynamic_object_size(" << getType() << ")]]";
+    break;
+  }
+  case 5 : {
+    OS << " [[clang::pass_dynamic_object_size(" << getType() << ")]]";
+    break;
+  }
 }
 }
 
@@ -8142,6 +8307,12 @@
     return "pass_object_size";
   case 2:
     return "pass_object_size";
+  case 3:
+    return "pass_dynamic_object_size";
+  case 4:
+    return "pass_dynamic_object_size";
+  case 5:
+    return "pass_dynamic_object_size";
   }
 }
 
@@ -11221,14 +11392,14 @@
     return cast<FormatAttr>(this)->getSpelling();
   case attr::FormatArg:
     return cast<FormatArgAttr>(this)->getSpelling();
-  case attr::FortifyStdLib:
-    return cast<FortifyStdLibAttr>(this)->getSpelling();
   case attr::GNUInline:
     return cast<GNUInlineAttr>(this)->getSpelling();
   case attr::GuardedBy:
     return cast<GuardedByAttr>(this)->getSpelling();
   case attr::GuardedVar:
     return cast<GuardedVarAttr>(this)->getSpelling();
+  case attr::HIPPinnedShadow:
+    return cast<HIPPinnedShadowAttr>(this)->getSpelling();
   case attr::Hot:
     return cast<HotAttr>(this)->getSpelling();
   case attr::IBAction:
@@ -11259,8 +11430,12 @@
     return cast<LocksExcludedAttr>(this)->getSpelling();
   case attr::LoopHint:
     return cast<LoopHintAttr>(this)->getSpelling();
+  case attr::MIGServerRoutine:
+    return cast<MIGServerRoutineAttr>(this)->getSpelling();
   case attr::MSABI:
     return cast<MSABIAttr>(this)->getSpelling();
+  case attr::MSAllocator:
+    return cast<MSAllocatorAttr>(this)->getSpelling();
   case attr::MSInheritance:
     return cast<MSInheritanceAttr>(this)->getSpelling();
   case attr::MSNoVTable:
@@ -11339,10 +11514,14 @@
     return cast<NoThreadSafetyAnalysisAttr>(this)->getSpelling();
   case attr::NoThrow:
     return cast<NoThrowAttr>(this)->getSpelling();
+  case attr::NoUniqueAddress:
+    return cast<NoUniqueAddressAttr>(this)->getSpelling();
   case attr::NonNull:
     return cast<NonNullAttr>(this)->getSpelling();
   case attr::NotTailCalled:
     return cast<NotTailCalledAttr>(this)->getSpelling();
+  case attr::OMPAllocateDecl:
+    return cast<OMPAllocateDeclAttr>(this)->getSpelling();
   case attr::OMPCaptureKind:
     return cast<OMPCaptureKindAttr>(this)->getSpelling();
   case attr::OMPCaptureNoInit:
@@ -11375,6 +11554,8 @@
     return cast<ObjCBridgeMutableAttr>(this)->getSpelling();
   case attr::ObjCBridgeRelated:
     return cast<ObjCBridgeRelatedAttr>(this)->getSpelling();
+  case attr::ObjCClassStub:
+    return cast<ObjCClassStubAttr>(this)->getSpelling();
   case attr::ObjCDesignatedInitializer:
     return cast<ObjCDesignatedInitializerAttr>(this)->getSpelling();
   case attr::ObjCException:
@@ -11779,14 +11960,14 @@
     return cast<FormatAttr>(this)->clone(C);
   case attr::FormatArg:
     return cast<FormatArgAttr>(this)->clone(C);
-  case attr::FortifyStdLib:
-    return cast<FortifyStdLibAttr>(this)->clone(C);
   case attr::GNUInline:
     return cast<GNUInlineAttr>(this)->clone(C);
   case attr::GuardedBy:
     return cast<GuardedByAttr>(this)->clone(C);
   case attr::GuardedVar:
     return cast<GuardedVarAttr>(this)->clone(C);
+  case attr::HIPPinnedShadow:
+    return cast<HIPPinnedShadowAttr>(this)->clone(C);
   case attr::Hot:
     return cast<HotAttr>(this)->clone(C);
   case attr::IBAction:
@@ -11817,8 +11998,12 @@
     return cast<LocksExcludedAttr>(this)->clone(C);
   case attr::LoopHint:
     return cast<LoopHintAttr>(this)->clone(C);
+  case attr::MIGServerRoutine:
+    return cast<MIGServerRoutineAttr>(this)->clone(C);
   case attr::MSABI:
     return cast<MSABIAttr>(this)->clone(C);
+  case attr::MSAllocator:
+    return cast<MSAllocatorAttr>(this)->clone(C);
   case attr::MSInheritance:
     return cast<MSInheritanceAttr>(this)->clone(C);
   case attr::MSNoVTable:
@@ -11897,10 +12082,14 @@
     return cast<NoThreadSafetyAnalysisAttr>(this)->clone(C);
   case attr::NoThrow:
     return cast<NoThrowAttr>(this)->clone(C);
+  case attr::NoUniqueAddress:
+    return cast<NoUniqueAddressAttr>(this)->clone(C);
   case attr::NonNull:
     return cast<NonNullAttr>(this)->clone(C);
   case attr::NotTailCalled:
     return cast<NotTailCalledAttr>(this)->clone(C);
+  case attr::OMPAllocateDecl:
+    return cast<OMPAllocateDeclAttr>(this)->clone(C);
   case attr::OMPCaptureKind:
     return cast<OMPCaptureKindAttr>(this)->clone(C);
   case attr::OMPCaptureNoInit:
@@ -11933,6 +12122,8 @@
     return cast<ObjCBridgeMutableAttr>(this)->clone(C);
   case attr::ObjCBridgeRelated:
     return cast<ObjCBridgeRelatedAttr>(this)->clone(C);
+  case attr::ObjCClassStub:
+    return cast<ObjCClassStubAttr>(this)->clone(C);
   case attr::ObjCDesignatedInitializer:
     return cast<ObjCDesignatedInitializerAttr>(this)->clone(C);
   case attr::ObjCException:
@@ -12337,14 +12528,14 @@
     return cast<FormatAttr>(this)->printPretty(OS, Policy);
   case attr::FormatArg:
     return cast<FormatArgAttr>(this)->printPretty(OS, Policy);
-  case attr::FortifyStdLib:
-    return cast<FortifyStdLibAttr>(this)->printPretty(OS, Policy);
   case attr::GNUInline:
     return cast<GNUInlineAttr>(this)->printPretty(OS, Policy);
   case attr::GuardedBy:
     return cast<GuardedByAttr>(this)->printPretty(OS, Policy);
   case attr::GuardedVar:
     return cast<GuardedVarAttr>(this)->printPretty(OS, Policy);
+  case attr::HIPPinnedShadow:
+    return cast<HIPPinnedShadowAttr>(this)->printPretty(OS, Policy);
   case attr::Hot:
     return cast<HotAttr>(this)->printPretty(OS, Policy);
   case attr::IBAction:
@@ -12375,8 +12566,12 @@
     return cast<LocksExcludedAttr>(this)->printPretty(OS, Policy);
   case attr::LoopHint:
     return cast<LoopHintAttr>(this)->printPretty(OS, Policy);
+  case attr::MIGServerRoutine:
+    return cast<MIGServerRoutineAttr>(this)->printPretty(OS, Policy);
   case attr::MSABI:
     return cast<MSABIAttr>(this)->printPretty(OS, Policy);
+  case attr::MSAllocator:
+    return cast<MSAllocatorAttr>(this)->printPretty(OS, Policy);
   case attr::MSInheritance:
     return cast<MSInheritanceAttr>(this)->printPretty(OS, Policy);
   case attr::MSNoVTable:
@@ -12455,10 +12650,14 @@
     return cast<NoThreadSafetyAnalysisAttr>(this)->printPretty(OS, Policy);
   case attr::NoThrow:
     return cast<NoThrowAttr>(this)->printPretty(OS, Policy);
+  case attr::NoUniqueAddress:
+    return cast<NoUniqueAddressAttr>(this)->printPretty(OS, Policy);
   case attr::NonNull:
     return cast<NonNullAttr>(this)->printPretty(OS, Policy);
   case attr::NotTailCalled:
     return cast<NotTailCalledAttr>(this)->printPretty(OS, Policy);
+  case attr::OMPAllocateDecl:
+    return cast<OMPAllocateDeclAttr>(this)->printPretty(OS, Policy);
   case attr::OMPCaptureKind:
     return cast<OMPCaptureKindAttr>(this)->printPretty(OS, Policy);
   case attr::OMPCaptureNoInit:
@@ -12491,6 +12690,8 @@
     return cast<ObjCBridgeMutableAttr>(this)->printPretty(OS, Policy);
   case attr::ObjCBridgeRelated:
     return cast<ObjCBridgeRelatedAttr>(this)->printPretty(OS, Policy);
+  case attr::ObjCClassStub:
+    return cast<ObjCClassStubAttr>(this)->printPretty(OS, Policy);
   case attr::ObjCDesignatedInitializer:
     return cast<ObjCDesignatedInitializerAttr>(this)->printPretty(OS, Policy);
   case attr::ObjCException:
diff --git a/linux-x64/clang/include/clang/AST/AttrNodeTraverse.inc b/linux-x64/clang/include/clang/AST/AttrNodeTraverse.inc
index f3863cf..7266499 100644
--- a/linux-x64/clang/include/clang/AST/AttrNodeTraverse.inc
+++ b/linux-x64/clang/include/clang/AST/AttrNodeTraverse.inc
@@ -6,6 +6,16 @@
 |*                                                                            *|
 \*===----------------------------------------------------------------------===*/
 
+  void VisitAMDGPUFlatWorkGroupSizeAttr(const AMDGPUFlatWorkGroupSizeAttr *A) {
+    const auto *SA = cast<AMDGPUFlatWorkGroupSizeAttr>(A); (void)SA;
+    Visit(SA->getMin());
+    Visit(SA->getMax());
+  }
+  void VisitAMDGPUWavesPerEUAttr(const AMDGPUWavesPerEUAttr *A) {
+    const auto *SA = cast<AMDGPUWavesPerEUAttr>(A); (void)SA;
+    Visit(SA->getMin());
+    Visit(SA->getMax());
+  }
   void VisitAcquireCapabilityAttr(const AcquireCapabilityAttr *A) {
     const auto *SA = cast<AcquireCapabilityAttr>(A); (void)SA;
     for (AcquireCapabilityAttr::args_iterator I = SA->args_begin(), E = SA->args_end(); I != E; ++I)
@@ -86,6 +96,10 @@
     const auto *SA = cast<LoopHintAttr>(A); (void)SA;
     Visit(SA->getValue());
   }
+  void VisitOMPAllocateDeclAttr(const OMPAllocateDeclAttr *A) {
+    const auto *SA = cast<OMPAllocateDeclAttr>(A); (void)SA;
+    Visit(SA->getAllocator());
+  }
   void VisitOMPDeclareSimdDeclAttr(const OMPDeclareSimdDeclAttr *A) {
     const auto *SA = cast<OMPDeclareSimdDeclAttr>(A); (void)SA;
     Visit(SA->getSimdlen());
diff --git a/linux-x64/clang/include/clang/AST/AttrTextNodeDump.inc b/linux-x64/clang/include/clang/AST/AttrTextNodeDump.inc
index 239b532..7e13c04 100644
--- a/linux-x64/clang/include/clang/AST/AttrTextNodeDump.inc
+++ b/linux-x64/clang/include/clang/AST/AttrTextNodeDump.inc
@@ -6,11 +6,6 @@
 |*                                                                            *|
 \*===----------------------------------------------------------------------===*/
 
-  void VisitAMDGPUFlatWorkGroupSizeAttr(const AMDGPUFlatWorkGroupSizeAttr *A) {
-    const auto *SA = cast<AMDGPUFlatWorkGroupSizeAttr>(A); (void)SA;
-    OS << " " << SA->getMin();
-    OS << " " << SA->getMax();
-  }
   void VisitAMDGPUNumSGPRAttr(const AMDGPUNumSGPRAttr *A) {
     const auto *SA = cast<AMDGPUNumSGPRAttr>(A); (void)SA;
     OS << " " << SA->getNumSGPR();
@@ -19,11 +14,6 @@
     const auto *SA = cast<AMDGPUNumVGPRAttr>(A); (void)SA;
     OS << " " << SA->getNumVGPR();
   }
-  void VisitAMDGPUWavesPerEUAttr(const AMDGPUWavesPerEUAttr *A) {
-    const auto *SA = cast<AMDGPUWavesPerEUAttr>(A); (void)SA;
-    OS << " " << SA->getMin();
-    OS << " " << SA->getMax();
-  }
   void VisitARMInterruptAttr(const ARMInterruptAttr *A) {
     const auto *SA = cast<ARMInterruptAttr>(A); (void)SA;
     switch(SA->getInterrupt()) {
@@ -247,11 +237,6 @@
     const auto *SA = cast<FormatArgAttr>(A); (void)SA;
     OS << " " << SA->getFormatIdx().getSourceIndex();
   }
-  void VisitFortifyStdLibAttr(const FortifyStdLibAttr *A) {
-    const auto *SA = cast<FortifyStdLibAttr>(A); (void)SA;
-    OS << " " << SA->getType();
-    OS << " " << SA->getFlag();
-  }
   void VisitIBOutletCollectionAttr(const IBOutletCollectionAttr *A) {
     const auto *SA = cast<IBOutletCollectionAttr>(A); (void)SA;
     OS << " " << SA->getInterface().getAsString();
@@ -402,6 +387,38 @@
     for (const auto &Val : SA->args())
       OS << " " << Val.getSourceIndex();
   }
+  void VisitOMPAllocateDeclAttr(const OMPAllocateDeclAttr *A) {
+    const auto *SA = cast<OMPAllocateDeclAttr>(A); (void)SA;
+    switch(SA->getAllocatorType()) {
+    case OMPAllocateDeclAttr::OMPDefaultMemAlloc:
+      OS << " OMPDefaultMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPLargeCapMemAlloc:
+      OS << " OMPLargeCapMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPConstMemAlloc:
+      OS << " OMPConstMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPHighBWMemAlloc:
+      OS << " OMPHighBWMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPLowLatMemAlloc:
+      OS << " OMPLowLatMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPCGroupMemAlloc:
+      OS << " OMPCGroupMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPPTeamMemAlloc:
+      OS << " OMPPTeamMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPThreadMemAlloc:
+      OS << " OMPThreadMemAlloc";
+      break;
+    case OMPAllocateDeclAttr::OMPUserDefinedMemAlloc:
+      OS << " OMPUserDefinedMemAlloc";
+      break;
+    }
+  }
   void VisitOMPCaptureKindAttr(const OMPCaptureKindAttr *A) {
     const auto *SA = cast<OMPCaptureKindAttr>(A); (void)SA;
     OS << " " << SA->getCaptureKind();
@@ -524,6 +541,7 @@
   }
   void VisitPassObjectSizeAttr(const PassObjectSizeAttr *A) {
     const auto *SA = cast<PassObjectSizeAttr>(A); (void)SA;
+    OS << " " << A->getSpelling();
     OS << " " << SA->getType();
   }
   void VisitPcsAttr(const PcsAttr *A) {
diff --git a/linux-x64/clang/include/clang/AST/AttrVisitor.inc b/linux-x64/clang/include/clang/AST/AttrVisitor.inc
index 08311b9..9677ff0 100644
--- a/linux-x64/clang/include/clang/AST/AttrVisitor.inc
+++ b/linux-x64/clang/include/clang/AST/AttrVisitor.inc
@@ -364,10 +364,6 @@
   bool VisitFormatArgAttr(FormatArgAttr *A) {
     return true; 
   }
-  bool TraverseFortifyStdLibAttr(FortifyStdLibAttr *A);
-  bool VisitFortifyStdLibAttr(FortifyStdLibAttr *A) {
-    return true; 
-  }
   bool TraverseGNUInlineAttr(GNUInlineAttr *A);
   bool VisitGNUInlineAttr(GNUInlineAttr *A) {
     return true; 
@@ -380,6 +376,10 @@
   bool VisitGuardedVarAttr(GuardedVarAttr *A) {
     return true; 
   }
+  bool TraverseHIPPinnedShadowAttr(HIPPinnedShadowAttr *A);
+  bool VisitHIPPinnedShadowAttr(HIPPinnedShadowAttr *A) {
+    return true; 
+  }
   bool TraverseHotAttr(HotAttr *A);
   bool VisitHotAttr(HotAttr *A) {
     return true; 
@@ -440,10 +440,18 @@
   bool VisitLoopHintAttr(LoopHintAttr *A) {
     return true; 
   }
+  bool TraverseMIGServerRoutineAttr(MIGServerRoutineAttr *A);
+  bool VisitMIGServerRoutineAttr(MIGServerRoutineAttr *A) {
+    return true; 
+  }
   bool TraverseMSABIAttr(MSABIAttr *A);
   bool VisitMSABIAttr(MSABIAttr *A) {
     return true; 
   }
+  bool TraverseMSAllocatorAttr(MSAllocatorAttr *A);
+  bool VisitMSAllocatorAttr(MSAllocatorAttr *A) {
+    return true; 
+  }
   bool TraverseMSInheritanceAttr(MSInheritanceAttr *A);
   bool VisitMSInheritanceAttr(MSInheritanceAttr *A) {
     return true; 
@@ -600,6 +608,10 @@
   bool VisitNoThrowAttr(NoThrowAttr *A) {
     return true; 
   }
+  bool TraverseNoUniqueAddressAttr(NoUniqueAddressAttr *A);
+  bool VisitNoUniqueAddressAttr(NoUniqueAddressAttr *A) {
+    return true; 
+  }
   bool TraverseNonNullAttr(NonNullAttr *A);
   bool VisitNonNullAttr(NonNullAttr *A) {
     return true; 
@@ -608,6 +620,10 @@
   bool VisitNotTailCalledAttr(NotTailCalledAttr *A) {
     return true; 
   }
+  bool TraverseOMPAllocateDeclAttr(OMPAllocateDeclAttr *A);
+  bool VisitOMPAllocateDeclAttr(OMPAllocateDeclAttr *A) {
+    return true; 
+  }
   bool TraverseOMPCaptureKindAttr(OMPCaptureKindAttr *A);
   bool VisitOMPCaptureKindAttr(OMPCaptureKindAttr *A) {
     return true; 
@@ -672,6 +688,10 @@
   bool VisitObjCBridgeRelatedAttr(ObjCBridgeRelatedAttr *A) {
     return true; 
   }
+  bool TraverseObjCClassStubAttr(ObjCClassStubAttr *A);
+  bool VisitObjCClassStubAttr(ObjCClassStubAttr *A) {
+    return true; 
+  }
   bool TraverseObjCDesignatedInitializerAttr(ObjCDesignatedInitializerAttr *A);
   bool VisitObjCDesignatedInitializerAttr(ObjCDesignatedInitializerAttr *A) {
     return true; 
@@ -1130,6 +1150,10 @@
     return false;
   if (!getDerived().VisitAMDGPUFlatWorkGroupSizeAttr(A))
     return false;
+  if (!getDerived().TraverseStmt(A->getMin()))
+    return false;
+  if (!getDerived().TraverseStmt(A->getMax()))
+    return false;
   return true;
 }
 
@@ -1157,6 +1181,10 @@
     return false;
   if (!getDerived().VisitAMDGPUWavesPerEUAttr(A))
     return false;
+  if (!getDerived().TraverseStmt(A->getMin()))
+    return false;
+  if (!getDerived().TraverseStmt(A->getMax()))
+    return false;
   return true;
 }
 
@@ -1996,15 +2024,6 @@
 }
 
 template <typename Derived>
-bool VISITORCLASS<Derived>::TraverseFortifyStdLibAttr(FortifyStdLibAttr *A) {
-  if (!getDerived().VisitAttr(A))
-    return false;
-  if (!getDerived().VisitFortifyStdLibAttr(A))
-    return false;
-  return true;
-}
-
-template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseGNUInlineAttr(GNUInlineAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2034,6 +2053,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseHIPPinnedShadowAttr(HIPPinnedShadowAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitHIPPinnedShadowAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseHotAttr(HotAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2184,6 +2212,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseMIGServerRoutineAttr(MIGServerRoutineAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitMIGServerRoutineAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseMSABIAttr(MSABIAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2193,6 +2230,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseMSAllocatorAttr(MSAllocatorAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitMSAllocatorAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseMSInheritanceAttr(MSInheritanceAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2544,6 +2590,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseNoUniqueAddressAttr(NoUniqueAddressAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitNoUniqueAddressAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseNonNullAttr(NonNullAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2562,6 +2617,17 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseOMPAllocateDeclAttr(OMPAllocateDeclAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitOMPAllocateDeclAttr(A))
+    return false;
+  if (!getDerived().TraverseStmt(A->getAllocator()))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseOMPCaptureKindAttr(OMPCaptureKindAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2750,6 +2816,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseObjCClassStubAttr(ObjCClassStubAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitObjCClassStubAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseObjCDesignatedInitializerAttr(ObjCDesignatedInitializerAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -3967,14 +4042,14 @@
       return getDerived().TraverseFormatAttr(cast<FormatAttr>(A));
     case attr::FormatArg:
       return getDerived().TraverseFormatArgAttr(cast<FormatArgAttr>(A));
-    case attr::FortifyStdLib:
-      return getDerived().TraverseFortifyStdLibAttr(cast<FortifyStdLibAttr>(A));
     case attr::GNUInline:
       return getDerived().TraverseGNUInlineAttr(cast<GNUInlineAttr>(A));
     case attr::GuardedBy:
       return getDerived().TraverseGuardedByAttr(cast<GuardedByAttr>(A));
     case attr::GuardedVar:
       return getDerived().TraverseGuardedVarAttr(cast<GuardedVarAttr>(A));
+    case attr::HIPPinnedShadow:
+      return getDerived().TraverseHIPPinnedShadowAttr(cast<HIPPinnedShadowAttr>(A));
     case attr::Hot:
       return getDerived().TraverseHotAttr(cast<HotAttr>(A));
     case attr::IBAction:
@@ -4005,8 +4080,12 @@
       return getDerived().TraverseLocksExcludedAttr(cast<LocksExcludedAttr>(A));
     case attr::LoopHint:
       return getDerived().TraverseLoopHintAttr(cast<LoopHintAttr>(A));
+    case attr::MIGServerRoutine:
+      return getDerived().TraverseMIGServerRoutineAttr(cast<MIGServerRoutineAttr>(A));
     case attr::MSABI:
       return getDerived().TraverseMSABIAttr(cast<MSABIAttr>(A));
+    case attr::MSAllocator:
+      return getDerived().TraverseMSAllocatorAttr(cast<MSAllocatorAttr>(A));
     case attr::MSInheritance:
       return getDerived().TraverseMSInheritanceAttr(cast<MSInheritanceAttr>(A));
     case attr::MSNoVTable:
@@ -4085,10 +4164,14 @@
       return getDerived().TraverseNoThreadSafetyAnalysisAttr(cast<NoThreadSafetyAnalysisAttr>(A));
     case attr::NoThrow:
       return getDerived().TraverseNoThrowAttr(cast<NoThrowAttr>(A));
+    case attr::NoUniqueAddress:
+      return getDerived().TraverseNoUniqueAddressAttr(cast<NoUniqueAddressAttr>(A));
     case attr::NonNull:
       return getDerived().TraverseNonNullAttr(cast<NonNullAttr>(A));
     case attr::NotTailCalled:
       return getDerived().TraverseNotTailCalledAttr(cast<NotTailCalledAttr>(A));
+    case attr::OMPAllocateDecl:
+      return getDerived().TraverseOMPAllocateDeclAttr(cast<OMPAllocateDeclAttr>(A));
     case attr::OMPCaptureKind:
       return getDerived().TraverseOMPCaptureKindAttr(cast<OMPCaptureKindAttr>(A));
     case attr::OMPCaptureNoInit:
@@ -4121,6 +4204,8 @@
       return getDerived().TraverseObjCBridgeMutableAttr(cast<ObjCBridgeMutableAttr>(A));
     case attr::ObjCBridgeRelated:
       return getDerived().TraverseObjCBridgeRelatedAttr(cast<ObjCBridgeRelatedAttr>(A));
+    case attr::ObjCClassStub:
+      return getDerived().TraverseObjCClassStubAttr(cast<ObjCClassStubAttr>(A));
     case attr::ObjCDesignatedInitializer:
       return getDerived().TraverseObjCDesignatedInitializerAttr(cast<ObjCDesignatedInitializerAttr>(A));
     case attr::ObjCException:
diff --git a/linux-x64/clang/include/clang/AST/Attrs.inc b/linux-x64/clang/include/clang/AST/Attrs.inc
index 1409c69..2ac8169 100644
--- a/linux-x64/clang/include/clang/AST/Attrs.inc
+++ b/linux-x64/clang/include/clang/AST/Attrs.inc
@@ -34,20 +34,20 @@
 };
 
 class AMDGPUFlatWorkGroupSizeAttr : public InheritableAttr {
-unsigned min;
+Expr * min;
 
-unsigned max;
+Expr * max;
 
 public:
-  static AMDGPUFlatWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned Min, unsigned Max, SourceRange Loc = SourceRange()) {
+  static AMDGPUFlatWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Loc = SourceRange()) {
     auto *A = new (Ctx) AMDGPUFlatWorkGroupSizeAttr(Loc, Ctx, Min, Max, 0);
     A->setImplicit(true);
     return A;
   }
 
   AMDGPUFlatWorkGroupSizeAttr(SourceRange R, ASTContext &Ctx
-              , unsigned Min
-              , unsigned Max
+              , Expr * Min
+              , Expr * Max
               , unsigned SI
              )
     : InheritableAttr(attr::AMDGPUFlatWorkGroupSize, R, SI, false, false)
@@ -60,11 +60,11 @@
   void printPretty(raw_ostream &OS,
                    const PrintingPolicy &Policy) const;
   const char *getSpelling() const;
-  unsigned getMin() const {
+  Expr * getMin() const {
     return min;
   }
 
-  unsigned getMax() const {
+  Expr * getMax() const {
     return max;
   }
 
@@ -138,20 +138,20 @@
 };
 
 class AMDGPUWavesPerEUAttr : public InheritableAttr {
-unsigned min;
+Expr * min;
 
-unsigned max;
+Expr * max;
 
 public:
-  static AMDGPUWavesPerEUAttr *CreateImplicit(ASTContext &Ctx, unsigned Min, unsigned Max, SourceRange Loc = SourceRange()) {
+  static AMDGPUWavesPerEUAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Loc = SourceRange()) {
     auto *A = new (Ctx) AMDGPUWavesPerEUAttr(Loc, Ctx, Min, Max, 0);
     A->setImplicit(true);
     return A;
   }
 
   AMDGPUWavesPerEUAttr(SourceRange R, ASTContext &Ctx
-              , unsigned Min
-              , unsigned Max
+              , Expr * Min
+              , Expr * Max
               , unsigned SI
              )
     : InheritableAttr(attr::AMDGPUWavesPerEU, R, SI, false, false)
@@ -161,7 +161,7 @@
   }
 
   AMDGPUWavesPerEUAttr(SourceRange R, ASTContext &Ctx
-              , unsigned Min
+              , Expr * Min
               , unsigned SI
              )
     : InheritableAttr(attr::AMDGPUWavesPerEU, R, SI, false, false)
@@ -174,11 +174,11 @@
   void printPretty(raw_ostream &OS,
                    const PrintingPolicy &Policy) const;
   const char *getSpelling() const;
-  unsigned getMin() const {
+  Expr * getMin() const {
     return min;
   }
 
-  unsigned getMax() const {
+  Expr * getMax() const {
     return max;
   }
 
@@ -3544,46 +3544,6 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::FormatArg; }
 };
 
-class FortifyStdLibAttr : public InheritableAttr {
-int type;
-
-int flag;
-
-public:
-  static FortifyStdLibAttr *CreateImplicit(ASTContext &Ctx, int Type, int Flag, SourceRange Loc = SourceRange()) {
-    auto *A = new (Ctx) FortifyStdLibAttr(Loc, Ctx, Type, Flag, 0);
-    A->setImplicit(true);
-    return A;
-  }
-
-  FortifyStdLibAttr(SourceRange R, ASTContext &Ctx
-              , int Type
-              , int Flag
-              , unsigned SI
-             )
-    : InheritableAttr(attr::FortifyStdLib, R, SI, false, false)
-              , type(Type)
-              , flag(Flag)
-  {
-  }
-
-  FortifyStdLibAttr *clone(ASTContext &C) const;
-  void printPretty(raw_ostream &OS,
-                   const PrintingPolicy &Policy) const;
-  const char *getSpelling() const;
-  int getType() const {
-    return type;
-  }
-
-  int getFlag() const {
-    return flag;
-  }
-
-
-
-  static bool classof(const Attr *A) { return A->getKind() == attr::FortifyStdLib; }
-};
-
 class GNUInlineAttr : public InheritableAttr {
 public:
   static GNUInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -3664,6 +3624,30 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::GuardedVar; }
 };
 
+class HIPPinnedShadowAttr : public InheritableAttr {
+public:
+  static HIPPinnedShadowAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) HIPPinnedShadowAttr(Loc, Ctx, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  HIPPinnedShadowAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::HIPPinnedShadow, R, SI, false, false)
+  {
+  }
+
+  HIPPinnedShadowAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::HIPPinnedShadow; }
+};
+
 class HotAttr : public InheritableAttr {
 public:
   static HotAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -4328,6 +4312,30 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::LoopHint; }
 };
 
+class MIGServerRoutineAttr : public InheritableAttr {
+public:
+  static MIGServerRoutineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) MIGServerRoutineAttr(Loc, Ctx, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  MIGServerRoutineAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::MIGServerRoutine, R, SI, false, false)
+  {
+  }
+
+  MIGServerRoutineAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::MIGServerRoutine; }
+};
+
 class MSABIAttr : public InheritableAttr {
 public:
   static MSABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -4352,6 +4360,30 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::MSABI; }
 };
 
+class MSAllocatorAttr : public InheritableAttr {
+public:
+  static MSAllocatorAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) MSAllocatorAttr(Loc, Ctx, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  MSAllocatorAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::MSAllocator, R, SI, false, false)
+  {
+  }
+
+  MSAllocatorAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::MSAllocator; }
+};
+
 class MSInheritanceAttr : public InheritableAttr {
 bool bestCase;
 
@@ -5390,7 +5422,7 @@
 
 
     SanitizerMask getMask() const {
-      SanitizerMask Mask = 0;
+      SanitizerMask Mask;
       for (auto SanitizerName : sanitizers()) {
         SanitizerMask ParsedMask =
             parseSanitizerValue(SanitizerName, /*AllowGroups=*/true);
@@ -5523,6 +5555,30 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::NoThrow; }
 };
 
+class NoUniqueAddressAttr : public InheritableAttr {
+public:
+  static NoUniqueAddressAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) NoUniqueAddressAttr(Loc, Ctx, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  NoUniqueAddressAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::NoUniqueAddress, R, SI, false, false)
+  {
+  }
+
+  NoUniqueAddressAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::NoUniqueAddress; }
+};
+
 class NonNullAttr : public InheritableParamAttr {
   unsigned args_Size;
   ParamIdx *args_;
@@ -5600,6 +5656,92 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::NotTailCalled; }
 };
 
+class OMPAllocateDeclAttr : public InheritableAttr {
+public:
+  enum AllocatorTypeTy {
+    OMPDefaultMemAlloc,
+    OMPLargeCapMemAlloc,
+    OMPConstMemAlloc,
+    OMPHighBWMemAlloc,
+    OMPLowLatMemAlloc,
+    OMPCGroupMemAlloc,
+    OMPPTeamMemAlloc,
+    OMPThreadMemAlloc,
+    OMPUserDefinedMemAlloc
+  };
+private:
+  AllocatorTypeTy allocatorType;
+
+Expr * allocator;
+
+public:
+  static OMPAllocateDeclAttr *CreateImplicit(ASTContext &Ctx, AllocatorTypeTy AllocatorType, Expr * Allocator, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) OMPAllocateDeclAttr(Loc, Ctx, AllocatorType, Allocator, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  OMPAllocateDeclAttr(SourceRange R, ASTContext &Ctx
+              , AllocatorTypeTy AllocatorType
+              , Expr * Allocator
+              , unsigned SI
+             )
+    : InheritableAttr(attr::OMPAllocateDecl, R, SI, false, false)
+              , allocatorType(AllocatorType)
+              , allocator(Allocator)
+  {
+  }
+
+  OMPAllocateDeclAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+  AllocatorTypeTy getAllocatorType() const {
+    return allocatorType;
+  }
+
+  static bool ConvertStrToAllocatorTypeTy(StringRef Val, AllocatorTypeTy &Out) {
+    Optional<AllocatorTypeTy> R = llvm::StringSwitch<Optional<AllocatorTypeTy>>(Val)
+      .Case("omp_default_mem_alloc", OMPAllocateDeclAttr::OMPDefaultMemAlloc)
+      .Case("omp_large_cap_mem_alloc", OMPAllocateDeclAttr::OMPLargeCapMemAlloc)
+      .Case("omp_const_mem_alloc", OMPAllocateDeclAttr::OMPConstMemAlloc)
+      .Case("omp_high_bw_mem_alloc", OMPAllocateDeclAttr::OMPHighBWMemAlloc)
+      .Case("omp_low_lat_mem_alloc", OMPAllocateDeclAttr::OMPLowLatMemAlloc)
+      .Case("omp_cgroup_mem_alloc", OMPAllocateDeclAttr::OMPCGroupMemAlloc)
+      .Case("omp_pteam_mem_alloc", OMPAllocateDeclAttr::OMPPTeamMemAlloc)
+      .Case("omp_thread_mem_alloc", OMPAllocateDeclAttr::OMPThreadMemAlloc)
+      .Case("", OMPAllocateDeclAttr::OMPUserDefinedMemAlloc)
+      .Default(Optional<AllocatorTypeTy>());
+    if (R) {
+      Out = *R;
+      return true;
+    }
+    return false;
+  }
+
+  static const char *ConvertAllocatorTypeTyToStr(AllocatorTypeTy Val) {
+    switch(Val) {
+    case OMPAllocateDeclAttr::OMPDefaultMemAlloc: return "omp_default_mem_alloc";
+    case OMPAllocateDeclAttr::OMPLargeCapMemAlloc: return "omp_large_cap_mem_alloc";
+    case OMPAllocateDeclAttr::OMPConstMemAlloc: return "omp_const_mem_alloc";
+    case OMPAllocateDeclAttr::OMPHighBWMemAlloc: return "omp_high_bw_mem_alloc";
+    case OMPAllocateDeclAttr::OMPLowLatMemAlloc: return "omp_low_lat_mem_alloc";
+    case OMPAllocateDeclAttr::OMPCGroupMemAlloc: return "omp_cgroup_mem_alloc";
+    case OMPAllocateDeclAttr::OMPPTeamMemAlloc: return "omp_pteam_mem_alloc";
+    case OMPAllocateDeclAttr::OMPThreadMemAlloc: return "omp_thread_mem_alloc";
+    case OMPAllocateDeclAttr::OMPUserDefinedMemAlloc: return "";
+    }
+    llvm_unreachable("No enumerator with that value");
+  }
+  Expr * getAllocator() const {
+    return allocator;
+  }
+
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::OMPAllocateDecl; }
+};
+
 class OMPCaptureKindAttr : public Attr {
 unsigned captureKind;
 
@@ -6276,6 +6418,30 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridgeRelated; }
 };
 
+class ObjCClassStubAttr : public Attr {
+public:
+  static ObjCClassStubAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) ObjCClassStubAttr(Loc, Ctx, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  ObjCClassStubAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : Attr(attr::ObjCClassStub, R, SI, false)
+  {
+  }
+
+  ObjCClassStubAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::ObjCClassStub; }
+};
+
 class ObjCDesignatedInitializerAttr : public Attr {
 public:
   static ObjCDesignatedInitializerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -7373,8 +7539,17 @@
 int type;
 
 public:
-  static PassObjectSizeAttr *CreateImplicit(ASTContext &Ctx, int Type, SourceRange Loc = SourceRange()) {
-    auto *A = new (Ctx) PassObjectSizeAttr(Loc, Ctx, Type, 0);
+  enum Spelling {
+    GNU_pass_object_size = 0,
+    CXX11_clang_pass_object_size = 1,
+    C2x_clang_pass_object_size = 2,
+    GNU_pass_dynamic_object_size = 3,
+    CXX11_clang_pass_dynamic_object_size = 4,
+    C2x_clang_pass_dynamic_object_size = 5
+  };
+
+  static PassObjectSizeAttr *CreateImplicit(ASTContext &Ctx, Spelling S, int Type, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) PassObjectSizeAttr(Loc, Ctx, Type, S);
     A->setImplicit(true);
     return A;
   }
@@ -7392,6 +7567,20 @@
   void printPretty(raw_ostream &OS,
                    const PrintingPolicy &Policy) const;
   const char *getSpelling() const;
+  Spelling getSemanticSpelling() const {
+  switch (SpellingListIndex) {
+    default: llvm_unreachable("Unknown spelling list index");
+    case 0: return GNU_pass_object_size;
+    case 1: return CXX11_clang_pass_object_size;
+    case 2: return C2x_clang_pass_object_size;
+    case 3: return GNU_pass_dynamic_object_size;
+    case 4: return CXX11_clang_pass_dynamic_object_size;
+    case 5: return C2x_clang_pass_dynamic_object_size;
+  }
+  }
+  bool isDynamic() const { return SpellingListIndex == 3 ||
+    SpellingListIndex == 4 ||
+    SpellingListIndex == 5; }
   int getType() const {
     return type;
   }
diff --git a/linux-x64/clang/include/clang/AST/CurrentSourceLocExprScope.h b/linux-x64/clang/include/clang/AST/CurrentSourceLocExprScope.h
new file mode 100644
index 0000000..4ebbdf6
--- /dev/null
+++ b/linux-x64/clang/include/clang/AST/CurrentSourceLocExprScope.h
@@ -0,0 +1,75 @@
+//===--- CurrentSourceLocExprScope.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 defines types used to track the current context needed to evaluate
+//  a SourceLocExpr.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_AST_CURRENT_SOURCE_LOC_EXPR_SCOPE_H
+#define LLVM_CLANG_AST_CURRENT_SOURCE_LOC_EXPR_SCOPE_H
+
+#include <cassert>
+
+namespace clang {
+class Expr;
+
+/// Represents the current source location and context used to determine the
+/// value of the source location builtins (ex. __builtin_LINE), including the
+/// context of default argument and default initializer expressions.
+class CurrentSourceLocExprScope {
+  /// The CXXDefaultArgExpr or CXXDefaultInitExpr we're currently evaluating.
+  const Expr *DefaultExpr = nullptr;
+
+public:
+  /// A RAII style scope guard used for tracking the current source
+  /// location and context as used by the source location builtins
+  /// (ex. __builtin_LINE).
+  class SourceLocExprScopeGuard;
+
+  const Expr *getDefaultExpr() const { return DefaultExpr; }
+
+  explicit CurrentSourceLocExprScope() = default;
+
+private:
+  explicit CurrentSourceLocExprScope(const Expr *DefaultExpr)
+      : DefaultExpr(DefaultExpr) {}
+
+  CurrentSourceLocExprScope(CurrentSourceLocExprScope const &) = default;
+  CurrentSourceLocExprScope &
+  operator=(CurrentSourceLocExprScope const &) = default;
+};
+
+class CurrentSourceLocExprScope::SourceLocExprScopeGuard {
+public:
+  SourceLocExprScopeGuard(const Expr *DefaultExpr,
+                          CurrentSourceLocExprScope &Current)
+      : Current(Current), OldVal(Current), Enable(false) {
+    assert(DefaultExpr && "the new scope should not be empty");
+    if ((Enable = (Current.getDefaultExpr() == nullptr)))
+      Current = CurrentSourceLocExprScope(DefaultExpr);
+  }
+
+  ~SourceLocExprScopeGuard() {
+    if (Enable)
+      Current = OldVal;
+  }
+
+private:
+  SourceLocExprScopeGuard(SourceLocExprScopeGuard const &) = delete;
+  SourceLocExprScopeGuard &operator=(SourceLocExprScopeGuard const &) = delete;
+
+  CurrentSourceLocExprScope &Current;
+  CurrentSourceLocExprScope OldVal;
+  bool Enable;
+};
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_AST_CURRENT_SOURCE_LOC_EXPR_SCOPE_H
diff --git a/linux-x64/clang/include/clang/AST/Decl.h b/linux-x64/clang/include/clang/AST/Decl.h
index 526e210..e593daf 100644
--- a/linux-x64/clang/include/clang/AST/Decl.h
+++ b/linux-x64/clang/include/clang/AST/Decl.h
@@ -1226,10 +1226,15 @@
 
   void setInit(Expr *I);
 
-  /// Determine whether this variable's value can be used in a
+  /// Determine whether this variable's value might be usable in a
   /// constant expression, according to the relevant language standard.
   /// This only checks properties of the declaration, and does not check
   /// whether the initializer is in fact a constant expression.
+  bool mightBeUsableInConstantExpressions(ASTContext &C) const;
+
+  /// Determine whether this variable's value can be used in a
+  /// constant expression, according to the relevant language standard,
+  /// including checking whether it was initialized by a constant expression.
   bool isUsableInConstantExpressions(ASTContext &C) const;
 
   EvaluatedStmt *ensureEvaluatedStmt() const;
@@ -1395,6 +1400,10 @@
     NonParmVarDeclBits.IsInitCapture = IC;
   }
 
+  /// Determine whether this variable is actually a function parameter pack or
+  /// init-capture pack.
+  bool isParameterPack() const;
+
   /// Whether this local extern variable declaration's previous declaration
   /// was declared in the same block scope. Only correct in C++.
   bool isPreviousDeclInSameBlockScope() const {
@@ -1434,6 +1443,12 @@
   /// template specialization or instantiation this is.
   TemplateSpecializationKind getTemplateSpecializationKind() const;
 
+  /// Get the template specialization kind of this variable for the purposes of
+  /// template instantiation. This differs from getTemplateSpecializationKind()
+  /// for an instantiation of a class-scope explicit specialization.
+  TemplateSpecializationKind
+  getTemplateSpecializationKindForInstantiation() const;
+
   /// If this variable is an instantiation of a variable template or a
   /// static data member of a class template, determine its point of
   /// instantiation.
@@ -1682,10 +1697,6 @@
 
   QualType getOriginalType() const;
 
-  /// Determine whether this parameter is actually a function
-  /// parameter pack.
-  bool isParameterPack() const;
-
   /// Sets the function declaration that owns this
   /// ParmVarDecl. Since ParmVarDecls are often created before the
   /// FunctionDecls that own them, this routine is required to update
@@ -1742,10 +1753,19 @@
 public:
   /// The kind of templated function a FunctionDecl can be.
   enum TemplatedKind {
+    // Not templated.
     TK_NonTemplate,
+    // The pattern in a function template declaration.
     TK_FunctionTemplate,
+    // A non-template function that is an instantiation or explicit
+    // specialization of a member of a templated class.
     TK_MemberSpecialization,
+    // An instantiation or explicit specialization of a function template.
+    // Note: this might have been instantiated from a templated class if it
+    // is a class-scope explicit specialization.
     TK_FunctionTemplateSpecialization,
+    // A function template specialization that hasn't yet been resolved to a
+    // particular specialized function template.
     TK_DependentFunctionTemplateSpecialization
   };
 
@@ -1841,7 +1861,7 @@
   FunctionDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
                const DeclarationNameInfo &NameInfo, QualType T,
                TypeSourceInfo *TInfo, StorageClass S, bool isInlineSpecified,
-               bool isConstexprSpecified);
+               ConstexprSpecKind ConstexprKind);
 
   using redeclarable_base = Redeclarable<FunctionDecl>;
 
@@ -1871,29 +1891,24 @@
   using redeclarable_base::getMostRecentDecl;
   using redeclarable_base::isFirstDecl;
 
-  static FunctionDecl *Create(ASTContext &C, DeclContext *DC,
-                              SourceLocation StartLoc, SourceLocation NLoc,
-                              DeclarationName N, QualType T,
-                              TypeSourceInfo *TInfo,
-                              StorageClass SC,
-                              bool isInlineSpecified = false,
-                              bool hasWrittenPrototype = true,
-                              bool isConstexprSpecified = false) {
+  static FunctionDecl *
+  Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
+         SourceLocation NLoc, DeclarationName N, QualType T,
+         TypeSourceInfo *TInfo, StorageClass SC, bool isInlineSpecified = false,
+         bool hasWrittenPrototype = true,
+         ConstexprSpecKind ConstexprKind = CSK_unspecified) {
     DeclarationNameInfo NameInfo(N, NLoc);
-    return FunctionDecl::Create(C, DC, StartLoc, NameInfo, T, TInfo,
-                                SC,
+    return FunctionDecl::Create(C, DC, StartLoc, NameInfo, T, TInfo, SC,
                                 isInlineSpecified, hasWrittenPrototype,
-                                isConstexprSpecified);
+                                ConstexprKind);
   }
 
   static FunctionDecl *Create(ASTContext &C, DeclContext *DC,
                               SourceLocation StartLoc,
-                              const DeclarationNameInfo &NameInfo,
-                              QualType T, TypeSourceInfo *TInfo,
-                              StorageClass SC,
-                              bool isInlineSpecified,
-                              bool hasWrittenPrototype,
-                              bool isConstexprSpecified = false);
+                              const DeclarationNameInfo &NameInfo, QualType T,
+                              TypeSourceInfo *TInfo, StorageClass SC,
+                              bool isInlineSpecified, bool hasWrittenPrototype,
+                              ConstexprSpecKind ConstexprKind);
 
   static FunctionDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
@@ -2090,8 +2105,21 @@
   }
 
   /// Whether this is a (C++11) constexpr function or constexpr constructor.
-  bool isConstexpr() const { return FunctionDeclBits.IsConstexpr; }
-  void setConstexpr(bool IC) { FunctionDeclBits.IsConstexpr = IC; }
+  bool isConstexpr() const {
+    return FunctionDeclBits.ConstexprKind != CSK_unspecified;
+  }
+  void setConstexprKind(ConstexprSpecKind CSK) {
+    FunctionDeclBits.ConstexprKind = CSK;
+  }
+  ConstexprSpecKind getConstexprKind() const {
+    return static_cast<ConstexprSpecKind>(FunctionDeclBits.ConstexprKind);
+  }
+  bool isConstexprSpecified() const {
+    return FunctionDeclBits.ConstexprKind == CSK_constexpr;
+  }
+  bool isConsteval() const {
+    return FunctionDeclBits.ConstexprKind == CSK_consteval;
+  }
 
   /// Whether the instantiation of this function is pending.
   /// This bit is set when the decision to instantiate this function is made
@@ -2255,7 +2283,7 @@
     return const_cast<FunctionDecl*>(this)->getCanonicalDecl();
   }
 
-  unsigned getBuiltinID() const;
+  unsigned getBuiltinID(bool ConsiderWrapperFunctions = false) const;
 
   // ArrayRef interface to parameters.
   ArrayRef<ParmVarDecl *> parameters() const {
@@ -2315,6 +2343,14 @@
     return T->castAs<FunctionType>()->getReturnType();
   }
 
+  /// Gets the ExceptionSpecificationType as declared.
+  ExceptionSpecificationType getExceptionSpecType() const {
+    auto *TSI = getTypeSourceInfo();
+    QualType T = TSI ? TSI->getType() : getType();
+    const auto *FPT = T->getAs<FunctionProtoType>();
+    return FPT ? FPT->getExceptionSpecType() : EST_None;
+  }
+
   /// Attempt to compute an informative source range covering the
   /// function exception specification, if any.
   SourceRange getExceptionSpecSourceRange() const;
@@ -2354,22 +2390,14 @@
   /// that was defined in the class body.
   bool isInlined() const { return FunctionDeclBits.IsInline; }
 
-  /// Whether this function is marked as explicit explicitly.
-  bool isExplicitSpecified() const {
-    return FunctionDeclBits.IsExplicitSpecified;
-  }
-
-  /// State that this function is marked as explicit explicitly.
-  void setExplicitSpecified(bool ExpSpec = true) {
-    FunctionDeclBits.IsExplicitSpecified = ExpSpec;
-  }
-
   bool isInlineDefinitionExternallyVisible() const;
 
   bool isMSExternInline() const;
 
   bool doesDeclarationForceExternallyVisibleDefinition() const;
 
+  bool isStatic() const { return getStorageClass() == SC_Static; }
+
   /// Whether this function declaration represents an C++ overloaded
   /// operator, e.g., "operator+".
   bool isOverloadedOperator() const {
@@ -2440,10 +2468,6 @@
     return getPrimaryTemplate() != nullptr;
   }
 
-  /// Retrieve the class scope template pattern that this function
-  ///  template specialization is instantiated from.
-  FunctionDecl *getClassScopeSpecializationPattern() const;
-
   /// If this function is actually a function template specialization,
   /// retrieve information about this function template specialization.
   /// Otherwise, returns NULL.
@@ -2530,6 +2554,11 @@
   /// represents.
   TemplateSpecializationKind getTemplateSpecializationKind() const;
 
+  /// Determine the kind of template specialization this function represents
+  /// for the purpose of template instantiation.
+  TemplateSpecializationKind
+  getTemplateSpecializationKindForInstantiation() const;
+
   /// Determine what kind of template instantiation this function
   /// represents.
   void setTemplateSpecializationKind(TemplateSpecializationKind TSK,
@@ -2702,6 +2731,11 @@
   /// bit-fields.
   bool isZeroLengthBitField(const ASTContext &Ctx) const;
 
+  /// Determine if this field is a subobject of zero size, that is, either a
+  /// zero-length bit-field or a field of empty class type with the
+  /// [[no_unique_address]] attribute.
+  bool isZeroSize(const ASTContext &Ctx) const;
+
   /// Get the kind of (C++11) default member initializer that this field has.
   InClassInitStyle getInClassInitStyle() const {
     InitStorageKind storageKind = InitStorage.getInt();
@@ -4008,6 +4042,13 @@
   bool doesNotEscape() const { return BlockDeclBits.DoesNotEscape; }
   void setDoesNotEscape(bool B = true) { BlockDeclBits.DoesNotEscape = B; }
 
+  bool canAvoidCopyToHeap() const {
+    return BlockDeclBits.CanAvoidCopyToHeap;
+  }
+  void setCanAvoidCopyToHeap(bool B = true) {
+    BlockDeclBits.CanAvoidCopyToHeap = B;
+  }
+
   bool capturesVariable(const VarDecl *var) const;
 
   void setCaptures(ASTContext &Context, ArrayRef<Capture> Captures,
@@ -4232,8 +4273,10 @@
   SourceLocation getRBraceLoc() const { return RBraceLoc; }
   void setRBraceLoc(SourceLocation L) { RBraceLoc = L; }
 
+  bool hasBraces() const { return RBraceLoc.isValid(); }
+
   SourceLocation getEndLoc() const LLVM_READONLY {
-    if (RBraceLoc.isValid())
+    if (hasBraces())
       return RBraceLoc;
     // No braces: get the end location of the (only) declaration in context
     // (if present).
diff --git a/linux-x64/clang/include/clang/AST/DeclBase.h b/linux-x64/clang/include/clang/AST/DeclBase.h
index 9117f53..26edb77 100644
--- a/linux-x64/clang/include/clang/AST/DeclBase.h
+++ b/linux-x64/clang/include/clang/AST/DeclBase.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_CLANG_AST_DECLBASE_H
 #define LLVM_CLANG_AST_DECLBASE_H
 
+#include "clang/AST/ASTDumperUtils.h"
 #include "clang/AST/AttrIterator.h"
 #include "clang/AST/DeclarationName.h"
 #include "clang/Basic/IdentifierTable.h"
@@ -41,6 +42,7 @@
 class ASTContext;
 class ASTMutationListener;
 class Attr;
+class BlockDecl;
 class DeclContext;
 class ExternalSourceSymbolAttr;
 class FunctionDecl;
@@ -366,6 +368,13 @@
     return ModuleOwnershipKind::Unowned;
   }
 
+public:
+  Decl() = delete;
+  Decl(const Decl&) = delete;
+  Decl(Decl &&) = delete;
+  Decl &operator=(const Decl&) = delete;
+  Decl &operator=(Decl&&) = delete;
+
 protected:
   Decl(Kind DK, DeclContext *DC, SourceLocation L)
       : NextInContextAndBits(nullptr, getModuleOwnershipKindForChildOf(DC)),
@@ -599,10 +608,6 @@
     return getModuleOwnershipKind() == ModuleOwnershipKind::ModulePrivate;
   }
 
-  /// Whether this declaration is exported (by virtue of being lexically
-  /// within an ExportDecl or by being a NamespaceDecl).
-  bool isExported() const;
-
   /// Return true if this declaration has an attribute which acts as
   /// definition of the entity, such as 'alias' or 'ifunc'.
   bool hasDefiningAttr() const;
@@ -1137,7 +1142,8 @@
   // Same as dump(), but forces color printing.
   void dumpColor() const;
 
-  void dump(raw_ostream &Out, bool Deserialize = false) const;
+  void dump(raw_ostream &Out, bool Deserialize = false,
+            ASTDumpOutputFormat OutputFormat = ADOF_Default) const;
 
   /// \return Unique reproducible object identifier
   int64_t getID() const;
@@ -1475,10 +1481,6 @@
     uint64_t IsInline : 1;
     uint64_t IsInlineSpecified : 1;
 
-    /// This is shared by CXXConstructorDecl,
-    /// CXXConversionDecl, and CXXDeductionGuideDecl.
-    uint64_t IsExplicitSpecified : 1;
-
     uint64_t IsVirtualAsWritten : 1;
     uint64_t IsPure : 1;
     uint64_t HasInheritedPrototype : 1;
@@ -1498,7 +1500,9 @@
     uint64_t IsExplicitlyDefaulted : 1;
     uint64_t HasImplicitReturnZero : 1;
     uint64_t IsLateTemplateParsed : 1;
-    uint64_t IsConstexpr : 1;
+
+    /// Kind of contexpr specifier as defined by ConstexprSpecKind.
+    uint64_t ConstexprKind : 2;
     uint64_t InstantiationIsPending : 1;
 
     /// Indicates if the function uses __try.
@@ -1538,17 +1542,25 @@
     /// For the bits in FunctionDeclBitfields.
     uint64_t : NumFunctionDeclBits;
 
-    /// 25 bits to fit in the remaining availible space.
+    /// 24 bits to fit in the remaining available space.
     /// Note that this makes CXXConstructorDeclBitfields take
     /// exactly 64 bits and thus the width of NumCtorInitializers
     /// will need to be shrunk if some bit is added to NumDeclContextBitfields,
     /// NumFunctionDeclBitfields or CXXConstructorDeclBitfields.
-    uint64_t NumCtorInitializers : 25;
+    uint64_t NumCtorInitializers : 23;
     uint64_t IsInheritingConstructor : 1;
+
+    /// Whether this constructor has a trail-allocated explicit specifier.
+    uint64_t HasTrailingExplicitSpecifier : 1;
+    /// If this constructor does't have a trail-allocated explicit specifier.
+    /// Whether this constructor is explicit specified.
+    uint64_t IsSimpleExplicit : 1;
   };
 
   /// Number of non-inherited bits in CXXConstructorDeclBitfields.
-  enum { NumCXXConstructorDeclBits = 26 };
+  enum {
+    NumCXXConstructorDeclBits = 64 - NumDeclContextBits - NumFunctionDeclBits
+  };
 
   /// Stores the bits used by ObjCMethodDecl.
   /// If modified NumObjCMethodDeclBits and the accessor
@@ -1665,6 +1677,11 @@
     /// A bit that indicates this block is passed directly to a function as a
     /// non-escaping parameter.
     uint64_t DoesNotEscape : 1;
+
+    /// A bit that indicates whether it's possible to avoid coying this block to
+    /// the heap when it initializes or is assigned to a local variable with
+    /// automatic storage.
+    uint64_t CanAvoidCopyToHeap : 1;
   };
 
   /// Number of non-inherited bits in BlockDeclBitfields.
@@ -1787,6 +1804,10 @@
 
   bool isClosure() const { return getDeclKind() == Decl::Block; }
 
+  /// Return this DeclContext if it is a BlockDecl. Otherwise, return the
+  /// innermost enclosing BlockDecl or null if there are no enclosing blocks.
+  const BlockDecl *getInnermostBlockDecl() const;
+
   bool isObjCContainer() const {
     switch (getDeclKind()) {
     case Decl::ObjCCategory:
diff --git a/linux-x64/clang/include/clang/AST/DeclCXX.h b/linux-x64/clang/include/clang/AST/DeclCXX.h
index 6b99f7c..cbf4f13 100644
--- a/linux-x64/clang/include/clang/AST/DeclCXX.h
+++ b/linux-x64/clang/include/clang/AST/DeclCXX.h
@@ -63,6 +63,7 @@
 class CXXFinalOverriderMap;
 class CXXIndirectPrimaryBaseSet;
 class CXXMethodDecl;
+class DecompositionDecl;
 class DiagnosticBuilder;
 class FriendDecl;
 class FunctionTemplateDecl;
@@ -333,10 +334,12 @@
     /// True when this class is a POD-type.
     unsigned PlainOldData : 1;
 
-    /// true when this class is empty for traits purposes,
-    /// i.e. has no data members other than 0-width bit-fields, has no
-    /// virtual function/base, and doesn't inherit from a non-empty
-    /// class. Doesn't take union-ness into account.
+    /// True when this class is empty for traits purposes, that is:
+    ///  * has no data members other than 0-width bit-fields and empty fields
+    ///    marked [[no_unique_address]]
+    ///  * has no virtual function/base, and
+    ///  * doesn't inherit from a non-empty class.
+    /// Doesn't take union-ness into account.
     unsigned Empty : 1;
 
     /// True when this class is polymorphic, i.e., has at
@@ -1221,6 +1224,9 @@
   /// lambda.
   TemplateParameterList *getGenericLambdaTemplateParameterList() const;
 
+  /// Retrieve the lambda template parameters that were specified explicitly.
+  ArrayRef<NamedDecl *> getLambdaExplicitTemplateParameters() const;
+
   LambdaCaptureDefault getLambdaCaptureDefault() const {
     assert(isLambda());
     return static_cast<LambdaCaptureDefault>(getLambdaData().CaptureDefault);
@@ -1325,6 +1331,14 @@
   /// \note This does NOT include a check for union-ness.
   bool isEmpty() const { return data().Empty; }
 
+  bool hasPrivateFields() const {
+    return data().HasPrivateFields;
+  }
+
+  bool hasProtectedFields() const {
+    return data().HasProtectedFields;
+  }
+
   /// Determine whether this class has direct non-static data members.
   bool hasDirectFields() const {
     auto &D = data();
@@ -1982,6 +1996,53 @@
   }
 };
 
+/// Store information needed for an explicit specifier.
+/// used by CXXDeductionGuideDecl, CXXConstructorDecl and CXXConversionDecl.
+class ExplicitSpecifier {
+  llvm::PointerIntPair<Expr *, 2, ExplicitSpecKind> ExplicitSpec{
+      nullptr, ExplicitSpecKind::ResolvedFalse};
+
+public:
+  ExplicitSpecifier() = default;
+  ExplicitSpecifier(Expr *Expression, ExplicitSpecKind Kind)
+      : ExplicitSpec(Expression, Kind) {}
+  ExplicitSpecKind getKind() const { return ExplicitSpec.getInt(); }
+  const Expr *getExpr() const { return ExplicitSpec.getPointer(); }
+  Expr *getExpr() { return ExplicitSpec.getPointer(); }
+
+  /// Return true if the ExplicitSpecifier isn't defaulted.
+  bool isSpecified() const {
+    return ExplicitSpec.getInt() != ExplicitSpecKind::ResolvedFalse ||
+           ExplicitSpec.getPointer();
+  }
+
+  /// Check for Equivalence of explicit specifiers.
+  /// Return True if the explicit specifier are equivalent false otherwise.
+  bool isEquivalent(const ExplicitSpecifier Other) const;
+  /// Return true if the explicit specifier is already resolved to be explicit.
+  bool isExplicit() const {
+    return ExplicitSpec.getInt() == ExplicitSpecKind::ResolvedTrue;
+  }
+  /// Return true if the ExplicitSpecifier isn't valid.
+  /// This state occurs after a substitution failures.
+  bool isInvalid() const {
+    return ExplicitSpec.getInt() == ExplicitSpecKind::Unresolved &&
+           !ExplicitSpec.getPointer();
+  }
+  void setKind(ExplicitSpecKind Kind) { ExplicitSpec.setInt(Kind); }
+  void setExpr(Expr *E) { ExplicitSpec.setPointer(E); }
+  // getFromDecl - retrieve the explicit specifier in the given declaration.
+  // if the given declaration has no explicit. the returned explicit specifier
+  // is defaulted. .isSpecified() will be false.
+  static ExplicitSpecifier getFromDecl(FunctionDecl *Function);
+  static const ExplicitSpecifier getFromDecl(const FunctionDecl *Function) {
+    return getFromDecl(const_cast<FunctionDecl *>(Function));
+  }
+  static ExplicitSpecifier Invalid() {
+    return ExplicitSpecifier(nullptr, ExplicitSpecKind::Unresolved);
+  }
+};
+
 /// Represents a C++ deduction guide declaration.
 ///
 /// \code
@@ -1997,31 +2058,36 @@
 
 private:
   CXXDeductionGuideDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
-                        bool IsExplicit, const DeclarationNameInfo &NameInfo,
-                        QualType T, TypeSourceInfo *TInfo,
-                        SourceLocation EndLocation)
+                        ExplicitSpecifier ES,
+                        const DeclarationNameInfo &NameInfo, QualType T,
+                        TypeSourceInfo *TInfo, SourceLocation EndLocation)
       : FunctionDecl(CXXDeductionGuide, C, DC, StartLoc, NameInfo, T, TInfo,
-                     SC_None, false, false) {
+                     SC_None, false, CSK_unspecified),
+        ExplicitSpec(ES) {
     if (EndLocation.isValid())
       setRangeEnd(EndLocation);
-    setExplicitSpecified(IsExplicit);
     setIsCopyDeductionCandidate(false);
   }
 
+  ExplicitSpecifier ExplicitSpec;
+  void setExplicitSpecifier(ExplicitSpecifier ES) { ExplicitSpec = ES; }
+
 public:
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  static CXXDeductionGuideDecl *Create(ASTContext &C, DeclContext *DC,
-                                       SourceLocation StartLoc, bool IsExplicit,
-                                       const DeclarationNameInfo &NameInfo,
-                                       QualType T, TypeSourceInfo *TInfo,
-                                       SourceLocation EndLocation);
+  static CXXDeductionGuideDecl *
+  Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
+         ExplicitSpecifier ES, const DeclarationNameInfo &NameInfo, QualType T,
+         TypeSourceInfo *TInfo, SourceLocation EndLocation);
 
   static CXXDeductionGuideDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
-  /// Whether this deduction guide is explicit.
-  bool isExplicit() const { return isExplicitSpecified(); }
+  ExplicitSpecifier getExplicitSpecifier() { return ExplicitSpec; }
+  const ExplicitSpecifier getExplicitSpecifier() const { return ExplicitSpec; }
+
+  /// Return true if the declartion is already resolved to be explicit.
+  bool isExplicit() const { return ExplicitSpec.isExplicit(); }
 
   /// Get the template for which this guide performs deduction.
   TemplateDecl *getDeducedTemplate() const {
@@ -2051,11 +2117,11 @@
 protected:
   CXXMethodDecl(Kind DK, ASTContext &C, CXXRecordDecl *RD,
                 SourceLocation StartLoc, const DeclarationNameInfo &NameInfo,
-                QualType T, TypeSourceInfo *TInfo,
-                StorageClass SC, bool isInline,
-                bool isConstexpr, SourceLocation EndLocation)
-    : FunctionDecl(DK, C, RD, StartLoc, NameInfo, T, TInfo,
-                   SC, isInline, isConstexpr) {
+                QualType T, TypeSourceInfo *TInfo, StorageClass SC,
+                bool isInline, ConstexprSpecKind ConstexprKind,
+                SourceLocation EndLocation)
+      : FunctionDecl(DK, C, RD, StartLoc, NameInfo, T, TInfo, SC, isInline,
+                     ConstexprKind) {
     if (EndLocation.isValid())
       setRangeEnd(EndLocation);
   }
@@ -2063,11 +2129,9 @@
 public:
   static CXXMethodDecl *Create(ASTContext &C, CXXRecordDecl *RD,
                                SourceLocation StartLoc,
-                               const DeclarationNameInfo &NameInfo,
-                               QualType T, TypeSourceInfo *TInfo,
-                               StorageClass SC,
-                               bool isInline,
-                               bool isConstexpr,
+                               const DeclarationNameInfo &NameInfo, QualType T,
+                               TypeSourceInfo *TInfo, StorageClass SC,
+                               bool isInline, ConstexprSpecKind ConstexprKind,
                                SourceLocation EndLocation);
 
   static CXXMethodDecl *CreateDeserialized(ASTContext &C, unsigned ID);
@@ -2238,6 +2302,17 @@
               ->getCorrespondingMethodInClass(RD, MayBeBase);
   }
 
+  /// Find if \p RD declares a function that overrides this function, and if so,
+  /// return it. Does not search base classes.
+  CXXMethodDecl *getCorrespondingMethodDeclaredInClass(const CXXRecordDecl *RD,
+                                                       bool MayBeBase = false);
+  const CXXMethodDecl *
+  getCorrespondingMethodDeclaredInClass(const CXXRecordDecl *RD,
+                                        bool MayBeBase = false) const {
+    return const_cast<CXXMethodDecl *>(this)
+        ->getCorrespondingMethodDeclaredInClass(RD, MayBeBase);
+  }
+
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   static bool classofKind(Kind K) {
@@ -2490,7 +2565,8 @@
 /// \endcode
 class CXXConstructorDecl final
     : public CXXMethodDecl,
-      private llvm::TrailingObjects<CXXConstructorDecl, InheritedConstructor> {
+      private llvm::TrailingObjects<CXXConstructorDecl, InheritedConstructor,
+                                    ExplicitSpecifier> {
   // This class stores some data in DeclContext::CXXConstructorDeclBits
   // to save some space. Use the provided accessors to access it.
 
@@ -2500,28 +2576,74 @@
   LazyCXXCtorInitializersPtr CtorInitializers;
 
   CXXConstructorDecl(ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc,
-                     const DeclarationNameInfo &NameInfo,
-                     QualType T, TypeSourceInfo *TInfo,
-                     bool isExplicitSpecified, bool isInline,
-                     bool isImplicitlyDeclared, bool isConstexpr,
+                     const DeclarationNameInfo &NameInfo, QualType T,
+                     TypeSourceInfo *TInfo, ExplicitSpecifier ES, bool isInline,
+                     bool isImplicitlyDeclared, ConstexprSpecKind ConstexprKind,
                      InheritedConstructor Inherited);
 
   void anchor() override;
 
+  size_t numTrailingObjects(OverloadToken<InheritedConstructor>) const {
+    return CXXConstructorDeclBits.IsInheritingConstructor;
+  }
+  size_t numTrailingObjects(OverloadToken<ExplicitSpecifier>) const {
+    return CXXConstructorDeclBits.HasTrailingExplicitSpecifier;
+  }
+
+  ExplicitSpecifier getExplicitSpecifierInternal() const {
+    if (CXXConstructorDeclBits.HasTrailingExplicitSpecifier)
+      return *getCanonicalDecl()->getTrailingObjects<ExplicitSpecifier>();
+    return ExplicitSpecifier(
+        nullptr, getCanonicalDecl()->CXXConstructorDeclBits.IsSimpleExplicit
+                     ? ExplicitSpecKind::ResolvedTrue
+                     : ExplicitSpecKind::ResolvedFalse);
+  }
+
+  void setExplicitSpecifier(ExplicitSpecifier ES) {
+    assert((!ES.getExpr() ||
+            CXXConstructorDeclBits.HasTrailingExplicitSpecifier) &&
+           "cannot set this explicit specifier. no trail-allocated space for "
+           "explicit");
+    if (ES.getExpr())
+      *getCanonicalDecl()->getTrailingObjects<ExplicitSpecifier>() = ES;
+    else
+      CXXConstructorDeclBits.IsSimpleExplicit = ES.isExplicit();
+  }
+
+  enum TraillingAllocKind {
+    TAKInheritsConstructor = 1,
+    TAKHasTailExplicit = 1 << 1,
+  };
+
+  uint64_t getTraillingAllocKind() const {
+    return numTrailingObjects(OverloadToken<InheritedConstructor>()) |
+           (numTrailingObjects(OverloadToken<ExplicitSpecifier>()) << 1);
+  }
+
 public:
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
   friend TrailingObjects;
 
   static CXXConstructorDecl *CreateDeserialized(ASTContext &C, unsigned ID,
-                                                bool InheritsConstructor);
+                                                uint64_t AllocKind);
   static CXXConstructorDecl *
   Create(ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc,
          const DeclarationNameInfo &NameInfo, QualType T, TypeSourceInfo *TInfo,
-         bool isExplicit, bool isInline, bool isImplicitlyDeclared,
-         bool isConstexpr,
+         ExplicitSpecifier ES, bool isInline, bool isImplicitlyDeclared,
+         ConstexprSpecKind ConstexprKind,
          InheritedConstructor Inherited = InheritedConstructor());
 
+  ExplicitSpecifier getExplicitSpecifier() {
+    return getExplicitSpecifierInternal();
+  }
+  const ExplicitSpecifier getExplicitSpecifier() const {
+    return getExplicitSpecifierInternal();
+  }
+
+  /// Return true if the declartion is already resolved to be explicit.
+  bool isExplicit() const { return getExplicitSpecifier().isExplicit(); }
+
   /// Iterates through the member/base initializer list.
   using init_iterator = CXXCtorInitializer **;
 
@@ -2592,11 +2714,6 @@
     CtorInitializers = Initializers;
   }
 
-  /// Whether this function is explicit.
-  bool isExplicit() const {
-    return getCanonicalDecl()->isExplicitSpecified();
-  }
-
   /// Determine whether this constructor is a delegating constructor.
   bool isDelegatingConstructor() const {
     return (getNumCtorInitializers() == 1) &&
@@ -2720,12 +2837,11 @@
   Expr *OperatorDeleteThisArg = nullptr;
 
   CXXDestructorDecl(ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc,
-                    const DeclarationNameInfo &NameInfo,
-                    QualType T, TypeSourceInfo *TInfo,
-                    bool isInline, bool isImplicitlyDeclared)
-    : CXXMethodDecl(CXXDestructor, C, RD, StartLoc, NameInfo, T, TInfo,
-                    SC_None, isInline, /*isConstexpr=*/false, SourceLocation())
-  {
+                    const DeclarationNameInfo &NameInfo, QualType T,
+                    TypeSourceInfo *TInfo, bool isInline,
+                    bool isImplicitlyDeclared)
+      : CXXMethodDecl(CXXDestructor, C, RD, StartLoc, NameInfo, T, TInfo,
+                      SC_None, isInline, CSK_unspecified, SourceLocation()) {
     setImplicit(isImplicitlyDeclared);
   }
 
@@ -2775,34 +2891,39 @@
 class CXXConversionDecl : public CXXMethodDecl {
   CXXConversionDecl(ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc,
                     const DeclarationNameInfo &NameInfo, QualType T,
-                    TypeSourceInfo *TInfo, bool isInline,
-                    bool isExplicitSpecified, bool isConstexpr,
-                    SourceLocation EndLocation)
+                    TypeSourceInfo *TInfo, bool isInline, ExplicitSpecifier ES,
+                    ConstexprSpecKind ConstexprKind, SourceLocation EndLocation)
       : CXXMethodDecl(CXXConversion, C, RD, StartLoc, NameInfo, T, TInfo,
-                      SC_None, isInline, isConstexpr, EndLocation) {
-    setExplicitSpecified(isExplicitSpecified);
-  }
-
+                      SC_None, isInline, ConstexprKind, EndLocation),
+        ExplicitSpec(ES) {}
   void anchor() override;
 
+  ExplicitSpecifier ExplicitSpec;
+
+  void setExplicitSpecifier(ExplicitSpecifier ES) { ExplicitSpec = ES; }
+
 public:
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  static CXXConversionDecl *Create(ASTContext &C, CXXRecordDecl *RD,
-                                   SourceLocation StartLoc,
-                                   const DeclarationNameInfo &NameInfo,
-                                   QualType T, TypeSourceInfo *TInfo,
-                                   bool isInline, bool isExplicit,
-                                   bool isConstexpr,
-                                   SourceLocation EndLocation);
+  static CXXConversionDecl *
+  Create(ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc,
+         const DeclarationNameInfo &NameInfo, QualType T, TypeSourceInfo *TInfo,
+         bool isInline, ExplicitSpecifier ES, ConstexprSpecKind ConstexprKind,
+         SourceLocation EndLocation);
   static CXXConversionDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
-  /// Whether this function is explicit.
-  bool isExplicit() const {
-    return getCanonicalDecl()->isExplicitSpecified();
+  ExplicitSpecifier getExplicitSpecifier() {
+    return getCanonicalDecl()->ExplicitSpec;
   }
 
+  const ExplicitSpecifier getExplicitSpecifier() const {
+    return getCanonicalDecl()->ExplicitSpec;
+  }
+
+  /// Return true if the declartion is already resolved to be explicit.
+  bool isExplicit() const { return getExplicitSpecifier().isExplicit(); }
+
   /// Returns the type that this conversion function is converting to.
   QualType getConversionType() const {
     return getType()->getAs<FunctionType>()->getReturnType();
@@ -3800,6 +3921,8 @@
 /// x[0], x[1], and x[2] respectively, where x is the implicit
 /// DecompositionDecl of type 'int (&)[3]'.
 class BindingDecl : public ValueDecl {
+  /// The declaration that this binding binds to part of.
+  LazyDeclPtr Decomp;
   /// The binding represented by this declaration. References to this
   /// declaration are effectively equivalent to this expression (except
   /// that it is only evaluated once at the point of declaration of the
@@ -3823,6 +3946,10 @@
   /// decomposition declaration, and when the initializer is type-dependent.
   Expr *getBinding() const { return Binding; }
 
+  /// Get the decomposition declaration that this binding represents a
+  /// decomposition of.
+  ValueDecl *getDecomposedDecl() const;
+
   /// Get the variable (if any) that holds the value of evaluating the binding.
   /// Only present for user-defined bindings for tuple-like types.
   VarDecl *getHoldingVar() const;
@@ -3835,6 +3962,9 @@
     this->Binding = Binding;
   }
 
+  /// Set the decomposed variable for this BindingDecl.
+  void setDecomposedDecl(ValueDecl *Decomposed) { Decomp = Decomposed; }
+
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   static bool classofKind(Kind K) { return K == Decl::Binding; }
 };
@@ -3862,6 +3992,8 @@
         NumBindings(Bindings.size()) {
     std::uninitialized_copy(Bindings.begin(), Bindings.end(),
                             getTrailingObjects<BindingDecl *>());
+    for (auto *B : Bindings)
+      B->setDecomposedDecl(this);
   }
 
   void anchor() override;
diff --git a/linux-x64/clang/include/clang/AST/DeclContextInternals.h b/linux-x64/clang/include/clang/AST/DeclContextInternals.h
index 425e014..e6a4cd4 100644
--- a/linux-x64/clang/include/clang/AST/DeclContextInternals.h
+++ b/linux-x64/clang/include/clang/AST/DeclContextInternals.h
@@ -113,12 +113,11 @@
     }
 
     DeclsTy &Vec = *getAsVector();
-    DeclsTy::iterator I = std::find(Vec.begin(), Vec.end(), D);
+    DeclsTy::iterator I = llvm::find(Vec, D);
     assert(I != Vec.end() && "list does not contain decl");
     Vec.erase(I);
 
-    assert(std::find(Vec.begin(), Vec.end(), D)
-             == Vec.end() && "list still contains decl");
+    assert(llvm::find(Vec, D) == Vec.end() && "list still contains decl");
   }
 
   /// Remove any declarations which were imported from an external
diff --git a/linux-x64/clang/include/clang/AST/DeclNodes.inc b/linux-x64/clang/include/clang/AST/DeclNodes.inc
index a52cb45..ca8c352 100644
--- a/linux-x64/clang/include/clang/AST/DeclNodes.inc
+++ b/linux-x64/clang/include/clang/AST/DeclNodes.inc
@@ -523,6 +523,12 @@
 
 #undef NAMED
 
+#ifndef OMPALLOCATE
+#  define OMPALLOCATE(Type, Base) DECL(Type, Base)
+#endif
+OMPALLOCATE(OMPAllocate, Decl)
+#undef OMPALLOCATE
+
 #ifndef OMPREQUIRES
 #  define OMPREQUIRES(Type, Base) DECL(Type, Base)
 #endif
diff --git a/linux-x64/clang/include/clang/AST/DeclOpenMP.h b/linux-x64/clang/include/clang/AST/DeclOpenMP.h
index 12332a2..437feab 100644
--- a/linux-x64/clang/include/clang/AST/DeclOpenMP.h
+++ b/linux-x64/clang/include/clang/AST/DeclOpenMP.h
@@ -217,7 +217,7 @@
 class OMPDeclareMapperDecl final : public ValueDecl, public DeclContext {
   friend class ASTDeclReader;
 
-  /// Clauses assoicated with this mapper declaration
+  /// Clauses associated with this mapper declaration
   MutableArrayRef<OMPClause *> Clauses;
 
   /// Mapper variable, which is 'v' in the example above
@@ -405,6 +405,119 @@
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   static bool classofKind(Kind K) { return K == OMPRequires; }
 };
+
+/// This represents '#pragma omp allocate ...' directive.
+/// For example, in the following, the default allocator is used for both 'a'
+/// and 'A::b':
+///
+/// \code
+/// int a;
+/// #pragma omp allocate(a)
+/// struct A {
+///   static int b;
+/// #pragma omp allocate(b)
+/// };
+/// \endcode
+///
+class OMPAllocateDecl final
+    : public Decl,
+      private llvm::TrailingObjects<OMPAllocateDecl, Expr *, OMPClause *> {
+  friend class ASTDeclReader;
+  friend TrailingObjects;
+
+  /// Number of variable within the allocate directive.
+  unsigned NumVars = 0;
+  /// Number of clauses associated with the allocate directive.
+  unsigned NumClauses = 0;
+
+  size_t numTrailingObjects(OverloadToken<Expr *>) const {
+    return NumVars;
+  }
+  size_t numTrailingObjects(OverloadToken<OMPClause *>) const {
+    return NumClauses;
+  }
+
+  virtual void anchor();
+
+  OMPAllocateDecl(Kind DK, DeclContext *DC, SourceLocation L)
+      : Decl(DK, DC, L) {}
+
+  ArrayRef<const Expr *> getVars() const {
+    return llvm::makeArrayRef(getTrailingObjects<Expr *>(), NumVars);
+  }
+
+  MutableArrayRef<Expr *> getVars() {
+    return MutableArrayRef<Expr *>(getTrailingObjects<Expr *>(), NumVars);
+  }
+
+  void setVars(ArrayRef<Expr *> VL);
+
+  /// Returns an array of immutable clauses associated with this directive.
+  ArrayRef<OMPClause *> getClauses() const {
+    return llvm::makeArrayRef(getTrailingObjects<OMPClause *>(), NumClauses);
+  }
+
+  /// Returns an array of clauses associated with this directive.
+  MutableArrayRef<OMPClause *> getClauses() {
+    return MutableArrayRef<OMPClause *>(getTrailingObjects<OMPClause *>(),
+                                        NumClauses);
+  }
+
+  /// Sets an array of clauses to this requires declaration
+  void setClauses(ArrayRef<OMPClause *> CL);
+
+public:
+  static OMPAllocateDecl *Create(ASTContext &C, DeclContext *DC,
+                                 SourceLocation L, ArrayRef<Expr *> VL,
+                                 ArrayRef<OMPClause *> CL);
+  static OMPAllocateDecl *CreateDeserialized(ASTContext &C, unsigned ID,
+                                             unsigned NVars, unsigned NClauses);
+
+  typedef MutableArrayRef<Expr *>::iterator varlist_iterator;
+  typedef ArrayRef<const Expr *>::iterator varlist_const_iterator;
+  typedef llvm::iterator_range<varlist_iterator> varlist_range;
+  typedef llvm::iterator_range<varlist_const_iterator> varlist_const_range;
+  using clauselist_iterator = MutableArrayRef<OMPClause *>::iterator;
+  using clauselist_const_iterator = ArrayRef<const OMPClause *>::iterator;
+  using clauselist_range = llvm::iterator_range<clauselist_iterator>;
+  using clauselist_const_range = llvm::iterator_range<clauselist_const_iterator>;
+
+
+  unsigned varlist_size() const { return NumVars; }
+  bool varlist_empty() const { return NumVars == 0; }
+  unsigned clauselist_size() const { return NumClauses; }
+  bool clauselist_empty() const { return NumClauses == 0; }
+
+  varlist_range varlists() {
+    return varlist_range(varlist_begin(), varlist_end());
+  }
+  varlist_const_range varlists() const {
+    return varlist_const_range(varlist_begin(), varlist_end());
+  }
+  varlist_iterator varlist_begin() { return getVars().begin(); }
+  varlist_iterator varlist_end() { return getVars().end(); }
+  varlist_const_iterator varlist_begin() const { return getVars().begin(); }
+  varlist_const_iterator varlist_end() const { return getVars().end(); }
+
+  clauselist_range clauselists() {
+    return clauselist_range(clauselist_begin(), clauselist_end());
+  }
+  clauselist_const_range clauselists() const {
+    return clauselist_const_range(clauselist_begin(), clauselist_end());
+  }
+  clauselist_iterator clauselist_begin() { return getClauses().begin(); }
+  clauselist_iterator clauselist_end() { return getClauses().end(); }
+  clauselist_const_iterator clauselist_begin() const {
+    return getClauses().begin();
+  }
+  clauselist_const_iterator clauselist_end() const {
+    return getClauses().end();
+  }
+
+  static bool classof(const Decl *D) { return classofKind(D->getKind()); }
+  static bool classofKind(Kind K) { return K == OMPAllocate; }
+};
+
 } // end namespace clang
 
 #endif
diff --git a/linux-x64/clang/include/clang/AST/DeclTemplate.h b/linux-x64/clang/include/clang/AST/DeclTemplate.h
index 902e096..5933810 100644
--- a/linux-x64/clang/include/clang/AST/DeclTemplate.h
+++ b/linux-x64/clang/include/clang/AST/DeclTemplate.h
@@ -176,6 +176,11 @@
     return SourceRange(TemplateLoc, RAngleLoc);
   }
 
+  void print(raw_ostream &Out, const ASTContext &Context,
+             bool OmitTemplateKW = false) const;
+  void print(raw_ostream &Out, const ASTContext &Context,
+             const PrintingPolicy &Policy, bool OmitTemplateKW = false) const;
+
 public:
   // FIXME: workaround for MSVC 2013; remove when no longer needed
   using FixedSizeStorageOwner = TrailingObjects::FixedSizeStorageOwner;
@@ -504,29 +509,13 @@
 /// Provides information about a function template specialization,
 /// which is a FunctionDecl that has been explicitly specialization or
 /// instantiated from a function template.
-class FunctionTemplateSpecializationInfo : public llvm::FoldingSetNode {
-  FunctionTemplateSpecializationInfo(FunctionDecl *FD,
-                                     FunctionTemplateDecl *Template,
-                                     TemplateSpecializationKind TSK,
-                                     const TemplateArgumentList *TemplateArgs,
-                       const ASTTemplateArgumentListInfo *TemplateArgsAsWritten,
-                                     SourceLocation POI)
-      : Function(FD), Template(Template, TSK - 1),
-        TemplateArguments(TemplateArgs),
-        TemplateArgumentsAsWritten(TemplateArgsAsWritten),
-        PointOfInstantiation(POI) {}
-
-public:
-  static FunctionTemplateSpecializationInfo *
-  Create(ASTContext &C, FunctionDecl *FD, FunctionTemplateDecl *Template,
-         TemplateSpecializationKind TSK,
-         const TemplateArgumentList *TemplateArgs,
-         const TemplateArgumentListInfo *TemplateArgsAsWritten,
-         SourceLocation POI);
-
-  /// The function template specialization that this structure
-  /// describes.
-  FunctionDecl *Function;
+class FunctionTemplateSpecializationInfo final
+    : public llvm::FoldingSetNode,
+      private llvm::TrailingObjects<FunctionTemplateSpecializationInfo,
+                                    MemberSpecializationInfo *> {
+  /// The function template specialization that this structure describes and a
+  /// flag indicating if the function is a member specialization.
+  llvm::PointerIntPair<FunctionDecl *, 1, bool> Function;
 
   /// The function template from which this function template
   /// specialization was generated.
@@ -534,17 +523,50 @@
   /// The two bits contain the top 4 values of TemplateSpecializationKind.
   llvm::PointerIntPair<FunctionTemplateDecl *, 2> Template;
 
+public:
   /// The template arguments used to produce the function template
   /// specialization from the function template.
   const TemplateArgumentList *TemplateArguments;
 
   /// The template arguments as written in the sources, if provided.
+  /// FIXME: Normally null; tail-allocate this.
   const ASTTemplateArgumentListInfo *TemplateArgumentsAsWritten;
 
   /// The point at which this function template specialization was
   /// first instantiated.
   SourceLocation PointOfInstantiation;
 
+private:
+  FunctionTemplateSpecializationInfo(
+      FunctionDecl *FD, FunctionTemplateDecl *Template,
+      TemplateSpecializationKind TSK, const TemplateArgumentList *TemplateArgs,
+      const ASTTemplateArgumentListInfo *TemplateArgsAsWritten,
+      SourceLocation POI, MemberSpecializationInfo *MSInfo)
+      : Function(FD, MSInfo ? 1 : 0), Template(Template, TSK - 1),
+        TemplateArguments(TemplateArgs),
+        TemplateArgumentsAsWritten(TemplateArgsAsWritten),
+        PointOfInstantiation(POI) {
+    if (MSInfo)
+      getTrailingObjects<MemberSpecializationInfo *>()[0] = MSInfo;
+  }
+
+  size_t numTrailingObjects(OverloadToken<MemberSpecializationInfo*>) const {
+    return Function.getInt();
+  }
+
+public:
+  friend TrailingObjects;
+
+  static FunctionTemplateSpecializationInfo *
+  Create(ASTContext &C, FunctionDecl *FD, FunctionTemplateDecl *Template,
+         TemplateSpecializationKind TSK,
+         const TemplateArgumentList *TemplateArgs,
+         const TemplateArgumentListInfo *TemplateArgsAsWritten,
+         SourceLocation POI, MemberSpecializationInfo *MSInfo);
+
+  /// Retrieve the declaration of the function template specialization.
+  FunctionDecl *getFunction() const { return Function.getPointer(); }
+
   /// Retrieve the template from which this function was specialized.
   FunctionTemplateDecl *getTemplate() const { return Template.getPointer(); }
 
@@ -587,9 +609,44 @@
     PointOfInstantiation = POI;
   }
 
+  /// Get the specialization info if this function template specialization is
+  /// also a member specialization:
+  ///
+  /// \code
+  /// template<typename> struct A {
+  ///   template<typename> void f();
+  ///   template<> void f<int>(); // ClassScopeFunctionSpecializationDecl
+  /// };
+  /// \endcode
+  ///
+  /// Here, A<int>::f<int> is a function template specialization that is
+  /// an explicit specialization of A<int>::f, but it's also a member
+  /// specialization (an implicit instantiation in this case) of A::f<int>.
+  /// Further:
+  ///
+  /// \code
+  /// template<> template<> void A<int>::f<int>() {}
+  /// \endcode
+  ///
+  /// ... declares a function template specialization that is an explicit
+  /// specialization of A<int>::f, and is also an explicit member
+  /// specialization of A::f<int>.
+  ///
+  /// Note that the TemplateSpecializationKind of the MemberSpecializationInfo
+  /// need not be the same as that returned by getTemplateSpecializationKind(),
+  /// and represents the relationship between the function and the class-scope
+  /// explicit specialization in the original templated class -- whereas our
+  /// TemplateSpecializationKind represents the relationship between the
+  /// function and the function template, and should always be
+  /// TSK_ExplicitSpecialization whenever we have MemberSpecializationInfo.
+  MemberSpecializationInfo *getMemberSpecializationInfo() const {
+    return numTrailingObjects(OverloadToken<MemberSpecializationInfo *>())
+               ? getTrailingObjects<MemberSpecializationInfo *>()[0]
+               : nullptr;
+  }
+
   void Profile(llvm::FoldingSetNodeID &ID) {
-    Profile(ID, TemplateArguments->asArray(),
-            Function->getASTContext());
+    Profile(ID, TemplateArguments->asArray(), getFunction()->getASTContext());
   }
 
   static void
@@ -955,7 +1012,7 @@
   using DeclType = FunctionDecl;
 
   static DeclType *getDecl(FunctionTemplateSpecializationInfo *I) {
-    return I->Function;
+    return I->getFunction();
   }
 
   static ArrayRef<TemplateArgument>
@@ -1746,6 +1803,20 @@
     return getSpecializationKind() == TSK_ExplicitSpecialization;
   }
 
+  /// Is this an explicit specialization at class scope (within the class that
+  /// owns the primary template)? For example:
+  ///
+  /// \code
+  /// template<typename T> struct Outer {
+  ///   template<typename U> struct Inner;
+  ///   template<> struct Inner; // class-scope explicit specialization
+  /// };
+  /// \endcode
+  bool isClassScopeExplicitSpecialization() const {
+    return isExplicitSpecialization() &&
+           isa<CXXRecordDecl>(getLexicalDeclContext());
+  }
+
   /// True if this declaration is an explicit specialization,
   /// explicit instantiation declaration, or explicit instantiation
   /// definition.
@@ -2394,8 +2465,6 @@
 
 /// Declaration of a function specialization at template class scope.
 ///
-/// This is a non-standard extension needed to support MSVC.
-///
 /// For example:
 /// \code
 /// template <class T>
@@ -2408,17 +2477,18 @@
 /// "template<> foo(int a)" will be saved in Specialization as a normal
 /// CXXMethodDecl. Then during an instantiation of class A, it will be
 /// transformed into an actual function specialization.
+///
+/// FIXME: This is redundant; we could store the same information directly on
+/// the CXXMethodDecl as a DependentFunctionTemplateSpecializationInfo.
 class ClassScopeFunctionSpecializationDecl : public Decl {
   CXXMethodDecl *Specialization;
-  bool HasExplicitTemplateArgs;
-  TemplateArgumentListInfo TemplateArgs;
+  const ASTTemplateArgumentListInfo *TemplateArgs;
 
-  ClassScopeFunctionSpecializationDecl(DeclContext *DC, SourceLocation Loc,
-                                       CXXMethodDecl *FD, bool Args,
-                                       TemplateArgumentListInfo TemplArgs)
+  ClassScopeFunctionSpecializationDecl(
+      DeclContext *DC, SourceLocation Loc, CXXMethodDecl *FD,
+      const ASTTemplateArgumentListInfo *TemplArgs)
       : Decl(Decl::ClassScopeFunctionSpecialization, DC, Loc),
-        Specialization(FD), HasExplicitTemplateArgs(Args),
-        TemplateArgs(std::move(TemplArgs)) {}
+        Specialization(FD), TemplateArgs(TemplArgs) {}
 
   ClassScopeFunctionSpecializationDecl(EmptyShell Empty)
       : Decl(Decl::ClassScopeFunctionSpecialization, Empty) {}
@@ -2430,17 +2500,20 @@
   friend class ASTDeclWriter;
 
   CXXMethodDecl *getSpecialization() const { return Specialization; }
-  bool hasExplicitTemplateArgs() const { return HasExplicitTemplateArgs; }
-  const TemplateArgumentListInfo& templateArgs() const { return TemplateArgs; }
+  bool hasExplicitTemplateArgs() const { return TemplateArgs; }
+  const ASTTemplateArgumentListInfo *getTemplateArgsAsWritten() const {
+    return TemplateArgs;
+  }
 
-  static ClassScopeFunctionSpecializationDecl *Create(ASTContext &C,
-                                                      DeclContext *DC,
-                                                      SourceLocation Loc,
-                                                      CXXMethodDecl *FD,
-                                                   bool HasExplicitTemplateArgs,
-                                        TemplateArgumentListInfo TemplateArgs) {
+  static ClassScopeFunctionSpecializationDecl *
+  Create(ASTContext &C, DeclContext *DC, SourceLocation Loc, CXXMethodDecl *FD,
+         bool HasExplicitTemplateArgs,
+         const TemplateArgumentListInfo &TemplateArgs) {
     return new (C, DC) ClassScopeFunctionSpecializationDecl(
-        DC, Loc, FD, HasExplicitTemplateArgs, std::move(TemplateArgs));
+        DC, Loc, FD,
+        HasExplicitTemplateArgs
+            ? ASTTemplateArgumentListInfo::Create(C, TemplateArgs)
+            : nullptr);
   }
 
   static ClassScopeFunctionSpecializationDecl *
@@ -2581,6 +2654,11 @@
     return getSpecializationKind() == TSK_ExplicitSpecialization;
   }
 
+  bool isClassScopeExplicitSpecialization() const {
+    return isExplicitSpecialization() &&
+           isa<CXXRecordDecl>(getLexicalDeclContext());
+  }
+
   /// True if this declaration is an explicit specialization,
   /// explicit instantiation declaration, or explicit instantiation
   /// definition.
diff --git a/linux-x64/clang/include/clang/AST/DeclarationName.h b/linux-x64/clang/include/clang/AST/DeclarationName.h
index e5d3439..9044914 100644
--- a/linux-x64/clang/include/clang/AST/DeclarationName.h
+++ b/linux-x64/clang/include/clang/AST/DeclarationName.h
@@ -863,4 +863,24 @@
 
 } // namespace llvm
 
+// The definition of AssumedTemplateStorage is factored out of TemplateName to
+// resolve a cyclic dependency between it and DeclarationName (via Type).
+namespace clang {
+
+/// A structure for storing the information associated with a name that has
+/// been assumed to be a template name (despite finding no TemplateDecls).
+class AssumedTemplateStorage : public UncommonTemplateNameStorage {
+  friend class ASTContext;
+
+  AssumedTemplateStorage(DeclarationName Name)
+      : UncommonTemplateNameStorage(Assumed, 0), Name(Name) {}
+  DeclarationName Name;
+
+public:
+  /// Get the name of the template.
+  DeclarationName getDeclName() const { return Name; }
+};
+
+} // namespace clang
+
 #endif // LLVM_CLANG_AST_DECLARATIONNAME_H
diff --git a/linux-x64/clang/include/clang/AST/Expr.h b/linux-x64/clang/include/clang/AST/Expr.h
index daf33de..d44a815 100644
--- a/linux-x64/clang/include/clang/AST/Expr.h
+++ b/linux-x64/clang/include/clang/AST/Expr.h
@@ -105,13 +105,20 @@
 /// This represents one expression.  Note that Expr's are subclasses of Stmt.
 /// This allows an expression to be transparently used any place a Stmt is
 /// required.
-class Expr : public Stmt {
+class Expr : public ValueStmt {
   QualType TR;
 
+public:
+  Expr() = delete;
+  Expr(const Expr&) = delete;
+  Expr(Expr &&) = delete;
+  Expr &operator=(const Expr&) = delete;
+  Expr &operator=(Expr&&) = delete;
+
 protected:
   Expr(StmtClass SC, QualType T, ExprValueKind VK, ExprObjectKind OK,
        bool TD, bool VD, bool ID, bool ContainsUnexpandedParameterPack)
-    : Stmt(SC)
+    : ValueStmt(SC)
   {
     ExprBits.TypeDependent = TD;
     ExprBits.ValueDependent = VD;
@@ -124,7 +131,7 @@
   }
 
   /// Construct an empty expression.
-  explicit Expr(StmtClass SC, EmptyShell) : Stmt(SC) { }
+  explicit Expr(StmtClass SC, EmptyShell) : ValueStmt(SC) { }
 
 public:
   QualType getType() const { return TR; }
@@ -592,7 +599,8 @@
   /// which we can fold and convert to a boolean condition using
   /// any crazy technique that we want to, even if the expression has
   /// side-effects.
-  bool EvaluateAsBooleanCondition(bool &Result, const ASTContext &Ctx) const;
+  bool EvaluateAsBooleanCondition(bool &Result, const ASTContext &Ctx,
+                                  bool InConstantContext = false) const;
 
   enum SideEffectsKind {
     SE_NoSideEffects,          ///< Strictly evaluate the expression.
@@ -604,20 +612,21 @@
   /// EvaluateAsInt - Return true if this is a constant which we can fold and
   /// convert to an integer, using any crazy technique that we want to.
   bool EvaluateAsInt(EvalResult &Result, const ASTContext &Ctx,
-                     SideEffectsKind AllowSideEffects = SE_NoSideEffects) const;
+                     SideEffectsKind AllowSideEffects = SE_NoSideEffects,
+                     bool InConstantContext = false) const;
 
   /// EvaluateAsFloat - Return true if this is a constant which we can fold and
   /// convert to a floating point value, using any crazy technique that we
   /// want to.
-  bool
-  EvaluateAsFloat(llvm::APFloat &Result, const ASTContext &Ctx,
-                  SideEffectsKind AllowSideEffects = SE_NoSideEffects) const;
+  bool EvaluateAsFloat(llvm::APFloat &Result, const ASTContext &Ctx,
+                       SideEffectsKind AllowSideEffects = SE_NoSideEffects,
+                       bool InConstantContext = false) const;
 
   /// EvaluateAsFloat - Return true if this is a constant which we can fold and
   /// convert to a fixed point value.
-  bool EvaluateAsFixedPoint(
-      EvalResult &Result, const ASTContext &Ctx,
-      SideEffectsKind AllowSideEffects = SE_NoSideEffects) const;
+  bool EvaluateAsFixedPoint(EvalResult &Result, const ASTContext &Ctx,
+                            SideEffectsKind AllowSideEffects = SE_NoSideEffects,
+                            bool InConstantContext = false) const;
 
   /// isEvaluatable - Call EvaluateAsRValue to see if this expression can be
   /// constant folded without side-effects, but discard the result.
@@ -653,7 +662,8 @@
 
   /// EvaluateAsLValue - Evaluate an expression to see if we can fold it to an
   /// lvalue with link time known address, with no side-effects.
-  bool EvaluateAsLValue(EvalResult &Result, const ASTContext &Ctx) const;
+  bool EvaluateAsLValue(EvalResult &Result, const ASTContext &Ctx,
+                        bool InConstantContext = false) const;
 
   /// EvaluateAsInitializer - Evaluate an expression as if it were the
   /// initializer of the given declaration. Returns true if the initializer
@@ -794,7 +804,7 @@
   /// IgnoreParens() + IgnoreImpCasts() until reaching a fixed point. However
   /// this is currently not the case. Instead IgnoreParenImpCasts() skips:
   /// * What IgnoreParens() skips
-  /// * ImplicitCastExpr
+  /// * What IgnoreImpCasts() skips
   /// * MaterializeTemporaryExpr
   /// * SubstNonTypeTemplateParmExpr
   Expr *IgnoreParenImpCasts() LLVM_READONLY;
@@ -933,20 +943,63 @@
   }
 };
 
-/// ConstantExpr - An expression that occurs in a constant context.
-class ConstantExpr : public FullExpr {
-  ConstantExpr(Expr *subexpr)
-    : FullExpr(ConstantExprClass, subexpr) {}
+/// ConstantExpr - An expression that occurs in a constant context and
+/// optionally the result of evaluating the expression.
+class ConstantExpr final
+    : public FullExpr,
+      private llvm::TrailingObjects<ConstantExpr, APValue, uint64_t> {
+  static_assert(std::is_same<uint64_t, llvm::APInt::WordType>::value,
+                "this class assumes llvm::APInt::WordType is uint64_t for "
+                "trail-allocated storage");
 
 public:
-  static ConstantExpr *Create(const ASTContext &Context, Expr *E) {
-    assert(!isa<ConstantExpr>(E));
-    return new (Context) ConstantExpr(E);
+  /// Describes the kind of result that can be trail-allocated.
+  enum ResultStorageKind { RSK_None, RSK_Int64, RSK_APValue };
+
+private:
+  size_t numTrailingObjects(OverloadToken<APValue>) const {
+    return ConstantExprBits.ResultKind == ConstantExpr::RSK_APValue;
+  }
+  size_t numTrailingObjects(OverloadToken<uint64_t>) const {
+    return ConstantExprBits.ResultKind == ConstantExpr::RSK_Int64;
   }
 
-  /// Build an empty constant expression wrapper.
-  explicit ConstantExpr(EmptyShell Empty)
-    : FullExpr(ConstantExprClass, Empty) {}
+  void DefaultInit(ResultStorageKind StorageKind);
+  uint64_t &Int64Result() {
+    assert(ConstantExprBits.ResultKind == ConstantExpr::RSK_Int64 &&
+           "invalid accessor");
+    return *getTrailingObjects<uint64_t>();
+  }
+  const uint64_t &Int64Result() const {
+    return const_cast<ConstantExpr *>(this)->Int64Result();
+  }
+  APValue &APValueResult() {
+    assert(ConstantExprBits.ResultKind == ConstantExpr::RSK_APValue &&
+           "invalid accessor");
+    return *getTrailingObjects<APValue>();
+  }
+  const APValue &APValueResult() const {
+    return const_cast<ConstantExpr *>(this)->APValueResult();
+  }
+
+  ConstantExpr(Expr *subexpr, ResultStorageKind StorageKind);
+  ConstantExpr(ResultStorageKind StorageKind, EmptyShell Empty);
+
+public:
+  friend TrailingObjects;
+  friend class ASTStmtReader;
+  friend class ASTStmtWriter;
+  static ConstantExpr *Create(const ASTContext &Context, Expr *E,
+                              const APValue &Result);
+  static ConstantExpr *Create(const ASTContext &Context, Expr *E,
+                              ResultStorageKind Storage = RSK_None);
+  static ConstantExpr *CreateEmpty(const ASTContext &Context,
+                                   ResultStorageKind StorageKind,
+                                   EmptyShell Empty);
+
+  static ResultStorageKind getStorageKind(const APValue &Value);
+  static ResultStorageKind getStorageKind(const Type *T,
+                                          const ASTContext &Context);
 
   SourceLocation getBeginLoc() const LLVM_READONLY {
     return SubExpr->getBeginLoc();
@@ -959,6 +1012,20 @@
     return T->getStmtClass() == ConstantExprClass;
   }
 
+  void SetResult(APValue Value, const ASTContext &Context) {
+    MoveIntoResult(Value, Context);
+  }
+  void MoveIntoResult(APValue &Value, const ASTContext &Context);
+
+  APValue::ValueKind getResultAPValueKind() const {
+    return static_cast<APValue::ValueKind>(ConstantExprBits.APValueKind);
+  }
+  ResultStorageKind getResultStorageKind() const {
+    return static_cast<ResultStorageKind>(ConstantExprBits.ResultKind);
+  }
+  APValue getAPValueResult() const;
+  const APValue &getResultAsAPValue() const { return APValueResult(); }
+  llvm::APSInt getResultAsAPSInt() const;
   // Iterators
   child_range children() { return child_range(&SubExpr, &SubExpr+1); }
   const_child_range children() const {
@@ -1108,7 +1175,7 @@
               bool RefersToEnlosingVariableOrCapture,
               const DeclarationNameInfo &NameInfo, NamedDecl *FoundD,
               const TemplateArgumentListInfo *TemplateArgs, QualType T,
-              ExprValueKind VK);
+              ExprValueKind VK, NonOdrUseReason NOUR);
 
   /// Construct an empty declaration reference expression.
   explicit DeclRefExpr(EmptyShell Empty) : Expr(DeclRefExprClass, Empty) {}
@@ -1121,14 +1188,16 @@
   DeclRefExpr(const ASTContext &Ctx, ValueDecl *D,
               bool RefersToEnclosingVariableOrCapture, QualType T,
               ExprValueKind VK, SourceLocation L,
-              const DeclarationNameLoc &LocInfo = DeclarationNameLoc());
+              const DeclarationNameLoc &LocInfo = DeclarationNameLoc(),
+              NonOdrUseReason NOUR = NOUR_None);
 
   static DeclRefExpr *
   Create(const ASTContext &Context, NestedNameSpecifierLoc QualifierLoc,
          SourceLocation TemplateKWLoc, ValueDecl *D,
          bool RefersToEnclosingVariableOrCapture, SourceLocation NameLoc,
          QualType T, ExprValueKind VK, NamedDecl *FoundD = nullptr,
-         const TemplateArgumentListInfo *TemplateArgs = nullptr);
+         const TemplateArgumentListInfo *TemplateArgs = nullptr,
+         NonOdrUseReason NOUR = NOUR_None);
 
   static DeclRefExpr *
   Create(const ASTContext &Context, NestedNameSpecifierLoc QualifierLoc,
@@ -1136,7 +1205,8 @@
          bool RefersToEnclosingVariableOrCapture,
          const DeclarationNameInfo &NameInfo, QualType T, ExprValueKind VK,
          NamedDecl *FoundD = nullptr,
-         const TemplateArgumentListInfo *TemplateArgs = nullptr);
+         const TemplateArgumentListInfo *TemplateArgs = nullptr,
+         NonOdrUseReason NOUR = NOUR_None);
 
   /// Construct an empty declaration reference expression.
   static DeclRefExpr *CreateEmpty(const ASTContext &Context, bool HasQualifier,
@@ -1267,6 +1337,11 @@
     DeclRefExprBits.HadMultipleCandidates = V;
   }
 
+  /// Is this expression a non-odr-use reference, and if so, why?
+  NonOdrUseReason isNonOdrUse() const {
+    return static_cast<NonOdrUseReason>(DeclRefExprBits.NonOdrUseReason);
+  }
+
   /// Does this DeclRefExpr refer to an enclosing local or a captured
   /// variable?
   bool refersToEnclosingVariableOrCapture() const {
@@ -1499,21 +1574,28 @@
 
   /// Get a raw enumeration value representing the floating-point semantics of
   /// this literal (32-bit IEEE, x87, ...), suitable for serialisation.
-  APFloatSemantics getRawSemantics() const {
-    return static_cast<APFloatSemantics>(FloatingLiteralBits.Semantics);
+  llvm::APFloatBase::Semantics getRawSemantics() const {
+    return static_cast<llvm::APFloatBase::Semantics>(
+        FloatingLiteralBits.Semantics);
   }
 
   /// Set the raw enumeration value representing the floating-point semantics of
   /// this literal (32-bit IEEE, x87, ...), suitable for serialisation.
-  void setRawSemantics(APFloatSemantics Sem) {
+  void setRawSemantics(llvm::APFloatBase::Semantics Sem) {
     FloatingLiteralBits.Semantics = Sem;
   }
 
   /// Return the APFloat semantics this literal uses.
-  const llvm::fltSemantics &getSemantics() const;
+  const llvm::fltSemantics &getSemantics() const {
+    return llvm::APFloatBase::EnumToSemantics(
+        static_cast<llvm::APFloatBase::Semantics>(
+            FloatingLiteralBits.Semantics));
+  }
 
   /// Set the APFloat semantics this literal uses.
-  void setSemantics(const llvm::fltSemantics &Sem);
+  void setSemantics(const llvm::fltSemantics &Sem) {
+    FloatingLiteralBits.Semantics = llvm::APFloatBase::SemanticsToEnum(Sem);
+  }
 
   bool isExact() const { return FloatingLiteralBits.IsExact; }
   void setExact(bool E) { FloatingLiteralBits.IsExact = E; }
@@ -1870,6 +1952,11 @@
     return child_range(getTrailingObjects<Stmt *>(),
                        getTrailingObjects<Stmt *>() + hasFunctionName());
   }
+
+  const_child_range children() const {
+    return const_child_range(getTrailingObjects<Stmt *>(),
+                             getTrailingObjects<Stmt *>() + hasFunctionName());
+  }
 };
 
 /// ParenExpr - This represents a parethesized expression, e.g. "(1)".  This
@@ -2610,6 +2697,11 @@
     NumArgs = NewNumArgs;
   }
 
+  /// Bluntly set a new number of arguments without doing any checks whatsoever.
+  /// Only used during construction of a CallExpr in a few places in Sema.
+  /// FIXME: Find a way to remove it.
+  void setNumArgsUnsafe(unsigned NewNumArgs) { NumArgs = NewNumArgs; }
+
   typedef ExprIterator arg_iterator;
   typedef ConstExprIterator const_arg_iterator;
   typedef llvm::iterator_range<arg_iterator> arg_range;
@@ -2718,6 +2810,7 @@
                                     ASTTemplateKWAndArgsInfo,
                                     TemplateArgumentLoc> {
   friend class ASTReader;
+  friend class ASTStmtReader;
   friend class ASTStmtWriter;
   friend TrailingObjects;
 
@@ -2752,49 +2845,40 @@
     return MemberExprBits.HasTemplateKWAndArgsInfo;
   }
 
+  MemberExpr(Expr *Base, bool IsArrow, SourceLocation OperatorLoc,
+             ValueDecl *MemberDecl, const DeclarationNameInfo &NameInfo,
+             QualType T, ExprValueKind VK, ExprObjectKind OK,
+             NonOdrUseReason NOUR);
+  MemberExpr(EmptyShell Empty)
+      : Expr(MemberExprClass, Empty), Base(), MemberDecl() {}
+
 public:
-  MemberExpr(Expr *base, bool isarrow, SourceLocation operatorloc,
-             ValueDecl *memberdecl, const DeclarationNameInfo &NameInfo,
-             QualType ty, ExprValueKind VK, ExprObjectKind OK)
-      : Expr(MemberExprClass, ty, VK, OK, base->isTypeDependent(),
-             base->isValueDependent(), base->isInstantiationDependent(),
-             base->containsUnexpandedParameterPack()),
-        Base(base), MemberDecl(memberdecl), MemberDNLoc(NameInfo.getInfo()),
-        MemberLoc(NameInfo.getLoc()) {
-    assert(memberdecl->getDeclName() == NameInfo.getName());
-    MemberExprBits.IsArrow = isarrow;
-    MemberExprBits.HasQualifierOrFoundDecl = false;
-    MemberExprBits.HasTemplateKWAndArgsInfo = false;
-    MemberExprBits.HadMultipleCandidates = false;
-    MemberExprBits.OperatorLoc = operatorloc;
-  }
-
-  // NOTE: this constructor should be used only when it is known that
-  // the member name can not provide additional syntactic info
-  // (i.e., source locations for C++ operator names or type source info
-  // for constructors, destructors and conversion operators).
-  MemberExpr(Expr *base, bool isarrow, SourceLocation operatorloc,
-             ValueDecl *memberdecl, SourceLocation l, QualType ty,
-             ExprValueKind VK, ExprObjectKind OK)
-      : Expr(MemberExprClass, ty, VK, OK, base->isTypeDependent(),
-             base->isValueDependent(), base->isInstantiationDependent(),
-             base->containsUnexpandedParameterPack()),
-        Base(base), MemberDecl(memberdecl), MemberDNLoc(), MemberLoc(l) {
-    MemberExprBits.IsArrow = isarrow;
-    MemberExprBits.HasQualifierOrFoundDecl = false;
-    MemberExprBits.HasTemplateKWAndArgsInfo = false;
-    MemberExprBits.HadMultipleCandidates = false;
-    MemberExprBits.OperatorLoc = operatorloc;
-  }
-
-  static MemberExpr *Create(const ASTContext &C, Expr *base, bool isarrow,
+  static MemberExpr *Create(const ASTContext &C, Expr *Base, bool IsArrow,
                             SourceLocation OperatorLoc,
                             NestedNameSpecifierLoc QualifierLoc,
-                            SourceLocation TemplateKWLoc, ValueDecl *memberdecl,
-                            DeclAccessPair founddecl,
+                            SourceLocation TemplateKWLoc, ValueDecl *MemberDecl,
+                            DeclAccessPair FoundDecl,
                             DeclarationNameInfo MemberNameInfo,
-                            const TemplateArgumentListInfo *targs, QualType ty,
-                            ExprValueKind VK, ExprObjectKind OK);
+                            const TemplateArgumentListInfo *TemplateArgs,
+                            QualType T, ExprValueKind VK, ExprObjectKind OK,
+                            NonOdrUseReason NOUR);
+
+  /// Create an implicit MemberExpr, with no location, qualifier, template
+  /// arguments, and so on. Suitable only for non-static member access.
+  static MemberExpr *CreateImplicit(const ASTContext &C, Expr *Base,
+                                    bool IsArrow, ValueDecl *MemberDecl,
+                                    QualType T, ExprValueKind VK,
+                                    ExprObjectKind OK) {
+    return Create(C, Base, IsArrow, SourceLocation(), NestedNameSpecifierLoc(),
+                  SourceLocation(), MemberDecl,
+                  DeclAccessPair::make(MemberDecl, MemberDecl->getAccess()),
+                  DeclarationNameInfo(), nullptr, T, VK, OK, NOUR_None);
+  }
+
+  static MemberExpr *CreateEmpty(const ASTContext &Context, bool HasQualifier,
+                                 bool HasFoundDecl,
+                                 bool HasTemplateKWAndArgsInfo,
+                                 unsigned NumTemplateArgs);
 
   void setBase(Expr *E) { Base = E; }
   Expr *getBase() const { return cast<Expr>(Base); }
@@ -2942,6 +3026,12 @@
     return LO.AppleKext || !hasQualifier();
   }
 
+  /// Is this expression a non-odr-use reference, and if so, why?
+  /// This is only meaningful if the named member is a static member.
+  NonOdrUseReason isNonOdrUse() const {
+    return static_cast<NonOdrUseReason>(MemberExprBits.NonOdrUseReason);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == MemberExprClass;
   }
@@ -3105,6 +3195,13 @@
   path_const_iterator path_begin() const { return path_buffer(); }
   path_const_iterator path_end() const { return path_buffer() + path_size(); }
 
+  llvm::iterator_range<path_iterator> path() {
+    return llvm::make_range(path_begin(), path_end());
+  }
+  llvm::iterator_range<path_const_iterator> path() const {
+    return llvm::make_range(path_begin(), path_end());
+  }
+
   const FieldDecl *getTargetUnionField() const {
     assert(getCastKind() == CK_ToUnion);
     return getTargetFieldForToUnionCast(getType(), getSubExpr()->getType());
@@ -3398,6 +3495,9 @@
   static bool isComparisonOp(Opcode Opc) { return Opc >= BO_Cmp && Opc<=BO_NE; }
   bool isComparisonOp() const { return isComparisonOp(getOpcode()); }
 
+  static bool isCommaOp(Opcode Opc) { return Opc == BO_Comma; }
+  bool isCommaOp() const { return isCommaOp(getOpcode()); }
+
   static Opcode negateComparisonOp(Opcode Opc) {
     switch (Opc) {
     default:
@@ -4158,6 +4258,71 @@
   }
 };
 
+/// Represents a function call to one of __builtin_LINE(), __builtin_COLUMN(),
+/// __builtin_FUNCTION(), or __builtin_FILE().
+class SourceLocExpr final : public Expr {
+  SourceLocation BuiltinLoc, RParenLoc;
+  DeclContext *ParentContext;
+
+public:
+  enum IdentKind { Function, File, Line, Column };
+
+  SourceLocExpr(const ASTContext &Ctx, IdentKind Type, SourceLocation BLoc,
+                SourceLocation RParenLoc, DeclContext *Context);
+
+  /// Build an empty call expression.
+  explicit SourceLocExpr(EmptyShell Empty) : Expr(SourceLocExprClass, Empty) {}
+
+  /// Return the result of evaluating this SourceLocExpr in the specified
+  /// (and possibly null) default argument or initialization context.
+  APValue EvaluateInContext(const ASTContext &Ctx,
+                            const Expr *DefaultExpr) const;
+
+  /// Return a string representing the name of the specific builtin function.
+  StringRef getBuiltinStr() const;
+
+  IdentKind getIdentKind() const {
+    return static_cast<IdentKind>(SourceLocExprBits.Kind);
+  }
+
+  bool isStringType() const {
+    switch (getIdentKind()) {
+    case File:
+    case Function:
+      return true;
+    case Line:
+    case Column:
+      return false;
+    }
+    llvm_unreachable("unknown source location expression kind");
+  }
+  bool isIntType() const LLVM_READONLY { return !isStringType(); }
+
+  /// If the SourceLocExpr has been resolved return the subexpression
+  /// representing the resolved value. Otherwise return null.
+  const DeclContext *getParentContext() const { return ParentContext; }
+  DeclContext *getParentContext() { return ParentContext; }
+
+  SourceLocation getLocation() const { return BuiltinLoc; }
+  SourceLocation getBeginLoc() const { return BuiltinLoc; }
+  SourceLocation getEndLoc() const { return RParenLoc; }
+
+  child_range children() {
+    return child_range(child_iterator(), child_iterator());
+  }
+
+  const_child_range children() const {
+    return const_child_range(child_iterator(), child_iterator());
+  }
+
+  static bool classof(const Stmt *T) {
+    return T->getStmtClass() == SourceLocExprClass;
+  }
+
+private:
+  friend class ASTStmtReader;
+};
+
 /// Describes an C or C++ initializer list.
 ///
 /// InitListExpr describes an initializer list, which can be used to
diff --git a/linux-x64/clang/include/clang/AST/ExprCXX.h b/linux-x64/clang/include/clang/AST/ExprCXX.h
index 97be84e..28ed6cd 100644
--- a/linux-x64/clang/include/clang/AST/ExprCXX.h
+++ b/linux-x64/clang/include/clang/AST/ExprCXX.h
@@ -216,6 +216,8 @@
 
 /// Represents a call to a CUDA kernel function.
 class CUDAKernelCallExpr final : public CallExpr {
+  friend class ASTStmtReader;
+
   enum { CONFIG, END_PREARG };
 
   // CUDAKernelCallExpr has some trailing objects belonging
@@ -241,20 +243,6 @@
   }
   CallExpr *getConfig() { return cast_or_null<CallExpr>(getPreArg(CONFIG)); }
 
-  /// Sets the kernel configuration expression.
-  ///
-  /// Note that this method cannot be called if config has already been set to a
-  /// non-null value.
-  void setConfig(CallExpr *E) {
-    assert(!getConfig() &&
-           "Cannot call setConfig if config is not null");
-    setPreArg(CONFIG, E);
-    setInstantiationDependent(isInstantiationDependent() ||
-                              E->isInstantiationDependent());
-    setContainsUnexpandedParameterPack(containsUnexpandedParameterPack() ||
-                                       E->containsUnexpandedParameterPack());
-  }
-
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CUDAKernelCallExprClass;
   }
@@ -587,6 +575,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// The null pointer literal (C++11 [lex.nullptr])
@@ -616,6 +608,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// Implicit construction of a std::initializer_list<T> object from an
@@ -658,6 +654,10 @@
   }
 
   child_range children() { return child_range(&SubExpr, &SubExpr + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&SubExpr, &SubExpr + 1);
+  }
 };
 
 /// A C++ \c typeid expression (C++ [expr.typeid]), which gets
@@ -748,6 +748,15 @@
     auto **begin = reinterpret_cast<Stmt **>(&Operand);
     return child_range(begin, begin + 1);
   }
+
+  const_child_range children() const {
+    if (isTypeOperand())
+      return const_child_range(const_child_iterator(), const_child_iterator());
+
+    auto **begin =
+        reinterpret_cast<Stmt **>(&const_cast<CXXTypeidExpr *>(this)->Operand);
+    return const_child_range(begin, begin + 1);
+  }
 };
 
 /// A member reference to an MSPropertyDecl.
@@ -802,6 +811,11 @@
     return child_range((Stmt**)&BaseExpr, (Stmt**)&BaseExpr + 1);
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<MSPropertyRefExpr *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == MSPropertyRefExprClass;
   }
@@ -877,6 +891,10 @@
   child_range children() {
     return child_range(&SubExprs[0], &SubExprs[0] + NUM_SUBEXPRS);
   }
+
+  const_child_range children() const {
+    return const_child_range(&SubExprs[0], &SubExprs[0] + NUM_SUBEXPRS);
+  }
 };
 
 /// A Microsoft C++ @c __uuidof expression, which gets
@@ -958,6 +976,14 @@
     auto **begin = reinterpret_cast<Stmt **>(&Operand);
     return child_range(begin, begin + 1);
   }
+
+  const_child_range children() const {
+    if (isTypeOperand())
+      return const_child_range(const_child_iterator(), const_child_iterator());
+    auto **begin =
+        reinterpret_cast<Stmt **>(&const_cast<CXXUuidofExpr *>(this)->Operand);
+    return const_child_range(begin, begin + 1);
+  }
 };
 
 /// Represents the \c this expression in C++.
@@ -1004,6 +1030,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// A C++ throw-expression (C++ [except.throw]).
@@ -1062,6 +1092,10 @@
   child_range children() {
     return child_range(&Operand, Operand ? &Operand + 1 : &Operand);
   }
+
+  const_child_range children() const {
+    return const_child_range(&Operand, Operand ? &Operand + 1 : &Operand);
+  }
 };
 
 /// A default argument (C++ [dcl.fct.default]).
@@ -1075,7 +1109,11 @@
   /// The parameter whose default is being used.
   ParmVarDecl *Param;
 
-  CXXDefaultArgExpr(StmtClass SC, SourceLocation Loc, ParmVarDecl *Param)
+  /// The context where the default argument expression was used.
+  DeclContext *UsedContext;
+
+  CXXDefaultArgExpr(StmtClass SC, SourceLocation Loc, ParmVarDecl *Param,
+      DeclContext *UsedContext)
       : Expr(SC,
              Param->hasUnparsedDefaultArg()
                  ? Param->getType().getNonReferenceType()
@@ -1083,7 +1121,7 @@
              Param->getDefaultArg()->getValueKind(),
              Param->getDefaultArg()->getObjectKind(), false, false, false,
              false),
-        Param(Param) {
+        Param(Param), UsedContext(UsedContext) {
     CXXDefaultArgExprBits.Loc = Loc;
   }
 
@@ -1093,8 +1131,10 @@
   // \p Param is the parameter whose default argument is used by this
   // expression.
   static CXXDefaultArgExpr *Create(const ASTContext &C, SourceLocation Loc,
-                                   ParmVarDecl *Param) {
-    return new (C) CXXDefaultArgExpr(CXXDefaultArgExprClass, Loc, Param);
+                                   ParmVarDecl *Param,
+                                   DeclContext *UsedContext) {
+    return new (C)
+        CXXDefaultArgExpr(CXXDefaultArgExprClass, Loc, Param, UsedContext);
   }
 
   // Retrieve the parameter that the argument was created from.
@@ -1105,6 +1145,9 @@
   const Expr *getExpr() const { return getParam()->getDefaultArg(); }
   Expr *getExpr() { return getParam()->getDefaultArg(); }
 
+  const DeclContext *getUsedContext() const { return UsedContext; }
+  DeclContext *getUsedContext() { return UsedContext; }
+
   /// Retrieve the location where this default argument was actually used.
   SourceLocation getUsedLocation() const { return CXXDefaultArgExprBits.Loc; }
 
@@ -1123,6 +1166,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// A use of a default initializer in a constructor or in aggregate
@@ -1140,8 +1187,11 @@
   /// The field whose default is being used.
   FieldDecl *Field;
 
+  /// The context where the default initializer expression was used.
+  DeclContext *UsedContext;
+
   CXXDefaultInitExpr(const ASTContext &Ctx, SourceLocation Loc,
-                     FieldDecl *Field, QualType Ty);
+                     FieldDecl *Field, QualType Ty, DeclContext *UsedContext);
 
   CXXDefaultInitExpr(EmptyShell Empty) : Expr(CXXDefaultInitExprClass, Empty) {}
 
@@ -1149,8 +1199,8 @@
   /// \p Field is the non-static data member whose default initializer is used
   /// by this expression.
   static CXXDefaultInitExpr *Create(const ASTContext &Ctx, SourceLocation Loc,
-                                    FieldDecl *Field) {
-    return new (Ctx) CXXDefaultInitExpr(Ctx, Loc, Field, Field->getType());
+                                    FieldDecl *Field, DeclContext *UsedContext) {
+    return new (Ctx) CXXDefaultInitExpr(Ctx, Loc, Field, Field->getType(), UsedContext);
   }
 
   /// Get the field whose initializer will be used.
@@ -1167,6 +1217,13 @@
     return Field->getInClassInitializer();
   }
 
+  const DeclContext *getUsedContext() const { return UsedContext; }
+  DeclContext *getUsedContext() { return UsedContext; }
+
+  /// Retrieve the location where this default initializer expression was
+  /// actually used.
+  SourceLocation getUsedLocation() const { return getBeginLoc(); }
+
   SourceLocation getBeginLoc() const { return CXXDefaultInitExprBits.Loc; }
   SourceLocation getEndLoc() const { return CXXDefaultInitExprBits.Loc; }
 
@@ -1178,6 +1235,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// Represents a C++ temporary.
@@ -1255,6 +1316,10 @@
 
   // Iterators
   child_range children() { return child_range(&SubExpr, &SubExpr + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&SubExpr, &SubExpr + 1);
+  }
 };
 
 /// Represents a call to a C++ constructor.
@@ -1438,6 +1503,11 @@
   child_range children() {
     return child_range(getTrailingArgs(), getTrailingArgs() + getNumArgs());
   }
+
+  const_child_range children() const {
+    auto Children = const_cast<CXXConstructExpr *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
 };
 
 /// Represents a call to an inherited base class constructor from an
@@ -1506,6 +1576,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// Represents an explicit C++ type conversion that uses "functional"
@@ -1832,6 +1906,10 @@
   /// parameter list associated with it, or else return null.
   TemplateParameterList *getTemplateParameterList() const;
 
+  /// Get the template parameters were explicitly specified (as opposed to being
+  /// invented by use of an auto parameter).
+  ArrayRef<NamedDecl *> getExplicitTemplateParameters() const;
+
   /// Whether this is a generic lambda.
   bool isGenericLambda() const { return getTemplateParameterList(); }
 
@@ -1863,6 +1941,11 @@
     // Includes initialization exprs plus body stmt
     return child_range(getStoredStmts(), getStoredStmts() + NumCaptures + 1);
   }
+
+  const_child_range children() const {
+    return const_child_range(getStoredStmts(),
+                             getStoredStmts() + NumCaptures + 1);
+  }
 };
 
 /// An expression "T()" which creates a value-initialized rvalue of type
@@ -1906,6 +1989,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// Represents a new-expression for memory allocation and constructor
@@ -1978,7 +2065,7 @@
   CXXNewExpr(bool IsGlobalNew, FunctionDecl *OperatorNew,
              FunctionDecl *OperatorDelete, bool ShouldPassAlignment,
              bool UsualArrayDeleteWantsSize, ArrayRef<Expr *> PlacementArgs,
-             SourceRange TypeIdParens, Expr *ArraySize,
+             SourceRange TypeIdParens, Optional<Expr *> ArraySize,
              InitializationStyle InitializationStyle, Expr *Initializer,
              QualType Ty, TypeSourceInfo *AllocatedTypeInfo, SourceRange Range,
              SourceRange DirectInitRange);
@@ -1993,7 +2080,7 @@
   Create(const ASTContext &Ctx, bool IsGlobalNew, FunctionDecl *OperatorNew,
          FunctionDecl *OperatorDelete, bool ShouldPassAlignment,
          bool UsualArrayDeleteWantsSize, ArrayRef<Expr *> PlacementArgs,
-         SourceRange TypeIdParens, Expr *ArraySize,
+         SourceRange TypeIdParens, Optional<Expr *> ArraySize,
          InitializationStyle InitializationStyle, Expr *Initializer,
          QualType Ty, TypeSourceInfo *AllocatedTypeInfo, SourceRange Range,
          SourceRange DirectInitRange);
@@ -2036,15 +2123,15 @@
 
   bool isArray() const { return CXXNewExprBits.IsArray; }
 
-  Expr *getArraySize() {
-    return isArray()
-               ? cast<Expr>(getTrailingObjects<Stmt *>()[arraySizeOffset()])
-               : nullptr;
+  Optional<Expr *> getArraySize() {
+    if (!isArray())
+      return None;
+    return cast_or_null<Expr>(getTrailingObjects<Stmt *>()[arraySizeOffset()]);
   }
-  const Expr *getArraySize() const {
-    return isArray()
-               ? cast<Expr>(getTrailingObjects<Stmt *>()[arraySizeOffset()])
-               : nullptr;
+  Optional<const Expr *> getArraySize() const {
+    if (!isArray())
+      return None;
+    return cast_or_null<Expr>(getTrailingObjects<Stmt *>()[arraySizeOffset()]);
   }
 
   unsigned getNumPlacementArgs() const {
@@ -2162,6 +2249,10 @@
 
   // Iterators
   child_range children() { return child_range(raw_arg_begin(), raw_arg_end()); }
+
+  const_child_range children() const {
+    return const_child_range(const_cast<CXXNewExpr *>(this)->children());
+  }
 };
 
 /// Represents a \c delete expression for memory deallocation and
@@ -2228,6 +2319,10 @@
 
   // Iterators
   child_range children() { return child_range(&Argument, &Argument + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&Argument, &Argument + 1);
+  }
 };
 
 /// Stores the type being destroyed by a pseudo-destructor expression.
@@ -2416,6 +2511,10 @@
 
   // Iterators
   child_range children() { return child_range(&Base, &Base + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&Base, &Base + 1);
+  }
 };
 
 /// A type trait used in the implementation of various C++11 and
@@ -2500,6 +2599,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// An Embarcadero array type trait, as used in the implementation of
@@ -2567,6 +2670,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// An expression trait intrinsic.
@@ -2627,6 +2734,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// A reference to an overloaded function set, either an
@@ -2919,6 +3030,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == UnresolvedLookupExprClass;
   }
@@ -3073,6 +3188,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// Represents an expression -- generally a full-expression -- that
@@ -3142,6 +3261,10 @@
 
   // Iterators
   child_range children() { return child_range(&SubExpr, &SubExpr + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&SubExpr, &SubExpr + 1);
+  }
 };
 
 /// Describes an explicit type conversion that uses functional
@@ -3271,6 +3394,12 @@
     auto **begin = reinterpret_cast<Stmt **>(arg_begin());
     return child_range(begin, begin + arg_size());
   }
+
+  const_child_range children() const {
+    auto **begin = reinterpret_cast<Stmt **>(
+        const_cast<CXXUnresolvedConstructExpr *>(this)->arg_begin());
+    return const_child_range(begin, begin + arg_size());
+  }
 };
 
 /// Represents a C++ member access expression where the actual
@@ -3517,6 +3646,12 @@
       return child_range(child_iterator(), child_iterator());
     return child_range(&Base, &Base + 1);
   }
+
+  const_child_range children() const {
+    if (isImplicitAccess())
+      return const_child_range(const_child_iterator(), const_child_iterator());
+    return const_child_range(&Base, &Base + 1);
+  }
 };
 
 /// Represents a C++ member access expression for which lookup
@@ -3680,6 +3815,12 @@
       return child_range(child_iterator(), child_iterator());
     return child_range(&Base, &Base + 1);
   }
+
+  const_child_range children() const {
+    if (isImplicitAccess())
+      return const_child_range(const_child_iterator(), const_child_iterator());
+    return const_child_range(&Base, &Base + 1);
+  }
 };
 
 DeclAccessPair *OverloadExpr::getTrailingResults() {
@@ -3749,6 +3890,10 @@
 
   // Iterators
   child_range children() { return child_range(&Operand, &Operand + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&Operand, &Operand + 1);
+  }
 };
 
 /// Represents a C++11 pack expansion that produces a sequence of
@@ -3829,6 +3974,10 @@
   child_range children() {
     return child_range(&Pattern, &Pattern + 1);
   }
+
+  const_child_range children() const {
+    return const_child_range(&Pattern, &Pattern + 1);
+  }
 };
 
 /// Represents an expression that computes the length of a parameter
@@ -3950,6 +4099,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// Represents a reference to a non-type template parameter
@@ -3996,6 +4149,10 @@
 
   // Iterators
   child_range children() { return child_range(&Replacement, &Replacement + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&Replacement, &Replacement + 1);
+  }
 };
 
 /// Represents a reference to a non-type template parameter pack that
@@ -4058,10 +4215,14 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
-/// Represents a reference to a function parameter pack that has been
-/// substituted but not yet expanded.
+/// Represents a reference to a function parameter pack or init-capture pack
+/// that has been substituted but not yet expanded.
 ///
 /// When a pack expansion contains multiple parameter packs at different levels,
 /// this node is used to represent a function parameter pack at an outer level
@@ -4076,13 +4237,13 @@
 /// \endcode
 class FunctionParmPackExpr final
     : public Expr,
-      private llvm::TrailingObjects<FunctionParmPackExpr, ParmVarDecl *> {
+      private llvm::TrailingObjects<FunctionParmPackExpr, VarDecl *> {
   friend class ASTReader;
   friend class ASTStmtReader;
   friend TrailingObjects;
 
   /// The function parameter pack which was referenced.
-  ParmVarDecl *ParamPack;
+  VarDecl *ParamPack;
 
   /// The location of the function parameter pack reference.
   SourceLocation NameLoc;
@@ -4090,35 +4251,35 @@
   /// The number of expansions of this pack.
   unsigned NumParameters;
 
-  FunctionParmPackExpr(QualType T, ParmVarDecl *ParamPack,
+  FunctionParmPackExpr(QualType T, VarDecl *ParamPack,
                        SourceLocation NameLoc, unsigned NumParams,
-                       ParmVarDecl *const *Params);
+                       VarDecl *const *Params);
 
 public:
   static FunctionParmPackExpr *Create(const ASTContext &Context, QualType T,
-                                      ParmVarDecl *ParamPack,
+                                      VarDecl *ParamPack,
                                       SourceLocation NameLoc,
-                                      ArrayRef<ParmVarDecl *> Params);
+                                      ArrayRef<VarDecl *> Params);
   static FunctionParmPackExpr *CreateEmpty(const ASTContext &Context,
                                            unsigned NumParams);
 
   /// Get the parameter pack which this expression refers to.
-  ParmVarDecl *getParameterPack() const { return ParamPack; }
+  VarDecl *getParameterPack() const { return ParamPack; }
 
   /// Get the location of the parameter pack.
   SourceLocation getParameterPackLocation() const { return NameLoc; }
 
   /// Iterators over the parameters which the parameter pack expanded
   /// into.
-  using iterator = ParmVarDecl * const *;
-  iterator begin() const { return getTrailingObjects<ParmVarDecl *>(); }
+  using iterator = VarDecl * const *;
+  iterator begin() const { return getTrailingObjects<VarDecl *>(); }
   iterator end() const { return begin() + NumParameters; }
 
   /// Get the number of parameters in this parameter pack.
   unsigned getNumExpansions() const { return NumParameters; }
 
   /// Get an expansion of the parameter pack by index.
-  ParmVarDecl *getExpansion(unsigned I) const { return begin()[I]; }
+  VarDecl *getExpansion(unsigned I) const { return begin()[I]; }
 
   SourceLocation getBeginLoc() const LLVM_READONLY { return NameLoc; }
   SourceLocation getEndLoc() const LLVM_READONLY { return NameLoc; }
@@ -4130,6 +4291,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// Represents a prvalue temporary that is written into memory so that
@@ -4252,6 +4417,15 @@
     auto ES = State.get<ExtraState *>();
     return child_range(&ES->Temporary, &ES->Temporary + 1);
   }
+
+  const_child_range children() const {
+    if (State.is<Stmt *>())
+      return const_child_range(State.getAddrOfPtr1(),
+                               State.getAddrOfPtr1() + 1);
+
+    auto ES = State.get<ExtraState *>();
+    return const_child_range(&ES->Temporary, &ES->Temporary + 1);
+  }
 };
 
 /// Represents a folding of a pack over an operator.
@@ -4269,18 +4443,21 @@
   SourceLocation LParenLoc;
   SourceLocation EllipsisLoc;
   SourceLocation RParenLoc;
+  // When 0, the number of expansions is not known. Otherwise, this is one more
+  // than the number of expansions.
+  unsigned NumExpansions;
   Stmt *SubExprs[2];
   BinaryOperatorKind Opcode;
 
 public:
   CXXFoldExpr(QualType T, SourceLocation LParenLoc, Expr *LHS,
               BinaryOperatorKind Opcode, SourceLocation EllipsisLoc, Expr *RHS,
-              SourceLocation RParenLoc)
+              SourceLocation RParenLoc, Optional<unsigned> NumExpansions)
       : Expr(CXXFoldExprClass, T, VK_RValue, OK_Ordinary,
              /*Dependent*/ true, true, true,
              /*ContainsUnexpandedParameterPack*/ false),
         LParenLoc(LParenLoc), EllipsisLoc(EllipsisLoc), RParenLoc(RParenLoc),
-        Opcode(Opcode) {
+        NumExpansions(NumExpansions ? *NumExpansions + 1 : 0), Opcode(Opcode) {
     SubExprs[0] = LHS;
     SubExprs[1] = RHS;
   }
@@ -4307,6 +4484,12 @@
   SourceLocation getEllipsisLoc() const { return EllipsisLoc; }
   BinaryOperatorKind getOperator() const { return Opcode; }
 
+  Optional<unsigned> getNumExpansions() const {
+    if (NumExpansions)
+      return NumExpansions - 1;
+    return None;
+  }
+
   SourceLocation getBeginLoc() const LLVM_READONLY { return LParenLoc; }
 
   SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
@@ -4317,6 +4500,10 @@
 
   // Iterators
   child_range children() { return child_range(SubExprs, SubExprs + 2); }
+
+  const_child_range children() const {
+    return const_child_range(SubExprs, SubExprs + 2);
+  }
 };
 
 /// Represents an expression that might suspend coroutine execution;
@@ -4408,6 +4595,10 @@
     return child_range(SubExprs, SubExprs + SubExpr::Count);
   }
 
+  const_child_range children() const {
+    return const_child_range(SubExprs, SubExprs + SubExpr::Count);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CoawaitExprClass ||
            T->getStmtClass() == CoyieldExprClass;
@@ -4492,6 +4683,10 @@
 
   child_range children() { return child_range(SubExprs, SubExprs + 2); }
 
+  const_child_range children() const {
+    return const_child_range(SubExprs, SubExprs + 2);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == DependentCoawaitExprClass;
   }
@@ -4521,6 +4716,35 @@
   }
 };
 
+/// Represents a C++2a __builtin_bit_cast(T, v) expression. Used to implement
+/// std::bit_cast. These can sometimes be evaluated as part of a constant
+/// expression, but otherwise CodeGen to a simple memcpy in general.
+class BuiltinBitCastExpr final
+    : public ExplicitCastExpr,
+      private llvm::TrailingObjects<BuiltinBitCastExpr, CXXBaseSpecifier *> {
+  friend class ASTStmtReader;
+  friend class CastExpr;
+  friend class TrailingObjects;
+
+  SourceLocation KWLoc;
+  SourceLocation RParenLoc;
+
+public:
+  BuiltinBitCastExpr(QualType T, ExprValueKind VK, CastKind CK, Expr *SrcExpr,
+                     TypeSourceInfo *DstType, SourceLocation KWLoc,
+                     SourceLocation RParenLoc)
+      : ExplicitCastExpr(BuiltinBitCastExprClass, T, VK, CK, SrcExpr, 0,
+                         DstType),
+        KWLoc(KWLoc), RParenLoc(RParenLoc) {}
+
+  SourceLocation getBeginLoc() const LLVM_READONLY { return KWLoc; }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
+
+  static bool classof(const Stmt *T) {
+    return T->getStmtClass() == BuiltinBitCastExprClass;
+  }
+};
+
 } // namespace clang
 
 #endif // LLVM_CLANG_AST_EXPRCXX_H
diff --git a/linux-x64/clang/include/clang/AST/ExprObjC.h b/linux-x64/clang/include/clang/AST/ExprObjC.h
index 6719169..dbb2b2f 100644
--- a/linux-x64/clang/include/clang/AST/ExprObjC.h
+++ b/linux-x64/clang/include/clang/AST/ExprObjC.h
@@ -72,6 +72,10 @@
   // Iterators
   child_range children() { return child_range(&String, &String+1); }
 
+  const_child_range children() const {
+    return const_child_range(&String, &String + 1);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCStringLiteralClass;
   }
@@ -104,6 +108,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCBoolLiteralExprClass;
   }
@@ -138,6 +146,12 @@
     return BoxingMethod;
   }
 
+  // Indicates whether this boxed expression can be emitted as a compile-time
+  // constant.
+  bool isExpressibleAsConstantInitializer() const {
+    return !BoxingMethod && SubExpr;
+  }
+
   SourceLocation getAtLoc() const { return Range.getBegin(); }
 
   SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
@@ -150,6 +164,10 @@
   // Iterators
   child_range children() { return child_range(&SubExpr, &SubExpr+1); }
 
+  const_child_range children() const {
+    return const_child_range(&SubExpr, &SubExpr + 1);
+  }
+
   using const_arg_iterator = ConstExprIterator;
 
   const_arg_iterator arg_begin() const {
@@ -228,6 +246,11 @@
                        reinterpret_cast<Stmt **>(getElements()) + NumElements);
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<ObjCArrayLiteral *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const Stmt *T) {
       return T->getStmtClass() == ObjCArrayLiteralClass;
   }
@@ -368,6 +391,11 @@
             NumElements * 2);
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<ObjCDictionaryLiteral *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCDictionaryLiteralClass;
   }
@@ -413,6 +441,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCEncodeExprClass;
   }
@@ -451,6 +483,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCSelectorExprClass;
   }
@@ -497,6 +533,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCProtocolExprClass;
   }
@@ -560,6 +600,10 @@
   // Iterators
   child_range children() { return child_range(&Base, &Base+1); }
 
+  const_child_range children() const {
+    return const_child_range(&Base, &Base + 1);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCIvarRefExprClass;
   }
@@ -751,6 +795,11 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<ObjCPropertyRefExpr *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCPropertyRefExprClass;
   }
@@ -860,6 +909,10 @@
     return child_range(SubExprs, SubExprs+END_EXPR);
   }
 
+  const_child_range children() const {
+    return const_child_range(SubExprs, SubExprs + END_EXPR);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCSubscriptRefExprClass;
   }
@@ -1402,6 +1455,8 @@
   // Iterators
   child_range children();
 
+  const_child_range children() const;
+
   using arg_iterator = ExprIterator;
   using const_arg_iterator = ConstExprIterator;
 
@@ -1488,6 +1543,10 @@
   // Iterators
   child_range children() { return child_range(&Base, &Base+1); }
 
+  const_child_range children() const {
+    return const_child_range(&Base, &Base + 1);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCIsaExprClass;
   }
@@ -1549,6 +1608,10 @@
 
   child_range children() { return child_range(&Operand, &Operand+1); }
 
+  const_child_range children() const {
+    return const_child_range(&Operand, &Operand + 1);
+  }
+
   // Source locations are determined by the subexpression.
   SourceLocation getBeginLoc() const LLVM_READONLY {
     return Operand->getBeginLoc();
@@ -1661,6 +1724,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCAvailabilityCheckExprClass;
   }
diff --git a/linux-x64/clang/include/clang/AST/ExprOpenMP.h b/linux-x64/clang/include/clang/AST/ExprOpenMP.h
index b26e6d1..5607d2d 100644
--- a/linux-x64/clang/include/clang/AST/ExprOpenMP.h
+++ b/linux-x64/clang/include/clang/AST/ExprOpenMP.h
@@ -122,6 +122,10 @@
   child_range children() {
     return child_range(&SubExprs[BASE], &SubExprs[END_EXPR]);
   }
+
+  const_child_range children() const {
+    return const_child_range(&SubExprs[BASE], &SubExprs[END_EXPR]);
+  }
 };
 } // end namespace clang
 
diff --git a/linux-x64/clang/include/clang/AST/GlobalDecl.h b/linux-x64/clang/include/clang/AST/GlobalDecl.h
index a5937c2..86fd0f6 100644
--- a/linux-x64/clang/include/clang/AST/GlobalDecl.h
+++ b/linux-x64/clang/include/clang/AST/GlobalDecl.h
@@ -27,6 +27,12 @@
 
 namespace clang {
 
+enum class DynamicInitKind : unsigned {
+  NoStub = 0,
+  Initializer,
+  AtExit,
+};
+
 /// GlobalDecl - represents a global declaration. This can either be a
 /// CXXConstructorDecl and the constructor type (Base, Complete).
 /// a CXXDestructorDecl and the destructor type (Base, Complete) or
@@ -55,6 +61,8 @@
   GlobalDecl(const OMPDeclareReductionDecl *D) { Init(D); }
   GlobalDecl(const CXXConstructorDecl *D, CXXCtorType Type) : Value(D, Type) {}
   GlobalDecl(const CXXDestructorDecl *D, CXXDtorType Type) : Value(D, Type) {}
+  GlobalDecl(const VarDecl *D, DynamicInitKind StubKind)
+      : Value(D, unsigned(StubKind)) {}
 
   GlobalDecl getCanonicalDecl() const {
     GlobalDecl CanonGD;
@@ -77,6 +85,13 @@
     return static_cast<CXXDtorType>(Value.getInt());
   }
 
+  DynamicInitKind getDynamicInitKind() const {
+    assert(isa<VarDecl>(getDecl()) &&
+           cast<VarDecl>(getDecl())->hasGlobalStorage() &&
+           "Decl is not a global variable!");
+    return static_cast<DynamicInitKind>(Value.getInt());
+  }
+
   unsigned getMultiVersionIndex() const {
     assert(isa<FunctionDecl>(getDecl()) &&
            !isa<CXXConstructorDecl>(getDecl()) &&
@@ -104,6 +119,20 @@
     return Result;
   }
 
+  GlobalDecl getWithCtorType(CXXCtorType Type) {
+    assert(isa<CXXConstructorDecl>(getDecl()));
+    GlobalDecl Result(*this);
+    Result.Value.setInt(Type);
+    return Result;
+  }
+
+  GlobalDecl getWithDtorType(CXXDtorType Type) {
+    assert(isa<CXXDestructorDecl>(getDecl()));
+    GlobalDecl Result(*this);
+    Result.Value.setInt(Type);
+    return Result;
+  }
+
   GlobalDecl getWithMultiVersionIndex(unsigned Index) {
     assert(isa<FunctionDecl>(getDecl()) &&
            !isa<CXXConstructorDecl>(getDecl()) &&
diff --git a/linux-x64/clang/include/clang/AST/JSONNodeDumper.h b/linux-x64/clang/include/clang/AST/JSONNodeDumper.h
new file mode 100644
index 0000000..fe155ad
--- /dev/null
+++ b/linux-x64/clang/include/clang/AST/JSONNodeDumper.h
@@ -0,0 +1,425 @@
+//===--- JSONNodeDumper.h - Printing of AST nodes to JSON -----------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements AST dumping of components of individual AST nodes to
+// a JSON.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_AST_JSONNODEDUMPER_H
+#define LLVM_CLANG_AST_JSONNODEDUMPER_H
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/ASTNodeTraverser.h"
+#include "clang/AST/ASTDumperUtils.h"
+#include "clang/AST/AttrVisitor.h"
+#include "clang/AST/CommentCommandTraits.h"
+#include "clang/AST/CommentVisitor.h"
+#include "clang/AST/ExprCXX.h"
+#include "llvm/Support/JSON.h"
+
+namespace clang {
+
+class NodeStreamer {
+  bool FirstChild = true;
+  bool TopLevel = true;
+  llvm::SmallVector<std::function<void(bool IsLastChild)>, 32> Pending;
+
+protected:
+  llvm::json::OStream JOS;
+
+public:
+  /// Add a child of the current node.  Calls DoAddChild without arguments
+  template <typename Fn> void AddChild(Fn DoAddChild) {
+    return AddChild("", DoAddChild);
+  }
+
+  /// Add a child of the current node with an optional label.
+  /// Calls DoAddChild without arguments.
+  template <typename Fn> void AddChild(StringRef Label, Fn DoAddChild) {
+    // If we're at the top level, there's nothing interesting to do; just
+    // run the dumper.
+    if (TopLevel) {
+      TopLevel = false;
+      JOS.objectBegin();
+
+      DoAddChild();
+
+      while (!Pending.empty()) {
+        Pending.back()(true);
+        Pending.pop_back();
+      }
+
+      JOS.objectEnd();
+      TopLevel = true;
+      return;
+    }
+
+    // We need to capture an owning-string in the lambda because the lambda
+    // is invoked in a deferred manner.
+    std::string LabelStr = !Label.empty() ? Label : "inner";
+    bool WasFirstChild = FirstChild;
+    auto DumpWithIndent = [=](bool IsLastChild) {
+      if (WasFirstChild) {
+        JOS.attributeBegin(LabelStr);
+        JOS.arrayBegin();
+      }
+
+      FirstChild = true;
+      unsigned Depth = Pending.size();
+      JOS.objectBegin();
+
+      DoAddChild();
+
+      // If any children are left, they're the last at their nesting level.
+      // Dump those ones out now.
+      while (Depth < Pending.size()) {
+        Pending.back()(true);
+        this->Pending.pop_back();
+      }
+
+      JOS.objectEnd();
+
+      if (IsLastChild) {
+        JOS.arrayEnd();
+        JOS.attributeEnd();
+      }
+    };
+
+    if (FirstChild) {
+      Pending.push_back(std::move(DumpWithIndent));
+    } else {
+      Pending.back()(false);
+      Pending.back() = std::move(DumpWithIndent);
+    }
+    FirstChild = false;
+  }
+
+  NodeStreamer(raw_ostream &OS) : JOS(OS, 2) {}
+};
+
+// Dumps AST nodes in JSON format. There is no implied stability for the
+// content or format of the dump between major releases of Clang, other than it
+// being valid JSON output. Further, there is no requirement that the
+// information dumped is a complete representation of the AST, only that the
+// information presented is correct.
+class JSONNodeDumper
+    : public ConstAttrVisitor<JSONNodeDumper>,
+      public comments::ConstCommentVisitor<JSONNodeDumper, void,
+                                           const comments::FullComment *>,
+      public ConstTemplateArgumentVisitor<JSONNodeDumper>,
+      public ConstStmtVisitor<JSONNodeDumper>,
+      public TypeVisitor<JSONNodeDumper>,
+      public ConstDeclVisitor<JSONNodeDumper>,
+      public NodeStreamer {
+  friend class JSONDumper;
+
+  const SourceManager &SM;
+  ASTContext& Ctx;
+  PrintingPolicy PrintPolicy;
+  const comments::CommandTraits *Traits;
+  StringRef LastLocFilename;
+  unsigned LastLocLine;
+
+  using InnerAttrVisitor = ConstAttrVisitor<JSONNodeDumper>;
+  using InnerCommentVisitor =
+      comments::ConstCommentVisitor<JSONNodeDumper, void,
+                                    const comments::FullComment *>;
+  using InnerTemplateArgVisitor = ConstTemplateArgumentVisitor<JSONNodeDumper>;
+  using InnerStmtVisitor = ConstStmtVisitor<JSONNodeDumper>;
+  using InnerTypeVisitor = TypeVisitor<JSONNodeDumper>;
+  using InnerDeclVisitor = ConstDeclVisitor<JSONNodeDumper>;
+
+  void attributeOnlyIfTrue(StringRef Key, bool Value) {
+    if (Value)
+      JOS.attribute(Key, Value);
+  }
+
+  // Writes the attributes of a SourceLocation object without.
+  void writeBareSourceLocation(SourceLocation Loc);
+
+  // Writes the attributes of a SourceLocation to JSON based on its presumed
+  // spelling location. If the given location represents a macro invocation,
+  // this outputs two sub-objects: one for the spelling and one for the
+  // expansion location.
+  void writeSourceLocation(SourceLocation Loc);
+  void writeSourceRange(SourceRange R);
+  std::string createPointerRepresentation(const void *Ptr);
+  llvm::json::Object createQualType(QualType QT, bool Desugar = true);
+  llvm::json::Object createBareDeclRef(const Decl *D);
+  void writeBareDeclRef(const Decl *D);
+  llvm::json::Object createCXXRecordDefinitionData(const CXXRecordDecl *RD);
+  llvm::json::Object createCXXBaseSpecifier(const CXXBaseSpecifier &BS);
+  std::string createAccessSpecifier(AccessSpecifier AS);
+  llvm::json::Array createCastPath(const CastExpr *C);
+
+  void writePreviousDeclImpl(...) {}
+
+  template <typename T> void writePreviousDeclImpl(const Mergeable<T> *D) {
+    const T *First = D->getFirstDecl();
+    if (First != D)
+      JOS.attribute("firstRedecl", createPointerRepresentation(First));
+  }
+
+  template <typename T> void writePreviousDeclImpl(const Redeclarable<T> *D) {
+    const T *Prev = D->getPreviousDecl();
+    if (Prev)
+      JOS.attribute("previousDecl", createPointerRepresentation(Prev));
+  }
+  void addPreviousDeclaration(const Decl *D);
+
+  StringRef getCommentCommandName(unsigned CommandID) const;
+
+public:
+  JSONNodeDumper(raw_ostream &OS, const SourceManager &SrcMgr, ASTContext &Ctx,
+                 const PrintingPolicy &PrintPolicy,
+                 const comments::CommandTraits *Traits)
+      : NodeStreamer(OS), SM(SrcMgr), Ctx(Ctx), PrintPolicy(PrintPolicy),
+        Traits(Traits), LastLocLine(0) {}
+
+  void Visit(const Attr *A);
+  void Visit(const Stmt *Node);
+  void Visit(const Type *T);
+  void Visit(QualType T);
+  void Visit(const Decl *D);
+
+  void Visit(const comments::Comment *C, const comments::FullComment *FC);
+  void Visit(const TemplateArgument &TA, SourceRange R = {},
+             const Decl *From = nullptr, StringRef Label = {});
+  void Visit(const CXXCtorInitializer *Init);
+  void Visit(const OMPClause *C);
+  void Visit(const BlockDecl::Capture &C);
+  void Visit(const GenericSelectionExpr::ConstAssociation &A);
+
+  void VisitTypedefType(const TypedefType *TT);
+  void VisitFunctionType(const FunctionType *T);
+  void VisitFunctionProtoType(const FunctionProtoType *T);
+  void VisitRValueReferenceType(const ReferenceType *RT);
+  void VisitArrayType(const ArrayType *AT);
+  void VisitConstantArrayType(const ConstantArrayType *CAT);
+  void VisitDependentSizedExtVectorType(const DependentSizedExtVectorType *VT);
+  void VisitVectorType(const VectorType *VT);
+  void VisitUnresolvedUsingType(const UnresolvedUsingType *UUT);
+  void VisitUnaryTransformType(const UnaryTransformType *UTT);
+  void VisitTagType(const TagType *TT);
+  void VisitTemplateTypeParmType(const TemplateTypeParmType *TTPT);
+  void VisitAutoType(const AutoType *AT);
+  void VisitTemplateSpecializationType(const TemplateSpecializationType *TST);
+  void VisitInjectedClassNameType(const InjectedClassNameType *ICNT);
+  void VisitObjCInterfaceType(const ObjCInterfaceType *OIT);
+  void VisitPackExpansionType(const PackExpansionType *PET);
+  void VisitElaboratedType(const ElaboratedType *ET);
+  void VisitMacroQualifiedType(const MacroQualifiedType *MQT);
+  void VisitMemberPointerType(const MemberPointerType *MPT);
+
+  void VisitNamedDecl(const NamedDecl *ND);
+  void VisitTypedefDecl(const TypedefDecl *TD);
+  void VisitTypeAliasDecl(const TypeAliasDecl *TAD);
+  void VisitNamespaceDecl(const NamespaceDecl *ND);
+  void VisitUsingDirectiveDecl(const UsingDirectiveDecl *UDD);
+  void VisitNamespaceAliasDecl(const NamespaceAliasDecl *NAD);
+  void VisitUsingDecl(const UsingDecl *UD);
+  void VisitUsingShadowDecl(const UsingShadowDecl *USD);
+  void VisitVarDecl(const VarDecl *VD);
+  void VisitFieldDecl(const FieldDecl *FD);
+  void VisitFunctionDecl(const FunctionDecl *FD);
+  void VisitEnumDecl(const EnumDecl *ED);
+  void VisitEnumConstantDecl(const EnumConstantDecl *ECD);
+  void VisitRecordDecl(const RecordDecl *RD);
+  void VisitCXXRecordDecl(const CXXRecordDecl *RD);
+  void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D);
+  void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D);
+  void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D);
+  void VisitLinkageSpecDecl(const LinkageSpecDecl *LSD);
+  void VisitAccessSpecDecl(const AccessSpecDecl *ASD);
+  void VisitFriendDecl(const FriendDecl *FD);
+
+  void VisitObjCIvarDecl(const ObjCIvarDecl *D);
+  void VisitObjCMethodDecl(const ObjCMethodDecl *D);
+  void VisitObjCTypeParamDecl(const ObjCTypeParamDecl *D);
+  void VisitObjCCategoryDecl(const ObjCCategoryDecl *D);
+  void VisitObjCCategoryImplDecl(const ObjCCategoryImplDecl *D);
+  void VisitObjCProtocolDecl(const ObjCProtocolDecl *D);
+  void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D);
+  void VisitObjCImplementationDecl(const ObjCImplementationDecl *D);
+  void VisitObjCCompatibleAliasDecl(const ObjCCompatibleAliasDecl *D);
+  void VisitObjCPropertyDecl(const ObjCPropertyDecl *D);
+  void VisitObjCPropertyImplDecl(const ObjCPropertyImplDecl *D);
+  void VisitBlockDecl(const BlockDecl *D);
+
+  void VisitDeclRefExpr(const DeclRefExpr *DRE);
+  void VisitPredefinedExpr(const PredefinedExpr *PE);
+  void VisitUnaryOperator(const UnaryOperator *UO);
+  void VisitBinaryOperator(const BinaryOperator *BO);
+  void VisitCompoundAssignOperator(const CompoundAssignOperator *CAO);
+  void VisitMemberExpr(const MemberExpr *ME);
+  void VisitCXXNewExpr(const CXXNewExpr *NE);
+  void VisitCXXDeleteExpr(const CXXDeleteExpr *DE);
+  void VisitCXXThisExpr(const CXXThisExpr *TE);
+  void VisitCastExpr(const CastExpr *CE);
+  void VisitImplicitCastExpr(const ImplicitCastExpr *ICE);
+  void VisitCallExpr(const CallExpr *CE);
+  void VisitUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *TTE);
+  void VisitSizeOfPackExpr(const SizeOfPackExpr *SOPE);
+  void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *ULE);
+  void VisitAddrLabelExpr(const AddrLabelExpr *ALE);
+  void VisitCXXTypeidExpr(const CXXTypeidExpr *CTE);
+  void VisitConstantExpr(const ConstantExpr *CE);
+  void VisitInitListExpr(const InitListExpr *ILE);
+  void VisitGenericSelectionExpr(const GenericSelectionExpr *GSE);
+  void VisitCXXUnresolvedConstructExpr(const CXXUnresolvedConstructExpr *UCE);
+  void VisitCXXConstructExpr(const CXXConstructExpr *CE);
+  void VisitExprWithCleanups(const ExprWithCleanups *EWC);
+  void VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *BTE);
+  void VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *MTE);
+  void VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *ME);
+
+  void VisitObjCEncodeExpr(const ObjCEncodeExpr *OEE);
+  void VisitObjCMessageExpr(const ObjCMessageExpr *OME);
+  void VisitObjCBoxedExpr(const ObjCBoxedExpr *OBE);
+  void VisitObjCSelectorExpr(const ObjCSelectorExpr *OSE);
+  void VisitObjCProtocolExpr(const ObjCProtocolExpr *OPE);
+  void VisitObjCPropertyRefExpr(const ObjCPropertyRefExpr *OPRE);
+  void VisitObjCSubscriptRefExpr(const ObjCSubscriptRefExpr *OSRE);
+  void VisitObjCIvarRefExpr(const ObjCIvarRefExpr *OIRE);
+  void VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *OBLE);
+
+  void VisitIntegerLiteral(const IntegerLiteral *IL);
+  void VisitCharacterLiteral(const CharacterLiteral *CL);
+  void VisitFixedPointLiteral(const FixedPointLiteral *FPL);
+  void VisitFloatingLiteral(const FloatingLiteral *FL);
+  void VisitStringLiteral(const StringLiteral *SL);
+  void VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *BLE);
+
+  void VisitIfStmt(const IfStmt *IS);
+  void VisitSwitchStmt(const SwitchStmt *SS);
+  void VisitCaseStmt(const CaseStmt *CS);
+  void VisitLabelStmt(const LabelStmt *LS);
+  void VisitGotoStmt(const GotoStmt *GS);
+  void VisitWhileStmt(const WhileStmt *WS);
+  void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *OACS);
+
+  void VisitNullTemplateArgument(const TemplateArgument &TA);
+  void VisitTypeTemplateArgument(const TemplateArgument &TA);
+  void VisitDeclarationTemplateArgument(const TemplateArgument &TA);
+  void VisitNullPtrTemplateArgument(const TemplateArgument &TA);
+  void VisitIntegralTemplateArgument(const TemplateArgument &TA);
+  void VisitTemplateTemplateArgument(const TemplateArgument &TA);
+  void VisitTemplateExpansionTemplateArgument(const TemplateArgument &TA);
+  void VisitExpressionTemplateArgument(const TemplateArgument &TA);
+  void VisitPackTemplateArgument(const TemplateArgument &TA);
+
+  void visitTextComment(const comments::TextComment *C,
+                        const comments::FullComment *);
+  void visitInlineCommandComment(const comments::InlineCommandComment *C,
+                                 const comments::FullComment *);
+  void visitHTMLStartTagComment(const comments::HTMLStartTagComment *C,
+                                const comments::FullComment *);
+  void visitHTMLEndTagComment(const comments::HTMLEndTagComment *C,
+                              const comments::FullComment *);
+  void visitBlockCommandComment(const comments::BlockCommandComment *C,
+                                const comments::FullComment *);
+  void visitParamCommandComment(const comments::ParamCommandComment *C,
+                                const comments::FullComment *FC);
+  void visitTParamCommandComment(const comments::TParamCommandComment *C,
+                                 const comments::FullComment *FC);
+  void visitVerbatimBlockComment(const comments::VerbatimBlockComment *C,
+                                 const comments::FullComment *);
+  void
+  visitVerbatimBlockLineComment(const comments::VerbatimBlockLineComment *C,
+                                const comments::FullComment *);
+  void visitVerbatimLineComment(const comments::VerbatimLineComment *C,
+                                const comments::FullComment *);
+};
+
+class JSONDumper : public ASTNodeTraverser<JSONDumper, JSONNodeDumper> {
+  JSONNodeDumper NodeDumper;
+
+  template <typename SpecializationDecl>
+  void writeTemplateDeclSpecialization(const SpecializationDecl *SD,
+                                       bool DumpExplicitInst,
+                                       bool DumpRefOnly) {
+    bool DumpedAny = false;
+    for (const auto *RedeclWithBadType : SD->redecls()) {
+      // FIXME: The redecls() range sometimes has elements of a less-specific
+      // type. (In particular, ClassTemplateSpecializationDecl::redecls() gives
+      // us TagDecls, and should give CXXRecordDecls).
+      const auto *Redecl = dyn_cast<SpecializationDecl>(RedeclWithBadType);
+      if (!Redecl) {
+        // Found the injected-class-name for a class template. This will be
+        // dumped as part of its surrounding class so we don't need to dump it
+        // here.
+        assert(isa<CXXRecordDecl>(RedeclWithBadType) &&
+               "expected an injected-class-name");
+        continue;
+      }
+
+      switch (Redecl->getTemplateSpecializationKind()) {
+      case TSK_ExplicitInstantiationDeclaration:
+      case TSK_ExplicitInstantiationDefinition:
+        if (!DumpExplicitInst)
+          break;
+        LLVM_FALLTHROUGH;
+      case TSK_Undeclared:
+      case TSK_ImplicitInstantiation:
+        if (DumpRefOnly)
+          NodeDumper.AddChild([=] { NodeDumper.writeBareDeclRef(Redecl); });
+        else
+          Visit(Redecl);
+        DumpedAny = true;
+        break;
+      case TSK_ExplicitSpecialization:
+        break;
+      }
+    }
+
+    // Ensure we dump at least one decl for each specialization.
+    if (!DumpedAny)
+      NodeDumper.AddChild([=] { NodeDumper.writeBareDeclRef(SD); });
+  }
+
+  template <typename TemplateDecl>
+  void writeTemplateDecl(const TemplateDecl *TD, bool DumpExplicitInst) {
+    // FIXME: it would be nice to dump template parameters and specializations
+    // to their own named arrays rather than shoving them into the "inner"
+    // array. However, template declarations are currently being handled at the
+    // wrong "level" of the traversal hierarchy and so it is difficult to
+    // achieve without losing information elsewhere.
+
+    dumpTemplateParameters(TD->getTemplateParameters());
+
+    Visit(TD->getTemplatedDecl());
+
+    for (const auto *Child : TD->specializations())
+      writeTemplateDeclSpecialization(Child, DumpExplicitInst,
+                                      !TD->isCanonicalDecl());
+  }
+
+public:
+  JSONDumper(raw_ostream &OS, const SourceManager &SrcMgr, ASTContext &Ctx,
+             const PrintingPolicy &PrintPolicy,
+             const comments::CommandTraits *Traits)
+      : NodeDumper(OS, SrcMgr, Ctx, PrintPolicy, Traits) {}
+
+  JSONNodeDumper &doGetNodeDelegate() { return NodeDumper; }
+
+  void VisitFunctionTemplateDecl(const FunctionTemplateDecl *FTD) {
+    writeTemplateDecl(FTD, true);
+  }
+  void VisitClassTemplateDecl(const ClassTemplateDecl *CTD) {
+    writeTemplateDecl(CTD, false);
+  }
+  void VisitVarTemplateDecl(const VarTemplateDecl *VTD) {
+    writeTemplateDecl(VTD, false);
+  }
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_AST_JSONNODEDUMPER_H
diff --git a/linux-x64/clang/include/clang/AST/Mangle.h b/linux-x64/clang/include/clang/AST/Mangle.h
index fb53fbe..b1fbe93 100644
--- a/linux-x64/clang/include/clang/AST/Mangle.h
+++ b/linux-x64/clang/include/clang/AST/Mangle.h
@@ -243,6 +243,19 @@
   static MicrosoftMangleContext *create(ASTContext &Context,
                                         DiagnosticsEngine &Diags);
 };
+
+class ASTNameGenerator {
+public:
+  explicit ASTNameGenerator(ASTContext &Ctx);
+  ~ASTNameGenerator();
+  bool writeName(const Decl *D, raw_ostream &OS);
+  std::string getName(const Decl *D);
+  std::vector<std::string> getAllManglings(const Decl *D);
+
+private:
+  class Implementation;
+  std::unique_ptr<Implementation> Impl;
+};
 }
 
 #endif
diff --git a/linux-x64/clang/include/clang/AST/OpenMPClause.h b/linux-x64/clang/include/clang/AST/OpenMPClause.h
index becb2a1..7171b03 100644
--- a/linux-x64/clang/include/clang/AST/OpenMPClause.h
+++ b/linux-x64/clang/include/clang/AST/OpenMPClause.h
@@ -156,6 +156,20 @@
   static const OMPClauseWithPostUpdate *get(const OMPClause *C);
 };
 
+/// This structure contains most locations needed for by an OMPVarListClause.
+struct OMPVarListLocTy {
+  /// Starting location of the clause (the clause keyword).
+  SourceLocation StartLoc;
+  /// Location of '('.
+  SourceLocation LParenLoc;
+  /// Ending location of the clause.
+  SourceLocation EndLoc;
+  OMPVarListLocTy() = default;
+  OMPVarListLocTy(SourceLocation StartLoc, SourceLocation LParenLoc,
+                  SourceLocation EndLoc)
+      : StartLoc(StartLoc), LParenLoc(LParenLoc), EndLoc(EndLoc) {}
+};
+
 /// This represents clauses with the list of variables like 'private',
 /// 'firstprivate', 'copyin', 'shared', or 'reduction' clauses in the
 /// '#pragma omp ...' directives.
@@ -229,6 +243,152 @@
   }
 };
 
+/// This represents 'allocator' clause in the '#pragma omp ...'
+/// directive.
+///
+/// \code
+/// #pragma omp allocate(a) allocator(omp_default_mem_alloc)
+/// \endcode
+/// In this example directive '#pragma omp allocate' has simple 'allocator'
+/// clause with the allocator 'omp_default_mem_alloc'.
+class OMPAllocatorClause : public OMPClause {
+  friend class OMPClauseReader;
+
+  /// Location of '('.
+  SourceLocation LParenLoc;
+
+  /// Expression with the allocator.
+  Stmt *Allocator = nullptr;
+
+  /// Set allocator.
+  void setAllocator(Expr *A) { Allocator = A; }
+
+public:
+  /// Build 'allocator' clause with the given allocator.
+  ///
+  /// \param A Allocator.
+  /// \param StartLoc Starting location of the clause.
+  /// \param LParenLoc Location of '('.
+  /// \param EndLoc Ending location of the clause.
+  OMPAllocatorClause(Expr *A, SourceLocation StartLoc, SourceLocation LParenLoc,
+                     SourceLocation EndLoc)
+      : OMPClause(OMPC_allocator, StartLoc, EndLoc), LParenLoc(LParenLoc),
+        Allocator(A) {}
+
+  /// Build an empty clause.
+  OMPAllocatorClause()
+      : OMPClause(OMPC_allocator, SourceLocation(), SourceLocation()) {}
+
+  /// Sets the location of '('.
+  void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
+
+  /// Returns the location of '('.
+  SourceLocation getLParenLoc() const { return LParenLoc; }
+
+  /// Returns allocator.
+  Expr *getAllocator() const { return cast_or_null<Expr>(Allocator); }
+
+  child_range children() { return child_range(&Allocator, &Allocator + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&Allocator, &Allocator + 1);
+  }
+
+  static bool classof(const OMPClause *T) {
+    return T->getClauseKind() == OMPC_allocator;
+  }
+};
+
+/// This represents clause 'allocate' in the '#pragma omp ...' directives.
+///
+/// \code
+/// #pragma omp parallel private(a) allocate(omp_default_mem_alloc :a)
+/// \endcode
+/// In this example directive '#pragma omp parallel' has clause 'private'
+/// and clause 'allocate' for the variable 'a'.
+class OMPAllocateClause final
+    : public OMPVarListClause<OMPAllocateClause>,
+      private llvm::TrailingObjects<OMPAllocateClause, Expr *> {
+  friend class OMPClauseReader;
+  friend OMPVarListClause;
+  friend TrailingObjects;
+
+  /// Allocator specified in the clause, or 'nullptr' if the default one is
+  /// used.
+  Expr *Allocator = nullptr;
+  /// Position of the ':' delimiter in the clause;
+  SourceLocation ColonLoc;
+
+  /// Build clause with number of variables \a N.
+  ///
+  /// \param StartLoc Starting location of the clause.
+  /// \param LParenLoc Location of '('.
+  /// \param Allocator Allocator expression.
+  /// \param ColonLoc Location of ':' delimiter.
+  /// \param EndLoc Ending location of the clause.
+  /// \param N Number of the variables in the clause.
+  OMPAllocateClause(SourceLocation StartLoc, SourceLocation LParenLoc,
+                    Expr *Allocator, SourceLocation ColonLoc,
+                    SourceLocation EndLoc, unsigned N)
+      : OMPVarListClause<OMPAllocateClause>(OMPC_allocate, StartLoc, LParenLoc,
+                                            EndLoc, N),
+        Allocator(Allocator), ColonLoc(ColonLoc) {}
+
+  /// Build an empty clause.
+  ///
+  /// \param N Number of variables.
+  explicit OMPAllocateClause(unsigned N)
+      : OMPVarListClause<OMPAllocateClause>(OMPC_allocate, SourceLocation(),
+                                            SourceLocation(), SourceLocation(),
+                                            N) {}
+
+  /// Sets location of ':' symbol in clause.
+  void setColonLoc(SourceLocation CL) { ColonLoc = CL; }
+
+  void setAllocator(Expr *A) { Allocator = A; }
+
+public:
+  /// Creates clause with a list of variables \a VL.
+  ///
+  /// \param C AST context.
+  /// \param StartLoc Starting location of the clause.
+  /// \param LParenLoc Location of '('.
+  /// \param Allocator Allocator expression.
+  /// \param ColonLoc Location of ':' delimiter.
+  /// \param EndLoc Ending location of the clause.
+  /// \param VL List of references to the variables.
+  static OMPAllocateClause *Create(const ASTContext &C, SourceLocation StartLoc,
+                                   SourceLocation LParenLoc, Expr *Allocator,
+                                   SourceLocation ColonLoc,
+                                   SourceLocation EndLoc, ArrayRef<Expr *> VL);
+
+  /// Returns the allocator expression or nullptr, if no allocator is specified.
+  Expr *getAllocator() const { return Allocator; }
+
+  /// Returns the location of the ':' delimiter.
+  SourceLocation getColonLoc() const { return ColonLoc; }
+
+  /// Creates an empty clause with the place for \a N variables.
+  ///
+  /// \param C AST context.
+  /// \param N The number of variables.
+  static OMPAllocateClause *CreateEmpty(const ASTContext &C, unsigned N);
+
+  child_range children() {
+    return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+                       reinterpret_cast<Stmt **>(varlist_end()));
+  }
+
+  const_child_range children() const {
+    auto Children = const_cast<OMPAllocateClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
+  static bool classof(const OMPClause *T) {
+    return T->getClauseKind() == OMPC_allocate;
+  }
+};
+
 /// This represents 'if' clause in the '#pragma omp ...' directive.
 ///
 /// \code
@@ -314,6 +474,10 @@
 
   child_range children() { return child_range(&Condition, &Condition + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Condition, &Condition + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_if;
   }
@@ -365,6 +529,10 @@
 
   child_range children() { return child_range(&Condition, &Condition + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Condition, &Condition + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_final;
   }
@@ -426,6 +594,10 @@
 
   child_range children() { return child_range(&NumThreads, &NumThreads + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&NumThreads, &NumThreads + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_num_threads;
   }
@@ -481,6 +653,10 @@
 
   child_range children() { return child_range(&Safelen, &Safelen + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Safelen, &Safelen + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_safelen;
   }
@@ -535,6 +711,10 @@
 
   child_range children() { return child_range(&Simdlen, &Simdlen + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Simdlen, &Simdlen + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_simdlen;
   }
@@ -590,6 +770,10 @@
 
   child_range children() { return child_range(&NumForLoops, &NumForLoops + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&NumForLoops, &NumForLoops + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_collapse;
   }
@@ -658,6 +842,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_default;
   }
@@ -728,6 +916,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_proc_bind;
   }
@@ -759,6 +951,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_unified_address;
   }
@@ -790,6 +986,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_unified_shared_memory;
   }
@@ -821,6 +1021,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_reverse_offload;
   }
@@ -853,6 +1057,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_dynamic_allocators;
   }
@@ -932,6 +1140,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_atomic_default_mem_order;
   }
@@ -1113,6 +1325,11 @@
                        reinterpret_cast<Stmt **>(&ChunkSize) + 1);
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPScheduleClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_schedule;
   }
@@ -1198,6 +1415,10 @@
 
   child_range children() { return child_range(&NumForLoops, &NumForLoops + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&NumForLoops, &NumForLoops + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_ordered;
   }
@@ -1226,6 +1447,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_nowait;
   }
@@ -1254,6 +1479,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_untied;
   }
@@ -1283,6 +1512,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_mergeable;
   }
@@ -1310,6 +1543,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_read;
   }
@@ -1338,6 +1575,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_write;
   }
@@ -1367,6 +1608,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_update;
   }
@@ -1396,6 +1641,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_capture;
   }
@@ -1425,6 +1674,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_seq_cst;
   }
@@ -1518,6 +1771,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPPrivateClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_private;
   }
@@ -1645,6 +1903,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPFirstprivateClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_firstprivate;
   }
@@ -1844,6 +2107,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPLastprivateClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_lastprivate;
   }
@@ -1904,6 +2172,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPSharedClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_shared;
   }
@@ -2126,6 +2399,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPReductionClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_reduction;
   }
@@ -2346,6 +2624,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPTaskReductionClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_task_reduction;
   }
@@ -2589,6 +2872,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPInReductionClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_in_reduction;
   }
@@ -2828,6 +3116,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPLinearClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_linear;
   }
@@ -2915,6 +3208,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPAlignedClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_aligned;
   }
@@ -3079,6 +3377,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPCopyinClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_copyin;
   }
@@ -3230,6 +3533,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPCopyprivateClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_copyprivate;
   }
@@ -3295,6 +3603,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPFlushClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_flush;
   }
@@ -3414,6 +3727,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPDependClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_depend;
   }
@@ -3477,6 +3795,10 @@
 
   child_range children() { return child_range(&Device, &Device + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Device, &Device + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_device;
   }
@@ -3505,6 +3827,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_threads;
   }
@@ -3532,6 +3858,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_simd;
   }
@@ -3595,6 +3925,24 @@
   getUniqueDeclarationsTotalNumber(ArrayRef<const ValueDecl *> Declarations);
 };
 
+/// This structure contains all sizes needed for by an
+/// OMPMappableExprListClause.
+struct OMPMappableExprListSizeTy {
+  /// Number of expressions listed.
+  unsigned NumVars;
+  /// Number of unique base declarations.
+  unsigned NumUniqueDeclarations;
+  /// Number of component lists.
+  unsigned NumComponentLists;
+  /// Total number of expression components.
+  unsigned NumComponents;
+  OMPMappableExprListSizeTy() = default;
+  OMPMappableExprListSizeTy(unsigned NumVars, unsigned NumUniqueDeclarations,
+                            unsigned NumComponentLists, unsigned NumComponents)
+      : NumVars(NumVars), NumUniqueDeclarations(NumUniqueDeclarations),
+        NumComponentLists(NumComponentLists), NumComponents(NumComponents) {}
+};
+
 /// This represents clauses with a list of expressions that are mappable.
 /// Examples of these clauses are 'map' in
 /// '#pragma omp target [enter|exit] [data]...' directives, and  'to' and 'from
@@ -3613,28 +3961,44 @@
   /// Total number of components in this clause.
   unsigned NumComponents;
 
+  /// C++ nested name specifier for the associated user-defined mapper.
+  NestedNameSpecifierLoc MapperQualifierLoc;
+
+  /// The associated user-defined mapper identifier information.
+  DeclarationNameInfo MapperIdInfo;
+
 protected:
   /// Build a clause for \a NumUniqueDeclarations declarations, \a
   /// NumComponentLists total component lists, and \a NumComponents total
   /// components.
   ///
   /// \param K Kind of the clause.
-  /// \param StartLoc Starting location of the clause (the clause keyword).
-  /// \param LParenLoc Location of '('.
-  /// \param EndLoc Ending location of the clause.
-  /// \param NumVars Number of expressions listed in the clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause - one
-  /// list for each expression in the clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  OMPMappableExprListClause(OpenMPClauseKind K, SourceLocation StartLoc,
-                            SourceLocation LParenLoc, SourceLocation EndLoc,
-                            unsigned NumVars, unsigned NumUniqueDeclarations,
-                            unsigned NumComponentLists, unsigned NumComponents)
-      : OMPVarListClause<T>(K, StartLoc, LParenLoc, EndLoc, NumVars),
-        NumUniqueDeclarations(NumUniqueDeclarations),
-        NumComponentLists(NumComponentLists), NumComponents(NumComponents) {}
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  /// \param MapperQualifierLocPtr C++ nested name specifier for the associated
+  /// user-defined mapper.
+  /// \param MapperIdInfoPtr The identifier of associated user-defined mapper.
+  OMPMappableExprListClause(
+      OpenMPClauseKind K, const OMPVarListLocTy &Locs,
+      const OMPMappableExprListSizeTy &Sizes,
+      NestedNameSpecifierLoc *MapperQualifierLocPtr = nullptr,
+      DeclarationNameInfo *MapperIdInfoPtr = nullptr)
+      : OMPVarListClause<T>(K, Locs.StartLoc, Locs.LParenLoc, Locs.EndLoc,
+                            Sizes.NumVars),
+        NumUniqueDeclarations(Sizes.NumUniqueDeclarations),
+        NumComponentLists(Sizes.NumComponentLists),
+        NumComponents(Sizes.NumComponents) {
+    if (MapperQualifierLocPtr)
+      MapperQualifierLoc = *MapperQualifierLocPtr;
+    if (MapperIdInfoPtr)
+      MapperIdInfo = *MapperIdInfoPtr;
+  }
 
   /// Get the unique declarations that are in the trailing objects of the
   /// class.
@@ -3815,6 +4179,42 @@
     }
   }
 
+  /// Set the nested name specifier of associated user-defined mapper.
+  void setMapperQualifierLoc(NestedNameSpecifierLoc NNSL) {
+    MapperQualifierLoc = NNSL;
+  }
+
+  /// Set the name of associated user-defined mapper.
+  void setMapperIdInfo(DeclarationNameInfo MapperId) {
+    MapperIdInfo = MapperId;
+  }
+
+  /// Get the user-defined mapper references that are in the trailing objects of
+  /// the class.
+  MutableArrayRef<Expr *> getUDMapperRefs() {
+    return llvm::makeMutableArrayRef<Expr *>(
+        static_cast<T *>(this)->template getTrailingObjects<Expr *>() +
+            OMPVarListClause<T>::varlist_size(),
+        OMPVarListClause<T>::varlist_size());
+  }
+
+  /// Get the user-defined mappers references that are in the trailing objects
+  /// of the class.
+  ArrayRef<Expr *> getUDMapperRefs() const {
+    return llvm::makeArrayRef<Expr *>(
+        static_cast<T *>(this)->template getTrailingObjects<Expr *>() +
+            OMPVarListClause<T>::varlist_size(),
+        OMPVarListClause<T>::varlist_size());
+  }
+
+  /// Set the user-defined mappers that are in the trailing objects of the
+  /// class.
+  void setUDMapperRefs(ArrayRef<Expr *> DMDs) {
+    assert(DMDs.size() == OMPVarListClause<T>::varlist_size() &&
+           "Unexpected number of user-defined mappers.");
+    std::copy(DMDs.begin(), DMDs.end(), getUDMapperRefs().begin());
+  }
+
 public:
   /// Return the number of unique base declarations in this clause.
   unsigned getUniqueDeclarationsNum() const { return NumUniqueDeclarations; }
@@ -3826,6 +4226,14 @@
   /// clause.
   unsigned getTotalComponentsNum() const { return NumComponents; }
 
+  /// Gets the nested name specifier for associated user-defined mapper.
+  NestedNameSpecifierLoc getMapperQualifierLoc() const {
+    return MapperQualifierLoc;
+  }
+
+  /// Gets the name info for associated user-defined mapper.
+  const DeclarationNameInfo &getMapperIdInfo() const { return MapperIdInfo; }
+
   /// Iterator that browse the components by lists. It also allows
   /// browsing components of a single declaration.
   class const_component_lists_iterator
@@ -4029,6 +4437,27 @@
     auto A = getComponentsRef();
     return const_all_components_range(A.begin(), A.end());
   }
+
+  using mapperlist_iterator = MutableArrayRef<Expr *>::iterator;
+  using mapperlist_const_iterator = ArrayRef<const Expr *>::iterator;
+  using mapperlist_range = llvm::iterator_range<mapperlist_iterator>;
+  using mapperlist_const_range =
+      llvm::iterator_range<mapperlist_const_iterator>;
+
+  mapperlist_iterator mapperlist_begin() { return getUDMapperRefs().begin(); }
+  mapperlist_iterator mapperlist_end() { return getUDMapperRefs().end(); }
+  mapperlist_const_iterator mapperlist_begin() const {
+    return getUDMapperRefs().begin();
+  }
+  mapperlist_const_iterator mapperlist_end() const {
+    return getUDMapperRefs().end();
+  }
+  mapperlist_range mapperlists() {
+    return mapperlist_range(mapperlist_begin(), mapperlist_end());
+  }
+  mapperlist_const_range mapperlists() const {
+    return mapperlist_const_range(mapperlist_begin(), mapperlist_end());
+  }
 };
 
 /// This represents clause 'map' in the '#pragma omp ...'
@@ -4051,7 +4480,9 @@
   /// Define the sizes of each trailing object array except the last one. This
   /// is required for TrailingObjects to work properly.
   size_t numTrailingObjects(OverloadToken<Expr *>) const {
-    return varlist_size();
+    // There are varlist_size() of expressions, and varlist_size() of
+    // user-defined mappers.
+    return 2 * varlist_size();
   }
   size_t numTrailingObjects(OverloadToken<ValueDecl *>) const {
     return getUniqueDeclarationsNum();
@@ -4068,9 +4499,9 @@
 private:
   /// Map-type-modifiers for the 'map' clause.
   OpenMPMapModifierKind MapTypeModifiers[NumberOfModifiers] = {
-    OMPC_MAP_MODIFIER_unknown, OMPC_MAP_MODIFIER_unknown
-  };
-  
+      OMPC_MAP_MODIFIER_unknown, OMPC_MAP_MODIFIER_unknown,
+      OMPC_MAP_MODIFIER_unknown};
+
   /// Location of map-type-modifiers for the 'map' clause.
   SourceLocation MapTypeModifiersLoc[NumberOfModifiers];
 
@@ -4092,50 +4523,49 @@
   ///
   /// \param MapModifiers Map-type-modifiers.
   /// \param MapModifiersLoc Locations of map-type-modifiers.
+  /// \param MapperQualifierLoc C++ nested name specifier for the associated
+  /// user-defined mapper.
+  /// \param MapperIdInfo The identifier of associated user-defined mapper.
   /// \param MapType Map type.
   /// \param MapTypeIsImplicit Map type is inferred implicitly.
   /// \param MapLoc Location of the map type.
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
   explicit OMPMapClause(ArrayRef<OpenMPMapModifierKind> MapModifiers,
                         ArrayRef<SourceLocation> MapModifiersLoc,
+                        NestedNameSpecifierLoc MapperQualifierLoc,
+                        DeclarationNameInfo MapperIdInfo,
                         OpenMPMapClauseKind MapType, bool MapTypeIsImplicit,
-                        SourceLocation MapLoc, SourceLocation StartLoc,
-                        SourceLocation LParenLoc, SourceLocation EndLoc,
-                        unsigned NumVars, unsigned NumUniqueDeclarations,
-                        unsigned NumComponentLists, unsigned NumComponents)
-      : OMPMappableExprListClause(OMPC_map, StartLoc, LParenLoc, EndLoc,
-                                  NumVars, NumUniqueDeclarations,
-                                  NumComponentLists, NumComponents),
-        MapType(MapType), MapTypeIsImplicit(MapTypeIsImplicit),
-        MapLoc(MapLoc) {
-          assert(llvm::array_lengthof(MapTypeModifiers) == MapModifiers.size()
-                 && "Unexpected number of map type modifiers.");
-          llvm::copy(MapModifiers, std::begin(MapTypeModifiers));
+                        SourceLocation MapLoc, const OMPVarListLocTy &Locs,
+                        const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_map, Locs, Sizes, &MapperQualifierLoc,
+                                  &MapperIdInfo),
+        MapType(MapType), MapTypeIsImplicit(MapTypeIsImplicit), MapLoc(MapLoc) {
+    assert(llvm::array_lengthof(MapTypeModifiers) == MapModifiers.size() &&
+           "Unexpected number of map type modifiers.");
+    llvm::copy(MapModifiers, std::begin(MapTypeModifiers));
 
-          assert(llvm::array_lengthof(MapTypeModifiersLoc) ==
-                     MapModifiersLoc.size() &&
-                 "Unexpected number of map type modifier locations.");
-          llvm::copy(MapModifiersLoc, std::begin(MapTypeModifiersLoc));
+    assert(llvm::array_lengthof(MapTypeModifiersLoc) ==
+               MapModifiersLoc.size() &&
+           "Unexpected number of map type modifier locations.");
+    llvm::copy(MapModifiersLoc, std::begin(MapTypeModifiersLoc));
   }
 
   /// Build an empty clause.
   ///
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPMapClause(unsigned NumVars, unsigned NumUniqueDeclarations,
-                        unsigned NumComponentLists, unsigned NumComponents)
-      : OMPMappableExprListClause(
-            OMPC_map, SourceLocation(), SourceLocation(), SourceLocation(),
-            NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents) {}
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPMapClause(const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_map, OMPVarListLocTy(), Sizes) {}
 
   /// Set map-type-modifier for the clause.
   ///
@@ -4174,41 +4604,44 @@
   /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
   /// \param Vars The original expression used in the clause.
   /// \param Declarations Declarations used in the clause.
   /// \param ComponentLists Component lists used in the clause.
+  /// \param UDMapperRefs References to user-defined mappers associated with
+  /// expressions used in the clause.
   /// \param MapModifiers Map-type-modifiers.
   /// \param MapModifiersLoc Location of map-type-modifiers.
+  /// \param UDMQualifierLoc C++ nested name specifier for the associated
+  /// user-defined mapper.
+  /// \param MapperId The identifier of associated user-defined mapper.
   /// \param Type Map type.
   /// \param TypeIsImplicit Map type is inferred implicitly.
   /// \param TypeLoc Location of the map type.
-  static OMPMapClause *Create(const ASTContext &C, SourceLocation StartLoc,
-                              SourceLocation LParenLoc, SourceLocation EndLoc,
-                              ArrayRef<Expr *> Vars,
-                              ArrayRef<ValueDecl *> Declarations,
-                              MappableExprComponentListsRef ComponentLists,
-                              ArrayRef<OpenMPMapModifierKind> MapModifiers,
-                              ArrayRef<SourceLocation> MapModifiersLoc,
-                              OpenMPMapClauseKind Type, bool TypeIsImplicit,
-                              SourceLocation TypeLoc);
+  static OMPMapClause *
+  Create(const ASTContext &C, const OMPVarListLocTy &Locs,
+         ArrayRef<Expr *> Vars, ArrayRef<ValueDecl *> Declarations,
+         MappableExprComponentListsRef ComponentLists,
+         ArrayRef<Expr *> UDMapperRefs,
+         ArrayRef<OpenMPMapModifierKind> MapModifiers,
+         ArrayRef<SourceLocation> MapModifiersLoc,
+         NestedNameSpecifierLoc UDMQualifierLoc, DeclarationNameInfo MapperId,
+         OpenMPMapClauseKind Type, bool TypeIsImplicit, SourceLocation TypeLoc);
 
   /// Creates an empty clause with the place for \a NumVars original
   /// expressions, \a NumUniqueDeclarations declarations, \NumComponentLists
   /// lists, and \a NumComponents expression components.
   ///
   /// \param C AST context.
-  /// \param NumVars Number of expressions listed in the clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  static OMPMapClause *CreateEmpty(const ASTContext &C, unsigned NumVars,
-                                   unsigned NumUniqueDeclarations,
-                                   unsigned NumComponentLists,
-                                   unsigned NumComponents);
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  static OMPMapClause *CreateEmpty(const ASTContext &C,
+                                   const OMPMappableExprListSizeTy &Sizes);
 
   /// Fetches mapping kind for the clause.
   OpenMPMapClauseKind getMapType() const LLVM_READONLY { return MapType; }
@@ -4232,7 +4665,7 @@
   /// Fetches the map-type-modifier location at 'Cnt' index of array of
   /// modifiers' locations.
   ///
-  /// \param Cnt index for map-type-modifier location.  
+  /// \param Cnt index for map-type-modifier location.
   SourceLocation getMapTypeModifierLoc(unsigned Cnt) const LLVM_READONLY {
     assert(Cnt < NumberOfModifiers &&
            "Requested modifier location exceeds total number of modifiers.");
@@ -4243,7 +4676,7 @@
   ArrayRef<OpenMPMapModifierKind> getMapTypeModifiers() const LLVM_READONLY {
     return llvm::makeArrayRef(MapTypeModifiers);
   }
-  
+
   /// Fetches ArrayRef of location of map-type-modifiers.
   ArrayRef<SourceLocation> getMapTypeModifiersLoc() const LLVM_READONLY {
     return llvm::makeArrayRef(MapTypeModifiersLoc);
@@ -4261,6 +4694,11 @@
         reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPMapClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_map;
   }
@@ -4325,6 +4763,10 @@
 
   child_range children() { return child_range(&NumTeams, &NumTeams + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&NumTeams, &NumTeams + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_num_teams;
   }
@@ -4390,6 +4832,10 @@
 
   child_range children() { return child_range(&ThreadLimit, &ThreadLimit + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&ThreadLimit, &ThreadLimit + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_thread_limit;
   }
@@ -4447,6 +4893,10 @@
 
   child_range children() { return child_range(&Priority, &Priority + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Priority, &Priority + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_priority;
   }
@@ -4498,6 +4948,10 @@
 
   child_range children() { return child_range(&Grainsize, &Grainsize + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Grainsize, &Grainsize + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_grainsize;
   }
@@ -4526,6 +4980,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_nogroup;
   }
@@ -4577,6 +5035,10 @@
 
   child_range children() { return child_range(&NumTasks, &NumTasks + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&NumTasks, &NumTasks + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_num_tasks;
   }
@@ -4627,6 +5089,10 @@
 
   child_range children() { return child_range(&Hint, &Hint + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&Hint, &Hint + 1);
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_hint;
   }
@@ -4734,6 +5200,11 @@
                        reinterpret_cast<Stmt **>(&ChunkSize) + 1);
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPDistScheduleClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_dist_schedule;
   }
@@ -4835,6 +5306,10 @@
     return child_range(child_iterator(), child_iterator());
   }
 
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_defaultmap;
   }
@@ -4859,38 +5334,40 @@
 
   /// Build clause with number of variables \a NumVars.
   ///
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPToClause(SourceLocation StartLoc, SourceLocation LParenLoc,
-                       SourceLocation EndLoc, unsigned NumVars,
-                       unsigned NumUniqueDeclarations,
-                       unsigned NumComponentLists, unsigned NumComponents)
-      : OMPMappableExprListClause(OMPC_to, StartLoc, LParenLoc, EndLoc, NumVars,
-                                  NumUniqueDeclarations, NumComponentLists,
-                                  NumComponents) {}
+  /// \param MapperQualifierLoc C++ nested name specifier for the associated
+  /// user-defined mapper.
+  /// \param MapperIdInfo The identifier of associated user-defined mapper.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPToClause(NestedNameSpecifierLoc MapperQualifierLoc,
+                       DeclarationNameInfo MapperIdInfo,
+                       const OMPVarListLocTy &Locs,
+                       const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_to, Locs, Sizes, &MapperQualifierLoc,
+                                  &MapperIdInfo) {}
 
   /// Build an empty clause.
   ///
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPToClause(unsigned NumVars, unsigned NumUniqueDeclarations,
-                       unsigned NumComponentLists, unsigned NumComponents)
-      : OMPMappableExprListClause(
-            OMPC_to, SourceLocation(), SourceLocation(), SourceLocation(),
-            NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents) {}
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPToClause(const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_to, OMPVarListLocTy(), Sizes) {}
 
   /// Define the sizes of each trailing object array except the last one. This
   /// is required for TrailingObjects to work properly.
   size_t numTrailingObjects(OverloadToken<Expr *>) const {
-    return varlist_size();
+    // There are varlist_size() of expressions, and varlist_size() of
+    // user-defined mappers.
+    return 2 * varlist_size();
   }
   size_t numTrailingObjects(OverloadToken<ValueDecl *>) const {
     return getUniqueDeclarationsNum();
@@ -4903,36 +5380,46 @@
   /// Creates clause with a list of variables \a Vars.
   ///
   /// \param C AST context.
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
   /// \param Vars The original expression used in the clause.
   /// \param Declarations Declarations used in the clause.
   /// \param ComponentLists Component lists used in the clause.
-  static OMPToClause *Create(const ASTContext &C, SourceLocation StartLoc,
-                             SourceLocation LParenLoc, SourceLocation EndLoc,
+  /// \param UDMapperRefs References to user-defined mappers associated with
+  /// expressions used in the clause.
+  /// \param UDMQualifierLoc C++ nested name specifier for the associated
+  /// user-defined mapper.
+  /// \param MapperId The identifier of associated user-defined mapper.
+  static OMPToClause *Create(const ASTContext &C, const OMPVarListLocTy &Locs,
                              ArrayRef<Expr *> Vars,
                              ArrayRef<ValueDecl *> Declarations,
-                             MappableExprComponentListsRef ComponentLists);
+                             MappableExprComponentListsRef ComponentLists,
+                             ArrayRef<Expr *> UDMapperRefs,
+                             NestedNameSpecifierLoc UDMQualifierLoc,
+                             DeclarationNameInfo MapperId);
 
   /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
-  /// \param NumVars Number of expressions listed in the clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  static OMPToClause *CreateEmpty(const ASTContext &C, unsigned NumVars,
-                                  unsigned NumUniqueDeclarations,
-                                  unsigned NumComponentLists,
-                                  unsigned NumComponents);
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  static OMPToClause *CreateEmpty(const ASTContext &C,
+                                  const OMPMappableExprListSizeTy &Sizes);
 
   child_range children() {
     return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPToClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_to;
   }
@@ -4958,38 +5445,40 @@
 
   /// Build clause with number of variables \a NumVars.
   ///
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPFromClause(SourceLocation StartLoc, SourceLocation LParenLoc,
-                         SourceLocation EndLoc, unsigned NumVars,
-                         unsigned NumUniqueDeclarations,
-                         unsigned NumComponentLists, unsigned NumComponents)
-      : OMPMappableExprListClause(OMPC_from, StartLoc, LParenLoc, EndLoc,
-                                  NumVars, NumUniqueDeclarations,
-                                  NumComponentLists, NumComponents) {}
+  /// \param MapperQualifierLoc C++ nested name specifier for the associated
+  /// user-defined mapper.
+  /// \param MapperIdInfo The identifier of associated user-defined mapper.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPFromClause(NestedNameSpecifierLoc MapperQualifierLoc,
+                         DeclarationNameInfo MapperIdInfo,
+                         const OMPVarListLocTy &Locs,
+                         const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_from, Locs, Sizes, &MapperQualifierLoc,
+                                  &MapperIdInfo) {}
 
   /// Build an empty clause.
   ///
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPFromClause(unsigned NumVars, unsigned NumUniqueDeclarations,
-                         unsigned NumComponentLists, unsigned NumComponents)
-      : OMPMappableExprListClause(
-            OMPC_from, SourceLocation(), SourceLocation(), SourceLocation(),
-            NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents) {}
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPFromClause(const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_from, OMPVarListLocTy(), Sizes) {}
 
   /// Define the sizes of each trailing object array except the last one. This
   /// is required for TrailingObjects to work properly.
   size_t numTrailingObjects(OverloadToken<Expr *>) const {
-    return varlist_size();
+    // There are varlist_size() of expressions, and varlist_size() of
+    // user-defined mappers.
+    return 2 * varlist_size();
   }
   size_t numTrailingObjects(OverloadToken<ValueDecl *>) const {
     return getUniqueDeclarationsNum();
@@ -5002,36 +5491,46 @@
   /// Creates clause with a list of variables \a Vars.
   ///
   /// \param C AST context.
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
   /// \param Vars The original expression used in the clause.
   /// \param Declarations Declarations used in the clause.
   /// \param ComponentLists Component lists used in the clause.
-  static OMPFromClause *Create(const ASTContext &C, SourceLocation StartLoc,
-                               SourceLocation LParenLoc, SourceLocation EndLoc,
+  /// \param UDMapperRefs References to user-defined mappers associated with
+  /// expressions used in the clause.
+  /// \param UDMQualifierLoc C++ nested name specifier for the associated
+  /// user-defined mapper.
+  /// \param MapperId The identifier of associated user-defined mapper.
+  static OMPFromClause *Create(const ASTContext &C, const OMPVarListLocTy &Locs,
                                ArrayRef<Expr *> Vars,
                                ArrayRef<ValueDecl *> Declarations,
-                               MappableExprComponentListsRef ComponentLists);
+                               MappableExprComponentListsRef ComponentLists,
+                               ArrayRef<Expr *> UDMapperRefs,
+                               NestedNameSpecifierLoc UDMQualifierLoc,
+                               DeclarationNameInfo MapperId);
 
   /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
-  /// \param NumVars Number of expressions listed in the clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  static OMPFromClause *CreateEmpty(const ASTContext &C, unsigned NumVars,
-                                    unsigned NumUniqueDeclarations,
-                                    unsigned NumComponentLists,
-                                    unsigned NumComponents);
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  static OMPFromClause *CreateEmpty(const ASTContext &C,
+                                    const OMPMappableExprListSizeTy &Sizes);
 
   child_range children() {
     return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPFromClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_from;
   }
@@ -5057,38 +5556,28 @@
 
   /// Build clause with number of variables \a NumVars.
   ///
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPUseDevicePtrClause(SourceLocation StartLoc,
-                                 SourceLocation LParenLoc,
-                                 SourceLocation EndLoc, unsigned NumVars,
-                                 unsigned NumUniqueDeclarations,
-                                 unsigned NumComponentLists,
-                                 unsigned NumComponents)
-      : OMPMappableExprListClause(OMPC_use_device_ptr, StartLoc, LParenLoc,
-                                  EndLoc, NumVars, NumUniqueDeclarations,
-                                  NumComponentLists, NumComponents) {}
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPUseDevicePtrClause(const OMPVarListLocTy &Locs,
+                                 const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_use_device_ptr, Locs, Sizes) {}
 
   /// Build an empty clause.
   ///
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPUseDevicePtrClause(unsigned NumVars,
-                                 unsigned NumUniqueDeclarations,
-                                 unsigned NumComponentLists,
-                                 unsigned NumComponents)
-      : OMPMappableExprListClause(OMPC_use_device_ptr, SourceLocation(),
-                                  SourceLocation(), SourceLocation(), NumVars,
-                                  NumUniqueDeclarations, NumComponentLists,
-                                  NumComponents) {}
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPUseDevicePtrClause(const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_use_device_ptr, OMPVarListLocTy(),
+                                  Sizes) {}
 
   /// Define the sizes of each trailing object array except the last one. This
   /// is required for TrailingObjects to work properly.
@@ -5134,34 +5623,30 @@
   /// Creates clause with a list of variables \a Vars.
   ///
   /// \param C AST context.
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
   /// \param Vars The original expression used in the clause.
   /// \param PrivateVars Expressions referring to private copies.
   /// \param Inits Expressions referring to private copy initializers.
   /// \param Declarations Declarations used in the clause.
   /// \param ComponentLists Component lists used in the clause.
   static OMPUseDevicePtrClause *
-  Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation LParenLoc,
-         SourceLocation EndLoc, ArrayRef<Expr *> Vars,
-         ArrayRef<Expr *> PrivateVars, ArrayRef<Expr *> Inits,
-         ArrayRef<ValueDecl *> Declarations,
+  Create(const ASTContext &C, const OMPVarListLocTy &Locs,
+         ArrayRef<Expr *> Vars, ArrayRef<Expr *> PrivateVars,
+         ArrayRef<Expr *> Inits, ArrayRef<ValueDecl *> Declarations,
          MappableExprComponentListsRef ComponentLists);
 
   /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
-  /// \param NumVars Number of expressions listed in the clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  static OMPUseDevicePtrClause *CreateEmpty(const ASTContext &C,
-                                            unsigned NumVars,
-                                            unsigned NumUniqueDeclarations,
-                                            unsigned NumComponentLists,
-                                            unsigned NumComponents);
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  static OMPUseDevicePtrClause *
+  CreateEmpty(const ASTContext &C, const OMPMappableExprListSizeTy &Sizes);
 
   using private_copies_iterator = MutableArrayRef<Expr *>::iterator;
   using private_copies_const_iterator = ArrayRef<const Expr *>::iterator;
@@ -5197,6 +5682,11 @@
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPUseDevicePtrClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_use_device_ptr;
   }
@@ -5222,38 +5712,28 @@
 
   /// Build clause with number of variables \a NumVars.
   ///
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPIsDevicePtrClause(SourceLocation StartLoc,
-                                SourceLocation LParenLoc, SourceLocation EndLoc,
-                                unsigned NumVars,
-                                unsigned NumUniqueDeclarations,
-                                unsigned NumComponentLists,
-                                unsigned NumComponents)
-      : OMPMappableExprListClause(OMPC_is_device_ptr, StartLoc, LParenLoc,
-                                  EndLoc, NumVars, NumUniqueDeclarations,
-                                  NumComponentLists, NumComponents) {}
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPIsDevicePtrClause(const OMPVarListLocTy &Locs,
+                                const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_is_device_ptr, Locs, Sizes) {}
 
   /// Build an empty clause.
   ///
-  /// \param NumVars Number of expressions listed in this clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of component lists in this clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  explicit OMPIsDevicePtrClause(unsigned NumVars,
-                                unsigned NumUniqueDeclarations,
-                                unsigned NumComponentLists,
-                                unsigned NumComponents)
-      : OMPMappableExprListClause(OMPC_is_device_ptr, SourceLocation(),
-                                  SourceLocation(), SourceLocation(), NumVars,
-                                  NumUniqueDeclarations, NumComponentLists,
-                                  NumComponents) {}
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  explicit OMPIsDevicePtrClause(const OMPMappableExprListSizeTy &Sizes)
+      : OMPMappableExprListClause(OMPC_is_device_ptr, OMPVarListLocTy(),
+                                  Sizes) {}
 
   /// Define the sizes of each trailing object array except the last one. This
   /// is required for TrailingObjects to work properly.
@@ -5271,37 +5751,38 @@
   /// Creates clause with a list of variables \a Vars.
   ///
   /// \param C AST context.
-  /// \param StartLoc Starting location of the clause.
-  /// \param EndLoc Ending location of the clause.
+  /// \param Locs Locations needed to build a mappable clause. It includes 1)
+  /// StartLoc: starting location of the clause (the clause keyword); 2)
+  /// LParenLoc: location of '('; 3) EndLoc: ending location of the clause.
   /// \param Vars The original expression used in the clause.
   /// \param Declarations Declarations used in the clause.
   /// \param ComponentLists Component lists used in the clause.
   static OMPIsDevicePtrClause *
-  Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation LParenLoc,
-         SourceLocation EndLoc, ArrayRef<Expr *> Vars,
-         ArrayRef<ValueDecl *> Declarations,
+  Create(const ASTContext &C, const OMPVarListLocTy &Locs,
+         ArrayRef<Expr *> Vars, ArrayRef<ValueDecl *> Declarations,
          MappableExprComponentListsRef ComponentLists);
 
   /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
-  /// \param NumVars Number of expressions listed in the clause.
-  /// \param NumUniqueDeclarations Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponentLists Number of unique base declarations in this
-  /// clause.
-  /// \param NumComponents Total number of expression components in the clause.
-  static OMPIsDevicePtrClause *CreateEmpty(const ASTContext &C,
-                                           unsigned NumVars,
-                                           unsigned NumUniqueDeclarations,
-                                           unsigned NumComponentLists,
-                                           unsigned NumComponents);
+  /// \param Sizes All required sizes to build a mappable clause. It includes 1)
+  /// NumVars: number of expressions listed in this clause; 2)
+  /// NumUniqueDeclarations: number of unique base declarations in this clause;
+  /// 3) NumComponentLists: number of component lists in this clause; and 4)
+  /// NumComponents: total number of expression components in the clause.
+  static OMPIsDevicePtrClause *
+  CreateEmpty(const ASTContext &C, const OMPMappableExprListSizeTy &Sizes);
 
   child_range children() {
     return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
                        reinterpret_cast<Stmt **>(varlist_end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<OMPIsDevicePtrClause *>(this)->children();
+    return const_child_range(Children.begin(), Children.end());
+  }
+
   static bool classof(const OMPClause *T) {
     return T->getClauseKind() == OMPC_is_device_ptr;
   }
@@ -5318,7 +5799,6 @@
 
 #define OPENMP_CLAUSE(Name, Class)                              \
   RetTy Visit ## Class (PTR(Class) S) { DISPATCH(Class); }
-  OPENMP_CLAUSE(flush, OMPFlushClause)
 #include "clang/Basic/OpenMPKinds.def"
 
   RetTy Visit(PTR(OMPClause) S) {
@@ -5327,7 +5807,6 @@
     default: llvm_unreachable("Unknown clause kind!");
 #define OPENMP_CLAUSE(Name, Class)                              \
     case OMPC_ ## Name : return Visit ## Class(static_cast<PTR(Class)>(S));
-    OPENMP_CLAUSE(flush, OMPFlushClause)
 #include "clang/Basic/OpenMPKinds.def"
     }
   }
@@ -5359,7 +5838,6 @@
       : OS(OS), Policy(Policy) {}
 
 #define OPENMP_CLAUSE(Name, Class) void Visit##Class(Class *S);
-  OPENMP_CLAUSE(flush, OMPFlushClause)
 #include "clang/Basic/OpenMPKinds.def"
 };
 
diff --git a/linux-x64/clang/include/clang/AST/OperationKinds.def b/linux-x64/clang/include/clang/AST/OperationKinds.def
index d8b286e..9af92c1 100644
--- a/linux-x64/clang/include/clang/AST/OperationKinds.def
+++ b/linux-x64/clang/include/clang/AST/OperationKinds.def
@@ -66,6 +66,10 @@
 ///    bool b; reinterpret_cast<char&>(b) = 'a';
 CAST_OPERATION(LValueBitCast)
 
+/// CK_LValueToRValueBitCast - A conversion that causes us to reinterpret an
+/// lvalue as an rvalue of a different type. Created by __builtin_bit_cast.
+CAST_OPERATION(LValueToRValueBitCast)
+
 /// CK_LValueToRValue - A conversion which causes the extraction of
 /// an r-value from the operand gl-value.  The result of an r-value
 /// conversion is always unqualified.
@@ -200,6 +204,14 @@
 ///    (_Accum) 0.5r
 CAST_OPERATION(FixedPointCast)
 
+/// CK_FixedPointToIntegral - Fixed point to integral.
+///    (int) 2.0k
+CAST_OPERATION(FixedPointToIntegral)
+
+/// CK_IntegralToFixedPoint - Integral to a fixed point.
+///    (_Accum) 2
+CAST_OPERATION(IntegralToFixedPoint)
+
 /// CK_FixedPointToBoolean - Fixed point to boolean.
 ///    (bool) 0.5r
 CAST_OPERATION(FixedPointToBoolean)
diff --git a/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h b/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h
index 224e5b3..292b57a 100644
--- a/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h
+++ b/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h
@@ -529,7 +529,6 @@
   bool TraverseOMPLoopDirective(OMPLoopDirective *S);
   bool TraverseOMPClause(OMPClause *C);
 #define OPENMP_CLAUSE(Name, Class) bool Visit##Class(Class *C);
-  OPENMP_CLAUSE(flush, OMPFlushClause)
 #include "clang/Basic/OpenMPKinds.def"
   /// Process clauses with list of variables.
   template <typename T> bool VisitOMPClauseList(T *Node);
@@ -1066,6 +1065,9 @@
 
 DEF_TRAVERSE_TYPE(ParenType, { TRY_TO(TraverseType(T->getInnerType())); })
 
+DEF_TRAVERSE_TYPE(MacroQualifiedType,
+                  { TRY_TO(TraverseType(T->getUnderlyingType())); })
+
 DEF_TRAVERSE_TYPE(ElaboratedType, {
   if (T->getQualifier()) {
     TRY_TO(TraverseNestedNameSpecifier(T->getQualifier()));
@@ -1309,6 +1311,9 @@
 
 DEF_TRAVERSE_TYPELOC(ParenType, { TRY_TO(TraverseTypeLoc(TL.getInnerLoc())); })
 
+DEF_TRAVERSE_TYPELOC(MacroQualifiedType,
+                     { TRY_TO(TraverseTypeLoc(TL.getInnerLoc())); })
+
 DEF_TRAVERSE_TYPELOC(AttributedType,
                      { TRY_TO(TraverseTypeLoc(TL.getModifiedLoc())); })
 
@@ -1459,9 +1464,9 @@
   TRY_TO(TraverseDecl(D->getSpecialization()));
 
   if (D->hasExplicitTemplateArgs()) {
-    const TemplateArgumentListInfo &args = D->templateArgs();
-    TRY_TO(TraverseTemplateArgumentLocsHelper(args.getArgumentArray(),
-                                              args.size()));
+    TRY_TO(TraverseTemplateArgumentLocsHelper(
+        D->getTemplateArgsAsWritten()->getTemplateArgs(),
+        D->getTemplateArgsAsWritten()->NumTemplateArgs));
   }
 })
 
@@ -1614,6 +1619,13 @@
 
 DEF_TRAVERSE_DECL(OMPCapturedExprDecl, { TRY_TO(TraverseVarHelper(D)); })
 
+DEF_TRAVERSE_DECL(OMPAllocateDecl, {
+  for (auto *I : D->varlists())
+    TRY_TO(TraverseStmt(I));
+  for (auto *C : D->clauselists())
+    TRY_TO(TraverseOMPClause(C));
+})
+
 // A helper method for TemplateDecl's children.
 template <typename Derived>
 bool RecursiveASTVisitor<Derived>::TraverseTemplateParameterListHelper(
@@ -2270,6 +2282,10 @@
   TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
 })
 
+DEF_TRAVERSE_STMT(BuiltinBitCastExpr, {
+  TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
+})
+
 template <typename Derived>
 bool RecursiveASTVisitor<Derived>::TraverseSynOrSemInitListExpr(
     InitListExpr *S, DataRecursionQueue *Queue) {
@@ -2417,6 +2433,10 @@
     TypeLoc TL = S->getCallOperator()->getTypeSourceInfo()->getTypeLoc();
     FunctionProtoTypeLoc Proto = TL.getAsAdjusted<FunctionProtoTypeLoc>();
 
+    for (Decl *D : S->getExplicitTemplateParameters()) {
+      // Visit explicit template parameters.
+      TRY_TO(TraverseDecl(D));
+    }
     if (S->hasExplicitParameters()) {
       // Visit parameters.
       for (unsigned I = 0, N = Proto.getNumParams(); I != N; ++I)
@@ -2534,6 +2554,8 @@
 DEF_TRAVERSE_STMT(ShuffleVectorExpr, {})
 DEF_TRAVERSE_STMT(ConvertVectorExpr, {})
 DEF_TRAVERSE_STMT(StmtExpr, {})
+DEF_TRAVERSE_STMT(SourceLocExpr, {})
+
 DEF_TRAVERSE_STMT(UnresolvedLookupExpr, {
   TRY_TO(TraverseNestedNameSpecifierLoc(S->getQualifierLoc()));
   if (S->hasExplicitTemplateArgs()) {
@@ -2796,7 +2818,6 @@
   case OMPC_##Name:                                                            \
     TRY_TO(Visit##Class(static_cast<Class *>(C)));                             \
     break;
-  OPENMP_CLAUSE(flush, OMPFlushClause)
 #include "clang/Basic/OpenMPKinds.def"
   case OMPC_threadprivate:
   case OMPC_uniform:
@@ -2822,6 +2843,20 @@
 }
 
 template <typename Derived>
+bool RecursiveASTVisitor<Derived>::VisitOMPAllocatorClause(
+    OMPAllocatorClause *C) {
+  TRY_TO(TraverseStmt(C->getAllocator()));
+  return true;
+}
+
+template <typename Derived>
+bool RecursiveASTVisitor<Derived>::VisitOMPAllocateClause(OMPAllocateClause *C) {
+  TRY_TO(TraverseStmt(C->getAllocator()));
+  TRY_TO(VisitOMPClauseList(C));
+  return true;
+}
+
+template <typename Derived>
 bool RecursiveASTVisitor<Derived>::VisitOMPIfClause(OMPIfClause *C) {
   TRY_TO(VisitOMPClauseWithPreInit(C));
   TRY_TO(TraverseStmt(C->getCondition()));
diff --git a/linux-x64/clang/include/clang/AST/Redeclarable.h b/linux-x64/clang/include/clang/AST/Redeclarable.h
index 9c690a9..0975773 100644
--- a/linux-x64/clang/include/clang/AST/Redeclarable.h
+++ b/linux-x64/clang/include/clang/AST/Redeclarable.h
@@ -361,6 +361,13 @@
   decl_type &operator*() { return *Ptr; }
   const decl_type &operator*() const { return *Ptr; }
 
+  friend bool operator==(CanonicalDeclPtr LHS, CanonicalDeclPtr RHS) {
+    return LHS.Ptr == RHS.Ptr;
+  }
+  friend bool operator!=(CanonicalDeclPtr LHS, CanonicalDeclPtr RHS) {
+    return LHS.Ptr != RHS.Ptr;
+  }
+
 private:
   friend struct llvm::DenseMapInfo<CanonicalDeclPtr<decl_type>>;
 
diff --git a/linux-x64/clang/include/clang/AST/Stmt.h b/linux-x64/clang/include/clang/AST/Stmt.h
index b892d85..403b88a 100644
--- a/linux-x64/clang/include/clang/AST/Stmt.h
+++ b/linux-x64/clang/include/clang/AST/Stmt.h
@@ -46,6 +46,7 @@
 class CapturedDecl;
 class Decl;
 class Expr;
+class AddrLabelExpr;
 class LabelDecl;
 class ODRHash;
 class PrinterHelper;
@@ -91,12 +92,20 @@
   //===--- Statement bitfields classes ---===//
 
   class StmtBitfields {
+    friend class ASTStmtReader;
+    friend class ASTStmtWriter;
     friend class Stmt;
 
     /// The statement class.
     unsigned sClass : 8;
+
+    /// This bit is set only for the Stmts that are the structured-block of
+    /// OpenMP executable directives. Directives that have a structured block
+    /// are called "non-standalone" directives.
+    /// I.e. those returned by OMPExecutableDirective::getStructuredBlock().
+    unsigned IsOMPStructuredBlock : 1;
   };
-  enum { NumStmtBits = 8 };
+  enum { NumStmtBits = 9 };
 
   class NullStmtBitfields {
     friend class ASTStmtReader;
@@ -313,6 +322,33 @@
   };
   enum { NumExprBits = NumStmtBits + 9 };
 
+  class ConstantExprBitfields {
+    friend class ASTStmtReader;
+    friend class ASTStmtWriter;
+    friend class ConstantExpr;
+
+    unsigned : NumExprBits;
+
+    /// The kind of result that is trail-allocated.
+    unsigned ResultKind : 2;
+
+    /// Kind of Result as defined by APValue::Kind
+    unsigned APValueKind : 4;
+
+    /// When ResultKind == RSK_Int64. whether the trail-allocated integer is
+    /// signed.
+    unsigned IsUnsigned : 1;
+
+    /// When ResultKind == RSK_Int64. the BitWidth of the trail-allocated
+    /// integer. 7 bits because it is the minimal number of bit to represent a
+    /// value from 0 to 64 (the size of the trail-allocated number).
+    unsigned BitWidth : 7;
+
+    /// When ResultKind == RSK_APValue. Wether the ASTContext will cleanup the
+    /// destructor on the trail-allocated APValue.
+    unsigned HasCleanup : 1;
+  };
+
   class PredefinedExprBitfields {
     friend class ASTStmtReader;
     friend class PredefinedExpr;
@@ -342,19 +378,12 @@
     unsigned HasFoundDecl : 1;
     unsigned HadMultipleCandidates : 1;
     unsigned RefersToEnclosingVariableOrCapture : 1;
+    unsigned NonOdrUseReason : 2;
 
     /// The location of the declaration name itself.
     SourceLocation Loc;
   };
 
-  enum APFloatSemantics {
-    IEEEhalf,
-    IEEEsingle,
-    IEEEdouble,
-    x87DoubleExtended,
-    IEEEquad,
-    PPCDoubleDouble
-  };
 
   class FloatingLiteralBitfields {
     friend class FloatingLiteral;
@@ -444,6 +473,7 @@
   enum { NumCallExprBits = 32 };
 
   class MemberExprBitfields {
+    friend class ASTStmtReader;
     friend class MemberExpr;
 
     unsigned : NumExprBits;
@@ -468,6 +498,11 @@
     /// was resolved from an overloaded set having size greater than 1.
     unsigned HadMultipleCandidates : 1;
 
+    /// Value of type NonOdrUseReason indicating why this MemberExpr does
+    /// not constitute an odr-use of the named declaration. Meaningful only
+    /// when naming a static member.
+    unsigned NonOdrUseReason : 2;
+
     /// This is the location of the -> or . in the expression.
     SourceLocation OperatorLoc;
   };
@@ -542,6 +577,17 @@
     unsigned ResultIndex : 32 - 8 - NumExprBits;
   };
 
+  class SourceLocExprBitfields {
+    friend class ASTStmtReader;
+    friend class SourceLocExpr;
+
+    unsigned : NumExprBits;
+
+    /// The kind of source location builtin represented by the SourceLocExpr.
+    /// Ex. __builtin_LINE, __builtin_FUNCTION, ect.
+    unsigned Kind : 2;
+  };
+
   //===--- C++ Expression bitfields classes ---===//
 
   class CXXOperatorCallExprBitfields {
@@ -911,6 +957,7 @@
 
     // Expressions
     ExprBitfields ExprBits;
+    ConstantExprBitfields ConstantExprBits;
     PredefinedExprBitfields PredefinedExprBits;
     DeclRefExprBitfields DeclRefExprBits;
     FloatingLiteralBitfields FloatingLiteralBits;
@@ -927,6 +974,7 @@
     ParenListExprBitfields ParenListExprBits;
     GenericSelectionExprBitfields GenericSelectionExprBits;
     PseudoObjectExprBitfields PseudoObjectExprBits;
+    SourceLocExprBitfields SourceLocExprBits;
 
     // C++ Expressions
     CXXOperatorCallExprBitfields CXXOperatorCallExprBits;
@@ -1000,7 +1048,7 @@
     CastIterator(StmtPtr *I) : Base(I) {}
 
     typename Base::value_type operator*() const {
-      return cast<T>(*this->I);
+      return cast_or_null<T>(*this->I);
     }
   };
 
@@ -1020,12 +1068,19 @@
   explicit Stmt(StmtClass SC, EmptyShell) : Stmt(SC) {}
 
 public:
+  Stmt() = delete;
+  Stmt(const Stmt &) = delete;
+  Stmt(Stmt &&) = delete;
+  Stmt &operator=(const Stmt &) = delete;
+  Stmt &operator=(Stmt &&) = delete;
+
   Stmt(StmtClass SC) {
     static_assert(sizeof(*this) <= 8,
                   "changing bitfields changed sizeof(Stmt)");
     static_assert(sizeof(*this) % alignof(void *) == 0,
                   "Insufficient alignment!");
     StmtBits.sClass = SC;
+    StmtBits.IsOMPStructuredBlock = false;
     if (StatisticsEnabled) Stmt::addStmtClass(SC);
   }
 
@@ -1035,6 +1090,11 @@
 
   const char *getStmtClassName() const;
 
+  bool isOMPStructuredBlock() const { return StmtBits.IsOMPStructuredBlock; }
+  void setIsOMPStructuredBlock(bool IsOMPStructuredBlock) {
+    StmtBits.IsOMPStructuredBlock = IsOMPStructuredBlock;
+  }
+
   /// SourceLocation tokens are not useful in isolation - they are low level
   /// value objects created/interpreted by SourceManager. We assume AST
   /// clients will have a pointer to the respective SourceManager.
@@ -1068,6 +1128,10 @@
                    StringRef NewlineSymbol = "\n",
                    const ASTContext *Context = nullptr) const;
 
+  /// Pretty-prints in JSON format.
+  void printJson(raw_ostream &Out, PrinterHelper *Helper,
+                 const PrintingPolicy &Policy, bool AddQuotes) const;
+
   /// viewAST - Visualize an AST rooted at this Stmt* using GraphViz.  Only
   ///   works on systems with GraphViz (Mac OS X) or dot+gv installed.
   void viewAST() const;
@@ -1174,6 +1238,11 @@
                        child_iterator(DG.end(), DG.end()));
   }
 
+  const_child_range children() const {
+    auto Children = const_cast<DeclStmt *>(this)->children();
+    return const_child_range(Children);
+  }
+
   using decl_iterator = DeclGroupRef::iterator;
   using const_decl_iterator = DeclGroupRef::const_iterator;
   using decl_range = llvm::iterator_range<decl_iterator>;
@@ -1231,6 +1300,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// CompoundStmt - This represents a group of statements like { stmt stmt }.
@@ -1276,11 +1349,6 @@
     return !body_empty() ? body_begin()[size() - 1] : nullptr;
   }
 
-  void setLastStmt(Stmt *S) {
-    assert(!body_empty() && "setLastStmt");
-    body_begin()[size() - 1] = S;
-  }
-
   using const_body_iterator = Stmt *const *;
   using body_const_range = llvm::iterator_range<const_body_iterator>;
 
@@ -1323,6 +1391,26 @@
     return const_reverse_body_iterator(body_begin());
   }
 
+  // Get the Stmt that StmtExpr would consider to be the result of this
+  // compound statement. This is used by StmtExpr to properly emulate the GCC
+  // compound expression extension, which ignores trailing NullStmts when
+  // getting the result of the expression.
+  // i.e. ({ 5;;; })
+  //           ^^ ignored
+  // If we don't find something that isn't a NullStmt, just return the last
+  // Stmt.
+  Stmt *getStmtExprResult() {
+    for (auto *B : llvm::reverse(body())) {
+      if (!isa<NullStmt>(B))
+        return B;
+    }
+    return body_back();
+  }
+
+  const Stmt *getStmtExprResult() const {
+    return const_cast<CompoundStmt *>(this)->getStmtExprResult();
+  }
+
   SourceLocation getBeginLoc() const { return CompoundStmtBits.LBraceLoc; }
   SourceLocation getEndLoc() const { return RBraceLoc; }
 
@@ -1535,6 +1623,12 @@
                        getTrailingObjects<Stmt *>() +
                            numTrailingObjects(OverloadToken<Stmt *>()));
   }
+
+  const_child_range children() const {
+    return const_child_range(getTrailingObjects<Stmt *>(),
+                             getTrailingObjects<Stmt *>() +
+                                 numTrailingObjects(OverloadToken<Stmt *>()));
+  }
 };
 
 class DefaultStmt : public SwitchCase {
@@ -1566,6 +1660,10 @@
 
   // Iterators
   child_range children() { return child_range(&SubStmt, &SubStmt + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&SubStmt, &SubStmt + 1);
+  }
 };
 
 SourceLocation SwitchCase::getEndLoc() const {
@@ -1584,21 +1682,44 @@
   llvm_unreachable("SwitchCase is neither a CaseStmt nor a DefaultStmt!");
 }
 
+/// Represents a statement that could possibly have a value and type. This
+/// covers expression-statements, as well as labels and attributed statements.
+///
+/// Value statements have a special meaning when they are the last non-null
+/// statement in a GNU statement expression, where they determine the value
+/// of the statement expression.
+class ValueStmt : public Stmt {
+protected:
+  using Stmt::Stmt;
+
+public:
+  const Expr *getExprStmt() const;
+  Expr *getExprStmt() {
+    const ValueStmt *ConstThis = this;
+    return const_cast<Expr*>(ConstThis->getExprStmt());
+  }
+
+  static bool classof(const Stmt *T) {
+    return T->getStmtClass() >= firstValueStmtConstant &&
+           T->getStmtClass() <= lastValueStmtConstant;
+  }
+};
+
 /// LabelStmt - Represents a label, which has a substatement.  For example:
 ///    foo: return;
-class LabelStmt : public Stmt {
+class LabelStmt : public ValueStmt {
   LabelDecl *TheDecl;
   Stmt *SubStmt;
 
 public:
   /// Build a label statement.
   LabelStmt(SourceLocation IL, LabelDecl *D, Stmt *substmt)
-      : Stmt(LabelStmtClass), TheDecl(D), SubStmt(substmt) {
+      : ValueStmt(LabelStmtClass), TheDecl(D), SubStmt(substmt) {
     setIdentLoc(IL);
   }
 
   /// Build an empty label statement.
-  explicit LabelStmt(EmptyShell Empty) : Stmt(LabelStmtClass, Empty) {}
+  explicit LabelStmt(EmptyShell Empty) : ValueStmt(LabelStmtClass, Empty) {}
 
   SourceLocation getIdentLoc() const { return LabelStmtBits.IdentLoc; }
   void setIdentLoc(SourceLocation L) { LabelStmtBits.IdentLoc = L; }
@@ -1617,6 +1738,10 @@
 
   child_range children() { return child_range(&SubStmt, &SubStmt + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&SubStmt, &SubStmt + 1);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == LabelStmtClass;
   }
@@ -1627,7 +1752,7 @@
 /// Represents an attribute applied to a statement. For example:
 ///   [[omp::for(...)]] for (...) { ... }
 class AttributedStmt final
-    : public Stmt,
+    : public ValueStmt,
       private llvm::TrailingObjects<AttributedStmt, const Attr *> {
   friend class ASTStmtReader;
   friend TrailingObjects;
@@ -1636,14 +1761,14 @@
 
   AttributedStmt(SourceLocation Loc, ArrayRef<const Attr *> Attrs,
                  Stmt *SubStmt)
-      : Stmt(AttributedStmtClass), SubStmt(SubStmt) {
+      : ValueStmt(AttributedStmtClass), SubStmt(SubStmt) {
     AttributedStmtBits.NumAttrs = Attrs.size();
     AttributedStmtBits.AttrLoc = Loc;
     std::copy(Attrs.begin(), Attrs.end(), getAttrArrayPtr());
   }
 
   explicit AttributedStmt(EmptyShell Empty, unsigned NumAttrs)
-      : Stmt(AttributedStmtClass, Empty) {
+      : ValueStmt(AttributedStmtClass, Empty) {
     AttributedStmtBits.NumAttrs = NumAttrs;
     AttributedStmtBits.AttrLoc = SourceLocation{};
     std::fill_n(getAttrArrayPtr(), NumAttrs, nullptr);
@@ -1674,6 +1799,10 @@
 
   child_range children() { return child_range(&SubStmt, &SubStmt + 1); }
 
+  const_child_range children() const {
+    return const_child_range(&SubStmt, &SubStmt + 1);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == AttributedStmtClass;
   }
@@ -1873,6 +2002,12 @@
                            numTrailingObjects(OverloadToken<Stmt *>()));
   }
 
+  const_child_range children() const {
+    return const_child_range(getTrailingObjects<Stmt *>(),
+                             getTrailingObjects<Stmt *>() +
+                                 numTrailingObjects(OverloadToken<Stmt *>()));
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == IfStmtClass;
   }
@@ -2050,6 +2185,12 @@
                            numTrailingObjects(OverloadToken<Stmt *>()));
   }
 
+  const_child_range children() const {
+    return const_child_range(getTrailingObjects<Stmt *>(),
+                             getTrailingObjects<Stmt *>() +
+                                 numTrailingObjects(OverloadToken<Stmt *>()));
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == SwitchStmtClass;
   }
@@ -2175,6 +2316,12 @@
                        getTrailingObjects<Stmt *>() +
                            numTrailingObjects(OverloadToken<Stmt *>()));
   }
+
+  const_child_range children() const {
+    return const_child_range(getTrailingObjects<Stmt *>(),
+                             getTrailingObjects<Stmt *>() +
+                                 numTrailingObjects(OverloadToken<Stmt *>()));
+  }
 };
 
 /// DoStmt - This represents a 'do/while' stmt.
@@ -2225,6 +2372,10 @@
   child_range children() {
     return child_range(&SubExprs[0], &SubExprs[0] + END_EXPR);
   }
+
+  const_child_range children() const {
+    return const_child_range(&SubExprs[0], &SubExprs[0] + END_EXPR);
+  }
 };
 
 /// ForStmt - This represents a 'for (init;cond;inc)' stmt.  Note that any of
@@ -2294,6 +2445,10 @@
   child_range children() {
     return child_range(&SubExprs[0], &SubExprs[0]+END_EXPR);
   }
+
+  const_child_range children() const {
+    return const_child_range(&SubExprs[0], &SubExprs[0] + END_EXPR);
+  }
 };
 
 /// GotoStmt - This represents a direct goto.
@@ -2329,6 +2484,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// IndirectGotoStmt - This represents an indirect goto.
@@ -2374,6 +2533,10 @@
 
   // Iterators
   child_range children() { return child_range(&Target, &Target + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&Target, &Target + 1);
+  }
 };
 
 /// ContinueStmt - This represents a continue.
@@ -2400,6 +2563,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// BreakStmt - This represents a break.
@@ -2426,6 +2593,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// ReturnStmt - This represents a return, optionally of an expression:
@@ -2510,6 +2681,12 @@
       return child_range(&RetExpr, &RetExpr + 1);
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    if (RetExpr)
+      return const_child_range(&RetExpr, &RetExpr + 1);
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// AsmStmt is the base class for GCCAsmStmt and MSAsmStmt.
@@ -2665,6 +2842,10 @@
   child_range children() {
     return child_range(&Exprs[0], &Exprs[0] + NumOutputs + NumInputs);
   }
+
+  const_child_range children() const {
+    return const_child_range(&Exprs[0], &Exprs[0] + NumOutputs + NumInputs);
+  }
 };
 
 /// This represents a GCC inline-assembly statement extension.
@@ -2678,13 +2859,15 @@
   StringLiteral **Constraints = nullptr;
   StringLiteral **Clobbers = nullptr;
   IdentifierInfo **Names = nullptr;
+  unsigned NumLabels = 0;
 
 public:
   GCCAsmStmt(const ASTContext &C, SourceLocation asmloc, bool issimple,
              bool isvolatile, unsigned numoutputs, unsigned numinputs,
              IdentifierInfo **names, StringLiteral **constraints, Expr **exprs,
              StringLiteral *asmstr, unsigned numclobbers,
-             StringLiteral **clobbers, SourceLocation rparenloc);
+             StringLiteral **clobbers, unsigned numlabels,
+             SourceLocation rparenloc);
 
   /// Build an empty inline-assembly statement.
   explicit GCCAsmStmt(EmptyShell Empty) : AsmStmt(GCCAsmStmtClass, Empty) {}
@@ -2809,6 +2992,51 @@
     return const_cast<GCCAsmStmt*>(this)->getInputExpr(i);
   }
 
+  //===--- Labels ---===//
+
+  bool isAsmGoto() const {
+    return NumLabels > 0;
+  }
+
+  unsigned getNumLabels() const {
+    return NumLabels;
+  }
+
+  IdentifierInfo *getLabelIdentifier(unsigned i) const {
+    return Names[i + NumInputs];
+  }
+
+  AddrLabelExpr *getLabelExpr(unsigned i) const;
+  StringRef getLabelName(unsigned i) const;
+  using labels_iterator = CastIterator<AddrLabelExpr>;
+  using const_labels_iterator = ConstCastIterator<AddrLabelExpr>;
+  using labels_range = llvm::iterator_range<labels_iterator>;
+  using labels_const_range = llvm::iterator_range<const_labels_iterator>;
+
+  labels_iterator begin_labels() {
+    return &Exprs[0] + NumInputs;
+  }
+
+  labels_iterator end_labels() {
+    return &Exprs[0] + NumInputs + NumLabels;
+  }
+
+  labels_range labels() {
+    return labels_range(begin_labels(), end_labels());
+  }
+
+  const_labels_iterator begin_labels() const {
+    return &Exprs[0] + NumInputs;
+  }
+
+  const_labels_iterator end_labels() const {
+    return &Exprs[0] + NumInputs + NumLabels;
+  }
+
+  labels_const_range labels() const {
+    return labels_const_range(begin_labels(), end_labels());
+  }
+
 private:
   void setOutputsAndInputsAndClobbers(const ASTContext &C,
                                       IdentifierInfo **Names,
@@ -2816,6 +3044,7 @@
                                       Stmt **Exprs,
                                       unsigned NumOutputs,
                                       unsigned NumInputs,
+                                      unsigned NumLabels,
                                       StringLiteral **Clobbers,
                                       unsigned NumClobbers);
 
@@ -2941,6 +3170,10 @@
   child_range children() {
     return child_range(&Exprs[0], &Exprs[NumInputs + NumOutputs]);
   }
+
+  const_child_range children() const {
+    return const_child_range(&Exprs[0], &Exprs[NumInputs + NumOutputs]);
+  }
 };
 
 class SEHExceptStmt : public Stmt {
@@ -2978,6 +3211,10 @@
     return child_range(Children, Children+2);
   }
 
+  const_child_range children() const {
+    return const_child_range(Children, Children + 2);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == SEHExceptStmtClass;
   }
@@ -3009,6 +3246,10 @@
     return child_range(&Block,&Block+1);
   }
 
+  const_child_range children() const {
+    return const_child_range(&Block, &Block + 1);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == SEHFinallyStmtClass;
   }
@@ -3057,6 +3298,10 @@
     return child_range(Children, Children+2);
   }
 
+  const_child_range children() const {
+    return const_child_range(Children, Children + 2);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == SEHTryStmtClass;
   }
@@ -3087,6 +3332,10 @@
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
+
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
 };
 
 /// This captures a statement into a function. For example, the following
@@ -3307,6 +3556,8 @@
   }
 
   child_range children();
+
+  const_child_range children() const;
 };
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/AST/StmtCXX.h b/linux-x64/clang/include/clang/AST/StmtCXX.h
index 5618b2a..4d1f3e8 100644
--- a/linux-x64/clang/include/clang/AST/StmtCXX.h
+++ b/linux-x64/clang/include/clang/AST/StmtCXX.h
@@ -56,6 +56,10 @@
 
   child_range children() { return child_range(&HandlerBlock, &HandlerBlock+1); }
 
+  const_child_range children() const {
+    return const_child_range(&HandlerBlock, &HandlerBlock + 1);
+  }
+
   friend class ASTStmtReader;
 };
 
@@ -114,6 +118,10 @@
   child_range children() {
     return child_range(getStmts(), getStmts() + getNumHandlers() + 1);
   }
+
+  const_child_range children() const {
+    return const_child_range(getStmts(), getStmts() + getNumHandlers() + 1);
+  }
 };
 
 /// CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for
@@ -208,6 +216,10 @@
   child_range children() {
     return child_range(&SubExprs[0], &SubExprs[END]);
   }
+
+  const_child_range children() const {
+    return const_child_range(&SubExprs[0], &SubExprs[END]);
+  }
 };
 
 /// Representation of a Microsoft __if_exists or __if_not_exists
@@ -290,6 +302,10 @@
     return child_range(&SubStmt, &SubStmt+1);
   }
 
+  const_child_range children() const {
+    return const_child_range(&SubStmt, &SubStmt + 1);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == MSDependentExistsStmtClass;
   }
@@ -415,6 +431,12 @@
                        getStoredStmts() + SubStmt::FirstParamMove + NumParams);
   }
 
+  const_child_range children() const {
+    return const_child_range(getStoredStmts(), getStoredStmts() +
+                                                   SubStmt::FirstParamMove +
+                                                   NumParams);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CoroutineBodyStmtClass;
   }
@@ -479,6 +501,13 @@
     return child_range(SubStmts, SubStmts + SubStmt::Count);
   }
 
+  const_child_range children() const {
+    if (!getOperand())
+      return const_child_range(SubStmts + SubStmt::PromiseCall,
+                               SubStmts + SubStmt::Count);
+    return const_child_range(SubStmts, SubStmts + SubStmt::Count);
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CoreturnStmtClass;
   }
diff --git a/linux-x64/clang/include/clang/AST/StmtNodes.inc b/linux-x64/clang/include/clang/AST/StmtNodes.inc
index 9c6e8bf..c2a2585 100644
--- a/linux-x64/clang/include/clang/AST/StmtNodes.inc
+++ b/linux-x64/clang/include/clang/AST/StmtNodes.inc
@@ -37,12 +37,6 @@
 
 #undef ASMSTMT
 
-#ifndef ATTRIBUTEDSTMT
-#  define ATTRIBUTEDSTMT(Type, Base) STMT(Type, Base)
-#endif
-ATTRIBUTEDSTMT(AttributedStmt, Stmt)
-#undef ATTRIBUTEDSTMT
-
 #ifndef BREAKSTMT
 #  define BREAKSTMT(Type, Base) STMT(Type, Base)
 #endif
@@ -109,748 +103,6 @@
 DOSTMT(DoStmt, Stmt)
 #undef DOSTMT
 
-#ifndef EXPR
-#  define EXPR(Type, Base) STMT(Type, Base)
-#endif
-ABSTRACT_STMT(EXPR(Expr, Stmt))
-#ifndef ABSTRACTCONDITIONALOPERATOR
-#  define ABSTRACTCONDITIONALOPERATOR(Type, Base) EXPR(Type, Base)
-#endif
-ABSTRACT_STMT(ABSTRACTCONDITIONALOPERATOR(AbstractConditionalOperator, Expr))
-#ifndef BINARYCONDITIONALOPERATOR
-#  define BINARYCONDITIONALOPERATOR(Type, Base) ABSTRACTCONDITIONALOPERATOR(Type, Base)
-#endif
-BINARYCONDITIONALOPERATOR(BinaryConditionalOperator, AbstractConditionalOperator)
-#undef BINARYCONDITIONALOPERATOR
-
-#ifndef CONDITIONALOPERATOR
-#  define CONDITIONALOPERATOR(Type, Base) ABSTRACTCONDITIONALOPERATOR(Type, Base)
-#endif
-CONDITIONALOPERATOR(ConditionalOperator, AbstractConditionalOperator)
-#undef CONDITIONALOPERATOR
-
-STMT_RANGE(AbstractConditionalOperator, BinaryConditionalOperator, ConditionalOperator)
-
-#undef ABSTRACTCONDITIONALOPERATOR
-
-#ifndef ADDRLABELEXPR
-#  define ADDRLABELEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ADDRLABELEXPR(AddrLabelExpr, Expr)
-#undef ADDRLABELEXPR
-
-#ifndef ARRAYINITINDEXEXPR
-#  define ARRAYINITINDEXEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ARRAYINITINDEXEXPR(ArrayInitIndexExpr, Expr)
-#undef ARRAYINITINDEXEXPR
-
-#ifndef ARRAYINITLOOPEXPR
-#  define ARRAYINITLOOPEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ARRAYINITLOOPEXPR(ArrayInitLoopExpr, Expr)
-#undef ARRAYINITLOOPEXPR
-
-#ifndef ARRAYSUBSCRIPTEXPR
-#  define ARRAYSUBSCRIPTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ARRAYSUBSCRIPTEXPR(ArraySubscriptExpr, Expr)
-#undef ARRAYSUBSCRIPTEXPR
-
-#ifndef ARRAYTYPETRAITEXPR
-#  define ARRAYTYPETRAITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ARRAYTYPETRAITEXPR(ArrayTypeTraitExpr, Expr)
-#undef ARRAYTYPETRAITEXPR
-
-#ifndef ASTYPEEXPR
-#  define ASTYPEEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ASTYPEEXPR(AsTypeExpr, Expr)
-#undef ASTYPEEXPR
-
-#ifndef ATOMICEXPR
-#  define ATOMICEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ATOMICEXPR(AtomicExpr, Expr)
-#undef ATOMICEXPR
-
-#ifndef BINARYOPERATOR
-#  define BINARYOPERATOR(Type, Base) EXPR(Type, Base)
-#endif
-BINARYOPERATOR(BinaryOperator, Expr)
-#ifndef COMPOUNDASSIGNOPERATOR
-#  define COMPOUNDASSIGNOPERATOR(Type, Base) BINARYOPERATOR(Type, Base)
-#endif
-COMPOUNDASSIGNOPERATOR(CompoundAssignOperator, BinaryOperator)
-#undef COMPOUNDASSIGNOPERATOR
-
-STMT_RANGE(BinaryOperator, BinaryOperator, CompoundAssignOperator)
-
-#undef BINARYOPERATOR
-
-#ifndef BLOCKEXPR
-#  define BLOCKEXPR(Type, Base) EXPR(Type, Base)
-#endif
-BLOCKEXPR(BlockExpr, Expr)
-#undef BLOCKEXPR
-
-#ifndef CXXBINDTEMPORARYEXPR
-#  define CXXBINDTEMPORARYEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXBINDTEMPORARYEXPR(CXXBindTemporaryExpr, Expr)
-#undef CXXBINDTEMPORARYEXPR
-
-#ifndef CXXBOOLLITERALEXPR
-#  define CXXBOOLLITERALEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXBOOLLITERALEXPR(CXXBoolLiteralExpr, Expr)
-#undef CXXBOOLLITERALEXPR
-
-#ifndef CXXCONSTRUCTEXPR
-#  define CXXCONSTRUCTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXCONSTRUCTEXPR(CXXConstructExpr, Expr)
-#ifndef CXXTEMPORARYOBJECTEXPR
-#  define CXXTEMPORARYOBJECTEXPR(Type, Base) CXXCONSTRUCTEXPR(Type, Base)
-#endif
-CXXTEMPORARYOBJECTEXPR(CXXTemporaryObjectExpr, CXXConstructExpr)
-#undef CXXTEMPORARYOBJECTEXPR
-
-STMT_RANGE(CXXConstructExpr, CXXConstructExpr, CXXTemporaryObjectExpr)
-
-#undef CXXCONSTRUCTEXPR
-
-#ifndef CXXDEFAULTARGEXPR
-#  define CXXDEFAULTARGEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXDEFAULTARGEXPR(CXXDefaultArgExpr, Expr)
-#undef CXXDEFAULTARGEXPR
-
-#ifndef CXXDEFAULTINITEXPR
-#  define CXXDEFAULTINITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXDEFAULTINITEXPR(CXXDefaultInitExpr, Expr)
-#undef CXXDEFAULTINITEXPR
-
-#ifndef CXXDELETEEXPR
-#  define CXXDELETEEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXDELETEEXPR(CXXDeleteExpr, Expr)
-#undef CXXDELETEEXPR
-
-#ifndef CXXDEPENDENTSCOPEMEMBEREXPR
-#  define CXXDEPENDENTSCOPEMEMBEREXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXDEPENDENTSCOPEMEMBEREXPR(CXXDependentScopeMemberExpr, Expr)
-#undef CXXDEPENDENTSCOPEMEMBEREXPR
-
-#ifndef CXXFOLDEXPR
-#  define CXXFOLDEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXFOLDEXPR(CXXFoldExpr, Expr)
-#undef CXXFOLDEXPR
-
-#ifndef CXXINHERITEDCTORINITEXPR
-#  define CXXINHERITEDCTORINITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXINHERITEDCTORINITEXPR(CXXInheritedCtorInitExpr, Expr)
-#undef CXXINHERITEDCTORINITEXPR
-
-#ifndef CXXNEWEXPR
-#  define CXXNEWEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXNEWEXPR(CXXNewExpr, Expr)
-#undef CXXNEWEXPR
-
-#ifndef CXXNOEXCEPTEXPR
-#  define CXXNOEXCEPTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXNOEXCEPTEXPR(CXXNoexceptExpr, Expr)
-#undef CXXNOEXCEPTEXPR
-
-#ifndef CXXNULLPTRLITERALEXPR
-#  define CXXNULLPTRLITERALEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXNULLPTRLITERALEXPR(CXXNullPtrLiteralExpr, Expr)
-#undef CXXNULLPTRLITERALEXPR
-
-#ifndef CXXPSEUDODESTRUCTOREXPR
-#  define CXXPSEUDODESTRUCTOREXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXPSEUDODESTRUCTOREXPR(CXXPseudoDestructorExpr, Expr)
-#undef CXXPSEUDODESTRUCTOREXPR
-
-#ifndef CXXSCALARVALUEINITEXPR
-#  define CXXSCALARVALUEINITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXSCALARVALUEINITEXPR(CXXScalarValueInitExpr, Expr)
-#undef CXXSCALARVALUEINITEXPR
-
-#ifndef CXXSTDINITIALIZERLISTEXPR
-#  define CXXSTDINITIALIZERLISTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXSTDINITIALIZERLISTEXPR(CXXStdInitializerListExpr, Expr)
-#undef CXXSTDINITIALIZERLISTEXPR
-
-#ifndef CXXTHISEXPR
-#  define CXXTHISEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXTHISEXPR(CXXThisExpr, Expr)
-#undef CXXTHISEXPR
-
-#ifndef CXXTHROWEXPR
-#  define CXXTHROWEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXTHROWEXPR(CXXThrowExpr, Expr)
-#undef CXXTHROWEXPR
-
-#ifndef CXXTYPEIDEXPR
-#  define CXXTYPEIDEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXTYPEIDEXPR(CXXTypeidExpr, Expr)
-#undef CXXTYPEIDEXPR
-
-#ifndef CXXUNRESOLVEDCONSTRUCTEXPR
-#  define CXXUNRESOLVEDCONSTRUCTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXUNRESOLVEDCONSTRUCTEXPR(CXXUnresolvedConstructExpr, Expr)
-#undef CXXUNRESOLVEDCONSTRUCTEXPR
-
-#ifndef CXXUUIDOFEXPR
-#  define CXXUUIDOFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CXXUUIDOFEXPR(CXXUuidofExpr, Expr)
-#undef CXXUUIDOFEXPR
-
-#ifndef CALLEXPR
-#  define CALLEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CALLEXPR(CallExpr, Expr)
-#ifndef CUDAKERNELCALLEXPR
-#  define CUDAKERNELCALLEXPR(Type, Base) CALLEXPR(Type, Base)
-#endif
-CUDAKERNELCALLEXPR(CUDAKernelCallExpr, CallExpr)
-#undef CUDAKERNELCALLEXPR
-
-#ifndef CXXMEMBERCALLEXPR
-#  define CXXMEMBERCALLEXPR(Type, Base) CALLEXPR(Type, Base)
-#endif
-CXXMEMBERCALLEXPR(CXXMemberCallExpr, CallExpr)
-#undef CXXMEMBERCALLEXPR
-
-#ifndef CXXOPERATORCALLEXPR
-#  define CXXOPERATORCALLEXPR(Type, Base) CALLEXPR(Type, Base)
-#endif
-CXXOPERATORCALLEXPR(CXXOperatorCallExpr, CallExpr)
-#undef CXXOPERATORCALLEXPR
-
-#ifndef USERDEFINEDLITERAL
-#  define USERDEFINEDLITERAL(Type, Base) CALLEXPR(Type, Base)
-#endif
-USERDEFINEDLITERAL(UserDefinedLiteral, CallExpr)
-#undef USERDEFINEDLITERAL
-
-STMT_RANGE(CallExpr, CallExpr, UserDefinedLiteral)
-
-#undef CALLEXPR
-
-#ifndef CASTEXPR
-#  define CASTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ABSTRACT_STMT(CASTEXPR(CastExpr, Expr))
-#ifndef EXPLICITCASTEXPR
-#  define EXPLICITCASTEXPR(Type, Base) CASTEXPR(Type, Base)
-#endif
-ABSTRACT_STMT(EXPLICITCASTEXPR(ExplicitCastExpr, CastExpr))
-#ifndef CSTYLECASTEXPR
-#  define CSTYLECASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
-#endif
-CSTYLECASTEXPR(CStyleCastExpr, ExplicitCastExpr)
-#undef CSTYLECASTEXPR
-
-#ifndef CXXFUNCTIONALCASTEXPR
-#  define CXXFUNCTIONALCASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
-#endif
-CXXFUNCTIONALCASTEXPR(CXXFunctionalCastExpr, ExplicitCastExpr)
-#undef CXXFUNCTIONALCASTEXPR
-
-#ifndef CXXNAMEDCASTEXPR
-#  define CXXNAMEDCASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
-#endif
-ABSTRACT_STMT(CXXNAMEDCASTEXPR(CXXNamedCastExpr, ExplicitCastExpr))
-#ifndef CXXCONSTCASTEXPR
-#  define CXXCONSTCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
-#endif
-CXXCONSTCASTEXPR(CXXConstCastExpr, CXXNamedCastExpr)
-#undef CXXCONSTCASTEXPR
-
-#ifndef CXXDYNAMICCASTEXPR
-#  define CXXDYNAMICCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
-#endif
-CXXDYNAMICCASTEXPR(CXXDynamicCastExpr, CXXNamedCastExpr)
-#undef CXXDYNAMICCASTEXPR
-
-#ifndef CXXREINTERPRETCASTEXPR
-#  define CXXREINTERPRETCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
-#endif
-CXXREINTERPRETCASTEXPR(CXXReinterpretCastExpr, CXXNamedCastExpr)
-#undef CXXREINTERPRETCASTEXPR
-
-#ifndef CXXSTATICCASTEXPR
-#  define CXXSTATICCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
-#endif
-CXXSTATICCASTEXPR(CXXStaticCastExpr, CXXNamedCastExpr)
-#undef CXXSTATICCASTEXPR
-
-STMT_RANGE(CXXNamedCastExpr, CXXConstCastExpr, CXXStaticCastExpr)
-
-#undef CXXNAMEDCASTEXPR
-
-#ifndef OBJCBRIDGEDCASTEXPR
-#  define OBJCBRIDGEDCASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
-#endif
-OBJCBRIDGEDCASTEXPR(ObjCBridgedCastExpr, ExplicitCastExpr)
-#undef OBJCBRIDGEDCASTEXPR
-
-STMT_RANGE(ExplicitCastExpr, CStyleCastExpr, ObjCBridgedCastExpr)
-
-#undef EXPLICITCASTEXPR
-
-#ifndef IMPLICITCASTEXPR
-#  define IMPLICITCASTEXPR(Type, Base) CASTEXPR(Type, Base)
-#endif
-IMPLICITCASTEXPR(ImplicitCastExpr, CastExpr)
-#undef IMPLICITCASTEXPR
-
-STMT_RANGE(CastExpr, CStyleCastExpr, ImplicitCastExpr)
-
-#undef CASTEXPR
-
-#ifndef CHARACTERLITERAL
-#  define CHARACTERLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-CHARACTERLITERAL(CharacterLiteral, Expr)
-#undef CHARACTERLITERAL
-
-#ifndef CHOOSEEXPR
-#  define CHOOSEEXPR(Type, Base) EXPR(Type, Base)
-#endif
-CHOOSEEXPR(ChooseExpr, Expr)
-#undef CHOOSEEXPR
-
-#ifndef COMPOUNDLITERALEXPR
-#  define COMPOUNDLITERALEXPR(Type, Base) EXPR(Type, Base)
-#endif
-COMPOUNDLITERALEXPR(CompoundLiteralExpr, Expr)
-#undef COMPOUNDLITERALEXPR
-
-#ifndef CONVERTVECTOREXPR
-#  define CONVERTVECTOREXPR(Type, Base) EXPR(Type, Base)
-#endif
-CONVERTVECTOREXPR(ConvertVectorExpr, Expr)
-#undef CONVERTVECTOREXPR
-
-#ifndef COROUTINESUSPENDEXPR
-#  define COROUTINESUSPENDEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ABSTRACT_STMT(COROUTINESUSPENDEXPR(CoroutineSuspendExpr, Expr))
-#ifndef COAWAITEXPR
-#  define COAWAITEXPR(Type, Base) COROUTINESUSPENDEXPR(Type, Base)
-#endif
-COAWAITEXPR(CoawaitExpr, CoroutineSuspendExpr)
-#undef COAWAITEXPR
-
-#ifndef COYIELDEXPR
-#  define COYIELDEXPR(Type, Base) COROUTINESUSPENDEXPR(Type, Base)
-#endif
-COYIELDEXPR(CoyieldExpr, CoroutineSuspendExpr)
-#undef COYIELDEXPR
-
-STMT_RANGE(CoroutineSuspendExpr, CoawaitExpr, CoyieldExpr)
-
-#undef COROUTINESUSPENDEXPR
-
-#ifndef DECLREFEXPR
-#  define DECLREFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-DECLREFEXPR(DeclRefExpr, Expr)
-#undef DECLREFEXPR
-
-#ifndef DEPENDENTCOAWAITEXPR
-#  define DEPENDENTCOAWAITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-DEPENDENTCOAWAITEXPR(DependentCoawaitExpr, Expr)
-#undef DEPENDENTCOAWAITEXPR
-
-#ifndef DEPENDENTSCOPEDECLREFEXPR
-#  define DEPENDENTSCOPEDECLREFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-DEPENDENTSCOPEDECLREFEXPR(DependentScopeDeclRefExpr, Expr)
-#undef DEPENDENTSCOPEDECLREFEXPR
-
-#ifndef DESIGNATEDINITEXPR
-#  define DESIGNATEDINITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-DESIGNATEDINITEXPR(DesignatedInitExpr, Expr)
-#undef DESIGNATEDINITEXPR
-
-#ifndef DESIGNATEDINITUPDATEEXPR
-#  define DESIGNATEDINITUPDATEEXPR(Type, Base) EXPR(Type, Base)
-#endif
-DESIGNATEDINITUPDATEEXPR(DesignatedInitUpdateExpr, Expr)
-#undef DESIGNATEDINITUPDATEEXPR
-
-#ifndef EXPRESSIONTRAITEXPR
-#  define EXPRESSIONTRAITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-EXPRESSIONTRAITEXPR(ExpressionTraitExpr, Expr)
-#undef EXPRESSIONTRAITEXPR
-
-#ifndef EXTVECTORELEMENTEXPR
-#  define EXTVECTORELEMENTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-EXTVECTORELEMENTEXPR(ExtVectorElementExpr, Expr)
-#undef EXTVECTORELEMENTEXPR
-
-#ifndef FIXEDPOINTLITERAL
-#  define FIXEDPOINTLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-FIXEDPOINTLITERAL(FixedPointLiteral, Expr)
-#undef FIXEDPOINTLITERAL
-
-#ifndef FLOATINGLITERAL
-#  define FLOATINGLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-FLOATINGLITERAL(FloatingLiteral, Expr)
-#undef FLOATINGLITERAL
-
-#ifndef FULLEXPR
-#  define FULLEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ABSTRACT_STMT(FULLEXPR(FullExpr, Expr))
-#ifndef CONSTANTEXPR
-#  define CONSTANTEXPR(Type, Base) FULLEXPR(Type, Base)
-#endif
-CONSTANTEXPR(ConstantExpr, FullExpr)
-#undef CONSTANTEXPR
-
-#ifndef EXPRWITHCLEANUPS
-#  define EXPRWITHCLEANUPS(Type, Base) FULLEXPR(Type, Base)
-#endif
-EXPRWITHCLEANUPS(ExprWithCleanups, FullExpr)
-#undef EXPRWITHCLEANUPS
-
-STMT_RANGE(FullExpr, ConstantExpr, ExprWithCleanups)
-
-#undef FULLEXPR
-
-#ifndef FUNCTIONPARMPACKEXPR
-#  define FUNCTIONPARMPACKEXPR(Type, Base) EXPR(Type, Base)
-#endif
-FUNCTIONPARMPACKEXPR(FunctionParmPackExpr, Expr)
-#undef FUNCTIONPARMPACKEXPR
-
-#ifndef GNUNULLEXPR
-#  define GNUNULLEXPR(Type, Base) EXPR(Type, Base)
-#endif
-GNUNULLEXPR(GNUNullExpr, Expr)
-#undef GNUNULLEXPR
-
-#ifndef GENERICSELECTIONEXPR
-#  define GENERICSELECTIONEXPR(Type, Base) EXPR(Type, Base)
-#endif
-GENERICSELECTIONEXPR(GenericSelectionExpr, Expr)
-#undef GENERICSELECTIONEXPR
-
-#ifndef IMAGINARYLITERAL
-#  define IMAGINARYLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-IMAGINARYLITERAL(ImaginaryLiteral, Expr)
-#undef IMAGINARYLITERAL
-
-#ifndef IMPLICITVALUEINITEXPR
-#  define IMPLICITVALUEINITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-IMPLICITVALUEINITEXPR(ImplicitValueInitExpr, Expr)
-#undef IMPLICITVALUEINITEXPR
-
-#ifndef INITLISTEXPR
-#  define INITLISTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-INITLISTEXPR(InitListExpr, Expr)
-#undef INITLISTEXPR
-
-#ifndef INTEGERLITERAL
-#  define INTEGERLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-INTEGERLITERAL(IntegerLiteral, Expr)
-#undef INTEGERLITERAL
-
-#ifndef LAMBDAEXPR
-#  define LAMBDAEXPR(Type, Base) EXPR(Type, Base)
-#endif
-LAMBDAEXPR(LambdaExpr, Expr)
-#undef LAMBDAEXPR
-
-#ifndef MSPROPERTYREFEXPR
-#  define MSPROPERTYREFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-MSPROPERTYREFEXPR(MSPropertyRefExpr, Expr)
-#undef MSPROPERTYREFEXPR
-
-#ifndef MSPROPERTYSUBSCRIPTEXPR
-#  define MSPROPERTYSUBSCRIPTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-MSPROPERTYSUBSCRIPTEXPR(MSPropertySubscriptExpr, Expr)
-#undef MSPROPERTYSUBSCRIPTEXPR
-
-#ifndef MATERIALIZETEMPORARYEXPR
-#  define MATERIALIZETEMPORARYEXPR(Type, Base) EXPR(Type, Base)
-#endif
-MATERIALIZETEMPORARYEXPR(MaterializeTemporaryExpr, Expr)
-#undef MATERIALIZETEMPORARYEXPR
-
-#ifndef MEMBEREXPR
-#  define MEMBEREXPR(Type, Base) EXPR(Type, Base)
-#endif
-MEMBEREXPR(MemberExpr, Expr)
-#undef MEMBEREXPR
-
-#ifndef NOINITEXPR
-#  define NOINITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-NOINITEXPR(NoInitExpr, Expr)
-#undef NOINITEXPR
-
-#ifndef OMPARRAYSECTIONEXPR
-#  define OMPARRAYSECTIONEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OMPARRAYSECTIONEXPR(OMPArraySectionExpr, Expr)
-#undef OMPARRAYSECTIONEXPR
-
-#ifndef OBJCARRAYLITERAL
-#  define OBJCARRAYLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-OBJCARRAYLITERAL(ObjCArrayLiteral, Expr)
-#undef OBJCARRAYLITERAL
-
-#ifndef OBJCAVAILABILITYCHECKEXPR
-#  define OBJCAVAILABILITYCHECKEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCAVAILABILITYCHECKEXPR(ObjCAvailabilityCheckExpr, Expr)
-#undef OBJCAVAILABILITYCHECKEXPR
-
-#ifndef OBJCBOOLLITERALEXPR
-#  define OBJCBOOLLITERALEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCBOOLLITERALEXPR(ObjCBoolLiteralExpr, Expr)
-#undef OBJCBOOLLITERALEXPR
-
-#ifndef OBJCBOXEDEXPR
-#  define OBJCBOXEDEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCBOXEDEXPR(ObjCBoxedExpr, Expr)
-#undef OBJCBOXEDEXPR
-
-#ifndef OBJCDICTIONARYLITERAL
-#  define OBJCDICTIONARYLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-OBJCDICTIONARYLITERAL(ObjCDictionaryLiteral, Expr)
-#undef OBJCDICTIONARYLITERAL
-
-#ifndef OBJCENCODEEXPR
-#  define OBJCENCODEEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCENCODEEXPR(ObjCEncodeExpr, Expr)
-#undef OBJCENCODEEXPR
-
-#ifndef OBJCINDIRECTCOPYRESTOREEXPR
-#  define OBJCINDIRECTCOPYRESTOREEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCINDIRECTCOPYRESTOREEXPR(ObjCIndirectCopyRestoreExpr, Expr)
-#undef OBJCINDIRECTCOPYRESTOREEXPR
-
-#ifndef OBJCISAEXPR
-#  define OBJCISAEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCISAEXPR(ObjCIsaExpr, Expr)
-#undef OBJCISAEXPR
-
-#ifndef OBJCIVARREFEXPR
-#  define OBJCIVARREFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCIVARREFEXPR(ObjCIvarRefExpr, Expr)
-#undef OBJCIVARREFEXPR
-
-#ifndef OBJCMESSAGEEXPR
-#  define OBJCMESSAGEEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCMESSAGEEXPR(ObjCMessageExpr, Expr)
-#undef OBJCMESSAGEEXPR
-
-#ifndef OBJCPROPERTYREFEXPR
-#  define OBJCPROPERTYREFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCPROPERTYREFEXPR(ObjCPropertyRefExpr, Expr)
-#undef OBJCPROPERTYREFEXPR
-
-#ifndef OBJCPROTOCOLEXPR
-#  define OBJCPROTOCOLEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCPROTOCOLEXPR(ObjCProtocolExpr, Expr)
-#undef OBJCPROTOCOLEXPR
-
-#ifndef OBJCSELECTOREXPR
-#  define OBJCSELECTOREXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCSELECTOREXPR(ObjCSelectorExpr, Expr)
-#undef OBJCSELECTOREXPR
-
-#ifndef OBJCSTRINGLITERAL
-#  define OBJCSTRINGLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-OBJCSTRINGLITERAL(ObjCStringLiteral, Expr)
-#undef OBJCSTRINGLITERAL
-
-#ifndef OBJCSUBSCRIPTREFEXPR
-#  define OBJCSUBSCRIPTREFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OBJCSUBSCRIPTREFEXPR(ObjCSubscriptRefExpr, Expr)
-#undef OBJCSUBSCRIPTREFEXPR
-
-#ifndef OFFSETOFEXPR
-#  define OFFSETOFEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OFFSETOFEXPR(OffsetOfExpr, Expr)
-#undef OFFSETOFEXPR
-
-#ifndef OPAQUEVALUEEXPR
-#  define OPAQUEVALUEEXPR(Type, Base) EXPR(Type, Base)
-#endif
-OPAQUEVALUEEXPR(OpaqueValueExpr, Expr)
-#undef OPAQUEVALUEEXPR
-
-#ifndef OVERLOADEXPR
-#  define OVERLOADEXPR(Type, Base) EXPR(Type, Base)
-#endif
-ABSTRACT_STMT(OVERLOADEXPR(OverloadExpr, Expr))
-#ifndef UNRESOLVEDLOOKUPEXPR
-#  define UNRESOLVEDLOOKUPEXPR(Type, Base) OVERLOADEXPR(Type, Base)
-#endif
-UNRESOLVEDLOOKUPEXPR(UnresolvedLookupExpr, OverloadExpr)
-#undef UNRESOLVEDLOOKUPEXPR
-
-#ifndef UNRESOLVEDMEMBEREXPR
-#  define UNRESOLVEDMEMBEREXPR(Type, Base) OVERLOADEXPR(Type, Base)
-#endif
-UNRESOLVEDMEMBEREXPR(UnresolvedMemberExpr, OverloadExpr)
-#undef UNRESOLVEDMEMBEREXPR
-
-STMT_RANGE(OverloadExpr, UnresolvedLookupExpr, UnresolvedMemberExpr)
-
-#undef OVERLOADEXPR
-
-#ifndef PACKEXPANSIONEXPR
-#  define PACKEXPANSIONEXPR(Type, Base) EXPR(Type, Base)
-#endif
-PACKEXPANSIONEXPR(PackExpansionExpr, Expr)
-#undef PACKEXPANSIONEXPR
-
-#ifndef PARENEXPR
-#  define PARENEXPR(Type, Base) EXPR(Type, Base)
-#endif
-PARENEXPR(ParenExpr, Expr)
-#undef PARENEXPR
-
-#ifndef PARENLISTEXPR
-#  define PARENLISTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-PARENLISTEXPR(ParenListExpr, Expr)
-#undef PARENLISTEXPR
-
-#ifndef PREDEFINEDEXPR
-#  define PREDEFINEDEXPR(Type, Base) EXPR(Type, Base)
-#endif
-PREDEFINEDEXPR(PredefinedExpr, Expr)
-#undef PREDEFINEDEXPR
-
-#ifndef PSEUDOOBJECTEXPR
-#  define PSEUDOOBJECTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-PSEUDOOBJECTEXPR(PseudoObjectExpr, Expr)
-#undef PSEUDOOBJECTEXPR
-
-#ifndef SHUFFLEVECTOREXPR
-#  define SHUFFLEVECTOREXPR(Type, Base) EXPR(Type, Base)
-#endif
-SHUFFLEVECTOREXPR(ShuffleVectorExpr, Expr)
-#undef SHUFFLEVECTOREXPR
-
-#ifndef SIZEOFPACKEXPR
-#  define SIZEOFPACKEXPR(Type, Base) EXPR(Type, Base)
-#endif
-SIZEOFPACKEXPR(SizeOfPackExpr, Expr)
-#undef SIZEOFPACKEXPR
-
-#ifndef STMTEXPR
-#  define STMTEXPR(Type, Base) EXPR(Type, Base)
-#endif
-STMTEXPR(StmtExpr, Expr)
-#undef STMTEXPR
-
-#ifndef STRINGLITERAL
-#  define STRINGLITERAL(Type, Base) EXPR(Type, Base)
-#endif
-STRINGLITERAL(StringLiteral, Expr)
-#undef STRINGLITERAL
-
-#ifndef SUBSTNONTYPETEMPLATEPARMEXPR
-#  define SUBSTNONTYPETEMPLATEPARMEXPR(Type, Base) EXPR(Type, Base)
-#endif
-SUBSTNONTYPETEMPLATEPARMEXPR(SubstNonTypeTemplateParmExpr, Expr)
-#undef SUBSTNONTYPETEMPLATEPARMEXPR
-
-#ifndef SUBSTNONTYPETEMPLATEPARMPACKEXPR
-#  define SUBSTNONTYPETEMPLATEPARMPACKEXPR(Type, Base) EXPR(Type, Base)
-#endif
-SUBSTNONTYPETEMPLATEPARMPACKEXPR(SubstNonTypeTemplateParmPackExpr, Expr)
-#undef SUBSTNONTYPETEMPLATEPARMPACKEXPR
-
-#ifndef TYPETRAITEXPR
-#  define TYPETRAITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-TYPETRAITEXPR(TypeTraitExpr, Expr)
-#undef TYPETRAITEXPR
-
-#ifndef TYPOEXPR
-#  define TYPOEXPR(Type, Base) EXPR(Type, Base)
-#endif
-TYPOEXPR(TypoExpr, Expr)
-#undef TYPOEXPR
-
-#ifndef UNARYEXPRORTYPETRAITEXPR
-#  define UNARYEXPRORTYPETRAITEXPR(Type, Base) EXPR(Type, Base)
-#endif
-UNARYEXPRORTYPETRAITEXPR(UnaryExprOrTypeTraitExpr, Expr)
-#undef UNARYEXPRORTYPETRAITEXPR
-
-#ifndef UNARYOPERATOR
-#  define UNARYOPERATOR(Type, Base) EXPR(Type, Base)
-#endif
-UNARYOPERATOR(UnaryOperator, Expr)
-#undef UNARYOPERATOR
-
-#ifndef VAARGEXPR
-#  define VAARGEXPR(Type, Base) EXPR(Type, Base)
-#endif
-VAARGEXPR(VAArgExpr, Expr)
-#undef VAARGEXPR
-
-STMT_RANGE(Expr, BinaryConditionalOperator, VAArgExpr)
-
-#undef EXPR
-
 #ifndef FORSTMT
 #  define FORSTMT(Type, Base) STMT(Type, Base)
 #endif
@@ -875,12 +127,6 @@
 INDIRECTGOTOSTMT(IndirectGotoStmt, Stmt)
 #undef INDIRECTGOTOSTMT
 
-#ifndef LABELSTMT
-#  define LABELSTMT(Type, Base) STMT(Type, Base)
-#endif
-LABELSTMT(LabelStmt, Stmt)
-#undef LABELSTMT
-
 #ifndef MSDEPENDENTEXISTSSTMT
 #  define MSDEPENDENTEXISTSSTMT(Type, Base) STMT(Type, Base)
 #endif
@@ -1289,6 +535,780 @@
 SWITCHSTMT(SwitchStmt, Stmt)
 #undef SWITCHSTMT
 
+#ifndef VALUESTMT
+#  define VALUESTMT(Type, Base) STMT(Type, Base)
+#endif
+ABSTRACT_STMT(VALUESTMT(ValueStmt, Stmt))
+#ifndef ATTRIBUTEDSTMT
+#  define ATTRIBUTEDSTMT(Type, Base) VALUESTMT(Type, Base)
+#endif
+ATTRIBUTEDSTMT(AttributedStmt, ValueStmt)
+#undef ATTRIBUTEDSTMT
+
+#ifndef EXPR
+#  define EXPR(Type, Base) VALUESTMT(Type, Base)
+#endif
+ABSTRACT_STMT(EXPR(Expr, ValueStmt))
+#ifndef ABSTRACTCONDITIONALOPERATOR
+#  define ABSTRACTCONDITIONALOPERATOR(Type, Base) EXPR(Type, Base)
+#endif
+ABSTRACT_STMT(ABSTRACTCONDITIONALOPERATOR(AbstractConditionalOperator, Expr))
+#ifndef BINARYCONDITIONALOPERATOR
+#  define BINARYCONDITIONALOPERATOR(Type, Base) ABSTRACTCONDITIONALOPERATOR(Type, Base)
+#endif
+BINARYCONDITIONALOPERATOR(BinaryConditionalOperator, AbstractConditionalOperator)
+#undef BINARYCONDITIONALOPERATOR
+
+#ifndef CONDITIONALOPERATOR
+#  define CONDITIONALOPERATOR(Type, Base) ABSTRACTCONDITIONALOPERATOR(Type, Base)
+#endif
+CONDITIONALOPERATOR(ConditionalOperator, AbstractConditionalOperator)
+#undef CONDITIONALOPERATOR
+
+STMT_RANGE(AbstractConditionalOperator, BinaryConditionalOperator, ConditionalOperator)
+
+#undef ABSTRACTCONDITIONALOPERATOR
+
+#ifndef ADDRLABELEXPR
+#  define ADDRLABELEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ADDRLABELEXPR(AddrLabelExpr, Expr)
+#undef ADDRLABELEXPR
+
+#ifndef ARRAYINITINDEXEXPR
+#  define ARRAYINITINDEXEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ARRAYINITINDEXEXPR(ArrayInitIndexExpr, Expr)
+#undef ARRAYINITINDEXEXPR
+
+#ifndef ARRAYINITLOOPEXPR
+#  define ARRAYINITLOOPEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ARRAYINITLOOPEXPR(ArrayInitLoopExpr, Expr)
+#undef ARRAYINITLOOPEXPR
+
+#ifndef ARRAYSUBSCRIPTEXPR
+#  define ARRAYSUBSCRIPTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ARRAYSUBSCRIPTEXPR(ArraySubscriptExpr, Expr)
+#undef ARRAYSUBSCRIPTEXPR
+
+#ifndef ARRAYTYPETRAITEXPR
+#  define ARRAYTYPETRAITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ARRAYTYPETRAITEXPR(ArrayTypeTraitExpr, Expr)
+#undef ARRAYTYPETRAITEXPR
+
+#ifndef ASTYPEEXPR
+#  define ASTYPEEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ASTYPEEXPR(AsTypeExpr, Expr)
+#undef ASTYPEEXPR
+
+#ifndef ATOMICEXPR
+#  define ATOMICEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ATOMICEXPR(AtomicExpr, Expr)
+#undef ATOMICEXPR
+
+#ifndef BINARYOPERATOR
+#  define BINARYOPERATOR(Type, Base) EXPR(Type, Base)
+#endif
+BINARYOPERATOR(BinaryOperator, Expr)
+#ifndef COMPOUNDASSIGNOPERATOR
+#  define COMPOUNDASSIGNOPERATOR(Type, Base) BINARYOPERATOR(Type, Base)
+#endif
+COMPOUNDASSIGNOPERATOR(CompoundAssignOperator, BinaryOperator)
+#undef COMPOUNDASSIGNOPERATOR
+
+STMT_RANGE(BinaryOperator, BinaryOperator, CompoundAssignOperator)
+
+#undef BINARYOPERATOR
+
+#ifndef BLOCKEXPR
+#  define BLOCKEXPR(Type, Base) EXPR(Type, Base)
+#endif
+BLOCKEXPR(BlockExpr, Expr)
+#undef BLOCKEXPR
+
+#ifndef CXXBINDTEMPORARYEXPR
+#  define CXXBINDTEMPORARYEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXBINDTEMPORARYEXPR(CXXBindTemporaryExpr, Expr)
+#undef CXXBINDTEMPORARYEXPR
+
+#ifndef CXXBOOLLITERALEXPR
+#  define CXXBOOLLITERALEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXBOOLLITERALEXPR(CXXBoolLiteralExpr, Expr)
+#undef CXXBOOLLITERALEXPR
+
+#ifndef CXXCONSTRUCTEXPR
+#  define CXXCONSTRUCTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXCONSTRUCTEXPR(CXXConstructExpr, Expr)
+#ifndef CXXTEMPORARYOBJECTEXPR
+#  define CXXTEMPORARYOBJECTEXPR(Type, Base) CXXCONSTRUCTEXPR(Type, Base)
+#endif
+CXXTEMPORARYOBJECTEXPR(CXXTemporaryObjectExpr, CXXConstructExpr)
+#undef CXXTEMPORARYOBJECTEXPR
+
+STMT_RANGE(CXXConstructExpr, CXXConstructExpr, CXXTemporaryObjectExpr)
+
+#undef CXXCONSTRUCTEXPR
+
+#ifndef CXXDEFAULTARGEXPR
+#  define CXXDEFAULTARGEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXDEFAULTARGEXPR(CXXDefaultArgExpr, Expr)
+#undef CXXDEFAULTARGEXPR
+
+#ifndef CXXDEFAULTINITEXPR
+#  define CXXDEFAULTINITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXDEFAULTINITEXPR(CXXDefaultInitExpr, Expr)
+#undef CXXDEFAULTINITEXPR
+
+#ifndef CXXDELETEEXPR
+#  define CXXDELETEEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXDELETEEXPR(CXXDeleteExpr, Expr)
+#undef CXXDELETEEXPR
+
+#ifndef CXXDEPENDENTSCOPEMEMBEREXPR
+#  define CXXDEPENDENTSCOPEMEMBEREXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXDEPENDENTSCOPEMEMBEREXPR(CXXDependentScopeMemberExpr, Expr)
+#undef CXXDEPENDENTSCOPEMEMBEREXPR
+
+#ifndef CXXFOLDEXPR
+#  define CXXFOLDEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXFOLDEXPR(CXXFoldExpr, Expr)
+#undef CXXFOLDEXPR
+
+#ifndef CXXINHERITEDCTORINITEXPR
+#  define CXXINHERITEDCTORINITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXINHERITEDCTORINITEXPR(CXXInheritedCtorInitExpr, Expr)
+#undef CXXINHERITEDCTORINITEXPR
+
+#ifndef CXXNEWEXPR
+#  define CXXNEWEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXNEWEXPR(CXXNewExpr, Expr)
+#undef CXXNEWEXPR
+
+#ifndef CXXNOEXCEPTEXPR
+#  define CXXNOEXCEPTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXNOEXCEPTEXPR(CXXNoexceptExpr, Expr)
+#undef CXXNOEXCEPTEXPR
+
+#ifndef CXXNULLPTRLITERALEXPR
+#  define CXXNULLPTRLITERALEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXNULLPTRLITERALEXPR(CXXNullPtrLiteralExpr, Expr)
+#undef CXXNULLPTRLITERALEXPR
+
+#ifndef CXXPSEUDODESTRUCTOREXPR
+#  define CXXPSEUDODESTRUCTOREXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXPSEUDODESTRUCTOREXPR(CXXPseudoDestructorExpr, Expr)
+#undef CXXPSEUDODESTRUCTOREXPR
+
+#ifndef CXXSCALARVALUEINITEXPR
+#  define CXXSCALARVALUEINITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXSCALARVALUEINITEXPR(CXXScalarValueInitExpr, Expr)
+#undef CXXSCALARVALUEINITEXPR
+
+#ifndef CXXSTDINITIALIZERLISTEXPR
+#  define CXXSTDINITIALIZERLISTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXSTDINITIALIZERLISTEXPR(CXXStdInitializerListExpr, Expr)
+#undef CXXSTDINITIALIZERLISTEXPR
+
+#ifndef CXXTHISEXPR
+#  define CXXTHISEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXTHISEXPR(CXXThisExpr, Expr)
+#undef CXXTHISEXPR
+
+#ifndef CXXTHROWEXPR
+#  define CXXTHROWEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXTHROWEXPR(CXXThrowExpr, Expr)
+#undef CXXTHROWEXPR
+
+#ifndef CXXTYPEIDEXPR
+#  define CXXTYPEIDEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXTYPEIDEXPR(CXXTypeidExpr, Expr)
+#undef CXXTYPEIDEXPR
+
+#ifndef CXXUNRESOLVEDCONSTRUCTEXPR
+#  define CXXUNRESOLVEDCONSTRUCTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXUNRESOLVEDCONSTRUCTEXPR(CXXUnresolvedConstructExpr, Expr)
+#undef CXXUNRESOLVEDCONSTRUCTEXPR
+
+#ifndef CXXUUIDOFEXPR
+#  define CXXUUIDOFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CXXUUIDOFEXPR(CXXUuidofExpr, Expr)
+#undef CXXUUIDOFEXPR
+
+#ifndef CALLEXPR
+#  define CALLEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CALLEXPR(CallExpr, Expr)
+#ifndef CUDAKERNELCALLEXPR
+#  define CUDAKERNELCALLEXPR(Type, Base) CALLEXPR(Type, Base)
+#endif
+CUDAKERNELCALLEXPR(CUDAKernelCallExpr, CallExpr)
+#undef CUDAKERNELCALLEXPR
+
+#ifndef CXXMEMBERCALLEXPR
+#  define CXXMEMBERCALLEXPR(Type, Base) CALLEXPR(Type, Base)
+#endif
+CXXMEMBERCALLEXPR(CXXMemberCallExpr, CallExpr)
+#undef CXXMEMBERCALLEXPR
+
+#ifndef CXXOPERATORCALLEXPR
+#  define CXXOPERATORCALLEXPR(Type, Base) CALLEXPR(Type, Base)
+#endif
+CXXOPERATORCALLEXPR(CXXOperatorCallExpr, CallExpr)
+#undef CXXOPERATORCALLEXPR
+
+#ifndef USERDEFINEDLITERAL
+#  define USERDEFINEDLITERAL(Type, Base) CALLEXPR(Type, Base)
+#endif
+USERDEFINEDLITERAL(UserDefinedLiteral, CallExpr)
+#undef USERDEFINEDLITERAL
+
+STMT_RANGE(CallExpr, CallExpr, UserDefinedLiteral)
+
+#undef CALLEXPR
+
+#ifndef CASTEXPR
+#  define CASTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ABSTRACT_STMT(CASTEXPR(CastExpr, Expr))
+#ifndef EXPLICITCASTEXPR
+#  define EXPLICITCASTEXPR(Type, Base) CASTEXPR(Type, Base)
+#endif
+ABSTRACT_STMT(EXPLICITCASTEXPR(ExplicitCastExpr, CastExpr))
+#ifndef BUILTINBITCASTEXPR
+#  define BUILTINBITCASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
+#endif
+BUILTINBITCASTEXPR(BuiltinBitCastExpr, ExplicitCastExpr)
+#undef BUILTINBITCASTEXPR
+
+#ifndef CSTYLECASTEXPR
+#  define CSTYLECASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
+#endif
+CSTYLECASTEXPR(CStyleCastExpr, ExplicitCastExpr)
+#undef CSTYLECASTEXPR
+
+#ifndef CXXFUNCTIONALCASTEXPR
+#  define CXXFUNCTIONALCASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
+#endif
+CXXFUNCTIONALCASTEXPR(CXXFunctionalCastExpr, ExplicitCastExpr)
+#undef CXXFUNCTIONALCASTEXPR
+
+#ifndef CXXNAMEDCASTEXPR
+#  define CXXNAMEDCASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
+#endif
+ABSTRACT_STMT(CXXNAMEDCASTEXPR(CXXNamedCastExpr, ExplicitCastExpr))
+#ifndef CXXCONSTCASTEXPR
+#  define CXXCONSTCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
+#endif
+CXXCONSTCASTEXPR(CXXConstCastExpr, CXXNamedCastExpr)
+#undef CXXCONSTCASTEXPR
+
+#ifndef CXXDYNAMICCASTEXPR
+#  define CXXDYNAMICCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
+#endif
+CXXDYNAMICCASTEXPR(CXXDynamicCastExpr, CXXNamedCastExpr)
+#undef CXXDYNAMICCASTEXPR
+
+#ifndef CXXREINTERPRETCASTEXPR
+#  define CXXREINTERPRETCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
+#endif
+CXXREINTERPRETCASTEXPR(CXXReinterpretCastExpr, CXXNamedCastExpr)
+#undef CXXREINTERPRETCASTEXPR
+
+#ifndef CXXSTATICCASTEXPR
+#  define CXXSTATICCASTEXPR(Type, Base) CXXNAMEDCASTEXPR(Type, Base)
+#endif
+CXXSTATICCASTEXPR(CXXStaticCastExpr, CXXNamedCastExpr)
+#undef CXXSTATICCASTEXPR
+
+STMT_RANGE(CXXNamedCastExpr, CXXConstCastExpr, CXXStaticCastExpr)
+
+#undef CXXNAMEDCASTEXPR
+
+#ifndef OBJCBRIDGEDCASTEXPR
+#  define OBJCBRIDGEDCASTEXPR(Type, Base) EXPLICITCASTEXPR(Type, Base)
+#endif
+OBJCBRIDGEDCASTEXPR(ObjCBridgedCastExpr, ExplicitCastExpr)
+#undef OBJCBRIDGEDCASTEXPR
+
+STMT_RANGE(ExplicitCastExpr, BuiltinBitCastExpr, ObjCBridgedCastExpr)
+
+#undef EXPLICITCASTEXPR
+
+#ifndef IMPLICITCASTEXPR
+#  define IMPLICITCASTEXPR(Type, Base) CASTEXPR(Type, Base)
+#endif
+IMPLICITCASTEXPR(ImplicitCastExpr, CastExpr)
+#undef IMPLICITCASTEXPR
+
+STMT_RANGE(CastExpr, BuiltinBitCastExpr, ImplicitCastExpr)
+
+#undef CASTEXPR
+
+#ifndef CHARACTERLITERAL
+#  define CHARACTERLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+CHARACTERLITERAL(CharacterLiteral, Expr)
+#undef CHARACTERLITERAL
+
+#ifndef CHOOSEEXPR
+#  define CHOOSEEXPR(Type, Base) EXPR(Type, Base)
+#endif
+CHOOSEEXPR(ChooseExpr, Expr)
+#undef CHOOSEEXPR
+
+#ifndef COMPOUNDLITERALEXPR
+#  define COMPOUNDLITERALEXPR(Type, Base) EXPR(Type, Base)
+#endif
+COMPOUNDLITERALEXPR(CompoundLiteralExpr, Expr)
+#undef COMPOUNDLITERALEXPR
+
+#ifndef CONVERTVECTOREXPR
+#  define CONVERTVECTOREXPR(Type, Base) EXPR(Type, Base)
+#endif
+CONVERTVECTOREXPR(ConvertVectorExpr, Expr)
+#undef CONVERTVECTOREXPR
+
+#ifndef COROUTINESUSPENDEXPR
+#  define COROUTINESUSPENDEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ABSTRACT_STMT(COROUTINESUSPENDEXPR(CoroutineSuspendExpr, Expr))
+#ifndef COAWAITEXPR
+#  define COAWAITEXPR(Type, Base) COROUTINESUSPENDEXPR(Type, Base)
+#endif
+COAWAITEXPR(CoawaitExpr, CoroutineSuspendExpr)
+#undef COAWAITEXPR
+
+#ifndef COYIELDEXPR
+#  define COYIELDEXPR(Type, Base) COROUTINESUSPENDEXPR(Type, Base)
+#endif
+COYIELDEXPR(CoyieldExpr, CoroutineSuspendExpr)
+#undef COYIELDEXPR
+
+STMT_RANGE(CoroutineSuspendExpr, CoawaitExpr, CoyieldExpr)
+
+#undef COROUTINESUSPENDEXPR
+
+#ifndef DECLREFEXPR
+#  define DECLREFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+DECLREFEXPR(DeclRefExpr, Expr)
+#undef DECLREFEXPR
+
+#ifndef DEPENDENTCOAWAITEXPR
+#  define DEPENDENTCOAWAITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+DEPENDENTCOAWAITEXPR(DependentCoawaitExpr, Expr)
+#undef DEPENDENTCOAWAITEXPR
+
+#ifndef DEPENDENTSCOPEDECLREFEXPR
+#  define DEPENDENTSCOPEDECLREFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+DEPENDENTSCOPEDECLREFEXPR(DependentScopeDeclRefExpr, Expr)
+#undef DEPENDENTSCOPEDECLREFEXPR
+
+#ifndef DESIGNATEDINITEXPR
+#  define DESIGNATEDINITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+DESIGNATEDINITEXPR(DesignatedInitExpr, Expr)
+#undef DESIGNATEDINITEXPR
+
+#ifndef DESIGNATEDINITUPDATEEXPR
+#  define DESIGNATEDINITUPDATEEXPR(Type, Base) EXPR(Type, Base)
+#endif
+DESIGNATEDINITUPDATEEXPR(DesignatedInitUpdateExpr, Expr)
+#undef DESIGNATEDINITUPDATEEXPR
+
+#ifndef EXPRESSIONTRAITEXPR
+#  define EXPRESSIONTRAITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+EXPRESSIONTRAITEXPR(ExpressionTraitExpr, Expr)
+#undef EXPRESSIONTRAITEXPR
+
+#ifndef EXTVECTORELEMENTEXPR
+#  define EXTVECTORELEMENTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+EXTVECTORELEMENTEXPR(ExtVectorElementExpr, Expr)
+#undef EXTVECTORELEMENTEXPR
+
+#ifndef FIXEDPOINTLITERAL
+#  define FIXEDPOINTLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+FIXEDPOINTLITERAL(FixedPointLiteral, Expr)
+#undef FIXEDPOINTLITERAL
+
+#ifndef FLOATINGLITERAL
+#  define FLOATINGLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+FLOATINGLITERAL(FloatingLiteral, Expr)
+#undef FLOATINGLITERAL
+
+#ifndef FULLEXPR
+#  define FULLEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ABSTRACT_STMT(FULLEXPR(FullExpr, Expr))
+#ifndef CONSTANTEXPR
+#  define CONSTANTEXPR(Type, Base) FULLEXPR(Type, Base)
+#endif
+CONSTANTEXPR(ConstantExpr, FullExpr)
+#undef CONSTANTEXPR
+
+#ifndef EXPRWITHCLEANUPS
+#  define EXPRWITHCLEANUPS(Type, Base) FULLEXPR(Type, Base)
+#endif
+EXPRWITHCLEANUPS(ExprWithCleanups, FullExpr)
+#undef EXPRWITHCLEANUPS
+
+STMT_RANGE(FullExpr, ConstantExpr, ExprWithCleanups)
+
+#undef FULLEXPR
+
+#ifndef FUNCTIONPARMPACKEXPR
+#  define FUNCTIONPARMPACKEXPR(Type, Base) EXPR(Type, Base)
+#endif
+FUNCTIONPARMPACKEXPR(FunctionParmPackExpr, Expr)
+#undef FUNCTIONPARMPACKEXPR
+
+#ifndef GNUNULLEXPR
+#  define GNUNULLEXPR(Type, Base) EXPR(Type, Base)
+#endif
+GNUNULLEXPR(GNUNullExpr, Expr)
+#undef GNUNULLEXPR
+
+#ifndef GENERICSELECTIONEXPR
+#  define GENERICSELECTIONEXPR(Type, Base) EXPR(Type, Base)
+#endif
+GENERICSELECTIONEXPR(GenericSelectionExpr, Expr)
+#undef GENERICSELECTIONEXPR
+
+#ifndef IMAGINARYLITERAL
+#  define IMAGINARYLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+IMAGINARYLITERAL(ImaginaryLiteral, Expr)
+#undef IMAGINARYLITERAL
+
+#ifndef IMPLICITVALUEINITEXPR
+#  define IMPLICITVALUEINITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+IMPLICITVALUEINITEXPR(ImplicitValueInitExpr, Expr)
+#undef IMPLICITVALUEINITEXPR
+
+#ifndef INITLISTEXPR
+#  define INITLISTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+INITLISTEXPR(InitListExpr, Expr)
+#undef INITLISTEXPR
+
+#ifndef INTEGERLITERAL
+#  define INTEGERLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+INTEGERLITERAL(IntegerLiteral, Expr)
+#undef INTEGERLITERAL
+
+#ifndef LAMBDAEXPR
+#  define LAMBDAEXPR(Type, Base) EXPR(Type, Base)
+#endif
+LAMBDAEXPR(LambdaExpr, Expr)
+#undef LAMBDAEXPR
+
+#ifndef MSPROPERTYREFEXPR
+#  define MSPROPERTYREFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+MSPROPERTYREFEXPR(MSPropertyRefExpr, Expr)
+#undef MSPROPERTYREFEXPR
+
+#ifndef MSPROPERTYSUBSCRIPTEXPR
+#  define MSPROPERTYSUBSCRIPTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+MSPROPERTYSUBSCRIPTEXPR(MSPropertySubscriptExpr, Expr)
+#undef MSPROPERTYSUBSCRIPTEXPR
+
+#ifndef MATERIALIZETEMPORARYEXPR
+#  define MATERIALIZETEMPORARYEXPR(Type, Base) EXPR(Type, Base)
+#endif
+MATERIALIZETEMPORARYEXPR(MaterializeTemporaryExpr, Expr)
+#undef MATERIALIZETEMPORARYEXPR
+
+#ifndef MEMBEREXPR
+#  define MEMBEREXPR(Type, Base) EXPR(Type, Base)
+#endif
+MEMBEREXPR(MemberExpr, Expr)
+#undef MEMBEREXPR
+
+#ifndef NOINITEXPR
+#  define NOINITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+NOINITEXPR(NoInitExpr, Expr)
+#undef NOINITEXPR
+
+#ifndef OMPARRAYSECTIONEXPR
+#  define OMPARRAYSECTIONEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OMPARRAYSECTIONEXPR(OMPArraySectionExpr, Expr)
+#undef OMPARRAYSECTIONEXPR
+
+#ifndef OBJCARRAYLITERAL
+#  define OBJCARRAYLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+OBJCARRAYLITERAL(ObjCArrayLiteral, Expr)
+#undef OBJCARRAYLITERAL
+
+#ifndef OBJCAVAILABILITYCHECKEXPR
+#  define OBJCAVAILABILITYCHECKEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCAVAILABILITYCHECKEXPR(ObjCAvailabilityCheckExpr, Expr)
+#undef OBJCAVAILABILITYCHECKEXPR
+
+#ifndef OBJCBOOLLITERALEXPR
+#  define OBJCBOOLLITERALEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCBOOLLITERALEXPR(ObjCBoolLiteralExpr, Expr)
+#undef OBJCBOOLLITERALEXPR
+
+#ifndef OBJCBOXEDEXPR
+#  define OBJCBOXEDEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCBOXEDEXPR(ObjCBoxedExpr, Expr)
+#undef OBJCBOXEDEXPR
+
+#ifndef OBJCDICTIONARYLITERAL
+#  define OBJCDICTIONARYLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+OBJCDICTIONARYLITERAL(ObjCDictionaryLiteral, Expr)
+#undef OBJCDICTIONARYLITERAL
+
+#ifndef OBJCENCODEEXPR
+#  define OBJCENCODEEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCENCODEEXPR(ObjCEncodeExpr, Expr)
+#undef OBJCENCODEEXPR
+
+#ifndef OBJCINDIRECTCOPYRESTOREEXPR
+#  define OBJCINDIRECTCOPYRESTOREEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCINDIRECTCOPYRESTOREEXPR(ObjCIndirectCopyRestoreExpr, Expr)
+#undef OBJCINDIRECTCOPYRESTOREEXPR
+
+#ifndef OBJCISAEXPR
+#  define OBJCISAEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCISAEXPR(ObjCIsaExpr, Expr)
+#undef OBJCISAEXPR
+
+#ifndef OBJCIVARREFEXPR
+#  define OBJCIVARREFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCIVARREFEXPR(ObjCIvarRefExpr, Expr)
+#undef OBJCIVARREFEXPR
+
+#ifndef OBJCMESSAGEEXPR
+#  define OBJCMESSAGEEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCMESSAGEEXPR(ObjCMessageExpr, Expr)
+#undef OBJCMESSAGEEXPR
+
+#ifndef OBJCPROPERTYREFEXPR
+#  define OBJCPROPERTYREFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCPROPERTYREFEXPR(ObjCPropertyRefExpr, Expr)
+#undef OBJCPROPERTYREFEXPR
+
+#ifndef OBJCPROTOCOLEXPR
+#  define OBJCPROTOCOLEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCPROTOCOLEXPR(ObjCProtocolExpr, Expr)
+#undef OBJCPROTOCOLEXPR
+
+#ifndef OBJCSELECTOREXPR
+#  define OBJCSELECTOREXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCSELECTOREXPR(ObjCSelectorExpr, Expr)
+#undef OBJCSELECTOREXPR
+
+#ifndef OBJCSTRINGLITERAL
+#  define OBJCSTRINGLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+OBJCSTRINGLITERAL(ObjCStringLiteral, Expr)
+#undef OBJCSTRINGLITERAL
+
+#ifndef OBJCSUBSCRIPTREFEXPR
+#  define OBJCSUBSCRIPTREFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OBJCSUBSCRIPTREFEXPR(ObjCSubscriptRefExpr, Expr)
+#undef OBJCSUBSCRIPTREFEXPR
+
+#ifndef OFFSETOFEXPR
+#  define OFFSETOFEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OFFSETOFEXPR(OffsetOfExpr, Expr)
+#undef OFFSETOFEXPR
+
+#ifndef OPAQUEVALUEEXPR
+#  define OPAQUEVALUEEXPR(Type, Base) EXPR(Type, Base)
+#endif
+OPAQUEVALUEEXPR(OpaqueValueExpr, Expr)
+#undef OPAQUEVALUEEXPR
+
+#ifndef OVERLOADEXPR
+#  define OVERLOADEXPR(Type, Base) EXPR(Type, Base)
+#endif
+ABSTRACT_STMT(OVERLOADEXPR(OverloadExpr, Expr))
+#ifndef UNRESOLVEDLOOKUPEXPR
+#  define UNRESOLVEDLOOKUPEXPR(Type, Base) OVERLOADEXPR(Type, Base)
+#endif
+UNRESOLVEDLOOKUPEXPR(UnresolvedLookupExpr, OverloadExpr)
+#undef UNRESOLVEDLOOKUPEXPR
+
+#ifndef UNRESOLVEDMEMBEREXPR
+#  define UNRESOLVEDMEMBEREXPR(Type, Base) OVERLOADEXPR(Type, Base)
+#endif
+UNRESOLVEDMEMBEREXPR(UnresolvedMemberExpr, OverloadExpr)
+#undef UNRESOLVEDMEMBEREXPR
+
+STMT_RANGE(OverloadExpr, UnresolvedLookupExpr, UnresolvedMemberExpr)
+
+#undef OVERLOADEXPR
+
+#ifndef PACKEXPANSIONEXPR
+#  define PACKEXPANSIONEXPR(Type, Base) EXPR(Type, Base)
+#endif
+PACKEXPANSIONEXPR(PackExpansionExpr, Expr)
+#undef PACKEXPANSIONEXPR
+
+#ifndef PARENEXPR
+#  define PARENEXPR(Type, Base) EXPR(Type, Base)
+#endif
+PARENEXPR(ParenExpr, Expr)
+#undef PARENEXPR
+
+#ifndef PARENLISTEXPR
+#  define PARENLISTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+PARENLISTEXPR(ParenListExpr, Expr)
+#undef PARENLISTEXPR
+
+#ifndef PREDEFINEDEXPR
+#  define PREDEFINEDEXPR(Type, Base) EXPR(Type, Base)
+#endif
+PREDEFINEDEXPR(PredefinedExpr, Expr)
+#undef PREDEFINEDEXPR
+
+#ifndef PSEUDOOBJECTEXPR
+#  define PSEUDOOBJECTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+PSEUDOOBJECTEXPR(PseudoObjectExpr, Expr)
+#undef PSEUDOOBJECTEXPR
+
+#ifndef SHUFFLEVECTOREXPR
+#  define SHUFFLEVECTOREXPR(Type, Base) EXPR(Type, Base)
+#endif
+SHUFFLEVECTOREXPR(ShuffleVectorExpr, Expr)
+#undef SHUFFLEVECTOREXPR
+
+#ifndef SIZEOFPACKEXPR
+#  define SIZEOFPACKEXPR(Type, Base) EXPR(Type, Base)
+#endif
+SIZEOFPACKEXPR(SizeOfPackExpr, Expr)
+#undef SIZEOFPACKEXPR
+
+#ifndef SOURCELOCEXPR
+#  define SOURCELOCEXPR(Type, Base) EXPR(Type, Base)
+#endif
+SOURCELOCEXPR(SourceLocExpr, Expr)
+#undef SOURCELOCEXPR
+
+#ifndef STMTEXPR
+#  define STMTEXPR(Type, Base) EXPR(Type, Base)
+#endif
+STMTEXPR(StmtExpr, Expr)
+#undef STMTEXPR
+
+#ifndef STRINGLITERAL
+#  define STRINGLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+STRINGLITERAL(StringLiteral, Expr)
+#undef STRINGLITERAL
+
+#ifndef SUBSTNONTYPETEMPLATEPARMEXPR
+#  define SUBSTNONTYPETEMPLATEPARMEXPR(Type, Base) EXPR(Type, Base)
+#endif
+SUBSTNONTYPETEMPLATEPARMEXPR(SubstNonTypeTemplateParmExpr, Expr)
+#undef SUBSTNONTYPETEMPLATEPARMEXPR
+
+#ifndef SUBSTNONTYPETEMPLATEPARMPACKEXPR
+#  define SUBSTNONTYPETEMPLATEPARMPACKEXPR(Type, Base) EXPR(Type, Base)
+#endif
+SUBSTNONTYPETEMPLATEPARMPACKEXPR(SubstNonTypeTemplateParmPackExpr, Expr)
+#undef SUBSTNONTYPETEMPLATEPARMPACKEXPR
+
+#ifndef TYPETRAITEXPR
+#  define TYPETRAITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+TYPETRAITEXPR(TypeTraitExpr, Expr)
+#undef TYPETRAITEXPR
+
+#ifndef TYPOEXPR
+#  define TYPOEXPR(Type, Base) EXPR(Type, Base)
+#endif
+TYPOEXPR(TypoExpr, Expr)
+#undef TYPOEXPR
+
+#ifndef UNARYEXPRORTYPETRAITEXPR
+#  define UNARYEXPRORTYPETRAITEXPR(Type, Base) EXPR(Type, Base)
+#endif
+UNARYEXPRORTYPETRAITEXPR(UnaryExprOrTypeTraitExpr, Expr)
+#undef UNARYEXPRORTYPETRAITEXPR
+
+#ifndef UNARYOPERATOR
+#  define UNARYOPERATOR(Type, Base) EXPR(Type, Base)
+#endif
+UNARYOPERATOR(UnaryOperator, Expr)
+#undef UNARYOPERATOR
+
+#ifndef VAARGEXPR
+#  define VAARGEXPR(Type, Base) EXPR(Type, Base)
+#endif
+VAARGEXPR(VAArgExpr, Expr)
+#undef VAARGEXPR
+
+STMT_RANGE(Expr, BinaryConditionalOperator, VAArgExpr)
+
+#undef EXPR
+
+#ifndef LABELSTMT
+#  define LABELSTMT(Type, Base) VALUESTMT(Type, Base)
+#endif
+LABELSTMT(LabelStmt, ValueStmt)
+#undef LABELSTMT
+
+STMT_RANGE(ValueStmt, AttributedStmt, LabelStmt)
+
+#undef VALUESTMT
+
 #ifndef WHILESTMT
 #  define WHILESTMT(Type, Base) STMT(Type, Base)
 #endif
diff --git a/linux-x64/clang/include/clang/AST/StmtObjC.h b/linux-x64/clang/include/clang/AST/StmtObjC.h
index aeb59a0..948ef24 100644
--- a/linux-x64/clang/include/clang/AST/StmtObjC.h
+++ b/linux-x64/clang/include/clang/AST/StmtObjC.h
@@ -67,6 +67,10 @@
   child_range children() {
     return child_range(&SubExprs[0], &SubExprs[END_EXPR]);
   }
+
+  const_child_range children() const {
+    return const_child_range(&SubExprs[0], &SubExprs[END_EXPR]);
+  }
 };
 
 /// Represents Objective-C's \@catch statement.
@@ -113,6 +117,10 @@
   }
 
   child_range children() { return child_range(&Body, &Body + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&Body, &Body + 1);
+  }
 };
 
 /// Represents Objective-C's \@finally statement
@@ -147,6 +155,10 @@
   child_range children() {
     return child_range(&AtFinallyStmt, &AtFinallyStmt+1);
   }
+
+  const_child_range children() const {
+    return const_child_range(&AtFinallyStmt, &AtFinallyStmt + 1);
+  }
 };
 
 /// Represents Objective-C's \@try ... \@catch ... \@finally statement.
@@ -248,6 +260,10 @@
     return child_range(getStmts(),
                        getStmts() + 1 + NumCatchStmts + HasFinally);
   }
+
+  const_child_range children() const {
+    return const_child_range(const_cast<ObjCAtTryStmt *>(this)->children());
+  }
 };
 
 /// Represents Objective-C's \@synchronized statement.
@@ -306,6 +322,10 @@
   child_range children() {
     return child_range(&SubStmts[0], &SubStmts[0]+END_EXPR);
   }
+
+  const_child_range children() const {
+    return const_child_range(&SubStmts[0], &SubStmts[0] + END_EXPR);
+  }
 };
 
 /// Represents Objective-C's \@throw statement.
@@ -338,6 +358,10 @@
   }
 
   child_range children() { return child_range(&Throw, &Throw+1); }
+
+  const_child_range children() const {
+    return const_child_range(&Throw, &Throw + 1);
+  }
 };
 
 /// Represents Objective-C's \@autoreleasepool Statement
@@ -369,6 +393,10 @@
   }
 
   child_range children() { return child_range(&SubStmt, &SubStmt + 1); }
+
+  const_child_range children() const {
+    return const_child_range(&SubStmt, &SubStmt + 1);
+  }
 };
 
 }  // end namespace clang
diff --git a/linux-x64/clang/include/clang/AST/StmtOpenMP.h b/linux-x64/clang/include/clang/AST/StmtOpenMP.h
index 4b6e706..e56d094 100644
--- a/linux-x64/clang/include/clang/AST/StmtOpenMP.h
+++ b/linux-x64/clang/include/clang/AST/StmtOpenMP.h
@@ -256,11 +256,35 @@
     return child_range(ChildStorage, ChildStorage + 1);
   }
 
+  const_child_range children() const {
+    if (!hasAssociatedStmt())
+      return const_child_range(const_child_iterator(), const_child_iterator());
+    Stmt **ChildStorage = reinterpret_cast<Stmt **>(
+        const_cast<OMPExecutableDirective *>(this)->getClauses().end());
+    return const_child_range(ChildStorage, ChildStorage + 1);
+  }
+
   ArrayRef<OMPClause *> clauses() { return getClauses(); }
 
   ArrayRef<OMPClause *> clauses() const {
     return const_cast<OMPExecutableDirective *>(this)->getClauses();
   }
+
+  /// Returns whether or not this is a Standalone directive.
+  ///
+  /// Stand-alone directives are executable directives
+  /// that have no associated user code.
+  bool isStandaloneDirective() const;
+
+  /// Returns the AST node representing OpenMP structured-block of this
+  /// OpenMP executable directive,
+  /// Prerequisite: Executable Directive must not be Standalone directive.
+  const Stmt *getStructuredBlock() const;
+
+  Stmt *getStructuredBlock() {
+    return const_cast<Stmt *>(
+        const_cast<const OMPExecutableDirective *>(this)->getStructuredBlock());
+  }
 };
 
 /// This represents '#pragma omp parallel' directive.
diff --git a/linux-x64/clang/include/clang/AST/TemplateName.h b/linux-x64/clang/include/clang/AST/TemplateName.h
index 89c5fab..4cc6f5e 100644
--- a/linux-x64/clang/include/clang/AST/TemplateName.h
+++ b/linux-x64/clang/include/clang/AST/TemplateName.h
@@ -31,6 +31,8 @@
 class NestedNameSpecifier;
 enum OverloadedOperatorKind : int;
 class OverloadedTemplateStorage;
+class AssumedTemplateStorage;
+class PartialDiagnostic;
 struct PrintingPolicy;
 class QualifiedTemplateName;
 class SubstTemplateTemplateParmPackStorage;
@@ -45,6 +47,7 @@
 protected:
   enum Kind {
     Overloaded,
+    Assumed, // defined in DeclarationName.h
     SubstTemplateTemplateParm,
     SubstTemplateTemplateParmPack
   };
@@ -77,6 +80,12 @@
              : nullptr;
   }
 
+  AssumedTemplateStorage *getAsAssumedTemplateName()  {
+    return Bits.Kind == Assumed
+             ? reinterpret_cast<AssumedTemplateStorage *>(this)
+             : nullptr;
+  }
+
   SubstTemplateTemplateParmStorage *getAsSubstTemplateTemplateParm() {
     return Bits.Kind == SubstTemplateTemplateParm
              ? reinterpret_cast<SubstTemplateTemplateParmStorage *>(this)
@@ -193,6 +202,10 @@
     /// A set of overloaded template declarations.
     OverloadedTemplate,
 
+    /// An unqualified-id that has been assumed to name a function template
+    /// that will be found by ADL.
+    AssumedTemplate,
+
     /// A qualified template name, where the qualification is kept
     /// to describe the source code as written.
     QualifiedTemplate,
@@ -214,6 +227,7 @@
   TemplateName() = default;
   explicit TemplateName(TemplateDecl *Template);
   explicit TemplateName(OverloadedTemplateStorage *Storage);
+  explicit TemplateName(AssumedTemplateStorage *Storage);
   explicit TemplateName(SubstTemplateTemplateParmStorage *Storage);
   explicit TemplateName(SubstTemplateTemplateParmPackStorage *Storage);
   explicit TemplateName(QualifiedTemplateName *Qual);
@@ -235,7 +249,7 @@
   TemplateDecl *getAsTemplateDecl() const;
 
   /// Retrieve the underlying, overloaded function template
-  // declarations that this template name refers to, if known.
+  /// declarations that this template name refers to, if known.
   ///
   /// \returns The set of overloaded function templates that this template
   /// name refers to, if known. If the template name does not refer to a
@@ -243,6 +257,10 @@
   /// refers to a single template, returns NULL.
   OverloadedTemplateStorage *getAsOverloadedTemplate() const;
 
+  /// Retrieve information on a name that has been assumed to be a
+  /// template-name in order to permit a call via ADL.
+  AssumedTemplateStorage *getAsAssumedTemplateName() const;
+
   /// Retrieve the substituted template template parameter, if
   /// known.
   ///
@@ -319,6 +337,8 @@
 /// into a diagnostic with <<.
 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
                                     TemplateName N);
+const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+                                    TemplateName N);
 
 /// A structure for storing the information associated with a
 /// substituted template template parameter.
diff --git a/linux-x64/clang/include/clang/AST/TextNodeDumper.h b/linux-x64/clang/include/clang/AST/TextNodeDumper.h
index d164cc1..a26b060 100644
--- a/linux-x64/clang/include/clang/AST/TextNodeDumper.h
+++ b/linux-x64/clang/include/clang/AST/TextNodeDumper.h
@@ -146,6 +146,8 @@
 
   const comments::CommandTraits *Traits;
 
+  const ASTContext *Context;
+
   const char *getCommandName(unsigned CommandID);
 
 public:
@@ -228,6 +230,7 @@
   void VisitLabelStmt(const LabelStmt *Node);
   void VisitGotoStmt(const GotoStmt *Node);
   void VisitCaseStmt(const CaseStmt *Node);
+  void VisitConstantExpr(const ConstantExpr *Node);
   void VisitCallExpr(const CallExpr *Node);
   void VisitCastExpr(const CastExpr *Node);
   void VisitImplicitCastExpr(const ImplicitCastExpr *Node);
@@ -307,6 +310,7 @@
   void VisitImportDecl(const ImportDecl *D);
   void VisitPragmaCommentDecl(const PragmaCommentDecl *D);
   void VisitPragmaDetectMismatchDecl(const PragmaDetectMismatchDecl *D);
+  void VisitOMPExecutableDirective(const OMPExecutableDirective *D);
   void VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D);
   void VisitOMPRequiresDecl(const OMPRequiresDecl *D);
   void VisitOMPCapturedExprDecl(const OMPCapturedExprDecl *D);
@@ -343,9 +347,6 @@
   void VisitObjCPropertyDecl(const ObjCPropertyDecl *D);
   void VisitObjCPropertyImplDecl(const ObjCPropertyImplDecl *D);
   void VisitBlockDecl(const BlockDecl *D);
-
-private:
-  void dumpCXXTemporary(const CXXTemporary *Temporary);
 };
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/AST/Type.h b/linux-x64/clang/include/clang/AST/Type.h
index 5e1df2f..00a2b76 100644
--- a/linux-x64/clang/include/clang/AST/Type.h
+++ b/linux-x64/clang/include/clang/AST/Type.h
@@ -317,6 +317,11 @@
     qs.removeObjCLifetime();
     return qs;
   }
+  Qualifiers withoutAddressSpace() const {
+    Qualifiers qs = *this;
+    qs.removeAddressSpace();
+    return qs;
+  }
 
   bool hasObjCLifetime() const { return Mask & LifetimeMask; }
   ObjCLifetime getObjCLifetime() const {
@@ -455,21 +460,25 @@
     Mask |= qs.Mask;
   }
 
-  /// Returns true if this address space is a superset of the other one.
+  /// Returns true if address space A is equal to or a superset of B.
   /// OpenCL v2.0 defines conversion rules (OpenCLC v2.0 s6.5.5) and notion of
   /// overlapping address spaces.
   /// CL1.1 or CL1.2:
   ///   every address space is a superset of itself.
   /// CL2.0 adds:
   ///   __generic is a superset of any address space except for __constant.
+  static bool isAddressSpaceSupersetOf(LangAS A, LangAS B) {
+    // Address spaces must match exactly.
+    return A == B ||
+           // Otherwise in OpenCLC v2.0 s6.5.5: every address space except
+           // for __constant can be used as __generic.
+           (A == LangAS::opencl_generic && B != LangAS::opencl_constant);
+  }
+
+  /// Returns true if the address space in these qualifiers is equal to or
+  /// a superset of the address space in the argument qualifiers.
   bool isAddressSpaceSupersetOf(Qualifiers other) const {
-    return
-        // Address spaces must match exactly.
-        getAddressSpace() == other.getAddressSpace() ||
-        // Otherwise in OpenCLC v2.0 s6.5.5: every address space except
-        // for __constant can be used as __generic.
-        (getAddressSpace() == LangAS::opencl_generic &&
-         other.getAddressSpace() != LangAS::opencl_constant);
+    return isAddressSpaceSupersetOf(getAddressSpace(), other.getAddressSpace());
   }
 
   /// Determines if these qualifiers compatibly include another set.
@@ -1406,7 +1415,7 @@
 ///
 /// Types, once created, are immutable.
 ///
-class Type : public ExtQualsTypeCommonBase {
+class alignas(8) Type : public ExtQualsTypeCommonBase {
 public:
   enum TypeClass {
 #define TYPE(Class, Base) Class,
@@ -1808,7 +1817,9 @@
   friend class ASTWriter;
 
   Type(const Type &) = delete;
+  Type(Type &&) = delete;
   Type &operator=(const Type &) = delete;
+  Type &operator=(Type &&) = delete;
 
   TypeClass getTypeClass() const { return static_cast<TypeClass>(TypeBits.TC); }
 
@@ -1955,6 +1966,7 @@
   bool isLValueReferenceType() const;
   bool isRValueReferenceType() const;
   bool isFunctionPointerType() const;
+  bool isFunctionReferenceType() const;
   bool isMemberPointerType() const;
   bool isMemberFunctionPointerType() const;
   bool isMemberDataPointerType() const;
@@ -3848,6 +3860,7 @@
     case EST_MSAny:
     case EST_BasicNoexcept:
     case EST_Unparsed:
+    case EST_NoThrow:
       return {0, 0, 0};
 
     case EST_Dynamic:
@@ -4177,6 +4190,41 @@
   static bool classof(const Type *T) { return T->getTypeClass() == Typedef; }
 };
 
+/// Sugar type that represents a type that was qualified by a qualifier written
+/// as a macro invocation.
+class MacroQualifiedType : public Type {
+  friend class ASTContext; // ASTContext creates these.
+
+  QualType UnderlyingTy;
+  const IdentifierInfo *MacroII;
+
+  MacroQualifiedType(QualType UnderlyingTy, QualType CanonTy,
+                     const IdentifierInfo *MacroII)
+      : Type(MacroQualified, CanonTy, UnderlyingTy->isDependentType(),
+             UnderlyingTy->isInstantiationDependentType(),
+             UnderlyingTy->isVariablyModifiedType(),
+             UnderlyingTy->containsUnexpandedParameterPack()),
+        UnderlyingTy(UnderlyingTy), MacroII(MacroII) {
+    assert(isa<AttributedType>(UnderlyingTy) &&
+           "Expected a macro qualified type to only wrap attributed types.");
+  }
+
+public:
+  const IdentifierInfo *getMacroIdentifier() const { return MacroII; }
+  QualType getUnderlyingType() const { return UnderlyingTy; }
+
+  /// Return this attributed type's modified type with no qualifiers attached to
+  /// it.
+  QualType getModifiedType() const;
+
+  bool isSugared() const { return true; }
+  QualType desugar() const;
+
+  static bool classof(const Type *T) {
+    return T->getTypeClass() == MacroQualified;
+  }
+};
+
 /// Represents a `typeof` (or __typeof__) expression (a GCC extension).
 class TypeOfExprType : public Type {
   Expr *TOExpr;
@@ -4755,9 +4803,9 @@
   friend class ASTContext; // ASTContext creates these
 
   AutoType(QualType DeducedAsType, AutoTypeKeyword Keyword,
-           bool IsDeducedAsDependent)
+           bool IsDeducedAsDependent, bool IsDeducedAsPack)
       : DeducedType(Auto, DeducedAsType, IsDeducedAsDependent,
-                    IsDeducedAsDependent, /*ContainsPack=*/false) {
+                    IsDeducedAsDependent, IsDeducedAsPack) {
     AutoTypeBits.Keyword = (unsigned)Keyword;
   }
 
@@ -4771,14 +4819,16 @@
   }
 
   void Profile(llvm::FoldingSetNodeID &ID) {
-    Profile(ID, getDeducedType(), getKeyword(), isDependentType());
+    Profile(ID, getDeducedType(), getKeyword(), isDependentType(),
+            containsUnexpandedParameterPack());
   }
 
   static void Profile(llvm::FoldingSetNodeID &ID, QualType Deduced,
-                      AutoTypeKeyword Keyword, bool IsDependent) {
+                      AutoTypeKeyword Keyword, bool IsDependent, bool IsPack) {
     ID.AddPointer(Deduced.getAsOpaquePtr());
     ID.AddInteger((unsigned)Keyword);
     ID.AddBoolean(IsDependent);
+    ID.AddBoolean(IsPack);
   }
 
   static bool classof(const Type *T) {
@@ -6329,6 +6379,13 @@
     return false;
 }
 
+inline bool Type::isFunctionReferenceType() const {
+  if (const auto *T = getAs<ReferenceType>())
+    return T->getPointeeType()->isFunctionType();
+  else
+    return false;
+}
+
 inline bool Type::isMemberPointerType() const {
   return isa<MemberPointerType>(CanonicalType);
 }
@@ -6798,6 +6855,8 @@
       Ty = P->desugar().getTypePtr();
     else if (const auto *A = dyn_cast<AdjustedType>(Ty))
       Ty = A->desugar().getTypePtr();
+    else if (const auto *M = dyn_cast<MacroQualifiedType>(Ty))
+      Ty = M->desugar().getTypePtr();
     else
       break;
   }
diff --git a/linux-x64/clang/include/clang/AST/TypeLoc.h b/linux-x64/clang/include/clang/AST/TypeLoc.h
index 3b3eb1b..40d17f9 100644
--- a/linux-x64/clang/include/clang/AST/TypeLoc.h
+++ b/linux-x64/clang/include/clang/AST/TypeLoc.h
@@ -173,6 +173,9 @@
 
   TypeLoc IgnoreParens() const;
 
+  /// Strips MacroDefinitionTypeLocs from a type location.
+  TypeLoc IgnoreMacroDefinitions() const;
+
   /// Find a type with the location of an explicit type qualifier.
   ///
   /// The result, if non-null, will be one of:
@@ -1080,6 +1083,39 @@
   }
 };
 
+struct MacroQualifiedLocInfo {
+  SourceLocation ExpansionLoc;
+};
+
+class MacroQualifiedTypeLoc
+    : public ConcreteTypeLoc<UnqualTypeLoc, MacroQualifiedTypeLoc,
+                             MacroQualifiedType, MacroQualifiedLocInfo> {
+public:
+  void initializeLocal(ASTContext &Context, SourceLocation Loc) {
+    setExpansionLoc(Loc);
+  }
+
+  TypeLoc getInnerLoc() const { return getInnerTypeLoc(); }
+
+  const IdentifierInfo *getMacroIdentifier() const {
+    return getTypePtr()->getMacroIdentifier();
+  }
+
+  SourceLocation getExpansionLoc() const {
+    return this->getLocalData()->ExpansionLoc;
+  }
+
+  void setExpansionLoc(SourceLocation Loc) {
+    this->getLocalData()->ExpansionLoc = Loc;
+  }
+
+  QualType getInnerType() const { return getTypePtr()->getUnderlyingType(); }
+
+  SourceRange getLocalSourceRange() const {
+    return getInnerLoc().getLocalSourceRange();
+  }
+};
+
 struct ParenLocInfo {
   SourceLocation LParenLoc;
   SourceLocation RParenLoc;
@@ -2289,6 +2325,8 @@
       Cur = ETL.getNamedTypeLoc();
     else if (auto ATL = Cur.getAs<AdjustedTypeLoc>())
       Cur = ATL.getOriginalLoc();
+    else if (auto MQL = Cur.getAs<MacroQualifiedTypeLoc>())
+      Cur = MQL.getInnerLoc();
     else
       break;
   }
diff --git a/linux-x64/clang/include/clang/AST/TypeNodes.def b/linux-x64/clang/include/clang/AST/TypeNodes.def
index d1e4300..58a5f88 100644
--- a/linux-x64/clang/include/clang/AST/TypeNodes.def
+++ b/linux-x64/clang/include/clang/AST/TypeNodes.def
@@ -82,6 +82,7 @@
 DEPENDENT_TYPE(UnresolvedUsing, Type)
 NON_CANONICAL_TYPE(Paren, Type)
 NON_CANONICAL_TYPE(Typedef, Type)
+NON_CANONICAL_TYPE(MacroQualified, Type)
 NON_CANONICAL_TYPE(Adjusted, Type)
 NON_CANONICAL_TYPE(Decayed, AdjustedType)
 NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TypeOfExpr, Type)
diff --git a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h
index 4c62ea0..063d821 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h
@@ -56,10 +56,12 @@
 #include "clang/AST/ExprCXX.h"
 #include "clang/AST/ExprObjC.h"
 #include "clang/AST/NestedNameSpecifier.h"
+#include "clang/AST/OpenMPClause.h"
 #include "clang/AST/OperationKinds.h"
 #include "clang/AST/Stmt.h"
 #include "clang/AST/StmtCXX.h"
 #include "clang/AST/StmtObjC.h"
+#include "clang/AST/StmtOpenMP.h"
 #include "clang/AST/TemplateBase.h"
 #include "clang/AST/TemplateName.h"
 #include "clang/AST/Type.h"
@@ -1136,6 +1138,17 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl>
     cxxConversionDecl;
 
+/// Matches user-defined and implicitly generated deduction guide.
+///
+/// Example matches the deduction guide.
+/// \code
+///   template<typename T>
+///   class X { X(int) };
+///   X(int) -> X<int>;
+/// \endcode
+extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXDeductionGuideDecl>
+    cxxDeductionGuideDecl;
+
 /// Matches variable declarations.
 ///
 /// Note: this does not match declarations of member variables, which are
@@ -2158,6 +2171,10 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNullPtrLiteralExpr>
     cxxNullPtrLiteralExpr;
 
+/// Matches GNU __builtin_choose_expr.
+extern const internal::VariadicDynCastAllOfMatcher<Stmt, ChooseExpr>
+    chooseExpr;
+
 /// Matches GNU __null expression.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GNUNullExpr>
     gnuNullExpr;
@@ -2486,6 +2503,9 @@
 /// \endcode
 /// unaryExprOrTypeTraitExpr(ofKind(UETT_SizeOf))
 ///   matches \c sizeof(x)
+///
+/// If the matcher is use from clang-query, UnaryExprOrTypeTrait parameter
+/// should be passed as a quoted string. e.g., ofKind("UETT_SizeOf").
 AST_MATCHER_P(UnaryExprOrTypeTraitExpr, ofKind, UnaryExprOrTypeTrait, Kind) {
   return Node.getKind() == Kind;
 }
@@ -2929,10 +2949,59 @@
   return InnerMatcher.matches(TypeDecl, Finder, Builder);
 }
 
+/// Returns true when the Objective-C method declaration is a class method.
+///
+/// Example
+/// matcher = objcMethodDecl(isClassMethod())
+/// matches
+/// \code
+/// @interface I + (void)foo; @end
+/// \endcode
+/// but not
+/// \code
+/// @interface I - (void)bar; @end
+/// \endcode
+AST_MATCHER(ObjCMethodDecl, isClassMethod) {
+  return Node.isClassMethod();
+}
+
+/// Returns true when the Objective-C method declaration is an instance method.
+///
+/// Example
+/// matcher = objcMethodDecl(isInstanceMethod())
+/// matches
+/// \code
+/// @interface I - (void)bar; @end
+/// \endcode
+/// but not
+/// \code
+/// @interface I + (void)foo; @end
+/// \endcode
+AST_MATCHER(ObjCMethodDecl, isInstanceMethod) {
+  return Node.isInstanceMethod();
+}
+
+/// Returns true when the Objective-C message is sent to a class.
+///
+/// Example
+/// matcher = objcMessageExpr(isClassMessage())
+/// matches
+/// \code
+///   [NSString stringWithFormat:@"format"];
+/// \endcode
+/// but not
+/// \code
+///   NSString *x = @"hello";
+///   [x containsString:@"h"];
+/// \endcode
+AST_MATCHER(ObjCMessageExpr, isClassMessage) {
+  return Node.isClassMessage();
+}
+
 /// Returns true when the Objective-C message is sent to an instance.
 ///
 /// Example
-/// matcher = objcMessagaeExpr(isInstanceMessage())
+/// matcher = objcMessageExpr(isInstanceMessage())
 /// matches
 /// \code
 ///   NSString *x = @"hello";
@@ -4477,6 +4546,9 @@
 /// \code
 ///   int *p = 0;
 /// \endcode
+///
+/// If the matcher is use from clang-query, CastKind parameter
+/// should be passed as a quoted string. e.g., ofKind("CK_NullToPointer").
 AST_MATCHER_P(CastExpr, hasCastKind, CastKind, Kind) {
   return Node.getCastKind() == Kind;
 }
@@ -6093,26 +6165,63 @@
   return Node.isDelegatingConstructor();
 }
 
-/// Matches constructor and conversion declarations that are marked with
-/// the explicit keyword.
+/// Matches constructor, conversion function, and deduction guide declarations
+/// that have an explicit specifier if this explicit specifier is resolved to
+/// true.
 ///
 /// Given
 /// \code
+///   template<bool b>
 ///   struct S {
 ///     S(int); // #1
 ///     explicit S(double); // #2
 ///     operator int(); // #3
 ///     explicit operator bool(); // #4
+///     explicit(false) S(bool) // # 7
+///     explicit(true) S(char) // # 8
+///     explicit(b) S(S) // # 9
 ///   };
+///   S(int) -> S<true> // #5
+///   explicit S(double) -> S<false> // #6
 /// \endcode
-/// cxxConstructorDecl(isExplicit()) will match #2, but not #1.
+/// cxxConstructorDecl(isExplicit()) will match #2 and #8, but not #1, #7 or #9.
 /// cxxConversionDecl(isExplicit()) will match #4, but not #3.
-AST_POLYMORPHIC_MATCHER(isExplicit,
-                        AST_POLYMORPHIC_SUPPORTED_TYPES(CXXConstructorDecl,
-                                                        CXXConversionDecl)) {
+/// cxxDeductionGuideDecl(isExplicit()) will match #6, but not #5.
+AST_POLYMORPHIC_MATCHER(isExplicit, AST_POLYMORPHIC_SUPPORTED_TYPES(
+                                        CXXConstructorDecl, CXXConversionDecl,
+                                        CXXDeductionGuideDecl)) {
   return Node.isExplicit();
 }
 
+/// Matches the expression in an explicit specifier if present in the given
+/// declaration.
+///
+/// Given
+/// \code
+///   template<bool b>
+///   struct S {
+///     S(int); // #1
+///     explicit S(double); // #2
+///     operator int(); // #3
+///     explicit operator bool(); // #4
+///     explicit(false) S(bool) // # 7
+///     explicit(true) S(char) // # 8
+///     explicit(b) S(S) // # 9
+///   };
+///   S(int) -> S<true> // #5
+///   explicit S(double) -> S<false> // #6
+/// \endcode
+/// cxxConstructorDecl(hasExplicitSpecifier(constantExpr())) will match #7, #8 and #9, but not #1 or #2.
+/// cxxConversionDecl(hasExplicitSpecifier(constantExpr())) will not match #3 or #4.
+/// cxxDeductionGuideDecl(hasExplicitSpecifier(constantExpr())) will not match #5 or #6.
+AST_MATCHER_P(FunctionDecl, hasExplicitSpecifier, internal::Matcher<Expr>,
+              InnerMatcher) {
+  ExplicitSpecifier ES = ExplicitSpecifier::getFromDecl(&Node);
+  if (!ES.getExpr())
+    return false;
+  return InnerMatcher.matches(*ES.getExpr(), Finder, Builder);
+}
+
 /// Matches function and namespace declarations that are marked with
 /// the inline keyword.
 ///
@@ -6151,6 +6260,29 @@
   return Node.isAnonymousNamespace();
 }
 
+/// Matches declarations in the namespace `std`, but not in nested namespaces.
+///
+/// Given
+/// \code
+///   class vector {};
+///   namespace foo {
+///     class vector {};
+///     namespace std {
+///       class vector {};
+///     }
+///   }
+///   namespace std {
+///     inline namespace __1 {
+///       class vector {}; // #1
+///       namespace experimental {
+///         class vector {};
+///       }
+///     }
+///   }
+/// \endcode
+/// cxxRecordDecl(hasName("vector"), isInStdNamespace()) will match only #1.
+AST_MATCHER(Decl, isInStdNamespace) { return Node.isInStdNamespace(); }
+
 /// If the given case statement does not use the GNU case range
 /// extension, matches the constant given in the statement.
 ///
@@ -6175,7 +6307,7 @@
 ///   __attribute__((device)) void f() { ... }
 /// \endcode
 /// decl(hasAttr(clang::attr::CUDADevice)) matches the function declaration of
-/// f. If the matcher is use from clang-query, attr::Kind parameter should be
+/// f. If the matcher is used from clang-query, attr::Kind parameter should be
 /// passed as a quoted string. e.g., hasAttr("attr::CUDADevice").
 AST_MATCHER_P(Decl, hasAttr, attr::Kind, AttrKind) {
   for (const auto *Attr : Node.attrs()) {
@@ -6326,8 +6458,8 @@
 /// cxxNewExpr(hasArraySize(intgerLiteral(equals(10))))
 ///   matches the expression 'new MyClass[10]'.
 AST_MATCHER_P(CXXNewExpr, hasArraySize, internal::Matcher<Expr>, InnerMatcher) {
-  return Node.isArray() &&
-    InnerMatcher.matches(*Node.getArraySize(), Finder, Builder);
+  return Node.isArray() && *Node.getArraySize() &&
+         InnerMatcher.matches(**Node.getArraySize(), Finder, Builder);
 }
 
 /// Matches a class declaration that is defined.
@@ -6365,6 +6497,203 @@
   return false;
 }
 
+/// Matches expressions that match InnerMatcher that are possibly wrapped in an
+/// elidable constructor.
+///
+/// In C++17 copy elidable constructors are no longer being
+/// generated in the AST as it is not permitted by the standard. They are
+/// however part of the AST in C++14 and earlier. Therefore, to write a matcher
+/// that works in all language modes, the matcher has to skip elidable
+/// constructor AST nodes if they appear in the AST. This matcher can be used to
+/// skip those elidable constructors.
+///
+/// Given
+///
+/// \code
+/// struct H {};
+/// H G();
+/// void f() {
+///   H D = G();
+/// }
+/// \endcode
+///
+/// ``varDecl(hasInitializer(any(
+///       ignoringElidableConstructorCall(callExpr()),
+///       exprWithCleanups(ignoringElidableConstructorCall(callExpr()))))``
+/// matches ``H D = G()``
+AST_MATCHER_P(Expr, ignoringElidableConstructorCall,
+              ast_matchers::internal::Matcher<Expr>, InnerMatcher) {
+  if (const auto *CtorExpr = dyn_cast<CXXConstructExpr>(&Node)) {
+    if (CtorExpr->isElidable()) {
+      if (const auto *MaterializeTemp =
+              dyn_cast<MaterializeTemporaryExpr>(CtorExpr->getArg(0))) {
+        return InnerMatcher.matches(*MaterializeTemp->GetTemporaryExpr(),
+                                    Finder, Builder);
+      }
+    }
+  }
+  return InnerMatcher.matches(Node, Finder, Builder);
+}
+
+//----------------------------------------------------------------------------//
+// OpenMP handling.
+//----------------------------------------------------------------------------//
+
+/// Matches any ``#pragma omp`` executable directive.
+///
+/// Given
+///
+/// \code
+///   #pragma omp parallel
+///   #pragma omp parallel default(none)
+///   #pragma omp taskyield
+/// \endcode
+///
+/// ``ompExecutableDirective()`` matches ``omp parallel``,
+/// ``omp parallel default(none)`` and ``omp taskyield``.
+extern const internal::VariadicDynCastAllOfMatcher<Stmt, OMPExecutableDirective>
+    ompExecutableDirective;
+
+/// Matches standalone OpenMP directives,
+/// i.e., directives that can't have a structured block.
+///
+/// Given
+///
+/// \code
+///   #pragma omp parallel
+///   {}
+///   #pragma omp taskyield
+/// \endcode
+///
+/// ``ompExecutableDirective(isStandaloneDirective()))`` matches
+/// ``omp taskyield``.
+AST_MATCHER(OMPExecutableDirective, isStandaloneDirective) {
+  return Node.isStandaloneDirective();
+}
+
+/// Matches the Stmt AST node that is marked as being the structured-block
+/// of an OpenMP executable directive.
+///
+/// Given
+///
+/// \code
+///    #pragma omp parallel
+///    {}
+/// \endcode
+///
+/// ``stmt(isOMPStructuredBlock()))`` matches ``{}``.
+AST_MATCHER(Stmt, isOMPStructuredBlock) { return Node.isOMPStructuredBlock(); }
+
+/// Matches the structured-block of the OpenMP executable directive
+///
+/// Prerequisite: the executable directive must not be standalone directive.
+/// If it is, it will never match.
+///
+/// Given
+///
+/// \code
+///    #pragma omp parallel
+///    ;
+///    #pragma omp parallel
+///    {}
+/// \endcode
+///
+/// ``ompExecutableDirective(hasStructuredBlock(nullStmt()))`` will match ``;``
+AST_MATCHER_P(OMPExecutableDirective, hasStructuredBlock,
+              internal::Matcher<Stmt>, InnerMatcher) {
+  if (Node.isStandaloneDirective())
+    return false; // Standalone directives have no structured blocks.
+  return InnerMatcher.matches(*Node.getStructuredBlock(), Finder, Builder);
+}
+
+/// Matches any clause in an OpenMP directive.
+///
+/// Given
+///
+/// \code
+///   #pragma omp parallel
+///   #pragma omp parallel default(none)
+/// \endcode
+///
+/// ``ompExecutableDirective(hasAnyClause(anything()))`` matches
+/// ``omp parallel default(none)``.
+AST_MATCHER_P(OMPExecutableDirective, hasAnyClause,
+              internal::Matcher<OMPClause>, InnerMatcher) {
+  ArrayRef<OMPClause *> Clauses = Node.clauses();
+  return matchesFirstInPointerRange(InnerMatcher, Clauses.begin(),
+                                    Clauses.end(), Finder, Builder);
+}
+
+/// Matches OpenMP ``default`` clause.
+///
+/// Given
+///
+/// \code
+///   #pragma omp parallel default(none)
+///   #pragma omp parallel default(shared)
+///   #pragma omp parallel
+/// \endcode
+///
+/// ``ompDefaultClause()`` matches ``default(none)`` and ``default(shared)``.
+extern const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPDefaultClause>
+    ompDefaultClause;
+
+/// Matches if the OpenMP ``default`` clause has ``none`` kind specified.
+///
+/// Given
+///
+/// \code
+///   #pragma omp parallel
+///   #pragma omp parallel default(none)
+///   #pragma omp parallel default(shared)
+/// \endcode
+///
+/// ``ompDefaultClause(isNoneKind())`` matches only ``default(none)``.
+AST_MATCHER(OMPDefaultClause, isNoneKind) {
+  return Node.getDefaultKind() == OMPC_DEFAULT_none;
+}
+
+/// Matches if the OpenMP ``default`` clause has ``shared`` kind specified.
+///
+/// Given
+///
+/// \code
+///   #pragma omp parallel
+///   #pragma omp parallel default(none)
+///   #pragma omp parallel default(shared)
+/// \endcode
+///
+/// ``ompDefaultClause(isSharedKind())`` matches only ``default(shared)``.
+AST_MATCHER(OMPDefaultClause, isSharedKind) {
+  return Node.getDefaultKind() == OMPC_DEFAULT_shared;
+}
+
+/// Matches if the OpenMP directive is allowed to contain the specified OpenMP
+/// clause kind.
+///
+/// Given
+///
+/// \code
+///   #pragma omp parallel
+///   #pragma omp parallel for
+///   #pragma omp          for
+/// \endcode
+///
+/// `ompExecutableDirective(isAllowedToContainClause(OMPC_default))`` matches
+/// ``omp parallel`` and ``omp parallel for``.
+///
+/// If the matcher is use from clang-query, ``OpenMPClauseKind`` parameter
+/// should be passed as a quoted string. e.g.,
+/// ``isAllowedToContainClauseKind("OMPC_default").``
+AST_MATCHER_P(OMPExecutableDirective, isAllowedToContainClauseKind,
+              OpenMPClauseKind, CKind) {
+  return isAllowedClauseForDirective(Node.getDirectiveKind(), CKind);
+}
+
+//----------------------------------------------------------------------------//
+// End OpenMP handling.
+//----------------------------------------------------------------------------//
+
 } // namespace ast_matchers
 } // namespace clang
 
diff --git a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
index 6a71d41..b1bb0bf 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
@@ -950,15 +950,6 @@
 /// all nodes, as all nodes have ancestors.
 class ASTMatchFinder {
 public:
-  /// Defines how we descend a level in the AST when we pass
-  /// through expressions.
-  enum TraversalKind {
-    /// Will traverse any child nodes.
-    TK_AsIs,
-
-    /// Will not traverse implicit casts and parentheses.
-    TK_IgnoreImplicitCastsAndParentheses
-  };
 
   /// Defines how bindings are processed on recursive matches.
   enum BindKind {
@@ -989,11 +980,9 @@
                                   BoundNodesTreeBuilder *Builder) = 0;
 
   template <typename T>
-  bool matchesChildOf(const T &Node,
-                      const DynTypedMatcher &Matcher,
+  bool matchesChildOf(const T &Node, const DynTypedMatcher &Matcher,
                       BoundNodesTreeBuilder *Builder,
-                      TraversalKind Traverse,
-                      BindKind Bind) {
+                      ast_type_traits::TraversalKind Traverse, BindKind Bind) {
     static_assert(std::is_base_of<Decl, T>::value ||
                   std::is_base_of<Stmt, T>::value ||
                   std::is_base_of<NestedNameSpecifier, T>::value ||
@@ -1042,7 +1031,7 @@
   virtual bool matchesChildOf(const ast_type_traits::DynTypedNode &Node,
                               const DynTypedMatcher &Matcher,
                               BoundNodesTreeBuilder *Builder,
-                              TraversalKind Traverse,
+                              ast_type_traits::TraversalKind Traverse,
                               BindKind Bind) = 0;
 
   virtual bool matchesDescendantOf(const ast_type_traits::DynTypedNode &Node,
@@ -1290,7 +1279,7 @@
   bool matches(const T &Node, ASTMatchFinder *Finder,
                BoundNodesTreeBuilder *Builder) const override {
     return Finder->matchesChildOf(Node, this->InnerMatcher, Builder,
-                                  ASTMatchFinder::TK_AsIs,
+                                  ast_type_traits::TraversalKind::TK_AsIs,
                                   ASTMatchFinder::BK_First);
   }
 };
@@ -1313,7 +1302,7 @@
                BoundNodesTreeBuilder* Builder) const override {
     return Finder->matchesChildOf(
         Node, this->InnerMatcher, Builder,
-        ASTMatchFinder::TK_IgnoreImplicitCastsAndParentheses,
+        ast_type_traits::TraversalKind::TK_IgnoreImplicitCastsAndParentheses,
         ASTMatchFinder::BK_All);
   }
 };
@@ -1547,8 +1536,7 @@
 /// given matchers, if SourceT can be dynamically casted into TargetT.
 ///
 /// For example:
-///   const VariadicDynCastAllOfMatcher<
-///       Decl, CXXRecordDecl> record;
+///   const VariadicDynCastAllOfMatcher<Decl, CXXRecordDecl> record;
 /// Creates a functor record(...) that creates a Matcher<Decl> given
 /// a variable number of arguments of type Matcher<CXXRecordDecl>.
 /// The returned matcher matches if the given Decl can by dynamically
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h b/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h
index 0015b0d..061c981 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h
@@ -18,6 +18,7 @@
 #include "llvm/ADT/DepthFirstIterator.h"
 #include "llvm/ADT/GraphTraits.h"
 #include "llvm/ADT/iterator.h"
+#include "llvm/Support/GenericIteratedDominanceFrontier.h"
 #include "llvm/Support/GenericDomTree.h"
 #include "llvm/Support/GenericDomTreeConstruction.h"
 #include "llvm/Support/raw_ostream.h"
@@ -36,132 +37,319 @@
 
 using DomTreeNode = llvm::DomTreeNodeBase<CFGBlock>;
 
-/// Concrete subclass of DominatorTreeBase for Clang
-/// This class implements the dominators tree functionality given a Clang CFG.
-///
-class DominatorTree : public ManagedAnalysis {
+/// Dominator tree builder for Clang's CFG based on llvm::DominatorTreeBase.
+template <bool IsPostDom>
+class CFGDominatorTreeImpl : public ManagedAnalysis {
   virtual void anchor();
 
 public:
-  llvm::DomTreeBase<CFGBlock> *DT;
+  using DominatorTreeBase = llvm::DominatorTreeBase<CFGBlock, IsPostDom>;
 
-  DominatorTree() {
-    DT = new llvm::DomTreeBase<CFGBlock>();
+  CFGDominatorTreeImpl() = default;
+
+  CFGDominatorTreeImpl(CFG *cfg) {
+    buildDominatorTree(cfg);
   }
 
-  ~DominatorTree() override { delete DT; }
+  ~CFGDominatorTreeImpl() override = default;
 
-  llvm::DomTreeBase<CFGBlock>& getBase() { return *DT; }
+  DominatorTreeBase &getBase() { return DT; }
 
-  /// This method returns the root CFGBlock of the dominators tree.
+  CFG *getCFG() { return cfg; }
+
+  /// \returns the root CFGBlock of the dominators tree.
   CFGBlock *getRoot() const {
-    return DT->getRoot();
+    return DT.getRoot();
   }
 
-  /// This method returns the root DomTreeNode, which is the wrapper
-  /// for CFGBlock.
-  DomTreeNode *getRootNode() const {
-    return DT->getRootNode();
+  /// \returns the root DomTreeNode, which is the wrapper for CFGBlock.
+  DomTreeNode *getRootNode() {
+    return DT.getRootNode();
   }
 
-  /// This method compares two dominator trees.
-  /// The method returns false if the other dominator tree matches this
-  /// dominator tree, otherwise returns true.
-  bool compare(DominatorTree &Other) const {
+  /// Compares two dominator trees.
+  /// \returns false if the other dominator tree matches this dominator tree,
+  /// false otherwise.
+  bool compare(CFGDominatorTreeImpl &Other) const {
     DomTreeNode *R = getRootNode();
     DomTreeNode *OtherR = Other.getRootNode();
 
     if (!R || !OtherR || R->getBlock() != OtherR->getBlock())
       return true;
 
-    if (DT->compare(Other.getBase()))
+    if (DT.compare(Other.getBase()))
       return true;
 
     return false;
   }
 
-  /// This method builds the dominator tree for a given CFG
-  /// The CFG information is passed via AnalysisDeclContext
-  void buildDominatorTree(AnalysisDeclContext &AC) {
-    cfg = AC.getCFG();
-    DT->recalculate(*cfg);
+  /// Builds the dominator tree for a given CFG.
+  void buildDominatorTree(CFG *cfg) {
+    assert(cfg);
+    this->cfg = cfg;
+    DT.recalculate(*cfg);
   }
 
-  /// This method dumps immediate dominators for each block,
-  /// mainly used for debug purposes.
+  /// Dumps immediate dominators for each block.
   void dump() {
-    llvm::errs() << "Immediate dominance tree (Node#,IDom#):\n";
+    llvm::errs() << "Immediate " << (IsPostDom ? "post " : "")
+                 << "dominance tree (Node#,IDom#):\n";
     for (CFG::const_iterator I = cfg->begin(),
         E = cfg->end(); I != E; ++I) {
-      if(DT->getNode(*I)->getIDom())
+
+      assert(*I &&
+             "LLVM's Dominator tree builder uses nullpointers to signify the "
+             "virtual root!");
+
+      DomTreeNode *IDom = DT.getNode(*I)->getIDom();
+      if (IDom && IDom->getBlock())
         llvm::errs() << "(" << (*I)->getBlockID()
                      << ","
-                     << DT->getNode(*I)->getIDom()->getBlock()->getBlockID()
+                     << IDom->getBlock()->getBlockID()
                      << ")\n";
-      else llvm::errs() << "(" << (*I)->getBlockID()
-                        << "," << (*I)->getBlockID() << ")\n";
+      else {
+        bool IsEntryBlock = *I == &(*I)->getParent()->getEntry();
+        bool IsExitBlock = *I == &(*I)->getParent()->getExit();
+
+        bool IsDomTreeRoot = !IDom && !IsPostDom && IsEntryBlock;
+        bool IsPostDomTreeRoot =
+            IDom && !IDom->getBlock() && IsPostDom && IsExitBlock;
+
+        assert((IsDomTreeRoot || IsPostDomTreeRoot) &&
+               "If the immediate dominator node is nullptr, the CFG block "
+               "should be the exit point (since it's the root of the dominator "
+               "tree), or if the CFG block it refers to is a nullpointer, it "
+               "must be the entry block (since it's the root of the post "
+               "dominator tree)");
+
+        (void)IsDomTreeRoot;
+        (void)IsPostDomTreeRoot;
+
+        llvm::errs() << "(" << (*I)->getBlockID()
+                     << "," << (*I)->getBlockID() << ")\n";
+      }
     }
   }
 
-  /// This method tests if one CFGBlock dominates the other.
-  /// The method return true if A dominates B, false otherwise.
+  /// Tests whether \p A dominates \p B.
   /// Note a block always dominates itself.
   bool dominates(const CFGBlock *A, const CFGBlock *B) const {
-    return DT->dominates(A, B);
+    return DT.dominates(A, B);
   }
 
-  /// This method tests if one CFGBlock properly dominates the other.
-  /// The method return true if A properly dominates B, false otherwise.
+  /// Tests whether \p A properly dominates \p B.
+  /// \returns false if \p A is the same block as \p B, otherwise whether A
+  /// dominates B.
   bool properlyDominates(const CFGBlock *A, const CFGBlock *B) const {
-    return DT->properlyDominates(A, B);
+    return DT.properlyDominates(A, B);
   }
 
-  /// This method finds the nearest common dominator CFG block
-  /// for CFG block A and B. If there is no such block then return NULL.
+  /// \returns the nearest common dominator CFG block for CFG block \p A and \p
+  /// B. If there is no such block then return NULL.
   CFGBlock *findNearestCommonDominator(CFGBlock *A, CFGBlock *B) {
-    return DT->findNearestCommonDominator(A, B);
+    return DT.findNearestCommonDominator(A, B);
   }
 
   const CFGBlock *findNearestCommonDominator(const CFGBlock *A,
                                              const CFGBlock *B) {
-    return DT->findNearestCommonDominator(A, B);
+    return DT.findNearestCommonDominator(A, B);
   }
 
-  /// This method is used to update the dominator
-  /// tree information when a node's immediate dominator changes.
+  /// Update the dominator tree information when a node's immediate dominator
+  /// changes.
   void changeImmediateDominator(CFGBlock *N, CFGBlock *NewIDom) {
-    DT->changeImmediateDominator(N, NewIDom);
+    DT.changeImmediateDominator(N, NewIDom);
   }
 
-  /// This method tests if the given CFGBlock can be reachable from root.
-  /// Returns true if reachable, false otherwise.
+  /// Tests whether \p A is reachable from the entry block.
   bool isReachableFromEntry(const CFGBlock *A) {
-    return DT->isReachableFromEntry(A);
+    return DT.isReachableFromEntry(A);
   }
 
-  /// This method releases the memory held by the dominator tree.
+  /// Releases the memory held by the dominator tree.
   virtual void releaseMemory() {
-    DT->releaseMemory();
+    DT.releaseMemory();
   }
 
-  /// This method converts the dominator tree to human readable form.
+  /// Converts the dominator tree to human readable form.
   virtual void print(raw_ostream &OS, const llvm::Module* M= nullptr) const {
-    DT->print(OS);
+    DT.print(OS);
   }
 
 private:
   CFG *cfg;
+  DominatorTreeBase DT;
+};
+
+using CFGDomTree = CFGDominatorTreeImpl</*IsPostDom*/ false>;
+using CFGPostDomTree = CFGDominatorTreeImpl</*IsPostDom*/ true>;
+
+template<> void CFGDominatorTreeImpl<true>::anchor();
+template<> void CFGDominatorTreeImpl<false>::anchor();
+
+} // end of namespace clang
+
+namespace llvm {
+namespace IDFCalculatorDetail {
+
+/// Specialize ChildrenGetterTy to skip nullpointer successors.
+template <bool IsPostDom>
+struct ChildrenGetterTy<clang::CFGBlock, IsPostDom> {
+  using NodeRef = typename GraphTraits<clang::CFGBlock>::NodeRef;
+  using ChildrenTy = SmallVector<NodeRef, 8>;
+
+  ChildrenTy get(const NodeRef &N) {
+    using OrderedNodeTy =
+        typename IDFCalculatorBase<clang::CFGBlock, IsPostDom>::OrderedNodeTy;
+
+    auto Children = children<OrderedNodeTy>(N);
+    ChildrenTy Ret{Children.begin(), Children.end()};
+    Ret.erase(std::remove(Ret.begin(), Ret.end(), nullptr), Ret.end());
+    return Ret;
+  }
+};
+
+} // end of namespace IDFCalculatorDetail
+} // end of namespace llvm
+
+namespace clang {
+
+class ControlDependencyCalculator : public ManagedAnalysis {
+  using IDFCalculator = llvm::IDFCalculatorBase<CFGBlock, /*IsPostDom=*/true>;
+  using CFGBlockVector = llvm::SmallVector<CFGBlock *, 4>;
+  using CFGBlockSet = llvm::SmallPtrSet<CFGBlock *, 4>;
+
+  CFGPostDomTree PostDomTree;
+  IDFCalculator IDFCalc;
+
+  llvm::DenseMap<CFGBlock *, CFGBlockVector> ControlDepenencyMap;
+
+public:
+  ControlDependencyCalculator(CFG *cfg)
+    : PostDomTree(cfg), IDFCalc(PostDomTree.getBase()) {}
+
+  const CFGPostDomTree &getCFGPostDomTree() const { return PostDomTree; }
+
+  // Lazily retrieves the set of control dependencies to \p A.
+  const CFGBlockVector &getControlDependencies(CFGBlock *A) {
+    auto It = ControlDepenencyMap.find(A);
+    if (It == ControlDepenencyMap.end()) {
+      CFGBlockSet DefiningBlock = {A};
+      IDFCalc.setDefiningBlocks(DefiningBlock);
+
+      CFGBlockVector ControlDependencies;
+      IDFCalc.calculate(ControlDependencies);
+
+      It = ControlDepenencyMap.insert({A, ControlDependencies}).first;
+    }
+
+    assert(It != ControlDepenencyMap.end());
+    return It->second;
+  }
+
+  /// Whether \p A is control dependent on \p B.
+  bool isControlDependent(CFGBlock *A, CFGBlock *B) {
+    return llvm::is_contained(getControlDependencies(A), B);
+  }
+
+  // Dumps immediate control dependencies for each block.
+  LLVM_DUMP_METHOD void dump() {
+    CFG *cfg = PostDomTree.getCFG();
+    llvm::errs() << "Control dependencies (Node#,Dependency#):\n";
+    for (CFGBlock *BB : *cfg) {
+
+      assert(BB &&
+             "LLVM's Dominator tree builder uses nullpointers to signify the "
+             "virtual root!");
+
+      for (CFGBlock *isControlDependency : getControlDependencies(BB))
+        llvm::errs() << "(" << BB->getBlockID()
+                     << ","
+                     << isControlDependency->getBlockID()
+                     << ")\n";
+    }
+  }
 };
 
 } // namespace clang
 
+namespace llvm {
+
+/// Clang's CFG contains nullpointers for unreachable succesors, e.g. when an
+/// if statement's condition is always false, it's 'then' branch is represented
+/// with a nullptr. This however will result in a nullpointer derefernece for
+/// dominator tree calculation.
+///
+/// To circumvent this, let's just crudely specialize the children getters
+/// used in LLVM's dominator tree builder.
+namespace DomTreeBuilder {
+
+using ClangCFGDomChildrenGetter =
+SemiNCAInfo<clang::CFGDomTree::DominatorTreeBase>::ChildrenGetter<
+                                                             /*Inverse=*/false>;
+
+template <>
+template <>
+inline ClangCFGDomChildrenGetter::ResultTy ClangCFGDomChildrenGetter::Get(
+    clang::CFGBlock *N, std::integral_constant<bool, /*Inverse=*/false>) {
+  auto RChildren = reverse(children<NodePtr>(N));
+  ResultTy Ret(RChildren.begin(), RChildren.end());
+  Ret.erase(std::remove(Ret.begin(), Ret.end(), nullptr), Ret.end());
+  return Ret;
+}
+
+using ClangCFGDomReverseChildrenGetter =
+SemiNCAInfo<clang::CFGDomTree::DominatorTreeBase>::ChildrenGetter<
+                                                              /*Inverse=*/true>;
+
+template <>
+template <>
+inline ClangCFGDomReverseChildrenGetter::ResultTy
+ClangCFGDomReverseChildrenGetter::Get(
+    clang::CFGBlock *N, std::integral_constant<bool, /*Inverse=*/true>) {
+  auto IChildren = inverse_children<NodePtr>(N);
+  ResultTy Ret(IChildren.begin(), IChildren.end());
+  Ret.erase(std::remove(Ret.begin(), Ret.end(), nullptr), Ret.end());
+  return Ret;
+}
+
+using ClangCFGPostDomChildrenGetter =
+SemiNCAInfo<clang::CFGPostDomTree::DominatorTreeBase>::ChildrenGetter<
+                                                             /*Inverse=*/false>;
+
+template <>
+template <>
+inline ClangCFGPostDomChildrenGetter::ResultTy
+ClangCFGPostDomChildrenGetter::Get(
+    clang::CFGBlock *N, std::integral_constant<bool, /*Inverse=*/false>) {
+  auto RChildren = reverse(children<NodePtr>(N));
+  ResultTy Ret(RChildren.begin(), RChildren.end());
+  Ret.erase(std::remove(Ret.begin(), Ret.end(), nullptr), Ret.end());
+  return Ret;
+}
+
+using ClangCFGPostDomReverseChildrenGetter =
+SemiNCAInfo<clang::CFGPostDomTree::DominatorTreeBase>::ChildrenGetter<
+                                                              /*Inverse=*/true>;
+
+template <>
+template <>
+inline ClangCFGPostDomReverseChildrenGetter::ResultTy
+ClangCFGPostDomReverseChildrenGetter::Get(
+    clang::CFGBlock *N, std::integral_constant<bool, /*Inverse=*/true>) {
+  auto IChildren = inverse_children<NodePtr>(N);
+  ResultTy Ret(IChildren.begin(), IChildren.end());
+  Ret.erase(std::remove(Ret.begin(), Ret.end(), nullptr), Ret.end());
+  return Ret;
+}
+
+} // end of namespace DomTreeBuilder
+
 //===-------------------------------------
 /// DominatorTree GraphTraits specialization so the DominatorTree can be
 /// iterable by generic graph iterators.
 ///
-namespace llvm {
-
-template <> struct GraphTraits< ::clang::DomTreeNode* > {
+template <> struct GraphTraits<clang::DomTreeNode *> {
   using NodeRef = ::clang::DomTreeNode *;
   using ChildIteratorType = ::clang::DomTreeNode::iterator;
 
@@ -181,17 +369,17 @@
   }
 };
 
-template <> struct GraphTraits< ::clang::DominatorTree* >
-    : public GraphTraits< ::clang::DomTreeNode* > {
-  static NodeRef getEntryNode(::clang::DominatorTree *DT) {
+template <> struct GraphTraits<clang::CFGDomTree *>
+    : public GraphTraits<clang::DomTreeNode *> {
+  static NodeRef getEntryNode(clang::CFGDomTree *DT) {
     return DT->getRootNode();
   }
 
-  static nodes_iterator nodes_begin(::clang::DominatorTree *N) {
+  static nodes_iterator nodes_begin(clang::CFGDomTree *N) {
     return nodes_iterator(df_begin(getEntryNode(N)));
   }
 
-  static nodes_iterator nodes_end(::clang::DominatorTree *N) {
+  static nodes_iterator nodes_end(clang::CFGDomTree *N) {
     return nodes_iterator(df_end(getEntryNode(N)));
   }
 };
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h
index 2f0c68c..18659aa 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h
@@ -119,19 +119,22 @@
   /// \param Kind -- the capability's name parameter (role, mutex, etc).
   /// \param Expected -- the kind of lock expected.
   /// \param Received -- the kind of lock received.
-  /// \param Loc -- The SourceLocation of the Unlock.
+  /// \param LocLocked -- The SourceLocation of the Lock.
+  /// \param LocUnlock -- The SourceLocation of the Unlock.
   virtual void handleIncorrectUnlockKind(StringRef Kind, Name LockName,
                                          LockKind Expected, LockKind Received,
-                                         SourceLocation Loc) {}
+                                         SourceLocation LocLocked,
+                                         SourceLocation LocUnlock) {}
 
   /// Warn about lock function calls for locks which are already held.
   /// \param Kind -- the capability's name parameter (role, mutex, etc).
   /// \param LockName -- A StringRef name for the lock expression, to be printed
   /// in the error message.
   /// \param LocLocked -- The location of the first lock expression.
-  /// \param Loc -- The location of the second lock expression.
+  /// \param LocDoubleLock -- The location of the second lock expression.
   virtual void handleDoubleLock(StringRef Kind, Name LockName,
-                                SourceLocation LocLocked, SourceLocation Loc) {}
+                                SourceLocation LocLocked,
+                                SourceLocation LocDoubleLock) {}
 
   /// Warn about situations where a mutex is sometimes held and sometimes not.
   /// The three situations are:
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h
index ca2193d..c26d2ed 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h
@@ -1604,7 +1604,7 @@
 
   /// Return the index of BB, or Predecessors.size if BB is not a predecessor.
   unsigned findPredecessorIndex(const BasicBlock *BB) const {
-    auto I = std::find(Predecessors.cbegin(), Predecessors.cend(), BB);
+    auto I = llvm::find(Predecessors, BB);
     return std::distance(Predecessors.cbegin(), I);
   }
 
diff --git a/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h b/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h
index d42432a..1961d57 100644
--- a/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h
+++ b/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h
@@ -274,11 +274,17 @@
   virtual void Profile(llvm::FoldingSetNodeID &ID) = 0;
 
   void dumpStack(
-      raw_ostream &OS, StringRef Indent = {}, const char *NL = "\n",
-      const char *Sep = "",
+      raw_ostream &Out, const char *NL = "\n",
       std::function<void(const LocationContext *)> printMoreInfoPerContext =
           [](const LocationContext *) {}) const;
-  void dumpStack() const;
+
+  void printJson(
+      raw_ostream &Out, const char *NL = "\n", unsigned int Space = 0,
+      bool IsDot = false,
+      std::function<void(const LocationContext *)> printMoreInfoPerContext =
+          [](const LocationContext *) {}) const;
+
+  void dump() const;
 
 public:
   static void ProfileCommon(llvm::FoldingSetNodeID &ID,
@@ -459,6 +465,7 @@
                              bool addCXXNewAllocator = true,
                              bool addRichCXXConstructors = true,
                              bool markElidedCXXConstructors = true,
+                             bool addVirtualBaseBranches = true,
                              CodeInjector *injector = nullptr);
 
   AnalysisDeclContext *getContext(const Decl *D);
diff --git a/linux-x64/clang/include/clang/Analysis/AnyCall.h b/linux-x64/clang/include/clang/Analysis/AnyCall.h
index a9098ad..97a94d2 100644
--- a/linux-x64/clang/include/clang/Analysis/AnyCall.h
+++ b/linux-x64/clang/include/clang/Analysis/AnyCall.h
@@ -173,6 +173,7 @@
     case Deallocator:
       return cast<FunctionDecl>(D)->getReturnType();
     }
+    llvm_unreachable("Unknown AnyCall::Kind");
   }
 
   /// \returns Function identifier if it is a named declaration,
diff --git a/linux-x64/clang/include/clang/Analysis/CFG.h b/linux-x64/clang/include/clang/Analysis/CFG.h
index dc83a99..277b229 100644
--- a/linux-x64/clang/include/clang/Analysis/CFG.h
+++ b/linux-x64/clang/include/clang/Analysis/CFG.h
@@ -494,33 +494,51 @@
 
 /// Represents CFGBlock terminator statement.
 ///
-/// TemporaryDtorsBranch bit is set to true if the terminator marks a branch
-/// in control flow of destructors of temporaries. In this case terminator
-/// statement is the same statement that branches control flow in evaluation
-/// of matching full expression.
 class CFGTerminator {
-  llvm::PointerIntPair<Stmt *, 1> Data;
+public:
+  enum Kind {
+    /// A branch that corresponds to a statement in the code,
+    /// such as an if-statement.
+    StmtBranch,
+    /// A branch in control flow of destructors of temporaries. In this case
+    /// terminator statement is the same statement that branches control flow
+    /// in evaluation of matching full expression.
+    TemporaryDtorsBranch,
+    /// A shortcut around virtual base initializers. It gets taken when
+    /// virtual base classes have already been initialized by the constructor
+    /// of the most derived class while we're in the base class.
+    VirtualBaseBranch,
+
+    /// Number of different kinds, for sanity checks. We subtract 1 so that
+    /// to keep receiving compiler warnings when we don't cover all enum values
+    /// in a switch.
+    NumKindsMinusOne = VirtualBaseBranch
+  };
+
+private:
+  static constexpr int KindBits = 2;
+  static_assert((1 << KindBits) > NumKindsMinusOne,
+                "Not enough room for kind!");
+  llvm::PointerIntPair<Stmt *, KindBits> Data;
 
 public:
-  CFGTerminator() = default;
-  CFGTerminator(Stmt *S, bool TemporaryDtorsBranch = false)
-      : Data(S, TemporaryDtorsBranch) {}
+  CFGTerminator() { assert(!isValid()); }
+  CFGTerminator(Stmt *S, Kind K = StmtBranch) : Data(S, K) {}
 
+  bool isValid() const { return Data.getOpaqueValue() != nullptr; }
   Stmt *getStmt() { return Data.getPointer(); }
   const Stmt *getStmt() const { return Data.getPointer(); }
+  Kind getKind() const { return static_cast<Kind>(Data.getInt()); }
 
-  bool isTemporaryDtorsBranch() const { return Data.getInt(); }
-
-  operator Stmt *() { return getStmt(); }
-  operator const Stmt *() const { return getStmt(); }
-
-  Stmt *operator->() { return getStmt(); }
-  const Stmt *operator->() const { return getStmt(); }
-
-  Stmt &operator*() { return *getStmt(); }
-  const Stmt &operator*() const { return *getStmt(); }
-
-  explicit operator bool() const { return getStmt(); }
+  bool isStmtBranch() const {
+    return getKind() == StmtBranch;
+  }
+  bool isTemporaryDtorsBranch() const {
+    return getKind() == TemporaryDtorsBranch;
+  }
+  bool isVirtualBaseBranch() const {
+    return getKind() == VirtualBaseBranch;
+  }
 };
 
 /// Represents a single basic block in a source-level CFG.
@@ -541,11 +559,12 @@
 /// Successors: the order in the set of successors is NOT arbitrary.  We
 ///  currently have the following orderings based on the terminator:
 ///
-///     Terminator       Successor Ordering
-///  -----------------------------------------------------
-///       if            Then Block;  Else Block
-///     ? operator      LHS expression;  RHS expression
-///     &&, ||          expression that uses result of && or ||, RHS
+///     Terminator     |   Successor Ordering
+///  ------------------|------------------------------------
+///       if           |  Then Block;  Else Block
+///     ? operator     |  LHS expression;  RHS expression
+///     logical and/or |  expression that consumes the op, RHS
+///     vbase inits    |  already handled by the most derived class; not yet
 ///
 /// But note that any of that may be NULL in case of optimized-out edges.
 class CFGBlock {
@@ -836,8 +855,18 @@
   void setLoopTarget(const Stmt *loopTarget) { LoopTarget = loopTarget; }
   void setHasNoReturnElement() { HasNoReturnElement = true; }
 
-  CFGTerminator getTerminator() { return Terminator; }
-  const CFGTerminator getTerminator() const { return Terminator; }
+  CFGTerminator getTerminator() const { return Terminator; }
+
+  Stmt *getTerminatorStmt() { return Terminator.getStmt(); }
+  const Stmt *getTerminatorStmt() const { return Terminator.getStmt(); }
+
+  /// \returns the last (\c rbegin()) condition, e.g. observe the following code
+  /// snippet:
+  ///   if (A && B && C)
+  /// A block would be created for \c A, \c B, and \c C. For the latter,
+  /// \c getTerminatorStmt() would retrieve the entire condition, rather than
+  /// C itself, while this method would only return C.
+  const Expr *getLastCondition() const;
 
   Stmt *getTerminatorCondition(bool StripParens = true);
 
@@ -861,7 +890,11 @@
   void dump(const CFG *cfg, const LangOptions &LO, bool ShowColors = false) const;
   void print(raw_ostream &OS, const CFG* cfg, const LangOptions &LO,
              bool ShowColors) const;
+
   void printTerminator(raw_ostream &OS, const LangOptions &LO) const;
+  void printTerminatorJson(raw_ostream &Out, const LangOptions &LO,
+                           bool AddQuotes) const;
+  
   void printAsOperand(raw_ostream &OS, bool /*PrintType*/) {
     OS << "BB#" << getBlockID();
   }
@@ -1026,6 +1059,7 @@
     bool AddCXXDefaultInitExprInCtors = false;
     bool AddRichCXXConstructors = false;
     bool MarkElidedCXXConstructors = false;
+    bool AddVirtualBaseBranches = false;
 
     BuildOptions() = default;
 
@@ -1172,6 +1206,12 @@
   /// implementation needs such an interface.
   unsigned size() const { return NumBlockIDs; }
 
+  /// Returns true if the CFG has no branches. Usually it boils down to the CFG
+  /// having exactly three blocks (entry, the actual code, exit), but sometimes
+  /// more blocks appear due to having control flow that can be fully
+  /// resolved in compile time.
+  bool isLinear() const;
+
   //===--------------------------------------------------------------------===//
   // CFG Debugging: Pretty-Printing and Visualization.
   //===--------------------------------------------------------------------===//
@@ -1245,6 +1285,9 @@
   static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
 };
 
+template <> struct GraphTraits<clang::CFGBlock>
+    : GraphTraits<clang::CFGBlock *> {};
+
 template <> struct GraphTraits< const ::clang::CFGBlock *> {
   using NodeRef = const ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_succ_iterator;
@@ -1254,6 +1297,9 @@
   static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
 };
 
+template <> struct GraphTraits<const clang::CFGBlock>
+    : GraphTraits<clang::CFGBlock *> {};
+
 template <> struct GraphTraits<Inverse< ::clang::CFGBlock *>> {
   using NodeRef = ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_pred_iterator;
@@ -1266,6 +1312,9 @@
   static ChildIteratorType child_end(NodeRef N) { return N->pred_end(); }
 };
 
+template <> struct GraphTraits<Inverse<clang::CFGBlock>>
+    : GraphTraits<clang::CFGBlock *> {};
+
 template <> struct GraphTraits<Inverse<const ::clang::CFGBlock *>> {
   using NodeRef = const ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_pred_iterator;
@@ -1278,6 +1327,9 @@
   static ChildIteratorType child_end(NodeRef N) { return N->pred_end(); }
 };
 
+template <> struct GraphTraits<const Inverse<clang::CFGBlock>>
+    : GraphTraits<clang::CFGBlock *> {};
+
 // Traits for: CFG
 
 template <> struct GraphTraits< ::clang::CFG* >
diff --git a/linux-x64/clang/include/clang/Analysis/ProgramPoint.h b/linux-x64/clang/include/clang/Analysis/ProgramPoint.h
index 623f5dc..546224b 100644
--- a/linux-x64/clang/include/clang/Analysis/ProgramPoint.h
+++ b/linux-x64/clang/include/clang/Analysis/ProgramPoint.h
@@ -42,12 +42,11 @@
   virtual ~ProgramPointTag();
   virtual StringRef getTagDescription() const = 0;
 
-protected:
   /// Used to implement 'isKind' in subclasses.
-  const void *getTagKind() { return TagKind; }
+  const void *getTagKind() const { return TagKind; }
 
 private:
-  const void *TagKind;
+  const void *const TagKind;
 };
 
 class SimpleProgramPointTag : public ProgramPointTag {
@@ -214,7 +213,7 @@
     ID.AddPointer(getTag());
   }
 
-  void print(StringRef CR, llvm::raw_ostream &Out) const;
+  void printJson(llvm::raw_ostream &Out, const char *NL = "\n") const;
 
   LLVM_DUMP_METHOD void dump() const;
 
@@ -258,7 +257,7 @@
   }
 
   const Stmt *getTerminator() const {
-    return getBlock()->getTerminator();
+    return getBlock()->getTerminatorStmt();
   }
 
 private:
diff --git a/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc b/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc
index bd8bdcc..fd88032 100644
--- a/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc
+++ b/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc
@@ -120,10 +120,10 @@
     .Case("flatten", 1)
     .Case("format", 1)
     .Case("format_arg", 1)
-    .Case("fortify_stdlib", 1)
     .Case("gnu_inline", 1)
     .Case("guarded_by", 1)
     .Case("guarded_var", 1)
+    .Case("hip_pinned_shadow", 1)
     .Case("hot", 1)
     .Case("ibaction", 1)
     .Case("iboutlet", 1)
@@ -137,6 +137,7 @@
     .Case("lock_returned", 1)
     .Case("lockable", 1)
     .Case("locks_excluded", 1)
+    .Case("mig_server_routine", 1)
     .Case("ms_abi", 1)
     .Case("interrupt", true && (T.getArch() == llvm::Triple::msp430) ? 1 : 0)
     .Case("ms_struct", 1)
@@ -209,6 +210,7 @@
     .Case("objc_bridge", 1)
     .Case("objc_bridge_mutable", 1)
     .Case("objc_bridge_related", 1)
+    .Case("objc_class_stub", 1)
     .Case("objc_designated_initializer", 1)
     .Case("objc_exception", 1)
     .Case("objc_protocol_requires_explicit_implementation", 1)
@@ -245,6 +247,9 @@
     .Case("param_typestate", 1)
     .Case("pascal", 1)
     .Case("pass_object_size", 1)
+    .Case("pass_dynamic_object_size", 1)
+    .Case("pass_object_size", 1)
+    .Case("pass_dynamic_object_size", 1)
     .Case("pcs", 1)
     .Case("preserve_all", 1)
     .Case("preserve_most", 1)
@@ -362,9 +367,11 @@
     .Case("dllexport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
     .Case("dllimport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
     .Case("deprecated", 1)
-    .Case("empty_bases", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft) ? 1 : 0)
-    .Case("layout_version", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft) ? 1 : 0)
-    .Case("novtable", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft) ? 1 : 0)
+    .Case("empty_bases", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && ( Target.getCXXABI().isMicrosoft() ) ? 1 : 0)
+    .Case("__hip_pinned_shadow__", 1)
+    .Case("layout_version", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && ( Target.getCXXABI().isMicrosoft() ) ? 1 : 0)
+    .Case("allocator", 1)
+    .Case("novtable", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && ( Target.getCXXABI().isMicrosoft() ) ? 1 : 0)
     .Case("naked", 1)
     .Case("noalias", 1)
     .Case("noinline", 1)
@@ -421,6 +428,7 @@
     .Case("deprecated", LangOpts.CPlusPlus11 ? 201309 : 0)
     .Case("fallthrough", LangOpts.CPlusPlus11 ? 201603 : 0)
     .Case("fallthrough", LangOpts.CPlusPlus11 ? 201603 : 0)
+    .Case("no_unique_address", true && ( Target.getCXXABI().isItaniumFamily() ) && LangOpts.CPlusPlus11 ? 201803 : 0)
     .Case("maybe_unused", LangOpts.CPlusPlus11 ? 201603 : 0)
     .Case("unused", LangOpts.CPlusPlus11 ? 201603 : 0)
     .Case("nodiscard", LangOpts.CPlusPlus11 ? 201603 : 0)
@@ -475,7 +483,6 @@
     .Case("external_source_symbol", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("fallthrough", LangOpts.CPlusPlus11 ? 201603 : 0)
     .Case("flag_enum", LangOpts.CPlusPlus11 ? 1 : 0)
-    .Case("fortify_stdlib", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("guarded_var", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("ibaction", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("iboutlet", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -484,6 +491,7 @@
     .Case("internal_linkage", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("lto_visibility_public", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("lifetimebound", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("mig_server_routine", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("minsize", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("min_vector_width", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("ns_consumed", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -513,6 +521,7 @@
     .Case("objc_bridge", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("objc_bridge_mutable", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("objc_bridge_related", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("objc_class_stub", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("objc_designated_initializer", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("objc_exception", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("objc_protocol_requires_explicit_implementation", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -545,6 +554,9 @@
     .Case("param_typestate", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("pascal", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("pass_object_size", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("pass_dynamic_object_size", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("pass_object_size", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("pass_dynamic_object_size", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("preserve_all", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("preserve_most", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("pt_guarded_var", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -753,12 +765,12 @@
     .Case("exclude_from_explicit_instantiation", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("external_source_symbol", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("flag_enum", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
-    .Case("fortify_stdlib", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("ibaction", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("iboutlet", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("iboutletcollection", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("internal_linkage", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("lto_visibility_public", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("mig_server_routine", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("minsize", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("min_vector_width", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("ns_consumed", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
@@ -787,6 +799,7 @@
     .Case("objc_bridge", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("objc_bridge_mutable", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("objc_bridge_related", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("objc_class_stub", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("objc_designated_initializer", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("objc_exception", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("objc_protocol_requires_explicit_implementation", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
@@ -818,6 +831,9 @@
     .Case("ownership_takes", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("pascal", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("pass_object_size", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("pass_dynamic_object_size", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("pass_object_size", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("pass_dynamic_object_size", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("preserve_all", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("preserve_most", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("speculative_load_hardening", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
diff --git a/linux-x64/clang/include/clang/Basic/AttrList.inc b/linux-x64/clang/include/clang/Basic/AttrList.inc
index 156a2a4..32746bb 100644
--- a/linux-x64/clang/include/clang/Basic/AttrList.inc
+++ b/linux-x64/clang/include/clang/Basic/AttrList.inc
@@ -159,10 +159,10 @@
 INHERITABLE_ATTR(Flatten)
 INHERITABLE_ATTR(Format)
 INHERITABLE_ATTR(FormatArg)
-INHERITABLE_ATTR(FortifyStdLib)
 INHERITABLE_ATTR(GNUInline)
 INHERITABLE_ATTR(GuardedBy)
 INHERITABLE_ATTR(GuardedVar)
+INHERITABLE_ATTR(HIPPinnedShadow)
 INHERITABLE_ATTR(Hot)
 INHERITABLE_ATTR(IBAction)
 INHERITABLE_ATTR(IBOutlet)
@@ -173,6 +173,8 @@
 INHERITABLE_ATTR(LayoutVersion)
 INHERITABLE_ATTR(LockReturned)
 INHERITABLE_ATTR(LocksExcluded)
+INHERITABLE_ATTR(MIGServerRoutine)
+INHERITABLE_ATTR(MSAllocator)
 INHERITABLE_ATTR(MSInheritance)
 INHERITABLE_ATTR(MSNoVTable)
 INHERITABLE_ATTR(MSP430Interrupt)
@@ -207,7 +209,9 @@
 INHERITABLE_ATTR(NoStackProtector)
 INHERITABLE_ATTR(NoThreadSafetyAnalysis)
 INHERITABLE_ATTR(NoThrow)
+INHERITABLE_ATTR(NoUniqueAddress)
 INHERITABLE_ATTR(NotTailCalled)
+INHERITABLE_ATTR(OMPAllocateDecl)
 INHERITABLE_ATTR(OMPCaptureNoInit)
 INHERITABLE_ATTR(OMPDeclareTargetDecl)
 INHERITABLE_ATTR(OMPThreadPrivateDecl)
@@ -302,6 +306,7 @@
 ATTR(OMPDeclareSimdDecl)
 ATTR(OMPReferencedVar)
 ATTR(ObjCBoxable)
+ATTR(ObjCClassStub)
 ATTR(ObjCDesignatedInitializer)
 ATTR(ObjCNonLazyClass)
 ATTR(ObjCRuntimeName)
diff --git a/linux-x64/clang/include/clang/Basic/AttrSubMatchRulesList.inc b/linux-x64/clang/include/clang/Basic/AttrSubMatchRulesList.inc
index 2004ded..b21c9d8 100644
--- a/linux-x64/clang/include/clang/Basic/AttrSubMatchRulesList.inc
+++ b/linux-x64/clang/include/clang/Basic/AttrSubMatchRulesList.inc
@@ -21,6 +21,7 @@
 ATTR_MATCH_SUB_RULE(SubjectMatchRule_function_is_member, "function(is_member)", 0, attr::SubjectMatchRule_function, 0)
 ATTR_MATCH_RULE(SubjectMatchRule_namespace, "namespace", 0)
 ATTR_MATCH_RULE(SubjectMatchRule_objc_category, "objc_category", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_objc_implementation, "objc_implementation", 0)
 ATTR_MATCH_RULE(SubjectMatchRule_objc_interface, "objc_interface", 0)
 ATTR_MATCH_RULE(SubjectMatchRule_objc_method, "objc_method", 0)
 ATTR_MATCH_SUB_RULE(SubjectMatchRule_objc_method_is_instance, "objc_method(is_instance)", 0, attr::SubjectMatchRule_objc_method, 0)
diff --git a/linux-x64/clang/include/clang/Basic/Builtins.def b/linux-x64/clang/include/clang/Basic/Builtins.def
index 2e8c6d9..984e607 100644
--- a/linux-x64/clang/include/clang/Basic/Builtins.def
+++ b/linux-x64/clang/include/clang/Basic/Builtins.def
@@ -50,8 +50,10 @@
 //  L   -> long (e.g. Li for 'long int', Ld for 'long double')
 //  LL  -> long long (e.g. LLi for 'long long int', LLd for __float128)
 //  LLL -> __int128_t (e.g. LLLi)
-//  W   -> int64_t
+//  Z   -> int32_t (require a native 32-bit integer type on the target)
+//  W   -> int64_t (require a native 64-bit integer type on the target)
 //  N   -> 'int' size if target is LP64, 'L' otherwise.
+//  O   -> long for OpenCL targets, long long otherwise.
 //  S   -> signed
 //  U   -> unsigned
 //  I   -> Required to constant fold to an integer constant expression.
@@ -418,25 +420,27 @@
 BUILTIN(__builtin_clrsbl , "iLi" , "nc")
 BUILTIN(__builtin_clrsbll, "iLLi", "nc")
 
-// FIXME: These type signatures are not correct for targets with int != 32-bits
-// or with ULL != 64-bits.
+// The following builtins rely on that char == 8 bits, short == 16 bits and that
+// there exists native types on the target that are 32- and 64-bits wide, unless
+// these conditions are fulfilled these builtins will operate on a not intended
+// bitwidth.
 BUILTIN(__builtin_bswap16, "UsUs", "nc")
-BUILTIN(__builtin_bswap32, "UiUi", "nc")
-BUILTIN(__builtin_bswap64, "ULLiULLi", "nc")
+BUILTIN(__builtin_bswap32, "UZiUZi", "nc")
+BUILTIN(__builtin_bswap64, "UWiUWi", "nc")
 
 BUILTIN(__builtin_bitreverse8, "UcUc", "nc")
 BUILTIN(__builtin_bitreverse16, "UsUs", "nc")
-BUILTIN(__builtin_bitreverse32, "UiUi", "nc")
-BUILTIN(__builtin_bitreverse64, "ULLiULLi", "nc")
+BUILTIN(__builtin_bitreverse32, "UZiUZi", "nc")
+BUILTIN(__builtin_bitreverse64, "UWiUWi", "nc")
 
 BUILTIN(__builtin_rotateleft8, "UcUcUc", "nc")
 BUILTIN(__builtin_rotateleft16, "UsUsUs", "nc")
-BUILTIN(__builtin_rotateleft32, "UiUiUi", "nc")
-BUILTIN(__builtin_rotateleft64, "ULLiULLiULLi", "nc")
+BUILTIN(__builtin_rotateleft32, "UZiUZiUZi", "nc")
+BUILTIN(__builtin_rotateleft64, "UWiUWiUWi", "nc")
 BUILTIN(__builtin_rotateright8, "UcUcUc", "nc")
 BUILTIN(__builtin_rotateright16, "UsUsUs", "nc")
-BUILTIN(__builtin_rotateright32, "UiUiUi", "nc")
-BUILTIN(__builtin_rotateright64, "ULLiULLiULLi", "nc")
+BUILTIN(__builtin_rotateright32, "UZiUZiUZi", "nc")
+BUILTIN(__builtin_rotateright64, "UWiUWiWi", "nc")
 
 // Random GCC builtins
 BUILTIN(__builtin_constant_p, "i.", "nctu")
@@ -448,7 +452,7 @@
 BUILTIN(__builtin_va_copy, "vAA", "n")
 BUILTIN(__builtin_stdarg_start, "vA.", "n")
 BUILTIN(__builtin_assume_aligned, "v*vC*z.", "nc")
-BUILTIN(__builtin_bcmp, "iv*v*z", "Fn")
+BUILTIN(__builtin_bcmp, "ivC*vC*z", "Fn")
 BUILTIN(__builtin_bcopy, "vv*v*z", "n")
 BUILTIN(__builtin_bzero, "vv*z", "nF")
 BUILTIN(__builtin_fprintf, "iP*cC*.", "Fp:1:")
@@ -500,6 +504,7 @@
 BUILTIN(__builtin_vsnprintf, "ic*zcC*a", "nFP:2:")
 BUILTIN(__builtin_thread_pointer, "v*", "nc")
 BUILTIN(__builtin_launder, "v*v*", "nt")
+LANGBUILTIN(__builtin_is_constant_evaluated, "b", "n", CXX_LANG)
 
 // GCC exception builtins
 BUILTIN(__builtin_eh_return, "vzv*", "r") // FIXME: Takes intptr_t, not size_t!
@@ -820,6 +825,14 @@
 LANGBUILTIN(_interlockedbittestandset_acq,   "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_interlockedbittestandset_nf,    "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_interlockedbittestandset_rel,   "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load8,   "ccCD*",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load16,  "ssCD*",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load32,  "iiCD*",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load64,  "LLiLLiCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store8,  "vcD*c",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store16, "vsD*s",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store32, "viD*i",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store64, "vLLiD*LLi", "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__noop,           "i.",  "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__lzcnt16, "UsUs",    "nc", ALL_MS_LANGUAGES)
 LANGBUILTIN(__lzcnt,   "UiUi",    "nc", ALL_MS_LANGUAGES)
@@ -831,12 +844,12 @@
 LANGBUILTIN(_rotl8,  "UcUcUc",    "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_rotl16, "UsUsUc",    "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_rotl,   "UiUii",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(_lrotl,  "UNiUNii",   "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_lrotl,  "ULiULii",   "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_rotl64, "UWiUWii",   "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_rotr8,  "UcUcUc",    "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_rotr16, "UsUsUc",    "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_rotr,   "UiUii",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(_lrotr,  "UNiUNii",   "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_lrotr,  "ULiULii",   "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_rotr64, "UWiUWii",   "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__va_start,       "vc**.", "nt", ALL_MS_LANGUAGES)
 LANGBUILTIN(__fastfail, "vUi",    "nr", ALL_MS_LANGUAGES)
@@ -953,6 +966,7 @@
 LIBBUILTIN(index, "c*cC*i",       "f",     "strings.h", ALL_GNU_LANGUAGES)
 LIBBUILTIN(rindex, "c*cC*i",      "f",     "strings.h", ALL_GNU_LANGUAGES)
 LIBBUILTIN(bzero, "vv*z",         "f",     "strings.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(bcmp, "ivC*vC*z",      "f",     "strings.h", ALL_GNU_LANGUAGES)
 // In some systems str[n]casejmp is a macro that expands to _str[n]icmp.
 // We undefine then here to avoid wrong name.
 #undef strcasecmp
@@ -1435,6 +1449,7 @@
 BUILTIN(__builtin_operator_delete, "vv*", "tn")
 BUILTIN(__builtin_char_memchr, "c*cC*iz", "n")
 BUILTIN(__builtin_dump_struct, "ivC*v*", "tn")
+BUILTIN(__builtin_preserve_access_index, "vC*vC*", "nU")
 
 // Safestack builtins
 BUILTIN(__builtin___get_unsafe_stack_start, "v*", "Fn")
@@ -1463,6 +1478,7 @@
 BUILTIN(__builtin_coro_end, "bv*Ib", "n")
 BUILTIN(__builtin_coro_suspend, "cIb", "n")
 BUILTIN(__builtin_coro_param, "bv*v*", "n")
+
 // OpenCL v2.0 s6.13.16, s9.17.3.5 - Pipe functions.
 // We need the generic prototype, since the packet type could be anything.
 LANGBUILTIN(read_pipe, "i.", "tn", OCLC20_LANG)
@@ -1498,6 +1514,8 @@
 LANGBUILTIN(get_kernel_sub_group_count_for_ndrange, "Ui.", "tn", OCLC20_LANG)
 
 // OpenCL v2.0 s6.13.9 - Address space qualifier functions.
+// FIXME: Pointer parameters of OpenCL builtins should have their address space
+// requirement defined.
 LANGBUILTIN(to_global, "v*v*", "tn", OCLC20_LANG)
 LANGBUILTIN(to_local, "v*v*", "tn", OCLC20_LANG)
 LANGBUILTIN(to_private, "v*v*", "tn", OCLC20_LANG)
diff --git a/linux-x64/clang/include/clang/Basic/Builtins.h b/linux-x64/clang/include/clang/Basic/Builtins.h
index b3d6e45..fed0dae 100644
--- a/linux-x64/clang/include/clang/Basic/Builtins.h
+++ b/linux-x64/clang/include/clang/Basic/Builtins.h
@@ -242,13 +242,7 @@
               const char *Fmt) const;
 };
 
-/// For a given BuiltinID, return the ID of the fortified variant function. For
-/// instance, if Builtin::BIsprintf is passed, this function will return
-/// Builtin::BI__builtin___sprintf_chk. If BuiltinID doesn't have a fortified
-/// variant, 0 is returned.
-unsigned getFortifiedVariantFunction(unsigned BuiltinID);
-
-} // end namespace Builtin
+}
 
 /// Kinds of BuiltinTemplateDecl.
 enum BuiltinTemplateKind : int {
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def b/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def
index e9a8a2c..5ba03da 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def
@@ -52,6 +52,14 @@
 BUILTIN(__builtin_arm_crc32d, "UiUiWUi", "nc")
 BUILTIN(__builtin_arm_crc32cd, "UiUiWUi", "nc")
 
+// Memory Tagging Extensions (MTE)
+BUILTIN(__builtin_arm_irg, "v*v*Ui", "t")
+BUILTIN(__builtin_arm_addg, "v*v*Ui", "t")
+BUILTIN(__builtin_arm_gmi, "Uiv*Ui", "t")
+BUILTIN(__builtin_arm_ldg, "v*v*", "t")
+BUILTIN(__builtin_arm_stg, "vv*", "t")
+BUILTIN(__builtin_arm_subp, "Uiv*v*", "t")
+
 // Memory barrier
 BUILTIN(__builtin_arm_dmb, "vUi", "nc")
 BUILTIN(__builtin_arm_dsb, "vUi", "nc")
@@ -78,15 +86,8 @@
 LANGBUILTIN(__sev,   "v", "",   ALL_MS_LANGUAGES)
 LANGBUILTIN(__sevl,  "v", "",   ALL_MS_LANGUAGES)
 
-// MSVC intrinsics for volatile but non-acquire/release loads and stores
-LANGBUILTIN(__iso_volatile_load8,   "ccCD*",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_load16,  "ssCD*",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_load32,  "iiCD*",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_load64,  "LLiLLiCD*", "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store8,  "vcD*c",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store16, "vsD*s",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store32, "viD*i",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store64, "vLLiD*LLi", "n", ALL_MS_LANGUAGES)
+// Misc
+BUILTIN(__builtin_sponentry, "v*", "c")
 
 TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(_BitScanReverse, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def b/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def
index 20592c7..e882d3b 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def
@@ -33,6 +33,9 @@
 BUILTIN(__builtin_amdgcn_workitem_id_y, "Ui", "nc")
 BUILTIN(__builtin_amdgcn_workitem_id_z, "Ui", "nc")
 
+BUILTIN(__builtin_amdgcn_mbcnt_hi, "UiUiUi", "nc")
+BUILTIN(__builtin_amdgcn_mbcnt_lo, "UiUiUi", "nc")
+
 //===----------------------------------------------------------------------===//
 // Instruction builtins.
 //===----------------------------------------------------------------------===//
@@ -45,6 +48,11 @@
 BUILTIN(__builtin_amdgcn_wave_barrier, "v", "n")
 BUILTIN(__builtin_amdgcn_s_dcache_inv, "v", "n")
 BUILTIN(__builtin_amdgcn_buffer_wbinvl1, "v", "n")
+BUILTIN(__builtin_amdgcn_ds_gws_init, "vUiUi", "n")
+BUILTIN(__builtin_amdgcn_ds_gws_barrier, "vUiUi", "n")
+BUILTIN(__builtin_amdgcn_ds_gws_sema_v, "vUi", "n")
+BUILTIN(__builtin_amdgcn_ds_gws_sema_br, "vUiUi", "n")
+BUILTIN(__builtin_amdgcn_ds_gws_sema_p, "vUi", "n")
 
 // FIXME: Need to disallow constant address space.
 BUILTIN(__builtin_amdgcn_div_scale, "dddbb*", "n")
@@ -106,6 +114,7 @@
 //===----------------------------------------------------------------------===//
 TARGET_BUILTIN(__builtin_amdgcn_s_dcache_inv_vol, "v", "n", "ci-insts")
 TARGET_BUILTIN(__builtin_amdgcn_buffer_wbinvl1_vol, "v", "n", "ci-insts")
+TARGET_BUILTIN(__builtin_amdgcn_ds_gws_sema_release_all, "vUi", "n", "ci-insts")
 
 //===----------------------------------------------------------------------===//
 // Interpolation builtins.
@@ -133,7 +142,7 @@
 TARGET_BUILTIN(__builtin_amdgcn_s_memrealtime, "LUi", "n", "s-memrealtime")
 TARGET_BUILTIN(__builtin_amdgcn_mov_dpp, "iiIiIiIiIb", "nc", "dpp")
 TARGET_BUILTIN(__builtin_amdgcn_update_dpp, "iiiIiIiIiIb", "nc", "dpp")
-TARGET_BUILTIN(__builtin_amdgcn_s_dcache_wb, "v", "n", "vi-insts")
+TARGET_BUILTIN(__builtin_amdgcn_s_dcache_wb, "v", "n", "gfx8-insts")
 
 //===----------------------------------------------------------------------===//
 // GFX9+ only builtins.
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsARM.def b/linux-x64/clang/include/clang/Basic/BuiltinsARM.def
index 0006045..3f07651 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsARM.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsARM.def
@@ -201,14 +201,6 @@
 LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES)
 LANGBUILTIN(__dsb, "vUi", "nc", ALL_MS_LANGUAGES)
 LANGBUILTIN(__isb, "vUi", "nc", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_load8,   "ccCD*",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_load16,  "ssCD*",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_load32,  "iiCD*",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_load64,  "LLiLLiCD*", "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store8,  "vcD*c",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store16, "vsD*s",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store32, "viD*i",     "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(__iso_volatile_store64, "vLLiD*LLi", "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__ldrexd, "WiWiCD*", "", ALL_MS_LANGUAGES)
 LANGBUILTIN(_MoveFromCoprocessor, "UiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)
 LANGBUILTIN(_MoveFromCoprocessor2, "UiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def b/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def
index b15ed26..70be618 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def
@@ -18,13 +18,22 @@
 #endif
 
 #pragma push_macro("SM_70")
-#define SM_70 "sm_70|sm_71"
+#pragma push_macro("SM_72")
+#pragma push_macro("SM_75")
+#define SM_75 "sm_75"
+#define SM_72 "sm_72|" SM_75
+#define SM_70 "sm_70|" SM_72
+
 #pragma push_macro("SM_60")
 #define SM_60 "sm_60|sm_61|sm_62|" SM_70
 
-#pragma push_macro("PTX61")
-#define PTX61 "ptx61"
 #pragma push_macro("PTX60")
+#pragma push_macro("PTX61")
+#pragma push_macro("PTX63")
+#pragma push_macro("PTX64")
+#define PTX64 "ptx64"
+#define PTX63 "ptx63|" PTX64
+#define PTX61 "ptx61|" PTX63
 #define PTX60 "ptx60|" PTX61
 
 #pragma push_macro("AND")
@@ -666,10 +675,53 @@
 TARGET_BUILTIN(__hmma_m8n32k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
 TARGET_BUILTIN(__hmma_m8n32k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
 
+// Builtins to support integer and sub-integer WMMA instructions on sm_72/sm_75
+TARGET_BUILTIN(__bmma_m8n8k128_ld_a_b1, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__bmma_m8n8k128_ld_b_b1, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__bmma_m8n8k128_ld_c, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__bmma_m8n8k128_mma_xor_popc_b1, "vi*iC*iC*iC*Ii", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__bmma_m8n8k128_st_c_i32, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_ld_a_s8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_ld_a_u8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_ld_b_s8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_ld_b_u8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_ld_c, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_mma_s8, "vi*iC*iC*iC*IiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_mma_u8, "vi*iC*iC*iC*IiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m16n16k16_st_c_i32, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_ld_a_s8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_ld_a_u8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_ld_b_s8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_ld_b_u8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_ld_c, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_mma_s8, "vi*iC*iC*iC*IiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_mma_u8, "vi*iC*iC*iC*IiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m32n8k16_st_c_i32, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_ld_a_s8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_ld_a_u8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_ld_b_s8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_ld_b_u8, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_ld_c, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_mma_s8, "vi*iC*iC*iC*IiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_mma_u8, "vi*iC*iC*iC*IiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n32k16_st_c_i32, "vi*iC*UiIi", "", AND(SM_72,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_ld_a_s4, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_ld_a_u4, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_ld_b_s4, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_ld_b_u4, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_ld_c, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_mma_s4, "vi*iC*iC*iC*IiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_mma_u4, "vi*iC*iC*iC*IiIi", "", AND(SM_75,PTX63))
+TARGET_BUILTIN(__imma_m8n8k32_st_c_i32, "vi*iC*UiIi", "", AND(SM_75,PTX63))
+
 #undef BUILTIN
 #undef TARGET_BUILTIN
 #pragma pop_macro("AND")
 #pragma pop_macro("SM_60")
 #pragma pop_macro("SM_70")
+#pragma pop_macro("SM_72")
+#pragma pop_macro("SM_75")
 #pragma pop_macro("PTX60")
 #pragma pop_macro("PTX61")
+#pragma pop_macro("PTX63")
+#pragma pop_macro("PTX64")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def b/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def
index e55fa04..3b6348a 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def
@@ -475,6 +475,12 @@
 BUILTIN(__builtin_unpack_vector_int128, "ULLiV1LLLii", "")
 BUILTIN(__builtin_pack_vector_int128, "V1LLLiULLiULLi", "")
 
+// Set the floating point rounding mode
+BUILTIN(__builtin_setrnd, "di", "")
+
+// Cache built-ins
+BUILTIN(__builtin_dcbf, "vvC*", "")
+
 // FIXME: Obviously incomplete.
 
 #undef BUILTIN
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def b/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def
index 0241436..57ebb27 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def
@@ -36,8 +36,8 @@
 BUILTIN(__builtin_wasm_max_f64, "ddd", "nc")
 
 // Exception handling builtins.
-TARGET_BUILTIN(__builtin_wasm_throw, "vUiv*", "r", "exception-handling")
-TARGET_BUILTIN(__builtin_wasm_rethrow, "v", "r", "exception-handling")
+TARGET_BUILTIN(__builtin_wasm_throw, "vIUiv*", "r", "exception-handling")
+TARGET_BUILTIN(__builtin_wasm_rethrow_in_catch, "v", "r", "exception-handling")
 
 // Atomic wait and notify.
 BUILTIN(__builtin_wasm_atomic_wait_i32, "ii*iLLi", "n")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsX86.def b/linux-x64/clang/include/clang/Basic/BuiltinsX86.def
index 373ff24..bc6e382 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsX86.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsX86.def
@@ -101,24 +101,24 @@
 TARGET_BUILTIN(__builtin_ia32_pmulhw, "V4sV4sV4s", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_pmullw, "V4sV4sV4s", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_pmaddwd, "V2iV4sV4s", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pand, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pandn, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_por, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pxor, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psllw, "V4sV4sV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pslld, "V2iV2iV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psllq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrlw, "V4sV4sV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrld, "V2iV2iV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrlq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psraw, "V4sV4sV1LLi", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrad, "V2iV2iV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pand, "V1OiV1OiV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pandn, "V1OiV1OiV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_por, "V1OiV1OiV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pxor, "V1OiV1OiV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllw, "V4sV4sV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pslld, "V2iV2iV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllq, "V1OiV1OiV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlw, "V4sV4sV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrld, "V2iV2iV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlq, "V1OiV1OiV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psraw, "V4sV4sV1Oi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrad, "V2iV2iV1Oi", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_psllwi, "V4sV4si", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_pslldi, "V2iV2ii", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psllqi, "V1LLiV1LLii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllqi, "V1OiV1Oii", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_psrlwi, "V4sV4si", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_psrldi, "V2iV2ii", "ncV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrlqi, "V1LLiV1LLii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlqi, "V1OiV1Oii", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_psrawi, "V4sV4si", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_psradi, "V2iV2ii", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_packsswb, "V8cV4sV4s", "ncV:64:", "mmx")
@@ -137,7 +137,7 @@
 TARGET_BUILTIN(__builtin_ia32_pcmpgtw, "V4sV4sV4s", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_pcmpgtd, "V2iV2iV2i", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_maskmovq, "vV8cV8cc*", "nV:64:", "mmx")
-TARGET_BUILTIN(__builtin_ia32_movntq, "vV1LLi*V1LLi", "nV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_movntq, "vV1Oi*V1Oi", "nV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_vec_init_v2si, "V2iii", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_vec_init_v4hi, "V4sssss", "ncV:64:", "mmx")
 TARGET_BUILTIN(__builtin_ia32_vec_init_v8qi, "V8ccccccccc", "ncV:64:", "mmx")
@@ -164,9 +164,9 @@
 TARGET_BUILTIN(__builtin_ia32_cvtpd2pi, "V2iV2d", "ncV:64:", "mmx,sse2")
 TARGET_BUILTIN(__builtin_ia32_cvtpi2pd, "V2dV2i", "ncV:64:", "mmx,sse2")
 TARGET_BUILTIN(__builtin_ia32_cvttpd2pi, "V2iV2d", "ncV:64:", "mmx,sse2")
-TARGET_BUILTIN(__builtin_ia32_paddq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx,sse2")
-TARGET_BUILTIN(__builtin_ia32_pmuludq, "V1LLiV2iV2i", "ncV:64:", "mmx,sse2")
-TARGET_BUILTIN(__builtin_ia32_psubq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_paddq, "V1OiV1OiV1Oi", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_pmuludq, "V1OiV2iV2i", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_psubq, "V1OiV1OiV1Oi", "ncV:64:", "mmx,sse2")
 
 // MMX+SSSE3
 TARGET_BUILTIN(__builtin_ia32_pabsb, "V8cV8c", "ncV:64:", "mmx,ssse3")
@@ -263,6 +263,8 @@
 TARGET_BUILTIN(__builtin_ia32_psubusb128, "V16cV16cV16c", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psubusw128, "V8sV8sV8s", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pmulhw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pavgb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pavgw128, "V8sV8sV8s", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pmaxub128, "V16cV16cV16c", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pmaxsw128, "V8sV8sV8s", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pminub128, "V16cV16cV16c", "ncV:128:", "sse2")
@@ -324,11 +326,11 @@
 TARGET_BUILTIN(__builtin_ia32_pshufd, "V4iV4iIi", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pshuflw, "V8sV8sIi", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pshufhw, "V8sV8sIi", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psadbw128, "V2LLiV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psadbw128, "V2OiV16cV16c", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_sqrtpd, "V2dV2d", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_sqrtsd, "V2dV2d", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_shufpd, "V2dV2dV2dIi", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2dq, "V2LLiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq, "V2OiV2d", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_cvtpd2ps, "V4fV2d", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_cvttpd2dq, "V4iV2d", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_cvtsd2si, "iV2d", "ncV:128:", "sse2")
@@ -344,26 +346,26 @@
 TARGET_HEADER_BUILTIN(_mm_mfence, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "sse2")
 TARGET_BUILTIN(__builtin_ia32_pause, "v", "n", "")
 TARGET_HEADER_BUILTIN(_mm_pause, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "")
-TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2OiV4iV4i", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psrlw128, "V8sV8sV8s", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psrld128, "V4iV4iV4i", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrlq128, "V2LLiV2LLiV2LLi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlq128, "V2OiV2OiV2Oi", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psllw128, "V8sV8sV8s", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pslld128, "V4iV4iV4i", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psllq128, "V2LLiV2LLiV2LLi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllq128, "V2OiV2OiV2Oi", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psllwi128, "V8sV8si", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pslldi128, "V4iV4ii", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psllqi128, "V2LLiV2LLii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllqi128, "V2OiV2Oii", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psrlwi128, "V8sV8si", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psrldi128, "V4iV4ii", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrlqi128, "V2LLiV2LLii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlqi128, "V2OiV2Oii", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psrawi128, "V8sV8si", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_psradi128, "V4iV4ii", "ncV:128:", "sse2")
 TARGET_BUILTIN(__builtin_ia32_pmaddwd128, "V4iV8sV8s", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pslldqi128_byteshift, "V2LLiV2LLiIi", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrldqi128_byteshift, "V2LLiV2LLiIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pslldqi128_byteshift, "V2OiV2OiIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrldqi128_byteshift, "V2OiV2OiIi", "ncV:128:", "sse2")
 
 TARGET_BUILTIN(__builtin_ia32_monitor, "vv*UiUi", "n", "sse3")
 TARGET_BUILTIN(__builtin_ia32_mwait, "vUiUi", "n", "sse3")
@@ -388,16 +390,16 @@
 TARGET_BUILTIN(__builtin_ia32_pminsd128, "V4iV4iV4i", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_pminud128, "V4iV4iV4i", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_pminuw128, "V8sV8sV8s", "ncV:128:", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pmuldq128, "V2LLiV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmuldq128, "V2OiV4iV4i", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_roundps, "V4fV4fIi", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_roundss, "V4fV4fV4fIi", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_roundsd, "V2dV2dV2dIi", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_roundpd, "V2dV2dIi", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_dpps, "V4fV4fV4fIc", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_dppd, "V2dV2dV2dIc", "ncV:128:", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_ptestz128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_ptestc128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_ptestnzc128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestz128, "iV2OiV2Oi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestc128, "iV2OiV2Oi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestnzc128, "iV2OiV2Oi", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_mpsadbw128, "V16cV16cV16cIc", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_phminposuw128, "V8sV8s", "ncV:128:", "sse4.1")
 TARGET_BUILTIN(__builtin_ia32_vec_ext_v16qi, "cV16cIi", "ncV:128:", "sse4.1")
@@ -426,30 +428,30 @@
 TARGET_BUILTIN(__builtin_ia32_crc32si, "UiUiUi", "nc", "sse4.2")
 
 // SSE4a
-TARGET_BUILTIN(__builtin_ia32_extrqi, "V2LLiV2LLiIcIc", "ncV:128:", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_extrq, "V2LLiV2LLiV16c", "ncV:128:", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_insertqi, "V2LLiV2LLiV2LLiIcIc", "ncV:128:", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_insertq, "V2LLiV2LLiV2LLi", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_extrqi, "V2OiV2OiIcIc", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_extrq, "V2OiV2OiV16c", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_insertqi, "V2OiV2OiV2OiIcIc", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_insertq, "V2OiV2OiV2Oi", "ncV:128:", "sse4a")
 TARGET_BUILTIN(__builtin_ia32_movntsd, "vd*V2d", "nV:128:", "sse4a")
 TARGET_BUILTIN(__builtin_ia32_movntss, "vf*V4f", "nV:128:", "sse4a")
 
 // AES
-TARGET_BUILTIN(__builtin_ia32_aesenc128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesenclast128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesdec128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesdeclast128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesimc128, "V2LLiV2LLi", "ncV:128:", "aes")
-TARGET_BUILTIN(__builtin_ia32_aeskeygenassist128, "V2LLiV2LLiIc", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesenc128, "V2OiV2OiV2Oi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast128, "V2OiV2OiV2Oi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesdec128, "V2OiV2OiV2Oi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast128, "V2OiV2OiV2Oi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesimc128, "V2OiV2Oi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aeskeygenassist128, "V2OiV2OiIc", "ncV:128:", "aes")
 
 // VAES
-TARGET_BUILTIN(__builtin_ia32_aesenc256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesenc512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
-TARGET_BUILTIN(__builtin_ia32_aesenclast256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesenclast512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdec256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdec512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdeclast256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdeclast512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenc256, "V4OiV4OiV4Oi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenc512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast256, "V4OiV4OiV4Oi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdec256, "V4OiV4OiV4Oi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdec512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast256, "V4OiV4OiV4Oi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f,vaes")
 
 // GFNI
 TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v16qi, "V16cV16cV16cIc", "ncV:128:", "gfni")
@@ -463,11 +465,11 @@
 TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v64qi, "V64cV64cV64c", "ncV:512:", "avx512bw,gfni")
 
 // CLMUL
-TARGET_BUILTIN(__builtin_ia32_pclmulqdq128, "V2LLiV2LLiV2LLiIc", "ncV:128:", "pclmul")
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq128, "V2OiV2OiV2OiIc", "ncV:128:", "pclmul")
 
 // VPCLMULQDQ
-TARGET_BUILTIN(__builtin_ia32_pclmulqdq256, "V4LLiV4LLiV4LLiIc", "ncV:256:", "vpclmulqdq")
-TARGET_BUILTIN(__builtin_ia32_pclmulqdq512, "V8LLiV8LLiV8LLiIc", "ncV:512:", "avx512f,vpclmulqdq")
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq256, "V4OiV4OiV4OiIc", "ncV:256:", "vpclmulqdq")
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq512, "V8OiV8OiV8OiIc", "ncV:512:", "avx512f,vpclmulqdq")
 
 // AVX
 TARGET_BUILTIN(__builtin_ia32_addsubpd256, "V4dV4dV4d", "ncV:256:", "avx")
@@ -480,9 +482,9 @@
 TARGET_BUILTIN(__builtin_ia32_maxps256, "V8fV8fV8f", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_minpd256, "V4dV4dV4d", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_minps256, "V8fV8fV8f", "ncV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarpd, "V2dV2dV2LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd, "V2dV2dV2Oi", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_vpermilvarps, "V4fV4fV4i", "ncV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarpd256, "V4dV4dV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd256, "V4dV4dV4Oi", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_vpermilvarps256, "V8fV8fV8i", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_blendpd256, "V4dV4dV4dIi", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_blendps256, "V8fV8fV8fIi", "ncV:256:", "avx")
@@ -533,21 +535,21 @@
 TARGET_BUILTIN(__builtin_ia32_vtestzps256, "iV8fV8f", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_vtestcps256, "iV8fV8f", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_vtestnzcps256, "iV8fV8f", "ncV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_ptestz256, "iV4LLiV4LLi", "ncV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_ptestc256, "iV4LLiV4LLi", "ncV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_ptestnzc256, "iV4LLiV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestz256, "iV4OiV4Oi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestc256, "iV4OiV4Oi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestnzc256, "iV4OiV4Oi", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_movmskpd256, "iV4d", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_movmskps256, "iV8f", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_vzeroall, "v", "n", "avx")
 TARGET_BUILTIN(__builtin_ia32_vzeroupper, "v", "n", "avx")
 TARGET_BUILTIN(__builtin_ia32_lddqu256, "V32ccC*", "nV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskloadpd, "V2dV2dC*V2LLi", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadpd, "V2dV2dC*V2Oi", "nV:128:", "avx")
 TARGET_BUILTIN(__builtin_ia32_maskloadps, "V4fV4fC*V4i", "nV:128:", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskloadpd256, "V4dV4dC*V4LLi", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadpd256, "V4dV4dC*V4Oi", "nV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_maskloadps256, "V8fV8fC*V8i", "nV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskstorepd, "vV2d*V2LLiV2d", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstorepd, "vV2d*V2OiV2d", "nV:128:", "avx")
 TARGET_BUILTIN(__builtin_ia32_maskstoreps, "vV4f*V4iV4f", "nV:128:", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskstorepd256, "vV4d*V4LLiV4d", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstorepd256, "vV4d*V4OiV4d", "nV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_maskstoreps256, "vV8f*V8iV8f", "nV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_vec_ext_v32qi, "cV32cIi", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_vec_ext_v16hi, "sV16sIi", "ncV:256:", "avx")
@@ -574,6 +576,8 @@
 TARGET_BUILTIN(__builtin_ia32_psubusb256, "V32cV32cV32c", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psubusw256, "V16sV16sV16s", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_palignr256, "V32cV32cV32cIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pavgb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pavgw256, "V16sV16sV16s", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pblendvb256, "V32cV32cV32cV32c", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pblendw256, "V16sV16sV16sIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_phaddw256, "V16sV16sV16s", "ncV:256:", "avx2")
@@ -597,12 +601,12 @@
 TARGET_BUILTIN(__builtin_ia32_pminsw256, "V16sV16sV16s", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pminsd256, "V8iV8iV8i", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pmovmskb256, "iV32c", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmuldq256, "V4LLiV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmuldq256, "V4OiV8iV8i", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pmulhrsw256, "V16sV16sV16s", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pmulhuw256, "V16sV16sV16s", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pmulhw256, "V16sV16sV16s", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmuludq256, "V4LLiV8iV8i", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psadbw256, "V4LLiV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmuludq256, "V4OiV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psadbw256, "V4OiV32cV32c", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pshufb256, "V32cV32cV32c", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pshufd256, "V8iV8iIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pshuflw256, "V16sV16sIi", "ncV:256:", "avx2")
@@ -612,68 +616,68 @@
 TARGET_BUILTIN(__builtin_ia32_psignd256, "V8iV8iV8i", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psllwi256, "V16sV16si", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psllw256, "V16sV16sV8s", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pslldqi256_byteshift, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pslldqi256_byteshift, "V4OiV4OiIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pslldi256, "V8iV8ii", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pslld256, "V8iV8iV4i", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllqi256, "V4LLiV4LLii", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllqi256, "V4OiV4Oii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllq256, "V4OiV4OiV2Oi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrawi256, "V16sV16si", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psraw256, "V16sV16sV8s", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psradi256, "V8iV8ii", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrad256, "V8iV8iV4i", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrldqi256_byteshift, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrldqi256_byteshift, "V4OiV4OiIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrlwi256, "V16sV16si", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrlw256, "V16sV16sV8s", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrldi256, "V8iV8ii", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrld256, "V8iV8iV4i", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlqi256, "V4LLiV4LLii", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlqi256, "V4OiV4Oii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlq256, "V4OiV4OiV2Oi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pblendd128, "V4iV4iV4iIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_pblendd256, "V8iV8iV8iIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_permvarsi256, "V8iV8iV8i", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_permdf256, "V4dV4dIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_permvarsf256, "V8fV8fV8i", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_permti256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_permdi256, "V4LLiV4LLiIi", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_extract128i256, "V2LLiV4LLiIi", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_insert128i256, "V4LLiV4LLiV2LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permti256, "V4OiV4OiV4OiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permdi256, "V4OiV4OiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_extract128i256, "V2OiV4OiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_insert128i256, "V4OiV4OiV2OiIi", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_maskloadd256, "V8iV8iC*V8i", "nV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskloadq256, "V4LLiV4LLiC*V4LLi", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadq256, "V4OiV4OiC*V4Oi", "nV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_maskloadd, "V4iV4iC*V4i", "nV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskloadq, "V2LLiV2LLiC*V2LLi", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadq, "V2OiV2OiC*V2Oi", "nV:128:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_maskstored256, "vV8i*V8iV8i", "nV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskstoreq256, "vV4LLi*V4LLiV4LLi", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstoreq256, "vV4Oi*V4OiV4Oi", "nV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_maskstored, "vV4i*V4iV4i", "nV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskstoreq, "vV2LLi*V2LLiV2LLi", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstoreq, "vV2Oi*V2OiV2Oi", "nV:128:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psllv8si, "V8iV8iV8i", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psllv4si, "V4iV4iV4i", "ncV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllv4di, "V4LLiV4LLiV4LLi", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllv2di, "V2LLiV2LLiV2LLi", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv4di, "V4OiV4OiV4Oi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv2di, "V2OiV2OiV2Oi", "ncV:128:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrav8si, "V8iV8iV8i", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrav4si, "V4iV4iV4i", "ncV:128:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrlv8si, "V8iV8iV8i", "ncV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_psrlv4si, "V4iV4iV4i", "ncV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlv4di, "V4LLiV4LLiV4LLi", "ncV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlv2di, "V2LLiV2LLiV2LLi", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv4di, "V4OiV4OiV4Oi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv2di, "V2OiV2OiV2Oi", "ncV:128:", "avx2")
 
 // GATHER
 TARGET_BUILTIN(__builtin_ia32_gatherd_pd, "V2dV2ddC*V4iV2dIc", "nV:128:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_gatherd_pd256, "V4dV4ddC*V4iV4dIc", "nV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_pd, "V2dV2ddC*V2LLiV2dIc", "nV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_pd256, "V4dV4ddC*V4LLiV4dIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_pd, "V2dV2ddC*V2OiV2dIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_pd256, "V4dV4ddC*V4OiV4dIc", "nV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_gatherd_ps, "V4fV4ffC*V4iV4fIc", "nV:128:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_gatherd_ps256, "V8fV8ffC*V8iV8fIc", "nV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_ps, "V4fV4ffC*V2LLiV4fIc", "nV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_ps256, "V4fV4ffC*V4LLiV4fIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_ps, "V4fV4ffC*V2OiV4fIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_ps256, "V4fV4ffC*V4OiV4fIc", "nV:256:", "avx2")
 
-TARGET_BUILTIN(__builtin_ia32_gatherd_q, "V2LLiV2LLiLLiC*V4iV2LLiIc", "nV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherd_q256, "V4LLiV4LLiLLiC*V4iV4LLiIc", "nV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_q, "V2LLiV2LLiLLiC*V2LLiV2LLiIc", "nV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_q256, "V4LLiV4LLiLLiC*V4LLiV4LLiIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_q, "V2OiV2OiOiC*V4iV2OiIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_q256, "V4OiV4OiOiC*V4iV4OiIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_q, "V2OiV2OiOiC*V2OiV2OiIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_q256, "V4OiV4OiOiC*V4OiV4OiIc", "nV:256:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_gatherd_d, "V4iV4iiC*V4iV4iIc", "nV:128:", "avx2")
 TARGET_BUILTIN(__builtin_ia32_gatherd_d256, "V8iV8iiC*V8iV8iIc", "nV:256:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_d, "V4iV4iiC*V2LLiV4iIc", "nV:128:", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_d256, "V4iV4iiC*V4LLiV4iIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_d, "V4iV4iiC*V2OiV4iIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_d256, "V4iV4iiC*V4OiV4iIc", "nV:256:", "avx2")
 
 // F16C
 TARGET_BUILTIN(__builtin_ia32_vcvtps2ph, "V8sV4fIi", "ncV:128:", "f16c")
@@ -690,16 +694,16 @@
 TARGET_BUILTIN(__builtin_ia32_fxsave, "vv*", "n", "fxsr")
 
 // XSAVE
-TARGET_BUILTIN(__builtin_ia32_xsave, "vv*ULLi", "n", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*ULLi", "n", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xgetbv, "ULLiUi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xsave, "vv*UOi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*UOi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xgetbv, "UOiUi", "n", "xsave")
 TARGET_HEADER_BUILTIN(_xgetbv, "UWiUi", "nh", "immintrin.h", ALL_MS_LANGUAGES, "")
-TARGET_BUILTIN(__builtin_ia32_xsetbv, "vUiULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xsetbv, "vUiUOi", "n", "xsave")
 TARGET_HEADER_BUILTIN(_xsetbv, "vUiUWi", "nh", "immintrin.h", ALL_MS_LANGUAGES, "")
-TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*ULLi", "n", "xsaveopt")
-TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*ULLi", "n", "xsaves")
-TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "n", "xsavec")
-TARGET_BUILTIN(__builtin_ia32_xsaves, "vv*ULLi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*UOi", "n", "xsaveopt")
+TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*UOi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*UOi", "n", "xsavec")
+TARGET_BUILTIN(__builtin_ia32_xsaves, "vv*UOi", "n", "xsaves")
 
 // SHSTK
 TARGET_BUILTIN(__builtin_ia32_incsspd, "vUi", "n", "shstk")
@@ -799,55 +803,55 @@
 TARGET_BUILTIN(__builtin_ia32_vpmacswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpmacssdd, "V4iV4iV4iV4i", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpmacsdd, "V4iV4iV4iV4i", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacssdql, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacsdql, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacssdqh, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacsdqh, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdql, "V2OiV4iV4iV2Oi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdql, "V2OiV4iV4iV2Oi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdqh, "V2OiV4iV4iV2Oi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdqh, "V2OiV4iV4iV2Oi", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpmadcsswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpmadcswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
 
 TARGET_BUILTIN(__builtin_ia32_vphaddbw, "V8sV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vphaddbd, "V4iV16c", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddbq, "V2LLiV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddbq, "V2OiV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vphaddwd, "V4iV8s", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddwq, "V2LLiV8s", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphadddq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddwq, "V2OiV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadddq, "V2OiV4i", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vphaddubw, "V8sV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vphaddubd, "V4iV16c", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddubq, "V2LLiV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddubq, "V2OiV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vphadduwd, "V4iV8s", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphadduwq, "V2LLiV8s", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddudq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadduwq, "V2OiV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddudq, "V2OiV4i", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vphsubbw, "V8sV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vphsubwd, "V4iV8s", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphsubdq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphsubdq, "V2OiV4i", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpperm, "V16cV16cV16cV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vprotb, "V16cV16cV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vprotw, "V8sV8sV8s", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vprotd, "V4iV4iV4i", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotq, "V2OiV2OiV2Oi", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vprotbi, "V16cV16cIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vprotwi, "V8sV8sIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vprotdi, "V4iV4iIc", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotqi, "V2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotqi, "V2OiV2OiIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpshlb, "V16cV16cV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpshlw, "V8sV8sV8s", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpshld, "V4iV4iV4i", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshlq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshlq, "V2OiV2OiV2Oi", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpshab, "V16cV16cV16c", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpshaw, "V8sV8sV8s", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpshad, "V4iV4iV4i", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshaq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshaq, "V2OiV2OiV2Oi", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpcomub, "V16cV16cV16cIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpcomuw, "V8sV8sV8sIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpcomud, "V4iV4iV4iIc", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomuq, "V2LLiV2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomuq, "V2OiV2OiV2OiIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpcomb, "V16cV16cV16cIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpcomw, "V8sV8sV8sIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpcomd, "V4iV4iV4iIc", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomq, "V2LLiV2LLiV2LLiIc", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpermil2pd, "V2dV2dV2dV2LLiIc", "ncV:128:", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpermil2pd256, "V4dV4dV4dV4LLiIc", "ncV:256:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomq, "V2OiV2OiV2OiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2pd, "V2dV2dV2dV2OiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2pd256, "V4dV4dV4dV4OiIc", "ncV:256:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpermil2ps, "V4fV4fV4fV4iIc", "ncV:128:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vpermil2ps256, "V8fV8fV8fV8iIc", "ncV:256:", "xop")
 TARGET_BUILTIN(__builtin_ia32_vfrczss, "V4fV4f", "ncV:128:", "xop")
@@ -862,10 +866,10 @@
 TARGET_BUILTIN(__builtin_ia32_xabort, "vIc", "n", "rtm")
 TARGET_BUILTIN(__builtin_ia32_xtest, "i", "n", "rtm")
 
-BUILTIN(__builtin_ia32_rdpmc, "ULLii", "")
-BUILTIN(__builtin_ia32_rdtsc, "ULLi", "")
-BUILTIN(__rdtsc, "ULLi", "")
-BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "")
+BUILTIN(__builtin_ia32_rdpmc, "UOii", "")
+BUILTIN(__builtin_ia32_rdtsc, "UOi", "")
+BUILTIN(__rdtsc, "UOi", "")
+BUILTIN(__builtin_ia32_rdtscp, "UOiUi*", "")
 
 TARGET_BUILTIN(__builtin_ia32_rdpid, "Ui", "n", "rdpid")
 
@@ -926,35 +930,35 @@
 TARGET_BUILTIN(__builtin_ia32_vcvtps2ph512_mask, "V16sV16fIiV16sUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vcvtph2ps512_mask, "V16fV16sV16fUsIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pabsd512, "V16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pabsq512, "V8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pabsq512, "V8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmaxsd512, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmaxsq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmaxud512, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmaxuq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pminsd512, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pminsq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminsq512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pminud512, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pminuq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmuldq512, "V8LLiV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmuludq512, "V8LLiV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminuq512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmuldq512, "V8OiV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmuludq512, "V8OiV16iV16i", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16iiC*V16iUs", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLiLLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8OiOiC*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_loadups512_mask, "V16ffC*V16fUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_loadaps512_mask, "V16fV16fC*V16fUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_loadupd512_mask, "V8ddC*V8dUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_loadapd512_mask, "V8dV8dC*V8dUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_storedqudi512_mask, "vLLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storedqudi512_mask, "vOi*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_storedqusi512_mask, "vi*V16iUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_storeupd512_mask, "vd*V8dUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_storeapd512_mask, "vV8d*V8dUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_storeups512_mask, "vf*V16fUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_storeaps512_mask, "vV16f*V16fUs", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_alignq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_alignq512, "V8OiV8OiV8OiIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_alignd512, "V16iV16iV16iIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_alignd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_alignd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_alignq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_alignq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignq128, "V2OiV2OiV2OiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignq256, "V4OiV4OiV4OiIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_extractf64x4_mask, "V4dV8dIiV4dUc", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_extractf32x4_mask, "V4fV16fIiV4fUc", "ncV:512:", "avx512f")
 
@@ -971,76 +975,76 @@
 TARGET_BUILTIN(__builtin_ia32_vpdpwssds256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
 TARGET_BUILTIN(__builtin_ia32_vpdpwssds512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
 
-TARGET_BUILTIN(__builtin_ia32_gather3div2df, "V2dV2dvC*V2LLiUcIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div2di, "V2LLiV2LLivC*V2LLiUcIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4df, "V4dV4dvC*V4LLiUcIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4di, "V4LLiV4LLivC*V4LLiUcIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4sf, "V4fV4fvC*V2LLiUcIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4si, "V4iV4ivC*V2LLiUcIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div8sf, "V4fV4fvC*V4LLiUcIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div8si, "V4iV4ivC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div2df, "V2dV2dvC*V2OiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div2di, "V2OiV2OivC*V2OiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4df, "V4dV4dvC*V4OiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4di, "V4OiV4OivC*V4OiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4sf, "V4fV4fvC*V2OiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4si, "V4iV4ivC*V2OiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div8sf, "V4fV4fvC*V4OiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div8si, "V4iV4ivC*V4OiUcIi", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_gather3siv2df, "V2dV2dvC*V4iUcIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv2di, "V2LLiV2LLivC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv2di, "V2OiV2OivC*V4iUcIi", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_gather3siv4df, "V4dV4dvC*V4iUcIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv4di, "V4LLiV4LLivC*V4iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4di, "V4OiV4OivC*V4iUcIi", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_gather3siv4sf, "V4fV4fvC*V4iUcIi", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_gather3siv4si, "V4iV4ivC*V4iUcIi", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_gather3siv8sf, "V8fV8fvC*V8iUcIi", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_gather3siv8si, "V8iV8ivC*V8iUcIi", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_gathersiv8df, "V8dV8dvC*V8iUcIi", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16fvC*V16iUsIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8dvC*V8LLiUcIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8fvC*V8LLiUcIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gathersiv8di, "V8LLiV8LLivC*V8iUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8dvC*V8OiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8fvC*V8OiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gathersiv8di, "V8OiV8OivC*V8iUcIi", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16ivC*V16iUsIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv8di, "V8LLiV8LLivC*V8LLiUcIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8ivC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv8di, "V8OiV8OivC*V8OiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8ivC*V8OiUcIi", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_scattersiv8df, "vv*UcV8iV8dIi", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_scattersiv16sf, "vv*UsV16iV16fIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8df,  "vv*UcV8LLiV8dIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv16sf, "vv*UcV8LLiV8fIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scattersiv8di,  "vv*UcV8iV8LLiIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8df,  "vv*UcV8OiV8dIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv16sf, "vv*UcV8OiV8fIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8di,  "vv*UcV8iV8OiIi", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_scattersiv16si, "vv*UsV16iV16iIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8di,  "vv*UcV8LLiV8LLiIi", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv16si, "vv*UcV8LLiV8iIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8di,  "vv*UcV8OiV8OiIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv16si, "vv*UcV8OiV8iIi", "nV:512:", "avx512f")
 
 TARGET_BUILTIN(__builtin_ia32_gatherpfdpd,  "vUcV8ivC*IiIi", "nV:512:", "avx512pf")
 TARGET_BUILTIN(__builtin_ia32_gatherpfdps,  "vUsV16ivC*IiIi", "nV:512:", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_gatherpfqpd,  "vUcV8LLivC*IiIi", "nV:512:", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_gatherpfqps,  "vUcV8LLivC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfqpd,  "vUcV8OivC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfqps,  "vUcV8OivC*IiIi", "nV:512:", "avx512pf")
 TARGET_BUILTIN(__builtin_ia32_scatterpfdpd, "vUcV8iv*IiIi", "nV:512:", "avx512pf")
 TARGET_BUILTIN(__builtin_ia32_scatterpfdps, "vUsV16iv*IiIi", "nV:512:", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_scatterpfqpd, "vUcV8LLiv*IiIi", "nV:512:", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8LLiv*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfqpd, "vUcV8Oiv*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8Oiv*IiIi", "nV:512:", "avx512pf")
 
 TARGET_BUILTIN(__builtin_ia32_knotqi, "UcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_knothi, "UsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_knotsi, "UiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_knotdi, "ULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_knotdi, "UOiUOi", "nc", "avx512bw")
 
 TARGET_BUILTIN(__builtin_ia32_cmpb128_mask, "UsV16cV16cIiUs", "ncV:128:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_cmpd128_mask, "UcV4iV4iIiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmpq128_mask, "UcV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpq128_mask, "UcV2OiV2OiIiUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_cmpw128_mask, "UcV8sV8sIiUc", "ncV:128:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_cmpb256_mask, "UiV32cV32cIiUi", "ncV:256:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_cmpd256_mask, "UcV8iV8iIiUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmpq256_mask, "UcV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpq256_mask, "UcV4OiV4OiIiUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_cmpw256_mask, "UsV16sV16sIiUs", "ncV:256:", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cmpb512_mask, "ULLiV64cV64cIiULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpb512_mask, "UOiV64cV64cIiUOi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_cmpd512_mask, "UsV16iV16iIiUs", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cmpq512_mask, "UcV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpq512_mask, "UcV8OiV8OiIiUc", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_cmpw512_mask, "UiV32sV32sIiUi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_ucmpb128_mask, "UsV16cV16cIiUs", "ncV:128:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_ucmpd128_mask, "UcV4iV4iIiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_ucmpq128_mask, "UcV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpq128_mask, "UcV2OiV2OiIiUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_ucmpw128_mask, "UcV8sV8sIiUc", "ncV:128:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_ucmpb256_mask, "UiV32cV32cIiUi", "ncV:256:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_ucmpd256_mask, "UcV8iV8iIiUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_ucmpq256_mask, "UcV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpq256_mask, "UcV4OiV4OiIiUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_ucmpw256_mask, "UsV16sV16sIiUs", "ncV:256:", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ucmpb512_mask, "ULLiV64cV64cIiULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpb512_mask, "UOiV64cV64cIiUOi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_ucmpd512_mask, "UsV16iV16iIiUs", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8OiV8OiIiUc", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_ucmpw512_mask, "UiV32sV32sIiUi", "ncV:512:", "avx512bw")
 
 TARGET_BUILTIN(__builtin_ia32_pabsb512, "V64cV64c", "ncV:512:", "avx512bw")
@@ -1053,6 +1057,8 @@
 TARGET_BUILTIN(__builtin_ia32_paddsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_paddusb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_paddusw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pavgb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pavgw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmaxsb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmaxsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmaxub512, "V64cV64cV64c", "ncV:512:", "avx512bw")
@@ -1067,21 +1073,21 @@
 TARGET_BUILTIN(__builtin_ia32_psubusb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_psubusw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
 
-TARGET_BUILTIN(__builtin_ia32_vpconflictdi_128, "V2LLiV2LLi", "ncV:128:", "avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpconflictdi_256, "V4LLiV4LLi", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_128, "V2OiV2Oi", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_256, "V4OiV4Oi", "ncV:256:", "avx512cd,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpconflictsi_128, "V4iV4i", "ncV:128:", "avx512cd,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpconflictsi_256, "V8iV8i", "ncV:256:", "avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpconflictdi_512, "V8LLiV8LLi", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_512, "V8OiV8Oi", "ncV:512:", "avx512cd")
 TARGET_BUILTIN(__builtin_ia32_vpconflictsi_512, "V16iV16i", "ncV:512:", "avx512cd")
 TARGET_BUILTIN(__builtin_ia32_vplzcntd_512, "V16iV16i", "ncV:512:", "avx512cd")
-TARGET_BUILTIN(__builtin_ia32_vplzcntq_512, "V8LLiV8LLi", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_512, "V8OiV8Oi", "ncV:512:", "avx512cd")
 
 TARGET_BUILTIN(__builtin_ia32_vpopcntd_128, "V4iV4i", "ncV:128:", "avx512vpopcntdq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpopcntq_128, "V2LLiV2LLi", "ncV:128:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_128, "V2OiV2Oi", "ncV:128:", "avx512vpopcntdq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpopcntd_256, "V8iV8i", "ncV:256:", "avx512vpopcntdq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpopcntq_256, "V4LLiV4LLi", "ncV:256:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_256, "V4OiV4Oi", "ncV:256:", "avx512vpopcntdq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpopcntd_512, "V16iV16i", "ncV:512:", "avx512vpopcntdq")
-TARGET_BUILTIN(__builtin_ia32_vpopcntq_512, "V8LLiV8LLi", "ncV:512:", "avx512vpopcntdq")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_512, "V8OiV8Oi", "ncV:512:", "avx512vpopcntdq")
 
 TARGET_BUILTIN(__builtin_ia32_vpopcntb_128, "V16cV16c", "ncV:128:", "avx512vl,avx512bitalg")
 TARGET_BUILTIN(__builtin_ia32_vpopcntw_128, "V8sV8s", "ncV:128:", "avx512vl,avx512bitalg")
@@ -1092,7 +1098,7 @@
 
 TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb128_mask, "UsV16cV16cUs", "ncV:128:", "avx512vl,avx512bitalg")
 TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb256_mask, "UiV32cV32cUi", "ncV:256:", "avx512vl,avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb512_mask, "ULLiV64cV64cULLi", "ncV:512:", "avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb512_mask, "UOiV64cV64cUOi", "ncV:512:", "avx512bitalg")
 
 TARGET_BUILTIN(__builtin_ia32_pmulhrsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmulhuw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
@@ -1125,8 +1131,8 @@
 
 TARGET_BUILTIN(__builtin_ia32_compressdf128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_compressdf256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressdi128_mask, "V2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressdi256_mask, "V4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdi128_mask, "V2OiV2OiV2OiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdi256_mask, "V4OiV4OiV4OiUc", "ncV:256:", "avx512vl")
 
 TARGET_BUILTIN(__builtin_ia32_compresshi128_mask, "V8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_compresshi256_mask, "V16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
@@ -1139,8 +1145,8 @@
 TARGET_BUILTIN(__builtin_ia32_compresssi256_mask, "V8iV8iV8iUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_compressstoredf128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_compressstoredf256_mask, "vV4d*V4dUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoredi128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoredi256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi128_mask, "vV2Oi*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi256_mask, "vV4Oi*V4OiUc", "nV:256:", "avx512vl")
 
 TARGET_BUILTIN(__builtin_ia32_compressstorehi128_mask, "vV8s*V8sUc", "nV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_compressstorehi256_mask, "vV16s*V16sUs", "nV:256:", "avx512vl,avx512vbmi2")
@@ -1164,8 +1170,8 @@
 TARGET_BUILTIN(__builtin_ia32_cvttps2udq256_mask, "V8iV8fV8iUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_expanddf128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_expanddf256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expanddi128_mask, "V2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expanddi256_mask, "V4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddi128_mask, "V2OiV2OiV2OiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddi256_mask, "V4OiV4OiV4OiUc", "ncV:256:", "avx512vl")
 
 TARGET_BUILTIN(__builtin_ia32_expandhi128_mask, "V8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_expandhi256_mask, "V16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
@@ -1174,8 +1180,8 @@
 
 TARGET_BUILTIN(__builtin_ia32_expandloaddf128_mask, "V2dV2dC*V2dUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_expandloaddf256_mask, "V4dV4dC*V4dUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloaddi128_mask, "V4iV2LLiC*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloaddi256_mask, "V4LLiV4LLiC*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi128_mask, "V4iV2OiC*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi256_mask, "V4OiV4OiC*V4OiUc", "nV:256:", "avx512vl")
 
 TARGET_BUILTIN(__builtin_ia32_expandloadhi128_mask, "V8sV8sC*V8sUc", "nV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_expandloadhi256_mask, "V16sV16sC*V16sUs", "nV:256:", "avx512vl,avx512vbmi2")
@@ -1194,16 +1200,16 @@
 TARGET_BUILTIN(__builtin_ia32_getexppd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_getexpps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_getexpps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pabsq128, "V2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pabsq256, "V4LLiV4LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxsq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxsq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxuq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxuq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminsq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminsq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminuq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminuq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pabsq128, "V2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pabsq256, "V4OiV4Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminsq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminsq256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminuq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminuq256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_rndscalepd_128_mask, "V2dV2dIiV2dUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_rndscalepd_256_mask, "V4dV4dIiV4dUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_rndscaleps_128_mask, "V4fV4fIiV4fUc", "ncV:128:", "avx512vl")
@@ -1213,18 +1219,18 @@
 TARGET_BUILTIN(__builtin_ia32_scalefps128_mask, "V4fV4fV4fV4fUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_scalefps256_mask, "V8fV8fV8fV8fUc", "ncV:256:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_scatterdiv2df, "vv*UcV2LLiV2dIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv2di, "vv*UcV2LLiV2LLiIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4df, "vv*UcV4LLiV4dIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4di, "vv*UcV4LLiV4LLiIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4sf, "vv*UcV2LLiV4fIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4si, "vv*UcV2LLiV4iIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8sf, "vv*UcV4LLiV4fIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8si, "vv*UcV4LLiV4iIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv2df, "vv*UcV2OiV2dIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv2di, "vv*UcV2OiV2OiIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4df, "vv*UcV4OiV4dIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4di, "vv*UcV4OiV4OiIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4sf, "vv*UcV2OiV4fIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4si, "vv*UcV2OiV4iIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8sf, "vv*UcV4OiV4fIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8si, "vv*UcV4OiV4iIi", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_scattersiv2df, "vv*UcV4iV2dIi", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv2di, "vv*UcV4iV2LLiIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv2di, "vv*UcV4iV2OiIi", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_scattersiv4df, "vv*UcV4iV4dIi", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv4di, "vv*UcV4iV4LLiIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4di, "vv*UcV4iV4OiIi", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_scattersiv4sf, "vv*UcV4iV4fIi", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_scattersiv4si, "vv*UcV4iV4iIi", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_scattersiv8sf, "vv*UcV8iV8fIi", "nV:256:", "avx512vl")
@@ -1233,15 +1239,15 @@
 TARGET_BUILTIN(__builtin_ia32_vpermi2vard128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpermi2vard256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpermi2vard512, "V16iV16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varpd128, "V2dV2dV2LLiV2d", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varpd256, "V4dV4dV4LLiV4d", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varpd512, "V8dV8dV8LLiV8d", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd128, "V2dV2dV2OiV2d", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd256, "V4dV4dV4OiV4d", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd512, "V8dV8dV8OiV8d", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vpermi2varps128, "V4fV4fV4iV4f", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpermi2varps256, "V8fV8fV8iV8f", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpermi2varps512, "V16fV16fV16iV16f", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq128, "V2OiV2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq256, "V4OiV4OiV4OiV4Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq512, "V8OiV8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vpermi2varqi128, "V16cV16cV16cV16c", "ncV:128:", "avx512vbmi,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpermi2varqi256, "V32cV32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpermi2varqi512, "V64cV64cV64cV64c", "ncV:512:", "avx512vbmi")
@@ -1252,9 +1258,9 @@
 TARGET_BUILTIN(__builtin_ia32_vpshldd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldd512, "V16iV16iV16iIi", "ncV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq128, "V2OiV2OiV2OiIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq256, "V4OiV4OiV4OiIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq512, "V8OiV8OiV8OiIi", "ncV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldw128, "V8sV8sV8sIi", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldw256, "V16sV16sV16sIi", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldw512, "V32sV32sV32sIi", "ncV:512:", "avx512vbmi2")
@@ -1262,9 +1268,9 @@
 TARGET_BUILTIN(__builtin_ia32_vpshldvd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldvd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldvd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq128, "V2OiV2OiV2OiV2Oi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq256, "V4OiV4OiV4OiV4Oi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq512, "V8OiV8OiV8OiV8Oi", "ncV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldvw128, "V8sV8sV8sV8s", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldvw256, "V16sV16sV16sV16s", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshldvw512, "V32sV32sV32sV32s", "ncV:512:", "avx512vbmi2")
@@ -1272,9 +1278,9 @@
 TARGET_BUILTIN(__builtin_ia32_vpshrdvd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdvd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdvd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq128, "V2OiV2OiV2OiV2Oi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq256, "V4OiV4OiV4OiV4Oi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq512, "V8OiV8OiV8OiV8Oi", "ncV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdvw128, "V8sV8sV8sV8s", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdvw256, "V16sV16sV16sV16s", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdvw512, "V32sV32sV32sV32s", "ncV:512:", "avx512vbmi2")
@@ -1282,9 +1288,9 @@
 TARGET_BUILTIN(__builtin_ia32_vpshrdd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdd512, "V16iV16iV16iIi", "ncV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq128, "V2OiV2OiV2OiIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq256, "V4OiV4OiV4OiIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq512, "V8OiV8OiV8OiIi", "ncV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdw128, "V8sV8sV8sIi", "ncV:128:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdw256, "V16sV16sV16sIi", "ncV:256:", "avx512vl,avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_vpshrdw512, "V32sV32sV32sIi", "ncV:512:", "avx512vbmi2")
@@ -1292,24 +1298,24 @@
 TARGET_BUILTIN(__builtin_ia32_pmovswb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovuswb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovwb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2LLiV4fUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2LLiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2OiV2dV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4OiV4dV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2OiV2dV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4OiV4dV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2OiV4fV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4OiV4fV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2OiV4fV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4OiV4fV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2OiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2OiV2dV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4OiV4dV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2OiV2dV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4OiV4dV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2OiV4fV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4OiV4fV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2OiV4fV2OiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4OiV4fV4OiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2OiV4fUc", "ncV:128:", "avx512vl,avx512dq")
 TARGET_BUILTIN(__builtin_ia32_rangepd128_mask, "V2dV2dV2dIiV2dUc", "ncV:128:", "avx512vl,avx512dq")
 TARGET_BUILTIN(__builtin_ia32_rangepd256_mask, "V4dV4dV4dIiV4dUc", "ncV:256:", "avx512vl,avx512dq")
 TARGET_BUILTIN(__builtin_ia32_rangeps128_mask, "V4fV4fV4fIiV4fUc", "ncV:128:", "avx512vl,avx512dq")
@@ -1327,46 +1333,46 @@
 TARGET_BUILTIN(__builtin_ia32_pmovuswb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovuswb256_mask, "V16cV16sV16cUs", "ncV:256:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovwb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2qq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2pd512_mask, "V8dV8LLiV8dUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2ps512_mask, "V8fV8LLiV8fUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2qq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd512_mask, "V8dV8LLiV8dUcIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps512_mask, "V8fV8LLiV8fUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq512_mask, "V8OiV8dV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq512_mask, "V8OiV8dV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq512_mask, "V8OiV8fV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq512_mask, "V8OiV8fV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2pd512_mask, "V8dV8OiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2ps512_mask, "V8fV8OiV8fUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq512_mask, "V8OiV8dV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq512_mask, "V8OiV8dV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq512_mask, "V8OiV8fV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq512_mask, "V8OiV8fV8OiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd512_mask, "V8dV8OiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps512_mask, "V8fV8OiV8fUcIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_rangepd512_mask, "V8dV8dV8dIiV8dUcIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_rangeps512_mask, "V16fV16fV16fIiV16fUsIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_reducepd512_mask, "V8dV8dIiV8dUcIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_reduceps512_mask, "V16fV16fIiV16fUsIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_prold512, "V16iV16iIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_prolq512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolq512, "V8OiV8OiIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_prold128, "V4iV4iIi", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_prold256, "V8iV8iIi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolq128, "V2LLiV2LLiIi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolq256, "V4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolq128, "V2OiV2OiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolq256, "V4OiV4OiIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_prolvd512, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_prolvq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolvq512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_prord512, "V16iV16iIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_prorq512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorq512, "V8OiV8OiIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_prolvd128, "V4iV4iV4i", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_prolvd256, "V8iV8iV8i", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolvq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolvq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvq256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_prord128, "V4iV4iIi", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_prord256, "V8iV8iIi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorq128, "V2LLiV2LLiIi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorq256, "V4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorq128, "V2OiV2OiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorq256, "V4OiV4OiIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_prorvd512, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_prorvq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorvq512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_prorvd128, "V4iV4iV4i", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_prorvd256, "V8iV8iV8i", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorvq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorvq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvq256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pshufhw512, "V32sV32sIi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pshuflw512, "V32sV32sIi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_psllv32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
@@ -1375,53 +1381,53 @@
 TARGET_BUILTIN(__builtin_ia32_psllv16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_psllv8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pslldi512, "V16iV16ii", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psllqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllqi512, "V8OiV8Oii", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psrlv32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_psrlv16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_psrlv8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_psrldi512, "V16iV16ii", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlqi512, "V8OiV8Oii", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psrav32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_psrav16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_psrav8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psravq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psravq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psravq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psravq256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_psraw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_psrawi512, "V32sV32si", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_psrlw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_psrlwi512, "V32sV32si", "ncV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pslldqi512_byteshift, "V8LLiV8LLiIi", "ncV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psrldqi512_byteshift, "V8LLiV8LLiIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pslldqi512_byteshift, "V8OiV8OiIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrldqi512_byteshift, "V8OiV8OiIi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_movdqa32load128_mask, "V4iV4i*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_movdqa32load256_mask, "V8iV8i*V8iUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_movdqa32load512_mask, "V16iV16iC*V16iUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_movdqa32store512_mask, "vV16i*V16iUs", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa64load512_mask, "V8LLiV8LLiC*V8LLiUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa64store512_mask, "vV8LLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load512_mask, "V8OiV8OiC*V8OiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store512_mask, "vV8Oi*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_movdqa32store128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_movdqa32store256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_movdqa64load128_mask, "V2LLiV2LLiC*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_movdqa64load256_mask, "V4LLiV4LLiC*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_movdqa64store128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_movdqa64store256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512ifma")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512ifma")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load128_mask, "V2OiV2OiC*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load256_mask, "V4OiV4OiC*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store128_mask, "vV2Oi*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store256_mask, "vV4Oi*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq512, "V8OiV8OiV8OiV8Oi", "ncV:512:", "avx512ifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq512, "V8OiV8OiV8OiV8Oi", "ncV:512:", "avx512ifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq128, "V2OiV2OiV2OiV2Oi", "ncV:128:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq256, "V4OiV4OiV4OiV4Oi", "ncV:256:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq128, "V2OiV2OiV2OiV2Oi", "ncV:128:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq256, "V4OiV4OiV4OiV4Oi", "ncV:256:", "avx512ifma,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vcomisd, "iV2dV2dIiIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vcomiss, "iV4fV4fIiIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_kunpckdi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kunpckdi, "UOiUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kunpcksi, "UiUiUi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_loaddquhi512_mask, "V32sV32s*V32sUi", "nV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_loaddquqi512_mask, "V64cV64c*V64cULLi", "nV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_mask, "V8dV8dV8dV8LLiIiUcIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_maskz, "V8dV8dV8dV8LLiIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddquqi512_mask, "V64cV64c*V64cUOi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_mask, "V8dV8dV8dV8OiIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_maskz, "V8dV8dV8dV8OiIiUcIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_fixupimmps512_mask, "V16fV16fV16fV16iIiUsIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_fixupimmps512_maskz, "V16fV16fV16fV16iIiUsIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmsd_mask, "V2dV2dV2dV2LLiIiUcIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmsd_maskz, "V2dV2dV2dV2LLiIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmsd_mask, "V2dV2dV2dV2OiIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmsd_maskz, "V2dV2dV2dV2OiIiUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_fixupimmss_mask, "V4fV4fV4fV4iIiUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_fixupimmss_maskz, "V4fV4fV4fV4iIiUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_getexpsd128_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
@@ -1432,10 +1438,10 @@
 TARGET_BUILTIN(__builtin_ia32_loaddquhi256_mask, "V16sV16s*V16sUs", "nV:256:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_loaddquqi128_mask, "V16cV16c*V16cUs", "nV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_loaddquqi256_mask, "V32cV32c*V32cUi", "nV:256:", "avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_mask, "V2dV2dV2dV2LLiIiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_maskz, "V2dV2dV2dV2LLiIiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_mask, "V4dV4dV4dV4LLiIiUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_maskz, "V4dV4dV4dV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_mask, "V2dV2dV2dV2OiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_maskz, "V2dV2dV2dV2OiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_mask, "V4dV4dV4dV4OiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_maskz, "V4dV4dV4dV4OiIiUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_fixupimmps128_mask, "V4fV4fV4fV4iIiUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_fixupimmps128_maskz, "V4fV4fV4fV4iIiUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_fixupimmps256_mask, "V8fV8fV8fV8iIiUc", "ncV:256:", "avx512vl")
@@ -1446,8 +1452,8 @@
 TARGET_BUILTIN(__builtin_ia32_loadaps128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_loadss128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_loadaps256_mask, "V8fV8f*V8fUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddqudi128_mask, "V2LLiV2LLi*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddqudi256_mask, "V4LLiV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi128_mask, "V2OiV2Oi*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi256_mask, "V4OiV4Oi*V4OiUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_loaddqusi128_mask, "V4iV4i*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_loaddqusi256_mask, "V8iV8i*V8iUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_loadupd128_mask, "V2dV2d*V2dUc", "nV:128:", "avx512vl")
@@ -1455,7 +1461,7 @@
 TARGET_BUILTIN(__builtin_ia32_loadups128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_loadups256_mask, "V8fV8f*V8fUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_storedquhi512_mask, "vV32s*V32sUi", "nV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_storedquqi512_mask, "vV64c*V64cULLi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquqi512_mask, "vV64c*V64cUOi", "nV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_storedquhi128_mask, "vV8s*V8sUc", "nV:128:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_storedquhi256_mask, "vV16s*V16sUs", "nV:256:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_storedquqi128_mask, "vV16c*V16cUs", "nV:128:", "avx512vl,avx512bw")
@@ -1466,8 +1472,8 @@
 TARGET_BUILTIN(__builtin_ia32_storeaps128_mask, "vV4f*V4fUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_storess128_mask, "vV4f*V4fUc", "nV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_storeaps256_mask, "vV8f*V8fUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storedqudi128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storedqudi256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqudi128_mask, "vV2Oi*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqudi256_mask, "vV4Oi*V4OiUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_storedqusi128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_storedqusi256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_storeupd128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
@@ -1480,8 +1486,8 @@
 TARGET_BUILTIN(__builtin_ia32_rcp14ps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vplzcntd_128, "V4iV4i", "ncV:128:", "avx512cd,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vplzcntd_256, "V8iV8i", "ncV:256:", "avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vplzcntq_128, "V2LLiV2LLi", "ncV:128:", "avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vplzcntq_256, "V4LLiV4LLi", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_128, "V2OiV2Oi", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_256, "V4OiV4Oi", "ncV:256:", "avx512cd,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vcvtsd2si32, "iV2dIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi32, "UiV2dIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vcvtss2si32, "iV4fIi", "ncV:128:", "avx512f")
@@ -1492,7 +1498,7 @@
 TARGET_BUILTIN(__builtin_ia32_vcvttss2usi32, "UiV4fIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vpermilpd512, "V8dV8dIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vpermilps512, "V16fV16fIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarpd512, "V8dV8dV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd512, "V8dV8dV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vpermilvarps512, "V16fV16fV16i", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_rndscalesd_round_mask, "V2dV2dV2dV2dUcIiIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_rndscaless_round_mask, "V4fV4fV4fV4fUcIiIi", "ncV:128:", "avx512f")
@@ -1501,58 +1507,58 @@
 TARGET_BUILTIN(__builtin_ia32_scalefsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_scalefss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psradi512, "V16iV16ii", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psraqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psraq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psraq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psraqi128, "V2LLiV2LLii", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psraqi256, "V4LLiV4LLii", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraqi512, "V8OiV8Oii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraq128, "V2OiV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraq256, "V4OiV4OiV2Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraqi128, "V2OiV2Oii", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraqi256, "V4OiV4Oii", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pslld512, "V16iV16iV4i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psllq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllq512, "V8OiV8OiV2Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psllv16si, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psllv8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllv8di, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psrad512, "V16iV16iV4i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psraq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraq512, "V8OiV8OiV2Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psrav16si, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrav8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrav8di, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psrld512, "V16iV16iV4i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlq512, "V8OiV8OiV2Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_psrlv16si, "V16iV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlv8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlv8di, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pternlogd512_mask, "V16iV16iV16iV16iIiUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pternlogd512_maskz, "V16iV16iV16iV16iIiUs", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pternlogq512_mask, "V8LLiV8LLiV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pternlogq512_maskz, "V8LLiV8LLiV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogq512_mask, "V8OiV8OiV8OiV8OiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogq512_maskz, "V8OiV8OiV8OiV8OiIiUc", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pternlogd128_mask, "V4iV4iV4iV4iIiUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pternlogd128_maskz, "V4iV4iV4iV4iIiUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pternlogd256_mask, "V8iV8iV8iV8iIiUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pternlogd256_maskz, "V8iV8iV8iV8iIiUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq128_mask, "V2LLiV2LLiV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq128_maskz, "V2LLiV2LLiV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq256_mask, "V4LLiV4LLiV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq256_maskz, "V4LLiV4LLiV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq128_mask, "V2OiV2OiV2OiV2OiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq128_maskz, "V2OiV2OiV2OiV2OiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq256_mask, "V4OiV4OiV4OiV4OiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq256_maskz, "V4OiV4OiV4OiV4OiIiUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_shuf_f32x4, "V16fV16fV16fIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_shuf_f64x2, "V8dV8dV8dIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_shuf_i32x4, "V16iV16iV16iIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_shuf_i64x2, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_i64x2, "V8OiV8OiV8OiIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_shufpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_shufps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_shuf_f32x4_256, "V8fV8fV8fIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_shuf_f64x2_256, "V4dV4dV4dIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_shuf_i32x4_256, "V8iV8iV8iIi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_shuf_i64x2_256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_i64x2_256, "V4OiV4OiV4OiIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_sqrtsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_sqrtss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_rsqrt14pd128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_rsqrt14pd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_rsqrt14ps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_rsqrt14ps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtb2mask512, "ULLiV64c", "ncV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2b512, "V64cULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtb2mask512, "UOiV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2b512, "V64cUOi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_cvtmask2w512, "V32sUi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_cvtd2mask512, "UsV16i", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_cvtmask2d512, "V16iUs", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2q512, "V8LLiUc", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtq2mask512, "UcV8LLi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q512, "V8OiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask512, "UcV8Oi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_cvtb2mask128, "UsV16c", "ncV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_cvtb2mask256, "UiV32c", "ncV:256:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_cvtmask2b128, "V16cUs", "ncV:128:", "avx512bw,avx512vl")
@@ -1563,21 +1569,21 @@
 TARGET_BUILTIN(__builtin_ia32_cvtd2mask256, "UcV8i", "ncV:256:", "avx512dq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_cvtmask2d128, "V4iUc", "ncV:128:", "avx512dq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_cvtmask2d256, "V8iUc", "ncV:256:", "avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2q128, "V2LLiUc", "ncV:128:", "avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2q256, "V4LLiUc", "ncV:256:", "avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtq2mask128, "UcV2LLi", "ncV:128:", "avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtq2mask256, "UcV4LLi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q128, "V2OiUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q256, "V4OiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask128, "UcV2Oi", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask256, "UcV4Oi", "ncV:256:", "avx512dq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovsdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovsdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovswb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovsdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovsdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb512_mask, "V16cV8OiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb512mem_mask, "vV16c*V8OiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd512_mask, "V8iV8OiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd512mem_mask, "vV8i*V8OiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw512_mask, "V8sV8OiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw512mem_mask, "vV8s*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovsdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovsdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovswb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
@@ -1588,29 +1594,29 @@
 TARGET_BUILTIN(__builtin_ia32_pmovsdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovsdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovsdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd256_mask, "V4iV4LLiV4iUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb128_mask, "V16cV2OiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb128mem_mask, "vV16c*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb256_mask, "V16cV4OiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb256mem_mask, "vV16c*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd128_mask, "V4iV2OiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd128mem_mask, "vV4i*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd256_mask, "V4iV4OiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd256mem_mask, "vV4i*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw128_mask, "V8sV2OiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw128mem_mask, "vV8s*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw256_mask, "V8sV4OiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw256mem_mask, "vV8s*V4OiUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovusdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovusdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovuswb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovusdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovusdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb512_mask, "V16cV8OiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb512mem_mask, "vV16c*V8OiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd512_mask, "V8iV8OiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd512mem_mask, "vV8i*V8OiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw512_mask, "V8sV8OiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw512mem_mask, "vV8s*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovusdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovusdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovuswb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
@@ -1621,29 +1627,29 @@
 TARGET_BUILTIN(__builtin_ia32_pmovusdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovusdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovusdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd256_mask, "V4iV4LLiV4iUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb128_mask, "V16cV2OiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb128mem_mask, "vV16c*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb256_mask, "V16cV4OiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb256mem_mask, "vV16c*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd128_mask, "V4iV2OiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd128mem_mask, "vV4i*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd256_mask, "V4iV4OiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd256mem_mask, "vV4i*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw128_mask, "V8sV2OiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw128mem_mask, "vV8s*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw256_mask, "V8sV4OiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw256mem_mask, "vV8s*V4OiUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovwb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqb512_mask, "V16cV8OiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqb512mem_mask, "vV16c*V8OiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqd512_mask, "V8iV8OiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqd512mem_mask, "vV8i*V8OiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqw512_mask, "V8sV8OiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqw512mem_mask, "vV8s*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pmovdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovwb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
 TARGET_BUILTIN(__builtin_ia32_pmovdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
@@ -1654,35 +1660,35 @@
 TARGET_BUILTIN(__builtin_ia32_pmovdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_pmovdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb128_mask, "V16cV2OiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb128mem_mask, "vV16c*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb256_mask, "V16cV4OiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb256mem_mask, "vV16c*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd128_mask, "V4iV2OiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd128mem_mask, "vV4i*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd256mem_mask, "vV4i*V4OiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw128_mask, "V8sV2OiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw128mem_mask, "vV8s*V2OiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw256_mask, "V8sV4OiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw256mem_mask, "vV8s*V4OiUc", "nV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_extractf32x8_mask, "V8fV16fIiV8fUc", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_extractf64x2_512_mask, "V2dV8dIiV2dUc", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_extracti32x8_mask, "V8iV16iIiV8iUc", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_extracti64x2_512_mask, "V2LLiV8LLiIiV2LLiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extracti64x2_512_mask, "V2OiV8OiIiV2OiUc", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_extracti32x4_mask, "V4iV16iIiV4iUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_extracti64x4_mask, "V4LLiV8LLiIiV4LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_extracti64x4_mask, "V4OiV8OiIiV4OiUc", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_extractf64x2_256_mask, "V2dV4dIiV2dUc", "ncV:256:", "avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_extracti64x2_256_mask, "V2LLiV4LLiIiV2LLiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extracti64x2_256_mask, "V2OiV4OiIiV2OiUc", "ncV:256:", "avx512dq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_extractf32x4_256_mask, "V4fV8fIiV4fUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_extracti32x4_256_mask, "V4iV8iIiV4iUc", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_insertf32x8, "V16fV16fV8fIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_insertf64x2_512, "V8dV8dV2dIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_inserti32x8, "V16iV16iV8iIi", "ncV:512:", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_inserti64x2_512, "V8LLiV8LLiV2LLiIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_inserti64x2_512, "V8OiV8OiV2OiIi", "ncV:512:", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_insertf64x4, "V8dV8dV4dIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_inserti64x4, "V8LLiV8LLiV4LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_inserti64x4, "V8OiV8OiV4OiIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_insertf64x2_256, "V4dV4dV2dIi", "ncV:256:", "avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_inserti64x2_256, "V4LLiV4LLiV2LLiIi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_inserti64x2_256, "V4OiV4OiV2OiIi", "ncV:256:", "avx512dq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_insertf32x4_256, "V8fV8fV4fIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_inserti32x4_256, "V8iV8iV4iIi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_insertf32x4, "V16fV16fV4fIi", "ncV:512:", "avx512f")
@@ -1704,10 +1710,10 @@
 TARGET_BUILTIN(__builtin_ia32_vfmsubsd3_mask3, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vfmsubss3_mask3, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_permdf512, "V8dV8dIi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_permdi512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permdi512, "V8OiV8OiIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_permvarhi512, "V32sV32sV32s", "ncV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_permvardf512, "V8dV8dV8LLi", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_permvardi512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvardf512, "V8dV8dV8Oi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvardi512, "V8OiV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_permvarsf512, "V16fV16fV16i", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_permvarsi512, "V16iV16iV16i", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_permvarqi512, "V64cV64cV64c", "ncV:512:", "avx512vbmi")
@@ -1715,8 +1721,8 @@
 TARGET_BUILTIN(__builtin_ia32_permvarqi256, "V32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_permvarhi128, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_permvarhi256, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_permvardf256, "V4dV4dV4LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_permvardi256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvardf256, "V4dV4dV4Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvardi256, "V4OiV4OiV4Oi", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_fpclasspd128_mask, "UcV2dIiUc", "ncV:128:", "avx512dq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_fpclasspd256_mask, "UcV4dIiUc", "ncV:256:", "avx512dq,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_fpclassps128_mask, "UcV4fIiUc", "ncV:128:", "avx512dq,avx512vl")
@@ -1728,87 +1734,87 @@
 TARGET_BUILTIN(__builtin_ia32_kaddqi, "UcUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kaddhi, "UsUsUs", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kaddsi, "UiUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kadddi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kadddi, "UOiUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kandqi, "UcUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kandhi, "UsUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kandsi, "UiUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kanddi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kanddi, "UOiUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kandnqi, "UcUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kandnhi, "UsUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kandnsi, "UiUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kandndi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kandndi, "UOiUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_korqi, "UcUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_korhi, "UsUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_korsi, "UiUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kordi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kordi, "UOiUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kortestcqi, "iUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kortestzqi, "iUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kortestchi, "iUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kortestzhi, "iUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kortestcsi, "iUiUi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kortestzsi, "iUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kortestcdi, "iULLiULLi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kortestzdi, "iULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kortestcdi, "iUOiUOi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kortestzdi, "iUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_ktestcqi, "iUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_ktestzqi, "iUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_ktestchi, "iUsUs", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_ktestzhi, "iUsUs", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_ktestcsi, "iUiUi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_ktestzsi, "iUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ktestcdi, "iULLiULLi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ktestzdi, "iULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ktestcdi, "iUOiUOi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ktestzdi, "iUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kunpckhi, "UsUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kxnorqi, "UcUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kxnorhi, "UsUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kxnorsi, "UiUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kxnordi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kxnordi, "UOiUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kxorqi, "UcUcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kxorhi, "UsUsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kxorsi, "UiUiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kxordi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kxordi, "UOiUOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kshiftliqi, "UcUcIUi", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kshiftlihi, "UsUsIUi", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kshiftlisi, "UiUiIUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kshiftlidi, "ULLiULLiIUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kshiftlidi, "UOiUOiIUi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kshiftriqi, "UcUcIUi", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kshiftrihi, "UsUsIUi", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kshiftrisi, "UiUiIUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kshiftridi, "ULLiULLiIUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kshiftridi, "UOiUOiIUi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_kmovb, "UcUc", "nc", "avx512dq")
 TARGET_BUILTIN(__builtin_ia32_kmovw, "UsUs", "nc", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_kmovd, "UiUi", "nc", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kmovq, "ULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kmovq, "UOiUOi", "nc", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_palignr512, "V64cV64cV64cIi", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_dbpsadbw128, "V8sV16cV16cIi", "ncV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_dbpsadbw256, "V16sV32cV32cIi", "ncV:256:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_dbpsadbw512, "V32sV64cV64cIi", "ncV:512:", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psadbw512, "V8LLiV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psadbw512, "V8OiV64cV64c", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_compressdf512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_compressdi512_mask, "V8LLiV8LLiV8LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressdi512_mask, "V8OiV8OiV8OiUc", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_compresshi512_mask, "V32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressqi512_mask, "V64cV64cV64cULLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressqi512_mask, "V64cV64cV64cUOi", "ncV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_compresssf512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_compresssi512_mask, "V16iV16iV16iUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_cmpsd_mask, "UcV2dV2dIiUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_cmpss_mask, "UcV4fV4fIiUcIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_pshufd512, "V16iV16iIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_expanddf512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_expanddi512_mask, "V8LLiV8LLiV8LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expanddi512_mask, "V8OiV8OiV8OiUc", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_expandhi512_mask, "V32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandqi512_mask, "V64cV64cV64cULLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandqi512_mask, "V64cV64cV64cUOi", "ncV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_expandloaddf512_mask, "V8dV8dC*V8dUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_expandloaddi512_mask, "V8LLiV8LLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi512_mask, "V8OiV8OiC*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_expandloadhi512_mask, "V32sV32sC*V32sUi", "nV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandloadqi512_mask, "V64cV64cC*V64cULLi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadqi512_mask, "V64cV64cC*V64cUOi", "nV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_expandloadsf512_mask, "V16fV16fC*V16fUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_expandloadsi512_mask, "V16iV16iC*V16iUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_expandsf512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_expandsi512_mask, "V16iV16iV16iUs", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_cvtps2pd512_mask, "V8dV8fV8dUcIi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_compressstoredf512_mask, "vV8d*V8dUc", "nV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_compressstoredi512_mask, "vV8LLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi512_mask, "vV8Oi*V8OiUc", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_compressstorehi512_mask, "vV32s*V32sUi", "nV:512:", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressstoreqi512_mask, "vV64c*V64cULLi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoreqi512_mask, "vV64c*V64cUOi", "nV:512:", "avx512vbmi2")
 TARGET_BUILTIN(__builtin_ia32_compressstoresf512_mask, "vV16f*V16fUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_compressstoresi512_mask, "vV16i*V16iUs", "nV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_vcvtph2ps_mask, "V4fV8sV4fUc", "ncV:128:", "avx512vl")
@@ -1826,19 +1832,38 @@
 TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb128, "V16cV16cV16c", "ncV:128:", "avx512vbmi,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb256, "V32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
 
+// bf16 intrinsics
+TARGET_BUILTIN(__builtin_ia32_cvtne2ps2bf16_128, "V8sV4fV4f", "ncV:128:", "avx512bf16,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtne2ps2bf16_256, "V16sV8fV8f", "ncV:256:", "avx512bf16,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtne2ps2bf16_512, "V32sV16fV16f", "ncV:512:", "avx512bf16")
+TARGET_BUILTIN(__builtin_ia32_cvtneps2bf16_128_mask, "V8sV4fV8sUc", "ncV:128:", "avx512bf16,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtneps2bf16_256_mask, "V8sV8fV8sUc", "ncV:256:", "avx512bf16,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtneps2bf16_512_mask, "V16sV16fV16sUs", "ncV:512:", "avx512bf16")
+TARGET_BUILTIN(__builtin_ia32_dpbf16ps_128, "V4fV4fV4iV4i", "ncV:128:", "avx512bf16,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_dpbf16ps_256, "V8fV8fV8iV8i", "ncV:256:", "avx512bf16,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_dpbf16ps_512, "V16fV16fV16iV16i", "ncV:512:", "avx512bf16")
+TARGET_BUILTIN(__builtin_ia32_cvtsbf162ss_32, "fUs", "nc", "avx512bf16")
+
+TARGET_BUILTIN(__builtin_ia32_vp2intersect_q_512, "vV8OiV8OiUc*Uc*", "nV:512:", "avx512vp2intersect")
+TARGET_BUILTIN(__builtin_ia32_vp2intersect_q_256, "vV4OiV4OiUc*Uc*", "nV:256:", "avx512vp2intersect,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vp2intersect_q_128, "vV2OiV2OiUc*Uc*", "nV:128:", "avx512vp2intersect,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vp2intersect_d_512, "vV16iV16iUs*Us*", "nV:512:", "avx512vp2intersect")
+TARGET_BUILTIN(__builtin_ia32_vp2intersect_d_256, "vV8iV8iUc*Uc*", "nV:256:", "avx512vp2intersect,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vp2intersect_d_128, "vV4iV4iUc*Uc*", "nV:128:", "avx512vp2intersect,avx512vl")
+
 // generic select intrinsics
 TARGET_BUILTIN(__builtin_ia32_selectb_128, "V16cUsV16cV16c", "ncV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_selectb_256, "V32cUiV32cV32c", "ncV:256:", "avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_selectb_512, "V64cULLiV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_selectb_512, "V64cUOiV64cV64c", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_selectw_128, "V8sUcV8sV8s", "ncV:128:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_selectw_256, "V16sUsV16sV16s", "ncV:256:", "avx512bw,avx512vl")
 TARGET_BUILTIN(__builtin_ia32_selectw_512, "V32sUiV32sV32s", "ncV:512:", "avx512bw")
 TARGET_BUILTIN(__builtin_ia32_selectd_128, "V4iUcV4iV4i", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_selectd_256, "V8iUcV8iV8i", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_selectd_512, "V16iUsV16iV16i", "ncV:512:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_selectq_128, "V2LLiUcV2LLiV2LLi", "ncV:128:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_selectq_256, "V4LLiUcV4LLiV4LLi", "ncV:256:", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_selectq_512, "V8LLiUcV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectq_128, "V2OiUcV2OiV2Oi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectq_256, "V4OiUcV4OiV4Oi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectq_512, "V8OiUcV8OiV8Oi", "ncV:512:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_selectps_128, "V4fUcV4fV4f", "ncV:128:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_selectps_256, "V8fUcV8fV8f", "ncV:256:", "avx512vl")
 TARGET_BUILTIN(__builtin_ia32_selectps_512, "V16fUsV16fV16f", "ncV:512:", "avx512f")
@@ -1873,6 +1898,10 @@
 // INVPCID
 TARGET_BUILTIN(__builtin_ia32_invpcid, "vUiv*", "nc", "invpcid")
 
+// ENQCMD
+TARGET_BUILTIN(__builtin_ia32_enqcmd, "Ucv*vC*", "n", "enqcmd")
+TARGET_BUILTIN(__builtin_ia32_enqcmds, "Ucv*vC*", "n", "enqcmd")
+
 // MSVC
 TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(_BitScanReverse, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def b/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def
index 59b60c3..56051af 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def
@@ -43,65 +43,65 @@
 TARGET_HEADER_BUILTIN(_InterlockedXor64,         "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(_InterlockedCompareExchange128, "UcLLiD*LLiLLiLLi*", "nh", "intrin.h", ALL_MS_LANGUAGES, "cx16")
 
-TARGET_BUILTIN(__builtin_ia32_readeflags_u64, "ULLi", "n", "")
-TARGET_BUILTIN(__builtin_ia32_writeeflags_u64, "vULLi", "n", "")
-TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "ncV:128:", "sse")
-TARGET_BUILTIN(__builtin_ia32_cvttss2si64, "LLiV4f", "ncV:128:", "sse")
-TARGET_BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvttsd2si64, "LLiV2d", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_movnti64, "vLLi*LLi", "n", "sse2")
-TARGET_BUILTIN(__builtin_ia32_vec_ext_v2di, "LLiV2LLiIi", "ncV:128:", "sse2")
-TARGET_BUILTIN(__builtin_ia32_vec_set_v2di, "V2LLiV2LLiLLiIi", "ncV:128:", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_crc32di, "ULLiULLiULLi", "nc", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_vec_ext_v4di, "LLiV4LLiIi", "ncV:256:", "avx")
-TARGET_BUILTIN(__builtin_ia32_vec_set_v4di, "V4LLiV4LLiLLiIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_readeflags_u64, "UOi", "n", "")
+TARGET_BUILTIN(__builtin_ia32_writeeflags_u64, "vUOi", "n", "")
+TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "OiV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvttss2si64, "OiV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2si64, "OiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttsd2si64, "OiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_movnti64, "vOi*Oi", "n", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v2di, "OiV2OiIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v2di, "V2OiV2OiOiIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_crc32di, "UOiUOiUOi", "nc", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4di, "OiV4OiIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v4di, "V4OiV4OiOiIi", "ncV:256:", "avx")
 TARGET_BUILTIN(__builtin_ia32_rdfsbase32, "Ui", "n", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_rdfsbase64, "ULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdfsbase64, "UOi", "n", "fsgsbase")
 TARGET_BUILTIN(__builtin_ia32_rdgsbase32, "Ui", "n", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_rdgsbase64, "ULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdgsbase64, "UOi", "n", "fsgsbase")
 TARGET_BUILTIN(__builtin_ia32_wrfsbase32, "vUi", "n", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_wrfsbase64, "vULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrfsbase64, "vUOi", "n", "fsgsbase")
 TARGET_BUILTIN(__builtin_ia32_wrgsbase32, "vUi", "n", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_wrgsbase64, "vULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrgsbase64, "vUOi", "n", "fsgsbase")
 TARGET_BUILTIN(__builtin_ia32_fxrstor64, "vv*", "n", "fxsr")
 TARGET_BUILTIN(__builtin_ia32_fxsave64, "vv*", "n", "fxsr")
-TARGET_BUILTIN(__builtin_ia32_xsave64, "vv*ULLi", "n", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xrstor64, "vv*ULLi", "n", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xsaveopt64, "vv*ULLi", "n", "xsaveopt")
-TARGET_BUILTIN(__builtin_ia32_xrstors64, "vv*ULLi", "n", "xsaves")
-TARGET_BUILTIN(__builtin_ia32_xsavec64, "vv*ULLi", "n", "xsavec")
-TARGET_BUILTIN(__builtin_ia32_xsaves64, "vv*ULLi", "n", "xsaves")
-TARGET_BUILTIN(__builtin_ia32_incsspq, "vULLi", "n", "shstk")
-TARGET_BUILTIN(__builtin_ia32_rdsspq, "ULLiULLi", "n", "shstk")
-TARGET_BUILTIN(__builtin_ia32_wrssq, "vULLiv*", "n", "shstk")
-TARGET_BUILTIN(__builtin_ia32_wrussq, "vULLiv*", "n", "shstk")
-TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "n", "")
-TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "n", "")
-TARGET_BUILTIN(__builtin_ia32_rdrand64_step, "UiULLi*", "n", "rdrnd")
-TARGET_BUILTIN(__builtin_ia32_rdseed64_step, "UiULLi*", "n", "rdseed")
-TARGET_BUILTIN(__builtin_ia32_lzcnt_u64, "ULLiULLi", "nc", "lzcnt")
-TARGET_BUILTIN(__builtin_ia32_bextr_u64, "ULLiULLiULLi", "nc", "bmi")
-TARGET_BUILTIN(__builtin_ia32_tzcnt_u64, "ULLiULLi", "nc", "")
-TARGET_BUILTIN(__builtin_ia32_bzhi_di, "ULLiULLiULLi", "nc", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_pdep_di, "ULLiULLiULLi", "nc", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_pext_di, "ULLiULLiULLi", "nc", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "nc", "tbm")
-TARGET_BUILTIN(__builtin_ia32_lwpins64, "UcULLiUiUi", "n", "lwp")
-TARGET_BUILTIN(__builtin_ia32_lwpval64, "vULLiUiUi", "n", "lwp")
-TARGET_BUILTIN(__builtin_ia32_vcvtsd2si64, "LLiV2dIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi64, "ULLiV2dIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtss2si64, "LLiV4fIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtss2usi64, "ULLiV4fIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttsd2si64, "LLiV2dIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi64, "ULLiV2dIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttss2si64, "LLiV4fIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttss2usi64, "ULLiV4fIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtsi2sd64, "V2dV2dLLiIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtsi2ss64, "V4fV4fLLiIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtusi2sd64, "V2dV2dULLiIi", "ncV:128:", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtusi2ss64, "V4fV4fULLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_xsave64, "vv*UOi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xrstor64, "vv*UOi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xsaveopt64, "vv*UOi", "n", "xsaveopt")
+TARGET_BUILTIN(__builtin_ia32_xrstors64, "vv*UOi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsavec64, "vv*UOi", "n", "xsavec")
+TARGET_BUILTIN(__builtin_ia32_xsaves64, "vv*UOi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_incsspq, "vUOi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_rdsspq, "UOiUOi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrssq, "vUOiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrussq, "vUOiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcUOiUOiUOi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcUOiUOiUOi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_rdrand64_step, "UiUOi*", "n", "rdrnd")
+TARGET_BUILTIN(__builtin_ia32_rdseed64_step, "UiUOi*", "n", "rdseed")
+TARGET_BUILTIN(__builtin_ia32_lzcnt_u64, "UOiUOi", "nc", "lzcnt")
+TARGET_BUILTIN(__builtin_ia32_bextr_u64, "UOiUOiUOi", "nc", "bmi")
+TARGET_BUILTIN(__builtin_ia32_tzcnt_u64, "UOiUOi", "nc", "")
+TARGET_BUILTIN(__builtin_ia32_bzhi_di, "UOiUOiUOi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pdep_di, "UOiUOiUOi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pext_di, "UOiUOiUOi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_bextri_u64, "UOiUOiIUOi", "nc", "tbm")
+TARGET_BUILTIN(__builtin_ia32_lwpins64, "UcUOiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_lwpval64, "vUOiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2si64, "OiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi64, "UOiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2si64, "OiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2usi64, "UOiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2si64, "OiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi64, "UOiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2si64, "OiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2usi64, "UOiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2sd64, "V2dV2dOiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2ss64, "V4fV4fOiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2sd64, "V2dV2dUOiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2ss64, "V4fV4fUOiIi", "ncV:128:", "avx512f")
 TARGET_BUILTIN(__builtin_ia32_directstore_u64, "vULi*ULi", "n", "movdiri")
-TARGET_BUILTIN(__builtin_ia32_ptwrite64, "vULLi", "n", "ptwrite")
+TARGET_BUILTIN(__builtin_ia32_ptwrite64, "vUOi", "n", "ptwrite")
 
 #undef BUILTIN
 #undef TARGET_BUILTIN
diff --git a/linux-x64/clang/include/clang/Basic/CodeGenOptions.def b/linux-x64/clang/include/clang/Basic/CodeGenOptions.def
index 2a8574e..6358a08 100644
--- a/linux-x64/clang/include/clang/Basic/CodeGenOptions.def
+++ b/linux-x64/clang/include/clang/Basic/CodeGenOptions.def
@@ -61,6 +61,7 @@
 CODEGENOPT(DebugPassManager, 1, 0) ///< Prints debug information for the new
                                    ///< pass manager.
 CODEGENOPT(DisableRedZone    , 1, 0) ///< Set when -mno-red-zone is enabled.
+CODEGENOPT(EnableDebugEntryValues, 1, 0) ///< Emit call site parameter dbg info
 CODEGENOPT(IndirectTlsSegRefs, 1, 0) ///< Set when -mno-tls-direct-seg-refs
                                      ///< is specified.
 CODEGENOPT(DisableTailCalls  , 1, 0) ///< Do not emit tail calls.
@@ -224,6 +225,7 @@
 CODEGENOPT(StrictEnums       , 1, 0) ///< Optimize based on strict enum definition.
 CODEGENOPT(StrictVTablePointers, 1, 0) ///< Optimize based on the strict vtable pointers
 CODEGENOPT(TimePasses        , 1, 0) ///< Set when -ftime-report is enabled.
+CODEGENOPT(TimeTrace         , 1, 0) ///< Set when -ftime-trace is enabled.
 CODEGENOPT(UnrollLoops       , 1, 0) ///< Control whether loops are unrolled.
 CODEGENOPT(RerollLoops       , 1, 0) ///< Control whether loops are rerolled.
 CODEGENOPT(NoUseJumpTables   , 1, 0) ///< Set when -fno-jump-tables is enabled.
@@ -259,8 +261,6 @@
                                        ///< contain explicit imports for
                                        ///< anonymous namespaces
 
-ENUM_CODEGENOPT(SplitDwarfMode, DwarfFissionKind, 2, NoFission) ///< DWARF fission mode to use.
-
 CODEGENOPT(SplitDwarfInlining, 1, 1) ///< Whether to include inlining info in the
                                      ///< skeleton CU to allow for symbolication
                                      ///< of inline stack frames without .dwo files.
diff --git a/linux-x64/clang/include/clang/Basic/CodeGenOptions.h b/linux-x64/clang/include/clang/Basic/CodeGenOptions.h
index 5c8abe3..4e9025d 100644
--- a/linux-x64/clang/include/clang/Basic/CodeGenOptions.h
+++ b/linux-x64/clang/include/clang/Basic/CodeGenOptions.h
@@ -53,6 +53,7 @@
   enum VectorLibrary {
     NoLibrary,  // Don't use any vector library.
     Accelerate, // Use the Accelerate framework.
+    MASSV,      // IBM MASS vector library.
     SVML        // Intel short vector math library.
   };
 
@@ -70,8 +71,6 @@
     LocalExecTLSModel
   };
 
-  enum DwarfFissionKind { NoFission, SplitFileFission, SingleFileFission };
-
   /// Clang versions with different platform ABI conformance.
   enum class ClangABI {
     /// Attempt to be ABI-compatible with code generated by Clang 3.8.x
@@ -100,6 +99,7 @@
     ProfileClangInstr, // Clang instrumentation to generate execution counts
                        // to use with PGO.
     ProfileIRInstr,    // IR level PGO instrumentation in LLVM.
+    ProfileCSIRInstr, // IR level PGO context sensitive instrumentation in LLVM.
   };
 
   enum EmbedBitcodeKind {
@@ -183,10 +183,13 @@
   /// file, for example with -save-temps.
   std::string MainFileName;
 
-  /// The name for the split debug info file that we'll break out. This is used
-  /// in the backend for setting the name in the skeleton cu.
+  /// The name for the split debug info file used for the DW_AT_[GNU_]dwo_name
+  /// attribute in the skeleton CU.
   std::string SplitDwarfFile;
 
+  /// Output filename for the split debug info, not used in the skeleton CU.
+  std::string SplitDwarfOutput;
+
   /// The name of the relocation model to use.
   llvm::Reloc::Model RelocationModel;
 
@@ -203,8 +206,8 @@
   /// A list of linker options to embed in the object file.
   std::vector<std::string> LinkerOptions;
 
-  /// Name of the profile file to use as output for -fprofile-instr-generate
-  /// and -fprofile-generate.
+  /// Name of the profile file to use as output for -fprofile-instr-generate,
+  /// -fprofile-generate, and -fcs-profile-generate.
   std::string InstrProfileOutput;
 
   /// Name of the profile file to use with -fprofile-sample-use.
@@ -237,6 +240,17 @@
   /// records.
   std::string OptRecordFile;
 
+  /// The regex that filters the passes that should be saved to the optimization
+  /// records.
+  std::string OptRecordPasses;
+
+  /// The format used for serializing remarks (default: YAML)
+  std::string OptRecordFormat;
+
+  /// The name of the partition that symbols are assigned to, specified with
+  /// -fsymbol-partition (see https://lld.llvm.org/Partitions.html).
+  std::string SymbolPartition;
+
   /// Regular expression to select optimizations for which we should enable
   /// optimization remarks. Transformation passes whose name matches this
   /// expression (and support this feature), will emit a diagnostic
@@ -318,6 +332,11 @@
     return getProfileInstr() == ProfileIRInstr;
   }
 
+  /// Check if CS IR level profile instrumentation is on.
+  bool hasProfileCSIRInstr() const {
+    return getProfileInstr() == ProfileCSIRInstr;
+  }
+
   /// Check if Clang profile use is on.
   bool hasProfileClangUse() const {
     return getProfileUse() == ProfileClangInstr;
@@ -325,9 +344,12 @@
 
   /// Check if IR level profile use is on.
   bool hasProfileIRUse() const {
-    return getProfileUse() == ProfileIRInstr;
+    return getProfileUse() == ProfileIRInstr ||
+           getProfileUse() == ProfileCSIRInstr;
   }
 
+  /// Check if CSIR profile use is on.
+  bool hasProfileCSIRUse() const { return getProfileUse() == ProfileCSIRInstr; }
 };
 
 }  // end namespace clang
diff --git a/linux-x64/clang/include/clang/Basic/Cuda.h b/linux-x64/clang/include/clang/Basic/Cuda.h
index d96c7e0..df35e1b 100644
--- a/linux-x64/clang/include/clang/Basic/Cuda.h
+++ b/linux-x64/clang/include/clang/Basic/Cuda.h
@@ -64,6 +64,7 @@
   GFX902,
   GFX904,
   GFX906,
+  GFX908,
   GFX909,
   LAST,
 };
diff --git a/linux-x64/clang/include/clang/Basic/Diagnostic.h b/linux-x64/clang/include/clang/Basic/Diagnostic.h
index 88947b7..5a70700 100644
--- a/linux-x64/clang/include/clang/Basic/Diagnostic.h
+++ b/linux-x64/clang/include/clang/Basic/Diagnostic.h
@@ -25,6 +25,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/iterator_range.h"
 #include "llvm/Support/Compiler.h"
+#include "llvm/Support/Error.h"
 #include <cassert>
 #include <cstdint>
 #include <limits>
@@ -209,8 +210,8 @@
   // Used by __extension__
   unsigned char AllExtensionsSilenced = 0;
 
-  // Suppress diagnostics after a fatal error?
-  bool SuppressAfterFatalError = true;
+  // Treat fatal errors like errors.
+  bool FatalsAsError = false;
 
   // Suppress all diagnostics.
   bool SuppressAllDiagnostics = false;
@@ -614,9 +615,11 @@
   void setErrorsAsFatal(bool Val) { GetCurDiagState()->ErrorsAsFatal = Val; }
   bool getErrorsAsFatal() const { return GetCurDiagState()->ErrorsAsFatal; }
 
-  /// When set to true (the default), suppress further diagnostics after
-  /// a fatal error.
-  void setSuppressAfterFatalError(bool Val) { SuppressAfterFatalError = Val; }
+  /// \brief When set to true, any fatal error reported is made an error.
+  ///
+  /// This setting takes precedence over the setErrorsAsFatal setting above.
+  void setFatalsAsError(bool Val) { FatalsAsError = Val; }
+  bool getFatalsAsError() const { return FatalsAsError; }
 
   /// When set to true mask warnings that come from system headers.
   void setSuppressSystemWarnings(bool Val) {
@@ -1301,6 +1304,12 @@
   return DiagnosticBuilder(this);
 }
 
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+                                           llvm::Error &&E) {
+  DB.AddString(toString(std::move(E)));
+  return DB;
+}
+
 inline DiagnosticBuilder DiagnosticsEngine::Report(unsigned DiagID) {
   return Report(SourceLocation(), DiagID);
 }
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc
index bb6dc26..93718ab 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc
@@ -27,32 +27,39 @@
 DIAG(err_odr_variable_multiple_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "external variable %0 defined in multiple translation units", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_odr_variable_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "external variable %0 declared with incompatible types in different translation units (%1 vs. %2)", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unsupported_ast_node, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot import unsupported AST node %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_vftable_ambiguous_component, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous vftable component for %0 introduced via covariant thunks; this is an inherent limitation of the ABI", 0, SFINAE_SubstitutionFailure, false, true, 23)
-DIAG(note_constexpr_access_inactive_union_member, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 member %1 of union with %select{active member %3|no active member}2 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_access_null, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 dereferenced null pointer is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_access_past_end, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 dereferenced one-past-the-end pointer is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_access_static_temporary, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 temporary is not allowed in a constant expression outside the expression that created the temporary", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_access_uninit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 object outside its lifetime is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_access_unsized_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 pointer to element of array without known bound is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_access_volatile_obj, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 volatile %select{temporary|object %2|member %2}1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_access_volatile_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 volatile-qualified type %1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(err_vftable_ambiguous_component, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous vftable component for %0 introduced via covariant thunks; this is an inherent limitation of the ABI", 0, SFINAE_SubstitutionFailure, false, true, 24)
+DIAG(note_constexpr_access_inactive_union_member, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 member %1 of union with %select{active member %3|no active member}2 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_null, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 dereferenced null pointer is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_past_end, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 dereferenced one-past-the-end pointer is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_static_temporary, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 temporary is not allowed in a constant expression outside the expression that created the temporary", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_uninit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 %select{object outside its lifetime|uninitialized object}1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_unreadable_object, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 object '%1' whose value is not known", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_unsized_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 element of array without known bound is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_volatile_obj, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|<ERROR>|<ERROR>}0 volatile %select{temporary|object %2|member %2}1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_volatile_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|<ERROR>|<ERROR>}0 volatile-qualified type %1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_array_index, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot refer to element %0 of %select{array of %2 element%plural{1:|:s}2|non-array object}1 in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_baa_insufficient_alignment, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{alignment of|offset of the aligned pointer from}0 the base pointee object (%1 %plural{1:byte|:bytes}1) is %select{less than|not a multiple of}0 the asserted %2 %plural{1:byte|:bytes}2", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_baa_value_insufficient_alignment, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "value of the aligned pointer (%0) is not a multiple of the asserted %1 %plural{1:byte|:bytes}1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_bit_cast_indet_dest, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "indeterminate value can only initialize an object of type 'unsigned char'%select{, 'char',|}1 or 'std::byte'; %0 is invalid", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_bit_cast_invalid_subtype, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "invalid type %0 is a %select{member|base}1 of %2", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_bit_cast_invalid_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "bit_cast %select{from|to}0 a %select{|type with a }1%select{union|pointer|member pointer|volatile|reference}2 %select{type|member}1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_bit_cast_unsupported_bitfield, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr bit_cast involving bit-field is not yet supported", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_bit_cast_unsupported_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr bit_cast involving type %0 is not yet supported", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_call_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in call to '%0'", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_call_limit_exceeded, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr evaluation hit maximum call limit", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_calls_suppressed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "(skipping %0 call%s0 in backtrace; use -fconstexpr-backtrace-limit=0 to see all)", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_compare_virtual_mem_ptr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of pointer to virtual member function %0 has unspecified value", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_conditional_never_const, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "both arms of conditional operator are unable to produce a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_depth_limit_exceeded, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr evaluation exceeded maximum depth of %0 calls", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_dynamic_cast_to_reference_failed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "reference dynamic_cast failed: %select{static type %1 of operand is a non-public base class of dynamic type %2|dynamic type %2 of operand does not have a base class of type %3|%3 is an ambiguous base class of dynamic type %2 of operand|%3 is a non-public base class of dynamic type %2 of operand}0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_float_arithmetic, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "floating point arithmetic produces %select{an infinity|a NaN}0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_inherited_ctor_call_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in implicit initialization for inherited constructor of %0", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_invalid_cast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{reinterpret_cast|dynamic_cast|cast that performs the conversions of a reinterpret_cast|cast from %1}0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_invalid_cast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{reinterpret_cast|dynamic_cast|cast that performs the conversions of a reinterpret_cast|cast from %1}0 is not allowed in a constant expression%select{| in C++ standards before C++2a||}0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_invalid_downcast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot cast object of dynamic type %0 to type %1", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_invalid_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{non-constexpr|undefined}0 %select{function|constructor}1 %2 cannot be used in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_invalid_inhctor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constructor inherited from base class %0 cannot be used in a constant expression; derived class cannot be implicitly initialized", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_large_shift, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "shift count %0 >= width of type %1 (%2 bit%s2)", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_lifetime_ended, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 %select{temporary|variable}1 whose lifetime has ended", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_lifetime_ended, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to}0 %select{temporary|variable}1 whose lifetime has ended", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_lshift_discards, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "signed left shift discards bits", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_lshift_of_negative, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "left shift of negative value %0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_ltor_incomplete_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of incomplete type %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
@@ -71,30 +78,35 @@
 DIAG(note_constexpr_no_return, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "control reached end of constexpr function", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_non_global, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{pointer|reference}0 to %select{|subobject of }1%select{temporary|%3}2 is not a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_nonliteral, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-literal type %0 cannot be used in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_null_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot %select{access base class of|access derived class of|access field of|access array element of|perform pointer arithmetic on|call member function on|access real component of|access imaginary component of}0 null pointer", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_null_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot %select{access base class of|access derived class of|access field of|access array element of|perform pointer arithmetic on|access real component of|access imaginary component of}0 null pointer", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_overflow, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "value %0 is outside the range of representable values of type %1", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_past_end, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "dereferenced pointer past the end of %select{|subobject of }0%select{temporary|%2}1 is not a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_past_end_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot %select{access base class of|access derived class of|access field of|access array element of|ERROR|call member function on|access real component of|access imaginary component of}0 pointer past the end of object", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_past_end_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot %select{access base class of|access derived class of|access field of|access array element of|ERROR|access real component of|access imaginary component of}0 pointer past the end of object", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_pointer_comparison_base_classes, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of addresses of subobjects of different base classes has unspecified value", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_pointer_comparison_base_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of address of base class subobject %0 of class %1 to field %2 has unspecified value", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_pointer_comparison_differing_access, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of address of fields %0 and %2 of %4 with differing access specifiers (%1 vs %3) has unspecified value", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_pointer_subtraction_not_same_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "subtracted pointers are not elements of the same array", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_pointer_subtraction_zero_size, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "subtraction of pointers to type %0 of zero size", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_polymorphic_unknown_dynamic_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{||||virtual function called on|dynamic_cast applied to|typeid applied to}0 object '%1' whose dynamic type is not constant", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_pure_virtual_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "pure virtual function %q0 called", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_step_limit_exceeded, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr evaluation hit maximum step limit; possible infinite loop?", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_stmt_expr_unsupported, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "this use of statement expressions is not supported in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_subobject_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "subobject declared here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_temporary_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "temporary created here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_this, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|implicit }0use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_typeid_polymorphic, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "typeid applied to expression of polymorphic type %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_typeid_polymorphic, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "typeid applied to expression of polymorphic type %0 is not allowed in a constant expression in C++ standards before C++2a", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_uninitialized, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|sub}0object of type %1 is not initialized", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_unsized_array_indexed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "indexing of array without known bound is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_unsupported_unsized_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "array-to-pointer decay of array member without known bound is not supported", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_use_uninit_reference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use of reference outside its lifetime is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_var_init_non_constant, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "initializer of %0 is not a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_virtual_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot construct object of type %0 with virtual base class in a constant expression", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_constexpr_virtual_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot evaluate virtual function call in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_virtual_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot evaluate call to virtual function in a constant expression in C++ standards before C++2a", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_void_comparison, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison between unequal pointers to void has unspecified result", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_covariant_thunk, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "covariant thunk required by %0", 0, SFINAE_Suppress, false, false, 23)
+DIAG(note_constexpr_volatile_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "volatile %select{temporary created|object declared|member declared}0 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_covariant_thunk, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "covariant thunk required by %0", 0, SFINAE_Suppress, false, false, 24)
 DIAG(note_expr_divide_by_zero, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "division by zero", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_non_null_attribute_failed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "null passed to a callee that requires a non-null argument", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class has base type %0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_bit_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "bit-field %0 with type %1 and length %2 here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_defined_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "also defined here", 0, SFINAE_Suppress, false, false, 0)
@@ -120,12 +132,29 @@
 DIAG(note_odr_value_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared here with type %0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_virtual_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{non-virtual|virtual}0 derivation here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_unimplemented_constexpr_lambda_feature_ast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "unimplemented constexpr lambda feature: %0 (coming soon!)", 0, SFINAE_Suppress, false, false, 0)
-DIAG(remark_sanitize_address_insert_extra_padding_accepted, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding applied to %0", 577, SFINAE_Suppress, false, true, 0)
-DIAG(remark_sanitize_address_insert_extra_padding_rejected, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding ignored for %0 because it %select{is not C++|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a blacklisted file|is blacklisted}1", 577, SFINAE_Suppress, false, true, 0)
-DIAG(warn_integer_constant_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in expression; result is %0 with type %1", 334, SFINAE_Suppress, false, false, 0)
-DIAG(warn_npot_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts with fundamental data types with sizes that aren't a power of two", 309, SFINAE_Suppress, false, false, 0)
-DIAG(warn_odr_tag_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type %0 has incompatible definitions in different translation units", 497, SFINAE_Suppress, false, false, 0)
-DIAG(warn_padded_struct_anon_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align anonymous bit-field", 518, SFINAE_Suppress, false, false, 0)
-DIAG(warn_padded_struct_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align %4", 518, SFINAE_Suppress, false, false, 0)
-DIAG(warn_padded_struct_size, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding size of %0 with %1 %select{byte|bit}2%s1 to alignment boundary", 518, SFINAE_Suppress, false, false, 0)
-DIAG(warn_unnecessary_packed, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "packed attribute is unnecessary for %0", 517, SFINAE_Suppress, false, false, 0)
+DIAG(remark_sanitize_address_insert_extra_padding_accepted, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding applied to %0", 585, SFINAE_Suppress, false, true, 0)
+DIAG(remark_sanitize_address_insert_extra_padding_rejected, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding ignored for %0 because it %select{is not C++|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a blacklisted file|is blacklisted}1", 585, SFINAE_Suppress, false, true, 0)
+DIAG(warn_integer_constant_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in expression; result is %0 with type %1", 338, SFINAE_Suppress, false, false, 0)
+DIAG(warn_npot_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts with fundamental data types with sizes that aren't a power of two", 313, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_different_num_template_parameters, CLASS_WARNING, (unsigned)diag::Severity::Warning, "template parameter lists have a different number of parameters (%0 vs %1)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_different_template_parameter_kind, CLASS_WARNING, (unsigned)diag::Severity::Warning, "template parameter has different kinds in different translation units", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_field_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 declared with incompatible types in different translation units (%1 vs. %2)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_function_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "external function %0 declared with incompatible types in different translation units (%1 vs. %2)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_ivar_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance variable %0 declared with incompatible types in different translation units (%1 vs. %2)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_non_type_parameter_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-type template parameter declared with incompatible types in different translation units (%0 vs. %1)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_method_num_params_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{class|instance}0 method %1 has a different number of parameters in different translation units (%2 vs. %3)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_method_param_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{class|instance}0 method %1 has a parameter with a different types in different translation units (%2 vs. %3)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_method_result_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{class|instance}0 method %1 has incompatible result types in different translation units (%2 vs. %3)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_method_variadic_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{class|instance}0 method %1 is variadic in one translation unit and not variadic in another", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_property_impl_kind_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 is implemented with %select{@synthesize|@dynamic}1 in one translation but %select{@dynamic|@synthesize}1 in another translation unit", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_property_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 declared with incompatible types in different translation units (%1 vs. %2)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_superclass_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class %0 has incompatible superclasses", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_objc_synthesize_ivar_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 is synthesized to different ivars in different translation units (%1 vs. %2)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_parameter_pack_non_pack, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameter kind mismatch; parameter is %select{not a|a}0 parameter pack", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_tag_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type %0 has incompatible definitions in different translation units", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_variable_multiple_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "external variable %0 defined in multiple translation units", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_variable_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "external variable %0 declared with incompatible types in different translation units (%1 vs. %2)", 505, SFINAE_Suppress, false, false, 0)
+DIAG(warn_padded_struct_anon_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align anonymous bit-field", 526, SFINAE_Suppress, false, false, 0)
+DIAG(warn_padded_struct_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align %4", 526, SFINAE_Suppress, false, false, 0)
+DIAG(warn_padded_struct_size, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding size of %0 with %1 %select{byte|bit}2%s1 to alignment boundary", 526, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unnecessary_packed, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "packed attribute is unnecessary for %0", 525, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc
index 4ea5853..3db1a4a 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc
@@ -3,37 +3,37 @@
 #undef COMMENTSTART
 #endif
 
-DIAG(note_add_deprecation_attr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a deprecation attribute to the declaration to silence this warning", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_block_command_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous command '%select{\\|@}0%1' here", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_block_command_previous_alias, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous command '%select{\\|@}0%1' (an alias of '\\%2') here", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_html_end_tag, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "end tag", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_html_tag_started_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "HTML tag started here", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_param_name_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean '%0'?", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_param_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_tparam_name_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean '%0'?", 0, SFINAE_Suppress, false, false, 25)
-DIAG(note_doc_tparam_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 25)
-DIAG(warn_correct_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name '%0'; did you mean '%1'?", 190, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_api_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{class|interface|protocol|struct|union}1' command should not be used in a comment attached to a non-%select{class|interface|protocol|struct|union}2 declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_block_command_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "duplicated command '%select{\\|@}0%1'", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_block_command_empty_paragraph, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty paragraph passed to '%select{\\|@}0%1' command", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass}1' command should not be used in a comment attached to a non-container declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_deprecated_not_sync, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration is marked with '\\deprecated' command but does not have a deprecation attribute", 187, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_function_method_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1' command should be used in a comment attached to %select{a function|a function|an Objective-C method|an Objective-C method|a pointer to function}2 declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_end_forbidden, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag '%0' is forbidden", 188, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_end_unbalanced, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag does not match any start tag", 188, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_missing_end_tag, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML tag '%0' requires an end tag", 188, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_start_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag '%0' closed by '%1'", 188, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_start_tag_expected_ident_or_greater, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag prematurely ended, expected attribute name or '>'", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_start_tag_expected_quoted_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expected quoted string after equals sign", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' is already documented", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_invalid_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0param' command used in a comment that is not attached to a function declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not found in the function declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_spaces_in_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "whitespace is not allowed in parameter passing direction", 189, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_returns_attached_to_a_void_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_returns_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is not attached to a function or method declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_tparam_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' is already documented", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_tparam_not_attached_to_a_template_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0tparam' command used in a comment that is not attached to a template declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_tparam_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' not found in the template declaration", 186, SFINAE_Suppress, false, false, 25)
-DIAG(warn_unknown_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name", 190, SFINAE_Suppress, false, false, 25)
-DIAG(warn_verbatim_block_end_without_start, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command does not terminate a verbatim text block", 186, SFINAE_Suppress, false, false, 25)
+DIAG(note_add_deprecation_attr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a deprecation attribute to the declaration to silence this warning", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_block_command_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous command '%select{\\|@}0%1' here", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_block_command_previous_alias, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous command '%select{\\|@}0%1' (an alias of '\\%2') here", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_html_end_tag, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "end tag", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_html_tag_started_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "HTML tag started here", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_param_name_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean '%0'?", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_param_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_tparam_name_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean '%0'?", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_doc_tparam_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 26)
+DIAG(warn_correct_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name '%0'; did you mean '%1'?", 191, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_api_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{class|interface|protocol|struct|union}1' command should not be used in a comment attached to a non-%select{class|interface|protocol|struct|union}2 declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_block_command_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "duplicated command '%select{\\|@}0%1'", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_block_command_empty_paragraph, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty paragraph passed to '%select{\\|@}0%1' command", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass}1' command should not be used in a comment attached to a non-container declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_deprecated_not_sync, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration is marked with '\\deprecated' command but does not have a deprecation attribute", 188, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_function_method_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1' command should be used in a comment attached to %select{a function|a function|an Objective-C method|an Objective-C method|a pointer to function}2 declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_html_end_forbidden, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag '%0' is forbidden", 189, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_html_end_unbalanced, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag does not match any start tag", 189, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_html_missing_end_tag, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML tag '%0' requires an end tag", 189, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_html_start_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag '%0' closed by '%1'", 189, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_html_start_tag_expected_ident_or_greater, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag prematurely ended, expected attribute name or '>'", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_html_start_tag_expected_quoted_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expected quoted string after equals sign", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_param_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' is already documented", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_param_invalid_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_param_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0param' command used in a comment that is not attached to a function declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_param_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not found in the function declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_param_spaces_in_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "whitespace is not allowed in parameter passing direction", 190, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_returns_attached_to_a_void_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_returns_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is not attached to a function or method declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_tparam_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' is already documented", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_tparam_not_attached_to_a_template_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0tparam' command used in a comment that is not attached to a template declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_doc_tparam_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' not found in the template declaration", 187, SFINAE_Suppress, false, false, 26)
+DIAG(warn_unknown_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name", 191, SFINAE_Suppress, false, false, 26)
+DIAG(warn_verbatim_block_end_without_start, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command does not terminate a verbatim text block", 187, SFINAE_Suppress, false, false, 26)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc
index 9fd34f6..128021e 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc
@@ -10,6 +10,7 @@
 DIAG(err_cannot_open_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "cannot open file '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_default_special_members, CLASS_ERROR, (unsigned)diag::Severity::Error, "only special member functions may be defaulted", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_deleted_non_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "only functions can have deleted definitions", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_duplicate_declspec, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate '%0' declaration specifier", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_enum_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumeration cannot be a template", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_expected, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_expected_after, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %1 after %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -18,6 +19,7 @@
 DIAG(err_expected_namespace_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected namespace name", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_expected_string_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected string literal %select{in %1|for diagnostic message in static_assert|for optional message in 'availability' attribute|for %select{language|source container}1 name in 'external_source_symbol' attribute}0", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' modified since it was first processed", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_file_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "sorry, unsupported: file '%0' is too large for Clang to process", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fixed_point_not_enabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "compile with '-ffixed-point' to enable fixed point types", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_friend_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is invalid in friend declarations", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_integer_literal_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "integer literal is too large to be represented in any %select{signed |}0integer type", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -38,7 +40,7 @@
 DIAG(err_module_shadowed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "import of shadowed module '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_module_unavailable, CLASS_ERROR, (unsigned)diag::Severity::Error, "module '%0' %select{is incompatible with|requires}1 feature '%2'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_mt_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "[rewriter] %0", 0, SFINAE_SubstitutionFailure, false, false, 0)
-DIAG(err_nullability_conflicting, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability specifier %0 conflicts with existing specifier %1", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_nullability_conflicting, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability specifier %0 conflicts with existing specifier %1", 0, SFINAE_SubstitutionFailure, false, true, 20)
 DIAG(err_omp_more_one_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive '#pragma omp %0' cannot contain more than one '%1' clause%select{| with '%3' name modifier| with 'source' dependence}2", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_opencl_unknown_type_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenCL %select{C|C++}0 version %1 does not support the '%2' %select{type qualifier|storage class specifier}3", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_openclcxx_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is not supported in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -59,24 +61,25 @@
 DIAG(err_target_unsupported_cpu_for_micromips, CLASS_ERROR, (unsigned)diag::Severity::Error, "micromips is not supported for target CPU '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_target_unsupported_execute_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "execute only is not supported for the %0 sub-architecture", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_target_unsupported_fpmath, CLASS_ERROR, (unsigned)diag::Severity::Error, "the '%0' unit is not supported with this instruction set", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_mcmse, CLASS_ERROR, (unsigned)diag::Severity::Error, "-mcmse is not supported for %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_target_unsupported_unaligned, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 sub-architecture does not support unaligned accesses", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_too_large_for_fixed_point, CLASS_ERROR, (unsigned)diag::Severity::Error, "this value is too large for this fixed point type", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unable_to_make_temp, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to make temporary file: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unable_to_rename_temp, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to rename temporary '%0' to output file '%1': '%2'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unimplemented_conversion_with_fixed_point_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion between fixed point and %0 is not yet supported", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_unknown_analyzer_checker, CLASS_ERROR, (unsigned)diag::Severity::Error, "no analyzer checkers are associated with '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unknown_analyzer_checker, CLASS_ERROR, (unsigned)diag::Severity::Error, "no analyzer checkers or packages are associated with '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unsupported_abi_for_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' can only be used with the '%1' ABI", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unsupported_bom, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%0 byte order mark detected in '%1', but encoding is not supported", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_use_of_tag_name_without_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "must use '%1' tag to refer to type %0%select{| in this scope}2", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(ext_c99_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is an extension when C99 mode is not enabled", 360, SFINAE_Suppress, false, false, 0)
-DIAG(ext_clang_diagnose_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'diagnose_if' is a clang extension", 250, SFINAE_Suppress, false, false, 0)
-DIAG(ext_clang_enable_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'enable_if' is a clang extension", 250, SFINAE_Suppress, false, false, 0)
-DIAG(ext_cxx11_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is a C++11 extension", 82, SFINAE_Suppress, false, false, 0)
-DIAG(ext_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "duplicate '%0' declaration specifier", 193, SFINAE_Suppress, false, false, 0)
-DIAG(ext_integer_literal_too_large_for_signed, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in a signed integer type, interpreting as unsigned", 300, SFINAE_Suppress, false, false, 0)
-DIAG(ext_old_implicitly_unsigned_long_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long' and is subject to undefined behavior under C++98, interpreting as 'unsigned long'; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 75, SFINAE_Suppress, false, false, 0)
-DIAG(ext_variadic_templates, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variadic templates are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_warn_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 193, SFINAE_Suppress, false, false, 0)
+DIAG(ext_c99_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is an extension when C99 mode is not enabled", 364, SFINAE_Suppress, false, false, 0)
+DIAG(ext_clang_diagnose_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'diagnose_if' is a clang extension", 254, SFINAE_Suppress, false, false, 0)
+DIAG(ext_clang_enable_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'enable_if' is a clang extension", 254, SFINAE_Suppress, false, false, 0)
+DIAG(ext_cxx11_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is a C++11 extension", 83, SFINAE_Suppress, false, false, 0)
+DIAG(ext_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "duplicate '%0' declaration specifier", 194, SFINAE_Suppress, false, false, 0)
+DIAG(ext_integer_literal_too_large_for_signed, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in a signed integer type, interpreting as unsigned", 304, SFINAE_Suppress, false, false, 0)
+DIAG(ext_old_implicitly_unsigned_long_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long' and is subject to undefined behavior under C++98, interpreting as 'unsigned long'; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 76, SFINAE_Suppress, false, false, 0)
+DIAG(ext_variadic_templates, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variadic templates are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_warn_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 194, SFINAE_Suppress, false, false, 0)
 DIAG(fatal_too_many_errors, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "too many errors emitted, stopping now", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(note_also_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "also found", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_decl_hiding_tag_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%1 %0 is hidden by a non-type declaration of %0 here", 0, SFINAE_Suppress, false, false, 4)
@@ -96,19 +99,20 @@
 DIAG(note_type_being_defined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition of %0 is not complete until the closing '}'", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_using, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "using", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_valid_options, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "valid target CPU values are: %0", 0, SFINAE_Suppress, false, false, 0)
-DIAG(remark_module_lock_failure, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "could not acquire lock file for module '%0': %1", 418, SFINAE_Suppress, false, false, 4)
-DIAG(remark_module_lock_timeout, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "timed out waiting to acquire lock file for module '%0'", 418, SFINAE_Suppress, false, false, 4)
+DIAG(remark_module_lock_failure, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "could not acquire lock file for module '%0': %1", 423, SFINAE_Suppress, false, false, 4)
+DIAG(remark_module_lock_timeout, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "timed out waiting to acquire lock file for module '%0'", 423, SFINAE_Suppress, false, false, 4)
 DIAG(warn_arcmt_nsalloc_realloc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_conflicting_nullability_attr_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", 457, SFINAE_Suppress, false, false, 19)
-DIAG(warn_conflicting_nullability_attr_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", 457, SFINAE_Suppress, false, false, 19)
-DIAG(warn_cxx98_compat_longlong, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'long long' is incompatible with C++98", 110, SFINAE_Suppress, false, false, 0)
-DIAG(warn_cxx98_compat_variadic_templates, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic templates are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_conflicting_nullability_attr_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", 463, SFINAE_Suppress, false, false, 20)
+DIAG(warn_conflicting_nullability_attr_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", 463, SFINAE_Suppress, false, false, 20)
+DIAG(warn_cxx20_compat_consteval, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consteval is incompatible with C++ standards before C++20", 97, SFINAE_Suppress, false, false, 0)
+DIAG(warn_cxx98_compat_longlong, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'long long' is incompatible with C++98", 111, SFINAE_Suppress, false, false, 0)
+DIAG(warn_cxx98_compat_variadic_templates, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic templates are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
 DIAG(warn_dup_category_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate definition of category %1 on interface %0", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_duplicate_declspec, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 193, SFINAE_Suppress, false, false, 0)
-DIAG(warn_method_param_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redeclaration of method parameter %0", 195, SFINAE_Suppress, false, false, 4)
+DIAG(warn_duplicate_declspec, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 194, SFINAE_Suppress, false, false, 0)
+DIAG(warn_method_param_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redeclaration of method parameter %0", 196, SFINAE_Suppress, false, false, 4)
 DIAG(warn_method_param_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of method parameter %0", 0, SFINAE_Suppress, false, false, 4)
 DIAG(warn_mt_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "[rewriter] %0", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_nullability_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate nullability specifier %0", 457, SFINAE_Suppress, false, false, 19)
-DIAG(warn_old_implicitly_unsigned_long, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C89; this literal will %select{have type 'long long'|be ill-formed}0 in C99 onwards", 113, SFINAE_Suppress, false, false, 0)
-DIAG(warn_old_implicitly_unsigned_long_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C++98; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 75, SFINAE_Suppress, false, false, 0)
-DIAG(warn_unknown_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute %0 ignored", 694, SFINAE_Suppress, false, false, 0)
+DIAG(warn_nullability_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate nullability specifier %0", 463, SFINAE_Suppress, false, false, 20)
+DIAG(warn_old_implicitly_unsigned_long, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C89; this literal will %select{have type 'long long'|be ill-formed}0 in C99 onwards", 114, SFINAE_Suppress, false, false, 0)
+DIAG(warn_old_implicitly_unsigned_long_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C++98; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 76, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unknown_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute %0 ignored", 704, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc
index e02de3d..99b7ec5 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc
@@ -6,4 +6,4 @@
 DIAG(err_ctu_error_opening, CLASS_ERROR, (unsigned)diag::Severity::Error, "error opening '%0': required by the CrossTU functionality", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_extdefmap_parsing, CLASS_ERROR, (unsigned)diag::Severity::Error, "error parsing index file: '%0' line: %1 'UniqueID filename' format expected", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiple_def_index, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple definitions are found for the same key in index ", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(warn_ctu_incompat_triple, CLASS_WARNING, (unsigned)diag::Severity::Warning, "imported AST from '%0' had been generated for a different target, current: %1, imported: %2", 146, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ctu_incompat_triple, CLASS_WARNING, (unsigned)diag::Severity::Warning, "imported AST from '%0' had been generated for a different target, current: %1, imported: %2", 147, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc
index 3285c87..6d5b33b 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc
@@ -3,6 +3,8 @@
 #undef DRIVERSTART
 #endif
 
+DIAG(err_analyzer_checker_option_invalid_input, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid input for checker option '%0', that expects %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_analyzer_checker_option_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "checker '%0' has no option called '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_analyzer_config_invalid_input, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid input for analyzer-config option '%0', that expects %1 value", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_analyzer_config_multiple_values, CLASS_ERROR, (unsigned)diag::Severity::Error, "analyzer-config option '%0' should contain only one '='", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_analyzer_config_no_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "analyzer-config option '%0' has a key but no value", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -16,11 +18,13 @@
 DIAG(err_drv_argument_not_allowed_with, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument '%0' not allowed with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_argument_only_allowed_with, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument '%0' only allowed with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_bitcode_unsupported_on_toolchain, CLASS_ERROR, (unsigned)diag::Severity::Error, "-fembed-bitcode is not supported on versions of iOS prior to 6.0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_cannot_mix_options, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify '%1' along with '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_cannot_read_config_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot read configuration file '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_cc_print_options_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to open CC_PRINT_OPTIONS file: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_clang_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "the clang compiler does not support '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_clang_unsupported_opt_cxx_darwin_i386, CLASS_ERROR, (unsigned)diag::Severity::Error, "the clang compiler does not support '%0' for C++ on Darwin/i386", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_clang_unsupported_opt_faltivec, CLASS_ERROR, (unsigned)diag::Severity::Error, "the clang compiler does not support '%0', %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_clang_unsupported_opt_pg_darwin, CLASS_ERROR, (unsigned)diag::Severity::Error, "the clang compiler does not support -pg option on %select{Darwin|versions of OS X 10.9 and later}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_command_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 command failed with exit code %1 (use -v to see invocation)", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_command_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to execute command: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_command_signalled, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 command failed due to signal (use -v to see invocation)", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -39,6 +43,7 @@
 DIAG(err_drv_expecting_fopenmp_with_fopenmp_targets, CLASS_ERROR, (unsigned)diag::Severity::Error, "The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5.", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_force_crash, CLASS_ERROR, (unsigned)diag::Severity::Error, "failing because %select{environment variable 'FORCE_CLANG_DIAGNOSTICS_CRASH' is set|'-gen-reproducer' is used}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_gnustep_objc_runtime_incompatible_binary, CLASS_ERROR, (unsigned)diag::Severity::Error, "GNUstep Objective-C runtime version %0 incompatible with target binary format", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_incompatible_unwindlib, CLASS_ERROR, (unsigned)diag::Severity::Error, "--rtlib=libgcc requires --unwindlib=libgcc", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_Xarch_argument_isdriver, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid Xarch argument: '%0', cannot change driver behavior inside Xarch argument", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_Xarch_argument_with_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid Xarch argument: '%0', options requiring arguments are unsupported", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_Xopenmp_target_with_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid -Xopenmp-target argument: '%0', options requiring arguments are unsupported", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -62,6 +67,7 @@
 DIAG(err_drv_invalid_rtlib_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid runtime library name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_stdlib_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid library name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_thread_model_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid thread model '%0' in '%1' for this target", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_unwindlib_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid unwind library name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid value '%1' in '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_version_number, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid version number in '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_lto_without_lld, CLASS_ERROR, (unsigned)diag::Severity::Error, "LTO requires -fuse-ld=lld", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -81,9 +87,11 @@
 DIAG(err_drv_no_module_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0': unable to use module files with this tool", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_no_neon_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "[no]neon is not accepted as modifier, please use [no]simd instead", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_no_such_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "no such file or directory: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_such_file_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "no such file or directory: '%0'; did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_omp_host_ir_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "The provided host compiler IR file '%0' is required to generate code for OpenMP target regions but cannot be found.", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_omp_host_target_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "The target '%0' is not a supported OpenMP host target.", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_drv_optimization_remark_pattern, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 in '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_optimization_remark_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown remark serializer format: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_optimization_remark_pattern, CLASS_ERROR, (unsigned)diag::Severity::Error, "in pattern '%1': %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_out_file_argument_with_multiple_sources, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify '%0%1' when compiling multiple source files", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_output_argument_with_multiple_files, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify -o when generating multiple output files", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_preamble_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect format for -preamble-bytes=N,END", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -91,8 +99,9 @@
 DIAG(err_drv_ropi_rwpi_incompatible_with_pic, CLASS_ERROR, (unsigned)diag::Severity::Error, "embedded and GOT-based position independence are incompatible", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_trivial_auto_var_init_zero_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "-ftrivial-auto-var-init=zero hasn't been enabled. Enable it at your own peril for benchmarking purpose only with -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unable_to_remove_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to remove file: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unable_to_set_working_directory, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to set working directory: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unknown_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown argument: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_drv_unknown_argument_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown argument '%0', did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_argument_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown argument '%0'; did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unknown_indirect_jump_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown '-mindirect-jump=' option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unknown_language, CLASS_ERROR, (unsigned)diag::Severity::Error, "language not recognized: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unknown_objc_runtime, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown or ill-formed Objective-C runtime '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -104,7 +113,7 @@
 DIAG(err_drv_unsupported_noabicalls_pic, CLASS_ERROR, (unsigned)diag::Severity::Error, "position-independent code requires '-mabicalls'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_opt_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0' for target '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_drv_unsupported_opt_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0', did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_opt_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0'; did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_option_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported argument '%1' to option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_rtlib_for_platform, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported runtime library '%0' for platform '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_use_of_Z_option, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported use of internal gcc -Z option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -121,59 +130,65 @@
 DIAG(note_drv_use_standard, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '%0'%select{| or '%3'|, '%3', or '%4'|, '%3', '%4', or '%5'}2 for '%1' standard", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_drv_verify_prefix_spelling, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_use_dashdash, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "Use '--' to treat subsequent arguments as filenames", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_O4_is_O3, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-O4 is equivalent to -O3", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_O4_is_O3, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-O4 is equivalent to -O3", 165, SFINAE_Suppress, false, false, 28)
 DIAG(warn_c_kext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring -fapple-kext which is valid for C++ and Objective-C++ only", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_debug_compression_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot compress debug sections (zlib not installed)", 156, SFINAE_Suppress, false, false, 0)
+DIAG(warn_debug_compression_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot compress debug sections (zlib not installed)", 157, SFINAE_Suppress, false, false, 0)
 DIAG(warn_drv_assuming_mfloat_abi_is, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown platform, assuming -mfloat-abi=%0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_avr_family_linking_stdlibs_not_implemented, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for linking stdlibs for microcontroller '%0' is not implemented", 53, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_avr_gcc_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no avr-gcc installation can be found on the system, cannot link standard libraries", 53, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_avr_libc_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no avr-libc installation can be found on the system, cannot link standard libraries", 53, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_avr_mcu_not_specified, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no target microcontroller specified on command line, cannot link standard libraries, please pass -mmcu=<mcu name>", 53, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_avr_stdlib_not_linked, CLASS_WARNING, (unsigned)diag::Severity::Warning, "standard library not linked and so no interrupt vector table or compiler runtime routines will be linked", 53, SFINAE_Suppress, false, false, 0)
 DIAG(warn_drv_clang_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the clang compiler does not support '%0'", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_darwin_sdk_invalid_settings, CLASS_WARNING, (unsigned)diag::Severity::Warning, "SDK settings were ignored as 'SDKSettings.json' could not be parsed", 153, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_deprecated_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' is deprecated, use '%1' instead", 164, SFINAE_Suppress, false, false, 27)
-DIAG(warn_drv_diagnostics_hotness_requires_pgo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' requires profile-guided optimization information", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_darwin_sdk_invalid_settings, CLASS_WARNING, (unsigned)diag::Severity::Warning, "SDK settings were ignored as 'SDKSettings.json' could not be parsed", 154, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_deprecated_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' is deprecated, use '%1' instead", 165, SFINAE_Suppress, false, false, 28)
+DIAG(warn_drv_diagnostics_hotness_requires_pgo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' requires profile-guided optimization information", 730, SFINAE_Suppress, false, false, 0)
 DIAG(warn_drv_disabling_vptr_no_rtti_default, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicitly disabling vptr sanitizer because rtti wasn't enabled", 48, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_empty_joined_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "joined argument expects additional value: '%0'", 720, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_experimental_isel_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support for the '%0' architecture is incomplete", 215, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_experimental_isel_incomplete_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support is incomplete for this architecture at the current optimization level", 215, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_fine_grained_bitfield_accesses_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '-ffine-grained-bitfield-accesses' cannot be enabled together with a sanitizer; flag ignored", 504, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused%select{ when '%3' is present|}2", 720, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_input_file_unused_by_cpp, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused in cpp mode", 720, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_invoking_fallback, CLASS_WARNING, (unsigned)diag::Severity::Warning, "falling back to %0", 225, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_moutline_unsupported_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The '%0' architecture does not support -moutline; flag ignored", 504, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_msp430_hwmult_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the given MCU supports %0 hardware multiply, but -mhwmult is set to %1.", 335, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_msp430_hwmult_no_device, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no MCU device specified, but '-mhwmult' is set to 'auto', assuming no hardware multiply. Use -mmcu to specify a MSP430 device, or -mhwmult to set hardware multiply type explicitly.", 335, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_msp430_hwmult_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the given MCU does not support hardware multiply, but -mhwmult is set to %0.", 335, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_msvc_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to find a Visual Studio installation; try running Clang from a developer command prompt", 428, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_object_size_disabled_O0, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the object size sanitizer has no effect at -O0, but is explicitly enabled: %0", 335, SFINAE_Suppress, true, false, 0)
-DIAG(warn_drv_omp_offload_target_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.", 503, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_omp_offload_target_missingbcruntime, CLASS_WARNING, (unsigned)diag::Severity::Warning, "No library '%0' found in the default clang lib directory or in LIBRARY_PATH. Expect degraded performance due to no inlining of runtime functions on target devices.", 503, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_optimization_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization level '%0' is not supported; using '%1%2' instead", 335, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_overriding_flag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding '%0' option with '%1'", 516, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_empty_joined_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "joined argument expects additional value: '%0'", 730, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_experimental_isel_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support for the '%0' architecture is incomplete", 216, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_experimental_isel_incomplete_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support is incomplete for this architecture at the current optimization level", 216, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_fine_grained_bitfield_accesses_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '-ffine-grained-bitfield-accesses' cannot be enabled together with a sanitizer; flag ignored", 512, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused%select{ when '%3' is present|}2", 730, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_input_file_unused_by_cpp, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused in cpp mode", 730, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_invoking_fallback, CLASS_WARNING, (unsigned)diag::Severity::Warning, "falling back to %0", 228, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_libstdcxx_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "include path for libstdc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead", 629, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_moutline_unsupported_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The '%0' architecture does not support -moutline; flag ignored", 512, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msp430_hwmult_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the given MCU supports %0 hardware multiply, but -mhwmult is set to %1.", 339, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msp430_hwmult_no_device, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no MCU device specified, but '-mhwmult' is set to 'auto', assuming no hardware multiply. Use -mmcu to specify a MSP430 device, or -mhwmult to set hardware multiply type explicitly.", 339, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msp430_hwmult_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the given MCU does not support hardware multiply, but -mhwmult is set to %0.", 339, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msvc_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to find a Visual Studio installation; try running Clang from a developer command prompt", 434, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_object_size_disabled_O0, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the object size sanitizer has no effect at -O0, but is explicitly enabled: %0", 339, SFINAE_Suppress, true, false, 0)
+DIAG(warn_drv_omp_offload_target_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.", 511, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_omp_offload_target_missingbcruntime, CLASS_WARNING, (unsigned)diag::Severity::Warning, "No library '%0' found in the default clang lib directory or in LIBRARY_PATH. Expect degraded performance due to no inlining of runtime functions on target devices.", 511, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_optimization_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization level '%0' is not supported; using '%1%2' instead", 339, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_overriding_flag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding '%0' option with '%1'", 524, SFINAE_Suppress, false, false, 0)
 DIAG(warn_drv_pch_not_first_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "precompiled header '%0' was ignored because '%1' is not first '-include'", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_preprocessed_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: previously preprocessed input%select{ unused when '%2' is present|}1", 720, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ps4_force_pic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '%0' was ignored by the PS4 toolchain, using '-fPIC'", 504, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ps4_sdk_dir, CLASS_WARNING, (unsigned)diag::Severity::Warning, "environment variable SCE_ORBIS_SDK_DIR is set, but points to invalid or nonexistent directory '%0'", 342, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_treating_input_as_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating '%0' input as '%1' when in C++ mode, this behavior is deprecated", 164, SFINAE_Suppress, false, false, 27)
-DIAG(warn_drv_unable_to_find_directory_expected, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unable to find %0 directory, expected to be in '%1'", 342, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unknown_argument_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl: '%0'", 693, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unknown_argument_clang_cl_with_suggestion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl '%0' (did you mean '%1'?)", 693, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_debug_info_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "debug information option '%0' is not supported for target '%1'", 715, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_gpopt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit usage of }0-mabicalls", 713, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_longcalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mlong-calls' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls", 504, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported for target '%1'", 283, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_pic_with_mabicalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%0' option as it cannot be used with %select{implicit usage of|}1 -mabicalls and the N64 ABI", 504, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unused_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument unused during compilation: '%0'", 720, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_vectorize_needs_hvx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto-vectorization requires HVX, use -mhvx to enable it", 504, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_yc_multiple_inputs_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' with more than one source file not implemented yet; flag ignored", 123, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ycyu_different_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' and '/Yu' with different filenames not implemented yet; flags ignored", 123, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ycyu_no_fi_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '%0' without a corresponding /FI flag not implemented yet; flag ignored", 123, SFINAE_Suppress, false, false, 0)
-DIAG(warn_ignored_clang_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the flag '%0' has been deprecated and will be ignored", 720, SFINAE_Suppress, false, false, 0)
-DIAG(warn_ignored_gcc_optimization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported", 283, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_preprocessed_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: previously preprocessed input%select{ unused when '%2' is present|}1", 730, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ps4_force_pic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '%0' was ignored by the PS4 toolchain, using '-fPIC'", 512, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ps4_sdk_dir, CLASS_WARNING, (unsigned)diag::Severity::Warning, "environment variable SCE_ORBIS_SDK_DIR is set, but points to invalid or nonexistent directory '%0'", 346, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_treating_input_as_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating '%0' input as '%1' when in C++ mode, this behavior is deprecated", 165, SFINAE_Suppress, false, false, 28)
+DIAG(warn_drv_unable_to_find_directory_expected, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unable to find %0 directory, expected to be in '%1'", 346, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unknown_argument_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl: '%0'", 703, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unknown_argument_clang_cl_with_suggestion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl '%0'; did you mean '%1'?", 703, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_debug_info_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "debug information option '%0' is not supported for target '%1'", 725, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_gpopt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit usage of }0-mabicalls", 723, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_longcalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mlong-calls' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls", 512, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported for target '%1'", 287, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_pic_with_mabicalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%0' option as it cannot be used with %select{implicit usage of|}1 -mabicalls and the N64 ABI", 512, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unused_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument unused during compilation: '%0'", 730, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_vectorize_needs_hvx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto-vectorization requires HVX, use -mhvx to enable it", 512, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_yc_multiple_inputs_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' with more than one source file not implemented yet; flag ignored", 124, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ycyu_different_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' and '/Yu' with different filenames not implemented yet; flags ignored", 124, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ycyu_no_fi_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '%0' without a corresponding /FI flag not implemented yet; flag ignored", 124, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ignored_clang_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the flag '%0' has been deprecated and will be ignored", 730, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ignored_gcc_optimization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported", 287, SFINAE_Suppress, false, false, 0)
 DIAG(warn_ignoring_ftabstop_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring invalid -ftabstop value '%0', using default value %1", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_incompatible_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using sysroot for '%0' but targeting '%1'", 313, SFINAE_Suppress, false, false, 0)
-DIAG(warn_invalid_ios_deployment_target, CLASS_WARNING, (unsigned)diag::Severity::Error, "invalid iOS deployment version '%0', iOS 10 is the maximum deployment target for 32-bit targets", 339, SFINAE_Suppress, false, false, 0)
-DIAG(warn_missing_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no such sysroot directory: '%0'", 416, SFINAE_Suppress, false, false, 0)
-DIAG(warn_slash_u_filename, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/U%0' treated as the '/U' option", 611, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_abs2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=2008' option because the '%0' architecture does not support it", 708, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_abslegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=legacy' option because the '%0' architecture does not support it", 708, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_compact_branches, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mcompact-branches=' option because the '%0' architecture does not support it", 710, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_nan2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=2008' option because the '%0' architecture does not support it", 714, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_nanlegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=legacy' option because the '%0' architecture does not support it", 714, SFINAE_Suppress, false, false, 0)
+DIAG(warn_incompatible_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using sysroot for '%0' but targeting '%1'", 317, SFINAE_Suppress, false, false, 0)
+DIAG(warn_invalid_ios_deployment_target, CLASS_WARNING, (unsigned)diag::Severity::Error, "invalid iOS deployment version '%0', iOS 10 is the maximum deployment target for 32-bit targets", 343, SFINAE_Suppress, false, false, 0)
+DIAG(warn_missing_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no such sysroot directory: '%0'", 421, SFINAE_Suppress, false, false, 0)
+DIAG(warn_slash_u_filename, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/U%0' treated as the '/U' option", 619, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_abs2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=2008' option because the '%0' architecture does not support it", 718, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_abslegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=legacy' option because the '%0' architecture does not support it", 718, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_compact_branches, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mcompact-branches=' option because the '%0' architecture does not support it", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_nan2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=2008' option because the '%0' architecture does not support it", 724, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_nanlegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=legacy' option because the '%0' architecture does not support it", 724, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc
index 25f684a..be33ea7 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc
@@ -8,9 +8,9 @@
 DIAG(err_cyclic_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{alias|ifunc}0 definition is part of a cycle", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_duplicate_mangled_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition with same mangled name '%0' as another definition", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_action_not_available, CLASS_ERROR, (unsigned)diag::Severity::Error, "action %0 not compiled in", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_fe_backend_frame_larger_than, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 16)
-DIAG(err_fe_backend_plugin, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 16)
-DIAG(err_fe_backend_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_backend_frame_larger_than, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 17)
+DIAG(err_fe_backend_plugin, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 17)
+DIAG(err_fe_backend_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 17)
 DIAG(err_fe_cannot_link_module, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "cannot link module '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_dependency_file_requires_MT, CLASS_ERROR, (unsigned)diag::Severity::Error, "-dependency-file requires at least one -MT or -MQ option", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_error_backend, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "error in backend: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -35,8 +35,9 @@
 DIAG(err_fe_unable_to_load_plugin, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to load plugin '%0': '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_unable_to_open_output, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to open output file '%0': '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_function_needs_feature, CLASS_ERROR, (unsigned)diag::Severity::Error, "always_inline function %1 requires target feature '%2', but would be inlined into function %0 that is compiled without support for '%2'", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_header_module_requires_modules, CLASS_ERROR, (unsigned)diag::Severity::Error, "header module compilation requires '-fmodules' or '-fmodules-ts'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_header_module_requires_modules, CLASS_ERROR, (unsigned)diag::Severity::Error, "header module compilation requires '-fmodules', '-std=c++2a', or '-fmodules-ts'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_ifunc_resolver_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "ifunc resolver function must return a pointer", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_interface_stubs, CLASS_ERROR, (unsigned)diag::Severity::Error, "clang-ifs (-emit-iterface-stubs): %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_invalid_vfs_overlay, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "invalid virtual filesystem overlay file '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_missing_module, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "no module named '%0' declared in module map file '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_missing_module_name, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "no module name provided; specify one with -fmodule-name=", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -45,13 +46,14 @@
 DIAG(err_module_cannot_create_includes, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot create includes file for module %0: %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_module_header_file_invalid, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "unexpected module header file input '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_module_header_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module header file '%0' not found", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_module_interface_requires_modules_ts, CLASS_ERROR, (unsigned)diag::Severity::Error, "module interface compilation requires '-fmodules-ts'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_interface_requires_cpp_modules, CLASS_ERROR, (unsigned)diag::Severity::Error, "module interface compilation requires '-std=c++2a' or '-fmodules-ts'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_module_map_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module map file '%0' not found", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_modules_embed_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' specified by '-fmodules-embed-file=' not found", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_no_submodule, CLASS_ERROR, (unsigned)diag::Severity::Error, "no submodule named %0 in module '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_no_submodule_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no submodule named %0 in module '%1'; did you mean '%2'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_relocatable_without_isysroot, CLASS_ERROR, (unsigned)diag::Severity::Error, "must specify system root with -isysroot when building a relocatable PCH file", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_test_module_file_extension_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "test module file extension '%0' has different version (%1.%2) than expected (%3.%4)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_ambiguous_marker, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to marker '%0' is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_verify_inconsistent_diags, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' diagnostics %select{expected|seen}1 but not %select{seen|expected}1: %2", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_verify_invalid_content, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid expected %0: %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_verify_invalid_no_diags, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{expected|'expected-no-diagnostics'}0 directive cannot follow %select{'expected-no-diagnostics' directive|other expected directives}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -62,9 +64,10 @@
 DIAG(err_verify_missing_regex, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find start of regex ('{{') in %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_verify_missing_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find start ('{{') of expected %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_verify_no_directives, CLASS_ERROR, (unsigned)diag::Severity::Error, "no expected directives found: consider use of 'expected-no-diagnostics'", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(note_fe_backend_frame_larger_than, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, true, 16)
-DIAG(note_fe_backend_invalid_loc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "could not determine the original source location for %0:%1:%2", 0, SFINAE_Suppress, false, true, 16)
-DIAG(note_fe_backend_plugin, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, true, 16)
+DIAG(err_verify_no_such_marker, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of undefined marker '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(note_fe_backend_frame_larger_than, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, true, 17)
+DIAG(note_fe_backend_invalid_loc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "could not determine the original source location for %0:%1:%2", 0, SFINAE_Suppress, false, true, 17)
+DIAG(note_fe_backend_plugin, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, true, 17)
 DIAG(note_fe_inline_asm, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, false, 12)
 DIAG(note_fe_inline_asm_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "instantiated into assembly here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_fixit_applied, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT applied suggested code changes", 0, SFINAE_Suppress, false, false, 0)
@@ -75,39 +78,39 @@
 DIAG(note_module_def_undef_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "macro was %select{defined|#undef'd}0 here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_module_import_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "module imported here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_private_top_level_defined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "module defined here", 0, SFINAE_Suppress, false, false, 0)
-DIAG(remark_fe_backend_optimization_remark, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 522, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_analysis, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 523, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_analysis_aliasing, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop. If the arrays will always be independent specify '#pragma clang loop vectorize(assume_safety)' before the loop or provide the '__restrict__' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied!", 523, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_analysis_fpcommute, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop or by providing the compiler option '-ffast-math'.", 523, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_missed, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 525, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_plugin, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 566, SFINAE_Suppress, false, true, 16)
-DIAG(remark_module_build, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "building module '%0' as '%1'", 418, SFINAE_Suppress, false, false, 0)
-DIAG(remark_module_build_done, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "finished building module '%0'", 418, SFINAE_Suppress, false, false, 0)
-DIAG(warn_alias_to_weak_alias, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden", 282, SFINAE_Suppress, false, false, 0)
-DIAG(warn_alias_with_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}1 will not be in section '%0' but in the same section as the %select{aliasee|resolver}2", 282, SFINAE_Suppress, false, false, 0)
+DIAG(note_verify_ambiguous_marker, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "ambiguous marker '%0' is defined here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(remark_fe_backend_optimization_remark, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 530, SFINAE_Suppress, false, true, 17)
+DIAG(remark_fe_backend_optimization_remark_analysis, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 531, SFINAE_Suppress, false, true, 17)
+DIAG(remark_fe_backend_optimization_remark_analysis_aliasing, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop. If the arrays will always be independent specify '#pragma clang loop vectorize(assume_safety)' before the loop or provide the '__restrict__' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied!", 531, SFINAE_Suppress, false, true, 17)
+DIAG(remark_fe_backend_optimization_remark_analysis_fpcommute, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop or by providing the compiler option '-ffast-math'.", 531, SFINAE_Suppress, false, true, 17)
+DIAG(remark_fe_backend_optimization_remark_missed, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 533, SFINAE_Suppress, false, true, 17)
+DIAG(remark_fe_backend_plugin, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 574, SFINAE_Suppress, false, true, 17)
+DIAG(remark_module_build, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "building module '%0' as '%1'", 423, SFINAE_Suppress, false, false, 0)
+DIAG(remark_module_build_done, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "finished building module '%0'", 423, SFINAE_Suppress, false, false, 0)
+DIAG(warn_alias_to_weak_alias, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden", 286, SFINAE_Suppress, false, false, 0)
+DIAG(warn_alias_with_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}1 will not be in section '%0' but in the same section as the %select{aliasee|resolver}2", 286, SFINAE_Suppress, false, false, 0)
 DIAG(warn_atomic_op_misaligned, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{large|misaligned}0 atomic operation may incur significant performance penalty", 41, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_backend_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 245, SFINAE_Suppress, false, true, 16)
-DIAG(warn_fe_backend_optimization_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 524, SFINAE_Suppress, false, true, 16)
-DIAG(warn_fe_backend_plugin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 53, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_backend_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 249, SFINAE_Suppress, false, true, 17)
+DIAG(warn_fe_backend_optimization_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 532, SFINAE_Suppress, false, true, 17)
+DIAG(warn_fe_backend_plugin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 54, SFINAE_Suppress, false, true, 17)
 DIAG(warn_fe_cc_log_diagnostics_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open CC_LOG_DIAGNOSTICS file: %0 (using stderr)", 0, SFINAE_Suppress, false, false, 0)
 DIAG(warn_fe_cc_print_header_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open CC_PRINT_HEADERS file: %0 (using stderr)", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "stack frame size of %0 bytes in %q1", 245, SFINAE_Suppress, false, true, 16)
-DIAG(warn_fe_inline_asm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 327, SFINAE_Suppress, false, false, 12)
+DIAG(warn_fe_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "stack frame size of %0 bytes in %q1", 249, SFINAE_Suppress, false, true, 17)
+DIAG(warn_fe_inline_asm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 331, SFINAE_Suppress, false, false, 12)
 DIAG(warn_fe_macro_contains_embedded_newline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro '%0' contains embedded newline; text after the newline is ignored", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_override_module, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding the module target triple with %0", 514, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_serialized_diag_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open file %0 for serializing diagnostics (%1)", 588, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_serialized_diag_merge_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to merge a subprocess's serialized diagnostics", 588, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_unable_to_open_stats_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open statistics output file '%0': '%1'", 674, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_override_module, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding the module target triple with %0", 522, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_serialized_diag_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open file %0 for serializing diagnostics (%1)", 596, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_serialized_diag_merge_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to merge a subprocess's serialized diagnostics", 596, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_unable_to_open_stats_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open statistics output file '%0': '%1'", 683, SFINAE_Suppress, false, false, 0)
 DIAG(warn_fixit_no_changes, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT detected errors it could not fix; no output will be generated", 0, SFINAE_Suppress, false, false, 0)
 DIAG(warn_incompatible_analyzer_plugin_api, CLASS_WARNING, (unsigned)diag::Severity::Warning, "checker plugin '%0' is not compatible with this version of the analyzer", 21, SFINAE_Suppress, false, false, 0)
-DIAG(warn_missing_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing submodule '%0'", 317, SFINAE_Suppress, false, false, 0)
-DIAG(warn_module_config_macro_undef, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{definition|#undef}0 of configuration macro '%1' has no effect on the import of '%2'; pass '%select{-D%1=...|-U%1}0' on the command line to configure the module", 132, SFINAE_Suppress, false, false, 0)
-DIAG(warn_module_config_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Error, "module file %0 cannot be loaded due to a configuration mismatch with the current compilation", 420, SFINAE_Suppress, false, false, 0)
-DIAG(warn_no_priv_submodule_use_toplevel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no submodule named %0 in module '%1'; using top level '%2'", 546, SFINAE_Suppress, false, false, 0)
-DIAG(warn_option_invalid_ocl_version, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL version %0 does not support the option '%1'", 164, SFINAE_Suppress, false, false, 27)
-DIAG(warn_profile_data_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "profile data may be incomplete: of %0 function%s0, %1 %plural{1:has|:have}1 no data", 547, SFINAE_Suppress, false, false, 31)
-DIAG(warn_profile_data_out_of_date, CLASS_WARNING, (unsigned)diag::Severity::Warning, "profile data may be out of date: of %0 function%s0, %1 %plural{1:has|:have}1 mismatched data that will be ignored", 548, SFINAE_Suppress, false, false, 31)
-DIAG(warn_profile_data_unprofiled, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no profile data available for file \"%0\"", 549, SFINAE_Suppress, false, false, 31)
-DIAG(warn_stdlibcxx_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead", 621, SFINAE_Suppress, false, false, 0)
-DIAG(warn_unknown_diag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %select{warning|remark}0 option '%1'%select{|; did you mean '%3'?}2", 698, SFINAE_Suppress, false, false, 0)
-DIAG(warn_unknown_warning_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %0 warning specifier: '%1'", 698, SFINAE_Suppress, false, false, 0)
+DIAG(warn_missing_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing submodule '%0'", 321, SFINAE_Suppress, false, false, 0)
+DIAG(warn_module_config_macro_undef, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{definition|#undef}0 of configuration macro '%1' has no effect on the import of '%2'; pass '%select{-D%1=...|-U%1}0' on the command line to configure the module", 133, SFINAE_Suppress, false, false, 0)
+DIAG(warn_module_config_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Error, "module file %0 cannot be loaded due to a configuration mismatch with the current compilation", 425, SFINAE_Suppress, false, false, 0)
+DIAG(warn_no_priv_submodule_use_toplevel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no submodule named %0 in module '%1'; using top level '%2'", 554, SFINAE_Suppress, false, false, 0)
+DIAG(warn_option_invalid_ocl_version, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL version %0 does not support the option '%1'", 165, SFINAE_Suppress, false, false, 28)
+DIAG(warn_profile_data_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "profile data may be incomplete: of %0 function%s0, %1 %plural{1:has|:have}1 no data", 555, SFINAE_Suppress, false, false, 32)
+DIAG(warn_profile_data_out_of_date, CLASS_WARNING, (unsigned)diag::Severity::Warning, "profile data may be out of date: of %0 function%s0, %1 %plural{1:has|:have}1 mismatched data that will be ignored", 556, SFINAE_Suppress, false, false, 32)
+DIAG(warn_profile_data_unprofiled, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no profile data available for file \"%0\"", 557, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unknown_diag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %select{warning|remark}0 option '%1'%select{|; did you mean '%3'?}2", 708, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unknown_warning_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %0 warning specifier: '%1'", 708, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc b/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc
index 6b74a08..df168df 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc
@@ -44,749 +44,760 @@
   /* DiagArray50 */ diag::ext_auto_storage_class, -1,
   /* DiagArray51 */ diag::warn_auto_var_is_id, -1,
   /* DiagArray52 */ diag::warn_availability_and_unavailable, diag::warn_availability_on_static_initializer, diag::warn_availability_swift_unavailable_deprecated_only, diag::warn_availability_unknown_platform, diag::warn_availability_version_ordering, diag::warn_expected_consistent_version_separator, diag::warn_mismatched_availability, diag::warn_mismatched_availability_override, diag::warn_mismatched_availability_override_unavail, -1,
-  /* DiagArray53 */ diag::warn_fe_backend_plugin, -1,
-  /* DiagArray54 */ diag::backslash_newline_space, -1,
-  /* DiagArray55 */ diag::warn_bad_function_cast, -1,
-  /* DiagArray57 */ diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, -1,
-  /* DiagArray58 */ diag::ext_decomp_decl_cond, -1,
-  /* DiagArray59 */ diag::warn_impcast_bitfield_precision_constant, -1,
-  /* DiagArray60 */ diag::warn_bitfield_too_small_for_enum, diag::warn_signed_bitfield_enum_conversion, diag::warn_unsigned_bitfield_assigned_signed_enum, -1,
-  /* DiagArray61 */ diag::warn_anon_bitfield_width_exceeds_type_width, diag::warn_bitfield_width_exceeds_type_width, -1,
-  /* DiagArray62 */ diag::warn_bitwise_op_in_bitwise_op, -1,
-  /* DiagArray63 */ diag::warn_block_capture_autoreleasing, -1,
-  /* DiagArray64 */ diag::warn_impcast_bool_to_null_pointer, -1,
-  /* DiagArray66 */ diag::warn_braces_around_scalar_init, -1,
-  /* DiagArray67 */ diag::warn_objc_invalid_bridge, diag::warn_objc_invalid_bridge_to_cf, -1,
-  /* DiagArray68 */ diag::ext_pp_redef_builtin_macro, diag::ext_pp_undef_builtin_macro, -1,
-  /* DiagArray69 */ diag::warn_memcpy_chk_overflow, -1,
-  /* DiagArray70 */ diag::warn_implicit_decl_requires_sysheader, -1,
-  /* DiagArray71 */ diag::warn_zero_size_struct_union_compat, -1,
-  /* DiagArray75 */ diag::ext_old_implicitly_unsigned_long_cxx, diag::warn_auto_storage_class, diag::warn_cxx11_compat_user_defined_literal, diag::warn_cxx11_keyword, diag::warn_cxx11_right_shift_in_template_arg, diag::warn_explicit_instantiation_inline_0x, diag::warn_explicit_instantiation_must_be_global_0x, diag::warn_explicit_instantiation_out_of_scope_0x, diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x, diag::warn_old_implicitly_unsigned_long_cxx, -1,
-  /* DiagArray76 */ diag::warn_deprecated_string_literal_conversion, -1,
-  /* DiagArray78 */ diag::warn_cxx11_compat_reserved_user_defined_literal, -1,
-  /* DiagArray79 */ diag::ext_alias_declaration, diag::ext_array_size_conversion, diag::ext_auto_type_specifier, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_defaulted_deleted_function, diag::ext_enum_friend, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_conversion_functions, diag::ext_extern_template, diag::ext_for_range, diag::ext_generalized_initializer_lists, diag::ext_nested_name_spec_is_enum, diag::ext_nonclass_type_friend, diag::ext_nonstatic_member_init, diag::ext_override_control_keyword, diag::ext_ref_qualifier, diag::ext_rvalue_reference, diag::ext_scoped_enum, diag::ext_static_data_member_in_union, diag::ext_template_arg_object_internal, diag::ext_template_outside_of_template, diag::ext_template_parameter_default_in_function_template, diag::ext_typename_outside_of_template, diag::ext_unelaborated_friend_type, diag::ext_variadic_templates, -1,
-  /* DiagArray80 */ diag::ext_extra_semi_cxx11, -1,
-  /* DiagArray81 */ diag::ext_inline_namespace, -1,
-  /* DiagArray82 */ diag::ext_cxx11_longlong, -1,
-  /* DiagArray83 */ diag::ext_cce_narrowing, diag::ext_init_list_constant_narrowing, diag::ext_init_list_type_narrowing, diag::ext_init_list_variable_narrowing, diag::warn_init_list_constant_narrowing, diag::warn_init_list_type_narrowing, diag::warn_init_list_variable_narrowing, -1,
-  /* DiagArray84 */ diag::ext_binary_literal_cxx14, -1,
-  /* DiagArray87 */ diag::ext_constexpr_body_invalid_stmt, diag::ext_constexpr_body_multiple_return, diag::ext_constexpr_local_var, diag::ext_constexpr_type_definition, diag::ext_cxx14_attr, diag::ext_decltype_auto_type_specifier, diag::ext_init_capture, diag::ext_variable_template, -1,
-  /* DiagArray89 */ diag::warn_cxx17_compat_exception_spec_in_signature, -1,
-  /* DiagArray91 */ diag::ext_auto_new_list_init, diag::ext_constexpr_if, diag::ext_constexpr_on_lambda_cxx17, diag::ext_cxx17_attr, diag::ext_decomp_decl, diag::ext_fold_expression, diag::ext_for_range_begin_end_types_differ, diag::ext_hex_literal_invalid, diag::ext_init_statement, diag::ext_inline_variable, diag::ext_multi_using_declaration, diag::ext_nested_namespace_definition, diag::ext_ns_enum_attribute, diag::ext_star_this_lambda_capture_cxx17, diag::ext_static_assert_no_message, diag::ext_template_template_param_typename, diag::ext_using_attribute_ns, diag::ext_using_declaration_pack, -1,
-  /* DiagArray96 */ diag::warn_cxx2a_compat_aggregate_init_with_ctors, diag::warn_cxx2a_compat_spaceship, diag::warn_cxx2a_compat_utf8_string, diag::warn_cxx2a_keyword, -1,
-  /* DiagArray98 */ diag::ext_bitfield_member_init, diag::ext_constexpr_body_invalid_stmt_cxx2a, diag::ext_constexpr_function_try_block_cxx2a, diag::ext_equals_this_lambda_capture_cxx2a, diag::ext_for_range_init_stmt, diag::ext_inline_nested_namespace_definition, diag::ext_pointer_to_const_ref_member_on_rvalue, -1,
-  /* DiagArray99 */ diag::warn_cxx17_compat_bitfield_member_init, diag::warn_cxx17_compat_constexpr_body_invalid_stmt, diag::warn_cxx17_compat_constexpr_function_try_block, diag::warn_cxx17_compat_defaulted_method_type_mismatch, diag::warn_cxx17_compat_equals_this_lambda_capture, diag::warn_cxx17_compat_for_range_init_stmt, diag::warn_cxx17_compat_inline_nested_namespace_definition, diag::warn_cxx17_compat_lambda_def_ctor_assign, diag::warn_cxx17_compat_spaceship, diag::warn_cxx17_compat_unicode_type, -1,
-  /* DiagArray100 */ diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, -1,
-  /* DiagArray101 */ diag::warn_cxx14_compat_class_template_argument_deduction, diag::warn_cxx14_compat_constexpr_if, diag::warn_cxx14_compat_constexpr_on_lambda, diag::warn_cxx14_compat_decomp_decl, diag::warn_cxx14_compat_fold_expression, diag::warn_cxx14_compat_init_statement, diag::warn_cxx14_compat_inline_variable, diag::warn_cxx14_compat_nested_namespace_definition, diag::warn_cxx14_compat_star_this_lambda_capture, diag::warn_cxx14_compat_static_assert_no_message, diag::warn_cxx14_compat_template_nontype_parm_auto_type, diag::warn_cxx14_compat_template_template_param_typename, diag::warn_cxx14_compat_u8_character_literal, diag::warn_cxx14_compat_using_attribute_ns, diag::warn_cxx17_compat_multi_using_declaration, diag::warn_cxx17_compat_using_declaration_pack, diag::warn_for_range_begin_end_types_differ, -1,
-  /* DiagArray102 */ diag::warn_cxx14_compat_ns_enum_attribute, diag::warn_cxx17_hex_literal, -1,
-  /* DiagArray103 */ diag::warn_cxx11_compat_constexpr_body_invalid_stmt, diag::warn_cxx11_compat_constexpr_body_multiple_return, diag::warn_cxx11_compat_constexpr_body_no_return, diag::warn_cxx11_compat_constexpr_local_var, diag::warn_cxx11_compat_constexpr_type_definition, diag::warn_cxx11_compat_decltype_auto_type_specifier, diag::warn_cxx11_compat_deduced_return_type, diag::warn_cxx11_compat_digit_separator, diag::warn_cxx11_compat_generic_lambda, diag::warn_cxx11_compat_init_capture, diag::warn_cxx11_compat_variable_template, -1,
-  /* DiagArray104 */ diag::warn_cxx11_compat_binary_literal, -1,
-  /* DiagArray106 */ diag::warn_cxx98_compat_alias_declaration, diag::warn_cxx98_compat_alignas, diag::warn_cxx98_compat_alignof, diag::warn_cxx98_compat_attribute, diag::warn_cxx98_compat_auto_type_specifier, diag::warn_cxx98_compat_constexpr, diag::warn_cxx98_compat_ctor_list_init, diag::warn_cxx98_compat_decltype, diag::warn_cxx98_compat_defaulted_deleted_function, diag::warn_cxx98_compat_delegating_ctor, diag::warn_cxx98_compat_empty_scalar_initializer, diag::warn_cxx98_compat_enum_fixed_underlying_type, diag::warn_cxx98_compat_enum_friend, diag::warn_cxx98_compat_enum_nested_name_spec, diag::warn_cxx98_compat_explicit_conversion_functions, diag::warn_cxx98_compat_for_range, diag::warn_cxx98_compat_friend_is_member, diag::warn_cxx98_compat_generalized_initializer_lists, diag::warn_cxx98_compat_goto_into_protected_scope, diag::warn_cxx98_compat_indirect_goto_in_protected_scope, diag::warn_cxx98_compat_initializer_list_init, diag::warn_cxx98_compat_inline_namespace, diag::warn_cxx98_compat_lambda, diag::warn_cxx98_compat_less_colon_colon, diag::warn_cxx98_compat_literal_operator, diag::warn_cxx98_compat_literal_ucn_control_character, diag::warn_cxx98_compat_literal_ucn_escape_basic_scs, diag::warn_cxx98_compat_noexcept_decl, diag::warn_cxx98_compat_noexcept_expr, diag::warn_cxx98_compat_non_static_member_use, diag::warn_cxx98_compat_nonclass_type_friend, diag::warn_cxx98_compat_nonstatic_member_init, diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member, diag::warn_cxx98_compat_nullptr, diag::warn_cxx98_compat_override_control_keyword, diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg, diag::warn_cxx98_compat_raw_string_literal, diag::warn_cxx98_compat_ref_qualifier, diag::warn_cxx98_compat_reference_list_init, diag::warn_cxx98_compat_rvalue_reference, diag::warn_cxx98_compat_scoped_enum, diag::warn_cxx98_compat_sfinae_access_control, diag::warn_cxx98_compat_static_assert, diag::warn_cxx98_compat_static_data_member_in_union, diag::warn_cxx98_compat_switch_into_protected_scope, diag::warn_cxx98_compat_template_arg_extra_parens, diag::warn_cxx98_compat_template_arg_null, diag::warn_cxx98_compat_template_arg_object_internal, diag::warn_cxx98_compat_template_outside_of_template, diag::warn_cxx98_compat_template_parameter_default_in_function_template, diag::warn_cxx98_compat_trailing_return_type, diag::warn_cxx98_compat_two_right_angle_brackets, diag::warn_cxx98_compat_typename_outside_of_template, diag::warn_cxx98_compat_unelaborated_friend_type, diag::warn_cxx98_compat_unicode_id, diag::warn_cxx98_compat_unicode_literal, diag::warn_cxx98_compat_unicode_type, diag::warn_cxx98_compat_using_decl_constructor, diag::warn_cxx98_compat_variadic_templates, -1,
-  /* DiagArray107 */ diag::warn_cxx98_compat_temp_copy, -1,
-  /* DiagArray108 */ diag::warn_cxx98_compat_top_level_semi, -1,
-  /* DiagArray109 */ diag::warn_cxx98_compat_template_arg_local_type, -1,
-  /* DiagArray110 */ diag::warn_cxx98_compat_array_size_conversion, diag::warn_cxx98_compat_cast_fn_obj, diag::warn_cxx98_compat_empty_fnmacro_arg, diag::warn_cxx98_compat_enumerator_list_comma, diag::warn_cxx98_compat_extern_template, diag::warn_cxx98_compat_longlong, diag::warn_cxx98_compat_no_newline_eof, diag::warn_cxx98_compat_pp_line_too_big, diag::warn_cxx98_compat_variadic_macro, -1,
-  /* DiagArray111 */ diag::warn_cxx98_compat_template_arg_unnamed_type, -1,
-  /* DiagArray112 */ diag::ext_anonymous_union, diag::ext_c11_alignment, diag::ext_c11_anonymous_struct, diag::ext_c11_generic_selection, diag::ext_c11_noreturn, diag::ext_c11_static_assert, -1,
-  /* DiagArray113 */ diag::warn_c99_compat_unicode_id, diag::warn_c99_compat_unicode_literal, diag::warn_old_implicitly_unsigned_long, -1,
-  /* DiagArray114 */ diag::ext_aggregate_init_not_constant, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_c99_whitespace_required_after_macro_name, diag::ext_designated_init, diag::ext_empty_fnmacro_arg, diag::ext_enumerator_list_comma_c, diag::ext_hex_constant_invalid, -1,
-  /* DiagArray115 */ diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor, -1,
-  /* DiagArray116 */ diag::warn_cast_align, -1,
-  /* DiagArray117 */ diag::warn_cast_calling_conv, -1,
-  /* DiagArray118 */ diag::warn_cast_pointer_from_sel, -1,
-  /* DiagArray119 */ diag::warn_cast_qual, diag::warn_cast_qual2, -1,
-  /* DiagArray120 */ diag::ext_bad_cxx_cast_qualifiers_away_incoherent, -1,
-  /* DiagArray122 */ diag::warn_omp_section_is_char, diag::warn_subscript_is_char, -1,
-  /* DiagArray123 */ diag::warn_drv_yc_multiple_inputs_clang_cl, diag::warn_drv_ycyu_different_arg_clang_cl, diag::warn_drv_ycyu_no_fi_arg_clang_cl, diag::warn_pp_hdrstop_filename_ignored, diag::warn_pp_macro_def_mismatch_with_pch, -1,
-  /* DiagArray124 */ diag::warn_pass_class_arg_to_vararg, -1,
-  /* DiagArray125 */ diag::warn_comma_operator, -1,
-  /* DiagArray126 */ diag::escaped_newline_block_comment_end, diag::ext_line_comment, diag::ext_multi_line_line_comment, diag::warn_nested_block_comment, -1,
-  /* DiagArray128 */ diag::ext_typecheck_comparison_of_distinct_pointers, -1,
-  /* DiagArray129 */ diag::ext_complex_component_init, -1,
-  /* DiagArray130 */ diag::ext_typecheck_cond_pointer_integer_mismatch, -1,
-  /* DiagArray131 */ diag::warn_maybe_uninit_var, -1,
-  /* DiagArray132 */ diag::warn_module_config_macro_undef, -1,
-  /* DiagArray133 */ diag::warn_impcast_integer_precision_constant, -1,
-  /* DiagArray134 */ diag::warn_logical_instead_of_bitwise, -1,
-  /* DiagArray135 */ diag::warn_cxx14_compat_constexpr_not_const, -1,
-  /* DiagArray136 */ diag::warn_attr_on_unconsumable_class, diag::warn_loop_state_mismatch, diag::warn_param_return_typestate_mismatch, diag::warn_param_typestate_mismatch, diag::warn_return_typestate_for_unconsumable_type, diag::warn_return_typestate_mismatch, diag::warn_use_in_invalid_state, diag::warn_use_of_temp_in_invalid_state, -1,
-  /* DiagArray137 */ diag::warn_impcast_complex_scalar, diag::warn_impcast_vector_scalar, diag::warn_opencl_generic_address_space_arg, diag::warn_template_arg_negative, diag::warn_template_arg_too_large, -1,
-  /* DiagArray140 */ diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions, -1,
-  /* DiagArray141 */ diag::warn_unreachable_default, -1,
-  /* DiagArray143 */ diag::warn_objc_cdirective_format_string, -1,
-  /* DiagArray144 */ diag::warn_ctad_maybe_unsupported, -1,
-  /* DiagArray146 */ diag::warn_ctu_incompat_triple, -1,
-  /* DiagArray147 */ diag::warn_attribute_argument_n_negative, diag::warn_cuda_attr_lambda_position, diag::warn_kern_is_inline, diag::warn_kern_is_method, diag::warn_pragma_unroll_cuda_value_in_parens, -1,
-  /* DiagArray148 */ diag::warn_default_atomic_custom_getter_setter, -1,
-  /* DiagArray149 */ diag::warn_dangling_variable, diag::warn_unsupported_lifetime_extension, -1,
-  /* DiagArray150 */ diag::warn_dangling_else, -1,
-  /* DiagArray151 */ diag::warn_bind_ref_member_to_parameter, diag::warn_dangling_member, diag::warn_init_ptr_member_to_parameter_addr, diag::warn_new_dangling_reference, -1,
-  /* DiagArray152 */ diag::warn_new_dangling_initializer_list, -1,
-  /* DiagArray153 */ diag::warn_drv_darwin_sdk_invalid_settings, -1,
-  /* DiagArray154 */ diag::warn_pp_date_time, -1,
-  /* DiagArray155 */ diag::warn_dealloc_in_category, -1,
-  /* DiagArray156 */ diag::warn_debug_compression_unavailable, -1,
-  /* DiagArray157 */ diag::ext_mixed_decls_code, -1,
-  /* DiagArray158 */ diag::warn_defaulted_method_deleted, -1,
-  /* DiagArray159 */ diag::warn_delegating_ctor_cycle, -1,
-  /* DiagArray160 */ diag::warn_delete_abstract_non_virtual_dtor, -1,
-  /* DiagArray161 */ diag::ext_delete_void_ptr_operand, diag::warn_delete_incomplete, -1,
-  /* DiagArray162 */ diag::warn_delete_non_virtual_dtor, -1,
-  /* DiagArray164 */ diag::warn_O4_is_O3, diag::warn_access_decl_deprecated, diag::warn_deprecated_copy_operation, diag::warn_deprecated_redundant_constexpr_static_def, diag::warn_drv_deprecated_arg, diag::warn_drv_treating_input_as_cxx, diag::warn_option_invalid_ocl_version, diag::warn_vector_long_decl_spec_combination, -1,
-  /* DiagArray165 */ diag::warn_vector_mode_deprecated, -1,
-  /* DiagArray166 */ diag::warn_atl_uuid_deprecated, diag::warn_cstyle_param, diag::warn_deprecated, diag::warn_deprecated_fwdclass_message, diag::warn_deprecated_message, diag::warn_property_method_deprecated, -1,
-  /* DiagArray167 */ diag::warn_exception_spec_deprecated, -1,
-  /* DiagArray168 */ diag::warn_deprecated_def, diag::warn_unavailable_def, -1,
-  /* DiagArray169 */ diag::warn_increment_bool, -1,
-  /* DiagArray170 */ diag::warn_objc_isa_assign, diag::warn_objc_isa_use, -1,
-  /* DiagArray171 */ diag::warn_objc_pointer_masking, -1,
-  /* DiagArray172 */ diag::warn_objc_pointer_masking_performSelector, -1,
-  /* DiagArray173 */ diag::warn_deprecated_register, -1,
-  /* DiagArray174 */ diag::warn_deprecated_this_capture, -1,
-  /* DiagArray176 */ diag::warn_direct_ivar_access, -1,
-  /* DiagArray177 */ diag::pp_disabled_macro_expansion, -1,
-  /* DiagArray180 */ diag::warn_conflicting_param_modifiers, diag::warn_conflicting_ret_type_modifiers, -1,
-  /* DiagArray182 */ diag::warn_remainder_division_by_zero, -1,
-  /* DiagArray183 */ diag::warn_attribute_dll_redeclaration, -1,
-  /* DiagArray184 */ diag::warn_attribute_dllexport_explicit_instantiation_decl, -1,
-  /* DiagArray185 */ diag::warn_attribute_dllimport_static_field_definition, -1,
-  /* DiagArray186 */ diag::warn_doc_api_container_decl_mismatch, diag::warn_doc_block_command_duplicate, diag::warn_doc_block_command_empty_paragraph, diag::warn_doc_container_decl_mismatch, diag::warn_doc_function_method_decl_mismatch, diag::warn_doc_html_start_tag_expected_ident_or_greater, diag::warn_doc_html_start_tag_expected_quoted_string, diag::warn_doc_param_duplicate, diag::warn_doc_param_invalid_direction, diag::warn_doc_param_not_attached_to_a_function_decl, diag::warn_doc_param_not_found, diag::warn_doc_returns_attached_to_a_void_function, diag::warn_doc_returns_not_attached_to_a_function_decl, diag::warn_doc_tparam_duplicate, diag::warn_doc_tparam_not_attached_to_a_template_decl, diag::warn_doc_tparam_not_found, diag::warn_not_a_doxygen_trailing_member_comment, diag::warn_verbatim_block_end_without_start, -1,
-  /* DiagArray187 */ diag::warn_doc_deprecated_not_sync, -1,
-  /* DiagArray188 */ diag::warn_doc_html_end_forbidden, diag::warn_doc_html_end_unbalanced, diag::warn_doc_html_missing_end_tag, diag::warn_doc_html_start_end_mismatch, -1,
-  /* DiagArray189 */ diag::warn_doc_param_spaces_in_direction, -1,
-  /* DiagArray190 */ diag::warn_correct_comment_command_name, diag::warn_unknown_comment_command_name, -1,
-  /* DiagArray191 */ diag::ext_dollar_in_identifier, -1,
-  /* DiagArray192 */ diag::warn_impcast_double_promotion, -1,
-  /* DiagArray193 */ diag::ext_duplicate_declspec, diag::ext_warn_duplicate_declspec, diag::warn_attribute_address_multiple_identical_qualifiers, diag::warn_duplicate_declspec, -1,
-  /* DiagArray194 */ diag::warn_duplicate_enum_values, -1,
-  /* DiagArray195 */ diag::warn_method_param_declaration, -1,
-  /* DiagArray196 */ diag::warn_duplicate_method_decl, -1,
-  /* DiagArray197 */ diag::warn_duplicate_protocol_def, -1,
-  /* DiagArray198 */ diag::warn_dyn_class_memaccess, -1,
-  /* DiagArray199 */ diag::ext_dynamic_exception_spec, -1,
-  /* DiagArray201 */ diag::ext_embedded_directive, -1,
-  /* DiagArray202 */ diag::warn_empty_for_body, diag::warn_empty_if_body, diag::warn_empty_range_based_for_body, diag::warn_empty_switch_body, diag::warn_empty_while_body, -1,
-  /* DiagArray203 */ diag::ext_decomp_decl_empty, -1,
-  /* DiagArray204 */ diag::warn_empty_init_statement, -1,
-  /* DiagArray205 */ diag::ext_empty_translation_unit, -1,
-  /* DiagArray206 */ diag::warn_incomplete_encoded_type, -1,
-  /* DiagArray208 */ diag::warn_comparison_of_mixed_enum_types, -1,
-  /* DiagArray209 */ diag::warn_comparison_of_mixed_enum_types_switch, -1,
-  /* DiagArray210 */ diag::warn_impcast_different_enum_types, -1,
-  /* DiagArray211 */ diag::ext_enum_too_large, diag::ext_enumerator_increment_too_large, -1,
-  /* DiagArray212 */ diag::warn_cdtor_function_try_handler_mem_expr, diag::warn_exception_caught_by_earlier_handler, diag::warn_throw_in_noexcept_func, -1,
-  /* DiagArray213 */ diag::warn_exit_time_destructor, -1,
-  /* DiagArray214 */ diag::warn_defined_in_function_type_macro, diag::warn_defined_in_object_type_macro, -1,
-  /* DiagArray215 */ diag::warn_drv_experimental_isel_incomplete, diag::warn_drv_experimental_isel_incomplete_opt, -1,
-  /* DiagArray216 */ diag::warn_direct_initialize_call, diag::warn_direct_super_initialize_call, -1,
-  /* DiagArray217 */ diag::warn_arc_strong_pointer_objc_pointer, -1,
-  /* DiagArray218 */ diag::warn_zero_size_struct_union_in_extern_c, -1,
-  /* DiagArray219 */ diag::warn_extern_init, -1,
-  /* DiagArray220 */ diag::warn_arm_interrupt_calling_convention, -1,
-  /* DiagArray221 */ diag::warn_namespace_member_extra_qualification, -1,
-  /* DiagArray222 */ diag::ext_extra_semi, diag::warn_extra_semi_after_mem_fn_def, -1,
-  /* DiagArray223 */ diag::warn_null_statement, -1,
-  /* DiagArray224 */ diag::ext_pp_extra_tokens_at_eol, diag::warn_omp_extra_tokens_at_eol, -1,
-  /* DiagArray225 */ diag::warn_drv_invoking_fallback, -1,
-  /* DiagArray226 */ diag::ext_clang_c_enum_fixed_underlying_type, -1,
-  /* DiagArray227 */ diag::warn_flag_enum_constant_out_of_range, -1,
-  /* DiagArray228 */ diag::ext_flexible_array_in_array, diag::ext_flexible_array_in_struct, -1,
-  /* DiagArray229 */ diag::warn_impcast_float_integer, -1,
-  /* DiagArray230 */ diag::warn_floatingpoint_eq, -1,
-  /* DiagArray231 */ diag::warn_impcast_float_to_integer, diag::warn_impcast_float_to_integer_out_of_range, -1,
-  /* DiagArray232 */ diag::warn_impcast_float_to_integer_zero, -1,
-  /* DiagArray233 */ diag::warn_redundant_loop_iteration, diag::warn_variables_not_in_loop_body, -1,
-  /* DiagArray234 */ diag::warn_format_P_no_precision, diag::warn_format_argument_needs_cast, diag::warn_format_conversion_argument_type_mismatch, diag::warn_format_invalid_annotation, diag::warn_format_invalid_positional_specifier, diag::warn_format_mix_positional_nonpositional_args, diag::warn_format_nonsensical_length, diag::warn_format_string_is_wide_literal, diag::warn_format_zero_positional_specifier, diag::warn_missing_format_string, diag::warn_printf_ObjCflags_without_ObjCConversion, diag::warn_printf_asterisk_missing_arg, diag::warn_printf_asterisk_wrong_type, diag::warn_printf_empty_objc_flag, diag::warn_printf_format_string_contains_null_char, diag::warn_printf_format_string_not_null_terminated, diag::warn_printf_ignored_flag, diag::warn_printf_incomplete_specifier, diag::warn_printf_insufficient_data_args, diag::warn_printf_invalid_objc_flag, diag::warn_printf_nonsensical_flag, diag::warn_printf_nonsensical_optional_amount, diag::warn_printf_positional_arg_exceeds_data_args, diag::warn_scanf_nonzero_width, diag::warn_scanf_scanlist_incomplete, -1,
-  /* DiagArray235 */ diag::warn_printf_data_arg_not_used, -1,
-  /* DiagArray236 */ diag::warn_format_invalid_conversion, -1,
-  /* DiagArray237 */ diag::warn_format_non_standard, diag::warn_format_non_standard_conversion_spec, diag::warn_format_non_standard_positional_arg, -1,
-  /* DiagArray238 */ diag::warn_format_nonliteral, -1,
-  /* DiagArray239 */ diag::warn_format_argument_needs_cast_pedantic, diag::warn_format_conversion_argument_type_mismatch_pedantic, -1,
-  /* DiagArray240 */ diag::warn_format_nonliteral_noargs, -1,
-  /* DiagArray242 */ diag::warn_empty_format_string, -1,
-  /* DiagArray244 */ diag::ext_four_char_character_literal, -1,
-  /* DiagArray245 */ diag::warn_fe_backend_frame_larger_than, diag::warn_fe_frame_larger_than, -1,
-  /* DiagArray246 */ diag::warn_framework_include_private_from_public, -1,
-  /* DiagArray247 */ diag::warn_function_def_in_objc_container, -1,
-  /* DiagArray248 */ diag::warn_dispatch_body_ignored, diag::warn_multiversion_duplicate_entries, -1,
-  /* DiagArray250 */ diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_warn_gnu_final, diag::warn_attribute_on_function_definition, diag::warn_break_binds_to_switch, diag::warn_cleanup_ext, diag::warn_gcc_attribute_location, diag::warn_gcc_ignores_type_attr, diag::warn_gcc_variable_decl_in_for_loop, diag::warn_loop_ctrl_binds_to_inner, -1,
-  /* DiagArray251 */ diag::warn_global_constructor, diag::warn_global_destructor, -1,
-  /* DiagArray253 */ diag::ext_alignof_expr, -1,
-  /* DiagArray254 */ diag::ext_gnu_anonymous_struct, -1,
-  /* DiagArray255 */ diag::ext_array_init_parens, -1,
-  /* DiagArray256 */ diag::ext_auto_type, -1,
-  /* DiagArray257 */ diag::ext_binary_literal, -1,
-  /* DiagArray258 */ diag::ext_gnu_case_range, -1,
-  /* DiagArray259 */ diag::ext_integer_complex, -1,
-  /* DiagArray260 */ diag::ext_array_init_copy, -1,
-  /* DiagArray261 */ diag::ext_gnu_conditional_expr, -1,
-  /* DiagArray262 */ diag::ext_gnu_array_range, diag::ext_gnu_missing_equal_designator, diag::ext_gnu_old_style_field_designator, -1,
-  /* DiagArray263 */ diag::ext_gnu_empty_initializer, -1,
-  /* DiagArray264 */ diag::ext_empty_struct_union, diag::ext_flexible_array_empty_aggregate_gnu, diag::ext_no_named_members_in_struct_union, -1,
-  /* DiagArray265 */ diag::ext_flexible_array_init, -1,
-  /* DiagArray266 */ diag::ext_flexible_array_union_gnu, -1,
-  /* DiagArray267 */ diag::ext_expr_not_ice, diag::ext_in_class_initializer_non_constant, diag::ext_vla_folded_to_constant, -1,
-  /* DiagArray268 */ diag::ext_imaginary_constant, -1,
-  /* DiagArray269 */ diag::ext_pp_include_next_directive, -1,
-  /* DiagArray270 */ diag::ext_gnu_address_of_label, diag::ext_gnu_indirect_goto, -1,
-  /* DiagArray271 */ diag::ext_forward_ref_enum_def, -1,
-  /* DiagArray272 */ diag::ext_gnu_statement_expr, -1,
-  /* DiagArray273 */ diag::ext_in_class_initializer_float_type, -1,
-  /* DiagArray274 */ diag::ext_string_literal_operator_template, -1,
-  /* DiagArray275 */ diag::ext_typecheck_cast_to_union, -1,
-  /* DiagArray276 */ diag::ext_variable_sized_type_in_struct, -1,
-  /* DiagArray277 */ diag::ext_pp_line_zero, -1,
-  /* DiagArray278 */ diag::ext_missing_varargs_arg, diag::ext_paste_comma, -1,
-  /* DiagArray279 */ diag::warn_header_guard, -1,
-  /* DiagArray280 */ diag::warn_using_directive_in_header, -1,
-  /* DiagArray281 */ diag::warn_condition_is_idiomatic_assignment, -1,
-  /* DiagArray282 */ diag::ext_cannot_use_trivial_abi, diag::warn_alias_to_weak_alias, diag::warn_alias_with_section, diag::warn_attr_abi_tag_namespace, diag::warn_attribute_after_definition_ignored, diag::warn_attribute_iboutlet, diag::warn_attribute_ignored, diag::warn_attribute_ignored_for_field_of_type, diag::warn_attribute_ignored_on_inline, diag::warn_attribute_invalid_on_definition, diag::warn_attribute_no_decl, diag::warn_attribute_nonnull_no_pointers, diag::warn_attribute_nonnull_parm_no_args, diag::warn_attribute_not_on_decl, diag::warn_attribute_pointer_or_reference_only, diag::warn_attribute_pointers_only, diag::warn_attribute_precede_definition, diag::warn_attribute_return_pointers_only, diag::warn_attribute_return_pointers_refs_only, diag::warn_attribute_sentinel_named_arguments, diag::warn_attribute_sentinel_not_variadic, diag::warn_attribute_type_not_supported, diag::warn_attribute_unknown_visibility, diag::warn_attribute_void_function_method, diag::warn_attribute_weak_on_field, diag::warn_attribute_weak_on_local, diag::warn_attribute_wrong_decl_type, diag::warn_attribute_wrong_decl_type_str, diag::warn_block_literal_attributes_on_omitted_return_type, diag::warn_cconv_ignored, diag::warn_cconv_structors, diag::warn_cconv_varargs, diag::warn_cxx11_gnu_attribute_on_type, diag::warn_declspec_attribute_ignored, diag::warn_deprecated_anonymous_namespace, diag::warn_dllimport_dropped_from_inline_function, diag::warn_duplicate_attribute, diag::warn_duplicate_attribute_exact, diag::warn_gc_attribute_weak_on_local, diag::warn_gnu_inline_attribute_requires_inline, diag::warn_ignored_ms_inheritance, diag::warn_ignored_objc_externally_retained, diag::warn_internal_linkage_local_storage, diag::warn_interrupt_attribute_invalid, diag::warn_microsoft_qualifiers_ignored, diag::warn_mmap_unknown_attribute, diag::warn_nocf_check_attribute_ignored, diag::warn_noderef_on_non_pointer_or_array, diag::warn_ns_attribute_wrong_parameter_type, diag::warn_ns_attribute_wrong_return_type, diag::warn_opencl_attr_deprecated_ignored, diag::warn_riscv_repeated_interrupt_attribute, diag::warn_transparent_union_attribute_field_size_align, diag::warn_transparent_union_attribute_floating, diag::warn_transparent_union_attribute_not_definition, diag::warn_transparent_union_attribute_zero_fields, diag::warn_type_attribute_wrong_type, diag::warn_unhandled_ms_attribute_ignored, diag::warn_unsupported_target_attribute, diag::warn_wrong_clang_attr_namespace, -1,
-  /* DiagArray283 */ diag::warn_drv_unsupported_opt_for_target, diag::warn_ignored_gcc_optimization, -1,
-  /* DiagArray284 */ diag::warn_pragma_intrinsic_builtin, -1,
-  /* DiagArray285 */ diag::warn_pragma_optimize, -1,
-  /* DiagArray286 */ diag::warn_pragma_align_expected_equal, diag::warn_pragma_align_invalid_option, diag::warn_pragma_begin_end_mismatch, diag::warn_pragma_comment_ignored, diag::warn_pragma_debug_missing_argument, diag::warn_pragma_debug_unexpected_command, diag::warn_pragma_expected_action_or_r_paren, diag::warn_pragma_expected_colon, diag::warn_pragma_expected_colon_r_paren, diag::warn_pragma_expected_comma, diag::warn_pragma_expected_identifier, diag::warn_pragma_expected_init_seg, diag::warn_pragma_expected_integer, diag::warn_pragma_expected_lparen, diag::warn_pragma_expected_non_wide_string, diag::warn_pragma_expected_predicate, diag::warn_pragma_expected_punc, diag::warn_pragma_expected_rparen, diag::warn_pragma_expected_section_label_or_name, diag::warn_pragma_expected_section_name, diag::warn_pragma_expected_section_push_pop_or_name, diag::warn_pragma_expected_string, diag::warn_pragma_extra_tokens_at_eol, diag::warn_pragma_force_cuda_host_device_bad_arg, diag::warn_pragma_init_seg_unsupported_target, diag::warn_pragma_invalid_action, diag::warn_pragma_invalid_argument, diag::warn_pragma_invalid_specific_action, diag::warn_pragma_missing_argument, diag::warn_pragma_ms_struct, diag::warn_pragma_options_align_reset_failed, diag::warn_pragma_options_expected_align, diag::warn_pragma_pack_invalid_alignment, diag::warn_pragma_pack_malformed, diag::warn_pragma_pop_failed, diag::warn_pragma_pop_macro_no_push, diag::warn_pragma_unknown_extension, diag::warn_pragma_unsupported_action, diag::warn_pragma_unsupported_extension, diag::warn_pragma_unused_expected_var, diag::warn_pragma_unused_expected_var_arg, diag::warn_pragma_unused_undeclared_var, -1,
-  /* DiagArray287 */ diag::warn_arc_lifetime_result_type, diag::warn_block_literal_qualifiers_on_omitted_return_type, diag::warn_qual_return_type, diag::warn_typecheck_function_qualifiers_ignored, diag::warn_typecheck_reference_qualifiers, -1,
-  /* DiagArray289 */ diag::warn_auto_implicit_atomic_property, diag::warn_implicit_atomic_property, -1,
-  /* DiagArray290 */ diag::warn_impcast_floating_point_to_bool, -1,
-  /* DiagArray291 */ diag::ext_implicit_exception_spec_mismatch, -1,
-  /* DiagArray292 */ diag::warn_fallthrough_attr_unreachable, diag::warn_unannotated_fallthrough, -1,
-  /* DiagArray293 */ diag::warn_unannotated_fallthrough_per_function, -1,
-  /* DiagArray294 */ diag::warn_impcast_fixed_point_range, -1,
-  /* DiagArray295 */ diag::warn_impcast_float_precision, diag::warn_impcast_float_result_precision, -1,
-  /* DiagArray296 */ diag::ext_implicit_function_decl, diag::ext_implicit_lib_function_decl, diag::warn_builtin_unknown, diag::warn_implicit_function_decl, -1,
-  /* DiagArray297 */ diag::ext_missing_type_specifier, -1,
-  /* DiagArray298 */ diag::warn_impcast_high_order_zero_bits, diag::warn_impcast_integer_precision, -1,
-  /* DiagArray299 */ diag::warn_implicitly_retains_self, -1,
-  /* DiagArray300 */ diag::ext_integer_literal_too_large_for_signed, -1,
-  /* DiagArray302 */ diag::ext_pp_import_directive, -1,
-  /* DiagArray303 */ diag::warn_inaccessible_base_class, -1,
-  /* DiagArray304 */ diag::pp_include_next_absolute_path, -1,
-  /* DiagArray305 */ diag::pp_include_next_in_primary, -1,
-  /* DiagArray306 */ diag::warn_deep_exception_specs_differ, diag::warn_incompatible_exception_specs, -1,
-  /* DiagArray307 */ diag::ext_typecheck_convert_incompatible_function_pointer, -1,
-  /* DiagArray308 */ diag::warn_redecl_library_builtin, -1,
-  /* DiagArray309 */ diag::warn_cxx_ms_struct, diag::warn_npot_ms_struct, -1,
-  /* DiagArray310 */ diag::ext_typecheck_convert_incompatible_pointer, -1,
-  /* DiagArray311 */ diag::ext_nested_pointer_qualifier_mismatch, diag::ext_typecheck_convert_discards_qualifiers, -1,
-  /* DiagArray312 */ diag::warn_property_types_are_incompatible, -1,
-  /* DiagArray313 */ diag::warn_incompatible_sysroot, -1,
-  /* DiagArray314 */ diag::warn_mmap_incomplete_framework_module_declaration, -1,
-  /* DiagArray315 */ diag::warn_undef_method_impl, -1,
-  /* DiagArray317 */ diag::warn_missing_submodule, diag::warn_mmap_umbrella_dir_not_found, diag::warn_uncovered_module_header, -1,
-  /* DiagArray318 */ diag::warn_redeclaration_without_attribute_prev_attribute_ignored, diag::warn_redeclaration_without_import_attribute, -1,
-  /* DiagArray319 */ diag::warn_destructor_marked_not_override_overriding, -1,
-  /* DiagArray320 */ diag::warn_function_marked_not_override_overriding, -1,
-  /* DiagArray321 */ diag::ext_increment_bool, -1,
-  /* DiagArray322 */ diag::warn_infinite_recursive_function, -1,
-  /* DiagArray324 */ diag::warn_initializer_overrides, diag::warn_subobject_initializer_overrides, -1,
-  /* DiagArray325 */ diag::ext_out_of_line_qualified_id_type_names_constructor, -1,
-  /* DiagArray327 */ diag::warn_fe_inline_asm, -1,
-  /* DiagArray328 */ diag::ext_operator_new_delete_declared_inline, -1,
-  /* DiagArray329 */ diag::warn_explicit_instantiation_after_specialization, -1,
-  /* DiagArray330 */ diag::ext_typecheck_convert_int_pointer, diag::ext_typecheck_convert_pointer_int, -1,
-  /* DiagArray332 */ diag::warn_int_to_pointer_cast, -1,
-  /* DiagArray333 */ diag::warn_int_to_void_pointer_cast, -1,
-  /* DiagArray334 */ diag::warn_integer_constant_overflow, -1,
-  /* DiagArray335 */ diag::warn_drv_msp430_hwmult_mismatch, diag::warn_drv_msp430_hwmult_no_device, diag::warn_drv_msp430_hwmult_unsupported, diag::warn_drv_object_size_disabled_O0, diag::warn_drv_optimization_value, -1,
-  /* DiagArray336 */ diag::ext_constexpr_function_never_constant_expr, -1,
-  /* DiagArray337 */ diag::warn_iboutlet_object_type, diag::warn_iboutletcollection_property_assign, -1,
-  /* DiagArray338 */ diag::warn_invalid_initializer_from_system_header, -1,
-  /* DiagArray339 */ diag::warn_invalid_ios_deployment_target, -1,
-  /* DiagArray340 */ diag::warn_falloff_noreturn_function, diag::warn_noreturn_function_has_return_expr, -1,
-  /* DiagArray341 */ diag::ext_offsetof_non_pod_type, diag::ext_offsetof_non_standardlayout_type, -1,
-  /* DiagArray342 */ diag::warn_drv_ps4_sdk_dir, diag::warn_drv_unable_to_find_directory_expected, -1,
-  /* DiagArray343 */ diag::ext_partial_spec_not_more_specialized_than_primary, -1,
-  /* DiagArray345 */ diag::ext_empty_character, diag::ext_unterminated_char_or_string, -1,
-  /* DiagArray346 */ diag::warn_bad_character_encoding, diag::warn_bad_string_encoding, -1,
-  /* DiagArray347 */ diag::ext_pp_bad_paste_ms, -1,
-  /* DiagArray348 */ diag::warn_jump_out_of_seh_finally, -1,
-  /* DiagArray349 */ diag::ext_keyword_as_ident, -1,
-  /* DiagArray350 */ diag::warn_pp_macro_hides_keyword, -1,
-  /* DiagArray351 */ diag::ext_param_promoted_not_compatible_with_prototype, -1,
-  /* DiagArray352 */ diag::ext_token_used, -1,
-  /* DiagArray353 */ diag::warn_parameter_size, diag::warn_return_value_size, -1,
-  /* DiagArray355 */ diag::warn_impcast_literal_float_to_integer, diag::warn_impcast_literal_float_to_integer_out_of_range, -1,
-  /* DiagArray356 */ diag::warn_float_overflow, diag::warn_float_underflow, -1,
-  /* DiagArray357 */ diag::ext_template_arg_local_type, -1,
-  /* DiagArray358 */ diag::warn_logical_not_on_lhs_of_check, -1,
-  /* DiagArray359 */ diag::warn_logical_and_in_logical_or, -1,
-  /* DiagArray360 */ diag::ext_c99_longlong, -1,
-  /* DiagArray362 */ diag::ext_pp_macro_redef, -1,
-  /* DiagArray363 */ diag::ext_main_used, diag::ext_noreturn_main, diag::ext_variadic_main, diag::warn_main_one_arg, diag::warn_main_redefined, diag::warn_main_returns_bool_literal, diag::warn_static_main, -1,
-  /* DiagArray364 */ diag::ext_main_returns_nonint, -1,
-  /* DiagArray365 */ diag::warn_has_warning_invalid_option, -1,
-  /* DiagArray366 */ diag::ext_many_braces_around_scalar_init, -1,
-  /* DiagArray367 */ diag::warn_max_unsigned_zero, -1,
-  /* DiagArray368 */ diag::warn_suspicious_sizeof_memset, -1,
-  /* DiagArray369 */ diag::warn_memsize_comparison, -1,
-  /* DiagArray370 */ diag::warn_non_contravariant_param_types, diag::warn_non_covariant_ret_types, -1,
-  /* DiagArray372 */ diag::ext_anonymous_record_with_type, diag::ext_ms_anonymous_record, -1,
-  /* DiagArray373 */ diag::ext_ms_cast_fn_obj, diag::ext_ms_impcast_fn_obj, -1,
-  /* DiagArray374 */ diag::ext_charize_microsoft, -1,
-  /* DiagArray375 */ diag::ext_comment_paste_microsoft, -1,
-  /* DiagArray376 */ diag::ext_default_init_const, -1,
-  /* DiagArray377 */ diag::ext_pp_operator_used_as_macro_name, -1,
-  /* DiagArray378 */ diag::ext_param_default_argument_redefinition, -1,
-  /* DiagArray379 */ diag::ext_ctrl_z_eof_microsoft, -1,
-  /* DiagArray380 */ diag::ext_ms_forward_ref_enum, -1,
-  /* DiagArray381 */ diag::ext_enumerator_too_large, -1,
-  /* DiagArray382 */ diag::ext_ellipsis_exception_spec, diag::ext_incomplete_in_exception_spec, diag::ext_mismatched_exception_spec, diag::ext_mismatched_exception_spec_explicit_instantiation, diag::ext_ms_missing_exception_specification, diag::ext_override_exception_spec, -1,
-  /* DiagArray383 */ diag::warn_microsoft_dependent_exists, -1,
-  /* DiagArray384 */ diag::ext_ms_explicit_constructor_call, -1,
-  /* DiagArray385 */ diag::warn_member_extra_qualification, -1,
-  /* DiagArray386 */ diag::ext_ms_c_enum_fixed_underlying_type, -1,
-  /* DiagArray387 */ diag::ext_flexible_array_empty_aggregate_ms, diag::ext_flexible_array_union_ms, -1,
-  /* DiagArray388 */ diag::ext_goto_into_protected_scope, -1,
-  /* DiagArray389 */ diag::ext_ms_ambiguous_direct_base, -1,
-  /* DiagArray390 */ diag::ext_pp_include_search_ms, -1,
-  /* DiagArray391 */ diag::ext_mutable_reference, -1,
-  /* DiagArray392 */ diag::ext_pure_function_definition, -1,
-  /* DiagArray393 */ diag::ext_static_non_static, -1,
-  /* DiagArray394 */ diag::ext_ms_sealed_keyword, -1,
-  /* DiagArray395 */ diag::ext_explicit_instantiation_duplicate, diag::ext_found_via_dependent_bases_lookup, diag::ext_ms_delayed_template_argument, diag::ext_ms_deref_template_argument, diag::ext_ms_template_spec_redecl_out_of_scope, diag::ext_ms_template_type_arg_missing_typename, diag::ext_static_out_of_line, diag::ext_undeclared_unqual_id_with_dependent_base, -1,
-  /* DiagArray396 */ diag::ext_union_member_of_reference_type, -1,
-  /* DiagArray397 */ diag::ext_friend_tag_redecl_outside_namespace, -1,
-  /* DiagArray398 */ diag::ext_ms_using_declaration_inaccessible, -1,
-  /* DiagArray399 */ diag::ext_pseudo_dtor_on_void, -1,
-  /* DiagArray400 */ diag::warn_mismatched_delete_new, -1,
-  /* DiagArray401 */ diag::warn_conflicting_param_types, -1,
-  /* DiagArray402 */ diag::warn_conflicting_ret_types, -1,
-  /* DiagArray403 */ diag::warn_struct_class_previous_tag_mismatch, diag::warn_struct_class_tag_mismatch, -1,
-  /* DiagArray404 */ diag::warn_missing_braces, -1,
-  /* DiagArray405 */ diag::ext_no_declarators, diag::ext_standalone_specifier, diag::ext_typedef_without_a_name, diag::warn_standalone_specifier, -1,
-  /* DiagArray406 */ diag::ext_missing_exception_specification, -1,
-  /* DiagArray407 */ diag::warn_missing_field_initializers, -1,
-  /* DiagArray410 */ diag::warn_missing_method_return_type, -1,
-  /* DiagArray411 */ diag::warn_overriding_method_missing_noescape, -1,
-  /* DiagArray412 */ diag::warn_suggest_noreturn_block, diag::warn_suggest_noreturn_function, -1,
-  /* DiagArray413 */ diag::warn_cconv_knr, -1,
-  /* DiagArray414 */ diag::warn_missing_prototype, -1,
-  /* DiagArray415 */ diag::warn_missing_selector_name, -1,
-  /* DiagArray416 */ diag::warn_missing_sysroot, -1,
-  /* DiagArray417 */ diag::warn_missing_variable_declarations, -1,
-  /* DiagArray418 */ diag::remark_module_build, diag::remark_module_build_done, diag::remark_module_lock_failure, diag::remark_module_lock_timeout, -1,
-  /* DiagArray419 */ diag::warn_module_conflict, diag::warn_module_system_bit_conflict, -1,
-  /* DiagArray420 */ diag::warn_module_config_mismatch, -1,
-  /* DiagArray421 */ diag::warn_duplicate_module_file_extension, -1,
-  /* DiagArray422 */ diag::ext_module_import_in_extern_c, -1,
-  /* DiagArray423 */ diag::ext_equivalent_internal_linkage_decl_in_modules, -1,
-  /* DiagArray424 */ diag::ext_module_import_not_at_top_level_noop, -1,
-  /* DiagArray428 */ diag::warn_drv_msvc_not_found, -1,
-  /* DiagArray429 */ diag::ext_multichar_character_literal, -1,
-  /* DiagArray430 */ diag::warn_vbase_moved_multiple_times, -1,
-  /* DiagArray432 */ diag::ext_anonymous_record_with_anonymous_type, -1,
-  /* DiagArray434 */ diag::warn_operator_new_returns_null, -1,
-  /* DiagArray435 */ diag::ext_no_newline_eof, diag::warn_no_newline_eof, -1,
-  /* DiagArray436 */ diag::warn_dereference_of_noderef_type, diag::warn_dereference_of_noderef_type_no_decl, diag::warn_noderef_to_dereferenceable_pointer, -1,
-  /* DiagArray439 */ diag::warn_non_literal_null_pointer, -1,
-  /* DiagArray440 */ diag::warn_non_modular_include_in_framework_module, -1,
-  /* DiagArray441 */ diag::warn_non_modular_include_in_module, -1,
-  /* DiagArray442 */ diag::warn_cannot_pass_non_pod_arg_to_vararg, diag::warn_non_pod_vararg_with_format_string, diag::warn_second_parameter_to_va_arg_not_pod, diag::warn_second_parameter_to_va_arg_ownership_qualified, -1,
-  /* DiagArray443 */ diag::warn_non_virtual_dtor, -1,
-  /* DiagArray444 */ diag::warn_null_arg, diag::warn_null_ret, -1,
-  /* DiagArray446 */ diag::pp_nonportable_path, -1,
-  /* DiagArray447 */ diag::pp_nonportable_system_path, -1,
-  /* DiagArray448 */ diag::warn_neon_vector_initializer_non_portable, -1,
-  /* DiagArray449 */ diag::warn_cstruct_memaccess, -1,
-  /* DiagArray450 */ diag::warn_nsconsumed_attribute_mismatch, -1,
-  /* DiagArray451 */ diag::warn_nsreturns_retained_attribute_mismatch, -1,
-  /* DiagArray452 */ diag::warn_null_in_arithmetic_operation, diag::warn_null_in_comparison_operation, -1,
-  /* DiagArray453 */ diag::null_in_char_or_string, diag::null_in_file, -1,
-  /* DiagArray454 */ diag::warn_impcast_null_pointer_to_integer, -1,
-  /* DiagArray455 */ diag::warn_binding_null_to_reference, diag::warn_indirection_through_null, -1,
-  /* DiagArray456 */ diag::warn_gnu_null_ptr_arith, diag::warn_pointer_arith_null_ptr, -1,
-  /* DiagArray457 */ diag::warn_conflicting_nullability_attr_overriding_param_types, diag::warn_conflicting_nullability_attr_overriding_ret_types, diag::warn_mismatched_nullability_attr, diag::warn_null_resettable_setter, diag::warn_nullability_duplicate, -1,
-  /* DiagArray458 */ diag::warn_nullability_missing, -1,
-  /* DiagArray459 */ diag::warn_nullability_missing_array, -1,
-  /* DiagArray460 */ diag::warn_nullability_declspec, -1,
-  /* DiagArray461 */ diag::ext_nullability, -1,
-  /* DiagArray462 */ diag::warn_nullability_inferred_on_nested_type, -1,
-  /* DiagArray463 */ diag::warn_nullability_lost, -1,
-  /* DiagArray464 */ diag::warn_autosynthesis_property_ivar_match, -1,
-  /* DiagArray465 */ diag::warn_objc_circular_container, -1,
-  /* DiagArray467 */ diag::warn_objc_designated_init_missing_super_call, diag::warn_objc_designated_init_non_designated_init_call, diag::warn_objc_designated_init_non_super_designated_init_call, diag::warn_objc_implementation_missing_designated_init_override, diag::warn_objc_secondary_init_missing_init_call, diag::warn_objc_secondary_init_super_init_call, -1,
-  /* DiagArray468 */ diag::warn_superclass_variable_sized_type_not_at_end, diag::warn_variable_sized_ivar_visibility, -1,
-  /* DiagArray469 */ diag::warn_forward_class_redefinition, -1,
-  /* DiagArray470 */ diag::warn_ivars_in_interface, -1,
-  /* DiagArray471 */ diag::warn_objc_literal_comparison, -1,
-  /* DiagArray472 */ diag::warn_impcast_objective_c_literal_to_bool, diag::warn_objc_collection_literal_element, -1,
-  /* DiagArray473 */ diag::warn_pp_objc_macro_redef_ignored, -1,
-  /* DiagArray474 */ diag::warn_messaging_unqualified_id, -1,
-  /* DiagArray475 */ diag::warn_class_method_not_found, diag::warn_class_method_not_found_with_typo, diag::warn_inst_method_not_found, diag::warn_instance_method_not_found_with_typo, diag::warn_instance_method_on_class_found, diag::warn_root_inst_method_not_found, -1,
-  /* DiagArray476 */ diag::warn_missing_explicit_synthesis, -1,
-  /* DiagArray477 */ diag::warn_objc_missing_super_call, -1,
-  /* DiagArray478 */ diag::warn_multiple_method_decl, -1,
-  /* DiagArray479 */ diag::warn_objc_property_retain_of_block, -1,
-  /* DiagArray480 */ diag::warn_objc_pointer_cxx_catch_fragile, -1,
-  /* DiagArray481 */ diag::warn_objc_property_assign_on_object, -1,
-  /* DiagArray482 */ diag::warn_impl_required_for_class_property, diag::warn_impl_required_in_category_for_class_property, diag::warn_setter_getter_impl_required, diag::warn_setter_getter_impl_required_in_category, -1,
-  /* DiagArray483 */ diag::warn_property_implicitly_mismatched, -1,
-  /* DiagArray484 */ diag::warn_cocoa_naming_owned_rule, -1,
-  /* DiagArray485 */ diag::warn_objc_property_default_assign_on_object, diag::warn_objc_property_no_assignment_attribute, -1,
-  /* DiagArray486 */ diag::warn_autosynthesis_property_in_superclass, diag::warn_no_autosynthesis_property, diag::warn_no_autosynthesis_shared_ivar_property, -1,
-  /* DiagArray487 */ diag::warn_category_method_impl_match, -1,
-  /* DiagArray488 */ diag::warn_auto_synthesizing_protocol_property, -1,
-  /* DiagArray489 */ diag::warn_objc_redundant_qualified_class_type, -1,
-  /* DiagArray490 */ diag::warn_objc_readonly_property_has_setter, -1,
-  /* DiagArray492 */ diag::warn_objc_redundant_literal_use, -1,
-  /* DiagArray493 */ diag::warn_objc_root_class_missing, -1,
-  /* DiagArray494 */ diag::warn_objc_string_literal_comparison, -1,
-  /* DiagArray495 */ diag::warn_concatenated_nsarray_literal, -1,
-  /* DiagArray496 */ diag::warn_objc_unsafe_perform_selector, -1,
-  /* DiagArray497 */ diag::warn_odr_tag_type_inconsistent, -1,
-  /* DiagArray498 */ diag::warn_old_style_cast, -1,
-  /* DiagArray500 */ diag::ext_opencl_ext_vector_type_rgba_selector, -1,
-  /* DiagArray501 */ diag::warn_omp_alignment_not_power_of_two, diag::warn_omp_linear_step_zero, -1,
-  /* DiagArray502 */ diag::ext_omp_loop_not_canonical_init, diag::warn_omp_loop_64_bit_var, -1,
-  /* DiagArray503 */ diag::warn_drv_omp_offload_target_duplicate, diag::warn_drv_omp_offload_target_missingbcruntime, diag::warn_omp_non_trivial_type_mapped, diag::warn_omp_not_in_target_context, -1,
-  /* DiagArray504 */ diag::warn_drv_fine_grained_bitfield_accesses_ignored, diag::warn_drv_moutline_unsupported_opt, diag::warn_drv_ps4_force_pic, diag::warn_drv_unsupported_longcalls, diag::warn_drv_unsupported_pic_with_mabicalls, diag::warn_drv_vectorize_needs_hvx, -1,
-  /* DiagArray505 */ diag::ext_typecheck_ordered_comparison_of_function_pointers, -1,
-  /* DiagArray506 */ diag::ext_out_of_line_declaration, -1,
-  /* DiagArray507 */ diag::ext_use_out_of_scope_declaration, -1,
-  /* DiagArray508 */ diag::warn_overaligned_type, -1,
-  /* DiagArray510 */ diag::ext_string_too_long, -1,
-  /* DiagArray511 */ diag::warn_overloaded_shift_in_comparison, -1,
-  /* DiagArray512 */ diag::warn_overloaded_virtual, -1,
-  /* DiagArray514 */ diag::warn_fe_override_module, -1,
-  /* DiagArray515 */ diag::warn_conflicting_overriding_param_modifiers, diag::warn_conflicting_overriding_param_types, diag::warn_conflicting_overriding_ret_type_modifiers, diag::warn_conflicting_overriding_ret_types, diag::warn_conflicting_overriding_variadic, diag::warn_non_contravariant_overriding_param_types, diag::warn_non_covariant_overriding_ret_types, -1,
-  /* DiagArray516 */ diag::warn_drv_overriding_flag_option, -1,
-  /* DiagArray517 */ diag::warn_unnecessary_packed, -1,
-  /* DiagArray518 */ diag::warn_padded_struct_anon_field, diag::warn_padded_struct_field, diag::warn_padded_struct_size, -1,
-  /* DiagArray519 */ diag::warn_condition_is_assignment, diag::warn_precedence_bitwise_rel, diag::warn_precedence_conditional, -1,
-  /* DiagArray520 */ diag::warn_equality_with_extra_parens, -1,
-  /* DiagArray522 */ diag::remark_fe_backend_optimization_remark, -1,
-  /* DiagArray523 */ diag::remark_fe_backend_optimization_remark_analysis, diag::remark_fe_backend_optimization_remark_analysis_aliasing, diag::remark_fe_backend_optimization_remark_analysis_fpcommute, -1,
-  /* DiagArray524 */ diag::warn_fe_backend_optimization_failure, -1,
-  /* DiagArray525 */ diag::remark_fe_backend_optimization_remark_missed, -1,
-  /* DiagArray526 */ diag::warn_module_uses_date_time, -1,
-  /* DiagArray527 */ diag::ext_aggregate_init_not_constant, diag::ext_anonymous_record_with_type, diag::ext_anonymous_struct_union_qualified, diag::ext_array_size_conversion, diag::ext_auto_new_list_init, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_cast_fn_obj, diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_cxx14_attr, diag::ext_cxx17_attr, diag::ext_designated_init, diag::ext_duplicate_declspec, diag::ext_ellipsis_exception_spec, diag::ext_empty_fnmacro_arg, diag::ext_enum_value_not_int, diag::ext_enumerator_list_comma_c, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_instantiation_without_qualified_id, diag::ext_extern_template, diag::ext_extra_semi, diag::ext_forward_ref_enum, diag::ext_freestanding_complex, diag::ext_gnu_array_range, diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_hex_constant_invalid, diag::ext_hex_literal_invalid, diag::ext_ident_list_in_param, diag::ext_integer_complement_complex, diag::ext_integer_increment_complex, diag::ext_internal_in_extern_inline_quiet, diag::ext_invalid_sign_spec, diag::ext_line_comment, diag::ext_main_used, diag::ext_multi_line_line_comment, diag::ext_named_variadic_macro, diag::ext_no_newline_eof, diag::ext_nonstandard_escape, diag::ext_ns_enum_attribute, diag::ext_param_not_declared, diag::ext_pointer_to_const_ref_member_on_rvalue, diag::ext_pp_bad_vaargs_use, diag::ext_pp_comma_expr, diag::ext_pp_ident_directive, diag::ext_pp_line_too_big, diag::ext_pp_warning_directive, diag::ext_return_has_void_expr, diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::ext_subscript_non_lvalue, diag::ext_thread_before, diag::ext_typecheck_addrof_void, diag::ext_typecheck_cast_nonscalar, diag::ext_typecheck_comparison_of_fptr_to_void, diag::ext_typecheck_cond_one_void, diag::ext_typecheck_convert_pointer_void_func, diag::ext_typecheck_ordered_comparison_of_pointer_and_zero, diag::ext_variadic_macro, diag::warn_defined_in_function_type_macro, diag::warn_format_conversion_argument_type_mismatch_pedantic, diag::warn_illegal_constant_array_size, diag::warn_kern_is_method, -1,
-  /* DiagArray528 */ diag::warn_pragma_extension_is_core, -1,
-  /* DiagArray529 */ diag::warn_pessimizing_move_on_initialization, diag::warn_pessimizing_move_on_return, -1,
-  /* DiagArray530 */ diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::warn_sub_ptr_zero_size_types, -1,
-  /* DiagArray531 */ diag::warn_cast_nonnull_to_bool, diag::warn_impcast_pointer_to_bool, -1,
-  /* DiagArray532 */ diag::ext_typecheck_comparison_of_pointer_integer, -1,
-  /* DiagArray533 */ diag::ext_typecheck_convert_incompatible_pointer_sign, -1,
-  /* DiagArray535 */ diag::ext_typecheck_cond_incompatible_pointers, -1,
-  /* DiagArray536 */ diag::warn_side_effects_typeid, -1,
-  /* DiagArray537 */ diag::warn_pragma_attribute_unused, -1,
-  /* DiagArray538 */ diag::pp_pragma_once_in_main_file, -1,
-  /* DiagArray539 */ diag::warn_pragma_pack_modified_after_include, diag::warn_pragma_pack_no_pop_eof, -1,
-  /* DiagArray540 */ diag::warn_pragma_pack_non_default_at_include, -1,
-  /* DiagArray541 */ diag::pp_pragma_sysheader_in_main_file, -1,
-  /* DiagArray542 */ diag::warn_redefine_extname_not_applied, -1,
-  /* DiagArray543 */ diag::ext_predef_outside_function, -1,
-  /* DiagArray544 */ diag::warn_private_extern, -1,
-  /* DiagArray545 */ diag::warn_use_of_private_header_outside_module, -1,
-  /* DiagArray546 */ diag::warn_mmap_mismatched_private_module_name, diag::warn_mmap_mismatched_private_submodule, diag::warn_mmap_redundant_export_as, diag::warn_no_priv_submodule_use_toplevel, -1,
-  /* DiagArray547 */ diag::warn_profile_data_missing, -1,
-  /* DiagArray548 */ diag::warn_profile_data_out_of_date, -1,
-  /* DiagArray549 */ diag::warn_profile_data_unprofiled, -1,
-  /* DiagArray550 */ diag::warn_property_access_suggest, -1,
-  /* DiagArray551 */ diag::warn_property_attr_mismatch, diag::warn_property_attribute, diag::warn_property_redecl_getter_mismatch, diag::warn_readonly_property, -1,
-  /* DiagArray552 */ diag::warn_unimplemented_protocol_method, -1,
-  /* DiagArray553 */ diag::warn_protocol_property_mismatch, -1,
-  /* DiagArray554 */ diag::err_func_returning_qualified_void, -1,
-  /* DiagArray555 */ diag::warn_quoted_include_in_framework_header, -1,
-  /* DiagArray556 */ diag::warn_for_range_const_reference_copy, diag::warn_for_range_copy, diag::warn_for_range_variable_always_copy, -1,
-  /* DiagArray557 */ diag::warn_auto_readonly_iboutlet_property, -1,
-  /* DiagArray558 */ diag::warn_bad_receiver_type, -1,
-  /* DiagArray559 */ diag::warn_receiver_forward_class, diag::warn_receiver_forward_instance, -1,
-  /* DiagArray560 */ diag::ext_member_redeclared, -1,
-  /* DiagArray562 */ diag::warn_redundant_move_on_return, -1,
-  /* DiagArray563 */ diag::warn_redundant_parens_around_declarator, -1,
-  /* DiagArray564 */ diag::ext_register_storage_class, -1,
-  /* DiagArray565 */ diag::warn_reinterpret_different_from_static, -1,
-  /* DiagArray566 */ diag::remark_fe_backend_plugin, -1,
-  /* DiagArray567 */ diag::warn_initializer_out_of_order, -1,
-  /* DiagArray568 */ diag::warn_objc_requires_super_protocol, -1,
-  /* DiagArray569 */ diag::warn_pp_macro_is_reserved_id, -1,
-  /* DiagArray570 */ diag::ext_ms_reserved_user_defined_literal, diag::ext_reserved_user_defined_literal, -1,
-  /* DiagArray571 */ diag::ext_retained_language_linkage, -1,
-  /* DiagArray572 */ diag::warn_ret_addr_label, diag::warn_ret_local_temp_addr_ref, diag::warn_ret_stack_addr_ref, -1,
-  /* DiagArray573 */ diag::warn_return_std_move, -1,
-  /* DiagArray574 */ diag::warn_return_std_move_in_cxx11, -1,
-  /* DiagArray575 */ diag::ext_return_has_expr, diag::ext_return_missing_expr, diag::warn_falloff_nonvoid_coroutine, diag::warn_falloff_nonvoid_function, diag::warn_falloff_nonvoid_lambda, diag::warn_maybe_falloff_nonvoid_coroutine, diag::warn_maybe_falloff_nonvoid_function, diag::warn_maybe_falloff_nonvoid_lambda, diag::warn_return_missing_expr, -1,
-  /* DiagArray576 */ diag::warn_return_value_udt, diag::warn_return_value_udt_incomplete, -1,
-  /* DiagArray577 */ diag::remark_sanitize_address_insert_extra_padding_accepted, diag::remark_sanitize_address_insert_extra_padding_rejected, -1,
-  /* DiagArray578 */ diag::warn_attribute_section_on_redeclaration, diag::warn_duplicate_codeseg_attribute, diag::warn_mismatched_section, -1,
-  /* DiagArray579 */ diag::warn_unimplemented_selector, -1,
-  /* DiagArray580 */ diag::warn_multiple_selectors, -1,
-  /* DiagArray581 */ diag::warn_self_assignment_builtin, -1,
-  /* DiagArray582 */ diag::warn_identity_field_assign, -1,
-  /* DiagArray583 */ diag::warn_self_assignment_overloaded, -1,
-  /* DiagArray584 */ diag::warn_self_move, -1,
-  /* DiagArray585 */ diag::warn_semicolon_before_method_body, -1,
-  /* DiagArray586 */ diag::warn_missing_sentinel, diag::warn_not_enough_argument, -1,
-  /* DiagArray588 */ diag::warn_fe_serialized_diag_failure, diag::warn_fe_serialized_diag_merge_failure, -1,
-  /* DiagArray589 */ diag::warn_decl_shadow, -1,
-  /* DiagArray591 */ diag::warn_shadow_field, -1,
-  /* DiagArray592 */ diag::warn_ctor_parm_shadows_field, -1,
-  /* DiagArray593 */ diag::warn_modifying_shadowing_decl, -1,
-  /* DiagArray594 */ diag::warn_ivar_use_hidden, -1,
-  /* DiagArray595 */ diag::warn_decl_shadow_uncaptured_local, -1,
-  /* DiagArray596 */ diag::warn_shift_negative, -1,
-  /* DiagArray597 */ diag::warn_shift_gt_typewidth, -1,
-  /* DiagArray598 */ diag::warn_shift_lhs_negative, -1,
-  /* DiagArray599 */ diag::warn_addition_in_bitshift, -1,
-  /* DiagArray600 */ diag::warn_shift_result_gt_typewidth, -1,
-  /* DiagArray601 */ diag::warn_shift_result_sets_sign_bit, -1,
-  /* DiagArray602 */ diag::warn_impcast_integer_64_32, -1,
-  /* DiagArray603 */ diag::warn_mixed_sign_comparison, -1,
-  /* DiagArray604 */ diag::warn_impcast_integer_sign, diag::warn_impcast_integer_sign_conditional, diag::warn_impcast_nonnegative_result, -1,
-  /* DiagArray606 */ diag::warn_no_underlying_type_specified_for_enum_bitfield, -1,
-  /* DiagArray607 */ diag::warn_sizeof_array_param, -1,
-  /* DiagArray608 */ diag::warn_sizeof_array_decay, -1,
-  /* DiagArray609 */ diag::warn_division_sizeof_ptr, -1,
-  /* DiagArray610 */ diag::warn_sizeof_pointer_expr_memaccess, diag::warn_sizeof_pointer_type_memaccess, -1,
-  /* DiagArray611 */ diag::warn_slash_u_filename, -1,
-  /* DiagArray612 */ diag::warn_sometimes_uninit_var, -1,
-  /* DiagArray613 */ diag::warn_omp_nesting_simd, diag::warn_pragma_omp_ignored, -1,
-  /* DiagArray614 */ diag::warn_sampler_initializer_invalid_bits, -1,
-  /* DiagArray616 */ diag::ext_in_class_initializer_float_type_cxx11, -1,
-  /* DiagArray617 */ diag::ext_internal_in_extern_inline, diag::ext_internal_in_extern_inline_quiet, -1,
-  /* DiagArray618 */ diag::warn_static_inline_explicit_inst_ignored, -1,
-  /* DiagArray619 */ diag::warn_static_local_in_extern_inline, -1,
-  /* DiagArray620 */ diag::warn_static_self_reference_in_init, -1,
-  /* DiagArray621 */ diag::warn_stdlibcxx_not_found, -1,
-  /* DiagArray633 */ diag::warn_strict_prototypes, -1,
-  /* DiagArray634 */ diag::warn_strict_multiple_method_decl, -1,
-  /* DiagArray635 */ diag::warn_stringcompare, -1,
-  /* DiagArray636 */ diag::warn_impcast_string_literal_to_bool, -1,
-  /* DiagArray637 */ diag::warn_string_plus_char, -1,
-  /* DiagArray638 */ diag::warn_string_plus_int, -1,
-  /* DiagArray639 */ diag::warn_strlcpycat_wrong_size, -1,
-  /* DiagArray640 */ diag::warn_strncat_large_size, diag::warn_strncat_src_size, diag::warn_strncat_wrong_size, -1,
-  /* DiagArray641 */ diag::ext_typecheck_base_super, -1,
-  /* DiagArray642 */ diag::warn_suspicious_bzero_size, -1,
-  /* DiagArray644 */ diag::warn_case_value_overflow, diag::warn_missing_case, diag::warn_not_in_enum, -1,
-  /* DiagArray645 */ diag::warn_bool_switch_condition, -1,
-  /* DiagArray647 */ diag::warn_def_missing_case, -1,
-  /* DiagArray648 */ diag::warn_sync_fetch_and_nand_semantics_change, -1,
-  /* DiagArray650 */ diag::warn_comparison_always, diag::warn_comparison_bitwise_always, -1,
-  /* DiagArray651 */ diag::warn_tautological_bool_compare, -1,
-  /* DiagArray653 */ diag::warn_out_of_range_compare, -1,
-  /* DiagArray654 */ diag::warn_tautological_overlap_comparison, -1,
-  /* DiagArray655 */ diag::warn_nonnull_expr_compare, diag::warn_null_pointer_compare, -1,
-  /* DiagArray656 */ diag::warn_tautological_constant_compare, -1,
-  /* DiagArray657 */ diag::warn_address_of_reference_null_compare, diag::warn_this_null_compare, -1,
-  /* DiagArray658 */ diag::warn_unsigned_enum_always_true_comparison, -1,
-  /* DiagArray659 */ diag::warn_unsigned_always_true_comparison, -1,
-  /* DiagArray660 */ diag::ext_typecheck_decl_incomplete_type, -1,
-  /* DiagArray662 */ diag::warn_acquired_before, diag::warn_acquired_before_after_cycle, diag::warn_cannot_resolve_lock, diag::warn_double_lock, diag::warn_expecting_lock_held_on_loop, diag::warn_expecting_locked, diag::warn_fun_excludes_mutex, diag::warn_fun_requires_lock, diag::warn_lock_exclusive_and_shared, diag::warn_lock_some_predecessors, diag::warn_no_unlock, diag::warn_unlock_but_no_lock, diag::warn_unlock_kind_mismatch, diag::warn_var_deref_requires_any_lock, diag::warn_var_deref_requires_lock, diag::warn_variable_requires_any_lock, diag::warn_variable_requires_lock, -1,
-  /* DiagArray663 */ diag::warn_invalid_capability_name, diag::warn_thread_attribute_argument_not_lockable, diag::warn_thread_attribute_decl_not_lockable, diag::warn_thread_attribute_decl_not_pointer, diag::warn_thread_attribute_ignored, diag::warn_thread_attribute_not_on_capability_member, diag::warn_thread_attribute_not_on_non_static_member, -1,
-  /* DiagArray664 */ diag::warn_thread_safety_beta, -1,
-  /* DiagArray665 */ diag::warn_acquire_requires_negative_cap, -1,
-  /* DiagArray666 */ diag::warn_fun_requires_lock_precise, diag::warn_var_deref_requires_lock_precise, diag::warn_variable_requires_lock_precise, -1,
-  /* DiagArray667 */ diag::warn_guarded_pass_by_reference, diag::warn_pt_guarded_pass_by_reference, -1,
-  /* DiagArray668 */ diag::warn_thread_safety_verbose, -1,
-  /* DiagArray669 */ diag::trigraph_converted, diag::trigraph_ends_block_comment, diag::trigraph_ignored, diag::trigraph_ignored_block_comment, -1,
-  /* DiagArray671 */ diag::warn_type_safety_null_pointer_required, diag::warn_type_safety_type_mismatch, diag::warn_type_tag_for_datatype_wrong_kind, -1,
-  /* DiagArray672 */ diag::ext_redefinition_of_typedef, -1,
-  /* DiagArray673 */ diag::ext_typename_missing, -1,
-  /* DiagArray674 */ diag::warn_fe_unable_to_open_stats_file, -1,
-  /* DiagArray675 */ diag::warn_unavailable_fwdclass_message, -1,
-  /* DiagArray676 */ diag::warn_undeclared_selector, diag::warn_undeclared_selector_with_typo, -1,
-  /* DiagArray677 */ diag::warn_pp_undef_identifier, -1,
-  /* DiagArray678 */ diag::warn_address_of_reference_bool_conversion, diag::warn_this_bool_conversion, -1,
-  /* DiagArray679 */ diag::warn_func_template_missing, -1,
-  /* DiagArray680 */ diag::warn_undefined_inline, -1,
-  /* DiagArray681 */ diag::warn_undefined_internal, -1,
-  /* DiagArray682 */ diag::ext_undefined_internal_type, -1,
-  /* DiagArray683 */ diag::warn_pointer_indirection_from_incompatible_type, diag::warn_undefined_reinterpret_cast, -1,
-  /* DiagArray684 */ diag::warn_var_template_missing, -1,
-  /* DiagArray685 */ diag::warn_side_effects_unevaluated_context, -1,
-  /* DiagArray686 */ diag::warn_unguarded_availability, -1,
-  /* DiagArray687 */ diag::warn_unguarded_availability_new, -1,
-  /* DiagArray688 */ diag::warn_ucn_escape_incomplete, diag::warn_ucn_escape_no_digits, diag::warn_ucn_escape_surrogate, diag::warn_ucn_not_valid_in_c89, diag::warn_ucn_not_valid_in_c89_literal, -1,
-  /* DiagArray689 */ diag::warn_utf8_symbol_homoglyph, -1,
-  /* DiagArray690 */ diag::ext_unicode_whitespace, -1,
-  /* DiagArray691 */ diag::warn_utf8_symbol_zero_width, -1,
-  /* DiagArray692 */ diag::warn_base_class_is_uninit, diag::warn_field_is_uninit, diag::warn_reference_field_is_uninit, diag::warn_uninit_byref_blockvar_captured_by_block, diag::warn_uninit_self_reference_in_init, diag::warn_uninit_self_reference_in_reference_init, diag::warn_uninit_var, -1,
-  /* DiagArray693 */ diag::warn_drv_unknown_argument_clang_cl, diag::warn_drv_unknown_argument_clang_cl_with_suggestion, -1,
-  /* DiagArray694 */ diag::warn_unknown_attribute_ignored, -1,
-  /* DiagArray695 */ diag::ext_unknown_escape, -1,
-  /* DiagArray696 */ diag::ext_on_off_switch_syntax, diag::ext_pragma_syntax_eod, diag::ext_stdc_pragma_ignored, diag::warn_pragma_diagnostic_cannot_pop, diag::warn_pragma_diagnostic_invalid, diag::warn_pragma_diagnostic_invalid_option, diag::warn_pragma_diagnostic_invalid_token, diag::warn_pragma_ignored, diag::warn_pragma_include_alias_expected, diag::warn_pragma_include_alias_expected_filename, diag::warn_pragma_include_alias_mismatch_angle, diag::warn_pragma_include_alias_mismatch_quote, diag::warn_pragma_warning_expected, diag::warn_pragma_warning_expected_number, diag::warn_pragma_warning_push_level, diag::warn_pragma_warning_spec_invalid, diag::warn_stdc_fenv_access_not_supported, -1,
-  /* DiagArray697 */ diag::warn_unknown_sanitizer_ignored, -1,
-  /* DiagArray698 */ diag::warn_pragma_diagnostic_unknown_warning, diag::warn_unknown_diag_option, diag::warn_unknown_warning_specifier, -1,
-  /* DiagArray699 */ diag::ext_template_arg_unnamed_type, -1,
-  /* DiagArray700 */ diag::warn_unneeded_internal_decl, diag::warn_unneeded_static_internal_decl, -1,
-  /* DiagArray701 */ diag::warn_unneeded_member_function, -1,
-  /* DiagArray702 */ diag::warn_unreachable, -1,
-  /* DiagArray704 */ diag::warn_unreachable_break, -1,
-  /* DiagArray705 */ diag::warn_unreachable_loop_increment, -1,
-  /* DiagArray706 */ diag::warn_unreachable_return, -1,
-  /* DiagArray707 */ diag::warn_unsequenced_mod_mod, diag::warn_unsequenced_mod_use, -1,
-  /* DiagArray708 */ diag::warn_target_unsupported_abs2008, diag::warn_target_unsupported_abslegacy, -1,
-  /* DiagArray709 */ diag::warn_at_available_unchecked_use, -1,
-  /* DiagArray710 */ diag::warn_target_unsupported_compact_branches, -1,
-  /* DiagArray711 */ diag::warn_attribute_dll_instantiated_base_class, -1,
-  /* DiagArray712 */ diag::warn_template_qualified_friend_ignored, diag::warn_template_qualified_friend_unsupported, -1,
-  /* DiagArray713 */ diag::warn_drv_unsupported_gpopt, -1,
-  /* DiagArray714 */ diag::warn_target_unsupported_nan2008, diag::warn_target_unsupported_nanlegacy, -1,
-  /* DiagArray715 */ diag::warn_drv_unsupported_debug_info_opt_for_target, -1,
-  /* DiagArray716 */ diag::warn_attribute_protected_visibility, -1,
-  /* DiagArray717 */ diag::ext_partial_specs_not_deducible, -1,
-  /* DiagArray720 */ diag::warn_drv_diagnostics_hotness_requires_pgo, diag::warn_drv_empty_joined_argument, diag::warn_drv_input_file_unused, diag::warn_drv_input_file_unused_by_cpp, diag::warn_drv_preprocessed_input_file_unused, diag::warn_drv_unused_argument, diag::warn_ignored_clang_option, -1,
-  /* DiagArray721 */ diag::warn_unused_comparison, -1,
-  /* DiagArray722 */ diag::warn_unused_const_variable, -1,
-  /* DiagArray723 */ diag::warn_unused_exception_param, -1,
-  /* DiagArray724 */ diag::warn_unused_function, -1,
-  /* DiagArray725 */ diag::warn_unused_property_expr, -1,
-  /* DiagArray726 */ diag::warn_unused_label, -1,
-  /* DiagArray727 */ diag::warn_unused_lambda_capture, -1,
-  /* DiagArray728 */ diag::warn_unused_local_typedef, -1,
-  /* DiagArray730 */ diag::pp_macro_not_used, -1,
-  /* DiagArray731 */ diag::warn_unused_member_function, -1,
-  /* DiagArray732 */ diag::warn_unused_parameter, -1,
-  /* DiagArray733 */ diag::warn_unused_private_field, -1,
-  /* DiagArray734 */ diag::warn_unused_property_backing_ivar, -1,
-  /* DiagArray735 */ diag::warn_unused_result, -1,
-  /* DiagArray736 */ diag::warn_unused_template, -1,
-  /* DiagArray737 */ diag::warn_unused_call, diag::warn_unused_container_subscript_expr, diag::warn_unused_expr, diag::warn_unused_voidptr, -1,
-  /* DiagArray738 */ diag::warn_unused_variable, -1,
-  /* DiagArray739 */ diag::warn_unused_volatile, -1,
-  /* DiagArray740 */ diag::warn_used_but_marked_unused, -1,
-  /* DiagArray741 */ diag::warn_user_literal_reserved, -1,
-  /* DiagArray742 */ diag::warn_diagnose_if_succeeded, -1,
-  /* DiagArray743 */ diag::warn_second_arg_of_va_start_not_last_named_param, diag::warn_second_parameter_to_va_arg_never_compatible, diag::warn_va_start_type_is_undefined, -1,
-  /* DiagArray744 */ diag::ext_named_variadic_macro, diag::ext_pp_bad_vaopt_use, diag::ext_variadic_macro, -1,
-  /* DiagArray745 */ diag::warn_typecheck_vector_element_sizes_not_equal, -1,
-  /* DiagArray746 */ diag::warn_incompatible_vectors, -1,
-  /* DiagArray748 */ diag::warn_empty_parens_are_function_decl, diag::warn_parens_disambiguated_as_function_declaration, diag::warn_parens_disambiguated_as_variable_declaration, -1,
-  /* DiagArray749 */ diag::warn_decl_in_param_list, diag::warn_redefinition_in_param_list, -1,
-  /* DiagArray750 */ diag::warn_vla_used, -1,
-  /* DiagArray751 */ diag::ext_vla, -1,
-  /* DiagArray752 */ diag::ext_typecheck_indirection_through_void_pointer, -1,
-  /* DiagArray754 */ diag::warn_weak_template_vtable, -1,
-  /* DiagArray755 */ diag::warn_weak_vtable, -1,
-  /* DiagArray756 */ diag::ext_deprecated_string_literal_conversion, -1,
-  /* DiagArray758 */ diag::warn_zero_as_null_pointer_constant, -1,
-  /* DiagArray759 */ diag::ext_typecheck_zero_array_size, -1,
+  /* DiagArray53 */ diag::warn_drv_avr_family_linking_stdlibs_not_implemented, diag::warn_drv_avr_gcc_not_found, diag::warn_drv_avr_libc_not_found, diag::warn_drv_avr_mcu_not_specified, diag::warn_drv_avr_stdlib_not_linked, -1,
+  /* DiagArray54 */ diag::warn_fe_backend_plugin, -1,
+  /* DiagArray55 */ diag::backslash_newline_space, -1,
+  /* DiagArray56 */ diag::warn_bad_function_cast, -1,
+  /* DiagArray58 */ diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, -1,
+  /* DiagArray59 */ diag::ext_decomp_decl_cond, -1,
+  /* DiagArray60 */ diag::warn_impcast_bitfield_precision_constant, -1,
+  /* DiagArray61 */ diag::warn_bitfield_too_small_for_enum, diag::warn_signed_bitfield_enum_conversion, diag::warn_unsigned_bitfield_assigned_signed_enum, -1,
+  /* DiagArray62 */ diag::warn_anon_bitfield_width_exceeds_type_width, diag::warn_bitfield_width_exceeds_type_width, -1,
+  /* DiagArray63 */ diag::warn_bitwise_op_in_bitwise_op, -1,
+  /* DiagArray64 */ diag::warn_block_capture_autoreleasing, -1,
+  /* DiagArray65 */ diag::warn_impcast_bool_to_null_pointer, -1,
+  /* DiagArray67 */ diag::warn_braces_around_scalar_init, -1,
+  /* DiagArray68 */ diag::warn_objc_invalid_bridge, diag::warn_objc_invalid_bridge_to_cf, -1,
+  /* DiagArray69 */ diag::ext_pp_redef_builtin_macro, diag::ext_pp_undef_builtin_macro, -1,
+  /* DiagArray70 */ diag::warn_builtin_chk_overflow, -1,
+  /* DiagArray71 */ diag::warn_implicit_decl_requires_sysheader, -1,
+  /* DiagArray72 */ diag::warn_zero_size_struct_union_compat, -1,
+  /* DiagArray76 */ diag::ext_old_implicitly_unsigned_long_cxx, diag::warn_auto_storage_class, diag::warn_cxx11_compat_user_defined_literal, diag::warn_cxx11_keyword, diag::warn_cxx11_right_shift_in_template_arg, diag::warn_explicit_instantiation_inline_0x, diag::warn_explicit_instantiation_must_be_global_0x, diag::warn_explicit_instantiation_out_of_scope_0x, diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x, diag::warn_old_implicitly_unsigned_long_cxx, -1,
+  /* DiagArray77 */ diag::warn_deprecated_string_literal_conversion, -1,
+  /* DiagArray79 */ diag::warn_cxx11_compat_reserved_user_defined_literal, -1,
+  /* DiagArray80 */ diag::ext_alias_declaration, diag::ext_array_size_conversion, diag::ext_auto_type_specifier, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_defaulted_deleted_function, diag::ext_enum_friend, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_conversion_functions, diag::ext_extern_template, diag::ext_for_range, diag::ext_generalized_initializer_lists, diag::ext_nested_name_spec_is_enum, diag::ext_nonclass_type_friend, diag::ext_nonstatic_member_init, diag::ext_override_control_keyword, diag::ext_ref_qualifier, diag::ext_rvalue_reference, diag::ext_scoped_enum, diag::ext_static_data_member_in_union, diag::ext_template_arg_object_internal, diag::ext_template_outside_of_template, diag::ext_template_parameter_default_in_function_template, diag::ext_typename_outside_of_template, diag::ext_unelaborated_friend_type, diag::ext_variadic_templates, -1,
+  /* DiagArray81 */ diag::ext_extra_semi_cxx11, -1,
+  /* DiagArray82 */ diag::ext_inline_namespace, -1,
+  /* DiagArray83 */ diag::ext_cxx11_longlong, -1,
+  /* DiagArray84 */ diag::ext_cce_narrowing, diag::ext_init_list_constant_narrowing, diag::ext_init_list_type_narrowing, diag::ext_init_list_variable_narrowing, diag::warn_init_list_constant_narrowing, diag::warn_init_list_type_narrowing, diag::warn_init_list_variable_narrowing, -1,
+  /* DiagArray85 */ diag::ext_binary_literal_cxx14, -1,
+  /* DiagArray88 */ diag::ext_constexpr_body_invalid_stmt, diag::ext_constexpr_body_multiple_return, diag::ext_constexpr_local_var, diag::ext_constexpr_type_definition, diag::ext_cxx14_attr, diag::ext_decltype_auto_type_specifier, diag::ext_init_capture, diag::ext_variable_template, -1,
+  /* DiagArray90 */ diag::warn_cxx17_compat_exception_spec_in_signature, -1,
+  /* DiagArray92 */ diag::ext_auto_new_list_init, diag::ext_constexpr_if, diag::ext_constexpr_on_lambda_cxx17, diag::ext_cxx17_attr, diag::ext_decomp_decl, diag::ext_fold_expression, diag::ext_for_range_begin_end_types_differ, diag::ext_hex_literal_invalid, diag::ext_init_statement, diag::ext_inline_variable, diag::ext_multi_using_declaration, diag::ext_nested_namespace_definition, diag::ext_ns_enum_attribute, diag::ext_star_this_lambda_capture_cxx17, diag::ext_static_assert_no_message, diag::ext_template_template_param_typename, diag::ext_using_attribute_ns, diag::ext_using_declaration_pack, -1,
+  /* DiagArray97 */ diag::warn_cxx20_compat_consteval, diag::warn_cxx2a_compat_aggregate_init_with_ctors, diag::warn_cxx2a_compat_explicit_bool, diag::warn_cxx2a_compat_spaceship, diag::warn_cxx2a_compat_utf8_string, diag::warn_cxx2a_keyword, -1,
+  /* DiagArray99 */ diag::ext_adl_only_template_id, diag::ext_bitfield_member_init, diag::ext_constexpr_body_invalid_stmt_cxx2a, diag::ext_constexpr_function_try_block_cxx2a, diag::ext_decomp_decl_spec, diag::ext_equals_this_lambda_capture_cxx2a, diag::ext_for_range_init_stmt, diag::ext_init_capture_pack, diag::ext_inline_nested_namespace_definition, diag::ext_lambda_template_parameter_list, diag::ext_pointer_to_const_ref_member_on_rvalue, -1,
+  /* DiagArray100 */ diag::warn_cxx17_compat_adl_only_template_id, diag::warn_cxx17_compat_bitfield_member_init, diag::warn_cxx17_compat_constexpr_body_invalid_stmt, diag::warn_cxx17_compat_constexpr_function_try_block, diag::warn_cxx17_compat_constexpr_virtual, diag::warn_cxx17_compat_decomp_decl_spec, diag::warn_cxx17_compat_defaulted_method_type_mismatch, diag::warn_cxx17_compat_equals_this_lambda_capture, diag::warn_cxx17_compat_for_range_init_stmt, diag::warn_cxx17_compat_init_capture_pack, diag::warn_cxx17_compat_inline_nested_namespace_definition, diag::warn_cxx17_compat_lambda_def_ctor_assign, diag::warn_cxx17_compat_lambda_template_parameter_list, diag::warn_cxx17_compat_spaceship, diag::warn_cxx17_compat_unicode_type, -1,
+  /* DiagArray101 */ diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, -1,
+  /* DiagArray102 */ diag::warn_cxx14_compat_class_template_argument_deduction, diag::warn_cxx14_compat_constexpr_if, diag::warn_cxx14_compat_constexpr_on_lambda, diag::warn_cxx14_compat_decomp_decl, diag::warn_cxx14_compat_fold_expression, diag::warn_cxx14_compat_init_statement, diag::warn_cxx14_compat_inline_variable, diag::warn_cxx14_compat_nested_namespace_definition, diag::warn_cxx14_compat_star_this_lambda_capture, diag::warn_cxx14_compat_static_assert_no_message, diag::warn_cxx14_compat_template_nontype_parm_auto_type, diag::warn_cxx14_compat_template_template_param_typename, diag::warn_cxx14_compat_u8_character_literal, diag::warn_cxx14_compat_using_attribute_ns, diag::warn_cxx17_compat_multi_using_declaration, diag::warn_cxx17_compat_using_declaration_pack, diag::warn_for_range_begin_end_types_differ, -1,
+  /* DiagArray103 */ diag::warn_cxx14_compat_ns_enum_attribute, diag::warn_cxx17_hex_literal, -1,
+  /* DiagArray104 */ diag::warn_cxx11_compat_constexpr_body_invalid_stmt, diag::warn_cxx11_compat_constexpr_body_multiple_return, diag::warn_cxx11_compat_constexpr_body_no_return, diag::warn_cxx11_compat_constexpr_local_var, diag::warn_cxx11_compat_constexpr_type_definition, diag::warn_cxx11_compat_decltype_auto_type_specifier, diag::warn_cxx11_compat_deduced_return_type, diag::warn_cxx11_compat_digit_separator, diag::warn_cxx11_compat_generic_lambda, diag::warn_cxx11_compat_init_capture, diag::warn_cxx11_compat_variable_template, -1,
+  /* DiagArray105 */ diag::warn_cxx11_compat_binary_literal, -1,
+  /* DiagArray107 */ diag::warn_cxx98_compat_alias_declaration, diag::warn_cxx98_compat_alignas, diag::warn_cxx98_compat_alignof, diag::warn_cxx98_compat_attribute, diag::warn_cxx98_compat_auto_type_specifier, diag::warn_cxx98_compat_constexpr, diag::warn_cxx98_compat_ctor_list_init, diag::warn_cxx98_compat_decltype, diag::warn_cxx98_compat_defaulted_deleted_function, diag::warn_cxx98_compat_delegating_ctor, diag::warn_cxx98_compat_empty_scalar_initializer, diag::warn_cxx98_compat_enum_fixed_underlying_type, diag::warn_cxx98_compat_enum_friend, diag::warn_cxx98_compat_enum_nested_name_spec, diag::warn_cxx98_compat_explicit_conversion_functions, diag::warn_cxx98_compat_for_range, diag::warn_cxx98_compat_friend_is_member, diag::warn_cxx98_compat_generalized_initializer_lists, diag::warn_cxx98_compat_goto_into_protected_scope, diag::warn_cxx98_compat_indirect_goto_in_protected_scope, diag::warn_cxx98_compat_initializer_list_init, diag::warn_cxx98_compat_inline_namespace, diag::warn_cxx98_compat_lambda, diag::warn_cxx98_compat_less_colon_colon, diag::warn_cxx98_compat_literal_operator, diag::warn_cxx98_compat_literal_ucn_control_character, diag::warn_cxx98_compat_literal_ucn_escape_basic_scs, diag::warn_cxx98_compat_noexcept_decl, diag::warn_cxx98_compat_noexcept_expr, diag::warn_cxx98_compat_non_static_member_use, diag::warn_cxx98_compat_nonclass_type_friend, diag::warn_cxx98_compat_nonstatic_member_init, diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member, diag::warn_cxx98_compat_nullptr, diag::warn_cxx98_compat_override_control_keyword, diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg, diag::warn_cxx98_compat_raw_string_literal, diag::warn_cxx98_compat_ref_qualifier, diag::warn_cxx98_compat_reference_list_init, diag::warn_cxx98_compat_rvalue_reference, diag::warn_cxx98_compat_scoped_enum, diag::warn_cxx98_compat_sfinae_access_control, diag::warn_cxx98_compat_static_assert, diag::warn_cxx98_compat_static_data_member_in_union, diag::warn_cxx98_compat_switch_into_protected_scope, diag::warn_cxx98_compat_template_arg_extra_parens, diag::warn_cxx98_compat_template_arg_null, diag::warn_cxx98_compat_template_arg_object_internal, diag::warn_cxx98_compat_template_outside_of_template, diag::warn_cxx98_compat_template_parameter_default_in_function_template, diag::warn_cxx98_compat_trailing_return_type, diag::warn_cxx98_compat_two_right_angle_brackets, diag::warn_cxx98_compat_typename_outside_of_template, diag::warn_cxx98_compat_unelaborated_friend_type, diag::warn_cxx98_compat_unicode_id, diag::warn_cxx98_compat_unicode_literal, diag::warn_cxx98_compat_unicode_type, diag::warn_cxx98_compat_using_decl_constructor, diag::warn_cxx98_compat_variadic_templates, -1,
+  /* DiagArray108 */ diag::warn_cxx98_compat_temp_copy, -1,
+  /* DiagArray109 */ diag::warn_cxx98_compat_top_level_semi, -1,
+  /* DiagArray110 */ diag::warn_cxx98_compat_template_arg_local_type, -1,
+  /* DiagArray111 */ diag::warn_cxx98_compat_array_size_conversion, diag::warn_cxx98_compat_cast_fn_obj, diag::warn_cxx98_compat_empty_fnmacro_arg, diag::warn_cxx98_compat_enumerator_list_comma, diag::warn_cxx98_compat_extern_template, diag::warn_cxx98_compat_longlong, diag::warn_cxx98_compat_no_newline_eof, diag::warn_cxx98_compat_pp_line_too_big, diag::warn_cxx98_compat_variadic_macro, -1,
+  /* DiagArray112 */ diag::warn_cxx98_compat_template_arg_unnamed_type, -1,
+  /* DiagArray113 */ diag::ext_anonymous_union, diag::ext_c11_alignment, diag::ext_c11_anonymous_struct, diag::ext_c11_generic_selection, diag::ext_c11_noreturn, diag::ext_c11_static_assert, -1,
+  /* DiagArray114 */ diag::warn_c99_compat_unicode_id, diag::warn_c99_compat_unicode_literal, diag::warn_old_implicitly_unsigned_long, -1,
+  /* DiagArray115 */ diag::ext_aggregate_init_not_constant, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_c99_whitespace_required_after_macro_name, diag::ext_designated_init, diag::ext_empty_fnmacro_arg, diag::ext_enumerator_list_comma_c, diag::ext_hex_constant_invalid, -1,
+  /* DiagArray116 */ diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor, -1,
+  /* DiagArray117 */ diag::warn_cast_align, -1,
+  /* DiagArray118 */ diag::warn_cast_calling_conv, -1,
+  /* DiagArray119 */ diag::warn_cast_pointer_from_sel, -1,
+  /* DiagArray120 */ diag::warn_cast_qual, diag::warn_cast_qual2, -1,
+  /* DiagArray121 */ diag::ext_bad_cxx_cast_qualifiers_away_incoherent, -1,
+  /* DiagArray123 */ diag::warn_omp_section_is_char, diag::warn_subscript_is_char, -1,
+  /* DiagArray124 */ diag::warn_drv_yc_multiple_inputs_clang_cl, diag::warn_drv_ycyu_different_arg_clang_cl, diag::warn_drv_ycyu_no_fi_arg_clang_cl, diag::warn_pp_hdrstop_filename_ignored, diag::warn_pp_macro_def_mismatch_with_pch, -1,
+  /* DiagArray125 */ diag::warn_pass_class_arg_to_vararg, -1,
+  /* DiagArray126 */ diag::warn_comma_operator, -1,
+  /* DiagArray127 */ diag::escaped_newline_block_comment_end, diag::ext_line_comment, diag::ext_multi_line_line_comment, diag::warn_nested_block_comment, -1,
+  /* DiagArray129 */ diag::ext_typecheck_comparison_of_distinct_pointers, -1,
+  /* DiagArray130 */ diag::ext_complex_component_init, -1,
+  /* DiagArray131 */ diag::ext_typecheck_cond_pointer_integer_mismatch, -1,
+  /* DiagArray132 */ diag::warn_maybe_uninit_var, -1,
+  /* DiagArray133 */ diag::warn_module_config_macro_undef, -1,
+  /* DiagArray134 */ diag::warn_impcast_integer_precision_constant, -1,
+  /* DiagArray135 */ diag::warn_logical_instead_of_bitwise, -1,
+  /* DiagArray136 */ diag::warn_cxx14_compat_constexpr_not_const, -1,
+  /* DiagArray137 */ diag::warn_attr_on_unconsumable_class, diag::warn_loop_state_mismatch, diag::warn_param_return_typestate_mismatch, diag::warn_param_typestate_mismatch, diag::warn_return_typestate_for_unconsumable_type, diag::warn_return_typestate_mismatch, diag::warn_use_in_invalid_state, diag::warn_use_of_temp_in_invalid_state, -1,
+  /* DiagArray138 */ diag::warn_impcast_complex_scalar, diag::warn_impcast_vector_scalar, diag::warn_opencl_generic_address_space_arg, diag::warn_template_arg_negative, diag::warn_template_arg_too_large, -1,
+  /* DiagArray141 */ diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions, -1,
+  /* DiagArray142 */ diag::warn_unreachable_default, -1,
+  /* DiagArray144 */ diag::warn_objc_cdirective_format_string, -1,
+  /* DiagArray145 */ diag::warn_ctad_maybe_unsupported, -1,
+  /* DiagArray147 */ diag::warn_ctu_incompat_triple, -1,
+  /* DiagArray148 */ diag::warn_attribute_argument_n_negative, diag::warn_cuda_attr_lambda_position, diag::warn_kern_is_inline, diag::warn_kern_is_method, diag::warn_pragma_unroll_cuda_value_in_parens, -1,
+  /* DiagArray149 */ diag::warn_default_atomic_custom_getter_setter, -1,
+  /* DiagArray150 */ diag::warn_dangling_variable, diag::warn_unsupported_lifetime_extension, -1,
+  /* DiagArray151 */ diag::warn_dangling_else, -1,
+  /* DiagArray152 */ diag::warn_bind_ref_member_to_parameter, diag::warn_dangling_member, diag::warn_init_ptr_member_to_parameter_addr, diag::warn_new_dangling_reference, -1,
+  /* DiagArray153 */ diag::warn_new_dangling_initializer_list, -1,
+  /* DiagArray154 */ diag::warn_drv_darwin_sdk_invalid_settings, -1,
+  /* DiagArray155 */ diag::warn_pp_date_time, -1,
+  /* DiagArray156 */ diag::warn_dealloc_in_category, -1,
+  /* DiagArray157 */ diag::warn_debug_compression_unavailable, -1,
+  /* DiagArray158 */ diag::ext_mixed_decls_code, -1,
+  /* DiagArray159 */ diag::warn_defaulted_method_deleted, -1,
+  /* DiagArray160 */ diag::warn_delegating_ctor_cycle, -1,
+  /* DiagArray161 */ diag::warn_delete_abstract_non_virtual_dtor, -1,
+  /* DiagArray162 */ diag::ext_delete_void_ptr_operand, diag::warn_delete_incomplete, -1,
+  /* DiagArray163 */ diag::warn_delete_non_virtual_dtor, -1,
+  /* DiagArray165 */ diag::warn_O4_is_O3, diag::warn_access_decl_deprecated, diag::warn_deprecated_copy_operation, diag::warn_deprecated_redundant_constexpr_static_def, diag::warn_drv_deprecated_arg, diag::warn_drv_treating_input_as_cxx, diag::warn_option_invalid_ocl_version, diag::warn_vector_long_decl_spec_combination, -1,
+  /* DiagArray166 */ diag::warn_vector_mode_deprecated, -1,
+  /* DiagArray167 */ diag::warn_atl_uuid_deprecated, diag::warn_cstyle_param, diag::warn_deprecated, diag::warn_deprecated_fwdclass_message, diag::warn_deprecated_message, diag::warn_property_method_deprecated, -1,
+  /* DiagArray168 */ diag::warn_exception_spec_deprecated, -1,
+  /* DiagArray169 */ diag::warn_deprecated_def, diag::warn_unavailable_def, -1,
+  /* DiagArray170 */ diag::warn_increment_bool, -1,
+  /* DiagArray171 */ diag::warn_objc_isa_assign, diag::warn_objc_isa_use, -1,
+  /* DiagArray172 */ diag::warn_objc_pointer_masking, -1,
+  /* DiagArray173 */ diag::warn_objc_pointer_masking_performSelector, -1,
+  /* DiagArray174 */ diag::warn_deprecated_register, -1,
+  /* DiagArray175 */ diag::warn_deprecated_this_capture, -1,
+  /* DiagArray177 */ diag::warn_direct_ivar_access, -1,
+  /* DiagArray178 */ diag::pp_disabled_macro_expansion, -1,
+  /* DiagArray181 */ diag::warn_conflicting_param_modifiers, diag::warn_conflicting_ret_type_modifiers, -1,
+  /* DiagArray183 */ diag::warn_remainder_division_by_zero, -1,
+  /* DiagArray184 */ diag::warn_attribute_dll_redeclaration, -1,
+  /* DiagArray185 */ diag::warn_attribute_dllexport_explicit_instantiation_decl, -1,
+  /* DiagArray186 */ diag::warn_attribute_dllimport_static_field_definition, -1,
+  /* DiagArray187 */ diag::warn_doc_api_container_decl_mismatch, diag::warn_doc_block_command_duplicate, diag::warn_doc_block_command_empty_paragraph, diag::warn_doc_container_decl_mismatch, diag::warn_doc_function_method_decl_mismatch, diag::warn_doc_html_start_tag_expected_ident_or_greater, diag::warn_doc_html_start_tag_expected_quoted_string, diag::warn_doc_param_duplicate, diag::warn_doc_param_invalid_direction, diag::warn_doc_param_not_attached_to_a_function_decl, diag::warn_doc_param_not_found, diag::warn_doc_returns_attached_to_a_void_function, diag::warn_doc_returns_not_attached_to_a_function_decl, diag::warn_doc_tparam_duplicate, diag::warn_doc_tparam_not_attached_to_a_template_decl, diag::warn_doc_tparam_not_found, diag::warn_not_a_doxygen_trailing_member_comment, diag::warn_verbatim_block_end_without_start, -1,
+  /* DiagArray188 */ diag::warn_doc_deprecated_not_sync, -1,
+  /* DiagArray189 */ diag::warn_doc_html_end_forbidden, diag::warn_doc_html_end_unbalanced, diag::warn_doc_html_missing_end_tag, diag::warn_doc_html_start_end_mismatch, -1,
+  /* DiagArray190 */ diag::warn_doc_param_spaces_in_direction, -1,
+  /* DiagArray191 */ diag::warn_correct_comment_command_name, diag::warn_unknown_comment_command_name, -1,
+  /* DiagArray192 */ diag::ext_dollar_in_identifier, -1,
+  /* DiagArray193 */ diag::warn_impcast_double_promotion, -1,
+  /* DiagArray194 */ diag::ext_duplicate_declspec, diag::ext_warn_duplicate_declspec, diag::warn_attribute_address_multiple_identical_qualifiers, diag::warn_duplicate_declspec, -1,
+  /* DiagArray195 */ diag::warn_duplicate_enum_values, -1,
+  /* DiagArray196 */ diag::warn_method_param_declaration, -1,
+  /* DiagArray197 */ diag::warn_duplicate_method_decl, -1,
+  /* DiagArray198 */ diag::warn_duplicate_protocol_def, -1,
+  /* DiagArray199 */ diag::warn_dyn_class_memaccess, -1,
+  /* DiagArray200 */ diag::ext_dynamic_exception_spec, -1,
+  /* DiagArray202 */ diag::ext_embedded_directive, -1,
+  /* DiagArray203 */ diag::warn_empty_for_body, diag::warn_empty_if_body, diag::warn_empty_range_based_for_body, diag::warn_empty_switch_body, diag::warn_empty_while_body, -1,
+  /* DiagArray204 */ diag::ext_decomp_decl_empty, -1,
+  /* DiagArray205 */ diag::warn_empty_init_statement, -1,
+  /* DiagArray206 */ diag::ext_empty_translation_unit, -1,
+  /* DiagArray207 */ diag::warn_incomplete_encoded_type, -1,
+  /* DiagArray209 */ diag::warn_comparison_of_mixed_enum_types, -1,
+  /* DiagArray210 */ diag::warn_comparison_of_mixed_enum_types_switch, -1,
+  /* DiagArray211 */ diag::warn_impcast_different_enum_types, -1,
+  /* DiagArray212 */ diag::ext_enum_too_large, diag::ext_enumerator_increment_too_large, -1,
+  /* DiagArray213 */ diag::warn_cdtor_function_try_handler_mem_expr, diag::warn_exception_caught_by_earlier_handler, diag::warn_throw_in_noexcept_func, -1,
+  /* DiagArray214 */ diag::warn_exit_time_destructor, -1,
+  /* DiagArray215 */ diag::warn_defined_in_function_type_macro, diag::warn_defined_in_object_type_macro, -1,
+  /* DiagArray216 */ diag::warn_drv_experimental_isel_incomplete, diag::warn_drv_experimental_isel_incomplete_opt, -1,
+  /* DiagArray217 */ diag::warn_direct_initialize_call, diag::warn_direct_super_initialize_call, -1,
+  /* DiagArray218 */ diag::warn_arc_strong_pointer_objc_pointer, -1,
+  /* DiagArray219 */ diag::ext_export_no_name_block, diag::ext_export_no_names, -1,
+  /* DiagArray220 */ diag::ext_export_using_directive, -1,
+  /* DiagArray221 */ diag::warn_zero_size_struct_union_in_extern_c, -1,
+  /* DiagArray222 */ diag::warn_extern_init, -1,
+  /* DiagArray223 */ diag::warn_arm_interrupt_calling_convention, -1,
+  /* DiagArray224 */ diag::warn_namespace_member_extra_qualification, -1,
+  /* DiagArray225 */ diag::ext_extra_semi, diag::warn_extra_semi_after_mem_fn_def, -1,
+  /* DiagArray226 */ diag::warn_null_statement, -1,
+  /* DiagArray227 */ diag::ext_pp_extra_tokens_at_eol, diag::warn_omp_extra_tokens_at_eol, -1,
+  /* DiagArray228 */ diag::warn_drv_invoking_fallback, -1,
+  /* DiagArray229 */ diag::ext_clang_c_enum_fixed_underlying_type, -1,
+  /* DiagArray230 */ diag::warn_flag_enum_constant_out_of_range, -1,
+  /* DiagArray231 */ diag::ext_flexible_array_in_array, diag::ext_flexible_array_in_struct, -1,
+  /* DiagArray232 */ diag::warn_impcast_float_integer, -1,
+  /* DiagArray233 */ diag::warn_floatingpoint_eq, -1,
+  /* DiagArray234 */ diag::warn_impcast_float_to_integer, diag::warn_impcast_float_to_integer_out_of_range, -1,
+  /* DiagArray235 */ diag::warn_impcast_float_to_integer_zero, -1,
+  /* DiagArray236 */ diag::warn_redundant_loop_iteration, diag::warn_variables_not_in_loop_body, -1,
+  /* DiagArray237 */ diag::warn_format_P_no_precision, diag::warn_format_argument_needs_cast, diag::warn_format_conversion_argument_type_mismatch, diag::warn_format_invalid_annotation, diag::warn_format_invalid_positional_specifier, diag::warn_format_mix_positional_nonpositional_args, diag::warn_format_nonsensical_length, diag::warn_format_string_is_wide_literal, diag::warn_format_zero_positional_specifier, diag::warn_missing_format_string, diag::warn_printf_ObjCflags_without_ObjCConversion, diag::warn_printf_asterisk_missing_arg, diag::warn_printf_asterisk_wrong_type, diag::warn_printf_empty_objc_flag, diag::warn_printf_format_string_contains_null_char, diag::warn_printf_format_string_not_null_terminated, diag::warn_printf_ignored_flag, diag::warn_printf_incomplete_specifier, diag::warn_printf_insufficient_data_args, diag::warn_printf_invalid_objc_flag, diag::warn_printf_nonsensical_flag, diag::warn_printf_nonsensical_optional_amount, diag::warn_printf_positional_arg_exceeds_data_args, diag::warn_scanf_nonzero_width, diag::warn_scanf_scanlist_incomplete, -1,
+  /* DiagArray238 */ diag::warn_printf_data_arg_not_used, -1,
+  /* DiagArray239 */ diag::warn_format_invalid_conversion, -1,
+  /* DiagArray240 */ diag::warn_format_non_standard, diag::warn_format_non_standard_conversion_spec, diag::warn_format_non_standard_positional_arg, -1,
+  /* DiagArray241 */ diag::warn_format_nonliteral, -1,
+  /* DiagArray242 */ diag::warn_format_argument_needs_cast_pedantic, diag::warn_format_conversion_argument_type_mismatch_pedantic, -1,
+  /* DiagArray243 */ diag::warn_format_nonliteral_noargs, -1,
+  /* DiagArray245 */ diag::warn_empty_format_string, -1,
+  /* DiagArray247 */ diag::warn_fortify_source_overflow, diag::warn_fortify_source_size_mismatch, -1,
+  /* DiagArray248 */ diag::ext_four_char_character_literal, -1,
+  /* DiagArray249 */ diag::warn_fe_backend_frame_larger_than, diag::warn_fe_frame_larger_than, -1,
+  /* DiagArray250 */ diag::warn_framework_include_private_from_public, -1,
+  /* DiagArray251 */ diag::warn_function_def_in_objc_container, -1,
+  /* DiagArray252 */ diag::warn_dispatch_body_ignored, diag::warn_multiversion_duplicate_entries, -1,
+  /* DiagArray254 */ diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_warn_gnu_final, diag::warn_attribute_on_function_definition, diag::warn_break_binds_to_switch, diag::warn_cleanup_ext, diag::warn_gcc_attribute_location, diag::warn_gcc_ignores_type_attr, diag::warn_gcc_variable_decl_in_for_loop, diag::warn_loop_ctrl_binds_to_inner, -1,
+  /* DiagArray255 */ diag::warn_global_constructor, diag::warn_global_destructor, -1,
+  /* DiagArray257 */ diag::ext_alignof_expr, -1,
+  /* DiagArray258 */ diag::ext_gnu_anonymous_struct, -1,
+  /* DiagArray259 */ diag::ext_array_init_parens, -1,
+  /* DiagArray260 */ diag::ext_auto_type, -1,
+  /* DiagArray261 */ diag::ext_binary_literal, -1,
+  /* DiagArray262 */ diag::ext_gnu_case_range, -1,
+  /* DiagArray263 */ diag::ext_integer_complex, -1,
+  /* DiagArray264 */ diag::ext_array_init_copy, -1,
+  /* DiagArray265 */ diag::ext_gnu_conditional_expr, -1,
+  /* DiagArray266 */ diag::ext_gnu_array_range, diag::ext_gnu_missing_equal_designator, diag::ext_gnu_old_style_field_designator, -1,
+  /* DiagArray267 */ diag::ext_gnu_empty_initializer, -1,
+  /* DiagArray268 */ diag::ext_empty_struct_union, diag::ext_flexible_array_empty_aggregate_gnu, diag::ext_no_named_members_in_struct_union, -1,
+  /* DiagArray269 */ diag::ext_flexible_array_init, -1,
+  /* DiagArray270 */ diag::ext_flexible_array_union_gnu, -1,
+  /* DiagArray271 */ diag::ext_expr_not_ice, diag::ext_in_class_initializer_non_constant, diag::ext_vla_folded_to_constant, -1,
+  /* DiagArray272 */ diag::ext_imaginary_constant, -1,
+  /* DiagArray273 */ diag::ext_pp_include_next_directive, -1,
+  /* DiagArray274 */ diag::ext_gnu_address_of_label, diag::ext_gnu_indirect_goto, -1,
+  /* DiagArray275 */ diag::ext_forward_ref_enum_def, -1,
+  /* DiagArray276 */ diag::ext_gnu_statement_expr, -1,
+  /* DiagArray277 */ diag::ext_in_class_initializer_float_type, -1,
+  /* DiagArray278 */ diag::ext_string_literal_operator_template, -1,
+  /* DiagArray279 */ diag::ext_typecheck_cast_to_union, -1,
+  /* DiagArray280 */ diag::ext_variable_sized_type_in_struct, -1,
+  /* DiagArray281 */ diag::ext_pp_line_zero, -1,
+  /* DiagArray282 */ diag::ext_missing_varargs_arg, diag::ext_paste_comma, -1,
+  /* DiagArray283 */ diag::warn_header_guard, -1,
+  /* DiagArray284 */ diag::warn_using_directive_in_header, -1,
+  /* DiagArray285 */ diag::warn_condition_is_idiomatic_assignment, -1,
+  /* DiagArray286 */ diag::ext_cannot_use_trivial_abi, diag::warn_alias_to_weak_alias, diag::warn_alias_with_section, diag::warn_attr_abi_tag_namespace, diag::warn_attribute_after_definition_ignored, diag::warn_attribute_dllexport_explicit_instantiation_def, diag::warn_attribute_iboutlet, diag::warn_attribute_ignored, diag::warn_attribute_ignored_for_field_of_type, diag::warn_attribute_ignored_on_inline, diag::warn_attribute_invalid_on_definition, diag::warn_attribute_no_decl, diag::warn_attribute_nonnull_no_pointers, diag::warn_attribute_nonnull_parm_no_args, diag::warn_attribute_not_on_decl, diag::warn_attribute_pointer_or_reference_only, diag::warn_attribute_pointers_only, diag::warn_attribute_precede_definition, diag::warn_attribute_return_pointers_only, diag::warn_attribute_return_pointers_refs_only, diag::warn_attribute_sentinel_named_arguments, diag::warn_attribute_sentinel_not_variadic, diag::warn_attribute_type_not_supported, diag::warn_attribute_unknown_visibility, diag::warn_attribute_void_function_method, diag::warn_attribute_weak_on_field, diag::warn_attribute_weak_on_local, diag::warn_attribute_wrong_decl_type, diag::warn_attribute_wrong_decl_type_str, diag::warn_block_literal_attributes_on_omitted_return_type, diag::warn_cconv_ignored, diag::warn_cxx11_gnu_attribute_on_type, diag::warn_declspec_allocator_nonpointer, diag::warn_declspec_attribute_ignored, diag::warn_deprecated_anonymous_namespace, diag::warn_dllimport_dropped_from_inline_function, diag::warn_duplicate_attribute, diag::warn_duplicate_attribute_exact, diag::warn_gc_attribute_weak_on_local, diag::warn_gnu_inline_attribute_requires_inline, diag::warn_ignored_ms_inheritance, diag::warn_ignored_objc_externally_retained, diag::warn_internal_linkage_local_storage, diag::warn_interrupt_attribute_invalid, diag::warn_microsoft_qualifiers_ignored, diag::warn_mig_server_routine_does_not_return_kern_return_t, diag::warn_mmap_unknown_attribute, diag::warn_nocf_check_attribute_ignored, diag::warn_noderef_on_non_pointer_or_array, diag::warn_nothrow_attribute_ignored, diag::warn_ns_attribute_wrong_parameter_type, diag::warn_ns_attribute_wrong_return_type, diag::warn_opencl_attr_deprecated_ignored, diag::warn_riscv_repeated_interrupt_attribute, diag::warn_transparent_union_attribute_field_size_align, diag::warn_transparent_union_attribute_floating, diag::warn_transparent_union_attribute_not_definition, diag::warn_transparent_union_attribute_zero_fields, diag::warn_type_attribute_wrong_type, diag::warn_unhandled_ms_attribute_ignored, diag::warn_unsupported_target_attribute, diag::warn_wrong_clang_attr_namespace, -1,
+  /* DiagArray287 */ diag::warn_drv_unsupported_opt_for_target, diag::warn_ignored_gcc_optimization, -1,
+  /* DiagArray288 */ diag::warn_pragma_intrinsic_builtin, -1,
+  /* DiagArray289 */ diag::warn_pragma_optimize, -1,
+  /* DiagArray290 */ diag::warn_pragma_align_expected_equal, diag::warn_pragma_align_invalid_option, diag::warn_pragma_begin_end_mismatch, diag::warn_pragma_comment_ignored, diag::warn_pragma_debug_missing_argument, diag::warn_pragma_debug_unexpected_command, diag::warn_pragma_debug_unknown_module, diag::warn_pragma_expected_action_or_r_paren, diag::warn_pragma_expected_colon, diag::warn_pragma_expected_colon_r_paren, diag::warn_pragma_expected_comma, diag::warn_pragma_expected_identifier, diag::warn_pragma_expected_init_seg, diag::warn_pragma_expected_integer, diag::warn_pragma_expected_lparen, diag::warn_pragma_expected_non_wide_string, diag::warn_pragma_expected_predicate, diag::warn_pragma_expected_punc, diag::warn_pragma_expected_rparen, diag::warn_pragma_expected_section_label_or_name, diag::warn_pragma_expected_section_name, diag::warn_pragma_expected_section_push_pop_or_name, diag::warn_pragma_expected_string, diag::warn_pragma_extra_tokens_at_eol, diag::warn_pragma_force_cuda_host_device_bad_arg, diag::warn_pragma_init_seg_unsupported_target, diag::warn_pragma_invalid_action, diag::warn_pragma_invalid_argument, diag::warn_pragma_invalid_specific_action, diag::warn_pragma_missing_argument, diag::warn_pragma_ms_struct, diag::warn_pragma_options_align_reset_failed, diag::warn_pragma_options_expected_align, diag::warn_pragma_pack_invalid_alignment, diag::warn_pragma_pack_malformed, diag::warn_pragma_pop_failed, diag::warn_pragma_pop_macro_no_push, diag::warn_pragma_unknown_extension, diag::warn_pragma_unsupported_action, diag::warn_pragma_unsupported_extension, diag::warn_pragma_unused_expected_var, diag::warn_pragma_unused_expected_var_arg, diag::warn_pragma_unused_undeclared_var, -1,
+  /* DiagArray291 */ diag::warn_arc_lifetime_result_type, diag::warn_block_literal_qualifiers_on_omitted_return_type, diag::warn_qual_return_type, diag::warn_typecheck_function_qualifiers_ignored, diag::warn_typecheck_reference_qualifiers, -1,
+  /* DiagArray293 */ diag::warn_auto_implicit_atomic_property, diag::warn_implicit_atomic_property, -1,
+  /* DiagArray294 */ diag::warn_impcast_floating_point_to_bool, -1,
+  /* DiagArray295 */ diag::ext_implicit_exception_spec_mismatch, -1,
+  /* DiagArray296 */ diag::warn_fallthrough_attr_unreachable, diag::warn_unannotated_fallthrough, -1,
+  /* DiagArray297 */ diag::warn_unannotated_fallthrough_per_function, -1,
+  /* DiagArray298 */ diag::warn_impcast_fixed_point_range, -1,
+  /* DiagArray299 */ diag::warn_impcast_float_precision, diag::warn_impcast_float_result_precision, -1,
+  /* DiagArray300 */ diag::ext_implicit_function_decl, diag::ext_implicit_lib_function_decl, diag::warn_builtin_unknown, diag::warn_implicit_function_decl, -1,
+  /* DiagArray301 */ diag::ext_missing_type_specifier, -1,
+  /* DiagArray302 */ diag::warn_impcast_high_order_zero_bits, diag::warn_impcast_integer_precision, -1,
+  /* DiagArray303 */ diag::warn_implicitly_retains_self, -1,
+  /* DiagArray304 */ diag::ext_integer_literal_too_large_for_signed, -1,
+  /* DiagArray306 */ diag::ext_pp_import_directive, -1,
+  /* DiagArray307 */ diag::warn_inaccessible_base_class, -1,
+  /* DiagArray308 */ diag::pp_include_next_absolute_path, -1,
+  /* DiagArray309 */ diag::pp_include_next_in_primary, -1,
+  /* DiagArray310 */ diag::warn_deep_exception_specs_differ, diag::warn_incompatible_exception_specs, -1,
+  /* DiagArray311 */ diag::ext_typecheck_convert_incompatible_function_pointer, -1,
+  /* DiagArray312 */ diag::warn_redecl_library_builtin, -1,
+  /* DiagArray313 */ diag::warn_cxx_ms_struct, diag::warn_npot_ms_struct, -1,
+  /* DiagArray314 */ diag::ext_typecheck_convert_incompatible_pointer, -1,
+  /* DiagArray315 */ diag::ext_nested_pointer_qualifier_mismatch, diag::ext_typecheck_convert_discards_qualifiers, -1,
+  /* DiagArray316 */ diag::warn_property_types_are_incompatible, -1,
+  /* DiagArray317 */ diag::warn_incompatible_sysroot, -1,
+  /* DiagArray318 */ diag::warn_mmap_incomplete_framework_module_declaration, -1,
+  /* DiagArray319 */ diag::warn_undef_method_impl, -1,
+  /* DiagArray321 */ diag::warn_missing_submodule, diag::warn_mmap_umbrella_dir_not_found, diag::warn_uncovered_module_header, -1,
+  /* DiagArray322 */ diag::warn_redeclaration_without_attribute_prev_attribute_ignored, diag::warn_redeclaration_without_import_attribute, -1,
+  /* DiagArray323 */ diag::warn_destructor_marked_not_override_overriding, -1,
+  /* DiagArray324 */ diag::warn_function_marked_not_override_overriding, -1,
+  /* DiagArray325 */ diag::ext_increment_bool, -1,
+  /* DiagArray326 */ diag::warn_infinite_recursive_function, -1,
+  /* DiagArray328 */ diag::warn_initializer_overrides, diag::warn_subobject_initializer_overrides, -1,
+  /* DiagArray329 */ diag::ext_out_of_line_qualified_id_type_names_constructor, -1,
+  /* DiagArray331 */ diag::warn_fe_inline_asm, -1,
+  /* DiagArray332 */ diag::ext_operator_new_delete_declared_inline, -1,
+  /* DiagArray333 */ diag::warn_explicit_instantiation_after_specialization, -1,
+  /* DiagArray334 */ diag::ext_typecheck_convert_int_pointer, diag::ext_typecheck_convert_pointer_int, -1,
+  /* DiagArray336 */ diag::warn_int_to_pointer_cast, -1,
+  /* DiagArray337 */ diag::warn_int_to_void_pointer_cast, -1,
+  /* DiagArray338 */ diag::warn_integer_constant_overflow, -1,
+  /* DiagArray339 */ diag::warn_drv_msp430_hwmult_mismatch, diag::warn_drv_msp430_hwmult_no_device, diag::warn_drv_msp430_hwmult_unsupported, diag::warn_drv_object_size_disabled_O0, diag::warn_drv_optimization_value, -1,
+  /* DiagArray340 */ diag::ext_constexpr_function_never_constant_expr, -1,
+  /* DiagArray341 */ diag::warn_iboutlet_object_type, diag::warn_iboutletcollection_property_assign, -1,
+  /* DiagArray342 */ diag::warn_invalid_initializer_from_system_header, -1,
+  /* DiagArray343 */ diag::warn_invalid_ios_deployment_target, -1,
+  /* DiagArray344 */ diag::warn_falloff_noreturn_function, diag::warn_noreturn_function_has_return_expr, -1,
+  /* DiagArray345 */ diag::ext_offsetof_non_pod_type, diag::ext_offsetof_non_standardlayout_type, -1,
+  /* DiagArray346 */ diag::warn_drv_ps4_sdk_dir, diag::warn_drv_unable_to_find_directory_expected, -1,
+  /* DiagArray347 */ diag::ext_partial_spec_not_more_specialized_than_primary, -1,
+  /* DiagArray349 */ diag::ext_empty_character, diag::ext_unterminated_char_or_string, -1,
+  /* DiagArray350 */ diag::warn_bad_character_encoding, diag::warn_bad_string_encoding, -1,
+  /* DiagArray351 */ diag::ext_pp_bad_paste_ms, -1,
+  /* DiagArray352 */ diag::warn_jump_out_of_seh_finally, -1,
+  /* DiagArray353 */ diag::ext_keyword_as_ident, -1,
+  /* DiagArray354 */ diag::warn_pp_macro_hides_keyword, -1,
+  /* DiagArray355 */ diag::ext_param_promoted_not_compatible_with_prototype, -1,
+  /* DiagArray356 */ diag::ext_token_used, -1,
+  /* DiagArray357 */ diag::warn_parameter_size, diag::warn_return_value_size, -1,
+  /* DiagArray359 */ diag::warn_impcast_literal_float_to_integer, diag::warn_impcast_literal_float_to_integer_out_of_range, -1,
+  /* DiagArray360 */ diag::warn_float_overflow, diag::warn_float_underflow, -1,
+  /* DiagArray361 */ diag::ext_template_arg_local_type, -1,
+  /* DiagArray362 */ diag::warn_logical_not_on_lhs_of_check, -1,
+  /* DiagArray363 */ diag::warn_logical_and_in_logical_or, -1,
+  /* DiagArray364 */ diag::ext_c99_longlong, -1,
+  /* DiagArray366 */ diag::ext_pp_macro_redef, -1,
+  /* DiagArray367 */ diag::ext_main_used, diag::ext_noreturn_main, diag::ext_variadic_main, diag::warn_main_one_arg, diag::warn_main_redefined, diag::warn_main_returns_bool_literal, diag::warn_static_main, -1,
+  /* DiagArray368 */ diag::ext_main_returns_nonint, -1,
+  /* DiagArray369 */ diag::warn_has_warning_invalid_option, -1,
+  /* DiagArray370 */ diag::ext_many_braces_around_scalar_init, -1,
+  /* DiagArray371 */ diag::warn_max_unsigned_zero, -1,
+  /* DiagArray372 */ diag::warn_suspicious_sizeof_memset, -1,
+  /* DiagArray373 */ diag::warn_memsize_comparison, -1,
+  /* DiagArray374 */ diag::warn_non_contravariant_param_types, diag::warn_non_covariant_ret_types, -1,
+  /* DiagArray376 */ diag::ext_anonymous_record_with_type, diag::ext_ms_anonymous_record, -1,
+  /* DiagArray377 */ diag::ext_ms_cast_fn_obj, diag::ext_ms_impcast_fn_obj, -1,
+  /* DiagArray378 */ diag::ext_charize_microsoft, -1,
+  /* DiagArray379 */ diag::ext_comment_paste_microsoft, -1,
+  /* DiagArray380 */ diag::ext_default_init_const, -1,
+  /* DiagArray381 */ diag::ext_pp_operator_used_as_macro_name, -1,
+  /* DiagArray382 */ diag::ext_param_default_argument_redefinition, -1,
+  /* DiagArray383 */ diag::warn_attribute_section_drectve, -1,
+  /* DiagArray384 */ diag::ext_ctrl_z_eof_microsoft, -1,
+  /* DiagArray385 */ diag::ext_ms_forward_ref_enum, -1,
+  /* DiagArray386 */ diag::ext_enumerator_too_large, -1,
+  /* DiagArray387 */ diag::ext_ellipsis_exception_spec, diag::ext_incomplete_in_exception_spec, diag::ext_mismatched_exception_spec, diag::ext_mismatched_exception_spec_explicit_instantiation, diag::ext_ms_missing_exception_specification, diag::ext_override_exception_spec, -1,
+  /* DiagArray388 */ diag::warn_microsoft_dependent_exists, -1,
+  /* DiagArray389 */ diag::ext_ms_explicit_constructor_call, -1,
+  /* DiagArray390 */ diag::warn_member_extra_qualification, -1,
+  /* DiagArray391 */ diag::ext_ms_c_enum_fixed_underlying_type, -1,
+  /* DiagArray392 */ diag::ext_flexible_array_empty_aggregate_ms, diag::ext_flexible_array_union_ms, -1,
+  /* DiagArray393 */ diag::ext_goto_into_protected_scope, -1,
+  /* DiagArray394 */ diag::ext_ms_ambiguous_direct_base, -1,
+  /* DiagArray395 */ diag::ext_pp_include_search_ms, -1,
+  /* DiagArray396 */ diag::ext_mutable_reference, -1,
+  /* DiagArray397 */ diag::ext_pure_function_definition, -1,
+  /* DiagArray398 */ diag::ext_static_non_static, -1,
+  /* DiagArray399 */ diag::ext_ms_sealed_keyword, -1,
+  /* DiagArray400 */ diag::ext_explicit_instantiation_duplicate, diag::ext_found_via_dependent_bases_lookup, diag::ext_ms_delayed_template_argument, diag::ext_ms_deref_template_argument, diag::ext_ms_template_spec_redecl_out_of_scope, diag::ext_ms_template_type_arg_missing_typename, diag::ext_static_out_of_line, diag::ext_undeclared_unqual_id_with_dependent_base, -1,
+  /* DiagArray401 */ diag::ext_union_member_of_reference_type, -1,
+  /* DiagArray402 */ diag::ext_friend_tag_redecl_outside_namespace, -1,
+  /* DiagArray403 */ diag::ext_ms_using_declaration_inaccessible, -1,
+  /* DiagArray404 */ diag::ext_pseudo_dtor_on_void, -1,
+  /* DiagArray405 */ diag::warn_mismatched_delete_new, -1,
+  /* DiagArray406 */ diag::warn_conflicting_param_types, -1,
+  /* DiagArray407 */ diag::warn_conflicting_ret_types, -1,
+  /* DiagArray408 */ diag::warn_struct_class_previous_tag_mismatch, diag::warn_struct_class_tag_mismatch, -1,
+  /* DiagArray409 */ diag::warn_missing_braces, -1,
+  /* DiagArray410 */ diag::ext_no_declarators, diag::ext_standalone_specifier, diag::ext_typedef_without_a_name, diag::warn_standalone_specifier, -1,
+  /* DiagArray411 */ diag::ext_missing_exception_specification, -1,
+  /* DiagArray412 */ diag::warn_missing_field_initializers, -1,
+  /* DiagArray415 */ diag::warn_missing_method_return_type, -1,
+  /* DiagArray416 */ diag::warn_overriding_method_missing_noescape, -1,
+  /* DiagArray417 */ diag::warn_suggest_noreturn_block, diag::warn_suggest_noreturn_function, -1,
+  /* DiagArray418 */ diag::warn_cconv_knr, -1,
+  /* DiagArray419 */ diag::warn_missing_prototype, -1,
+  /* DiagArray420 */ diag::warn_missing_selector_name, -1,
+  /* DiagArray421 */ diag::warn_missing_sysroot, -1,
+  /* DiagArray422 */ diag::warn_missing_variable_declarations, -1,
+  /* DiagArray423 */ diag::remark_module_build, diag::remark_module_build_done, diag::remark_module_lock_failure, diag::remark_module_lock_timeout, -1,
+  /* DiagArray424 */ diag::warn_module_conflict, diag::warn_module_system_bit_conflict, -1,
+  /* DiagArray425 */ diag::warn_module_config_mismatch, -1,
+  /* DiagArray426 */ diag::warn_duplicate_module_file_extension, -1,
+  /* DiagArray427 */ diag::remark_module_import, -1,
+  /* DiagArray428 */ diag::ext_module_import_in_extern_c, -1,
+  /* DiagArray429 */ diag::ext_equivalent_internal_linkage_decl_in_modules, -1,
+  /* DiagArray430 */ diag::ext_module_import_not_at_top_level_noop, -1,
+  /* DiagArray434 */ diag::warn_drv_msvc_not_found, -1,
+  /* DiagArray435 */ diag::ext_multichar_character_literal, -1,
+  /* DiagArray436 */ diag::warn_vbase_moved_multiple_times, -1,
+  /* DiagArray438 */ diag::ext_anonymous_record_with_anonymous_type, -1,
+  /* DiagArray440 */ diag::warn_operator_new_returns_null, -1,
+  /* DiagArray441 */ diag::ext_no_newline_eof, diag::warn_no_newline_eof, -1,
+  /* DiagArray442 */ diag::warn_dereference_of_noderef_type, diag::warn_dereference_of_noderef_type_no_decl, diag::warn_noderef_to_dereferenceable_pointer, -1,
+  /* DiagArray445 */ diag::warn_non_literal_null_pointer, -1,
+  /* DiagArray446 */ diag::warn_non_modular_include_in_framework_module, -1,
+  /* DiagArray447 */ diag::warn_non_modular_include_in_module, -1,
+  /* DiagArray448 */ diag::warn_cannot_pass_non_pod_arg_to_vararg, diag::warn_non_pod_vararg_with_format_string, diag::warn_second_parameter_to_va_arg_not_pod, diag::warn_second_parameter_to_va_arg_ownership_qualified, -1,
+  /* DiagArray449 */ diag::warn_non_virtual_dtor, -1,
+  /* DiagArray450 */ diag::warn_null_arg, diag::warn_null_ret, -1,
+  /* DiagArray452 */ diag::pp_nonportable_path, -1,
+  /* DiagArray453 */ diag::pp_nonportable_system_path, -1,
+  /* DiagArray454 */ diag::warn_neon_vector_initializer_non_portable, -1,
+  /* DiagArray455 */ diag::warn_cstruct_memaccess, -1,
+  /* DiagArray456 */ diag::warn_nsconsumed_attribute_mismatch, -1,
+  /* DiagArray457 */ diag::warn_nsreturns_retained_attribute_mismatch, -1,
+  /* DiagArray458 */ diag::warn_null_in_arithmetic_operation, diag::warn_null_in_comparison_operation, -1,
+  /* DiagArray459 */ diag::null_in_char_or_string, diag::null_in_file, -1,
+  /* DiagArray460 */ diag::warn_impcast_null_pointer_to_integer, -1,
+  /* DiagArray461 */ diag::warn_binding_null_to_reference, diag::warn_indirection_through_null, -1,
+  /* DiagArray462 */ diag::warn_gnu_null_ptr_arith, diag::warn_pointer_arith_null_ptr, -1,
+  /* DiagArray463 */ diag::warn_conflicting_nullability_attr_overriding_param_types, diag::warn_conflicting_nullability_attr_overriding_ret_types, diag::warn_mismatched_nullability_attr, diag::warn_null_resettable_setter, diag::warn_nullability_duplicate, -1,
+  /* DiagArray464 */ diag::warn_nullability_missing, -1,
+  /* DiagArray465 */ diag::warn_nullability_missing_array, -1,
+  /* DiagArray466 */ diag::warn_nullability_declspec, -1,
+  /* DiagArray467 */ diag::ext_nullability, -1,
+  /* DiagArray468 */ diag::warn_nullability_inferred_on_nested_type, -1,
+  /* DiagArray469 */ diag::warn_nullability_lost, -1,
+  /* DiagArray470 */ diag::warn_autosynthesis_property_ivar_match, -1,
+  /* DiagArray471 */ diag::warn_impcast_constant_int_to_objc_bool, -1,
+  /* DiagArray472 */ diag::warn_objc_boxing_invalid_utf8_string, -1,
+  /* DiagArray473 */ diag::warn_objc_circular_container, -1,
+  /* DiagArray475 */ diag::warn_objc_designated_init_missing_super_call, diag::warn_objc_designated_init_non_designated_init_call, diag::warn_objc_designated_init_non_super_designated_init_call, diag::warn_objc_implementation_missing_designated_init_override, diag::warn_objc_secondary_init_missing_init_call, diag::warn_objc_secondary_init_super_init_call, -1,
+  /* DiagArray476 */ diag::warn_superclass_variable_sized_type_not_at_end, diag::warn_variable_sized_ivar_visibility, -1,
+  /* DiagArray477 */ diag::warn_forward_class_redefinition, -1,
+  /* DiagArray478 */ diag::warn_ivars_in_interface, -1,
+  /* DiagArray479 */ diag::warn_objc_literal_comparison, -1,
+  /* DiagArray480 */ diag::warn_impcast_objective_c_literal_to_bool, diag::warn_objc_collection_literal_element, -1,
+  /* DiagArray481 */ diag::warn_pp_objc_macro_redef_ignored, -1,
+  /* DiagArray482 */ diag::warn_messaging_unqualified_id, -1,
+  /* DiagArray483 */ diag::warn_class_method_not_found, diag::warn_class_method_not_found_with_typo, diag::warn_inst_method_not_found, diag::warn_instance_method_not_found_with_typo, diag::warn_instance_method_on_class_found, diag::warn_root_inst_method_not_found, -1,
+  /* DiagArray484 */ diag::warn_missing_explicit_synthesis, -1,
+  /* DiagArray485 */ diag::warn_objc_missing_super_call, -1,
+  /* DiagArray486 */ diag::warn_multiple_method_decl, -1,
+  /* DiagArray487 */ diag::warn_objc_property_retain_of_block, -1,
+  /* DiagArray488 */ diag::warn_objc_pointer_cxx_catch_fragile, -1,
+  /* DiagArray489 */ diag::warn_objc_property_assign_on_object, -1,
+  /* DiagArray490 */ diag::warn_impl_required_for_class_property, diag::warn_impl_required_in_category_for_class_property, diag::warn_setter_getter_impl_required, diag::warn_setter_getter_impl_required_in_category, -1,
+  /* DiagArray491 */ diag::warn_property_implicitly_mismatched, -1,
+  /* DiagArray492 */ diag::warn_cocoa_naming_owned_rule, -1,
+  /* DiagArray493 */ diag::warn_objc_property_default_assign_on_object, diag::warn_objc_property_no_assignment_attribute, -1,
+  /* DiagArray494 */ diag::warn_autosynthesis_property_in_superclass, diag::warn_no_autosynthesis_property, diag::warn_no_autosynthesis_shared_ivar_property, -1,
+  /* DiagArray495 */ diag::warn_category_method_impl_match, -1,
+  /* DiagArray496 */ diag::warn_auto_synthesizing_protocol_property, -1,
+  /* DiagArray497 */ diag::warn_objc_redundant_qualified_class_type, -1,
+  /* DiagArray498 */ diag::warn_objc_readonly_property_has_setter, -1,
+  /* DiagArray500 */ diag::warn_objc_redundant_literal_use, -1,
+  /* DiagArray501 */ diag::warn_objc_root_class_missing, -1,
+  /* DiagArray502 */ diag::warn_objc_string_literal_comparison, -1,
+  /* DiagArray503 */ diag::warn_concatenated_nsarray_literal, -1,
+  /* DiagArray504 */ diag::warn_objc_unsafe_perform_selector, -1,
+  /* DiagArray505 */ diag::warn_odr_different_num_template_parameters, diag::warn_odr_different_template_parameter_kind, diag::warn_odr_field_type_inconsistent, diag::warn_odr_function_type_inconsistent, diag::warn_odr_ivar_type_inconsistent, diag::warn_odr_non_type_parameter_type_inconsistent, diag::warn_odr_objc_method_num_params_inconsistent, diag::warn_odr_objc_method_param_type_inconsistent, diag::warn_odr_objc_method_result_type_inconsistent, diag::warn_odr_objc_method_variadic_inconsistent, diag::warn_odr_objc_property_impl_kind_inconsistent, diag::warn_odr_objc_property_type_inconsistent, diag::warn_odr_objc_superclass_inconsistent, diag::warn_odr_objc_synthesize_ivar_inconsistent, diag::warn_odr_parameter_pack_non_pack, diag::warn_odr_tag_type_inconsistent, diag::warn_odr_variable_multiple_def, diag::warn_odr_variable_type_inconsistent, -1,
+  /* DiagArray506 */ diag::warn_old_style_cast, -1,
+  /* DiagArray508 */ diag::ext_opencl_ext_vector_type_rgba_selector, -1,
+  /* DiagArray509 */ diag::warn_omp_alignment_not_power_of_two, diag::warn_omp_allocate_thread_on_task_target_directive, diag::warn_omp_linear_step_zero, diag::warn_omp_used_different_allocator, -1,
+  /* DiagArray510 */ diag::ext_omp_loop_not_canonical_init, diag::warn_omp_loop_64_bit_var, -1,
+  /* DiagArray511 */ diag::warn_drv_omp_offload_target_duplicate, diag::warn_drv_omp_offload_target_missingbcruntime, diag::warn_omp_non_trivial_type_mapped, diag::warn_omp_not_in_target_context, -1,
+  /* DiagArray512 */ diag::warn_drv_fine_grained_bitfield_accesses_ignored, diag::warn_drv_moutline_unsupported_opt, diag::warn_drv_ps4_force_pic, diag::warn_drv_unsupported_longcalls, diag::warn_drv_unsupported_pic_with_mabicalls, diag::warn_drv_vectorize_needs_hvx, -1,
+  /* DiagArray513 */ diag::ext_typecheck_ordered_comparison_of_function_pointers, -1,
+  /* DiagArray514 */ diag::ext_out_of_line_declaration, -1,
+  /* DiagArray515 */ diag::ext_use_out_of_scope_declaration, -1,
+  /* DiagArray516 */ diag::warn_overaligned_type, -1,
+  /* DiagArray518 */ diag::ext_string_too_long, -1,
+  /* DiagArray519 */ diag::warn_overloaded_shift_in_comparison, -1,
+  /* DiagArray520 */ diag::warn_overloaded_virtual, -1,
+  /* DiagArray522 */ diag::warn_fe_override_module, -1,
+  /* DiagArray523 */ diag::warn_conflicting_overriding_param_modifiers, diag::warn_conflicting_overriding_param_types, diag::warn_conflicting_overriding_ret_type_modifiers, diag::warn_conflicting_overriding_ret_types, diag::warn_conflicting_overriding_variadic, diag::warn_non_contravariant_overriding_param_types, diag::warn_non_covariant_overriding_ret_types, -1,
+  /* DiagArray524 */ diag::warn_drv_overriding_flag_option, -1,
+  /* DiagArray525 */ diag::warn_unnecessary_packed, -1,
+  /* DiagArray526 */ diag::warn_padded_struct_anon_field, diag::warn_padded_struct_field, diag::warn_padded_struct_size, -1,
+  /* DiagArray527 */ diag::warn_condition_is_assignment, diag::warn_precedence_bitwise_rel, diag::warn_precedence_conditional, -1,
+  /* DiagArray528 */ diag::warn_equality_with_extra_parens, -1,
+  /* DiagArray530 */ diag::remark_fe_backend_optimization_remark, -1,
+  /* DiagArray531 */ diag::remark_fe_backend_optimization_remark_analysis, diag::remark_fe_backend_optimization_remark_analysis_aliasing, diag::remark_fe_backend_optimization_remark_analysis_fpcommute, -1,
+  /* DiagArray532 */ diag::warn_fe_backend_optimization_failure, -1,
+  /* DiagArray533 */ diag::remark_fe_backend_optimization_remark_missed, -1,
+  /* DiagArray534 */ diag::warn_module_uses_date_time, -1,
+  /* DiagArray535 */ diag::ext_aggregate_init_not_constant, diag::ext_anonymous_record_with_type, diag::ext_anonymous_struct_union_qualified, diag::ext_array_size_conversion, diag::ext_auto_new_list_init, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_cast_fn_obj, diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_cxx14_attr, diag::ext_cxx17_attr, diag::ext_designated_init, diag::ext_duplicate_declspec, diag::ext_ellipsis_exception_spec, diag::ext_empty_fnmacro_arg, diag::ext_enum_value_not_int, diag::ext_enumerator_list_comma_c, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_instantiation_without_qualified_id, diag::ext_extern_template, diag::ext_extra_semi, diag::ext_forward_ref_enum, diag::ext_freestanding_complex, diag::ext_gnu_array_range, diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_hex_constant_invalid, diag::ext_hex_literal_invalid, diag::ext_ident_list_in_param, diag::ext_integer_complement_complex, diag::ext_integer_increment_complex, diag::ext_internal_in_extern_inline_quiet, diag::ext_invalid_sign_spec, diag::ext_line_comment, diag::ext_main_used, diag::ext_multi_line_line_comment, diag::ext_named_variadic_macro, diag::ext_no_newline_eof, diag::ext_nonstandard_escape, diag::ext_ns_enum_attribute, diag::ext_param_not_declared, diag::ext_pointer_to_const_ref_member_on_rvalue, diag::ext_pp_bad_vaargs_use, diag::ext_pp_comma_expr, diag::ext_pp_ident_directive, diag::ext_pp_line_too_big, diag::ext_pp_opencl_variadic_macros, diag::ext_pp_warning_directive, diag::ext_return_has_void_expr, diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::ext_subscript_non_lvalue, diag::ext_thread_before, diag::ext_typecheck_addrof_void, diag::ext_typecheck_cast_nonscalar, diag::ext_typecheck_comparison_of_fptr_to_void, diag::ext_typecheck_cond_one_void, diag::ext_typecheck_convert_pointer_void_func, diag::ext_typecheck_ordered_comparison_of_pointer_and_zero, diag::ext_variadic_macro, diag::warn_defined_in_function_type_macro, diag::warn_format_conversion_argument_type_mismatch_pedantic, diag::warn_illegal_constant_array_size, diag::warn_kern_is_method, -1,
+  /* DiagArray536 */ diag::warn_pragma_extension_is_core, -1,
+  /* DiagArray537 */ diag::warn_pessimizing_move_on_initialization, diag::warn_pessimizing_move_on_return, -1,
+  /* DiagArray538 */ diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::warn_sub_ptr_zero_size_types, -1,
+  /* DiagArray539 */ diag::warn_cast_nonnull_to_bool, diag::warn_impcast_pointer_to_bool, -1,
+  /* DiagArray540 */ diag::ext_typecheck_comparison_of_pointer_integer, -1,
+  /* DiagArray541 */ diag::ext_typecheck_convert_incompatible_pointer_sign, -1,
+  /* DiagArray543 */ diag::ext_typecheck_cond_incompatible_pointers, -1,
+  /* DiagArray544 */ diag::warn_side_effects_typeid, -1,
+  /* DiagArray545 */ diag::warn_pragma_attribute_unused, -1,
+  /* DiagArray546 */ diag::pp_pragma_once_in_main_file, -1,
+  /* DiagArray547 */ diag::warn_pragma_pack_modified_after_include, diag::warn_pragma_pack_no_pop_eof, -1,
+  /* DiagArray548 */ diag::warn_pragma_pack_non_default_at_include, -1,
+  /* DiagArray549 */ diag::pp_pragma_sysheader_in_main_file, -1,
+  /* DiagArray550 */ diag::warn_redefine_extname_not_applied, -1,
+  /* DiagArray551 */ diag::ext_predef_outside_function, -1,
+  /* DiagArray552 */ diag::warn_private_extern, -1,
+  /* DiagArray553 */ diag::warn_use_of_private_header_outside_module, -1,
+  /* DiagArray554 */ diag::warn_mmap_mismatched_private_module_name, diag::warn_mmap_mismatched_private_submodule, diag::warn_mmap_redundant_export_as, diag::warn_no_priv_submodule_use_toplevel, -1,
+  /* DiagArray555 */ diag::warn_profile_data_missing, -1,
+  /* DiagArray556 */ diag::warn_profile_data_out_of_date, -1,
+  /* DiagArray557 */ diag::warn_profile_data_unprofiled, -1,
+  /* DiagArray558 */ diag::warn_property_access_suggest, -1,
+  /* DiagArray559 */ diag::warn_property_attr_mismatch, diag::warn_property_attribute, diag::warn_property_redecl_getter_mismatch, diag::warn_readonly_property, -1,
+  /* DiagArray560 */ diag::warn_unimplemented_protocol_method, -1,
+  /* DiagArray561 */ diag::warn_protocol_property_mismatch, -1,
+  /* DiagArray562 */ diag::err_func_returning_qualified_void, -1,
+  /* DiagArray563 */ diag::warn_quoted_include_in_framework_header, -1,
+  /* DiagArray564 */ diag::warn_for_range_const_reference_copy, diag::warn_for_range_copy, diag::warn_for_range_variable_always_copy, -1,
+  /* DiagArray565 */ diag::warn_auto_readonly_iboutlet_property, -1,
+  /* DiagArray566 */ diag::warn_bad_receiver_type, -1,
+  /* DiagArray567 */ diag::warn_receiver_forward_class, diag::warn_receiver_forward_instance, -1,
+  /* DiagArray568 */ diag::ext_member_redeclared, -1,
+  /* DiagArray570 */ diag::warn_redundant_move_on_return, -1,
+  /* DiagArray571 */ diag::warn_redundant_parens_around_declarator, -1,
+  /* DiagArray572 */ diag::ext_register_storage_class, -1,
+  /* DiagArray573 */ diag::warn_reinterpret_different_from_static, -1,
+  /* DiagArray574 */ diag::remark_fe_backend_plugin, -1,
+  /* DiagArray575 */ diag::warn_initializer_out_of_order, -1,
+  /* DiagArray576 */ diag::warn_objc_requires_super_protocol, -1,
+  /* DiagArray577 */ diag::warn_pp_macro_is_reserved_id, -1,
+  /* DiagArray578 */ diag::ext_ms_reserved_user_defined_literal, diag::ext_reserved_user_defined_literal, -1,
+  /* DiagArray579 */ diag::ext_retained_language_linkage, -1,
+  /* DiagArray580 */ diag::warn_ret_addr_label, diag::warn_ret_local_temp_addr_ref, diag::warn_ret_stack_addr_ref, -1,
+  /* DiagArray581 */ diag::warn_return_std_move, -1,
+  /* DiagArray582 */ diag::warn_return_std_move_in_cxx11, -1,
+  /* DiagArray583 */ diag::ext_return_has_expr, diag::ext_return_missing_expr, diag::warn_falloff_nonvoid_coroutine, diag::warn_falloff_nonvoid_function, diag::warn_falloff_nonvoid_lambda, diag::warn_maybe_falloff_nonvoid_coroutine, diag::warn_maybe_falloff_nonvoid_function, diag::warn_maybe_falloff_nonvoid_lambda, diag::warn_return_missing_expr, -1,
+  /* DiagArray584 */ diag::warn_return_value_udt, diag::warn_return_value_udt_incomplete, -1,
+  /* DiagArray585 */ diag::remark_sanitize_address_insert_extra_padding_accepted, diag::remark_sanitize_address_insert_extra_padding_rejected, -1,
+  /* DiagArray586 */ diag::warn_attribute_section_on_redeclaration, diag::warn_duplicate_codeseg_attribute, diag::warn_mismatched_section, -1,
+  /* DiagArray587 */ diag::warn_unimplemented_selector, -1,
+  /* DiagArray588 */ diag::warn_multiple_selectors, -1,
+  /* DiagArray589 */ diag::warn_self_assignment_builtin, -1,
+  /* DiagArray590 */ diag::warn_identity_field_assign, -1,
+  /* DiagArray591 */ diag::warn_self_assignment_overloaded, -1,
+  /* DiagArray592 */ diag::warn_self_move, -1,
+  /* DiagArray593 */ diag::warn_semicolon_before_method_body, -1,
+  /* DiagArray594 */ diag::warn_missing_sentinel, diag::warn_not_enough_argument, -1,
+  /* DiagArray596 */ diag::warn_fe_serialized_diag_failure, diag::warn_fe_serialized_diag_merge_failure, -1,
+  /* DiagArray597 */ diag::warn_decl_shadow, -1,
+  /* DiagArray599 */ diag::warn_shadow_field, -1,
+  /* DiagArray600 */ diag::warn_ctor_parm_shadows_field, -1,
+  /* DiagArray601 */ diag::warn_modifying_shadowing_decl, -1,
+  /* DiagArray602 */ diag::warn_ivar_use_hidden, -1,
+  /* DiagArray603 */ diag::warn_decl_shadow_uncaptured_local, -1,
+  /* DiagArray604 */ diag::warn_shift_negative, -1,
+  /* DiagArray605 */ diag::warn_shift_gt_typewidth, -1,
+  /* DiagArray606 */ diag::warn_shift_lhs_negative, -1,
+  /* DiagArray607 */ diag::warn_addition_in_bitshift, -1,
+  /* DiagArray608 */ diag::warn_shift_result_gt_typewidth, -1,
+  /* DiagArray609 */ diag::warn_shift_result_sets_sign_bit, -1,
+  /* DiagArray610 */ diag::warn_impcast_integer_64_32, -1,
+  /* DiagArray611 */ diag::warn_mixed_sign_comparison, -1,
+  /* DiagArray612 */ diag::warn_impcast_integer_sign, diag::warn_impcast_integer_sign_conditional, diag::warn_impcast_nonnegative_result, -1,
+  /* DiagArray614 */ diag::warn_no_underlying_type_specified_for_enum_bitfield, -1,
+  /* DiagArray615 */ diag::warn_sizeof_array_param, -1,
+  /* DiagArray616 */ diag::warn_sizeof_array_decay, -1,
+  /* DiagArray617 */ diag::warn_division_sizeof_ptr, -1,
+  /* DiagArray618 */ diag::warn_sizeof_pointer_expr_memaccess, diag::warn_sizeof_pointer_type_memaccess, -1,
+  /* DiagArray619 */ diag::warn_slash_u_filename, -1,
+  /* DiagArray620 */ diag::warn_sometimes_uninit_var, -1,
+  /* DiagArray621 */ diag::warn_omp_nesting_simd, diag::warn_pragma_omp_ignored, -1,
+  /* DiagArray622 */ diag::warn_sampler_initializer_invalid_bits, -1,
+  /* DiagArray624 */ diag::ext_in_class_initializer_float_type_cxx11, -1,
+  /* DiagArray625 */ diag::ext_internal_in_extern_inline, diag::ext_internal_in_extern_inline_quiet, -1,
+  /* DiagArray626 */ diag::warn_static_inline_explicit_inst_ignored, -1,
+  /* DiagArray627 */ diag::warn_static_local_in_extern_inline, -1,
+  /* DiagArray628 */ diag::warn_static_self_reference_in_init, -1,
+  /* DiagArray629 */ diag::warn_drv_libstdcxx_not_found, -1,
+  /* DiagArray641 */ diag::warn_strict_prototypes, -1,
+  /* DiagArray642 */ diag::warn_strict_multiple_method_decl, -1,
+  /* DiagArray643 */ diag::warn_stringcompare, -1,
+  /* DiagArray644 */ diag::warn_impcast_string_literal_to_bool, -1,
+  /* DiagArray645 */ diag::warn_string_plus_char, -1,
+  /* DiagArray646 */ diag::warn_string_plus_int, -1,
+  /* DiagArray647 */ diag::warn_strlcpycat_wrong_size, -1,
+  /* DiagArray648 */ diag::warn_strncat_large_size, diag::warn_strncat_src_size, diag::warn_strncat_wrong_size, -1,
+  /* DiagArray649 */ diag::ext_typecheck_base_super, -1,
+  /* DiagArray650 */ diag::warn_suspicious_bzero_size, -1,
+  /* DiagArray652 */ diag::warn_case_value_overflow, diag::warn_missing_case, diag::warn_not_in_enum, -1,
+  /* DiagArray653 */ diag::warn_bool_switch_condition, -1,
+  /* DiagArray655 */ diag::warn_def_missing_case, -1,
+  /* DiagArray656 */ diag::warn_sync_fetch_and_nand_semantics_change, -1,
+  /* DiagArray658 */ diag::warn_comparison_always, diag::warn_comparison_bitwise_always, -1,
+  /* DiagArray659 */ diag::warn_tautological_bool_compare, -1,
+  /* DiagArray661 */ diag::warn_out_of_range_compare, -1,
+  /* DiagArray662 */ diag::warn_tautological_compare_objc_bool, -1,
+  /* DiagArray663 */ diag::warn_tautological_overlap_comparison, -1,
+  /* DiagArray664 */ diag::warn_nonnull_expr_compare, diag::warn_null_pointer_compare, -1,
+  /* DiagArray665 */ diag::warn_tautological_constant_compare, -1,
+  /* DiagArray666 */ diag::warn_address_of_reference_null_compare, diag::warn_this_null_compare, -1,
+  /* DiagArray667 */ diag::warn_unsigned_enum_always_true_comparison, -1,
+  /* DiagArray668 */ diag::warn_unsigned_always_true_comparison, -1,
+  /* DiagArray669 */ diag::ext_typecheck_decl_incomplete_type, -1,
+  /* DiagArray671 */ diag::warn_acquired_before, diag::warn_acquired_before_after_cycle, diag::warn_cannot_resolve_lock, diag::warn_double_lock, diag::warn_expecting_lock_held_on_loop, diag::warn_expecting_locked, diag::warn_fun_excludes_mutex, diag::warn_fun_requires_lock, diag::warn_lock_exclusive_and_shared, diag::warn_lock_some_predecessors, diag::warn_no_unlock, diag::warn_unlock_but_no_lock, diag::warn_unlock_kind_mismatch, diag::warn_var_deref_requires_any_lock, diag::warn_var_deref_requires_lock, diag::warn_variable_requires_any_lock, diag::warn_variable_requires_lock, -1,
+  /* DiagArray672 */ diag::warn_invalid_capability_name, diag::warn_thread_attribute_argument_not_lockable, diag::warn_thread_attribute_decl_not_lockable, diag::warn_thread_attribute_decl_not_pointer, diag::warn_thread_attribute_ignored, diag::warn_thread_attribute_not_on_capability_member, diag::warn_thread_attribute_not_on_non_static_member, -1,
+  /* DiagArray673 */ diag::warn_thread_safety_beta, -1,
+  /* DiagArray674 */ diag::warn_acquire_requires_negative_cap, -1,
+  /* DiagArray675 */ diag::warn_fun_requires_lock_precise, diag::warn_var_deref_requires_lock_precise, diag::warn_variable_requires_lock_precise, -1,
+  /* DiagArray676 */ diag::warn_guarded_pass_by_reference, diag::warn_pt_guarded_pass_by_reference, -1,
+  /* DiagArray677 */ diag::warn_thread_safety_verbose, -1,
+  /* DiagArray678 */ diag::trigraph_converted, diag::trigraph_ends_block_comment, diag::trigraph_ignored, diag::trigraph_ignored_block_comment, -1,
+  /* DiagArray680 */ diag::warn_type_safety_null_pointer_required, diag::warn_type_safety_type_mismatch, diag::warn_type_tag_for_datatype_wrong_kind, -1,
+  /* DiagArray681 */ diag::ext_redefinition_of_typedef, -1,
+  /* DiagArray682 */ diag::ext_typename_missing, -1,
+  /* DiagArray683 */ diag::warn_fe_unable_to_open_stats_file, -1,
+  /* DiagArray684 */ diag::warn_unavailable_fwdclass_message, -1,
+  /* DiagArray685 */ diag::warn_undeclared_selector, diag::warn_undeclared_selector_with_typo, -1,
+  /* DiagArray686 */ diag::warn_pp_undef_identifier, -1,
+  /* DiagArray687 */ diag::warn_address_of_reference_bool_conversion, diag::warn_this_bool_conversion, -1,
+  /* DiagArray688 */ diag::warn_func_template_missing, -1,
+  /* DiagArray689 */ diag::warn_undefined_inline, -1,
+  /* DiagArray690 */ diag::warn_undefined_internal, -1,
+  /* DiagArray691 */ diag::ext_undefined_internal_type, -1,
+  /* DiagArray692 */ diag::warn_pointer_indirection_from_incompatible_type, diag::warn_undefined_reinterpret_cast, -1,
+  /* DiagArray693 */ diag::warn_var_template_missing, -1,
+  /* DiagArray694 */ diag::warn_throw_underaligned_obj, -1,
+  /* DiagArray695 */ diag::warn_side_effects_unevaluated_context, -1,
+  /* DiagArray696 */ diag::warn_unguarded_availability, -1,
+  /* DiagArray697 */ diag::warn_unguarded_availability_new, -1,
+  /* DiagArray698 */ diag::warn_ucn_escape_incomplete, diag::warn_ucn_escape_no_digits, diag::warn_ucn_escape_surrogate, diag::warn_ucn_not_valid_in_c89, diag::warn_ucn_not_valid_in_c89_literal, -1,
+  /* DiagArray699 */ diag::warn_utf8_symbol_homoglyph, -1,
+  /* DiagArray700 */ diag::ext_unicode_whitespace, -1,
+  /* DiagArray701 */ diag::warn_utf8_symbol_zero_width, -1,
+  /* DiagArray702 */ diag::warn_base_class_is_uninit, diag::warn_field_is_uninit, diag::warn_reference_field_is_uninit, diag::warn_uninit_byref_blockvar_captured_by_block, diag::warn_uninit_self_reference_in_init, diag::warn_uninit_self_reference_in_reference_init, diag::warn_uninit_var, -1,
+  /* DiagArray703 */ diag::warn_drv_unknown_argument_clang_cl, diag::warn_drv_unknown_argument_clang_cl_with_suggestion, -1,
+  /* DiagArray704 */ diag::warn_unknown_attribute_ignored, -1,
+  /* DiagArray705 */ diag::ext_unknown_escape, -1,
+  /* DiagArray706 */ diag::ext_on_off_switch_syntax, diag::ext_pragma_syntax_eod, diag::ext_stdc_pragma_ignored, diag::warn_pragma_diagnostic_cannot_pop, diag::warn_pragma_diagnostic_invalid, diag::warn_pragma_diagnostic_invalid_option, diag::warn_pragma_diagnostic_invalid_token, diag::warn_pragma_exec_charset_expected, diag::warn_pragma_exec_charset_push_invalid, diag::warn_pragma_exec_charset_spec_invalid, diag::warn_pragma_ignored, diag::warn_pragma_include_alias_expected, diag::warn_pragma_include_alias_expected_filename, diag::warn_pragma_include_alias_mismatch_angle, diag::warn_pragma_include_alias_mismatch_quote, diag::warn_pragma_warning_expected, diag::warn_pragma_warning_expected_number, diag::warn_pragma_warning_push_level, diag::warn_pragma_warning_spec_invalid, diag::warn_stdc_fenv_access_not_supported, -1,
+  /* DiagArray707 */ diag::warn_unknown_sanitizer_ignored, -1,
+  /* DiagArray708 */ diag::warn_pragma_diagnostic_unknown_warning, diag::warn_unknown_diag_option, diag::warn_unknown_warning_specifier, -1,
+  /* DiagArray709 */ diag::ext_template_arg_unnamed_type, -1,
+  /* DiagArray710 */ diag::warn_unneeded_internal_decl, diag::warn_unneeded_static_internal_decl, -1,
+  /* DiagArray711 */ diag::warn_unneeded_member_function, -1,
+  /* DiagArray712 */ diag::warn_unreachable, -1,
+  /* DiagArray714 */ diag::warn_unreachable_break, -1,
+  /* DiagArray715 */ diag::warn_unreachable_loop_increment, -1,
+  /* DiagArray716 */ diag::warn_unreachable_return, -1,
+  /* DiagArray717 */ diag::warn_unsequenced_mod_mod, diag::warn_unsequenced_mod_use, -1,
+  /* DiagArray718 */ diag::warn_target_unsupported_abs2008, diag::warn_target_unsupported_abslegacy, -1,
+  /* DiagArray719 */ diag::warn_at_available_unchecked_use, -1,
+  /* DiagArray720 */ diag::warn_target_unsupported_compact_branches, -1,
+  /* DiagArray721 */ diag::warn_attribute_dll_instantiated_base_class, -1,
+  /* DiagArray722 */ diag::warn_template_qualified_friend_ignored, diag::warn_template_qualified_friend_unsupported, -1,
+  /* DiagArray723 */ diag::warn_drv_unsupported_gpopt, -1,
+  /* DiagArray724 */ diag::warn_target_unsupported_nan2008, diag::warn_target_unsupported_nanlegacy, -1,
+  /* DiagArray725 */ diag::warn_drv_unsupported_debug_info_opt_for_target, -1,
+  /* DiagArray726 */ diag::warn_attribute_protected_visibility, -1,
+  /* DiagArray727 */ diag::ext_partial_specs_not_deducible, -1,
+  /* DiagArray730 */ diag::warn_drv_diagnostics_hotness_requires_pgo, diag::warn_drv_empty_joined_argument, diag::warn_drv_input_file_unused, diag::warn_drv_input_file_unused_by_cpp, diag::warn_drv_preprocessed_input_file_unused, diag::warn_drv_unused_argument, diag::warn_ignored_clang_option, -1,
+  /* DiagArray731 */ diag::warn_unused_comparison, -1,
+  /* DiagArray732 */ diag::warn_unused_const_variable, -1,
+  /* DiagArray733 */ diag::warn_unused_exception_param, -1,
+  /* DiagArray734 */ diag::warn_unused_function, -1,
+  /* DiagArray735 */ diag::warn_unused_property_expr, -1,
+  /* DiagArray736 */ diag::warn_unused_label, -1,
+  /* DiagArray737 */ diag::warn_unused_lambda_capture, -1,
+  /* DiagArray738 */ diag::warn_unused_local_typedef, -1,
+  /* DiagArray740 */ diag::pp_macro_not_used, -1,
+  /* DiagArray741 */ diag::warn_unused_member_function, -1,
+  /* DiagArray742 */ diag::warn_unused_parameter, -1,
+  /* DiagArray743 */ diag::warn_unused_private_field, -1,
+  /* DiagArray744 */ diag::warn_unused_property_backing_ivar, -1,
+  /* DiagArray745 */ diag::warn_unused_result, -1,
+  /* DiagArray746 */ diag::warn_unused_template, -1,
+  /* DiagArray747 */ diag::warn_unused_call, diag::warn_unused_container_subscript_expr, diag::warn_unused_expr, diag::warn_unused_voidptr, -1,
+  /* DiagArray748 */ diag::warn_unused_variable, -1,
+  /* DiagArray749 */ diag::warn_unused_volatile, -1,
+  /* DiagArray750 */ diag::warn_used_but_marked_unused, -1,
+  /* DiagArray751 */ diag::warn_user_literal_reserved, -1,
+  /* DiagArray752 */ diag::warn_diagnose_if_succeeded, -1,
+  /* DiagArray753 */ diag::warn_second_arg_of_va_start_not_last_named_param, diag::warn_second_parameter_to_va_arg_never_compatible, diag::warn_va_start_type_is_undefined, -1,
+  /* DiagArray754 */ diag::ext_named_variadic_macro, diag::ext_pp_bad_vaopt_use, diag::ext_variadic_macro, -1,
+  /* DiagArray755 */ diag::warn_typecheck_vector_element_sizes_not_equal, -1,
+  /* DiagArray756 */ diag::warn_incompatible_vectors, -1,
+  /* DiagArray758 */ diag::warn_empty_parens_are_function_decl, diag::warn_parens_disambiguated_as_function_declaration, diag::warn_parens_disambiguated_as_variable_declaration, -1,
+  /* DiagArray759 */ diag::warn_decl_in_param_list, diag::warn_redefinition_in_param_list, -1,
+  /* DiagArray760 */ diag::warn_vla_used, -1,
+  /* DiagArray761 */ diag::ext_vla, -1,
+  /* DiagArray762 */ diag::ext_typecheck_indirection_through_void_pointer, -1,
+  /* DiagArray764 */ diag::warn_weak_template_vtable, -1,
+  /* DiagArray765 */ diag::warn_weak_vtable, -1,
+  /* DiagArray766 */ diag::ext_deprecated_string_literal_conversion, -1,
+  /* DiagArray768 */ diag::warn_zero_as_null_pointer_constant, -1,
+  /* DiagArray769 */ diag::ext_typecheck_zero_array_size, -1,
 };
 
 static const int16_t DiagSubGroups[] = {
   /* Empty */ -1,
-  /* DiagSubGroup0 */ 220, -1,
-  /* DiagSubGroup4 */ 15, 220, -1,
-  /* DiagSubGroup11 */ 531, 635, 655, -1,
-  /* DiagSubGroup15 */ 425, 519, 644, 645, -1,
+  /* DiagSubGroup0 */ 223, -1,
+  /* DiagSubGroup4 */ 15, 223, -1,
+  /* DiagSubGroup11 */ 539, 643, 664, -1,
+  /* DiagSubGroup15 */ 431, 527, 652, 653, -1,
   /* DiagSubGroup23 */ 30, 29, 26, -1,
   /* DiagSubGroup28 */ 25, -1,
   /* DiagSubGroup34 */ 36, 35, -1,
-  /* DiagSubGroup44 */ 289, 148, -1,
-  /* DiagSubGroup47 */ 694, 282, -1,
-  /* DiagSubGroup56 */ 84, 104, 257, -1,
-  /* DiagSubGroup57 */ 107, -1,
-  /* DiagSubGroup64 */ 531, 678, -1,
-  /* DiagSubGroup65 */ 64, -1,
-  /* DiagSubGroup72 */ 75, -1,
-  /* DiagSubGroup73 */ 79, -1,
-  /* DiagSubGroup74 */ 83, -1,
-  /* DiagSubGroup75 */ 83, 78, 76, 103, 101, 99, -1,
-  /* DiagSubGroup77 */ 75, 105, 102, 100, -1,
-  /* DiagSubGroup79 */ 80, 81, 82, -1,
-  /* DiagSubGroup85 */ 101, 99, -1,
-  /* DiagSubGroup86 */ 85, 102, 100, -1,
-  /* DiagSubGroup87 */ 84, -1,
-  /* DiagSubGroup88 */ 173, 169, 89, 99, -1,
-  /* DiagSubGroup90 */ 88, 100, -1,
-  /* DiagSubGroup92 */ 87, -1,
+  /* DiagSubGroup44 */ 293, 149, -1,
+  /* DiagSubGroup47 */ 704, 286, -1,
+  /* DiagSubGroup57 */ 85, 105, 261, -1,
+  /* DiagSubGroup58 */ 108, -1,
+  /* DiagSubGroup65 */ 539, 687, -1,
+  /* DiagSubGroup66 */ 65, -1,
+  /* DiagSubGroup73 */ 76, -1,
+  /* DiagSubGroup74 */ 80, -1,
+  /* DiagSubGroup75 */ 84, -1,
+  /* DiagSubGroup76 */ 84, 79, 77, 104, 102, 100, -1,
+  /* DiagSubGroup78 */ 76, 106, 103, 101, -1,
+  /* DiagSubGroup80 */ 81, 82, 83, -1,
+  /* DiagSubGroup86 */ 102, 100, -1,
+  /* DiagSubGroup87 */ 86, 103, 101, -1,
+  /* DiagSubGroup88 */ 85, -1,
+  /* DiagSubGroup89 */ 174, 170, 90, 100, -1,
+  /* DiagSubGroup91 */ 89, 101, -1,
   /* DiagSubGroup93 */ 88, -1,
   /* DiagSubGroup94 */ 89, -1,
-  /* DiagSubGroup95 */ 91, -1,
-  /* DiagSubGroup97 */ 96, -1,
-  /* DiagSubGroup100 */ 99, -1,
-  /* DiagSubGroup102 */ 101, -1,
-  /* DiagSubGroup105 */ 103, 104, -1,
-  /* DiagSubGroup106 */ 109, 111, 103, 101, 99, -1,
-  /* DiagSubGroup110 */ 106, 107, 108, 105, 102, 100, -1,
-  /* DiagSubGroup124 */ 442, -1,
-  /* DiagSubGroup127 */ 126, -1,
-  /* DiagSubGroup133 */ 59, -1,
-  /* DiagSubGroup137 */ 64, 133, 210, 60, 229, 602, 330, 298, 295, 355, 439, 454, 472, 604, 636, -1,
-  /* DiagSubGroup138 */ 454, -1,
-  /* DiagSubGroup139 */ 140, -1,
-  /* DiagSubGroup142 */ 2, -1,
-  /* DiagSubGroup149 */ 151, 152, 572, -1,
-  /* DiagSubGroup163 */ 162, 160, -1,
-  /* DiagSubGroup164 */ 165, 166, 167, 169, 173, 174, 175, -1,
-  /* DiagSubGroup171 */ 172, -1,
-  /* DiagSubGroup175 */ 76, -1,
-  /* DiagSubGroup181 */ 182, -1,
-  /* DiagSubGroup186 */ 188, 187, -1,
-  /* DiagSubGroup189 */ 190, -1,
-  /* DiagSubGroup199 */ 167, -1,
-  /* DiagSubGroup200 */ 443, -1,
-  /* DiagSubGroup207 */ 224, -1,
-  /* DiagSubGroup208 */ 209, -1,
-  /* DiagSubGroup220 */ 407, 287, 324, 585, 410, 603, 732, 456, 204, -1,
-  /* DiagSubGroup222 */ 108, 80, -1,
-  /* DiagSubGroup223 */ 204, -1,
-  /* DiagSubGroup229 */ 231, 232, -1,
-  /* DiagSubGroup234 */ 235, 242, 444, 240, 241, 236, -1,
-  /* DiagSubGroup243 */ 238, 240, 241, -1,
-  /* DiagSubGroup252 */ 253, 254, 256, 257, 258, 259, 260, 261, 262, 263, 264, 751, 265, 266, 267, 268, 269, 270, 560, 271, 272, 273, 274, 275, 276, 759, 277, 278, -1,
-  /* DiagSubGroup286 */ 284, 285, -1,
-  /* DiagSubGroup288 */ 296, 297, -1,
-  /* DiagSubGroup292 */ 293, -1,
-  /* DiagSubGroup310 */ 311, 307, -1,
-  /* DiagSubGroup316 */ 317, 441, -1,
-  /* DiagSubGroup321 */ 169, -1,
-  /* DiagSubGroup331 */ 330, -1,
-  /* DiagSubGroup332 */ 333, -1,
-  /* DiagSubGroup335 */ 283, -1,
-  /* DiagSubGroup357 */ 109, -1,
-  /* DiagSubGroup360 */ 82, -1,
-  /* DiagSubGroup361 */ 233, 556, -1,
-  /* DiagSubGroup371 */ 374, 390, 377, 386, 394, 397, 382, 398, 391, 392, 396, 384, 381, 378, 395, 393, 380, 388, 387, 385, 373, 376, 399, 372, 375, 379, 318, -1,
-  /* DiagSubGroup425 */ 122, 126, 163, 233, 234, 288, 322, 403, 404, 426, 429, 567, 575, 581, 584, 607, 608, 638, 669, 692, 696, 718, 753, 477, 467, 468, 512, 544, 118, 218, 742, -1,
-  /* DiagSubGroup426 */ 529, 562, 573, 584, -1,
-  /* DiagSubGroup427 */ 390, -1,
-  /* DiagSubGroup431 */ 83, -1,
-  /* DiagSubGroup437 */ 89, -1,
-  /* DiagSubGroup438 */ 603, 137, 356, -1,
-  /* DiagSubGroup441 */ 440, -1,
-  /* DiagSubGroup458 */ 459, -1,
-  /* DiagSubGroup466 */ 491, -1,
-  /* DiagSubGroup471 */ 494, -1,
-  /* DiagSubGroup491 */ 492, -1,
-  /* DiagSubGroup513 */ 324, -1,
-  /* DiagSubGroup519 */ 359, 358, 62, 599, 511, 520, 150, -1,
-  /* DiagSubGroup521 */ 686, -1,
-  /* DiagSubGroup527 */ 112, 80, 82, 84, 228, 244, 254, 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 275, 277, 278, 350, 360, 374, 375, 377, 379, 381, 386, 387, 393, 510, 751, 759, 461, 226, 682, 571, 129, 432, 157, 191, 352, 302, 201, 205, -1,
-  /* DiagSubGroup539 */ 540, -1,
-  /* DiagSubGroup542 */ 696, 286, 537, 539, -1,
-  /* DiagSubGroup564 */ 173, -1,
-  /* DiagSubGroup570 */ 78, -1,
-  /* DiagSubGroup575 */ 576, -1,
-  /* DiagSubGroup579 */ 580, -1,
-  /* DiagSubGroup581 */ 583, 582, -1,
-  /* DiagSubGroup587 */ 707, -1,
-  /* DiagSubGroup589 */ 593, 594, -1,
-  /* DiagSubGroup590 */ 589, 592, 595, 591, -1,
-  /* DiagSubGroup592 */ 593, -1,
-  /* DiagSubGroup616 */ 273, -1,
-  /* DiagSubGroup643 */ 610, 198, 449, 368, 642, -1,
-  /* DiagSubGroup650 */ 651, 655, 654, 657, -1,
-  /* DiagSubGroup651 */ 653, -1,
-  /* DiagSubGroup652 */ 656, 659, 658, -1,
-  /* DiagSubGroup661 */ 663, 662, 666, 667, -1,
-  /* DiagSubGroup685 */ 536, -1,
-  /* DiagSubGroup686 */ 687, -1,
-  /* DiagSubGroup692 */ 612, 620, -1,
-  /* DiagSubGroup699 */ 111, -1,
-  /* DiagSubGroup702 */ 705, -1,
-  /* DiagSubGroup703 */ 702, 704, 706, -1,
-  /* DiagSubGroup718 */ 719, 724, 726, 733, 727, 728, 737, 738, 734, -1,
-  /* DiagSubGroup724 */ 700, -1,
-  /* DiagSubGroup729 */ 728, -1,
-  /* DiagSubGroup731 */ 701, -1,
-  /* DiagSubGroup736 */ 700, -1,
-  /* DiagSubGroup737 */ 721, 735, 685, -1,
-  /* DiagSubGroup738 */ 722, -1,
-  /* DiagSubGroup747 */ 746, -1,
-  /* DiagSubGroup756 */ 175, -1,
+  /* DiagSubGroup95 */ 90, -1,
+  /* DiagSubGroup96 */ 92, -1,
+  /* DiagSubGroup98 */ 97, -1,
+  /* DiagSubGroup101 */ 100, -1,
+  /* DiagSubGroup103 */ 102, -1,
+  /* DiagSubGroup106 */ 104, 105, -1,
+  /* DiagSubGroup107 */ 110, 112, 104, 102, 100, -1,
+  /* DiagSubGroup111 */ 107, 108, 109, 106, 103, 101, -1,
+  /* DiagSubGroup125 */ 448, -1,
+  /* DiagSubGroup128 */ 127, -1,
+  /* DiagSubGroup134 */ 60, 471, -1,
+  /* DiagSubGroup138 */ 65, 134, 211, 61, 232, 610, 334, 302, 299, 359, 445, 460, 480, 612, 644, -1,
+  /* DiagSubGroup139 */ 460, -1,
+  /* DiagSubGroup140 */ 141, -1,
+  /* DiagSubGroup143 */ 2, -1,
+  /* DiagSubGroup150 */ 152, 153, 580, -1,
+  /* DiagSubGroup164 */ 163, 161, -1,
+  /* DiagSubGroup165 */ 166, 167, 168, 170, 174, 175, 176, -1,
+  /* DiagSubGroup172 */ 173, -1,
+  /* DiagSubGroup176 */ 77, -1,
+  /* DiagSubGroup182 */ 183, -1,
+  /* DiagSubGroup187 */ 189, 188, -1,
+  /* DiagSubGroup190 */ 191, -1,
+  /* DiagSubGroup200 */ 168, -1,
+  /* DiagSubGroup201 */ 449, -1,
+  /* DiagSubGroup208 */ 227, -1,
+  /* DiagSubGroup209 */ 210, -1,
+  /* DiagSubGroup223 */ 412, 291, 328, 593, 415, 611, 742, 462, 205, -1,
+  /* DiagSubGroup225 */ 109, 81, -1,
+  /* DiagSubGroup226 */ 205, -1,
+  /* DiagSubGroup232 */ 234, 235, -1,
+  /* DiagSubGroup237 */ 238, 245, 450, 243, 244, 239, -1,
+  /* DiagSubGroup246 */ 241, 243, 244, -1,
+  /* DiagSubGroup256 */ 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 268, 761, 269, 270, 271, 272, 273, 274, 568, 275, 276, 277, 278, 279, 280, 769, 281, 282, -1,
+  /* DiagSubGroup290 */ 288, 289, -1,
+  /* DiagSubGroup292 */ 300, 301, -1,
+  /* DiagSubGroup296 */ 297, -1,
+  /* DiagSubGroup314 */ 315, 311, -1,
+  /* DiagSubGroup320 */ 321, 447, -1,
+  /* DiagSubGroup325 */ 170, -1,
+  /* DiagSubGroup335 */ 334, -1,
+  /* DiagSubGroup336 */ 337, -1,
+  /* DiagSubGroup339 */ 287, -1,
+  /* DiagSubGroup361 */ 110, -1,
+  /* DiagSubGroup364 */ 83, -1,
+  /* DiagSubGroup365 */ 236, 564, -1,
+  /* DiagSubGroup375 */ 378, 383, 395, 381, 391, 399, 402, 387, 403, 396, 397, 401, 389, 386, 382, 400, 398, 385, 393, 392, 390, 377, 380, 404, 376, 379, 384, 322, -1,
+  /* DiagSubGroup431 */ 123, 127, 164, 236, 237, 292, 326, 408, 409, 432, 435, 575, 583, 589, 592, 615, 616, 646, 678, 702, 706, 728, 763, 485, 475, 476, 520, 552, 119, 221, 752, -1,
+  /* DiagSubGroup432 */ 537, 570, 581, 592, -1,
+  /* DiagSubGroup433 */ 395, -1,
+  /* DiagSubGroup437 */ 84, -1,
+  /* DiagSubGroup443 */ 90, -1,
+  /* DiagSubGroup444 */ 611, 138, 360, -1,
+  /* DiagSubGroup447 */ 446, -1,
+  /* DiagSubGroup464 */ 465, -1,
+  /* DiagSubGroup474 */ 499, -1,
+  /* DiagSubGroup479 */ 502, -1,
+  /* DiagSubGroup499 */ 500, -1,
+  /* DiagSubGroup521 */ 328, -1,
+  /* DiagSubGroup527 */ 363, 362, 63, 607, 519, 528, 151, -1,
+  /* DiagSubGroup529 */ 696, -1,
+  /* DiagSubGroup535 */ 113, 81, 83, 85, 231, 248, 258, 260, 261, 262, 263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 279, 281, 282, 354, 364, 378, 379, 381, 384, 386, 391, 392, 398, 518, 761, 769, 229, 691, 579, 130, 438, 158, 192, 356, 306, 202, 206, 467, -1,
+  /* DiagSubGroup547 */ 548, -1,
+  /* DiagSubGroup550 */ 706, 290, 545, 547, -1,
+  /* DiagSubGroup572 */ 174, -1,
+  /* DiagSubGroup578 */ 79, -1,
+  /* DiagSubGroup583 */ 584, -1,
+  /* DiagSubGroup587 */ 588, -1,
+  /* DiagSubGroup589 */ 591, 590, -1,
+  /* DiagSubGroup595 */ 717, -1,
+  /* DiagSubGroup597 */ 601, 602, -1,
+  /* DiagSubGroup598 */ 597, 600, 603, 599, -1,
+  /* DiagSubGroup600 */ 601, -1,
+  /* DiagSubGroup624 */ 277, -1,
+  /* DiagSubGroup651 */ 618, 199, 455, 372, 650, -1,
+  /* DiagSubGroup658 */ 659, 664, 663, 666, 662, -1,
+  /* DiagSubGroup659 */ 661, -1,
+  /* DiagSubGroup660 */ 665, 668, 667, -1,
+  /* DiagSubGroup670 */ 672, 671, 675, 676, -1,
+  /* DiagSubGroup679 */ 660, -1,
+  /* DiagSubGroup695 */ 544, -1,
+  /* DiagSubGroup696 */ 697, -1,
+  /* DiagSubGroup702 */ 620, 628, -1,
+  /* DiagSubGroup709 */ 112, -1,
+  /* DiagSubGroup712 */ 715, -1,
+  /* DiagSubGroup713 */ 712, 714, 716, -1,
+  /* DiagSubGroup728 */ 729, 734, 736, 743, 737, 738, 747, 748, 744, -1,
+  /* DiagSubGroup734 */ 710, -1,
+  /* DiagSubGroup739 */ 738, -1,
+  /* DiagSubGroup741 */ 711, -1,
+  /* DiagSubGroup746 */ 710, -1,
+  /* DiagSubGroup747 */ 731, 745, 695, -1,
+  /* DiagSubGroup748 */ 732, -1,
   /* DiagSubGroup757 */ 756, -1,
+  /* DiagSubGroup766 */ 176, -1,
+  /* DiagSubGroup767 */ 766, -1,
 };
 
 static const char DiagGroupNames[] = {
@@ -806,122 +817,124 @@
     "mory-ordering\021atomic-properties*atomic-property-with-user-defined-ac"
     "cessor\035attribute-packed-for-bitfield\nattributes\033auto-disable-vpt"
     "r-sanitizer\013auto-import\022auto-storage-class\013auto-var-id\014avai"
-    "lability\016backend-plugin\030backslash-newline-escape\021bad-function-"
-    "cast\016binary-literal\026bind-to-temporary-copy\024binding-in-conditio"
-    "n\034bitfield-constant-conversion\030bitfield-enum-conversion\016bitfie"
-    "ld-width\026bitwise-op-parentheses\033block-capture-autoreleasing\017bo"
-    "ol-conversion\020bool-conversions\022braced-scalar-init\013bridge-cast\027"
-    "builtin-macro-redefined\027builtin-memcpy-chk-size\027builtin-requires-"
-    "header\nc++-compat\014c++0x-compat\020c++0x-extensions\017c++0x-narrowi"
-    "ng\014c++11-compat(c++11-compat-deprecated-writable-strings\025c++11-co"
-    "mpat-pedantic*c++11-compat-reserved-user-defined-literal\020c++11-exten"
-    "sions\020c++11-extra-semi\026c++11-inline-namespace\017c++11-long-long\017"
-    "c++11-narrowing\024c++14-binary-literal\014c++14-compat\025c++14-compat"
-    "-pedantic\020c++14-extensions\014c++17-compat\025c++17-compat-mangling\025"
-    "c++17-compat-pedantic\020c++17-extensions\020c++1y-extensions\014c++1z-"
-    "compat\025c++1z-compat-mangling\020c++1z-extensions\014c++2a-compat\025"
-    "c++2a-compat-pedantic\020c++2a-extensions\036c++98-c++11-c++14-c++17-co"
-    "mpat'c++98-c++11-c++14-c++17-compat-pedantic\030c++98-c++11-c++14-compa"
-    "t!c++98-c++11-c++14-compat-pedantic\022c++98-c++11-compat!c++98-c++11-c"
-    "ompat-binary-literal\033c++98-c++11-compat-pedantic\014c++98-compat#c++"
-    "98-compat-bind-to-temporary-copy\027c++98-compat-extra-semi%c++98-compa"
-    "t-local-type-template-args\025c++98-compat-pedantic'c++98-compat-unname"
-    "d-type-template-args\016c11-extensions\nc99-compat\016c99-extensions#ca"
-    "ll-to-pure-virtual-from-ctor-dtor\ncast-align\027cast-calling-conventio"
-    "n\020cast-of-sel-type\tcast-qual\023cast-qual-unrelated\nchar-align\017"
-    "char-subscripts\014clang-cl-pch\015class-varargs\005comma\007comment\010"
-    "comments\036compare-distinct-pointer-types\026complex-component-init\031"
-    "conditional-type-mismatch\031conditional-uninitialized\015config-macros"
-    "\023constant-conversion\030constant-logical-operand\023constexpr-not-co"
-    "nst\010consumed\nconversion\017conversion-null\tcoroutine%coroutine-mis"
-    "sing-unhandled-exception\026covered-switch-default\003cpp\030cstring-fo"
-    "rmat-directive\026ctad-maybe-unsupported\021ctor-dtor-privacy\003ctu\013"
-    "cuda-compat\030custom-atomic-properties\010dangling\015dangling-else\016"
-    "dangling-field\031dangling-initializer-list\023darwin-sdk-settings\tdat"
-    "e-time\023dealloc-in-category\035debug-compression-unavailable\033decla"
-    "ration-after-statement\032defaulted-function-deleted\026delegating-ctor"
-    "-cycles delete-abstract-non-virtual-dtor\021delete-incomplete$delete-no"
-    "n-abstract-non-virtual-dtor\027delete-non-virtual-dtor\ndeprecated\025d"
-    "eprecated-attributes\027deprecated-declarations!deprecated-dynamic-exce"
-    "ption-spec\032deprecated-implementations\031deprecated-increment-bool\031"
-    "deprecated-objc-isa-usage%deprecated-objc-pointer-introspection5depreca"
-    "ted-objc-pointer-introspection-performSelector\023deprecated-register\027"
-    "deprecated-this-capture\033deprecated-writable-strings\022direct-ivar-a"
-    "ccess\030disabled-macro-expansion\025disabled-optimization\014discard-q"
-    "ual\034distributed-object-modifiers\013div-by-zero\020division-by-zero\036"
-    "dll-attribute-on-redeclaration%dllexport-explicit-instantiation-decl\032"
-    "dllimport-static-field-def\015documentation\035documentation-deprecated"
-    "-sync\022documentation-html\026documentation-pedantic\035documentation-"
-    "unknown-command\036dollar-in-identifier-extension\020double-promotion\030"
-    "duplicate-decl-specifier\016duplicate-enum\024duplicate-method-arg\026d"
-    "uplicate-method-match\022duplicate-protocol\027dynamic-class-memaccess\026"
-    "dynamic-exception-spec\006effc++\022embedded-directive\nempty-body\023e"
-    "mpty-decomposition\017empty-init-stmt\026empty-translation-unit\013enco"
-    "de-type\014endif-labels\014enum-compare\023enum-compare-switch\017enum-"
-    "conversion\016enum-too-large\nexceptions\025exit-time-destructors\024ex"
-    "pansion-to-defined\021experimental-isel\030explicit-initialize-call\027"
-    "explicit-ownership-type\017extern-c-compat\022extern-initializer\005ext"
-    "ra\023extra-qualification\nextra-semi\017extra-semi-stmt\014extra-token"
-    "s\010fallback\024fixed-enum-extension\tflag-enum\031flexible-array-exte"
-    "nsions\020float-conversion\013float-equal\031float-overflow-conversion\025"
-    "float-zero-conversion\021for-loop-analysis\006format\021format-extra-ar"
-    "gs\030format-invalid-specifier\016format-non-iso\021format-nonliteral\017"
-    "format-pedantic\017format-security\nformat-y2k\022format-zero-length\010"
-    "format=2\023four-char-constants\022frame-larger-than=%framework-include"
-    "-private-from-public\036function-def-in-objc-container\025function-mult"
-    "iversion\015future-compat\ngcc-compat\023global-constructors\003gnu\026"
-    "gnu-alignof-expression\024gnu-anonymous-struct\033gnu-array-member-pare"
-    "n-init\015gnu-auto-type\022gnu-binary-literal\016gnu-case-range\023gnu-"
-    "complex-integer gnu-compound-literal-initializer\037gnu-conditional-omi"
-    "tted-operand\016gnu-designator\025gnu-empty-initializer\020gnu-empty-st"
-    "ruct\036gnu-flexible-array-initializer\037gnu-flexible-array-union-memb"
-    "er\024gnu-folding-constant\026gnu-imaginary-constant\020gnu-include-nex"
-    "t\022gnu-label-as-value\023gnu-redeclared-enum\030gnu-statement-express"
-    "ion\025gnu-static-float-init$gnu-string-literal-operator-template\016gn"
-    "u-union-cast\"gnu-variable-sized-type-not-at-end\027gnu-zero-line-direc"
-    "tive!gnu-zero-variadic-macro-arguments\014header-guard\016header-hygien"
-    "e\025idiomatic-parentheses\022ignored-attributes\035ignored-optimizatio"
-    "n-argument\030ignored-pragma-intrinsic\027ignored-pragma-optimize\017ig"
-    "nored-pragmas\022ignored-qualifiers\010implicit\032implicit-atomic-prop"
-    "erties*implicit-conversion-floating-point-to-bool implicit-exception-sp"
-    "ec-mismatch\024implicit-fallthrough!implicit-fallthrough-per-function\037"
-    "implicit-fixed-point-conversion\031implicit-float-conversion\035implici"
-    "t-function-declaration\014implicit-int\027implicit-int-conversion\024im"
-    "plicit-retain-self\033implicitly-unsigned-literal\006import&import-prep"
-    "rocessor-directive-pedantic\021inaccessible-base\032include-next-absolu"
-    "te-path\033include-next-outside-header\033incompatible-exception-spec#i"
-    "ncompatible-function-pointer-types\"incompatible-library-redeclaration\026"
-    "incompatible-ms-struct\032incompatible-pointer-types.incompatible-point"
-    "er-types-discards-qualifiers\032incompatible-property-type\024incompati"
-    "ble-sysroot'incomplete-framework-module-declaration\031incomplete-imple"
-    "mentation\021incomplete-module\023incomplete-umbrella\026inconsistent-d"
-    "llimport(inconsistent-missing-destructor-override\035inconsistent-missi"
-    "ng-override\016increment-bool\022infinite-recursion\tinit-self\025initi"
-    "alizer-overrides\023injected-class-name\006inline\ninline-asm\021inline"
-    "-new-delete\"instantiation-after-specialization\016int-conversion\017in"
-    "t-conversions\023int-to-pointer-cast\030int-to-void-pointer-cast\020int"
-    "eger-overflow\035invalid-command-line-argument\021invalid-constexpr\020"
-    "invalid-iboutlet&invalid-initializer-from-system-header\035invalid-ios-"
-    "deployment-target\020invalid-noreturn\020invalid-offsetof invalid-or-no"
-    "nexistent-directory\036invalid-partial-specialization\013invalid-pch\020"
-    "invalid-pp-token\027invalid-source-encoding\023invalid-token-paste\020j"
-    "ump-seh-finally\016keyword-compat\015keyword-macro\026knr-promoted-para"
-    "meter\030language-extension-token\023large-by-value-copy\006liblto\022l"
-    "iteral-conversion\015literal-range\030local-type-template-args\027logic"
-    "al-not-parentheses\026logical-op-parentheses\tlong-long\015loop-analysi"
-    "s\017macro-redefined\004main\020main-return-type\027malformed-warning-c"
-    "heck\036many-braces-around-scalar-init\021max-unsigned-zero\026memset-t"
-    "ransposed-args\022memsize-comparison\021method-signatures\tmicrosoft\022"
-    "microsoft-anon-tag\016microsoft-cast\021microsoft-charize\027microsoft-"
-    "comment-paste\024microsoft-const-init\023microsoft-cpp-macro\"microsoft"
-    "-default-arg-redefinition\025microsoft-end-of-file microsoft-enum-forwa"
-    "rd-reference\024microsoft-enum-value\030microsoft-exception-spec\020mic"
-    "rosoft-exists#microsoft-explicit-constructor-call\035microsoft-extra-qu"
-    "alification\024microsoft-fixed-enum\030microsoft-flexible-array\016micr"
-    "osoft-goto\033microsoft-inaccessible-base\021microsoft-include\033micro"
-    "soft-mutable-reference\031microsoft-pure-definition\032microsoft-redecl"
-    "are-static\020microsoft-sealed\022microsoft-template microsoft-union-me"
-    "mber-reference\034microsoft-unqualified-friend\024microsoft-using-decl\032"
+    "lability\030avr-rtlib-linking-quirks\016backend-plugin\030backslash-new"
+    "line-escape\021bad-function-cast\016binary-literal\026bind-to-temporary"
+    "-copy\024binding-in-condition\034bitfield-constant-conversion\030bitfie"
+    "ld-enum-conversion\016bitfield-width\026bitwise-op-parentheses\033block"
+    "-capture-autoreleasing\017bool-conversion\020bool-conversions\022braced"
+    "-scalar-init\013bridge-cast\027builtin-macro-redefined\027builtin-memcp"
+    "y-chk-size\027builtin-requires-header\nc++-compat\014c++0x-compat\020c+"
+    "+0x-extensions\017c++0x-narrowing\014c++11-compat(c++11-compat-deprecat"
+    "ed-writable-strings\025c++11-compat-pedantic*c++11-compat-reserved-user"
+    "-defined-literal\020c++11-extensions\020c++11-extra-semi\026c++11-inlin"
+    "e-namespace\017c++11-long-long\017c++11-narrowing\024c++14-binary-liter"
+    "al\014c++14-compat\025c++14-compat-pedantic\020c++14-extensions\014c++1"
+    "7-compat\025c++17-compat-mangling\025c++17-compat-pedantic\020c++17-ext"
+    "ensions\020c++1y-extensions\014c++1z-compat\025c++1z-compat-mangling\020"
+    "c++1z-extensions\014c++2a-compat\025c++2a-compat-pedantic\020c++2a-exte"
+    "nsions\036c++98-c++11-c++14-c++17-compat'c++98-c++11-c++14-c++17-compat"
+    "-pedantic\030c++98-c++11-c++14-compat!c++98-c++11-c++14-compat-pedantic"
+    "\022c++98-c++11-compat!c++98-c++11-compat-binary-literal\033c++98-c++11"
+    "-compat-pedantic\014c++98-compat#c++98-compat-bind-to-temporary-copy\027"
+    "c++98-compat-extra-semi%c++98-compat-local-type-template-args\025c++98-"
+    "compat-pedantic'c++98-compat-unnamed-type-template-args\016c11-extensio"
+    "ns\nc99-compat\016c99-extensions#call-to-pure-virtual-from-ctor-dtor\nc"
+    "ast-align\027cast-calling-convention\020cast-of-sel-type\tcast-qual\023"
+    "cast-qual-unrelated\nchar-align\017char-subscripts\014clang-cl-pch\015c"
+    "lass-varargs\005comma\007comment\010comments\036compare-distinct-pointe"
+    "r-types\026complex-component-init\031conditional-type-mismatch\031condi"
+    "tional-uninitialized\015config-macros\023constant-conversion\030constan"
+    "t-logical-operand\023constexpr-not-const\010consumed\nconversion\017con"
+    "version-null\tcoroutine%coroutine-missing-unhandled-exception\026covere"
+    "d-switch-default\003cpp\030cstring-format-directive\026ctad-maybe-unsup"
+    "ported\021ctor-dtor-privacy\003ctu\013cuda-compat\030custom-atomic-prop"
+    "erties\010dangling\015dangling-else\016dangling-field\031dangling-initi"
+    "alizer-list\023darwin-sdk-settings\tdate-time\023dealloc-in-category\035"
+    "debug-compression-unavailable\033declaration-after-statement\032default"
+    "ed-function-deleted\026delegating-ctor-cycles delete-abstract-non-virtu"
+    "al-dtor\021delete-incomplete$delete-non-abstract-non-virtual-dtor\027de"
+    "lete-non-virtual-dtor\ndeprecated\025deprecated-attributes\027deprecate"
+    "d-declarations!deprecated-dynamic-exception-spec\032deprecated-implemen"
+    "tations\031deprecated-increment-bool\031deprecated-objc-isa-usage%depre"
+    "cated-objc-pointer-introspection5deprecated-objc-pointer-introspection-"
+    "performSelector\023deprecated-register\027deprecated-this-capture\033de"
+    "precated-writable-strings\022direct-ivar-access\030disabled-macro-expan"
+    "sion\025disabled-optimization\014discard-qual\034distributed-object-mod"
+    "ifiers\013div-by-zero\020division-by-zero\036dll-attribute-on-redeclara"
+    "tion%dllexport-explicit-instantiation-decl\032dllimport-static-field-de"
+    "f\015documentation\035documentation-deprecated-sync\022documentation-ht"
+    "ml\026documentation-pedantic\035documentation-unknown-command\036dollar"
+    "-in-identifier-extension\020double-promotion\030duplicate-decl-specifie"
+    "r\016duplicate-enum\024duplicate-method-arg\026duplicate-method-match\022"
+    "duplicate-protocol\027dynamic-class-memaccess\026dynamic-exception-spec"
+    "\006effc++\022embedded-directive\nempty-body\023empty-decomposition\017"
+    "empty-init-stmt\026empty-translation-unit\013encode-type\014endif-label"
+    "s\014enum-compare\023enum-compare-switch\017enum-conversion\016enum-too"
+    "-large\nexceptions\025exit-time-destructors\024expansion-to-defined\021"
+    "experimental-isel\030explicit-initialize-call\027explicit-ownership-typ"
+    "e\016export-unnamed\026export-using-directive\017extern-c-compat\022ext"
+    "ern-initializer\005extra\023extra-qualification\nextra-semi\017extra-se"
+    "mi-stmt\014extra-tokens\010fallback\024fixed-enum-extension\tflag-enum\031"
+    "flexible-array-extensions\020float-conversion\013float-equal\031float-o"
+    "verflow-conversion\025float-zero-conversion\021for-loop-analysis\006for"
+    "mat\021format-extra-args\030format-invalid-specifier\016format-non-iso\021"
+    "format-nonliteral\017format-pedantic\017format-security\nformat-y2k\022"
+    "format-zero-length\010format=2\016fortify-source\023four-char-constants"
+    "\022frame-larger-than=%framework-include-private-from-public\036functio"
+    "n-def-in-objc-container\025function-multiversion\015future-compat\ngcc-"
+    "compat\023global-constructors\003gnu\026gnu-alignof-expression\024gnu-a"
+    "nonymous-struct\033gnu-array-member-paren-init\015gnu-auto-type\022gnu-"
+    "binary-literal\016gnu-case-range\023gnu-complex-integer gnu-compound-li"
+    "teral-initializer\037gnu-conditional-omitted-operand\016gnu-designator\025"
+    "gnu-empty-initializer\020gnu-empty-struct\036gnu-flexible-array-initial"
+    "izer\037gnu-flexible-array-union-member\024gnu-folding-constant\026gnu-"
+    "imaginary-constant\020gnu-include-next\022gnu-label-as-value\023gnu-red"
+    "eclared-enum\030gnu-statement-expression\025gnu-static-float-init$gnu-s"
+    "tring-literal-operator-template\016gnu-union-cast\"gnu-variable-sized-t"
+    "ype-not-at-end\027gnu-zero-line-directive!gnu-zero-variadic-macro-argum"
+    "ents\014header-guard\016header-hygiene\025idiomatic-parentheses\022igno"
+    "red-attributes\035ignored-optimization-argument\030ignored-pragma-intri"
+    "nsic\027ignored-pragma-optimize\017ignored-pragmas\022ignored-qualifier"
+    "s\010implicit\032implicit-atomic-properties*implicit-conversion-floatin"
+    "g-point-to-bool implicit-exception-spec-mismatch\024implicit-fallthroug"
+    "h!implicit-fallthrough-per-function\037implicit-fixed-point-conversion\031"
+    "implicit-float-conversion\035implicit-function-declaration\014implicit-"
+    "int\027implicit-int-conversion\024implicit-retain-self\033implicitly-un"
+    "signed-literal\006import&import-preprocessor-directive-pedantic\021inac"
+    "cessible-base\032include-next-absolute-path\033include-next-outside-hea"
+    "der\033incompatible-exception-spec#incompatible-function-pointer-types\""
+    "incompatible-library-redeclaration\026incompatible-ms-struct\032incompa"
+    "tible-pointer-types.incompatible-pointer-types-discards-qualifiers\032i"
+    "ncompatible-property-type\024incompatible-sysroot'incomplete-framework-"
+    "module-declaration\031incomplete-implementation\021incomplete-module\023"
+    "incomplete-umbrella\026inconsistent-dllimport(inconsistent-missing-dest"
+    "ructor-override\035inconsistent-missing-override\016increment-bool\022i"
+    "nfinite-recursion\tinit-self\025initializer-overrides\023injected-class"
+    "-name\006inline\ninline-asm\021inline-new-delete\"instantiation-after-s"
+    "pecialization\016int-conversion\017int-conversions\023int-to-pointer-ca"
+    "st\030int-to-void-pointer-cast\020integer-overflow\035invalid-command-l"
+    "ine-argument\021invalid-constexpr\020invalid-iboutlet&invalid-initializ"
+    "er-from-system-header\035invalid-ios-deployment-target\020invalid-noret"
+    "urn\020invalid-offsetof invalid-or-nonexistent-directory\036invalid-par"
+    "tial-specialization\013invalid-pch\020invalid-pp-token\027invalid-sourc"
+    "e-encoding\023invalid-token-paste\020jump-seh-finally\016keyword-compat"
+    "\015keyword-macro\026knr-promoted-parameter\030language-extension-token"
+    "\023large-by-value-copy\006liblto\022literal-conversion\015literal-rang"
+    "e\030local-type-template-args\027logical-not-parentheses\026logical-op-"
+    "parentheses\tlong-long\015loop-analysis\017macro-redefined\004main\020m"
+    "ain-return-type\027malformed-warning-check\036many-braces-around-scalar"
+    "-init\021max-unsigned-zero\026memset-transposed-args\022memsize-compari"
+    "son\021method-signatures\tmicrosoft\022microsoft-anon-tag\016microsoft-"
+    "cast\021microsoft-charize\027microsoft-comment-paste\024microsoft-const"
+    "-init\023microsoft-cpp-macro\"microsoft-default-arg-redefinition\031mic"
+    "rosoft-drectve-section\025microsoft-end-of-file microsoft-enum-forward-"
+    "reference\024microsoft-enum-value\030microsoft-exception-spec\020micros"
+    "oft-exists#microsoft-explicit-constructor-call\035microsoft-extra-quali"
+    "fication\024microsoft-fixed-enum\030microsoft-flexible-array\016microso"
+    "ft-goto\033microsoft-inaccessible-base\021microsoft-include\033microsof"
+    "t-mutable-reference\031microsoft-pure-definition\032microsoft-redeclare"
+    "-static\020microsoft-sealed\022microsoft-template microsoft-union-membe"
+    "r-reference\034microsoft-unqualified-friend\024microsoft-using-decl\032"
     "microsoft-void-pseudo-dtor\025mismatched-new-delete\032mismatched-param"
     "eter-types\027mismatched-return-types\017mismatched-tags\016missing-bra"
     "ces\024missing-declarations\026missing-exception-spec\032missing-field-"
@@ -929,22 +942,23 @@
     "sing-method-return-type\020missing-noescape\020missing-noreturn\030miss"
     "ing-prototype-for-cc\022missing-prototypes\025missing-selector-name\017"
     "missing-sysroot\035missing-variable-declarations\014module-build\017mod"
-    "ule-conflict\033module-file-config-mismatch\025module-file-extension\031"
-    "module-import-in-extern-c\"modules-ambiguous-internal-linkage\037module"
-    "s-import-nested-redundant\004most\004move\014msvc-include\016msvc-not-f"
-    "ound\tmultichar\023multiple-move-vbase\tnarrowing\021nested-anon-types\016"
-    "nested-externs\020new-returns-null\013newline-eof\007noderef\015noexcep"
-    "t-type\007non-gcc\033non-literal-null-conversion'non-modular-include-in"
-    "-framework-module\035non-modular-include-in-module\017non-pod-varargs\020"
-    "non-virtual-dtor\007nonnull\025nonportable-cfstrings\030nonportable-inc"
-    "lude-path\037nonportable-system-include-path!nonportable-vector-initial"
-    "ization\024nontrivial-memaccess\023nsconsumed-mismatch\022nsreturns-mis"
-    "match\017null-arithmetic\016null-character\017null-conversion\020null-d"
-    "ereference\027null-pointer-arithmetic\013nullability\030nullability-com"
-    "pleteness\"nullability-completeness-on-arrays\024nullability-declspec\025"
-    "nullability-extension#nullability-inferred-on-nested-type\036nullable-t"
-    "o-nonnull-conversion+objc-autosynthesis-property-ivar-name-match\027obj"
-    "c-circular-container\016objc-cocoa-api\034objc-designated-initializers\023"
+    "ule-conflict\033module-file-config-mismatch\025module-file-extension\015"
+    "module-import\031module-import-in-extern-c\"modules-ambiguous-internal-"
+    "linkage\037modules-import-nested-redundant\004most\004move\014msvc-incl"
+    "ude\016msvc-not-found\tmultichar\023multiple-move-vbase\tnarrowing\021n"
+    "ested-anon-types\016nested-externs\020new-returns-null\013newline-eof\007"
+    "noderef\015noexcept-type\007non-gcc\033non-literal-null-conversion'non-"
+    "modular-include-in-framework-module\035non-modular-include-in-module\017"
+    "non-pod-varargs\020non-virtual-dtor\007nonnull\025nonportable-cfstrings"
+    "\030nonportable-include-path\037nonportable-system-include-path!nonport"
+    "able-vector-initialization\024nontrivial-memaccess\023nsconsumed-mismat"
+    "ch\022nsreturns-mismatch\017null-arithmetic\016null-character\017null-c"
+    "onversion\020null-dereference\027null-pointer-arithmetic\013nullability"
+    "\030nullability-completeness\"nullability-completeness-on-arrays\024nul"
+    "lability-declspec\025nullability-extension#nullability-inferred-on-nest"
+    "ed-type\036nullable-to-nonnull-conversion+objc-autosynthesis-property-i"
+    "var-name-match\035objc-bool-constant-conversion\013objc-boxing\027objc-"
+    "circular-container\016objc-cocoa-api\034objc-designated-initializers\023"
     "objc-flexible-array\037objc-forward-class-redefinition\024objc-interfac"
     "e-ivars\024objc-literal-compare\027objc-literal-conversion\027objc-macr"
     "o-redefinition\021objc-messaging-id\022objc-method-access\037objc-missi"
@@ -1005,23 +1019,24 @@
     "us-memaccess\006switch\013switch-bool\016switch-default\013switch-enum%"
     "sync-fetch-and-nand-semantics-changed\005synth\024tautological-compare\035"
     "tautological-constant-compare&tautological-constant-in-range-compare*ta"
-    "utological-constant-out-of-range-compare\034tautological-overlap-compar"
-    "e\034tautological-pointer-compare\037tautological-type-limit-compare\036"
-    "tautological-undefined-compare'tautological-unsigned-enum-zero-compare\""
-    "tautological-unsigned-zero-compare$tentative-definition-incomplete-type"
-    "\015thread-safety\026thread-safety-analysis\030thread-safety-attributes"
-    "\022thread-safety-beta\026thread-safety-negative\025thread-safety-preci"
-    "se\027thread-safety-reference\025thread-safety-verbose\ttrigraphs\013ty"
-    "pe-limits\013type-safety\024typedef-redefinition\020typename-missing\031"
-    "unable-to-open-stats-file\030unavailable-declarations\023undeclared-sel"
-    "ector\005undef\031undefined-bool-conversion\027undefined-func-template\020"
-    "undefined-inline\022undefined-internal\027undefined-internal-type\032un"
-    "defined-reinterpret-cast\026undefined-var-template\026unevaluated-expre"
-    "ssion\026unguarded-availability\032unguarded-availability-new\007unicod"
-    "e\021unicode-homoglyph\022unicode-whitespace\022unicode-zero-width\015u"
-    "ninitialized\020unknown-argument\022unknown-attributes\027unknown-escap"
-    "e-sequence\017unknown-pragmas\022unknown-sanitizers\026unknown-warning-"
-    "option\032unnamed-type-template-args\035unneeded-internal-declaration\030"
+    "utological-constant-out-of-range-compare\036tautological-objc-bool-comp"
+    "are\034tautological-overlap-compare\034tautological-pointer-compare\037"
+    "tautological-type-limit-compare\036tautological-undefined-compare'tauto"
+    "logical-unsigned-enum-zero-compare\"tautological-unsigned-zero-compare$"
+    "tentative-definition-incomplete-type\015thread-safety\026thread-safety-"
+    "analysis\030thread-safety-attributes\022thread-safety-beta\026thread-sa"
+    "fety-negative\025thread-safety-precise\027thread-safety-reference\025th"
+    "read-safety-verbose\ttrigraphs\013type-limits\013type-safety\024typedef"
+    "-redefinition\020typename-missing\031unable-to-open-stats-file\030unava"
+    "ilable-declarations\023undeclared-selector\005undef\031undefined-bool-c"
+    "onversion\027undefined-func-template\020undefined-inline\022undefined-i"
+    "nternal\027undefined-internal-type\032undefined-reinterpret-cast\026und"
+    "efined-var-template\035underaligned-exception-object\026unevaluated-exp"
+    "ression\026unguarded-availability\032unguarded-availability-new\007unic"
+    "ode\021unicode-homoglyph\022unicode-whitespace\022unicode-zero-width\015"
+    "uninitialized\020unknown-argument\022unknown-attributes\027unknown-esca"
+    "pe-sequence\017unknown-pragmas\022unknown-sanitizers\026unknown-warning"
+    "-option\032unnamed-type-template-args\035unneeded-internal-declaration\030"
     "unneeded-member-function\020unreachable-code\033unreachable-code-aggres"
     "sive\026unreachable-code-break\037unreachable-code-loop-increment\027un"
     "reachable-code-return\013unsequenced\017unsupported-abs\036unsupported-"
@@ -1099,713 +1114,723 @@
   { /* auto-storage-class */                                    955, /* DiagArray50 */ 90, /* Empty */         0 },
   { /* auto-var-id */                                           974, /* DiagArray51 */ 92, /* Empty */         0 },
   { /* availability */                                          986, /* DiagArray52 */ 94, /* Empty */         0 },
-  { /* backend-plugin */                                        999, /* DiagArray53 */ 104, /* Empty */         0 },
-  { /* backslash-newline-escape */                              1014, /* DiagArray54 */ 106, /* Empty */         0 },
-  { /* bad-function-cast */                                     1039, /* DiagArray55 */ 108, /* Empty */         0 },
-  { /* binary-literal */                                        1057, /* Empty */     0, /* DiagSubGroup56 */ 30 },
-  { /* bind-to-temporary-copy */                                1072, /* DiagArray57 */ 110, /* DiagSubGroup57 */ 34 },
-  { /* binding-in-condition */                                  1095, /* DiagArray58 */ 113, /* Empty */         0 },
-  { /* bitfield-constant-conversion */                          1116, /* DiagArray59 */ 115, /* Empty */         0 },
-  { /* bitfield-enum-conversion */                              1145, /* DiagArray60 */ 117, /* Empty */         0 },
-  { /* bitfield-width */                                        1170, /* DiagArray61 */ 121, /* Empty */         0 },
-  { /* bitwise-op-parentheses */                                1185, /* DiagArray62 */ 124, /* Empty */         0 },
-  { /* block-capture-autoreleasing */                           1208, /* DiagArray63 */ 126, /* Empty */         0 },
-  { /* bool-conversion */                                       1236, /* DiagArray64 */ 128, /* DiagSubGroup64 */ 36 },
-  { /* bool-conversions */                                      1252, /* Empty */     0, /* DiagSubGroup65 */ 39 },
-  { /* braced-scalar-init */                                    1269, /* DiagArray66 */ 130, /* Empty */         0 },
-  { /* bridge-cast */                                           1288, /* DiagArray67 */ 132, /* Empty */         0 },
-  { /* builtin-macro-redefined */                               1300, /* DiagArray68 */ 135, /* Empty */         0 },
-  { /* builtin-memcpy-chk-size */                               1324, /* DiagArray69 */ 138, /* Empty */         0 },
-  { /* builtin-requires-header */                               1348, /* DiagArray70 */ 140, /* Empty */         0 },
-  { /* c++-compat */                                            1372, /* DiagArray71 */ 142, /* Empty */         0 },
-  { /* c++0x-compat */                                          1383, /* Empty */     0, /* DiagSubGroup72 */ 41 },
-  { /* c++0x-extensions */                                      1396, /* Empty */     0, /* DiagSubGroup73 */ 43 },
-  { /* c++0x-narrowing */                                       1413, /* Empty */     0, /* DiagSubGroup74 */ 45 },
-  { /* c++11-compat */                                          1429, /* DiagArray75 */ 144, /* DiagSubGroup75 */ 47 },
-  { /* c++11-compat-deprecated-writable-strings */              1442, /* DiagArray76 */ 155, /* Empty */         0 },
-  { /* c++11-compat-pedantic */                                 1483, /* Empty */     0, /* DiagSubGroup77 */ 54 },
-  { /* c++11-compat-reserved-user-defined-literal */            1505, /* DiagArray78 */ 157, /* Empty */         0 },
-  { /* c++11-extensions */                                      1548, /* DiagArray79 */ 159, /* DiagSubGroup79 */ 59 },
-  { /* c++11-extra-semi */                                      1565, /* DiagArray80 */ 185, /* Empty */         0 },
-  { /* c++11-inline-namespace */                                1582, /* DiagArray81 */ 187, /* Empty */         0 },
-  { /* c++11-long-long */                                       1605, /* DiagArray82 */ 189, /* Empty */         0 },
-  { /* c++11-narrowing */                                       1621, /* DiagArray83 */ 191, /* Empty */         0 },
-  { /* c++14-binary-literal */                                  1637, /* DiagArray84 */ 199, /* Empty */         0 },
-  { /* c++14-compat */                                          1658, /* Empty */     0, /* DiagSubGroup85 */ 63 },
-  { /* c++14-compat-pedantic */                                 1671, /* Empty */     0, /* DiagSubGroup86 */ 66 },
-  { /* c++14-extensions */                                      1693, /* DiagArray87 */ 201, /* DiagSubGroup87 */ 70 },
-  { /* c++17-compat */                                          1710, /* Empty */     0, /* DiagSubGroup88 */ 72 },
-  { /* c++17-compat-mangling */                                 1723, /* DiagArray89 */ 210, /* Empty */         0 },
-  { /* c++17-compat-pedantic */                                 1745, /* Empty */     0, /* DiagSubGroup90 */ 77 },
-  { /* c++17-extensions */                                      1767, /* DiagArray91 */ 212, /* Empty */         0 },
-  { /* c++1y-extensions */                                      1784, /* Empty */     0, /* DiagSubGroup92 */ 80 },
-  { /* c++1z-compat */                                          1801, /* Empty */     0, /* DiagSubGroup93 */ 82 },
-  { /* c++1z-compat-mangling */                                 1814, /* Empty */     0, /* DiagSubGroup94 */ 84 },
-  { /* c++1z-extensions */                                      1836, /* Empty */     0, /* DiagSubGroup95 */ 86 },
-  { /* c++2a-compat */                                          1853, /* DiagArray96 */ 231, /* Empty */         0 },
-  { /* c++2a-compat-pedantic */                                 1866, /* Empty */     0, /* DiagSubGroup97 */ 88 },
-  { /* c++2a-extensions */                                      1888, /* DiagArray98 */ 236, /* Empty */         0 },
-  { /* c++98-c++11-c++14-c++17-compat */                        1905, /* DiagArray99 */ 244, /* Empty */         0 },
-  { /* c++98-c++11-c++14-c++17-compat-pedantic */               1936, /* DiagArray100 */ 255, /* DiagSubGroup100 */ 90 },
-  { /* c++98-c++11-c++14-compat */                              1976, /* DiagArray101 */ 257, /* Empty */         0 },
-  { /* c++98-c++11-c++14-compat-pedantic */                     2001, /* DiagArray102 */ 275, /* DiagSubGroup102 */ 92 },
-  { /* c++98-c++11-compat */                                    2035, /* DiagArray103 */ 278, /* Empty */         0 },
-  { /* c++98-c++11-compat-binary-literal */                     2054, /* DiagArray104 */ 290, /* Empty */         0 },
-  { /* c++98-c++11-compat-pedantic */                           2088, /* Empty */     0, /* DiagSubGroup105 */ 94 },
-  { /* c++98-compat */                                          2116, /* DiagArray106 */ 292, /* DiagSubGroup106 */ 97 },
-  { /* c++98-compat-bind-to-temporary-copy */                   2129, /* DiagArray107 */ 352, /* Empty */         0 },
-  { /* c++98-compat-extra-semi */                               2165, /* DiagArray108 */ 354, /* Empty */         0 },
-  { /* c++98-compat-local-type-template-args */                 2189, /* DiagArray109 */ 356, /* Empty */         0 },
-  { /* c++98-compat-pedantic */                                 2227, /* DiagArray110 */ 358, /* DiagSubGroup110 */ 103 },
-  { /* c++98-compat-unnamed-type-template-args */               2249, /* DiagArray111 */ 368, /* Empty */         0 },
-  { /* c11-extensions */                                        2289, /* DiagArray112 */ 370, /* Empty */         0 },
-  { /* c99-compat */                                            2304, /* DiagArray113 */ 377, /* Empty */         0 },
-  { /* c99-extensions */                                        2315, /* DiagArray114 */ 381, /* Empty */         0 },
-  { /* call-to-pure-virtual-from-ctor-dtor */                   2330, /* DiagArray115 */ 392, /* Empty */         0 },
-  { /* cast-align */                                            2366, /* DiagArray116 */ 394, /* Empty */         0 },
-  { /* cast-calling-convention */                               2377, /* DiagArray117 */ 396, /* Empty */         0 },
-  { /* cast-of-sel-type */                                      2401, /* DiagArray118 */ 398, /* Empty */         0 },
-  { /* cast-qual */                                             2418, /* DiagArray119 */ 400, /* Empty */         0 },
-  { /* cast-qual-unrelated */                                   2428, /* DiagArray120 */ 403, /* Empty */         0 },
-  { /* char-align */                                            2448, /* Empty */     0, /* Empty */         0 },
-  { /* char-subscripts */                                       2459, /* DiagArray122 */ 405, /* Empty */         0 },
-  { /* clang-cl-pch */                                          2475, /* DiagArray123 */ 408, /* Empty */         0 },
-  { /* class-varargs */                                         2488, /* DiagArray124 */ 414, /* DiagSubGroup124 */ 110 },
-  { /* comma */                                                 2502, /* DiagArray125 */ 416, /* Empty */         0 },
-  { /* comment */                                               2508, /* DiagArray126 */ 418, /* Empty */         0 },
-  { /* comments */                                              2516, /* Empty */     0, /* DiagSubGroup127 */ 112 },
-  { /* compare-distinct-pointer-types */                        2525, /* DiagArray128 */ 423, /* Empty */         0 },
-  { /* complex-component-init */                                2556, /* DiagArray129 */ 425, /* Empty */         0 },
-  { /* conditional-type-mismatch */                             2579, /* DiagArray130 */ 427, /* Empty */         0 },
-  { /* conditional-uninitialized */                             2605, /* DiagArray131 */ 429, /* Empty */         0 },
-  { /* config-macros */                                         2631, /* DiagArray132 */ 431, /* Empty */         0 },
-  { /* constant-conversion */                                   2645, /* DiagArray133 */ 433, /* DiagSubGroup133 */ 114 },
-  { /* constant-logical-operand */                              2665, /* DiagArray134 */ 435, /* Empty */         0 },
-  { /* constexpr-not-const */                                   2690, /* DiagArray135 */ 437, /* Empty */         0 },
-  { /* consumed */                                              2710, /* DiagArray136 */ 439, /* Empty */         0 },
-  { /* conversion */                                            2719, /* DiagArray137 */ 448, /* DiagSubGroup137 */ 116 },
-  { /* conversion-null */                                       2730, /* Empty */     0, /* DiagSubGroup138 */ 132 },
-  { /* coroutine */                                             2746, /* Empty */     0, /* DiagSubGroup139 */ 134 },
-  { /* coroutine-missing-unhandled-exception */                 2756, /* DiagArray140 */ 454, /* Empty */         0 },
-  { /* covered-switch-default */                                2794, /* DiagArray141 */ 456, /* Empty */         0 },
-  { /* cpp */                                                   2817, /* Empty */     0, /* DiagSubGroup142 */ 136 },
-  { /* cstring-format-directive */                              2821, /* DiagArray143 */ 458, /* Empty */         0 },
-  { /* ctad-maybe-unsupported */                                2846, /* DiagArray144 */ 460, /* Empty */         0 },
-  { /* ctor-dtor-privacy */                                     2869, /* Empty */     0, /* Empty */         0 },
-  { /* ctu */                                                   2887, /* DiagArray146 */ 462, /* Empty */         0 },
-  { /* cuda-compat */                                           2891, /* DiagArray147 */ 464, /* Empty */         0 },
-  { /* custom-atomic-properties */                              2903, /* DiagArray148 */ 470, /* Empty */         0 },
-  { /* dangling */                                              2928, /* DiagArray149 */ 472, /* DiagSubGroup149 */ 138 },
-  { /* dangling-else */                                         2937, /* DiagArray150 */ 475, /* Empty */         0 },
-  { /* dangling-field */                                        2951, /* DiagArray151 */ 477, /* Empty */         0 },
-  { /* dangling-initializer-list */                             2966, /* DiagArray152 */ 482, /* Empty */         0 },
-  { /* darwin-sdk-settings */                                   2992, /* DiagArray153 */ 484, /* Empty */         0 },
-  { /* date-time */                                             3012, /* DiagArray154 */ 486, /* Empty */         0 },
-  { /* dealloc-in-category */                                   3022, /* DiagArray155 */ 488, /* Empty */         0 },
-  { /* debug-compression-unavailable */                         3042, /* DiagArray156 */ 490, /* Empty */         0 },
-  { /* declaration-after-statement */                           3072, /* DiagArray157 */ 492, /* Empty */         0 },
-  { /* defaulted-function-deleted */                            3100, /* DiagArray158 */ 494, /* Empty */         0 },
-  { /* delegating-ctor-cycles */                                3127, /* DiagArray159 */ 496, /* Empty */         0 },
-  { /* delete-abstract-non-virtual-dtor */                      3150, /* DiagArray160 */ 498, /* Empty */         0 },
-  { /* delete-incomplete */                                     3183, /* DiagArray161 */ 500, /* Empty */         0 },
-  { /* delete-non-abstract-non-virtual-dtor */                  3201, /* DiagArray162 */ 503, /* Empty */         0 },
-  { /* delete-non-virtual-dtor */                               3238, /* Empty */     0, /* DiagSubGroup163 */ 142 },
-  { /* deprecated */                                            3262, /* DiagArray164 */ 505, /* DiagSubGroup164 */ 145 },
-  { /* deprecated-attributes */                                 3273, /* DiagArray165 */ 514, /* Empty */         0 },
-  { /* deprecated-declarations */                               3295, /* DiagArray166 */ 516, /* Empty */         0 },
-  { /* deprecated-dynamic-exception-spec */                     3319, /* DiagArray167 */ 523, /* Empty */         0 },
-  { /* deprecated-implementations */                            3353, /* DiagArray168 */ 525, /* Empty */         0 },
-  { /* deprecated-increment-bool */                             3380, /* DiagArray169 */ 528, /* Empty */         0 },
-  { /* deprecated-objc-isa-usage */                             3406, /* DiagArray170 */ 530, /* Empty */         0 },
-  { /* deprecated-objc-pointer-introspection */                 3432, /* DiagArray171 */ 533, /* DiagSubGroup171 */ 153 },
-  { /* deprecated-objc-pointer-introspection-performSelector */ 3470, /* DiagArray172 */ 535, /* Empty */         0 },
-  { /* deprecated-register */                                   3524, /* DiagArray173 */ 537, /* Empty */         0 },
-  { /* deprecated-this-capture */                               3544, /* DiagArray174 */ 539, /* Empty */         0 },
-  { /* deprecated-writable-strings */                           3568, /* Empty */     0, /* DiagSubGroup175 */ 155 },
-  { /* direct-ivar-access */                                    3596, /* DiagArray176 */ 541, /* Empty */         0 },
-  { /* disabled-macro-expansion */                              3615, /* DiagArray177 */ 543, /* Empty */         0 },
-  { /* disabled-optimization */                                 3640, /* Empty */     0, /* Empty */         0 },
-  { /* discard-qual */                                          3662, /* Empty */     0, /* Empty */         0 },
-  { /* distributed-object-modifiers */                          3675, /* DiagArray180 */ 545, /* Empty */         0 },
-  { /* div-by-zero */                                           3704, /* Empty */     0, /* DiagSubGroup181 */ 157 },
-  { /* division-by-zero */                                      3716, /* DiagArray182 */ 548, /* Empty */         0 },
-  { /* dll-attribute-on-redeclaration */                        3733, /* DiagArray183 */ 550, /* Empty */         0 },
-  { /* dllexport-explicit-instantiation-decl */                 3764, /* DiagArray184 */ 552, /* Empty */         0 },
-  { /* dllimport-static-field-def */                            3802, /* DiagArray185 */ 554, /* Empty */         0 },
-  { /* documentation */                                         3829, /* DiagArray186 */ 556, /* DiagSubGroup186 */ 159 },
-  { /* documentation-deprecated-sync */                         3843, /* DiagArray187 */ 575, /* Empty */         0 },
-  { /* documentation-html */                                    3873, /* DiagArray188 */ 577, /* Empty */         0 },
-  { /* documentation-pedantic */                                3892, /* DiagArray189 */ 582, /* DiagSubGroup189 */ 162 },
-  { /* documentation-unknown-command */                         3915, /* DiagArray190 */ 584, /* Empty */         0 },
-  { /* dollar-in-identifier-extension */                        3945, /* DiagArray191 */ 587, /* Empty */         0 },
-  { /* double-promotion */                                      3976, /* DiagArray192 */ 589, /* Empty */         0 },
-  { /* duplicate-decl-specifier */                              3993, /* DiagArray193 */ 591, /* Empty */         0 },
-  { /* duplicate-enum */                                        4018, /* DiagArray194 */ 596, /* Empty */         0 },
-  { /* duplicate-method-arg */                                  4033, /* DiagArray195 */ 598, /* Empty */         0 },
-  { /* duplicate-method-match */                                4054, /* DiagArray196 */ 600, /* Empty */         0 },
-  { /* duplicate-protocol */                                    4077, /* DiagArray197 */ 602, /* Empty */         0 },
-  { /* dynamic-class-memaccess */                               4096, /* DiagArray198 */ 604, /* Empty */         0 },
-  { /* dynamic-exception-spec */                                4120, /* DiagArray199 */ 606, /* DiagSubGroup199 */ 164 },
-  { /* effc++ */                                                4143, /* Empty */     0, /* DiagSubGroup200 */ 166 },
-  { /* embedded-directive */                                    4150, /* DiagArray201 */ 608, /* Empty */         0 },
-  { /* empty-body */                                            4169, /* DiagArray202 */ 610, /* Empty */         0 },
-  { /* empty-decomposition */                                   4180, /* DiagArray203 */ 616, /* Empty */         0 },
-  { /* empty-init-stmt */                                       4200, /* DiagArray204 */ 618, /* Empty */         0 },
-  { /* empty-translation-unit */                                4216, /* DiagArray205 */ 620, /* Empty */         0 },
-  { /* encode-type */                                           4239, /* DiagArray206 */ 622, /* Empty */         0 },
-  { /* endif-labels */                                          4251, /* Empty */     0, /* DiagSubGroup207 */ 168 },
-  { /* enum-compare */                                          4264, /* DiagArray208 */ 624, /* DiagSubGroup208 */ 170 },
-  { /* enum-compare-switch */                                   4277, /* DiagArray209 */ 626, /* Empty */         0 },
-  { /* enum-conversion */                                       4297, /* DiagArray210 */ 628, /* Empty */         0 },
-  { /* enum-too-large */                                        4313, /* DiagArray211 */ 630, /* Empty */         0 },
-  { /* exceptions */                                            4328, /* DiagArray212 */ 633, /* Empty */         0 },
-  { /* exit-time-destructors */                                 4339, /* DiagArray213 */ 637, /* Empty */         0 },
-  { /* expansion-to-defined */                                  4361, /* DiagArray214 */ 639, /* Empty */         0 },
-  { /* experimental-isel */                                     4382, /* DiagArray215 */ 642, /* Empty */         0 },
-  { /* explicit-initialize-call */                              4400, /* DiagArray216 */ 645, /* Empty */         0 },
-  { /* explicit-ownership-type */                               4425, /* DiagArray217 */ 648, /* Empty */         0 },
-  { /* extern-c-compat */                                       4449, /* DiagArray218 */ 650, /* Empty */         0 },
-  { /* extern-initializer */                                    4465, /* DiagArray219 */ 652, /* Empty */         0 },
-  { /* extra */                                                 4484, /* DiagArray220 */ 654, /* DiagSubGroup220 */ 172 },
-  { /* extra-qualification */                                   4490, /* DiagArray221 */ 656, /* Empty */         0 },
-  { /* extra-semi */                                            4510, /* DiagArray222 */ 658, /* DiagSubGroup222 */ 182 },
-  { /* extra-semi-stmt */                                       4521, /* DiagArray223 */ 661, /* DiagSubGroup223 */ 185 },
-  { /* extra-tokens */                                          4537, /* DiagArray224 */ 663, /* Empty */         0 },
-  { /* fallback */                                              4550, /* DiagArray225 */ 666, /* Empty */         0 },
-  { /* fixed-enum-extension */                                  4559, /* DiagArray226 */ 668, /* Empty */         0 },
-  { /* flag-enum */                                             4580, /* DiagArray227 */ 670, /* Empty */         0 },
-  { /* flexible-array-extensions */                             4590, /* DiagArray228 */ 672, /* Empty */         0 },
-  { /* float-conversion */                                      4616, /* DiagArray229 */ 675, /* DiagSubGroup229 */ 187 },
-  { /* float-equal */                                           4633, /* DiagArray230 */ 677, /* Empty */         0 },
-  { /* float-overflow-conversion */                             4645, /* DiagArray231 */ 679, /* Empty */         0 },
-  { /* float-zero-conversion */                                 4671, /* DiagArray232 */ 682, /* Empty */         0 },
-  { /* for-loop-analysis */                                     4693, /* DiagArray233 */ 684, /* Empty */         0 },
-  { /* format */                                                4711, /* DiagArray234 */ 687, /* DiagSubGroup234 */ 190 },
-  { /* format-extra-args */                                     4718, /* DiagArray235 */ 713, /* Empty */         0 },
-  { /* format-invalid-specifier */                              4736, /* DiagArray236 */ 715, /* Empty */         0 },
-  { /* format-non-iso */                                        4761, /* DiagArray237 */ 717, /* Empty */         0 },
-  { /* format-nonliteral */                                     4776, /* DiagArray238 */ 721, /* Empty */         0 },
-  { /* format-pedantic */                                       4794, /* DiagArray239 */ 723, /* Empty */         0 },
-  { /* format-security */                                       4810, /* DiagArray240 */ 726, /* Empty */         0 },
-  { /* format-y2k */                                            4826, /* Empty */     0, /* Empty */         0 },
-  { /* format-zero-length */                                    4837, /* DiagArray242 */ 728, /* Empty */         0 },
-  { /* format=2 */                                              4856, /* Empty */     0, /* DiagSubGroup243 */ 197 },
-  { /* four-char-constants */                                   4865, /* DiagArray244 */ 730, /* Empty */         0 },
-  { /* frame-larger-than= */                                    4885, /* DiagArray245 */ 732, /* Empty */         0 },
-  { /* framework-include-private-from-public */                 4904, /* DiagArray246 */ 735, /* Empty */         0 },
-  { /* function-def-in-objc-container */                        4942, /* DiagArray247 */ 737, /* Empty */         0 },
-  { /* function-multiversion */                                 4973, /* DiagArray248 */ 739, /* Empty */         0 },
-  { /* future-compat */                                         4995, /* Empty */     0, /* Empty */         0 },
-  { /* gcc-compat */                                            5009, /* DiagArray250 */ 742, /* Empty */         0 },
-  { /* global-constructors */                                   5020, /* DiagArray251 */ 753, /* Empty */         0 },
-  { /* gnu */                                                   5040, /* Empty */     0, /* DiagSubGroup252 */ 201 },
-  { /* gnu-alignof-expression */                                5044, /* DiagArray253 */ 756, /* Empty */         0 },
-  { /* gnu-anonymous-struct */                                  5067, /* DiagArray254 */ 758, /* Empty */         0 },
-  { /* gnu-array-member-paren-init */                           5088, /* DiagArray255 */ 760, /* Empty */         0 },
-  { /* gnu-auto-type */                                         5116, /* DiagArray256 */ 762, /* Empty */         0 },
-  { /* gnu-binary-literal */                                    5130, /* DiagArray257 */ 764, /* Empty */         0 },
-  { /* gnu-case-range */                                        5149, /* DiagArray258 */ 766, /* Empty */         0 },
-  { /* gnu-complex-integer */                                   5164, /* DiagArray259 */ 768, /* Empty */         0 },
-  { /* gnu-compound-literal-initializer */                      5184, /* DiagArray260 */ 770, /* Empty */         0 },
-  { /* gnu-conditional-omitted-operand */                       5217, /* DiagArray261 */ 772, /* Empty */         0 },
-  { /* gnu-designator */                                        5249, /* DiagArray262 */ 774, /* Empty */         0 },
-  { /* gnu-empty-initializer */                                 5264, /* DiagArray263 */ 778, /* Empty */         0 },
-  { /* gnu-empty-struct */                                      5286, /* DiagArray264 */ 780, /* Empty */         0 },
-  { /* gnu-flexible-array-initializer */                        5303, /* DiagArray265 */ 784, /* Empty */         0 },
-  { /* gnu-flexible-array-union-member */                       5334, /* DiagArray266 */ 786, /* Empty */         0 },
-  { /* gnu-folding-constant */                                  5366, /* DiagArray267 */ 788, /* Empty */         0 },
-  { /* gnu-imaginary-constant */                                5387, /* DiagArray268 */ 792, /* Empty */         0 },
-  { /* gnu-include-next */                                      5410, /* DiagArray269 */ 794, /* Empty */         0 },
-  { /* gnu-label-as-value */                                    5427, /* DiagArray270 */ 796, /* Empty */         0 },
-  { /* gnu-redeclared-enum */                                   5446, /* DiagArray271 */ 799, /* Empty */         0 },
-  { /* gnu-statement-expression */                              5466, /* DiagArray272 */ 801, /* Empty */         0 },
-  { /* gnu-static-float-init */                                 5491, /* DiagArray273 */ 803, /* Empty */         0 },
-  { /* gnu-string-literal-operator-template */                  5513, /* DiagArray274 */ 805, /* Empty */         0 },
-  { /* gnu-union-cast */                                        5550, /* DiagArray275 */ 807, /* Empty */         0 },
-  { /* gnu-variable-sized-type-not-at-end */                    5565, /* DiagArray276 */ 809, /* Empty */         0 },
-  { /* gnu-zero-line-directive */                               5600, /* DiagArray277 */ 811, /* Empty */         0 },
-  { /* gnu-zero-variadic-macro-arguments */                     5624, /* DiagArray278 */ 813, /* Empty */         0 },
-  { /* header-guard */                                          5658, /* DiagArray279 */ 816, /* Empty */         0 },
-  { /* header-hygiene */                                        5671, /* DiagArray280 */ 818, /* Empty */         0 },
-  { /* idiomatic-parentheses */                                 5686, /* DiagArray281 */ 820, /* Empty */         0 },
-  { /* ignored-attributes */                                    5708, /* DiagArray282 */ 822, /* Empty */         0 },
-  { /* ignored-optimization-argument */                         5727, /* DiagArray283 */ 883, /* Empty */         0 },
-  { /* ignored-pragma-intrinsic */                              5757, /* DiagArray284 */ 886, /* Empty */         0 },
-  { /* ignored-pragma-optimize */                               5782, /* DiagArray285 */ 888, /* Empty */         0 },
-  { /* ignored-pragmas */                                       5806, /* DiagArray286 */ 890, /* DiagSubGroup286 */ 230 },
-  { /* ignored-qualifiers */                                    5822, /* DiagArray287 */ 933, /* Empty */         0 },
-  { /* implicit */                                              5841, /* Empty */     0, /* DiagSubGroup288 */ 233 },
-  { /* implicit-atomic-properties */                            5850, /* DiagArray289 */ 939, /* Empty */         0 },
-  { /* implicit-conversion-floating-point-to-bool */            5877, /* DiagArray290 */ 942, /* Empty */         0 },
-  { /* implicit-exception-spec-mismatch */                      5920, /* DiagArray291 */ 944, /* Empty */         0 },
-  { /* implicit-fallthrough */                                  5953, /* DiagArray292 */ 946, /* DiagSubGroup292 */ 236 },
-  { /* implicit-fallthrough-per-function */                     5974, /* DiagArray293 */ 949, /* Empty */         0 },
-  { /* implicit-fixed-point-conversion */                       6008, /* DiagArray294 */ 951, /* Empty */         0 },
-  { /* implicit-float-conversion */                             6040, /* DiagArray295 */ 953, /* Empty */         0 },
-  { /* implicit-function-declaration */                         6066, /* DiagArray296 */ 956, /* Empty */         0 },
-  { /* implicit-int */                                          6096, /* DiagArray297 */ 961, /* Empty */         0 },
-  { /* implicit-int-conversion */                               6109, /* DiagArray298 */ 963, /* Empty */         0 },
-  { /* implicit-retain-self */                                  6133, /* DiagArray299 */ 966, /* Empty */         0 },
-  { /* implicitly-unsigned-literal */                           6154, /* DiagArray300 */ 968, /* Empty */         0 },
-  { /* import */                                                6182, /* Empty */     0, /* Empty */         0 },
-  { /* import-preprocessor-directive-pedantic */                6189, /* DiagArray302 */ 970, /* Empty */         0 },
-  { /* inaccessible-base */                                     6228, /* DiagArray303 */ 972, /* Empty */         0 },
-  { /* include-next-absolute-path */                            6246, /* DiagArray304 */ 974, /* Empty */         0 },
-  { /* include-next-outside-header */                           6273, /* DiagArray305 */ 976, /* Empty */         0 },
-  { /* incompatible-exception-spec */                           6301, /* DiagArray306 */ 978, /* Empty */         0 },
-  { /* incompatible-function-pointer-types */                   6329, /* DiagArray307 */ 981, /* Empty */         0 },
-  { /* incompatible-library-redeclaration */                    6365, /* DiagArray308 */ 983, /* Empty */         0 },
-  { /* incompatible-ms-struct */                                6400, /* DiagArray309 */ 985, /* Empty */         0 },
-  { /* incompatible-pointer-types */                            6423, /* DiagArray310 */ 988, /* DiagSubGroup310 */ 238 },
-  { /* incompatible-pointer-types-discards-qualifiers */        6450, /* DiagArray311 */ 990, /* Empty */         0 },
-  { /* incompatible-property-type */                            6497, /* DiagArray312 */ 993, /* Empty */         0 },
-  { /* incompatible-sysroot */                                  6524, /* DiagArray313 */ 995, /* Empty */         0 },
-  { /* incomplete-framework-module-declaration */               6545, /* DiagArray314 */ 997, /* Empty */         0 },
-  { /* incomplete-implementation */                             6585, /* DiagArray315 */ 999, /* Empty */         0 },
-  { /* incomplete-module */                                     6611, /* Empty */     0, /* DiagSubGroup316 */ 241 },
-  { /* incomplete-umbrella */                                   6629, /* DiagArray317 */ 1001, /* Empty */         0 },
-  { /* inconsistent-dllimport */                                6649, /* DiagArray318 */ 1005, /* Empty */         0 },
-  { /* inconsistent-missing-destructor-override */              6672, /* DiagArray319 */ 1008, /* Empty */         0 },
-  { /* inconsistent-missing-override */                         6713, /* DiagArray320 */ 1010, /* Empty */         0 },
-  { /* increment-bool */                                        6743, /* DiagArray321 */ 1012, /* DiagSubGroup321 */ 244 },
-  { /* infinite-recursion */                                    6758, /* DiagArray322 */ 1014, /* Empty */         0 },
-  { /* init-self */                                             6777, /* Empty */     0, /* Empty */         0 },
-  { /* initializer-overrides */                                 6787, /* DiagArray324 */ 1016, /* Empty */         0 },
-  { /* injected-class-name */                                   6809, /* DiagArray325 */ 1019, /* Empty */         0 },
-  { /* inline */                                                6829, /* Empty */     0, /* Empty */         0 },
-  { /* inline-asm */                                            6836, /* DiagArray327 */ 1021, /* Empty */         0 },
-  { /* inline-new-delete */                                     6847, /* DiagArray328 */ 1023, /* Empty */         0 },
-  { /* instantiation-after-specialization */                    6865, /* DiagArray329 */ 1025, /* Empty */         0 },
-  { /* int-conversion */                                        6900, /* DiagArray330 */ 1027, /* Empty */         0 },
-  { /* int-conversions */                                       6915, /* Empty */     0, /* DiagSubGroup331 */ 246 },
-  { /* int-to-pointer-cast */                                   6931, /* DiagArray332 */ 1030, /* DiagSubGroup332 */ 248 },
-  { /* int-to-void-pointer-cast */                              6951, /* DiagArray333 */ 1032, /* Empty */         0 },
-  { /* integer-overflow */                                      6976, /* DiagArray334 */ 1034, /* Empty */         0 },
-  { /* invalid-command-line-argument */                         6993, /* DiagArray335 */ 1036, /* DiagSubGroup335 */ 250 },
-  { /* invalid-constexpr */                                     7023, /* DiagArray336 */ 1042, /* Empty */         0 },
-  { /* invalid-iboutlet */                                      7041, /* DiagArray337 */ 1044, /* Empty */         0 },
-  { /* invalid-initializer-from-system-header */                7058, /* DiagArray338 */ 1047, /* Empty */         0 },
-  { /* invalid-ios-deployment-target */                         7097, /* DiagArray339 */ 1049, /* Empty */         0 },
-  { /* invalid-noreturn */                                      7127, /* DiagArray340 */ 1051, /* Empty */         0 },
-  { /* invalid-offsetof */                                      7144, /* DiagArray341 */ 1054, /* Empty */         0 },
-  { /* invalid-or-nonexistent-directory */                      7161, /* DiagArray342 */ 1057, /* Empty */         0 },
-  { /* invalid-partial-specialization */                        7194, /* DiagArray343 */ 1060, /* Empty */         0 },
-  { /* invalid-pch */                                           7225, /* Empty */     0, /* Empty */         0 },
-  { /* invalid-pp-token */                                      7237, /* DiagArray345 */ 1062, /* Empty */         0 },
-  { /* invalid-source-encoding */                               7254, /* DiagArray346 */ 1065, /* Empty */         0 },
-  { /* invalid-token-paste */                                   7278, /* DiagArray347 */ 1068, /* Empty */         0 },
-  { /* jump-seh-finally */                                      7298, /* DiagArray348 */ 1070, /* Empty */         0 },
-  { /* keyword-compat */                                        7315, /* DiagArray349 */ 1072, /* Empty */         0 },
-  { /* keyword-macro */                                         7330, /* DiagArray350 */ 1074, /* Empty */         0 },
-  { /* knr-promoted-parameter */                                7344, /* DiagArray351 */ 1076, /* Empty */         0 },
-  { /* language-extension-token */                              7367, /* DiagArray352 */ 1078, /* Empty */         0 },
-  { /* large-by-value-copy */                                   7392, /* DiagArray353 */ 1080, /* Empty */         0 },
-  { /* liblto */                                                7412, /* Empty */     0, /* Empty */         0 },
-  { /* literal-conversion */                                    7419, /* DiagArray355 */ 1083, /* Empty */         0 },
-  { /* literal-range */                                         7438, /* DiagArray356 */ 1086, /* Empty */         0 },
-  { /* local-type-template-args */                              7452, /* DiagArray357 */ 1089, /* DiagSubGroup357 */ 252 },
-  { /* logical-not-parentheses */                               7477, /* DiagArray358 */ 1091, /* Empty */         0 },
-  { /* logical-op-parentheses */                                7501, /* DiagArray359 */ 1093, /* Empty */         0 },
-  { /* long-long */                                             7524, /* DiagArray360 */ 1095, /* DiagSubGroup360 */ 254 },
-  { /* loop-analysis */                                         7534, /* Empty */     0, /* DiagSubGroup361 */ 256 },
-  { /* macro-redefined */                                       7548, /* DiagArray362 */ 1097, /* Empty */         0 },
-  { /* main */                                                  7564, /* DiagArray363 */ 1099, /* Empty */         0 },
-  { /* main-return-type */                                      7569, /* DiagArray364 */ 1107, /* Empty */         0 },
-  { /* malformed-warning-check */                               7586, /* DiagArray365 */ 1109, /* Empty */         0 },
-  { /* many-braces-around-scalar-init */                        7610, /* DiagArray366 */ 1111, /* Empty */         0 },
-  { /* max-unsigned-zero */                                     7641, /* DiagArray367 */ 1113, /* Empty */         0 },
-  { /* memset-transposed-args */                                7659, /* DiagArray368 */ 1115, /* Empty */         0 },
-  { /* memsize-comparison */                                    7682, /* DiagArray369 */ 1117, /* Empty */         0 },
-  { /* method-signatures */                                     7701, /* DiagArray370 */ 1119, /* Empty */         0 },
-  { /* microsoft */                                             7719, /* Empty */     0, /* DiagSubGroup371 */ 259 },
-  { /* microsoft-anon-tag */                                    7729, /* DiagArray372 */ 1122, /* Empty */         0 },
-  { /* microsoft-cast */                                        7748, /* DiagArray373 */ 1125, /* Empty */         0 },
-  { /* microsoft-charize */                                     7763, /* DiagArray374 */ 1128, /* Empty */         0 },
-  { /* microsoft-comment-paste */                               7781, /* DiagArray375 */ 1130, /* Empty */         0 },
-  { /* microsoft-const-init */                                  7805, /* DiagArray376 */ 1132, /* Empty */         0 },
-  { /* microsoft-cpp-macro */                                   7826, /* DiagArray377 */ 1134, /* Empty */         0 },
-  { /* microsoft-default-arg-redefinition */                    7846, /* DiagArray378 */ 1136, /* Empty */         0 },
-  { /* microsoft-end-of-file */                                 7881, /* DiagArray379 */ 1138, /* Empty */         0 },
-  { /* microsoft-enum-forward-reference */                      7903, /* DiagArray380 */ 1140, /* Empty */         0 },
-  { /* microsoft-enum-value */                                  7936, /* DiagArray381 */ 1142, /* Empty */         0 },
-  { /* microsoft-exception-spec */                              7957, /* DiagArray382 */ 1144, /* Empty */         0 },
-  { /* microsoft-exists */                                      7982, /* DiagArray383 */ 1151, /* Empty */         0 },
-  { /* microsoft-explicit-constructor-call */                   7999, /* DiagArray384 */ 1153, /* Empty */         0 },
-  { /* microsoft-extra-qualification */                         8035, /* DiagArray385 */ 1155, /* Empty */         0 },
-  { /* microsoft-fixed-enum */                                  8065, /* DiagArray386 */ 1157, /* Empty */         0 },
-  { /* microsoft-flexible-array */                              8086, /* DiagArray387 */ 1159, /* Empty */         0 },
-  { /* microsoft-goto */                                        8111, /* DiagArray388 */ 1162, /* Empty */         0 },
-  { /* microsoft-inaccessible-base */                           8126, /* DiagArray389 */ 1164, /* Empty */         0 },
-  { /* microsoft-include */                                     8154, /* DiagArray390 */ 1166, /* Empty */         0 },
-  { /* microsoft-mutable-reference */                           8172, /* DiagArray391 */ 1168, /* Empty */         0 },
-  { /* microsoft-pure-definition */                             8200, /* DiagArray392 */ 1170, /* Empty */         0 },
-  { /* microsoft-redeclare-static */                            8226, /* DiagArray393 */ 1172, /* Empty */         0 },
-  { /* microsoft-sealed */                                      8253, /* DiagArray394 */ 1174, /* Empty */         0 },
-  { /* microsoft-template */                                    8270, /* DiagArray395 */ 1176, /* Empty */         0 },
-  { /* microsoft-union-member-reference */                      8289, /* DiagArray396 */ 1185, /* Empty */         0 },
-  { /* microsoft-unqualified-friend */                          8322, /* DiagArray397 */ 1187, /* Empty */         0 },
-  { /* microsoft-using-decl */                                  8351, /* DiagArray398 */ 1189, /* Empty */         0 },
-  { /* microsoft-void-pseudo-dtor */                            8372, /* DiagArray399 */ 1191, /* Empty */         0 },
-  { /* mismatched-new-delete */                                 8399, /* DiagArray400 */ 1193, /* Empty */         0 },
-  { /* mismatched-parameter-types */                            8421, /* DiagArray401 */ 1195, /* Empty */         0 },
-  { /* mismatched-return-types */                               8448, /* DiagArray402 */ 1197, /* Empty */         0 },
-  { /* mismatched-tags */                                       8472, /* DiagArray403 */ 1199, /* Empty */         0 },
-  { /* missing-braces */                                        8488, /* DiagArray404 */ 1202, /* Empty */         0 },
-  { /* missing-declarations */                                  8503, /* DiagArray405 */ 1204, /* Empty */         0 },
-  { /* missing-exception-spec */                                8524, /* DiagArray406 */ 1209, /* Empty */         0 },
-  { /* missing-field-initializers */                            8547, /* DiagArray407 */ 1211, /* Empty */         0 },
-  { /* missing-format-attribute */                              8574, /* Empty */     0, /* Empty */         0 },
-  { /* missing-include-dirs */                                  8599, /* Empty */     0, /* Empty */         0 },
-  { /* missing-method-return-type */                            8620, /* DiagArray410 */ 1213, /* Empty */         0 },
-  { /* missing-noescape */                                      8647, /* DiagArray411 */ 1215, /* Empty */         0 },
-  { /* missing-noreturn */                                      8664, /* DiagArray412 */ 1217, /* Empty */         0 },
-  { /* missing-prototype-for-cc */                              8681, /* DiagArray413 */ 1220, /* Empty */         0 },
-  { /* missing-prototypes */                                    8706, /* DiagArray414 */ 1222, /* Empty */         0 },
-  { /* missing-selector-name */                                 8725, /* DiagArray415 */ 1224, /* Empty */         0 },
-  { /* missing-sysroot */                                       8747, /* DiagArray416 */ 1226, /* Empty */         0 },
-  { /* missing-variable-declarations */                         8763, /* DiagArray417 */ 1228, /* Empty */         0 },
-  { /* module-build */                                          8793, /* DiagArray418 */ 1230, /* Empty */         0 },
-  { /* module-conflict */                                       8806, /* DiagArray419 */ 1235, /* Empty */         0 },
-  { /* module-file-config-mismatch */                           8822, /* DiagArray420 */ 1238, /* Empty */         0 },
-  { /* module-file-extension */                                 8850, /* DiagArray421 */ 1240, /* Empty */         0 },
-  { /* module-import-in-extern-c */                             8872, /* DiagArray422 */ 1242, /* Empty */         0 },
-  { /* modules-ambiguous-internal-linkage */                    8898, /* DiagArray423 */ 1244, /* Empty */         0 },
-  { /* modules-import-nested-redundant */                       8933, /* DiagArray424 */ 1246, /* Empty */         0 },
-  { /* most */                                                  8965, /* Empty */     0, /* DiagSubGroup425 */ 287 },
-  { /* move */                                                  8970, /* Empty */     0, /* DiagSubGroup426 */ 319 },
-  { /* msvc-include */                                          8975, /* Empty */     0, /* DiagSubGroup427 */ 324 },
-  { /* msvc-not-found */                                        8988, /* DiagArray428 */ 1248, /* Empty */         0 },
-  { /* multichar */                                             9003, /* DiagArray429 */ 1250, /* Empty */         0 },
-  { /* multiple-move-vbase */                                   9013, /* DiagArray430 */ 1252, /* Empty */         0 },
-  { /* narrowing */                                             9033, /* Empty */     0, /* DiagSubGroup431 */ 326 },
-  { /* nested-anon-types */                                     9043, /* DiagArray432 */ 1254, /* Empty */         0 },
-  { /* nested-externs */                                        9061, /* Empty */     0, /* Empty */         0 },
-  { /* new-returns-null */                                      9076, /* DiagArray434 */ 1256, /* Empty */         0 },
-  { /* newline-eof */                                           9093, /* DiagArray435 */ 1258, /* Empty */         0 },
-  { /* noderef */                                               9105, /* DiagArray436 */ 1261, /* Empty */         0 },
-  { /* noexcept-type */                                         9113, /* Empty */     0, /* DiagSubGroup437 */ 328 },
-  { /* non-gcc */                                               9127, /* Empty */     0, /* DiagSubGroup438 */ 330 },
-  { /* non-literal-null-conversion */                           9135, /* DiagArray439 */ 1265, /* Empty */         0 },
-  { /* non-modular-include-in-framework-module */               9163, /* DiagArray440 */ 1267, /* Empty */         0 },
-  { /* non-modular-include-in-module */                         9203, /* DiagArray441 */ 1269, /* DiagSubGroup441 */ 334 },
-  { /* non-pod-varargs */                                       9233, /* DiagArray442 */ 1271, /* Empty */         0 },
-  { /* non-virtual-dtor */                                      9249, /* DiagArray443 */ 1276, /* Empty */         0 },
-  { /* nonnull */                                               9266, /* DiagArray444 */ 1278, /* Empty */         0 },
-  { /* nonportable-cfstrings */                                 9274, /* Empty */     0, /* Empty */         0 },
-  { /* nonportable-include-path */                              9296, /* DiagArray446 */ 1281, /* Empty */         0 },
-  { /* nonportable-system-include-path */                       9321, /* DiagArray447 */ 1283, /* Empty */         0 },
-  { /* nonportable-vector-initialization */                     9353, /* DiagArray448 */ 1285, /* Empty */         0 },
-  { /* nontrivial-memaccess */                                  9387, /* DiagArray449 */ 1287, /* Empty */         0 },
-  { /* nsconsumed-mismatch */                                   9408, /* DiagArray450 */ 1289, /* Empty */         0 },
-  { /* nsreturns-mismatch */                                    9428, /* DiagArray451 */ 1291, /* Empty */         0 },
-  { /* null-arithmetic */                                       9447, /* DiagArray452 */ 1293, /* Empty */         0 },
-  { /* null-character */                                        9463, /* DiagArray453 */ 1296, /* Empty */         0 },
-  { /* null-conversion */                                       9478, /* DiagArray454 */ 1299, /* Empty */         0 },
-  { /* null-dereference */                                      9494, /* DiagArray455 */ 1301, /* Empty */         0 },
-  { /* null-pointer-arithmetic */                               9511, /* DiagArray456 */ 1304, /* Empty */         0 },
-  { /* nullability */                                           9535, /* DiagArray457 */ 1307, /* Empty */         0 },
-  { /* nullability-completeness */                              9547, /* DiagArray458 */ 1313, /* DiagSubGroup458 */ 336 },
-  { /* nullability-completeness-on-arrays */                    9572, /* DiagArray459 */ 1315, /* Empty */         0 },
-  { /* nullability-declspec */                                  9607, /* DiagArray460 */ 1317, /* Empty */         0 },
-  { /* nullability-extension */                                 9628, /* DiagArray461 */ 1319, /* Empty */         0 },
-  { /* nullability-inferred-on-nested-type */                   9650, /* DiagArray462 */ 1321, /* Empty */         0 },
-  { /* nullable-to-nonnull-conversion */                        9686, /* DiagArray463 */ 1323, /* Empty */         0 },
-  { /* objc-autosynthesis-property-ivar-name-match */           9717, /* DiagArray464 */ 1325, /* Empty */         0 },
-  { /* objc-circular-container */                               9761, /* DiagArray465 */ 1327, /* Empty */         0 },
-  { /* objc-cocoa-api */                                        9785, /* Empty */     0, /* DiagSubGroup466 */ 338 },
-  { /* objc-designated-initializers */                          9800, /* DiagArray467 */ 1329, /* Empty */         0 },
-  { /* objc-flexible-array */                                   9829, /* DiagArray468 */ 1336, /* Empty */         0 },
-  { /* objc-forward-class-redefinition */                       9849, /* DiagArray469 */ 1339, /* Empty */         0 },
-  { /* objc-interface-ivars */                                  9881, /* DiagArray470 */ 1341, /* Empty */         0 },
-  { /* objc-literal-compare */                                  9902, /* DiagArray471 */ 1343, /* DiagSubGroup471 */ 340 },
-  { /* objc-literal-conversion */                               9923, /* DiagArray472 */ 1345, /* Empty */         0 },
-  { /* objc-macro-redefinition */                               9947, /* DiagArray473 */ 1348, /* Empty */         0 },
-  { /* objc-messaging-id */                                     9971, /* DiagArray474 */ 1350, /* Empty */         0 },
-  { /* objc-method-access */                                    9989, /* DiagArray475 */ 1352, /* Empty */         0 },
-  { /* objc-missing-property-synthesis */                       10008, /* DiagArray476 */ 1359, /* Empty */         0 },
-  { /* objc-missing-super-calls */                              10040, /* DiagArray477 */ 1361, /* Empty */         0 },
-  { /* objc-multiple-method-names */                            10065, /* DiagArray478 */ 1363, /* Empty */         0 },
-  { /* objc-noncopy-retain-block-property */                    10092, /* DiagArray479 */ 1365, /* Empty */         0 },
-  { /* objc-nonunified-exceptions */                            10127, /* DiagArray480 */ 1367, /* Empty */         0 },
-  { /* objc-property-assign-on-object-type */                   10154, /* DiagArray481 */ 1369, /* Empty */         0 },
-  { /* objc-property-implementation */                          10190, /* DiagArray482 */ 1371, /* Empty */         0 },
-  { /* objc-property-implicit-mismatch */                       10219, /* DiagArray483 */ 1376, /* Empty */         0 },
-  { /* objc-property-matches-cocoa-ownership-rule */            10251, /* DiagArray484 */ 1378, /* Empty */         0 },
-  { /* objc-property-no-attribute */                            10294, /* DiagArray485 */ 1380, /* Empty */         0 },
-  { /* objc-property-synthesis */                               10321, /* DiagArray486 */ 1383, /* Empty */         0 },
-  { /* objc-protocol-method-implementation */                   10345, /* DiagArray487 */ 1387, /* Empty */         0 },
-  { /* objc-protocol-property-synthesis */                      10381, /* DiagArray488 */ 1389, /* Empty */         0 },
-  { /* objc-protocol-qualifiers */                              10414, /* DiagArray489 */ 1391, /* Empty */         0 },
-  { /* objc-readonly-with-setter-property */                    10439, /* DiagArray490 */ 1393, /* Empty */         0 },
-  { /* objc-redundant-api-use */                                10474, /* Empty */     0, /* DiagSubGroup491 */ 342 },
-  { /* objc-redundant-literal-use */                            10497, /* DiagArray492 */ 1395, /* Empty */         0 },
-  { /* objc-root-class */                                       10524, /* DiagArray493 */ 1397, /* Empty */         0 },
-  { /* objc-string-compare */                                   10540, /* DiagArray494 */ 1399, /* Empty */         0 },
-  { /* objc-string-concatenation */                             10560, /* DiagArray495 */ 1401, /* Empty */         0 },
-  { /* objc-unsafe-perform-selector */                          10586, /* DiagArray496 */ 1403, /* Empty */         0 },
-  { /* odr */                                                   10615, /* DiagArray497 */ 1405, /* Empty */         0 },
-  { /* old-style-cast */                                        10619, /* DiagArray498 */ 1407, /* Empty */         0 },
-  { /* old-style-definition */                                  10634, /* Empty */     0, /* Empty */         0 },
-  { /* opencl-unsupported-rgba */                               10655, /* DiagArray500 */ 1409, /* Empty */         0 },
-  { /* openmp-clauses */                                        10679, /* DiagArray501 */ 1411, /* Empty */         0 },
-  { /* openmp-loop-form */                                      10694, /* DiagArray502 */ 1414, /* Empty */         0 },
-  { /* openmp-target */                                         10711, /* DiagArray503 */ 1417, /* Empty */         0 },
-  { /* option-ignored */                                        10725, /* DiagArray504 */ 1422, /* Empty */         0 },
-  { /* ordered-compare-function-pointers */                     10740, /* DiagArray505 */ 1429, /* Empty */         0 },
-  { /* out-of-line-declaration */                               10774, /* DiagArray506 */ 1431, /* Empty */         0 },
-  { /* out-of-scope-function */                                 10798, /* DiagArray507 */ 1433, /* Empty */         0 },
-  { /* over-aligned */                                          10820, /* DiagArray508 */ 1435, /* Empty */         0 },
-  { /* overflow */                                              10833, /* Empty */     0, /* Empty */         0 },
-  { /* overlength-strings */                                    10842, /* DiagArray510 */ 1437, /* Empty */         0 },
-  { /* overloaded-shift-op-parentheses */                       10861, /* DiagArray511 */ 1439, /* Empty */         0 },
-  { /* overloaded-virtual */                                    10893, /* DiagArray512 */ 1441, /* Empty */         0 },
-  { /* override-init */                                         10912, /* Empty */     0, /* DiagSubGroup513 */ 344 },
-  { /* override-module */                                       10926, /* DiagArray514 */ 1443, /* Empty */         0 },
-  { /* overriding-method-mismatch */                            10942, /* DiagArray515 */ 1445, /* Empty */         0 },
-  { /* overriding-t-option */                                   10969, /* DiagArray516 */ 1453, /* Empty */         0 },
-  { /* packed */                                                10989, /* DiagArray517 */ 1455, /* Empty */         0 },
-  { /* padded */                                                10996, /* DiagArray518 */ 1457, /* Empty */         0 },
-  { /* parentheses */                                           11003, /* DiagArray519 */ 1461, /* DiagSubGroup519 */ 346 },
-  { /* parentheses-equality */                                  11015, /* DiagArray520 */ 1465, /* Empty */         0 },
-  { /* partial-availability */                                  11036, /* Empty */     0, /* DiagSubGroup521 */ 354 },
-  { /* pass */                                                  11057, /* DiagArray522 */ 1467, /* Empty */         0 },
-  { /* pass-analysis */                                         11062, /* DiagArray523 */ 1469, /* Empty */         0 },
-  { /* pass-failed */                                           11076, /* DiagArray524 */ 1473, /* Empty */         0 },
-  { /* pass-missed */                                           11088, /* DiagArray525 */ 1475, /* Empty */         0 },
-  { /* pch-date-time */                                         11100, /* DiagArray526 */ 1477, /* Empty */         0 },
-  { /* pedantic */                                              11114, /* DiagArray527 */ 1479, /* DiagSubGroup527 */ 356 },
-  { /* pedantic-core-features */                                11123, /* DiagArray528 */ 1550, /* Empty */         0 },
-  { /* pessimizing-move */                                      11146, /* DiagArray529 */ 1552, /* Empty */         0 },
-  { /* pointer-arith */                                         11163, /* DiagArray530 */ 1555, /* Empty */         0 },
-  { /* pointer-bool-conversion */                               11177, /* DiagArray531 */ 1562, /* Empty */         0 },
-  { /* pointer-integer-compare */                               11201, /* DiagArray532 */ 1565, /* Empty */         0 },
-  { /* pointer-sign */                                          11225, /* DiagArray533 */ 1567, /* Empty */         0 },
-  { /* pointer-to-int-cast */                                   11238, /* Empty */     0, /* Empty */         0 },
-  { /* pointer-type-mismatch */                                 11258, /* DiagArray535 */ 1569, /* Empty */         0 },
-  { /* potentially-evaluated-expression */                      11280, /* DiagArray536 */ 1571, /* Empty */         0 },
-  { /* pragma-clang-attribute */                                11313, /* DiagArray537 */ 1573, /* Empty */         0 },
-  { /* pragma-once-outside-header */                            11336, /* DiagArray538 */ 1575, /* Empty */         0 },
-  { /* pragma-pack */                                           11363, /* DiagArray539 */ 1577, /* DiagSubGroup539 */ 408 },
-  { /* pragma-pack-suspicious-include */                        11375, /* DiagArray540 */ 1580, /* Empty */         0 },
-  { /* pragma-system-header-outside-header */                   11406, /* DiagArray541 */ 1582, /* Empty */         0 },
-  { /* pragmas */                                               11442, /* DiagArray542 */ 1584, /* DiagSubGroup542 */ 410 },
-  { /* predefined-identifier-outside-function */                11450, /* DiagArray543 */ 1586, /* Empty */         0 },
-  { /* private-extern */                                        11489, /* DiagArray544 */ 1588, /* Empty */         0 },
-  { /* private-header */                                        11504, /* DiagArray545 */ 1590, /* Empty */         0 },
-  { /* private-module */                                        11519, /* DiagArray546 */ 1592, /* Empty */         0 },
-  { /* profile-instr-missing */                                 11534, /* DiagArray547 */ 1597, /* Empty */         0 },
-  { /* profile-instr-out-of-date */                             11556, /* DiagArray548 */ 1599, /* Empty */         0 },
-  { /* profile-instr-unprofiled */                              11582, /* DiagArray549 */ 1601, /* Empty */         0 },
-  { /* property-access-dot-syntax */                            11607, /* DiagArray550 */ 1603, /* Empty */         0 },
-  { /* property-attribute-mismatch */                           11634, /* DiagArray551 */ 1605, /* Empty */         0 },
-  { /* protocol */                                              11662, /* DiagArray552 */ 1610, /* Empty */         0 },
-  { /* protocol-property-synthesis-ambiguity */                 11671, /* DiagArray553 */ 1612, /* Empty */         0 },
-  { /* qualified-void-return-type */                            11709, /* DiagArray554 */ 1614, /* Empty */         0 },
-  { /* quoted-include-in-framework-header */                    11736, /* DiagArray555 */ 1616, /* Empty */         0 },
-  { /* range-loop-analysis */                                   11771, /* DiagArray556 */ 1618, /* Empty */         0 },
-  { /* readonly-iboutlet-property */                            11791, /* DiagArray557 */ 1622, /* Empty */         0 },
-  { /* receiver-expr */                                         11818, /* DiagArray558 */ 1624, /* Empty */         0 },
-  { /* receiver-forward-class */                                11832, /* DiagArray559 */ 1626, /* Empty */         0 },
-  { /* redeclared-class-member */                               11855, /* DiagArray560 */ 1629, /* Empty */         0 },
-  { /* redundant-decls */                                       11879, /* Empty */     0, /* Empty */         0 },
-  { /* redundant-move */                                        11895, /* DiagArray562 */ 1631, /* Empty */         0 },
-  { /* redundant-parens */                                      11910, /* DiagArray563 */ 1633, /* Empty */         0 },
-  { /* register */                                              11927, /* DiagArray564 */ 1635, /* DiagSubGroup564 */ 415 },
-  { /* reinterpret-base-class */                                11936, /* DiagArray565 */ 1637, /* Empty */         0 },
-  { /* remark-backend-plugin */                                 11959, /* DiagArray566 */ 1639, /* Empty */         0 },
-  { /* reorder */                                               11981, /* DiagArray567 */ 1641, /* Empty */         0 },
-  { /* requires-super-attribute */                              11989, /* DiagArray568 */ 1643, /* Empty */         0 },
-  { /* reserved-id-macro */                                     12014, /* DiagArray569 */ 1645, /* Empty */         0 },
-  { /* reserved-user-defined-literal */                         12032, /* DiagArray570 */ 1647, /* DiagSubGroup570 */ 417 },
-  { /* retained-language-linkage */                             12062, /* DiagArray571 */ 1650, /* Empty */         0 },
-  { /* return-stack-address */                                  12088, /* DiagArray572 */ 1652, /* Empty */         0 },
-  { /* return-std-move */                                       12109, /* DiagArray573 */ 1656, /* Empty */         0 },
-  { /* return-std-move-in-c++11 */                              12125, /* DiagArray574 */ 1658, /* Empty */         0 },
-  { /* return-type */                                           12150, /* DiagArray575 */ 1660, /* DiagSubGroup575 */ 419 },
-  { /* return-type-c-linkage */                                 12162, /* DiagArray576 */ 1670, /* Empty */         0 },
-  { /* sanitize-address */                                      12184, /* DiagArray577 */ 1673, /* Empty */         0 },
-  { /* section */                                               12201, /* DiagArray578 */ 1676, /* Empty */         0 },
-  { /* selector */                                              12209, /* DiagArray579 */ 1680, /* DiagSubGroup579 */ 421 },
-  { /* selector-type-mismatch */                                12218, /* DiagArray580 */ 1682, /* Empty */         0 },
-  { /* self-assign */                                           12241, /* DiagArray581 */ 1684, /* DiagSubGroup581 */ 423 },
-  { /* self-assign-field */                                     12253, /* DiagArray582 */ 1686, /* Empty */         0 },
-  { /* self-assign-overloaded */                                12271, /* DiagArray583 */ 1688, /* Empty */         0 },
-  { /* self-move */                                             12294, /* DiagArray584 */ 1690, /* Empty */         0 },
-  { /* semicolon-before-method-body */                          12304, /* DiagArray585 */ 1692, /* Empty */         0 },
-  { /* sentinel */                                              12333, /* DiagArray586 */ 1694, /* Empty */         0 },
-  { /* sequence-point */                                        12342, /* Empty */     0, /* DiagSubGroup587 */ 426 },
-  { /* serialized-diagnostics */                                12357, /* DiagArray588 */ 1697, /* Empty */         0 },
-  { /* shadow */                                                12380, /* DiagArray589 */ 1700, /* DiagSubGroup589 */ 428 },
-  { /* shadow-all */                                            12387, /* Empty */     0, /* DiagSubGroup590 */ 431 },
-  { /* shadow-field */                                          12398, /* DiagArray591 */ 1702, /* Empty */         0 },
-  { /* shadow-field-in-constructor */                           12411, /* DiagArray592 */ 1704, /* DiagSubGroup592 */ 436 },
-  { /* shadow-field-in-constructor-modified */                  12439, /* DiagArray593 */ 1706, /* Empty */         0 },
-  { /* shadow-ivar */                                           12476, /* DiagArray594 */ 1708, /* Empty */         0 },
-  { /* shadow-uncaptured-local */                               12488, /* DiagArray595 */ 1710, /* Empty */         0 },
-  { /* shift-count-negative */                                  12512, /* DiagArray596 */ 1712, /* Empty */         0 },
-  { /* shift-count-overflow */                                  12533, /* DiagArray597 */ 1714, /* Empty */         0 },
-  { /* shift-negative-value */                                  12554, /* DiagArray598 */ 1716, /* Empty */         0 },
-  { /* shift-op-parentheses */                                  12575, /* DiagArray599 */ 1718, /* Empty */         0 },
-  { /* shift-overflow */                                        12596, /* DiagArray600 */ 1720, /* Empty */         0 },
-  { /* shift-sign-overflow */                                   12611, /* DiagArray601 */ 1722, /* Empty */         0 },
-  { /* shorten-64-to-32 */                                      12631, /* DiagArray602 */ 1724, /* Empty */         0 },
-  { /* sign-compare */                                          12648, /* DiagArray603 */ 1726, /* Empty */         0 },
-  { /* sign-conversion */                                       12661, /* DiagArray604 */ 1728, /* Empty */         0 },
-  { /* sign-promo */                                            12677, /* Empty */     0, /* Empty */         0 },
-  { /* signed-enum-bitfield */                                  12688, /* DiagArray606 */ 1732, /* Empty */         0 },
-  { /* sizeof-array-argument */                                 12709, /* DiagArray607 */ 1734, /* Empty */         0 },
-  { /* sizeof-array-decay */                                    12731, /* DiagArray608 */ 1736, /* Empty */         0 },
-  { /* sizeof-pointer-div */                                    12750, /* DiagArray609 */ 1738, /* Empty */         0 },
-  { /* sizeof-pointer-memaccess */                              12769, /* DiagArray610 */ 1740, /* Empty */         0 },
-  { /* slash-u-filename */                                      12794, /* DiagArray611 */ 1743, /* Empty */         0 },
-  { /* sometimes-uninitialized */                               12811, /* DiagArray612 */ 1745, /* Empty */         0 },
-  { /* source-uses-openmp */                                    12835, /* DiagArray613 */ 1747, /* Empty */         0 },
-  { /* spir-compat */                                           12854, /* DiagArray614 */ 1750, /* Empty */         0 },
-  { /* stack-protector */                                       12866, /* Empty */     0, /* Empty */         0 },
-  { /* static-float-init */                                     12882, /* DiagArray616 */ 1752, /* DiagSubGroup616 */ 438 },
-  { /* static-in-inline */                                      12900, /* DiagArray617 */ 1754, /* Empty */         0 },
-  { /* static-inline-explicit-instantiation */                  12917, /* DiagArray618 */ 1757, /* Empty */         0 },
-  { /* static-local-in-inline */                                12954, /* DiagArray619 */ 1759, /* Empty */         0 },
-  { /* static-self-init */                                      12977, /* DiagArray620 */ 1761, /* Empty */         0 },
-  { /* stdlibcxx-not-found */                                   12994, /* DiagArray621 */ 1763, /* Empty */         0 },
-  { /* strict-aliasing */                                       13014, /* Empty */     0, /* Empty */         0 },
-  { /* strict-aliasing=0 */                                     13030, /* Empty */     0, /* Empty */         0 },
-  { /* strict-aliasing=1 */                                     13048, /* Empty */     0, /* Empty */         0 },
-  { /* strict-aliasing=2 */                                     13066, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow */                                       13084, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=0 */                                     13100, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=1 */                                     13118, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=2 */                                     13136, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=3 */                                     13154, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=4 */                                     13172, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=5 */                                     13190, /* Empty */     0, /* Empty */         0 },
-  { /* strict-prototypes */                                     13208, /* DiagArray633 */ 1765, /* Empty */         0 },
-  { /* strict-selector-match */                                 13226, /* DiagArray634 */ 1767, /* Empty */         0 },
-  { /* string-compare */                                        13248, /* DiagArray635 */ 1769, /* Empty */         0 },
-  { /* string-conversion */                                     13263, /* DiagArray636 */ 1771, /* Empty */         0 },
-  { /* string-plus-char */                                      13281, /* DiagArray637 */ 1773, /* Empty */         0 },
-  { /* string-plus-int */                                       13298, /* DiagArray638 */ 1775, /* Empty */         0 },
-  { /* strlcpy-strlcat-size */                                  13314, /* DiagArray639 */ 1777, /* Empty */         0 },
-  { /* strncat-size */                                          13335, /* DiagArray640 */ 1779, /* Empty */         0 },
-  { /* super-class-method-mismatch */                           13348, /* DiagArray641 */ 1783, /* Empty */         0 },
-  { /* suspicious-bzero */                                      13376, /* DiagArray642 */ 1785, /* Empty */         0 },
-  { /* suspicious-memaccess */                                  13393, /* Empty */     0, /* DiagSubGroup643 */ 440 },
-  { /* switch */                                                13414, /* DiagArray644 */ 1787, /* Empty */         0 },
-  { /* switch-bool */                                           13421, /* DiagArray645 */ 1791, /* Empty */         0 },
-  { /* switch-default */                                        13433, /* Empty */     0, /* Empty */         0 },
-  { /* switch-enum */                                           13448, /* DiagArray647 */ 1793, /* Empty */         0 },
-  { /* sync-fetch-and-nand-semantics-changed */                 13460, /* DiagArray648 */ 1795, /* Empty */         0 },
-  { /* synth */                                                 13498, /* Empty */     0, /* Empty */         0 },
-  { /* tautological-compare */                                  13504, /* DiagArray650 */ 1797, /* DiagSubGroup650 */ 446 },
-  { /* tautological-constant-compare */                         13525, /* DiagArray651 */ 1800, /* DiagSubGroup651 */ 451 },
-  { /* tautological-constant-in-range-compare */                13555, /* Empty */     0, /* DiagSubGroup652 */ 453 },
-  { /* tautological-constant-out-of-range-compare */            13594, /* DiagArray653 */ 1802, /* Empty */         0 },
-  { /* tautological-overlap-compare */                          13637, /* DiagArray654 */ 1804, /* Empty */         0 },
-  { /* tautological-pointer-compare */                          13666, /* DiagArray655 */ 1806, /* Empty */         0 },
-  { /* tautological-type-limit-compare */                       13695, /* DiagArray656 */ 1809, /* Empty */         0 },
-  { /* tautological-undefined-compare */                        13727, /* DiagArray657 */ 1811, /* Empty */         0 },
-  { /* tautological-unsigned-enum-zero-compare */               13758, /* DiagArray658 */ 1814, /* Empty */         0 },
-  { /* tautological-unsigned-zero-compare */                    13798, /* DiagArray659 */ 1816, /* Empty */         0 },
-  { /* tentative-definition-incomplete-type */                  13833, /* DiagArray660 */ 1818, /* Empty */         0 },
-  { /* thread-safety */                                         13870, /* Empty */     0, /* DiagSubGroup661 */ 457 },
-  { /* thread-safety-analysis */                                13884, /* DiagArray662 */ 1820, /* Empty */         0 },
-  { /* thread-safety-attributes */                              13907, /* DiagArray663 */ 1838, /* Empty */         0 },
-  { /* thread-safety-beta */                                    13932, /* DiagArray664 */ 1846, /* Empty */         0 },
-  { /* thread-safety-negative */                                13951, /* DiagArray665 */ 1848, /* Empty */         0 },
-  { /* thread-safety-precise */                                 13974, /* DiagArray666 */ 1850, /* Empty */         0 },
-  { /* thread-safety-reference */                               13996, /* DiagArray667 */ 1854, /* Empty */         0 },
-  { /* thread-safety-verbose */                                 14020, /* DiagArray668 */ 1857, /* Empty */         0 },
-  { /* trigraphs */                                             14042, /* DiagArray669 */ 1859, /* Empty */         0 },
-  { /* type-limits */                                           14052, /* Empty */     0, /* Empty */         0 },
-  { /* type-safety */                                           14064, /* DiagArray671 */ 1864, /* Empty */         0 },
-  { /* typedef-redefinition */                                  14076, /* DiagArray672 */ 1868, /* Empty */         0 },
-  { /* typename-missing */                                      14097, /* DiagArray673 */ 1870, /* Empty */         0 },
-  { /* unable-to-open-stats-file */                             14114, /* DiagArray674 */ 1872, /* Empty */         0 },
-  { /* unavailable-declarations */                              14140, /* DiagArray675 */ 1874, /* Empty */         0 },
-  { /* undeclared-selector */                                   14165, /* DiagArray676 */ 1876, /* Empty */         0 },
-  { /* undef */                                                 14185, /* DiagArray677 */ 1879, /* Empty */         0 },
-  { /* undefined-bool-conversion */                             14191, /* DiagArray678 */ 1881, /* Empty */         0 },
-  { /* undefined-func-template */                               14217, /* DiagArray679 */ 1884, /* Empty */         0 },
-  { /* undefined-inline */                                      14241, /* DiagArray680 */ 1886, /* Empty */         0 },
-  { /* undefined-internal */                                    14258, /* DiagArray681 */ 1888, /* Empty */         0 },
-  { /* undefined-internal-type */                               14277, /* DiagArray682 */ 1890, /* Empty */         0 },
-  { /* undefined-reinterpret-cast */                            14301, /* DiagArray683 */ 1892, /* Empty */         0 },
-  { /* undefined-var-template */                                14328, /* DiagArray684 */ 1895, /* Empty */         0 },
-  { /* unevaluated-expression */                                14351, /* DiagArray685 */ 1897, /* DiagSubGroup685 */ 462 },
-  { /* unguarded-availability */                                14374, /* DiagArray686 */ 1899, /* DiagSubGroup686 */ 464 },
-  { /* unguarded-availability-new */                            14397, /* DiagArray687 */ 1901, /* Empty */         0 },
-  { /* unicode */                                               14424, /* DiagArray688 */ 1903, /* Empty */         0 },
-  { /* unicode-homoglyph */                                     14432, /* DiagArray689 */ 1909, /* Empty */         0 },
-  { /* unicode-whitespace */                                    14450, /* DiagArray690 */ 1911, /* Empty */         0 },
-  { /* unicode-zero-width */                                    14469, /* DiagArray691 */ 1913, /* Empty */         0 },
-  { /* uninitialized */                                         14488, /* DiagArray692 */ 1915, /* DiagSubGroup692 */ 466 },
-  { /* unknown-argument */                                      14502, /* DiagArray693 */ 1923, /* Empty */         0 },
-  { /* unknown-attributes */                                    14519, /* DiagArray694 */ 1926, /* Empty */         0 },
-  { /* unknown-escape-sequence */                               14538, /* DiagArray695 */ 1928, /* Empty */         0 },
-  { /* unknown-pragmas */                                       14562, /* DiagArray696 */ 1930, /* Empty */         0 },
-  { /* unknown-sanitizers */                                    14578, /* DiagArray697 */ 1948, /* Empty */         0 },
-  { /* unknown-warning-option */                                14597, /* DiagArray698 */ 1950, /* Empty */         0 },
-  { /* unnamed-type-template-args */                            14620, /* DiagArray699 */ 1954, /* DiagSubGroup699 */ 469 },
-  { /* unneeded-internal-declaration */                         14647, /* DiagArray700 */ 1956, /* Empty */         0 },
-  { /* unneeded-member-function */                              14677, /* DiagArray701 */ 1959, /* Empty */         0 },
-  { /* unreachable-code */                                      14702, /* DiagArray702 */ 1961, /* DiagSubGroup702 */ 471 },
-  { /* unreachable-code-aggressive */                           14719, /* Empty */     0, /* DiagSubGroup703 */ 473 },
-  { /* unreachable-code-break */                                14747, /* DiagArray704 */ 1963, /* Empty */         0 },
-  { /* unreachable-code-loop-increment */                       14770, /* DiagArray705 */ 1965, /* Empty */         0 },
-  { /* unreachable-code-return */                               14802, /* DiagArray706 */ 1967, /* Empty */         0 },
-  { /* unsequenced */                                           14826, /* DiagArray707 */ 1969, /* Empty */         0 },
-  { /* unsupported-abs */                                       14838, /* DiagArray708 */ 1972, /* Empty */         0 },
-  { /* unsupported-availability-guard */                        14854, /* DiagArray709 */ 1975, /* Empty */         0 },
-  { /* unsupported-cb */                                        14885, /* DiagArray710 */ 1977, /* Empty */         0 },
-  { /* unsupported-dll-base-class-template */                   14900, /* DiagArray711 */ 1979, /* Empty */         0 },
-  { /* unsupported-friend */                                    14936, /* DiagArray712 */ 1981, /* Empty */         0 },
-  { /* unsupported-gpopt */                                     14955, /* DiagArray713 */ 1984, /* Empty */         0 },
-  { /* unsupported-nan */                                       14973, /* DiagArray714 */ 1986, /* Empty */         0 },
-  { /* unsupported-target-opt */                                14989, /* DiagArray715 */ 1989, /* Empty */         0 },
-  { /* unsupported-visibility */                                15012, /* DiagArray716 */ 1991, /* Empty */         0 },
-  { /* unusable-partial-specialization */                       15035, /* DiagArray717 */ 1993, /* Empty */         0 },
-  { /* unused */                                                15067, /* Empty */     0, /* DiagSubGroup718 */ 477 },
-  { /* unused-argument */                                       15074, /* Empty */     0, /* Empty */         0 },
-  { /* unused-command-line-argument */                          15090, /* DiagArray720 */ 1995, /* Empty */         0 },
-  { /* unused-comparison */                                     15119, /* DiagArray721 */ 2003, /* Empty */         0 },
-  { /* unused-const-variable */                                 15137, /* DiagArray722 */ 2005, /* Empty */         0 },
-  { /* unused-exception-parameter */                            15159, /* DiagArray723 */ 2007, /* Empty */         0 },
-  { /* unused-function */                                       15186, /* DiagArray724 */ 2009, /* DiagSubGroup724 */ 487 },
-  { /* unused-getter-return-value */                            15202, /* DiagArray725 */ 2011, /* Empty */         0 },
-  { /* unused-label */                                          15229, /* DiagArray726 */ 2013, /* Empty */         0 },
-  { /* unused-lambda-capture */                                 15242, /* DiagArray727 */ 2015, /* Empty */         0 },
-  { /* unused-local-typedef */                                  15264, /* DiagArray728 */ 2017, /* Empty */         0 },
-  { /* unused-local-typedefs */                                 15285, /* Empty */     0, /* DiagSubGroup729 */ 489 },
-  { /* unused-macros */                                         15307, /* DiagArray730 */ 2019, /* Empty */         0 },
-  { /* unused-member-function */                                15321, /* DiagArray731 */ 2021, /* DiagSubGroup731 */ 491 },
-  { /* unused-parameter */                                      15344, /* DiagArray732 */ 2023, /* Empty */         0 },
-  { /* unused-private-field */                                  15361, /* DiagArray733 */ 2025, /* Empty */         0 },
-  { /* unused-property-ivar */                                  15382, /* DiagArray734 */ 2027, /* Empty */         0 },
-  { /* unused-result */                                         15403, /* DiagArray735 */ 2029, /* Empty */         0 },
-  { /* unused-template */                                       15417, /* DiagArray736 */ 2031, /* DiagSubGroup736 */ 493 },
-  { /* unused-value */                                          15433, /* DiagArray737 */ 2033, /* DiagSubGroup737 */ 495 },
-  { /* unused-variable */                                       15446, /* DiagArray738 */ 2038, /* DiagSubGroup738 */ 499 },
-  { /* unused-volatile-lvalue */                                15462, /* DiagArray739 */ 2040, /* Empty */         0 },
-  { /* used-but-marked-unused */                                15485, /* DiagArray740 */ 2042, /* Empty */         0 },
-  { /* user-defined-literals */                                 15508, /* DiagArray741 */ 2044, /* Empty */         0 },
-  { /* user-defined-warnings */                                 15530, /* DiagArray742 */ 2046, /* Empty */         0 },
-  { /* varargs */                                               15552, /* DiagArray743 */ 2048, /* Empty */         0 },
-  { /* variadic-macros */                                       15560, /* DiagArray744 */ 2052, /* Empty */         0 },
-  { /* vec-elem-size */                                         15576, /* DiagArray745 */ 2056, /* Empty */         0 },
-  { /* vector-conversion */                                     15590, /* DiagArray746 */ 2058, /* Empty */         0 },
-  { /* vector-conversions */                                    15608, /* Empty */     0, /* DiagSubGroup747 */ 501 },
-  { /* vexing-parse */                                          15627, /* DiagArray748 */ 2060, /* Empty */         0 },
-  { /* visibility */                                            15640, /* DiagArray749 */ 2064, /* Empty */         0 },
-  { /* vla */                                                   15651, /* DiagArray750 */ 2067, /* Empty */         0 },
-  { /* vla-extension */                                         15655, /* DiagArray751 */ 2069, /* Empty */         0 },
-  { /* void-ptr-dereference */                                  15669, /* DiagArray752 */ 2071, /* Empty */         0 },
-  { /* volatile-register-var */                                 15690, /* Empty */     0, /* Empty */         0 },
-  { /* weak-template-vtables */                                 15712, /* DiagArray754 */ 2073, /* Empty */         0 },
-  { /* weak-vtables */                                          15734, /* DiagArray755 */ 2075, /* Empty */         0 },
-  { /* writable-strings */                                      15747, /* DiagArray756 */ 2077, /* DiagSubGroup756 */ 503 },
-  { /* write-strings */                                         15764, /* Empty */     0, /* DiagSubGroup757 */ 505 },
-  { /* zero-as-null-pointer-constant */                         15778, /* DiagArray758 */ 2079, /* Empty */         0 },
-  { /* zero-length-array */                                     15808, /* DiagArray759 */ 2081, /* Empty */         0 },
+  { /* avr-rtlib-linking-quirks */                              999, /* DiagArray53 */ 104, /* Empty */         0 },
+  { /* backend-plugin */                                        1024, /* DiagArray54 */ 110, /* Empty */         0 },
+  { /* backslash-newline-escape */                              1039, /* DiagArray55 */ 112, /* Empty */         0 },
+  { /* bad-function-cast */                                     1064, /* DiagArray56 */ 114, /* Empty */         0 },
+  { /* binary-literal */                                        1082, /* Empty */     0, /* DiagSubGroup57 */ 30 },
+  { /* bind-to-temporary-copy */                                1097, /* DiagArray58 */ 116, /* DiagSubGroup58 */ 34 },
+  { /* binding-in-condition */                                  1120, /* DiagArray59 */ 119, /* Empty */         0 },
+  { /* bitfield-constant-conversion */                          1141, /* DiagArray60 */ 121, /* Empty */         0 },
+  { /* bitfield-enum-conversion */                              1170, /* DiagArray61 */ 123, /* Empty */         0 },
+  { /* bitfield-width */                                        1195, /* DiagArray62 */ 127, /* Empty */         0 },
+  { /* bitwise-op-parentheses */                                1210, /* DiagArray63 */ 130, /* Empty */         0 },
+  { /* block-capture-autoreleasing */                           1233, /* DiagArray64 */ 132, /* Empty */         0 },
+  { /* bool-conversion */                                       1261, /* DiagArray65 */ 134, /* DiagSubGroup65 */ 36 },
+  { /* bool-conversions */                                      1277, /* Empty */     0, /* DiagSubGroup66 */ 39 },
+  { /* braced-scalar-init */                                    1294, /* DiagArray67 */ 136, /* Empty */         0 },
+  { /* bridge-cast */                                           1313, /* DiagArray68 */ 138, /* Empty */         0 },
+  { /* builtin-macro-redefined */                               1325, /* DiagArray69 */ 141, /* Empty */         0 },
+  { /* builtin-memcpy-chk-size */                               1349, /* DiagArray70 */ 144, /* Empty */         0 },
+  { /* builtin-requires-header */                               1373, /* DiagArray71 */ 146, /* Empty */         0 },
+  { /* c++-compat */                                            1397, /* DiagArray72 */ 148, /* Empty */         0 },
+  { /* c++0x-compat */                                          1408, /* Empty */     0, /* DiagSubGroup73 */ 41 },
+  { /* c++0x-extensions */                                      1421, /* Empty */     0, /* DiagSubGroup74 */ 43 },
+  { /* c++0x-narrowing */                                       1438, /* Empty */     0, /* DiagSubGroup75 */ 45 },
+  { /* c++11-compat */                                          1454, /* DiagArray76 */ 150, /* DiagSubGroup76 */ 47 },
+  { /* c++11-compat-deprecated-writable-strings */              1467, /* DiagArray77 */ 161, /* Empty */         0 },
+  { /* c++11-compat-pedantic */                                 1508, /* Empty */     0, /* DiagSubGroup78 */ 54 },
+  { /* c++11-compat-reserved-user-defined-literal */            1530, /* DiagArray79 */ 163, /* Empty */         0 },
+  { /* c++11-extensions */                                      1573, /* DiagArray80 */ 165, /* DiagSubGroup80 */ 59 },
+  { /* c++11-extra-semi */                                      1590, /* DiagArray81 */ 191, /* Empty */         0 },
+  { /* c++11-inline-namespace */                                1607, /* DiagArray82 */ 193, /* Empty */         0 },
+  { /* c++11-long-long */                                       1630, /* DiagArray83 */ 195, /* Empty */         0 },
+  { /* c++11-narrowing */                                       1646, /* DiagArray84 */ 197, /* Empty */         0 },
+  { /* c++14-binary-literal */                                  1662, /* DiagArray85 */ 205, /* Empty */         0 },
+  { /* c++14-compat */                                          1683, /* Empty */     0, /* DiagSubGroup86 */ 63 },
+  { /* c++14-compat-pedantic */                                 1696, /* Empty */     0, /* DiagSubGroup87 */ 66 },
+  { /* c++14-extensions */                                      1718, /* DiagArray88 */ 207, /* DiagSubGroup88 */ 70 },
+  { /* c++17-compat */                                          1735, /* Empty */     0, /* DiagSubGroup89 */ 72 },
+  { /* c++17-compat-mangling */                                 1748, /* DiagArray90 */ 216, /* Empty */         0 },
+  { /* c++17-compat-pedantic */                                 1770, /* Empty */     0, /* DiagSubGroup91 */ 77 },
+  { /* c++17-extensions */                                      1792, /* DiagArray92 */ 218, /* Empty */         0 },
+  { /* c++1y-extensions */                                      1809, /* Empty */     0, /* DiagSubGroup93 */ 80 },
+  { /* c++1z-compat */                                          1826, /* Empty */     0, /* DiagSubGroup94 */ 82 },
+  { /* c++1z-compat-mangling */                                 1839, /* Empty */     0, /* DiagSubGroup95 */ 84 },
+  { /* c++1z-extensions */                                      1861, /* Empty */     0, /* DiagSubGroup96 */ 86 },
+  { /* c++2a-compat */                                          1878, /* DiagArray97 */ 237, /* Empty */         0 },
+  { /* c++2a-compat-pedantic */                                 1891, /* Empty */     0, /* DiagSubGroup98 */ 88 },
+  { /* c++2a-extensions */                                      1913, /* DiagArray99 */ 244, /* Empty */         0 },
+  { /* c++98-c++11-c++14-c++17-compat */                        1930, /* DiagArray100 */ 256, /* Empty */         0 },
+  { /* c++98-c++11-c++14-c++17-compat-pedantic */               1961, /* DiagArray101 */ 272, /* DiagSubGroup101 */ 90 },
+  { /* c++98-c++11-c++14-compat */                              2001, /* DiagArray102 */ 274, /* Empty */         0 },
+  { /* c++98-c++11-c++14-compat-pedantic */                     2026, /* DiagArray103 */ 292, /* DiagSubGroup103 */ 92 },
+  { /* c++98-c++11-compat */                                    2060, /* DiagArray104 */ 295, /* Empty */         0 },
+  { /* c++98-c++11-compat-binary-literal */                     2079, /* DiagArray105 */ 307, /* Empty */         0 },
+  { /* c++98-c++11-compat-pedantic */                           2113, /* Empty */     0, /* DiagSubGroup106 */ 94 },
+  { /* c++98-compat */                                          2141, /* DiagArray107 */ 309, /* DiagSubGroup107 */ 97 },
+  { /* c++98-compat-bind-to-temporary-copy */                   2154, /* DiagArray108 */ 369, /* Empty */         0 },
+  { /* c++98-compat-extra-semi */                               2190, /* DiagArray109 */ 371, /* Empty */         0 },
+  { /* c++98-compat-local-type-template-args */                 2214, /* DiagArray110 */ 373, /* Empty */         0 },
+  { /* c++98-compat-pedantic */                                 2252, /* DiagArray111 */ 375, /* DiagSubGroup111 */ 103 },
+  { /* c++98-compat-unnamed-type-template-args */               2274, /* DiagArray112 */ 385, /* Empty */         0 },
+  { /* c11-extensions */                                        2314, /* DiagArray113 */ 387, /* Empty */         0 },
+  { /* c99-compat */                                            2329, /* DiagArray114 */ 394, /* Empty */         0 },
+  { /* c99-extensions */                                        2340, /* DiagArray115 */ 398, /* Empty */         0 },
+  { /* call-to-pure-virtual-from-ctor-dtor */                   2355, /* DiagArray116 */ 409, /* Empty */         0 },
+  { /* cast-align */                                            2391, /* DiagArray117 */ 411, /* Empty */         0 },
+  { /* cast-calling-convention */                               2402, /* DiagArray118 */ 413, /* Empty */         0 },
+  { /* cast-of-sel-type */                                      2426, /* DiagArray119 */ 415, /* Empty */         0 },
+  { /* cast-qual */                                             2443, /* DiagArray120 */ 417, /* Empty */         0 },
+  { /* cast-qual-unrelated */                                   2453, /* DiagArray121 */ 420, /* Empty */         0 },
+  { /* char-align */                                            2473, /* Empty */     0, /* Empty */         0 },
+  { /* char-subscripts */                                       2484, /* DiagArray123 */ 422, /* Empty */         0 },
+  { /* clang-cl-pch */                                          2500, /* DiagArray124 */ 425, /* Empty */         0 },
+  { /* class-varargs */                                         2513, /* DiagArray125 */ 431, /* DiagSubGroup125 */ 110 },
+  { /* comma */                                                 2527, /* DiagArray126 */ 433, /* Empty */         0 },
+  { /* comment */                                               2533, /* DiagArray127 */ 435, /* Empty */         0 },
+  { /* comments */                                              2541, /* Empty */     0, /* DiagSubGroup128 */ 112 },
+  { /* compare-distinct-pointer-types */                        2550, /* DiagArray129 */ 440, /* Empty */         0 },
+  { /* complex-component-init */                                2581, /* DiagArray130 */ 442, /* Empty */         0 },
+  { /* conditional-type-mismatch */                             2604, /* DiagArray131 */ 444, /* Empty */         0 },
+  { /* conditional-uninitialized */                             2630, /* DiagArray132 */ 446, /* Empty */         0 },
+  { /* config-macros */                                         2656, /* DiagArray133 */ 448, /* Empty */         0 },
+  { /* constant-conversion */                                   2670, /* DiagArray134 */ 450, /* DiagSubGroup134 */ 114 },
+  { /* constant-logical-operand */                              2690, /* DiagArray135 */ 452, /* Empty */         0 },
+  { /* constexpr-not-const */                                   2715, /* DiagArray136 */ 454, /* Empty */         0 },
+  { /* consumed */                                              2735, /* DiagArray137 */ 456, /* Empty */         0 },
+  { /* conversion */                                            2744, /* DiagArray138 */ 465, /* DiagSubGroup138 */ 117 },
+  { /* conversion-null */                                       2755, /* Empty */     0, /* DiagSubGroup139 */ 133 },
+  { /* coroutine */                                             2771, /* Empty */     0, /* DiagSubGroup140 */ 135 },
+  { /* coroutine-missing-unhandled-exception */                 2781, /* DiagArray141 */ 471, /* Empty */         0 },
+  { /* covered-switch-default */                                2819, /* DiagArray142 */ 473, /* Empty */         0 },
+  { /* cpp */                                                   2842, /* Empty */     0, /* DiagSubGroup143 */ 137 },
+  { /* cstring-format-directive */                              2846, /* DiagArray144 */ 475, /* Empty */         0 },
+  { /* ctad-maybe-unsupported */                                2871, /* DiagArray145 */ 477, /* Empty */         0 },
+  { /* ctor-dtor-privacy */                                     2894, /* Empty */     0, /* Empty */         0 },
+  { /* ctu */                                                   2912, /* DiagArray147 */ 479, /* Empty */         0 },
+  { /* cuda-compat */                                           2916, /* DiagArray148 */ 481, /* Empty */         0 },
+  { /* custom-atomic-properties */                              2928, /* DiagArray149 */ 487, /* Empty */         0 },
+  { /* dangling */                                              2953, /* DiagArray150 */ 489, /* DiagSubGroup150 */ 139 },
+  { /* dangling-else */                                         2962, /* DiagArray151 */ 492, /* Empty */         0 },
+  { /* dangling-field */                                        2976, /* DiagArray152 */ 494, /* Empty */         0 },
+  { /* dangling-initializer-list */                             2991, /* DiagArray153 */ 499, /* Empty */         0 },
+  { /* darwin-sdk-settings */                                   3017, /* DiagArray154 */ 501, /* Empty */         0 },
+  { /* date-time */                                             3037, /* DiagArray155 */ 503, /* Empty */         0 },
+  { /* dealloc-in-category */                                   3047, /* DiagArray156 */ 505, /* Empty */         0 },
+  { /* debug-compression-unavailable */                         3067, /* DiagArray157 */ 507, /* Empty */         0 },
+  { /* declaration-after-statement */                           3097, /* DiagArray158 */ 509, /* Empty */         0 },
+  { /* defaulted-function-deleted */                            3125, /* DiagArray159 */ 511, /* Empty */         0 },
+  { /* delegating-ctor-cycles */                                3152, /* DiagArray160 */ 513, /* Empty */         0 },
+  { /* delete-abstract-non-virtual-dtor */                      3175, /* DiagArray161 */ 515, /* Empty */         0 },
+  { /* delete-incomplete */                                     3208, /* DiagArray162 */ 517, /* Empty */         0 },
+  { /* delete-non-abstract-non-virtual-dtor */                  3226, /* DiagArray163 */ 520, /* Empty */         0 },
+  { /* delete-non-virtual-dtor */                               3263, /* Empty */     0, /* DiagSubGroup164 */ 143 },
+  { /* deprecated */                                            3287, /* DiagArray165 */ 522, /* DiagSubGroup165 */ 146 },
+  { /* deprecated-attributes */                                 3298, /* DiagArray166 */ 531, /* Empty */         0 },
+  { /* deprecated-declarations */                               3320, /* DiagArray167 */ 533, /* Empty */         0 },
+  { /* deprecated-dynamic-exception-spec */                     3344, /* DiagArray168 */ 540, /* Empty */         0 },
+  { /* deprecated-implementations */                            3378, /* DiagArray169 */ 542, /* Empty */         0 },
+  { /* deprecated-increment-bool */                             3405, /* DiagArray170 */ 545, /* Empty */         0 },
+  { /* deprecated-objc-isa-usage */                             3431, /* DiagArray171 */ 547, /* Empty */         0 },
+  { /* deprecated-objc-pointer-introspection */                 3457, /* DiagArray172 */ 550, /* DiagSubGroup172 */ 154 },
+  { /* deprecated-objc-pointer-introspection-performSelector */ 3495, /* DiagArray173 */ 552, /* Empty */         0 },
+  { /* deprecated-register */                                   3549, /* DiagArray174 */ 554, /* Empty */         0 },
+  { /* deprecated-this-capture */                               3569, /* DiagArray175 */ 556, /* Empty */         0 },
+  { /* deprecated-writable-strings */                           3593, /* Empty */     0, /* DiagSubGroup176 */ 156 },
+  { /* direct-ivar-access */                                    3621, /* DiagArray177 */ 558, /* Empty */         0 },
+  { /* disabled-macro-expansion */                              3640, /* DiagArray178 */ 560, /* Empty */         0 },
+  { /* disabled-optimization */                                 3665, /* Empty */     0, /* Empty */         0 },
+  { /* discard-qual */                                          3687, /* Empty */     0, /* Empty */         0 },
+  { /* distributed-object-modifiers */                          3700, /* DiagArray181 */ 562, /* Empty */         0 },
+  { /* div-by-zero */                                           3729, /* Empty */     0, /* DiagSubGroup182 */ 158 },
+  { /* division-by-zero */                                      3741, /* DiagArray183 */ 565, /* Empty */         0 },
+  { /* dll-attribute-on-redeclaration */                        3758, /* DiagArray184 */ 567, /* Empty */         0 },
+  { /* dllexport-explicit-instantiation-decl */                 3789, /* DiagArray185 */ 569, /* Empty */         0 },
+  { /* dllimport-static-field-def */                            3827, /* DiagArray186 */ 571, /* Empty */         0 },
+  { /* documentation */                                         3854, /* DiagArray187 */ 573, /* DiagSubGroup187 */ 160 },
+  { /* documentation-deprecated-sync */                         3868, /* DiagArray188 */ 592, /* Empty */         0 },
+  { /* documentation-html */                                    3898, /* DiagArray189 */ 594, /* Empty */         0 },
+  { /* documentation-pedantic */                                3917, /* DiagArray190 */ 599, /* DiagSubGroup190 */ 163 },
+  { /* documentation-unknown-command */                         3940, /* DiagArray191 */ 601, /* Empty */         0 },
+  { /* dollar-in-identifier-extension */                        3970, /* DiagArray192 */ 604, /* Empty */         0 },
+  { /* double-promotion */                                      4001, /* DiagArray193 */ 606, /* Empty */         0 },
+  { /* duplicate-decl-specifier */                              4018, /* DiagArray194 */ 608, /* Empty */         0 },
+  { /* duplicate-enum */                                        4043, /* DiagArray195 */ 613, /* Empty */         0 },
+  { /* duplicate-method-arg */                                  4058, /* DiagArray196 */ 615, /* Empty */         0 },
+  { /* duplicate-method-match */                                4079, /* DiagArray197 */ 617, /* Empty */         0 },
+  { /* duplicate-protocol */                                    4102, /* DiagArray198 */ 619, /* Empty */         0 },
+  { /* dynamic-class-memaccess */                               4121, /* DiagArray199 */ 621, /* Empty */         0 },
+  { /* dynamic-exception-spec */                                4145, /* DiagArray200 */ 623, /* DiagSubGroup200 */ 165 },
+  { /* effc++ */                                                4168, /* Empty */     0, /* DiagSubGroup201 */ 167 },
+  { /* embedded-directive */                                    4175, /* DiagArray202 */ 625, /* Empty */         0 },
+  { /* empty-body */                                            4194, /* DiagArray203 */ 627, /* Empty */         0 },
+  { /* empty-decomposition */                                   4205, /* DiagArray204 */ 633, /* Empty */         0 },
+  { /* empty-init-stmt */                                       4225, /* DiagArray205 */ 635, /* Empty */         0 },
+  { /* empty-translation-unit */                                4241, /* DiagArray206 */ 637, /* Empty */         0 },
+  { /* encode-type */                                           4264, /* DiagArray207 */ 639, /* Empty */         0 },
+  { /* endif-labels */                                          4276, /* Empty */     0, /* DiagSubGroup208 */ 169 },
+  { /* enum-compare */                                          4289, /* DiagArray209 */ 641, /* DiagSubGroup209 */ 171 },
+  { /* enum-compare-switch */                                   4302, /* DiagArray210 */ 643, /* Empty */         0 },
+  { /* enum-conversion */                                       4322, /* DiagArray211 */ 645, /* Empty */         0 },
+  { /* enum-too-large */                                        4338, /* DiagArray212 */ 647, /* Empty */         0 },
+  { /* exceptions */                                            4353, /* DiagArray213 */ 650, /* Empty */         0 },
+  { /* exit-time-destructors */                                 4364, /* DiagArray214 */ 654, /* Empty */         0 },
+  { /* expansion-to-defined */                                  4386, /* DiagArray215 */ 656, /* Empty */         0 },
+  { /* experimental-isel */                                     4407, /* DiagArray216 */ 659, /* Empty */         0 },
+  { /* explicit-initialize-call */                              4425, /* DiagArray217 */ 662, /* Empty */         0 },
+  { /* explicit-ownership-type */                               4450, /* DiagArray218 */ 665, /* Empty */         0 },
+  { /* export-unnamed */                                        4474, /* DiagArray219 */ 667, /* Empty */         0 },
+  { /* export-using-directive */                                4489, /* DiagArray220 */ 670, /* Empty */         0 },
+  { /* extern-c-compat */                                       4512, /* DiagArray221 */ 672, /* Empty */         0 },
+  { /* extern-initializer */                                    4528, /* DiagArray222 */ 674, /* Empty */         0 },
+  { /* extra */                                                 4547, /* DiagArray223 */ 676, /* DiagSubGroup223 */ 173 },
+  { /* extra-qualification */                                   4553, /* DiagArray224 */ 678, /* Empty */         0 },
+  { /* extra-semi */                                            4573, /* DiagArray225 */ 680, /* DiagSubGroup225 */ 183 },
+  { /* extra-semi-stmt */                                       4584, /* DiagArray226 */ 683, /* DiagSubGroup226 */ 186 },
+  { /* extra-tokens */                                          4600, /* DiagArray227 */ 685, /* Empty */         0 },
+  { /* fallback */                                              4613, /* DiagArray228 */ 688, /* Empty */         0 },
+  { /* fixed-enum-extension */                                  4622, /* DiagArray229 */ 690, /* Empty */         0 },
+  { /* flag-enum */                                             4643, /* DiagArray230 */ 692, /* Empty */         0 },
+  { /* flexible-array-extensions */                             4653, /* DiagArray231 */ 694, /* Empty */         0 },
+  { /* float-conversion */                                      4679, /* DiagArray232 */ 697, /* DiagSubGroup232 */ 188 },
+  { /* float-equal */                                           4696, /* DiagArray233 */ 699, /* Empty */         0 },
+  { /* float-overflow-conversion */                             4708, /* DiagArray234 */ 701, /* Empty */         0 },
+  { /* float-zero-conversion */                                 4734, /* DiagArray235 */ 704, /* Empty */         0 },
+  { /* for-loop-analysis */                                     4756, /* DiagArray236 */ 706, /* Empty */         0 },
+  { /* format */                                                4774, /* DiagArray237 */ 709, /* DiagSubGroup237 */ 191 },
+  { /* format-extra-args */                                     4781, /* DiagArray238 */ 735, /* Empty */         0 },
+  { /* format-invalid-specifier */                              4799, /* DiagArray239 */ 737, /* Empty */         0 },
+  { /* format-non-iso */                                        4824, /* DiagArray240 */ 739, /* Empty */         0 },
+  { /* format-nonliteral */                                     4839, /* DiagArray241 */ 743, /* Empty */         0 },
+  { /* format-pedantic */                                       4857, /* DiagArray242 */ 745, /* Empty */         0 },
+  { /* format-security */                                       4873, /* DiagArray243 */ 748, /* Empty */         0 },
+  { /* format-y2k */                                            4889, /* Empty */     0, /* Empty */         0 },
+  { /* format-zero-length */                                    4900, /* DiagArray245 */ 750, /* Empty */         0 },
+  { /* format=2 */                                              4919, /* Empty */     0, /* DiagSubGroup246 */ 198 },
+  { /* fortify-source */                                        4928, /* DiagArray247 */ 752, /* Empty */         0 },
+  { /* four-char-constants */                                   4943, /* DiagArray248 */ 755, /* Empty */         0 },
+  { /* frame-larger-than= */                                    4963, /* DiagArray249 */ 757, /* Empty */         0 },
+  { /* framework-include-private-from-public */                 4982, /* DiagArray250 */ 760, /* Empty */         0 },
+  { /* function-def-in-objc-container */                        5020, /* DiagArray251 */ 762, /* Empty */         0 },
+  { /* function-multiversion */                                 5051, /* DiagArray252 */ 764, /* Empty */         0 },
+  { /* future-compat */                                         5073, /* Empty */     0, /* Empty */         0 },
+  { /* gcc-compat */                                            5087, /* DiagArray254 */ 767, /* Empty */         0 },
+  { /* global-constructors */                                   5098, /* DiagArray255 */ 778, /* Empty */         0 },
+  { /* gnu */                                                   5118, /* Empty */     0, /* DiagSubGroup256 */ 202 },
+  { /* gnu-alignof-expression */                                5122, /* DiagArray257 */ 781, /* Empty */         0 },
+  { /* gnu-anonymous-struct */                                  5145, /* DiagArray258 */ 783, /* Empty */         0 },
+  { /* gnu-array-member-paren-init */                           5166, /* DiagArray259 */ 785, /* Empty */         0 },
+  { /* gnu-auto-type */                                         5194, /* DiagArray260 */ 787, /* Empty */         0 },
+  { /* gnu-binary-literal */                                    5208, /* DiagArray261 */ 789, /* Empty */         0 },
+  { /* gnu-case-range */                                        5227, /* DiagArray262 */ 791, /* Empty */         0 },
+  { /* gnu-complex-integer */                                   5242, /* DiagArray263 */ 793, /* Empty */         0 },
+  { /* gnu-compound-literal-initializer */                      5262, /* DiagArray264 */ 795, /* Empty */         0 },
+  { /* gnu-conditional-omitted-operand */                       5295, /* DiagArray265 */ 797, /* Empty */         0 },
+  { /* gnu-designator */                                        5327, /* DiagArray266 */ 799, /* Empty */         0 },
+  { /* gnu-empty-initializer */                                 5342, /* DiagArray267 */ 803, /* Empty */         0 },
+  { /* gnu-empty-struct */                                      5364, /* DiagArray268 */ 805, /* Empty */         0 },
+  { /* gnu-flexible-array-initializer */                        5381, /* DiagArray269 */ 809, /* Empty */         0 },
+  { /* gnu-flexible-array-union-member */                       5412, /* DiagArray270 */ 811, /* Empty */         0 },
+  { /* gnu-folding-constant */                                  5444, /* DiagArray271 */ 813, /* Empty */         0 },
+  { /* gnu-imaginary-constant */                                5465, /* DiagArray272 */ 817, /* Empty */         0 },
+  { /* gnu-include-next */                                      5488, /* DiagArray273 */ 819, /* Empty */         0 },
+  { /* gnu-label-as-value */                                    5505, /* DiagArray274 */ 821, /* Empty */         0 },
+  { /* gnu-redeclared-enum */                                   5524, /* DiagArray275 */ 824, /* Empty */         0 },
+  { /* gnu-statement-expression */                              5544, /* DiagArray276 */ 826, /* Empty */         0 },
+  { /* gnu-static-float-init */                                 5569, /* DiagArray277 */ 828, /* Empty */         0 },
+  { /* gnu-string-literal-operator-template */                  5591, /* DiagArray278 */ 830, /* Empty */         0 },
+  { /* gnu-union-cast */                                        5628, /* DiagArray279 */ 832, /* Empty */         0 },
+  { /* gnu-variable-sized-type-not-at-end */                    5643, /* DiagArray280 */ 834, /* Empty */         0 },
+  { /* gnu-zero-line-directive */                               5678, /* DiagArray281 */ 836, /* Empty */         0 },
+  { /* gnu-zero-variadic-macro-arguments */                     5702, /* DiagArray282 */ 838, /* Empty */         0 },
+  { /* header-guard */                                          5736, /* DiagArray283 */ 841, /* Empty */         0 },
+  { /* header-hygiene */                                        5749, /* DiagArray284 */ 843, /* Empty */         0 },
+  { /* idiomatic-parentheses */                                 5764, /* DiagArray285 */ 845, /* Empty */         0 },
+  { /* ignored-attributes */                                    5786, /* DiagArray286 */ 847, /* Empty */         0 },
+  { /* ignored-optimization-argument */                         5805, /* DiagArray287 */ 910, /* Empty */         0 },
+  { /* ignored-pragma-intrinsic */                              5835, /* DiagArray288 */ 913, /* Empty */         0 },
+  { /* ignored-pragma-optimize */                               5860, /* DiagArray289 */ 915, /* Empty */         0 },
+  { /* ignored-pragmas */                                       5884, /* DiagArray290 */ 917, /* DiagSubGroup290 */ 231 },
+  { /* ignored-qualifiers */                                    5900, /* DiagArray291 */ 961, /* Empty */         0 },
+  { /* implicit */                                              5919, /* Empty */     0, /* DiagSubGroup292 */ 234 },
+  { /* implicit-atomic-properties */                            5928, /* DiagArray293 */ 967, /* Empty */         0 },
+  { /* implicit-conversion-floating-point-to-bool */            5955, /* DiagArray294 */ 970, /* Empty */         0 },
+  { /* implicit-exception-spec-mismatch */                      5998, /* DiagArray295 */ 972, /* Empty */         0 },
+  { /* implicit-fallthrough */                                  6031, /* DiagArray296 */ 974, /* DiagSubGroup296 */ 237 },
+  { /* implicit-fallthrough-per-function */                     6052, /* DiagArray297 */ 977, /* Empty */         0 },
+  { /* implicit-fixed-point-conversion */                       6086, /* DiagArray298 */ 979, /* Empty */         0 },
+  { /* implicit-float-conversion */                             6118, /* DiagArray299 */ 981, /* Empty */         0 },
+  { /* implicit-function-declaration */                         6144, /* DiagArray300 */ 984, /* Empty */         0 },
+  { /* implicit-int */                                          6174, /* DiagArray301 */ 989, /* Empty */         0 },
+  { /* implicit-int-conversion */                               6187, /* DiagArray302 */ 991, /* Empty */         0 },
+  { /* implicit-retain-self */                                  6211, /* DiagArray303 */ 994, /* Empty */         0 },
+  { /* implicitly-unsigned-literal */                           6232, /* DiagArray304 */ 996, /* Empty */         0 },
+  { /* import */                                                6260, /* Empty */     0, /* Empty */         0 },
+  { /* import-preprocessor-directive-pedantic */                6267, /* DiagArray306 */ 998, /* Empty */         0 },
+  { /* inaccessible-base */                                     6306, /* DiagArray307 */ 1000, /* Empty */         0 },
+  { /* include-next-absolute-path */                            6324, /* DiagArray308 */ 1002, /* Empty */         0 },
+  { /* include-next-outside-header */                           6351, /* DiagArray309 */ 1004, /* Empty */         0 },
+  { /* incompatible-exception-spec */                           6379, /* DiagArray310 */ 1006, /* Empty */         0 },
+  { /* incompatible-function-pointer-types */                   6407, /* DiagArray311 */ 1009, /* Empty */         0 },
+  { /* incompatible-library-redeclaration */                    6443, /* DiagArray312 */ 1011, /* Empty */         0 },
+  { /* incompatible-ms-struct */                                6478, /* DiagArray313 */ 1013, /* Empty */         0 },
+  { /* incompatible-pointer-types */                            6501, /* DiagArray314 */ 1016, /* DiagSubGroup314 */ 239 },
+  { /* incompatible-pointer-types-discards-qualifiers */        6528, /* DiagArray315 */ 1018, /* Empty */         0 },
+  { /* incompatible-property-type */                            6575, /* DiagArray316 */ 1021, /* Empty */         0 },
+  { /* incompatible-sysroot */                                  6602, /* DiagArray317 */ 1023, /* Empty */         0 },
+  { /* incomplete-framework-module-declaration */               6623, /* DiagArray318 */ 1025, /* Empty */         0 },
+  { /* incomplete-implementation */                             6663, /* DiagArray319 */ 1027, /* Empty */         0 },
+  { /* incomplete-module */                                     6689, /* Empty */     0, /* DiagSubGroup320 */ 242 },
+  { /* incomplete-umbrella */                                   6707, /* DiagArray321 */ 1029, /* Empty */         0 },
+  { /* inconsistent-dllimport */                                6727, /* DiagArray322 */ 1033, /* Empty */         0 },
+  { /* inconsistent-missing-destructor-override */              6750, /* DiagArray323 */ 1036, /* Empty */         0 },
+  { /* inconsistent-missing-override */                         6791, /* DiagArray324 */ 1038, /* Empty */         0 },
+  { /* increment-bool */                                        6821, /* DiagArray325 */ 1040, /* DiagSubGroup325 */ 245 },
+  { /* infinite-recursion */                                    6836, /* DiagArray326 */ 1042, /* Empty */         0 },
+  { /* init-self */                                             6855, /* Empty */     0, /* Empty */         0 },
+  { /* initializer-overrides */                                 6865, /* DiagArray328 */ 1044, /* Empty */         0 },
+  { /* injected-class-name */                                   6887, /* DiagArray329 */ 1047, /* Empty */         0 },
+  { /* inline */                                                6907, /* Empty */     0, /* Empty */         0 },
+  { /* inline-asm */                                            6914, /* DiagArray331 */ 1049, /* Empty */         0 },
+  { /* inline-new-delete */                                     6925, /* DiagArray332 */ 1051, /* Empty */         0 },
+  { /* instantiation-after-specialization */                    6943, /* DiagArray333 */ 1053, /* Empty */         0 },
+  { /* int-conversion */                                        6978, /* DiagArray334 */ 1055, /* Empty */         0 },
+  { /* int-conversions */                                       6993, /* Empty */     0, /* DiagSubGroup335 */ 247 },
+  { /* int-to-pointer-cast */                                   7009, /* DiagArray336 */ 1058, /* DiagSubGroup336 */ 249 },
+  { /* int-to-void-pointer-cast */                              7029, /* DiagArray337 */ 1060, /* Empty */         0 },
+  { /* integer-overflow */                                      7054, /* DiagArray338 */ 1062, /* Empty */         0 },
+  { /* invalid-command-line-argument */                         7071, /* DiagArray339 */ 1064, /* DiagSubGroup339 */ 251 },
+  { /* invalid-constexpr */                                     7101, /* DiagArray340 */ 1070, /* Empty */         0 },
+  { /* invalid-iboutlet */                                      7119, /* DiagArray341 */ 1072, /* Empty */         0 },
+  { /* invalid-initializer-from-system-header */                7136, /* DiagArray342 */ 1075, /* Empty */         0 },
+  { /* invalid-ios-deployment-target */                         7175, /* DiagArray343 */ 1077, /* Empty */         0 },
+  { /* invalid-noreturn */                                      7205, /* DiagArray344 */ 1079, /* Empty */         0 },
+  { /* invalid-offsetof */                                      7222, /* DiagArray345 */ 1082, /* Empty */         0 },
+  { /* invalid-or-nonexistent-directory */                      7239, /* DiagArray346 */ 1085, /* Empty */         0 },
+  { /* invalid-partial-specialization */                        7272, /* DiagArray347 */ 1088, /* Empty */         0 },
+  { /* invalid-pch */                                           7303, /* Empty */     0, /* Empty */         0 },
+  { /* invalid-pp-token */                                      7315, /* DiagArray349 */ 1090, /* Empty */         0 },
+  { /* invalid-source-encoding */                               7332, /* DiagArray350 */ 1093, /* Empty */         0 },
+  { /* invalid-token-paste */                                   7356, /* DiagArray351 */ 1096, /* Empty */         0 },
+  { /* jump-seh-finally */                                      7376, /* DiagArray352 */ 1098, /* Empty */         0 },
+  { /* keyword-compat */                                        7393, /* DiagArray353 */ 1100, /* Empty */         0 },
+  { /* keyword-macro */                                         7408, /* DiagArray354 */ 1102, /* Empty */         0 },
+  { /* knr-promoted-parameter */                                7422, /* DiagArray355 */ 1104, /* Empty */         0 },
+  { /* language-extension-token */                              7445, /* DiagArray356 */ 1106, /* Empty */         0 },
+  { /* large-by-value-copy */                                   7470, /* DiagArray357 */ 1108, /* Empty */         0 },
+  { /* liblto */                                                7490, /* Empty */     0, /* Empty */         0 },
+  { /* literal-conversion */                                    7497, /* DiagArray359 */ 1111, /* Empty */         0 },
+  { /* literal-range */                                         7516, /* DiagArray360 */ 1114, /* Empty */         0 },
+  { /* local-type-template-args */                              7530, /* DiagArray361 */ 1117, /* DiagSubGroup361 */ 253 },
+  { /* logical-not-parentheses */                               7555, /* DiagArray362 */ 1119, /* Empty */         0 },
+  { /* logical-op-parentheses */                                7579, /* DiagArray363 */ 1121, /* Empty */         0 },
+  { /* long-long */                                             7602, /* DiagArray364 */ 1123, /* DiagSubGroup364 */ 255 },
+  { /* loop-analysis */                                         7612, /* Empty */     0, /* DiagSubGroup365 */ 257 },
+  { /* macro-redefined */                                       7626, /* DiagArray366 */ 1125, /* Empty */         0 },
+  { /* main */                                                  7642, /* DiagArray367 */ 1127, /* Empty */         0 },
+  { /* main-return-type */                                      7647, /* DiagArray368 */ 1135, /* Empty */         0 },
+  { /* malformed-warning-check */                               7664, /* DiagArray369 */ 1137, /* Empty */         0 },
+  { /* many-braces-around-scalar-init */                        7688, /* DiagArray370 */ 1139, /* Empty */         0 },
+  { /* max-unsigned-zero */                                     7719, /* DiagArray371 */ 1141, /* Empty */         0 },
+  { /* memset-transposed-args */                                7737, /* DiagArray372 */ 1143, /* Empty */         0 },
+  { /* memsize-comparison */                                    7760, /* DiagArray373 */ 1145, /* Empty */         0 },
+  { /* method-signatures */                                     7779, /* DiagArray374 */ 1147, /* Empty */         0 },
+  { /* microsoft */                                             7797, /* Empty */     0, /* DiagSubGroup375 */ 260 },
+  { /* microsoft-anon-tag */                                    7807, /* DiagArray376 */ 1150, /* Empty */         0 },
+  { /* microsoft-cast */                                        7826, /* DiagArray377 */ 1153, /* Empty */         0 },
+  { /* microsoft-charize */                                     7841, /* DiagArray378 */ 1156, /* Empty */         0 },
+  { /* microsoft-comment-paste */                               7859, /* DiagArray379 */ 1158, /* Empty */         0 },
+  { /* microsoft-const-init */                                  7883, /* DiagArray380 */ 1160, /* Empty */         0 },
+  { /* microsoft-cpp-macro */                                   7904, /* DiagArray381 */ 1162, /* Empty */         0 },
+  { /* microsoft-default-arg-redefinition */                    7924, /* DiagArray382 */ 1164, /* Empty */         0 },
+  { /* microsoft-drectve-section */                             7959, /* DiagArray383 */ 1166, /* Empty */         0 },
+  { /* microsoft-end-of-file */                                 7985, /* DiagArray384 */ 1168, /* Empty */         0 },
+  { /* microsoft-enum-forward-reference */                      8007, /* DiagArray385 */ 1170, /* Empty */         0 },
+  { /* microsoft-enum-value */                                  8040, /* DiagArray386 */ 1172, /* Empty */         0 },
+  { /* microsoft-exception-spec */                              8061, /* DiagArray387 */ 1174, /* Empty */         0 },
+  { /* microsoft-exists */                                      8086, /* DiagArray388 */ 1181, /* Empty */         0 },
+  { /* microsoft-explicit-constructor-call */                   8103, /* DiagArray389 */ 1183, /* Empty */         0 },
+  { /* microsoft-extra-qualification */                         8139, /* DiagArray390 */ 1185, /* Empty */         0 },
+  { /* microsoft-fixed-enum */                                  8169, /* DiagArray391 */ 1187, /* Empty */         0 },
+  { /* microsoft-flexible-array */                              8190, /* DiagArray392 */ 1189, /* Empty */         0 },
+  { /* microsoft-goto */                                        8215, /* DiagArray393 */ 1192, /* Empty */         0 },
+  { /* microsoft-inaccessible-base */                           8230, /* DiagArray394 */ 1194, /* Empty */         0 },
+  { /* microsoft-include */                                     8258, /* DiagArray395 */ 1196, /* Empty */         0 },
+  { /* microsoft-mutable-reference */                           8276, /* DiagArray396 */ 1198, /* Empty */         0 },
+  { /* microsoft-pure-definition */                             8304, /* DiagArray397 */ 1200, /* Empty */         0 },
+  { /* microsoft-redeclare-static */                            8330, /* DiagArray398 */ 1202, /* Empty */         0 },
+  { /* microsoft-sealed */                                      8357, /* DiagArray399 */ 1204, /* Empty */         0 },
+  { /* microsoft-template */                                    8374, /* DiagArray400 */ 1206, /* Empty */         0 },
+  { /* microsoft-union-member-reference */                      8393, /* DiagArray401 */ 1215, /* Empty */         0 },
+  { /* microsoft-unqualified-friend */                          8426, /* DiagArray402 */ 1217, /* Empty */         0 },
+  { /* microsoft-using-decl */                                  8455, /* DiagArray403 */ 1219, /* Empty */         0 },
+  { /* microsoft-void-pseudo-dtor */                            8476, /* DiagArray404 */ 1221, /* Empty */         0 },
+  { /* mismatched-new-delete */                                 8503, /* DiagArray405 */ 1223, /* Empty */         0 },
+  { /* mismatched-parameter-types */                            8525, /* DiagArray406 */ 1225, /* Empty */         0 },
+  { /* mismatched-return-types */                               8552, /* DiagArray407 */ 1227, /* Empty */         0 },
+  { /* mismatched-tags */                                       8576, /* DiagArray408 */ 1229, /* Empty */         0 },
+  { /* missing-braces */                                        8592, /* DiagArray409 */ 1232, /* Empty */         0 },
+  { /* missing-declarations */                                  8607, /* DiagArray410 */ 1234, /* Empty */         0 },
+  { /* missing-exception-spec */                                8628, /* DiagArray411 */ 1239, /* Empty */         0 },
+  { /* missing-field-initializers */                            8651, /* DiagArray412 */ 1241, /* Empty */         0 },
+  { /* missing-format-attribute */                              8678, /* Empty */     0, /* Empty */         0 },
+  { /* missing-include-dirs */                                  8703, /* Empty */     0, /* Empty */         0 },
+  { /* missing-method-return-type */                            8724, /* DiagArray415 */ 1243, /* Empty */         0 },
+  { /* missing-noescape */                                      8751, /* DiagArray416 */ 1245, /* Empty */         0 },
+  { /* missing-noreturn */                                      8768, /* DiagArray417 */ 1247, /* Empty */         0 },
+  { /* missing-prototype-for-cc */                              8785, /* DiagArray418 */ 1250, /* Empty */         0 },
+  { /* missing-prototypes */                                    8810, /* DiagArray419 */ 1252, /* Empty */         0 },
+  { /* missing-selector-name */                                 8829, /* DiagArray420 */ 1254, /* Empty */         0 },
+  { /* missing-sysroot */                                       8851, /* DiagArray421 */ 1256, /* Empty */         0 },
+  { /* missing-variable-declarations */                         8867, /* DiagArray422 */ 1258, /* Empty */         0 },
+  { /* module-build */                                          8897, /* DiagArray423 */ 1260, /* Empty */         0 },
+  { /* module-conflict */                                       8910, /* DiagArray424 */ 1265, /* Empty */         0 },
+  { /* module-file-config-mismatch */                           8926, /* DiagArray425 */ 1268, /* Empty */         0 },
+  { /* module-file-extension */                                 8954, /* DiagArray426 */ 1270, /* Empty */         0 },
+  { /* module-import */                                         8976, /* DiagArray427 */ 1272, /* Empty */         0 },
+  { /* module-import-in-extern-c */                             8990, /* DiagArray428 */ 1274, /* Empty */         0 },
+  { /* modules-ambiguous-internal-linkage */                    9016, /* DiagArray429 */ 1276, /* Empty */         0 },
+  { /* modules-import-nested-redundant */                       9051, /* DiagArray430 */ 1278, /* Empty */         0 },
+  { /* most */                                                  9083, /* Empty */     0, /* DiagSubGroup431 */ 289 },
+  { /* move */                                                  9088, /* Empty */     0, /* DiagSubGroup432 */ 321 },
+  { /* msvc-include */                                          9093, /* Empty */     0, /* DiagSubGroup433 */ 326 },
+  { /* msvc-not-found */                                        9106, /* DiagArray434 */ 1280, /* Empty */         0 },
+  { /* multichar */                                             9121, /* DiagArray435 */ 1282, /* Empty */         0 },
+  { /* multiple-move-vbase */                                   9131, /* DiagArray436 */ 1284, /* Empty */         0 },
+  { /* narrowing */                                             9151, /* Empty */     0, /* DiagSubGroup437 */ 328 },
+  { /* nested-anon-types */                                     9161, /* DiagArray438 */ 1286, /* Empty */         0 },
+  { /* nested-externs */                                        9179, /* Empty */     0, /* Empty */         0 },
+  { /* new-returns-null */                                      9194, /* DiagArray440 */ 1288, /* Empty */         0 },
+  { /* newline-eof */                                           9211, /* DiagArray441 */ 1290, /* Empty */         0 },
+  { /* noderef */                                               9223, /* DiagArray442 */ 1293, /* Empty */         0 },
+  { /* noexcept-type */                                         9231, /* Empty */     0, /* DiagSubGroup443 */ 330 },
+  { /* non-gcc */                                               9245, /* Empty */     0, /* DiagSubGroup444 */ 332 },
+  { /* non-literal-null-conversion */                           9253, /* DiagArray445 */ 1297, /* Empty */         0 },
+  { /* non-modular-include-in-framework-module */               9281, /* DiagArray446 */ 1299, /* Empty */         0 },
+  { /* non-modular-include-in-module */                         9321, /* DiagArray447 */ 1301, /* DiagSubGroup447 */ 336 },
+  { /* non-pod-varargs */                                       9351, /* DiagArray448 */ 1303, /* Empty */         0 },
+  { /* non-virtual-dtor */                                      9367, /* DiagArray449 */ 1308, /* Empty */         0 },
+  { /* nonnull */                                               9384, /* DiagArray450 */ 1310, /* Empty */         0 },
+  { /* nonportable-cfstrings */                                 9392, /* Empty */     0, /* Empty */         0 },
+  { /* nonportable-include-path */                              9414, /* DiagArray452 */ 1313, /* Empty */         0 },
+  { /* nonportable-system-include-path */                       9439, /* DiagArray453 */ 1315, /* Empty */         0 },
+  { /* nonportable-vector-initialization */                     9471, /* DiagArray454 */ 1317, /* Empty */         0 },
+  { /* nontrivial-memaccess */                                  9505, /* DiagArray455 */ 1319, /* Empty */         0 },
+  { /* nsconsumed-mismatch */                                   9526, /* DiagArray456 */ 1321, /* Empty */         0 },
+  { /* nsreturns-mismatch */                                    9546, /* DiagArray457 */ 1323, /* Empty */         0 },
+  { /* null-arithmetic */                                       9565, /* DiagArray458 */ 1325, /* Empty */         0 },
+  { /* null-character */                                        9581, /* DiagArray459 */ 1328, /* Empty */         0 },
+  { /* null-conversion */                                       9596, /* DiagArray460 */ 1331, /* Empty */         0 },
+  { /* null-dereference */                                      9612, /* DiagArray461 */ 1333, /* Empty */         0 },
+  { /* null-pointer-arithmetic */                               9629, /* DiagArray462 */ 1336, /* Empty */         0 },
+  { /* nullability */                                           9653, /* DiagArray463 */ 1339, /* Empty */         0 },
+  { /* nullability-completeness */                              9665, /* DiagArray464 */ 1345, /* DiagSubGroup464 */ 338 },
+  { /* nullability-completeness-on-arrays */                    9690, /* DiagArray465 */ 1347, /* Empty */         0 },
+  { /* nullability-declspec */                                  9725, /* DiagArray466 */ 1349, /* Empty */         0 },
+  { /* nullability-extension */                                 9746, /* DiagArray467 */ 1351, /* Empty */         0 },
+  { /* nullability-inferred-on-nested-type */                   9768, /* DiagArray468 */ 1353, /* Empty */         0 },
+  { /* nullable-to-nonnull-conversion */                        9804, /* DiagArray469 */ 1355, /* Empty */         0 },
+  { /* objc-autosynthesis-property-ivar-name-match */           9835, /* DiagArray470 */ 1357, /* Empty */         0 },
+  { /* objc-bool-constant-conversion */                         9879, /* DiagArray471 */ 1359, /* Empty */         0 },
+  { /* objc-boxing */                                           9909, /* DiagArray472 */ 1361, /* Empty */         0 },
+  { /* objc-circular-container */                               9921, /* DiagArray473 */ 1363, /* Empty */         0 },
+  { /* objc-cocoa-api */                                        9945, /* Empty */     0, /* DiagSubGroup474 */ 340 },
+  { /* objc-designated-initializers */                          9960, /* DiagArray475 */ 1365, /* Empty */         0 },
+  { /* objc-flexible-array */                                   9989, /* DiagArray476 */ 1372, /* Empty */         0 },
+  { /* objc-forward-class-redefinition */                       10009, /* DiagArray477 */ 1375, /* Empty */         0 },
+  { /* objc-interface-ivars */                                  10041, /* DiagArray478 */ 1377, /* Empty */         0 },
+  { /* objc-literal-compare */                                  10062, /* DiagArray479 */ 1379, /* DiagSubGroup479 */ 342 },
+  { /* objc-literal-conversion */                               10083, /* DiagArray480 */ 1381, /* Empty */         0 },
+  { /* objc-macro-redefinition */                               10107, /* DiagArray481 */ 1384, /* Empty */         0 },
+  { /* objc-messaging-id */                                     10131, /* DiagArray482 */ 1386, /* Empty */         0 },
+  { /* objc-method-access */                                    10149, /* DiagArray483 */ 1388, /* Empty */         0 },
+  { /* objc-missing-property-synthesis */                       10168, /* DiagArray484 */ 1395, /* Empty */         0 },
+  { /* objc-missing-super-calls */                              10200, /* DiagArray485 */ 1397, /* Empty */         0 },
+  { /* objc-multiple-method-names */                            10225, /* DiagArray486 */ 1399, /* Empty */         0 },
+  { /* objc-noncopy-retain-block-property */                    10252, /* DiagArray487 */ 1401, /* Empty */         0 },
+  { /* objc-nonunified-exceptions */                            10287, /* DiagArray488 */ 1403, /* Empty */         0 },
+  { /* objc-property-assign-on-object-type */                   10314, /* DiagArray489 */ 1405, /* Empty */         0 },
+  { /* objc-property-implementation */                          10350, /* DiagArray490 */ 1407, /* Empty */         0 },
+  { /* objc-property-implicit-mismatch */                       10379, /* DiagArray491 */ 1412, /* Empty */         0 },
+  { /* objc-property-matches-cocoa-ownership-rule */            10411, /* DiagArray492 */ 1414, /* Empty */         0 },
+  { /* objc-property-no-attribute */                            10454, /* DiagArray493 */ 1416, /* Empty */         0 },
+  { /* objc-property-synthesis */                               10481, /* DiagArray494 */ 1419, /* Empty */         0 },
+  { /* objc-protocol-method-implementation */                   10505, /* DiagArray495 */ 1423, /* Empty */         0 },
+  { /* objc-protocol-property-synthesis */                      10541, /* DiagArray496 */ 1425, /* Empty */         0 },
+  { /* objc-protocol-qualifiers */                              10574, /* DiagArray497 */ 1427, /* Empty */         0 },
+  { /* objc-readonly-with-setter-property */                    10599, /* DiagArray498 */ 1429, /* Empty */         0 },
+  { /* objc-redundant-api-use */                                10634, /* Empty */     0, /* DiagSubGroup499 */ 344 },
+  { /* objc-redundant-literal-use */                            10657, /* DiagArray500 */ 1431, /* Empty */         0 },
+  { /* objc-root-class */                                       10684, /* DiagArray501 */ 1433, /* Empty */         0 },
+  { /* objc-string-compare */                                   10700, /* DiagArray502 */ 1435, /* Empty */         0 },
+  { /* objc-string-concatenation */                             10720, /* DiagArray503 */ 1437, /* Empty */         0 },
+  { /* objc-unsafe-perform-selector */                          10746, /* DiagArray504 */ 1439, /* Empty */         0 },
+  { /* odr */                                                   10775, /* DiagArray505 */ 1441, /* Empty */         0 },
+  { /* old-style-cast */                                        10779, /* DiagArray506 */ 1460, /* Empty */         0 },
+  { /* old-style-definition */                                  10794, /* Empty */     0, /* Empty */         0 },
+  { /* opencl-unsupported-rgba */                               10815, /* DiagArray508 */ 1462, /* Empty */         0 },
+  { /* openmp-clauses */                                        10839, /* DiagArray509 */ 1464, /* Empty */         0 },
+  { /* openmp-loop-form */                                      10854, /* DiagArray510 */ 1469, /* Empty */         0 },
+  { /* openmp-target */                                         10871, /* DiagArray511 */ 1472, /* Empty */         0 },
+  { /* option-ignored */                                        10885, /* DiagArray512 */ 1477, /* Empty */         0 },
+  { /* ordered-compare-function-pointers */                     10900, /* DiagArray513 */ 1484, /* Empty */         0 },
+  { /* out-of-line-declaration */                               10934, /* DiagArray514 */ 1486, /* Empty */         0 },
+  { /* out-of-scope-function */                                 10958, /* DiagArray515 */ 1488, /* Empty */         0 },
+  { /* over-aligned */                                          10980, /* DiagArray516 */ 1490, /* Empty */         0 },
+  { /* overflow */                                              10993, /* Empty */     0, /* Empty */         0 },
+  { /* overlength-strings */                                    11002, /* DiagArray518 */ 1492, /* Empty */         0 },
+  { /* overloaded-shift-op-parentheses */                       11021, /* DiagArray519 */ 1494, /* Empty */         0 },
+  { /* overloaded-virtual */                                    11053, /* DiagArray520 */ 1496, /* Empty */         0 },
+  { /* override-init */                                         11072, /* Empty */     0, /* DiagSubGroup521 */ 346 },
+  { /* override-module */                                       11086, /* DiagArray522 */ 1498, /* Empty */         0 },
+  { /* overriding-method-mismatch */                            11102, /* DiagArray523 */ 1500, /* Empty */         0 },
+  { /* overriding-t-option */                                   11129, /* DiagArray524 */ 1508, /* Empty */         0 },
+  { /* packed */                                                11149, /* DiagArray525 */ 1510, /* Empty */         0 },
+  { /* padded */                                                11156, /* DiagArray526 */ 1512, /* Empty */         0 },
+  { /* parentheses */                                           11163, /* DiagArray527 */ 1516, /* DiagSubGroup527 */ 348 },
+  { /* parentheses-equality */                                  11175, /* DiagArray528 */ 1520, /* Empty */         0 },
+  { /* partial-availability */                                  11196, /* Empty */     0, /* DiagSubGroup529 */ 356 },
+  { /* pass */                                                  11217, /* DiagArray530 */ 1522, /* Empty */         0 },
+  { /* pass-analysis */                                         11222, /* DiagArray531 */ 1524, /* Empty */         0 },
+  { /* pass-failed */                                           11236, /* DiagArray532 */ 1528, /* Empty */         0 },
+  { /* pass-missed */                                           11248, /* DiagArray533 */ 1530, /* Empty */         0 },
+  { /* pch-date-time */                                         11260, /* DiagArray534 */ 1532, /* Empty */         0 },
+  { /* pedantic */                                              11274, /* DiagArray535 */ 1534, /* DiagSubGroup535 */ 358 },
+  { /* pedantic-core-features */                                11283, /* DiagArray536 */ 1606, /* Empty */         0 },
+  { /* pessimizing-move */                                      11306, /* DiagArray537 */ 1608, /* Empty */         0 },
+  { /* pointer-arith */                                         11323, /* DiagArray538 */ 1611, /* Empty */         0 },
+  { /* pointer-bool-conversion */                               11337, /* DiagArray539 */ 1618, /* Empty */         0 },
+  { /* pointer-integer-compare */                               11361, /* DiagArray540 */ 1621, /* Empty */         0 },
+  { /* pointer-sign */                                          11385, /* DiagArray541 */ 1623, /* Empty */         0 },
+  { /* pointer-to-int-cast */                                   11398, /* Empty */     0, /* Empty */         0 },
+  { /* pointer-type-mismatch */                                 11418, /* DiagArray543 */ 1625, /* Empty */         0 },
+  { /* potentially-evaluated-expression */                      11440, /* DiagArray544 */ 1627, /* Empty */         0 },
+  { /* pragma-clang-attribute */                                11473, /* DiagArray545 */ 1629, /* Empty */         0 },
+  { /* pragma-once-outside-header */                            11496, /* DiagArray546 */ 1631, /* Empty */         0 },
+  { /* pragma-pack */                                           11523, /* DiagArray547 */ 1633, /* DiagSubGroup547 */ 410 },
+  { /* pragma-pack-suspicious-include */                        11535, /* DiagArray548 */ 1636, /* Empty */         0 },
+  { /* pragma-system-header-outside-header */                   11566, /* DiagArray549 */ 1638, /* Empty */         0 },
+  { /* pragmas */                                               11602, /* DiagArray550 */ 1640, /* DiagSubGroup550 */ 412 },
+  { /* predefined-identifier-outside-function */                11610, /* DiagArray551 */ 1642, /* Empty */         0 },
+  { /* private-extern */                                        11649, /* DiagArray552 */ 1644, /* Empty */         0 },
+  { /* private-header */                                        11664, /* DiagArray553 */ 1646, /* Empty */         0 },
+  { /* private-module */                                        11679, /* DiagArray554 */ 1648, /* Empty */         0 },
+  { /* profile-instr-missing */                                 11694, /* DiagArray555 */ 1653, /* Empty */         0 },
+  { /* profile-instr-out-of-date */                             11716, /* DiagArray556 */ 1655, /* Empty */         0 },
+  { /* profile-instr-unprofiled */                              11742, /* DiagArray557 */ 1657, /* Empty */         0 },
+  { /* property-access-dot-syntax */                            11767, /* DiagArray558 */ 1659, /* Empty */         0 },
+  { /* property-attribute-mismatch */                           11794, /* DiagArray559 */ 1661, /* Empty */         0 },
+  { /* protocol */                                              11822, /* DiagArray560 */ 1666, /* Empty */         0 },
+  { /* protocol-property-synthesis-ambiguity */                 11831, /* DiagArray561 */ 1668, /* Empty */         0 },
+  { /* qualified-void-return-type */                            11869, /* DiagArray562 */ 1670, /* Empty */         0 },
+  { /* quoted-include-in-framework-header */                    11896, /* DiagArray563 */ 1672, /* Empty */         0 },
+  { /* range-loop-analysis */                                   11931, /* DiagArray564 */ 1674, /* Empty */         0 },
+  { /* readonly-iboutlet-property */                            11951, /* DiagArray565 */ 1678, /* Empty */         0 },
+  { /* receiver-expr */                                         11978, /* DiagArray566 */ 1680, /* Empty */         0 },
+  { /* receiver-forward-class */                                11992, /* DiagArray567 */ 1682, /* Empty */         0 },
+  { /* redeclared-class-member */                               12015, /* DiagArray568 */ 1685, /* Empty */         0 },
+  { /* redundant-decls */                                       12039, /* Empty */     0, /* Empty */         0 },
+  { /* redundant-move */                                        12055, /* DiagArray570 */ 1687, /* Empty */         0 },
+  { /* redundant-parens */                                      12070, /* DiagArray571 */ 1689, /* Empty */         0 },
+  { /* register */                                              12087, /* DiagArray572 */ 1691, /* DiagSubGroup572 */ 417 },
+  { /* reinterpret-base-class */                                12096, /* DiagArray573 */ 1693, /* Empty */         0 },
+  { /* remark-backend-plugin */                                 12119, /* DiagArray574 */ 1695, /* Empty */         0 },
+  { /* reorder */                                               12141, /* DiagArray575 */ 1697, /* Empty */         0 },
+  { /* requires-super-attribute */                              12149, /* DiagArray576 */ 1699, /* Empty */         0 },
+  { /* reserved-id-macro */                                     12174, /* DiagArray577 */ 1701, /* Empty */         0 },
+  { /* reserved-user-defined-literal */                         12192, /* DiagArray578 */ 1703, /* DiagSubGroup578 */ 419 },
+  { /* retained-language-linkage */                             12222, /* DiagArray579 */ 1706, /* Empty */         0 },
+  { /* return-stack-address */                                  12248, /* DiagArray580 */ 1708, /* Empty */         0 },
+  { /* return-std-move */                                       12269, /* DiagArray581 */ 1712, /* Empty */         0 },
+  { /* return-std-move-in-c++11 */                              12285, /* DiagArray582 */ 1714, /* Empty */         0 },
+  { /* return-type */                                           12310, /* DiagArray583 */ 1716, /* DiagSubGroup583 */ 421 },
+  { /* return-type-c-linkage */                                 12322, /* DiagArray584 */ 1726, /* Empty */         0 },
+  { /* sanitize-address */                                      12344, /* DiagArray585 */ 1729, /* Empty */         0 },
+  { /* section */                                               12361, /* DiagArray586 */ 1732, /* Empty */         0 },
+  { /* selector */                                              12369, /* DiagArray587 */ 1736, /* DiagSubGroup587 */ 423 },
+  { /* selector-type-mismatch */                                12378, /* DiagArray588 */ 1738, /* Empty */         0 },
+  { /* self-assign */                                           12401, /* DiagArray589 */ 1740, /* DiagSubGroup589 */ 425 },
+  { /* self-assign-field */                                     12413, /* DiagArray590 */ 1742, /* Empty */         0 },
+  { /* self-assign-overloaded */                                12431, /* DiagArray591 */ 1744, /* Empty */         0 },
+  { /* self-move */                                             12454, /* DiagArray592 */ 1746, /* Empty */         0 },
+  { /* semicolon-before-method-body */                          12464, /* DiagArray593 */ 1748, /* Empty */         0 },
+  { /* sentinel */                                              12493, /* DiagArray594 */ 1750, /* Empty */         0 },
+  { /* sequence-point */                                        12502, /* Empty */     0, /* DiagSubGroup595 */ 428 },
+  { /* serialized-diagnostics */                                12517, /* DiagArray596 */ 1753, /* Empty */         0 },
+  { /* shadow */                                                12540, /* DiagArray597 */ 1756, /* DiagSubGroup597 */ 430 },
+  { /* shadow-all */                                            12547, /* Empty */     0, /* DiagSubGroup598 */ 433 },
+  { /* shadow-field */                                          12558, /* DiagArray599 */ 1758, /* Empty */         0 },
+  { /* shadow-field-in-constructor */                           12571, /* DiagArray600 */ 1760, /* DiagSubGroup600 */ 438 },
+  { /* shadow-field-in-constructor-modified */                  12599, /* DiagArray601 */ 1762, /* Empty */         0 },
+  { /* shadow-ivar */                                           12636, /* DiagArray602 */ 1764, /* Empty */         0 },
+  { /* shadow-uncaptured-local */                               12648, /* DiagArray603 */ 1766, /* Empty */         0 },
+  { /* shift-count-negative */                                  12672, /* DiagArray604 */ 1768, /* Empty */         0 },
+  { /* shift-count-overflow */                                  12693, /* DiagArray605 */ 1770, /* Empty */         0 },
+  { /* shift-negative-value */                                  12714, /* DiagArray606 */ 1772, /* Empty */         0 },
+  { /* shift-op-parentheses */                                  12735, /* DiagArray607 */ 1774, /* Empty */         0 },
+  { /* shift-overflow */                                        12756, /* DiagArray608 */ 1776, /* Empty */         0 },
+  { /* shift-sign-overflow */                                   12771, /* DiagArray609 */ 1778, /* Empty */         0 },
+  { /* shorten-64-to-32 */                                      12791, /* DiagArray610 */ 1780, /* Empty */         0 },
+  { /* sign-compare */                                          12808, /* DiagArray611 */ 1782, /* Empty */         0 },
+  { /* sign-conversion */                                       12821, /* DiagArray612 */ 1784, /* Empty */         0 },
+  { /* sign-promo */                                            12837, /* Empty */     0, /* Empty */         0 },
+  { /* signed-enum-bitfield */                                  12848, /* DiagArray614 */ 1788, /* Empty */         0 },
+  { /* sizeof-array-argument */                                 12869, /* DiagArray615 */ 1790, /* Empty */         0 },
+  { /* sizeof-array-decay */                                    12891, /* DiagArray616 */ 1792, /* Empty */         0 },
+  { /* sizeof-pointer-div */                                    12910, /* DiagArray617 */ 1794, /* Empty */         0 },
+  { /* sizeof-pointer-memaccess */                              12929, /* DiagArray618 */ 1796, /* Empty */         0 },
+  { /* slash-u-filename */                                      12954, /* DiagArray619 */ 1799, /* Empty */         0 },
+  { /* sometimes-uninitialized */                               12971, /* DiagArray620 */ 1801, /* Empty */         0 },
+  { /* source-uses-openmp */                                    12995, /* DiagArray621 */ 1803, /* Empty */         0 },
+  { /* spir-compat */                                           13014, /* DiagArray622 */ 1806, /* Empty */         0 },
+  { /* stack-protector */                                       13026, /* Empty */     0, /* Empty */         0 },
+  { /* static-float-init */                                     13042, /* DiagArray624 */ 1808, /* DiagSubGroup624 */ 440 },
+  { /* static-in-inline */                                      13060, /* DiagArray625 */ 1810, /* Empty */         0 },
+  { /* static-inline-explicit-instantiation */                  13077, /* DiagArray626 */ 1813, /* Empty */         0 },
+  { /* static-local-in-inline */                                13114, /* DiagArray627 */ 1815, /* Empty */         0 },
+  { /* static-self-init */                                      13137, /* DiagArray628 */ 1817, /* Empty */         0 },
+  { /* stdlibcxx-not-found */                                   13154, /* DiagArray629 */ 1819, /* Empty */         0 },
+  { /* strict-aliasing */                                       13174, /* Empty */     0, /* Empty */         0 },
+  { /* strict-aliasing=0 */                                     13190, /* Empty */     0, /* Empty */         0 },
+  { /* strict-aliasing=1 */                                     13208, /* Empty */     0, /* Empty */         0 },
+  { /* strict-aliasing=2 */                                     13226, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow */                                       13244, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=0 */                                     13260, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=1 */                                     13278, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=2 */                                     13296, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=3 */                                     13314, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=4 */                                     13332, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=5 */                                     13350, /* Empty */     0, /* Empty */         0 },
+  { /* strict-prototypes */                                     13368, /* DiagArray641 */ 1821, /* Empty */         0 },
+  { /* strict-selector-match */                                 13386, /* DiagArray642 */ 1823, /* Empty */         0 },
+  { /* string-compare */                                        13408, /* DiagArray643 */ 1825, /* Empty */         0 },
+  { /* string-conversion */                                     13423, /* DiagArray644 */ 1827, /* Empty */         0 },
+  { /* string-plus-char */                                      13441, /* DiagArray645 */ 1829, /* Empty */         0 },
+  { /* string-plus-int */                                       13458, /* DiagArray646 */ 1831, /* Empty */         0 },
+  { /* strlcpy-strlcat-size */                                  13474, /* DiagArray647 */ 1833, /* Empty */         0 },
+  { /* strncat-size */                                          13495, /* DiagArray648 */ 1835, /* Empty */         0 },
+  { /* super-class-method-mismatch */                           13508, /* DiagArray649 */ 1839, /* Empty */         0 },
+  { /* suspicious-bzero */                                      13536, /* DiagArray650 */ 1841, /* Empty */         0 },
+  { /* suspicious-memaccess */                                  13553, /* Empty */     0, /* DiagSubGroup651 */ 442 },
+  { /* switch */                                                13574, /* DiagArray652 */ 1843, /* Empty */         0 },
+  { /* switch-bool */                                           13581, /* DiagArray653 */ 1847, /* Empty */         0 },
+  { /* switch-default */                                        13593, /* Empty */     0, /* Empty */         0 },
+  { /* switch-enum */                                           13608, /* DiagArray655 */ 1849, /* Empty */         0 },
+  { /* sync-fetch-and-nand-semantics-changed */                 13620, /* DiagArray656 */ 1851, /* Empty */         0 },
+  { /* synth */                                                 13658, /* Empty */     0, /* Empty */         0 },
+  { /* tautological-compare */                                  13664, /* DiagArray658 */ 1853, /* DiagSubGroup658 */ 448 },
+  { /* tautological-constant-compare */                         13685, /* DiagArray659 */ 1856, /* DiagSubGroup659 */ 454 },
+  { /* tautological-constant-in-range-compare */                13715, /* Empty */     0, /* DiagSubGroup660 */ 456 },
+  { /* tautological-constant-out-of-range-compare */            13754, /* DiagArray661 */ 1858, /* Empty */         0 },
+  { /* tautological-objc-bool-compare */                        13797, /* DiagArray662 */ 1860, /* Empty */         0 },
+  { /* tautological-overlap-compare */                          13828, /* DiagArray663 */ 1862, /* Empty */         0 },
+  { /* tautological-pointer-compare */                          13857, /* DiagArray664 */ 1864, /* Empty */         0 },
+  { /* tautological-type-limit-compare */                       13886, /* DiagArray665 */ 1867, /* Empty */         0 },
+  { /* tautological-undefined-compare */                        13918, /* DiagArray666 */ 1869, /* Empty */         0 },
+  { /* tautological-unsigned-enum-zero-compare */               13949, /* DiagArray667 */ 1872, /* Empty */         0 },
+  { /* tautological-unsigned-zero-compare */                    13989, /* DiagArray668 */ 1874, /* Empty */         0 },
+  { /* tentative-definition-incomplete-type */                  14024, /* DiagArray669 */ 1876, /* Empty */         0 },
+  { /* thread-safety */                                         14061, /* Empty */     0, /* DiagSubGroup670 */ 460 },
+  { /* thread-safety-analysis */                                14075, /* DiagArray671 */ 1878, /* Empty */         0 },
+  { /* thread-safety-attributes */                              14098, /* DiagArray672 */ 1896, /* Empty */         0 },
+  { /* thread-safety-beta */                                    14123, /* DiagArray673 */ 1904, /* Empty */         0 },
+  { /* thread-safety-negative */                                14142, /* DiagArray674 */ 1906, /* Empty */         0 },
+  { /* thread-safety-precise */                                 14165, /* DiagArray675 */ 1908, /* Empty */         0 },
+  { /* thread-safety-reference */                               14187, /* DiagArray676 */ 1912, /* Empty */         0 },
+  { /* thread-safety-verbose */                                 14211, /* DiagArray677 */ 1915, /* Empty */         0 },
+  { /* trigraphs */                                             14233, /* DiagArray678 */ 1917, /* Empty */         0 },
+  { /* type-limits */                                           14243, /* Empty */     0, /* DiagSubGroup679 */ 465 },
+  { /* type-safety */                                           14255, /* DiagArray680 */ 1922, /* Empty */         0 },
+  { /* typedef-redefinition */                                  14267, /* DiagArray681 */ 1926, /* Empty */         0 },
+  { /* typename-missing */                                      14288, /* DiagArray682 */ 1928, /* Empty */         0 },
+  { /* unable-to-open-stats-file */                             14305, /* DiagArray683 */ 1930, /* Empty */         0 },
+  { /* unavailable-declarations */                              14331, /* DiagArray684 */ 1932, /* Empty */         0 },
+  { /* undeclared-selector */                                   14356, /* DiagArray685 */ 1934, /* Empty */         0 },
+  { /* undef */                                                 14376, /* DiagArray686 */ 1937, /* Empty */         0 },
+  { /* undefined-bool-conversion */                             14382, /* DiagArray687 */ 1939, /* Empty */         0 },
+  { /* undefined-func-template */                               14408, /* DiagArray688 */ 1942, /* Empty */         0 },
+  { /* undefined-inline */                                      14432, /* DiagArray689 */ 1944, /* Empty */         0 },
+  { /* undefined-internal */                                    14449, /* DiagArray690 */ 1946, /* Empty */         0 },
+  { /* undefined-internal-type */                               14468, /* DiagArray691 */ 1948, /* Empty */         0 },
+  { /* undefined-reinterpret-cast */                            14492, /* DiagArray692 */ 1950, /* Empty */         0 },
+  { /* undefined-var-template */                                14519, /* DiagArray693 */ 1953, /* Empty */         0 },
+  { /* underaligned-exception-object */                         14542, /* DiagArray694 */ 1955, /* Empty */         0 },
+  { /* unevaluated-expression */                                14572, /* DiagArray695 */ 1957, /* DiagSubGroup695 */ 467 },
+  { /* unguarded-availability */                                14595, /* DiagArray696 */ 1959, /* DiagSubGroup696 */ 469 },
+  { /* unguarded-availability-new */                            14618, /* DiagArray697 */ 1961, /* Empty */         0 },
+  { /* unicode */                                               14645, /* DiagArray698 */ 1963, /* Empty */         0 },
+  { /* unicode-homoglyph */                                     14653, /* DiagArray699 */ 1969, /* Empty */         0 },
+  { /* unicode-whitespace */                                    14671, /* DiagArray700 */ 1971, /* Empty */         0 },
+  { /* unicode-zero-width */                                    14690, /* DiagArray701 */ 1973, /* Empty */         0 },
+  { /* uninitialized */                                         14709, /* DiagArray702 */ 1975, /* DiagSubGroup702 */ 471 },
+  { /* unknown-argument */                                      14723, /* DiagArray703 */ 1983, /* Empty */         0 },
+  { /* unknown-attributes */                                    14740, /* DiagArray704 */ 1986, /* Empty */         0 },
+  { /* unknown-escape-sequence */                               14759, /* DiagArray705 */ 1988, /* Empty */         0 },
+  { /* unknown-pragmas */                                       14783, /* DiagArray706 */ 1990, /* Empty */         0 },
+  { /* unknown-sanitizers */                                    14799, /* DiagArray707 */ 2011, /* Empty */         0 },
+  { /* unknown-warning-option */                                14818, /* DiagArray708 */ 2013, /* Empty */         0 },
+  { /* unnamed-type-template-args */                            14841, /* DiagArray709 */ 2017, /* DiagSubGroup709 */ 474 },
+  { /* unneeded-internal-declaration */                         14868, /* DiagArray710 */ 2019, /* Empty */         0 },
+  { /* unneeded-member-function */                              14898, /* DiagArray711 */ 2022, /* Empty */         0 },
+  { /* unreachable-code */                                      14923, /* DiagArray712 */ 2024, /* DiagSubGroup712 */ 476 },
+  { /* unreachable-code-aggressive */                           14940, /* Empty */     0, /* DiagSubGroup713 */ 478 },
+  { /* unreachable-code-break */                                14968, /* DiagArray714 */ 2026, /* Empty */         0 },
+  { /* unreachable-code-loop-increment */                       14991, /* DiagArray715 */ 2028, /* Empty */         0 },
+  { /* unreachable-code-return */                               15023, /* DiagArray716 */ 2030, /* Empty */         0 },
+  { /* unsequenced */                                           15047, /* DiagArray717 */ 2032, /* Empty */         0 },
+  { /* unsupported-abs */                                       15059, /* DiagArray718 */ 2035, /* Empty */         0 },
+  { /* unsupported-availability-guard */                        15075, /* DiagArray719 */ 2038, /* Empty */         0 },
+  { /* unsupported-cb */                                        15106, /* DiagArray720 */ 2040, /* Empty */         0 },
+  { /* unsupported-dll-base-class-template */                   15121, /* DiagArray721 */ 2042, /* Empty */         0 },
+  { /* unsupported-friend */                                    15157, /* DiagArray722 */ 2044, /* Empty */         0 },
+  { /* unsupported-gpopt */                                     15176, /* DiagArray723 */ 2047, /* Empty */         0 },
+  { /* unsupported-nan */                                       15194, /* DiagArray724 */ 2049, /* Empty */         0 },
+  { /* unsupported-target-opt */                                15210, /* DiagArray725 */ 2052, /* Empty */         0 },
+  { /* unsupported-visibility */                                15233, /* DiagArray726 */ 2054, /* Empty */         0 },
+  { /* unusable-partial-specialization */                       15256, /* DiagArray727 */ 2056, /* Empty */         0 },
+  { /* unused */                                                15288, /* Empty */     0, /* DiagSubGroup728 */ 482 },
+  { /* unused-argument */                                       15295, /* Empty */     0, /* Empty */         0 },
+  { /* unused-command-line-argument */                          15311, /* DiagArray730 */ 2058, /* Empty */         0 },
+  { /* unused-comparison */                                     15340, /* DiagArray731 */ 2066, /* Empty */         0 },
+  { /* unused-const-variable */                                 15358, /* DiagArray732 */ 2068, /* Empty */         0 },
+  { /* unused-exception-parameter */                            15380, /* DiagArray733 */ 2070, /* Empty */         0 },
+  { /* unused-function */                                       15407, /* DiagArray734 */ 2072, /* DiagSubGroup734 */ 492 },
+  { /* unused-getter-return-value */                            15423, /* DiagArray735 */ 2074, /* Empty */         0 },
+  { /* unused-label */                                          15450, /* DiagArray736 */ 2076, /* Empty */         0 },
+  { /* unused-lambda-capture */                                 15463, /* DiagArray737 */ 2078, /* Empty */         0 },
+  { /* unused-local-typedef */                                  15485, /* DiagArray738 */ 2080, /* Empty */         0 },
+  { /* unused-local-typedefs */                                 15506, /* Empty */     0, /* DiagSubGroup739 */ 494 },
+  { /* unused-macros */                                         15528, /* DiagArray740 */ 2082, /* Empty */         0 },
+  { /* unused-member-function */                                15542, /* DiagArray741 */ 2084, /* DiagSubGroup741 */ 496 },
+  { /* unused-parameter */                                      15565, /* DiagArray742 */ 2086, /* Empty */         0 },
+  { /* unused-private-field */                                  15582, /* DiagArray743 */ 2088, /* Empty */         0 },
+  { /* unused-property-ivar */                                  15603, /* DiagArray744 */ 2090, /* Empty */         0 },
+  { /* unused-result */                                         15624, /* DiagArray745 */ 2092, /* Empty */         0 },
+  { /* unused-template */                                       15638, /* DiagArray746 */ 2094, /* DiagSubGroup746 */ 498 },
+  { /* unused-value */                                          15654, /* DiagArray747 */ 2096, /* DiagSubGroup747 */ 500 },
+  { /* unused-variable */                                       15667, /* DiagArray748 */ 2101, /* DiagSubGroup748 */ 504 },
+  { /* unused-volatile-lvalue */                                15683, /* DiagArray749 */ 2103, /* Empty */         0 },
+  { /* used-but-marked-unused */                                15706, /* DiagArray750 */ 2105, /* Empty */         0 },
+  { /* user-defined-literals */                                 15729, /* DiagArray751 */ 2107, /* Empty */         0 },
+  { /* user-defined-warnings */                                 15751, /* DiagArray752 */ 2109, /* Empty */         0 },
+  { /* varargs */                                               15773, /* DiagArray753 */ 2111, /* Empty */         0 },
+  { /* variadic-macros */                                       15781, /* DiagArray754 */ 2115, /* Empty */         0 },
+  { /* vec-elem-size */                                         15797, /* DiagArray755 */ 2119, /* Empty */         0 },
+  { /* vector-conversion */                                     15811, /* DiagArray756 */ 2121, /* Empty */         0 },
+  { /* vector-conversions */                                    15829, /* Empty */     0, /* DiagSubGroup757 */ 506 },
+  { /* vexing-parse */                                          15848, /* DiagArray758 */ 2123, /* Empty */         0 },
+  { /* visibility */                                            15861, /* DiagArray759 */ 2127, /* Empty */         0 },
+  { /* vla */                                                   15872, /* DiagArray760 */ 2130, /* Empty */         0 },
+  { /* vla-extension */                                         15876, /* DiagArray761 */ 2132, /* Empty */         0 },
+  { /* void-ptr-dereference */                                  15890, /* DiagArray762 */ 2134, /* Empty */         0 },
+  { /* volatile-register-var */                                 15911, /* Empty */     0, /* Empty */         0 },
+  { /* weak-template-vtables */                                 15933, /* DiagArray764 */ 2136, /* Empty */         0 },
+  { /* weak-vtables */                                          15955, /* DiagArray765 */ 2138, /* Empty */         0 },
+  { /* writable-strings */                                      15968, /* DiagArray766 */ 2140, /* DiagSubGroup766 */ 508 },
+  { /* write-strings */                                         15985, /* Empty */     0, /* DiagSubGroup767 */ 510 },
+  { /* zero-as-null-pointer-constant */                         15999, /* DiagArray768 */ 2142, /* Empty */         0 },
+  { /* zero-length-array */                                     16029, /* DiagArray769 */ 2144, /* Empty */         0 },
 #endif // GET_DIAG_TABLE
 
 
@@ -1825,6 +1850,7 @@
 CATEGORY("Inline Assembly Issue", DiagCat_Inline_Assembly_Issue)
 CATEGORY("Modules Issue", DiagCat_Modules_Issue)
 CATEGORY("Coroutines Issue", DiagCat_Coroutines_Issue)
+CATEGORY("Dependency Directive Source Minimization Issue", DiagCat_Dependency_Directive_Source_Minimization_Issue)
 CATEGORY("AST Deserialization Issue", DiagCat_AST_Deserialization_Issue)
 CATEGORY("Backend Issue", DiagCat_Backend_Issue)
 CATEGORY("Related Result Type Issue", DiagCat_Related_Result_Type_Issue)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h b/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h
index fc0e2c9..8ee9a97 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h
@@ -33,10 +33,10 @@
       DIAG_SIZE_SERIALIZATION =  120,
       DIAG_SIZE_LEX           =  400,
       DIAG_SIZE_PARSE         =  500,
-      DIAG_SIZE_AST           =  150,
+      DIAG_SIZE_AST           =  200,
       DIAG_SIZE_COMMENT       =  100,
       DIAG_SIZE_CROSSTU       =  100,
-      DIAG_SIZE_SEMA          = 3500,
+      DIAG_SIZE_SEMA          = 4000,
       DIAG_SIZE_ANALYSIS      =  100,
       DIAG_SIZE_REFACTORING   = 1000,
     };
@@ -50,8 +50,8 @@
       DIAG_START_PARSE         = DIAG_START_LEX           + DIAG_SIZE_LEX,
       DIAG_START_AST           = DIAG_START_PARSE         + DIAG_SIZE_PARSE,
       DIAG_START_COMMENT       = DIAG_START_AST           + DIAG_SIZE_AST,
-      DIAG_START_CROSSTU       = DIAG_START_COMMENT       + DIAG_SIZE_CROSSTU,
-      DIAG_START_SEMA          = DIAG_START_CROSSTU       + DIAG_SIZE_COMMENT,
+      DIAG_START_CROSSTU       = DIAG_START_COMMENT       + DIAG_SIZE_COMMENT,
+      DIAG_START_SEMA          = DIAG_START_CROSSTU       + DIAG_SIZE_CROSSTU,
       DIAG_START_ANALYSIS      = DIAG_START_SEMA          + DIAG_SIZE_SEMA,
       DIAG_START_REFACTORING   = DIAG_START_ANALYSIS      + DIAG_SIZE_ANALYSIS,
       DIAG_UPPER_LIMIT         = DIAG_START_REFACTORING   + DIAG_SIZE_REFACTORING
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc b/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc
index 9b7dc23..f84acef 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc
@@ -64,6 +64,8 @@
 DIAG_NAME_INDEX(err_ambiguous_reference)
 DIAG_NAME_INDEX(err_ambiguous_suitable_delete_member_function_found)
 DIAG_NAME_INDEX(err_ambiguous_tag_hiding)
+DIAG_NAME_INDEX(err_analyzer_checker_option_invalid_input)
+DIAG_NAME_INDEX(err_analyzer_checker_option_unknown)
 DIAG_NAME_INDEX(err_analyzer_config_invalid_input)
 DIAG_NAME_INDEX(err_analyzer_config_multiple_values)
 DIAG_NAME_INDEX(err_analyzer_config_no_value)
@@ -165,7 +167,7 @@
 DIAG_NAME_INDEX(err_asm_bad_register_type)
 DIAG_NAME_INDEX(err_asm_empty)
 DIAG_NAME_INDEX(err_asm_empty_symbolic_operand_name)
-DIAG_NAME_INDEX(err_asm_goto_not_supported_yet)
+DIAG_NAME_INDEX(err_asm_goto_cannot_have_output)
 DIAG_NAME_INDEX(err_asm_immediate_expected)
 DIAG_NAME_INDEX(err_asm_incomplete_type)
 DIAG_NAME_INDEX(err_asm_input_duplicate_match)
@@ -327,6 +329,7 @@
 DIAG_NAME_INDEX(err_bad_character_encoding)
 DIAG_NAME_INDEX(err_bad_const_cast_dest)
 DIAG_NAME_INDEX(err_bad_cstyle_cast_overload)
+DIAG_NAME_INDEX(err_bad_cxx_cast_addr_space_mismatch)
 DIAG_NAME_INDEX(err_bad_cxx_cast_bitfield)
 DIAG_NAME_INDEX(err_bad_cxx_cast_generic)
 DIAG_NAME_INDEX(err_bad_cxx_cast_member_pointer_size)
@@ -348,6 +351,7 @@
 DIAG_NAME_INDEX(err_bad_multiversion_option)
 DIAG_NAME_INDEX(err_bad_new_type)
 DIAG_NAME_INDEX(err_bad_parameter_name)
+DIAG_NAME_INDEX(err_bad_parameter_name_template_id)
 DIAG_NAME_INDEX(err_bad_property_context)
 DIAG_NAME_INDEX(err_bad_property_decl)
 DIAG_NAME_INDEX(err_bad_receiver_type)
@@ -367,6 +371,8 @@
 DIAG_NAME_INDEX(err_base_must_be_class)
 DIAG_NAME_INDEX(err_base_specifier_attribute)
 DIAG_NAME_INDEX(err_binding_cannot_appear_in_own_initializer)
+DIAG_NAME_INDEX(err_bit_cast_non_trivially_copyable)
+DIAG_NAME_INDEX(err_bit_cast_type_size_mismatch)
 DIAG_NAME_INDEX(err_bitfield_has_negative_width)
 DIAG_NAME_INDEX(err_bitfield_has_zero_width)
 DIAG_NAME_INDEX(err_bitfield_width_exceeds_type_width)
@@ -440,6 +446,7 @@
 DIAG_NAME_INDEX(err_category_forward_interface)
 DIAG_NAME_INDEX(err_category_property)
 DIAG_NAME_INDEX(err_cconv_change)
+DIAG_NAME_INDEX(err_cconv_incomplete_param_type)
 DIAG_NAME_INDEX(err_cconv_knr)
 DIAG_NAME_INDEX(err_cconv_varargs)
 DIAG_NAME_INDEX(err_cfstring_literal_not_string_constant)
@@ -450,6 +457,7 @@
 DIAG_NAME_INDEX(err_class_on_template_template_param)
 DIAG_NAME_INDEX(err_class_property_found)
 DIAG_NAME_INDEX(err_class_redeclared_with_different_access)
+DIAG_NAME_INDEX(err_class_stub_subclassing_mismatch)
 DIAG_NAME_INDEX(err_cocoa_naming_owned_rule)
 DIAG_NAME_INDEX(err_collection_expr_type)
 DIAG_NAME_INDEX(err_complex_mode_vector_type)
@@ -486,7 +494,6 @@
 DIAG_NAME_INDEX(err_constexpr_local_var_non_literal_type)
 DIAG_NAME_INDEX(err_constexpr_local_var_static)
 DIAG_NAME_INDEX(err_constexpr_main)
-DIAG_NAME_INDEX(err_constexpr_no_declarators)
 DIAG_NAME_INDEX(err_constexpr_non_literal_param)
 DIAG_NAME_INDEX(err_constexpr_non_literal_return)
 DIAG_NAME_INDEX(err_constexpr_redecl_mismatch)
@@ -499,6 +506,7 @@
 DIAG_NAME_INDEX(err_constexpr_virtual)
 DIAG_NAME_INDEX(err_constexpr_virtual_base)
 DIAG_NAME_INDEX(err_constexpr_vla)
+DIAG_NAME_INDEX(err_constexpr_wrong_decl_kind)
 DIAG_NAME_INDEX(err_constructor_bad_name)
 DIAG_NAME_INDEX(err_constructor_byvalue_arg)
 DIAG_NAME_INDEX(err_constructor_cannot_be)
@@ -530,6 +538,7 @@
 DIAG_NAME_INDEX(err_coroutine_promise_unhandled_exception_required)
 DIAG_NAME_INDEX(err_coroutine_type_missing_specialization)
 DIAG_NAME_INDEX(err_coroutine_unevaluated_context)
+DIAG_NAME_INDEX(err_coroutine_within_handler)
 DIAG_NAME_INDEX(err_covariant_return_ambiguous_derived_to_base_conv)
 DIAG_NAME_INDEX(err_covariant_return_inaccessible_base)
 DIAG_NAME_INDEX(err_covariant_return_incomplete)
@@ -597,10 +606,10 @@
 DIAG_NAME_INDEX(err_deduced_return_type)
 DIAG_NAME_INDEX(err_deduction_guide_bad_trailing_return_type)
 DIAG_NAME_INDEX(err_deduction_guide_defines_function)
-DIAG_NAME_INDEX(err_deduction_guide_explicit_mismatch)
 DIAG_NAME_INDEX(err_deduction_guide_invalid_specifier)
 DIAG_NAME_INDEX(err_deduction_guide_name_not_class_template)
 DIAG_NAME_INDEX(err_deduction_guide_no_trailing_return_type)
+DIAG_NAME_INDEX(err_deduction_guide_redeclared)
 DIAG_NAME_INDEX(err_deduction_guide_specialized)
 DIAG_NAME_INDEX(err_deduction_guide_template_not_deducible)
 DIAG_NAME_INDEX(err_deduction_guide_with_complex_decl)
@@ -637,6 +646,8 @@
 DIAG_NAME_INDEX(err_deleted_main)
 DIAG_NAME_INDEX(err_deleted_non_function)
 DIAG_NAME_INDEX(err_deleted_override)
+DIAG_NAME_INDEX(err_dep_source_minimizer_missing_sema_after_at_import)
+DIAG_NAME_INDEX(err_dep_source_minimizer_unexpected_tokens_at_import)
 DIAG_NAME_INDEX(err_dependent_deduced_tst)
 DIAG_NAME_INDEX(err_dependent_function_template_spec_no_match)
 DIAG_NAME_INDEX(err_dependent_nested_name_spec)
@@ -679,11 +690,13 @@
 DIAG_NAME_INDEX(err_drv_argument_not_allowed_with)
 DIAG_NAME_INDEX(err_drv_argument_only_allowed_with)
 DIAG_NAME_INDEX(err_drv_bitcode_unsupported_on_toolchain)
+DIAG_NAME_INDEX(err_drv_cannot_mix_options)
 DIAG_NAME_INDEX(err_drv_cannot_read_config_file)
 DIAG_NAME_INDEX(err_drv_cc_print_options_failure)
 DIAG_NAME_INDEX(err_drv_clang_unsupported)
 DIAG_NAME_INDEX(err_drv_clang_unsupported_opt_cxx_darwin_i386)
 DIAG_NAME_INDEX(err_drv_clang_unsupported_opt_faltivec)
+DIAG_NAME_INDEX(err_drv_clang_unsupported_opt_pg_darwin)
 DIAG_NAME_INDEX(err_drv_command_failed)
 DIAG_NAME_INDEX(err_drv_command_failure)
 DIAG_NAME_INDEX(err_drv_command_signalled)
@@ -702,6 +715,7 @@
 DIAG_NAME_INDEX(err_drv_expecting_fopenmp_with_fopenmp_targets)
 DIAG_NAME_INDEX(err_drv_force_crash)
 DIAG_NAME_INDEX(err_drv_gnustep_objc_runtime_incompatible_binary)
+DIAG_NAME_INDEX(err_drv_incompatible_unwindlib)
 DIAG_NAME_INDEX(err_drv_invalid_Xarch_argument_isdriver)
 DIAG_NAME_INDEX(err_drv_invalid_Xarch_argument_with_args)
 DIAG_NAME_INDEX(err_drv_invalid_Xopenmp_target_with_args)
@@ -725,6 +739,7 @@
 DIAG_NAME_INDEX(err_drv_invalid_rtlib_name)
 DIAG_NAME_INDEX(err_drv_invalid_stdlib_name)
 DIAG_NAME_INDEX(err_drv_invalid_thread_model_for_target)
+DIAG_NAME_INDEX(err_drv_invalid_unwindlib_name)
 DIAG_NAME_INDEX(err_drv_invalid_value)
 DIAG_NAME_INDEX(err_drv_invalid_version_number)
 DIAG_NAME_INDEX(err_drv_lto_without_lld)
@@ -744,8 +759,10 @@
 DIAG_NAME_INDEX(err_drv_no_module_support)
 DIAG_NAME_INDEX(err_drv_no_neon_modifier)
 DIAG_NAME_INDEX(err_drv_no_such_file)
+DIAG_NAME_INDEX(err_drv_no_such_file_with_suggestion)
 DIAG_NAME_INDEX(err_drv_omp_host_ir_file_not_found)
 DIAG_NAME_INDEX(err_drv_omp_host_target_not_supported)
+DIAG_NAME_INDEX(err_drv_optimization_remark_format)
 DIAG_NAME_INDEX(err_drv_optimization_remark_pattern)
 DIAG_NAME_INDEX(err_drv_out_file_argument_with_multiple_sources)
 DIAG_NAME_INDEX(err_drv_output_argument_with_multiple_files)
@@ -754,6 +771,7 @@
 DIAG_NAME_INDEX(err_drv_ropi_rwpi_incompatible_with_pic)
 DIAG_NAME_INDEX(err_drv_trivial_auto_var_init_zero_disabled)
 DIAG_NAME_INDEX(err_drv_unable_to_remove_file)
+DIAG_NAME_INDEX(err_drv_unable_to_set_working_directory)
 DIAG_NAME_INDEX(err_drv_unknown_argument)
 DIAG_NAME_INDEX(err_drv_unknown_argument_with_suggestion)
 DIAG_NAME_INDEX(err_drv_unknown_indirect_jump_opt)
@@ -779,6 +797,7 @@
 DIAG_NAME_INDEX(err_duplicate_case)
 DIAG_NAME_INDEX(err_duplicate_case_differing_expr)
 DIAG_NAME_INDEX(err_duplicate_class_def)
+DIAG_NAME_INDEX(err_duplicate_declspec)
 DIAG_NAME_INDEX(err_duplicate_default_assoc)
 DIAG_NAME_INDEX(err_duplicate_ivar_declaration)
 DIAG_NAME_INDEX(err_duplicate_ivar_use)
@@ -820,6 +839,8 @@
 DIAG_NAME_INDEX(err_excess_initializers_in_char_array_initializer)
 DIAG_NAME_INDEX(err_expected)
 DIAG_NAME_INDEX(err_expected_after)
+DIAG_NAME_INDEX(err_expected_allocator_clause)
+DIAG_NAME_INDEX(err_expected_allocator_expression)
 DIAG_NAME_INDEX(err_expected_capture)
 DIAG_NAME_INDEX(err_expected_case_before_expression)
 DIAG_NAME_INDEX(err_expected_catch)
@@ -891,6 +912,7 @@
 DIAG_NAME_INDEX(err_explicit_instantiation_enum)
 DIAG_NAME_INDEX(err_explicit_instantiation_in_class)
 DIAG_NAME_INDEX(err_explicit_instantiation_inline)
+DIAG_NAME_INDEX(err_explicit_instantiation_internal_linkage)
 DIAG_NAME_INDEX(err_explicit_instantiation_member_function_not_instantiated)
 DIAG_NAME_INDEX(err_explicit_instantiation_must_be_global)
 DIAG_NAME_INDEX(err_explicit_instantiation_nontemplate_type)
@@ -912,7 +934,12 @@
 DIAG_NAME_INDEX(err_explicit_specialization_inconsistent_storage_class)
 DIAG_NAME_INDEX(err_exponent_has_no_digits)
 DIAG_NAME_INDEX(err_export_empty)
+DIAG_NAME_INDEX(err_export_in_private_module_fragment)
+DIAG_NAME_INDEX(err_export_internal)
+DIAG_NAME_INDEX(err_export_no_name)
 DIAG_NAME_INDEX(err_export_not_in_module_interface)
+DIAG_NAME_INDEX(err_export_using_internal)
+DIAG_NAME_INDEX(err_export_within_anonymous_namespace)
 DIAG_NAME_INDEX(err_export_within_export)
 DIAG_NAME_INDEX(err_expr_not_cce)
 DIAG_NAME_INDEX(err_expr_not_ice)
@@ -976,6 +1003,7 @@
 DIAG_NAME_INDEX(err_field_instantiates_to_function)
 DIAG_NAME_INDEX(err_field_with_address_space)
 DIAG_NAME_INDEX(err_file_modified)
+DIAG_NAME_INDEX(err_file_too_large)
 DIAG_NAME_INDEX(err_filter_expression_integral)
 DIAG_NAME_INDEX(err_final_function_overridden)
 DIAG_NAME_INDEX(err_first_argument_to_cwsc_block_call)
@@ -1011,7 +1039,6 @@
 DIAG_NAME_INDEX(err_format_attribute_requires_variadic)
 DIAG_NAME_INDEX(err_format_attribute_result_not)
 DIAG_NAME_INDEX(err_format_strftime_third_parameter)
-DIAG_NAME_INDEX(err_fortify_std_lib_bad_decl)
 DIAG_NAME_INDEX(err_forward_ref_enum)
 DIAG_NAME_INDEX(err_forward_superclass)
 DIAG_NAME_INDEX(err_friend_decl_defines_type)
@@ -1047,10 +1074,13 @@
 DIAG_NAME_INDEX(err_generic_sel_no_match)
 DIAG_NAME_INDEX(err_getter_not_found)
 DIAG_NAME_INDEX(err_global_call_not_config)
+DIAG_NAME_INDEX(err_global_module_introducer_not_at_start)
 DIAG_NAME_INDEX(err_gnu_inline_asm_disabled)
 DIAG_NAME_INDEX(err_goto_into_protected_scope)
 DIAG_NAME_INDEX(err_goto_ms_asm_label)
 DIAG_NAME_INDEX(err_half_const_requires_fp16)
+DIAG_NAME_INDEX(err_header_import_not_header_unit)
+DIAG_NAME_INDEX(err_header_import_semi_in_macro)
 DIAG_NAME_INDEX(err_header_module_requires_modules)
 DIAG_NAME_INDEX(err_hex_constant_requires)
 DIAG_NAME_INDEX(err_hex_escape_no_digits)
@@ -1086,11 +1116,13 @@
 DIAG_NAME_INDEX(err_illegal_union_or_anon_struct_member)
 DIAG_NAME_INDEX(err_imaginary_not_supported)
 DIAG_NAME_INDEX(err_impcast_complex_scalar)
+DIAG_NAME_INDEX(err_implementation_of_class_stub)
 DIAG_NAME_INDEX(err_implicit_coroutine_std_nothrow_type_not_found)
 DIAG_NAME_INDEX(err_implicit_empty_initializer)
 DIAG_NAME_INDEX(err_implicit_instantiate_member_undefined)
 DIAG_NAME_INDEX(err_implied_comparison_category_type_not_found)
 DIAG_NAME_INDEX(err_implied_coroutine_type_not_found)
+DIAG_NAME_INDEX(err_implied_omp_allocator_handle_t_not_found)
 DIAG_NAME_INDEX(err_implied_std_coroutine_traits_promise_type_not_class)
 DIAG_NAME_INDEX(err_implied_std_coroutine_traits_promise_type_not_found)
 DIAG_NAME_INDEX(err_implied_std_initializer_list_not_found)
@@ -1118,8 +1150,8 @@
 DIAG_NAME_INDEX(err_incomplete_type_used_in_type_trait_expr)
 DIAG_NAME_INDEX(err_incomplete_typeid)
 DIAG_NAME_INDEX(err_inconsistent_ivar_count)
+DIAG_NAME_INDEX(err_incorrect_defaulted_consteval)
 DIAG_NAME_INDEX(err_incorrect_defaulted_constexpr)
-DIAG_NAME_INDEX(err_incorrect_defaulted_exception_spec)
 DIAG_NAME_INDEX(err_incorrect_number_of_vector_initializers)
 DIAG_NAME_INDEX(err_increment_decrement_enum)
 DIAG_NAME_INDEX(err_indirect_goto_in_protected_scope)
@@ -1153,6 +1185,7 @@
 DIAG_NAME_INDEX(err_integer_literal_too_large)
 DIAG_NAME_INDEX(err_integer_sequence_integral_element_type)
 DIAG_NAME_INDEX(err_integer_sequence_negative_length)
+DIAG_NAME_INDEX(err_interface_stubs)
 DIAG_NAME_INDEX(err_internal_linkage_redeclaration)
 DIAG_NAME_INDEX(err_introducing_special_friend)
 DIAG_NAME_INDEX(err_invalid_asm_cast_lvalue)
@@ -1237,9 +1270,12 @@
 DIAG_NAME_INDEX(err_kernel_arg_address_space)
 DIAG_NAME_INDEX(err_l_square_l_square_not_attribute)
 DIAG_NAME_INDEX(err_label_end_of_compound_statement)
+DIAG_NAME_INDEX(err_lambda_after_delete)
 DIAG_NAME_INDEX(err_lambda_capture_anonymous_var)
 DIAG_NAME_INDEX(err_lambda_capture_default_arg)
 DIAG_NAME_INDEX(err_lambda_capture_flexarray_type)
+DIAG_NAME_INDEX(err_lambda_capture_misplaced_ellipsis)
+DIAG_NAME_INDEX(err_lambda_capture_multiple_ellipses)
 DIAG_NAME_INDEX(err_lambda_decl_ref_not_modifiable_lvalue)
 DIAG_NAME_INDEX(err_lambda_decl_specifier_repeated)
 DIAG_NAME_INDEX(err_lambda_impcap)
@@ -1248,6 +1284,7 @@
 DIAG_NAME_INDEX(err_lambda_incomplete_result)
 DIAG_NAME_INDEX(err_lambda_missing_parens)
 DIAG_NAME_INDEX(err_lambda_return_init_list)
+DIAG_NAME_INDEX(err_lambda_template_parameter_list_empty)
 DIAG_NAME_INDEX(err_lambda_unevaluated_operand)
 DIAG_NAME_INDEX(err_language_linkage_spec_not_ascii)
 DIAG_NAME_INDEX(err_language_linkage_spec_unknown)
@@ -1304,6 +1341,12 @@
 DIAG_NAME_INDEX(err_mempointer_in_nonclass_type)
 DIAG_NAME_INDEX(err_memptr_conv_via_virtual)
 DIAG_NAME_INDEX(err_memptr_incomplete)
+DIAG_NAME_INDEX(err_memtag_any2arg_pointer)
+DIAG_NAME_INDEX(err_memtag_arg_must_be_integer)
+DIAG_NAME_INDEX(err_memtag_arg_must_be_pointer)
+DIAG_NAME_INDEX(err_memtag_arg_must_be_unsigned)
+DIAG_NAME_INDEX(err_memtag_arg_null_or_pointer)
+DIAG_NAME_INDEX(err_method_kernel)
 DIAG_NAME_INDEX(err_method_not_found_with_typo)
 DIAG_NAME_INDEX(err_mips_fp64_req)
 DIAG_NAME_INDEX(err_mismatched_code_seg_base)
@@ -1384,7 +1427,9 @@
 DIAG_NAME_INDEX(err_module_cycle)
 DIAG_NAME_INDEX(err_module_decl_in_header_module)
 DIAG_NAME_INDEX(err_module_decl_in_module_map_module)
+DIAG_NAME_INDEX(err_module_decl_not_at_start)
 DIAG_NAME_INDEX(err_module_declaration_missing)
+DIAG_NAME_INDEX(err_module_declaration_missing_after_global_module_introducer)
 DIAG_NAME_INDEX(err_module_different_modmap)
 DIAG_NAME_INDEX(err_module_expected_ident)
 DIAG_NAME_INDEX(err_module_expected_semi)
@@ -1394,14 +1439,14 @@
 DIAG_NAME_INDEX(err_module_file_not_module)
 DIAG_NAME_INDEX(err_module_file_out_of_date)
 DIAG_NAME_INDEX(err_module_format_unhandled)
+DIAG_NAME_INDEX(err_module_fragment_exported)
 DIAG_NAME_INDEX(err_module_header_file_invalid)
 DIAG_NAME_INDEX(err_module_header_file_not_found)
 DIAG_NAME_INDEX(err_module_header_missing)
-DIAG_NAME_INDEX(err_module_implementation_partition)
 DIAG_NAME_INDEX(err_module_import_in_implementation)
 DIAG_NAME_INDEX(err_module_import_not_at_top_level_fatal)
 DIAG_NAME_INDEX(err_module_interface_implementation_mismatch)
-DIAG_NAME_INDEX(err_module_interface_requires_modules_ts)
+DIAG_NAME_INDEX(err_module_interface_requires_cpp_modules)
 DIAG_NAME_INDEX(err_module_map_not_found)
 DIAG_NAME_INDEX(err_module_no_size_mtime_for_header)
 DIAG_NAME_INDEX(err_module_not_built)
@@ -1427,6 +1472,7 @@
 DIAG_NAME_INDEX(err_module_shadowed)
 DIAG_NAME_INDEX(err_module_unavailable)
 DIAG_NAME_INDEX(err_module_unimported_use)
+DIAG_NAME_INDEX(err_module_unimported_use_global_module_fragment)
 DIAG_NAME_INDEX(err_module_unimported_use_header)
 DIAG_NAME_INDEX(err_module_unimported_use_multiple)
 DIAG_NAME_INDEX(err_modules_embed_file_not_found)
@@ -1481,6 +1527,7 @@
 DIAG_NAME_INDEX(err_new_array_init_args)
 DIAG_NAME_INDEX(err_new_array_nonconst)
 DIAG_NAME_INDEX(err_new_array_of_auto)
+DIAG_NAME_INDEX(err_new_array_size_unknown_from_init)
 DIAG_NAME_INDEX(err_new_incomplete_type)
 DIAG_NAME_INDEX(err_no_accessor_for_property)
 DIAG_NAME_INDEX(err_no_base_classes)
@@ -1702,6 +1749,8 @@
 DIAG_NAME_INDEX(err_omp_expected_identifier_for_critical)
 DIAG_NAME_INDEX(err_omp_expected_int_param)
 DIAG_NAME_INDEX(err_omp_expected_named_var_member_or_array_expression)
+DIAG_NAME_INDEX(err_omp_expected_predefined_allocator)
+DIAG_NAME_INDEX(err_omp_expected_private_copy_for_allocate)
 DIAG_NAME_INDEX(err_omp_expected_punc)
 DIAG_NAME_INDEX(err_omp_expected_reduction_identifier)
 DIAG_NAME_INDEX(err_omp_expected_uniform_param)
@@ -1721,8 +1770,10 @@
 DIAG_NAME_INDEX(err_omp_incomplete_type)
 DIAG_NAME_INDEX(err_omp_invalid_map_this_expr)
 DIAG_NAME_INDEX(err_omp_invalid_map_type_for_directive)
+DIAG_NAME_INDEX(err_omp_invalid_mapper)
 DIAG_NAME_INDEX(err_omp_invalid_scope)
 DIAG_NAME_INDEX(err_omp_invalid_target_decl)
+DIAG_NAME_INDEX(err_omp_invariant_or_linear_dependency)
 DIAG_NAME_INDEX(err_omp_lastprivate_incomplete_type)
 DIAG_NAME_INDEX(err_omp_linear_distribute_var_non_loop_iteration)
 DIAG_NAME_INDEX(err_omp_linear_expected_int_or_ptr)
@@ -1798,6 +1849,8 @@
 DIAG_NAME_INDEX(err_omp_simd_region_cannot_use_stmt)
 DIAG_NAME_INDEX(err_omp_single_copyprivate_with_nowait)
 DIAG_NAME_INDEX(err_omp_single_decl_in_declare_simd)
+DIAG_NAME_INDEX(err_omp_stmt_depends_on_loop_counter)
+DIAG_NAME_INDEX(err_omp_target_before_requires)
 DIAG_NAME_INDEX(err_omp_target_contains_not_only_teams)
 DIAG_NAME_INDEX(err_omp_threadprivate_in_clause)
 DIAG_NAME_INDEX(err_omp_threadprivate_in_target)
@@ -1814,6 +1867,7 @@
 DIAG_NAME_INDEX(err_omp_unknown_map_type_modifier)
 DIAG_NAME_INDEX(err_omp_unknown_reduction_identifier)
 DIAG_NAME_INDEX(err_omp_unnamed_if_clause)
+DIAG_NAME_INDEX(err_omp_unsupported_type)
 DIAG_NAME_INDEX(err_omp_usedeviceptr_not_a_pointer)
 DIAG_NAME_INDEX(err_omp_var_scope)
 DIAG_NAME_INDEX(err_omp_var_thread_local)
@@ -1821,6 +1875,7 @@
 DIAG_NAME_INDEX(err_omp_variable_in_given_clause_and_dsa)
 DIAG_NAME_INDEX(err_omp_variably_modified_type_not_supported)
 DIAG_NAME_INDEX(err_omp_wrong_cancel_region)
+DIAG_NAME_INDEX(err_omp_wrong_dependency_iterator_type)
 DIAG_NAME_INDEX(err_omp_wrong_dsa)
 DIAG_NAME_INDEX(err_omp_wrong_if_directive_name_modifier)
 DIAG_NAME_INDEX(err_omp_wrong_linear_modifier)
@@ -1887,7 +1942,7 @@
 DIAG_NAME_INDEX(err_opencl_variadic_function)
 DIAG_NAME_INDEX(err_opencl_vla)
 DIAG_NAME_INDEX(err_openclcxx_not_supported)
-DIAG_NAME_INDEX(err_openclcxx_reserved)
+DIAG_NAME_INDEX(err_openclcxx_placement_new)
 DIAG_NAME_INDEX(err_openclcxx_virtual_function)
 DIAG_NAME_INDEX(err_openmp_default_simd_align_expr)
 DIAG_NAME_INDEX(err_operator_arrow_circular)
@@ -2037,6 +2092,7 @@
 DIAG_NAME_INDEX(err_pp_include_in_arc_cf_code_audited)
 DIAG_NAME_INDEX(err_pp_include_in_assume_nonnull)
 DIAG_NAME_INDEX(err_pp_include_too_deep)
+DIAG_NAME_INDEX(err_pp_including_mainfile_in_preamble)
 DIAG_NAME_INDEX(err_pp_invalid_directive)
 DIAG_NAME_INDEX(err_pp_invalid_poison)
 DIAG_NAME_INDEX(err_pp_invalid_tok_in_arg_list)
@@ -2060,7 +2116,6 @@
 DIAG_NAME_INDEX(err_pp_module_build_missing_end)
 DIAG_NAME_INDEX(err_pp_module_end_without_module_begin)
 DIAG_NAME_INDEX(err_pp_nested_paren)
-DIAG_NAME_INDEX(err_pp_opencl_variadic_macros)
 DIAG_NAME_INDEX(err_pp_operator_used_as_macro_name)
 DIAG_NAME_INDEX(err_pp_pragma_hdrstop_not_seen)
 DIAG_NAME_INDEX(err_pp_remainder_by_zero)
@@ -2125,6 +2180,10 @@
 DIAG_NAME_INDEX(err_pragma_push_pop_macro_malformed)
 DIAG_NAME_INDEX(err_pragma_push_visibility_mismatch)
 DIAG_NAME_INDEX(err_private_ivar_access)
+DIAG_NAME_INDEX(err_private_module_fragment_expected_semi)
+DIAG_NAME_INDEX(err_private_module_fragment_not_module)
+DIAG_NAME_INDEX(err_private_module_fragment_not_module_interface)
+DIAG_NAME_INDEX(err_private_module_fragment_redefined)
 DIAG_NAME_INDEX(err_property_accessor_type)
 DIAG_NAME_INDEX(err_property_found_suggest)
 DIAG_NAME_INDEX(err_property_function_in_objc_container)
@@ -2191,6 +2250,7 @@
 DIAG_NAME_INDEX(err_reference_bind_drops_quals)
 DIAG_NAME_INDEX(err_reference_bind_failed)
 DIAG_NAME_INDEX(err_reference_bind_init_list)
+DIAG_NAME_INDEX(err_reference_bind_temporary_addrspace)
 DIAG_NAME_INDEX(err_reference_bind_to_bitfield)
 DIAG_NAME_INDEX(err_reference_bind_to_vector_element)
 DIAG_NAME_INDEX(err_reference_capture_with_reference_default)
@@ -2313,6 +2373,7 @@
 DIAG_NAME_INDEX(err_target_unsupported_cpu_for_micromips)
 DIAG_NAME_INDEX(err_target_unsupported_execute_only)
 DIAG_NAME_INDEX(err_target_unsupported_fpmath)
+DIAG_NAME_INDEX(err_target_unsupported_mcmse)
 DIAG_NAME_INDEX(err_target_unsupported_unaligned)
 DIAG_NAME_INDEX(err_temp_copy_ambiguous)
 DIAG_NAME_INDEX(err_temp_copy_deleted)
@@ -2353,6 +2414,7 @@
 DIAG_NAME_INDEX(err_template_inside_local_class)
 DIAG_NAME_INDEX(err_template_instantiate_undefined)
 DIAG_NAME_INDEX(err_template_instantiate_within_definition)
+DIAG_NAME_INDEX(err_template_kernel)
 DIAG_NAME_INDEX(err_template_kw_missing)
 DIAG_NAME_INDEX(err_template_kw_refers_to_class_template)
 DIAG_NAME_INDEX(err_template_kw_refers_to_non_template)
@@ -2484,6 +2546,7 @@
 DIAG_NAME_INDEX(err_typecheck_field_variable_size)
 DIAG_NAME_INDEX(err_typecheck_illegal_increment_decrement)
 DIAG_NAME_INDEX(err_typecheck_incompatible_address_space)
+DIAG_NAME_INDEX(err_typecheck_incompatible_nested_address_space)
 DIAG_NAME_INDEX(err_typecheck_incompatible_ownership)
 DIAG_NAME_INDEX(err_typecheck_incomplete_array_needs_initializer)
 DIAG_NAME_INDEX(err_typecheck_incomplete_tag)
@@ -2584,6 +2647,7 @@
 DIAG_NAME_INDEX(err_unexpected_protocol_qualifier)
 DIAG_NAME_INDEX(err_unexpected_scope_on_base_decltype)
 DIAG_NAME_INDEX(err_unexpected_semi)
+DIAG_NAME_INDEX(err_unexpected_template_after_using)
 DIAG_NAME_INDEX(err_unexpected_template_in_unqualified_id)
 DIAG_NAME_INDEX(err_unexpected_token_in_nested_name_spec)
 DIAG_NAME_INDEX(err_unexpected_typedef)
@@ -2611,6 +2675,7 @@
 DIAG_NAME_INDEX(err_unsupported_abi_for_opt)
 DIAG_NAME_INDEX(err_unsupported_ast_node)
 DIAG_NAME_INDEX(err_unsupported_bom)
+DIAG_NAME_INDEX(err_unsupported_module_partition)
 DIAG_NAME_INDEX(err_unsupported_string_concat)
 DIAG_NAME_INDEX(err_unsupported_unknown_any_call)
 DIAG_NAME_INDEX(err_unsupported_unknown_any_decl)
@@ -2674,6 +2739,7 @@
 DIAG_NAME_INDEX(err_vec_builtin_non_vector)
 DIAG_NAME_INDEX(err_vecstep_non_scalar_vector_type)
 DIAG_NAME_INDEX(err_vector_incorrect_num_initializers)
+DIAG_NAME_INDEX(err_verify_ambiguous_marker)
 DIAG_NAME_INDEX(err_verify_inconsistent_diags)
 DIAG_NAME_INDEX(err_verify_invalid_content)
 DIAG_NAME_INDEX(err_verify_invalid_no_diags)
@@ -2684,6 +2750,7 @@
 DIAG_NAME_INDEX(err_verify_missing_regex)
 DIAG_NAME_INDEX(err_verify_missing_start)
 DIAG_NAME_INDEX(err_verify_no_directives)
+DIAG_NAME_INDEX(err_verify_no_such_marker)
 DIAG_NAME_INDEX(err_vftable_ambiguous_component)
 DIAG_NAME_INDEX(err_virtual_in_union)
 DIAG_NAME_INDEX(err_virtual_member_function_template)
@@ -2705,9 +2772,11 @@
 DIAG_NAME_INDEX(err_x86_builtin_invalid_rounding)
 DIAG_NAME_INDEX(err_x86_builtin_invalid_scale)
 DIAG_NAME_INDEX(err_zero_version)
+DIAG_NAME_INDEX(error_duplicate_asm_operand_name)
 DIAG_NAME_INDEX(error_inoutput_conflict_with_clobber)
 DIAG_NAME_INDEX(escaped_newline_block_comment_end)
 DIAG_NAME_INDEX(ext_abstract_pack_declarator_parens)
+DIAG_NAME_INDEX(ext_adl_only_template_id)
 DIAG_NAME_INDEX(ext_aggregate_init_not_constant)
 DIAG_NAME_INDEX(ext_alias_declaration)
 DIAG_NAME_INDEX(ext_alignof_expr)
@@ -2764,6 +2833,7 @@
 DIAG_NAME_INDEX(ext_decomp_decl)
 DIAG_NAME_INDEX(ext_decomp_decl_cond)
 DIAG_NAME_INDEX(ext_decomp_decl_empty)
+DIAG_NAME_INDEX(ext_decomp_decl_spec)
 DIAG_NAME_INDEX(ext_default_init_const)
 DIAG_NAME_INDEX(ext_defaulted_deleted_function)
 DIAG_NAME_INDEX(ext_delete_void_ptr_operand)
@@ -2794,6 +2864,9 @@
 DIAG_NAME_INDEX(ext_explicit_instantiation_duplicate)
 DIAG_NAME_INDEX(ext_explicit_instantiation_without_qualified_id)
 DIAG_NAME_INDEX(ext_explicit_specialization_storage_class)
+DIAG_NAME_INDEX(ext_export_no_name_block)
+DIAG_NAME_INDEX(ext_export_no_names)
+DIAG_NAME_INDEX(ext_export_using_directive)
 DIAG_NAME_INDEX(ext_expr_not_ice)
 DIAG_NAME_INDEX(ext_extern_template)
 DIAG_NAME_INDEX(ext_extra_semi)
@@ -2843,6 +2916,7 @@
 DIAG_NAME_INDEX(ext_incomplete_in_exception_spec)
 DIAG_NAME_INDEX(ext_increment_bool)
 DIAG_NAME_INDEX(ext_init_capture)
+DIAG_NAME_INDEX(ext_init_capture_pack)
 DIAG_NAME_INDEX(ext_init_list_constant_narrowing)
 DIAG_NAME_INDEX(ext_init_list_type_narrowing)
 DIAG_NAME_INDEX(ext_init_list_variable_narrowing)
@@ -2859,6 +2933,7 @@
 DIAG_NAME_INDEX(ext_internal_in_extern_inline_quiet)
 DIAG_NAME_INDEX(ext_invalid_sign_spec)
 DIAG_NAME_INDEX(ext_keyword_as_ident)
+DIAG_NAME_INDEX(ext_lambda_template_parameter_list)
 DIAG_NAME_INDEX(ext_line_comment)
 DIAG_NAME_INDEX(ext_main_returns_nonint)
 DIAG_NAME_INDEX(ext_main_used)
@@ -2939,6 +3014,7 @@
 DIAG_NAME_INDEX(ext_pp_line_too_big)
 DIAG_NAME_INDEX(ext_pp_line_zero)
 DIAG_NAME_INDEX(ext_pp_macro_redef)
+DIAG_NAME_INDEX(ext_pp_opencl_variadic_macros)
 DIAG_NAME_INDEX(ext_pp_operator_used_as_macro_name)
 DIAG_NAME_INDEX(ext_pp_redef_builtin_macro)
 DIAG_NAME_INDEX(ext_pp_undef_builtin_macro)
@@ -3049,6 +3125,7 @@
 DIAG_NAME_INDEX(note_ambiguous_inherited_constructor_using)
 DIAG_NAME_INDEX(note_ambiguous_member_found)
 DIAG_NAME_INDEX(note_ambiguous_type_conversion)
+DIAG_NAME_INDEX(note_anonymous_namespace)
 DIAG_NAME_INDEX(note_arc_bridge)
 DIAG_NAME_INDEX(note_arc_bridge_retained)
 DIAG_NAME_INDEX(note_arc_bridge_transfer)
@@ -3103,12 +3180,18 @@
 DIAG_NAME_INDEX(note_constexpr_access_past_end)
 DIAG_NAME_INDEX(note_constexpr_access_static_temporary)
 DIAG_NAME_INDEX(note_constexpr_access_uninit)
+DIAG_NAME_INDEX(note_constexpr_access_unreadable_object)
 DIAG_NAME_INDEX(note_constexpr_access_unsized_array)
 DIAG_NAME_INDEX(note_constexpr_access_volatile_obj)
 DIAG_NAME_INDEX(note_constexpr_access_volatile_type)
 DIAG_NAME_INDEX(note_constexpr_array_index)
 DIAG_NAME_INDEX(note_constexpr_baa_insufficient_alignment)
 DIAG_NAME_INDEX(note_constexpr_baa_value_insufficient_alignment)
+DIAG_NAME_INDEX(note_constexpr_bit_cast_indet_dest)
+DIAG_NAME_INDEX(note_constexpr_bit_cast_invalid_subtype)
+DIAG_NAME_INDEX(note_constexpr_bit_cast_invalid_type)
+DIAG_NAME_INDEX(note_constexpr_bit_cast_unsupported_bitfield)
+DIAG_NAME_INDEX(note_constexpr_bit_cast_unsupported_type)
 DIAG_NAME_INDEX(note_constexpr_body_previous_return)
 DIAG_NAME_INDEX(note_constexpr_call_here)
 DIAG_NAME_INDEX(note_constexpr_call_limit_exceeded)
@@ -3117,6 +3200,7 @@
 DIAG_NAME_INDEX(note_constexpr_conditional_never_const)
 DIAG_NAME_INDEX(note_constexpr_ctor_missing_init)
 DIAG_NAME_INDEX(note_constexpr_depth_limit_exceeded)
+DIAG_NAME_INDEX(note_constexpr_dynamic_cast_to_reference_failed)
 DIAG_NAME_INDEX(note_constexpr_float_arithmetic)
 DIAG_NAME_INDEX(note_constexpr_inherited_ctor_call_here)
 DIAG_NAME_INDEX(note_constexpr_invalid_cast)
@@ -3152,8 +3236,11 @@
 DIAG_NAME_INDEX(note_constexpr_pointer_comparison_differing_access)
 DIAG_NAME_INDEX(note_constexpr_pointer_subtraction_not_same_array)
 DIAG_NAME_INDEX(note_constexpr_pointer_subtraction_zero_size)
+DIAG_NAME_INDEX(note_constexpr_polymorphic_unknown_dynamic_type)
+DIAG_NAME_INDEX(note_constexpr_pure_virtual_call)
 DIAG_NAME_INDEX(note_constexpr_step_limit_exceeded)
 DIAG_NAME_INDEX(note_constexpr_stmt_expr_unsupported)
+DIAG_NAME_INDEX(note_constexpr_subobject_declared_here)
 DIAG_NAME_INDEX(note_constexpr_temporary_here)
 DIAG_NAME_INDEX(note_constexpr_this)
 DIAG_NAME_INDEX(note_constexpr_typeid_polymorphic)
@@ -3166,6 +3253,7 @@
 DIAG_NAME_INDEX(note_constexpr_virtual_base_here)
 DIAG_NAME_INDEX(note_constexpr_virtual_call)
 DIAG_NAME_INDEX(note_constexpr_void_comparison)
+DIAG_NAME_INDEX(note_constexpr_volatile_here)
 DIAG_NAME_INDEX(note_conv_function_declared_at)
 DIAG_NAME_INDEX(note_convert_inline_to_static)
 DIAG_NAME_INDEX(note_coroutine_promise_call_implicitly_required)
@@ -3220,6 +3308,7 @@
 DIAG_NAME_INDEX(note_drv_use_standard)
 DIAG_NAME_INDEX(note_drv_verify_prefix_spelling)
 DIAG_NAME_INDEX(note_due_to_dllexported_class)
+DIAG_NAME_INDEX(note_duplicate_asm_operand_name)
 DIAG_NAME_INDEX(note_duplicate_case_prev)
 DIAG_NAME_INDEX(note_duplicate_element)
 DIAG_NAME_INDEX(note_empty_body_on_separate_line)
@@ -3258,6 +3347,7 @@
 DIAG_NAME_INDEX(note_exits_seh_finally)
 DIAG_NAME_INDEX(note_exits_seh_try)
 DIAG_NAME_INDEX(note_exits_temporary_dtor)
+DIAG_NAME_INDEX(note_explicit_bool_resolved_to_true)
 DIAG_NAME_INDEX(note_explicit_ctor_deduction_guide_here)
 DIAG_NAME_INDEX(note_explicit_instantiation_candidate)
 DIAG_NAME_INDEX(note_explicit_instantiation_definition_here)
@@ -3265,6 +3355,7 @@
 DIAG_NAME_INDEX(note_explicit_specialization_declared_here)
 DIAG_NAME_INDEX(note_explicit_template_arg_substitution_here)
 DIAG_NAME_INDEX(note_explicit_template_spec_does_not_need_header)
+DIAG_NAME_INDEX(note_export)
 DIAG_NAME_INDEX(note_expr_divide_by_zero)
 DIAG_NAME_INDEX(note_extern_c_begins_here)
 DIAG_NAME_INDEX(note_extern_c_global_conflict)
@@ -3303,6 +3394,7 @@
 DIAG_NAME_INDEX(note_function_to_function_call)
 DIAG_NAME_INDEX(note_function_warning_silence)
 DIAG_NAME_INDEX(note_getter_unavailable)
+DIAG_NAME_INDEX(note_global_module_introducer_missing)
 DIAG_NAME_INDEX(note_goto_ms_asm_label)
 DIAG_NAME_INDEX(note_guarded_by_declared_here)
 DIAG_NAME_INDEX(note_header_guard)
@@ -3356,6 +3448,7 @@
 DIAG_NAME_INDEX(note_logical_not_fix)
 DIAG_NAME_INDEX(note_logical_not_silence_with_parens)
 DIAG_NAME_INDEX(note_loop_iteration_here)
+DIAG_NAME_INDEX(note_macro_expansion_here)
 DIAG_NAME_INDEX(note_macro_here)
 DIAG_NAME_INDEX(note_main_change_return_type)
 DIAG_NAME_INDEX(note_main_remove_noreturn)
@@ -3416,6 +3509,7 @@
 DIAG_NAME_INDEX(note_non_literal_nontrivial_dtor)
 DIAG_NAME_INDEX(note_non_literal_user_provided_dtor)
 DIAG_NAME_INDEX(note_non_literal_virtual_base)
+DIAG_NAME_INDEX(note_non_null_attribute_failed)
 DIAG_NAME_INDEX(note_non_template_in_template_id_found)
 DIAG_NAME_INDEX(note_non_usual_function_declared_here)
 DIAG_NAME_INDEX(note_nontemplate_decl_here)
@@ -3433,6 +3527,7 @@
 DIAG_NAME_INDEX(note_nontrivial_virtual_dtor)
 DIAG_NAME_INDEX(note_noreturn_missing_first_decl)
 DIAG_NAME_INDEX(note_not_found_by_two_phase_lookup)
+DIAG_NAME_INDEX(note_not_module_interface_add_export)
 DIAG_NAME_INDEX(note_nullability_fix_it)
 DIAG_NAME_INDEX(note_nullability_here)
 DIAG_NAME_INDEX(note_nullability_type_specifier)
@@ -3477,6 +3572,7 @@
 DIAG_NAME_INDEX(note_omp_conversion_here)
 DIAG_NAME_INDEX(note_omp_critical_hint_here)
 DIAG_NAME_INDEX(note_omp_critical_no_hint)
+DIAG_NAME_INDEX(note_omp_default_dsa_none)
 DIAG_NAME_INDEX(note_omp_explicit_dsa)
 DIAG_NAME_INDEX(note_omp_implicit_dsa)
 DIAG_NAME_INDEX(note_omp_invalid_length_on_this_ptr_mapping)
@@ -3488,11 +3584,13 @@
 DIAG_NAME_INDEX(note_omp_nowait_clause_here)
 DIAG_NAME_INDEX(note_omp_ordered_param)
 DIAG_NAME_INDEX(note_omp_predetermined_dsa)
+DIAG_NAME_INDEX(note_omp_previous_allocator)
 DIAG_NAME_INDEX(note_omp_previous_critical_region)
 DIAG_NAME_INDEX(note_omp_previous_grainsize_num_tasks)
 DIAG_NAME_INDEX(note_omp_previous_named_if_clause)
 DIAG_NAME_INDEX(note_omp_previous_reduction_identifier)
 DIAG_NAME_INDEX(note_omp_referenced)
+DIAG_NAME_INDEX(note_omp_requires_encountered_target)
 DIAG_NAME_INDEX(note_omp_requires_previous_clause)
 DIAG_NAME_INDEX(note_omp_task_predetermined_firstprivate_here)
 DIAG_NAME_INDEX(note_opencl_typedef_access_qualifier)
@@ -3530,8 +3628,10 @@
 DIAG_NAME_INDEX(note_ovl_candidate_disabled_by_requirement)
 DIAG_NAME_INDEX(note_ovl_candidate_explicit_arg_mismatch_named)
 DIAG_NAME_INDEX(note_ovl_candidate_explicit_arg_mismatch_unnamed)
+DIAG_NAME_INDEX(note_ovl_candidate_explicit_forbidden)
 DIAG_NAME_INDEX(note_ovl_candidate_has_pass_object_size_params)
 DIAG_NAME_INDEX(note_ovl_candidate_illegal_constructor)
+DIAG_NAME_INDEX(note_ovl_candidate_illegal_constructor_adrspace_mismatch)
 DIAG_NAME_INDEX(note_ovl_candidate_incomplete_deduction)
 DIAG_NAME_INDEX(note_ovl_candidate_incomplete_deduction_pack)
 DIAG_NAME_INDEX(note_ovl_candidate_inconsistent_deduction)
@@ -3596,6 +3696,7 @@
 DIAG_NAME_INDEX(note_printf_c_str)
 DIAG_NAME_INDEX(note_prior_template_arg_substitution)
 DIAG_NAME_INDEX(note_private_extern)
+DIAG_NAME_INDEX(note_private_module_fragment)
 DIAG_NAME_INDEX(note_private_top_level_defined)
 DIAG_NAME_INDEX(note_property_attribute)
 DIAG_NAME_INDEX(note_property_declare)
@@ -3657,6 +3758,7 @@
 DIAG_NAME_INDEX(note_silence_aligned_allocation_unavailable)
 DIAG_NAME_INDEX(note_specialized_decl)
 DIAG_NAME_INDEX(note_specialized_entity)
+DIAG_NAME_INDEX(note_static_for_internal_linkage)
 DIAG_NAME_INDEX(note_string_plus_scalar_silence)
 DIAG_NAME_INDEX(note_strlcpycat_wrong_size)
 DIAG_NAME_INDEX(note_strncat_wrong_size)
@@ -3702,6 +3804,7 @@
 DIAG_NAME_INDEX(note_thread_warning_in_fun)
 DIAG_NAME_INDEX(note_throw_in_dtor)
 DIAG_NAME_INDEX(note_throw_in_function)
+DIAG_NAME_INDEX(note_throw_underaligned_obj)
 DIAG_NAME_INDEX(note_transparent_union_first_field_size_align)
 DIAG_NAME_INDEX(note_type_being_defined)
 DIAG_NAME_INDEX(note_type_incomplete)
@@ -3740,6 +3843,7 @@
 DIAG_NAME_INDEX(note_var_fixit_add_initialization)
 DIAG_NAME_INDEX(note_var_prev_partial_spec_here)
 DIAG_NAME_INDEX(note_vbase_moved_here)
+DIAG_NAME_INDEX(note_verify_ambiguous_marker)
 DIAG_NAME_INDEX(note_vla_unsupported)
 DIAG_NAME_INDEX(note_which_delegates_to)
 DIAG_NAME_INDEX(note_while_in_implementation)
@@ -3774,6 +3878,7 @@
 DIAG_NAME_INDEX(remark_fe_backend_plugin)
 DIAG_NAME_INDEX(remark_module_build)
 DIAG_NAME_INDEX(remark_module_build_done)
+DIAG_NAME_INDEX(remark_module_import)
 DIAG_NAME_INDEX(remark_module_lock_failure)
 DIAG_NAME_INDEX(remark_module_lock_timeout)
 DIAG_NAME_INDEX(remark_sanitize_address_insert_extra_padding_accepted)
@@ -3834,6 +3939,7 @@
 DIAG_NAME_INDEX(warn_attribute_dll_instantiated_base_class)
 DIAG_NAME_INDEX(warn_attribute_dll_redeclaration)
 DIAG_NAME_INDEX(warn_attribute_dllexport_explicit_instantiation_decl)
+DIAG_NAME_INDEX(warn_attribute_dllexport_explicit_instantiation_def)
 DIAG_NAME_INDEX(warn_attribute_dllimport_static_field_definition)
 DIAG_NAME_INDEX(warn_attribute_iboutlet)
 DIAG_NAME_INDEX(warn_attribute_ignored)
@@ -3852,6 +3958,7 @@
 DIAG_NAME_INDEX(warn_attribute_protected_visibility)
 DIAG_NAME_INDEX(warn_attribute_return_pointers_only)
 DIAG_NAME_INDEX(warn_attribute_return_pointers_refs_only)
+DIAG_NAME_INDEX(warn_attribute_section_drectve)
 DIAG_NAME_INDEX(warn_attribute_section_on_redeclaration)
 DIAG_NAME_INDEX(warn_attribute_sentinel_named_arguments)
 DIAG_NAME_INDEX(warn_attribute_sentinel_not_variadic)
@@ -3891,6 +3998,7 @@
 DIAG_NAME_INDEX(warn_bool_switch_condition)
 DIAG_NAME_INDEX(warn_braces_around_scalar_init)
 DIAG_NAME_INDEX(warn_break_binds_to_switch)
+DIAG_NAME_INDEX(warn_builtin_chk_overflow)
 DIAG_NAME_INDEX(warn_builtin_unknown)
 DIAG_NAME_INDEX(warn_c99_compat_unicode_id)
 DIAG_NAME_INDEX(warn_c99_compat_unicode_literal)
@@ -3910,8 +4018,6 @@
 DIAG_NAME_INDEX(warn_category_method_impl_match)
 DIAG_NAME_INDEX(warn_cconv_ignored)
 DIAG_NAME_INDEX(warn_cconv_knr)
-DIAG_NAME_INDEX(warn_cconv_structors)
-DIAG_NAME_INDEX(warn_cconv_varargs)
 DIAG_NAME_INDEX(warn_cdtor_function_try_handler_mem_expr)
 DIAG_NAME_INDEX(warn_cfstring_truncated)
 DIAG_NAME_INDEX(warn_char_constant_too_large)
@@ -3984,22 +4090,29 @@
 DIAG_NAME_INDEX(warn_cxx14_compat_template_template_param_typename)
 DIAG_NAME_INDEX(warn_cxx14_compat_u8_character_literal)
 DIAG_NAME_INDEX(warn_cxx14_compat_using_attribute_ns)
+DIAG_NAME_INDEX(warn_cxx17_compat_adl_only_template_id)
 DIAG_NAME_INDEX(warn_cxx17_compat_bitfield_member_init)
 DIAG_NAME_INDEX(warn_cxx17_compat_constexpr_body_invalid_stmt)
 DIAG_NAME_INDEX(warn_cxx17_compat_constexpr_function_try_block)
+DIAG_NAME_INDEX(warn_cxx17_compat_constexpr_virtual)
+DIAG_NAME_INDEX(warn_cxx17_compat_decomp_decl_spec)
 DIAG_NAME_INDEX(warn_cxx17_compat_defaulted_method_type_mismatch)
 DIAG_NAME_INDEX(warn_cxx17_compat_equals_this_lambda_capture)
 DIAG_NAME_INDEX(warn_cxx17_compat_exception_spec_in_signature)
 DIAG_NAME_INDEX(warn_cxx17_compat_for_range_init_stmt)
+DIAG_NAME_INDEX(warn_cxx17_compat_init_capture_pack)
 DIAG_NAME_INDEX(warn_cxx17_compat_inline_nested_namespace_definition)
 DIAG_NAME_INDEX(warn_cxx17_compat_lambda_def_ctor_assign)
+DIAG_NAME_INDEX(warn_cxx17_compat_lambda_template_parameter_list)
 DIAG_NAME_INDEX(warn_cxx17_compat_multi_using_declaration)
 DIAG_NAME_INDEX(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue)
 DIAG_NAME_INDEX(warn_cxx17_compat_spaceship)
 DIAG_NAME_INDEX(warn_cxx17_compat_unicode_type)
 DIAG_NAME_INDEX(warn_cxx17_compat_using_declaration_pack)
 DIAG_NAME_INDEX(warn_cxx17_hex_literal)
+DIAG_NAME_INDEX(warn_cxx20_compat_consteval)
 DIAG_NAME_INDEX(warn_cxx2a_compat_aggregate_init_with_ctors)
+DIAG_NAME_INDEX(warn_cxx2a_compat_explicit_bool)
 DIAG_NAME_INDEX(warn_cxx2a_compat_spaceship)
 DIAG_NAME_INDEX(warn_cxx2a_compat_utf8_string)
 DIAG_NAME_INDEX(warn_cxx2a_keyword)
@@ -4084,6 +4197,7 @@
 DIAG_NAME_INDEX(warn_decl_in_param_list)
 DIAG_NAME_INDEX(warn_decl_shadow)
 DIAG_NAME_INDEX(warn_decl_shadow_uncaptured_local)
+DIAG_NAME_INDEX(warn_declspec_allocator_nonpointer)
 DIAG_NAME_INDEX(warn_declspec_attribute_ignored)
 DIAG_NAME_INDEX(warn_deep_exception_specs_differ)
 DIAG_NAME_INDEX(warn_def_missing_case)
@@ -4141,6 +4255,11 @@
 DIAG_NAME_INDEX(warn_double_const_requires_fp64)
 DIAG_NAME_INDEX(warn_double_lock)
 DIAG_NAME_INDEX(warn_drv_assuming_mfloat_abi_is)
+DIAG_NAME_INDEX(warn_drv_avr_family_linking_stdlibs_not_implemented)
+DIAG_NAME_INDEX(warn_drv_avr_gcc_not_found)
+DIAG_NAME_INDEX(warn_drv_avr_libc_not_found)
+DIAG_NAME_INDEX(warn_drv_avr_mcu_not_specified)
+DIAG_NAME_INDEX(warn_drv_avr_stdlib_not_linked)
 DIAG_NAME_INDEX(warn_drv_clang_unsupported)
 DIAG_NAME_INDEX(warn_drv_darwin_sdk_invalid_settings)
 DIAG_NAME_INDEX(warn_drv_deprecated_arg)
@@ -4153,6 +4272,7 @@
 DIAG_NAME_INDEX(warn_drv_input_file_unused)
 DIAG_NAME_INDEX(warn_drv_input_file_unused_by_cpp)
 DIAG_NAME_INDEX(warn_drv_invoking_fallback)
+DIAG_NAME_INDEX(warn_drv_libstdcxx_not_found)
 DIAG_NAME_INDEX(warn_drv_moutline_unsupported_opt)
 DIAG_NAME_INDEX(warn_drv_msp430_hwmult_mismatch)
 DIAG_NAME_INDEX(warn_drv_msp430_hwmult_no_device)
@@ -4261,6 +4381,8 @@
 DIAG_NAME_INDEX(warn_format_nonsensical_length)
 DIAG_NAME_INDEX(warn_format_string_is_wide_literal)
 DIAG_NAME_INDEX(warn_format_zero_positional_specifier)
+DIAG_NAME_INDEX(warn_fortify_source_overflow)
+DIAG_NAME_INDEX(warn_fortify_source_size_mismatch)
 DIAG_NAME_INDEX(warn_forward_class_redefinition)
 DIAG_NAME_INDEX(warn_framework_include_private_from_public)
 DIAG_NAME_INDEX(warn_fun_excludes_mutex)
@@ -4292,6 +4414,7 @@
 DIAG_NAME_INDEX(warn_impcast_bitfield_precision_constant)
 DIAG_NAME_INDEX(warn_impcast_bool_to_null_pointer)
 DIAG_NAME_INDEX(warn_impcast_complex_scalar)
+DIAG_NAME_INDEX(warn_impcast_constant_int_to_objc_bool)
 DIAG_NAME_INDEX(warn_impcast_different_enum_types)
 DIAG_NAME_INDEX(warn_impcast_double_promotion)
 DIAG_NAME_INDEX(warn_impcast_fixed_point_range)
@@ -4375,13 +4498,13 @@
 DIAG_NAME_INDEX(warn_maybe_uninit_var)
 DIAG_NAME_INDEX(warn_maynot_respond)
 DIAG_NAME_INDEX(warn_member_extra_qualification)
-DIAG_NAME_INDEX(warn_memcpy_chk_overflow)
 DIAG_NAME_INDEX(warn_memsize_comparison)
 DIAG_NAME_INDEX(warn_messaging_unqualified_id)
 DIAG_NAME_INDEX(warn_method_param_declaration)
 DIAG_NAME_INDEX(warn_method_param_redefinition)
 DIAG_NAME_INDEX(warn_microsoft_dependent_exists)
 DIAG_NAME_INDEX(warn_microsoft_qualifiers_ignored)
+DIAG_NAME_INDEX(warn_mig_server_routine_does_not_return_kern_return_t)
 DIAG_NAME_INDEX(warn_mismatched_availability)
 DIAG_NAME_INDEX(warn_mismatched_availability_override)
 DIAG_NAME_INDEX(warn_mismatched_availability_override_unavail)
@@ -4452,6 +4575,7 @@
 DIAG_NAME_INDEX(warn_not_enough_argument)
 DIAG_NAME_INDEX(warn_not_in_enum)
 DIAG_NAME_INDEX(warn_not_in_enum_assignment)
+DIAG_NAME_INDEX(warn_nothrow_attribute_ignored)
 DIAG_NAME_INDEX(warn_npot_ms_struct)
 DIAG_NAME_INDEX(warn_ns_attribute_wrong_parameter_type)
 DIAG_NAME_INDEX(warn_ns_attribute_wrong_return_type)
@@ -4471,6 +4595,7 @@
 DIAG_NAME_INDEX(warn_nullability_lost)
 DIAG_NAME_INDEX(warn_nullability_missing)
 DIAG_NAME_INDEX(warn_nullability_missing_array)
+DIAG_NAME_INDEX(warn_objc_boxing_invalid_utf8_string)
 DIAG_NAME_INDEX(warn_objc_cdirective_format_string)
 DIAG_NAME_INDEX(warn_objc_circular_container)
 DIAG_NAME_INDEX(warn_objc_collection_literal_element)
@@ -4503,11 +4628,29 @@
 DIAG_NAME_INDEX(warn_objc_secondary_init_super_init_call)
 DIAG_NAME_INDEX(warn_objc_string_literal_comparison)
 DIAG_NAME_INDEX(warn_objc_unsafe_perform_selector)
+DIAG_NAME_INDEX(warn_odr_different_num_template_parameters)
+DIAG_NAME_INDEX(warn_odr_different_template_parameter_kind)
+DIAG_NAME_INDEX(warn_odr_field_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_function_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_ivar_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_non_type_parameter_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_method_num_params_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_method_param_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_method_result_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_method_variadic_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_property_impl_kind_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_property_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_superclass_inconsistent)
+DIAG_NAME_INDEX(warn_odr_objc_synthesize_ivar_inconsistent)
+DIAG_NAME_INDEX(warn_odr_parameter_pack_non_pack)
 DIAG_NAME_INDEX(warn_odr_tag_type_inconsistent)
+DIAG_NAME_INDEX(warn_odr_variable_multiple_def)
+DIAG_NAME_INDEX(warn_odr_variable_type_inconsistent)
 DIAG_NAME_INDEX(warn_old_implicitly_unsigned_long)
 DIAG_NAME_INDEX(warn_old_implicitly_unsigned_long_cxx)
 DIAG_NAME_INDEX(warn_old_style_cast)
 DIAG_NAME_INDEX(warn_omp_alignment_not_power_of_two)
+DIAG_NAME_INDEX(warn_omp_allocate_thread_on_task_target_directive)
 DIAG_NAME_INDEX(warn_omp_extra_tokens_at_eol)
 DIAG_NAME_INDEX(warn_omp_linear_step_zero)
 DIAG_NAME_INDEX(warn_omp_loop_64_bit_var)
@@ -4515,6 +4658,7 @@
 DIAG_NAME_INDEX(warn_omp_non_trivial_type_mapped)
 DIAG_NAME_INDEX(warn_omp_not_in_target_context)
 DIAG_NAME_INDEX(warn_omp_section_is_char)
+DIAG_NAME_INDEX(warn_omp_used_different_allocator)
 DIAG_NAME_INDEX(warn_on_superclass_use)
 DIAG_NAME_INDEX(warn_opencl_attr_deprecated_ignored)
 DIAG_NAME_INDEX(warn_opencl_generic_address_space_arg)
@@ -4558,11 +4702,15 @@
 DIAG_NAME_INDEX(warn_pragma_comment_ignored)
 DIAG_NAME_INDEX(warn_pragma_debug_missing_argument)
 DIAG_NAME_INDEX(warn_pragma_debug_unexpected_command)
+DIAG_NAME_INDEX(warn_pragma_debug_unknown_module)
 DIAG_NAME_INDEX(warn_pragma_diagnostic_cannot_pop)
 DIAG_NAME_INDEX(warn_pragma_diagnostic_invalid)
 DIAG_NAME_INDEX(warn_pragma_diagnostic_invalid_option)
 DIAG_NAME_INDEX(warn_pragma_diagnostic_invalid_token)
 DIAG_NAME_INDEX(warn_pragma_diagnostic_unknown_warning)
+DIAG_NAME_INDEX(warn_pragma_exec_charset_expected)
+DIAG_NAME_INDEX(warn_pragma_exec_charset_push_invalid)
+DIAG_NAME_INDEX(warn_pragma_exec_charset_spec_invalid)
 DIAG_NAME_INDEX(warn_pragma_expected_action_or_r_paren)
 DIAG_NAME_INDEX(warn_pragma_expected_colon)
 DIAG_NAME_INDEX(warn_pragma_expected_colon_r_paren)
@@ -4720,7 +4868,6 @@
 DIAG_NAME_INDEX(warn_static_main)
 DIAG_NAME_INDEX(warn_static_self_reference_in_init)
 DIAG_NAME_INDEX(warn_stdc_fenv_access_not_supported)
-DIAG_NAME_INDEX(warn_stdlibcxx_not_found)
 DIAG_NAME_INDEX(warn_strict_multiple_method_decl)
 DIAG_NAME_INDEX(warn_strict_prototypes)
 DIAG_NAME_INDEX(warn_string_plus_char)
@@ -4748,6 +4895,7 @@
 DIAG_NAME_INDEX(warn_target_unsupported_nan2008)
 DIAG_NAME_INDEX(warn_target_unsupported_nanlegacy)
 DIAG_NAME_INDEX(warn_tautological_bool_compare)
+DIAG_NAME_INDEX(warn_tautological_compare_objc_bool)
 DIAG_NAME_INDEX(warn_tautological_constant_compare)
 DIAG_NAME_INDEX(warn_tautological_overlap_comparison)
 DIAG_NAME_INDEX(warn_template_arg_negative)
@@ -4768,6 +4916,7 @@
 DIAG_NAME_INDEX(warn_thread_safety_beta)
 DIAG_NAME_INDEX(warn_thread_safety_verbose)
 DIAG_NAME_INDEX(warn_throw_in_noexcept_func)
+DIAG_NAME_INDEX(warn_throw_underaligned_obj)
 DIAG_NAME_INDEX(warn_transparent_union_attribute_field_size_align)
 DIAG_NAME_INDEX(warn_transparent_union_attribute_floating)
 DIAG_NAME_INDEX(warn_transparent_union_attribute_not_definition)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc
index a482bec..3a4ecac 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc
@@ -3,19 +3,23 @@
 #undef LEXSTART
 #endif
 
-DIAG(backslash_newline_space, CLASS_WARNING, (unsigned)diag::Severity::Warning, "backslash and newline separated by space", 54, SFINAE_Suppress, false, false, 1)
+DIAG(backslash_newline_space, CLASS_WARNING, (unsigned)diag::Severity::Warning, "backslash and newline separated by space", 55, SFINAE_Suppress, false, false, 1)
 DIAG(err__Pragma_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "_Pragma takes a parenthesized string literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_bad_character_encoding, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal character encoding in character literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_bad_string_encoding, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal character encoding in string literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_character_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "character too large for enclosing character literal type", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_conflict_marker, CLASS_ERROR, (unsigned)diag::Severity::Error, "version control conflict marker in file", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_defined_macro_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "'defined' cannot be used as a macro name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_dep_source_minimizer_missing_sema_after_at_import, CLASS_ERROR, (unsigned)diag::Severity::Error, "could not find ';' after @import", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_dep_source_minimizer_unexpected_tokens_at_import, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected extra tokens at end of @import declaration", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_digit_separator_not_between_digits, CLASS_ERROR, (unsigned)diag::Severity::Error, "digit separator cannot appear at %select{start|end}0 of digit sequence", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_embedded_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "embedding a #%0 directive within macro arguments is not supported", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_escape_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{hex|octal}0 escape sequence out of range", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_expected_id_building_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a module name in '__building_module' expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_exponent_has_no_digits, CLASS_ERROR, (unsigned)diag::Severity::Error, "exponent has no digits", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_feature_check_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin feature check macro requires a parenthesized identifier", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_header_import_not_header_unit, CLASS_ERROR, (unsigned)diag::Severity::Error, "header file %0 (aka '%1') cannot be imported because it is not known to be a header unit", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_header_import_semi_in_macro, CLASS_ERROR, (unsigned)diag::Severity::Error, "semicolon terminating header import declaration cannot be produced by a macro", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_hex_constant_requires, CLASS_ERROR, (unsigned)diag::Severity::Error, "hexadecimal floating %select{constant|literal}0 requires %select{an exponent|a significand}1", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_hex_escape_no_digits, CLASS_ERROR, (unsigned)diag::Severity::Error, "\\%0 used with no following hex digits", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_invalid_char_raw_delim, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid character '%0' character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -69,18 +73,18 @@
 DIAG(err_paste_at_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at start of macro expansion", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_placeholder_in_source, CLASS_ERROR, (unsigned)diag::Severity::Error, "editor placeholder in source file", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_arc_cf_code_audited_syntax, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'begin' or 'end'", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_assume_nonnull_syntax, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'begin' or 'end'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_assume_nonnull_syntax, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'begin' or 'end'", 0, SFINAE_SubstitutionFailure, false, true, 20)
 DIAG(err_pp_bad_paste, CLASS_ERROR, (unsigned)diag::Severity::Error, "pasting formed '%0', an invalid preprocessing token", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_colon_without_question, CLASS_ERROR, (unsigned)diag::Severity::Error, "':' without preceding '?'", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_directive_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must be used within a preprocessing directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_division_by_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "division by zero in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_double_begin_of_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "already inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_double_begin_of_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "already inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_double_begin_of_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "already inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 20)
 DIAG(err_pp_duplicate_name_in_arg_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate macro parameter name %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_empty_filename, CLASS_ERROR, (unsigned)diag::Severity::Error, "empty filename", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_endif_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#endif without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_eof_in_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang arc_cf_code_audited' was not ended within this file", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_eof_in_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang assume_nonnull' was not ended within this file", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_eof_in_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang assume_nonnull' was not ended within this file", 0, SFINAE_SubstitutionFailure, false, true, 20)
 DIAG(err_pp_error_opening_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "error opening file '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_expected_after, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing %1 after %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_expected_comma_in_arg_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected comma in macro parameter list", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -94,15 +98,16 @@
 DIAG(err_pp_expr_bad_token_lparen, CLASS_ERROR, (unsigned)diag::Severity::Error, "function-like macro %0 is not defined", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_expr_bad_token_start_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid token at start of a preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "'%0' file not found", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_file_not_found_angled_include_not_fatal, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' file not found with <angled> include; use \"quotes\" instead", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_file_not_found_angled_include_not_fatal, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' file not found with <angled> %select{include|import}1; use \"quotes\" instead", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_file_not_found_typo_not_fatal, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' file not found, did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_hash_error, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_pp_hash_error, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 22)
 DIAG(err_pp_identifier_arg_not_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot convert %0 token to an identifier", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_illegal_floating_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "floating point literal in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_import_directive_ms, CLASS_ERROR, (unsigned)diag::Severity::Error, "#import of type library is an unsupported Microsoft feature", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_include_in_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot #include files inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_include_in_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot #include files inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_include_in_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{#include files|import headers}0 inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_include_in_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{#include files|import headers}0 inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 20)
 DIAG(err_pp_include_too_deep, CLASS_ERROR, (unsigned)diag::Severity::Error, "#include nested too deeply", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_including_mainfile_in_preamble, CLASS_ERROR, (unsigned)diag::Severity::Error, "main file cannot be included recursively when building a preamble", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_invalid_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid preprocessing directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_invalid_poison, CLASS_ERROR, (unsigned)diag::Severity::Error, "can only poison identifier tokens", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_invalid_tok_in_arg_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid token in macro parameter list", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -126,7 +131,6 @@
 DIAG(err_pp_module_build_missing_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching '#pragma clang module endbuild' for this '#pragma clang module build'", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_module_end_without_module_begin, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching '#pragma clang module begin' for this '#pragma clang module end'", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_nested_paren, CLASS_ERROR, (unsigned)diag::Severity::Error, "nested parentheses not permitted in %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_opencl_variadic_macros, CLASS_ERROR, (unsigned)diag::Severity::Error, "variadic macros not supported in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_operator_used_as_macro_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "C++ operator %0 (aka %1) used as a macro name", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_pragma_hdrstop_not_seen, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "#pragma hdrstop not seen while attempting to use precompiled header", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_remainder_by_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "remainder by zero in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -134,7 +138,7 @@
 DIAG(err_pp_through_header_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "'%0' required for precompiled header not found", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_through_header_not_seen, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "#include of '%0' not seen while attempting to %select{create|use}1 precompiled header", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_unmatched_end_of_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "not currently inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(err_pp_unmatched_end_of_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "not currently inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_unmatched_end_of_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "not currently inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 20)
 DIAG(err_pp_unterminated_conditional, CLASS_ERROR, (unsigned)diag::Severity::Error, "unterminated conditional directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_used_poisoned_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "attempt to use a poisoned identifier", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_vaopt_nested_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "__VA_OPT__ cannot be nested within its own replacement tokens", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -158,58 +162,60 @@
 DIAG(err_unterminated_raw_string, CLASS_ERROR, (unsigned)diag::Severity::Error, "raw string missing terminating delimiter )%0\"", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_vaopt_paste_at_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at end of __VA_OPT__ argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_vaopt_paste_at_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at start of __VA_OPT__ argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(escaped_newline_block_comment_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "escaped newline between */ characters at block comment end", 126, SFINAE_Suppress, false, false, 1)
-DIAG(ext_binary_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a GNU extension", 257, SFINAE_Suppress, false, false, 1)
-DIAG(ext_binary_literal_cxx14, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a C++14 extension", 84, SFINAE_Suppress, false, false, 1)
-DIAG(ext_c99_whitespace_required_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C99 requires whitespace after the macro name", 114, SFINAE_Suppress, false, false, 1)
-DIAG(ext_charize_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "charizing operator #@ is a Microsoft extension", 374, SFINAE_Suppress, false, false, 1)
-DIAG(ext_comment_paste_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "pasting two '/' tokens into a '//' comment is a Microsoft extension", 375, SFINAE_Suppress, false, false, 1)
-DIAG(ext_ctrl_z_eof_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "treating Ctrl-Z as end-of-file is a Microsoft extension", 379, SFINAE_Suppress, false, false, 1)
-DIAG(ext_dollar_in_identifier, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'$' in identifier", 191, SFINAE_Suppress, false, false, 1)
-DIAG(ext_embedded_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "embedding a directive within macro arguments has undefined behavior", 201, SFINAE_Suppress, false, false, 1)
-DIAG(ext_empty_character, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "empty character constant", 345, SFINAE_Suppress, false, false, 1)
-DIAG(ext_empty_fnmacro_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty macro arguments are a C99 feature", 114, SFINAE_Suppress, false, false, 1)
-DIAG(ext_four_char_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-character character constant", 244, SFINAE_Suppress, false, false, 1)
-DIAG(ext_hex_constant_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating constants are a C99 feature", 114, SFINAE_Suppress, false, false, 1)
-DIAG(ext_hex_literal_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are a C++17 feature", 91, SFINAE_Suppress, false, false, 1)
-DIAG(ext_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "// comments are not allowed in this language", 126, SFINAE_Suppress, false, false, 1)
-DIAG(ext_missing_varargs_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "must specify at least one argument for '...' parameter of variadic macro", 278, SFINAE_Suppress, false, false, 1)
+DIAG(escaped_newline_block_comment_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "escaped newline between */ characters at block comment end", 127, SFINAE_Suppress, false, false, 1)
+DIAG(ext_binary_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a GNU extension", 261, SFINAE_Suppress, false, false, 1)
+DIAG(ext_binary_literal_cxx14, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a C++14 extension", 85, SFINAE_Suppress, false, false, 1)
+DIAG(ext_c99_whitespace_required_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C99 requires whitespace after the macro name", 115, SFINAE_Suppress, false, false, 1)
+DIAG(ext_charize_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "charizing operator #@ is a Microsoft extension", 378, SFINAE_Suppress, false, false, 1)
+DIAG(ext_comment_paste_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "pasting two '/' tokens into a '//' comment is a Microsoft extension", 379, SFINAE_Suppress, false, false, 1)
+DIAG(ext_ctrl_z_eof_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "treating Ctrl-Z as end-of-file is a Microsoft extension", 384, SFINAE_Suppress, false, false, 1)
+DIAG(ext_dollar_in_identifier, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'$' in identifier", 192, SFINAE_Suppress, false, false, 1)
+DIAG(ext_embedded_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "embedding a directive within macro arguments has undefined behavior", 202, SFINAE_Suppress, false, false, 1)
+DIAG(ext_empty_character, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "empty character constant", 349, SFINAE_Suppress, false, false, 1)
+DIAG(ext_empty_fnmacro_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty macro arguments are a C99 feature", 115, SFINAE_Suppress, false, false, 1)
+DIAG(ext_four_char_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-character character constant", 248, SFINAE_Suppress, false, false, 1)
+DIAG(ext_hex_constant_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating constants are a C99 feature", 115, SFINAE_Suppress, false, false, 1)
+DIAG(ext_hex_literal_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are a C++17 feature", 92, SFINAE_Suppress, false, false, 1)
+DIAG(ext_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "// comments are not allowed in this language", 127, SFINAE_Suppress, false, false, 1)
+DIAG(ext_missing_varargs_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "must specify at least one argument for '...' parameter of variadic macro", 282, SFINAE_Suppress, false, false, 1)
 DIAG(ext_missing_whitespace_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "whitespace required after macro name", 0, SFINAE_Suppress, false, false, 1)
-DIAG(ext_ms_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "invalid suffix on literal; C++11 requires a space between literal and identifier", 570, SFINAE_Suppress, false, false, 1)
-DIAG(ext_multi_line_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-line // comment", 126, SFINAE_Suppress, false, false, 1)
-DIAG(ext_multichar_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multi-character character constant", 429, SFINAE_Suppress, false, false, 1)
-DIAG(ext_named_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "named variadic macros are a GNU extension", 744, SFINAE_Suppress, false, false, 1)
-DIAG(ext_no_newline_eof, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no newline at end of file", 435, SFINAE_Suppress, false, false, 1)
-DIAG(ext_nonstandard_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of non-standard escape character '\\%0'", 527, SFINAE_Suppress, false, false, 1)
-DIAG(ext_on_off_switch_syntax, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected 'ON' or 'OFF' or 'DEFAULT' in pragma", 696, SFINAE_Suppress, false, false, 1)
-DIAG(ext_paste_comma, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "token pasting of ',' and __VA_ARGS__ is a GNU extension", 278, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_bad_paste_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "pasting formed '%0', an invalid preprocessing token", 347, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_bad_vaargs_use, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", 527, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_bad_vaopt_use, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__VA_OPT__ can only appear in the expansion of a variadic macro", 744, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_comma_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "comma operator in operand of #if", 527, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_extra_tokens_at_eol, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "extra tokens at end of #%0 directive", 224, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_ident_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#ident is a language extension", 527, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_import_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#import is a language extension", 302, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_include_next_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#include_next is a language extension", 269, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_include_search_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#include resolved using non-portable Microsoft search rules as: %0", 390, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_line_too_big, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C requires #line number to be less than %0, allowed as extension", 527, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_line_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#line directive with zero argument is a GNU extension", 277, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_macro_redef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 macro redefined", 362, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_operator_used_as_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++ operator %0 (aka %1) used as a macro name", 377, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_redef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefining builtin macro", 68, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_undef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "undefining builtin macro", 68, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_warning_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#warning is a language extension", 527, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pragma_syntax_eod, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected end of directive in pragma", 696, SFINAE_Suppress, false, false, 1)
-DIAG(ext_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "invalid suffix on literal; C++11 requires a space between literal and identifier", 570, SFINAE_Suppress, false, false, 1)
-DIAG(ext_string_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "string literal of length %0 exceeds maximum length %1 that %select{C90|ISO C99|C++}2 compilers are required to support", 510, SFINAE_Suppress, false, false, 1)
-DIAG(ext_token_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extension used", 352, SFINAE_Suppress, false, false, 1)
-DIAG(ext_unicode_whitespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "treating Unicode character as whitespace", 690, SFINAE_Suppress, false, false, 1)
-DIAG(ext_unknown_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown escape sequence '\\%0'", 695, SFINAE_Suppress, false, false, 1)
-DIAG(ext_unterminated_char_or_string, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing terminating %select{'|'\"'}0 character", 345, SFINAE_Suppress, false, false, 1)
-DIAG(ext_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variadic macros are a C99 feature", 744, SFINAE_Suppress, false, false, 1)
+DIAG(ext_ms_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "invalid suffix on literal; C++11 requires a space between literal and identifier", 578, SFINAE_Suppress, false, false, 1)
+DIAG(ext_multi_line_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-line // comment", 127, SFINAE_Suppress, false, false, 1)
+DIAG(ext_multichar_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multi-character character constant", 435, SFINAE_Suppress, false, false, 1)
+DIAG(ext_named_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "named variadic macros are a GNU extension", 754, SFINAE_Suppress, false, false, 1)
+DIAG(ext_no_newline_eof, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no newline at end of file", 441, SFINAE_Suppress, false, false, 1)
+DIAG(ext_nonstandard_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of non-standard escape character '\\%0'", 535, SFINAE_Suppress, false, false, 1)
+DIAG(ext_on_off_switch_syntax, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected 'ON' or 'OFF' or 'DEFAULT' in pragma", 706, SFINAE_Suppress, false, false, 1)
+DIAG(ext_paste_comma, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "token pasting of ',' and __VA_ARGS__ is a GNU extension", 282, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_paste_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "pasting formed '%0', an invalid preprocessing token", 351, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_vaargs_use, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", 535, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_vaopt_use, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__VA_OPT__ can only appear in the expansion of a variadic macro", 754, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_comma_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "comma operator in operand of #if", 535, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_extra_tokens_at_eol, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "extra tokens at end of #%0 directive", 227, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_ident_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#ident is a language extension", 535, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_import_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#import is a language extension", 306, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_include_next_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#include_next is a language extension", 273, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_include_search_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#include resolved using non-portable Microsoft search rules as: %0", 395, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_line_too_big, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C requires #line number to be less than %0, allowed as extension", 535, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_line_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#line directive with zero argument is a GNU extension", 281, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_macro_redef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 macro redefined", 366, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_opencl_variadic_macros, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variadic macros are a Clang extension in OpenCL", 535, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_operator_used_as_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++ operator %0 (aka %1) used as a macro name", 381, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_redef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefining builtin macro", 69, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_undef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "undefining builtin macro", 69, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_warning_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#warning is a language extension", 535, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pragma_syntax_eod, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected end of directive in pragma", 706, SFINAE_Suppress, false, false, 1)
+DIAG(ext_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "invalid suffix on literal; C++11 requires a space between literal and identifier", 578, SFINAE_Suppress, false, false, 1)
+DIAG(ext_string_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "string literal of length %0 exceeds maximum length %1 that %select{C90|ISO C99|C++}2 compilers are required to support", 518, SFINAE_Suppress, false, false, 1)
+DIAG(ext_token_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extension used", 356, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unicode_whitespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "treating Unicode character as whitespace", 700, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unknown_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown escape sequence '\\%0'", 705, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unterminated_char_or_string, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing terminating %select{'|'\"'}0 character", 349, SFINAE_Suppress, false, false, 1)
+DIAG(ext_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variadic macros are a C99 feature", 754, SFINAE_Suppress, false, false, 1)
 DIAG(note_header_guard, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is defined here; did you mean %1?", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_implicit_top_level_module_import_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "submodule of top-level module '%0' implicitly imported here", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_init_list_at_beginning_of_macro_argument, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot use initializer list at the beginning of a macro argument", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_macro_expansion_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "expansion of macro %0 requested here", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_macro_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "macro %0 defined here", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_mmap_add_framework_keyword, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'framework module' to declare module '%0'", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_mmap_lbrace_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "to match this '{'", 0, SFINAE_Suppress, false, false, 1)
@@ -222,109 +228,113 @@
 DIAG(note_pp_module_begin_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "entering module '%0' due to this pragma", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_suggest_parens_for_macro, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parentheses are required around macro argument containing braced initializer list", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_ucn_four_not_eight, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use '\\u'?", 0, SFINAE_Suppress, false, false, 1)
-DIAG(null_in_char_or_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character(s) preserved in %select{char|string}0 literal", 453, SFINAE_Suppress, false, false, 1)
-DIAG(null_in_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character ignored", 453, SFINAE_Suppress, false, false, 1)
-DIAG(pp_disabled_macro_expansion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "disabled expansion of recursive macro", 177, SFINAE_Suppress, false, false, 1)
+DIAG(null_in_char_or_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character(s) preserved in %select{char|string}0 literal", 459, SFINAE_Suppress, false, false, 1)
+DIAG(null_in_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character ignored", 459, SFINAE_Suppress, false, false, 1)
+DIAG(pp_disabled_macro_expansion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "disabled expansion of recursive macro", 178, SFINAE_Suppress, false, false, 1)
 DIAG(pp_err_elif_after_else, CLASS_ERROR, (unsigned)diag::Severity::Error, "#elif after #else", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(pp_err_elif_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#elif without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(pp_err_else_after_else, CLASS_ERROR, (unsigned)diag::Severity::Error, "#else after #else", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(pp_err_else_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#else without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(pp_hash_warning, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 2, SFINAE_Suppress, false, true, 21)
+DIAG(pp_hash_warning, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 2, SFINAE_Suppress, false, true, 22)
 DIAG(pp_include_macros_out_of_predefines, CLASS_ERROR, (unsigned)diag::Severity::Error, "the #__include_macros directive is only for internal use by -imacros", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(pp_include_next_absolute_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next with absolute path", 304, SFINAE_Suppress, false, false, 1)
-DIAG(pp_include_next_in_primary, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next in primary source file", 305, SFINAE_Suppress, false, false, 1)
+DIAG(pp_include_next_absolute_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next in file found relative to primary source file or found by absolute path; will search from start of include path", 308, SFINAE_Suppress, false, false, 1)
+DIAG(pp_include_next_in_primary, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next in primary source file; will search from start of include path", 309, SFINAE_Suppress, false, false, 1)
 DIAG(pp_invalid_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid string literal, ignoring final '\\'", 0, SFINAE_Suppress, false, false, 1)
-DIAG(pp_macro_not_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro is not used", 730, SFINAE_Suppress, false, false, 1)
-DIAG(pp_nonportable_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-portable path to file '%0'; specified path differs in case from file name on disk", 446, SFINAE_Suppress, false, false, 1)
-DIAG(pp_nonportable_system_path, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-portable path to file '%0'; specified path differs in case from file name on disk", 447, SFINAE_Suppress, false, false, 1)
+DIAG(pp_macro_not_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro is not used", 740, SFINAE_Suppress, false, false, 1)
+DIAG(pp_nonportable_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-portable path to file '%0'; specified path differs in case from file name on disk", 452, SFINAE_Suppress, false, false, 1)
+DIAG(pp_nonportable_system_path, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-portable path to file '%0'; specified path differs in case from file name on disk", 453, SFINAE_Suppress, false, false, 1)
 DIAG(pp_out_of_date_dependency, CLASS_WARNING, (unsigned)diag::Severity::Warning, "current file is older than dependency %0", 0, SFINAE_Suppress, false, false, 1)
 DIAG(pp_poisoning_existing_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "poisoning existing macro", 0, SFINAE_Suppress, false, false, 1)
-DIAG(pp_pragma_once_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma once in main file", 538, SFINAE_Suppress, false, false, 1)
-DIAG(pp_pragma_sysheader_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma system_header ignored in main file", 541, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_converted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph converted to '%0' character", 669, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_ends_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ends block comment", 669, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ignored", 669, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_ignored_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored trigraph would end block comment", 669, SFINAE_Suppress, false, false, 1)
+DIAG(pp_pragma_once_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma once in main file", 546, SFINAE_Suppress, false, false, 1)
+DIAG(pp_pragma_sysheader_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma system_header ignored in main file", 549, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_converted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph converted to '%0' character", 678, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ends_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ends block comment", 678, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ignored", 678, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ignored_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored trigraph would end block comment", 678, SFINAE_Suppress, false, false, 1)
 DIAG(warn_auto_module_import, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "treating #%select{include|import|include_next|__include_macros}0 as an import of module '%1'", 49, SFINAE_Suppress, false, false, 1)
-DIAG(warn_bad_character_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in character literal", 346, SFINAE_Suppress, false, false, 1)
-DIAG(warn_bad_string_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in string literal", 346, SFINAE_Suppress, false, false, 1)
-DIAG(warn_c99_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99", 113, SFINAE_Suppress, false, false, 1)
-DIAG(warn_c99_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C99", 113, SFINAE_Suppress, false, false, 1)
+DIAG(warn_bad_character_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in character literal", 350, SFINAE_Suppress, false, false, 1)
+DIAG(warn_bad_string_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in string literal", 350, SFINAE_Suppress, false, false, 1)
+DIAG(warn_c99_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99", 114, SFINAE_Suppress, false, false, 1)
+DIAG(warn_c99_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C99", 114, SFINAE_Suppress, false, false, 1)
 DIAG(warn_char_constant_too_large, CLASS_WARNING, (unsigned)diag::Severity::Warning, "character constant too long for its type", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_binary_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "binary integer literals are incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_digit_separator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "digit separators are incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_reserved_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a reserved user-defined literal suffix in C++11", 78, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a user-defined literal suffix in C++11", 75, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++11", 75, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx14_compat_u8_character_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx17_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<=>' operator is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx17_hex_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx2a_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'<=>' is a single token in C++2a; add a space to avoid a change in behavior", 96, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx2a_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++2a", 96, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_empty_fnmacro_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty macro arguments are incompatible with C++98", 110, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_less_colon_colon, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<::' is treated as digraph '<:' (aka '[') followed by ':' in C++98", 106, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_literal_ucn_control_character, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "universal character name referring to a control character is incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_literal_ucn_escape_basic_scs, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "specifying character '%0' with a universal character name is incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++98 requires newline at end of file", 110, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_pp_line_too_big, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "#line number greater than 32767 is incompatible with C++98", 110, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_raw_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "raw string literals are incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using this character in an identifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_variadic_macro, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic macros are incompatible with C++98", 110, SFINAE_Suppress, false, false, 1)
-DIAG(warn_defined_in_function_type_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "macro expansion producing 'defined' has undefined behavior", 214, SFINAE_Suppress, false, false, 1)
-DIAG(warn_defined_in_object_type_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro expansion producing 'defined' has undefined behavior", 214, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_binary_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "binary integer literals are incompatible with C++ standards before C++14", 105, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_digit_separator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "digit separators are incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_reserved_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a reserved user-defined literal suffix in C++11", 79, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a user-defined literal suffix in C++11", 76, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++11", 76, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx14_compat_u8_character_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx17_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<=>' operator is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx17_hex_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are incompatible with C++ standards before C++17", 103, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx2a_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'<=>' is a single token in C++2a; add a space to avoid a change in behavior", 97, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx2a_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++2a", 97, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_empty_fnmacro_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty macro arguments are incompatible with C++98", 111, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_less_colon_colon, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<::' is treated as digraph '<:' (aka '[') followed by ':' in C++98", 107, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_literal_ucn_control_character, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "universal character name referring to a control character is incompatible with C++98", 107, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_literal_ucn_escape_basic_scs, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "specifying character '%0' with a universal character name is incompatible with C++98", 107, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++98 requires newline at end of file", 111, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_pp_line_too_big, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "#line number greater than 32767 is incompatible with C++98", 111, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_raw_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "raw string literals are incompatible with C++98", 107, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using this character in an identifier is incompatible with C++98", 107, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++98", 107, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_variadic_macro, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic macros are incompatible with C++98", 111, SFINAE_Suppress, false, false, 1)
+DIAG(warn_defined_in_function_type_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "macro expansion producing 'defined' has undefined behavior", 215, SFINAE_Suppress, false, false, 1)
+DIAG(warn_defined_in_object_type_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro expansion producing 'defined' has undefined behavior", 215, SFINAE_Suppress, false, false, 1)
 DIAG(warn_extraneous_char_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extraneous characters in character constant ignored", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_framework_include_private_from_public, CLASS_WARNING, (unsigned)diag::Severity::Warning, "public framework header includes private framework header '%0'", 246, SFINAE_Suppress, false, false, 1)
-DIAG(warn_has_warning_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__has_warning expected option name (e.g. \"-Wundef\")", 365, SFINAE_Suppress, false, false, 1)
-DIAG(warn_header_guard, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is used as a header guard here, followed by #define of a different macro", 279, SFINAE_Suppress, false, false, 1)
+DIAG(warn_framework_include_private_from_public, CLASS_WARNING, (unsigned)diag::Severity::Warning, "public framework header includes private framework header '%0'", 250, SFINAE_Suppress, false, false, 1)
+DIAG(warn_has_warning_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__has_warning expected option name (e.g. \"-Wundef\")", 369, SFINAE_Suppress, false, false, 1)
+DIAG(warn_header_guard, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is used as a header guard here, followed by #define of a different macro", 283, SFINAE_Suppress, false, false, 1)
 DIAG(warn_missing_whitespace_after_macro_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "whitespace recommended after macro name", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_incomplete_framework_module_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "skipping '%0' because module declaration of '%1' lacks the 'framework' qualifier", 314, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_mismatched_private_module_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected canonical name for private module '%0'", 546, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_mismatched_private_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "private submodule '%0' in private module map, expected top-level module", 546, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_redundant_export_as, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' already re-exported as '%1'", 546, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_umbrella_dir_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella directory '%0' not found", 317, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_unknown_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute '%0'", 282, SFINAE_Suppress, false, false, 1)
-DIAG(warn_module_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' conflicts with already-imported module '%1': %2", 419, SFINAE_Suppress, false, false, 1)
-DIAG(warn_nested_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/*' within block comment", 126, SFINAE_Suppress, false, false, 1)
-DIAG(warn_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no newline at end of file", 435, SFINAE_Suppress, false, false, 1)
-DIAG(warn_non_modular_include_in_framework_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside framework module '%0': '%1'", 440, SFINAE_Suppress, false, false, 1)
-DIAG(warn_non_modular_include_in_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside module '%0': '%1'", 441, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_incomplete_framework_module_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "skipping '%0' because module declaration of '%1' lacks the 'framework' qualifier", 318, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_mismatched_private_module_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected canonical name for private module '%0'", 554, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_mismatched_private_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "private submodule '%0' in private module map, expected top-level module", 554, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_redundant_export_as, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' already re-exported as '%1'", 554, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_umbrella_dir_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella directory '%0' not found", 321, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_unknown_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute '%0'", 286, SFINAE_Suppress, false, false, 1)
+DIAG(warn_module_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' conflicts with already-imported module '%1': %2", 424, SFINAE_Suppress, false, false, 1)
+DIAG(warn_nested_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/*' within block comment", 127, SFINAE_Suppress, false, false, 1)
+DIAG(warn_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no newline at end of file", 441, SFINAE_Suppress, false, false, 1)
+DIAG(warn_non_modular_include_in_framework_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside framework module '%0': '%1'", 446, SFINAE_Suppress, false, false, 1)
+DIAG(warn_non_modular_include_in_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside module '%0': '%1'", 447, SFINAE_Suppress, false, false, 1)
 DIAG(warn_pp_ambiguous_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ambiguous expansion of macro %0", 19, SFINAE_Suppress, false, false, 1)
 DIAG(warn_pp_convert_to_positive, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{left|right}0 side of operator converted from negative value to unsigned: %1", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_date_time, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expansion of date or time macro is not reproducible", 154, SFINAE_Suppress, false, true, 1)
+DIAG(warn_pp_date_time, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expansion of date or time macro is not reproducible", 155, SFINAE_Suppress, false, true, 1)
 DIAG(warn_pp_expr_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer overflow in preprocessor expression", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_hdrstop_filename_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma hdrstop filename not supported, /Fp can be used to specify precompiled header filename", 123, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_hdrstop_filename_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma hdrstop filename not supported, /Fp can be used to specify precompiled header filename", 124, SFINAE_Suppress, false, false, 1)
 DIAG(warn_pp_line_decimal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{#line|GNU line marker}0 directive interprets number as decimal, not octal", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_macro_def_mismatch_with_pch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of macro %0 does not match definition in precompiled header", 123, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_macro_hides_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "keyword is hidden by macro definition", 350, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_macro_is_reserved_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro name is a reserved identifier", 569, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_objc_macro_redef_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring redefinition of Objective-C qualifier macro", 473, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_undef_identifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is not defined, evaluates to 0", 677, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_debug_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to debug command '%0'", 286, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_debug_unexpected_command, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected debug command '%0'", 286, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_cannot_pop, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic pop could not pop, no matching push", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop'", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected option name (e.g. \"-Wundef\")", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_invalid_token, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unexpected token in pragma diagnostic", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_unknown_warning, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown warning group '%0', ignored", 698, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown pragma ignored", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected '%0'", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_expected_filename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected include filename", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_mismatch_angle, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "angle-bracketed include <%0> cannot be aliased to double-quoted include \"%1\"", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_mismatch_quote, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "double-quoted include \"%0\" cannot be aliased to angle-bracketed include <%1>", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 1, SFINAE_Suppress, true, false, 30)
-DIAG(warn_pragma_pop_macro_no_push, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma pop_macro could not pop '%0', no matching push_macro", 286, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected '%0'", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_expected_number, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected a warning number", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_push_level, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning(push, level) requires a level between 0 and 4", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_spec_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected 'push', 'pop', 'default', 'disable', 'error', 'once', 'suppress', 1, 2, 3, or 4", 696, SFINAE_Suppress, false, false, 1)
-DIAG(warn_quoted_include_in_framework_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "double-quoted include \"%0\" in framework header, expected angle-bracketed instead", 555, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_escape_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete universal character name; treating as '\\' followed by identifier", 688, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_escape_no_digits, CLASS_WARNING, (unsigned)diag::Severity::Warning, "\\%0 used with no following hex digits; treating as '\\' followed by identifier", 688, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_escape_surrogate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character name refers to a surrogate character", 688, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_not_valid_in_c89, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++; treating as '\\' followed by identifier", 688, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_not_valid_in_c89_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++", 688, SFINAE_Suppress, false, false, 1)
-DIAG(warn_uncovered_module_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella header for module '%0' does not include header '%1'", 317, SFINAE_Suppress, false, false, 1)
-DIAG(warn_use_of_private_header_outside_module, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of private header from outside its module: '%0'", 545, SFINAE_Suppress, false, false, 1)
-DIAG(warn_utf8_symbol_homoglyph, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating Unicode character <U+%0> as identifier character rather than as '%1' symbol", 689, SFINAE_Suppress, false, false, 1)
-DIAG(warn_utf8_symbol_zero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "identifier contains Unicode character <U+%0> that is invisible in some environments", 691, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_def_mismatch_with_pch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of macro %0 does not match definition in precompiled header", 124, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_hides_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "keyword is hidden by macro definition", 354, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_is_reserved_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro name is a reserved identifier", 577, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_objc_macro_redef_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring redefinition of Objective-C qualifier macro", 481, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_undef_identifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is not defined, evaluates to 0", 686, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_debug_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to debug command '%0'", 290, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_debug_unexpected_command, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected debug command '%0'", 290, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_debug_unknown_module, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown module '%0'", 290, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_cannot_pop, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic pop could not pop, no matching push", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop'", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected option name (e.g. \"-Wundef\")", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid_token, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unexpected token in pragma diagnostic", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_unknown_warning, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown warning group '%0', ignored", 708, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_exec_charset_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma execution_character_set expected '%0'", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_exec_charset_push_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma execution_character_set invalid value '%0', only 'UTF-8' is supported", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_exec_charset_spec_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma execution_character_set expected 'push' or 'pop'", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown pragma ignored", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected '%0'", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_expected_filename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected include filename", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_mismatch_angle, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "angle-bracketed include <%0> cannot be aliased to double-quoted include \"%1\"", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_mismatch_quote, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "double-quoted include \"%0\" cannot be aliased to angle-bracketed include <%1>", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 1, SFINAE_Suppress, true, false, 31)
+DIAG(warn_pragma_pop_macro_no_push, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma pop_macro could not pop '%0', no matching push_macro", 290, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected '%0'", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_expected_number, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected a warning number", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_push_level, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning(push, level) requires a level between 0 and 4", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_spec_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected 'push', 'pop', 'default', 'disable', 'error', 'once', 'suppress', 1, 2, 3, or 4", 706, SFINAE_Suppress, false, false, 1)
+DIAG(warn_quoted_include_in_framework_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "double-quoted include \"%0\" in framework header, expected angle-bracketed instead", 563, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete universal character name; treating as '\\' followed by identifier", 698, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_no_digits, CLASS_WARNING, (unsigned)diag::Severity::Warning, "\\%0 used with no following hex digits; treating as '\\' followed by identifier", 698, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_surrogate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character name refers to a surrogate character", 698, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_not_valid_in_c89, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++; treating as '\\' followed by identifier", 698, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_not_valid_in_c89_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++", 698, SFINAE_Suppress, false, false, 1)
+DIAG(warn_uncovered_module_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella header for module '%0' does not include header '%1'", 321, SFINAE_Suppress, false, false, 1)
+DIAG(warn_use_of_private_header_outside_module, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of private header from outside its module: '%0'", 553, SFINAE_Suppress, false, false, 1)
+DIAG(warn_utf8_symbol_homoglyph, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating Unicode character <U+%0> as identifier character rather than as '%1' symbol", 699, SFINAE_Suppress, false, false, 1)
+DIAG(warn_utf8_symbol_zero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "identifier contains Unicode character <U+%0> that is invisible in some environments", 701, SFINAE_Suppress, false, false, 1)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc
index f18ef7f..96b5876 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc
@@ -12,7 +12,7 @@
 DIAG(err_arc_bridge_retain, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown cast annotation __bridge_retain; did you mean __bridge_retained?", 0, SFINAE_SubstitutionFailure, false, true, 8)
 DIAG(err_argument_required_after_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument required after attribute", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_asm_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "__asm used with no assembly instructions", 0, SFINAE_SubstitutionFailure, false, true, 12)
-DIAG(err_asm_goto_not_supported_yet, CLASS_ERROR, (unsigned)diag::Severity::Error, "'asm goto' constructs are not supported yet", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_goto_cannot_have_output, CLASS_ERROR, (unsigned)diag::Severity::Error, "'asm goto' cannot have output constraints", 0, SFINAE_SubstitutionFailure, false, true, 12)
 DIAG(err_asm_operand_wide_string_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use %select{unicode|wide}0 string literal in 'asm'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_at_defs_cxx, CLASS_ERROR, (unsigned)diag::Severity::Error, "@defs is not supported in Objective-C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_at_in_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected '@' in member specification", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -115,7 +115,7 @@
 DIAG(err_expected_while, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'while' in do/while loop", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_explicit_instantiation_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumerations cannot be explicitly instantiated", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_explicit_instantiation_with_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit template instantiation cannot have a definition; if this definition is meant to be an explicit specialization, add '<>' after the 'template' keyword", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_explicit_spec_non_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit %select{specialization|instantiation}0 of non-template %1 %2", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_explicit_spec_non_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit %select{specialization|instantiation}0 of %select{non-|undeclared }3template %1 %2", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_export_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration cannot be empty", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_external_source_symbol_duplicate_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate %0 clause in an 'external_source_symbol' attribute", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_external_source_symbol_expected_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'language', 'defined_in', or 'generated_declaration'", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -133,6 +133,7 @@
 DIAG(err_function_declared_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "function definition declared 'typedef'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_function_definition_not_allowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "function definition is not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_function_is_not_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected %0 in function call; perhaps remove the %0?", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_global_module_introducer_not_at_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "'module;' introducing a global module fragment can appear only at the start of the translation unit", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_gnu_inline_asm_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "GNU-style inline assembly is disabled", 0, SFINAE_SubstitutionFailure, false, true, 12)
 DIAG(err_id_after_template_in_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected template name after 'template' keyword in nested name specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_illegal_decl_reference_to_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 declared as a reference to a reference", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -148,8 +149,12 @@
 DIAG(err_invalid_token_after_toplevel_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after top level declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_l_square_l_square_not_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "C++11 only allows consecutive left square brackets when introducing an attribute", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_label_end_of_compound_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "label at end of compound statement: expected statement", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_lambda_decl_specifier_repeated, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{'mutable'|'constexpr'}0 cannot appear multiple times in a lambda declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_lambda_missing_parens, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda requires '()' before %select{'mutable'|return type|attribute specifier|'constexpr'}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_after_delete, CLASS_ERROR, (unsigned)diag::Severity::Error, "'[]' after delete interpreted as 'delete[]'; add parentheses to treat this as a lambda-expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_capture_misplaced_ellipsis, CLASS_ERROR, (unsigned)diag::Severity::Error, "ellipsis in pack %select{|init-}0capture must appear %select{after|before}0 the name of the capture", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_capture_multiple_ellipses, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple ellipses in pack capture", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_decl_specifier_repeated, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{'mutable'|'constexpr'|'consteval'}0 cannot appear multiple times in a lambda declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_missing_parens, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda requires '()' before %select{'mutable'|return type|attribute specifier|'constexpr'|'consteval'}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_template_parameter_list_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda template parameter list cannot be empty", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_literal_operator_string_not_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal after 'operator' must be '\"\"'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_literal_operator_string_prefix, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal after 'operator' cannot have an encoding prefix", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_misplaced_ellipsis_in_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'...' must %select{immediately precede declared identifier|be innermost component of anonymous pack declaration}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -162,7 +167,7 @@
 DIAG(err_missing_whitespace_digraph, CLASS_ERROR, (unsigned)diag::Severity::Error, "found '<::' after a %select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph '<:' (aka '[') and a ':', did you mean '< ::'?", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_module_expected_ident, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a module name after '%select{module|import}0'", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_expected_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after module name", 0, SFINAE_SubstitutionFailure, false, true, 13)
-DIAG(err_module_implementation_partition, CLASS_ERROR, (unsigned)diag::Severity::Error, "module partition must be declared 'export'", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_fragment_exported, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{global|private}0 module fragment cannot be exported", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_ms_attributes_not_enabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__declspec' attributes are not enabled; use '-fdeclspec' or '-fms-extensions' to enable support for __declspec attributes", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_ms_declspec_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "__declspec attributes must be an identifier or string literal", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_ms_property_duplicate_accessor, CLASS_ERROR, (unsigned)diag::Severity::Error, "property declaration specifies '%0' accessor twice", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -186,19 +191,19 @@
 DIAG(err_objc_expected_equal_for_setter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '=' for Objective-C setter", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_expected_property_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown property attribute %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_expected_selector_for_getter_setter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected selector for Objective-C %select{setter|getter}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_objc_expected_type_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected type parameter name", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_expected_type_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected type parameter name", 0, SFINAE_SubstitutionFailure, false, true, 21)
 DIAG(err_objc_illegal_interface_qual, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal interface qualifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_illegal_visibility_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal visibility specification", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_missing_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '@end'", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_objc_parameterized_implementation, CLASS_ERROR, (unsigned)diag::Severity::Error, "@implementation cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_parameterized_implementation, CLASS_ERROR, (unsigned)diag::Severity::Error, "@implementation cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 21)
 DIAG(err_objc_postfix_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "postfix attributes are not allowed on Objective-C directives", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_postfix_attribute_hint, CLASS_ERROR, (unsigned)diag::Severity::Error, "postfix attributes are not allowed on Objective-C directives, place them in front of '%select{@interface|@protocol}0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_properties_require_objc2, CLASS_ERROR, (unsigned)diag::Severity::Error, "properties are an Objective-C 2 feature", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_property_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "property name cannot be a bit-field", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_property_requires_field_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "property requires fields to be named", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_objc_type_args_after_protocols, CLASS_ERROR, (unsigned)diag::Severity::Error, "protocol qualifiers must precede type arguments", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_args_after_protocols, CLASS_ERROR, (unsigned)diag::Severity::Error, "protocol qualifiers must precede type arguments", 0, SFINAE_SubstitutionFailure, false, true, 21)
 DIAG(err_objc_unexpected_atend, CLASS_ERROR, (unsigned)diag::Severity::Error, "'@end' appears where closing brace '}' is expected", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_objc_unexpected_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "prefix attribute must be followed by an interface or protocol", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_unexpected_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "prefix attribute must be followed by an interface, protocol, or implementation", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objc_unknown_at, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an Objective-C directive after '@'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objcbridge_related_expected_related_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a related ObjectiveC class name, e.g., 'NSColor'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_objcbridge_related_selector_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a class method selector with single argument, e.g., 'colorWithCGColor:'", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -213,16 +218,15 @@
 DIAG(err_omp_map_type_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing map type", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_omp_map_type_modifier_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing map type modifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_omp_mapper_expected_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected declarator on 'omp declare mapper' directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_omp_mapper_illegal_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal identifier on 'omp declare mapper' directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_mapper_illegal_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal OpenMP user-defined mapper identifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_omp_unexpected_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected OpenMP clause '%0' in directive '#pragma omp %1'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_omp_unexpected_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected OpenMP directive %select{|'#pragma omp %1'}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_omp_unknown_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an OpenMP directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_omp_unknown_map_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_omp_unknown_map_type_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect map type modifier, expected 'always' or 'close'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_unknown_map_type_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect map type modifier, expected 'always', 'close', or 'mapper'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_opencl_logical_exclusive_or, CLASS_ERROR, (unsigned)diag::Severity::Error, "^^ is a reserved operator in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_opencl_taking_function_address_parser, CLASS_ERROR, (unsigned)diag::Severity::Error, "taking address of function is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_opencl_unroll_hint_on_non_loop, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenCL only supports 'opencl_unroll_hint' attribute on for, while, and do statements", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_openclcxx_reserved, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is a reserved keyword in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_openclcxx_virtual_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual functions are not supported in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_out_of_line_constructor_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "out-of-line constructor for %0 cannot have template arguments", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_override_control_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' keyword not permitted with interface types", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -261,6 +265,7 @@
 DIAG(err_pragma_optimize_invalid_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected argument '%0' to '#pragma clang optimize'; expected 'on' or 'off'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_pragma_pipeline_invalid_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument; expected 'disable'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_pragma_pointers_to_members_unknown_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected %0, expected to see one of %select{|'best_case', 'full_generality', }1'single_inheritance', 'multiple_inheritance', or 'virtual_inheritance'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_private_module_fragment_expected_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after private module fragment declaration", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_right_angle_bracket_equal_needs_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "a space is required between a right angle bracket and an equals sign (use '> =')", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_scoped_enum_missing_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "scoped enumeration requires a name", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_single_decl_assign_in_for_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "range-based 'for' statement uses ':', not '='", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -277,7 +282,7 @@
 DIAG(err_type_safety_unknown_flag, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid comparison flag %0; use 'layout_compatible' or 'must_be_null'", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_type_trait_arity, CLASS_ERROR, (unsigned)diag::Severity::Error, "type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_typename_identifiers_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename is allowed for identifiers only", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(err_typename_invalid_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name does not allow constexpr specifier to be specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_typename_invalid_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name does not allow %select{constexpr|consteval}0 specifier to be specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_typename_invalid_functionspec, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name does not allow function specifier to be specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_typename_invalid_storageclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name does not allow storage class to be specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_typename_refers_to_non_type_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename specifier refers to a non-type template", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -290,6 +295,7 @@
 DIAG(err_unexpected_protocol_qualifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "@implementation declaration cannot be protocol qualified", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_scope_on_base_decltype, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected namespace scope prior to decltype", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected ';' before %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_template_after_using, CLASS_ERROR, (unsigned)diag::Severity::Error, "'template' keyword not permitted after 'using' keyword", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_template_in_unqualified_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "'template' keyword not permitted here", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_token_in_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be a part of nested name specifier; did you mean ':'?", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_typedef_ident, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected type name %0: expected identifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -297,78 +303,80 @@
 DIAG(err_unknown_template_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown template name %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unspecified_size_with_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' may not be used without an array size", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unspecified_vla_size_with_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' may not be used with an unspecified variable length array size", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unsupported_module_partition, CLASS_ERROR, (unsigned)diag::Severity::Error, "sorry, module partitions are not yet supported", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_using_attribute_ns_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute with scope specifier cannot follow default scope specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_using_namespace_in_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "'using namespace' is not allowed in classes", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_zero_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "version number must have non-zero major, minor, or sub-minor version", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(ext_abstract_pack_declarator_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 requires a parenthesized pack declaration to have a name", 22, SFINAE_Suppress, false, false, 4)
-DIAG(ext_alias_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "alias declarations are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_alignof_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 applied to an expression is a GNU extension", 253, SFINAE_Suppress, false, false, 4)
+DIAG(ext_alias_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "alias declarations are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_alignof_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 applied to an expression is a GNU extension", 257, SFINAE_Suppress, false, false, 4)
 DIAG(ext_auto_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases", 50, SFINAE_Suppress, false, false, 4)
-DIAG(ext_auto_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__auto_type' is a GNU extension", 256, SFINAE_Suppress, false, false, 4)
-DIAG(ext_bitfield_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default member initializer for bit-field is a C++2a extension", 98, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_alignment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 is a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_generic_selection, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "generic selections are a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_noreturn, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Noreturn functions are a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_static_assert, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Static_assert is a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c99_compound_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "compound literals are a C99-specific feature", 114, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c99_variable_decl_in_for_loop, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable declaration in for loop is a C99-specific feature", 114, SFINAE_Suppress, false, false, 4)
-DIAG(ext_clang_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Clang extension", 226, SFINAE_Suppress, false, false, 4)
-DIAG(ext_constexpr_if, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "constexpr if is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_constexpr_on_lambda_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'constexpr' on lambda expressions is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_cxx11_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_decltype_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'decltype(auto)' type specifier is a C++14 extension", 87, SFINAE_Suppress, false, false, 4)
-DIAG(ext_decomp_decl_empty, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not allow a decomposition group to be empty", 203, SFINAE_Suppress, false, false, 4)
-DIAG(ext_defaulted_deleted_function, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{defaulted|deleted}0 function definitions are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_dynamic_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow dynamic exception specifications", 199, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ellipsis_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "exception specification of '...' is a Microsoft extension", 382, SFINAE_Suppress, false, false, 4)
-DIAG(ext_empty_translation_unit, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C requires a translation unit to contain at least one declaration", 205, SFINAE_Suppress, false, false, 4)
-DIAG(ext_enumerator_list_comma_c, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C99-specific feature", 114, SFINAE_Suppress, false, false, 4)
-DIAG(ext_enumerator_list_comma_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_auto_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__auto_type' is a GNU extension", 260, SFINAE_Suppress, false, false, 4)
+DIAG(ext_bitfield_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default member initializer for bit-field is a C++2a extension", 99, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_alignment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 is a C11-specific feature", 113, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_generic_selection, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "generic selections are a C11-specific feature", 113, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_noreturn, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Noreturn functions are a C11-specific feature", 113, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_static_assert, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Static_assert is a C11-specific feature", 113, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c99_compound_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "compound literals are a C99-specific feature", 115, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c99_variable_decl_in_for_loop, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable declaration in for loop is a C99-specific feature", 115, SFINAE_Suppress, false, false, 4)
+DIAG(ext_clang_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Clang extension", 229, SFINAE_Suppress, false, false, 4)
+DIAG(ext_constexpr_if, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "constexpr if is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_constexpr_on_lambda_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'constexpr' on lambda expressions is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_cxx11_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_decltype_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'decltype(auto)' type specifier is a C++14 extension", 88, SFINAE_Suppress, false, false, 4)
+DIAG(ext_decomp_decl_empty, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not allow a decomposition group to be empty", 204, SFINAE_Suppress, false, false, 4)
+DIAG(ext_defaulted_deleted_function, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{defaulted|deleted}0 function definitions are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_dynamic_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow dynamic exception specifications", 200, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ellipsis_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "exception specification of '...' is a Microsoft extension", 387, SFINAE_Suppress, false, false, 4)
+DIAG(ext_empty_translation_unit, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C requires a translation unit to contain at least one declaration", 206, SFINAE_Suppress, false, false, 4)
+DIAG(ext_enumerator_list_comma_c, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C99-specific feature", 115, SFINAE_Suppress, false, false, 4)
+DIAG(ext_enumerator_list_comma_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
 DIAG(ext_expected_semi_decl_list, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected ';' at end of declaration list", 0, SFINAE_Suppress, false, false, 4)
-DIAG(ext_extern_template, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extern templates are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_extra_semi, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' %select{outside of a function|inside a %1|inside instance variable list|after member function definition}0", 222, SFINAE_Suppress, false, false, 4)
-DIAG(ext_extra_semi_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
-DIAG(ext_fold_expression, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack fold expression is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_for_range, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop is a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_for_range_init_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop initialization statements are a C++2a extension", 98, SFINAE_Suppress, false, false, 4)
-DIAG(ext_generalized_initializer_lists, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "generalized initializer lists are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_address_of_label, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU address-of-label extension", 270, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_array_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU array range extension", 262, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_case_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU case range extension", 258, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_conditional_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU ?: conditional expression extension, omitting middle operand", 261, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_empty_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU empty initializer extension", 263, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_indirect_goto, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU indirect-goto extension", 270, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_missing_equal_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU 'missing =' extension in designator", 262, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_old_style_field_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU old-style field designator extension", 262, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_statement_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU statement expression extension", 272, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ident_list_in_param, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type-less parameter names in function declaration", 527, SFINAE_Suppress, false, false, 4)
-DIAG(ext_init_statement, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%select{if|switch}0' initialization statements are a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_inline_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline namespaces are a C++11 feature", 81, SFINAE_Suppress, false, false, 4)
-DIAG(ext_inline_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline nested namespace definition is a C++2a extension", 98, SFINAE_Suppress, false, false, 4)
-DIAG(ext_keyword_as_ident, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "keyword '%0' will be made available as an identifier %select{here|for the remainder of the translation unit}1", 349, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ms_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Microsoft extension", 386, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ms_sealed_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'sealed' keyword is a Microsoft extension", 394, SFINAE_Suppress, false, false, 4)
-DIAG(ext_multi_using_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of multiple declarators in a single using declaration is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "nested namespace definition is a C++17 extension; define each namespace separately", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_nonstatic_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initialization of non-static data member is a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ns_enum_attribute, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_nullability, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type nullability specifier %0 is a Clang extension", 461, SFINAE_Suppress, false, false, 4)
-DIAG(ext_override_control_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' keyword is a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ref_qualifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "reference qualifiers on functions are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_rvalue_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "rvalue references are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_scoped_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "scoped enumerations are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_static_assert_no_message, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_assert with no message is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_stdc_pragma_ignored, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown pragma in STDC namespace", 696, SFINAE_Suppress, false, false, 4)
-DIAG(ext_template_template_param_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template template parameter using 'typename' is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_thread_before, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__thread' before '%0'", 527, SFINAE_Suppress, false, false, 4)
-DIAG(ext_using_attribute_ns, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default scope specifier for attributes is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_using_declaration_pack, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack expansion of using declaration is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
-DIAG(ext_warn_gnu_final, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__final is a GNU extension, consider using C++11 final", 250, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extern_template, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extern templates are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extra_semi, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' %select{outside of a function|inside a %1|inside instance variable list|after member function definition}0", 225, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extra_semi_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is a C++11 extension", 81, SFINAE_Suppress, false, false, 4)
+DIAG(ext_fold_expression, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack fold expression is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_for_range, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop is a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_for_range_init_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop initialization statements are a C++2a extension", 99, SFINAE_Suppress, false, false, 4)
+DIAG(ext_generalized_initializer_lists, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "generalized initializer lists are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_address_of_label, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU address-of-label extension", 274, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_array_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU array range extension", 266, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_case_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU case range extension", 262, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_conditional_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU ?: conditional expression extension, omitting middle operand", 265, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_empty_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU empty initializer extension", 267, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_indirect_goto, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU indirect-goto extension", 274, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_missing_equal_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU 'missing =' extension in designator", 266, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_old_style_field_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU old-style field designator extension", 266, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_statement_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU statement expression extension", 276, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ident_list_in_param, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type-less parameter names in function declaration", 535, SFINAE_Suppress, false, false, 4)
+DIAG(ext_init_statement, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%select{if|switch}0' initialization statements are a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_inline_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline namespaces are a C++11 feature", 82, SFINAE_Suppress, false, false, 4)
+DIAG(ext_inline_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline nested namespace definition is a C++2a extension", 99, SFINAE_Suppress, false, false, 4)
+DIAG(ext_keyword_as_ident, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "keyword '%0' will be made available as an identifier %select{here|for the remainder of the translation unit}1", 353, SFINAE_Suppress, false, false, 4)
+DIAG(ext_lambda_template_parameter_list, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit template parameter list for lambdas is a C++2a extension", 99, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ms_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Microsoft extension", 391, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ms_sealed_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'sealed' keyword is a Microsoft extension", 399, SFINAE_Suppress, false, false, 4)
+DIAG(ext_multi_using_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of multiple declarators in a single using declaration is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "nested namespace definition is a C++17 extension; define each namespace separately", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nonstatic_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initialization of non-static data member is a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ns_enum_attribute, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nullability, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type nullability specifier %0 is a Clang extension", 467, SFINAE_Suppress, false, false, 4)
+DIAG(ext_override_control_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' keyword is a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ref_qualifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "reference qualifiers on functions are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_rvalue_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "rvalue references are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_scoped_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "scoped enumerations are a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_static_assert_no_message, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_assert with no message is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_stdc_pragma_ignored, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown pragma in STDC namespace", 706, SFINAE_Suppress, false, false, 4)
+DIAG(ext_template_template_param_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template template parameter using 'typename' is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_thread_before, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__thread' before '%0'", 535, SFINAE_Suppress, false, false, 4)
+DIAG(ext_using_attribute_ns, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default scope specifier for attributes is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_using_declaration_pack, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack expansion of using declaration is a C++17 extension", 92, SFINAE_Suppress, false, false, 4)
+DIAG(ext_warn_gnu_final, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__final is a GNU extension, consider using C++11 final", 254, SFINAE_Suppress, false, false, 4)
 DIAG(note_bracket_depth, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use -fbracket-depth=N to increase maximum nesting level", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_exception_spec_deprecated, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '%0' instead", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_extra_comma_message_arg, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comma separating Objective-C messaging arguments", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_force_empty_selector_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "or insert whitespace before ':' to use %0 as parameter name and have an empty entry in the selector", 0, SFINAE_Suppress, false, false, 4)
-DIAG(note_meant_to_use_typename, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use 'typename'?", 0, SFINAE_Suppress, false, false, 20)
+DIAG(note_meant_to_use_typename, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use 'typename'?", 0, SFINAE_Suppress, false, false, 21)
 DIAG(note_misplaced_ellipsis_vararg_add_comma, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert ',' before '...' to silence this warning", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_misplaced_ellipsis_vararg_add_ellipsis, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "place '...' %select{immediately before declared identifier|here}0 to declare a function parameter pack", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_misplaced_ellipsis_vararg_existing_ellipsis, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "preceding '...' declares a function parameter pack", 0, SFINAE_Suppress, false, false, 4)
@@ -381,110 +389,112 @@
 DIAG(warn_arc_bridge_cast_nonarc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' casts have no effect when not using ARC", 24, SFINAE_Suppress, false, false, 8)
 DIAG(warn_asm_qualifier_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored %0 qualifier on asm", 35, SFINAE_Suppress, false, false, 12)
 DIAG(warn_atimport_in_framework_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of '@import' in framework header is discouraged, including this header requires -fmodules", 40, SFINAE_Suppress, false, false, 4)
-DIAG(warn_attribute_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it is not attached to a declaration", 282, SFINAE_Suppress, false, false, 4)
-DIAG(warn_attribute_on_function_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow %0 attribute in this position on a function definition", 250, SFINAE_Suppress, false, false, 4)
+DIAG(warn_attribute_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it is not attached to a declaration", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_attribute_on_function_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow %0 attribute in this position on a function definition", 254, SFINAE_Suppress, false, false, 4)
 DIAG(warn_availability_and_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'unavailable' availability overrides all other availability information", 52, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cstyle_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of C-style parameters in Objective-C method declarations is deprecated", 166, SFINAE_Suppress, false, false, 27)
-DIAG(warn_cuda_attr_lambda_position, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nvcc does not allow '__%0__' to appear after '()' in lambdas", 147, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx11_compat_decltype_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype(auto)' type specifier is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx11_right_shift_in_template_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of right-shift operator ('>>') in template argument will require parentheses in C++11", 75, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_constexpr_if, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr if is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_constexpr_on_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr on lambda expressions is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_fold_expression, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack fold expression is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{if|switch}0 initialization statements are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "nested namespace definition is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_ns_enum_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_static_assert_no_message, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert with no message is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_template_template_param_typename, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template template parameter using 'typename' is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_using_attribute_ns, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default scope specifier for attributes is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_bitfield_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default member initializer for bit-field is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_for_range_init_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop initialization statements are incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_inline_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline nested namespace definition is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_multi_using_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_using_declaration_pack, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack expansion using declaration is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_alias_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alias declarations are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_alignas, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'alignas' is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_alignof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alignof expressions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++11 attribute syntax is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_decltype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype' type specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_defaulted_deleted_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{defaulted|deleted}0 function definitions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_enum_fixed_underlying_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_enumerator_list_comma, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are incompatible with C++98", 110, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_extern_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extern templates are incompatible with C++98", 110, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_for_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_generalized_initializer_lists, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generalized initializer lists are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_inline_namespace, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline namespaces are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda expressions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_literal_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "literal operators are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_noexcept_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept specifications are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_noexcept_expr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept expressions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_nonstatic_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "in-class initialization of non-static data members is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_nullptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'nullptr' is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_override_control_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' keyword is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_ref_qualifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference qualifiers on functions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_rvalue_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "rvalue references are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_scoped_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scoped enumerations are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_static_assert, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert declarations are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_top_level_semi, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is incompatible with C++98", 108, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_trailing_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "trailing return types are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_two_right_angle_brackets, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consecutive right angle brackets are incompatible with C++98 (use '> >')", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_dangling_else, CLASS_WARNING, (unsigned)diag::Severity::Warning, "add explicit braces to avoid dangling else", 150, SFINAE_Suppress, false, false, 4)
-DIAG(warn_empty_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty initialization statement of '%select{if|switch|range-based for}0' has no effect", 204, SFINAE_Suppress, false, false, 4)
-DIAG(warn_exception_spec_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dynamic exception specifications are deprecated", 167, SFINAE_Suppress, false, false, 27)
+DIAG(warn_cstyle_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of C-style parameters in Objective-C method declarations is deprecated", 167, SFINAE_Suppress, false, false, 28)
+DIAG(warn_cuda_attr_lambda_position, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nvcc does not allow '__%0__' to appear after '()' in lambdas", 148, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx11_compat_decltype_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype(auto)' type specifier is incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx11_right_shift_in_template_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of right-shift operator ('>>') in template argument will require parentheses in C++11", 76, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_constexpr_if, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr if is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_constexpr_on_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr on lambda expressions is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_fold_expression, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack fold expression is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{if|switch}0 initialization statements are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "nested namespace definition is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_ns_enum_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17", 103, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_static_assert_no_message, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert with no message is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_template_template_param_typename, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template template parameter using 'typename' is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_using_attribute_ns, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default scope specifier for attributes is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_bitfield_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default member initializer for bit-field is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_for_range_init_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop initialization statements are incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_inline_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline nested namespace definition is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_lambda_template_parameter_list, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit template parameter list for lambdas is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_multi_using_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_using_declaration_pack, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack expansion using declaration is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx2a_compat_explicit_bool, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "this expression will be parsed as explicit(bool) in C++2a", 97, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alias_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alias declarations are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alignas, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'alignas' is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alignof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alignof expressions are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++11 attribute syntax is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_decltype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype' type specifier is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_defaulted_deleted_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{defaulted|deleted}0 function definitions are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_enum_fixed_underlying_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_enumerator_list_comma, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are incompatible with C++98", 111, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_extern_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extern templates are incompatible with C++98", 111, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_for_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_generalized_initializer_lists, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generalized initializer lists are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_inline_namespace, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline namespaces are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda expressions are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_literal_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "literal operators are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_noexcept_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept specifications are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_noexcept_expr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept expressions are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_nonstatic_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "in-class initialization of non-static data members is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_nullptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'nullptr' is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_override_control_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' keyword is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_ref_qualifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference qualifiers on functions are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_rvalue_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "rvalue references are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_scoped_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scoped enumerations are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_static_assert, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert declarations are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_top_level_semi, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is incompatible with C++98", 109, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_trailing_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "trailing return types are incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_two_right_angle_brackets, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consecutive right angle brackets are incompatible with C++98 (use '> >')", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_dangling_else, CLASS_WARNING, (unsigned)diag::Severity::Warning, "add explicit braces to avoid dangling else", 151, SFINAE_Suppress, false, false, 4)
+DIAG(warn_empty_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty initialization statement of '%select{if|switch|range-based for}0' has no effect", 205, SFINAE_Suppress, false, false, 4)
+DIAG(warn_exception_spec_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dynamic exception specifications are deprecated", 168, SFINAE_Suppress, false, false, 28)
 DIAG(warn_expected_consistent_version_separator, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use same version number separators '_' or '.'; as in 'major[.minor[.subminor]]'", 52, SFINAE_Suppress, false, false, 4)
 DIAG(warn_expected_qualified_after_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected a qualified name after 'typename'", 0, SFINAE_Suppress, false, false, 4)
-DIAG(warn_extra_semi_after_mem_fn_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' after member function definition", 222, SFINAE_Suppress, false, false, 4)
+DIAG(warn_extra_semi_after_mem_fn_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' after member function definition", 225, SFINAE_Suppress, false, false, 4)
 DIAG(warn_file_asm_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "meaningless 'volatile' on asm outside function", 35, SFINAE_Suppress, false, false, 12)
-DIAG(warn_gcc_attribute_location, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow an attribute in this position on a function declaration", 250, SFINAE_Suppress, false, false, 4)
-DIAG(warn_gcc_variable_decl_in_for_loop, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow variable declarations in for loop initializers before C99", 250, SFINAE_Suppress, false, false, 4)
-DIAG(warn_microsoft_dependent_exists, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent %select{__if_not_exists|__if_exists}0 declarations are ignored", 383, SFINAE_Suppress, false, false, 4)
-DIAG(warn_microsoft_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "qualifiers after comma in declarator list are ignored", 282, SFINAE_Suppress, false, false, 4)
+DIAG(warn_gcc_attribute_location, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow an attribute in this position on a function declaration", 254, SFINAE_Suppress, false, false, 4)
+DIAG(warn_gcc_variable_decl_in_for_loop, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow variable declarations in for loop initializers before C99", 254, SFINAE_Suppress, false, false, 4)
+DIAG(warn_microsoft_dependent_exists, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent %select{__if_not_exists|__if_exists}0 declarations are ignored", 388, SFINAE_Suppress, false, false, 4)
+DIAG(warn_microsoft_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "qualifiers after comma in declarator list are ignored", 286, SFINAE_Suppress, false, false, 4)
 DIAG(warn_misplaced_ellipsis_vararg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'...' in this location creates a C-style varargs function%select{, not a function parameter pack|}0", 18, SFINAE_Suppress, false, false, 4)
 DIAG(warn_missing_dependent_template_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use 'template' keyword to treat '%0' as a dependent template name", 0, SFINAE_Suppress, false, false, 4)
-DIAG(warn_missing_selector_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 used as the name of the previous parameter rather than as part of the selector", 415, SFINAE_Suppress, false, false, 4)
-DIAG(warn_null_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty expression statement has no effect; remove unnecessary ';' to silence this warning", 223, SFINAE_Suppress, false, false, 4)
+DIAG(warn_missing_selector_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 used as the name of the previous parameter rather than as part of the selector", 420, SFINAE_Suppress, false, false, 4)
+DIAG(warn_null_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty expression statement has no effect; remove unnecessary ';' to silence this warning", 226, SFINAE_Suppress, false, false, 4)
 DIAG(warn_objc_protocol_qualifier_missing_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "protocol has no object type specified; defaults to qualified 'id'", 0, SFINAE_Suppress, false, false, 4)
-DIAG(warn_omp_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at the end of '#pragma omp %0' are ignored", 224, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_align_expected_equal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '=' following '#pragma %select{align|options align}0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_align_invalid_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid alignment option in '#pragma %select{align|options align}0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_begin_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL extension end directive mismatches begin directive - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_comment_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma comment %0' ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_action_or_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected action or ')' in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_colon, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' after %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_colon_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' or ')' after %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_comma, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ',' in '#pragma %0'", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_identifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected identifier in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_init_seg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'compiler', 'lib', 'user', or a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer between %0 and %1 inclusive in '#pragma %2' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_lparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing '(' after '#pragma %0' - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_non_wide_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected non-wide string literal in '#pragma %0'", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_predicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected %select{'enable', 'disable', 'begin' or 'end'|'disable'}0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_punc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ')' or ',' in '#pragma %0'", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_rparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ')' after '#pragma %0' - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_section_label_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a stack label or a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_section_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_section_push_pop_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected push, pop or a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected string literal in '#pragma %0' - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_extension_is_core, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "OpenCL extension %0 is core feature or supported optional core feature - ignoring", 528, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at end of '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_force_cuda_host_device_bad_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of #pragma clang force_cuda_host_device begin|end", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_init_seg_unsupported_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma init_seg' is only supported when targeting a Microsoft environment", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_intrinsic_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is not a recognized builtin%select{|; consider including <intrin.h> to access non-builtin intrinsics}1", 284, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_invalid_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action for '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_invalid_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_invalid_specific_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action '%1' for '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to '#pragma %0'%select{|; expected %2}1", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of '#pragma ms_struct on|off' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_omp_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unexpected '#pragma omp ...' in program", 613, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_optimize, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma optimize' is not supported", 285, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_options_expected_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'align' following '#pragma options' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_pack_malformed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer or identifier in '#pragma pack' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unknown_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown OpenCL extension %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unroll_cuda_value_in_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to '#pragma unroll' should not be in parentheses in CUDA C/C++", 147, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unsupported_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "known but unsupported action '%1' for '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unsupported_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsupported OpenCL extension %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unused_expected_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '#pragma unused' argument to be a variable name", 286, SFINAE_Suppress, false, false, 4)
-DIAG(warn_semicolon_before_method_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "semicolon before method body is ignored", 585, SFINAE_Suppress, false, false, 4)
-DIAG(warn_static_inline_explicit_inst_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%select{static|inline}0' keyword on explicit template instantiation", 618, SFINAE_Suppress, false, false, 4)
-DIAG(warn_stdc_fenv_access_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma STDC FENV_ACCESS ON is not supported, ignoring pragma", 696, SFINAE_Suppress, false, false, 4)
-DIAG(warn_wrong_clang_attr_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'__clang__' is a predefined macro name, not an attribute scope specifier; did you mean '_Clang' instead?", 282, SFINAE_Suppress, false, false, 4)
+DIAG(warn_omp_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at the end of '#pragma omp %0' are ignored", 227, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_align_expected_equal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '=' following '#pragma %select{align|options align}0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_align_invalid_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid alignment option in '#pragma %select{align|options align}0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_begin_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL extension end directive mismatches begin directive - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_comment_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma comment %0' ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_action_or_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected action or ')' in '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_colon, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' after %0 - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_colon_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' or ')' after %0 - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_comma, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ',' in '#pragma %0'", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_identifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected identifier in '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_init_seg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'compiler', 'lib', 'user', or a string literal for the section name in '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer between %0 and %1 inclusive in '#pragma %2' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_lparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing '(' after '#pragma %0' - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_non_wide_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected non-wide string literal in '#pragma %0'", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_predicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected %select{'enable', 'disable', 'begin' or 'end'|'disable'}0 - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_punc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ')' or ',' in '#pragma %0'", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_rparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ')' after '#pragma %0' - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_label_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a stack label or a string literal for the section name in '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a string literal for the section name in '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_push_pop_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected push, pop or a string literal for the section name in '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected string literal in '#pragma %0' - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_extension_is_core, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "OpenCL extension %0 is core feature or supported optional core feature - ignoring", 536, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at end of '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_force_cuda_host_device_bad_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of #pragma clang force_cuda_host_device begin|end", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_init_seg_unsupported_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma init_seg' is only supported when targeting a Microsoft environment", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_intrinsic_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is not a recognized builtin%select{|; consider including <intrin.h> to access non-builtin intrinsics}1", 288, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action for '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_specific_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action '%1' for '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to '#pragma %0'%select{|; expected %2}1", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of '#pragma ms_struct on|off' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_omp_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unexpected '#pragma omp ...' in program", 621, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_optimize, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma optimize' is not supported", 289, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_options_expected_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'align' following '#pragma options' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_pack_malformed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer or identifier in '#pragma pack' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unknown_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown OpenCL extension %0 - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unroll_cuda_value_in_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to '#pragma unroll' should not be in parentheses in CUDA C/C++", 148, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unsupported_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "known but unsupported action '%1' for '#pragma %0' - ignored", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unsupported_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsupported OpenCL extension %0 - ignoring", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unused_expected_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '#pragma unused' argument to be a variable name", 290, SFINAE_Suppress, false, false, 4)
+DIAG(warn_semicolon_before_method_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "semicolon before method body is ignored", 593, SFINAE_Suppress, false, false, 4)
+DIAG(warn_static_inline_explicit_inst_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%select{static|inline}0' keyword on explicit template instantiation", 626, SFINAE_Suppress, false, false, 4)
+DIAG(warn_stdc_fenv_access_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma STDC FENV_ACCESS ON is not supported, ignoring pragma", 706, SFINAE_Suppress, false, false, 4)
+DIAG(warn_wrong_clang_attr_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'__clang__' is a predefined macro name, not an attribute scope specifier; did you mean '_Clang' instead?", 286, SFINAE_Suppress, false, false, 4)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticRefactoringKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticRefactoringKinds.inc
index 28cf7af..b408d3a 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticRefactoringKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticRefactoringKinds.inc
@@ -3,9 +3,9 @@
 #undef REFACTORINGSTART
 #endif
 
-DIAG(err_refactor_code_outside_of_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected code is not a part of a function's / method's body", 0, SFINAE_SubstitutionFailure, false, true, 22)
-DIAG(err_refactor_extract_prohibited_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected expression can't be extracted", 0, SFINAE_SubstitutionFailure, false, true, 22)
-DIAG(err_refactor_extract_simple_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected expression is too simple to extract", 0, SFINAE_SubstitutionFailure, false, true, 22)
-DIAG(err_refactor_no_selection, CLASS_ERROR, (unsigned)diag::Severity::Error, "refactoring action can't be initiated without a selection", 0, SFINAE_SubstitutionFailure, false, true, 22)
-DIAG(err_refactor_selection_invalid_ast, CLASS_ERROR, (unsigned)diag::Severity::Error, "the provided selection does not overlap with the AST nodes of interest", 0, SFINAE_SubstitutionFailure, false, true, 22)
-DIAG(err_refactor_selection_no_symbol, CLASS_ERROR, (unsigned)diag::Severity::Error, "there is no symbol at the given location", 0, SFINAE_SubstitutionFailure, false, true, 22)
+DIAG(err_refactor_code_outside_of_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected code is not a part of a function's / method's body", 0, SFINAE_SubstitutionFailure, false, true, 23)
+DIAG(err_refactor_extract_prohibited_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected expression can't be extracted", 0, SFINAE_SubstitutionFailure, false, true, 23)
+DIAG(err_refactor_extract_simple_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected expression is too simple to extract", 0, SFINAE_SubstitutionFailure, false, true, 23)
+DIAG(err_refactor_no_selection, CLASS_ERROR, (unsigned)diag::Severity::Error, "refactoring action can't be initiated without a selection", 0, SFINAE_SubstitutionFailure, false, true, 23)
+DIAG(err_refactor_selection_invalid_ast, CLASS_ERROR, (unsigned)diag::Severity::Error, "the provided selection does not overlap with the AST nodes of interest", 0, SFINAE_SubstitutionFailure, false, true, 23)
+DIAG(err_refactor_selection_no_symbol, CLASS_ERROR, (unsigned)diag::Severity::Error, "there is no symbol at the given location", 0, SFINAE_SubstitutionFailure, false, true, 23)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc
index f7aae16..7075e81 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc
@@ -134,7 +134,7 @@
 DIAG(err_array_init_plain_string_into_char8_t, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing 'char8_t' array with plain string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_init_utf8_string_into_char, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|ISO C++20 does not permit }0initialization of char array with UTF-8 string literal%select{ is not permitted by '-fchar8_t'|}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_init_wide_string_into_char, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing char array with wide string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_array_new_needs_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size must be specified in new expressions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_new_needs_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size must be specified in new expression with no initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_of_abstract_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "array of abstract class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_section_does_not_specify_contiguous_storage, CLASS_ERROR, (unsigned)diag::Severity::Error, "array section does not specify contiguous storage", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_array_size_ambiguous_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion of array size expression of type %0 to an integral or enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -284,6 +284,7 @@
 DIAG(err_bad_category_property_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "property implementation must have its declaration in the category %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_const_cast_dest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast||||C-style cast|functional-style cast}0 to %2, which is not a reference, pointer-to-object, or pointer-to-data-member", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_cstyle_cast_overload, CLASS_ERROR, (unsigned)diag::Severity::Error, "address of overloaded function %0 cannot be cast to type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_addr_space_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 converts between mismatching address spaces", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_cxx_cast_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from bit-field lvalue to reference type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_cxx_cast_generic, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_cxx_cast_member_pointer_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{||reinterpret_cast||C-style cast|}0 from member pointer type %1 to member pointer type %2 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -305,6 +306,7 @@
 DIAG(err_bad_multiversion_option, CLASS_ERROR, (unsigned)diag::Severity::Error, "function multiversioning doesn't support %select{feature|architecture}0 '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_bad_new_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot allocate %select{function|reference}1 type %0 with new", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_parameter_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be the name of a parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_parameter_name_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter name cannot have template arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_property_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "property implementation must be in a class or category implementation", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_property_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "property implementation must have its declaration in interface %0 or one of its extensions", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bad_receiver_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "bad receiver type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -323,6 +325,8 @@
 DIAG(err_base_must_be_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "base specifier must name a class", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_base_specifier_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a base specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_binding_cannot_appear_in_own_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "binding %0 cannot appear in the initializer of its own decomposition declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bit_cast_non_trivially_copyable, CLASS_ERROR, (unsigned)diag::Severity::Error, "__builtin_bit_cast %select{source|destination}0 type must be trivially copyable", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_bit_cast_type_size_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "__builtin_bit_cast source size does not equal destination size (%0 vs %1)", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_bitfield_has_negative_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "bit-field %0 has negative width (%1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bitfield_has_zero_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "named bit-field %0 has zero width", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bitfield_width_exceeds_type_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "width of bit-field %0 (%1 bits) exceeds %select{width|size}2 of its type (%3 bit%s3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -390,6 +394,7 @@
 DIAG(err_category_forward_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot define %select{category|class extension}0 for undefined class %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_category_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "property declared in category %0 cannot be implemented in class implementation", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_cconv_change, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared '%0' here was previously declared %select{'%2'|without calling convention}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cconv_incomplete_param_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter %0 must have a complete type to use function %1 with the %2 calling convention", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_cconv_knr, CLASS_ERROR, (unsigned)diag::Severity::Error, "function with no prototype cannot use the %0 calling convention", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_cconv_varargs, CLASS_ERROR, (unsigned)diag::Severity::Error, "variadic function cannot use %0 calling convention", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_cfstring_literal_not_string_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "CFString literal is not a string constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -398,6 +403,7 @@
 DIAG(err_class_marked_final_used_as_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "base %0 is marked '%select{final|sealed}1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_class_property_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 is a class property; did you mean to access it with class '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_class_redeclared_with_different_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 redeclared with '%1' access", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_class_stub_subclassing_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'objc_class_stub' attribute cannot be specified on a class that does not have the 'objc_subclassing_restricted' attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_cocoa_naming_owned_rule, CLASS_ERROR, (unsigned)diag::Severity::Error, "property follows Cocoa naming convention for returning 'owned' objects", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_collection_expr_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "the type %0 is not a pointer to a fast-enumerable object", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_complex_mode_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of machine mode does not support base vector types", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -424,28 +430,28 @@
 DIAG(err_conflicting_super_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting super class name %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_conflicting_types, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting types for %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constant_integer_arg_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to %0 must be a constant integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_body_invalid_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement not allowed in constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_body_no_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "no return statement in constexpr function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_body_invalid_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement not allowed in %select{constexpr|consteval}1 %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_body_no_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "no return statement in %select{constexpr|consteval}0 function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_ctor_missing_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr constructor must initialize all members", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be marked constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be marked %select{constexpr|consteval}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_function_try_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "function try block not allowed in constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_local_var_no_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "variables defined in a constexpr %select{function|constructor}0 must be initialized", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_local_var_non_literal_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable of non-literal type %1 cannot be defined in a constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_local_var_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{static|thread_local}1 variable not permitted in a constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' is not allowed to be declared constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_no_declarators, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr can only be used in variable and function declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_non_literal_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr %select{function|constructor}1's %ordinal0 parameter type %2 is not a literal type", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_non_literal_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr function's return type %0 is not a literal type", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_redecl_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-constexpr declaration of %0 follows constexpr declaration|constexpr declaration of %0 follows non-constexpr declaration}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_return_missing_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-void constexpr function %0 should return a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' is not allowed to be declared %select{constexpr|consteval}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_non_literal_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{constexpr|consteval}2 %select{function|constructor}1's %ordinal0 parameter type %3 is not a literal type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_non_literal_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{constexpr|consteval}0 function's return type %1 is not a literal type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_redecl_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-constexpr|constexpr|consteval}1 declaration of %0 follows %select{non-constexpr|constexpr|consteval}2 declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_return_missing_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-void %select{constexpr|consteval}1 function %0 should return a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_static_mem_var_requires_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of constexpr static data member %0 requires an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_constexpr_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|struct|interface|union|enum}0 cannot be marked constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|struct|interface|union|enum}0 cannot be marked %select{constexpr|consteval}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_union_ctor_no_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr union constructor does not initialize any member", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_var_non_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr variable cannot have non-literal type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_var_requires_const_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr variable %0 must be initialized by a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual function cannot be constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_virtual_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr %select{member function|constructor}0 not allowed in %select{struct|interface|class}1 with virtual base %plural{1:class|:classes}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constexpr_vla, CLASS_ERROR, (unsigned)diag::Severity::Error, "variably-modified type %0 cannot be used in a constexpr %select{function|constructor}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_wrong_decl_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{constexpr|consteval}0 can only be used in %select{variable and |}0function declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constructor_byvalue_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "copy constructor must pass its first argument by reference", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constructor_cannot_be, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor cannot be declared '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_constructor_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor cannot be redeclared", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -465,7 +471,7 @@
 DIAG(err_convertvector_non_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "second argument to __builtin_convertvector must be a vector type", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_copy_capture_with_copy_default, CLASS_ERROR, (unsigned)diag::Severity::Error, "'&' must precede a capture when the capture default is '='", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_coroutine_handle_missing_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::experimental::coroutine_handle missing a member named '%0'", 0, SFINAE_SubstitutionFailure, false, true, 14)
-DIAG(err_coroutine_invalid_func_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%1' cannot be used in %select{a constructor|a destructor|a copy assignment operator|a move assignment operator|the 'main' function|a constexpr function|a function with a deduced return type|a varargs function}0", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_invalid_func_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%1' cannot be used in %select{a constructor|a destructor|the 'main' function|a constexpr function|a function with a deduced return type|a varargs function|a consteval function}0", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_objc_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "Objective-C methods as coroutines are not yet supported", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_outside_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be used outside a function", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_promise_get_return_object_on_allocation_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0: 'get_return_object_on_allocation_failure()' must be a static member function", 0, SFINAE_SubstitutionFailure, false, true, 14)
@@ -476,6 +482,7 @@
 DIAG(err_coroutine_promise_unhandled_exception_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is required to declare the member 'unhandled_exception()'", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_type_missing_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: missing definition of specialization %0", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_unevaluated_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be used in an unevaluated context", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_within_handler, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be used in the handler of a try block", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_covariant_return_ambiguous_derived_to_base_conv, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %3 is not covariant with the return type of the function it overrides (ambiguous conversion from derived class %0 to base class %1:%2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_covariant_return_inaccessible_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid covariant return for virtual function: %1 is a %select{private|protected}2 base class of %0", 0, SFINAE_AccessControl, false, true, 2)
 DIAG(err_covariant_return_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 is incomplete)", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -534,10 +541,10 @@
 DIAG(err_deduced_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced return types are a C++14 extension", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_bad_trailing_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced type %1 of deduction guide is not %select{|written as }2a specialization of template %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_defines_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide cannot have a function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_deduction_guide_explicit_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide is %select{not |}0declared 'explicit' but previous declaration was%select{ not|}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_invalid_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide cannot be declared '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_name_not_class_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify deduction guide for %select{<error>|function template|variable template|alias template|template template parameter|dependent template name}0 %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_no_trailing_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide declaration without trailing return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of deduction guide", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_specialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide cannot be %select{explicitly instantiated|explicitly specialized}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_template_not_deducible, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide template contains %select{a template parameter|template parameters}0 that cannot be deduced", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_with_complex_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify any part of a return type in the declaration of a deduction guide", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -636,6 +643,8 @@
 DIAG(err_exceptions_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' with exceptions disabled", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_excess_initializers, CLASS_ERROR, (unsigned)diag::Severity::Error, "excess elements in %select{array|vector|scalar|union|struct}0 initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_excess_initializers_in_char_array_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "excess elements in char array initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_expected_allocator_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an 'allocator' clause inside of the target region; provide an 'allocator' clause or use 'requires' directive with the 'dynamic_allocators' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_expected_allocator_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an allocator expression inside of the target region; provide an allocator expression or use 'requires' directive with the 'dynamic_allocators' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_expected_class_or_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a class%select{ or namespace|, namespace, or enumeration}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_expected_kernel_void_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel must have void return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_instantiation_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "partial ordering for explicit instantiation of %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -645,6 +654,7 @@
 DIAG(err_explicit_instantiation_duplicate, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate explicit instantiation of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_instantiation_in_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %0 in class scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_instantiation_inline, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation cannot be 'inline'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_internal_linkage, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation declaration of %0 with internal linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_instantiation_member_function_not_instantiated, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation refers to member function %q0 that is not an instantiation", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_instantiation_must_be_global, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %0 must occur at global scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_instantiation_nontemplate_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of non-templated type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -662,9 +672,14 @@
 DIAG(err_explicit_non_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'explicit' can only appear on non-static member functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_out_of_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "'explicit' can only be specified inside the class definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_explicit_specialization_inconsistent_storage_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit specialization has extraneous, inconsistent storage class '%select{none|extern|static|__private_extern__|auto|register}0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_export_not_in_module_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration can only be used within a module interface unit after the module declaration", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_export_in_private_module_fragment, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration cannot be used in a private module fragment", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_export_internal, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of %0 with internal linkage cannot be exported", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_export_no_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{empty|static_assert|asm}0 declaration cannot be exported", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_export_not_in_module_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration can only be used within a module interface unit%select{ after the module declaration|}0", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_export_using_internal, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration referring to %0 with internal linkage cannot be exported", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_export_within_anonymous_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration appears within anonymous namespace", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_export_within_export, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration appears within another export declaration", 0, SFINAE_SubstitutionFailure, false, true, 13)
-DIAG(err_expr_not_cce, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition}0 is not a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_expr_not_cce, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition|explicit specifier argument}0 is not a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_expr_not_ice, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression is not an %select{integer|integral}0 constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_expr_not_string_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression is not a string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ext_vector_component_exceeds_length, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector component access exceeds type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -713,7 +728,6 @@
 DIAG(err_format_attribute_requires_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "format attribute requires variadic function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_format_attribute_result_not, CLASS_ERROR, (unsigned)diag::Severity::Error, "function does not return %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_format_strftime_third_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "strftime format attribute requires 3rd parameter to be 0", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_fortify_std_lib_bad_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "'fortify_stdlib' attribute applied to an unknown function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_forward_ref_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "ISO C++ forbids forward references to 'enum' types", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_forward_superclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "attempting to use the forward class %0 as superclass of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_friend_decl_does_not_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend declaration of %0 does not match any declaration in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -724,7 +738,7 @@
 DIAG(err_friend_not_first_in_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'friend' must appear first in a non-function declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_func_def_incomplete_result, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete result type %0 in function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_func_returning_array_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "function cannot return %select{array|function}0 type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_func_returning_qualified_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function cannot return qualified void type %0", 554, SFINAE_Suppress, false, false, 2)
+DIAG(err_func_returning_qualified_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function cannot return qualified void type %0", 562, SFINAE_Suppress, false, false, 2)
 DIAG(err_function_attribute_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared with %0 attribute was previously declared without the %0 attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_function_concept_bool_ret, CLASS_ERROR, (unsigned)diag::Severity::Error, "declared return type of function concept must be 'bool'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_function_concept_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "function concept cannot have exception specification", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -771,11 +785,13 @@
 DIAG(err_illegal_union_or_anon_struct_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{anonymous struct|union}0 member %1 has a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_imaginary_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "imaginary types are not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_impcast_complex_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit conversion from %0 to %1 is not permitted in C++", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_implementation_of_class_stub, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot declare implementation of a class declared with the 'objc_class_stub' attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_implicit_coroutine_std_nothrow_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::nothrow was not found; include <new> before defining a coroutine which uses get_return_object_on_allocation_failure()", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_implicit_empty_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for aggregate with no elements requires explicit braces", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_implicit_instantiate_member_undefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit instantiation of undefined member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_implied_comparison_category_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce return type of 'operator<=>' because type '%0' was not found; include <compare>", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_implied_coroutine_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 type was not found; include <experimental/coroutine> before defining a coroutine", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_implied_omp_allocator_handle_t_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "omp_allocator_handle_t type not found; include <omp.h>", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_implied_std_coroutine_traits_promise_type_not_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %0 is not a class", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_implied_std_coroutine_traits_promise_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %q0 has no member named 'promise_type'", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_implied_std_initializer_list_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -799,11 +815,11 @@
 DIAG(err_incomplete_type_used_in_type_trait_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type %0 used in type trait expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_incomplete_typeid, CLASS_ERROR, (unsigned)diag::Severity::Error, "'typeid' of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_inconsistent_ivar_count, CLASS_ERROR, (unsigned)diag::Severity::Error, "inconsistent number of instance variables specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incorrect_defaulted_consteval, CLASS_ERROR, (unsigned)diag::Severity::Error, "defaulted declaration of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 cannot be consteval because implicit definition is not constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_incorrect_defaulted_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is not constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_incorrect_defaulted_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification of explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 does not match the calculated one", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_incorrect_number_of_vector_initializers, CLASS_ERROR, (unsigned)diag::Severity::Error, "number of elements must be either one or match the size of the vector", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_increment_decrement_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{decrement|increment}0 expression of enum type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_indirect_goto_in_protected_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from this indirect goto statement to one of its possible targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_indirect_goto_in_protected_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from this %select{indirect|asm}0 goto statement to one of its possible targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_indirect_goto_without_addrlabel, CLASS_ERROR, (unsigned)diag::Severity::Error, "indirect goto in function with no address-of-label expressions", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_init_capture_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type for lambda capture %0 from initializer of type %2", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_init_capture_deduction_failure_from_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type for lambda capture %0 from initializer list", 0, SFINAE_SubstitutionFailure, false, true, 3)
@@ -838,7 +854,7 @@
 DIAG(err_invalid_base_in_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "interface type cannot inherit from %select{struct|non-public interface|class}0 %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_collection_element, CLASS_ERROR, (unsigned)diag::Severity::Error, "collection element of type %0 is not an Objective-C object", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_complex_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'_Complex %0' is invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_invalid_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function parameter|typedef|non-static data member}0 cannot be constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function parameter|typedef|non-static data member}0 cannot be %select{constexpr|consteval}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_constexpr_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-static data member cannot be constexpr%select{; did you intend to make it %select{const|static}0?|}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_constexpr_var_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr variable declaration must be a definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_conversion_between_ext_vectors, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid conversion between ext-vector type %0 and %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -875,7 +891,7 @@
 DIAG(err_invalid_super_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of '__super', this keyword can only be used inside class or member function scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_this_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of 'this' outside of a non-static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_thread, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is only allowed on variable declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_invalid_type_for_program_scope_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 type cannot be used to declare a program scope variable", 0, SFINAE_SubstitutionFailure, false, true, 17)
+DIAG(err_invalid_type_for_program_scope_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 type cannot be used to declare a program scope variable", 0, SFINAE_SubstitutionFailure, false, true, 18)
 DIAG(err_invalid_use_of_array_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "an array type is not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_use_of_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a function type is not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_var_template_spec_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %2 of %select{explicit instantiation|explicit specialization|partial specialization|redeclaration}0 of %1 does not match expected type %3", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -957,6 +973,12 @@
 DIAG(err_mempointer_in_nonclass_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "member pointer refers into non-class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_memptr_conv_via_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_memptr_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "member pointer has incomplete base type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_memtag_any2arg_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "at least one argument of MTE builtin function must be a pointer (%0, %1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_memtag_arg_must_be_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 argument of MTE builtin function must be an integer type (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_memtag_arg_must_be_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 argument of MTE builtin function must be a pointer (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_memtag_arg_must_be_unsigned, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 argument  of MTE builtin function must be an unsigned integer type (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_memtag_arg_null_or_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 argument of MTE builtin function must be a null or a pointer (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_method_kernel, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel functions cannot be class members", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_method_not_found_with_typo, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{instance|class}1 method %0 not found ; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mismatched_code_seg_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "derived class must specify the same code segment as its base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mismatched_code_seg_override, CLASS_ERROR, (unsigned)diag::Severity::Error, "overriding virtual function must specify the same code segment as its overridden function", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -980,9 +1002,11 @@
 DIAG(err_mixing_cxx_try_seh_try, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use C++ 'try' in the same function as SEH '__try'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mode_not_primitive, CLASS_ERROR, (unsigned)diag::Severity::Error, "mode attribute only supported for integer and floating-point types", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mode_wrong_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of machine mode does not match type of base type", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_module_decl_in_header_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "'module' declaration found while building header module", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_decl_in_header_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "'module' declaration found while building header unit", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_decl_in_module_map_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "'module' declaration found while building module from module map", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_decl_not_at_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "module declaration must occur at the start of the translation unit", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_declaration_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'export module' declaration in module interface unit", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_declaration_missing_after_global_module_introducer, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'module' declaration at end of global module fragment introduced here", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_import_in_implementation, CLASS_ERROR, (unsigned)diag::Severity::Error, "@import of module '%0' in implementation of '%1'; use #import", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_import_not_at_top_level_fatal, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "import of module '%0' appears within %1", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_interface_implementation_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'export' specifier in module declaration while building module interface", 0, SFINAE_SubstitutionFailure, false, true, 13)
@@ -994,6 +1018,7 @@
 DIAG(err_module_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of module '%0'", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_self_import, CLASS_ERROR, (unsigned)diag::Severity::Error, "import of module '%0' appears within same top-level module '%1'", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_unimported_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module '%2' before it is required", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_unimported_use_global_module_fragment, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{missing '#include'|missing '#include %3'}2; %select{||default argument of |explicit specialization of |partial specialization of }0%1 must be %select{declared|defined|defined|declared|declared}0 before it is used", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_unimported_use_header, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '#include %3'; %select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module '%2' before it is required", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_module_unimported_use_multiple, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from one of the following modules before it is required:%2", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_ms___leave_not_in___try, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__leave' statement not in __try block", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1006,7 +1031,7 @@
 DIAG(err_multiple_mem_union_initialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing multiple members of union", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_multiversion_after_used, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration cannot become a multiversioned function after first usage", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_multiversion_doesnt_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions}1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_doesnt_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function}1", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_duplicate, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function redeclarations require identical target attributes", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_no_other_attrs, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioning cannot be combined with other attributes", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_noproto, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function must have a prototype", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -1029,6 +1054,7 @@
 DIAG(err_new_array_init_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "array 'new' cannot have initialization arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_new_array_nonconst, CLASS_ERROR, (unsigned)diag::Severity::Error, "only the first dimension of an allocated array may have dynamic size", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_new_array_of_auto, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot allocate array of 'auto'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_new_array_size_unknown_from_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot determine allocated array size from initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_new_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "allocation of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_accessor_for_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "no %select{getter|setter}0 defined for property %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_base_classes, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of '__super', %0 has no base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1086,8 +1112,8 @@
 DIAG(err_nsconsumed_attribute_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "overriding method has mismatched ns_consumed attribute on its parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_nsobject_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "'NSObject' attribute is for pointer types only", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_nsreturns_retained_attribute_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_nullability_cs_multilevel, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability keyword %0 cannot be applied to multi-level pointer type %1", 0, SFINAE_SubstitutionFailure, false, true, 19)
-DIAG(err_nullability_nonpointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_nullability_cs_multilevel, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability keyword %0 cannot be applied to multi-level pointer type %1", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_nullability_nonpointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1", 0, SFINAE_SubstitutionFailure, false, true, 20)
 DIAG(err_objc_array_of_interfaces, CLASS_ERROR, (unsigned)diag::Severity::Error, "array of interface %0 is invalid (probably should be an array of pointers)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_attr_not_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter of %0 attribute must be a single name of an Objective-C %select{class|protocol}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_attr_protocol_requires_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 can only be applied to @protocol definitions, not forward declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1113,9 +1139,9 @@
 DIAG(err_objc_ns_bridged_invalid_cfobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "ObjectiveC object of type %0 is bridged to %1, which is not valid CF object", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_object_assignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot assign to class object (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_object_catch, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot catch an Objective-C object by value", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_objc_parameterized_category_nonclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{extension|category}0 of non-parameterized class %1 cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_parameterized_forward_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "forward declaration of non-parameterized class %0 cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_parameterized_forward_class_first, CLASS_ERROR, (unsigned)diag::Severity::Error, "class %0 previously declared with type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_parameterized_category_nonclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{extension|category}0 of non-parameterized class %1 cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_parameterized_forward_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "forward declaration of non-parameterized class %0 cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_parameterized_forward_class_first, CLASS_ERROR, (unsigned)diag::Severity::Error, "class %0 previously declared with type parameters", 0, SFINAE_SubstitutionFailure, false, true, 21)
 DIAG(err_objc_precise_lifetime_bad_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "objc_precise_lifetime only applies to retainable types; type here is %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_property_attr_mutually_exclusive, CLASS_ERROR, (unsigned)diag::Severity::Error, "property attributes '%0' and '%1' are mutually exclusive", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_property_requires_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "property with '%0' attribute must be of object type", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1133,25 +1159,25 @@
 DIAG(err_objc_synchronized_expects_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "@synchronized requires an Objective-C object type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_throw_expects_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "@throw requires an Objective-C object type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_type_arg_does_not_match_bound, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 does not satisfy the bound (%1) of type parameter %2", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_objc_type_arg_explicit_nullability, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 cannot explicitly specify nullability", 0, SFINAE_SubstitutionFailure, false, true, 19)
-DIAG(err_objc_type_arg_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "no type or protocol named %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_arg_missing_star, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 must be a pointer (requires a '*')", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_arg_explicit_nullability, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 cannot explicitly specify nullability", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_arg_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "no type or protocol named %0", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_arg_missing_star, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 must be a pointer (requires a '*')", 0, SFINAE_SubstitutionFailure, false, true, 21)
 DIAG(err_objc_type_arg_not_id_compatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 is neither an Objective-C object nor a block type", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_objc_type_arg_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 cannot be qualified with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_args_and_protocols, CLASS_ERROR, (unsigned)diag::Severity::Error, "angle brackets contain both a %select{type|protocol}0 (%1) and a %select{protocol|type}0 (%2)", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_args_non_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to non-class type %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_args_non_parameterized_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to non-parameterized class %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_args_specialized_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to already-specialized class type %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_args_wrong_arity, CLASS_ERROR, (unsigned)diag::Severity::Error, "too %select{many|few}0 type arguments for class %1 (have %2, expected %3)", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_arity_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{forward class declaration|class definition|category|extension}0 has too %select{few|many}1 type parameters (expected %2, have %3)", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_bound_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %0 for type parameter %1 conflicts with %select{implicit|previous}2 bound %3%select{for type parameter %5|}4", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_bound_explicit_nullability, CLASS_ERROR, (unsigned)diag::Severity::Error, "type parameter %0 bound %1 cannot explicitly specify nullability", 0, SFINAE_SubstitutionFailure, false, true, 19)
-DIAG(err_objc_type_param_bound_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing type bound %0 for type parameter %1 in %select{@interface|@class}2", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_bound_missing_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '*' in type bound %0 for type parameter %1", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_bound_nonobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %0 for type parameter %1 is not an Objective-C pointer type", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_bound_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %1 for type parameter %0 cannot be qualified with '%2'", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of type parameter %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
-DIAG(err_objc_type_param_variance_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{in|co|contra}0variant type parameter %1 conflicts with previous %select{in|co|contra}2variant type parameter %3", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_arg_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 cannot be qualified with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_args_and_protocols, CLASS_ERROR, (unsigned)diag::Severity::Error, "angle brackets contain both a %select{type|protocol}0 (%1) and a %select{protocol|type}0 (%2)", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_args_non_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to non-class type %0", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_args_non_parameterized_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to non-parameterized class %0", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_args_specialized_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to already-specialized class type %0", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_args_wrong_arity, CLASS_ERROR, (unsigned)diag::Severity::Error, "too %select{many|few}0 type arguments for class %1 (have %2, expected %3)", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_arity_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{forward class declaration|class definition|category|extension}0 has too %select{few|many}1 type parameters (expected %2, have %3)", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_bound_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %0 for type parameter %1 conflicts with %select{implicit|previous}2 bound %3%select{for type parameter %5|}4", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_bound_explicit_nullability, CLASS_ERROR, (unsigned)diag::Severity::Error, "type parameter %0 bound %1 cannot explicitly specify nullability", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_bound_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing type bound %0 for type parameter %1 in %select{@interface|@class}2", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_bound_missing_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '*' in type bound %0 for type parameter %1", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_bound_nonobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %0 for type parameter %1 is not an Objective-C pointer type", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_bound_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %1 for type parameter %0 cannot be qualified with '%2'", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of type parameter %0", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_objc_type_param_variance_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{in|co|contra}0variant type parameter %1 conflicts with previous %select{in|co|contra}2variant type parameter %3", 0, SFINAE_SubstitutionFailure, false, true, 21)
 DIAG(err_objc_var_decl_inclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot declare variable inside @interface or @protocol", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_objc_variable_sized_type_not_at_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "field %0 with variable sized type %1 is not at the end of class", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_object_cannot_be_passed_returned_by_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "interface type %1 cannot be %select{returned|passed}0 by value; did you forget * in %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1196,6 +1222,8 @@
 DIAG(err_omp_expected_base_var_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected variable name as a base of the array %select{subscript|section}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_expected_int_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a reference to an integer-typed parameter", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_expected_named_var_member_or_array_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected expression containing only member accesses and/or array sections based on named variables", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_predefined_allocator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected one of the predefined allocators for the variables with the static storage: 'omp_default_mem_alloc', 'omp_large_cap_mem_alloc', 'omp_const_mem_alloc', 'omp_high_bw_mem_alloc', 'omp_low_lat_mem_alloc', 'omp_cgroup_mem_alloc', 'omp_pteam_mem_alloc' or 'omp_thread_mem_alloc'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_private_copy_for_allocate, CLASS_ERROR, (unsigned)diag::Severity::Error, "the referenced item is not found in any private clause on the same directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_expected_uniform_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a reference to a parameter specified in a 'uniform' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_expected_var_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a global variable, static local variable or static data member", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_expected_var_arg_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a global variable, static local variable or static data member; did you mean %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
@@ -1212,8 +1240,10 @@
 DIAG(err_omp_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression has incomplete class type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_invalid_map_this_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid 'this' expression on 'map' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_invalid_map_type_for_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{map type '%1' is not allowed|map type must be specified}0 for '#pragma omp %2'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_invalid_mapper, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find a valid user-defined mapper for type %0 with name %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_invalid_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma omp %0' directive must appear only in file scope", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_invalid_target_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 used in declare target directive is not a variable or a function name", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_invariant_or_linear_dependency, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected loop invariant expression or '<invariant1> * %0 + <invariant2>' kind of expression", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_lastprivate_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a lastprivate variable with incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_linear_distribute_var_non_loop_iteration, CLASS_ERROR, (unsigned)diag::Severity::Error, "only loop iteration variables are allowed in 'linear' clause in distribute directives", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_linear_expected_int_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument of a linear clause should be of integral or pointer type, not %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
@@ -1284,6 +1314,8 @@
 DIAG(err_omp_simd_region_cannot_use_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' statement cannot be used in OpenMP simd region", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_single_copyprivate_with_nowait, CLASS_ERROR, (unsigned)diag::Severity::Error, "the 'copyprivate' clause must not be used with the 'nowait' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_single_decl_in_declare_simd, CLASS_ERROR, (unsigned)diag::Severity::Error, "single declaration is expected after 'declare simd' directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_stmt_depends_on_loop_counter, CLASS_ERROR, (unsigned)diag::Severity::Error, "the loop %select{initializer|condition}0 expression depends on the current loop control variable", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_target_before_requires, CLASS_ERROR, (unsigned)diag::Severity::Error, "target region encountered before requires directive with '%0' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_target_contains_not_only_teams, CLASS_ERROR, (unsigned)diag::Severity::Error, "target construct with nested teams region contains statements outside of the teams construct", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_threadprivate_in_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "threadprivate variables are not allowed in '%0' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_threadprivate_in_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "threadprivate variables cannot be used in target constructs", 0, SFINAE_SubstitutionFailure, false, true, 11)
@@ -1295,6 +1327,7 @@
 DIAG(err_omp_union_type_not_allowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "mapping of union members is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_unknown_reduction_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect reduction identifier, expected one of '+', '-', '*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_unnamed_if_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{|one of}0 %1 directive name modifier%select{|s}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_unsupported_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "host requires %0 bit size %1 type support, but device '%2' does not support it", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_usedeviceptr_not_a_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected pointer or reference to pointer in 'use_device_ptr' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_var_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma omp %0' must appear in the scope of the %q1 variable declaration", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_var_thread_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 cannot be threadprivate because it is %select{thread-local|a global named register variable}1", 0, SFINAE_SubstitutionFailure, false, true, 11)
@@ -1302,6 +1335,7 @@
 DIAG(err_omp_variable_in_given_clause_and_dsa, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 variable cannot be in a %1 clause in '#pragma omp %2' directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_variably_modified_type_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "arguments of OpenMP clause '%0' in '#pragma omp %2' directive cannot be of variably-modified type %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_wrong_cancel_region, CLASS_ERROR, (unsigned)diag::Severity::Error, "one of 'for', 'parallel', 'sections' or 'taskgroup' is expected", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_dependency_iterator_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an integer or a pointer type of the outer loop counter '%0' for non-rectangular nests", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_wrong_dsa, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 variable cannot be %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_wrong_if_directive_name_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive name modifier '%0' is not allowed for '#pragma omp %1'", 0, SFINAE_SubstitutionFailure, false, true, 11)
 DIAG(err_omp_wrong_linear_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{'val' modifier|one of 'ref', val' or 'uval' modifiers}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
@@ -1363,6 +1397,7 @@
 DIAG(err_opencl_type_struct_or_union_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 type cannot be used to declare a structure or union field", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_variadic_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid prototype, variadic arguments are not allowed in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_vla, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length arrays are not supported in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_openclcxx_placement_new, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of placement new requires explicit declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_openmp_default_simd_align_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of '__builtin_omp_required_simd_align' to an expression, only type is allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_operator_arrow_circular, CLASS_ERROR, (unsigned)diag::Severity::Error, "circular pointer delegation detected", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_operator_arrow_depth_exceeded, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of 'operator->' on type %0 would invoke a sequence of more than %1 'operator->' calls", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1398,12 +1433,12 @@
 DIAG(err_ovl_ambiguous_object_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to object of type %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_ambiguous_oper_binary, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of overloaded operator '%0' is ambiguous (with operand types %1 and %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_ambiguous_oper_unary, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of overloaded operator '%0' is ambiguous (operand type %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_ovl_deleted_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 function %1%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to deleted function %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_deleted_conversion_in_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 uses deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_ovl_deleted_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 constructor of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_ovl_deleted_member_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 member function %1%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_ovl_deleted_object_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 function call operator in type %1%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_ovl_deleted_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "overload resolution selected %select{unavailable|deleted}0 operator '%1'%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to deleted constructor of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_member_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to deleted member function %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_object_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to deleted function call operator in type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "overload resolution selected deleted operator '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_deleted_special_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to implicitly-deleted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0 of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_deleted_special_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "object of type %0 cannot be %select{constructed|copied|moved|assigned|assigned|destroyed}1 because its %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 is implicitly deleted", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_diff_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "functions that differ only in their return type cannot be overloaded", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1466,6 +1501,9 @@
 DIAG(err_pragma_pop_visibility_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "#pragma visibility pop with no matching #pragma visibility push", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_pragma_push_visibility_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "#pragma visibility push with no matching #pragma visibility pop", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_private_ivar_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 is private", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_private_module_fragment_not_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "private module fragment declaration with no preceding module declaration", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_private_module_fragment_not_module_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "private module fragment in module implementation unit", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_private_module_fragment_redefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "private module fragment redefined", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_property_accessor_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of property %0 (%1) does not match type of accessor %2 (%3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_property_found_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 found on object of type %1; did you mean to access it with the \".\" operator?", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_property_function_in_objc_container, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of Objective-C property in function nested in Objective-C container not supported, move function outside its container", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1522,9 +1560,10 @@
 DIAG(err_ref_qualifier_destructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "ref-qualifier '%select{&&|&}0' is not allowed on a destructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ref_qualifier_overload, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot overload a member function %select{without a ref-qualifier|with ref-qualifier '&'|with ref-qualifier '&&'}0 with a member function %select{without a ref-qualifier|with ref-qualifier '&'|with ref-qualifier '&&'}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ref_vm_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to declaration with a variably modified type inside block", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_reference_bind_drops_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "binding value %diff{of type $ to reference to type $|to reference}0,1 drops %select{<<ERROR>>|'const'|'restrict'|'const' and 'restrict'|'volatile'|'const' and 'volatile'|'restrict' and 'volatile'|'const', 'restrict', and 'volatile'}2 qualifier%plural{1:|2:|4:|:s}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_bind_drops_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_reference_bind_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference %diff{to %select{type|incomplete type}1 $ could not bind to an %select{rvalue|lvalue}2 of type $|could not bind to %select{rvalue|lvalue}2 of incompatible type}0,3", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_reference_bind_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to type %0 cannot bind to an initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_bind_temporary_addrspace, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference of type %0 cannot bind to a temporary object because of address space mismatch", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_reference_bind_to_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_reference_bind_to_vector_element, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-const|volatile}0 reference cannot bind to vector element", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_reference_capture_with_reference_default, CLASS_ERROR, (unsigned)diag::Severity::Error, "'&' cannot precede a capture when the capture default is '&'", 0, SFINAE_SubstitutionFailure, false, true, 3)
@@ -1662,6 +1701,7 @@
 DIAG(err_template_inside_local_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "templates cannot be declared inside of a local class", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_instantiate_undefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{implicit|explicit}0 instantiation of undefined template %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_instantiate_within_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{implicit|explicit}0 instantiation of template %1 within its own definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_kernel, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel functions cannot be used in a template declaration, instantiation or specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_kw_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'template' keyword prior to dependent template name '%0%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_kw_refers_to_class_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0%1' instantiated to a class template, not a function template", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_kw_refers_to_non_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 following the 'template' keyword does not refer to a template", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1781,6 +1821,7 @@
 DIAG(err_typecheck_field_variable_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "fields must have a constant size: 'variable length array in structure' extension will never be supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_typecheck_illegal_increment_decrement, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{decrement|increment}1 value of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_typecheck_incompatible_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes address space of pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_incompatible_nested_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes address space of nested pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_typecheck_incompatible_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes retain/release properties of pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_typecheck_incomplete_array_needs_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of variable with array type needs an explicit size or an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_typecheck_incomplete_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete definition of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1947,207 +1988,214 @@
 DIAG(err_wrong_sampler_addressspace, CLASS_ERROR, (unsigned)diag::Severity::Error, "sampler type cannot be used with the __local and __global address space qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_x86_builtin_invalid_rounding, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid rounding argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_x86_builtin_invalid_scale, CLASS_ERROR, (unsigned)diag::Severity::Error, "scale argument must be 1, 2, 4, or 8", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(error_duplicate_asm_operand_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate use of asm operand name \"%0\"", 0, SFINAE_SubstitutionFailure, false, true, 12)
 DIAG(error_inoutput_conflict_with_clobber, CLASS_ERROR, (unsigned)diag::Severity::Error, "asm-specifier for input or output variable conflicts with asm clobber list", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(ext_aggregate_init_not_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initializer for aggregate is not a compile-time constant", 114, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_record_with_anonymous_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous types declared in an anonymous %select{struct|union}0 are an extension", 432, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_record_with_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "types declared in an anonymous %select{struct|union}0 are a Microsoft extension", 372, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_struct_union_qualified, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous %select{struct|union}0 cannot be '%1'", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous unions are a C11 extension", 112, SFINAE_Suppress, false, false, 2)
-DIAG(ext_array_init_copy, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initialization of an array %diff{of type $ from a compound literal of type $|from a compound literal}0,1 is a GNU extension", 260, SFINAE_Suppress, false, false, 2)
-DIAG(ext_array_init_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "parenthesized initialization of a member array is a GNU extension", 255, SFINAE_Suppress, false, false, 2)
-DIAG(ext_array_size_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_auto_new_list_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ standards before C++17 do not allow new expression for type %0 to use list-initialization", 91, SFINAE_Suppress, false, false, 2)
-DIAG(ext_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' type specifier is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_bad_cxx_cast_qualifiers_away_incoherent, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow %select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 because it casts away qualifiers, even though the source and destination types are unrelated", 120, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_c11_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a C11 extension", 112, SFINAE_Suppress, false, false, 2)
-DIAG(ext_c99_array_usage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 feature", 114, SFINAE_Suppress, false, false, 2)
-DIAG(ext_c99_flexible_array_member, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array members are a C99 feature", 114, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cannot_use_trivial_abi, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'trivial_abi' cannot be applied to %0", 282, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is an extension", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cce_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition}0 %select{cannot be narrowed from type %2 to %3|evaluates to %2, which cannot be narrowed to type %3}1", 83, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_complex_component_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex initialization specifying real and imaginary components is an extension", 129, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_body_invalid_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_body_invalid_stmt_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++2a extension", 98, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_body_multiple_return, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multiple return statements in constexpr function is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_function_never_constant_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constexpr %select{function|constructor}0 never produces a constant expression", 336, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_function_try_block_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function try block in constexpr %select{function|constructor}0 is a C++2a extension", 98, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_local_var, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable declaration in a constexpr %select{function|constructor}0 is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_type_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type definition in a constexpr %select{function|constructor}0 is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cxx14_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cxx17_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
-DIAG(ext_decomp_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "decomposition declarations are a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
-DIAG(ext_decomp_decl_cond, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not permit structured binding declaration in a condition", 58, SFINAE_Suppress, false, false, 2)
-DIAG(ext_default_init_const, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default initialization of an object of const type %0%select{| without a user-provided default constructor}1 is a Microsoft extension", 376, SFINAE_Suppress, false, false, 2)
-DIAG(ext_delete_void_ptr_operand, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "cannot delete expression with pointer-to-'void' type %0", 161, SFINAE_Suppress, false, false, 2)
-DIAG(ext_deprecated_string_literal_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 does not allow conversion from string literal to %0", 756, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_designated_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "designated initializers are a C99 feature", 114, SFINAE_Suppress, false, false, 2)
-DIAG(ext_empty_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty %select{struct|union}0 is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enum_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "befriending enumeration type %0 is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enum_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "enumeration values exceed range of largest integer", 211, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enum_value_not_int, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C restricts enumerator values to range of 'int' (%0 is too %select{small|large}1)", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enumerator_increment_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incremented enumerator value %0 is not representable in the largest integer type", 211, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enumerator_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumerator value is not representable in the underlying type %0", 381, SFINAE_Suppress, false, false, 2)
-DIAG(ext_equals_this_lambda_capture_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit capture of 'this' with a capture default of '=' is a C++2a extension", 98, SFINAE_Suppress, false, false, 3)
-DIAG(ext_equivalent_internal_linkage_decl_in_modules, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ambiguous use of internal linkage declaration %0 defined in multiple modules", 423, SFINAE_Suppress, false, false, 13)
+DIAG(ext_adl_only_template_id, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of function template name with no prior declaration in function call with explicit template arguments is a C++2a extension", 99, SFINAE_Suppress, false, false, 2)
+DIAG(ext_aggregate_init_not_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initializer for aggregate is not a compile-time constant", 115, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_record_with_anonymous_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous types declared in an anonymous %select{struct|union}0 are an extension", 438, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_record_with_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "types declared in an anonymous %select{struct|union}0 are a Microsoft extension", 376, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_struct_union_qualified, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous %select{struct|union}0 cannot be '%1'", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous unions are a C11 extension", 113, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_init_copy, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initialization of an array %diff{of type $ from a compound literal of type $|from a compound literal}0,1 is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_init_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "parenthesized initialization of a member array is a GNU extension", 259, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_size_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_auto_new_list_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ standards before C++17 do not allow new expression for type %0 to use list-initialization", 92, SFINAE_Suppress, false, false, 2)
+DIAG(ext_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' type specifier is a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_bad_cxx_cast_qualifiers_away_incoherent, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow %select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 because it casts away qualifiers, even though the source and destination types are unrelated", 121, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_c11_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a C11 extension", 113, SFINAE_Suppress, false, false, 2)
+DIAG(ext_c99_array_usage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 feature", 115, SFINAE_Suppress, false, false, 2)
+DIAG(ext_c99_flexible_array_member, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array members are a C99 feature", 115, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cannot_use_trivial_abi, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'trivial_abi' cannot be applied to %0", 286, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is an extension", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cce_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition|explicit specifier argument}0 %select{cannot be narrowed from type %2 to %3|evaluates to %2, which cannot be narrowed to type %3}1", 84, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_complex_component_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex initialization specifying real and imaginary components is an extension", 130, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_invalid_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++14 extension", 88, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_invalid_stmt_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++2a extension", 99, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_multiple_return, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multiple return statements in constexpr function is a C++14 extension", 88, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_function_never_constant_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constexpr %select{function|constructor}0 never produces a constant expression", 340, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_function_try_block_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function try block in constexpr %select{function|constructor}0 is a C++2a extension", 99, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_local_var, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable declaration in a constexpr %select{function|constructor}0 is a C++14 extension", 88, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_type_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type definition in a constexpr %select{function|constructor}0 is a C++14 extension", 88, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cxx14_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++14 extension", 88, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cxx17_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++17 extension", 92, SFINAE_Suppress, false, false, 2)
+DIAG(ext_decomp_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "decomposition declarations are a C++17 extension", 92, SFINAE_Suppress, false, false, 2)
+DIAG(ext_decomp_decl_cond, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not permit structured binding declaration in a condition", 59, SFINAE_Suppress, false, false, 2)
+DIAG(ext_decomp_decl_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "decomposition declaration declared %plural{1:'%1'|:with '%1' specifiers}0 is a C++2a extension", 99, SFINAE_Suppress, false, false, 2)
+DIAG(ext_default_init_const, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default initialization of an object of const type %0%select{| without a user-provided default constructor}1 is a Microsoft extension", 380, SFINAE_Suppress, false, false, 2)
+DIAG(ext_delete_void_ptr_operand, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "cannot delete expression with pointer-to-'void' type %0", 162, SFINAE_Suppress, false, false, 2)
+DIAG(ext_deprecated_string_literal_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 does not allow conversion from string literal to %0", 766, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_designated_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "designated initializers are a C99 feature", 115, SFINAE_Suppress, false, false, 2)
+DIAG(ext_empty_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty %select{struct|union}0 is a GNU extension", 268, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "befriending enumeration type %0 is a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "enumeration values exceed range of largest integer", 212, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_value_not_int, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C restricts enumerator values to range of 'int' (%0 is too %select{small|large}1)", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enumerator_increment_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incremented enumerator value %0 is not representable in the largest integer type", 212, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enumerator_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumerator value is not representable in the underlying type %0", 386, SFINAE_Suppress, false, false, 2)
+DIAG(ext_equals_this_lambda_capture_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit capture of 'this' with a capture default of '=' is a C++2a extension", 99, SFINAE_Suppress, false, false, 3)
+DIAG(ext_equivalent_internal_linkage_decl_in_modules, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ambiguous use of internal linkage declaration %0 defined in multiple modules", 429, SFINAE_Suppress, false, false, 13)
 DIAG(ext_excess_initializers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "excess elements in %select{array|vector|scalar|union|struct}0 initializer", 0, SFINAE_Suppress, false, false, 2)
 DIAG(ext_excess_initializers_in_char_array_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "excess elements in char array initializer", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_explicit_conversion_functions, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit conversion functions are a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_explicit_instantiation_duplicate, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate explicit instantiation of %0 ignored as a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_explicit_instantiation_without_qualified_id, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "qualifier in explicit instantiation of %q0 requires a template-id (a typedef is not permitted)", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_conversion_functions, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit conversion functions are a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_instantiation_duplicate, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate explicit instantiation of %0 ignored as a Microsoft extension", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_instantiation_without_qualified_id, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "qualifier in explicit instantiation of %q0 requires a template-id (a typedef is not permitted)", 535, SFINAE_Suppress, false, false, 2)
 DIAG(ext_explicit_specialization_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit specialization cannot have a storage class", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_expr_not_ice, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "expression is not an %select{integer|integral}0 constant expression; folding it to a constant is a GNU extension", 267, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_empty_aggregate_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_empty_aggregate_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a Microsoft extension", 387, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_in_array, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be used as an array element due to flexible array member", 228, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be nested in a struct due to flexible array member", 228, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array initialization is a GNU extension", 265, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_union_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a GNU extension", 266, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_union_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a Microsoft extension", 387, SFINAE_Suppress, false, false, 2)
-DIAG(ext_for_range_begin_end_types_differ, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'begin' and 'end' returning different types (%0 and %1) is a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
-DIAG(ext_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids forward references to 'enum' types", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_forward_ref_enum_def, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaration of already-defined enum %0 is a GNU extension", 271, SFINAE_Suppress, false, false, 2)
-DIAG(ext_found_via_dependent_bases_lookup, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of identifier %0 found via unqualified lookup into dependent bases of class templates is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_freestanding_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex numbers are an extension in a freestanding C99 implementation", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_friend_tag_redecl_outside_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", 397, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a GNU extension", 254, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_ptr_func_arith, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2 is a GNU extension", 530, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_subscript_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "subscript of a pointer to void is a GNU extension", 530, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_void_ptr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension", 530, SFINAE_Suppress, false, false, 2)
-DIAG(ext_goto_into_protected_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "jump from this goto statement to its label is a Microsoft extension", 388, SFINAE_Suppress, false, false, 2)
-DIAG(ext_imaginary_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "imaginary constants are a GNU extension", 268, SFINAE_Suppress, false, false, 2)
-DIAG(ext_implicit_exception_spec_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function previously declared with an %select{explicit|implicit}0 exception specification redeclared with an %select{implicit|explicit}0 exception specification", 291, SFINAE_Suppress, false, false, 2)
-DIAG(ext_implicit_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit declaration of function %0 is invalid in C99", 296, SFINAE_Suppress, false, false, 2)
-DIAG(ext_implicit_lib_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicitly declaring library function '%0' with type %1", 296, SFINAE_Suppress, false, false, 2)
-DIAG(ext_in_class_initializer_float_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initializer for static data member of type %0 is a GNU extension", 273, SFINAE_Suppress, false, false, 2)
-DIAG(ext_in_class_initializer_float_type_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "in-class initializer for static data member of type %0 requires 'constexpr' specifier", 616, SFINAE_Suppress, false, false, 2)
-DIAG(ext_in_class_initializer_non_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", 267, SFINAE_Suppress, false, false, 2)
-DIAG(ext_incomplete_in_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", 382, SFINAE_Suppress, false, false, 2)
-DIAG(ext_increment_bool, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow incrementing expression of type bool", 321, SFINAE_Suppress, false, false, 2)
-DIAG(ext_init_capture, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialized lambda captures are a C++14 extension", 87, SFINAE_Suppress, false, false, 3)
-DIAG(ext_init_list_constant_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constant expression evaluates to %0 which cannot be narrowed to type %1", 83, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_init_list_type_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "type %0 cannot be narrowed to %1 in initializer list", 83, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_init_list_variable_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list", 83, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_export_no_name_block, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++20 does not permit %select{an empty|a static_assert}0 declaration to appear in an export block", 219, SFINAE_Suppress, false, false, 13)
+DIAG(ext_export_no_names, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++20 does not permit a declaration that does not introduce any names to be exported", 219, SFINAE_Suppress, false, false, 13)
+DIAG(ext_export_using_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++20 does not permit using directive to be exported", 220, SFINAE_Suppress, false, false, 13)
+DIAG(ext_expr_not_ice, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "expression is not an %select{integer|integral}0 constant expression; folding it to a constant is a GNU extension", 271, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_empty_aggregate_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a GNU extension", 268, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_empty_aggregate_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a Microsoft extension", 392, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_in_array, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be used as an array element due to flexible array member", 231, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be nested in a struct due to flexible array member", 231, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array initialization is a GNU extension", 269, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_union_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a GNU extension", 270, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_union_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a Microsoft extension", 392, SFINAE_Suppress, false, false, 2)
+DIAG(ext_for_range_begin_end_types_differ, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'begin' and 'end' returning different types (%0 and %1) is a C++17 extension", 92, SFINAE_Suppress, false, false, 2)
+DIAG(ext_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids forward references to 'enum' types", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_forward_ref_enum_def, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaration of already-defined enum %0 is a GNU extension", 275, SFINAE_Suppress, false, false, 2)
+DIAG(ext_found_via_dependent_bases_lookup, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of identifier %0 found via unqualified lookup into dependent bases of class templates is a Microsoft extension", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_freestanding_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex numbers are an extension in a freestanding C99 implementation", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_friend_tag_redecl_outside_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", 402, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a GNU extension", 258, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_ptr_func_arith, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2 is a GNU extension", 538, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_subscript_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "subscript of a pointer to void is a GNU extension", 538, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_void_ptr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension", 538, SFINAE_Suppress, false, false, 2)
+DIAG(ext_goto_into_protected_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "jump from this goto statement to its label is a Microsoft extension", 393, SFINAE_Suppress, false, false, 2)
+DIAG(ext_imaginary_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "imaginary constants are a GNU extension", 272, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_exception_spec_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function previously declared with an %select{explicit|implicit}0 exception specification redeclared with an %select{implicit|explicit}0 exception specification", 295, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit declaration of function %0 is invalid in C99", 300, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_lib_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicitly declaring library function '%0' with type %1", 300, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_float_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initializer for static data member of type %0 is a GNU extension", 277, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_float_type_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "in-class initializer for static data member of type %0 requires 'constexpr' specifier", 624, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_non_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", 271, SFINAE_Suppress, false, false, 2)
+DIAG(ext_incomplete_in_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", 387, SFINAE_Suppress, false, false, 2)
+DIAG(ext_increment_bool, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow incrementing expression of type bool", 325, SFINAE_Suppress, false, false, 2)
+DIAG(ext_init_capture, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialized lambda captures are a C++14 extension", 88, SFINAE_Suppress, false, false, 3)
+DIAG(ext_init_capture_pack, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialized lambda pack captures are a C++2a extension", 99, SFINAE_Suppress, false, false, 3)
+DIAG(ext_init_list_constant_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constant expression evaluates to %0 which cannot be narrowed to type %1", 84, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_init_list_type_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "type %0 cannot be narrowed to %1 in initializer list", 84, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_init_list_variable_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list", 84, SFINAE_SubstitutionFailure, false, false, 2)
 DIAG(ext_initializer_string_for_char_array_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initializer-string for char array is too long", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_inline_variable, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline variables are a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
-DIAG(ext_integer_complement_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '~' for complex conjugation of %0", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_integer_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex integer types are a GNU extension", 259, SFINAE_Suppress, false, false, 2)
-DIAG(ext_integer_increment_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '++'/'--' on complex integer type %0", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_internal_in_extern_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 617, SFINAE_Suppress, false, false, 2)
-DIAG(ext_internal_in_extern_inline_quiet, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 617, SFINAE_Suppress, false, false, 2)
-DIAG(ext_invalid_sign_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'%0' cannot be signed or unsigned", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_main_returns_nonint, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "return type of 'main' is not 'int'", 364, SFINAE_Suppress, false, false, 2)
-DIAG(ext_main_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ does not allow 'main' to be used by a program", 363, SFINAE_Suppress, false, false, 2)
-DIAG(ext_many_braces_around_scalar_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "too many braces around scalar initializer", 366, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_member_redeclared, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "class member cannot be redeclared", 560, SFINAE_Suppress, false, false, 2)
-DIAG(ext_mismatched_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in declaration does not match previous declaration", 382, SFINAE_Suppress, false, false, 2)
-DIAG(ext_mismatched_exception_spec_explicit_instantiation, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in explicit instantiation does not match instantiated one", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_inline_variable, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline variables are a C++17 extension", 92, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_complement_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '~' for complex conjugation of %0", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex integer types are a GNU extension", 263, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_increment_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '++'/'--' on complex integer type %0", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_internal_in_extern_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 625, SFINAE_Suppress, false, false, 2)
+DIAG(ext_internal_in_extern_inline_quiet, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 625, SFINAE_Suppress, false, false, 2)
+DIAG(ext_invalid_sign_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'%0' cannot be signed or unsigned", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_main_returns_nonint, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "return type of 'main' is not 'int'", 368, SFINAE_Suppress, false, false, 2)
+DIAG(ext_main_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ does not allow 'main' to be used by a program", 367, SFINAE_Suppress, false, false, 2)
+DIAG(ext_many_braces_around_scalar_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "too many braces around scalar initializer", 370, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_member_redeclared, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "class member cannot be redeclared", 568, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mismatched_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in declaration does not match previous declaration", 387, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mismatched_exception_spec_explicit_instantiation, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in explicit instantiation does not match instantiated one", 387, SFINAE_Suppress, false, false, 2)
 DIAG(ext_missing_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration specifier missing, defaulting to 'int'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 406, SFINAE_Suppress, false, false, 2)
-DIAG(ext_missing_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type specifier missing, defaults to 'int'", 297, SFINAE_Suppress, false, false, 2)
-DIAG(ext_mixed_decls_code, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 forbids mixing declarations and code", 157, SFINAE_Suppress, false, false, 2)
-DIAG(ext_module_import_in_extern_c, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "import of C++ module '%0' appears within extern \"C\" language linkage specification", 422, SFINAE_Suppress, false, false, 13)
-DIAG(ext_module_import_not_at_top_level_noop, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "redundant #include of module '%0' appears within %1", 424, SFINAE_Suppress, false, false, 13)
-DIAG(ext_ms_ambiguous_direct_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "accessing inaccessible direct base %0 of %1 is a Microsoft extension", 389, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_anonymous_record, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "anonymous %select{structs|unions}0 are a Microsoft extension", 372, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_cast between pointer-to-function and pointer-to-object is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_delayed_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using the undeclared type %0 as a default template argument is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_deref_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument containing a dereference operation is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_explicit_constructor_call, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit constructor calls are a Microsoft extension", 384, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "forward references to 'enum' types are a Microsoft extension", 380, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_impcast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 382, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_template_spec_redecl_out_of_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3 is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_template_type_arg_missing_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument for template type parameter must be a type; omitted 'typename' is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_using_declaration_inaccessible, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using declaration referring to inaccessible member '%0' (which refers to accessible member '%1') is a Microsoft compatibility extension", 398, SFINAE_AccessControl, false, false, 2)
-DIAG(ext_mutable_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'mutable' on a reference type is a Microsoft extension", 391, SFINAE_Suppress, false, false, 2)
+DIAG(ext_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 411, SFINAE_Suppress, false, false, 2)
+DIAG(ext_missing_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type specifier missing, defaults to 'int'", 301, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mixed_decls_code, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 forbids mixing declarations and code", 158, SFINAE_Suppress, false, false, 2)
+DIAG(ext_module_import_in_extern_c, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "import of C++ module '%0' appears within extern \"C\" language linkage specification", 428, SFINAE_Suppress, false, false, 13)
+DIAG(ext_module_import_not_at_top_level_noop, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "redundant #include of module '%0' appears within %1", 430, SFINAE_Suppress, false, false, 13)
+DIAG(ext_ms_ambiguous_direct_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "accessing inaccessible direct base %0 of %1 is a Microsoft extension", 394, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_anonymous_record, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "anonymous %select{structs|unions}0 are a Microsoft extension", 376, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_cast between pointer-to-function and pointer-to-object is a Microsoft extension", 377, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_delayed_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using the undeclared type %0 as a default template argument is a Microsoft extension", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_deref_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument containing a dereference operation is a Microsoft extension", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_explicit_constructor_call, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit constructor calls are a Microsoft extension", 389, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "forward references to 'enum' types are a Microsoft extension", 385, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_impcast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension", 377, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 387, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_template_spec_redecl_out_of_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3 is a Microsoft extension", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_template_type_arg_missing_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument for template type parameter must be a type; omitted 'typename' is a Microsoft extension", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_using_declaration_inaccessible, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using declaration referring to inaccessible member '%0' (which refers to accessible member '%1') is a Microsoft compatibility extension", 403, SFINAE_AccessControl, false, false, 2)
+DIAG(ext_mutable_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'mutable' on a reference type is a Microsoft extension", 396, SFINAE_Suppress, false, false, 2)
 DIAG(ext_nested_name_member_ref_lookup_ambiguous, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "lookup of %0 in member access expression is ambiguous; using member of %1", 20, SFINAE_Suppress, false, false, 2)
-DIAG(ext_nested_name_spec_is_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of enumeration in a nested name specifier is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_nested_pointer_qualifier_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers in nested pointer types", 311, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_name_spec_is_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of enumeration in a nested name specifier is a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_pointer_qualifier_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers in nested pointer types", 315, SFINAE_Suppress, false, false, 2)
 DIAG(ext_new_paren_array_nonconst, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "when type is in parentheses, array cannot have dynamic size", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_no_declarators, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration does not declare anything", 405, SFINAE_Suppress, false, false, 2)
-DIAG(ext_no_named_members_in_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{struct|union}0 without named members is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
-DIAG(ext_nonclass_type_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-class friend type %0 is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_noreturn_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared _Noreturn", 363, SFINAE_Suppress, false, false, 2)
-DIAG(ext_offsetof_non_pod_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-POD type %0", 341, SFINAE_Suppress, false, false, 2)
-DIAG(ext_offsetof_non_standardlayout_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-standard-layout type %0", 341, SFINAE_Suppress, false, false, 2)
-DIAG(ext_omp_loop_not_canonical_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')", 502, SFINAE_Suppress, false, false, 11)
-DIAG(ext_opencl_ext_vector_type_rgba_selector, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "vector component name '%0' is an OpenCL version 2.2 feature", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_operator_new_delete_declared_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "replacement function %0 cannot be declared 'inline'", 328, SFINAE_Suppress, false, false, 2)
-DIAG(ext_out_of_line_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "out-of-line declaration of a member must be a definition", 506, SFINAE_Suppress, false, false, 2)
-DIAG(ext_out_of_line_qualified_id_type_names_constructor, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ specifies that qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context, despite preceding %select{'typename'|'template'}2 keyword", 325, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_override_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification of overriding function is more lax than base version", 382, SFINAE_Suppress, false, false, 2)
-DIAG(ext_param_default_argument_redefinition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of default argument", 378, SFINAE_Suppress, false, false, 2)
-DIAG(ext_param_not_declared, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "parameter %0 was not declared, defaulting to type 'int'", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_param_promoted_not_compatible_with_prototype, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%diff{promoted type $ of K&R function parameter is not compatible with the parameter type $|promoted type of K&R function parameter is not compatible with parameter type}0,1 declared in a previous prototype", 351, SFINAE_Suppress, false, false, 2)
-DIAG(ext_partial_spec_not_more_specialized_than_primary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization is not more specialized than the primary template", 343, SFINAE_Suppress, false, false, 2)
-DIAG(ext_partial_specs_not_deducible, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization contains %select{a template parameter|template parameters}1 that cannot be deduced; this partial specialization will never be used", 717, SFINAE_Suppress, false, false, 2)
+DIAG(ext_no_declarators, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration does not declare anything", 410, SFINAE_Suppress, false, false, 2)
+DIAG(ext_no_named_members_in_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{struct|union}0 without named members is a GNU extension", 268, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nonclass_type_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-class friend type %0 is a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_noreturn_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared _Noreturn", 367, SFINAE_Suppress, false, false, 2)
+DIAG(ext_offsetof_non_pod_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-POD type %0", 345, SFINAE_Suppress, false, false, 2)
+DIAG(ext_offsetof_non_standardlayout_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-standard-layout type %0", 345, SFINAE_Suppress, false, false, 2)
+DIAG(ext_omp_loop_not_canonical_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')", 510, SFINAE_Suppress, false, false, 11)
+DIAG(ext_opencl_ext_vector_type_rgba_selector, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "vector component name '%0' is an OpenCL version 2.2 feature", 508, SFINAE_Suppress, false, false, 2)
+DIAG(ext_operator_new_delete_declared_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "replacement function %0 cannot be declared 'inline'", 332, SFINAE_Suppress, false, false, 2)
+DIAG(ext_out_of_line_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "out-of-line declaration of a member must be a definition", 514, SFINAE_Suppress, false, false, 2)
+DIAG(ext_out_of_line_qualified_id_type_names_constructor, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ specifies that qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context, despite preceding %select{'typename'|'template'}2 keyword", 329, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_override_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification of overriding function is more lax than base version", 387, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_default_argument_redefinition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of default argument", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_not_declared, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "parameter %0 was not declared, defaulting to type 'int'", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_promoted_not_compatible_with_prototype, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%diff{promoted type $ of K&R function parameter is not compatible with the parameter type $|promoted type of K&R function parameter is not compatible with parameter type}0,1 declared in a previous prototype", 355, SFINAE_Suppress, false, false, 2)
+DIAG(ext_partial_spec_not_more_specialized_than_primary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization is not more specialized than the primary template", 347, SFINAE_Suppress, false, false, 2)
+DIAG(ext_partial_specs_not_deducible, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization contains %select{a template parameter|template parameters}1 that cannot be deduced; this partial specialization will never be used", 727, SFINAE_Suppress, false, false, 2)
 DIAG(ext_plain_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "plain '_Complex' requires a type specifier; assuming '_Complex double'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_pointer_to_const_ref_member_on_rvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is a C++2a extension", 98, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_predef_outside_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "predefined identifier is only valid inside function", 543, SFINAE_Suppress, false, false, 2)
-DIAG(ext_pseudo_dtor_on_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pseudo-destructors on type void are a Microsoft extension", 399, SFINAE_Suppress, false, false, 2)
-DIAG(ext_pure_function_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function definition with pure-specifier is a Microsoft extension", 392, SFINAE_Suppress, false, false, 2)
-DIAG(ext_redefinition_of_typedef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of typedef %0 is a C11 feature", 672, SFINAE_Suppress, false, false, 2)
-DIAG(ext_register_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow 'register' storage class specifier", 564, SFINAE_Suppress, false, false, 2)
-DIAG(ext_retained_language_linkage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "friend function %0 retaining previous language linkage is an extension", 571, SFINAE_Suppress, false, false, 2)
-DIAG(ext_return_has_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{void function|void method|constructor|destructor}1 %0 should not return a value", 575, SFINAE_Suppress, false, false, 2)
-DIAG(ext_return_has_void_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "void %select{function|method|block}1 %0 should not return void expression", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_return_missing_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 575, SFINAE_Suppress, false, false, 2)
-DIAG(ext_rvalue_to_reference_access_ctor, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++98 requires an accessible copy constructor for class %2 when binding a reference to a temporary; was %select{private|protected}0", 57, SFINAE_AccessControl, false, false, 2)
-DIAG(ext_rvalue_to_reference_temp_copy_no_viable, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1; C++98 requires a copy constructor when binding a reference to a temporary", 57, SFINAE_Suppress, false, false, 2)
-DIAG(ext_sizeof_alignof_function_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a function type", 530, SFINAE_Suppress, false, false, 2)
-DIAG(ext_sizeof_alignof_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a void type", 530, SFINAE_Suppress, false, false, 2)
-DIAG(ext_standalone_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' is not permitted on a declaration of a type", 405, SFINAE_Suppress, false, false, 2)
-DIAG(ext_star_this_lambda_capture_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "capture of '*this' by copy is a C++17 extension", 91, SFINAE_Suppress, false, false, 3)
-DIAG(ext_static_data_member_in_union, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static data member %0 in union is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_static_non_static, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaring non-static %0 as static is a Microsoft extension", 393, SFINAE_Suppress, false, false, 2)
-DIAG(ext_static_out_of_line, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'static' can only be specified inside the class definition", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_string_literal_operator_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "string literal operator templates are a GNU extension", 274, SFINAE_Suppress, false, false, 2)
-DIAG(ext_subscript_non_lvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 does not allow subscripting non-lvalue array", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pointer_to_const_ref_member_on_rvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is a C++2a extension", 99, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_predef_outside_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "predefined identifier is only valid inside function", 551, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pseudo_dtor_on_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pseudo-destructors on type void are a Microsoft extension", 404, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pure_function_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function definition with pure-specifier is a Microsoft extension", 397, SFINAE_Suppress, false, false, 2)
+DIAG(ext_redefinition_of_typedef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of typedef %0 is a C11 feature", 681, SFINAE_Suppress, false, false, 2)
+DIAG(ext_register_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow 'register' storage class specifier", 572, SFINAE_Suppress, false, false, 2)
+DIAG(ext_retained_language_linkage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "friend function %0 retaining previous language linkage is an extension", 579, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_has_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{void function|void method|constructor|destructor}1 %0 should not return a value", 583, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_has_void_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "void %select{function|method|block}1 %0 should not return void expression", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_missing_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 583, SFINAE_Suppress, false, false, 2)
+DIAG(ext_rvalue_to_reference_access_ctor, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++98 requires an accessible copy constructor for class %2 when binding a reference to a temporary; was %select{private|protected}0", 58, SFINAE_AccessControl, false, false, 2)
+DIAG(ext_rvalue_to_reference_temp_copy_no_viable, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1; C++98 requires a copy constructor when binding a reference to a temporary", 58, SFINAE_Suppress, false, false, 2)
+DIAG(ext_sizeof_alignof_function_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a function type", 538, SFINAE_Suppress, false, false, 2)
+DIAG(ext_sizeof_alignof_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a void type", 538, SFINAE_Suppress, false, false, 2)
+DIAG(ext_standalone_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' is not permitted on a declaration of a type", 410, SFINAE_Suppress, false, false, 2)
+DIAG(ext_star_this_lambda_capture_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "capture of '*this' by copy is a C++17 extension", 92, SFINAE_Suppress, false, false, 3)
+DIAG(ext_static_data_member_in_union, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static data member %0 in union is a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_static_non_static, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaring non-static %0 as static is a Microsoft extension", 398, SFINAE_Suppress, false, false, 2)
+DIAG(ext_static_out_of_line, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'static' can only be specified inside the class definition", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_string_literal_operator_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "string literal operator templates are a GNU extension", 278, SFINAE_Suppress, false, false, 2)
+DIAG(ext_subscript_non_lvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 does not allow subscripting non-lvalue array", 535, SFINAE_Suppress, false, false, 2)
 DIAG(ext_template_arg_extra_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "address non-type template argument cannot be surrounded by parentheses", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_arg_local_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses local type %0", 357, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_arg_object_internal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_arg_unnamed_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses unnamed type", 699, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'template' keyword outside of a template", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_parameter_default_in_function_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default template arguments for a function template are a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_local_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses local type %0", 361, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_object_internal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_unnamed_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses unnamed type", 709, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'template' keyword outside of a template", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_parameter_default_in_function_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default template arguments for a function template are a C++11 extension", 80, SFINAE_Suppress, false, false, 2)
 DIAG(ext_typecheck_addrof_temporary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "taking the address of a temporary object of type %0", 13, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_addrof_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids taking the address of an expression of type 'void'", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_base_super, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter type %diff{$ does not match super class method parameter type $|does not match super class method parameter type}0,1", 641, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cast_nonscalar, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids casting nonscalar type %0 to the same type", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cast_to_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast to union type is a GNU extension", 275, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_comparison_of_distinct_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison of distinct pointer types%diff{ ($ and $)|}0,1", 128, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_comparison_of_fptr_to_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "equality comparison between function pointer and void pointer (%0 and %1)", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_comparison_of_pointer_integer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison between pointer and integer (%0 and %1)", 532, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_addrof_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids taking the address of an expression of type 'void'", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_base_super, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter type %diff{$ does not match super class method parameter type $|does not match super class method parameter type}0,1", 649, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cast_nonscalar, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids casting nonscalar type %0 to the same type", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cast_to_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast to union type is a GNU extension", 279, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_distinct_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison of distinct pointer types%diff{ ($ and $)|}0,1", 129, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_fptr_to_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "equality comparison between function pointer and void pointer (%0 and %1)", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_pointer_integer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison between pointer and integer (%0 and %1)", 540, SFINAE_Suppress, false, false, 2)
 DIAG(ext_typecheck_cond_incompatible_operands, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible operand types (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cond_incompatible_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer type mismatch%diff{ ($ and $)|}0,1", 535, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cond_one_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids conditional expressions with only one void side", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cond_pointer_integer_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer/integer type mismatch in conditional expression%diff{ ($ and $)|}0,1", 130, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_discards_qualifiers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers", 311, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_incompatible_function_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 307, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_incompatible_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 310, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_incompatible_pointer_sign, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types with different sign", 533, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_int_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 330, SFINAE_SubstitutionFailure, false, false, 24)
-DIAG(ext_typecheck_convert_pointer_int, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 330, SFINAE_Suppress, false, false, 24)
-DIAG(ext_typecheck_convert_pointer_void_func, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer", 527, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_decl_incomplete_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "tentative definition of variable with internal linkage has incomplete non-array type %0", 660, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_indirection_through_void_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow indirection on operand of type %0", 752, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_ordered_comparison_of_function_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison of function pointers (%0 and %1)", 505, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_ordered_comparison_of_pointer_and_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ordered comparison between pointer and zero (%0 and %1) is an extension", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_incompatible_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer type mismatch%diff{ ($ and $)|}0,1", 543, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_one_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids conditional expressions with only one void side", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_pointer_integer_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer/integer type mismatch in conditional expression%diff{ ($ and $)|}0,1", 131, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_discards_qualifiers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers", 315, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_function_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 311, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 314, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_pointer_sign, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types with different sign", 541, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_int_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 334, SFINAE_SubstitutionFailure, false, false, 25)
+DIAG(ext_typecheck_convert_pointer_int, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 334, SFINAE_Suppress, false, false, 25)
+DIAG(ext_typecheck_convert_pointer_void_func, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_decl_incomplete_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "tentative definition of variable with internal linkage has incomplete non-array type %0", 669, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_indirection_through_void_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow indirection on operand of type %0", 762, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_ordered_comparison_of_function_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison of function pointers (%0 and %1)", 513, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_ordered_comparison_of_pointer_and_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ordered comparison between pointer and zero (%0 and %1) is an extension", 535, SFINAE_Suppress, false, false, 2)
 DIAG(ext_typecheck_ordered_comparison_of_pointer_integer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison between pointer and integer (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_zero_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "zero size arrays are an extension", 759, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typedef_without_a_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "typedef requires a name", 405, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typename_missing, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing 'typename' prior to dependent type name '%0%1'", 673, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typename_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'typename' occurs outside of a template", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_undeclared_unqual_id_with_dependent_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of undeclared identifier %0; unqualified lookup into dependent bases of class template %1 is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
-DIAG(ext_undefined_internal_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ requires a definition in this translation unit for %select{function|variable}0 %q1 because its type does not have linkage", 682, SFINAE_Suppress, false, false, 2)
-DIAG(ext_unelaborated_friend_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unelaborated friend declaration is a C++11 extension; specify '%select{struct|interface|union|class|enum}0' to befriend %1", 79, SFINAE_Suppress, false, false, 2)
-DIAG(ext_union_member_of_reference_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "union member %0 has reference type %1, which is a Microsoft extension", 396, SFINAE_Suppress, false, false, 2)
-DIAG(ext_use_out_of_scope_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of out-of-scope declaration of %0%select{| whose type is not compatible with that of an implicit declaration}1", 507, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_zero_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "zero size arrays are an extension", 769, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typedef_without_a_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "typedef requires a name", 410, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typename_missing, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing 'typename' prior to dependent type name '%0%1'", 682, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typename_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'typename' occurs outside of a template", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_undeclared_unqual_id_with_dependent_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of undeclared identifier %0; unqualified lookup into dependent bases of class template %1 is a Microsoft extension", 400, SFINAE_Suppress, false, false, 2)
+DIAG(ext_undefined_internal_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ requires a definition in this translation unit for %select{function|variable}0 %q1 because its type does not have linkage", 691, SFINAE_Suppress, false, false, 2)
+DIAG(ext_unelaborated_friend_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unelaborated friend declaration is a C++11 extension; specify '%select{struct|interface|union|class|enum}0' to befriend %1", 80, SFINAE_Suppress, false, false, 2)
+DIAG(ext_union_member_of_reference_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "union member %0 has reference type %1, which is a Microsoft extension", 401, SFINAE_Suppress, false, false, 2)
+DIAG(ext_use_out_of_scope_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of out-of-scope declaration of %0%select{| whose type is not compatible with that of an implicit declaration}1", 515, SFINAE_Suppress, false, false, 2)
 DIAG(ext_using_undefined_std, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using directive refers to implicitly-defined namespace 'std'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_variable_sized_type_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 not at the end of a struct or class is a GNU extension", 276, SFINAE_Suppress, false, false, 2)
-DIAG(ext_variable_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable templates are a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
-DIAG(ext_variadic_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared variadic", 363, SFINAE_Suppress, false, false, 2)
-DIAG(ext_vla, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length arrays are a C99 feature", 751, SFINAE_Suppress, false, false, 2)
-DIAG(ext_vla_folded_to_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length array folded to constant array as an extension", 267, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variable_sized_type_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 not at the end of a struct or class is a GNU extension", 280, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variable_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable templates are a C++14 extension", 88, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variadic_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared variadic", 367, SFINAE_Suppress, false, false, 2)
+DIAG(ext_vla, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length arrays are a C99 feature", 761, SFINAE_Suppress, false, false, 2)
+DIAG(ext_vla_folded_to_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length array folded to constant array as an extension", 271, SFINAE_Suppress, false, false, 2)
 DIAG(note_access_constrained_by_path, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constrained by %select{|implicitly }1%select{private|protected}0 inheritance here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_access_natural, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|implicitly }1declared %select{private|protected}0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_access_protected_restricted_ctordtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "protected %select{constructor|destructor}0 can only be used to %select{construct|destroy}0 a base class subobject", 0, SFINAE_Suppress, false, false, 2)
@@ -2166,6 +2214,7 @@
 DIAG(note_ambiguous_inherited_constructor_using, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "inherited from base class %0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ambiguous_member_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member found by ambiguous name lookup", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ambiguous_type_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because of ambiguity in conversion %diff{of $ to $|between types}0,1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_anonymous_namespace, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "anonymous namespace begins here", 0, SFINAE_Suppress, false, false, 13)
 DIAG(note_arc_bridge, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use __bridge to convert directly (no change in ownership)", 0, SFINAE_Suppress, false, false, 7)
 DIAG(note_arc_bridge_retained, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use %select{__bridge_retained|CFBridgingRetain call}1 to make an ARC object available as a +1 %0", 0, SFINAE_Suppress, false, false, 7)
 DIAG(note_arc_bridge_transfer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use %select{__bridge_transfer|CFBridgingRelease call}1 to transfer ownership of a +1 %0 into ARC", 0, SFINAE_Suppress, false, false, 7)
@@ -2177,7 +2226,7 @@
 DIAG(note_arc_gained_method_convention, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration in interface is not in the '%select{alloc|copy|init|new}0' family because %select{its result type is not an object pointer|its result type is unrelated to its receiver type}1", 0, SFINAE_Suppress, false, false, 5)
 DIAG(note_arc_init_returns_unrelated, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "init method must return a type related to its receiver type", 0, SFINAE_Suppress, false, false, 10)
 DIAG(note_arc_lost_method_convention, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration in interface", 0, SFINAE_Suppress, false, false, 5)
-DIAG(note_arc_retain_cycle_owner, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "block will be retained by %select{the captured object|an object strongly retained by the captured object}0", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_arc_retain_cycle_owner, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "block will be retained by %select{the captured object|an object strongly retained by the captured object}0", 0, SFINAE_Suppress, false, false, 27)
 DIAG(note_arc_weak_also_accessed_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "also accessed here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_arc_weak_disabled, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration uses __weak, but ARC is disabled", 0, SFINAE_Suppress, false, false, 10)
 DIAG(note_arc_weak_no_runtime, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration uses __weak, which the current deployment target does not support", 0, SFINAE_Suppress, false, false, 10)
@@ -2226,7 +2275,7 @@
 DIAG(note_cuda_ovl_candidate_target_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: target attributes do not match", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_cxx2a_compat_utf8_string_remove_u8, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove 'u8' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_decl_unguarded_availability_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "annotate %select{%1|anonymous %1}0 with an availability attribute to silence this warning", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_declaration_not_a_prototype, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "this declaration is not a prototype; add 'void' to make it a prototype for a zero-parameter function", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_declaration_not_a_prototype, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "this declaration is not a prototype; add %select{'void'|parameter declarations}0 to make it %select{a prototype for a zero-parameter function|one}0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_declare_parameter_strong, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools", 0, SFINAE_Suppress, false, false, 5)
 DIAG(note_declared_coroutine_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function is a coroutine due to use of '%0' here", 0, SFINAE_Suppress, false, false, 14)
 DIAG(note_declared_nonnull, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared %select{'returns_nonnull'|'nonnull'}0 here", 0, SFINAE_Suppress, false, false, 2)
@@ -2254,6 +2303,7 @@
 DIAG(note_deprecated_this_capture, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add an explicit capture of 'this' to capture '*this' by reference", 0, SFINAE_Suppress, false, false, 3)
 DIAG(note_destructor_type_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type %0 is declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_due_to_dllexported_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "due to %0 being dllexported%select{|; try compiling in C++11 mode}1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_duplicate_asm_operand_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "asm operand name \"%0\" first referenced here", 0, SFINAE_Suppress, false, false, 12)
 DIAG(note_duplicate_element, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "element %0 also has value %1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_empty_body_on_separate_line, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "put the semicolon on a separate line to silence this warning", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_empty_parens_default_ctor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove parentheses to declare a variable", 0, SFINAE_Suppress, false, false, 2)
@@ -2290,6 +2340,7 @@
 DIAG(note_exits_seh_finally, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits __finally block", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_exits_seh_try, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits __try block", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_exits_temporary_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits scope of lifetime-extended temporary with non-trivial destructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_bool_resolved_to_true, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit(bool) specifier resolved to true", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_explicit_ctor_deduction_guide_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit %select{constructor|deduction guide}0 declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_explicit_instantiation_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit instantiation candidate function %q0 template here %1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_explicit_instantiation_definition_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit instantiation definition is here", 0, SFINAE_Suppress, false, false, 2)
@@ -2297,6 +2348,7 @@
 DIAG(note_explicit_specialization_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit specialization declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_explicit_template_arg_substitution_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while substituting explicitly-specified template arguments into function template %0 %1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_explicit_template_spec_does_not_need_header, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'template<>' header not required for explicitly-specialized class %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_export, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "export block begins here", 0, SFINAE_Suppress, false, false, 13)
 DIAG(note_extern_c_begins_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "extern \"C\" language linkage specification begins here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_extern_c_global_conflict, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared %select{in global scope|with C language linkage}0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_fallthrough_insert_semi_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you forget ';'?", 0, SFINAE_Suppress, false, false, 2)
@@ -2321,6 +2373,7 @@
 DIAG(note_function_to_function_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "suffix with parentheses to turn this into a function call", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_function_warning_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "prefix with the address-of operator to silence this warning", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_getter_unavailable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "or because setter is declared here, but no getter method %0 is found", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_global_module_introducer_missing, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add 'module;' to the start of the file to introduce a global module fragment", 0, SFINAE_Suppress, false, false, 13)
 DIAG(note_goto_ms_asm_label, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "inline assembly label %0 declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_guarded_by_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "Guarded_by declared here.", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_hidden_overloaded_virtual_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "hidden overloaded virtual function %q0 declared here%select{|: different classes%diff{ ($ vs $)|}2,3|: different number of parameters (%2 vs %3)|: type mismatch at %ordinal2 parameter%diff{ ($ vs $)|}3,4|: different return type%diff{ ($ vs $)|}2,3|: different qualifiers (%2 vs %3)|: different exception specifications}1", 0, SFINAE_Suppress, false, false, 2)
@@ -2343,7 +2396,7 @@
 DIAG(note_in_reference_temporary_list_initializer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in initialization of temporary of type %0 created to list-initialize this reference", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_include_header_or_declare, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "include the header <%0> or explicitly provide a declaration for '%1'", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_incomplete_class_and_qualified_id, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conformance of forward class %0 to protocol %1 can not be confirmed", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_indirect_goto_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "possible target of indirect goto statement", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_indirect_goto_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "possible target of %select{indirect|asm}0 goto statement", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_indirection_through_null, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider using __builtin_trap() or qualifying pointer with 'volatile'", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_inequality_comparison_to_or_assign, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '|=' to turn this inequality comparison into an or-assignment", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_init_list_narrowing_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert an explicit cast to silence this issue", 0, SFINAE_Suppress, false, false, 2)
@@ -2417,16 +2470,17 @@
 DIAG(note_nontrivial_virtual_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "destructor for %0 is not trivial because it is virtual", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_noreturn_missing_first_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration missing '[[noreturn]]' attribute is here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_not_found_by_two_phase_lookup, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 should be declared prior to the call site%select{| or in %2| or in an associated namespace of one of its arguments}1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_nullability_fix_it, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert '%select{_Nonnull|_Nullable|_Null_unspecified}0' if the %select{pointer|block pointer|member pointer|array parameter}1 %select{should never be null|may be null|should not declare nullability}0", 0, SFINAE_Suppress, false, false, 19)
-DIAG(note_nullability_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 specified here", 0, SFINAE_Suppress, false, false, 19)
-DIAG(note_nullability_type_specifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use nullability type specifier %0 to affect the innermost pointer type of %1", 0, SFINAE_Suppress, false, false, 19)
+DIAG(note_not_module_interface_add_export, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add 'export' here if this is intended to be a module interface unit", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_nullability_fix_it, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert '%select{_Nonnull|_Nullable|_Null_unspecified}0' if the %select{pointer|block pointer|member pointer|array parameter}1 %select{should never be null|may be null|should not declare nullability}0", 0, SFINAE_Suppress, false, false, 20)
+DIAG(note_nullability_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 specified here", 0, SFINAE_Suppress, false, false, 20)
+DIAG(note_nullability_type_specifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use nullability type specifier %0 to affect the innermost pointer type of %1", 0, SFINAE_Suppress, false, false, 20)
 DIAG(note_objc_circular_container_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_objc_designated_init_marked_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method marked as designated initializer of the class here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_objc_literal_comparison_isequal, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'isEqual:' instead", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_objc_literal_method_param, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{first|second|third}0 parameter has unexpected type %1 (should be %2)", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_objc_literal_method_return, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method returns unexpected type %0 (should be an object type)", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_objc_needs_superclass, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a super class to fix this problem", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_objc_type_param_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type parameter %0 declared here", 0, SFINAE_Suppress, false, false, 20)
+DIAG(note_objc_type_param_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type parameter %0 declared here", 0, SFINAE_Suppress, false, false, 21)
 DIAG(note_objc_unsafe_perform_selector_method_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method %0 that returns %1 declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_omp_atomic_capture, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression}0", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_atomic_previous_clause, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' clause used here", 0, SFINAE_Suppress, false, false, 11)
@@ -2436,6 +2490,7 @@
 DIAG(note_omp_conversion_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to %select{integral|enumeration}0 type %1 declared here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_critical_hint_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|previous }0'hint' clause with value '%1'", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_critical_no_hint, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|previous }0directive with no 'hint' clause specified", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_default_dsa_none, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit data sharing attribute requested here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_explicit_dsa, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "defined as %0", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_implicit_dsa, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "implicitly determined as %0", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_invalid_length_on_this_ptr_mapping, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "expected length on mapping of 'this' array section expression to be '1'", 0, SFINAE_Suppress, false, false, 11)
@@ -2447,11 +2502,13 @@
 DIAG(note_omp_nowait_clause_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'nowait' clause is here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_ordered_param, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'ordered' clause with specified parameter", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_predetermined_dsa, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{static data member is predetermined as shared|variable with static storage duration is predetermined as shared|loop iteration variable is predetermined as private|loop iteration variable is predetermined as linear|loop iteration variable is predetermined as lastprivate|constant variable is predetermined as shared|global variable is predetermined as shared|non-shared variable in a task construct is predetermined as firstprivate|variable with automatic storage duration is predetermined as private}0%select{|; perhaps you forget to enclose 'omp %2' directive into a parallel or another task region?}1", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_previous_allocator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous allocator is specified here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_previous_critical_region, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous 'critical' region starts here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_previous_grainsize_num_tasks, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' clause is specified here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_previous_named_if_clause, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous clause with directive name modifier specified here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_previous_reduction_identifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously marked as task_reduction with different reduction operation", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_referenced, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously referenced here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_requires_encountered_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "target previously encountered here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_requires_previous_clause, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 clause previously used here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_omp_task_predetermined_firstprivate_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "predetermined as a firstprivate in a task construct here", 0, SFINAE_Suppress, false, false, 11)
 DIAG(note_opencl_typedef_access_qualifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously declared '%0' here", 0, SFINAE_Suppress, false, false, 2)
@@ -2489,8 +2546,10 @@
 DIAG(note_ovl_candidate_disabled_by_requirement, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: requirement '%0' was not satisfied%1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_explicit_arg_mismatch_named, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: invalid explicitly-specified argument for template parameter %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_explicit_arg_mismatch_unnamed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: invalid explicitly-specified argument for %ordinal0 template parameter", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_explicit_forbidden, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %0 ignored: cannot be explicit", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_has_pass_object_size_params, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate address cannot be taken because parameter %0 has pass_object_size attribute", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_illegal_constructor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{constructor|template}0 ignored: instantiation %select{takes|would take}0 its own class type by value", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_illegal_constructor_adrspace_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate constructor ignored: cannot be used to construct an object in address space %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_incomplete_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: couldn't infer template argument %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_incomplete_deduction_pack, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced too few arguments for expanded pack %0; no argument for %ordinal1 expanded parameter in deduced argument pack %2", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_inconsistent_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced conflicting %select{types|values|templates}0 for parameter %1%diff{ ($ vs. $)|}2,3", 0, SFINAE_Suppress, false, false, 2)
@@ -2540,6 +2599,7 @@
 DIAG(note_printf_c_str, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to call the %0 method?", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_prior_template_arg_substitution, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while substituting prior template arguments into %select{non-type|template}0 template parameter%1 %2", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_private_extern, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use __attribute__((visibility(\"hidden\"))) attribute instead", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_private_module_fragment, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "private module fragment begins here", 0, SFINAE_Suppress, false, false, 13)
 DIAG(note_property_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property %0 is declared %select{deprecated|unavailable|partial}1 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_property_declare, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_property_synthesize, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property synthesized here", 0, SFINAE_Suppress, false, false, 2)
@@ -2584,10 +2644,10 @@
 DIAG(note_reference_is_return_value, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 returns a reference", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_referenced_class_template, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class template declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_reinterpret_updowncast_use_static, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'static_cast' to adjust the pointer correctly while %select{upcasting|downcasting}0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_related_result_type_explicit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{overridden|current}0 method is explicitly declared 'instancetype'%select{| and is expected to return an instance of its class type}0", 0, SFINAE_Suppress, false, false, 17)
-DIAG(note_related_result_type_family, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{overridden|current}0 method is part of the '%select{|alloc|copy|init|mutableCopy|new|autorelease|dealloc|finalize|release|retain|retainCount|self}1' method family%select{| and is expected to return an instance of its class type}0", 0, SFINAE_Suppress, false, false, 17)
-DIAG(note_related_result_type_inferred, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{class|instance}0 method %1 is assumed to return an instance of its receiver type (%2)", 0, SFINAE_Suppress, false, false, 17)
-DIAG(note_related_result_type_overridden, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "overridden method returns an instance of its class type", 0, SFINAE_Suppress, false, false, 17)
+DIAG(note_related_result_type_explicit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{overridden|current}0 method is explicitly declared 'instancetype'%select{| and is expected to return an instance of its class type}0", 0, SFINAE_Suppress, false, false, 18)
+DIAG(note_related_result_type_family, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{overridden|current}0 method is part of the '%select{|alloc|copy|init|mutableCopy|new|autorelease|dealloc|finalize|release|retain|retainCount|self}1' method family%select{| and is expected to return an instance of its class type}0", 0, SFINAE_Suppress, false, false, 18)
+DIAG(note_related_result_type_inferred, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{class|instance}0 method %1 is assumed to return an instance of its receiver type (%2)", 0, SFINAE_Suppress, false, false, 18)
+DIAG(note_related_result_type_overridden, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "overridden method returns an instance of its class type", 0, SFINAE_Suppress, false, false, 18)
 DIAG(note_remove_abs, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove the call to '%0' since unsigned values cannot be negative", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_remove_max_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove call to max function and unsigned zero argument", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_remove_move, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove std::move call here", 0, SFINAE_Suppress, false, false, 2)
@@ -2599,6 +2659,7 @@
 DIAG(note_silence_aligned_allocation_unavailable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_specialized_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "attempt to specialize declaration here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_specialized_entity, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicitly specialized declaration is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_static_for_internal_linkage, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declare 'static' if the %select{variable|function}0 is not intended to be used outside of this translation unit", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_string_plus_scalar_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use array indexing to silence this warning", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_strlcpycat_wrong_size, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "change size argument to be the size of the destination", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_strncat_wrong_size, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "change the argument to be the free space in the destination buffer minus the terminating null byte", 0, SFINAE_Suppress, false, false, 2)
@@ -2642,6 +2703,7 @@
 DIAG(note_thread_warning_in_fun, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "Thread warning in function %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_throw_in_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{destructor|deallocator}0 has a %select{non-throwing|implicit non-throwing}1 exception specification", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_throw_in_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function declared non-throwing here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_throw_underaligned_obj, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "required alignment of type %0 (%1 bytes) is larger than the supported alignment of C++ exception objects on this target (%2 bytes)", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_transparent_union_first_field_size_align, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{alignment|size}0 of first field is %1 bits", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_type_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is incomplete", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_typecheck_assign_const, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{function %1 which returns const-qualified type %2 declared here|variable %1 declared const here|%select{non-|}1static data member %2 declared const here|member function %q1 is declared const here|%select{|nested }1data member %2 declared const here}0", 0, SFINAE_Suppress, false, false, 2)
@@ -2684,776 +2746,791 @@
 DIAG(warn_abs_too_small, CLASS_WARNING, (unsigned)diag::Severity::Warning, "absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value", 8, SFINAE_Suppress, false, false, 2)
 DIAG(warn_abstract_final_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "abstract class is marked '%select{final|sealed}0'", 9, SFINAE_Suppress, false, false, 2)
 DIAG(warn_abstract_vbase_init_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initializer for virtual base class %0 of abstract class %1 will never be used", 10, SFINAE_Suppress, false, false, 2)
-DIAG(warn_access_decl_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "access declarations are deprecated; use using declarations instead", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_access_decl_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "access declarations are deprecated; use using declarations instead", 165, SFINAE_Suppress, false, false, 28)
 DIAG(warn_accessor_property_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type of property %0 does not match type of accessor %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_acquire_requires_negative_cap, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' requires negative capability '%2'", 665, SFINAE_Suppress, false, false, 2)
-DIAG(warn_acquired_before, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' must be acquired before '%2'", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_acquired_before_after_cycle, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Cycle in acquired_before/after dependencies, starting with '%0'", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_addition_in_bitshift, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '%0' has lower precedence than '%1'; '%1' will be evaluated first", 599, SFINAE_Suppress, false, false, 2)
-DIAG(warn_address_of_reference_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", 678, SFINAE_Suppress, false, false, 24)
-DIAG(warn_address_of_reference_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 657, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquire_requires_negative_cap, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' requires negative capability '%2'", 674, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquired_before, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' must be acquired before '%2'", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquired_before_after_cycle, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Cycle in acquired_before/after dependencies, starting with '%0'", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_addition_in_bitshift, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '%0' has lower precedence than '%1'; '%1' will be evaluated first", 607, SFINAE_Suppress, false, false, 2)
+DIAG(warn_address_of_reference_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", 687, SFINAE_Suppress, false, false, 25)
+DIAG(warn_address_of_reference_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 666, SFINAE_Suppress, false, false, 2)
 DIAG(warn_alloca_align_alignof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to __builtin_alloca_with_align is supposed to be in bits", 16, SFINAE_Suppress, false, false, 2)
 DIAG(warn_ambiguous_suitable_delete_function_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple suitable %0 functions for %1; no 'operator delete' function will be invoked if initialization throws an exception", 17, SFINAE_Suppress, false, false, 2)
-DIAG(warn_anon_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of anonymous bit-field (%0 bits) exceeds width of its type; value will be truncated to %1 bit%s1", 61, SFINAE_Suppress, false, false, 2)
-DIAG(warn_arc_lifetime_result_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", 287, SFINAE_Suppress, false, false, 5)
+DIAG(warn_anon_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of anonymous bit-field (%0 bits) exceeds width of its type; value will be truncated to %1 bit%s1", 62, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_lifetime_result_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", 291, SFINAE_Suppress, false, false, 5)
 DIAG(warn_arc_literal_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{array literal|dictionary literal|numeric literal|boxed expression|<should not happen>|block literal}0 to a weak %select{property|variable}1; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
 DIAG(warn_arc_object_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2", 26, SFINAE_Suppress, false, false, 5)
 DIAG(warn_arc_perform_selector_leaks, CLASS_WARNING, (unsigned)diag::Severity::Warning, "performSelector may cause a leak because its selector is unknown", 27, SFINAE_Suppress, false, false, 2)
 DIAG(warn_arc_possible_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 may be accessed multiple times in this %select{function|method|block|lambda}2 and may be unpredictably set to nil; assign to a strong variable to keep the object alive", 25, SFINAE_Suppress, false, false, 2)
 DIAG(warn_arc_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 is accessed multiple times in this %select{function|method|block|lambda}2 but may be unpredictably set to nil; assign to a strong variable to keep the object alive", 28, SFINAE_Suppress, false, false, 2)
-DIAG(warn_arc_retain_cycle, CLASS_WARNING, (unsigned)diag::Severity::Warning, "capturing %0 strongly in this block is likely to lead to a retain cycle", 29, SFINAE_Suppress, false, false, 26)
+DIAG(warn_arc_retain_cycle, CLASS_WARNING, (unsigned)diag::Severity::Warning, "capturing %0 strongly in this block is likely to lead to a retain cycle", 29, SFINAE_Suppress, false, false, 27)
 DIAG(warn_arc_retained_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
 DIAG(warn_arc_retained_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to unsafe property; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
-DIAG(warn_arc_strong_pointer_objc_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter of type %0 with no explicit ownership", 217, SFINAE_Suppress, false, false, 10)
+DIAG(warn_arc_strong_pointer_objc_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter of type %0 with no explicit ownership", 218, SFINAE_Suppress, false, false, 10)
 DIAG(warn_argument_invalid_range, CLASS_WARNING, (unsigned)diag::Severity::Error, "argument value %0 is outside the valid range [%1, %2]", 31, SFINAE_Suppress, false, false, 2)
-DIAG(warn_arm_interrupt_calling_convention, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to function without interrupt attribute could clobber interruptee's VFP registers", 220, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arm_interrupt_calling_convention, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to function without interrupt attribute could clobber interruptee's VFP registers", 223, SFINAE_Suppress, false, false, 2)
 DIAG(warn_array_index_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is past the end of the array (which contains %1 element%s2)", 32, SFINAE_Suppress, false, false, 2)
 DIAG(warn_array_index_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is before the beginning of the array", 32, SFINAE_Suppress, false, false, 2)
 DIAG(warn_asm_label_on_auto_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored asm label '%0' on automatic variable", 0, SFINAE_Suppress, false, false, 12)
 DIAG(warn_asm_mismatched_size_modifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "value size does not match register size specified by the constraint and modifier", 36, SFINAE_Suppress, false, false, 12)
 DIAG(warn_assume_side_effects, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the argument to %0 has side effects that will be discarded", 38, SFINAE_Suppress, false, false, 2)
-DIAG(warn_at_available_unchecked_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", 709, SFINAE_Suppress, false, false, 2)
-DIAG(warn_atl_uuid_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying 'uuid' as an ATL attribute is deprecated; use __declspec instead", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_at_available_unchecked_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", 719, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atl_uuid_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying 'uuid' as an ATL attribute is deprecated; use __declspec instead", 167, SFINAE_Suppress, false, false, 28)
 DIAG(warn_atomic_implicit_seq_cst, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary", 42, SFINAE_Suppress, false, false, 2)
 DIAG(warn_atomic_op_has_invalid_memory_order, CLASS_WARNING, (unsigned)diag::Severity::Warning, "memory order argument to atomic operation is invalid", 43, SFINAE_Suppress, false, false, 2)
 DIAG(warn_atomic_property_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2", 45, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attr_abi_tag_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'abi_tag' attribute on %select{non-inline|anonymous}0 namespace ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attr_on_unconsumable_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consumed analysis attribute is attached to member of class '%0' which isn't marked as consumable", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_address_multiple_identical_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple identical address spaces specified for type", 193, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_after_definition_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 after definition is ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_argument_n_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute parameter %1 is negative and will be ignored", 147, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dll_instantiated_base_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", 711, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dll_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redeclaration of %q0 should not add %q1 attribute", 183, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dllexport_explicit_instantiation_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation declaration should not be 'dllexport'", 184, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dllimport_static_field_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of dllimport static field", 185, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_iboutlet, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute can only be applied to instance variables or properties", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_ignored_for_field_of_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored for field of type %1", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_ignored_on_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored on inline function", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_invalid_on_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' attribute cannot be specified on a definition", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_nonnull_no_pointers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute applied to function with no pointer arguments", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_nonnull_parm_no_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute when used on parameters takes no arguments", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_not_on_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored when parsing type", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attr_abi_tag_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'abi_tag' attribute on %select{non-inline|anonymous}0 namespace ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attr_on_unconsumable_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consumed analysis attribute is attached to member of class '%0' which isn't marked as consumable", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_address_multiple_identical_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple identical address spaces specified for type", 194, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_after_definition_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 after definition is ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_argument_n_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute parameter %1 is negative and will be ignored", 148, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dll_instantiated_base_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", 721, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dll_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redeclaration of %q0 should not add %q1 attribute", 184, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dllexport_explicit_instantiation_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation declaration should not be 'dllexport'", 185, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dllexport_explicit_instantiation_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'dllexport' attribute ignored on explicit instantiation definition", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dllimport_static_field_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of dllimport static field", 186, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_iboutlet, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute can only be applied to instance variables or properties", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored_for_field_of_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored for field of type %1", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored_on_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored on inline function", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_invalid_on_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' attribute cannot be specified on a definition", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_nonnull_no_pointers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute applied to function with no pointer arguments", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_nonnull_parm_no_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute when used on parameters takes no arguments", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_not_on_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored when parsing type", 286, SFINAE_Suppress, false, false, 2)
 DIAG(warn_attribute_packed_for_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'packed' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang", 46, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_pointer_or_reference_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to a pointer or reference (%1 is invalid)", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to%select{| constant}1 pointer arguments", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_precede_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute declaration must precede definition", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_protected_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target does not support 'protected' visibility; using 'default'", 716, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_return_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_return_pointers_refs_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers or references", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_section_on_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "section attribute is specified on redeclared variable", 578, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_sentinel_named_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute requires named arguments", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_sentinel_not_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute only supported for variadic %select{functions|blocks}0", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_type_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute argument not supported: %1", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_unknown_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown visibility %0", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_void_function_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_weak_on_field, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on a field declaration", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on an automatic variable when ARC is not enabled", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_wrong_decl_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}1", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_wrong_decl_type_str, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %1", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic when auto-synthesizing the property", 289, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_readonly_iboutlet_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "readonly IBOutlet property %0 when auto-synthesized may not work correctly with 'nib' loader", 557, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_storage_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' storage class specifier is redundant and incompatible with C++11", 75, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_synthesizing_protocol_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 declared in protocol %1", 488, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_pointer_or_reference_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to a pointer or reference (%1 is invalid)", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to%select{| constant}1 pointer arguments", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_precede_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute declaration must precede definition", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_protected_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target does not support 'protected' visibility; using 'default'", 726, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_return_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_return_pointers_refs_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers or references", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_section_drectve, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma %0(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead", 383, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_section_on_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "section attribute is specified on redeclared variable", 586, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_sentinel_named_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute requires named arguments", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_sentinel_not_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute only supported for variadic %select{functions|blocks}0", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_type_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute argument not supported: %1", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_unknown_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown visibility %0", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_void_function_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_weak_on_field, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on a field declaration", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on an automatic variable when ARC is not enabled", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_wrong_decl_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}1", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_wrong_decl_type_str, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %1", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic when auto-synthesizing the property", 293, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_readonly_iboutlet_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "readonly IBOutlet property %0 when auto-synthesized may not work correctly with 'nib' loader", 565, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_storage_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' storage class specifier is redundant and incompatible with C++11", 76, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_synthesizing_protocol_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 declared in protocol %1", 496, SFINAE_Suppress, false, false, 2)
 DIAG(warn_auto_var_is_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'auto' deduced as 'id' in declaration of %0", 51, SFINAE_Suppress, false, false, 2)
-DIAG(warn_autosynthesis_property_in_superclass, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", 486, SFINAE_Suppress, false, false, 2)
-DIAG(warn_autosynthesis_property_ivar_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", 464, SFINAE_Suppress, false, false, 2)
+DIAG(warn_autosynthesis_property_in_superclass, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", 494, SFINAE_Suppress, false, false, 2)
+DIAG(warn_autosynthesis_property_ivar_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", 470, SFINAE_Suppress, false, false, 2)
 DIAG(warn_availability_on_static_initializer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring availability attribute %select{on '+load' method|with constructor attribute|with destructor attribute}0", 52, SFINAE_Suppress, false, false, 2)
 DIAG(warn_availability_swift_unavailable_deprecated_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only 'unavailable' and 'deprecated' are supported for Swift availability", 52, SFINAE_Suppress, false, false, 2)
 DIAG(warn_availability_unknown_platform, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown platform %0 in availability macro", 52, SFINAE_Suppress, false, false, 2)
 DIAG(warn_availability_version_ordering, CLASS_WARNING, (unsigned)diag::Severity::Warning, "feature cannot be %select{introduced|deprecated|obsoleted}0 in %1 version %2 before it was %select{introduced|deprecated|obsoleted}3 in version %4; attribute ignored", 52, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bad_function_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from function call of type %0 to non-matching type %1", 55, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bad_receiver_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver type %0 is not 'id' or interface pointer, consider casting it to 'id'", 558, SFINAE_Suppress, false, false, 2)
-DIAG(warn_base_class_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "base class %0 is uninitialized when used here to access %q1", 692, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bind_ref_member_to_parameter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding reference member %0 to stack allocated %select{variable|parameter}2 %1", 151, SFINAE_Suppress, false, false, 2)
-DIAG(warn_binding_null_to_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding dereferenced null pointer to reference has undefined behavior", 455, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bitfield_too_small_for_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "bit-field %0 is not wide enough to store all enumerators of %1", 60, SFINAE_Suppress, false, false, 24)
-DIAG(warn_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", 61, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bitwise_op_in_bitwise_op, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' within '%1'", 62, SFINAE_Suppress, false, false, 2)
-DIAG(warn_block_capture_autoreleasing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "block captures an autoreleasing out-parameter, which may result in use-after-free bugs", 63, SFINAE_Suppress, false, false, 5)
-DIAG(warn_block_literal_attributes_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to omitted return type", 282, SFINAE_Suppress, false, false, 0)
-DIAG(warn_block_literal_qualifiers_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on omitted return type %1 has no effect", 287, SFINAE_Suppress, false, false, 0)
-DIAG(warn_bool_switch_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch condition has boolean value", 645, SFINAE_Suppress, false, false, 2)
-DIAG(warn_braces_around_scalar_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "braces around scalar initializer", 66, SFINAE_Suppress, false, false, 2)
-DIAG(warn_break_binds_to_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'break' is bound to loop, GCC binds it to switch", 250, SFINAE_Suppress, false, false, 2)
-DIAG(warn_builtin_unknown, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of unknown builtin %0", 296, SFINAE_Suppress, false, false, 2)
-DIAG(warn_call_to_pure_virtual_member_function_from_ctor_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to pure virtual member function %0 has undefined behavior; overrides of %0 in subclasses are not available in the %select{constructor|destructor}1 of %2", 115, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bad_function_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from function call of type %0 to non-matching type %1", 56, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bad_receiver_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver type %0 is not 'id' or interface pointer, consider casting it to 'id'", 566, SFINAE_Suppress, false, false, 2)
+DIAG(warn_base_class_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "base class %0 is uninitialized when used here to access %q1", 702, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bind_ref_member_to_parameter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding reference member %0 to stack allocated %select{variable|parameter}2 %1", 152, SFINAE_Suppress, false, false, 2)
+DIAG(warn_binding_null_to_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding dereferenced null pointer to reference has undefined behavior", 461, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bitfield_too_small_for_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "bit-field %0 is not wide enough to store all enumerators of %1", 61, SFINAE_Suppress, false, false, 25)
+DIAG(warn_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", 62, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bitwise_op_in_bitwise_op, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' within '%1'", 63, SFINAE_Suppress, false, false, 2)
+DIAG(warn_block_capture_autoreleasing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "block captures an autoreleasing out-parameter, which may result in use-after-free bugs", 64, SFINAE_Suppress, false, false, 5)
+DIAG(warn_block_literal_attributes_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to omitted return type", 286, SFINAE_Suppress, false, false, 0)
+DIAG(warn_block_literal_qualifiers_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on omitted return type %1 has no effect", 291, SFINAE_Suppress, false, false, 0)
+DIAG(warn_bool_switch_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch condition has boolean value", 653, SFINAE_Suppress, false, false, 2)
+DIAG(warn_braces_around_scalar_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "braces around scalar initializer", 67, SFINAE_Suppress, false, false, 2)
+DIAG(warn_break_binds_to_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'break' is bound to loop, GCC binds it to switch", 254, SFINAE_Suppress, false, false, 2)
+DIAG(warn_builtin_chk_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' will always overflow; destination buffer has size %1, but size argument is %2", 70, SFINAE_Suppress, false, false, 2)
+DIAG(warn_builtin_unknown, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of unknown builtin %0", 300, SFINAE_Suppress, false, false, 2)
+DIAG(warn_call_to_pure_virtual_member_function_from_ctor_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to pure virtual member function %0 has undefined behavior; overrides of %0 in subclasses are not available in the %select{constructor|destructor}1 of %2", 116, SFINAE_Suppress, false, false, 2)
 DIAG(warn_call_wrong_number_of_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "too %select{few|many}0 arguments in call to %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cannot_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass object of %select{non-POD|non-trivial}0 type %1 through variadic %select{function|block|method|constructor}2; call will abort at runtime", 442, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cannot_resolve_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot resolve lock expression", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cannot_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass object of %select{non-POD|non-trivial}0 type %1 through variadic %select{function|block|method|constructor}2; call will abort at runtime", 448, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cannot_resolve_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot resolve lock expression", 671, SFINAE_Suppress, false, false, 2)
 DIAG(warn_case_empty_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty case range specified", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_case_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow converting case value to switch condition type (%0 to %1)", 644, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_align, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 increases required alignment from %2 to %3", 116, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_calling_conv, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast between incompatible calling conventions '%0' and '%1'; calls through this pointer may abort at runtime", 117, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_nonnull_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nonnull %select{function call|parameter}0 '%1' will evaluate to 'true' on first encounter", 531, SFINAE_Suppress, false, false, 24)
-DIAG(warn_cast_pointer_from_sel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast of type %0 to %1 is deprecated; use sel_getName instead", 118, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_qual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", 119, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_qual2, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 must have all intermediate pointers const qualified to be safe", 119, SFINAE_Suppress, false, false, 2)
-DIAG(warn_category_method_impl_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "category is implementing a method which will also be implemented by its primary class", 487, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "calling convention %0 ignored for this target", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_knr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function with no prototype cannot use the %0 calling convention", 413, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_structors, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on constructor/destructor", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_varargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on variadic function", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cdtor_function_try_handler_mem_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", 212, SFINAE_Suppress, false, false, 2)
+DIAG(warn_case_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow converting case value to switch condition type (%0 to %1)", 652, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_align, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 increases required alignment from %2 to %3", 117, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_calling_conv, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast between incompatible calling conventions '%0' and '%1'; calls through this pointer may abort at runtime", 118, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_nonnull_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nonnull %select{function call|parameter}0 '%1' will evaluate to 'true' on first encounter", 539, SFINAE_Suppress, false, false, 25)
+DIAG(warn_cast_pointer_from_sel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast of type %0 to %1 is deprecated; use sel_getName instead", 119, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_qual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", 120, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_qual2, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 must have all intermediate pointers const qualified to be safe", 120, SFINAE_Suppress, false, false, 2)
+DIAG(warn_category_method_impl_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "category is implementing a method which will also be implemented by its primary class", 495, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored %select{for this target|on variadic function|on constructor/destructor|on builtin function}1", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_knr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function with no prototype cannot use the %0 calling convention", 418, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cdtor_function_try_handler_mem_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", 213, SFINAE_Suppress, false, false, 2)
 DIAG(warn_cfstring_truncated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "input conversion stopped due to an input byte that does not belong to the input codeset UTF-8", 3, SFINAE_Suppress, false, false, 2)
-DIAG(warn_class_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id')", 475, SFINAE_Suppress, false, false, 2)
-DIAG(warn_class_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id'); did you mean %objcclass2?", 475, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cleanup_ext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the 'cleanup' attribute argument to be anything other than a simple identifier", 250, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cocoa_naming_owned_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property follows Cocoa naming convention for returning 'owned' objects", 484, SFINAE_Suppress, false, false, 2)
+DIAG(warn_class_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id')", 483, SFINAE_Suppress, false, false, 2)
+DIAG(warn_class_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id'); did you mean %objcclass2?", 483, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cleanup_ext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the 'cleanup' attribute argument to be anything other than a simple identifier", 254, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cocoa_naming_owned_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property follows Cocoa naming convention for returning 'owned' objects", 492, SFINAE_Suppress, false, false, 2)
 DIAG(warn_collection_expr_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "collection expression type %0 may not respond to %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comma_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "possible misuse of comma operator here", 125, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{self-|array }0comparison always evaluates to %select{a constant|%2}1", 650, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_bitwise_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitwise comparison always evaluates to %select{false|true}0", 650, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_of_mixed_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types%diff{ ($ and $)|}0,1", 208, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_of_mixed_enum_types_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types in switch statement%diff{ ($ and $)|}0,1", 209, SFINAE_Suppress, false, false, 2)
-DIAG(warn_concatenated_nsarray_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "concatenated NSString literal for an NSArray expression - possibly missing a comma", 495, SFINAE_Suppress, false, false, 2)
-DIAG(warn_condition_is_assignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using the result of an assignment as a condition without parentheses", 519, SFINAE_Suppress, false, false, 2)
-DIAG(warn_condition_is_idiomatic_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using the result of an assignment as a condition without parentheses", 281, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on parameter type in declaration of %0", 515, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2", 515, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on return type in declaration of %0", 515, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0%diff{: $ vs $|}1,2", 515, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_variadic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting variadic declaration of method and its implementation", 515, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on parameter type in implementation of %0", 180, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", 401, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on return type in implementation of %0", 180, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting return type in implementation of %0%diff{: $ vs $|}1,2", 402, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comma_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "possible misuse of comma operator here", 126, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{self-|array }0comparison always evaluates to %select{a constant|%2}1", 658, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_bitwise_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitwise comparison always evaluates to %select{false|true}0", 658, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_of_mixed_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types%diff{ ($ and $)|}0,1", 209, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_of_mixed_enum_types_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types in switch statement%diff{ ($ and $)|}0,1", 210, SFINAE_Suppress, false, false, 2)
+DIAG(warn_concatenated_nsarray_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "concatenated NSString literal for an NSArray expression - possibly missing a comma", 503, SFINAE_Suppress, false, false, 2)
+DIAG(warn_condition_is_assignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using the result of an assignment as a condition without parentheses", 527, SFINAE_Suppress, false, false, 2)
+DIAG(warn_condition_is_idiomatic_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using the result of an assignment as a condition without parentheses", 285, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on parameter type in declaration of %0", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on return type in declaration of %0", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0%diff{: $ vs $|}1,2", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_variadic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting variadic declaration of method and its implementation", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on parameter type in implementation of %0", 181, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", 406, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on return type in implementation of %0", 181, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting return type in implementation of %0%diff{: $ vs $|}1,2", 407, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conflicting_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting variadic declaration of method and its implementation", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conv_to_base_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to its base class %1 will never be used", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conv_to_self_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to itself will never be used", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conv_to_void_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to %1 will never be used", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_coroutine_promise_unhandled_exception_required_with_exceptions, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is required to declare the member 'unhandled_exception()' when exceptions are enabled", 140, SFINAE_Suppress, false, false, 14)
-DIAG(warn_cstruct_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to record %2 that is not trivial to %select{primitive-default-initialize|primitive-copy}3", 449, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ctad_maybe_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 may not intend to support class template argument deduction", 144, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ctor_parm_shadows_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor parameter %0 shadows the field %1 of %2", 592, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_body_multiple_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple return statements in constexpr function is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_body_no_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr function with no return statements is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_local_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_type_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_deduced_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return type deduction is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_generic_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generic lambdas are incompatible with C++11", 103, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx11_compat_init_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialized lambda captures are incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx11_compat_variable_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable templates are incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_gnu_attribute_on_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to a type", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_class_template_argument_deduction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "class template argument deduction is incompatible with C++ standards before C++17%select{|; for compatibility, use explicit type name %1}0", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_constexpr_not_const, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior", 135, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_decomp_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "decomposition declarations are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_inline_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline variables are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_star_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "by value capture of '*this' is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx14_compat_template_nontype_parm_auto_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template parameters declared with %0 are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_constexpr_function_try_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_defaulted_method_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 with a type different from the implicit type is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_equals_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit capture of 'this' with a capture default of '=' is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx17_compat_exception_spec_in_signature, CLASS_WARNING, (unsigned)diag::Severity::Warning, "mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature", 89, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_lambda_def_ctor_assign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'char8_t' type specifier is incompatible with C++ standards before C++20", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx2a_compat_aggregate_init_with_ctors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "aggregate initialization of type %0 with user-declared constructors is incompatible with C++2a", 96, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx2a_compat_utf8_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type of UTF-8 string literal will change from array of const char to array of const char8_t in C++2a", 96, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_array_size_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98", 110, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' type specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_cast_fn_obj, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is incompatible with C++98", 110, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_constexpr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'constexpr' specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_ctor_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor call from initializer list is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_delegating_ctor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "delegating constructors are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_empty_scalar_initializer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scalar initialized from empty initializer list is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_enum_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending enumeration type %0 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_enum_nested_name_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration type in nested name specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_explicit_conversion_functions, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit conversion functions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_friend_is_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "friend declaration naming a member of the declaring class is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_goto_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this goto statement to its label is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_indirect_goto_in_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this indirect goto statement to one of its possible targets is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_initializer_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialization of initializer_list object is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_non_static_member_use, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of non-static data member %0 in an unevaluated context is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_nonclass_type_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-class friend type %0 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_nontrivial_union_or_anon_struct_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{anonymous struct|union}0 member %1 with a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_reference_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference initialized from initializer list is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_sfinae_access_control, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "substitution failure due to access control is incompatible with C++98", 106, SFINAE_Report, false, false, 2)
-DIAG(warn_cxx98_compat_static_data_member_in_union, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static data member %0 in union is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_switch_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from switch statement to this case label is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_temp_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98", 107, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding address non-type template argument are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_local_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local type %0 as template argument is incompatible with C++98", 109, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_null, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of null pointer as non-type template argument is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_object_internal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_unnamed_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unnamed type as template argument is incompatible with C++98", 111, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'template' keyword outside of a template is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_parameter_default_in_function_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default template arguments for a function template are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_typename_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'typename' outside of a template is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_unelaborated_friend_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending %1 without '%select{struct|interface|union|class|enum}0' keyword is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_using_decl_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inheriting constructors are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions", 309, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dangling_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{reference|backing array for 'std::initializer_list'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime is shorter than the lifetime of the constructed object", 151, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dangling_variable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{temporary %select{whose address is used as value of|%select{|implicitly }2bound to}4 %select{%select{|reference }4member of local variable|local %select{variable|reference}4}1|array backing %select{initializer list subobject of local variable|local initializer list}1}0 %select{%3 |}2will be destroyed at the end of the full-expression", 149, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dealloc_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-dealloc is being overridden in a category", 155, SFINAE_Suppress, false, false, 2)
-DIAG(warn_decl_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of %0 will not be visible outside of this function", 749, SFINAE_Suppress, false, false, 2)
-DIAG(warn_decl_shadow, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 589, SFINAE_Suppress, false, false, 2)
-DIAG(warn_decl_shadow_uncaptured_local, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 595, SFINAE_Suppress, false, false, 2)
-DIAG(warn_declspec_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum}1\" to apply attribute to type declaration", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_deep_exception_specs_differ, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception specifications of %select{return|argument}0 types differ", 306, SFINAE_Suppress, false, false, 2)
-DIAG(warn_def_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%plural{1:enumeration value %1 not explicitly handled in switch|2:enumeration values %1 and %2 not explicitly handled in switch|3:enumeration values %1, %2, and %3 not explicitly handled in switch|:%0 enumeration values not explicitly handled in switch: %1, %2, %3...}0", 647, SFINAE_Suppress, false, false, 2)
-DIAG(warn_default_atomic_custom_getter_setter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked 'atomic' if this is intended)", 148, SFINAE_Suppress, false, false, 2)
-DIAG(warn_defaulted_method_deleted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is implicitly deleted", 158, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delegating_ctor_cycle, CLASS_WARNING, (unsigned)diag::Severity::Error, "constructor for %0 creates a delegation cycle", 159, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delete_abstract_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor", 160, SFINAE_Suppress, false, true, 2)
+DIAG(warn_coroutine_promise_unhandled_exception_required_with_exceptions, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is required to declare the member 'unhandled_exception()' when exceptions are enabled", 141, SFINAE_Suppress, false, false, 14)
+DIAG(warn_cstruct_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to record %2 that is not trivial to %select{primitive-default-initialize|primitive-copy}3", 455, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ctad_maybe_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 may not intend to support class template argument deduction", 145, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ctor_parm_shadows_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor parameter %0 shadows the field %1 of %2", 600, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_multiple_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple return statements in constexpr function is incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_no_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr function with no return statements is incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_local_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_type_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_deduced_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return type deduction is incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_generic_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generic lambdas are incompatible with C++11", 104, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx11_compat_init_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialized lambda captures are incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx11_compat_variable_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable templates are incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_gnu_attribute_on_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to a type", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_class_template_argument_deduction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "class template argument deduction is incompatible with C++ standards before C++17%select{|; for compatibility, use explicit type name %1}0", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_constexpr_not_const, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_decomp_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "decomposition declarations are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_inline_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline variables are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_star_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "by value capture of '*this' is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx14_compat_template_nontype_parm_auto_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template parameters declared with %0 are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_adl_only_template_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of function template name with no prior function template declaration in function call with explicit template arguments is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_constexpr_function_try_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_constexpr_virtual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "virtual constexpr functions are incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_decomp_decl_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "decomposition declaration declared %plural{1:'%1'|:with '%1' specifiers}0 is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_defaulted_method_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 with a type different from the implicit type is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_equals_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit capture of 'this' with a capture default of '=' is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx17_compat_exception_spec_in_signature, CLASS_WARNING, (unsigned)diag::Severity::Warning, "mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature", 90, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_init_capture_pack, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialized lambda capture packs are incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx17_compat_lambda_def_ctor_assign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is incompatible with C++ standards before C++2a", 101, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'char8_t' type specifier is incompatible with C++ standards before C++20", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx2a_compat_aggregate_init_with_ctors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "aggregate initialization of type %0 with user-declared constructors is incompatible with C++2a", 97, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx2a_compat_utf8_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type of UTF-8 string literal will change from array of const char to array of const char8_t in C++2a", 97, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_array_size_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98", 111, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' type specifier is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_cast_fn_obj, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is incompatible with C++98", 111, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_constexpr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'constexpr' specifier is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_ctor_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor call from initializer list is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_delegating_ctor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "delegating constructors are incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_empty_scalar_initializer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scalar initialized from empty initializer list is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_enum_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending enumeration type %0 is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_enum_nested_name_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration type in nested name specifier is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_explicit_conversion_functions, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit conversion functions are incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_friend_is_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "friend declaration naming a member of the declaring class is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_goto_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this goto statement to its label is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_indirect_goto_in_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this %select{indirect|asm}0 goto statement to one of its possible targets is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_initializer_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialization of initializer_list object is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_non_static_member_use, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of non-static data member %0 in an unevaluated context is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_nonclass_type_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-class friend type %0 is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_nontrivial_union_or_anon_struct_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{anonymous struct|union}0 member %1 with a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_reference_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference initialized from initializer list is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_sfinae_access_control, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "substitution failure due to access control is incompatible with C++98", 107, SFINAE_Report, false, false, 2)
+DIAG(warn_cxx98_compat_static_data_member_in_union, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static data member %0 in union is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_switch_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from switch statement to this case label is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_temp_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98", 108, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding address non-type template argument are incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_local_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local type %0 as template argument is incompatible with C++98", 110, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_null, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of null pointer as non-type template argument is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_object_internal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_unnamed_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unnamed type as template argument is incompatible with C++98", 112, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'template' keyword outside of a template is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_parameter_default_in_function_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default template arguments for a function template are incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_typename_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'typename' outside of a template is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_unelaborated_friend_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending %1 without '%select{struct|interface|union|class|enum}0' keyword is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type specifier is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_using_decl_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inheriting constructors are incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions", 313, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dangling_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{reference|backing array for 'std::initializer_list'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime is shorter than the lifetime of the constructed object", 152, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dangling_variable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{temporary %select{whose address is used as value of|%select{|implicitly }2bound to}4 %select{%select{|reference }4member of local variable|local %select{variable|reference}4}1|array backing %select{initializer list subobject of local variable|local initializer list}1}0 %select{%3 |}2will be destroyed at the end of the full-expression", 150, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dealloc_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-dealloc is being overridden in a category", 156, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of %0 will not be visible outside of this function", 759, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_shadow, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 597, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_shadow_uncaptured_local, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 603, SFINAE_Suppress, false, false, 2)
+DIAG(warn_declspec_allocator_nonpointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring __declspec(allocator) because the function return type %0 is not a pointer or reference type", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_declspec_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum}1\" to apply attribute to type declaration", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deep_exception_specs_differ, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception specifications of %select{return|argument}0 types differ", 310, SFINAE_Suppress, false, false, 2)
+DIAG(warn_def_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%plural{1:enumeration value %1 not explicitly handled in switch|2:enumeration values %1 and %2 not explicitly handled in switch|3:enumeration values %1, %2, and %3 not explicitly handled in switch|:%0 enumeration values not explicitly handled in switch: %1, %2, %3...}0", 655, SFINAE_Suppress, false, false, 2)
+DIAG(warn_default_atomic_custom_getter_setter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked 'atomic' if this is intended)", 149, SFINAE_Suppress, false, false, 2)
+DIAG(warn_defaulted_method_deleted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is implicitly deleted", 159, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delegating_ctor_cycle, CLASS_WARNING, (unsigned)diag::Severity::Error, "constructor for %0 creates a delegation cycle", 160, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_abstract_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor", 161, SFINAE_Suppress, false, true, 2)
 DIAG(warn_delete_array_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete' applied to a pointer-to-array type %0 treated as 'delete[]'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delete_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "deleting pointer to incomplete type %0 may cause undefined behavior", 161, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delete_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor", 162, SFINAE_Suppress, false, true, 2)
-DIAG(warn_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated", 166, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_anonymous_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'deprecated' attribute on anonymous namespace ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_deprecated_copy_operation, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared %select{copy %select{assignment operator|constructor}1|destructor}2", 164, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing deprecated %select{method|class|category}0", 168, SFINAE_Suppress, false, false, 2)
-DIAG(warn_deprecated_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be deprecated because the receiver type is unknown", 166, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated: %1", 166, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_redundant_constexpr_static_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated", 164, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_register, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage class specifier is deprecated and incompatible with C++17", 173, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_string_literal_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion from string literal to %0 is deprecated", 76, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_this_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit capture of 'this' with a capture default of '=' is deprecated", 174, SFINAE_Suppress, false, false, 27)
-DIAG(warn_dereference_of_noderef_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dereferencing %0; was declared with a 'noderef' type", 436, SFINAE_Suppress, false, false, 0)
-DIAG(warn_dereference_of_noderef_type_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dereferencing expression marked as 'noderef'", 436, SFINAE_Suppress, false, false, 0)
-DIAG(warn_destructor_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 overrides a destructor but is not marked 'override'", 319, SFINAE_Suppress, false, false, 2)
-DIAG(warn_diagnose_if_succeeded, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 742, SFINAE_Suppress, false, true, 2)
-DIAG(warn_direct_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to +initialize results in duplicate call to +initialize", 216, SFINAE_Suppress, false, false, 2)
-DIAG(warn_direct_ivar_access, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instance variable %0 is being directly accessed", 176, SFINAE_Suppress, false, false, 2)
-DIAG(warn_direct_super_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to [super initialize] should only be in implementation of +initialize", 216, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dispatch_body_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "body of cpu_dispatch function will be ignored", 248, SFINAE_Suppress, false, false, 0)
-DIAG(warn_division_sizeof_ptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' will return the size of the pointer, not the array itself", 609, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dllimport_dropped_from_inline_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared inline; %1 attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "deleting pointer to incomplete type %0 may cause undefined behavior", 162, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor", 163, SFINAE_Suppress, false, true, 2)
+DIAG(warn_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated", 167, SFINAE_Suppress, false, false, 28)
+DIAG(warn_deprecated_anonymous_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'deprecated' attribute on anonymous namespace ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deprecated_copy_operation, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared %select{copy %select{assignment operator|constructor}1|destructor}2", 165, SFINAE_Suppress, false, false, 28)
+DIAG(warn_deprecated_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing deprecated %select{method|class|category}0", 169, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deprecated_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be deprecated because the receiver type is unknown", 167, SFINAE_Suppress, false, false, 28)
+DIAG(warn_deprecated_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated: %1", 167, SFINAE_Suppress, false, false, 28)
+DIAG(warn_deprecated_redundant_constexpr_static_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated", 165, SFINAE_Suppress, false, false, 28)
+DIAG(warn_deprecated_register, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage class specifier is deprecated and incompatible with C++17", 174, SFINAE_Suppress, false, false, 28)
+DIAG(warn_deprecated_string_literal_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion from string literal to %0 is deprecated", 77, SFINAE_Suppress, false, false, 28)
+DIAG(warn_deprecated_this_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit capture of 'this' with a capture default of '=' is deprecated", 175, SFINAE_Suppress, false, false, 28)
+DIAG(warn_dereference_of_noderef_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dereferencing %0; was declared with a 'noderef' type", 442, SFINAE_Suppress, false, false, 0)
+DIAG(warn_dereference_of_noderef_type_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dereferencing expression marked as 'noderef'", 442, SFINAE_Suppress, false, false, 0)
+DIAG(warn_destructor_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 overrides a destructor but is not marked 'override'", 323, SFINAE_Suppress, false, false, 2)
+DIAG(warn_diagnose_if_succeeded, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 752, SFINAE_Suppress, false, true, 2)
+DIAG(warn_direct_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to +initialize results in duplicate call to +initialize", 217, SFINAE_Suppress, false, false, 2)
+DIAG(warn_direct_ivar_access, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instance variable %0 is being directly accessed", 177, SFINAE_Suppress, false, false, 2)
+DIAG(warn_direct_super_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to [super initialize] should only be in implementation of +initialize", 217, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dispatch_body_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "body of cpu_dispatch function will be ignored", 252, SFINAE_Suppress, false, false, 0)
+DIAG(warn_division_sizeof_ptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' will return the size of the pointer, not the array itself", 617, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dllimport_dropped_from_inline_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared inline; %1 attribute ignored", 286, SFINAE_Suppress, false, false, 2)
 DIAG(warn_double_const_requires_fp64, CLASS_WARNING, (unsigned)diag::Severity::Warning, "double precision constant requires cl_khr_fp64, casting to single precision", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_double_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' that is already held", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied with different parameters", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_attribute_exact, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_codeseg_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate code segment specifiers", 578, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_enum_values, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "element %0 has been implicitly assigned %1 which another element has been assigned", 194, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple declarations of method %0 found and ignored", 196, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_protocol_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate protocol definition of %0 is ignored", 197, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dyn_class_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to %select{|class containing a }2dynamic class %3; vtable pointer will be %select{overwritten|copied|moved|compared}4", 198, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "for loop has empty body", 202, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is empty", 242, SFINAE_Suppress, false, false, 28)
-DIAG(warn_empty_if_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "if statement has empty body", 202, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_parens_are_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty parentheses interpreted as a function declaration", 748, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_range_based_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "range-based for loop has empty body", 202, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_switch_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch statement has empty body", 202, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_while_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "while loop has empty body", 202, SFINAE_Suppress, false, false, 2)
+DIAG(warn_double_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' that is already held", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied with different parameters", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_attribute_exact, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_codeseg_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate code segment specifiers", 586, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_enum_values, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "element %0 has been implicitly assigned %1 which another element has been assigned", 195, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple declarations of method %0 found and ignored", 197, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_protocol_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate protocol definition of %0 is ignored", 198, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dyn_class_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to %select{|class containing a }2dynamic class %3; vtable pointer will be %select{overwritten|copied|moved|compared}4", 199, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "for loop has empty body", 203, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is empty", 245, SFINAE_Suppress, false, false, 29)
+DIAG(warn_empty_if_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "if statement has empty body", 203, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_parens_are_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty parentheses interpreted as a function declaration", 758, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_range_based_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "range-based for loop has empty body", 203, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_switch_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch statement has empty body", 203, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_while_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "while loop has empty body", 203, SFINAE_Suppress, false, false, 2)
 DIAG(warn_enum_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in enumeration value", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_equality_with_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "equality comparison with extraneous parentheses", 520, SFINAE_Suppress, false, false, 2)
-DIAG(warn_exception_caught_by_earlier_handler, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception of type %0 will be caught by earlier handler", 212, SFINAE_Suppress, false, false, 2)
-DIAG(warn_exit_time_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires an exit-time destructor", 213, SFINAE_Suppress, false, false, 2)
-DIAG(warn_expecting_lock_held_on_loop, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at start of each loop", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_expecting_locked, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at the end of function", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_after_specialization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation of %0 that occurs after an explicit specialization has no effect", 329, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_inline_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation cannot be 'inline'", 75, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_must_be_global_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 must occur at global scope", 75, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_out_of_scope_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 not in a namespace enclosing %1", 75, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_unqualified_wrong_namespace_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %q0 must occur in namespace %1", 75, SFINAE_Suppress, false, false, 2)
-DIAG(warn_extern_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'extern' variable has an initializer", 219, SFINAE_Suppress, false, false, 2)
-DIAG(warn_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 575, SFINAE_Suppress, false, false, 2)
-DIAG(warn_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void function", 575, SFINAE_Suppress, false, false, 2)
-DIAG(warn_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void lambda", 575, SFINAE_Suppress, false, false, 3)
-DIAG(warn_falloff_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function declared 'noreturn' should not return", 340, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fallthrough_attr_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "fallthrough annotation in unreachable code", 292, SFINAE_Suppress, false, false, 2)
-DIAG(warn_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 is uninitialized when used here", 692, SFINAE_Suppress, false, false, 2)
-DIAG(warn_flag_enum_constant_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "enumeration value %0 is out of range of flags in enumeration type %1", 227, SFINAE_Suppress, false, false, 2)
-DIAG(warn_float_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too large for type %0; maximum is %1", 356, SFINAE_Suppress, false, false, 2)
-DIAG(warn_float_underflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too small for type %0; minimum is %1", 356, SFINAE_Suppress, false, false, 2)
-DIAG(warn_floatingpoint_eq, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparing floating point with == or != is unsafe", 230, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_begin_end_types_differ, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'begin' and 'end' returning different types (%0 and %1) is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_const_reference_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 %diff{has type $ but is initialized with type $| is initialized with a value of a different type}1,2 resulting in a copy", 556, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 of type %1 creates a copy from type %2", 556, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_variable_always_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 is always a copy because the range of type %1 does not return a reference", 556, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_P_no_precision, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%%P' format specifier without precision", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_argument_needs_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_argument_needs_cast_pedantic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 239, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_conversion_argument_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_conversion_argument_type_mismatch_pedantic, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 239, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_invalid_annotation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%0' format specifier annotation outside of os_log()/os_trace()", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_invalid_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid conversion specifier '%0'", 236, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_invalid_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid position specified for %select{field width|field precision}0", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_mix_positional_nonpositional_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot mix positional and non-positional arguments in format string", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_non_standard, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' %select{length modifier|conversion specifier}1 is not supported by ISO C", 237, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_non_standard_conversion_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using length modifier '%0' with conversion specifier '%1' is not supported by ISO C", 237, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_non_standard_positional_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "positional arguments are not supported by ISO C", 237, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_nonliteral, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "format string is not a string literal", 238, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_nonliteral_noargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not a string literal (potentially insecure)", 240, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_nonsensical_length, CLASS_WARNING, (unsigned)diag::Severity::Warning, "length modifier '%0' results in undefined behavior or no effect with '%1' conversion specifier", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_string_is_wide_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string should not be a wide string", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_zero_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "position arguments in format strings start counting at 1 (not 0)", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_forward_class_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of forward class %0 of a typedef name of an object type is ignored", 469, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fun_excludes_mutex, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot call function '%1' while %0 '%2' is held", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fun_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fun_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 666, SFINAE_Suppress, false, false, 2)
-DIAG(warn_func_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instantiation of function %q0 required here, but no definition is available", 679, SFINAE_Suppress, false, false, 2)
-DIAG(warn_function_def_in_objc_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function definition inside an Objective-C container is deprecated", 247, SFINAE_Suppress, false, false, 2)
-DIAG(warn_function_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 overrides a member function but is not marked 'override'", 320, SFINAE_Suppress, false, false, 2)
-DIAG(warn_gc_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Objective-C GC does not allow weak variables on the stack", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_gcc_ignores_type_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the %0 attribute to be written on a type", 250, SFINAE_Suppress, false, false, 2)
-DIAG(warn_global_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global constructor", 251, SFINAE_Suppress, false, false, 2)
-DIAG(warn_global_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global destructor", 251, SFINAE_Suppress, false, false, 2)
-DIAG(warn_gnu_inline_attribute_requires_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'gnu_inline' attribute requires function to be marked 'inline', attribute ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_gnu_null_ptr_arith, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension", 456, SFINAE_Suppress, false, false, 2)
-DIAG(warn_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing variable %1 by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 667, SFINAE_Suppress, false, false, 2)
-DIAG(warn_iboutlet_object_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)", 337, SFINAE_Suppress, false, false, 2)
-DIAG(warn_iboutletcollection_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "IBOutletCollection properties should be copy/strong and not assign", 337, SFINAE_Suppress, false, false, 2)
-DIAG(warn_identity_field_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{field|instance variable}0 to itself", 582, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ignored_ms_inheritance, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inheritance model ignored on %select{primary template|partial specialization}0", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ignored_objc_externally_retained, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_externally_retained' can only be applied to local variables %select{of retainable type|with strong ownership}0", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_illegal_constant_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "size of static array must be an integer constant expression", 527, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impcast_bitfield_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit truncation from %2 to bit-field changes value from %0 to %1", 59, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_bool_to_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initialization of pointer of type %0 to null from a constant boolean expression", 64, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_complex_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion discards imaginary component: %0 to %1", 137, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_different_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from enumeration type %0 to different enumeration type %1", 210, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_double_promotion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion increases floating-point precision: %0 to %1", 192, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impcast_fixed_point_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 cannot fit within the range of values for %1", 294, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impcast_float_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns floating-point number into integer: %0 to %1", 229, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses floating-point precision: %0 to %1", 295, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_result_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion when assigning computation result loses floating-point precision: %0 to %1", 295, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes value from %2 to %3", 231, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion of out of range value from %0 to %1 is undefined", 231, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_to_integer_zero, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes non-zero value from %2 to %3", 232, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_floating_point_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion turns floating-point number into bool: %0 to %1", 290, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impcast_high_order_zero_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "higher order bits are zeroes after implicit conversion", 298, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_64_32, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 602, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 298, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %2 to %3 changes value from %0 to %1", 133, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_sign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion changes signedness: %0 to %1", 604, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_sign_conditional, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "operand of ? changes signedness: %0 to %1", 604, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_literal_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 to %1 changes value from %2 to %3", 355, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_literal_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of out of range value from %0 to %1 is undefined", 355, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_nonnegative_result, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the resulting value is always non-negative after implicit conversion", 604, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_null_pointer_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of %select{NULL|nullptr}0 constant to %1", 454, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_objective_c_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit boolean conversion of Objective-C object literal always evaluates to true", 472, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_pointer_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "address of%select{| function| array}0 '%1' will always evaluate to 'true'", 531, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_string_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns string literal into bool: %0 to %1", 636, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_vector_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns vector to scalar: %0 to %1", 137, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impl_required_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation", 482, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impl_required_in_category_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 482, SFINAE_Suppress, false, false, 2)
+DIAG(warn_equality_with_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "equality comparison with extraneous parentheses", 528, SFINAE_Suppress, false, false, 2)
+DIAG(warn_exception_caught_by_earlier_handler, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception of type %0 will be caught by earlier handler", 213, SFINAE_Suppress, false, false, 2)
+DIAG(warn_exit_time_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires an exit-time destructor", 214, SFINAE_Suppress, false, false, 2)
+DIAG(warn_expecting_lock_held_on_loop, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at start of each loop", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_expecting_locked, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at the end of function", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_after_specialization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation of %0 that occurs after an explicit specialization has no effect", 333, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_inline_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation cannot be 'inline'", 76, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_must_be_global_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 must occur at global scope", 76, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_out_of_scope_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 not in a namespace enclosing %1", 76, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_unqualified_wrong_namespace_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %q0 must occur in namespace %1", 76, SFINAE_Suppress, false, false, 2)
+DIAG(warn_extern_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'extern' variable has an initializer", 222, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 583, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void function", 583, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void lambda", 583, SFINAE_Suppress, false, false, 3)
+DIAG(warn_falloff_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function declared 'noreturn' should not return", 344, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fallthrough_attr_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "fallthrough annotation in unreachable code", 296, SFINAE_Suppress, false, false, 2)
+DIAG(warn_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 is uninitialized when used here", 702, SFINAE_Suppress, false, false, 2)
+DIAG(warn_flag_enum_constant_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "enumeration value %0 is out of range of flags in enumeration type %1", 230, SFINAE_Suppress, false, false, 2)
+DIAG(warn_float_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too large for type %0; maximum is %1", 360, SFINAE_Suppress, false, false, 2)
+DIAG(warn_float_underflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too small for type %0; minimum is %1", 360, SFINAE_Suppress, false, false, 2)
+DIAG(warn_floatingpoint_eq, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparing floating point with == or != is unsafe", 233, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_begin_end_types_differ, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'begin' and 'end' returning different types (%0 and %1) is incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_const_reference_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 %diff{has type $ but is initialized with type $| is initialized with a value of a different type}1,2 resulting in a copy", 564, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 of type %1 creates a copy from type %2", 564, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_variable_always_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 is always a copy because the range of type %1 does not return a reference", 564, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_P_no_precision, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%%P' format specifier without precision", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_argument_needs_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_argument_needs_cast_pedantic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 242, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_conversion_argument_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_conversion_argument_type_mismatch_pedantic, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 242, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_invalid_annotation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%0' format specifier annotation outside of os_log()/os_trace()", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_invalid_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid conversion specifier '%0'", 239, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_invalid_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid position specified for %select{field width|field precision}0", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_mix_positional_nonpositional_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot mix positional and non-positional arguments in format string", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_non_standard, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' %select{length modifier|conversion specifier}1 is not supported by ISO C", 240, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_non_standard_conversion_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using length modifier '%0' with conversion specifier '%1' is not supported by ISO C", 240, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_non_standard_positional_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "positional arguments are not supported by ISO C", 240, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_nonliteral, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "format string is not a string literal", 241, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_nonliteral_noargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not a string literal (potentially insecure)", 243, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_nonsensical_length, CLASS_WARNING, (unsigned)diag::Severity::Warning, "length modifier '%0' results in undefined behavior or no effect with '%1' conversion specifier", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_string_is_wide_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string should not be a wide string", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_format_zero_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "position arguments in format strings start counting at 1 (not 0)", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_fortify_source_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' will always overflow; destination buffer has size %1, but size argument is %2", 247, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fortify_source_size_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' size argument is too large; destination buffer has size %1, but size argument is %2", 247, SFINAE_Suppress, false, false, 2)
+DIAG(warn_forward_class_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of forward class %0 of a typedef name of an object type is ignored", 477, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_excludes_mutex, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot call function '%1' while %0 '%2' is held", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 675, SFINAE_Suppress, false, false, 2)
+DIAG(warn_func_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instantiation of function %q0 required here, but no definition is available", 688, SFINAE_Suppress, false, false, 2)
+DIAG(warn_function_def_in_objc_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function definition inside an Objective-C container is deprecated", 251, SFINAE_Suppress, false, false, 2)
+DIAG(warn_function_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 overrides a member function but is not marked 'override'", 324, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gc_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Objective-C GC does not allow weak variables on the stack", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gcc_ignores_type_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the %0 attribute to be written on a type", 254, SFINAE_Suppress, false, false, 2)
+DIAG(warn_global_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global constructor", 255, SFINAE_Suppress, false, false, 2)
+DIAG(warn_global_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global destructor", 255, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gnu_inline_attribute_requires_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'gnu_inline' attribute requires function to be marked 'inline', attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gnu_null_ptr_arith, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension", 462, SFINAE_Suppress, false, false, 2)
+DIAG(warn_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing variable %1 by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 676, SFINAE_Suppress, false, false, 2)
+DIAG(warn_iboutlet_object_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)", 341, SFINAE_Suppress, false, false, 2)
+DIAG(warn_iboutletcollection_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "IBOutletCollection properties should be copy/strong and not assign", 341, SFINAE_Suppress, false, false, 2)
+DIAG(warn_identity_field_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{field|instance variable}0 to itself", 590, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ignored_ms_inheritance, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inheritance model ignored on %select{primary template|partial specialization}0", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ignored_objc_externally_retained, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_externally_retained' can only be applied to local variables %select{of retainable type|with strong ownership}0", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_illegal_constant_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "size of static array must be an integer constant expression", 535, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_bitfield_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit truncation from %2 to bit-field changes value from %0 to %1", 60, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_bool_to_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initialization of pointer of type %0 to null from a constant boolean expression", 65, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_complex_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion discards imaginary component: %0 to %1", 138, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_constant_int_to_objc_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from constant value %0 to BOOL; the only well defined values for BOOL are YES and NO", 471, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_different_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from enumeration type %0 to different enumeration type %1", 211, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_double_promotion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion increases floating-point precision: %0 to %1", 193, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_fixed_point_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 cannot fit within the range of values for %1", 298, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_float_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns floating-point number into integer: %0 to %1", 232, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_float_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses floating-point precision: %0 to %1", 299, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_float_result_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion when assigning computation result loses floating-point precision: %0 to %1", 299, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes value from %2 to %3", 234, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion of out of range value from %0 to %1 is undefined", 234, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_float_to_integer_zero, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes non-zero value from %2 to %3", 235, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_floating_point_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion turns floating-point number into bool: %0 to %1", 294, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_high_order_zero_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "higher order bits are zeroes after implicit conversion", 302, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_integer_64_32, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 610, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_integer_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 302, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_integer_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %2 to %3 changes value from %0 to %1", 134, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_integer_sign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion changes signedness: %0 to %1", 612, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_integer_sign_conditional, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "operand of ? changes signedness: %0 to %1", 612, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_literal_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 to %1 changes value from %2 to %3", 359, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_literal_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of out of range value from %0 to %1 is undefined", 359, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_nonnegative_result, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the resulting value is always non-negative after implicit conversion", 612, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_null_pointer_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of %select{NULL|nullptr}0 constant to %1", 460, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_objective_c_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit boolean conversion of Objective-C object literal always evaluates to true", 480, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_pointer_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "address of%select{| function| array}0 '%1' will always evaluate to 'true'", 539, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_string_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns string literal into bool: %0 to %1", 644, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impcast_vector_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns vector to scalar: %0 to %1", 138, SFINAE_Suppress, false, false, 25)
+DIAG(warn_impl_required_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation", 490, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impl_required_in_category_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 490, SFINAE_Suppress, false, false, 2)
 DIAG(warn_implements_nscopying, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default assign attribute on property %0 which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic by default", 289, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicit_decl_requires_sysheader, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of built-in function '%1' requires inclusion of the header <%0>", 70, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicit_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit declaration of function %0", 296, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicitly_retains_self, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior", 299, SFINAE_Suppress, false, false, 2)
-DIAG(warn_inaccessible_base_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct base %0 is inaccessible due to ambiguity:%1", 303, SFINAE_Suppress, false, false, 2)
-DIAG(warn_incompatible_exception_specs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target exception specification is not superset of source", 306, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic by default", 293, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_decl_requires_sysheader, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of built-in function '%1' requires inclusion of the header <%0>", 71, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit declaration of function %0", 300, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicitly_retains_self, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior", 303, SFINAE_Suppress, false, false, 2)
+DIAG(warn_inaccessible_base_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct base %0 is inaccessible due to ambiguity:%1", 307, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incompatible_exception_specs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target exception specification is not superset of source", 310, SFINAE_Suppress, false, false, 2)
 DIAG(warn_incompatible_qualified_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_incompatible_vectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "incompatible vector types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2", 746, SFINAE_Suppress, false, false, 2)
-DIAG(warn_incomplete_encoded_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "encoding of %0 type is incomplete because %1 component has unknown encoding", 206, SFINAE_Suppress, false, false, 2)
-DIAG(warn_increment_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incrementing expression of type bool is deprecated and incompatible with C++17", 169, SFINAE_Suppress, false, false, 27)
+DIAG(warn_incompatible_vectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "incompatible vector types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2", 756, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incomplete_encoded_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "encoding of %0 type is incomplete because %1 component has unknown encoding", 207, SFINAE_Suppress, false, false, 2)
+DIAG(warn_increment_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incrementing expression of type bool is deprecated and incompatible with C++17", 170, SFINAE_Suppress, false, false, 28)
 DIAG(warn_independentclass_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_independent_class' attribute may be put on a typedef only; attribute is ignored", 5, SFINAE_Suppress, false, false, 2)
-DIAG(warn_indirection_through_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "indirection of non-volatile null pointer will be deleted, not trap", 455, SFINAE_Suppress, false, false, 2)
-DIAG(warn_infinite_recursive_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "all paths through this function will call itself", 322, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_list_constant_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11", 83, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_list_type_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 cannot be narrowed to %1 in initializer list in C++11", 83, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_list_variable_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11", 83, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_ptr_member_to_parameter_addr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializing pointer member %0 with the stack address of %select{variable|parameter}2 %1", 151, SFINAE_Suppress, false, false, 2)
-DIAG(warn_initializer_out_of_order, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3", 567, SFINAE_Suppress, false, false, 2)
-DIAG(warn_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializer overrides prior initialization of this subobject", 324, SFINAE_Suppress, false, false, 2)
+DIAG(warn_indirection_through_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "indirection of non-volatile null pointer will be deleted, not trap", 461, SFINAE_Suppress, false, false, 2)
+DIAG(warn_infinite_recursive_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "all paths through this function will call itself", 326, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_constant_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11", 84, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_type_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 cannot be narrowed to %1 in initializer list in C++11", 84, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_variable_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11", 84, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_ptr_member_to_parameter_addr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializing pointer member %0 with the stack address of %select{variable|parameter}2 %1", 152, SFINAE_Suppress, false, false, 2)
+DIAG(warn_initializer_out_of_order, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3", 575, SFINAE_Suppress, false, false, 2)
+DIAG(warn_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializer overrides prior initialization of this subobject", 328, SFINAE_Suppress, false, false, 2)
 DIAG(warn_inline_namespace_reopened_noninline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline namespace reopened as a non-inline namespace", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id')", 475, SFINAE_Suppress, false, false, 2)
-DIAG(warn_instance_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id'); did you mean %objcinstance2?", 475, SFINAE_Suppress, false, false, 2)
-DIAG(warn_instance_method_on_class_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 found instead of class method %1", 475, SFINAE_Suppress, false, false, 2)
-DIAG(warn_int_to_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 332, SFINAE_Suppress, false, false, 2)
-DIAG(warn_int_to_void_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 333, SFINAE_Suppress, false, false, 2)
-DIAG(warn_internal_linkage_local_storage, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'internal_linkage' attribute on a non-static local variable is ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_interrupt_attribute_invalid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{MIPS|MSP430|RISC-V}0 'interrupt' attribute only applies to functions that have %select{no parameters|a 'void' return type}1", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id')", 483, SFINAE_Suppress, false, false, 2)
+DIAG(warn_instance_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id'); did you mean %objcinstance2?", 483, SFINAE_Suppress, false, false, 2)
+DIAG(warn_instance_method_on_class_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 found instead of class method %1", 483, SFINAE_Suppress, false, false, 2)
+DIAG(warn_int_to_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 336, SFINAE_Suppress, false, false, 2)
+DIAG(warn_int_to_void_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 337, SFINAE_Suppress, false, false, 2)
+DIAG(warn_internal_linkage_local_storage, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'internal_linkage' attribute on a non-static local variable is ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_interrupt_attribute_invalid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{MIPS|MSP430|RISC-V}0 'interrupt' attribute only applies to functions that have %select{no parameters|a 'void' return type}1", 286, SFINAE_Suppress, false, false, 2)
 DIAG(warn_invalid_asm_cast_lvalue, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid use of a cast in an inline asm context requiring an l-value: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future", 0, SFINAE_Suppress, false, false, 12)
-DIAG(warn_invalid_capability_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid capability name '%0'; capability name must be 'mutex' or 'role'", 663, SFINAE_Suppress, false, false, 2)
-DIAG(warn_invalid_initializer_from_system_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid constructor form class in system header, should not be explicit", 338, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ivar_use_hidden, CLASS_WARNING, (unsigned)diag::Severity::Warning, "local declaration of %0 hides instance variable", 594, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ivars_in_interface, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration of instance variables in the interface is deprecated", 470, SFINAE_Suppress, false, false, 2)
-DIAG(warn_jump_out_of_seh_finally, CLASS_WARNING, (unsigned)diag::Severity::Warning, "jump out of __finally block has undefined behavior", 348, SFINAE_Suppress, false, false, 2)
-DIAG(warn_kern_is_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored 'inline' attribute on kernel function %0", 147, SFINAE_Suppress, false, false, 2)
-DIAG(warn_kern_is_method, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "kernel function %0 is a member function; this may not be accepted by nvcc", 147, SFINAE_Suppress, false, false, 2)
-DIAG(warn_lock_exclusive_and_shared, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is acquired exclusively and shared in the same scope", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_lock_some_predecessors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is not held on every path through here", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_logical_and_in_logical_or, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'&&' within '||'", 359, SFINAE_Suppress, false, false, 2)
-DIAG(warn_logical_instead_of_bitwise, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of logical '%0' with constant operand", 134, SFINAE_Suppress, false, false, 2)
-DIAG(warn_logical_not_on_lhs_of_check, CLASS_WARNING, (unsigned)diag::Severity::Warning, "logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0", 358, SFINAE_Suppress, false, false, 2)
-DIAG(warn_loop_ctrl_binds_to_inner, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is bound to current loop, GCC binds it to the enclosing loop", 250, SFINAE_Suppress, false, false, 2)
-DIAG(warn_loop_state_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "state of variable '%0' must match at the entry and exit of loop", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_main_one_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only one parameter on 'main' declaration", 363, SFINAE_Suppress, false, false, 2)
-DIAG(warn_main_redefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable named 'main' with external linkage has undefined behavior", 363, SFINAE_Suppress, false, false, 2)
-DIAG(warn_main_returns_bool_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bool literal returned from 'main'", 363, SFINAE_Suppress, false, false, 2)
-DIAG(warn_max_unsigned_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value", 367, SFINAE_Suppress, false, false, 2)
-DIAG(warn_maybe_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 575, SFINAE_Suppress, false, false, 2)
-DIAG(warn_maybe_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void function", 575, SFINAE_Suppress, false, false, 2)
-DIAG(warn_maybe_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void lambda", 575, SFINAE_Suppress, false, false, 3)
-DIAG(warn_maybe_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 may be uninitialized when %select{used here|captured by block}1", 131, SFINAE_Suppress, false, false, 2)
+DIAG(warn_invalid_capability_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid capability name '%0'; capability name must be 'mutex' or 'role'", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_invalid_initializer_from_system_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid constructor form class in system header, should not be explicit", 342, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ivar_use_hidden, CLASS_WARNING, (unsigned)diag::Severity::Warning, "local declaration of %0 hides instance variable", 602, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ivars_in_interface, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration of instance variables in the interface is deprecated", 478, SFINAE_Suppress, false, false, 2)
+DIAG(warn_jump_out_of_seh_finally, CLASS_WARNING, (unsigned)diag::Severity::Warning, "jump out of __finally block has undefined behavior", 352, SFINAE_Suppress, false, false, 2)
+DIAG(warn_kern_is_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored 'inline' attribute on kernel function %0", 148, SFINAE_Suppress, false, false, 2)
+DIAG(warn_kern_is_method, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "kernel function %0 is a member function; this may not be accepted by nvcc", 148, SFINAE_Suppress, false, false, 2)
+DIAG(warn_lock_exclusive_and_shared, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is acquired exclusively and shared in the same scope", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_lock_some_predecessors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is not held on every path through here", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_and_in_logical_or, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'&&' within '||'", 363, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_instead_of_bitwise, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of logical '%0' with constant operand", 135, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_not_on_lhs_of_check, CLASS_WARNING, (unsigned)diag::Severity::Warning, "logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0", 362, SFINAE_Suppress, false, false, 2)
+DIAG(warn_loop_ctrl_binds_to_inner, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is bound to current loop, GCC binds it to the enclosing loop", 254, SFINAE_Suppress, false, false, 2)
+DIAG(warn_loop_state_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "state of variable '%0' must match at the entry and exit of loop", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_one_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only one parameter on 'main' declaration", 367, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_redefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable named 'main' with external linkage has undefined behavior", 367, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_returns_bool_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bool literal returned from 'main'", 367, SFINAE_Suppress, false, false, 2)
+DIAG(warn_max_unsigned_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value", 371, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 583, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void function", 583, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void lambda", 583, SFINAE_Suppress, false, false, 3)
+DIAG(warn_maybe_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 may be uninitialized when %select{used here|captured by block}1", 132, SFINAE_Suppress, false, false, 2)
 DIAG(warn_maynot_respond, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may not respond to %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 385, SFINAE_Suppress, false, false, 2)
-DIAG(warn_memcpy_chk_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' will always overflow; destination buffer has size %1, but size argument is %2", 69, SFINAE_Suppress, false, false, 2)
-DIAG(warn_memsize_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call is a comparison", 369, SFINAE_Suppress, false, false, 2)
-DIAG(warn_messaging_unqualified_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "messaging unqualified id", 474, SFINAE_Suppress, false, false, 2)
+DIAG(warn_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 390, SFINAE_Suppress, false, false, 2)
+DIAG(warn_memsize_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call is a comparison", 373, SFINAE_Suppress, false, false, 2)
+DIAG(warn_messaging_unqualified_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "messaging unqualified id", 482, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mig_server_routine_does_not_return_kern_return_t, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'mig_server_routine' attribute only applies to routines that return a kern_return_t", 286, SFINAE_Suppress, false, false, 2)
 DIAG(warn_mismatched_availability, CLASS_WARNING, (unsigned)diag::Severity::Warning, "availability does not match previous declaration", 52, SFINAE_Suppress, false, false, 2)
 DIAG(warn_mismatched_availability_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }4method %select{introduced after|deprecated before|obsoleted before}0 %select{the protocol method it implements|overridden method}4 on %1 (%2 vs. %3)", 52, SFINAE_Suppress, false, false, 2)
 DIAG(warn_mismatched_availability_override_unavail, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }1method cannot be unavailable on %0 when %select{the protocol method it implements|its overridden method}1 is available", 52, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mismatched_delete_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete%select{|[]}0' applied to a pointer that was allocated with 'new%select{[]|}0'; did you mean 'delete%select{[]|}0'?", 400, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mismatched_nullability_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nullability specifier %0 conflicts with existing specifier %1", 457, SFINAE_Suppress, false, false, 19)
-DIAG(warn_mismatched_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{codeseg|section}0 does not match previous declaration", 578, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_braces, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "suggest braces around initialization of subobject", 404, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%plural{1:enumeration value %1 not handled in switch|2:enumeration values %1 and %2 not handled in switch|3:enumeration values %1, %2, and %3 not handled in switch|:%0 enumeration values not handled in switch: %1, %2, %3...}0", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_delete_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete%select{|[]}0' applied to a pointer that was allocated with 'new%select{[]|}0'; did you mean 'delete%select{[]|}0'?", 405, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_nullability_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nullability specifier %0 conflicts with existing specifier %1", 463, SFINAE_Suppress, false, false, 20)
+DIAG(warn_mismatched_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{codeseg|section}0 does not match previous declaration", 586, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_braces, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "suggest braces around initialization of subobject", 409, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%plural{1:enumeration value %1 not handled in switch|2:enumeration values %1 and %2 not handled in switch|3:enumeration values %1, %2, and %3 not handled in switch|:%0 enumeration values not handled in switch: %1, %2, %3...}0", 652, SFINAE_Suppress, false, false, 2)
 DIAG(warn_missing_case_for_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no case matching constant switch condition '%0'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_explicit_synthesis, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "auto property synthesis is synthesizing property not explicitly synthesized", 476, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_field_initializers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "missing field %0 initializer", 407, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string missing", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_missing_method_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method has no return type specified; defaults to 'id'", 410, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_prototype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous prototype for function %0", 414, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_sentinel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing sentinel in %select{function call|method dispatch|block call}0", 586, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_variable_declarations, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous extern declaration for non-static variable %0", 417, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mixed_sign_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparison of integers of different signs: %0 and %1", 603, SFINAE_Suppress, false, false, 2)
-DIAG(warn_modifying_shadowing_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "modifying constructor parameter %0 that shadows a field of %1", 593, SFINAE_Suppress, false, false, 2)
-DIAG(warn_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple methods named %0 found", 478, SFINAE_Suppress, false, false, 2)
-DIAG(warn_multiple_selectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "several methods with selector %0 of mismatched types are found for the @selector expression", 580, SFINAE_Suppress, false, false, 2)
-DIAG(warn_multiversion_duplicate_entries, CLASS_WARNING, (unsigned)diag::Severity::Warning, "CPU list contains duplicate entries; attribute ignored", 248, SFINAE_Suppress, false, false, 0)
-DIAG(warn_namespace_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 221, SFINAE_Suppress, false, false, 2)
-DIAG(warn_neon_vector_initializer_non_portable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "vector initializers are not compatible with NEON intrinsics in big endian mode", 448, SFINAE_Suppress, false, false, 2)
-DIAG(warn_new_dangling_initializer_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array backing %select{initializer list subobject of the allocated object|the allocated initializer list}0 will be destroyed at the end of the full-expression", 152, SFINAE_Suppress, false, false, 2)
-DIAG(warn_new_dangling_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "temporary bound to reference member of allocated object will be destroyed at the end of the full-expression", 151, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_autosynthesis_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it is 'readwrite' but it will be synthesized 'readonly' via another property", 486, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_autosynthesis_shared_ivar_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it cannot share an ivar with another synthesized property", 486, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_explicit_synthesis, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "auto property synthesis is synthesizing property not explicitly synthesized", 484, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_field_initializers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "missing field %0 initializer", 412, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string missing", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_missing_method_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method has no return type specified; defaults to 'id'", 415, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_prototype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous prototype for function %0", 419, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_sentinel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing sentinel in %select{function call|method dispatch|block call}0", 594, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_variable_declarations, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous extern declaration for non-static variable %0", 422, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mixed_sign_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparison of integers of different signs: %0 and %1", 611, SFINAE_Suppress, false, false, 2)
+DIAG(warn_modifying_shadowing_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "modifying constructor parameter %0 that shadows a field of %1", 601, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple methods named %0 found", 486, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiple_selectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "several methods with selector %0 of mismatched types are found for the @selector expression", 588, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiversion_duplicate_entries, CLASS_WARNING, (unsigned)diag::Severity::Warning, "CPU list contains duplicate entries; attribute ignored", 252, SFINAE_Suppress, false, false, 0)
+DIAG(warn_namespace_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 224, SFINAE_Suppress, false, false, 2)
+DIAG(warn_neon_vector_initializer_non_portable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "vector initializers are not compatible with NEON intrinsics in big endian mode", 454, SFINAE_Suppress, false, false, 2)
+DIAG(warn_new_dangling_initializer_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array backing %select{initializer list subobject of the allocated object|the allocated initializer list}0 will be destroyed at the end of the full-expression", 153, SFINAE_Suppress, false, false, 2)
+DIAG(warn_new_dangling_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "temporary bound to reference member of allocated object will be destroyed at the end of the full-expression", 152, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_autosynthesis_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it is 'readwrite' but it will be synthesized 'readonly' via another property", 494, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_autosynthesis_shared_ivar_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it cannot share an ivar with another synthesized property", 494, SFINAE_Suppress, false, false, 2)
 DIAG(warn_no_constructor_for_refconst, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{struct|interface|union|class|enum}0 %1 does not declare any constructor to initialize its non-modifiable members", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_underlying_type_specified_for_enum_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enums in the Microsoft ABI are signed integers by default; consider giving the enum %0 an unsigned underlying type to make this code portable", 606, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_unlock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is still held at the end of function", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nocf_check_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nocf_check' attribute ignored; use -fcf-protection to enable the attribute", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_noderef_on_non_pointer_or_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'noderef' can only be used on an array or pointer type", 282, SFINAE_Suppress, false, false, 0)
-DIAG(warn_noderef_to_dereferenceable_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "casting to dereferenceable pointer removes 'noderef' attribute", 436, SFINAE_Suppress, false, false, 0)
-DIAG(warn_non_contravariant_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0: %1 vs %2", 515, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_contravariant_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in implementation of %0: %1 vs %2", 370, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_covariant_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0: %1 vs %2", 515, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_covariant_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in implementation of %0: %1 vs %2", 370, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_literal_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression which evaluates to zero treated as a null pointer constant of type %0", 439, SFINAE_Suppress, false, false, 24)
-DIAG(warn_non_pod_vararg_with_format_string, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass %select{non-POD|non-trivial}0 object of type %1 to variadic %select{function|block|method|constructor}2; expected type from format string was %3", 442, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has virtual functions but non-virtual destructor", 443, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nonnull_expr_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of nonnull %select{function call|parameter}0 '%1' %select{not |}2equal to a null pointer is '%select{true|false}2' on first encounter", 655, SFINAE_Suppress, false, false, 2)
-DIAG(warn_noreturn_function_has_return_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function %0 declared 'noreturn' should not return", 340, SFINAE_Suppress, false, false, 2)
-DIAG(warn_not_a_doxygen_trailing_member_comment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "not a Doxygen trailing comment", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_no_underlying_type_specified_for_enum_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enums in the Microsoft ABI are signed integers by default; consider giving the enum %0 an unsigned underlying type to make this code portable", 614, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_unlock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is still held at the end of function", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nocf_check_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nocf_check' attribute ignored; use -fcf-protection to enable the attribute", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_noderef_on_non_pointer_or_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'noderef' can only be used on an array or pointer type", 286, SFINAE_Suppress, false, false, 0)
+DIAG(warn_noderef_to_dereferenceable_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "casting to dereferenceable pointer removes 'noderef' attribute", 442, SFINAE_Suppress, false, false, 0)
+DIAG(warn_non_contravariant_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0: %1 vs %2", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_contravariant_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in implementation of %0: %1 vs %2", 374, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_covariant_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0: %1 vs %2", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_covariant_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in implementation of %0: %1 vs %2", 374, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_literal_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression which evaluates to zero treated as a null pointer constant of type %0", 445, SFINAE_Suppress, false, false, 25)
+DIAG(warn_non_pod_vararg_with_format_string, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass %select{non-POD|non-trivial}0 object of type %1 to variadic %select{function|block|method|constructor}2; expected type from format string was %3", 448, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has virtual functions but non-virtual destructor", 449, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nonnull_expr_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of nonnull %select{function call|parameter}0 '%1' %select{not |}2equal to a null pointer is '%select{true|false}2' on first encounter", 664, SFINAE_Suppress, false, false, 2)
+DIAG(warn_noreturn_function_has_return_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function %0 declared 'noreturn' should not return", 344, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_a_doxygen_trailing_member_comment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "not a Doxygen trailing comment", 187, SFINAE_Suppress, false, false, 26)
 DIAG(warn_not_compound_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of unary operator that may be intended as compound assignment (%0=)", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_not_enough_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "not enough variable arguments in %0 declaration to fit a sentinel", 586, SFINAE_Suppress, false, false, 2)
-DIAG(warn_not_in_enum, CLASS_WARNING, (unsigned)diag::Severity::Warning, "case value not in enumerated type %0", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_enough_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "not enough variable arguments in %0 declaration to fit a sentinel", 594, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_in_enum, CLASS_WARNING, (unsigned)diag::Severity::Warning, "case value not in enumerated type %0", 652, SFINAE_Suppress, false, false, 2)
 DIAG(warn_not_in_enum_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "integer constant not in range of enumerated type %0", 37, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ns_attribute_wrong_parameter_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer|pointer/reference-to-OSObject-pointer}1 parameters", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ns_attribute_wrong_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|methods|properties}1 that return %select{an Objective-C object|a pointer|a non-retainable pointer}2", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nsconsumed_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_consumed attribute on its parameter", 450, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nothrow_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nothrow' attribute conflicts with exception specification; attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ns_attribute_wrong_parameter_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer|pointer/reference-to-OSObject-pointer}1 parameters", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ns_attribute_wrong_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|methods|properties}1 that return %select{an Objective-C object|a pointer|a non-retainable pointer}2", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nsconsumed_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_consumed attribute on its parameter", 456, SFINAE_Suppress, false, false, 2)
 DIAG(warn_nsobject_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'NSObject' attribute may be put on a typedef only; attribute is ignored", 6, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nsreturns_retained_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", 451, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null passed to a callee that requires a non-null argument", 444, SFINAE_Suppress, false, false, 28)
-DIAG(warn_null_in_arithmetic_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of NULL in arithmetic operation", 452, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_in_comparison_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison between NULL and non-pointer %select{(%1 and NULL)|(NULL and %1)}0", 452, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_pointer_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of %select{address of|function|array}0 '%1' %select{not |}2equal to a null pointer is always %select{true|false}2", 655, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_resettable_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "synthesized setter %0 for null_resettable property %1 does not handle nil", 457, SFINAE_Suppress, false, false, 19)
-DIAG(warn_null_ret, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null returned from %select{function|method}0 that requires a non-null return value", 444, SFINAE_Suppress, false, false, 28)
-DIAG(warn_nullability_declspec, CLASS_WARNING, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1; did you mean to apply the specifier to the %select{pointer|block pointer|member pointer|function pointer|member function pointer}2?", 460, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_inferred_on_nested_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inferring '_Nonnull' for pointer type within %select{array|reference}0 is deprecated", 462, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_lost, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from nullable pointer %0 to non-nullable pointer type %1", 463, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{pointer|block pointer|member pointer}0 is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 458, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_missing_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 459, SFINAE_Suppress, false, false, 19)
-DIAG(warn_objc_cdirective_format_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using %0 directive in %select{NSString|CFString}1 which is being passed as a formatting argument to the formatting %select{method|CFfunction}2", 143, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_circular_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to %1 might cause circular dependency in container", 465, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_collection_literal_element, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object of type %0 is not compatible with %select{array element type|dictionary key type|dictionary value type}1 %2", 472, SFINAE_Suppress, false, false, 24)
-DIAG(warn_objc_designated_init_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer missing a 'super' call to a designated initializer of the super class", 467, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_designated_init_non_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer invoked a non-designated initializer", 467, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_designated_init_non_super_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer should only invoke a designated initializer on 'super'", 467, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_implementation_missing_designated_init_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method override for the designated initializer of the superclass %objcinstance0 not found", 467, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_invalid_bridge, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 bridges to %1, not %2", 67, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_invalid_bridge_to_cf, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 cannot bridge to %1", 67, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_isa_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assignment to Objective-C's isa is deprecated in favor of object_setClass()", 170, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_isa_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct access to Objective-C's isa is deprecated in favor of object_getClass()", 170, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of %select{an array literal|a dictionary literal|a numeric literal|a boxed expression|}0 has undefined behavior", 471, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method possibly missing a [super %0] call", 477, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_pointer_cxx_catch_fragile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot catch an exception thrown with @throw in C++ in the non-unified exception model", 480, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_pointer_masking, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 171, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_pointer_masking_performSelector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 172, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nsreturns_retained_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", 457, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null passed to a callee that requires a non-null argument", 450, SFINAE_Suppress, false, false, 29)
+DIAG(warn_null_in_arithmetic_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of NULL in arithmetic operation", 458, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_in_comparison_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison between NULL and non-pointer %select{(%1 and NULL)|(NULL and %1)}0", 458, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_pointer_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of %select{address of|function|array}0 '%1' %select{not |}2equal to a null pointer is always %select{true|false}2", 664, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_resettable_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "synthesized setter %0 for null_resettable property %1 does not handle nil", 463, SFINAE_Suppress, false, false, 20)
+DIAG(warn_null_ret, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null returned from %select{function|method}0 that requires a non-null return value", 450, SFINAE_Suppress, false, false, 29)
+DIAG(warn_nullability_declspec, CLASS_WARNING, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1; did you mean to apply the specifier to the %select{pointer|block pointer|member pointer|function pointer|member function pointer}2?", 466, SFINAE_Suppress, false, false, 20)
+DIAG(warn_nullability_inferred_on_nested_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inferring '_Nonnull' for pointer type within %select{array|reference}0 is deprecated", 468, SFINAE_Suppress, false, false, 20)
+DIAG(warn_nullability_lost, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from nullable pointer %0 to non-nullable pointer type %1", 469, SFINAE_Suppress, false, false, 20)
+DIAG(warn_nullability_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{pointer|block pointer|member pointer}0 is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 464, SFINAE_Suppress, false, false, 20)
+DIAG(warn_nullability_missing_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 465, SFINAE_Suppress, false, false, 20)
+DIAG(warn_objc_boxing_invalid_utf8_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "string is ill-formed as UTF-8 and will become a null %0 when boxed", 472, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_cdirective_format_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using %0 directive in %select{NSString|CFString}1 which is being passed as a formatting argument to the formatting %select{method|CFfunction}2", 144, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_circular_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to %1 might cause circular dependency in container", 473, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_collection_literal_element, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object of type %0 is not compatible with %select{array element type|dictionary key type|dictionary value type}1 %2", 480, SFINAE_Suppress, false, false, 25)
+DIAG(warn_objc_designated_init_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer missing a 'super' call to a designated initializer of the super class", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_designated_init_non_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer invoked a non-designated initializer", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_designated_init_non_super_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer should only invoke a designated initializer on 'super'", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_implementation_missing_designated_init_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method override for the designated initializer of the superclass %objcinstance0 not found", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_invalid_bridge, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 bridges to %1, not %2", 68, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_invalid_bridge_to_cf, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 cannot bridge to %1", 68, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_isa_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assignment to Objective-C's isa is deprecated in favor of object_setClass()", 171, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_isa_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct access to Objective-C's isa is deprecated in favor of object_getClass()", 171, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of %select{an array literal|a dictionary literal|a numeric literal|a boxed expression|}0 has undefined behavior", 479, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method possibly missing a [super %0] call", 485, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_cxx_catch_fragile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot catch an exception thrown with @throw in C++ in the non-unified exception model", 488, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_masking, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 172, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_masking_performSelector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 173, SFINAE_Suppress, false, false, 2)
 DIAG(warn_objc_precise_lifetime_meaningless, CLASS_ERROR, (unsigned)diag::Severity::Error, "objc_precise_lifetime is not meaningful for %select{__unsafe_unretained|__autoreleasing}0 objects", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(warn_objc_property_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'assign' property of object type may become a dangling reference; consider using 'unsafe_unretained'", 481, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'assign' property of object type may become a dangling reference; consider using 'unsafe_unretained'", 489, SFINAE_Suppress, false, false, 2)
 DIAG(warn_objc_property_copy_missing_on_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'copy' attribute must be specified for the block property when -fobjc-gc-only is specified", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_property_default_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default property attribute 'assign' not appropriate for object", 485, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_property_no_assignment_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed", 485, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_property_retain_of_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "retain'ed block property does not copy the block - use copy attribute instead", 479, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_readonly_property_has_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "setter cannot be specified for a readonly property", 490, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_redundant_literal_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %0 with a literal is redundant", 492, SFINAE_Suppress, false, false, 29)
-DIAG(warn_objc_redundant_qualified_class_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameterized class %0 already conforms to the protocols listed; did you forget a '*'?", 489, SFINAE_Suppress, false, false, 0)
-DIAG(warn_objc_requires_super_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute cannot be applied to %select{methods in protocols|dealloc}1", 568, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_root_class_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class %0 defined without specifying a base class", 493, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_secondary_init_missing_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer missing a 'self' call to another initializer", 467, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_secondary_init_super_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer should not invoke an initializer on 'super'", 467, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_string_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of a string literal has undefined behavior", 494, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_unsafe_perform_selector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is incompatible with selectors that return a %select{struct|union|vector}1 type", 496, SFINAE_Suppress, false, false, 2)
-DIAG(warn_old_style_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of old-style cast", 498, SFINAE_Suppress, false, false, 2)
-DIAG(warn_omp_alignment_not_power_of_two, CLASS_WARNING, (unsigned)diag::Severity::Warning, "aligned clause will be ignored because the requested alignment is not a power of 2", 501, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_linear_step_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero linear step (%0 %select{|and other variables in clause }1should probably be const)", 501, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_loop_64_bit_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed", 502, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_nesting_simd, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP only allows an ordered construct with the simd clause nested in a simd construct", 613, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_non_trivial_type_mapped, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Non-trivial type %0 is mapped, only trivial types are guaranteed to be mapped correctly", 503, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_not_in_target_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration is not declared in any declare target region", 503, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_section_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array section %select{lower bound|length}0 is of type 'char'", 122, SFINAE_Suppress, false, false, 11)
+DIAG(warn_objc_property_default_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default property attribute 'assign' not appropriate for object", 493, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_no_assignment_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed", 493, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_retain_of_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "retain'ed block property does not copy the block - use copy attribute instead", 487, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_readonly_property_has_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "setter cannot be specified for a readonly property", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_redundant_literal_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %0 with a literal is redundant", 500, SFINAE_Suppress, false, false, 30)
+DIAG(warn_objc_redundant_qualified_class_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameterized class %0 already conforms to the protocols listed; did you forget a '*'?", 497, SFINAE_Suppress, false, false, 0)
+DIAG(warn_objc_requires_super_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute cannot be applied to %select{methods in protocols|dealloc}1", 576, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_root_class_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class %0 defined without specifying a base class", 501, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_secondary_init_missing_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer missing a 'self' call to another initializer", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_secondary_init_super_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer should not invoke an initializer on 'super'", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_string_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of a string literal has undefined behavior", 502, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_unsafe_perform_selector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is incompatible with selectors that return a %select{struct|union|vector}1 type", 504, SFINAE_Suppress, false, false, 2)
+DIAG(warn_old_style_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of old-style cast", 506, SFINAE_Suppress, false, false, 2)
+DIAG(warn_omp_alignment_not_power_of_two, CLASS_WARNING, (unsigned)diag::Severity::Warning, "aligned clause will be ignored because the requested alignment is not a power of 2", 509, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_allocate_thread_on_task_target_directive, CLASS_WARNING, (unsigned)diag::Severity::Warning, "allocator with the 'thread' trait access has unspecified behavior on '%0' directive", 509, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_linear_step_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero linear step (%0 %select{|and other variables in clause }1should probably be const)", 509, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_loop_64_bit_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed", 510, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_nesting_simd, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP only allows an ordered construct with the simd clause nested in a simd construct", 621, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_non_trivial_type_mapped, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Non-trivial type %0 is mapped, only trivial types are guaranteed to be mapped correctly", 511, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_not_in_target_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration is not declared in any declare target region", 511, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_section_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array section %select{lower bound|length}0 is of type 'char'", 123, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_used_different_allocator, CLASS_WARNING, (unsigned)diag::Severity::Warning, "allocate directive specifies %select{default|'%1'}0 allocator while previously used %select{default|'%3'}2", 509, SFINAE_Suppress, false, false, 11)
 DIAG(warn_on_superclass_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class implementation may not have super class", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_opencl_attr_deprecated_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute is deprecated and ignored in OpenCL version %1", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_opencl_generic_address_space_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing non-generic address space pointer to %0 may cause dynamic conversion affecting performance", 137, SFINAE_Suppress, false, false, 24)
-DIAG(warn_operator_new_returns_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 should not return a null pointer unless it is declared 'throw()'%select{| or 'noexcept'}1", 434, SFINAE_Suppress, false, false, 2)
+DIAG(warn_opencl_attr_deprecated_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute is deprecated and ignored in OpenCL version %1", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_opencl_generic_address_space_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing non-generic address space pointer to %0 may cause dynamic conversion affecting performance", 138, SFINAE_Suppress, false, false, 25)
+DIAG(warn_operator_new_returns_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 should not return a null pointer unless it is declared 'throw()'%select{| or 'noexcept'}1", 440, SFINAE_Suppress, false, false, 2)
 DIAG(warn_os_log_format_narg, CLASS_ERROR, (unsigned)diag::Severity::Error, "os_log() '%%n' format specifier is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(warn_out_of_range_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 653, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overaligned_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 requires %1 bytes of alignment and the default allocator only guarantees %2 bytes", 508, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overloaded_shift_in_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overloaded operator %select{>>|<<}0 has higher precedence than comparison operator", 511, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overloaded_virtual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%q0 hides overloaded virtual %select{function|functions}1", 512, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overriding_method_missing_noescape, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameter of overriding method should be annotated with __attribute__((noescape))", 411, SFINAE_Suppress, false, false, 2)
-DIAG(warn_param_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not in expected state when the function returns: expected '%1', observed '%2'", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_param_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "argument not in expected state; expected '%0', observed '%1'", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_parameter_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is a large (%1 bytes) pass-by-value argument; pass it by reference instead ?", 353, SFINAE_Suppress, false, false, 2)
-DIAG(warn_parens_disambiguated_as_function_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as a function declaration", 748, SFINAE_Suppress, false, false, 2)
-DIAG(warn_parens_disambiguated_as_variable_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as redundant parentheses around declaration of variable named %0", 748, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pass_class_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of class type %0 through variadic %select{function|block|method|constructor}1%select{|; did you mean to call '%3'?}2", 124, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pessimizing_move_on_initialization, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a temporary object prevents copy elision", 529, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pessimizing_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a local object in a return statement prevents copy elision", 529, SFINAE_Suppress, false, false, 2)
+DIAG(warn_out_of_range_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 661, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overaligned_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 requires %1 bytes of alignment and the default allocator only guarantees %2 bytes", 516, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overloaded_shift_in_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overloaded operator %select{>>|<<}0 has higher precedence than comparison operator", 519, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overloaded_virtual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%q0 hides overloaded virtual %select{function|functions}1", 520, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overriding_method_missing_noescape, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameter of overriding method should be annotated with __attribute__((noescape))", 416, SFINAE_Suppress, false, false, 2)
+DIAG(warn_param_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not in expected state when the function returns: expected '%1', observed '%2'", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_param_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "argument not in expected state; expected '%0', observed '%1'", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parameter_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is a large (%1 bytes) pass-by-value argument; pass it by reference instead ?", 357, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parens_disambiguated_as_function_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as a function declaration", 758, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parens_disambiguated_as_variable_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as redundant parentheses around declaration of variable named %0", 758, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pass_class_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of class type %0 through variadic %select{function|block|method|constructor}1%select{|; did you mean to call '%3'?}2", 125, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pessimizing_move_on_initialization, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a temporary object prevents copy elision", 537, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pessimizing_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a local object in a return statement prevents copy elision", 537, SFINAE_Suppress, false, false, 2)
 DIAG(warn_pointer_abs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the absolute value of %select{pointer|function|array}0 type %1 is suspicious", 8, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pointer_arith_null_ptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "performing pointer arithmetic on a null pointer has undefined behavior%select{| if the offset is nonzero}0", 456, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pointer_indirection_from_incompatible_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dereference of type %1 that was reinterpret_cast from type %0 has undefined behavior", 683, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_attribute_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unused attribute %0 in '#pragma clang attribute push' region", 537, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_options_align_reset_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma options align=reset failed: %0", 286, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_invalid_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'", 286, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_modified_after_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the current #pragma pack alignment value is modified in the included file", 539, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_no_pop_eof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unterminated '#pragma pack (push, ...)' at end of file", 539, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_non_default_at_include, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-default #pragma pack value changes the alignment of struct or union members in the included file", 540, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pointer_arith_null_ptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "performing pointer arithmetic on a null pointer has undefined behavior%select{| if the offset is nonzero}0", 462, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pointer_indirection_from_incompatible_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dereference of type %1 that was reinterpret_cast from type %0 has undefined behavior", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_attribute_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unused attribute %0 in '#pragma clang attribute push' region", 545, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_options_align_reset_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma options align=reset failed: %0", 290, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_invalid_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'", 290, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_modified_after_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the current #pragma pack alignment value is modified in the included file", 547, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_no_pop_eof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unterminated '#pragma pack (push, ...)' at end of file", 547, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_non_default_at_include, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-default #pragma pack value changes the alignment of struct or union members in the included file", 548, SFINAE_Suppress, false, false, 2)
 DIAG(warn_pragma_pack_pop_identifier_and_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying both a name and alignment to 'pop' is undefined", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_pragma_pack_show, CLASS_WARNING, (unsigned)diag::Severity::Warning, "value of #pragma pack(show) == %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pop_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma %0(pop, ...) failed: %1", 286, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_unused_expected_var_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only variables can be arguments to '#pragma unused'", 286, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_unused_undeclared_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "undeclared variable %0 used as an argument for '#pragma unused'", 286, SFINAE_Suppress, false, false, 2)
-DIAG(warn_precedence_bitwise_rel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has lower precedence than %1; %1 will be evaluated first", 519, SFINAE_Suppress, false, false, 2)
-DIAG(warn_precedence_conditional, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '?:' has lower precedence than '%0'; '%0' will be evaluated first", 519, SFINAE_Suppress, false, false, 2)
-DIAG(warn_printf_ObjCflags_without_ObjCConversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object format flags cannot be used with '%0' conversion specifier", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_asterisk_missing_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%select{*|.*}0' specified field %select{width|precision}0 is missing a matching 'int' argument", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_asterisk_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %select{width|precision}0 should have type %1, but argument has type %2", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_data_arg_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument not used by format string", 235, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_empty_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing object format flag", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_format_string_contains_null_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string contains '\\0' within the string body", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_format_string_not_null_terminated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not null-terminated", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_ignored_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' is ignored when flag '%1' is present", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_incomplete_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete format specifier", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_insufficient_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "more '%%' conversions than data arguments", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_invalid_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is not a valid object format flag", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_nonsensical_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' results in undefined behavior with '%1' conversion specifier", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_nonsensical_optional_amount, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{field width|precision}0 used with '%1' conversion specifier, resulting in undefined behavior", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_positional_arg_exceeds_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument position '%0' exceeds the number of data arguments (%1)", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_private_extern, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated", 544, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_access_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 not found on object of type %1; did you mean to access property %2?", 550, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_attr_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property attribute in class extension does not match the primary class", 551, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%1' attribute on property %0 does not match the property inherited from %2", 551, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pop_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma %0(pop, ...) failed: %1", 290, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_unused_expected_var_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only variables can be arguments to '#pragma unused'", 290, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_unused_undeclared_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "undeclared variable %0 used as an argument for '#pragma unused'", 290, SFINAE_Suppress, false, false, 2)
+DIAG(warn_precedence_bitwise_rel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has lower precedence than %1; %1 will be evaluated first", 527, SFINAE_Suppress, false, false, 2)
+DIAG(warn_precedence_conditional, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '?:' has lower precedence than '%0'; '%0' will be evaluated first", 527, SFINAE_Suppress, false, false, 2)
+DIAG(warn_printf_ObjCflags_without_ObjCConversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object format flags cannot be used with '%0' conversion specifier", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_asterisk_missing_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%select{*|.*}0' specified field %select{width|precision}0 is missing a matching 'int' argument", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_asterisk_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %select{width|precision}0 should have type %1, but argument has type %2", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_data_arg_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument not used by format string", 238, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_empty_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing object format flag", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_format_string_contains_null_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string contains '\\0' within the string body", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_format_string_not_null_terminated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not null-terminated", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_ignored_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' is ignored when flag '%1' is present", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_incomplete_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete format specifier", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_insufficient_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "more '%%' conversions than data arguments", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_invalid_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is not a valid object format flag", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_nonsensical_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' results in undefined behavior with '%1' conversion specifier", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_nonsensical_optional_amount, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{field width|precision}0 used with '%1' conversion specifier, resulting in undefined behavior", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_printf_positional_arg_exceeds_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument position '%0' exceeds the number of data arguments (%1)", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_private_extern, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated", 552, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_access_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 not found on object of type %1; did you mean to access property %2?", 558, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_attr_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property attribute in class extension does not match the primary class", 559, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%1' attribute on property %0 does not match the property inherited from %2", 559, SFINAE_Suppress, false, false, 2)
 DIAG(warn_property_getter_owning_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property declared as returning non-retained objects; getter returning retained objects", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_implicitly_mismatched, CLASS_WARNING, (unsigned)diag::Severity::Warning, "primary property declaration is implicitly strong while redeclaration in class extension is weak", 483, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_method_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access is using %0 method which is deprecated", 166, SFINAE_Suppress, false, false, 27)
-DIAG(warn_property_redecl_getter_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "getter name mismatch between property redeclaration (%1) and its original declaration (%0)", 551, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_types_are_incompatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property type %0 is incompatible with type %1 inherited from %2", 312, SFINAE_Suppress, false, false, 2)
-DIAG(warn_protocol_property_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %select{of type %1|with attribute '%1'|without attribute '%1'|with getter %1|with setter %1}0 was selected for synthesis", 553, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pt_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing the value that %1 points to by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 667, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_implicitly_mismatched, CLASS_WARNING, (unsigned)diag::Severity::Warning, "primary property declaration is implicitly strong while redeclaration in class extension is weak", 491, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_method_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access is using %0 method which is deprecated", 167, SFINAE_Suppress, false, false, 28)
+DIAG(warn_property_redecl_getter_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "getter name mismatch between property redeclaration (%1) and its original declaration (%0)", 559, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_types_are_incompatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property type %0 is incompatible with type %1 inherited from %2", 316, SFINAE_Suppress, false, false, 2)
+DIAG(warn_protocol_property_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %select{of type %1|with attribute '%1'|without attribute '%1'|with getter %1|with setter %1}0 was selected for synthesis", 561, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pt_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing the value that %1 points to by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 676, SFINAE_Suppress, false, false, 2)
 DIAG(warn_ptr_arith_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer incremented by %0 refers past the end of the array (that contains %1 element%s2)", 33, SFINAE_Suppress, false, false, 2)
 DIAG(warn_ptr_arith_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer decremented by %0 refers before the beginning of the array", 33, SFINAE_Suppress, false, false, 2)
 DIAG(warn_ptr_independentclass_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_independent_class' attribute may be put on Objective-C object pointer type only; attribute is ignored", 5, SFINAE_Suppress, false, false, 2)
-DIAG(warn_qual_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect", 287, SFINAE_Suppress, false, false, 2)
-DIAG(warn_readonly_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute 'readonly' of property %0 restricts attribute 'readwrite' of property inherited from %1", 551, SFINAE_Suppress, false, false, 2)
-DIAG(warn_receiver_forward_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver %0 is a forward class and corresponding @interface may not exist", 559, SFINAE_Suppress, false, false, 2)
-DIAG(warn_receiver_forward_instance, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "receiver type %0 for instance message is a forward declaration", 559, SFINAE_Suppress, false, false, 5)
-DIAG(warn_redecl_library_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incompatible redeclaration of library function %0", 308, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redeclaration_without_attribute_prev_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without %1 attribute: previous %1 ignored", 318, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redeclaration_without_import_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without 'dllimport' attribute: 'dllexport' attribute added", 318, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redefine_extname_not_applied, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma redefine_extname is applicable to external C declarations only; not applied to %select{function|variable}0 %1", 542, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redefinition_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of %0 will not be visible outside of this function", 749, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redundant_loop_iteration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{decremented|incremented}1 both in the loop header and in the loop body", 233, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redundant_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant move in return statement", 562, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redundant_parens_around_declarator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding declarator", 563, SFINAE_Suppress, false, false, 2)
-DIAG(warn_reference_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used here", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_qual_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect", 291, SFINAE_Suppress, false, false, 2)
+DIAG(warn_readonly_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute 'readonly' of property %0 restricts attribute 'readwrite' of property inherited from %1", 559, SFINAE_Suppress, false, false, 2)
+DIAG(warn_receiver_forward_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver %0 is a forward class and corresponding @interface may not exist", 567, SFINAE_Suppress, false, false, 2)
+DIAG(warn_receiver_forward_instance, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "receiver type %0 for instance message is a forward declaration", 567, SFINAE_Suppress, false, false, 5)
+DIAG(warn_redecl_library_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incompatible redeclaration of library function %0", 312, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redeclaration_without_attribute_prev_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without %1 attribute: previous %1 ignored", 322, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redeclaration_without_import_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without 'dllimport' attribute: 'dllexport' attribute added", 322, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redefine_extname_not_applied, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma redefine_extname is applicable to external C declarations only; not applied to %select{function|variable}0 %1", 550, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redefinition_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of %0 will not be visible outside of this function", 759, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_loop_iteration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{decremented|incremented}1 both in the loop header and in the loop body", 236, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant move in return statement", 570, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_parens_around_declarator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding declarator", 571, SFINAE_Suppress, false, false, 2)
+DIAG(warn_reference_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used here", 702, SFINAE_Suppress, false, false, 2)
 DIAG(warn_register_objc_catch_parm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage specifier on @catch parameter will be ignored", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_reinterpret_different_from_static, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'reinterpret_cast' %select{from|to}3 class %0 %select{to|from}3 its %select{virtual base|base at non-zero offset}2 %1 behaves differently from 'static_cast'", 565, SFINAE_Suppress, false, false, 2)
-DIAG(warn_related_result_type_compatibility_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method is expected to return an instance of its class type %diff{$, but is declared to return $|, but is declared to return different type}0,1", 0, SFINAE_Suppress, false, false, 17)
-DIAG(warn_related_result_type_compatibility_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "protocol method is expected to return an instance of the implementing class, but is declared to return %0", 0, SFINAE_Suppress, false, false, 17)
-DIAG(warn_remainder_division_by_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{remainder|division}0 by zero is undefined", 182, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ret_addr_label, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning address of label, which is local", 572, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ret_local_temp_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning %select{address of|reference to}0 local temporary object", 572, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ret_stack_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{address of|reference to}0 stack memory associated with %select{local variable|parameter}2 %1 returned", 572, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_missing_expr, CLASS_WARNING, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 575, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_std_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local variable %0 will be copied despite being %select{returned|thrown}1 by name", 573, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_std_move_in_cxx11, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "prior to the resolution of a defect report against ISO C++11, local variable %0 would have been copied despite being returned by name, due to its not matching the function return type%diff{ ($ vs $)|}1,2", 574, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_typestate_for_unconsumable_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return state set for an unconsumable type '%0'", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return value not in expected state; expected '%0', observed '%1'", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_value_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "return value of %0 is a large (%1 bytes) pass-by-value object; pass it by reference instead ?", 353, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_value_udt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns user-defined type %1 which is incompatible with C", 576, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_value_udt_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns incomplete type %1 which could be incompatible with C", 576, SFINAE_Suppress, false, false, 2)
-DIAG(warn_riscv_repeated_interrupt_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "repeated RISC-V 'interrupt' attribute", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_root_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 is being used on 'Class' which is not in the root class", 475, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sampler_initializer_invalid_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "sampler initializer has invalid %0 bits", 614, SFINAE_Suppress, false, false, 2)
-DIAG(warn_scanf_nonzero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero field width in scanf format string is unused", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_scanf_scanlist_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no closing ']' for '%%[' in scanf format string", 234, SFINAE_Suppress, false, false, 28)
-DIAG(warn_second_arg_of_va_start_not_last_named_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_start' is not the last named parameter", 743, SFINAE_Suppress, false, false, 2)
-DIAG(warn_second_parameter_to_va_arg_never_compatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_arg' is of promotable type %0; this va_arg has undefined behavior because arguments will be promoted to %1", 743, SFINAE_Suppress, false, false, 2)
-DIAG(warn_second_parameter_to_va_arg_not_pod, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of non-POD type %0", 442, SFINAE_Suppress, false, false, 2)
-DIAG(warn_second_parameter_to_va_arg_ownership_qualified, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of ARC ownership-qualified type %0", 442, SFINAE_Suppress, false, false, 2)
-DIAG(warn_self_assignment_builtin, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 581, SFINAE_Suppress, false, false, 2)
-DIAG(warn_self_assignment_overloaded, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 583, SFINAE_Suppress, false, false, 2)
-DIAG(warn_self_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly moving variable of type %0 to itself", 584, SFINAE_Suppress, false, false, 2)
-DIAG(warn_setter_getter_impl_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation", 482, SFINAE_Suppress, false, false, 2)
-DIAG(warn_setter_getter_impl_required_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 482, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shadow_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{parameter|non-static data member}3 %0 %select{|of %1 }3shadows member inherited from type %2", 591, SFINAE_Suppress, false, false, 0)
-DIAG(warn_shift_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count >= width of type", 597, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_lhs_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shifting a negative signed value is undefined", 598, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count is negative", 596, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_result_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "signed shift result (%0) requires %1 bits to represent, but %2 only has %3 bits", 600, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_result_sets_sign_bit, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed shift result (%0) sets the sign bit of the shift expression's type (%1) and becomes negative", 601, SFINAE_Suppress, false, false, 2)
-DIAG(warn_side_effects_typeid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects will be evaluated despite being used as an operand to 'typeid'", 536, SFINAE_Suppress, false, false, 32)
-DIAG(warn_side_effects_unevaluated_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects has no effect in an unevaluated context", 685, SFINAE_Suppress, false, false, 32)
-DIAG(warn_signed_bitfield_enum_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed bit-field %0 needs an extra bit to represent the largest positive enumerators of %1", 60, SFINAE_Suppress, false, false, 24)
-DIAG(warn_sizeof_array_decay, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on pointer operation will return size of %0 instead of %1", 608, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sizeof_array_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on array function parameter will return size of %0 instead of %1", 607, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sizeof_pointer_expr_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' call operates on objects of type %1 while the size is based on a different type %2", 610, SFINAE_Suppress, false, false, 2)
+DIAG(warn_reinterpret_different_from_static, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'reinterpret_cast' %select{from|to}3 class %0 %select{to|from}3 its %select{virtual base|base at non-zero offset}2 %1 behaves differently from 'static_cast'", 573, SFINAE_Suppress, false, false, 2)
+DIAG(warn_related_result_type_compatibility_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method is expected to return an instance of its class type %diff{$, but is declared to return $|, but is declared to return different type}0,1", 0, SFINAE_Suppress, false, false, 18)
+DIAG(warn_related_result_type_compatibility_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "protocol method is expected to return an instance of the implementing class, but is declared to return %0", 0, SFINAE_Suppress, false, false, 18)
+DIAG(warn_remainder_division_by_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{remainder|division}0 by zero is undefined", 183, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_addr_label, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning address of label, which is local", 580, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_local_temp_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning %select{address of|reference to}0 local temporary object", 580, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_stack_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{address of|reference to}0 stack memory associated with %select{local variable|parameter}2 %1 returned", 580, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_missing_expr, CLASS_WARNING, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 583, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_std_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local variable %0 will be copied despite being %select{returned|thrown}1 by name", 581, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_std_move_in_cxx11, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "prior to the resolution of a defect report against ISO C++11, local variable %0 would have been copied despite being returned by name, due to its not matching the function return type%diff{ ($ vs $)|}1,2", 582, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_typestate_for_unconsumable_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return state set for an unconsumable type '%0'", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return value not in expected state; expected '%0', observed '%1'", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "return value of %0 is a large (%1 bytes) pass-by-value object; pass it by reference instead ?", 357, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_udt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns user-defined type %1 which is incompatible with C", 584, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_udt_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns incomplete type %1 which could be incompatible with C", 584, SFINAE_Suppress, false, false, 2)
+DIAG(warn_riscv_repeated_interrupt_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "repeated RISC-V 'interrupt' attribute", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_root_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 is being used on 'Class' which is not in the root class", 483, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sampler_initializer_invalid_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "sampler initializer has invalid %0 bits", 622, SFINAE_Suppress, false, false, 2)
+DIAG(warn_scanf_nonzero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero field width in scanf format string is unused", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_scanf_scanlist_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no closing ']' for '%%[' in scanf format string", 237, SFINAE_Suppress, false, false, 29)
+DIAG(warn_second_arg_of_va_start_not_last_named_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_start' is not the last named parameter", 753, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_never_compatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_arg' is of promotable type %0; this va_arg has undefined behavior because arguments will be promoted to %1", 753, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_not_pod, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of non-POD type %0", 448, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_ownership_qualified, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of ARC ownership-qualified type %0", 448, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_assignment_builtin, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 589, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_assignment_overloaded, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 591, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly moving variable of type %0 to itself", 592, SFINAE_Suppress, false, false, 2)
+DIAG(warn_setter_getter_impl_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation", 490, SFINAE_Suppress, false, false, 2)
+DIAG(warn_setter_getter_impl_required_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 490, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shadow_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{parameter|non-static data member}3 %0 %select{|of %1 }3shadows member inherited from type %2", 599, SFINAE_Suppress, false, false, 0)
+DIAG(warn_shift_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count >= width of type", 605, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_lhs_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shifting a negative signed value is undefined", 606, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count is negative", 604, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_result_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "signed shift result (%0) requires %1 bits to represent, but %2 only has %3 bits", 608, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_result_sets_sign_bit, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed shift result (%0) sets the sign bit of the shift expression's type (%1) and becomes negative", 609, SFINAE_Suppress, false, false, 2)
+DIAG(warn_side_effects_typeid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects will be evaluated despite being used as an operand to 'typeid'", 544, SFINAE_Suppress, false, false, 33)
+DIAG(warn_side_effects_unevaluated_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects has no effect in an unevaluated context", 695, SFINAE_Suppress, false, false, 33)
+DIAG(warn_signed_bitfield_enum_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed bit-field %0 needs an extra bit to represent the largest positive enumerators of %1", 61, SFINAE_Suppress, false, false, 25)
+DIAG(warn_sizeof_array_decay, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on pointer operation will return size of %0 instead of %1", 616, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_array_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on array function parameter will return size of %0 instead of %1", 615, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_pointer_expr_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' call operates on objects of type %1 while the size is based on a different type %2", 618, SFINAE_Suppress, false, false, 2)
 DIAG(warn_sizeof_pointer_expr_memaccess_note, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to %select{dereference the argument to 'sizeof' (and multiply it by the number of elements)|remove the addressof in the argument to 'sizeof' (and multiply it by the number of elements)|provide an explicit length}0?", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sizeof_pointer_type_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to 'sizeof' in %0 call is the same pointer type %1 as the %select{destination|source}2; expected %3 or an explicit length", 610, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sometimes_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{used|captured}1 uninitialized whenever %select{'%3' condition is %select{true|false}4|'%3' loop %select{is entered|exits because its condition is false}4|'%3' loop %select{condition is true|exits because its condition is false}4|switch %3 is taken|its declaration is reached|%3 is called}2", 612, SFINAE_Suppress, false, false, 2)
-DIAG(warn_standalone_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' ignored on this declaration", 405, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_pointer_type_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to 'sizeof' in %0 call is the same pointer type %1 as the %select{destination|source}2; expected %3 or an explicit length", 618, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sometimes_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{used|captured}1 uninitialized whenever %select{'%3' condition is %select{true|false}4|'%3' loop %select{is entered|exits because its condition is false}4|'%3' loop %select{condition is true|exits because its condition is false}4|switch %3 is taken|its declaration is reached|%3 is called}2", 620, SFINAE_Suppress, false, false, 2)
+DIAG(warn_standalone_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' ignored on this declaration", 410, SFINAE_Suppress, false, false, 2)
 DIAG(warn_static_array_too_small, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array argument is too small; %select{contains %0 elements|is of size %0}2, callee requires at least %1", 32, SFINAE_Suppress, false, false, 2)
-DIAG(warn_static_local_in_extern_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-constant static local variable in inline function may be different in different files", 619, SFINAE_Suppress, false, false, 2)
-DIAG(warn_static_main, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'main' should not be declared static", 363, SFINAE_Suppress, false, false, 2)
-DIAG(warn_static_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "static variable %0 is suspiciously used within its own initialization", 620, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strict_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple methods named %0 found", 634, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strict_prototypes, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "this %select{function declaration is not|block declaration is not|old-style function definition is not preceded by}0 a prototype", 633, SFINAE_Suppress, false, false, 2)
-DIAG(warn_string_plus_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string pointer does not append to the string", 637, SFINAE_Suppress, false, false, 2)
-DIAG(warn_string_plus_int, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string does not append to the string", 638, SFINAE_Suppress, false, false, 2)
-DIAG(warn_stringcompare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison against %select{a string literal|@encode}0 is unspecified (use strncmp instead)", 635, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strlcpycat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call appears to be size of the source; expected the size of the destination", 639, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strncat_large_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument in 'strncat' is too large, might lead to a buffer overflow", 640, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strncat_src_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in 'strncat' call appears to be size of the source", 640, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strncat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument to 'strncat' is wrong", 640, SFINAE_Suppress, false, false, 2)
-DIAG(warn_struct_class_previous_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", 403, SFINAE_Suppress, false, false, 2)
-DIAG(warn_struct_class_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", 403, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sub_ptr_zero_size_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subtraction of pointers to type %0 of zero size has undefined behavior", 530, SFINAE_Suppress, false, false, 2)
-DIAG(warn_subobject_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subobject initialization overrides initialization of other fields within its enclosing subobject", 324, SFINAE_Suppress, false, false, 2)
-DIAG(warn_subscript_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array subscript is of type 'char'", 122, SFINAE_Suppress, false, false, 2)
-DIAG(warn_suggest_noreturn_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block could be declared with attribute 'noreturn'", 412, SFINAE_Suppress, false, false, 2)
-DIAG(warn_suggest_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|method}0 %1 could be declared with attribute 'noreturn'", 412, SFINAE_Suppress, false, false, 2)
-DIAG(warn_superclass_variable_sized_type_not_at_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 can overwrite instance variable %1 with variable sized type %2 in superclass %3", 468, SFINAE_Suppress, false, false, 2)
-DIAG(warn_suspicious_bzero_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'size' argument to bzero is '0'", 642, SFINAE_Suppress, false, false, 2)
-DIAG(warn_suspicious_sizeof_memset, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{'size' argument to memset is '0'|setting buffer to a 'sizeof' expression}0; did you mean to transpose the last two arguments?", 368, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sync_fetch_and_nand_semantics_change, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here", 648, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_local_in_extern_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-constant static local variable in inline function may be different in different files", 627, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_main, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'main' should not be declared static", 367, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "static variable %0 is suspiciously used within its own initialization", 628, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strict_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple methods named %0 found", 642, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strict_prototypes, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "this %select{function declaration is not|block declaration is not|old-style function definition is not preceded by}0 a prototype", 641, SFINAE_Suppress, false, false, 2)
+DIAG(warn_string_plus_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string pointer does not append to the string", 645, SFINAE_Suppress, false, false, 2)
+DIAG(warn_string_plus_int, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string does not append to the string", 646, SFINAE_Suppress, false, false, 2)
+DIAG(warn_stringcompare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison against %select{a string literal|@encode}0 is unspecified (use strncmp instead)", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strlcpycat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call appears to be size of the source; expected the size of the destination", 647, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_large_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument in 'strncat' is too large, might lead to a buffer overflow", 648, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_src_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in 'strncat' call appears to be size of the source", 648, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument to 'strncat' is wrong", 648, SFINAE_Suppress, false, false, 2)
+DIAG(warn_struct_class_previous_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", 408, SFINAE_Suppress, false, false, 2)
+DIAG(warn_struct_class_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", 408, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sub_ptr_zero_size_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subtraction of pointers to type %0 of zero size has undefined behavior", 538, SFINAE_Suppress, false, false, 2)
+DIAG(warn_subobject_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subobject initialization overrides initialization of other fields within its enclosing subobject", 328, SFINAE_Suppress, false, false, 2)
+DIAG(warn_subscript_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array subscript is of type 'char'", 123, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suggest_noreturn_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block could be declared with attribute 'noreturn'", 417, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suggest_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|method}0 %1 could be declared with attribute 'noreturn'", 417, SFINAE_Suppress, false, false, 2)
+DIAG(warn_superclass_variable_sized_type_not_at_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 can overwrite instance variable %1 with variable sized type %2 in superclass %3", 476, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suspicious_bzero_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'size' argument to bzero is '0'", 650, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suspicious_sizeof_memset, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{'size' argument to memset is '0'|setting buffer to a 'sizeof' expression}0; did you mean to transpose the last two arguments?", 372, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sync_fetch_and_nand_semantics_change, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here", 656, SFINAE_Suppress, false, false, 2)
 DIAG(warn_taking_address_of_packed_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value", 12, SFINAE_Suppress, false, false, 2)
-DIAG(warn_tautological_bool_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 651, SFINAE_Suppress, false, false, 2)
-DIAG(warn_tautological_constant_compare, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison %select{%3|%1}0 %2 %select{%1|%3}0 is always %4", 656, SFINAE_Suppress, false, false, 2)
-DIAG(warn_tautological_overlap_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "overlapping comparisons always evaluate to %select{false|true}0", 654, SFINAE_Suppress, false, false, 2)
-DIAG(warn_template_arg_negative, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument with value '%0' converted to '%1' for unsigned template parameter of type %2", 137, SFINAE_Suppress, false, false, 24)
-DIAG(warn_template_arg_too_large, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument value '%0' truncated to '%1' for template parameter of type %2", 137, SFINAE_Suppress, false, false, 24)
+DIAG(warn_tautological_bool_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 659, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_compare_objc_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of constant %0 with expression of type BOOL is always %1, as the only well defined values for BOOL are YES and NO", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_constant_compare, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison %select{%3|%1}0 %2 %select{%1|%3}0 is always %4", 665, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_overlap_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "overlapping comparisons always evaluate to %select{false|true}0", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_arg_negative, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument with value '%0' converted to '%1' for unsigned template parameter of type %2", 138, SFINAE_Suppress, false, false, 25)
+DIAG(warn_template_arg_too_large, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument value '%0' truncated to '%1' for template parameter of type %2", 138, SFINAE_Suppress, false, false, 25)
 DIAG(warn_template_export_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exported templates are unsupported", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_template_qualified_friend_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend template declaration is not supported; ignoring this friend declaration", 712, SFINAE_Suppress, false, false, 2)
-DIAG(warn_template_qualified_friend_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend class declaration is not supported; turning off access control for %1", 712, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_qualified_friend_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend template declaration is not supported; ignoring this friend declaration", 722, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_qualified_friend_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend class declaration is not supported; turning off access control for %1", 722, SFINAE_Suppress, false, false, 2)
 DIAG(warn_template_spec_extra_headers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extraneous template parameter list in template specialization", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_tentative_incomplete_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "tentative array definition assumed to have one element", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_this_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true", 678, SFINAE_Suppress, false, false, 24)
-DIAG(warn_this_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 657, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_argument_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute requires arguments whose type is annotated with 'capability' attribute; type here is %1", 663, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_decl_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute can only be applied in a context annotated with 'capability(\"mutex\")' attribute", 663, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_decl_not_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 only applies to pointer types; type here is %1", 663, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ignoring %0 attribute because its argument is invalid", 663, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_not_on_capability_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute without capability arguments refers to 'this', but %1 isn't annotated with 'capability' or 'scoped_lockable' attribute", 663, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_not_on_non_static_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute without capability arguments can only be applied to non-static methods of a class", 663, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_safety_beta, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety beta warning.", 664, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_safety_verbose, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety verbose warning.", 668, SFINAE_Suppress, false, false, 2)
-DIAG(warn_throw_in_noexcept_func, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has a non-throwing exception specification but can still throw", 212, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_field_size_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alignment|size}0 of field %1 (%2 bits) does not match the %select{alignment|size}0 of the first field in transparent union; transparent_union attribute ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_floating, CLASS_WARNING, (unsigned)diag::Severity::Warning, "first field of a transparent union cannot have %select{floating point|vector}0 type %1; transparent_union attribute ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_not_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent_union attribute can only be applied to a union definition; attribute ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_zero_fields, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent union definition must contain at least one field; transparent_union attribute ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_attribute_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_safety_null_pointer_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specified %0 type tag requires a null pointer", 671, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_safety_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument type %0 doesn't match specified %1 type tag %select{that requires %3|}2", 671, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_tag_for_datatype_wrong_kind, CLASS_WARNING, (unsigned)diag::Severity::Warning, "this type tag was not designed to be used with this function", 671, SFINAE_Suppress, false, false, 2)
-DIAG(warn_typecheck_function_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has no effect", 287, SFINAE_Suppress, false, false, 2)
+DIAG(warn_this_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true", 687, SFINAE_Suppress, false, false, 25)
+DIAG(warn_this_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 666, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_argument_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute requires arguments whose type is annotated with 'capability' attribute; type here is %1", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_decl_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute can only be applied in a context annotated with 'capability(\"mutex\")' attribute", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_decl_not_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 only applies to pointer types; type here is %1", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ignoring %0 attribute because its argument is invalid", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_not_on_capability_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute without capability arguments refers to 'this', but %1 isn't annotated with 'capability' or 'scoped_lockable' attribute", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_not_on_non_static_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute without capability arguments can only be applied to non-static methods of a class", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_safety_beta, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety beta warning.", 673, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_safety_verbose, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety verbose warning.", 677, SFINAE_Suppress, false, false, 2)
+DIAG(warn_throw_in_noexcept_func, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has a non-throwing exception specification but can still throw", 213, SFINAE_Suppress, false, false, 2)
+DIAG(warn_throw_underaligned_obj, CLASS_WARNING, (unsigned)diag::Severity::Warning, "underaligned exception object thrown", 694, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_field_size_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alignment|size}0 of field %1 (%2 bits) does not match the %select{alignment|size}0 of the first field in transparent union; transparent_union attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_floating, CLASS_WARNING, (unsigned)diag::Severity::Warning, "first field of a transparent union cannot have %select{floating point|vector}0 type %1; transparent_union attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_not_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent_union attribute can only be applied to a union definition; attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_zero_fields, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent union definition must contain at least one field; transparent_union attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_attribute_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_safety_null_pointer_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specified %0 type tag requires a null pointer", 680, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_safety_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument type %0 doesn't match specified %1 type tag %select{that requires %3|}2", 680, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_tag_for_datatype_wrong_kind, CLASS_WARNING, (unsigned)diag::Severity::Warning, "this type tag was not designed to be used with this function", 680, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_function_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has no effect", 291, SFINAE_Suppress, false, false, 2)
 DIAG(warn_typecheck_function_qualifiers_unspecified, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has unspecified behavior", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_typecheck_reference_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on reference type %1 has no effect", 287, SFINAE_Suppress, false, false, 2)
-DIAG(warn_typecheck_vector_element_sizes_not_equal, CLASS_WARNING, (unsigned)diag::Severity::Error, "vector operands do not have the same elements sizes (%0 and %1)", 745, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_reference_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on reference type %1 has no effect", 291, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_vector_element_sizes_not_equal, CLASS_WARNING, (unsigned)diag::Severity::Error, "vector operands do not have the same elements sizes (%0 and %1)", 755, SFINAE_Suppress, false, false, 2)
 DIAG(warn_typecheck_zero_static_array_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'static' has no effect on zero-length arrays", 32, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unannotated_fallthrough, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels", 292, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unannotated_fallthrough_per_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels in partly-annotated function", 293, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unavailable_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing unavailable method", 168, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unavailable_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be unavailable because the receiver type is unknown", 675, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undeclared_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0", 676, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undeclared_selector_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0; did you mean %1?", 676, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unannotated_fallthrough, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels", 296, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unannotated_fallthrough_per_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels in partly-annotated function", 297, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unavailable_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing unavailable method", 169, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unavailable_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be unavailable because the receiver type is unknown", 684, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undeclared_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0", 685, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undeclared_selector_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0; did you mean %1?", 685, SFINAE_Suppress, false, false, 2)
 DIAG(warn_undef_interface, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find interface declaration for %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_undef_interface_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find interface declaration for %0; did you mean %1?", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undef_method_impl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method definition for %0 not found", 315, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undef_method_impl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method definition for %0 not found", 319, SFINAE_Suppress, false, false, 2)
 DIAG(warn_undef_protocolref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find protocol definition for %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undefined_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline function %q0 is not defined", 680, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undefined_internal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{function|variable}0 %q1 has internal linkage but is not defined", 681, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undefined_reinterpret_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reinterpret_cast from %0 to %1 has undefined behavior", 683, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unguarded_availability, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is only available on %1 %2 or newer", 686, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unguarded_availability_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is only available on %1 %2 or newer", 687, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unhandled_ms_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__declspec attribute %0 is not supported", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unimplemented_protocol_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method %0 in protocol %1 not implemented", 552, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unimplemented_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no method with selector %0 is implemented in this translation unit", 579, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_byref_blockvar_captured_by_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block pointer variable %0 is uninitialized when captured by block", 692, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable %0 is uninitialized when used within its own initialization", 692, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_self_reference_in_reference_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used within its own initialization", 692, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is uninitialized when %select{used here|captured by block}1", 692, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unknown_sanitizer_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown sanitizer '%0' ignored", 697, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unlock_but_no_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' that was not held", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unlock_kind_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' using %select{shared|exclusive}2 access, expected %select{shared|exclusive}3 access", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unneeded_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|variable}0 %1 is not needed and will not be emitted", 700, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unneeded_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "member function %0 is not needed and will not be emitted", 701, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unneeded_static_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'static' function %0 declared in header file should be declared 'static inline'", 700, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "code will never be executed", 702, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_break, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'break' will never be executed", 704, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_default, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default label in switch which covers all enumeration values", 141, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_loop_increment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop will run at most once (loop increment never executed)", 705, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'return' will never be executed", 706, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsequenced_mod_mod, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple unsequenced modifications to %0", 707, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsequenced_mod_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsequenced modification and access to %0", 707, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline function %q0 is not defined", 689, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_internal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{function|variable}0 %q1 has internal linkage but is not defined", 690, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_reinterpret_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reinterpret_cast from %0 to %1 has undefined behavior", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unguarded_availability, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is only available on %1 %2 or newer", 696, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unguarded_availability_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is only available on %1 %2 or newer", 697, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unhandled_ms_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__declspec attribute %0 is not supported", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unimplemented_protocol_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method %0 in protocol %1 not implemented", 560, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unimplemented_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no method with selector %0 is implemented in this translation unit", 587, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_byref_blockvar_captured_by_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block pointer variable %0 is %select{uninitialized|null}1 when captured by block", 702, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable %0 is uninitialized when used within its own initialization", 702, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_self_reference_in_reference_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used within its own initialization", 702, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is uninitialized when %select{used here|captured by block}1", 702, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unknown_sanitizer_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown sanitizer '%0' ignored", 707, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unlock_but_no_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' that was not held", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unlock_kind_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' using %select{shared|exclusive}2 access, expected %select{shared|exclusive}3 access", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unneeded_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|variable}0 %1 is not needed and will not be emitted", 710, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unneeded_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "member function %0 is not needed and will not be emitted", 711, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unneeded_static_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'static' function %0 declared in header file should be declared 'static inline'", 710, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "code will never be executed", 712, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_break, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'break' will never be executed", 714, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_default, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default label in switch which covers all enumeration values", 142, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_loop_increment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop will run at most once (loop increment never executed)", 715, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'return' will never be executed", 716, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsequenced_mod_mod, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple unsequenced modifications to %0", 717, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsequenced_mod_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsequenced modification and access to %0", 717, SFINAE_Suppress, false, false, 2)
 DIAG(warn_unsigned_abs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the absolute value of unsigned type %0 has no effect", 8, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsigned_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned expression}0 %2 %select{unsigned expression|%3}0 is always %4", 659, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsigned_bitfield_assigned_signed_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "assigning value of signed enum type %1 to unsigned bit-field %0; negative enumerators of enum %1 will be converted to positive values", 60, SFINAE_Suppress, false, false, 24)
-DIAG(warn_unsigned_enum_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned enum expression}0 %2 %select{unsigned enum expression|%3}0 is always %4", 658, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsupported_lifetime_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sorry, lifetime extension of %select{temporary|backing array of initializer list}0 created by aggregate initialization using default member initializer is not supported; lifetime of %select{temporary|backing array}0 will end at the end of the full-expression", 149, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsupported_target_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{unsupported|duplicate}0%select{| architecture}1 '%2' in the 'target' attribute string; 'target' attribute ignored", 282, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 737, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{equality|inequality|relational|three-way}0 comparison result unused", 721, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_const_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 722, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_container_subscript_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "container access result unused - container access should not be used for side effects", 737, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_exception_param, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused exception parameter %0", 723, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused", 737, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused function %0", 724, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_label, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused label %0", 726, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda capture %0 is not %select{used|required to be captured for this use}1", 727, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_local_typedef, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{typedef|type alias}0 %1", 728, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused member function %0", 731, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_parameter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused parameter %0", 732, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_private_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "private field %0 is not used", 733, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_property_backing_ivar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ivar %0 which backs the property is not referenced in this property's accessor", 734, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_property_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access result unused - getters should not be used for side effects", 725, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_result, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 735, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{function|variable}0 template %1", 736, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 738, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_voidptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; should this cast be to 'void'?", 737, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; assign into a variable to force a volatile load", 739, SFINAE_Suppress, false, false, 2)
-DIAG(warn_use_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on object '%1' while it is in the '%2' state", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_use_of_temp_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on a temporary object while it is in the '%1' state", 136, SFINAE_Suppress, false, false, 2)
-DIAG(warn_used_but_marked_unused, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 was marked unused but was used", 740, SFINAE_Suppress, false, false, 2)
-DIAG(warn_user_literal_reserved, CLASS_WARNING, (unsigned)diag::Severity::Warning, "user-defined literal suffixes not starting with '_' are reserved%select{; no literal will invoke this operator|}0", 741, SFINAE_Suppress, false, false, 2)
-DIAG(warn_using_directive_in_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using namespace directive in global context in header", 280, SFINAE_Suppress, false, false, 2)
-DIAG(warn_va_start_type_is_undefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "passing %select{an object that undergoes default argument promotion|an object of reference type|a parameter declared with the 'register' keyword}0 to 'va_start' has undefined behavior", 743, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_deref_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 the value pointed to by %0 requires holding %select{any mutex|any mutex exclusively}1", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_deref_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_deref_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 666, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instantiation of variable %q0 required here, but no definition is available", 684, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 variable %0 requires holding %select{any mutex|any mutex exclusively}1", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 662, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 666, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_sized_ivar_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 is not visible to subclasses and can conflict with their instance variables", 468, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variables_not_in_loop_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable%select{s| %1|s %1 and %2|s %1, %2, and %3|s %1, %2, %3, and %4}0 used in loop condition not modified in loop body", 233, SFINAE_Suppress, false, false, 2)
-DIAG(warn_vbase_moved_multiple_times, CLASS_WARNING, (unsigned)diag::Severity::Warning, "defaulted move assignment operator of %0 will move assign virtual base class %1 multiple times", 430, SFINAE_Suppress, false, false, 2)
-DIAG(warn_vector_long_decl_spec_combination, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Use of 'long' with '__vector' is deprecated", 164, SFINAE_Suppress, false, false, 27)
-DIAG(warn_vector_mode_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying vector types with the 'mode' attribute is deprecated; use the 'vector_size' attribute instead", 165, SFINAE_Suppress, false, false, 27)
-DIAG(warn_vla_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable length array used", 750, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsigned_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned expression}0 %2 %select{unsigned expression|%3}0 is always %4", 668, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsigned_bitfield_assigned_signed_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "assigning value of signed enum type %1 to unsigned bit-field %0; negative enumerators of enum %1 will be converted to positive values", 61, SFINAE_Suppress, false, false, 25)
+DIAG(warn_unsigned_enum_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned enum expression}0 %2 %select{unsigned enum expression|%3}0 is always %4", 667, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsupported_lifetime_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sorry, lifetime extension of %select{temporary|backing array of initializer list}0 created by aggregate initialization using default member initializer is not supported; lifetime of %select{temporary|backing array}0 will end at the end of the full-expression", 150, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsupported_target_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{unsupported|duplicate}0%select{| architecture}1 '%2' in the 'target' attribute string; 'target' attribute ignored", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 747, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{equality|inequality|relational|three-way}0 comparison result unused", 731, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_const_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 732, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_container_subscript_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "container access result unused - container access should not be used for side effects", 747, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_exception_param, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused exception parameter %0", 733, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused", 747, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused function %0", 734, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_label, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused label %0", 736, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda capture %0 is not %select{used|required to be captured for this use}1", 737, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_local_typedef, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{typedef|type alias}0 %1", 738, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused member function %0", 741, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_parameter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused parameter %0", 742, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_private_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "private field %0 is not used", 743, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_property_backing_ivar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ivar %0 which backs the property is not referenced in this property's accessor", 744, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_property_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access result unused - getters should not be used for side effects", 735, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_result, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 745, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{function|variable}0 template %1", 746, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 748, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_voidptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; should this cast be to 'void'?", 747, SFINAE_Suppress, false, false, 33)
+DIAG(warn_unused_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; assign into a variable to force a volatile load", 749, SFINAE_Suppress, false, false, 2)
+DIAG(warn_use_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on object '%1' while it is in the '%2' state", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_use_of_temp_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on a temporary object while it is in the '%1' state", 137, SFINAE_Suppress, false, false, 2)
+DIAG(warn_used_but_marked_unused, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 was marked unused but was used", 750, SFINAE_Suppress, false, false, 2)
+DIAG(warn_user_literal_reserved, CLASS_WARNING, (unsigned)diag::Severity::Warning, "user-defined literal suffixes not starting with '_' are reserved%select{; no literal will invoke this operator|}0", 751, SFINAE_Suppress, false, false, 2)
+DIAG(warn_using_directive_in_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using namespace directive in global context in header", 284, SFINAE_Suppress, false, false, 2)
+DIAG(warn_va_start_type_is_undefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "passing %select{an object that undergoes default argument promotion|an object of reference type|a parameter declared with the 'register' keyword}0 to 'va_start' has undefined behavior", 753, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 the value pointed to by %0 requires holding %select{any mutex|any mutex exclusively}1", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 675, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instantiation of variable %q0 required here, but no definition is available", 693, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 variable %0 requires holding %select{any mutex|any mutex exclusively}1", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 675, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_sized_ivar_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 is not visible to subclasses and can conflict with their instance variables", 476, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variables_not_in_loop_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable%select{s| %1|s %1 and %2|s %1, %2, and %3|s %1, %2, %3, and %4}0 used in loop condition not modified in loop body", 236, SFINAE_Suppress, false, false, 2)
+DIAG(warn_vbase_moved_multiple_times, CLASS_WARNING, (unsigned)diag::Severity::Warning, "defaulted move assignment operator of %0 will move assign virtual base class %1 multiple times", 436, SFINAE_Suppress, false, false, 2)
+DIAG(warn_vector_long_decl_spec_combination, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Use of 'long' with '__vector' is deprecated", 165, SFINAE_Suppress, false, false, 28)
+DIAG(warn_vector_mode_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying vector types with the 'mode' attribute is deprecated; use the 'vector_size' attribute instead", 166, SFINAE_Suppress, false, false, 28)
+DIAG(warn_vla_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable length array used", 760, SFINAE_Suppress, false, false, 2)
 DIAG(warn_weak_identifier_undeclared, CLASS_WARNING, (unsigned)diag::Severity::Warning, "weak identifier %0 never declared", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_weak_import, CLASS_WARNING, (unsigned)diag::Severity::Warning, "an already-declared variable is made a weak_import declaration %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_weak_template_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit template instantiation %0 will emit a vtable in every translation unit", 754, SFINAE_Suppress, false, false, 2)
-DIAG(warn_weak_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit", 755, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_template_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit template instantiation %0 will emit a vtable in every translation unit", 764, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit", 765, SFINAE_Suppress, false, false, 2)
 DIAG(warn_wrong_absolute_value_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %select{integer|floating point|complex}1 absolute value function %0 when argument is of %select{integer|floating point|complex}2 type", 8, SFINAE_Suppress, false, false, 2)
-DIAG(warn_zero_as_null_pointer_constant, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "zero as null pointer constant", 758, SFINAE_Suppress, false, false, 19)
-DIAG(warn_zero_size_struct_union_compat, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 71, SFINAE_Suppress, false, false, 2)
-DIAG(warn_zero_size_struct_union_in_extern_c, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 218, SFINAE_Suppress, false, false, 2)
+DIAG(warn_zero_as_null_pointer_constant, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "zero as null pointer constant", 768, SFINAE_Suppress, false, false, 20)
+DIAG(warn_zero_size_struct_union_compat, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 72, SFINAE_Suppress, false, false, 2)
+DIAG(warn_zero_size_struct_union_in_extern_c, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 221, SFINAE_Suppress, false, false, 2)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc
index cba4bcc..2c8f504 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc
@@ -3,65 +3,66 @@
 #undef SERIALIZATIONSTART
 #endif
 
-DIAG(err_fe_ast_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the AST file '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_fe_module_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the module file '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_fe_not_a_pch_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "input is not a PCH file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_fe_pch_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the precompiled header '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_fe_pch_file_overridden, CLASS_ERROR, (unsigned)diag::Severity::Error, "file '%0' from the precompiled header has been overridden", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_fe_pch_malformed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "malformed or corrupted AST file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_fe_pch_malformed_block, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "malformed block record in PCH file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_fe_unable_to_read_pch_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to read PCH file %0: '%1'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_imported_module_modmap_changed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' imported by AST file '%1' found in a different module map file (%2) than when the importing AST file was built (%3)", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_imported_module_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' in AST file '%1' (imported by AST file '%2') is not defined in any loaded module map file; maybe you need to load '%3'?", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_imported_module_relocated, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' was built in directory '%1' but now resides in directory '%2'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_different_modmap, CLASS_ERROR, (unsigned)diag::Severity::Error, "module '%0' %select{uses|does not use}1 additional module map '%2'%select{| not}1 used when the module was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_file_conflict, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' is defined in both '%1' and '%2'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_file_invalid, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%1' is not a valid precompiled %select{PCH|module|AST}0 file", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%select{PCH|module|AST}0 file '%1' not found%select{|: %3}2", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_file_not_module, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "AST file '%0' was not built as a module", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_file_out_of_date, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%select{PCH|module|AST}0 file '%1' is out of date and needs to be rebuilt%select{|: %3}2", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_no_size_mtime_for_header, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\"", 0, SFINAE_SubstitutionFailure, false, true, 18)
-DIAG(err_module_odr_violation_definition_data, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_different_definitions, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2' is here|defined here}1", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_different_instantiations, CLASS_ERROR, (unsigned)diag::Severity::Error, "instantiation of %q0 is different in different modules", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_mismatch_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_mismatch_decl_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initalizer|field %4 with an initializer|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6|data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_mismatch_decl_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 %select{with definition in module '%2'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_missing_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 from module '%1' is not present in definition of %q2%select{ in module '%4'| provided earlier}3", 0, SFINAE_Report, false, true, 15)
-DIAG(err_module_odr_violation_template_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_diagopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is currently enabled, but was not in the PCH file", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_different_branch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file built from a different branch (%0) than the compiler (%1)", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_langopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 was %select{disabled|enabled}1 in PCH file but is currently %select{disabled|enabled}2", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_langopt_value_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 differs in PCH file vs. current file", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_macro_def_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of macro '%0' differs between the precompiled header ('%1') and the command line ('%2')", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_macro_def_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "macro '%0' was %select{defined|undef'd}1 in the precompiled header but %select{undef'd|defined}1 on the command line", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_modulecache_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH was compiled with module cache path '%0', but the path is currently '%1'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_pp_detailed_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-detailed-preprocessing-record' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_targetopt_feature_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{AST file was|current translation unit is}0 compiled with the target feature '%1' but the %select{current translation unit is|AST file was}0 not", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_targetopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file was compiled for the %0 '%1' but the current translation unit is being compiled for target '%2'", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-undef' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_version_too_new, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file uses a newer PCH format that cannot be read", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_version_too_old, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file uses an older PCH format that is no longer supported", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_with_compiler_errors, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file contains compiler errors", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(note_first_module_difference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in first definition, possible difference is here", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_imported_by_pch_module_not_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider adding '%0' to the header search path", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_cache_path, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "after modifying system headers, please delete the module cache at '%0'", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_file_imported_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "imported by %select{|module '%2' in }1'%0'", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_definition_data, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{%2 base %plural{1:class|:classes}2|%2 virtual base %plural{1:class|:classes}2|%ordinal2 base class with different type %3|%ordinal2 %select{non-virtual|virtual}3 base class %4|%ordinal2 base class %3 with %select{public|protected|private|no}4 access specifier}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_different_definitions, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition in module '%0' is here", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_enum, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{enum that is %select{not scoped|scoped}2|enum scoped with keyword %select{struct|class}2|enum %select{without|with}2 specified type|enum with specified type %2|enum with %2 element%s2|%ordinal2 element has name %3|%ordinal2 element %3 %select{has|does not have}4 an initializer|%ordinal2 element %3 has different initializer|}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{different return type %2|%ordinal2 parameter with name %3|%ordinal2 parameter with type %3%select{| decayed from %5}4|%ordinal2 parameter with%select{out|}3 a default argument|%ordinal2 parameter with a different default argument|a different body}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_mismatch_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_mismatch_decl_diff, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{static assert with different condition|static assert with different message|static assert with %select{|no }2message|field %2|field %2 with type %3|%select{non-|}3bitfield %2|bitfield %2 with different width expression|%select{non-|}3mutable field %2|field %2 with %select{no|an}3 initializer|field %2 with a different initializer|%select{method %3|constructor|destructor}2|%select{method %3|constructor|destructor}2 is %select{not deleted|deleted}4|%select{method %3|constructor|destructor}2 is %select{not defaulted|defaulted}4|%select{method %3|constructor|destructor}2 is %select{|pure }4%select{not virtual|virtual}5|%select{method %3|constructor|destructor}2 is %select{not static|static}4|%select{method %3|constructor|destructor}2 is %select{not volatile|volatile}4|%select{method %3|constructor|destructor}2 is %select{not const|const}4|%select{method %3|constructor|destructor}2 is %select{not inline|inline}4|%select{method %3|constructor|destructor}2 that has %4 parameter%s4|%select{method %3|constructor|destructor}2 with %ordinal4 parameter of type %5%select{| decayed from %7}6|%select{method %3|constructor|destructor}2 with %ordinal4 parameter named %5|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with%select{out|}5 a default argument|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with a different default argument|%select{method %3|constructor|destructor}2 with %select{no |}4template arguments|%select{method %3|constructor|destructor}2 with %4 template argument%s4|%select{method %3|constructor|destructor}2 with %4 for %ordinal5 template argument|%select{method %3|constructor|destructor}2 with %select{no body|body}4|%select{method %3|constructor|destructor}2 with different body|%select{typedef|type alias}2 name %3|%select{typedef|type alias}2 %3 with different underlying type %4|data member with name %2|data member %2 with different type %3|data member %2 with%select{out|}3 an initializer|data member %2 with a different initializer|data member %2 %select{is constexpr|is not constexpr}3|friend %select{class|function}2|friend %2|friend function %2|function template %2 with %3 template parameter%s3|function template %2 with %ordinal3 template paramter being a %select{type|non-type|template}4 template parameter|function template %2 with %ordinal3 template parameter %select{with no name|named %5}4|function template %2 with %ordinal3 template parameter with %select{no |}4default argument|function template %2 with %ordinal3 template parameter with default argument %4|function template %2 with %ordinal3 template parameter with different type|function template %2 with %ordinal3 template parameter %select{not |}4being a template parameter pack|}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_mismatch_decl_unknown, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|another unexpected decl}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_no_possible_decls, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition has no member %0", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_possible_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration of %0 does not match", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_template_parameter, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{unnamed template parameter %2|template parameter %2|template parameter with %select{no |}2default argument|template parameter with different default argument}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_pch_rebuild_required, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "please rebuild precompiled header '%0'", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_pch_required_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' required by '%1'", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_second_module_difference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in second definition, possible difference is here", 0, SFINAE_Suppress, false, false, 15)
-DIAG(warn_duplicate_module_file_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate module file extension block name '%0'", 421, SFINAE_Suppress, false, false, 15)
-DIAG(warn_module_system_bit_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module file '%0' was validated as a system module and is now being imported as a non-system module; any difference in diagnostic options will be ignored", 419, SFINAE_Suppress, false, false, 15)
-DIAG(warn_module_uses_date_time, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{precompiled header|module}0 uses __DATE__ or __TIME__", 526, SFINAE_Suppress, false, false, 18)
+DIAG(err_fe_ast_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the AST file '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_module_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the module file '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_not_a_pch_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "input is not a PCH file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_pch_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the precompiled header '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_pch_file_overridden, CLASS_ERROR, (unsigned)diag::Severity::Error, "file '%0' from the precompiled header has been overridden", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_pch_malformed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "malformed or corrupted AST file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_pch_malformed_block, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "malformed block record in PCH file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_unable_to_read_pch_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to read PCH file %0: '%1'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_imported_module_modmap_changed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' imported by AST file '%1' found in a different module map file (%2) than when the importing AST file was built (%3)", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_imported_module_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' in AST file '%1' (imported by AST file '%2') is not defined in any loaded module map file; maybe you need to load '%3'?", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_imported_module_relocated, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' was built in directory '%1' but now resides in directory '%2'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_different_modmap, CLASS_ERROR, (unsigned)diag::Severity::Error, "module '%0' %select{uses|does not use}1 additional module map '%2'%select{| not}1 used when the module was built", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_file_conflict, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' is defined in both '%1' and '%2'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_file_invalid, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%1' is not a valid precompiled %select{PCH|module|AST}0 file", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%select{PCH|module|AST}0 file '%1' not found%select{|: %3}2", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_file_not_module, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "AST file '%0' was not built as a module", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_file_out_of_date, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%select{PCH|module|AST}0 file '%1' is out of date and needs to be rebuilt%select{|: %3}2", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_no_size_mtime_for_header, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\"", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_module_odr_violation_definition_data, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_different_definitions, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2' is here|defined here}1", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_different_instantiations, CLASS_ERROR, (unsigned)diag::Severity::Error, "instantiation of %q0 is different in different modules", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_mismatch_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}3", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_mismatch_decl_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initalizer|field %4 with an initializer|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6|data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_mismatch_decl_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 %select{with definition in module '%2'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_module_odr_violation_missing_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 from module '%1' is not present in definition of %q2%select{ in module '%4'| provided earlier}3", 0, SFINAE_Report, false, true, 16)
+DIAG(err_module_odr_violation_template_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_diagopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is currently enabled, but was not in the PCH file", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_different_branch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file built from a different branch (%0) than the compiler (%1)", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_langopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 was %select{disabled|enabled}1 in PCH file but is currently %select{disabled|enabled}2", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_langopt_value_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 differs in PCH file vs. current file", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_macro_def_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of macro '%0' differs between the precompiled header ('%1') and the command line ('%2')", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_macro_def_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "macro '%0' was %select{defined|undef'd}1 in the precompiled header but %select{undef'd|defined}1 on the command line", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_modulecache_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH was compiled with module cache path '%0', but the path is currently '%1'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_pp_detailed_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-detailed-preprocessing-record' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_targetopt_feature_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{AST file was|current translation unit is}0 compiled with the target feature '%1' but the %select{current translation unit is|AST file was}0 not", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_targetopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file was compiled for the %0 '%1' but the current translation unit is being compiled for target '%2'", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-undef' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_version_too_new, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file uses a newer PCH format that cannot be read", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_version_too_old, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file uses an older PCH format that is no longer supported", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_pch_with_compiler_errors, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file contains compiler errors", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(note_first_module_difference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in first definition, possible difference is here", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_imported_by_pch_module_not_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider adding '%0' to the header search path", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_cache_path, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "after modifying system headers, please delete the module cache at '%0'", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_file_imported_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "imported by %select{|module '%2' in }1'%0'", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_definition_data, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{%2 base %plural{1:class|:classes}2|%2 virtual base %plural{1:class|:classes}2|%ordinal2 base class with different type %3|%ordinal2 %select{non-virtual|virtual}3 base class %4|%ordinal2 base class %3 with %select{public|protected|private|no}4 access specifier}1", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_different_definitions, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition in module '%0' is here", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_enum, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{enum that is %select{not scoped|scoped}2|enum scoped with keyword %select{struct|class}2|enum %select{without|with}2 specified type|enum with specified type %2|enum with %2 element%s2|%ordinal2 element has name %3|%ordinal2 element %3 %select{has|does not have}4 an initializer|%ordinal2 element %3 has different initializer|}1", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{different return type %2|%ordinal2 parameter with name %3|%ordinal2 parameter with type %3%select{| decayed from %5}4|%ordinal2 parameter with%select{out|}3 a default argument|%ordinal2 parameter with a different default argument|a different body}1", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_mismatch_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}1", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_mismatch_decl_diff, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{static assert with different condition|static assert with different message|static assert with %select{|no }2message|field %2|field %2 with type %3|%select{non-|}3bitfield %2|bitfield %2 with different width expression|%select{non-|}3mutable field %2|field %2 with %select{no|an}3 initializer|field %2 with a different initializer|%select{method %3|constructor|destructor}2|%select{method %3|constructor|destructor}2 is %select{not deleted|deleted}4|%select{method %3|constructor|destructor}2 is %select{not defaulted|defaulted}4|%select{method %3|constructor|destructor}2 is %select{|pure }4%select{not virtual|virtual}5|%select{method %3|constructor|destructor}2 is %select{not static|static}4|%select{method %3|constructor|destructor}2 is %select{not volatile|volatile}4|%select{method %3|constructor|destructor}2 is %select{not const|const}4|%select{method %3|constructor|destructor}2 is %select{not inline|inline}4|%select{method %3|constructor|destructor}2 that has %4 parameter%s4|%select{method %3|constructor|destructor}2 with %ordinal4 parameter of type %5%select{| decayed from %7}6|%select{method %3|constructor|destructor}2 with %ordinal4 parameter named %5|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with%select{out|}5 a default argument|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with a different default argument|%select{method %3|constructor|destructor}2 with %select{no |}4template arguments|%select{method %3|constructor|destructor}2 with %4 template argument%s4|%select{method %3|constructor|destructor}2 with %4 for %ordinal5 template argument|%select{method %3|constructor|destructor}2 with %select{no body|body}4|%select{method %3|constructor|destructor}2 with different body|%select{typedef|type alias}2 name %3|%select{typedef|type alias}2 %3 with different underlying type %4|data member with name %2|data member %2 with different type %3|data member %2 with%select{out|}3 an initializer|data member %2 with a different initializer|data member %2 %select{is constexpr|is not constexpr}3|friend %select{class|function}2|friend %2|friend function %2|function template %2 with %3 template parameter%s3|function template %2 with %ordinal3 template paramter being a %select{type|non-type|template}4 template parameter|function template %2 with %ordinal3 template parameter %select{with no name|named %5}4|function template %2 with %ordinal3 template parameter with %select{no |}4default argument|function template %2 with %ordinal3 template parameter with default argument %4|function template %2 with %ordinal3 template parameter with different type|function template %2 with %ordinal3 template parameter %select{not |}4being a template parameter pack|}1", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_mismatch_decl_unknown, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|another unexpected decl}1", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_no_possible_decls, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition has no member %0", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_possible_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration of %0 does not match", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_module_odr_violation_template_parameter, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{unnamed template parameter %2|template parameter %2|template parameter with %select{no |}2default argument|template parameter with different default argument}1", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_pch_rebuild_required, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "please rebuild precompiled header '%0'", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_pch_required_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' required by '%1'", 0, SFINAE_Suppress, false, false, 16)
+DIAG(note_second_module_difference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in second definition, possible difference is here", 0, SFINAE_Suppress, false, false, 16)
+DIAG(remark_module_import, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "importing module '%0'%select{| into '%3'}2 from '%1'", 427, SFINAE_Suppress, false, false, 16)
+DIAG(warn_duplicate_module_file_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate module file extension block name '%0'", 426, SFINAE_Suppress, false, false, 16)
+DIAG(warn_module_system_bit_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module file '%0' was validated as a system module and is now being imported as a non-system module; any difference in diagnostic options will be ignored", 424, SFINAE_Suppress, false, false, 16)
+DIAG(warn_module_uses_date_time, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{precompiled header|module}0 uses __DATE__ or __TIME__", 534, SFINAE_Suppress, false, false, 19)
diff --git a/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h b/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h
index 2f65efe..5616860 100644
--- a/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h
+++ b/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h
@@ -22,6 +22,7 @@
   EST_DynamicNone,      ///< throw()
   EST_Dynamic,          ///< throw(T1, T2)
   EST_MSAny,            ///< Microsoft throw(...) extension
+  EST_NoThrow,          ///< Microsoft __declspec(nothrow) extension
   EST_BasicNoexcept,    ///< noexcept
   EST_DependentNoexcept,///< noexcept(expression), value-dependent
   EST_NoexceptFalse,    ///< noexcept(expression), evals to 'false'
@@ -41,7 +42,8 @@
 }
 
 inline bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType) {
-  return ESpecType == EST_BasicNoexcept || isComputedNoexcept(ESpecType);
+  return ESpecType == EST_BasicNoexcept || ESpecType == EST_NoThrow ||
+         isComputedNoexcept(ESpecType);
 }
 
 inline bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType) {
diff --git a/linux-x64/clang/include/clang/Basic/Features.def b/linux-x64/clang/include/clang/Basic/Features.def
index 8fc4e5a..7ab7c4d 100644
--- a/linux-x64/clang/include/clang/Basic/Features.def
+++ b/linux-x64/clang/include/clang/Basic/Features.def
@@ -86,8 +86,6 @@
                                    SanitizerKind::KernelMemory))
 FEATURE(thread_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Thread))
 FEATURE(dataflow_sanitizer, LangOpts.Sanitize.has(SanitizerKind::DataFlow))
-FEATURE(efficiency_sanitizer,
-        LangOpts.Sanitize.hasOneOf(SanitizerKind::Efficiency))
 FEATURE(scudo, LangOpts.Sanitize.hasOneOf(SanitizerKind::Scudo))
 // Objective-C features
 FEATURE(objc_arr, LangOpts.ObjCAutoRefCount) // FIXME: REMOVE?
@@ -118,6 +116,9 @@
 FEATURE(objc_generics, LangOpts.ObjC)
 FEATURE(objc_generics_variance, LangOpts.ObjC)
 FEATURE(objc_class_property, LangOpts.ObjC)
+FEATURE(objc_c_static_assert, LangOpts.C11)
+FEATURE(objc_cxx_static_assert, LangOpts.CPlusPlus11)
+EXTENSION(objc_c_static_assert, true)
 // C11 features
 FEATURE(c_alignas, LangOpts.C11)
 FEATURE(c_alignof, LangOpts.C11)
@@ -246,6 +247,8 @@
 // Miscellaneous language extensions
 EXTENSION(overloadable_unmarked, true)
 EXTENSION(pragma_clang_attribute_namespaces, true)
+EXTENSION(pragma_clang_attribute_external_declaration, true)
+EXTENSION(gnu_asm, LangOpts.GNUAsm)
 
 #undef EXTENSION
 #undef FEATURE
diff --git a/linux-x64/clang/include/clang/Basic/FileManager.h b/linux-x64/clang/include/clang/Basic/FileManager.h
index 88c1467..9698347 100644
--- a/linux-x64/clang/include/clang/Basic/FileManager.h
+++ b/linux-x64/clang/include/clang/Basic/FileManager.h
@@ -67,7 +67,6 @@
   unsigned UID;               // A unique (small) ID for the file.
   llvm::sys::fs::UniqueID UniqueID;
   bool IsNamedPipe;
-  bool InPCH;
   bool IsValid;               // Is this \c FileEntry initialized and valid?
 
   /// The open file, if it is owned by the \p FileEntry.
@@ -75,7 +74,7 @@
 
 public:
   FileEntry()
-      : UniqueID(0, 0), IsNamedPipe(false), InPCH(false), IsValid(false)
+      : UniqueID(0, 0), IsNamedPipe(false), IsValid(false)
   {}
 
   FileEntry(const FileEntry &) = delete;
@@ -87,7 +86,6 @@
   off_t getSize() const { return Size; }
   unsigned getUID() const { return UID; }
   const llvm::sys::fs::UniqueID &getUniqueID() const { return UniqueID; }
-  bool isInPCH() const { return InPCH; }
   time_t getModificationTime() const { return ModTime; }
 
   /// Return the directory the file lives in.
@@ -108,8 +106,6 @@
   bool isOpenForTests() const { return File != nullptr; }
 };
 
-struct FileData;
-
 /// Implements support for file system lookup, file system caching,
 /// and directory search management.
 ///
@@ -168,7 +164,7 @@
   // Caching.
   std::unique_ptr<FileSystemStatCache> StatCache;
 
-  bool getStatValue(StringRef Path, FileData &Data, bool isFile,
+  bool getStatValue(StringRef Path, llvm::vfs::Status &Status, bool isFile,
                     std::unique_ptr<llvm::vfs::File> *F);
 
   /// Add all ancestors of the given path (pointing to either a file
@@ -179,6 +175,10 @@
   void fillRealPathName(FileEntry *UFE, llvm::StringRef FileName);
 
 public:
+  /// Construct a file manager, optionally with a custom VFS.
+  ///
+  /// \param FS if non-null, the VFS to use.  Otherwise uses
+  /// llvm::vfs::getRealFileSystem().
   FileManager(const FileSystemOptions &FileSystemOpts,
               IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS = nullptr);
   ~FileManager();
@@ -221,9 +221,7 @@
   FileSystemOptions &getFileSystemOpts() { return FileSystemOpts; }
   const FileSystemOptions &getFileSystemOpts() const { return FileSystemOpts; }
 
-  IntrusiveRefCntPtr<llvm::vfs::FileSystem> getVirtualFileSystem() const {
-    return FS;
-  }
+  llvm::vfs::FileSystem &getVirtualFileSystem() const { return *FS; }
 
   /// Retrieve a file entry for a "virtual" file that acts as
   /// if there were a file with the given name on disk.
diff --git a/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h b/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h
index 0ae6a9e..d37f2d5 100644
--- a/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h
+++ b/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h
@@ -19,40 +19,15 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/VirtualFileSystem.h"
 #include <cstdint>
 #include <ctime>
 #include <memory>
 #include <string>
 #include <utility>
 
-namespace llvm {
-
-namespace vfs {
-
-class File;
-class FileSystem;
-
-} // namespace vfs
-} // namespace llvm
-
 namespace clang {
 
-// FIXME: should probably replace this with vfs::Status
-struct FileData {
-  std::string Name;
-  uint64_t Size = 0;
-  time_t ModTime = 0;
-  llvm::sys::fs::UniqueID UniqueID;
-  bool IsDirectory = false;
-  bool IsNamedPipe = false;
-  bool InPCH = false;
-
-  // FIXME: remove this when files support multiple names
-  bool IsVFSMapped = false;
-
-  FileData() = default;
-};
-
 /// Abstract interface for introducing a FileManager cache for 'stat'
 /// system calls, which is used by precompiled and pretokenized headers to
 /// improve performance.
@@ -62,14 +37,6 @@
 public:
   virtual ~FileSystemStatCache() = default;
 
-  enum LookupResult {
-    /// We know the file exists and its cached stat data.
-    CacheExists,
-
-    /// We know that the file doesn't exist.
-    CacheMissing
-  };
-
   /// Get the 'stat' information for the specified path, using the cache
   /// to accelerate it if possible.
   ///
@@ -80,17 +47,19 @@
   /// success for directories (not files).  On a successful file lookup, the
   /// implementation can optionally fill in \p F with a valid \p File object and
   /// the client guarantees that it will close it.
-  static bool get(StringRef Path, FileData &Data, bool isFile,
-                  std::unique_ptr<llvm::vfs::File> *F,
-                  FileSystemStatCache *Cache, llvm::vfs::FileSystem &FS);
+  static std::error_code
+  get(StringRef Path, llvm::vfs::Status &Status, bool isFile,
+      std::unique_ptr<llvm::vfs::File> *F,
+      FileSystemStatCache *Cache, llvm::vfs::FileSystem &FS);
 
 protected:
   // FIXME: The pointer here is a non-owning/optional reference to the
   // unique_ptr. Optional<unique_ptr<vfs::File>&> might be nicer, but
   // Optional needs some work to support references so this isn't possible yet.
-  virtual LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
-                               std::unique_ptr<llvm::vfs::File> *F,
-                               llvm::vfs::FileSystem &FS) = 0;
+  virtual std::error_code getStat(StringRef Path, llvm::vfs::Status &Status,
+                                  bool isFile,
+                                  std::unique_ptr<llvm::vfs::File> *F,
+                                  llvm::vfs::FileSystem &FS) = 0;
 };
 
 /// A stat "cache" that can be used by FileManager to keep
@@ -99,17 +68,19 @@
 class MemorizeStatCalls : public FileSystemStatCache {
 public:
   /// The set of stat() calls that have been seen.
-  llvm::StringMap<FileData, llvm::BumpPtrAllocator> StatCalls;
+  llvm::StringMap<llvm::vfs::Status, llvm::BumpPtrAllocator> StatCalls;
 
   using iterator =
-      llvm::StringMap<FileData, llvm::BumpPtrAllocator>::const_iterator;
+      llvm::StringMap<llvm::vfs::Status,
+                      llvm::BumpPtrAllocator>::const_iterator;
 
   iterator begin() const { return StatCalls.begin(); }
   iterator end() const { return StatCalls.end(); }
 
-  LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
-                       std::unique_ptr<llvm::vfs::File> *F,
-                       llvm::vfs::FileSystem &FS) override;
+  std::error_code getStat(StringRef Path, llvm::vfs::Status &Status,
+                          bool isFile,
+                          std::unique_ptr<llvm::vfs::File> *F,
+                          llvm::vfs::FileSystem &FS) override;
 };
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/Basic/FixedPoint.h b/linux-x64/clang/include/clang/Basic/FixedPoint.h
index f68ed56..a931e21 100644
--- a/linux-x64/clang/include/clang/Basic/FixedPoint.h
+++ b/linux-x64/clang/include/clang/Basic/FixedPoint.h
@@ -141,6 +141,8 @@
     return APFixedPoint(Val << Amt, Sema);
   }
 
+  /// Return the integral part of this fixed point number, rounded towards
+  /// zero. (-2.5k -> -2)
   llvm::APSInt getIntPart() const {
     if (Val < 0 && Val != -Val) // Cover the case when we have the min val
       return -(-Val >> getScale());
@@ -148,6 +150,17 @@
       return Val >> getScale();
   }
 
+  /// Return the integral part of this fixed point number, rounded towards
+  /// zero. The value is stored into an APSInt with the provided width and sign.
+  /// If the overflow parameter is provided, and the integral value is not able
+  /// to be fully stored in the provided width and sign, the overflow parameter
+  /// is set to true.
+  ///
+  /// If the overflow parameter is provided, set this value to true or false to
+  /// indicate if this operation results in an overflow.
+  llvm::APSInt convertToInt(unsigned DstWidth, bool DstSign,
+                            bool *Overflow = nullptr) const;
+
   void toString(llvm::SmallVectorImpl<char> &Str) const;
   std::string toString() const {
     llvm::SmallString<40> S;
@@ -175,6 +188,14 @@
   static APFixedPoint getMax(const FixedPointSemantics &Sema);
   static APFixedPoint getMin(const FixedPointSemantics &Sema);
 
+  /// Create an APFixedPoint with a value equal to that of the provided integer,
+  /// and in the same semantics as the provided target semantics. If the value
+  /// is not able to fit in the specified fixed point semantics, and the
+  /// overflow parameter is provided, it is set to true.
+  static APFixedPoint getFromIntValue(const llvm::APSInt &Value,
+                                      const FixedPointSemantics &DstFXSema,
+                                      bool *Overflow = nullptr);
+
 private:
   llvm::APSInt Val;
   FixedPointSemantics Sema;
diff --git a/linux-x64/clang/include/clang/Basic/JsonSupport.h b/linux-x64/clang/include/clang/Basic/JsonSupport.h
new file mode 100644
index 0000000..a3d12cb
--- /dev/null
+++ b/linux-x64/clang/include/clang/Basic/JsonSupport.h
@@ -0,0 +1,82 @@
+//===- JsonSupport.h - JSON Output Utilities --------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_JSONSUPPORT_H
+#define LLVM_CLANG_BASIC_JSONSUPPORT_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+
+
+namespace clang {
+
+inline raw_ostream &Indent(raw_ostream &Out, const unsigned int Space,
+                           bool IsDot) {
+  for (unsigned int I = 0; I < Space * 2; ++I)
+    Out << (IsDot ? "&nbsp;" : " ");
+  return Out;
+}
+
+inline std::string JsonFormat(StringRef RawSR, bool AddQuotes) {
+  if (RawSR.empty())
+    return "null";
+
+  // Trim special characters.
+  std::string Str = RawSR.trim().str();
+  size_t Pos = 0;
+
+  // Escape backslashes.
+  while (true) {
+    Pos = Str.find('\\', Pos);
+    if (Pos == std::string::npos)
+      break;
+
+    // Prevent bad conversions.
+    size_t TempPos = (Pos != 0) ? Pos - 1 : 0;
+
+    // See whether the current backslash is not escaped.
+    if (TempPos != Str.find("\\\\", Pos)) {
+      Str.insert(Pos, "\\");
+      ++Pos; // As we insert the backslash move plus one.
+    }
+
+    ++Pos;
+  }
+
+  // Escape double quotes.
+  Pos = 0;
+  while (true) {
+    Pos = Str.find('\"', Pos);
+    if (Pos == std::string::npos)
+      break;
+
+    // Prevent bad conversions.
+    size_t TempPos = (Pos != 0) ? Pos - 1 : 0;
+
+    // See whether the current double quote is not escaped.
+    if (TempPos != Str.find("\\\"", Pos)) {
+      Str.insert(Pos, "\\");
+      ++Pos; // As we insert the escape-character move plus one.
+    }
+
+    ++Pos;
+  }
+
+  // Remove new-lines.
+  Str.erase(std::remove(Str.begin(), Str.end(), '\n'), Str.end());
+
+  if (!AddQuotes)
+    return Str;
+
+  return '\"' + Str + '\"';
+}
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_JSONSUPPORT_H
diff --git a/linux-x64/clang/include/clang/Basic/LangOptions.def b/linux-x64/clang/include/clang/Basic/LangOptions.def
index d52f9c0..46012f7 100644
--- a/linux-x64/clang/include/clang/Basic/LangOptions.def
+++ b/linux-x64/clang/include/clang/Basic/LangOptions.def
@@ -82,6 +82,7 @@
 LANGOPT(C99               , 1, 0, "C99")
 LANGOPT(C11               , 1, 0, "C11")
 LANGOPT(C17               , 1, 0, "C17")
+LANGOPT(C2x               , 1, 0, "C2x")
 LANGOPT(MSVCCompat        , 1, 0, "Microsoft Visual C++ full compatibility mode")
 LANGOPT(MicrosoftExt      , 1, 0, "Microsoft C++ extensions")
 LANGOPT(AsmBlocks         , 1, 0, "Microsoft inline asm blocks")
@@ -136,7 +137,7 @@
 LANGOPT(NoBuiltin         , 1, 0, "disable builtin functions")
 LANGOPT(NoMathBuiltin     , 1, 0, "disable math builtin functions")
 LANGOPT(GNUAsm            , 1, 1, "GNU-style inline assembly")
-LANGOPT(CoroutinesTS      , 1, 0, "C++ coroutines TS")
+LANGOPT(Coroutines        , 1, 0, "C++20 coroutines")
 LANGOPT(DllExportInlines  , 1, 1, "dllexported classes dllexport inline methods")
 LANGOPT(RelaxedTemplateTemplateArgs, 1, 0, "C++17 relaxed matching of template template arguments")
 
@@ -148,12 +149,14 @@
 BENIGN_LANGOPT(EmitAllDecls      , 1, 0, "emitting all declarations")
 LANGOPT(MathErrno         , 1, 1, "errno in math functions")
 BENIGN_LANGOPT(HeinousExtensions , 1, 0, "extensions that we really don't like and may be ripped out at any time")
-LANGOPT(Modules           , 1, 0, "modules extension to C")
-COMPATIBLE_LANGOPT(ModulesTS  , 1, 0, "C++ Modules TS")
+LANGOPT(Modules           , 1, 0, "modules semantics")
+COMPATIBLE_LANGOPT(ModulesTS  , 1, 0, "C++ Modules TS syntax")
+COMPATIBLE_LANGOPT(CPlusPlusModules, 1, 0, "C++ modules syntax")
 BENIGN_ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 2, CMK_None,
                     "compiling a module interface")
 BENIGN_LANGOPT(CompilingPCH, 1, 0, "building a pch")
 BENIGN_LANGOPT(BuildingPCHWithObjectFile, 1, 0, "building a pch which has a corresponding object file")
+BENIGN_LANGOPT(CacheGeneratedPCH, 1, 0, "cache generated PCH files in memory")
 COMPATIBLE_LANGOPT(ModulesDeclUse    , 1, 0, "require declaration of module uses")
 BENIGN_LANGOPT(ModulesSearchAll  , 1, 1, "searching even non-imported modules to find unresolved references")
 COMPATIBLE_LANGOPT(ModulesStrictDeclUse, 1, 0, "requiring declaration of module uses and all headers to be in modules")
@@ -168,8 +171,11 @@
 VALUE_LANGOPT(MaxTypeAlign  , 32, 0,
               "default maximum alignment for types")
 VALUE_LANGOPT(AlignDouble            , 1, 0, "Controls if doubles should be aligned to 8 bytes (x86 only)")
+VALUE_LANGOPT(LongDoubleSize        , 32, 0, "width of long double")
 COMPATIBLE_VALUE_LANGOPT(PICLevel    , 2, 0, "__PIC__ level")
 COMPATIBLE_VALUE_LANGOPT(PIE         , 1, 0, "is pie")
+LANGOPT(ROPI                         , 1, 0, "Read-only position independence")
+LANGOPT(RWPI                         , 1, 0, "Read-write position independence")
 COMPATIBLE_LANGOPT(GNUInline         , 1, 0, "GNU inline semantics")
 COMPATIBLE_LANGOPT(NoInlineDefine    , 1, 0, "__NO_INLINE__ predefined macro")
 COMPATIBLE_LANGOPT(Deprecated        , 1, 0, "__DEPRECATED predefined macro")
@@ -205,6 +211,7 @@
 LANGOPT(OpenMPCUDAForceFullRuntime , 1, 0, "Force to use full runtime in all constructs when offloading to CUDA devices")
 LANGOPT(OpenMPCUDANumSMs  , 32, 0, "Number of SMs for CUDA devices.")
 LANGOPT(OpenMPCUDABlocksPerSM  , 32, 0, "Number of blocks per SM for CUDA devices.")
+LANGOPT(OpenMPCUDAReductionBufNum , 32, 1024, "Number of the reduction records in the intermediate reduction buffer used for the teams reductions.")
 LANGOPT(OpenMPOptimisticCollapse  , 1, 0, "Use at most 32 bits to represent the collapsed loop nest counter.")
 LANGOPT(RenderScript      , 1, 0, "RenderScript")
 
@@ -214,6 +221,8 @@
 LANGOPT(CUDADeviceApproxTranscendentals, 1, 0, "using approximate transcendental functions")
 LANGOPT(GPURelocatableDeviceCode, 1, 0, "generate relocatable device code")
 
+LANGOPT(SYCLIsDevice      , 1, 0, "Generate code for SYCL device")
+
 LANGOPT(SizedDeallocation , 1, 0, "sized deallocation")
 LANGOPT(AlignedAllocation , 1, 0, "aligned allocation")
 LANGOPT(AlignedAllocationUnavailable, 1, 0, "aligned allocation functions are unavailable")
@@ -248,6 +257,7 @@
 LANGOPT(FakeAddressSpaceMap , 1, 0, "OpenCL fake address space map")
 ENUM_LANGOPT(AddressSpaceMapMangling , AddrSpaceMapMangling, 2, ASMM_Target, "OpenCL address space map mangling mode")
 LANGOPT(IncludeDefaultHeader, 1, 0, "Include default header file for OpenCL")
+LANGOPT(DeclareOpenCLBuiltins, 1, 0, "Declare OpenCL builtin functions")
 BENIGN_LANGOPT(DelayedTemplateParsing , 1, 0, "delayed template parsing")
 LANGOPT(BlocksRuntimeOptional , 1, 0, "optional blocks runtime")
 LANGOPT(
@@ -292,6 +302,8 @@
                                            "field padding (0: none, 1:least "
                                            "aggressive, 2: more aggressive)")
 
+LANGOPT(Cmse, 1, 0, "ARM Security extensions support")
+
 LANGOPT(XRayInstrument, 1, 0, "controls whether to do XRay instrumentation")
 LANGOPT(XRayAlwaysEmitCustomEvents, 1, 0,
         "controls whether to always emit intrinsic calls to "
diff --git a/linux-x64/clang/include/clang/Basic/LangOptions.h b/linux-x64/clang/include/clang/Basic/LangOptions.h
index c7e2993..8099eed 100644
--- a/linux-x64/clang/include/clang/Basic/LangOptions.h
+++ b/linux-x64/clang/include/clang/Basic/LangOptions.h
@@ -109,7 +109,8 @@
     MSVC2013 = 1800,
     MSVC2015 = 1900,
     MSVC2017 = 1910,
-    MSVC2017_5 = 1912
+    MSVC2017_5 = 1912,
+    MSVC2017_7 = 1914,
   };
 
   /// Clang versions with different platform ABI conformance.
@@ -265,7 +266,7 @@
 
   /// Do we need to track the owning module for a local declaration?
   bool trackLocalOwningModule() const {
-    return isCompilingModule() || ModulesLocalVisibility || ModulesTS;
+    return isCompilingModule() || ModulesLocalVisibility;
   }
 
   bool isSignedOverflowDefined() const {
diff --git a/linux-x64/clang/include/clang/Basic/MemoryBufferCache.h b/linux-x64/clang/include/clang/Basic/MemoryBufferCache.h
deleted file mode 100644
index 9a2b62e..0000000
--- a/linux-x64/clang/include/clang/Basic/MemoryBufferCache.h
+++ /dev/null
@@ -1,79 +0,0 @@
-//===- MemoryBufferCache.h - Cache for loaded memory buffers ----*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_BASIC_MEMORYBUFFERCACHE_H
-#define LLVM_CLANG_BASIC_MEMORYBUFFERCACHE_H
-
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/StringMap.h"
-#include <memory>
-
-namespace llvm {
-class MemoryBuffer;
-} // end namespace llvm
-
-namespace clang {
-
-/// Manage memory buffers across multiple users.
-///
-/// Ensures that multiple users have a consistent view of each buffer.  This is
-/// used by \a CompilerInstance when building PCMs to ensure that each \a
-/// ModuleManager sees the same files.
-///
-/// \a finalizeCurrentBuffers() should be called before creating a new user.
-/// This locks in the current buffers, ensuring that no buffer that has already
-/// been accessed can be purged, preventing use-after-frees.
-class MemoryBufferCache : public llvm::RefCountedBase<MemoryBufferCache> {
-  struct BufferEntry {
-    std::unique_ptr<llvm::MemoryBuffer> Buffer;
-
-    /// Track the timeline of when this was added to the cache.
-    unsigned Index;
-  };
-
-  /// Cache of buffers.
-  llvm::StringMap<BufferEntry> Buffers;
-
-  /// Monotonically increasing index.
-  unsigned NextIndex = 0;
-
-  /// Bumped to prevent "older" buffers from being removed.
-  unsigned FirstRemovableIndex = 0;
-
-public:
-  /// Store the Buffer under the Filename.
-  ///
-  /// \pre There is not already buffer is not already in the cache.
-  /// \return a reference to the buffer as a convenience.
-  llvm::MemoryBuffer &addBuffer(llvm::StringRef Filename,
-                                std::unique_ptr<llvm::MemoryBuffer> Buffer);
-
-  /// Try to remove a buffer from the cache.
-  ///
-  /// \return false on success, iff \c !isBufferFinal().
-  bool tryToRemoveBuffer(llvm::StringRef Filename);
-
-  /// Get a pointer to the buffer if it exists; else nullptr.
-  llvm::MemoryBuffer *lookupBuffer(llvm::StringRef Filename);
-
-  /// Check whether the buffer is final.
-  ///
-  /// \return true iff \a finalizeCurrentBuffers() has been called since the
-  /// buffer was added.  This prevents buffers from being removed.
-  bool isBufferFinal(llvm::StringRef Filename);
-
-  /// Finalize the current buffers in the cache.
-  ///
-  /// Should be called when creating a new user to ensure previous uses aren't
-  /// invalidated.
-  void finalizeCurrentBuffers();
-};
-
-} // end namespace clang
-
-#endif // LLVM_CLANG_BASIC_MEMORYBUFFERCACHE_H
diff --git a/linux-x64/clang/include/clang/Basic/Module.h b/linux-x64/clang/include/clang/Basic/Module.h
index 0e891af..0f2549f 100644
--- a/linux-x64/clang/include/clang/Basic/Module.h
+++ b/linux-x64/clang/include/clang/Basic/Module.h
@@ -77,9 +77,11 @@
     /// This is a C++ Modules TS module interface unit.
     ModuleInterfaceUnit,
 
-    /// This is a fragment of the global module within some C++ Modules
-    /// TS module.
+    /// This is a fragment of the global module within some C++ module.
     GlobalModuleFragment,
+
+    /// This is the private module fragment within some C++ module.
+    PrivateModuleFragment,
   };
 
   /// The kind of this module.
@@ -111,6 +113,11 @@
   /// eventually be exposed, for use in "private" modules.
   std::string ExportAsModule;
 
+  /// Does this Module scope describe part of the purview of a named C++ module?
+  bool isModulePurview() const {
+    return Kind == ModuleInterfaceUnit || Kind == PrivateModuleFragment;
+  }
+
 private:
   /// The submodules of this module, indexed by name.
   std::vector<Module *> SubModules;
@@ -534,6 +541,7 @@
   ///
   /// \returns The submodule if found, or NULL otherwise.
   Module *findSubmodule(StringRef Name) const;
+  Module *findOrInferSubmodule(StringRef Name);
 
   /// Determine whether the specified module would be visible to
   /// a lookup at the end of this module.
diff --git a/linux-x64/clang/include/clang/Basic/ObjCRuntime.h b/linux-x64/clang/include/clang/Basic/ObjCRuntime.h
index 921df68..5329b38 100644
--- a/linux-x64/clang/include/clang/Basic/ObjCRuntime.h
+++ b/linux-x64/clang/include/clang/Basic/ObjCRuntime.h
@@ -246,6 +246,22 @@
     llvm_unreachable("bad kind");
   }
 
+  /// Does this runtime provide the objc_alloc_init entrypoint? This can apply
+  /// the same optimization as objc_alloc, but also sends an -init message,
+  /// reducing code size on the caller.
+  bool shouldUseRuntimeFunctionForCombinedAllocInit() const {
+    switch (getKind()) {
+    case MacOSX:
+      return getVersion() >= VersionTuple(10, 14, 4);
+    case iOS:
+      return getVersion() >= VersionTuple(12, 2);
+    case WatchOS:
+      return getVersion() >= VersionTuple(5, 2);
+    default:
+      return false;
+    }
+  }
+
   /// Does this runtime supports optimized setter entrypoints?
   bool hasOptimizedSetter() const {
     switch (getKind()) {
@@ -413,6 +429,23 @@
     }
   }
 
+  /// Returns true if this Objective-C runtime supports Objective-C class
+  /// stubs.
+  bool allowsClassStubs() const {
+    switch (getKind()) {
+    case FragileMacOSX:
+    case GCC:
+    case GNUstep:
+    case ObjFW:
+      return false;
+    case MacOSX:
+    case iOS:
+    case WatchOS:
+      return true;
+    }
+    llvm_unreachable("bad kind");
+  }
+
   /// Try to parse an Objective-C runtime specification from the given
   /// string.
   ///
diff --git a/linux-x64/clang/include/clang/Basic/OpenCLExtensions.def b/linux-x64/clang/include/clang/Basic/OpenCLExtensions.def
index 40ac88f..5536a6e 100644
--- a/linux-x64/clang/include/clang/Basic/OpenCLExtensions.def
+++ b/linux-x64/clang/include/clang/Basic/OpenCLExtensions.def
@@ -81,6 +81,12 @@
 OPENCLEXT_INTERNAL(cl_amd_media_ops, 100, ~0U)
 OPENCLEXT_INTERNAL(cl_amd_media_ops2, 100, ~0U)
 
+// ARM OpenCL extensions
+OPENCLEXT_INTERNAL(cl_arm_integer_dot_product_int8, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_arm_integer_dot_product_accumulate_int8, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_arm_integer_dot_product_accumulate_int16, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_arm_integer_dot_product_accumulate_saturate_int8, 120, ~0U)
+
 // Intel OpenCL extensions
 OPENCLEXT_INTERNAL(cl_intel_subgroups, 120, ~0U)
 OPENCLEXT_INTERNAL(cl_intel_subgroups_short, 120, ~0U)
diff --git a/linux-x64/clang/include/clang/Basic/OpenMPKinds.def b/linux-x64/clang/include/clang/Basic/OpenMPKinds.def
index ecb2c8d..9685af4 100644
--- a/linux-x64/clang/include/clang/Basic/OpenMPKinds.def
+++ b/linux-x64/clang/include/clang/Basic/OpenMPKinds.def
@@ -122,6 +122,12 @@
 #ifndef OPENMP_MAP_MODIFIER_KIND
 #define OPENMP_MAP_MODIFIER_KIND(Name)
 #endif
+#ifndef OPENMP_TO_MODIFIER_KIND
+#define OPENMP_TO_MODIFIER_KIND(Name)
+#endif
+#ifndef OPENMP_FROM_MODIFIER_KIND
+#define OPENMP_FROM_MODIFIER_KIND(Name)
+#endif
 #ifndef OPENMP_DIST_SCHEDULE_KIND
 #define OPENMP_DIST_SCHEDULE_KIND(Name)
 #endif
@@ -182,6 +188,9 @@
 #ifndef OPENMP_DECLARE_MAPPER_CLAUSE
 #define OPENMP_DECLARE_MAPPER_CLAUSE(Name)
 #endif
+#ifndef OPENMP_ALLOCATE_CLAUSE
+# define OPENMP_ALLOCATE_CLAUSE(Name)
+#endif
 
 // OpenMP directives.
 OPENMP_DIRECTIVE(threadprivate)
@@ -238,8 +247,10 @@
 OPENMP_DIRECTIVE_EXT(target_teams_distribute_parallel_for, "target teams distribute parallel for")
 OPENMP_DIRECTIVE_EXT(target_teams_distribute_parallel_for_simd, "target teams distribute parallel for simd")
 OPENMP_DIRECTIVE_EXT(target_teams_distribute_simd, "target teams distribute simd")
+OPENMP_DIRECTIVE(allocate)
 
 // OpenMP clauses.
+OPENMP_CLAUSE(allocator, OMPAllocatorClause)
 OPENMP_CLAUSE(if, OMPIfClause)
 OPENMP_CLAUSE(final, OMPFinalClause)
 OPENMP_CLAUSE(num_threads, OMPNumThreadsClause)
@@ -262,6 +273,7 @@
 OPENMP_CLAUSE(nowait, OMPNowaitClause)
 OPENMP_CLAUSE(untied, OMPUntiedClause)
 OPENMP_CLAUSE(mergeable, OMPMergeableClause)
+OPENMP_CLAUSE(flush, OMPFlushClause)
 OPENMP_CLAUSE(read, OMPReadClause)
 OPENMP_CLAUSE(write, OMPWriteClause)
 OPENMP_CLAUSE(update, OMPUpdateClause)
@@ -292,6 +304,7 @@
 OPENMP_CLAUSE(reverse_offload, OMPReverseOffloadClause)
 OPENMP_CLAUSE(dynamic_allocators, OMPDynamicAllocatorsClause)
 OPENMP_CLAUSE(atomic_default_mem_order, OMPAtomicDefaultMemOrderClause)
+OPENMP_CLAUSE(allocate, OMPAllocateClause)
 
 // Clauses allowed for OpenMP directive 'parallel'.
 OPENMP_PARALLEL_CLAUSE(if)
@@ -303,6 +316,7 @@
 OPENMP_PARALLEL_CLAUSE(shared)
 OPENMP_PARALLEL_CLAUSE(reduction)
 OPENMP_PARALLEL_CLAUSE(copyin)
+OPENMP_PARALLEL_CLAUSE(allocate)
 
 // Clauses allowed for directive 'omp simd'.
 OPENMP_SIMD_CLAUSE(private)
@@ -313,6 +327,7 @@
 OPENMP_SIMD_CLAUSE(simdlen)
 OPENMP_SIMD_CLAUSE(collapse)
 OPENMP_SIMD_CLAUSE(reduction)
+OPENMP_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for directive 'omp for'.
 OPENMP_FOR_CLAUSE(private)
@@ -324,6 +339,7 @@
 OPENMP_FOR_CLAUSE(ordered)
 OPENMP_FOR_CLAUSE(nowait)
 OPENMP_FOR_CLAUSE(linear)
+OPENMP_FOR_CLAUSE(allocate)
 
 // Clauses allowed for directive 'omp for simd'.
 OPENMP_FOR_SIMD_CLAUSE(private)
@@ -338,6 +354,7 @@
 OPENMP_FOR_SIMD_CLAUSE(linear)
 OPENMP_FOR_SIMD_CLAUSE(aligned)
 OPENMP_FOR_SIMD_CLAUSE(ordered)
+OPENMP_FOR_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'omp sections'.
 OPENMP_SECTIONS_CLAUSE(private)
@@ -345,12 +362,14 @@
 OPENMP_SECTIONS_CLAUSE(firstprivate)
 OPENMP_SECTIONS_CLAUSE(reduction)
 OPENMP_SECTIONS_CLAUSE(nowait)
+OPENMP_SECTIONS_CLAUSE(allocate)
 
 // Clauses allowed for directive 'omp single'.
 OPENMP_SINGLE_CLAUSE(private)
 OPENMP_SINGLE_CLAUSE(firstprivate)
 OPENMP_SINGLE_CLAUSE(copyprivate)
 OPENMP_SINGLE_CLAUSE(nowait)
+OPENMP_SINGLE_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'cancel'.
 OPENMP_CANCEL_CLAUSE(if)
@@ -410,6 +429,7 @@
 OPENMP_PARALLEL_FOR_CLAUSE(schedule)
 OPENMP_PARALLEL_FOR_CLAUSE(ordered)
 OPENMP_PARALLEL_FOR_CLAUSE(linear)
+OPENMP_PARALLEL_FOR_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'parallel for simd'.
 OPENMP_PARALLEL_FOR_SIMD_CLAUSE(if)
@@ -429,6 +449,7 @@
 OPENMP_PARALLEL_FOR_SIMD_CLAUSE(linear)
 OPENMP_PARALLEL_FOR_SIMD_CLAUSE(aligned)
 OPENMP_PARALLEL_FOR_SIMD_CLAUSE(ordered)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'parallel sections'.
 OPENMP_PARALLEL_SECTIONS_CLAUSE(if)
@@ -441,6 +462,7 @@
 OPENMP_PARALLEL_SECTIONS_CLAUSE(reduction)
 OPENMP_PARALLEL_SECTIONS_CLAUSE(copyin)
 OPENMP_PARALLEL_SECTIONS_CLAUSE(lastprivate)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'task'.
 OPENMP_TASK_CLAUSE(if)
@@ -454,6 +476,7 @@
 OPENMP_TASK_CLAUSE(depend)
 OPENMP_TASK_CLAUSE(priority)
 OPENMP_TASK_CLAUSE(in_reduction)
+OPENMP_TASK_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'atomic'.
 OPENMP_ATOMIC_CLAUSE(read)
@@ -473,6 +496,7 @@
 OPENMP_TARGET_CLAUSE(firstprivate)
 OPENMP_TARGET_CLAUSE(is_device_ptr)
 OPENMP_TARGET_CLAUSE(reduction)
+OPENMP_TARGET_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'requires'.
 OPENMP_REQUIRES_CLAUSE(unified_address)
@@ -481,6 +505,9 @@
 OPENMP_REQUIRES_CLAUSE(dynamic_allocators)
 OPENMP_REQUIRES_CLAUSE(atomic_default_mem_order)
 
+// Clauses allowed for OpenMP directive 'allocate'.
+OPENMP_ALLOCATE_CLAUSE(allocator)
+
 // Modifiers for 'atomic_default_mem_order' clause.
 OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(seq_cst)
 OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(acq_rel)
@@ -521,6 +548,7 @@
 OPENMP_TARGET_PARALLEL_CLAUSE(shared)
 OPENMP_TARGET_PARALLEL_CLAUSE(reduction)
 OPENMP_TARGET_PARALLEL_CLAUSE(is_device_ptr)
+OPENMP_TARGET_PARALLEL_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target parallel for'.
 OPENMP_TARGET_PARALLEL_FOR_CLAUSE(if)
@@ -542,6 +570,7 @@
 OPENMP_TARGET_PARALLEL_FOR_CLAUSE(ordered)
 OPENMP_TARGET_PARALLEL_FOR_CLAUSE(linear)
 OPENMP_TARGET_PARALLEL_FOR_CLAUSE(is_device_ptr)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target update'.
 OPENMP_TARGET_UPDATE_CLAUSE(if)
@@ -559,6 +588,7 @@
 OPENMP_TEAMS_CLAUSE(reduction)
 OPENMP_TEAMS_CLAUSE(num_teams)
 OPENMP_TEAMS_CLAUSE(thread_limit)
+OPENMP_TEAMS_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'ordered'.
 OPENMP_ORDERED_CLAUSE(threads)
@@ -576,6 +606,13 @@
 // Map-type-modifiers for 'map' clause.
 OPENMP_MAP_MODIFIER_KIND(always)
 OPENMP_MAP_MODIFIER_KIND(close)
+OPENMP_MAP_MODIFIER_KIND(mapper)
+
+// Modifiers for 'to' clause.
+OPENMP_TO_MODIFIER_KIND(mapper)
+
+// Modifiers for 'from' clause.
+OPENMP_FROM_MODIFIER_KIND(mapper)
 
 // Clauses allowed for OpenMP directive 'taskloop'.
 OPENMP_TASKLOOP_CLAUSE(if)
@@ -594,6 +631,7 @@
 OPENMP_TASKLOOP_CLAUSE(num_tasks)
 OPENMP_TASKLOOP_CLAUSE(reduction)
 OPENMP_TASKLOOP_CLAUSE(in_reduction)
+OPENMP_TASKLOOP_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'taskloop simd'.
 OPENMP_TASKLOOP_SIMD_CLAUSE(if)
@@ -616,6 +654,7 @@
 OPENMP_TASKLOOP_SIMD_CLAUSE(num_tasks)
 OPENMP_TASKLOOP_SIMD_CLAUSE(reduction)
 OPENMP_TASKLOOP_SIMD_CLAUSE(in_reduction)
+OPENMP_TASKLOOP_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'critical'.
 OPENMP_CRITICAL_CLAUSE(hint)
@@ -626,6 +665,7 @@
 OPENMP_DISTRIBUTE_CLAUSE(lastprivate)
 OPENMP_DISTRIBUTE_CLAUSE(collapse)
 OPENMP_DISTRIBUTE_CLAUSE(dist_schedule)
+OPENMP_DISTRIBUTE_CLAUSE(allocate)
 
 // Static attributes for 'dist_schedule' clause.
 OPENMP_DIST_SCHEDULE_KIND(static)
@@ -644,6 +684,7 @@
 OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(reduction)
 OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(copyin)
 OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(schedule)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'distribute parallel for simd'
 OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(firstprivate)
@@ -663,6 +704,7 @@
 OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(aligned)
 OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(safelen)
 OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'distribute simd'
 OPENMP_DISTRIBUTE_SIMD_CLAUSE(private)
@@ -675,6 +717,7 @@
 OPENMP_DISTRIBUTE_SIMD_CLAUSE(safelen)
 OPENMP_DISTRIBUTE_SIMD_CLAUSE(simdlen)
 OPENMP_DISTRIBUTE_SIMD_CLAUSE(reduction)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target parallel for simd'.
 OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(if)
@@ -699,6 +742,7 @@
 OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
 OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(aligned)
 OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(is_device_ptr)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target simd'.
 OPENMP_TARGET_SIMD_CLAUSE(if)
@@ -717,6 +761,7 @@
 OPENMP_TARGET_SIMD_CLAUSE(simdlen)
 OPENMP_TARGET_SIMD_CLAUSE(collapse)
 OPENMP_TARGET_SIMD_CLAUSE(reduction)
+OPENMP_TARGET_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'teams distribute'.
 OPENMP_TEAMS_DISTRIBUTE_CLAUSE(default)
@@ -729,6 +774,7 @@
 OPENMP_TEAMS_DISTRIBUTE_CLAUSE(lastprivate)
 OPENMP_TEAMS_DISTRIBUTE_CLAUSE(collapse)
 OPENMP_TEAMS_DISTRIBUTE_CLAUSE(dist_schedule)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'teams distribute simd'
 OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(default)
@@ -745,6 +791,7 @@
 OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(aligned)
 OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(safelen)
 OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(simdlen)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'teams distribute parallel for simd'
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(firstprivate)
@@ -765,6 +812,7 @@
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(num_teams)
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(thread_limit)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'teams distribute parallel for'
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(firstprivate)
@@ -782,6 +830,7 @@
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_teams)
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(thread_limit)
 OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(copyin)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target teams'.
 OPENMP_TARGET_TEAMS_CLAUSE(if)
@@ -798,6 +847,7 @@
 OPENMP_TARGET_TEAMS_CLAUSE(reduction)
 OPENMP_TARGET_TEAMS_CLAUSE(num_teams)
 OPENMP_TARGET_TEAMS_CLAUSE(thread_limit)
+OPENMP_TARGET_TEAMS_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target teams distribute'.
 OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(if)
@@ -817,6 +867,7 @@
 OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(lastprivate)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(collapse)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(dist_schedule)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target teams distribute parallel for'.
 OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(if)
@@ -839,6 +890,7 @@
 OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_threads)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(proc_bind)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(schedule)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive
 // 'target teams distribute parallel for simd'.
@@ -866,6 +918,7 @@
 OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(aligned)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(safelen)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'target teams distribute simd'.
 OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(if)
@@ -888,13 +941,16 @@
 OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(aligned)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(safelen)
 OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(simdlen)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'taskgroup'.
 OPENMP_TASKGROUP_CLAUSE(task_reduction)
+OPENMP_TASKGROUP_CLAUSE(allocate)
 
 // Clauses allowed for OpenMP directive 'declare mapper'.
 OPENMP_DECLARE_MAPPER_CLAUSE(map)
 
+#undef OPENMP_ALLOCATE_CLAUSE
 #undef OPENMP_DECLARE_MAPPER_CLAUSE
 #undef OPENMP_TASKGROUP_CLAUSE
 #undef OPENMP_TASKLOOP_SIMD_CLAUSE
@@ -933,6 +989,8 @@
 #undef OPENMP_FOR_SIMD_CLAUSE
 #undef OPENMP_MAP_KIND
 #undef OPENMP_MAP_MODIFIER_KIND
+#undef OPENMP_TO_MODIFIER_KIND
+#undef OPENMP_FROM_MODIFIER_KIND
 #undef OPENMP_DISTRIBUTE_CLAUSE
 #undef OPENMP_DIST_SCHEDULE_KIND
 #undef OPENMP_DEFAULTMAP_KIND
diff --git a/linux-x64/clang/include/clang/Basic/OpenMPKinds.h b/linux-x64/clang/include/clang/Basic/OpenMPKinds.h
index 17e66a5..d8dee23 100644
--- a/linux-x64/clang/include/clang/Basic/OpenMPKinds.h
+++ b/linux-x64/clang/include/clang/Basic/OpenMPKinds.h
@@ -33,7 +33,6 @@
 #define OPENMP_CLAUSE(Name, Class) \
   OMPC_##Name,
 #include "clang/Basic/OpenMPKinds.def"
-  OMPC_flush,
   OMPC_threadprivate,
   OMPC_uniform,
   OMPC_unknown
@@ -105,6 +104,22 @@
   OMPC_MAP_MODIFIER_last
 };
 
+/// OpenMP modifier kind for 'to' clause.
+enum OpenMPToModifierKind {
+#define OPENMP_TO_MODIFIER_KIND(Name) \
+  OMPC_TO_MODIFIER_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+  OMPC_TO_MODIFIER_unknown
+};
+
+/// OpenMP modifier kind for 'from' clause.
+enum OpenMPFromModifierKind {
+#define OPENMP_FROM_MODIFIER_KIND(Name) \
+  OMPC_FROM_MODIFIER_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+  OMPC_FROM_MODIFIER_unknown
+};
+
 /// OpenMP attributes for 'dist_schedule' clause.
 enum OpenMPDistScheduleClauseKind {
 #define OPENMP_DIST_SCHEDULE_KIND(Name) OMPC_DIST_SCHEDULE_##Name,
diff --git a/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h b/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h
index 799951b..ae8de67 100644
--- a/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h
+++ b/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h
@@ -16,6 +16,7 @@
 #define LLVM_CLANG_BASIC_PARTIALDIAGNOSTIC_H
 
 #include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/PartialDiagnostic.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/SmallVector.h"
diff --git a/linux-x64/clang/include/clang/Basic/PlistSupport.h b/linux-x64/clang/include/clang/Basic/PlistSupport.h
index f81b469..557462a 100644
--- a/linux-x64/clang/include/clang/Basic/PlistSupport.h
+++ b/linux-x64/clang/include/clang/Basic/PlistSupport.h
@@ -127,7 +127,11 @@
   assert(R.isCharRange() && "cannot handle a token range");
   Indent(o, indent) << "<array>\n";
   EmitLocation(o, SM, R.getBegin(), FM, indent + 1);
-  EmitLocation(o, SM, R.getEnd(), FM, indent + 1);
+
+  // The ".getLocWithOffset(-1)" emulates the behavior of an off-by-one bug
+  // in Lexer that is already fixed. It is here for backwards compatibility
+  // even though it is incorrect.
+  EmitLocation(o, SM, R.getEnd().getLocWithOffset(-1), FM, indent + 1);
   Indent(o, indent) << "</array>\n";
 }
 
diff --git a/linux-x64/clang/include/clang/Basic/Sanitizers.def b/linux-x64/clang/include/clang/Basic/Sanitizers.def
index 34bd6fc..1bb433a 100644
--- a/linux-x64/clang/include/clang/Basic/Sanitizers.def
+++ b/linux-x64/clang/include/clang/Basic/Sanitizers.def
@@ -40,6 +40,12 @@
 // AddressSanitizer
 SANITIZER("address", Address)
 
+// Requires AddressSanitizer
+SANITIZER("pointer-compare", PointerCompare)
+
+// Requires AddressSanitizer
+SANITIZER("pointer-subtract", PointerSubtract)
+
 // Kernel AddressSanitizer (KASan)
 SANITIZER("kernel-address", KernelAddress)
 
@@ -124,7 +130,7 @@
 // ABI or address space layout implications, and only catch undefined behavior.
 SANITIZER_GROUP("undefined", Undefined,
                 Alignment | Bool | Builtin | ArrayBounds | Enum |
-                    FloatCastOverflow | FloatDivideByZero |
+                    FloatCastOverflow |
                     IntegerDivideByZero | NonnullAttribute | Null | ObjectSize |
                     PointerOverflow | Return | ReturnsNonnullAttribute | Shift |
                     SignedIntegerOverflow | Unreachable | VLABound | Function |
@@ -165,19 +171,12 @@
 SANITIZER("local-bounds", LocalBounds)
 SANITIZER_GROUP("bounds", Bounds, ArrayBounds | LocalBounds)
 
-// EfficiencySanitizer
-SANITIZER("efficiency-cache-frag", EfficiencyCacheFrag)
-SANITIZER("efficiency-working-set", EfficiencyWorkingSet)
-// Meta-group only used internally.
-SANITIZER_GROUP("efficiency-all", Efficiency,
-                EfficiencyCacheFrag | EfficiencyWorkingSet)
-
 // Scudo hardened allocator
 SANITIZER("scudo", Scudo)
 
 // Magic group, containing all sanitizers. For example, "-fno-sanitize=all"
 // can be used to disable all the sanitizers.
-SANITIZER_GROUP("all", All, ~0ULL)
+SANITIZER_GROUP("all", All, ~SanitizerMask())
 
 #undef SANITIZER
 #undef SANITIZER_GROUP
diff --git a/linux-x64/clang/include/clang/Basic/Sanitizers.h b/linux-x64/clang/include/clang/Basic/Sanitizers.h
index f2cfadb..5961abf 100644
--- a/linux-x64/clang/include/clang/Basic/Sanitizers.h
+++ b/linux-x64/clang/include/clang/Basic/Sanitizers.h
@@ -20,45 +20,146 @@
 #include <cassert>
 #include <cstdint>
 
+namespace llvm {
+class hash_code;
+}
+
 namespace clang {
 
-using SanitizerMask = uint64_t;
+class SanitizerMask {
+  // NOTE: this class assumes kNumElem == 2 in most of the constexpr functions,
+  // in order to work within the C++11 constexpr function constraints. If you
+  // change kNumElem, you'll need to update those member functions as well.
 
-namespace SanitizerKind {
+  /// Number of array elements.
+  static constexpr unsigned kNumElem = 2;
+  /// Mask value initialized to 0.
+  uint64_t maskLoToHigh[kNumElem]{};
+  /// Number of bits in a mask.
+  static constexpr unsigned kNumBits = sizeof(decltype(maskLoToHigh)) * 8;
+  /// Number of bits in a mask element.
+  static constexpr unsigned kNumBitElem = sizeof(decltype(maskLoToHigh[0])) * 8;
 
-// Assign ordinals to possible values of -fsanitize= flag, which we will use as
-// bit positions.
-enum SanitizerOrdinal : uint64_t {
-#define SANITIZER(NAME, ID) SO_##ID,
-#define SANITIZER_GROUP(NAME, ID, ALIAS) SO_##ID##Group,
-#include "clang/Basic/Sanitizers.def"
-  SO_Count
+  constexpr SanitizerMask(uint64_t mask1, uint64_t mask2)
+      : maskLoToHigh{mask1, mask2} {}
+
+public:
+  SanitizerMask() = default;
+
+  static constexpr bool checkBitPos(const unsigned Pos) {
+    return Pos < kNumBits;
+  }
+
+  /// Create a mask with a bit enabled at position Pos.
+  static constexpr SanitizerMask bitPosToMask(const unsigned Pos) {
+    return SanitizerMask((Pos < kNumBitElem) ? 1ULL << Pos % kNumBitElem : 0,
+                         (Pos >= kNumBitElem && Pos < kNumBitElem * 2)
+                             ? 1ULL << Pos % kNumBitElem
+                             : 0);
+  }
+
+  unsigned countPopulation() const {
+    unsigned total = 0;
+    for (const auto &Val : maskLoToHigh)
+      total += llvm::countPopulation(Val);
+    return total;
+  }
+
+  void flipAllBits() {
+    for (auto &Val : maskLoToHigh)
+      Val = ~Val;
+  }
+
+  bool isPowerOf2() const {
+    return countPopulation() == 1;
+  }
+
+  llvm::hash_code hash_value() const;
+
+  constexpr explicit operator bool() const {
+    return maskLoToHigh[0] || maskLoToHigh[1];
+  }
+
+  constexpr bool operator==(const SanitizerMask &V) const {
+    return maskLoToHigh[0] == V.maskLoToHigh[0] &&
+           maskLoToHigh[1] == V.maskLoToHigh[1];
+  }
+
+  SanitizerMask &operator&=(const SanitizerMask &RHS) {
+    for (unsigned k = 0; k < kNumElem; k++)
+      maskLoToHigh[k] &= RHS.maskLoToHigh[k];
+    return *this;
+  }
+
+  SanitizerMask &operator|=(const SanitizerMask &RHS) {
+    for (unsigned k = 0; k < kNumElem; k++)
+      maskLoToHigh[k] |= RHS.maskLoToHigh[k];
+    return *this;
+  }
+
+  constexpr bool operator!() const { return !bool(*this); }
+
+  constexpr bool operator!=(const SanitizerMask &RHS) const {
+    return !((*this) == RHS);
+  }
+
+  friend constexpr inline SanitizerMask operator~(SanitizerMask v) {
+    return SanitizerMask(~v.maskLoToHigh[0], ~v.maskLoToHigh[1]);
+  }
+
+  friend constexpr inline SanitizerMask operator&(SanitizerMask a,
+                                                  const SanitizerMask &b) {
+    return SanitizerMask(a.maskLoToHigh[0] & b.maskLoToHigh[0],
+                         a.maskLoToHigh[1] & b.maskLoToHigh[1]);
+  }
+
+  friend constexpr inline SanitizerMask operator|(SanitizerMask a,
+                                                  const SanitizerMask &b) {
+    return SanitizerMask(a.maskLoToHigh[0] | b.maskLoToHigh[0],
+                         a.maskLoToHigh[1] | b.maskLoToHigh[1]);
+  }
 };
 
+// Declaring in clang namespace so that it can be found by ADL.
+llvm::hash_code hash_value(const clang::SanitizerMask &Arg);
+
 // Define the set of sanitizer kinds, as well as the set of sanitizers each
 // sanitizer group expands into.
-#define SANITIZER(NAME, ID) \
-  const SanitizerMask ID = 1ULL << SO_##ID;
-#define SANITIZER_GROUP(NAME, ID, ALIAS) \
-  const SanitizerMask ID = ALIAS; \
-  const SanitizerMask ID##Group = 1ULL << SO_##ID##Group;
+struct SanitizerKind {
+  // Assign ordinals to possible values of -fsanitize= flag, which we will use
+  // as bit positions.
+  enum SanitizerOrdinal : uint64_t {
+#define SANITIZER(NAME, ID) SO_##ID,
+#define SANITIZER_GROUP(NAME, ID, ALIAS) SO_##ID##Group,
 #include "clang/Basic/Sanitizers.def"
+    SO_Count
+  };
 
-} // namespace SanitizerKind
+#define SANITIZER(NAME, ID)                                                    \
+  static constexpr SanitizerMask ID = SanitizerMask::bitPosToMask(SO_##ID);    \
+  static_assert(SanitizerMask::checkBitPos(SO_##ID), "Bit position too big.");
+#define SANITIZER_GROUP(NAME, ID, ALIAS)                                       \
+  static constexpr SanitizerMask ID = SanitizerMask(ALIAS);                    \
+  static constexpr SanitizerMask ID##Group =                                   \
+      SanitizerMask::bitPosToMask(SO_##ID##Group);                             \
+  static_assert(SanitizerMask::checkBitPos(SO_##ID##Group),                    \
+                "Bit position too big.");
+#include "clang/Basic/Sanitizers.def"
+}; // SanitizerKind
 
 struct SanitizerSet {
   /// Check if a certain (single) sanitizer is enabled.
   bool has(SanitizerMask K) const {
-    assert(llvm::isPowerOf2_64(K));
-    return Mask & K;
+    assert(K.isPowerOf2() && "Has to be a single sanitizer.");
+    return static_cast<bool>(Mask & K);
   }
 
   /// Check if one or more sanitizers are enabled.
-  bool hasOneOf(SanitizerMask K) const { return Mask & K; }
+  bool hasOneOf(SanitizerMask K) const { return static_cast<bool>(Mask & K); }
 
   /// Enable or disable a certain (single) sanitizer.
   void set(SanitizerMask K, bool Value) {
-    assert(llvm::isPowerOf2_64(K));
+    assert(K.isPowerOf2() && "Has to be a single sanitizer.");
     Mask = Value ? (Mask | K) : (Mask & ~K);
   }
 
@@ -66,10 +167,10 @@
   void clear(SanitizerMask K = SanitizerKind::All) { Mask &= ~K; }
 
   /// Returns true if no sanitizers are enabled.
-  bool empty() const { return Mask == 0; }
+  bool empty() const { return !Mask; }
 
   /// Bitmask of enabled sanitizers.
-  SanitizerMask Mask = 0;
+  SanitizerMask Mask;
 };
 
 /// Parse a single value from a -fsanitize= or -fno-sanitize= value list.
@@ -84,7 +185,7 @@
 inline SanitizerMask getPPTransparentSanitizers() {
   return SanitizerKind::CFI | SanitizerKind::Integer |
          SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
-         SanitizerKind::Undefined;
+         SanitizerKind::Undefined | SanitizerKind::FloatDivideByZero;
 }
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/Basic/SourceLocation.h b/linux-x64/clang/include/clang/Basic/SourceLocation.h
index ceebdf4..d6e2f6e 100644
--- a/linux-x64/clang/include/clang/Basic/SourceLocation.h
+++ b/linux-x64/clang/include/clang/Basic/SourceLocation.h
@@ -282,13 +282,15 @@
 /// You can get a PresumedLoc from a SourceLocation with SourceManager.
 class PresumedLoc {
   const char *Filename = nullptr;
+  FileID ID;
   unsigned Line, Col;
   SourceLocation IncludeLoc;
 
 public:
   PresumedLoc() = default;
-  PresumedLoc(const char *FN, unsigned Ln, unsigned Co, SourceLocation IL)
-      : Filename(FN), Line(Ln), Col(Co), IncludeLoc(IL) {}
+  PresumedLoc(const char *FN, FileID FID, unsigned Ln, unsigned Co,
+              SourceLocation IL)
+      : Filename(FN), ID(FID), Line(Ln), Col(Co), IncludeLoc(IL) {}
 
   /// Return true if this object is invalid or uninitialized.
   ///
@@ -305,6 +307,11 @@
     return Filename;
   }
 
+  FileID getFileID() const {
+    assert(isValid());
+    return ID;
+  }
+
   /// Return the presumed line number of this location.
   ///
   /// This can be affected by \#line etc.
diff --git a/linux-x64/clang/include/clang/Basic/SourceManager.h b/linux-x64/clang/include/clang/Basic/SourceManager.h
index 2bdf1d5..388fc1c 100644
--- a/linux-x64/clang/include/clang/Basic/SourceManager.h
+++ b/linux-x64/clang/include/clang/Basic/SourceManager.h
@@ -105,7 +105,7 @@
     ///
     /// This is owned by the ContentCache object.  The bits indicate
     /// whether the buffer is invalid.
-    mutable llvm::PointerIntPair<llvm::MemoryBuffer *, 2> Buffer;
+    mutable llvm::PointerIntPair<const llvm::MemoryBuffer *, 2> Buffer;
 
   public:
     /// Reference to the file entry representing this ContentCache.
@@ -184,10 +184,10 @@
     ///   will be emitted at.
     ///
     /// \param Invalid If non-NULL, will be set \c true if an error occurred.
-    llvm::MemoryBuffer *getBuffer(DiagnosticsEngine &Diag,
-                                  const SourceManager &SM,
-                                  SourceLocation Loc = SourceLocation(),
-                                  bool *Invalid = nullptr) const;
+    const llvm::MemoryBuffer *getBuffer(DiagnosticsEngine &Diag,
+                                        const SourceManager &SM,
+                                        SourceLocation Loc = SourceLocation(),
+                                        bool *Invalid = nullptr) const;
 
     /// Returns the size of the content encapsulated by this
     /// ContentCache.
@@ -209,11 +209,13 @@
 
     /// Get the underlying buffer, returning NULL if the buffer is not
     /// yet available.
-    llvm::MemoryBuffer *getRawBuffer() const { return Buffer.getPointer(); }
+    const llvm::MemoryBuffer *getRawBuffer() const {
+      return Buffer.getPointer();
+    }
 
     /// Replace the existing buffer (which will be deleted)
     /// with the given buffer.
-    void replaceBuffer(llvm::MemoryBuffer *B, bool DoNotFree = false);
+    void replaceBuffer(const llvm::MemoryBuffer *B, bool DoNotFree = false);
 
     /// Determine whether the buffer itself is invalid.
     bool isBufferInvalid() const {
@@ -839,9 +841,9 @@
 
   /// Create a new FileID that represents the specified memory buffer.
   ///
-  /// This does no caching of the buffer and takes ownership of the
-  /// MemoryBuffer, so only pass a MemoryBuffer to this once.
-  FileID createFileID(UnownedTag, llvm::MemoryBuffer *Buffer,
+  /// This does not take ownership of the MemoryBuffer. The memory buffer must
+  /// outlive the SourceManager.
+  FileID createFileID(UnownedTag, const llvm::MemoryBuffer *Buffer,
                       SrcMgr::CharacteristicKind FileCharacter = SrcMgr::C_User,
                       int LoadedID = 0, unsigned LoadedOffset = 0,
                       SourceLocation IncludeLoc = SourceLocation()) {
@@ -887,8 +889,8 @@
   ///
   /// \param Invalid If non-NULL, will be set \c true if an error
   /// occurs while retrieving the memory buffer.
-  llvm::MemoryBuffer *getMemoryBufferForFile(const FileEntry *File,
-                                             bool *Invalid = nullptr);
+  const llvm::MemoryBuffer *getMemoryBufferForFile(const FileEntry *File,
+                                                   bool *Invalid = nullptr);
 
   /// Override the contents of the given source file by providing an
   /// already-allocated buffer.
@@ -951,8 +953,8 @@
   ///
   /// If there is an error opening this buffer the first time, this
   /// manufactures a temporary buffer and returns a non-empty error string.
-  llvm::MemoryBuffer *getBuffer(FileID FID, SourceLocation Loc,
-                                bool *Invalid = nullptr) const {
+  const llvm::MemoryBuffer *getBuffer(FileID FID, SourceLocation Loc,
+                                      bool *Invalid = nullptr) const {
     bool MyInvalid = false;
     const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &MyInvalid);
     if (MyInvalid || !Entry.isFile()) {
@@ -966,7 +968,8 @@
                                                         Invalid);
   }
 
-  llvm::MemoryBuffer *getBuffer(FileID FID, bool *Invalid = nullptr) const {
+  const llvm::MemoryBuffer *getBuffer(FileID FID,
+                                      bool *Invalid = nullptr) const {
     bool MyInvalid = false;
     const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &MyInvalid);
     if (MyInvalid || !Entry.isFile()) {
@@ -1463,8 +1466,13 @@
 
     // This happens when the macro is the result of a paste, in that case
     // its spelling is the scratch memory, so we take the parent context.
-    if (isWrittenInScratchSpace(getSpellingLoc(loc)))
-      return isInSystemHeader(getSpellingLoc(getImmediateMacroCallerLoc(loc)));
+    // There can be several level of token pasting.
+    if (isWrittenInScratchSpace(getSpellingLoc(loc))) {
+      do {
+        loc = getImmediateMacroCallerLoc(loc);
+      } while (isWrittenInScratchSpace(getSpellingLoc(loc)));
+      return isInSystemMacro(loc);
+    }
 
     return isInSystemHeader(getSpellingLoc(loc));
   }
@@ -1788,7 +1796,7 @@
 
   /// Create a new ContentCache for the specified  memory buffer.
   const SrcMgr::ContentCache *
-  createMemBufferContentCache(llvm::MemoryBuffer *Buf, bool DoNotFree);
+  createMemBufferContentCache(const llvm::MemoryBuffer *Buf, bool DoNotFree);
 
   FileID getFileIDSlow(unsigned SLocOffset) const;
   FileID getFileIDLocal(unsigned SLocOffset) const;
diff --git a/linux-x64/clang/include/clang/Basic/Specifiers.h b/linux-x64/clang/include/clang/Basic/Specifiers.h
index 7256aca..d1236e7 100644
--- a/linux-x64/clang/include/clang/Basic/Specifiers.h
+++ b/linux-x64/clang/include/clang/Basic/Specifiers.h
@@ -20,6 +20,21 @@
 #include "llvm/Support/ErrorHandling.h"
 
 namespace clang {
+
+  /// Define the meaning of possible values of the kind in ExplicitSpecifier.
+  enum class ExplicitSpecKind : unsigned {
+    ResolvedFalse,
+    ResolvedTrue,
+    Unresolved,
+  };
+
+  /// Define the kind of constexpr specifier.
+  enum ConstexprSpecKind {
+    CSK_unspecified,
+    CSK_constexpr,
+    CSK_consteval
+  };
+
   /// Specifies the width of a type, e.g., short, long, or long long.
   enum TypeSpecifierWidth {
     TSW_unspecified,
@@ -140,6 +155,20 @@
     OK_ObjCSubscript
   };
 
+  /// The reason why a DeclRefExpr does not constitute an odr-use.
+  enum NonOdrUseReason {
+    /// This is an odr-use.
+    NOUR_None = 0,
+    /// This name appears in an unevaluated operand.
+    NOUR_Unevaluated,
+    /// This name appears as a potential result of an lvalue-to-rvalue
+    /// conversion that is a constant expression.
+    NOUR_Constant,
+    /// This name appears as a potential result of a discarded value
+    /// expression.
+    NOUR_Discarded,
+  };
+
   /// Describes the kind of template specialization that a
   /// particular template specialization declaration represents.
   enum TemplateSpecializationKind {
diff --git a/linux-x64/clang/include/clang/Basic/SyncScope.h b/linux-x64/clang/include/clang/Basic/SyncScope.h
index 3ebf40f..15af02d 100644
--- a/linux-x64/clang/include/clang/Basic/SyncScope.h
+++ b/linux-x64/clang/include/clang/Basic/SyncScope.h
@@ -95,7 +95,7 @@
 public:
   /// The enum values match the pre-defined macros
   /// __OPENCL_MEMORY_SCOPE_*, which are used to define memory_scope_*
-  /// enums in opencl-c.h.
+  /// enums in opencl-c-base.h.
   enum ID {
     WorkGroup = 1,
     Device = 2,
diff --git a/linux-x64/clang/include/clang/Basic/TargetInfo.h b/linux-x64/clang/include/clang/Basic/TargetInfo.h
index d41f4c6..7a8384f 100644
--- a/linux-x64/clang/include/clang/Basic/TargetInfo.h
+++ b/linux-x64/clang/include/clang/Basic/TargetInfo.h
@@ -542,7 +542,9 @@
 
   /// getMinGlobalAlign - Return the minimum alignment of a global variable,
   /// unless its alignment is explicitly reduced via attributes.
-  unsigned getMinGlobalAlign() const { return MinGlobalAlign; }
+  virtual unsigned getMinGlobalAlign (uint64_t) const {
+    return MinGlobalAlign;
+  }
 
   /// Return the largest alignment for which a suitably-sized allocation with
   /// '::operator new(size_t)' is guaranteed to produce a correctly-aligned
@@ -597,9 +599,11 @@
     return *Float128Format;
   }
 
-  /// Return true if the 'long double' type should be mangled like
-  /// __float128.
-  virtual bool useFloat128ManglingForLongDouble() const { return false; }
+  /// Return the mangled code of long double.
+  virtual const char *getLongDoubleMangling() const { return "e"; }
+
+  /// Return the mangled code of __float128.
+  virtual const char *getFloat128Mangling() const { return "g"; }
 
   /// Return the value for the C99 FLT_EVAL_METHOD macro.
   virtual unsigned getFloatEvalMethod() const { return 0; }
@@ -635,6 +639,21 @@
   /// types for the given target.
   unsigned getSimdDefaultAlign() const { return SimdDefaultAlign; }
 
+  /// Return the alignment (in bits) of the thrown exception object. This is
+  /// only meaningful for targets that allocate C++ exceptions in a system
+  /// runtime, such as those using the Itanium C++ ABI.
+  virtual unsigned getExnObjectAlignment() const {
+    // Itanium says that an _Unwind_Exception has to be "double-word"
+    // aligned (and thus the end of it is also so-aligned), meaning 16
+    // bytes.  Of course, that was written for the actual Itanium,
+    // which is a 64-bit platform.  Classically, the ABI doesn't really
+    // specify the alignment on other platforms, but in practice
+    // libUnwind declares the struct with __attribute__((aligned)), so
+    // we assume that alignment here.  (It's generally 16 bytes, but
+    // some targets overwrite it.)
+    return getDefaultAlignForAttributeAligned();
+  }
+
   /// Return the size of intmax_t and uintmax_t for this target, in bits.
   unsigned getIntMaxTWidth() const {
     return getTypeWidth(IntMaxType);
@@ -857,8 +876,10 @@
     }
     bool isValidAsmImmediate(const llvm::APInt &Value) const {
       if (!ImmSet.empty())
-        return ImmSet.count(Value.getZExtValue()) != 0;
-      return !ImmRange.isConstrained || (Value.sge(ImmRange.Min) && Value.sle(ImmRange.Max));
+        return Value.isSignedIntN(32) &&
+               ImmSet.count(Value.getZExtValue()) != 0;
+      return !ImmRange.isConstrained ||
+             (Value.sge(ImmRange.Min) && Value.sle(ImmRange.Max));
     }
 
     void setIsReadWrite() { Flags |= CI_ReadWrite; }
diff --git a/linux-x64/clang/include/clang/Basic/TemplateKinds.h b/linux-x64/clang/include/clang/Basic/TemplateKinds.h
index cfed09f..ee7e2f5 100644
--- a/linux-x64/clang/include/clang/Basic/TemplateKinds.h
+++ b/linux-x64/clang/include/clang/Basic/TemplateKinds.h
@@ -21,7 +21,8 @@
   /// The name does not refer to a template.
   TNK_Non_template = 0,
   /// The name refers to a function template or a set of overloaded
-  /// functions that includes at least one function template.
+  /// functions that includes at least one function template, or (in C++20)
+  /// refers to a set of non-template functions but is followed by a '<'.
   TNK_Function_template,
   /// The name refers to a template whose specialization produces a
   /// type. The template itself could be a class template, template
@@ -42,7 +43,11 @@
   /// whether the template name is assumed to refer to a type template or a
   /// function template depends on the context in which the template
   /// name occurs.
-  TNK_Dependent_template_name
+  TNK_Dependent_template_name,
+  /// Lookup for the name failed, but we're assuming it was a template name
+  /// anyway. In C++20, this is mandatory in order to parse ADL-only function
+  /// template specialization calls.
+  TNK_Undeclared_template,
 };
 
 }
diff --git a/linux-x64/clang/include/clang/Basic/TokenKinds.def b/linux-x64/clang/include/clang/Basic/TokenKinds.def
index 2a41d10..764f586 100644
--- a/linux-x64/clang/include/clang/Basic/TokenKinds.def
+++ b/linux-x64/clang/include/clang/Basic/TokenKinds.def
@@ -32,6 +32,9 @@
 #ifndef CONCEPTS_KEYWORD
 #define CONCEPTS_KEYWORD(X) CXX2A_KEYWORD(X,KEYCONCEPTS)
 #endif
+#ifndef COROUTINES_KEYWORD
+#define COROUTINES_KEYWORD(X) CXX2A_KEYWORD(X,KEYCOROUTINES)
+#endif
 #ifndef MODULES_KEYWORD
 #define MODULES_KEYWORD(X) KEYWORD(X,KEYMODULES)
 #endif
@@ -151,7 +154,9 @@
 // C99 6.4.5: String Literals.
 TOK(string_literal)      // "foo"
 TOK(wide_string_literal) // L"foo"
-TOK(angle_string_literal)// <foo>
+
+// C11 6.4.7: Header Names
+TOK(header_name)         // <foo>, or "foo" lexed as a header-name
 
 // C++11 String Literals.
 TOK(utf8_string_literal) // u8"foo"
@@ -243,6 +248,7 @@
 //                are enabled.
 //   KEYGNU   - This is a keyword if GNU extensions are enabled
 //   KEYMS    - This is a keyword if Microsoft extensions are enabled
+//   KEYMSCOMPAT - This is a keyword if Microsoft compatibility mode is enabled
 //   KEYNOMS18 - This is a keyword that must never be enabled under
 //               MSVC <= v18.
 //   KEYOPENCLC   - This is a keyword in OpenCL C
@@ -253,8 +259,7 @@
 //   KEYZVECTOR - This is a keyword for the System z vector extensions,
 //                which are heavily based on AltiVec
 //   KEYBORLAND - This is a keyword if Borland extensions are enabled
-//   KEYCOROUTINES - This is a keyword if support for the C++ coroutines
-//                   TS is enabled
+//   KEYCOROUTINES - This is a keyword if support for C++ coroutines is enabled
 //   BOOLSUPPORT - This is a keyword if 'bool' is a built-in type
 //   HALFSUPPORT - This is a keyword if 'half' is a built-in type
 //   WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type
@@ -363,24 +368,25 @@
 CXX11_KEYWORD(decltype              , 0)
 CXX11_KEYWORD(noexcept              , 0)
 CXX11_KEYWORD(nullptr               , 0)
-CXX11_KEYWORD(static_assert         , 0)
+CXX11_KEYWORD(static_assert         , KEYMSCOMPAT)
 CXX11_KEYWORD(thread_local          , 0)
 
 // C++2a / concepts TS keywords
 CONCEPTS_KEYWORD(concept)
 CONCEPTS_KEYWORD(requires)
 
-// C++ coroutines TS keywords
-KEYWORD(co_await                    , KEYCOROUTINES)
-KEYWORD(co_return                   , KEYCOROUTINES)
-KEYWORD(co_yield                    , KEYCOROUTINES)
+// C++2a / coroutines TS keywords
+COROUTINES_KEYWORD(co_await)
+COROUTINES_KEYWORD(co_return)
+COROUTINES_KEYWORD(co_yield)
 
 // C++ modules TS keywords
 MODULES_KEYWORD(module)
 MODULES_KEYWORD(import)
 
-// C++ char8_t proposal
-KEYWORD(char8_t                     , CHAR8SUPPORT)
+// C++20 keywords.
+CXX2A_KEYWORD(char8_t               , CHAR8SUPPORT)
+CXX2A_KEYWORD(consteval             , 0)
 
 // C11 Extension
 KEYWORD(_Float16                    , KEYALL)
@@ -399,6 +405,11 @@
 KEYWORD(__attribute                 , KEYALL)
 KEYWORD(__builtin_choose_expr       , KEYALL)
 KEYWORD(__builtin_offsetof          , KEYALL)
+KEYWORD(__builtin_FILE              , KEYALL)
+KEYWORD(__builtin_FUNCTION          , KEYALL)
+KEYWORD(__builtin_LINE              , KEYALL)
+KEYWORD(__builtin_COLUMN            , KEYALL)
+
 // __builtin_types_compatible_p is a GNU C extension that we handle like a C++
 // type trait.
 TYPE_TRAIT_2(__builtin_types_compatible_p, TypeCompatible, KEYNOCXX)
@@ -534,11 +545,11 @@
 KEYWORD(__constant                  , KEYOPENCLC | KEYOPENCLCXX)
 KEYWORD(__private                   , KEYOPENCLC | KEYOPENCLCXX)
 KEYWORD(__generic                   , KEYOPENCLC | KEYOPENCLCXX)
-ALIAS("global", __global            , KEYOPENCLC)
-ALIAS("local", __local              , KEYOPENCLC)
-ALIAS("constant", __constant        , KEYOPENCLC)
+ALIAS("global", __global            , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("local", __local              , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("constant", __constant        , KEYOPENCLC | KEYOPENCLCXX)
 ALIAS("private", __private          , KEYOPENCLC)
-ALIAS("generic", __generic          , KEYOPENCLC)
+ALIAS("generic", __generic          , KEYOPENCLC | KEYOPENCLCXX)
 // OpenCL function qualifiers
 KEYWORD(__kernel                    , KEYOPENCLC | KEYOPENCLCXX)
 ALIAS("kernel", __kernel            , KEYOPENCLC | KEYOPENCLCXX)
@@ -550,15 +561,15 @@
 ALIAS("write_only", __write_only    , KEYOPENCLC | KEYOPENCLCXX)
 ALIAS("read_write", __read_write    , KEYOPENCLC | KEYOPENCLCXX)
 // OpenCL builtins
-KEYWORD(__builtin_astype            , KEYOPENCLC)
+KEYWORD(__builtin_astype            , KEYOPENCLC | KEYOPENCLCXX)
 KEYWORD(vec_step                    , KEYOPENCLC | KEYALTIVEC | KEYZVECTOR)
-#define GENERIC_IMAGE_TYPE(ImgType, Id) KEYWORD(ImgType##_t, KEYOPENCLC)
+#define GENERIC_IMAGE_TYPE(ImgType, Id) KEYWORD(ImgType##_t, KEYOPENCLC | KEYOPENCLCXX)
 #include "clang/Basic/OpenCLImageTypes.def"
 
 // OpenMP Type Traits
 KEYWORD(__builtin_omp_required_simd_align, KEYALL)
 
-KEYWORD(pipe                        , KEYOPENCLC)
+KEYWORD(pipe                        , KEYOPENCLC | KEYOPENCLCXX)
 
 // Borland Extensions.
 KEYWORD(__pascal                    , KEYALL)
@@ -659,7 +670,7 @@
 KEYWORD(__builtin_convertvector   , KEYALL)
 ALIAS("__char16_t"   , char16_t   , KEYCXX)
 ALIAS("__char32_t"   , char32_t   , KEYCXX)
-
+KEYWORD(__builtin_bit_cast        , KEYALL)
 KEYWORD(__builtin_available       , KEYALL)
 
 // Clang-specific keywords enabled only in testing.
@@ -822,6 +833,10 @@
 ANNOTATION(module_begin)
 ANNOTATION(module_end)
 
+// Annotation for a header_name token that has been looked up and transformed
+// into the name of a header unit.
+ANNOTATION(header_unit)
+
 #undef ANNOTATION
 #undef TESTING_KEYWORD
 #undef OBJC_AT_KEYWORD
diff --git a/linux-x64/clang/include/clang/Basic/TokenKinds.h b/linux-x64/clang/include/clang/Basic/TokenKinds.h
index 264a8e2..1d5be5f 100644
--- a/linux-x64/clang/include/clang/Basic/TokenKinds.h
+++ b/linux-x64/clang/include/clang/Basic/TokenKinds.h
@@ -86,7 +86,7 @@
   return K == tok::numeric_constant || K == tok::char_constant ||
          K == tok::wide_char_constant || K == tok::utf8_char_constant ||
          K == tok::utf16_char_constant || K == tok::utf32_char_constant ||
-         isStringLiteral(K) || K == tok::angle_string_literal;
+         isStringLiteral(K) || K == tok::header_name;
 }
 
 /// Return true if this is any of tok::annot_* kinds.
diff --git a/linux-x64/clang/include/clang/Basic/Version.inc b/linux-x64/clang/include/clang/Basic/Version.inc
index 6bcda8f..ae29dd5 100644
--- a/linux-x64/clang/include/clang/Basic/Version.inc
+++ b/linux-x64/clang/include/clang/Basic/Version.inc
@@ -1,5 +1,5 @@
-#define CLANG_VERSION 9.0.3
-#define CLANG_VERSION_STRING "9.0.3"
+#define CLANG_VERSION 9.0.8
+#define CLANG_VERSION_STRING "9.0.8"
 #define CLANG_VERSION_MAJOR 9
 #define CLANG_VERSION_MINOR 0
-#define CLANG_VERSION_PATCHLEVEL 3
+#define CLANG_VERSION_PATCHLEVEL 8
diff --git a/linux-x64/clang/include/clang/Basic/X86Target.def b/linux-x64/clang/include/clang/Basic/X86Target.def
index c6719ff..94ccb9f 100644
--- a/linux-x64/clang/include/clang/Basic/X86Target.def
+++ b/linux-x64/clang/include/clang/Basic/X86Target.def
@@ -66,7 +66,7 @@
 /// i686-generation processors, P6 / Pentium M microarchitecture based.
 //@{
 PROC(PentiumPro, "pentiumpro", PROC_32_BIT)
-PROC_ALIAS(PentiumPro, "i686")
+PROC(i686, "i686", PROC_32_BIT)
 PROC(Pentium2, "pentium2", PROC_32_BIT)
 PROC(Pentium3, "pentium3", PROC_32_BIT)
 PROC_ALIAS(Pentium3, "pentium3m")
@@ -157,6 +157,10 @@
 /// Cascadelake Server microarchitecture based processors.
 PROC_WITH_FEAT(Cascadelake, "cascadelake", PROC_64_BIT, FEATURE_AVX512VNNI)
 
+/// \name Cooperlake Server
+/// Cooperlake Server microarchitecture based processors.
+PROC_WITH_FEAT(Cooperlake, "cooperlake", PROC_64_BIT, FEATURE_AVX512BF16)
+
 /// \name Cannonlake Client
 /// Cannonlake client microarchitecture based processors.
 PROC_WITH_FEAT(Cannonlake, "cannonlake", PROC_64_BIT, FEATURE_AVX512VBMI)
@@ -236,6 +240,7 @@
 /// Zen architecture processors.
 //@{
 PROC_WITH_FEAT(ZNVER1, "znver1", PROC_64_BIT, FEATURE_AVX2)
+PROC_WITH_FEAT(ZNVER2, "znver2", PROC_64_BIT, FEATURE_AVX2)
 //@}
 
 /// This specification is deprecated and will be removed in the future.
@@ -291,6 +296,7 @@
 FEATURE(FEATURE_VPCLMULQDQ)
 FEATURE(FEATURE_AVX512VNNI)
 FEATURE(FEATURE_AVX512BITALG)
+FEATURE(FEATURE_AVX512BF16)
 
 
 // FIXME: When commented out features are supported in LLVM, enable them here.
diff --git a/linux-x64/clang/include/clang/Basic/arm_neon.inc b/linux-x64/clang/include/clang/Basic/arm_neon.inc
index d62c1c6..c1ca60d 100644
--- a/linux-x64/clang/include/clang/Basic/arm_neon.inc
+++ b/linux-x64/clang/include/clang/Basic/arm_neon.inc
@@ -649,10 +649,10 @@
 BUILTIN(__builtin_neon_vsliq_n_v, "V16ScV16ScV16ScIii", "n")
 BUILTIN(__builtin_neon_vsqadd_v, "V8ScV8ScV8Sci", "n")
 BUILTIN(__builtin_neon_vsqaddb_u8, "ScScSc", "n")
-BUILTIN(__builtin_neon_vsqaddd_u64, "UWiUWiUWi", "n")
-BUILTIN(__builtin_neon_vsqaddh_u16, "UsUsUs", "n")
+BUILTIN(__builtin_neon_vsqaddd_u64, "UWiUWiWi", "n")
+BUILTIN(__builtin_neon_vsqaddh_u16, "UsUss", "n")
 BUILTIN(__builtin_neon_vsqaddq_v, "V16ScV16ScV16Sci", "n")
-BUILTIN(__builtin_neon_vsqadds_u32, "UiUiUi", "n")
+BUILTIN(__builtin_neon_vsqadds_u32, "UiUii", "n")
 BUILTIN(__builtin_neon_vsqrt_v, "V8ScV8Sci", "n")
 BUILTIN(__builtin_neon_vsqrtq_v, "V16ScV16Sci", "n")
 BUILTIN(__builtin_neon_vsra_n_v, "V8ScV8ScV8ScIii", "n")
@@ -705,10 +705,10 @@
 BUILTIN(__builtin_neon_vtstq_v, "V16ScV16ScV16Sci", "n")
 BUILTIN(__builtin_neon_vuqadd_v, "V8ScV8ScV8Sci", "n")
 BUILTIN(__builtin_neon_vuqaddb_s8, "ScScSc", "n")
-BUILTIN(__builtin_neon_vuqaddd_s64, "WiWiWi", "n")
-BUILTIN(__builtin_neon_vuqaddh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vuqaddd_s64, "WiWiUWi", "n")
+BUILTIN(__builtin_neon_vuqaddh_s16, "ssUs", "n")
 BUILTIN(__builtin_neon_vuqaddq_v, "V16ScV16ScV16Sci", "n")
-BUILTIN(__builtin_neon_vuqadds_s32, "iii", "n")
+BUILTIN(__builtin_neon_vuqadds_s32, "iiUi", "n")
 BUILTIN(__builtin_neon_vuzp_v, "vv*V8ScV8Sci", "n")
 BUILTIN(__builtin_neon_vuzpq_v, "vv*V16ScV16Sci", "n")
 BUILTIN(__builtin_neon_vzip_v, "vv*V8ScV8Sci", "n")
diff --git a/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h b/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h
index 52157f0..1f81072 100644
--- a/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h
+++ b/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h
@@ -95,7 +95,6 @@
   bool InReg : 1;           // isDirect() || isExtend() || isIndirect()
   bool CanBeFlattened: 1;   // isDirect()
   bool SignExt : 1;         // isExtend()
-  bool SuppressSRet : 1;    // isIndirect()
 
   bool canHavePaddingType() const {
     return isDirect() || isExtend() || isIndirect() || isExpand();
@@ -111,14 +110,13 @@
   }
 
   ABIArgInfo(Kind K)
-      : TheKind(K), PaddingInReg(false), InReg(false), SuppressSRet(false) {
+      : TheKind(K), PaddingInReg(false), InReg(false) {
   }
 
 public:
   ABIArgInfo()
       : TypeData(nullptr), PaddingType(nullptr), DirectOffset(0),
-        TheKind(Direct), PaddingInReg(false), InReg(false),
-        SuppressSRet(false) {}
+        TheKind(Direct), PaddingInReg(false), InReg(false) {}
 
   static ABIArgInfo getDirect(llvm::Type *T = nullptr, unsigned Offset = 0,
                               llvm::Type *Padding = nullptr,
@@ -407,16 +405,6 @@
     CanBeFlattened = Flatten;
   }
 
-  bool getSuppressSRet() const {
-    assert(isIndirect() && "Invalid kind!");
-    return SuppressSRet;
-  }
-
-  void setSuppressSRet(bool Suppress) {
-    assert(isIndirect() && "Invalid kind!");
-    SuppressSRet = Suppress;
-  }
-
   void dump() const;
 };
 
diff --git a/linux-x64/clang/include/clang/CodeGen/CodeGenABITypes.h b/linux-x64/clang/include/clang/CodeGen/CodeGenABITypes.h
index febb25a..31f0cea 100644
--- a/linux-x64/clang/include/clang/CodeGen/CodeGenABITypes.h
+++ b/linux-x64/clang/include/clang/CodeGen/CodeGenABITypes.h
@@ -30,6 +30,7 @@
 namespace llvm {
   class DataLayout;
   class Module;
+  class Function;
   class FunctionType;
   class Type;
 }
@@ -83,6 +84,59 @@
 unsigned getLLVMFieldNumber(CodeGenModule &CGM,
                             const RecordDecl *RD, const FieldDecl *FD);
 
+/// Returns the default constructor for a C struct with non-trivially copyable
+/// fields, generating it if necessary. The returned function uses the `cdecl`
+/// calling convention, returns void, and takes a single argument that is a
+/// pointer to the address of the struct.
+llvm::Function *getNonTrivialCStructDefaultConstructor(CodeGenModule &GCM,
+                                                       CharUnits DstAlignment,
+                                                       bool IsVolatile,
+                                                       QualType QT);
+
+/// Returns the copy constructor for a C struct with non-trivially copyable
+/// fields, generating it if necessary. The returned function uses the `cdecl`
+/// calling convention, returns void, and takes two arguments: pointers to the
+/// addresses of the destination and source structs, respectively.
+llvm::Function *getNonTrivialCStructCopyConstructor(CodeGenModule &CGM,
+                                                    CharUnits DstAlignment,
+                                                    CharUnits SrcAlignment,
+                                                    bool IsVolatile,
+                                                    QualType QT);
+
+/// Returns the move constructor for a C struct with non-trivially copyable
+/// fields, generating it if necessary. The returned function uses the `cdecl`
+/// calling convention, returns void, and takes two arguments: pointers to the
+/// addresses of the destination and source structs, respectively.
+llvm::Function *getNonTrivialCStructMoveConstructor(CodeGenModule &CGM,
+                                                    CharUnits DstAlignment,
+                                                    CharUnits SrcAlignment,
+                                                    bool IsVolatile,
+                                                    QualType QT);
+
+/// Returns the copy assignment operator for a C struct with non-trivially
+/// copyable fields, generating it if necessary. The returned function uses the
+/// `cdecl` calling convention, returns void, and takes two arguments: pointers
+/// to the addresses of the destination and source structs, respectively.
+llvm::Function *getNonTrivialCStructCopyAssignmentOperator(
+    CodeGenModule &CGM, CharUnits DstAlignment, CharUnits SrcAlignment,
+    bool IsVolatile, QualType QT);
+
+/// Return the move assignment operator for a C struct with non-trivially
+/// copyable fields, generating it if necessary. The returned function uses the
+/// `cdecl` calling convention, returns void, and takes two arguments: pointers
+/// to the addresses of the destination and source structs, respectively.
+llvm::Function *getNonTrivialCStructMoveAssignmentOperator(
+    CodeGenModule &CGM, CharUnits DstAlignment, CharUnits SrcAlignment,
+    bool IsVolatile, QualType QT);
+
+/// Returns the destructor for a C struct with non-trivially copyable fields,
+/// generating it if necessary. The returned function uses the `cdecl` calling
+/// convention, returns void, and takes a single argument that is a pointer to
+/// the address of the struct.
+llvm::Function *getNonTrivialCStructDestructor(CodeGenModule &CGM,
+                                               CharUnits DstAlignment,
+                                               bool IsVolatile, QualType QT);
+
 }  // end namespace CodeGen
 }  // end namespace clang
 
diff --git a/linux-x64/clang/include/clang/Config/config.h b/linux-x64/clang/include/clang/Config/config.h
index cff84b2..47240d9 100644
--- a/linux-x64/clang/include/clang/Config/config.h
+++ b/linux-x64/clang/include/clang/Config/config.h
@@ -23,6 +23,9 @@
 /* Default runtime library to use. */
 #define CLANG_DEFAULT_RTLIB ""
 
+/* Default unwind library to use. */
+#define CLANG_DEFAULT_UNWINDLIB ""
+
 /* Default objcopy to use */
 #define CLANG_DEFAULT_OBJCOPY "objcopy"
 
@@ -54,14 +57,11 @@
 /* Define if we have libxml2 */
 /* #undef CLANG_HAVE_LIBXML */
 
-/* Define if we have z3 and want to build it */
-/* #undef CLANG_ANALYZER_WITH_Z3 */
-
 /* Define if we have sys/resource.h (rlimits) */
 #define CLANG_HAVE_RLIMITS 1
 
 /* The LLVM product name and version */
-#define BACKEND_PACKAGE_STRING "LLVM 9.0.3svn"
+#define BACKEND_PACKAGE_STRING "LLVM 9.0.8svn"
 
 /* Linker version detected at compile time. */
 /* #undef HOST_LINK_VERSION */
diff --git a/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h b/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h
index 507cf28..d64329c 100644
--- a/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h
+++ b/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h
@@ -14,7 +14,7 @@
 #ifndef LLVM_CLANG_CROSSTU_CROSSTRANSLATIONUNIT_H
 #define LLVM_CLANG_CROSSTU_CROSSTRANSLATIONUNIT_H
 
-#include "clang/AST/ASTImporterLookupTable.h"
+#include "clang/AST/ASTImporterSharedState.h"
 #include "clang/Basic/LLVM.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/SmallPtrSet.h"
@@ -28,6 +28,7 @@
 class ASTUnit;
 class DeclContext;
 class FunctionDecl;
+class VarDecl;
 class NamedDecl;
 class TranslationUnitDecl;
 
@@ -43,7 +44,9 @@
   failed_to_get_external_ast,
   failed_to_generate_usr,
   triple_mismatch,
-  lang_mismatch
+  lang_mismatch,
+  lang_dialect_mismatch,
+  load_threshold_reached
 };
 
 class IndexError : public llvm::ErrorInfo<IndexError> {
@@ -86,6 +89,9 @@
 
 std::string createCrossTUIndexString(const llvm::StringMap<std::string> &Index);
 
+// Returns true if the variable or any field of a record variable is const.
+bool containsConst(const VarDecl *VD, const ASTContext &ACtx);
+
 /// This class is used for tools that requires cross translation
 ///        unit capability.
 ///
@@ -101,16 +107,16 @@
   CrossTranslationUnitContext(CompilerInstance &CI);
   ~CrossTranslationUnitContext();
 
-  /// This function loads a function definition from an external AST
-  ///        file and merge it into the original AST.
+  /// This function loads a function or variable definition from an
+  ///        external AST file and merges it into the original AST.
   ///
-  /// This method should only be used on functions that have no definitions in
+  /// This method should only be used on functions that have no definitions or
+  /// variables that have no initializer in
   /// the current translation unit. A function definition with the same
   /// declaration will be looked up in the index file which should be in the
   /// \p CrossTUDir directory, called \p IndexName. In case the declaration is
   /// found in the index the corresponding AST file will be loaded and the
-  /// definition of the function will be merged into the original AST using
-  /// the AST Importer.
+  /// definition will be merged into the original AST using the AST Importer.
   ///
   /// \return The declaration with the definition will be returned.
   /// If no suitable definition is found in the index file or multiple
@@ -120,17 +126,20 @@
   llvm::Expected<const FunctionDecl *>
   getCrossTUDefinition(const FunctionDecl *FD, StringRef CrossTUDir,
                        StringRef IndexName, bool DisplayCTUProgress = false);
+  llvm::Expected<const VarDecl *>
+  getCrossTUDefinition(const VarDecl *VD, StringRef CrossTUDir,
+                       StringRef IndexName, bool DisplayCTUProgress = false);
 
-  /// This function loads a function definition from an external AST
-  ///        file.
+  /// This function loads a definition from an external AST file.
   ///
-  /// A function definition with the same declaration will be looked up in the
+  /// A definition with the same declaration will be looked up in the
   /// index file which should be in the \p CrossTUDir directory, called
   /// \p IndexName. In case the declaration is found in the index the
-  /// corresponding AST file will be loaded.
+  /// corresponding AST file will be loaded. If the number of TUs imported
+  /// reaches \p CTULoadTreshold, no loading is performed.
   ///
   /// \return Returns a pointer to the ASTUnit that contains the definition of
-  /// the looked up function or an Error.
+  /// the looked up name or an Error.
   /// The returned pointer is never a nullptr.
   ///
   /// Note that the AST files should also be in the \p CrossTUDir.
@@ -145,27 +154,40 @@
   ///
   /// \return Returns the resulting definition or an error.
   llvm::Expected<const FunctionDecl *> importDefinition(const FunctionDecl *FD);
+  llvm::Expected<const VarDecl *> importDefinition(const VarDecl *VD);
 
-  /// Get a name to identify a function.
+  /// Get a name to identify a named decl.
   static std::string getLookupName(const NamedDecl *ND);
 
   /// Emit diagnostics for the user for potential configuration errors.
   void emitCrossTUDiagnostics(const IndexError &IE);
 
 private:
-  void lazyInitLookupTable(TranslationUnitDecl *ToTU);
+  void lazyInitImporterSharedSt(TranslationUnitDecl *ToTU);
   ASTImporter &getOrCreateASTImporter(ASTContext &From);
-  const FunctionDecl *findFunctionInDeclContext(const DeclContext *DC,
-                                                StringRef LookupFnName);
+  template <typename T>
+  llvm::Expected<const T *> getCrossTUDefinitionImpl(const T *D,
+                                                     StringRef CrossTUDir,
+                                                     StringRef IndexName,
+                                                     bool DisplayCTUProgress);
+  template <typename T>
+  const T *findDefInDeclContext(const DeclContext *DC,
+                                StringRef LookupName);
+  template <typename T>
+  llvm::Expected<const T *> importDefinitionImpl(const T *D);
 
   llvm::StringMap<std::unique_ptr<clang::ASTUnit>> FileASTUnitMap;
-  llvm::StringMap<clang::ASTUnit *> FunctionASTUnitMap;
-  llvm::StringMap<std::string> FunctionFileMap;
+  llvm::StringMap<clang::ASTUnit *> NameASTUnitMap;
+  llvm::StringMap<std::string> NameFileMap;
   llvm::DenseMap<TranslationUnitDecl *, std::unique_ptr<ASTImporter>>
       ASTUnitImporterMap;
   CompilerInstance &CI;
   ASTContext &Context;
-  std::unique_ptr<ASTImporterLookupTable> LookupTable;
+  std::shared_ptr<ASTImporterSharedState> ImporterSharedSt;
+  /// \p CTULoadTreshold should serve as an upper limit to the number of TUs
+  /// imported in order to reduce the memory footprint of CTU analysis.
+  const unsigned CTULoadThreshold;
+  unsigned NumASTLoaded{0u};
 };
 
 } // namespace cross_tu
diff --git a/linux-x64/clang/include/clang/Driver/Distro.h b/linux-x64/clang/include/clang/Driver/Distro.h
index d9a31f1..67dc764 100644
--- a/linux-x64/clang/include/clang/Driver/Distro.h
+++ b/linux-x64/clang/include/clang/Driver/Distro.h
@@ -33,6 +33,7 @@
     DebianJessie,
     DebianStretch,
     DebianBuster,
+    DebianBullseye,
     Exherbo,
     RHEL5,
     RHEL6,
@@ -63,6 +64,7 @@
     UbuntuBionic,
     UbuntuCosmic,
     UbuntuDisco,
+    UbuntuEoan,
     UnknownDistro
   };
 
@@ -112,11 +114,11 @@
   }
 
   bool IsDebian() const {
-    return DistroVal >= DebianLenny && DistroVal <= DebianBuster;
+    return DistroVal >= DebianLenny && DistroVal <= DebianBullseye;
   }
 
   bool IsUbuntu() const {
-    return DistroVal >= UbuntuHardy && DistroVal <= UbuntuDisco;
+    return DistroVal >= UbuntuHardy && DistroVal <= UbuntuEoan;
   }
 
   bool IsAlpineLinux() const {
diff --git a/linux-x64/clang/include/clang/Driver/Driver.h b/linux-x64/clang/include/clang/Driver/Driver.h
index 03e6458..244a0f3 100644
--- a/linux-x64/clang/include/clang/Driver/Driver.h
+++ b/linux-x64/clang/include/clang/Driver/Driver.h
@@ -394,6 +394,14 @@
   void BuildUniversalActions(Compilation &C, const ToolChain &TC,
                              const InputList &BAInputs) const;
 
+  /// Check that the file referenced by Value exists. If it doesn't,
+  /// issue a diagnostic and return false.
+  /// If TypoCorrect is true and the file does not exist, see if it looks
+  /// like a likely typo for a flag and if so print a "did you mean" blurb.
+  bool DiagnoseInputExistence(const llvm::opt::DerivedArgList &Args,
+                              StringRef Value, types::ID Ty,
+                              bool TypoCorrect) const;
+
   /// BuildJobs - Bind actions to concrete tools and translate
   /// arguments to form the list of jobs to run.
   ///
diff --git a/linux-x64/clang/include/clang/Driver/Multilib.h b/linux-x64/clang/include/clang/Driver/Multilib.h
index 353aefd..abf0d5f 100644
--- a/linux-x64/clang/include/clang/Driver/Multilib.h
+++ b/linux-x64/clang/include/clang/Driver/Multilib.h
@@ -34,10 +34,11 @@
   std::string OSSuffix;
   std::string IncludeSuffix;
   flags_list Flags;
+  int Priority;
 
 public:
   Multilib(StringRef GCCSuffix = {}, StringRef OSSuffix = {},
-           StringRef IncludeSuffix = {});
+           StringRef IncludeSuffix = {}, int Priority = 0);
 
   /// Get the detected GCC installation path suffix for the multi-arch
   /// target variant. Always starts with a '/', unless empty
@@ -77,6 +78,10 @@
   const flags_list &flags() const { return Flags; }
   flags_list &flags() { return Flags; }
 
+  /// Returns the multilib priority. When more than one multilib matches flags,
+  /// the one with the highest priority is selected, with 0 being the default.
+  int priority() const { return Priority; }
+
   /// Add a flag to the flags list
   /// \p Flag must be a flag accepted by the driver with its leading '-' removed,
   ///     and replaced with either:
diff --git a/linux-x64/clang/include/clang/Driver/Options.inc b/linux-x64/clang/include/clang/Driver/Options.inc
index cacabe4..ec8f1ff 100644
--- a/linux-x64/clang/include/clang/Driver/Options.inc
+++ b/linux-x64/clang/include/clang/Driver/Options.inc
@@ -103,8 +103,18 @@
 OPTION(prefix_1, "analyze-function", analyze_function, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Run analysis on specific function (for C++ include parameters in name)", nullptr, nullptr)
 OPTION(prefix_2, "analyze-", _SLASH_analyze_, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "analyzer-checker-help-alpha", analyzer_checker_help_alpha, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Display the list of in development analyzer checkers. These are NOT considered safe, they are unstable and will emit incorrect reports. Enable ONLY FOR DEVELOPMENT purposes", nullptr, nullptr)
+OPTION(prefix_1, "analyzer-checker-help-developer", analyzer_checker_help_developer, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Display the list of developer-only checkers such as modeling and debug checkers", nullptr, nullptr)
 OPTION(prefix_1, "analyzer-checker-help", analyzer_checker_help, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Display the list of analyzer checkers that are available", nullptr, nullptr)
+OPTION(prefix_1, "analyzer-checker-option-help-alpha", analyzer_checker_option_help_alpha, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Display the list of in development checker and package options. These are NOT considered safe, they are unstable and will emit incorrect reports. Enable ONLY FOR DEVELOPMENT purposes", nullptr, nullptr)
+OPTION(prefix_1, "analyzer-checker-option-help-developer", analyzer_checker_option_help_developer, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Display the list of checker and package options meant for development purposes only", nullptr, nullptr)
+OPTION(prefix_1, "analyzer-checker-option-help", analyzer_checker_option_help, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Display the list of checker and package options", nullptr, nullptr)
 OPTION(prefix_1, "analyzer-checker=", analyzer_checker_EQ, Joined, INVALID, analyzer_checker, nullptr, CC1Option | NoDriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "analyzer-checker", analyzer_checker, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Choose analyzer checkers to enable", nullptr, nullptr)
@@ -160,6 +170,8 @@
        "Source Code Analysis - Abstract Memory Store Models", nullptr, nullptr)
 OPTION(prefix_1, "analyzer-viz-egraph-graphviz", analyzer_viz_egraph_graphviz, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Display exploded graph using GraphViz", nullptr, nullptr)
+OPTION(prefix_1, "analyzer-werror", analyzer_werror, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Emit analyzer results as errors rather than warnings", nullptr, nullptr)
 OPTION(prefix_3, "analyze", _analyze, Flag, INVALID, INVALID, nullptr, DriverOption | CoreOption, 0,
        "Run the static analyzer", nullptr, nullptr)
 OPTION(prefix_1, "analyze", analyze, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -183,12 +195,16 @@
 OPTION(prefix_3, "assemble", _assemble, Flag, INVALID, S, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "assert=", _assert_EQ, Joined, INVALID, A, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "assert", _assert, Separate, INVALID, A, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "ast-dump-all=", ast_dump_all_EQ, Joined, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Build ASTs and then debug dump them in the specified format, forcing deserialization. Supported formats include: default, json", nullptr, nullptr)
 OPTION(prefix_1, "ast-dump-all", ast_dump_all, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Build ASTs and then debug dump them, forcing deserialization", nullptr, nullptr)
 OPTION(prefix_1, "ast-dump-filter", ast_dump_filter, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Use with -ast-dump or -ast-print to dump/print only AST declaration nodes having a certain substring in a qualified name. Use -ast-list to list all filterable declaration node names.", "<dump_filter>", nullptr)
 OPTION(prefix_1, "ast-dump-lookups", ast_dump_lookups, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Build ASTs and then debug dump their name lookup tables", nullptr, nullptr)
+OPTION(prefix_1, "ast-dump=", ast_dump_EQ, Joined, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Build ASTs and then debug dump them in the specified format. Supported formats include: default, json", nullptr, nullptr)
 OPTION(prefix_1, "ast-dump", ast_dump, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Build ASTs and then debug dump them", nullptr, nullptr)
 OPTION(prefix_1, "ast-list", ast_list, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -202,6 +218,7 @@
 OPTION(prefix_3, "autocomplete=", autocomplete, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "aux-triple", aux_triple, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Auxiliary target triple.", nullptr, nullptr)
+OPTION(prefix_2, "await", _SLASH_await, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "A", A, JoinedOrSeparate, gfortran_Group, INVALID, nullptr, RenderJoined, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "a", a, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "bigobj", _SLASH_bigobj, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
@@ -305,7 +322,7 @@
 OPTION(prefix_1, "compiler-options-dump", compiler_options_dump, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Dump the compiler configuration options", nullptr, nullptr)
 OPTION(prefix_3, "compile", _compile, Flag, INVALID, c, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "compress-debug-sections=", compress_debug_sections_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
+OPTION(prefix_4, "compress-debug-sections=", compress_debug_sections_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "DWARF debug sections compression type", nullptr, nullptr)
 OPTION(prefix_4, "compress-debug-sections", compress_debug_sections, Flag, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "DWARF debug sections compression", nullptr, nullptr)
@@ -316,6 +333,7 @@
 OPTION(prefix_3, "config", config, Separate, INVALID, INVALID, nullptr, DriverOption, 0,
        "Specifies configuration file", nullptr, nullptr)
 OPTION(prefix_3, "constant-cfstrings", _constant_cfstrings, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "constexpr:", _SLASH_constexpr, Joined, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "coverage-cfg-checksum", coverage_cfg_checksum, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Emit CFG checksum for functions in .gcno files.", nullptr, nullptr)
 OPTION(prefix_1, "coverage-data-file=", coverage_data_file_EQ, Joined, INVALID, coverage_data_file, nullptr, CC1Option | NoDriverOption, 0, nullptr, nullptr, nullptr)
@@ -362,10 +380,11 @@
        "Compile only", nullptr, nullptr)
 OPTION(prefix_2, "d1PP", _SLASH_d1PP, Flag, cl_Group, dD, nullptr, CLOption | DriverOption | CLOption, 0,
        "Retain macro definitions in /E mode", nullptr, nullptr)
-OPTION(prefix_2, "d1reportAllClassLayout", _SLASH_d1reportAllClassLayout, Flag, cl_Group, fdump_record_layouts, nullptr, CLOption | DriverOption | CLOption, 0,
+OPTION(prefix_2, "d1reportAllClassLayout", _SLASH_d1reportAllClassLayout, Flag, cl_Group, Xclang, "-fdump-record-layouts\0", CLOption | DriverOption | CLOption, 0,
        "Dump record layout information", nullptr, nullptr)
 OPTION(prefix_2, "d2FastFail", _SLASH_d2FastFail, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "d2Zi+", _SLASH_d2Zi_PLUS, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "d2", _SLASH_d2, Joined, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "dA", dA, Flag, d_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "dD", dD, Flag, d_Group, INVALID, nullptr, CC1Option, 0,
        "Print macro definitions in -E mode in addition to normal output", nullptr, nullptr)
@@ -472,6 +491,8 @@
        "Generate pre-compiled module file from a set of header files", nullptr, nullptr)
 OPTION(prefix_1, "emit-html", emit_html, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Output input source as HTML", nullptr, nullptr)
+OPTION(prefix_1, "emit-interface-stubs", emit_iterface_stubs, Flag, Action_Group, INVALID, nullptr, CC1Option, 0,
+       "Generate Inteface Stub Files.", nullptr, nullptr)
 OPTION(prefix_1, "emit-llvm-bc", emit_llvm_bc, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Build ASTs then convert to LLVM, emit .bc file", nullptr, nullptr)
 OPTION(prefix_1, "emit-llvm-only", emit_llvm_only, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -488,10 +509,6 @@
        "Emit native object files", nullptr, nullptr)
 OPTION(prefix_1, "emit-pch", emit_pch, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Generate pre-compiled header file", nullptr, nullptr)
-OPTION(prefix_1, "enable-split-dwarf=", enable_split_dwarf_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
-       "Set DWARF fission mode to either 'split' or 'single'", nullptr, "split,single")
-OPTION(prefix_1, "enable-split-dwarf", enable_split_dwarf, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
-       "Use DWARF fission in 'split' mode", nullptr, nullptr)
 OPTION(prefix_1, "enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang", enable_trivial_var_init_zero, Joined, INVALID, INVALID, nullptr, CC1Option, 0,
        "Trivial automatic variable initialization to zero is only here for benchmarks, it'll eventually be removed, and I'm OK with that because I'm only using it to benchmark", nullptr, nullptr)
 OPTION(prefix_3, "encoding=", _encoding_EQ, Joined, INVALID, fencoding_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -552,6 +569,8 @@
        "Use ANSI escape codes for diagnostics", nullptr, nullptr)
 OPTION(prefix_1, "fapple-kext", fapple_kext, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Use Apple's kernel extensions ABI", nullptr, nullptr)
+OPTION(prefix_1, "fapple-link-rtlib", fapple_link_rtlib, Flag, f_Group, INVALID, nullptr, 0, 0,
+       "Force linking the clang builtins runtime library", nullptr, nullptr)
 OPTION(prefix_1, "fapple-pragma-pack", fapple_pragma_pack, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable Apple gcc-compatible #pragma pack handling", nullptr, nullptr)
 OPTION(prefix_1, "fapplication-extension", fapplication_extension, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
@@ -588,7 +607,7 @@
 OPTION(prefix_1, "fborland-extensions", fborland_extensions, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Accept non-standard constructs supported by the Borland compiler", nullptr, nullptr)
 OPTION(prefix_1, "fbounds-check", bounds_check_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fbracket-depth=", fbracket_depth_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fbracket-depth=", fbracket_depth_EQ, Joined, f_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fbracket-depth", fbracket_depth, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Maximum nesting level for parentheses, brackets, and braces", nullptr, nullptr)
 OPTION(prefix_1, "fbranch-count-reg", branch_count_reg_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -670,6 +689,10 @@
 OPTION(prefix_1, "fcrash-diagnostics-dir=", fcrash_diagnostics_dir, Joined, f_clang_Group, INVALID, nullptr, NoArgumentUnused | CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcray-pointer", cray_pointer_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcreate-profile", fcreate_profile, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fcs-profile-generate=", fcs_profile_generate_EQ, Joined, f_Group, INVALID, nullptr, CoreOption, 0,
+       "Generate instrumented code to collect context sensitive execution counts into <directory>/default.profraw (overridden by LLVM_PROFILE_FILE env var)", "<directory>", nullptr)
+OPTION(prefix_1, "fcs-profile-generate", fcs_profile_generate, Flag, f_Group, INVALID, nullptr, CoreOption, 0,
+       "Generate instrumented code to collect context sensitive execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)", nullptr, nullptr)
 OPTION(prefix_1, "fcuda-allow-variadic-functions", fcuda_allow_variadic_functions, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Allow variadic functions in CUDA device code.", nullptr, nullptr)
 OPTION(prefix_1, "fcuda-approx-transcendentals", fcuda_approx_transcendentals, Flag, INVALID, INVALID, nullptr, CC1Option, 0,
@@ -691,7 +714,7 @@
 OPTION(prefix_1, "fd-lines-as-comments", d_lines_as_comments_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fdata-sections", fdata_sections, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Place each data in its own section (ELF Only)", nullptr, nullptr)
-OPTION(prefix_1, "fdebug-compilation-dir", fdebug_compilation_dir, Separate, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
+OPTION(prefix_1, "fdebug-compilation-dir", fdebug_compilation_dir, Separate, f_Group, INVALID, nullptr, CC1Option | CC1AsOption | CoreOption, 0,
        "The compilation directory to embed in the debug info.", nullptr, nullptr)
 OPTION(prefix_1, "fdebug-info-for-profiling", fdebug_info_for_profiling, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Emit extra debug info to make sample profile more accurate.", nullptr, nullptr)
@@ -713,6 +736,8 @@
        "Enable special debugger support for Objective-C subscripting and literals", nullptr, nullptr)
 OPTION(prefix_1, "fdebugger-support", fdebugger_support, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Enable special debugger support behavior", nullptr, nullptr)
+OPTION(prefix_1, "fdeclare-opencl-builtins", fdeclare_opencl_builtins, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Add OpenCL builtin function declarations (experimental)", nullptr, nullptr)
 OPTION(prefix_1, "fdeclspec", fdeclspec, Flag, f_clang_Group, INVALID, nullptr, CC1Option, 0,
        "Allow __declspec as a keyword", nullptr, nullptr)
 OPTION(prefix_1, "fdefault-calling-conv=", fdefault_calling_conv_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -798,6 +823,8 @@
        "Instrument the program to emit gcov coverage data when run.", nullptr, nullptr)
 OPTION(prefix_1, "femit-coverage-notes", femit_coverage_notes, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Emit a gcov coverage notes file when compiling.", nullptr, nullptr)
+OPTION(prefix_1, "femit-debug-entry-values", femit_debug_entry_values, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Enables debug info about call site parameter's entry values", nullptr, nullptr)
 OPTION(prefix_1, "femulated-tls", femulated_tls, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Use emutls functions to access thread_local variables", nullptr, nullptr)
 OPTION(prefix_1, "fencode-extended-block-signature", fencode_extended_block_signature, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -940,7 +967,7 @@
 OPTION(prefix_1, "fimplicit-none", implicit_none_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fimplicit-templates", implicit_templates_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "finclude-default-header", finclude_default_header, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
-       "Include the default header file for OpenCL", nullptr, nullptr)
+       "Include default header file for OpenCL", nullptr, nullptr)
 OPTION(prefix_1, "findirect-virtual-calls", anonymous_18, Flag, INVALID, fapple_kext, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "finit-character=", finit_character_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "finit-integer=", finit_integer_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1360,11 +1387,11 @@
 OPTION(prefix_1, "fno-profile-arcs", fno_profile_arcs, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-profile-correction", profile_correction_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-profile-generate-sampling", profile_generate_sampling_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-profile-generate", fno_profile_generate, Flag, f_Group, INVALID, nullptr, DriverOption, 0,
+OPTION(prefix_1, "fno-profile-generate", fno_profile_generate, Flag, f_Group, INVALID, nullptr, CoreOption, 0,
        "Disable generation of profile instrumentation.", nullptr, nullptr)
-OPTION(prefix_1, "fno-profile-instr-generate", fno_profile_instr_generate, Flag, f_Group, INVALID, nullptr, DriverOption, 0,
+OPTION(prefix_1, "fno-profile-instr-generate", fno_profile_instr_generate, Flag, f_Group, INVALID, nullptr, CoreOption, 0,
        "Disable generation of profile instrumentation.", nullptr, nullptr)
-OPTION(prefix_1, "fno-profile-instr-use", fno_profile_instr_use, Flag, f_Group, INVALID, nullptr, DriverOption, 0,
+OPTION(prefix_1, "fno-profile-instr-use", fno_profile_instr_use, Flag, f_Group, INVALID, nullptr, CoreOption, 0,
        "Disable using instrumentation data for profile-guided optimization", nullptr, nullptr)
 OPTION(prefix_1, "fno-profile-reusedist", profile_reusedist_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-profile-sample-accurate", fno_profile_sample_accurate, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
@@ -1582,6 +1609,7 @@
 OPTION(prefix_1, "fopenmp-cuda-force-full-runtime", fopenmp_cuda_force_full_runtime, Flag, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fopenmp-cuda-mode", fopenmp_cuda_mode, Flag, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fopenmp-cuda-number-of-sm=", fopenmp_cuda_number_of_sm_EQ, Joined, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fopenmp-cuda-teams-reduction-recs-num=", fopenmp_cuda_teams_reduction_recs_num_EQ, Joined, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fopenmp-dump-offload-linker-script", fopenmp_dump_offload_linker_script, Flag, f_Group, INVALID, nullptr, NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fopenmp-host-ir-file-path", fopenmp_host_ir_file_path, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Path to the IR file produced by the frontend for the host.", nullptr, nullptr)
@@ -1603,6 +1631,8 @@
        "Maximum number of 'operator->'s to call for a member access", nullptr, nullptr)
 OPTION(prefix_1, "foptimization-record-file=", foptimization_record_file_EQ, Joined, f_Group, INVALID, nullptr, 0, 0,
        "Specify the file name of any generated YAML optimization record", nullptr, nullptr)
+OPTION(prefix_1, "foptimization-record-passes=", foptimization_record_passes_EQ, Joined, f_Group, INVALID, nullptr, 0, 0,
+       "Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)", nullptr, nullptr)
 OPTION(prefix_1, "foptimize-sibling-calls", foptimize_sibling_calls, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "for-linker=", _for_linker_EQ, Joined, INVALID, Xlinker, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "for-linker", _for_linker, Separate, INVALID, Xlinker, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1611,6 +1641,8 @@
 OPTION(prefix_1, "force_cpusubtype_ALL", force__cpusubtype__ALL, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "force_flat_namespace", force__flat__namespace, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "force_load", force__load, Separate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "forder-file-instrumentation", forder_file_instrumentation, Flag, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
+       "Generate instrumented code to collect order file into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)", nullptr, nullptr)
 OPTION(prefix_1, "foutput-class-dir=", foutput_class_dir_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "foverride-record-layout=", foverride_record_layout_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Override record layouts with those in the given file", nullptr, nullptr)
@@ -1665,9 +1697,9 @@
 OPTION(prefix_1, "fprofile-filter-files=", fprofile_filter_files_EQ, Joined, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
        "Instrument only functions from files where names match any regex separated by a semi-colon", nullptr, nullptr)
 OPTION(prefix_1, "fprofile-generate-sampling", profile_generate_sampling_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fprofile-generate=", fprofile_generate_EQ, Joined, f_Group, INVALID, nullptr, DriverOption, 0,
+OPTION(prefix_1, "fprofile-generate=", fprofile_generate_EQ, Joined, f_Group, INVALID, nullptr, CoreOption, 0,
        "Generate instrumented code to collect execution counts into <directory>/default.profraw (overridden by LLVM_PROFILE_FILE env var)", "<directory>", nullptr)
-OPTION(prefix_1, "fprofile-generate", fprofile_generate, Flag, f_Group, INVALID, nullptr, DriverOption, 0,
+OPTION(prefix_1, "fprofile-generate", fprofile_generate, Flag, f_Group, INVALID, nullptr, CoreOption, 0,
        "Generate instrumented code to collect execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)", nullptr, nullptr)
 OPTION(prefix_1, "fprofile-instr-generate=", fprofile_instr_generate_EQ, Joined, f_Group, INVALID, nullptr, CoreOption, 0,
        "Generate instrumented code to collect execution counts into <file> (overridden by LLVM_PROFILE_FILE env var)", "<file>", nullptr)
@@ -1733,12 +1765,12 @@
 OPTION(prefix_1, "frewrite-map-file=", frewrite_map_file_EQ, Joined, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "frewrite-map-file", frewrite_map_file, Separate, f_Group, INVALID, nullptr, DriverOption | CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fripa", ripa_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fropi", fropi, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fropi", fropi, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "frounding-math", rounding_math_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "frtlib-add-rpath", frtlib_add_rpath, Flag, INVALID, INVALID, nullptr, NoArgumentUnused, 0,
        "Add -rpath with architecture-specific resource directory to the linker flags", nullptr, nullptr)
 OPTION(prefix_1, "frtti", frtti, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "frwpi", frwpi, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "frwpi", frwpi, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "FR", _SLASH_FR, Joined, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Fr", _SLASH_Fr, Joined, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fsanitize-address-field-padding=", fsanitize_address_field_padding, Joined, f_clang_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
@@ -1813,6 +1845,8 @@
 OPTION(prefix_1, "fsanitize-undefined-trap-on-error", fsanitize_undefined_trap_on_error, Flag, f_clang_Group, INVALID, nullptr, CC1Option | CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fsanitize=", fsanitize_EQ, CommaJoined, f_clang_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
        "Turn on runtime checks for various forms of undefined or suspicious behavior. See user manual for available checks", "<check>", nullptr)
+OPTION(prefix_1, "fsave-optimization-record=", fsave_optimization_record_EQ, Joined, f_Group, INVALID, nullptr, 0, 0,
+       "Generate an optimization record file in a specific format (default: YAML)", nullptr, nullptr)
 OPTION(prefix_1, "fsave-optimization-record", fsave_optimization_record, Flag, f_Group, INVALID, nullptr, 0, 0,
        "Generate a YAML optimization record file", nullptr, nullptr)
 OPTION(prefix_1, "fsched-interblock", anonymous_22, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -1880,6 +1914,9 @@
 OPTION(prefix_1, "fstrict-vtable-pointers", fstrict_vtable_pointers, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable optimizations based on the strict rules for overwriting polymorphic C++ objects", nullptr, nullptr)
 OPTION(prefix_1, "fstruct-path-tbaa", fstruct_path_tbaa, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fsycl-is-device", fsycl_is_device, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Generate code for SYCL device.", nullptr, nullptr)
+OPTION(prefix_1, "fsymbol-partition=", fsymbol_partition_EQ, Joined, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fsyntax-only", fsyntax_only, Flag, Action_Group, INVALID, nullptr, DriverOption | CoreOption | CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "FS", _SLASH_FS, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftabstop=", ftabstop_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1902,6 +1939,7 @@
        "Perform ThinLTO importing using provided function summary index", nullptr, nullptr)
 OPTION(prefix_1, "fthreadsafe-statics", fthreadsafe_statics, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftime-report", ftime_report, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "ftime-trace", ftime_trace, Flag, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftls-model=", ftlsmodel_EQ, Joined, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftls-model", tls_model_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftracer", tracer_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -1957,7 +1995,7 @@
 OPTION(prefix_2, "FU", _SLASH_FU, JoinedOrSeparate, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fvariable-expansion-in-unroller", variable_expansion_in_unroller_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fveclib=", fveclib, Joined, f_Group, INVALID, nullptr, CC1Option, 0,
-       "Use the given vector functions library", nullptr, "Accelerate,SVML,none")
+       "Use the given vector functions library", nullptr, "Accelerate,MASSV,SVML,none")
 OPTION(prefix_1, "fvect-cost-model", vect_cost_model_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fvectorize", fvectorize, Flag, f_Group, INVALID, nullptr, 0, 0,
        "Enable the loop vectorization passes", nullptr, nullptr)
@@ -2010,7 +2048,7 @@
        "Enable System z vector language extension", nullptr, nullptr)
 OPTION(prefix_1, "F", F, JoinedOrSeparate, INVALID, INVALID, nullptr, RenderJoined | CC1Option, 0,
        "Add directory to framework include search path", nullptr, nullptr)
-OPTION(prefix_2, "F", _SLASH_F, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "F", _SLASH_F, JoinedOrSeparate, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "g0", g0, Flag, gN_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "G1", _SLASH_G1, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "g1", g1, Flag, gN_Group, gline_tables_only, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2198,6 +2236,7 @@
 OPTION(prefix_1, "init", init, Separate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "install_name", install__name, Separate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "integrated-as", anonymous_32, Flag, INVALID, fintegrated_as, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "interface-stub-version=", iterface_stub_version_EQ, JoinedOrSeparate, INVALID, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "internal-externc-isystem", internal_externc_isystem, JoinedOrSeparate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Add directory to the internal system include search path with implicit extern \"C\" semantics; these are assumed to not be user-provided and are used to model system and standard headers' paths.", "<directory>", nullptr)
 OPTION(prefix_1, "internal-isystem", internal_isystem, JoinedOrSeparate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -2285,7 +2324,9 @@
 OPTION(prefix_1, "masm=", masm_EQ, Joined, m_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "massembler-fatal-warnings", massembler_fatal_warnings, Flag, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "Make assembler warnings fatal", nullptr, nullptr)
+OPTION(prefix_1, "matomics", matomics, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx2", mavx2, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mavx512bf16", mavx512bf16, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx512bitalg", mavx512bitalg, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx512bw", mavx512bw, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx512cd", mavx512cd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2298,6 +2339,7 @@
 OPTION(prefix_1, "mavx512vbmi", mavx512vbmi, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx512vl", mavx512vl, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx512vnni", mavx512vnni, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mavx512vp2intersect", mavx512vp2intersect, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx512vpopcntdq", mavx512vpopcntdq, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mavx", mavx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mbackchain", mbackchain, Flag, m_Group, INVALID, nullptr, DriverOption | CC1Option, 0,
@@ -2317,6 +2359,8 @@
 OPTION(prefix_1, "mclzero", mclzero, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcmodel=", mcmodel_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcmpb", mcmpb, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mcmse", mcmse, Flag, m_arm_Features_Group, INVALID, nullptr, DriverOption | CC1Option, 0,
+       "Allow use of CMSE (Armv8-M Security Extensions)", nullptr, nullptr)
 OPTION(prefix_1, "mcode-model", mcode_model, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "The code model to use", nullptr, "tiny,small,kernel,medium,large")
 OPTION(prefix_1, "mcode-object-v3", mcode_object_v3, Flag, m_amdgpu_Features_Group, INVALID, nullptr, 0, 0,
@@ -2326,11 +2370,14 @@
 OPTION(prefix_1, "mconstant-cfstrings", mconstant_cfstrings, Flag, clang_ignored_m_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mconstructor-aliases", mconstructor_aliases, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Emit complete constructors and destructors as aliases when possible", nullptr, nullptr)
+OPTION(prefix_1, "mcpu=?", mcpu_EQ_QUESTION, Flag, INVALID, print_supported_cpus, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcpu=", mcpu_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcrbits", mcrbits, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcrc", mcrc, Flag, m_Group, INVALID, nullptr, 0, 0,
        "Allow use of CRC instructions (ARM/Mips only)", nullptr, nullptr)
 OPTION(prefix_1, "mcrypto", mpower8_crypto, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mcumode", mcumode, Flag, m_amdgpu_Features_Group, INVALID, nullptr, 0, 0,
+       "CU wavefront execution mode is used (AMDGPU only)", nullptr, nullptr)
 OPTION(prefix_1, "mcx16", mcx16, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "MDd", _SLASH_MDd, Flag, _SLASH_M_Group, INVALID, nullptr, CLOption | DriverOption, 0,
        "Use DLL debug run-time", nullptr, nullptr)
@@ -2361,6 +2408,7 @@
        "Allow optimization to assume there are no NaNs.", nullptr, nullptr)
 OPTION(prefix_1, "menable-unsafe-fp-math", menable_unsafe_fp_math, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Allow unsafe floating-point math optimizations which may decrease precision", nullptr, nullptr)
+OPTION(prefix_1, "menqcmd", menqcmd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mexception-handling", mexception_handing, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mexecute-only", mexecute_only, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Disallow generation of data access to code sections (ARM only)", nullptr, nullptr)
@@ -2490,6 +2538,8 @@
        "Extend the -G behaviour to object local data (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "mlong-calls", mlong_calls, Flag, m_Group, INVALID, nullptr, 0, 0,
        "Generate branches with extended addressability, usually via indirect jumps.", nullptr, nullptr)
+OPTION(prefix_1, "mlong-double-64", mlong_double_64, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Force long double to be 64 bits", nullptr, nullptr)
 OPTION(prefix_1, "mlongcall", mlongcall, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mlwp", mlwp, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mlzcnt", mlzcnt, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2517,6 +2567,8 @@
        "Enable MSA ASE (MIPS only)", nullptr, nullptr)
 OPTION(prefix_1, "mmt", mmt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Enable MT ASE (MIPS only)", nullptr, nullptr)
+OPTION(prefix_1, "mmultivalue", mmultivalue, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mmutable-globals", mmutable_globals, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mmwaitx", mmwaitx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "MM", MM, Flag, M_Group, INVALID, nullptr, 0, 0,
        "Like -MMD, but also implies -E and writes to stdout by default", nullptr, nullptr)
@@ -2529,7 +2581,9 @@
 OPTION(prefix_1, "mno-adx", mno_adx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-aes", mno_aes, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-altivec", mno_altivec, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-atomics", mno_atomics, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx2", mno_avx2, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-avx512bf16", mno_avx512bf16, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx512bitalg", mno_avx512bitalg, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx512bw", mno_avx512bw, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx512cd", mno_avx512cd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2542,6 +2596,7 @@
 OPTION(prefix_1, "mno-avx512vbmi", mno_avx512vbmi, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx512vl", mno_avx512vl, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx512vnni", mno_avx512vnni, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-avx512vp2intersect", mno_avx512vp2intersect, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx512vpopcntdq", mno_avx512vpopcntdq, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-avx", mno_avx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-backchain", mno_backchain, Flag, m_Group, INVALID, nullptr, DriverOption | CC1Option, 0, nullptr, nullptr, nullptr)
@@ -2562,6 +2617,8 @@
 OPTION(prefix_1, "mno-crc", mno_crc, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Disallow use of CRC instructions (Mips only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-crypto", mnopower8_crypto, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-cumode", mno_cumode, Flag, m_amdgpu_Features_Group, INVALID, nullptr, 0, 0,
+       "WGP wavefront execution mode is used (AMDGPU only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-cx16", mno_cx16, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-default-build-attributes", mno_default_build_attributes, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-direct-move", mnodirect_move, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2569,6 +2626,7 @@
 OPTION(prefix_1, "mno-dsp", mno_dsp, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-embedded-data", mno_embedded_data, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Do not place constants in the .rodata section instead of the .sdata if they meet the -G <size> threshold (MIPS)", nullptr, nullptr)
+OPTION(prefix_1, "mno-enqcmd", mno_enqcmd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-exception-handling", mno_exception_handing, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-execute-only", mno_execute_only, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Allow generation of data access to code sections (ARM only)", nullptr, nullptr)
@@ -2630,6 +2688,8 @@
        "Disable MSA ASE (MIPS only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-mt", mno_mt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Disable MT ASE (MIPS only)", nullptr, nullptr)
+OPTION(prefix_1, "mno-multivalue", mno_multivalue, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-mutable-globals", mno_mutable_globals, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-mwaitx", mno_mwaitx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-neg-immediates", mno_neg_immediates, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Disallow converting instructions with negative immediates to their negation or inversion.", nullptr, nullptr)
@@ -2675,6 +2735,8 @@
 OPTION(prefix_1, "mno-rtd", mno_rtd, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-rtm", mno_rtm, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-sahf", mno_sahf, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-save-restore", mno_save_restore, Flag, m_riscv_Features_Group, INVALID, nullptr, 0, 0,
+       "Disable using library calls for save and restore", nullptr, nullptr)
 OPTION(prefix_1, "mno-sgx", mno_sgx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-sha", mno_sha, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-shstk", mno_shstk, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2695,6 +2757,7 @@
 OPTION(prefix_1, "mno-stack-arg-probe", mno_stack_arg_probe, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
        "Disable stack probes which are enabled by default", nullptr, nullptr)
 OPTION(prefix_1, "mno-stackrealign", mno_stackrealign, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-tail-call", mno_tail_call, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-tbm", mno_tbm, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-thumb", mno_thumb, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-tls-direct-seg-refs", mno_tls_direct_seg_refs, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
@@ -2709,6 +2772,8 @@
 OPTION(prefix_1, "mno-vx", mno_vx, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-waitpkg", mno_waitpkg, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-warn-nonportable-cfstrings", mno_warn_nonportable_cfstrings, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-wavefrontsize64", mno_wavefrontsize64, Flag, m_Group, INVALID, nullptr, 0, 0,
+       "Wavefront size 32 is used", nullptr, nullptr)
 OPTION(prefix_1, "mno-wbnoinvd", mno_wbnoinvd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-x87", mno_x87, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-xgot", mno_xgot, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2799,6 +2864,8 @@
        "Make StdCall calling convention the default", nullptr, nullptr)
 OPTION(prefix_1, "mrtm", mrtm, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msahf", msahf, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "msave-restore", msave_restore, Flag, m_riscv_Features_Group, INVALID, nullptr, 0, 0,
+       "Enable using library calls for save and restore", nullptr, nullptr)
 OPTION(prefix_1, "msave-temp-labels", msave_temp_labels, Flag, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "Save temporary labels in the symbol table. Note this may change .s semantics and shouldn't generally be used on compiler-generated code.", nullptr, nullptr)
 OPTION(prefix_1, "msecure-plt", msecure_plt, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2837,6 +2904,7 @@
        "Force all memory accesses to be aligned (same as mno-unaligned-access)", nullptr, nullptr)
 OPTION(prefix_1, "mt-migrate-directory", mt_migrate_directory, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Directory for temporary files produced during ARC or ObjC migration", nullptr, nullptr)
+OPTION(prefix_1, "mtail-call", mtail_call, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mtbm", mtbm, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "MTd", _SLASH_MTd, Flag, _SLASH_M_Group, INVALID, nullptr, CLOption | DriverOption, 0,
        "Use static debug run-time", nullptr, nullptr)
@@ -2847,9 +2915,10 @@
 OPTION(prefix_1, "mtls-direct-seg-refs", mtls_direct_seg_refs, Flag, m_Group, INVALID, nullptr, 0, 0,
        "Enable direct TLS access through segment registers (default)", nullptr, nullptr)
 OPTION(prefix_1, "mtp=", mtp_mode_EQ, Joined, m_arm_Features_Group, INVALID, nullptr, 0, 0,
-       "Read thread pointer from coprocessor register (ARM only)", nullptr, "soft, cp15")
+       "Thread pointer access method (AArch32/AArch64 only)", nullptr, "soft,cp15,el0,el1,el2,el3")
 OPTION(prefix_1, "mtp", mtp, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Mode for reading thread pointer", nullptr, nullptr)
+OPTION(prefix_1, "mtune=?", mtune_EQ_QUESTION, Flag, INVALID, print_supported_cpus, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mtune=", mtune_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mtvos-simulator-version-min=", mtvos_simulator_version_min_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mtvos-version-min=", mtvos_version_min_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2885,6 +2954,8 @@
 OPTION(prefix_1, "mwatchos-simulator-version-min=", mwatchos_simulator_version_min_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwatchos-version-min=", mwatchos_version_min_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwatchsimulator-version-min=", mwatchsimulator_version_min_EQ, Joined, INVALID, mwatchos_simulator_version_min_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mwavefrontsize64", mwavefrontsize64, Flag, m_Group, INVALID, nullptr, 0, 0,
+       "Wavefront size 64 is used", nullptr, nullptr)
 OPTION(prefix_1, "mwbnoinvd", mwbnoinvd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwindows", mwindows, Joined, m_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mx32", mx32, Flag, m_Group, INVALID, nullptr, DriverOption | CoreOption, 0, nullptr, nullptr, nullptr)
@@ -3030,9 +3101,14 @@
 OPTION(prefix_2, "Oi", anonymous_44, Flag, cl_Group, _SLASH_O, "i\0", CLOption | DriverOption | CLOption, 0,
        "Enable use of builtin functions", nullptr, nullptr)
 OPTION(prefix_2, "openmp-", _SLASH_openmp_, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "openmp:experimental", _SLASH_openmp_experimental, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "openmp", _SLASH_openmp, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "opt-record-file", opt_record_file, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "File name to use for YAML optimization record output", nullptr, nullptr)
+OPTION(prefix_1, "opt-record-format", opt_record_format, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "The format used for serializing remarks (default: YAML)", nullptr, nullptr)
+OPTION(prefix_1, "opt-record-passes", opt_record_passes, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Only record remark information for passes whose names match the given regular expression", nullptr, nullptr)
 OPTION(prefix_3, "optimize=", _optimize_EQ, Joined, INVALID, O, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "optimize", _optimize, Flag, INVALID, O, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Os", anonymous_46, Flag, cl_Group, _SLASH_O, "s\0", CLOption | DriverOption | CLOption, 0,
@@ -3095,6 +3171,8 @@
 OPTION(prefix_3, "prefix", _prefix, Separate, INVALID, B, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "preload", preload, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "preprocess", _preprocess, Flag, INVALID, E, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "print-dependency-directives-minimized-source", print_dependency_directives_minimized_source, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Print the output of the dependency directives source minimizer", nullptr, nullptr)
 OPTION(prefix_3, "print-diagnostic-categories", _print_diagnostic_categories, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "print-effective-triple", print_effective_triple, Flag, INVALID, INVALID, nullptr, 0, 0,
        "Print the effective target triple", nullptr, nullptr)
@@ -3120,6 +3198,8 @@
        "Print the paths used for finding libraries and programs", nullptr, nullptr)
 OPTION(prefix_1, "print-stats", print_stats, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Print performance metrics and statistics", nullptr, nullptr)
+OPTION(prefix_4, "print-supported-cpus", print_supported_cpus, Flag, CompileOnly_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
+       "Print supported cpu models for the given target (if target is not specified, it will print the supported cpus for the default target)", nullptr, nullptr)
 OPTION(prefix_4, "print-target-triple", print_target_triple, Flag, INVALID, INVALID, nullptr, 0, 0,
        "Print the normalized target triple", nullptr, nullptr)
 OPTION(prefix_1, "private_bundle", private__bundle, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -3140,7 +3220,10 @@
 OPTION(prefix_2, "Qimprecise_fwaits", _SLASH_Qimprecise_fwaits, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "Qn", Qn, Flag, INVALID, INVALID, nullptr, CC1Option, 0,
        "Do not emit metadata containing compiler name and version", nullptr, nullptr)
+OPTION(prefix_2, "Qpar-report", _SLASH_Qpar_report, Joined, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Qpar", _SLASH_Qpar, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "Qsafe_fp_loads", _SLASH_Qsafe_fp_loads, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "Qspectre", _SLASH_Qspectre, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "Qunused-arguments", Qunused_arguments, Flag, INVALID, INVALID, nullptr, DriverOption | CoreOption, 0,
        "Don't emit warning for unused driver arguments", nullptr, nullptr)
 OPTION(prefix_2, "Qvec-report", _SLASH_Qvec_report, Joined, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
@@ -3242,10 +3325,10 @@
        "Source encoding, supports only UTF-8", nullptr, nullptr)
 OPTION(prefix_4, "specs=", specs_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "specs", specs, Separate, INVALID, INVALID, nullptr, Unsupported, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "split-dwarf-file", split_dwarf_file, Separate, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
+OPTION(prefix_1, "split-dwarf-file", split_dwarf_file, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Name of the split dwarf debug info file to encode in the object file", nullptr, nullptr)
+OPTION(prefix_1, "split-dwarf-output", split_dwarf_output, Separate, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "File name to use for split dwarf debug info output", nullptr, nullptr)
-OPTION(prefix_1, "split-dwarf", split_dwarf, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
-       "Split out the dwarf .dwo sections", nullptr, nullptr)
 OPTION(prefix_1, "split-stacks", split_stacks, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Try to use a split stack if possible.", nullptr, nullptr)
 OPTION(prefix_1, "stack-protector-buffer-size", stack_protector_buffer_size, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -3259,12 +3342,15 @@
 OPTION(prefix_1, "static-libsan", static_libsan, Flag, INVALID, INVALID, nullptr, 0, 0,
        "Statically link the sanitizer runtime", nullptr, nullptr)
 OPTION(prefix_1, "static-libstdc++", static_libstdcxx, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "static-openmp", static_openmp, Flag, INVALID, INVALID, nullptr, 0, 0,
+       "Use the static host OpenMP runtime while linking.", nullptr, nullptr)
+OPTION(prefix_1, "static-pie", static_pie, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "static", static, Flag, INVALID, INVALID, nullptr, NoArgumentUnused, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "stats-file=", stats_file, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Filename to write statistics to", nullptr, nullptr)
 OPTION(prefix_1, "std-default=", std_default_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "std:", _SLASH_std, Joined, cl_compile_Group, INVALID, nullptr, CLOption | DriverOption, 0,
-       "Language standard to compile for", nullptr, nullptr)
+       "Language standard to compile for (c++14,c++17,c++latest)", nullptr, nullptr)
 OPTION(prefix_4, "std=", std_EQ, Joined, CompileOnly_Group, INVALID, nullptr, CC1Option, 0,
        "Language standard to compile for", nullptr, nullptr)
 OPTION(prefix_4, "stdlib=", stdlib_EQ, Joined, INVALID, INVALID, nullptr, CC1Option, 0,
@@ -3343,6 +3429,8 @@
 OPTION(prefix_1, "unoptimized-cfg", analysis_UnoptimizedCFG, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Generate unoptimized CFGs for all analyses", nullptr, nullptr)
 OPTION(prefix_3, "unsigned-char", _unsigned_char, Flag, INVALID, funsigned_char, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_4, "unwindlib=", unwindlib_EQ, Joined, INVALID, INVALID, nullptr, CC1Option, 0,
+       "Unwind library to use", nullptr, "libgcc,unwindlib,platform")
 OPTION(prefix_3, "user-dependencies", _user_dependencies, Flag, INVALID, MM, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "utf-8", _SLASH_utf8, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0,
        "Set source and runtime encoding to UTF-8 (default)", nullptr, nullptr)
@@ -3511,6 +3599,10 @@
 OPTION(prefix_2, "Zc:alignedNew", _SLASH_Zc_alignedNew, Flag, cl_Group, faligned_allocation, nullptr, CLOption | DriverOption | CLOption, 0,
        "Enable C++17 aligned allocation functions", nullptr, nullptr)
 OPTION(prefix_2, "Zc:auto", _SLASH_Zc_auto, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "Zc:char8_t-", _SLASH_Zc_char8_t_, Flag, cl_Group, fno_char8__t, nullptr, CLOption | DriverOption | CLOption, 0,
+       "Disable char8_t from c++2a", nullptr, nullptr)
+OPTION(prefix_2, "Zc:char8_t", _SLASH_Zc_char8_t, Flag, cl_Group, fchar8__t, nullptr, CLOption | DriverOption | CLOption, 0,
+       "Enable char8_t from C++2a", nullptr, nullptr)
 OPTION(prefix_2, "Zc:dllexportInlines-", _SLASH_Zc_dllexportInlines_, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0,
        "Don't dllexport/dllimport inline member functions of dllexport/import classes", nullptr, nullptr)
 OPTION(prefix_2, "Zc:dllexportInlines", _SLASH_Zc_dllexportInlines, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0,
@@ -3576,7 +3668,7 @@
 
     const char *Values =
     #define GET_CHECKERS
-    #define CHECKER(FULLNAME, CLASS, HT, DOC_URI)  FULLNAME ","
+    #define CHECKER(FULLNAME, CLASS, HT, DOC_URI, IS_HIDDEN)  FULLNAME ","
     #include "clang/StaticAnalyzer/Checkers/Checkers.inc"
     #undef GET_CHECKERS
     #define GET_PACKAGES
diff --git a/linux-x64/clang/include/clang/Driver/SanitizerArgs.h b/linux-x64/clang/include/clang/Driver/SanitizerArgs.h
index 18e8e4f..957e752 100644
--- a/linux-x64/clang/include/clang/Driver/SanitizerArgs.h
+++ b/linux-x64/clang/include/clang/Driver/SanitizerArgs.h
@@ -38,6 +38,8 @@
   bool AsanPoisonCustomArrayCookie = false;
   bool AsanGlobalsDeadStripping = false;
   bool AsanUseOdrIndicator = false;
+  bool AsanInvalidPointerCmp = false;
+  bool AsanInvalidPointerSub = false;
   std::string HwasanAbi;
   bool LinkCXXRuntimes = false;
   bool NeedPIE = false;
@@ -73,9 +75,6 @@
   bool needsCfiRt() const;
   bool needsCfiDiagRt() const;
   bool needsStatsRt() const { return Stats; }
-  bool needsEsanRt() const {
-    return Sanitizers.hasOneOf(SanitizerKind::Efficiency);
-  }
   bool needsScudoRt() const { return Sanitizers.has(SanitizerKind::Scudo); }
 
   bool requiresPIE() const;
diff --git a/linux-x64/clang/include/clang/Driver/ToolChain.h b/linux-x64/clang/include/clang/Driver/ToolChain.h
index e82675d..7dd3db3 100644
--- a/linux-x64/clang/include/clang/Driver/ToolChain.h
+++ b/linux-x64/clang/include/clang/Driver/ToolChain.h
@@ -99,11 +99,19 @@
     RLT_Libgcc
   };
 
+  enum UnwindLibType {
+    UNW_None,
+    UNW_CompilerRT,
+    UNW_Libgcc
+  };
+
   enum RTTIMode {
     RM_Enabled,
     RM_Disabled,
   };
 
+  enum FileType { FT_Object, FT_Static, FT_Shared };
+
 private:
   friend class RegisterEffectiveTriple;
 
@@ -367,15 +375,25 @@
     return ToolChain::CST_Libstdcxx;
   }
 
+  virtual UnwindLibType GetDefaultUnwindLibType() const {
+    return ToolChain::UNW_None;
+  }
+
   virtual std::string getCompilerRTPath() const;
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
                                     StringRef Component,
-                                    bool Shared = false) const;
+                                    FileType Type = ToolChain::FT_Static) const;
 
-  const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
-                                     StringRef Component,
-                                     bool Shared = false) const;
+  const char *
+  getCompilerRTArgString(const llvm::opt::ArgList &Args, StringRef Component,
+                         FileType Type = ToolChain::FT_Static) const;
+
+  // Returns target specific runtime path if it exists.
+  virtual Optional<std::string> getRuntimePath() const;
+
+  // Returns target specific C++ library path if it exists.
+  virtual Optional<std::string> getCXXStdlibPath() const;
 
   // Returns <ResourceDir>/lib/<OSName>/<arch>.  This is used by runtimes (such
   // as OpenMP) to find arch-specific libraries.
@@ -400,6 +418,9 @@
   /// Test whether this toolchain defaults to PIE.
   virtual bool isPIEDefault() const = 0;
 
+  /// Test whether this toolchaind defaults to non-executable stacks.
+  virtual bool isNoExecStackDefault() const;
+
   /// Tests whether this toolchain forces its default for PIC, PIE or
   /// non-PIC.  If this returns true, any PIC related flags should be ignored
   /// and instead the results of \c isPICDefault() and \c isPIEDefault() are
@@ -453,9 +474,7 @@
   virtual bool SupportsEmbeddedBitcode() const { return false; }
 
   /// getThreadModel() - Which thread model does this target use?
-  virtual std::string getThreadModel(const llvm::opt::ArgList &) const {
-    return "posix";
-  }
+  virtual std::string getThreadModel() const { return "posix"; }
 
   /// isThreadModelSupported() - Does this target support a thread model?
   virtual bool isThreadModelSupported(const StringRef Model) const;
@@ -513,6 +532,10 @@
   // given compilation arguments.
   virtual CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const;
 
+  // GetUnwindLibType - Determine the unwind library type to use with the
+  // given compilation arguments.
+  virtual UnwindLibType GetUnwindLibType(const llvm::opt::ArgList &Args) const;
+
   /// AddClangCXXStdlibIncludeArgs - Add the clang -cc1 level arguments to set
   /// the include paths to use for the given C++ standard library type.
   virtual void
@@ -565,7 +588,9 @@
   virtual SanitizerMask getSupportedSanitizers() const;
 
   /// Return sanitizers which are enabled by default.
-  virtual SanitizerMask getDefaultSanitizers() const { return 0; }
+  virtual SanitizerMask getDefaultSanitizers() const {
+    return SanitizerMask();
+  }
 };
 
 /// Set a ToolChain's effective triple. Reset it when the registration object
diff --git a/linux-x64/clang/include/clang/Driver/Types.def b/linux-x64/clang/include/clang/Driver/Types.def
index d2aaf58..b45789d 100644
--- a/linux-x64/clang/include/clang/Driver/Types.def
+++ b/linux-x64/clang/include/clang/Driver/Types.def
@@ -88,6 +88,7 @@
 
 // Misc.
 TYPE("ast",                      AST,          INVALID,         "ast",   "u")
+TYPE("ifs",                      IFS,          INVALID,         "ifs",   "u")
 TYPE("pcm",                      ModuleFile,   INVALID,         "pcm",   "u")
 TYPE("plist",                    Plist,        INVALID,         "plist", "")
 TYPE("rewritten-objc",           RewrittenObjC,INVALID,         "cpp",   "")
diff --git a/linux-x64/clang/include/clang/Format/Format.h b/linux-x64/clang/include/clang/Format/Format.h
index 4bc0a5c..6388e4f 100644
--- a/linux-x64/clang/include/clang/Format/Format.h
+++ b/linux-x64/clang/include/clang/Format/Format.h
@@ -79,6 +79,19 @@
   /// brackets.
   BracketAlignmentStyle AlignAfterOpenBracket;
 
+  /// \brief If ``true``, aligns consecutive C/C++ preprocessor macros.
+  ///
+  /// This will align C/C++ preprocessor macros of consecutive lines.
+  /// Will result in formattings like
+  /// \code
+  ///   #define SHORT_NAME       42
+  ///   #define LONGER_NAME      0x007f
+  ///   #define EVEN_LONGER_NAME (2)
+  ///   #define foo(x)           (x * x)
+  ///   #define bar(y, z)        (y + z)
+  /// \endcode
+  bool AlignConsecutiveMacros;
+
   /// If ``true``, aligns consecutive assignments.
   ///
   /// This will align the assignment operators of consecutive lines. This
@@ -154,6 +167,38 @@
   /// \endcode
   bool AlignTrailingComments;
 
+  /// \brief If a function call or braced initializer list doesn't fit on a
+  /// line, allow putting all arguments onto the next line, even if
+  /// ``BinPackArguments`` is ``false``.
+  /// \code
+  ///   true:
+  ///   callFunction(
+  ///       a, b, c, d);
+  ///
+  ///   false:
+  ///   callFunction(a,
+  ///                b,
+  ///                c,
+  ///                d);
+  /// \endcode
+  bool AllowAllArgumentsOnNextLine;
+
+  /// \brief If a constructor definition with a member initializer list doesn't
+  /// fit on a single line, allow putting all member initializers onto the next
+  /// line, if ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is true.
+  /// Note that this parameter has no effect if
+  /// ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is false.
+  /// \code
+  ///   true:
+  ///   MyClass::MyClass() :
+  ///       member0(0), member1(2) {}
+  ///
+  ///   false:
+  ///   MyClass::MyClass() :
+  ///       member0(0),
+  ///       member1(2) {}
+  bool AllowAllConstructorInitializersOnNextLine;
+
   /// If the function declaration doesn't fit on a line,
   /// allow putting all parameters of a function declaration onto
   /// the next line even if ``BinPackParameters`` is ``false``.
@@ -241,8 +286,71 @@
   /// single line.
   ShortFunctionStyle AllowShortFunctionsOnASingleLine;
 
+  /// Different styles for handling short if lines
+  enum ShortIfStyle {
+    /// Never put short ifs on the same line.
+    /// \code
+    ///   if (a)
+    ///     return ;
+    ///   else {
+    ///     return;
+    ///   }
+    /// \endcode
+    SIS_Never,
+    /// Without else put short ifs on the same line only if
+    /// the else is not a compound statement.
+    /// \code
+    ///   if (a) return;
+    ///   else
+    ///     return;
+    /// \endcode
+    SIS_WithoutElse,
+    /// Always put short ifs on the same line if
+    /// the else is not a compound statement or not.
+    /// \code
+    ///   if (a) return;
+    ///   else {
+    ///     return;
+    ///   }
+    /// \endcode
+    SIS_Always,
+  };
+
   /// If ``true``, ``if (a) return;`` can be put on a single line.
-  bool AllowShortIfStatementsOnASingleLine;
+  ShortIfStyle AllowShortIfStatementsOnASingleLine;
+
+  /// Different styles for merging short lambdas containing at most one
+  /// statement.
+  enum ShortLambdaStyle {
+    /// Never merge lambdas into a single line.
+    SLS_None,
+    /// Only merge empty lambdas.
+    /// \code
+    ///   auto lambda = [](int a) {}
+    ///   auto lambda2 = [](int a) {
+    ///       return a;
+    ///   };
+    /// \endcode
+    SLS_Empty,
+    /// Merge lambda into a single line if argument of a function.
+    /// \code
+    ///   auto lambda = [](int a) {
+    ///       return a;
+    ///   };
+    ///   sort(a.begin(), a.end(), ()[] { return x < y; })
+    /// \endcode
+    SLS_Inline,
+    /// Merge all lambdas fitting on a single line.
+    /// \code
+    ///   auto lambda = [](int a) {}
+    ///   auto lambda2 = [](int a) { return a; };
+    /// \endcode
+    SLS_All,
+  };
+
+  /// Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
+  /// single line.
+  ShortLambdaStyle AllowShortLambdasOnASingleLine;
 
   /// If ``true``, ``while (true) continue;`` can be put on a single
   /// line.
@@ -547,19 +655,28 @@
     BS_Stroustrup,
     /// Always break before braces.
     /// \code
-    ///   try {
+    ///   try
+    ///   {
     ///     foo();
     ///   }
-    ///   catch () {
+    ///   catch ()
+    ///   {
     ///   }
     ///   void foo() { bar(); }
-    ///   class foo {
+    ///   class foo
+    ///   {
     ///   };
-    ///   if (foo()) {
+    ///   if (foo())
+    ///   {
     ///   }
-    ///   else {
+    ///   else
+    ///   {
     ///   }
-    ///   enum X : int { A, B };
+    ///   enum X : int
+    ///   {
+    ///     A,
+    ///     B
+    ///   };
     /// \endcode
     BS_Allman,
     /// Always break before braces and add an extra level of indentation to
@@ -620,6 +737,22 @@
   ///       AfterClass: true
   /// \endcode
   struct BraceWrappingFlags {
+    /// Wrap case labels.
+    /// \code
+    ///   false:                                true:
+    ///   switch (foo) {                vs.     switch (foo) {
+    ///     case 1: {                             case 1:
+    ///       bar();                              {
+    ///       break;                                bar();
+    ///     }                                       break;
+    ///     default: {                            }
+    ///       plop();                             default:
+    ///     }                                     {
+    ///   }                                         plop();
+    ///                                           }
+    ///                                         }
+    /// \endcode
+    bool AfterCaseLabel;
     /// Wrap class definitions.
     /// \code
     ///   true:
@@ -1028,7 +1161,7 @@
   ///    true:                                  false:
   ///    namespace a {                  vs.     namespace a {
   ///    foo();                                 foo();
-  ///    } // namespace a;                      }
+  ///    } // namespace a                       }
   /// \endcode
   bool FixNamespaceComments;
 
@@ -1049,6 +1182,22 @@
   /// For example: BOOST_FOREACH.
   std::vector<std::string> ForEachMacros;
 
+  /// \brief A vector of macros that should be interpreted as type declarations
+  /// instead of as function calls.
+  ///
+  /// These are expected to be macros of the form:
+  /// \code
+  ///   STACK_OF(...)
+  /// \endcode
+  ///
+  /// In the .clang-format configuration file, this can be configured like:
+  /// \code{.yaml}
+  ///   TypenameMacros: ['STACK_OF', 'LIST']
+  /// \endcode
+  ///
+  /// For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
+  std::vector<std::string> TypenameMacros;
+
   /// A vector of macros that should be interpreted as complete
   /// statements.
   ///
@@ -1059,6 +1208,18 @@
   /// For example: Q_UNUSED
   std::vector<std::string> StatementMacros;
 
+  /// A vector of macros which are used to open namespace blocks.
+  ///
+  /// These are expected to be macros of the form:
+  /// \code
+  ///   NAMESPACE(<namespace-name>, ...) {
+  ///     <namespace-content>
+  ///   }
+  /// \endcode
+  ///
+  /// For example: TESTSUITE
+  std::vector<std::string> NamespaceMacros;
+
   tooling::IncludeStyle IncludeStyle;
 
   /// Indent case labels one level from the switch statement.
@@ -1096,7 +1257,16 @@
     ///    #  endif
     ///    #endif
     /// \endcode
-    PPDIS_AfterHash
+    PPDIS_AfterHash,
+    /// Indents directives before the hash.
+    /// \code
+    ///    #if FOO
+    ///      #if BAR
+    ///        #include <foo>
+    ///      #endif
+    ///    #endif
+    /// \endcode
+    PPDIS_BeforeHash
   };
 
   /// The preprocessor directive indenting style to use.
@@ -1130,7 +1300,7 @@
 
   /// A vector of prefixes ordered by the desired groups for Java imports.
   ///
-  /// Each group is seperated by a newline. Static imports will also follow the
+  /// Each group is separated by a newline. Static imports will also follow the
   /// same grouping convention above all non-static imports. One group's prefix
   /// can be a subset of another - the longest prefix is always matched. Within
   /// a group, the imports are ordered lexicographically.
@@ -1219,6 +1389,8 @@
     LK_None,
     /// Should be used for C, C++.
     LK_Cpp,
+    /// Should be used for C#.
+    LK_CSharp,
     /// Should be used for Java.
     LK_Java,
     /// Should be used for JavaScript.
@@ -1235,6 +1407,7 @@
     LK_TextProto
   };
   bool isCpp() const { return Language == LK_Cpp || Language == LK_ObjC; }
+  bool isCSharp() const { return Language == LK_CSharp; }
 
   /// Language, this format style is targeted at.
   LanguageKind Language;
@@ -1521,6 +1694,13 @@
   /// \endcode
   bool SpaceAfterCStyleCast;
 
+  /// If ``true``, a space is inserted after the logical not operator (``!``).
+  /// \code
+  ///    true:                                  false:
+  ///    ! someExpression();            vs.     !someExpression();
+  /// \endcode
+  bool SpaceAfterLogicalNot;
+
   /// If \c true, a space will be inserted after the 'template' keyword.
   /// \code
   ///    true:                                  false:
@@ -1583,6 +1763,17 @@
     ///    }
     /// \endcode
     SBPO_ControlStatements,
+    /// Put a space before opening parentheses only if the parentheses are not
+    /// empty i.e. '()'
+    /// \code
+    ///   void() {
+    ///     if (true) {
+    ///       f();
+    ///       g (x, y, z);
+    ///     }
+    ///   }
+    /// \endcode
+    SBPO_NonEmptyParentheses,
     /// Always put a space before opening parentheses, except when it's
     /// prohibited by the syntax rules (in function-like macro definitions) or
     /// when determined by other style rules (after unary operators, opening
@@ -1719,6 +1910,9 @@
            AlignEscapedNewlines == R.AlignEscapedNewlines &&
            AlignOperands == R.AlignOperands &&
            AlignTrailingComments == R.AlignTrailingComments &&
+           AllowAllArgumentsOnNextLine == R.AllowAllArgumentsOnNextLine &&
+           AllowAllConstructorInitializersOnNextLine ==
+               R.AllowAllConstructorInitializersOnNextLine &&
            AllowAllParametersOfDeclarationOnNextLine ==
                R.AllowAllParametersOfDeclarationOnNextLine &&
            AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
@@ -1728,6 +1922,7 @@
                R.AllowShortFunctionsOnASingleLine &&
            AllowShortIfStatementsOnASingleLine ==
                R.AllowShortIfStatementsOnASingleLine &&
+           AllowShortLambdasOnASingleLine == R.AllowShortLambdasOnASingleLine &&
            AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
            AlwaysBreakAfterReturnType == R.AlwaysBreakAfterReturnType &&
            AlwaysBreakBeforeMultilineStrings ==
@@ -1772,6 +1967,7 @@
            MacroBlockEnd == R.MacroBlockEnd &&
            MaxEmptyLinesToKeep == R.MaxEmptyLinesToKeep &&
            NamespaceIndentation == R.NamespaceIndentation &&
+           NamespaceMacros == R.NamespaceMacros &&
            ObjCBinPackProtocolList == R.ObjCBinPackProtocolList &&
            ObjCBlockIndentWidth == R.ObjCBlockIndentWidth &&
            ObjCSpaceAfterProperty == R.ObjCSpaceAfterProperty &&
@@ -1789,6 +1985,7 @@
            PointerAlignment == R.PointerAlignment &&
            RawStringFormats == R.RawStringFormats &&
            SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
+           SpaceAfterLogicalNot == R.SpaceAfterLogicalNot &&
            SpaceAfterTemplateKeyword == R.SpaceAfterTemplateKeyword &&
            SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
            SpaceBeforeCpp11BracedList == R.SpaceBeforeCpp11BracedList &&
@@ -1806,7 +2003,8 @@
            SpacesInParentheses == R.SpacesInParentheses &&
            SpacesInSquareBrackets == R.SpacesInSquareBrackets &&
            Standard == R.Standard && TabWidth == R.TabWidth &&
-           StatementMacros == R.StatementMacros && UseTab == R.UseTab;
+           StatementMacros == R.StatementMacros && UseTab == R.UseTab &&
+           TypenameMacros == R.TypenameMacros;
   }
 
   llvm::Optional<FormatStyle> GetLanguageStyle(LanguageKind Language) const;
@@ -1849,7 +2047,8 @@
 
 /// Returns a format style complying with the LLVM coding standards:
 /// http://llvm.org/docs/CodingStandards.html.
-FormatStyle getLLVMStyle();
+FormatStyle getLLVMStyle(
+    FormatStyle::LanguageKind Language = FormatStyle::LanguageKind::LK_Cpp);
 
 /// Returns a format style complying with one of Google's style guides:
 /// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.
@@ -2050,6 +2249,8 @@
   switch (Language) {
   case FormatStyle::LK_Cpp:
     return "C++";
+  case FormatStyle::LK_CSharp:
+    return "CSharp";
   case FormatStyle::LK_ObjC:
     return "Objective-C";
   case FormatStyle::LK_Java:
@@ -2058,6 +2259,8 @@
     return "JavaScript";
   case FormatStyle::LK_Proto:
     return "Proto";
+  case FormatStyle::LK_TableGen:
+    return "TableGen";
   case FormatStyle::LK_TextProto:
     return "TextProto";
   default:
diff --git a/linux-x64/clang/include/clang/Frontend/ASTConsumers.h b/linux-x64/clang/include/clang/Frontend/ASTConsumers.h
index 34958ee..af8c4a5 100644
--- a/linux-x64/clang/include/clang/Frontend/ASTConsumers.h
+++ b/linux-x64/clang/include/clang/Frontend/ASTConsumers.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_CLANG_FRONTEND_ASTCONSUMERS_H
 #define LLVM_CLANG_FRONTEND_ASTCONSUMERS_H
 
+#include "clang/AST/ASTDumperUtils.h"
 #include "clang/Basic/LLVM.h"
 #include <memory>
 
@@ -35,10 +36,10 @@
 
 // AST dumper: dumps the raw AST in human-readable form to the given output
 // stream, or stdout if OS is nullptr.
-std::unique_ptr<ASTConsumer> CreateASTDumper(std::unique_ptr<raw_ostream> OS,
-                                             StringRef FilterString,
-                                             bool DumpDecls, bool Deserialize,
-                                             bool DumpLookups);
+std::unique_ptr<ASTConsumer>
+CreateASTDumper(std::unique_ptr<raw_ostream> OS, StringRef FilterString,
+                bool DumpDecls, bool Deserialize, bool DumpLookups,
+                ASTDumpOutputFormat Format);
 
 // AST Decl node lister: prints qualified names of all filterable AST Decl
 // nodes.
diff --git a/linux-x64/clang/include/clang/Frontend/ASTUnit.h b/linux-x64/clang/include/clang/Frontend/ASTUnit.h
index cef638e..7fb1d2d 100644
--- a/linux-x64/clang/include/clang/Frontend/ASTUnit.h
+++ b/linux-x64/clang/include/clang/Frontend/ASTUnit.h
@@ -71,7 +71,7 @@
 class FrontendAction;
 class HeaderSearch;
 class InputKind;
-class MemoryBufferCache;
+class InMemoryModuleCache;
 class PCHContainerOperations;
 class PCHContainerReader;
 class Preprocessor;
@@ -82,6 +82,9 @@
 /// \brief Enumerates the available scopes for skipping function bodies.
 enum class SkipFunctionBodiesScope { None, Preamble, PreambleAndMainFile };
 
+/// \brief Enumerates the available kinds for capturing diagnostics.
+enum class CaptureDiagsKind { None, All, AllWithoutNonErrorsFromIncludes };
+
 /// Utility class for loading a ASTContext from an AST file.
 class ASTUnit {
 public:
@@ -107,7 +110,7 @@
   IntrusiveRefCntPtr<DiagnosticsEngine>   Diagnostics;
   IntrusiveRefCntPtr<FileManager>         FileMgr;
   IntrusiveRefCntPtr<SourceManager>       SourceMgr;
-  IntrusiveRefCntPtr<MemoryBufferCache>   PCMCache;
+  IntrusiveRefCntPtr<InMemoryModuleCache> ModuleCache;
   std::unique_ptr<HeaderSearch>           HeaderInfo;
   IntrusiveRefCntPtr<TargetInfo>          Target;
   std::shared_ptr<Preprocessor>           PP;
@@ -144,7 +147,7 @@
   bool OnlyLocalDecls = false;
 
   /// Whether to capture any diagnostics produced.
-  bool CaptureDiagnostics = false;
+  CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None;
 
   /// Track whether the main file was loaded from an AST or not.
   bool MainFileIsAST;
@@ -205,7 +208,10 @@
   /// we'll attempt to rebuild the precompiled header. This way, if
   /// building the precompiled preamble fails, we won't try again for
   /// some number of calls.
-  unsigned PreambleRebuildCounter = 0;
+  unsigned PreambleRebuildCountdown = 0;
+
+  /// Counter indicating how often the preamble was build in total.
+  unsigned PreambleCounter = 0;
 
   /// Cache pairs "filename - source location"
   ///
@@ -247,7 +253,7 @@
   bool UserFilesAreVolatile : 1;
 
   static void ConfigureDiags(IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
-                             ASTUnit &AST, bool CaptureDiagnostics);
+                             ASTUnit &AST, CaptureDiagsKind CaptureDiagnostics);
 
   void TranslateStoredDiagnostics(FileManager &FileMgr,
                                   SourceManager &SrcMan,
@@ -574,6 +580,8 @@
                        mapLocationToPreamble(R.getEnd()));
   }
 
+  unsigned getPreambleCounterForTests() const { return PreambleCounter; }
+
   // Retrieve the diagnostics associated with this AST
   using stored_diag_iterator = StoredDiagnostic *;
   using stored_diag_const_iterator = const StoredDiagnostic *;
@@ -656,8 +664,8 @@
   /// Create a ASTUnit. Gets ownership of the passed CompilerInvocation.
   static std::unique_ptr<ASTUnit>
   create(std::shared_ptr<CompilerInvocation> CI,
-         IntrusiveRefCntPtr<DiagnosticsEngine> Diags, bool CaptureDiagnostics,
-         bool UserFilesAreVolatile);
+         IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
+         CaptureDiagsKind CaptureDiagnostics, bool UserFilesAreVolatile);
 
   enum WhatToLoad {
     /// Load options and the preprocessor state.
@@ -685,7 +693,8 @@
       WhatToLoad ToLoad, IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
       const FileSystemOptions &FileSystemOpts, bool UseDebugInfo = false,
       bool OnlyLocalDecls = false, ArrayRef<RemappedFile> RemappedFiles = None,
-      bool CaptureDiagnostics = false, bool AllowPCHWithCompilerErrors = false,
+      CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
+      bool AllowPCHWithCompilerErrors = false,
       bool UserFilesAreVolatile = false);
 
 private:
@@ -743,7 +752,8 @@
       IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
       FrontendAction *Action = nullptr, ASTUnit *Unit = nullptr,
       bool Persistent = true, StringRef ResourceFilesPath = StringRef(),
-      bool OnlyLocalDecls = false, bool CaptureDiagnostics = false,
+      bool OnlyLocalDecls = false,
+      CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
       unsigned PrecompilePreambleAfterNParses = 0,
       bool CacheCodeCompletionResults = false,
       bool IncludeBriefCommentsInCodeCompletion = false,
@@ -768,7 +778,8 @@
       std::shared_ptr<CompilerInvocation> CI,
       std::shared_ptr<PCHContainerOperations> PCHContainerOps,
       IntrusiveRefCntPtr<DiagnosticsEngine> Diags, FileManager *FileMgr,
-      bool OnlyLocalDecls = false, bool CaptureDiagnostics = false,
+      bool OnlyLocalDecls = false,
+      CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
       unsigned PrecompilePreambleAfterNParses = 0,
       TranslationUnitKind TUKind = TU_Complete,
       bool CacheCodeCompletionResults = false,
@@ -808,7 +819,8 @@
       const char **ArgBegin, const char **ArgEnd,
       std::shared_ptr<PCHContainerOperations> PCHContainerOps,
       IntrusiveRefCntPtr<DiagnosticsEngine> Diags, StringRef ResourceFilesPath,
-      bool OnlyLocalDecls = false, bool CaptureDiagnostics = false,
+      bool OnlyLocalDecls = false,
+      CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
       ArrayRef<RemappedFile> RemappedFiles = None,
       bool RemappedFilesKeepOriginalName = true,
       unsigned PrecompilePreambleAfterNParses = 0,
diff --git a/linux-x64/clang/include/clang/Frontend/CompilerInstance.h b/linux-x64/clang/include/clang/Frontend/CompilerInstance.h
index 002cc61..eb49c53 100644
--- a/linux-x64/clang/include/clang/Frontend/CompilerInstance.h
+++ b/linux-x64/clang/include/clang/Frontend/CompilerInstance.h
@@ -44,7 +44,7 @@
 class FileEntry;
 class FileManager;
 class FrontendAction;
-class MemoryBufferCache;
+class InMemoryModuleCache;
 class Module;
 class Preprocessor;
 class Sema;
@@ -82,9 +82,6 @@
   /// Auxiliary Target info.
   IntrusiveRefCntPtr<TargetInfo> AuxTarget;
 
-  /// The virtual file system.
-  IntrusiveRefCntPtr<llvm::vfs::FileSystem> VirtualFileSystem;
-
   /// The file manager.
   IntrusiveRefCntPtr<FileManager> FileMgr;
 
@@ -92,7 +89,7 @@
   IntrusiveRefCntPtr<SourceManager> SourceMgr;
 
   /// The cache of PCM files.
-  IntrusiveRefCntPtr<MemoryBufferCache> PCMCache;
+  IntrusiveRefCntPtr<InMemoryModuleCache> ModuleCache;
 
   /// The preprocessor.
   std::shared_ptr<Preprocessor> PP;
@@ -127,9 +124,6 @@
   /// The module provider.
   std::shared_ptr<PCHContainerOperations> ThePCHContainerOperations;
 
-  /// The dependency file generator.
-  std::unique_ptr<DependencyFileGenerator> TheDependencyFileGenerator;
-
   std::vector<std::shared_ptr<DependencyCollector>> DependencyCollectors;
 
   /// The set of top-level modules that has already been loaded,
@@ -192,7 +186,7 @@
   explicit CompilerInstance(
       std::shared_ptr<PCHContainerOperations> PCHContainerOps =
           std::make_shared<PCHContainerOperations>(),
-      MemoryBufferCache *SharedPCMCache = nullptr);
+      InMemoryModuleCache *SharedModuleCache = nullptr);
   ~CompilerInstance() override;
 
   /// @name High-Level Operations
@@ -382,20 +376,8 @@
   /// @name Virtual File System
   /// {
 
-  bool hasVirtualFileSystem() const { return VirtualFileSystem != nullptr; }
-
   llvm::vfs::FileSystem &getVirtualFileSystem() const {
-    assert(hasVirtualFileSystem() &&
-           "Compiler instance has no virtual file system");
-    return *VirtualFileSystem;
-  }
-
-  /// Replace the current virtual file system.
-  ///
-  /// \note Most clients should use setFileManager, which will implicitly reset
-  /// the virtual file system to the one contained in the file manager.
-  void setVirtualFileSystem(IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS) {
-    VirtualFileSystem = std::move(FS);
+    return getFileManager().getVirtualFileSystem();
   }
 
   /// }
@@ -645,7 +627,8 @@
   /// Create the file manager and replace any existing one with it.
   ///
   /// \return The new file manager on success, or null on failure.
-  FileManager *createFileManager();
+  FileManager *
+  createFileManager(IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS = nullptr);
 
   /// Create the source manager and replace any existing one with it.
   void createSourceManager(FileManager &FileMgr);
@@ -671,10 +654,10 @@
   /// \return - The new object on success, or null on failure.
   static IntrusiveRefCntPtr<ASTReader> createPCHExternalASTSource(
       StringRef Path, StringRef Sysroot, bool DisablePCHValidation,
-      bool AllowPCHWithCompilerErrors, Preprocessor &PP, ASTContext &Context,
+      bool AllowPCHWithCompilerErrors, Preprocessor &PP,
+      InMemoryModuleCache &ModuleCache, ASTContext &Context,
       const PCHContainerReader &PCHContainerRdr,
       ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
-      DependencyFileGenerator *DependencyFile,
       ArrayRef<std::shared_ptr<DependencyCollector>> DependencyCollectors,
       void *DeserializationListener, bool OwnDeserializationListener,
       bool Preamble, bool UseGlobalModuleIndex);
@@ -813,7 +796,7 @@
 
   void setExternalSemaSource(IntrusiveRefCntPtr<ExternalSemaSource> ESS);
 
-  MemoryBufferCache &getPCMCache() const { return *PCMCache; }
+  InMemoryModuleCache &getModuleCache() const { return *ModuleCache; }
 };
 
 } // end namespace clang
diff --git a/linux-x64/clang/include/clang/Frontend/FrontendAction.h b/linux-x64/clang/include/clang/Frontend/FrontendAction.h
index 3a107d5..e994e24 100644
--- a/linux-x64/clang/include/clang/Frontend/FrontendAction.h
+++ b/linux-x64/clang/include/clang/Frontend/FrontendAction.h
@@ -23,6 +23,7 @@
 #include "clang/Frontend/ASTUnit.h"
 #include "clang/Frontend/FrontendOptions.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
 #include <memory>
 #include <string>
 #include <vector>
@@ -229,7 +230,7 @@
   bool BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &Input);
 
   /// Set the source manager's main input file, and run the action.
-  bool Execute();
+  llvm::Error Execute();
 
   /// Perform any per-file post processing, deallocate per-file
   /// objects, and run statistics and output file cleanup code.
diff --git a/linux-x64/clang/include/clang/Frontend/FrontendActions.h b/linux-x64/clang/include/clang/Frontend/FrontendActions.h
index 3acd1e7..6c7bc60 100644
--- a/linux-x64/clang/include/clang/Frontend/FrontendActions.h
+++ b/linux-x64/clang/include/clang/Frontend/FrontendActions.h
@@ -74,12 +74,6 @@
                                                  StringRef InFile) override;
 };
 
-class DeclContextPrintAction : public ASTFrontendAction {
-protected:
-  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
-                                                 StringRef InFile) override;
-};
-
 class GeneratePCHAction : public ASTFrontendAction {
 protected:
   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
@@ -125,6 +119,26 @@
   bool hasASTFileSupport() const override { return false; }
 };
 
+class GenerateInterfaceStubAction : public ASTFrontendAction {
+protected:
+  TranslationUnitKind getTranslationUnitKind() override { return TU_Module; }
+
+  bool hasASTFileSupport() const override { return false; }
+};
+
+// Support different interface stub formats this way:
+class GenerateInterfaceYAMLExpV1Action : public GenerateInterfaceStubAction {
+protected:
+  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
+                                                 StringRef InFile) override;
+};
+
+class GenerateInterfaceTBEExpV1Action : public GenerateInterfaceStubAction {
+protected:
+  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
+                                                 StringRef InFile) override;
+};
+
 class GenerateModuleFromModuleMapAction : public GenerateModuleAction {
 private:
   bool BeginSourceFileAction(CompilerInstance &CI) override;
@@ -246,6 +260,17 @@
   bool usesPreprocessorOnly() const override { return true; }
 };
 
+class PrintDependencyDirectivesSourceMinimizerAction : public FrontendAction {
+protected:
+  void ExecuteAction() override;
+  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &,
+                                                 StringRef) override {
+    return nullptr;
+  }
+
+  bool usesPreprocessorOnly() const override { return true; }
+};
+
 //===----------------------------------------------------------------------===//
 // Preprocessor Actions
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/clang/Frontend/FrontendOptions.h b/linux-x64/clang/include/clang/Frontend/FrontendOptions.h
index 4c4ed96..a0acb1f 100644
--- a/linux-x64/clang/include/clang/Frontend/FrontendOptions.h
+++ b/linux-x64/clang/include/clang/Frontend/FrontendOptions.h
@@ -9,6 +9,7 @@
 #ifndef LLVM_CLANG_FRONTEND_FRONTENDOPTIONS_H
 #define LLVM_CLANG_FRONTEND_FRONTENDOPTIONS_H
 
+#include "clang/AST/ASTDumperUtils.h"
 #include "clang/Frontend/CommandLineSourceLoc.h"
 #include "clang/Serialization/ModuleFileExtension.h"
 #include "clang/Sema/CodeCompleteOptions.h"
@@ -87,6 +88,10 @@
   /// Generate pre-compiled header.
   GeneratePCH,
 
+  /// Generate Interface Stub Files.
+  GenerateInterfaceYAMLExpV1,
+  GenerateInterfaceTBEExpV1,
+
   /// Only execute frontend initialization.
   InitOnly,
 
@@ -127,7 +132,10 @@
   MigrateSource,
 
   /// Just lex, no output.
-  RunPreprocessorOnly
+  RunPreprocessorOnly,
+
+  /// Print the output of the dependency directives source minimizer.
+  PrintDependencyDirectivesSourceMinimizerOutput
 };
 
 } // namespace frontend
@@ -202,7 +210,7 @@
   /// The input, if it comes from a buffer rather than a file. This object
   /// does not own the buffer, and the caller is responsible for ensuring
   /// that it outlives any users.
-  llvm::MemoryBuffer *Buffer = nullptr;
+  const llvm::MemoryBuffer *Buffer = nullptr;
 
   /// The kind of input, e.g., C source, AST file, LLVM IR.
   InputKind Kind;
@@ -214,7 +222,7 @@
   FrontendInputFile() = default;
   FrontendInputFile(StringRef File, InputKind Kind, bool IsSystem = false)
       : File(File.str()), Kind(Kind), IsSystem(IsSystem) {}
-  FrontendInputFile(llvm::MemoryBuffer *Buffer, InputKind Kind,
+  FrontendInputFile(const llvm::MemoryBuffer *Buffer, InputKind Kind,
                     bool IsSystem = false)
       : Buffer(Buffer), Kind(Kind), IsSystem(IsSystem) {}
 
@@ -231,7 +239,7 @@
     return File;
   }
 
-  llvm::MemoryBuffer *getBuffer() const {
+  const llvm::MemoryBuffer *getBuffer() const {
     assert(isBuffer());
     return Buffer;
   }
@@ -256,6 +264,12 @@
   /// Show timers for individual actions.
   unsigned ShowTimers : 1;
 
+  /// print the supported cpus for the current target
+  unsigned PrintSupportedCPUs : 1;
+
+  /// Output time trace profile.
+  unsigned TimeTrace : 1;
+
   /// Show the -version text.
   unsigned ShowVersion : 1;
 
@@ -304,6 +318,9 @@
 
   CodeCompleteOptions CodeCompleteOpts;
 
+  /// Specifies the output format of the AST.
+  ASTDumpOutputFormat ASTDumpFormat = ADOF_Default;
+
   enum {
     ARCMT_None,
     ARCMT_Check,
@@ -437,13 +454,14 @@
 public:
   FrontendOptions()
       : DisableFree(false), RelocatablePCH(false), ShowHelp(false),
-        ShowStats(false), ShowTimers(false), ShowVersion(false),
-        FixWhatYouCan(false), FixOnlyWarnings(false), FixAndRecompile(false),
-        FixToTemporaries(false), ARCMTMigrateEmitARCErrors(false),
-        SkipFunctionBodies(false), UseGlobalModuleIndex(true),
-        GenerateGlobalModuleIndex(true), ASTDumpDecls(false),
-        ASTDumpLookups(false), BuildingImplicitModule(false),
-        ModulesEmbedAllFiles(false), IncludeTimestamps(true) {}
+        ShowStats(false), ShowTimers(false), TimeTrace(false),
+        ShowVersion(false), FixWhatYouCan(false), FixOnlyWarnings(false),
+        FixAndRecompile(false), FixToTemporaries(false),
+        ARCMTMigrateEmitARCErrors(false), SkipFunctionBodies(false),
+        UseGlobalModuleIndex(true), GenerateGlobalModuleIndex(true),
+        ASTDumpDecls(false), ASTDumpLookups(false),
+        BuildingImplicitModule(false), ModulesEmbedAllFiles(false),
+        IncludeTimestamps(true) {}
 
   /// getInputKindForExtension - Return the appropriate input kind for a file
   /// extension. For example, "c" would return InputKind::C.
diff --git a/linux-x64/clang/include/clang/Frontend/LangStandard.h b/linux-x64/clang/include/clang/Frontend/LangStandard.h
index 406ca56..244f14c 100644
--- a/linux-x64/clang/include/clang/Frontend/LangStandard.h
+++ b/linux-x64/clang/include/clang/Frontend/LangStandard.h
@@ -22,16 +22,17 @@
   C99 = (1 << 1),
   C11 = (1 << 2),
   C17 = (1 << 3),
-  CPlusPlus = (1 << 4),
-  CPlusPlus11 = (1 << 5),
-  CPlusPlus14 = (1 << 6),
-  CPlusPlus17 = (1 << 7),
-  CPlusPlus2a = (1 << 8),
-  Digraphs = (1 << 9),
-  GNUMode = (1 << 10),
-  HexFloat = (1 << 11),
-  ImplicitInt = (1 << 12),
-  OpenCL = (1 << 13)
+  C2x = (1 << 4),
+  CPlusPlus = (1 << 5),
+  CPlusPlus11 = (1 << 6),
+  CPlusPlus14 = (1 << 7),
+  CPlusPlus17 = (1 << 8),
+  CPlusPlus2a = (1 << 9),
+  Digraphs = (1 << 10),
+  GNUMode = (1 << 11),
+  HexFloat = (1 << 12),
+  ImplicitInt = (1 << 13),
+  OpenCL = (1 << 14)
 };
 
 }
@@ -73,6 +74,9 @@
   /// isC17 - Language is a superset of C17.
   bool isC17() const { return Flags & frontend::C17; }
 
+  /// isC2x - Language is a superset of C2x.
+  bool isC2x() const { return Flags & frontend::C2x; }
+
   /// isCPlusPlus - Language is a C++ variant.
   bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; }
 
diff --git a/linux-x64/clang/include/clang/Frontend/LangStandards.def b/linux-x64/clang/include/clang/Frontend/LangStandards.def
index 196cb43..44a080d 100644
--- a/linux-x64/clang/include/clang/Frontend/LangStandards.def
+++ b/linux-x64/clang/include/clang/Frontend/LangStandards.def
@@ -88,6 +88,14 @@
              LineComment | C99 | C11 | C17 | Digraphs | GNUMode | HexFloat)
 LANGSTANDARD_ALIAS(gnu17, "gnu18")
 
+// C2x modes
+LANGSTANDARD(c2x, "c2x",
+             C, "Working Draft for ISO C2x",
+             LineComment | C99 | C11 | C17 | C2x | Digraphs | HexFloat)
+LANGSTANDARD(gnu2x, "gnu2x",
+             C, "Working Draft for ISO C2x with GNU extensions",
+             LineComment | C99 | C11 | C17 | C2x | Digraphs | GNUMode | HexFloat)
+
 // C++ modes
 LANGSTANDARD(cxx98, "c++98",
              CXX, "ISO C++ 1998 with amendments",
@@ -159,7 +167,8 @@
              LineComment | C99 | Digraphs | HexFloat | OpenCL)
 LANGSTANDARD(openclcpp, "c++",
              OpenCL, "OpenCL C++ 1.0",
-             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs | OpenCL)
+             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
+             Digraphs | HexFloat | OpenCL)
 
 LANGSTANDARD_ALIAS_DEPR(opencl10, "CL")
 LANGSTANDARD_ALIAS_DEPR(opencl11, "CL1.1")
diff --git a/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h b/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h
index b1d55d8..1a8a649 100644
--- a/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h
+++ b/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h
@@ -291,7 +291,8 @@
   CouldntCreateTempFile = 1,
   CouldntCreateTargetInfo,
   BeginSourceFileFailed,
-  CouldntEmitPCH
+  CouldntEmitPCH,
+  BadInputs
 };
 
 class BuildPreambleErrorCategory final : public std::error_category {
diff --git a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h
index 5c1ff7a..58954dc 100644
--- a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h
+++ b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h
@@ -11,7 +11,7 @@
 
 #include "clang/Basic/LLVM.h"
 #include "clang/Frontend/SerializedDiagnostics.h"
-#include "llvm/Bitcode/BitstreamWriter.h"
+#include "llvm/Bitstream/BitstreamWriter.h"
 
 namespace llvm {
 class raw_ostream;
diff --git a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h
index 7b3a6db..309e0ab 100644
--- a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h
+++ b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h
@@ -10,7 +10,7 @@
 #define LLVM_CLANG_FRONTEND_SERIALIZEDDIAGNOSTICREADER_H
 
 #include "clang/Basic/LLVM.h"
-#include "llvm/Bitcode/BitstreamReader.h"
+#include "llvm/Bitstream/BitstreamReader.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/ErrorOr.h"
 #include <system_error>
diff --git a/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h b/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h
index 6ffcf52..4e67fd1 100644
--- a/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h
+++ b/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h
@@ -9,7 +9,7 @@
 #ifndef LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTICS_H_
 #define LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTICS_H_
 
-#include "llvm/Bitcode/BitCodes.h"
+#include "llvm/Bitstream/BitCodes.h"
 
 namespace clang {
 namespace serialized_diags {
diff --git a/linux-x64/clang/include/clang/Frontend/Utils.h b/linux-x64/clang/include/clang/Frontend/Utils.h
index 124d4a9..74e5632 100644
--- a/linux-x64/clang/include/clang/Frontend/Utils.h
+++ b/linux-x64/clang/include/clang/Frontend/Utils.h
@@ -15,6 +15,7 @@
 
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/LLVM.h"
+#include "clang/Frontend/DependencyOutputOptions.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/StringMap.h"
@@ -46,7 +47,6 @@
 class ASTReader;
 class CompilerInstance;
 class CompilerInvocation;
-class DependencyOutputOptions;
 class DiagnosticsEngine;
 class ExternalSemaSource;
 class FrontendOptions;
@@ -77,8 +77,7 @@
 /// An interface for collecting the dependencies of a compilation. Users should
 /// use \c attachToPreprocessor and \c attachToASTReader to get all of the
 /// dependencies.
-/// FIXME: Migrate DependencyFileGen and DependencyGraphGen to use this
-/// interface.
+/// FIXME: Migrate DependencyGraphGen to use this interface.
 class DependencyCollector {
 public:
   virtual ~DependencyCollector();
@@ -95,7 +94,7 @@
                              bool IsSystem, bool IsModuleFile, bool IsMissing);
 
   /// Called when the end of the main file is reached.
-  virtual void finishedMainFile() {}
+  virtual void finishedMainFile(DiagnosticsEngine &Diags) {}
 
   /// Return true if system files should be passed to sawDependency().
   virtual bool needSystemDependencies() { return false; }
@@ -106,25 +105,48 @@
   void maybeAddDependency(StringRef Filename, bool FromModule, bool IsSystem,
                           bool IsModuleFile, bool IsMissing);
 
+protected:
+  /// Return true if the filename was added to the list of dependencies, false
+  /// otherwise.
+  bool addDependency(StringRef Filename);
+
 private:
   llvm::StringSet<> Seen;
   std::vector<std::string> Dependencies;
 };
 
-/// Builds a depdenency file when attached to a Preprocessor (for includes) and
+/// Builds a dependency file when attached to a Preprocessor (for includes) and
 /// ASTReader (for module imports), and writes it out at the end of processing
 /// a source file.  Users should attach to the ast reader whenever a module is
 /// loaded.
-class DependencyFileGenerator {
-  void *Impl; // Opaque implementation
-
-  DependencyFileGenerator(void *Impl);
-
+class DependencyFileGenerator : public DependencyCollector {
 public:
-  static DependencyFileGenerator *CreateAndAttachToPreprocessor(
-    Preprocessor &PP, const DependencyOutputOptions &Opts);
+  DependencyFileGenerator(const DependencyOutputOptions &Opts);
 
-  void AttachToASTReader(ASTReader &R);
+  void attachToPreprocessor(Preprocessor &PP) override;
+
+  void finishedMainFile(DiagnosticsEngine &Diags) override;
+
+  bool needSystemDependencies() final override { return IncludeSystemHeaders; }
+
+  bool sawDependency(StringRef Filename, bool FromModule, bool IsSystem,
+                     bool IsModuleFile, bool IsMissing) final override;
+
+protected:
+  void outputDependencyFile(llvm::raw_ostream &OS);
+
+private:
+  void outputDependencyFile(DiagnosticsEngine &Diags);
+
+  std::string OutputFile;
+  std::vector<std::string> Targets;
+  bool IncludeSystemHeaders;
+  bool PhonyTarget;
+  bool AddMissingHeaderDeps;
+  bool SeenMissingHeader;
+  bool IncludeModuleFiles;
+  DependencyOutputFormat OutputFormat;
+  unsigned InputFileIndex;
 };
 
 /// Collects the dependencies for imported modules into a directory.  Users
diff --git a/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h b/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
index 955eaeb..965a144 100644
--- a/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
+++ b/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
@@ -33,7 +33,33 @@
 /// markers in the input source to check that all the emitted diagnostics match
 /// those expected.
 ///
-/// USING THE DIAGNOSTIC CHECKER:
+/// INVOKING THE DIAGNOSTIC CHECKER:
+///
+/// VerifyDiagnosticConsumer is typically invoked via the "-verify" option to
+/// "clang -cc1".  "-verify" is equivalent to "-verify=expected", so all
+/// diagnostics are typically specified with the prefix "expected".  For
+/// example:
+///
+/// \code
+///   int A = B; // expected-error {{use of undeclared identifier 'B'}}
+/// \endcode
+///
+/// Custom prefixes can be specified as a comma-separated sequence.  Each
+/// prefix must start with a letter and contain only alphanumeric characters,
+/// hyphens, and underscores.  For example, given just "-verify=foo,bar",
+/// the above diagnostic would be ignored, but the following diagnostics would
+/// be recognized:
+///
+/// \code
+///   int A = B; // foo-error {{use of undeclared identifier 'B'}}
+///   int C = D; // bar-error {{use of undeclared identifier 'D'}}
+/// \endcode
+///
+/// Multiple occurrences accumulate prefixes.  For example,
+/// "-verify -verify=foo,bar -verify=baz" is equivalent to
+/// "-verify=expected,foo,bar,baz".
+///
+/// SPECIFYING DIAGNOSTICS:
 ///
 /// Indicating that a line expects an error or a warning is simple. Put a
 /// comment on the line that has the diagnostic, use:
@@ -81,6 +107,19 @@
 /// the included file is, for example, a system header where the actual line
 /// number may change and is not critical).
 ///
+/// As an alternative to specifying a fixed line number, the location of a
+/// diagnostic can instead be indicated by a marker of the form "#<marker>".
+/// Markers are specified by including them in a comment, and then referenced
+/// by appending the marker to the diagnostic with "@#<marker>":
+///
+/// \code
+///   #warning some text  // #1
+///   // expected-warning@#1 {{some text}}
+/// \endcode
+///
+/// The name of a marker used in a directive must be unique within the
+/// compilation.
+///
 /// The simple syntax above allows each specification to match exactly one
 /// error.  You can use the extended syntax to customize this. The extended
 /// syntax is "expected-<type> <n> {{diag text}}", where \<type> is one of
@@ -212,11 +251,14 @@
     HasOtherExpectedDirectives
   };
 
+  class MarkerTracker;
+
 private:
   DiagnosticsEngine &Diags;
   DiagnosticConsumer *PrimaryClient;
   std::unique_ptr<DiagnosticConsumer> PrimaryClientOwner;
   std::unique_ptr<TextDiagnosticBuffer> Buffer;
+  std::unique_ptr<MarkerTracker> Markers;
   const Preprocessor *CurrentPreprocessor = nullptr;
   const LangOptions *LangOpts = nullptr;
   SourceManager *SrcManager = nullptr;
diff --git a/linux-x64/clang/include/clang/Index/CodegenNameGenerator.h b/linux-x64/clang/include/clang/Index/CodegenNameGenerator.h
index d2528a1..98b3a5d 100644
--- a/linux-x64/clang/include/clang/Index/CodegenNameGenerator.h
+++ b/linux-x64/clang/include/clang/Index/CodegenNameGenerator.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_CLANG_INDEX_CODEGENNAMEGENERATOR_H
 #define LLVM_CLANG_INDEX_CODEGENNAMEGENERATOR_H
 
+#include "clang/AST/Mangle.h"
 #include "clang/Basic/LLVM.h"
 #include <memory>
 #include <string>
@@ -42,7 +43,7 @@
 
 private:
   struct Implementation;
-  std::unique_ptr<Implementation> Impl;
+  std::unique_ptr<ASTNameGenerator> Impl;
 };
 
 } // namespace index
diff --git a/linux-x64/clang/include/clang/Index/DeclOccurrence.h b/linux-x64/clang/include/clang/Index/DeclOccurrence.h
new file mode 100644
index 0000000..16f03a8
--- /dev/null
+++ b/linux-x64/clang/include/clang/Index/DeclOccurrence.h
@@ -0,0 +1,41 @@
+//===- DeclOccurrence.h - An occurrence of a decl within a file -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_INDEX_DECLOCCURRENCE_H
+#define LLVM_CLANG_INDEX_DECLOCCURRENCE_H
+
+#include "clang/Basic/LLVM.h"
+#include "clang/Index/IndexSymbol.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/SmallVector.h"
+
+namespace clang {
+class Decl;
+
+namespace index {
+
+struct DeclOccurrence {
+  SymbolRoleSet Roles;
+  unsigned Offset;
+  const Decl *Dcl;
+  SmallVector<SymbolRelation, 3> Relations;
+
+  DeclOccurrence(SymbolRoleSet R, unsigned Offset, const Decl *D,
+                 ArrayRef<SymbolRelation> Relations)
+      : Roles(R), Offset(Offset), Dcl(D),
+        Relations(Relations.begin(), Relations.end()) {}
+
+  friend bool operator<(const DeclOccurrence &LHS, const DeclOccurrence &RHS) {
+    return LHS.Offset < RHS.Offset;
+  }
+};
+
+} // namespace index
+} // namespace clang
+
+#endif // LLVM_CLANG_INDEX_DECLOCCURRENCE_H
diff --git a/linux-x64/clang/include/clang/Index/IndexSymbol.h b/linux-x64/clang/include/clang/Index/IndexSymbol.h
index 0b15b6c..2e1e600 100644
--- a/linux-x64/clang/include/clang/Index/IndexSymbol.h
+++ b/linux-x64/clang/include/clang/Index/IndexSymbol.h
@@ -118,8 +118,12 @@
   RelationContainedBy = 1 << 17,
   RelationIBTypeOf = 1 << 18,
   RelationSpecializationOf = 1 << 19,
+
+  // Symbol only references the name of the object as written. For example, a
+  // constructor references the class declaration using that role.
+  NameReference = 1 << 20,
 };
-static const unsigned SymbolRoleBitNum = 20;
+static const unsigned SymbolRoleBitNum = 21;
 typedef unsigned SymbolRoleSet;
 
 /// Represents a relation to another symbol for a symbol occurrence.
diff --git a/linux-x64/clang/include/clang/Index/IndexingAction.h b/linux-x64/clang/include/clang/Index/IndexingAction.h
index 8b3d541..9756f3c 100644
--- a/linux-x64/clang/include/clang/Index/IndexingAction.h
+++ b/linux-x64/clang/include/clang/Index/IndexingAction.h
@@ -46,6 +46,7 @@
   bool IndexMacrosInPreprocessor = false;
   // Has no effect if IndexFunctionLocals are false.
   bool IndexParametersInDeclarations = false;
+  bool IndexTemplateParameters = false;
 };
 
 /// Creates a frontend action that indexes all symbols (macros and AST decls).
diff --git a/linux-x64/clang/include/clang/Lex/DependencyDirectivesSourceMinimizer.h b/linux-x64/clang/include/clang/Lex/DependencyDirectivesSourceMinimizer.h
new file mode 100644
index 0000000..4164107
--- /dev/null
+++ b/linux-x64/clang/include/clang/Lex/DependencyDirectivesSourceMinimizer.h
@@ -0,0 +1,88 @@
+//===- clang/Lex/DependencyDirectivesSourceMinimizer.h -  ----------*- C++ -*-//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This is the interface for minimizing header and source files to the
+/// minimum necessary preprocessor directives for evaluating includes. It
+/// reduces the source down to #define, #include, #import, @import, and any
+/// conditional preprocessor logic that contains one of those.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_LEX_DEPENDENCY_DIRECTIVES_SOURCE_MINIMIZER_H
+#define LLVM_CLANG_LEX_DEPENDENCY_DIRECTIVES_SOURCE_MINIMIZER_H
+
+#include "clang/Basic/SourceLocation.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+
+namespace clang {
+
+class DiagnosticsEngine;
+
+namespace minimize_source_to_dependency_directives {
+
+/// Represents the kind of preprocessor directive or a module declaration that
+/// is tracked by the source minimizer in its token output.
+enum TokenKind {
+  pp_none,
+  pp_include,
+  pp___include_macros,
+  pp_define,
+  pp_undef,
+  pp_import,
+  pp_pragma_import,
+  pp_include_next,
+  pp_if,
+  pp_ifdef,
+  pp_ifndef,
+  pp_elif,
+  pp_else,
+  pp_endif,
+  decl_at_import,
+  pp_eof,
+};
+
+/// Represents a simplified token that's lexed as part of the source
+/// minimization. It's used to track the location of various preprocessor
+/// directives that could potentially have an effect on the depedencies.
+struct Token {
+  /// The kind of token.
+  TokenKind K = pp_none;
+
+  /// Offset into the output byte stream of where the directive begins.
+  int Offset = -1;
+
+  Token(TokenKind K, int Offset) : K(K), Offset(Offset) {}
+};
+
+} // end namespace minimize_source_to_dependency_directives
+
+/// Minimize the input down to the preprocessor directives that might have
+/// an effect on the dependencies for a compilation unit.
+///
+/// This function deletes all non-preprocessor code, and strips anything that
+/// can't affect what gets included. It canonicalizes whitespace where
+/// convenient to stabilize the output against formatting changes in the input.
+///
+/// Clears the output vectors at the beginning of the call.
+///
+/// \returns false on success, true on error. If the diagnostic engine is not
+/// null, an appropriate error is reported using the given input location
+/// with the offset that corresponds to the minimizer's current buffer offset.
+bool minimizeSourceToDependencyDirectives(
+    llvm::StringRef Input, llvm::SmallVectorImpl<char> &Output,
+    llvm::SmallVectorImpl<minimize_source_to_dependency_directives::Token>
+        &Tokens,
+    DiagnosticsEngine *Diags = nullptr,
+    SourceLocation InputSourceLoc = SourceLocation());
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_LEX_DEPENDENCY_DIRECTIVES_SOURCE_MINIMIZER_H
diff --git a/linux-x64/clang/include/clang/Lex/HeaderSearch.h b/linux-x64/clang/include/clang/Lex/HeaderSearch.h
index 879d24d..c5e6624 100644
--- a/linux-x64/clang/include/clang/Lex/HeaderSearch.h
+++ b/linux-x64/clang/include/clang/Lex/HeaderSearch.h
@@ -392,8 +392,9 @@
   /// true.
   ///
   /// \param IsFrameworkFound If non-null, will be set to true if a framework is
-  /// found in any of searched SearchDirs. Doesn't guarantee the requested file
-  /// is found.
+  /// found in any of searched SearchDirs. Will be set to false if a framework
+  /// is found only through header maps. Doesn't guarantee the requested file is
+  /// found.
   const FileEntry *LookupFile(
       StringRef Filename, SourceLocation IncludeLoc, bool isAngled,
       const DirectoryLookup *FromDir, const DirectoryLookup *&CurDir,
@@ -706,21 +707,31 @@
   /// Retrieve a uniqued framework name.
   StringRef getUniqueFrameworkName(StringRef Framework);
 
-  /// Suggest a path by which the specified file could be found, for
-  /// use in diagnostics to suggest a #include.
+  /// Suggest a path by which the specified file could be found, for use in
+  /// diagnostics to suggest a #include. Returned path will only contain forward
+  /// slashes as separators. MainFile is the absolute path of the file that we
+  /// are generating the diagnostics for. It will try to shorten the path using
+  /// MainFile location, if none of the include search directories were prefix
+  /// of File.
   ///
   /// \param IsSystem If non-null, filled in to indicate whether the suggested
   ///        path is relative to a system header directory.
   std::string suggestPathToFileForDiagnostics(const FileEntry *File,
+                                              llvm::StringRef MainFile,
                                               bool *IsSystem = nullptr);
 
-  /// Suggest a path by which the specified file could be found, for
-  /// use in diagnostics to suggest a #include.
+  /// Suggest a path by which the specified file could be found, for use in
+  /// diagnostics to suggest a #include. Returned path will only contain forward
+  /// slashes as separators. MainFile is the absolute path of the file that we
+  /// are generating the diagnostics for. It will try to shorten the path using
+  /// MainFile location, if none of the include search directories were prefix
+  /// of File.
   ///
   /// \param WorkingDir If non-empty, this will be prepended to search directory
   /// paths that are relative.
   std::string suggestPathToFileForDiagnostics(llvm::StringRef File,
                                               llvm::StringRef WorkingDir,
+                                              llvm::StringRef MainFile,
                                               bool *IsSystem = nullptr);
 
   void PrintStats();
diff --git a/linux-x64/clang/include/clang/Lex/Lexer.h b/linux-x64/clang/include/clang/Lex/Lexer.h
index 4a8a0f6..69cfe62 100644
--- a/linux-x64/clang/include/clang/Lex/Lexer.h
+++ b/linux-x64/clang/include/clang/Lex/Lexer.h
@@ -382,7 +382,7 @@
     SourceLocation End = getLocForEndOfToken(Range.getEnd(), 0, SM, LangOpts);
     return End.isInvalid() ? CharSourceRange()
                            : CharSourceRange::getCharRange(
-                                 Range.getBegin(), End.getLocWithOffset(-1));
+                                 Range.getBegin(), End);
   }
   static CharSourceRange getAsCharRange(CharSourceRange Range,
                                         const SourceManager &SM,
diff --git a/linux-x64/clang/include/clang/Lex/MacroArgs.h b/linux-x64/clang/include/clang/Lex/MacroArgs.h
index c2ba4eb..8806f2d 100644
--- a/linux-x64/clang/include/clang/Lex/MacroArgs.h
+++ b/linux-x64/clang/include/clang/Lex/MacroArgs.h
@@ -112,18 +112,19 @@
   bool isVarargsElidedUse() const { return VarargsElided; }
 
   /// Returns true if the macro was defined with a variadic (ellipsis) parameter
-  /// AND was invoked with at least one token supplied as a variadic argument.
+  /// AND was invoked with at least one token supplied as a variadic argument
+  /// (after pre-expansion).
   ///
   /// \code
   ///   #define F(a)  a
   ///   #define V(a, ...) __VA_OPT__(a)
-  ///   F()    <-- returns false on this invocation.
-  ///   V(,a)  <-- returns true on this invocation.
-  ///   V(,)   <-- returns false on this invocation.
+  ///   F()     <-- returns false on this invocation.
+  ///   V(,a)   <-- returns true on this invocation.
+  ///   V(,)    <-- returns false on this invocation.
+  ///   V(,F()) <-- returns false on this invocation.
   /// \endcode
   ///
-
-  bool invokedWithVariadicArgument(const MacroInfo *const MI) const;
+  bool invokedWithVariadicArgument(const MacroInfo *const MI, Preprocessor &PP);
 
   /// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of
   /// tokens into the literal string token that should be produced by the C #
diff --git a/linux-x64/clang/include/clang/Lex/ModuleMap.h b/linux-x64/clang/include/clang/Lex/ModuleMap.h
index af236f5..36e97a1 100644
--- a/linux-x64/clang/include/clang/Lex/ModuleMap.h
+++ b/linux-x64/clang/include/clang/Lex/ModuleMap.h
@@ -520,14 +520,18 @@
                                                bool IsFramework,
                                                bool IsExplicit);
 
-  /// Create a 'global module' for a C++ Modules TS module interface unit.
+  /// Create a global module fragment for a C++ module unit.
   ///
-  /// We model the global module as a submodule of the module interface unit.
-  /// Unfortunately, we can't create the module interface unit's Module until
-  /// later, because we don't know what it will be called.
-  Module *createGlobalModuleForInterfaceUnit(SourceLocation Loc);
+  /// We model the global module fragment as a submodule of the module
+  /// interface unit. Unfortunately, we can't create the module interface
+  /// unit's Module until later, because we don't know what it will be called.
+  Module *createGlobalModuleFragmentForModuleUnit(SourceLocation Loc);
 
-  /// Create a new module for a C++ Modules TS module interface unit.
+  /// Create a global module fragment for a C++ module interface unit.
+  Module *createPrivateModuleFragmentForInterfaceUnit(Module *Parent,
+                                                      SourceLocation Loc);
+
+  /// Create a new module for a C++ module interface unit.
   /// The module must not already exist, and will be configured for the current
   /// compilation.
   ///
diff --git a/linux-x64/clang/include/clang/Lex/PPCallbacks.h b/linux-x64/clang/include/clang/Lex/PPCallbacks.h
index 92943bd..f3f3796 100644
--- a/linux-x64/clang/include/clang/Lex/PPCallbacks.h
+++ b/linux-x64/clang/include/clang/Lex/PPCallbacks.h
@@ -132,6 +132,28 @@
                                   SrcMgr::CharacteristicKind FileType) {
   }
 
+  /// Callback invoked whenever a submodule was entered.
+  ///
+  /// \param M The submodule we have entered.
+  ///
+  /// \param ImportLoc The location of import directive token.
+  ///
+  /// \param ForPragma If entering from pragma directive.
+  ///
+  virtual void EnteredSubmodule(Module *M, SourceLocation ImportLoc,
+                                bool ForPragma) { }
+
+  /// Callback invoked whenever a submodule was left.
+  ///
+  /// \param M The submodule we have left.
+  ///
+  /// \param ImportLoc The location of import directive token.
+  ///
+  /// \param ForPragma If entering from pragma directive.
+  ///
+  virtual void LeftSubmodule(Module *M, SourceLocation ImportLoc,
+                             bool ForPragma) { }
+
   /// Callback invoked whenever there was an explicit module-import
   /// syntax.
   ///
@@ -239,6 +261,14 @@
   virtual void PragmaWarningPop(SourceLocation Loc) {
   }
 
+  /// Callback invoked when a \#pragma execution_character_set(push) directive
+  /// is read.
+  virtual void PragmaExecCharsetPush(SourceLocation Loc, StringRef Str) {}
+
+  /// Callback invoked when a \#pragma execution_character_set(pop) directive
+  /// is read.
+  virtual void PragmaExecCharsetPop(SourceLocation Loc) {}
+
   /// Callback invoked when a \#pragma clang assume_nonnull begin directive
   /// is read.
   virtual void PragmaAssumeNonNullBegin(SourceLocation Loc) {}
@@ -387,6 +417,18 @@
                                Imported, FileType);
   }
 
+  void EnteredSubmodule(Module *M, SourceLocation ImportLoc,
+                        bool ForPragma) override {
+    First->EnteredSubmodule(M, ImportLoc, ForPragma);
+    Second->EnteredSubmodule(M, ImportLoc, ForPragma);
+  }
+
+  void LeftSubmodule(Module *M, SourceLocation ImportLoc,
+                     bool ForPragma) override {
+    First->LeftSubmodule(M, ImportLoc, ForPragma);
+    Second->LeftSubmodule(M, ImportLoc, ForPragma);
+  }
+
   void moduleImport(SourceLocation ImportLoc, ModuleIdPath Path,
                     const Module *Imported) override {
     First->moduleImport(ImportLoc, Path, Imported);
@@ -477,6 +519,16 @@
     Second->PragmaWarningPop(Loc);
   }
 
+  void PragmaExecCharsetPush(SourceLocation Loc, StringRef Str) override {
+    First->PragmaExecCharsetPush(Loc, Str);
+    Second->PragmaExecCharsetPush(Loc, Str);
+  }
+
+  void PragmaExecCharsetPop(SourceLocation Loc) override {
+    First->PragmaExecCharsetPop(Loc);
+    Second->PragmaExecCharsetPop(Loc);
+  }
+
   void PragmaAssumeNonNullBegin(SourceLocation Loc) override {
     First->PragmaAssumeNonNullBegin(Loc);
     Second->PragmaAssumeNonNullBegin(Loc);
diff --git a/linux-x64/clang/include/clang/Lex/Pragma.h b/linux-x64/clang/include/clang/Lex/Pragma.h
index 365b95d..e943426 100644
--- a/linux-x64/clang/include/clang/Lex/Pragma.h
+++ b/linux-x64/clang/include/clang/Lex/Pragma.h
@@ -14,6 +14,7 @@
 #define LLVM_CLANG_LEX_PRAGMA_H
 
 #include "clang/Basic/LLVM.h"
+#include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
 #include <string>
@@ -46,6 +47,12 @@
     PIK___pragma
   };
 
+  /// Describes how and where the pragma was introduced.
+  struct PragmaIntroducer {
+    PragmaIntroducerKind Kind;
+    SourceLocation Loc;
+  };
+
 /// PragmaHandler - Instances of this interface defined to handle the various
 /// pragmas that the language front-end uses.  Each handler optionally has a
 /// name (e.g. "pack") and the HandlePragma method is invoked when a pragma with
@@ -64,7 +71,7 @@
   virtual ~PragmaHandler();
 
   StringRef getName() const { return Name; }
-  virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
+  virtual void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer,
                             Token &FirstToken) = 0;
 
   /// getIfNamespace - If this is a namespace, return it.  This is equivalent to
@@ -78,7 +85,7 @@
 public:
   explicit EmptyPragmaHandler(StringRef Name = StringRef());
 
-  void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
+  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer,
                     Token &FirstToken) override;
 };
 
@@ -111,7 +118,7 @@
 
   bool IsEmpty() const { return Handlers.empty(); }
 
-  void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
+  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer,
                     Token &Tok) override;
 
   PragmaNamespace *getIfNamespace() override { return this; }
diff --git a/linux-x64/clang/include/clang/Lex/Preprocessor.h b/linux-x64/clang/include/clang/Lex/Preprocessor.h
index e701f14..f65b0cd 100644
--- a/linux-x64/clang/include/clang/Lex/Preprocessor.h
+++ b/linux-x64/clang/include/clang/Lex/Preprocessor.h
@@ -33,6 +33,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/FoldingSet.h"
+#include "llvm/ADT/FunctionExtras.h"
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/PointerUnion.h"
@@ -48,8 +49,8 @@
 #include <cassert>
 #include <cstddef>
 #include <cstdint>
-#include <memory>
 #include <map>
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
@@ -71,7 +72,6 @@
 class FileManager;
 class HeaderSearch;
 class MacroArgs;
-class MemoryBufferCache;
 class PragmaHandler;
 class PragmaNamespace;
 class PreprocessingRecord;
@@ -125,6 +125,7 @@
   friend class VAOptDefinitionContext;
   friend class VariadicMacroScopeGuard;
 
+  llvm::unique_function<void(const clang::Token &)> OnToken;
   std::shared_ptr<PreprocessorOptions> PPOpts;
   DiagnosticsEngine        *Diags;
   LangOptions       &LangOpts;
@@ -132,7 +133,6 @@
   const TargetInfo *AuxTarget = nullptr;
   FileManager       &FileMgr;
   SourceManager     &SourceMgr;
-  MemoryBufferCache &PCMCache;
   std::unique_ptr<ScratchBuffer> ScratchBuf;
   HeaderSearch      &HeaderInfo;
   ModuleLoader      &TheModuleLoader;
@@ -149,6 +149,7 @@
   IdentifierInfo *Ident__DATE__, *Ident__TIME__;   // __DATE__, __TIME__
   IdentifierInfo *Ident__INCLUDE_LEVEL__;          // __INCLUDE_LEVEL__
   IdentifierInfo *Ident__BASE_FILE__;              // __BASE_FILE__
+  IdentifierInfo *Ident__FILE_NAME__;              // __FILE_NAME__
   IdentifierInfo *Ident__TIMESTAMP__;              // __TIMESTAMP__
   IdentifierInfo *Ident__COUNTER__;                // __COUNTER__
   IdentifierInfo *Ident_Pragma, *Ident__pragma;    // _Pragma, __pragma
@@ -173,6 +174,9 @@
   IdentifierInfo *Ident__is_target_os;             // __is_target_os
   IdentifierInfo *Ident__is_target_environment;    // __is_target_environment
 
+  // Weak, only valid (and set) while InMacroArgs is true.
+  Token* ArgMacro;
+
   SourceLocation DATELoc, TIMELoc;
 
   // Next __COUNTER__ value, starts at 0.
@@ -284,6 +288,84 @@
   /// Whether the last token we lexed was an '@'.
   bool LastTokenWasAt = false;
 
+  /// A position within a C++20 import-seq.
+  class ImportSeq {
+  public:
+    enum State : int {
+      // Positive values represent a number of unclosed brackets.
+      AtTopLevel = 0,
+      AfterTopLevelTokenSeq = -1,
+      AfterExport = -2,
+      AfterImportSeq = -3,
+    };
+
+    ImportSeq(State S) : S(S) {}
+
+    /// Saw any kind of open bracket.
+    void handleOpenBracket() {
+      S = static_cast<State>(std::max<int>(S, 0) + 1);
+    }
+    /// Saw any kind of close bracket other than '}'.
+    void handleCloseBracket() {
+      S = static_cast<State>(std::max<int>(S, 1) - 1);
+    }
+    /// Saw a close brace.
+    void handleCloseBrace() {
+      handleCloseBracket();
+      if (S == AtTopLevel && !AfterHeaderName)
+        S = AfterTopLevelTokenSeq;
+    }
+    /// Saw a semicolon.
+    void handleSemi() {
+      if (atTopLevel()) {
+        S = AfterTopLevelTokenSeq;
+        AfterHeaderName = false;
+      }
+    }
+
+    /// Saw an 'export' identifier.
+    void handleExport() {
+      if (S == AfterTopLevelTokenSeq)
+        S = AfterExport;
+      else if (S <= 0)
+        S = AtTopLevel;
+    }
+    /// Saw an 'import' identifier.
+    void handleImport() {
+      if (S == AfterTopLevelTokenSeq || S == AfterExport)
+        S = AfterImportSeq;
+      else if (S <= 0)
+        S = AtTopLevel;
+    }
+
+    /// Saw a 'header-name' token; do not recognize any more 'import' tokens
+    /// until we reach a top-level semicolon.
+    void handleHeaderName() {
+      if (S == AfterImportSeq)
+        AfterHeaderName = true;
+      handleMisc();
+    }
+
+    /// Saw any other token.
+    void handleMisc() {
+      if (S <= 0)
+        S = AtTopLevel;
+    }
+
+    bool atTopLevel() { return S <= 0; }
+    bool afterImportSeq() { return S == AfterImportSeq; }
+
+  private:
+    State S;
+    /// Whether we're in the pp-import-suffix following the header-name in a
+    /// pp-import. If so, a close-brace is not sufficient to end the
+    /// top-level-token-seq of an import-seq.
+    bool AfterHeaderName = false;
+  };
+
+  /// Our current position within a C++20 import-seq.
+  ImportSeq ImportSeqState = ImportSeq::AfterTopLevelTokenSeq;
+
   /// Whether the module import expects an identifier next. Otherwise,
   /// it expects a '.' or ';'.
   bool ModuleImportExpectsIdentifier = false;
@@ -322,6 +404,14 @@
   /// to avoid hitting the same error over and over again.
   bool HasReachedMaxIncludeDepth = false;
 
+  /// The number of currently-active calls to Lex.
+  ///
+  /// Lex is reentrant, and asking for an (end-of-phase-4) token can often
+  /// require asking for multiple additional tokens. This counter makes it
+  /// possible for Lex to detect whether it's producing a token for the end
+  /// of phase 4 of translation or for some other situation.
+  unsigned LexLevel = 0;
+
 public:
   struct PreambleSkipInfo {
     SourceLocation HashTokenLoc;
@@ -776,7 +866,6 @@
 public:
   Preprocessor(std::shared_ptr<PreprocessorOptions> PPOpts,
                DiagnosticsEngine &diags, LangOptions &opts, SourceManager &SM,
-               MemoryBufferCache &PCMCache,
                HeaderSearch &Headers, ModuleLoader &TheModuleLoader,
                IdentifierInfoLookup *IILookup = nullptr,
                bool OwnsHeaderSearch = false,
@@ -816,7 +905,6 @@
   const TargetInfo *getAuxTargetInfo() const { return AuxTarget; }
   FileManager &getFileManager() const { return FileMgr; }
   SourceManager &getSourceManager() const { return SourceMgr; }
-  MemoryBufferCache &getPCMCache() const { return PCMCache; }
   HeaderSearch &getHeaderSearchInfo() const { return HeaderInfo; }
 
   IdentifierTable &getIdentifierTable() { return Identifiers; }
@@ -912,6 +1000,13 @@
   }
   /// \}
 
+  /// Register a function that would be called on each token in the final
+  /// expanded token stream.
+  /// This also reports annotation tokens produced by the parser.
+  void setTokenWatcher(llvm::unique_function<void(const clang::Token &)> F) {
+    OnToken = std::move(F);
+  }
+
   bool isMacroDefined(StringRef Id) {
     return isMacroDefined(&Identifiers.get(Id));
   }
@@ -1196,6 +1291,7 @@
   void EnterMacro(Token &Tok, SourceLocation ILEnd, MacroInfo *Macro,
                   MacroArgs *Args);
 
+private:
   /// Add a "macro" context to the top of the include stack,
   /// which will cause the lexer to start returning the specified tokens.
   ///
@@ -1207,18 +1303,24 @@
   /// of tokens has a permanent owner somewhere, so they do not need to be
   /// copied. If it is true, it assumes the array of tokens is allocated with
   /// \c new[] and the Preprocessor will delete[] it.
-private:
+  ///
+  /// If \p IsReinject the resulting tokens will have Token::IsReinjected flag
+  /// set, see the flag documentation for details.
   void EnterTokenStream(const Token *Toks, unsigned NumToks,
-                        bool DisableMacroExpansion, bool OwnsTokens);
+                        bool DisableMacroExpansion, bool OwnsTokens,
+                        bool IsReinject);
 
 public:
   void EnterTokenStream(std::unique_ptr<Token[]> Toks, unsigned NumToks,
-                        bool DisableMacroExpansion) {
-    EnterTokenStream(Toks.release(), NumToks, DisableMacroExpansion, true);
+                        bool DisableMacroExpansion, bool IsReinject) {
+    EnterTokenStream(Toks.release(), NumToks, DisableMacroExpansion, true,
+                     IsReinject);
   }
 
-  void EnterTokenStream(ArrayRef<Token> Toks, bool DisableMacroExpansion) {
-    EnterTokenStream(Toks.data(), Toks.size(), DisableMacroExpansion, false);
+  void EnterTokenStream(ArrayRef<Token> Toks, bool DisableMacroExpansion,
+                        bool IsReinject) {
+    EnterTokenStream(Toks.data(), Toks.size(), DisableMacroExpansion, false,
+                     IsReinject);
   }
 
   /// Pop the current lexer/macro exp off the top of the lexer stack.
@@ -1245,24 +1347,6 @@
   /// Disable the last EnableBacktrackAtThisPos call.
   void CommitBacktrackedTokens();
 
-  struct CachedTokensRange {
-    CachedTokensTy::size_type Begin, End;
-  };
-
-private:
-  /// A range of cached tokens that should be erased after lexing
-  /// when backtracking requires the erasure of such cached tokens.
-  Optional<CachedTokensRange> CachedTokenRangeToErase;
-
-public:
-  /// Returns the range of cached tokens that were lexed since
-  /// EnableBacktrackAtThisPos() was previously called.
-  CachedTokensRange LastCachedTokenRange();
-
-  /// Erase the range of cached tokens that were lexed since
-  /// EnableBacktrackAtThisPos() was previously called.
-  void EraseCachedTokens(CachedTokensRange TokenRange);
-
   /// Make Preprocessor re-lex the tokens that were lexed since
   /// EnableBacktrackAtThisPos() was previously called.
   void Backtrack();
@@ -1274,7 +1358,11 @@
   /// Lex the next token for this preprocessor.
   void Lex(Token &Result);
 
-  void LexAfterModuleImport(Token &Result);
+  /// Lex a token, forming a header-name token if possible.
+  bool LexHeaderName(Token &Result, bool AllowMacroExpansion = true);
+
+  bool LexAfterModuleImport(Token &Result);
+  void CollectPpImportSuffix(SmallVectorImpl<Token> &Toks);
 
   void makeModuleVisible(Module *M, SourceLocation Loc);
 
@@ -1351,6 +1439,7 @@
   /// tokens after phase 5.  As such, it is equivalent to using
   /// 'Lex', not 'LexUnexpandedToken'.
   const Token &LookAhead(unsigned N) {
+    assert(LexLevel == 0 && "cannot use lookahead while lexing");
     if (CachedLexPos + N < CachedTokens.size())
       return CachedTokens[CachedLexPos+N];
     else
@@ -1376,9 +1465,20 @@
   ///
   /// If BackTrack() is called afterwards, the token will remain at the
   /// insertion point.
-  void EnterToken(const Token &Tok) {
-    EnterCachingLexMode();
-    CachedTokens.insert(CachedTokens.begin()+CachedLexPos, Tok);
+  /// If \p IsReinject is true, resulting token will have Token::IsReinjected
+  /// flag set. See the flag documentation for details.
+  void EnterToken(const Token &Tok, bool IsReinject) {
+    if (LexLevel) {
+      // It's not correct in general to enter caching lex mode while in the
+      // middle of a nested lexing action.
+      auto TokCopy = llvm::make_unique<Token[]>(1);
+      TokCopy[0] = Tok;
+      EnterTokenStream(std::move(TokCopy), 1, true, IsReinject);
+    } else {
+      EnterCachingLexMode();
+      assert(IsReinject && "new tokens in the middle of cached stream");
+      CachedTokens.insert(CachedTokens.begin()+CachedLexPos, Tok);
+    }
   }
 
   /// We notify the Preprocessor that if it is caching tokens (because
@@ -1812,7 +1912,11 @@
   /// If not, emit a diagnostic and consume up until the eod.
   /// If \p EnableMacros is true, then we consider macros that expand to zero
   /// tokens as being ok.
-  void CheckEndOfDirective(const char *DirType, bool EnableMacros = false);
+  ///
+  /// \return The location of the end of the directive (the terminating
+  /// newline).
+  SourceLocation CheckEndOfDirective(const char *DirType,
+                                     bool EnableMacros = false);
 
   /// Read and discard all tokens remaining on the current line until
   /// the tok::eod token is found. Returns the range of the skipped tokens.
@@ -1867,22 +1971,6 @@
   /// Return true if we're in the top-level file, not in a \#include.
   bool isInPrimaryFile() const;
 
-  /// Handle cases where the \#include name is expanded
-  /// from a macro as multiple tokens, which need to be glued together.
-  ///
-  /// This occurs for code like:
-  /// \code
-  ///    \#define FOO <x/y.h>
-  ///    \#include FOO
-  /// \endcode
-  /// because in this case, "<x/y.h>" is returned as 7 tokens, not one.
-  ///
-  /// This code concatenates and consumes tokens up to the '>' token.  It
-  /// returns false if the > was found, otherwise it returns true if it finds
-  /// and consumes the EOD marker.
-  bool ConcatenateIncludeName(SmallString<128> &FilenameBuffer,
-                              SourceLocation &End);
-
   /// Lex an on-off-switch (C99 6.10.6p2) and verify that it is
   /// followed by EOD.  Return true if the token is not a valid on-off-switch.
   bool LexOnOffSwitch(tok::OnOffSwitch &Result);
@@ -2076,6 +2164,7 @@
   }
 
   void EnterCachingLexMode();
+  void EnterCachingLexModeUnchecked();
 
   void ExitCachingLexMode() {
     if (InCachingLexMode())
@@ -2096,12 +2185,32 @@
   void HandleMacroPublicDirective(Token &Tok);
   void HandleMacroPrivateDirective();
 
+  /// An additional notification that can be produced by a header inclusion or
+  /// import to tell the parser what happened.
+  struct ImportAction {
+    enum ActionKind {
+      None,
+      ModuleBegin,
+      ModuleImport,
+      SkippedModuleImport,
+    } Kind;
+    Module *ModuleForHeader = nullptr;
+
+    ImportAction(ActionKind AK, Module *Mod = nullptr)
+        : Kind(AK), ModuleForHeader(Mod) {
+      assert((AK == None || Mod) && "no module for module action");
+    }
+  };
+
   // File inclusion.
-  void HandleIncludeDirective(SourceLocation HashLoc,
-                              Token &Tok,
+  void HandleIncludeDirective(SourceLocation HashLoc, Token &Tok,
                               const DirectoryLookup *LookupFrom = nullptr,
-                              const FileEntry *LookupFromFile = nullptr,
-                              bool isImport = false);
+                              const FileEntry *LookupFromFile = nullptr);
+  ImportAction
+  HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok,
+                              Token &FilenameTok, SourceLocation EndLoc,
+                              const DirectoryLookup *LookupFrom = nullptr,
+                              const FileEntry *LookupFromFile = nullptr);
   void HandleIncludeNextDirective(SourceLocation HashLoc, Token &Tok);
   void HandleIncludeMacrosDirective(SourceLocation HashLoc, Token &Tok);
   void HandleImportDirective(SourceLocation HashLoc, Token &Tok);
@@ -2182,8 +2291,7 @@
   void HandleElifDirective(Token &ElifToken, const Token &HashToken);
 
   // Pragmas.
-  void HandlePragmaDirective(SourceLocation IntroducerLoc,
-                             PragmaIntroducerKind Introducer);
+  void HandlePragmaDirective(PragmaIntroducer Introducer);
 
 public:
   void HandlePragmaOnce(Token &OnceTok);
diff --git a/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h b/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h
index 5efe5fc..03b1cc2 100644
--- a/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h
+++ b/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h
@@ -48,8 +48,7 @@
   /// True when parsing \#XXX; turns '\\n' into a tok::eod token.
   bool ParsingPreprocessorDirective = false;
 
-  /// True after \#include; turns \<xx> into a tok::angle_string_literal
-  /// token.
+  /// True after \#include; turns \<xx> or "xxx" into a tok::header_name token.
   bool ParsingFilename = false;
 
   /// True if in raw mode.
@@ -129,11 +128,7 @@
   //===--------------------------------------------------------------------===//
   // Misc. lexing methods.
 
-  /// After the preprocessor has parsed a \#include, lex and
-  /// (potentially) macro expand the filename.
-  ///
-  /// If the sequence parsed is not lexically legal, emit a diagnostic and
-  /// return a result EOD token.
+  /// Lex a token, producing a header-name token if possible.
   void LexIncludeFilename(Token &FilenameTok);
 
   /// Inform the lexer whether or not we are currently lexing a
diff --git a/linux-x64/clang/include/clang/Lex/Token.h b/linux-x64/clang/include/clang/Lex/Token.h
index 20483e3..89042a6 100644
--- a/linux-x64/clang/include/clang/Lex/Token.h
+++ b/linux-x64/clang/include/clang/Lex/Token.h
@@ -70,20 +70,23 @@
 public:
   // Various flags set per token:
   enum TokenFlags {
-    StartOfLine   = 0x01,  // At start of line or only after whitespace
-                           // (considering the line after macro expansion).
-    LeadingSpace  = 0x02,  // Whitespace exists before this token (considering
-                           // whitespace after macro expansion).
-    DisableExpand = 0x04,  // This identifier may never be macro expanded.
-    NeedsCleaning = 0x08,  // Contained an escaped newline or trigraph.
+    StartOfLine = 0x01,   // At start of line or only after whitespace
+                          // (considering the line after macro expansion).
+    LeadingSpace = 0x02,  // Whitespace exists before this token (considering
+                          // whitespace after macro expansion).
+    DisableExpand = 0x04, // This identifier may never be macro expanded.
+    NeedsCleaning = 0x08, // Contained an escaped newline or trigraph.
     LeadingEmptyMacro = 0x10, // Empty macro exists before this token.
-    HasUDSuffix = 0x20,    // This string or character literal has a ud-suffix.
-    HasUCN = 0x40,         // This identifier contains a UCN.
-    IgnoredComma = 0x80,   // This comma is not a macro argument separator (MS).
+    HasUDSuffix = 0x20,  // This string or character literal has a ud-suffix.
+    HasUCN = 0x40,       // This identifier contains a UCN.
+    IgnoredComma = 0x80, // This comma is not a macro argument separator (MS).
     StringifiedInMacro = 0x100, // This string or character literal is formed by
                                 // macro stringizing or charizing operator.
     CommaAfterElided = 0x200, // The comma following this token was elided (MS).
     IsEditorPlaceholder = 0x400, // This identifier is a placeholder.
+    IsReinjected = 0x800, // A phase 4 token that was produced before and
+                          // re-added, e.g. via EnterTokenStream. Annotation
+                          // tokens are *not* reinjected.
   };
 
   tok::TokenKind getKind() const { return Kind; }
diff --git a/linux-x64/clang/include/clang/Lex/TokenLexer.h b/linux-x64/clang/include/clang/Lex/TokenLexer.h
index 13b3c3e..4d229ae 100644
--- a/linux-x64/clang/include/clang/Lex/TokenLexer.h
+++ b/linux-x64/clang/include/clang/Lex/TokenLexer.h
@@ -96,6 +96,10 @@
   /// should not be subject to further macro expansion.
   bool DisableMacroExpansion : 1;
 
+  /// When true, the produced tokens have Token::IsReinjected flag set.
+  /// See the flag documentation for details.
+  bool IsReinject : 1;
+
 public:
   /// Create a TokenLexer for the specified macro with the specified actual
   /// arguments.  Note that this ctor takes ownership of the ActualArgs pointer.
@@ -111,9 +115,9 @@
   /// specified, this takes ownership of the tokens and delete[]'s them when
   /// the token lexer is empty.
   TokenLexer(const Token *TokArray, unsigned NumToks, bool DisableExpansion,
-             bool ownsTokens, Preprocessor &pp)
+             bool ownsTokens, bool isReinject, Preprocessor &pp)
       : PP(pp), OwnsTokens(false) {
-    Init(TokArray, NumToks, DisableExpansion, ownsTokens);
+    Init(TokArray, NumToks, DisableExpansion, ownsTokens, isReinject);
   }
 
   TokenLexer(const TokenLexer &) = delete;
@@ -132,8 +136,8 @@
   ///
   /// DisableExpansion is true when macro expansion of tokens lexed from this
   /// stream should be disabled.
-  void Init(const Token *TokArray, unsigned NumToks,
-            bool DisableMacroExpansion, bool OwnsTokens);
+  void Init(const Token *TokArray, unsigned NumToks, bool DisableMacroExpansion,
+            bool OwnsTokens, bool IsReinject);
 
   /// If the next token lexed will pop this macro off the
   /// expansion stack, return 2.  If the next unexpanded token is a '(', return
diff --git a/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h b/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h
index 4274a4d..989e0ac 100644
--- a/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h
+++ b/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h
@@ -113,6 +113,8 @@
       UnmatchedOpeningParens.push_back(LParenLoc);
     }
 
+    /// Are we at the top level within the __VA_OPT__?
+    bool isAtTopLevel() const { return UnmatchedOpeningParens.size() == 1; }
   };
 
   /// A class for tracking whether we're inside a VA_OPT during a
@@ -135,7 +137,8 @@
 
     unsigned StringifyBefore : 1;
     unsigned CharifyBefore : 1;
-
+    unsigned BeginsWithPlaceholder : 1;
+    unsigned EndsWithPlaceholder : 1;
 
     bool hasStringifyBefore() const {
       assert(!isReset() &&
@@ -151,7 +154,8 @@
   public:
     VAOptExpansionContext(Preprocessor &PP)
         : VAOptDefinitionContext(PP), LeadingSpaceForStringifiedToken(false),
-          StringifyBefore(false), CharifyBefore(false) {
+          StringifyBefore(false), CharifyBefore(false),
+          BeginsWithPlaceholder(false), EndsWithPlaceholder(false) {
       SyntheticEOFToken.startToken();
       SyntheticEOFToken.setKind(tok::eof);
     }
@@ -162,6 +166,8 @@
       LeadingSpaceForStringifiedToken = false;
       StringifyBefore = false;
       CharifyBefore = false;
+      BeginsWithPlaceholder = false;
+      EndsWithPlaceholder = false;
     }
 
     const Token &getEOFTok() const { return SyntheticEOFToken; }
@@ -174,8 +180,24 @@
       LeadingSpaceForStringifiedToken = HasLeadingSpace;
     }
 
+    void hasPlaceholderAfterHashhashAtStart() { BeginsWithPlaceholder = true; }
+    void hasPlaceholderBeforeRParen() {
+      if (isAtTopLevel())
+        EndsWithPlaceholder = true;
+    }
 
 
+    bool beginsWithPlaceholder() const {
+      assert(!isReset() &&
+             "Must only be called if the state has not been reset");
+      return BeginsWithPlaceholder;
+    }
+    bool endsWithPlaceholder() const {
+      assert(!isReset() &&
+             "Must only be called if the state has not been reset");
+      return EndsWithPlaceholder;
+    }
+
     bool hasCharifyBefore() const {
       assert(!isReset() &&
              "Must only be called if the state has not been reset");
diff --git a/linux-x64/clang/include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc b/linux-x64/clang/include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc
index 22dcf9f..b9671ed 100644
--- a/linux-x64/clang/include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc
+++ b/linux-x64/clang/include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc
@@ -59,6 +59,7 @@
   Case("function", std::make_pair(attr::SubjectMatchRule_function, isAttributeSubjectMatchSubRuleFor_function)).
   Case("namespace", std::make_pair(attr::SubjectMatchRule_namespace, defaultIsAttributeSubjectMatchSubRuleFor)).
   Case("objc_category", std::make_pair(attr::SubjectMatchRule_objc_category, defaultIsAttributeSubjectMatchSubRuleFor)).
+  Case("objc_implementation", std::make_pair(attr::SubjectMatchRule_objc_implementation, defaultIsAttributeSubjectMatchSubRuleFor)).
   Case("objc_interface", std::make_pair(attr::SubjectMatchRule_objc_interface, defaultIsAttributeSubjectMatchSubRuleFor)).
   Case("objc_method", std::make_pair(attr::SubjectMatchRule_objc_method, isAttributeSubjectMatchSubRuleFor_objc_method)).
   Case("objc_property", std::make_pair(attr::SubjectMatchRule_objc_property, defaultIsAttributeSubjectMatchSubRuleFor)).
diff --git a/linux-x64/clang/include/clang/Parse/Parser.h b/linux-x64/clang/include/clang/Parse/Parser.h
index f5c70e7..32bbf4d 100644
--- a/linux-x64/clang/include/clang/Parse/Parser.h
+++ b/linux-x64/clang/include/clang/Parse/Parser.h
@@ -150,11 +150,15 @@
   IdentifierInfo *Ident_language, *Ident_defined_in,
       *Ident_generated_declaration;
 
-  /// C++0x contextual keywords.
+  /// C++11 contextual keywords.
   mutable IdentifierInfo *Ident_final;
   mutable IdentifierInfo *Ident_GNU_final;
   mutable IdentifierInfo *Ident_override;
 
+  // C++2a contextual keywords.
+  mutable IdentifierInfo *Ident_import;
+  mutable IdentifierInfo *Ident_module;
+
   // C++ type trait keywords that can be reverted to identifiers and still be
   // used as type traits.
   llvm::SmallDenseMap<IdentifierInfo *, tok::TokenKind> RevertibleTypeTraits;
@@ -246,7 +250,13 @@
       Depth += D;
       AddedLevels += D;
     }
+    void setAddedDepth(unsigned D) {
+      Depth = Depth - AddedLevels + D;
+      AddedLevels = D;
+    }
+
     unsigned getDepth() const { return Depth; }
+    unsigned getOriginalDepth() const { return Depth - AddedLevels; }
   };
 
   /// Factory object for creating ParsedAttr objects.
@@ -363,10 +373,28 @@
   /// just a regular sub-expression.
   SourceLocation ExprStatementTokLoc;
 
-  /// Tests whether an expression value is discarded based on token lookahead.
-  /// It will return true if the lexer is currently processing the })
-  /// terminating a GNU statement expression and false otherwise.
-  bool isExprValueDiscarded();
+  /// Flags describing a context in which we're parsing a statement.
+  enum class ParsedStmtContext {
+    /// This context permits declarations in language modes where declarations
+    /// are not statements.
+    AllowDeclarationsInC = 0x1,
+    /// This context permits standalone OpenMP directives.
+    AllowStandaloneOpenMPDirectives = 0x2,
+    /// This context is at the top level of a GNU statement expression.
+    InStmtExpr = 0x4,
+
+    /// The context of a regular substatement.
+    SubStmt = 0,
+    /// The context of a compound-statement.
+    Compound = AllowDeclarationsInC | AllowStandaloneOpenMPDirectives,
+
+    LLVM_MARK_AS_BITMASK_ENUM(InStmtExpr)
+  };
+
+  /// Act on an expression statement that might be the last statement in a
+  /// GNU statement expression. Checks whether we are actually at the end of
+  /// a statement expression and builds a suitable expression statement.
+  StmtResult handleExprStmt(ExprResult E, ParsedStmtContext StmtCtx);
 
 public:
   Parser(Preprocessor &PP, Sema &Actions, bool SkipFunctionBodies);
@@ -406,7 +434,7 @@
 
   /// ParseTopLevelDecl - Parse one top-level declaration. Returns true if
   /// the EOF was encountered.
-  bool ParseTopLevelDecl(DeclGroupPtrTy &Result);
+  bool ParseTopLevelDecl(DeclGroupPtrTy &Result, bool IsFirstDecl = false);
   bool ParseTopLevelDecl() {
     DeclGroupPtrTy Result;
     return ParseTopLevelDecl(Result);
@@ -508,9 +536,9 @@
   /// token the current token.
   void UnconsumeToken(Token &Consumed) {
       Token Next = Tok;
-      PP.EnterToken(Consumed);
+      PP.EnterToken(Consumed, /*IsReinject*/true);
       PP.Lex(Tok);
-      PP.EnterToken(Next);
+      PP.EnterToken(Next, /*IsReinject*/true);
   }
 
   SourceLocation ConsumeAnnotationToken() {
@@ -771,9 +799,8 @@
     /// Annotation was successful.
     ANK_Success
   };
-  AnnotatedNameKind
-  TryAnnotateName(bool IsAddressOfOperand,
-                  std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr);
+  AnnotatedNameKind TryAnnotateName(bool IsAddressOfOperand,
+                                    CorrectionCandidateCallback *CCC = nullptr);
 
   /// Push a tok::annot_cxxscope token onto the token stream.
   void AnnotateScopeToken(CXXScopeSpec &SS, bool IsNewAnnotation);
@@ -1131,6 +1158,7 @@
     Parser *Self;
     CachedTokens Toks;
     IdentifierInfo &AttrName;
+    IdentifierInfo *MacroII = nullptr;
     SourceLocation AttrNameLoc;
     SmallVector<Decl*, 2> Decls;
 
@@ -1556,7 +1584,8 @@
   ObjCImplParsingDataRAII *CurParsedObjCImpl;
   void StashAwayMethodOrFunctionBodyTokens(Decl *MDecl);
 
-  DeclGroupPtrTy ParseObjCAtImplementationDeclaration(SourceLocation AtLoc);
+  DeclGroupPtrTy ParseObjCAtImplementationDeclaration(SourceLocation AtLoc,
+                                                      ParsedAttributes &Attrs);
   DeclGroupPtrTy ParseObjCAtEndDeclaration(SourceRange atEnd);
   Decl *ParseObjCAtAliasDeclaration(SourceLocation atLoc);
   Decl *ParseObjCPropertySynthesize(SourceLocation atLoc);
@@ -1662,10 +1691,10 @@
   typedef SmallVector<SourceLocation, 20> CommaLocsTy;
 
   /// ParseExpressionList - Used for C/C++ (argument-)expression-list.
-  bool ParseExpressionList(
-      SmallVectorImpl<Expr *> &Exprs,
-      SmallVectorImpl<SourceLocation> &CommaLocs,
-      llvm::function_ref<void()> Completer = llvm::function_ref<void()>());
+  bool ParseExpressionList(SmallVectorImpl<Expr *> &Exprs,
+                           SmallVectorImpl<SourceLocation> &CommaLocs,
+                           llvm::function_ref<void()> ExpressionStarts =
+                               llvm::function_ref<void()>());
 
   /// ParseSimpleExpressionList - A simple comma-separated list of expressions,
   /// used for misc language extensions.
@@ -1723,21 +1752,37 @@
                                       bool OnlyNamespace = false);
 
   //===--------------------------------------------------------------------===//
-  // C++0x 5.1.2: Lambda expressions
+  // C++11 5.1.2: Lambda expressions
+
+  /// Result of tentatively parsing a lambda-introducer.
+  enum class LambdaIntroducerTentativeParse {
+    /// This appears to be a lambda-introducer, which has been fully parsed.
+    Success,
+    /// This is a lambda-introducer, but has not been fully parsed, and this
+    /// function needs to be called again to parse it.
+    Incomplete,
+    /// This is definitely an Objective-C message send expression, rather than
+    /// a lambda-introducer, attribute-specifier, or array designator.
+    MessageSend,
+    /// This is not a lambda-introducer.
+    Invalid,
+  };
 
   // [...] () -> type {...}
   ExprResult ParseLambdaExpression();
   ExprResult TryParseLambdaExpression();
-  Optional<unsigned> ParseLambdaIntroducer(LambdaIntroducer &Intro,
-                                           bool *SkippedInits = nullptr);
-  bool TryParseLambdaIntroducer(LambdaIntroducer &Intro);
-  ExprResult ParseLambdaExpressionAfterIntroducer(
-               LambdaIntroducer &Intro);
+  bool
+  ParseLambdaIntroducer(LambdaIntroducer &Intro,
+                        LambdaIntroducerTentativeParse *Tentative = nullptr);
+  ExprResult ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro);
 
   //===--------------------------------------------------------------------===//
   // C++ 5.2p1: C++ Casts
   ExprResult ParseCXXCasts();
 
+  /// Parse a __builtin_bit_cast(T, E), used to implement C++2a std::bit_cast.
+  ExprResult ParseBuiltinBitCast();
+
   //===--------------------------------------------------------------------===//
   // C++ 5.2p1: C++ Type Identification
   ExprResult ParseCXXTypeid();
@@ -1873,29 +1918,24 @@
   /// A SmallVector of types.
   typedef SmallVector<ParsedType, 12> TypeVector;
 
-  StmtResult ParseStatement(SourceLocation *TrailingElseLoc = nullptr,
-                            bool AllowOpenMPStandalone = false);
-  enum AllowedConstructsKind {
-    /// Allow any declarations, statements, OpenMP directives.
-    ACK_Any,
-    /// Allow only statements and non-standalone OpenMP directives.
-    ACK_StatementsOpenMPNonStandalone,
-    /// Allow statements and all executable OpenMP directives
-    ACK_StatementsOpenMPAnyExecutable
-  };
   StmtResult
-  ParseStatementOrDeclaration(StmtVector &Stmts, AllowedConstructsKind Allowed,
-                              SourceLocation *TrailingElseLoc = nullptr);
+  ParseStatement(SourceLocation *TrailingElseLoc = nullptr,
+                 ParsedStmtContext StmtCtx = ParsedStmtContext::SubStmt);
+  StmtResult ParseStatementOrDeclaration(
+      StmtVector &Stmts, ParsedStmtContext StmtCtx,
+      SourceLocation *TrailingElseLoc = nullptr);
   StmtResult ParseStatementOrDeclarationAfterAttributes(
                                          StmtVector &Stmts,
-                                         AllowedConstructsKind Allowed,
+                                         ParsedStmtContext StmtCtx,
                                          SourceLocation *TrailingElseLoc,
                                          ParsedAttributesWithRange &Attrs);
-  StmtResult ParseExprStatement();
-  StmtResult ParseLabeledStatement(ParsedAttributesWithRange &attrs);
-  StmtResult ParseCaseStatement(bool MissingCase = false,
+  StmtResult ParseExprStatement(ParsedStmtContext StmtCtx);
+  StmtResult ParseLabeledStatement(ParsedAttributesWithRange &attrs,
+                                   ParsedStmtContext StmtCtx);
+  StmtResult ParseCaseStatement(ParsedStmtContext StmtCtx,
+                                bool MissingCase = false,
                                 ExprResult Expr = ExprResult());
-  StmtResult ParseDefaultStatement();
+  StmtResult ParseDefaultStatement(ParsedStmtContext StmtCtx);
   StmtResult ParseCompoundStatement(bool isStmtExpr = false);
   StmtResult ParseCompoundStatement(bool isStmtExpr,
                                     unsigned ScopeFlags);
@@ -1918,7 +1958,7 @@
   StmtResult ParseAsmStatement(bool &msAsm);
   StmtResult ParseMicrosoftAsmStatement(SourceLocation AsmLoc);
   StmtResult ParsePragmaLoopHint(StmtVector &Stmts,
-                                 AllowedConstructsKind Allowed,
+                                 ParsedStmtContext StmtCtx,
                                  SourceLocation *TrailingElseLoc,
                                  ParsedAttributesWithRange &Attrs);
 
@@ -1984,7 +2024,8 @@
   //===--------------------------------------------------------------------===//
   // Objective-C Statements
 
-  StmtResult ParseObjCAtStatement(SourceLocation atLoc);
+  StmtResult ParseObjCAtStatement(SourceLocation atLoc,
+                                  ParsedStmtContext StmtCtx);
   StmtResult ParseObjCTryStmt(SourceLocation atLoc);
   StmtResult ParseObjCThrowStmt(SourceLocation atLoc);
   StmtResult ParseObjCSynchronizedStmt(SourceLocation atLoc);
@@ -2278,13 +2319,18 @@
   /// Doesn't consume tokens.
   TPResult
   isCXXDeclarationSpecifier(TPResult BracedCastResult = TPResult::False,
-                            bool *HasMissingTypename = nullptr);
+                            bool *InvalidAsDeclSpec = nullptr);
 
   /// Given that isCXXDeclarationSpecifier returns \c TPResult::True or
   /// \c TPResult::Ambiguous, determine whether the decl-specifier would be
   /// a type-specifier other than a cv-qualifier.
   bool isCXXDeclarationSpecifierAType();
 
+  /// Determine whether the current token sequence might be
+  ///   '<' template-argument-list '>'
+  /// rather than a less-than expression.
+  TPResult isTemplateArgumentList(unsigned TokensToSkip);
+
   /// Determine whether an identifier has been tentatively declared as a
   /// non-type. Such tentative declarations should not be found to name a type
   /// during a tentative parse, but also should not be annotated as a non-type.
@@ -2824,13 +2870,9 @@
       bool AllowScopeSpecifier);
   /// Parses declarative or executable directive.
   ///
-  /// \param Allowed ACK_Any, if any directives are allowed,
-  /// ACK_StatementsOpenMPAnyExecutable - if any executable directives are
-  /// allowed, ACK_StatementsOpenMPNonStandalone - if only non-standalone
-  /// executable directives are allowed.
-  ///
+  /// \param StmtCtx The context in which we're parsing the directive.
   StmtResult
-  ParseOpenMPDeclarativeOrExecutableDirective(AllowedConstructsKind Allowed);
+  ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx);
   /// Parses clause of kind \a CKind for directive of a kind \a Kind.
   ///
   /// \param DKind Kind of current directive.
@@ -2891,8 +2933,8 @@
     Expr *TailExpr = nullptr;
     SourceLocation ColonLoc;
     SourceLocation RLoc;
-    CXXScopeSpec ReductionIdScopeSpec;
-    DeclarationNameInfo ReductionId;
+    CXXScopeSpec ReductionOrMapperIdScopeSpec;
+    DeclarationNameInfo ReductionOrMapperId;
     OpenMPDependClauseKind DepKind = OMPC_DEPEND_unknown;
     OpenMPLinearClauseKind LinKind = OMPC_LINEAR_val;
     SmallVector<OpenMPMapModifierKind, OMPMapClause::NumberOfModifiers>
@@ -2915,6 +2957,12 @@
                           ParsedType ObjectType,
                           SourceLocation *TemplateKWLoc,
                           UnqualifiedId &Result);
+  /// Parses the mapper modifier in map, to, and from clauses.
+  bool parseMapperModifier(OpenMPVarListDataTy &Data);
+  /// Parses map-type-modifiers in map clause.
+  /// map([ [map-type-modifier[,] [map-type-modifier[,] ...] map-type : ] list)
+  /// where, map-type-modifier ::= always | close | mapper(mapper-identifier)
+  bool parseMapTypeModifiers(OpenMPVarListDataTy &Data);
 
 private:
   //===--------------------------------------------------------------------===//
@@ -2967,7 +3015,6 @@
                                UnqualifiedId &TemplateName,
                                bool AllowTypeAnnotation = true);
   void AnnotateTemplateIdTokenAsType(bool IsClassName = false);
-  bool IsTemplateArgumentList(unsigned Skip = 0);
   bool ParseTemplateArgumentList(TemplateArgList &TemplateArgs);
   ParsedTemplateArgument ParseTemplateTemplateArgument();
   ParsedTemplateArgument ParseTemplateArgument();
@@ -2980,7 +3027,7 @@
 
   //===--------------------------------------------------------------------===//
   // Modules
-  DeclGroupPtrTy ParseModuleDecl();
+  DeclGroupPtrTy ParseModuleDecl(bool IsFirstDecl);
   Decl *ParseModuleImport(SourceLocation AtLoc);
   bool parseMisplacedModuleImport();
   bool tryParseMisplacedModuleImport() {
diff --git a/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h b/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h
index 5a3ff6c..84c5ac3 100644
--- a/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h
+++ b/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h
@@ -84,7 +84,16 @@
   /// in different buffers, this returns an empty string.
   ///
   /// Note that this method is not particularly efficient.
-  std::string getRewrittenText(SourceRange Range) const;
+  std::string getRewrittenText(CharSourceRange Range) const;
+
+  /// getRewrittenText - Return the rewritten form of the text in the specified
+  /// range.  If the start or end of the range was unrewritable or if they are
+  /// in different buffers, this returns an empty string.
+  ///
+  /// Note that this method is not particularly efficient.
+  std::string getRewrittenText(SourceRange Range) const {
+    return getRewrittenText(CharSourceRange::getTokenRange(Range));
+  }
 
   /// InsertText - Insert the specified string at the specified location in the
   /// original buffer.  This method returns true (and does nothing) if the input
@@ -141,6 +150,13 @@
   /// ReplaceText - This method replaces a range of characters in the input
   /// buffer with a new string.  This is effectively a combined "remove/insert"
   /// operation.
+  bool ReplaceText(CharSourceRange range, StringRef NewStr) {
+    return ReplaceText(range.getBegin(), getRangeSize(range), NewStr);
+  }
+
+  /// ReplaceText - This method replaces a range of characters in the input
+  /// buffer with a new string.  This is effectively a combined "remove/insert"
+  /// operation.
   bool ReplaceText(SourceRange range, StringRef NewStr) {
     return ReplaceText(range.getBegin(), getRangeSize(range), NewStr);
   }
diff --git a/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h b/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h
index d5df536..e13fe95 100644
--- a/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h
+++ b/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h
@@ -90,7 +90,7 @@
   AnalysisBasedWarnings(Sema &s);
 
   void IssueWarnings(Policy P, FunctionScopeInfo *fscope,
-                     const Decl *D, const BlockExpr *blkExpr);
+                     const Decl *D, QualType BlockType);
 
   Policy getDefaultPolicy() { return DefaultPolicy; }
 
diff --git a/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc b/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc
index b657936..093e84e 100644
--- a/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc
@@ -75,7 +75,7 @@
 }
 
 static bool isTargetarmthumbarmebthumbebavrx86x86_64msp430mipsmipselriscv32riscv64(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::armeb || T.getArch() == llvm::Triple::thumbeb || T.getArch() == llvm::Triple::avr || T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::msp430 || T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::riscv32 || T.getArch() == llvm::Triple::riscv64);
 }
 
@@ -89,7 +89,7 @@
 }
 
 static bool isTargetavr(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getArch() == llvm::Triple::avr);
 }
 
@@ -305,7 +305,7 @@
 }
 
 static bool isTargetx86x86_64(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64);
 }
 
@@ -463,6 +463,7 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_namespace, /*IsSupported=*/LangOpts.CPlusPlus));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_category, /*IsSupported=*/LangOpts.ObjC));
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_implementation, /*IsSupported=*/LangOpts.ObjC));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_property, /*IsSupported=*/LangOpts.ObjC));
@@ -547,7 +548,8 @@
 }
 
 static bool checkCUDALangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.CUDA)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.CUDA)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -845,7 +847,7 @@
 }
 
 static bool isTargetx86x86_64armthumbaarch64Win32(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32);
 }
 
@@ -935,9 +937,9 @@
   return true;
 }
 
-static bool isTargetx86x86_64armthumbaarch64Microsoft(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
-  return true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft);
+static bool isTargetx86x86_64armthumbaarch64(const TargetInfo &Target) {
+  const llvm::Triple &T = Target.getTriple(); (void)T;
+  return true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && ( Target.getCXXABI().isMicrosoft() );
 }
 
 static bool checkEnableIfAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
@@ -1016,6 +1018,7 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_namespace, /*IsSupported=*/LangOpts.CPlusPlus));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_category, /*IsSupported=*/LangOpts.ObjC));
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_implementation, /*IsSupported=*/LangOpts.ObjC));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_property, /*IsSupported=*/LangOpts.ObjC));
@@ -1069,19 +1072,6 @@
   return true;
 }
 
-static bool checkFortifyStdLibAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
-  if (!D || (!isa<FunctionDecl>(D))) {
-    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr << "functions";
-    return false;
-  }
-  return true;
-}
-
-static void matchRulesForFortifyStdLib(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
-  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
-}
-
 static bool checkGNUInlineAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
   if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
@@ -1113,6 +1103,28 @@
   return true;
 }
 
+static bool checkHIPPinnedShadowAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "variables";
+    return false;
+  }
+  return true;
+}
+
+static bool checkHIPLangOpts(Sema &S, const ParsedAttr &Attr) {
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.HIP)
+    return true;
+
+  S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
+  return false;
+}
+
+static void matchRulesForHIPPinnedShadow(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable, /*IsSupported=*/true));
+}
+
 static bool checkHotAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
   if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
@@ -1155,7 +1167,7 @@
 }
 
 static bool isTargetELF(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getObjectFormat() == llvm::Triple::ELF);
 }
 
@@ -1229,7 +1241,8 @@
 }
 
 static bool checkCPlusPlusLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.CPlusPlus)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.CPlusPlus)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -1287,8 +1300,33 @@
   }
 }
 
+static bool checkMIGServerRoutineAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D) && !isa<BlockDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "functions, Objective-C methods, and blocks";
+    return false;
+  }
+  return true;
+}
+
+static void matchRulesForMIGServerRoutine(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC));
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_block, /*IsSupported=*/LangOpts.Blocks));
+}
+
+static bool checkMSAllocatorAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "functions";
+    return false;
+  }
+  return true;
+}
+
 static bool checkMicrosoftExtLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.MicrosoftExt)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.MicrosoftExt)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -1345,7 +1383,7 @@
 }
 
 static bool isTargetmipsmipsel(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel);
 }
 
@@ -1403,7 +1441,7 @@
 }
 
 static bool isTargetmipsmipselmips64mips64el(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el);
 }
 
@@ -1537,15 +1575,16 @@
 }
 
 static bool checkNoDebugAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
-  if (!D || (!isFunctionLike(D) && !isa<ObjCMethodDecl>(D) && !isNonParmVar(D))) {
+  if (!D || (!isa<TypedefNameDecl>(D) && !isFunctionLike(D) && !isa<ObjCMethodDecl>(D) && !isNonParmVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr << "functions, function pointers, Objective-C methods, and variables";
+      << Attr << "typedefs, functions, function pointers, Objective-C methods, and variables";
     return false;
   }
   return true;
 }
 
 static void matchRulesForNoDebug(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_type_alias, /*IsSupported=*/true));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_hasType_functionType, /*IsSupported=*/true));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC));
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_not_is_parameter, /*IsSupported=*/true));
@@ -1725,16 +1764,36 @@
 }
 
 static bool checkNoThrowAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
-  if (!D || (!isa<FunctionDecl>(D))) {
+  if (!D || (!isFunctionLike(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr << "functions";
+      << Attr << "functions and function pointers";
     return false;
   }
   return true;
 }
 
 static void matchRulesForNoThrow(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
-  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_hasType_functionType, /*IsSupported=*/true));
+}
+
+static bool isNonBitField(const Decl *D) {
+  if (const auto *S = dyn_cast<FieldDecl>(D))
+    return !S->isBitField();
+  return false;
+}
+
+static bool checkNoUniqueAddressAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isNonBitField(D))) {
+    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
+      << Attr << "non-bit-field non-static data members";
+    return false;
+  }
+  return true;
+}
+
+static bool isTarget(const TargetInfo &Target) {
+  const llvm::Triple &T = Target.getTriple(); (void)T;
+  return true && ( Target.getCXXABI().isItaniumFamily() );
 }
 
 static bool checkNonNullAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
@@ -1898,6 +1957,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_record, /*IsSupported=*/true));
 }
 
+static bool checkObjCClassStubAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
+      << Attr << "Objective-C interfaces";
+    return false;
+  }
+  return true;
+}
+
+static bool checkObjCNonFragileRuntimeLangOpts(Sema &S, const ParsedAttr &Attr) {
+  auto &LangOpts = S.LangOpts;
+  if ((LangOpts.ObjCRuntime.allowsClassStubs()))
+    return true;
+
+  S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
+  return false;
+}
+
+static void matchRulesForObjCClassStub(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC));
+}
+
 static bool checkObjCDesignatedInitializerAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
   if (!D || (!isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
@@ -1947,7 +2028,8 @@
 }
 
 static bool checkObjCAutoRefCountLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.ObjCAutoRefCount)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.ObjCAutoRefCount)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -1975,16 +2057,17 @@
 }
 
 static bool checkObjCNonLazyClassAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
-  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D) && !isa<ObjCImplDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr << "Objective-C interfaces";
+      << Attr << "Objective-C interfaces and Objective-C implementation declarations";
     return false;
   }
   return true;
 }
 
 static bool checkObjCLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.ObjC)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.ObjC)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -1993,6 +2076,7 @@
 
 static void matchRulesForObjCNonLazyClass(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC));
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_implementation, /*IsSupported=*/LangOpts.ObjC));
 }
 
 static bool checkObjCPreciseLifetimeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
@@ -2161,7 +2245,8 @@
 }
 
 static bool checkOpenCLLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.OpenCL)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.OpenCL)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -2258,6 +2343,28 @@
   return true;
 }
 
+static unsigned PassObjectSizeAttrSpellingMap(const ParsedAttr &Attr) {
+  enum Spelling {
+    GNU_pass_object_size = 0,
+    CXX11_clang_pass_object_size = 1,
+    C2x_clang_pass_object_size = 2,
+    GNU_pass_dynamic_object_size = 3,
+    CXX11_clang_pass_dynamic_object_size = 4,
+    C2x_clang_pass_dynamic_object_size = 5
+  };
+
+  unsigned Idx = Attr.getAttributeSpellingListIndex();
+  switch (Idx) {
+    default: llvm_unreachable("Unknown spelling list index");
+    case 0: return GNU_pass_object_size;
+    case 1: return CXX11_clang_pass_object_size;
+    case 2: return C2x_clang_pass_object_size;
+    case 3: return GNU_pass_dynamic_object_size;
+    case 4: return CXX11_clang_pass_dynamic_object_size;
+    case 5: return C2x_clang_pass_dynamic_object_size;
+  }
+}
+
 static void matchRulesForPassObjectSize(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_parameter, /*IsSupported=*/true));
 }
@@ -2376,7 +2483,8 @@
 }
 
 static bool checkRenderScriptLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.RenderScript)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.RenderScript)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -2692,8 +2800,9 @@
   return true;
 }
 
-static bool checkNotCPlusPlusLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (!S.LangOpts.CPlusPlus)
+static bool checkCOnlyLangOpts(Sema &S, const ParsedAttr &Attr) {
+  auto &LangOpts = S.LangOpts;
+  if ((!LangOpts.CPlusPlus))
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -2801,7 +2910,8 @@
 }
 
 static bool checkMicrosoftExtBorlandLangOpts(Sema &S, const ParsedAttr &Attr) {
-  if (S.LangOpts.MicrosoftExt || S.LangOpts.Borland)
+  auto &LangOpts = S.LangOpts;
+  if (LangOpts.MicrosoftExt || LangOpts.Borland)
     return true;
 
   S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
@@ -2922,7 +3032,7 @@
 }
 
 static bool isTargetwasm32wasm64(const TargetInfo &Target) {
-  const llvm::Triple &T = Target.getTriple();
+  const llvm::Triple &T = Target.getTriple(); (void)T;
   return true && (T.getArch() == llvm::Triple::wasm32 || T.getArch() == llvm::Triple::wasm64);
 }
 
@@ -3077,7 +3187,7 @@
   { 0, 1, 0, 0, 0, 0, 1, 1, checkDestructorAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForDestructor },  // AT_Destructor
   { 3, 0, 0, 0, 0, 0, 0, 0, checkDiagnoseIfAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_DiagnoseIf
   { 0, 0, 0, 0, 0, 0, 0, 1, checkDisableTailCallsAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForDisableTailCalls },  // AT_DisableTailCalls
-  { 0, 0, 0, 1, 0, 0, 0, 0, checkEmptyBasesAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64Microsoft, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_EmptyBases
+  { 0, 0, 0, 1, 0, 0, 0, 0, checkEmptyBasesAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_EmptyBases
   { 2, 0, 0, 0, 0, 0, 0, 1, checkEnableIfAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForEnableIf },  // AT_EnableIf
   { 1, 0, 0, 0, 0, 0, 0, 1, checkEnumExtensibilityAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForEnumExtensibility },  // AT_EnumExtensibility
   { 0, 0, 0, 0, 0, 0, 0, 1, checkExcludeFromExplicitInstantiationAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForExcludeFromExplicitInstantiation },  // AT_ExcludeFromExplicitInstantiation
@@ -3090,10 +3200,10 @@
   { 0, 0, 0, 0, 0, 0, 1, 1, checkFlattenAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForFlatten },  // AT_Flatten
   { 3, 0, 0, 0, 0, 0, 1, 0, checkFormatAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Format
   { 1, 0, 0, 0, 0, 0, 1, 0, checkFormatArgAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_FormatArg
-  { 2, 0, 0, 0, 0, 0, 0, 1, checkFortifyStdLibAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForFortifyStdLib },  // AT_FortifyStdLib
   { 0, 0, 0, 0, 0, 0, 1, 1, checkGNUInlineAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForGNUInline },  // AT_GNUInline
   { 1, 0, 0, 0, 0, 0, 0, 0, checkGuardedByAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_GuardedBy
   { 0, 0, 0, 0, 0, 0, 0, 0, checkGuardedVarAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_GuardedVar
+  { 0, 0, 0, 0, 0, 0, 0, 1, checkHIPPinnedShadowAppertainsTo, checkHIPLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForHIPPinnedShadow },  // AT_HIPPinnedShadow
   { 0, 0, 0, 0, 0, 0, 1, 1, checkHotAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForHot },  // AT_Hot
   { 0, 0, 0, 0, 0, 0, 0, 1, checkIBActionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForIBAction },  // AT_IBAction
   { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_IBOutlet
@@ -3103,15 +3213,17 @@
   { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_IntelOclBicc
   { 0, 0, 0, 0, 0, 0, 0, 1, checkInternalLinkageAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForInternalLinkage },  // AT_InternalLinkage
   { 0, 0, 0, 0, 0, 0, 0, 1, checkLTOVisibilityPublicAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForLTOVisibilityPublic },  // AT_LTOVisibilityPublic
-  { 1, 0, 0, 1, 0, 0, 0, 0, checkLayoutVersionAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64Microsoft, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LayoutVersion
+  { 1, 0, 0, 1, 0, 0, 0, 0, checkLayoutVersionAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LayoutVersion
   { 0, 0, 0, 0, 1, 0, 0, 0, checkLifetimeBoundAppertainsTo, checkCPlusPlusLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LifetimeBound
   { 1, 0, 0, 0, 0, 0, 0, 0, checkLockReturnedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LockReturned
   { 0, 0, 0, 0, 0, 0, 0, 1, checkLockableAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForLockable },  // AT_Lockable
   { 0, 15, 0, 0, 0, 0, 0, 0, checkLocksExcludedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LocksExcluded
   { 3, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, LoopHintAttrSpellingMap, nullptr },  // AT_LoopHint
+  { 0, 0, 0, 0, 0, 0, 0, 1, checkMIGServerRoutineAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForMIGServerRoutine },  // AT_MIGServerRoutine
   { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSABI
+  { 0, 0, 0, 0, 0, 0, 0, 0, checkMSAllocatorAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSAllocator
   { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, checkMicrosoftExtLangOpts, defaultTargetRequirements, MSInheritanceAttrSpellingMap, nullptr },  // AT_MSInheritance
-  { 0, 0, 0, 1, 0, 0, 0, 0, checkMSNoVTableAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64Microsoft, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSNoVTable
+  { 0, 0, 0, 1, 0, 0, 0, 0, checkMSNoVTableAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSNoVTable
   { 0, 0, 0, 0, 0, 0, 1, 1, checkMSStructAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForMSStruct },  // AT_MSStruct
   { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MayAlias
   { 0, 0, 0, 1, 0, 0, 1, 1, checkMicroMipsAppertainsTo, defaultDiagnoseLangOpts, isTargetmipsmipsel, defaultSpellingIndexToSemanticSpelling, matchRulesForMicroMips },  // AT_MicroMips
@@ -3148,6 +3260,7 @@
   { 0, 0, 0, 0, 0, 0, 0, 1, checkNoStackProtectorAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoStackProtector },  // AT_NoStackProtector
   { 0, 0, 0, 0, 0, 0, 0, 1, checkNoThreadSafetyAnalysisAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoThreadSafetyAnalysis },  // AT_NoThreadSafetyAnalysis
   { 0, 0, 0, 0, 0, 0, 1, 1, checkNoThrowAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoThrow },  // AT_NoThrow
+  { 0, 0, 0, 1, 0, 0, 0, 0, checkNoUniqueAddressAppertainsTo, defaultDiagnoseLangOpts, isTarget, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_NoUniqueAddress
   { 0, 15, 0, 0, 0, 0, 1, 0, checkNonNullAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_NonNull
   { 0, 0, 0, 0, 0, 0, 0, 1, checkNotTailCalledAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNotTailCalled },  // AT_NotTailCalled
   { 0, 0, 0, 0, 0, 0, 0, 1, checkOSConsumedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForOSConsumed },  // AT_OSConsumed
@@ -3160,6 +3273,7 @@
   { 1, 0, 0, 0, 0, 0, 0, 1, checkObjCBridgeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForObjCBridge },  // AT_ObjCBridge
   { 1, 0, 0, 0, 0, 0, 0, 1, checkObjCBridgeMutableAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForObjCBridgeMutable },  // AT_ObjCBridgeMutable
   { 3, 0, 1, 0, 0, 0, 0, 1, checkObjCBridgeRelatedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForObjCBridgeRelated },  // AT_ObjCBridgeRelated
+  { 0, 0, 0, 0, 0, 0, 0, 1, checkObjCClassStubAppertainsTo, checkObjCNonFragileRuntimeLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForObjCClassStub },  // AT_ObjCClassStub
   { 0, 0, 0, 0, 0, 0, 0, 1, checkObjCDesignatedInitializerAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForObjCDesignatedInitializer },  // AT_ObjCDesignatedInitializer
   { 0, 0, 0, 0, 0, 0, 0, 1, checkObjCExceptionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForObjCException },  // AT_ObjCException
   { 0, 0, 0, 0, 0, 0, 0, 1, checkObjCExplicitProtocolImplAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForObjCExplicitProtocolImpl },  // AT_ObjCExplicitProtocolImpl
@@ -3196,7 +3310,7 @@
   { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Packed
   { 1, 0, 0, 0, 0, 0, 0, 1, checkParamTypestateAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForParamTypestate },  // AT_ParamTypestate
   { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Pascal
-  { 1, 0, 0, 0, 0, 0, 0, 1, checkPassObjectSizeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForPassObjectSize },  // AT_PassObjectSize
+  { 1, 0, 0, 0, 0, 0, 0, 1, checkPassObjectSizeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, PassObjectSizeAttrSpellingMap, matchRulesForPassObjectSize },  // AT_PassObjectSize
   { 1, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Pcs
   { 1, 0, 0, 0, 0, 0, 0, 0, checkPragmaClangBSSSectionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PragmaClangBSSSection
   { 1, 0, 0, 0, 0, 0, 0, 0, checkPragmaClangDataSectionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PragmaClangDataSection
@@ -3241,7 +3355,7 @@
   { 1, 0, 0, 0, 0, 0, 0, 1, checkTestTypestateAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForTestTypestate },  // AT_TestTypestate
   { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_ThisCall
   { 0, 0, 0, 0, 0, 0, 0, 0, checkThreadAppertainsTo, checkMicrosoftExtLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Thread
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, checkNotCPlusPlusLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_TransparentUnion
+  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, checkCOnlyLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_TransparentUnion
   { 0, 0, 0, 0, 0, 0, 0, 1, checkTrivialABIAppertainsTo, checkCPlusPlusLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForTrivialABI },  // AT_TrivialABI
   { 1, 15, 0, 0, 0, 0, 0, 0, checkTryAcquireCapabilityAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, TryAcquireCapabilityAttrSpellingMap, nullptr },  // AT_TryAcquireCapability
   { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_TypeNonNull
@@ -3291,6 +3405,8 @@
     return isa<NamespaceDecl>(D);
   case attr::SubjectMatchRule_objc_category:
     return isa<ObjCCategoryDecl>(D);
+  case attr::SubjectMatchRule_objc_implementation:
+    return isa<ObjCImplDecl>(D);
   case attr::SubjectMatchRule_objc_interface:
     return isa<ObjCInterfaceDecl>(D);
   case attr::SubjectMatchRule_objc_method:
diff --git a/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc b/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc
index 9ed0011..f3c28b4 100644
--- a/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc
@@ -829,7 +829,7 @@
       return ParsedAttr::AT_XRayLogArgs;	 // "xray_log_args"
     }
     break;
-  case 14:	 // 13 strings to match.
+  case 14:	 // 12 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 3 strings to match.
@@ -857,10 +857,6 @@
       if (memcmp(Name.data()+1, "evice_builtin", 13) != 0)
         break;
       return ParsedAttr::IgnoredAttribute;	 // "device_builtin"
-    case 'f':	 // 1 string to match.
-      if (memcmp(Name.data()+1, "ortify_stdlib", 13) != 0)
-        break;
-      return ParsedAttr::AT_FortifyStdLib;	 // "fortify_stdlib"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13) != 0)
         break;
@@ -898,7 +894,7 @@
       return ParsedAttr::AT_TestTypestate;	 // "test_typestate"
     }
     break;
-  case 15:	 // 13 strings to match.
+  case 15:	 // 14 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 3 strings to match.
@@ -933,13 +929,24 @@
       if (memcmp(Name.data()+1, "ot_tail_called", 14) != 0)
         break;
       return ParsedAttr::AT_NotTailCalled;	 // "not_tail_called"
-    case 'o':	 // 3 strings to match.
+    case 'o':	 // 4 strings to match.
       switch (Name[1]) {
       default: break;
-      case 'b':	 // 1 string to match.
-        if (memcmp(Name.data()+2, "jc_root_class", 13) != 0)
+      case 'b':	 // 2 strings to match.
+        if (memcmp(Name.data()+2, "jc_", 3) != 0)
           break;
-        return ParsedAttr::AT_ObjCRootClass;	 // "objc_root_class"
+        switch (Name[5]) {
+        default: break;
+        case 'c':	 // 1 string to match.
+          if (memcmp(Name.data()+6, "lass_stub", 9) != 0)
+            break;
+          return ParsedAttr::AT_ObjCClassStub;	 // "objc_class_stub"
+        case 'r':	 // 1 string to match.
+          if (memcmp(Name.data()+6, "oot_class", 9) != 0)
+            break;
+          return ParsedAttr::AT_ObjCRootClass;	 // "objc_root_class"
+        }
+        break;
       case 'w':	 // 2 strings to match.
         if (memcmp(Name.data()+2, "nership_", 8) != 0)
           break;
@@ -1017,7 +1024,7 @@
       return ParsedAttr::AT_ReturnTypestate;	 // "return_typestate"
     }
     break;
-  case 17:	 // 6 strings to match.
+  case 17:	 // 7 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 2 strings to match.
@@ -1033,6 +1040,10 @@
         return ParsedAttr::AT_AssertCapability;	 // "assert_capability"
       }
       break;
+    case 'h':	 // 1 string to match.
+      if (memcmp(Name.data()+1, "ip_pinned_shadow", 16) != 0)
+        break;
+      return ParsedAttr::AT_HIPPinnedShadow;	 // "hip_pinned_shadow"
     case 'o':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
@@ -1056,7 +1067,7 @@
       return ParsedAttr::AT_TransparentUnion;	 // "transparent_union"
     }
     break;
-  case 18:	 // 16 strings to match.
+  case 18:	 // 17 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 3 strings to match.
@@ -1092,6 +1103,10 @@
       if (memcmp(Name.data()+1, "boutletcollection", 17) != 0)
         break;
       return ParsedAttr::AT_IBOutletCollection;	 // "iboutletcollection"
+    case 'm':	 // 1 string to match.
+      if (memcmp(Name.data()+1, "ig_server_routine", 17) != 0)
+        break;
+      return ParsedAttr::AT_MIGServerRoutine;	 // "mig_server_routine"
     case 'n':	 // 3 strings to match.
       if (memcmp(Name.data()+1, "o_s", 3) != 0)
         break;
@@ -1372,7 +1387,7 @@
       return ParsedAttr::AT_SharedTrylockFunction;	 // "shared_trylock_function"
     }
     break;
-  case 24:	 // 3 strings to match.
+  case 24:	 // 4 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 1 string to match.
@@ -1387,6 +1402,10 @@
       if (memcmp(Name.data()+1, "bjc_externally_retained", 23) != 0)
         break;
       return ParsedAttr::AT_ObjCExternallyRetained;	 // "objc_externally_retained"
+    case 'p':	 // 1 string to match.
+      if (memcmp(Name.data()+1, "ass_dynamic_object_size", 23) != 0)
+        break;
+      return ParsedAttr::AT_PassObjectSize;	 // "pass_dynamic_object_size"
     }
     break;
   case 25:	 // 5 strings to match.
@@ -1644,9 +1663,13 @@
       return ParsedAttr::AT_Restrict;	 // "restrict"
     }
     break;
-  case 9:	 // 3 strings to match.
+  case 9:	 // 4 strings to match.
     switch (Name[0]) {
     default: break;
+    case 'a':	 // 1 string to match.
+      if (memcmp(Name.data()+1, "llocator", 8) != 0)
+        break;
+      return ParsedAttr::AT_MSAllocator;	 // "allocator"
     case 'd':	 // 2 strings to match.
       if (memcmp(Name.data()+1, "ll", 2) != 0)
         break;
@@ -1747,6 +1770,10 @@
       return ParsedAttr::IgnoredAttribute;	 // "__device_builtin__"
     }
     break;
+  case 21:	 // 1 string to match.
+    if (memcmp(Name.data()+0, "__hip_pinned_shadow__", 21) != 0)
+      break;
+    return ParsedAttr::AT_HIPPinnedShadow;	 // "__hip_pinned_shadow__"
   case 31:	 // 2 strings to match.
     if (memcmp(Name.data()+0, "__device_builtin_", 17) != 0)
       break;
@@ -2472,9 +2499,13 @@
       break;
     }
     break;
-  case 19:	 // 8 strings to match.
+  case 19:	 // 9 strings to match.
     switch (Name[0]) {
     default: break;
+    case ':':	 // 1 string to match.
+      if (memcmp(Name.data()+1, ":no_unique_address", 18) != 0)
+        break;
+      return ParsedAttr::AT_NoUniqueAddress;	 // "::no_unique_address"
     case 'c':	 // 6 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
@@ -2600,7 +2631,7 @@
       return ParsedAttr::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
     }
     break;
-  case 21:	 // 7 strings to match.
+  case 21:	 // 6 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -2609,10 +2640,6 @@
       if (memcmp(Name.data()+8, "lways_destroy", 13) != 0)
         break;
       return ParsedAttr::AT_AlwaysDestroy;	 // "clang::always_destroy"
-    case 'f':	 // 1 string to match.
-      if (memcmp(Name.data()+8, "ortify_stdlib", 13) != 0)
-        break;
-      return ParsedAttr::AT_FortifyStdLib;	 // "clang::fortify_stdlib"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
         break;
@@ -2642,10 +2669,10 @@
       return ParsedAttr::AT_TestTypestate;	 // "clang::test_typestate"
     }
     break;
-  case 22:	 // 11 strings to match.
+  case 22:	 // 12 strings to match.
     switch (Name[0]) {
     default: break;
-    case 'c':	 // 10 strings to match.
+    case 'c':	 // 11 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
       switch (Name[7]) {
@@ -2669,13 +2696,24 @@
         if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
           break;
         return ParsedAttr::AT_NotTailCalled;	 // "clang::not_tail_called"
-      case 'o':	 // 3 strings to match.
+      case 'o':	 // 4 strings to match.
         switch (Name[8]) {
         default: break;
-        case 'b':	 // 1 string to match.
-          if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
+        case 'b':	 // 2 strings to match.
+          if (memcmp(Name.data()+9, "jc_", 3) != 0)
             break;
-          return ParsedAttr::AT_ObjCRootClass;	 // "clang::objc_root_class"
+          switch (Name[12]) {
+          default: break;
+          case 'c':	 // 1 string to match.
+            if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
+              break;
+            return ParsedAttr::AT_ObjCClassStub;	 // "clang::objc_class_stub"
+          case 'r':	 // 1 string to match.
+            if (memcmp(Name.data()+13, "oot_class", 9) != 0)
+              break;
+            return ParsedAttr::AT_ObjCRootClass;	 // "clang::objc_root_class"
+          }
+          break;
         case 'w':	 // 2 strings to match.
           if (memcmp(Name.data()+9, "nership_", 8) != 0)
             break;
@@ -2814,7 +2852,7 @@
       return ParsedAttr::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_address"
     }
     break;
-  case 25:	 // 12 strings to match.
+  case 25:	 // 13 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -2844,6 +2882,10 @@
       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
         break;
       return ParsedAttr::AT_IBOutletCollection;	 // "clang::iboutletcollection"
+    case 'm':	 // 1 string to match.
+      if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
+        break;
+      return ParsedAttr::AT_MIGServerRoutine;	 // "clang::mig_server_routine"
     case 'n':	 // 2 strings to match.
       if (memcmp(Name.data()+8, "o_s", 3) != 0)
         break;
@@ -3100,10 +3142,10 @@
       return ParsedAttr::AT_AnyX86NoCallerSavedRegisters;	 // "gnu::no_caller_saved_registers"
     }
     break;
-  case 31:	 // 4 strings to match.
+  case 31:	 // 5 strings to match.
     switch (Name[0]) {
     default: break;
-    case 'c':	 // 3 strings to match.
+    case 'c':	 // 4 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
       switch (Name[7]) {
@@ -3120,6 +3162,10 @@
         if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
           break;
         return ParsedAttr::AT_ObjCExternallyRetained;	 // "clang::objc_externally_retained"
+      case 'p':	 // 1 string to match.
+        if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
+          break;
+        return ParsedAttr::AT_PassObjectSize;	 // "clang::pass_dynamic_object_size"
       }
       break;
     case 'g':	 // 1 string to match.
@@ -3542,33 +3588,22 @@
       return ParsedAttr::AT_XRayLogArgs;	 // "clang::xray_log_args"
     }
     break;
-  case 21:	 // 3 strings to match.
-    if (memcmp(Name.data()+0, "clang::", 7) != 0)
+  case 21:	 // 2 strings to match.
+    if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
       break;
-    switch (Name[7]) {
+    switch (Name[12]) {
     default: break;
-    case 'f':	 // 1 string to match.
-      if (memcmp(Name.data()+8, "ortify_stdlib", 13) != 0)
+    case 'e':	 // 1 string to match.
+      if (memcmp(Name.data()+13, "xception", 8) != 0)
         break;
-      return ParsedAttr::AT_FortifyStdLib;	 // "clang::fortify_stdlib"
-    case 'o':	 // 2 strings to match.
-      if (memcmp(Name.data()+8, "bjc_", 4) != 0)
+      return ParsedAttr::AT_ObjCException;	 // "clang::objc_exception"
+    case 'o':	 // 1 string to match.
+      if (memcmp(Name.data()+13, "wnership", 8) != 0)
         break;
-      switch (Name[12]) {
-      default: break;
-      case 'e':	 // 1 string to match.
-        if (memcmp(Name.data()+13, "xception", 8) != 0)
-          break;
-        return ParsedAttr::AT_ObjCException;	 // "clang::objc_exception"
-      case 'o':	 // 1 string to match.
-        if (memcmp(Name.data()+13, "wnership", 8) != 0)
-          break;
-        return ParsedAttr::AT_ObjCOwnership;	 // "clang::objc_ownership"
-      }
-      break;
+      return ParsedAttr::AT_ObjCOwnership;	 // "clang::objc_ownership"
     }
     break;
-  case 22:	 // 5 strings to match.
+  case 22:	 // 6 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -3577,13 +3612,24 @@
       if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
         break;
       return ParsedAttr::AT_NotTailCalled;	 // "clang::not_tail_called"
-    case 'o':	 // 3 strings to match.
+    case 'o':	 // 4 strings to match.
       switch (Name[8]) {
       default: break;
-      case 'b':	 // 1 string to match.
-        if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
+      case 'b':	 // 2 strings to match.
+        if (memcmp(Name.data()+9, "jc_", 3) != 0)
           break;
-        return ParsedAttr::AT_ObjCRootClass;	 // "clang::objc_root_class"
+        switch (Name[12]) {
+        default: break;
+        case 'c':	 // 1 string to match.
+          if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
+            break;
+          return ParsedAttr::AT_ObjCClassStub;	 // "clang::objc_class_stub"
+        case 'r':	 // 1 string to match.
+          if (memcmp(Name.data()+13, "oot_class", 9) != 0)
+            break;
+          return ParsedAttr::AT_ObjCRootClass;	 // "clang::objc_root_class"
+        }
+        break;
       case 'w':	 // 2 strings to match.
         if (memcmp(Name.data()+9, "nership_", 8) != 0)
           break;
@@ -3658,7 +3704,7 @@
       return ParsedAttr::AT_Ownership;	 // "clang::ownership_returns"
     }
     break;
-  case 25:	 // 9 strings to match.
+  case 25:	 // 10 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -3679,6 +3725,10 @@
       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
         break;
       return ParsedAttr::AT_IBOutletCollection;	 // "clang::iboutletcollection"
+    case 'm':	 // 1 string to match.
+      if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
+        break;
+      return ParsedAttr::AT_MIGServerRoutine;	 // "clang::mig_server_routine"
     case 'n':	 // 2 strings to match.
       if (memcmp(Name.data()+8, "o_s", 3) != 0)
         break;
@@ -3879,10 +3929,21 @@
       return ParsedAttr::AT_OSReturnsNotRetained;	 // "clang::os_returns_not_retained"
     }
     break;
-  case 31:	 // 1 string to match.
-    if (memcmp(Name.data()+0, "clang::objc_externally_retained", 31) != 0)
+  case 31:	 // 2 strings to match.
+    if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
-    return ParsedAttr::AT_ObjCExternallyRetained;	 // "clang::objc_externally_retained"
+    switch (Name[7]) {
+    default: break;
+    case 'o':	 // 1 string to match.
+      if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
+        break;
+      return ParsedAttr::AT_ObjCExternallyRetained;	 // "clang::objc_externally_retained"
+    case 'p':	 // 1 string to match.
+      if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
+        break;
+      return ParsedAttr::AT_PassObjectSize;	 // "clang::pass_dynamic_object_size"
+    }
+    break;
   case 32:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::no_thread_safety_analysis", 32) != 0)
       break;
diff --git a/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc b/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc
index d4f3fd2..fafa7e2 100644
--- a/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc
@@ -93,10 +93,10 @@
 PARSED_ATTR(Flatten)
 PARSED_ATTR(Format)
 PARSED_ATTR(FormatArg)
-PARSED_ATTR(FortifyStdLib)
 PARSED_ATTR(GNUInline)
 PARSED_ATTR(GuardedBy)
 PARSED_ATTR(GuardedVar)
+PARSED_ATTR(HIPPinnedShadow)
 PARSED_ATTR(Hot)
 PARSED_ATTR(IBAction)
 PARSED_ATTR(IBOutlet)
@@ -112,7 +112,9 @@
 PARSED_ATTR(Lockable)
 PARSED_ATTR(LocksExcluded)
 PARSED_ATTR(LoopHint)
+PARSED_ATTR(MIGServerRoutine)
 PARSED_ATTR(MSABI)
+PARSED_ATTR(MSAllocator)
 PARSED_ATTR(MSInheritance)
 PARSED_ATTR(MSNoVTable)
 PARSED_ATTR(MSStruct)
@@ -151,6 +153,7 @@
 PARSED_ATTR(NoStackProtector)
 PARSED_ATTR(NoThreadSafetyAnalysis)
 PARSED_ATTR(NoThrow)
+PARSED_ATTR(NoUniqueAddress)
 PARSED_ATTR(NonNull)
 PARSED_ATTR(NotTailCalled)
 PARSED_ATTR(OSConsumed)
@@ -163,6 +166,7 @@
 PARSED_ATTR(ObjCBridge)
 PARSED_ATTR(ObjCBridgeMutable)
 PARSED_ATTR(ObjCBridgeRelated)
+PARSED_ATTR(ObjCClassStub)
 PARSED_ATTR(ObjCDesignatedInitializer)
 PARSED_ATTR(ObjCException)
 PARSED_ATTR(ObjCExplicitProtocolImpl)
diff --git a/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc b/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc
index 9056388..b3813a1 100644
--- a/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc
@@ -650,15 +650,6 @@
         return 1;
     break;
   }
-  case AT_FortifyStdLib: {
-    if (Name == "fortify_stdlib" && SyntaxUsed == 0 && Scope == "")
-        return 0;
-    if (Name == "fortify_stdlib" && SyntaxUsed == 1 && Scope == "clang")
-        return 1;
-    if (Name == "fortify_stdlib" && SyntaxUsed == 2 && Scope == "clang")
-        return 2;
-    break;
-  }
   case AT_GNUInline: {
     if (Name == "gnu_inline" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -678,6 +669,13 @@
         return 1;
     break;
   }
+  case AT_HIPPinnedShadow: {
+    if (Name == "hip_pinned_shadow" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "__hip_pinned_shadow__" && SyntaxUsed == 3 && Scope == "")
+        return 1;
+    break;
+  }
   case AT_Hot: {
     if (Name == "hot" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -791,6 +789,15 @@
         return 4;
     break;
   }
+  case AT_MIGServerRoutine: {
+    if (Name == "mig_server_routine" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "mig_server_routine" && SyntaxUsed == 1 && Scope == "clang")
+        return 1;
+    if (Name == "mig_server_routine" && SyntaxUsed == 2 && Scope == "clang")
+        return 2;
+    break;
+  }
   case AT_MSABI: {
     if (Name == "ms_abi" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -798,6 +805,11 @@
         return 1;
     break;
   }
+  case AT_MSAllocator: {
+    if (Name == "allocator" && SyntaxUsed == 3 && Scope == "")
+        return 0;
+    break;
+  }
   case AT_MSInheritance: {
     if (Name == "__single_inheritance" && SyntaxUsed == 5 && Scope == "")
         return 0;
@@ -1126,6 +1138,11 @@
         return 2;
     break;
   }
+  case AT_NoUniqueAddress: {
+    if (Name == "no_unique_address" && SyntaxUsed == 1 && Scope == "")
+        return 0;
+    break;
+  }
   case AT_NonNull: {
     if (Name == "nonnull" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -1232,6 +1249,15 @@
         return 2;
     break;
   }
+  case AT_ObjCClassStub: {
+    if (Name == "objc_class_stub" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "objc_class_stub" && SyntaxUsed == 1 && Scope == "clang")
+        return 1;
+    if (Name == "objc_class_stub" && SyntaxUsed == 2 && Scope == "clang")
+        return 2;
+    break;
+  }
   case AT_ObjCDesignatedInitializer: {
     if (Name == "objc_designated_initializer" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -1549,6 +1575,12 @@
         return 1;
     if (Name == "pass_object_size" && SyntaxUsed == 2 && Scope == "clang")
         return 2;
+    if (Name == "pass_dynamic_object_size" && SyntaxUsed == 0 && Scope == "")
+        return 3;
+    if (Name == "pass_dynamic_object_size" && SyntaxUsed == 1 && Scope == "clang")
+        return 4;
+    if (Name == "pass_dynamic_object_size" && SyntaxUsed == 2 && Scope == "clang")
+        return 5;
     break;
   }
   case AT_Pcs: {
diff --git a/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc b/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc
index 860b9c4..32d43d4 100644
--- a/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc
@@ -463,10 +463,6 @@
       const auto *A = cast<FormatArgAttr>(At);
       return A->clone(C);
     }
-    case attr::FortifyStdLib: {
-      const auto *A = cast<FortifyStdLibAttr>(At);
-      return A->clone(C);
-    }
     case attr::GNUInline: {
       const auto *A = cast<GNUInlineAttr>(At);
       return A->clone(C);
@@ -485,6 +481,10 @@
       const auto *A = cast<GuardedVarAttr>(At);
       return A->clone(C);
     }
+    case attr::HIPPinnedShadow: {
+      const auto *A = cast<HIPPinnedShadowAttr>(At);
+      return A->clone(C);
+    }
     case attr::Hot: {
       const auto *A = cast<HotAttr>(At);
       return A->clone(C);
@@ -562,10 +562,18 @@
       const auto *A = cast<LoopHintAttr>(At);
       return A->clone(C);
     }
+    case attr::MIGServerRoutine: {
+      const auto *A = cast<MIGServerRoutineAttr>(At);
+      return A->clone(C);
+    }
     case attr::MSABI: {
       const auto *A = cast<MSABIAttr>(At);
       return A->clone(C);
     }
+    case attr::MSAllocator: {
+      const auto *A = cast<MSAllocatorAttr>(At);
+      return A->clone(C);
+    }
     case attr::MSInheritance: {
       const auto *A = cast<MSInheritanceAttr>(At);
       return A->clone(C);
@@ -722,6 +730,10 @@
       const auto *A = cast<NoThrowAttr>(At);
       return A->clone(C);
     }
+    case attr::NoUniqueAddress: {
+      const auto *A = cast<NoUniqueAddressAttr>(At);
+      return A->clone(C);
+    }
     case attr::NonNull: {
       const auto *A = cast<NonNullAttr>(At);
       return A->clone(C);
@@ -730,6 +742,10 @@
       const auto *A = cast<NotTailCalledAttr>(At);
       return A->clone(C);
     }
+    case attr::OMPAllocateDecl: {
+      const auto *A = cast<OMPAllocateDeclAttr>(At);
+      return A->clone(C);
+    }
     case attr::OMPCaptureKind: {
       const auto *A = cast<OMPCaptureKindAttr>(At);
       return A->clone(C);
@@ -794,6 +810,10 @@
       const auto *A = cast<ObjCBridgeRelatedAttr>(At);
       return A->clone(C);
     }
+    case attr::ObjCClassStub: {
+      const auto *A = cast<ObjCClassStubAttr>(At);
+      return A->clone(C);
+    }
     case attr::ObjCDesignatedInitializer: {
       const auto *A = cast<ObjCDesignatedInitializerAttr>(At);
       return A->clone(C);
@@ -1573,9 +1593,6 @@
     case attr::FormatArg: {
       return nullptr;
     }
-    case attr::FortifyStdLib: {
-      return nullptr;
-    }
     case attr::GNUInline: {
       return nullptr;
     }
@@ -1585,6 +1602,9 @@
     case attr::GuardedVar: {
       return nullptr;
     }
+    case attr::HIPPinnedShadow: {
+      return nullptr;
+    }
     case attr::Hot: {
       return nullptr;
     }
@@ -1630,9 +1650,15 @@
     case attr::LoopHint: {
       return nullptr;
     }
+    case attr::MIGServerRoutine: {
+      return nullptr;
+    }
     case attr::MSABI: {
       return nullptr;
     }
+    case attr::MSAllocator: {
+      return nullptr;
+    }
     case attr::MSInheritance: {
       return nullptr;
     }
@@ -1750,12 +1776,18 @@
     case attr::NoThrow: {
       return nullptr;
     }
+    case attr::NoUniqueAddress: {
+      return nullptr;
+    }
     case attr::NonNull: {
       return nullptr;
     }
     case attr::NotTailCalled: {
       return nullptr;
     }
+    case attr::OMPAllocateDecl: {
+      return nullptr;
+    }
     case attr::OMPCaptureKind: {
       return nullptr;
     }
@@ -1804,6 +1836,9 @@
     case attr::ObjCBridgeRelated: {
       return nullptr;
     }
+    case attr::ObjCClassStub: {
+      return nullptr;
+    }
     case attr::ObjCDesignatedInitializer: {
       return nullptr;
     }
diff --git a/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h b/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h
index 72ba8bf..f7d073f 100644
--- a/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h
+++ b/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h
@@ -992,10 +992,6 @@
 protected:
   const CodeCompleteOptions CodeCompleteOpts;
 
-  /// Whether the output format for the code-completion consumer is
-  /// binary.
-  bool OutputIsBinary;
-
 public:
   class OverloadCandidate {
   public:
@@ -1066,9 +1062,8 @@
                                       bool IncludeBriefComments) const;
   };
 
-  CodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts,
-                       bool OutputIsBinary)
-      : CodeCompleteOpts(CodeCompleteOpts), OutputIsBinary(OutputIsBinary) {}
+  CodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts)
+      : CodeCompleteOpts(CodeCompleteOpts) {}
 
   /// Whether the code-completion consumer wants to see macros.
   bool includeMacros() const {
@@ -1106,9 +1101,6 @@
     return CodeCompleteOpts.LoadExternal;
   }
 
-  /// Determine whether the output of this consumer is binary.
-  bool isOutputBinary() const { return OutputIsBinary; }
-
   /// Deregisters and destroys this code-completion consumer.
   virtual ~CodeCompleteConsumer();
 
@@ -1181,7 +1173,7 @@
   /// results to the given raw output stream.
   PrintingCodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts,
                                raw_ostream &OS)
-      : CodeCompleteConsumer(CodeCompleteOpts, false), OS(OS),
+      : CodeCompleteConsumer(CodeCompleteOpts), OS(OS),
         CCTUInfo(std::make_shared<GlobalCodeCompletionAllocator>()) {}
 
   /// Prints the finalized code-completion results.
diff --git a/linux-x64/clang/include/clang/Sema/DeclSpec.h b/linux-x64/clang/include/clang/Sema/DeclSpec.h
index babdc9d..b417f89 100644
--- a/linux-x64/clang/include/clang/Sema/DeclSpec.h
+++ b/linux-x64/clang/include/clang/Sema/DeclSpec.h
@@ -22,6 +22,7 @@
 #ifndef LLVM_CLANG_SEMA_DECLSPEC_H
 #define LLVM_CLANG_SEMA_DECLSPEC_H
 
+#include "clang/AST/DeclCXX.h"
 #include "clang/AST/NestedNameSpecifier.h"
 #include "clang/Basic/ExceptionSpecificationType.h"
 #include "clang/Basic/Lambda.h"
@@ -356,14 +357,13 @@
   unsigned FS_inline_specified : 1;
   unsigned FS_forceinline_specified: 1;
   unsigned FS_virtual_specified : 1;
-  unsigned FS_explicit_specified : 1;
   unsigned FS_noreturn_specified : 1;
 
   // friend-specifier
   unsigned Friend_specified : 1;
 
   // constexpr-specifier
-  unsigned Constexpr_specified : 1;
+  unsigned ConstexprSpecifier : 2;
 
   union {
     UnionParsedType TypeRep;
@@ -371,6 +371,9 @@
     Expr *ExprRep;
   };
 
+  /// ExplicitSpecifier - Store information about explicit spicifer.
+  ExplicitSpecifier FS_explicit_specifier;
+
   // attributes.
   ParsedAttributes Attrs;
 
@@ -393,6 +396,7 @@
   SourceLocation TQ_constLoc, TQ_restrictLoc, TQ_volatileLoc, TQ_atomicLoc,
       TQ_unalignedLoc;
   SourceLocation FS_inlineLoc, FS_virtualLoc, FS_explicitLoc, FS_noreturnLoc;
+  SourceLocation FS_explicitCloseParenLoc;
   SourceLocation FS_forceinlineLoc;
   SourceLocation FriendLoc, ModulePrivateLoc, ConstexprLoc;
   SourceLocation TQ_pipeLoc;
@@ -420,31 +424,18 @@
   }
 
   DeclSpec(AttributeFactory &attrFactory)
-    : StorageClassSpec(SCS_unspecified),
-      ThreadStorageClassSpec(TSCS_unspecified),
-      SCS_extern_in_linkage_spec(false),
-      TypeSpecWidth(TSW_unspecified),
-      TypeSpecComplex(TSC_unspecified),
-      TypeSpecSign(TSS_unspecified),
-      TypeSpecType(TST_unspecified),
-      TypeAltiVecVector(false),
-      TypeAltiVecPixel(false),
-      TypeAltiVecBool(false),
-      TypeSpecOwned(false),
-      TypeSpecPipe(false),
-      TypeSpecSat(false),
-      TypeQualifiers(TQ_unspecified),
-      FS_inline_specified(false),
-      FS_forceinline_specified(false),
-      FS_virtual_specified(false),
-      FS_explicit_specified(false),
-      FS_noreturn_specified(false),
-      Friend_specified(false),
-      Constexpr_specified(false),
-      Attrs(attrFactory),
-      writtenBS(),
-      ObjCQualifiers(nullptr) {
-  }
+      : StorageClassSpec(SCS_unspecified),
+        ThreadStorageClassSpec(TSCS_unspecified),
+        SCS_extern_in_linkage_spec(false), TypeSpecWidth(TSW_unspecified),
+        TypeSpecComplex(TSC_unspecified), TypeSpecSign(TSS_unspecified),
+        TypeSpecType(TST_unspecified), TypeAltiVecVector(false),
+        TypeAltiVecPixel(false), TypeAltiVecBool(false), TypeSpecOwned(false),
+        TypeSpecPipe(false), TypeSpecSat(false), TypeQualifiers(TQ_unspecified),
+        FS_inline_specified(false), FS_forceinline_specified(false),
+        FS_virtual_specified(false), FS_noreturn_specified(false),
+        Friend_specified(false), ConstexprSpecifier(CSK_unspecified),
+        FS_explicit_specifier(), Attrs(attrFactory), writtenBS(),
+        ObjCQualifiers(nullptr) {}
 
   // storage-class-specifier
   SCS getStorageClassSpec() const { return (SCS)StorageClassSpec; }
@@ -539,6 +530,7 @@
   static const char *getSpecifierName(DeclSpec::TSW W);
   static const char *getSpecifierName(DeclSpec::SCS S);
   static const char *getSpecifierName(DeclSpec::TSCS S);
+  static const char *getSpecifierName(ConstexprSpecKind C);
 
   // type-qualifiers
 
@@ -570,11 +562,22 @@
     return FS_inline_specified ? FS_inlineLoc : FS_forceinlineLoc;
   }
 
+  ExplicitSpecifier getExplicitSpecifier() const {
+    return FS_explicit_specifier;
+  }
+
   bool isVirtualSpecified() const { return FS_virtual_specified; }
   SourceLocation getVirtualSpecLoc() const { return FS_virtualLoc; }
 
-  bool isExplicitSpecified() const { return FS_explicit_specified; }
+  bool hasExplicitSpecifier() const {
+    return FS_explicit_specifier.isSpecified();
+  }
   SourceLocation getExplicitSpecLoc() const { return FS_explicitLoc; }
+  SourceRange getExplicitSpecRange() const {
+    return FS_explicit_specifier.getExpr()
+               ? SourceRange(FS_explicitLoc, FS_explicitCloseParenLoc)
+               : SourceRange(FS_explicitLoc);
+  }
 
   bool isNoreturnSpecified() const { return FS_noreturn_specified; }
   SourceLocation getNoreturnSpecLoc() const { return FS_noreturnLoc; }
@@ -586,8 +589,9 @@
     FS_forceinlineLoc = SourceLocation();
     FS_virtual_specified = false;
     FS_virtualLoc = SourceLocation();
-    FS_explicit_specified = false;
+    FS_explicit_specifier = ExplicitSpecifier();
     FS_explicitLoc = SourceLocation();
+    FS_explicitCloseParenLoc = SourceLocation();
     FS_noreturn_specified = false;
     FS_noreturnLoc = SourceLocation();
   }
@@ -706,7 +710,8 @@
   bool setFunctionSpecVirtual(SourceLocation Loc, const char *&PrevSpec,
                               unsigned &DiagID);
   bool setFunctionSpecExplicit(SourceLocation Loc, const char *&PrevSpec,
-                               unsigned &DiagID);
+                               unsigned &DiagID, ExplicitSpecifier ExplicitSpec,
+                               SourceLocation CloseParenLoc);
   bool setFunctionSpecNoreturn(SourceLocation Loc, const char *&PrevSpec,
                                unsigned &DiagID);
 
@@ -714,8 +719,8 @@
                      unsigned &DiagID);
   bool setModulePrivateSpec(SourceLocation Loc, const char *&PrevSpec,
                             unsigned &DiagID);
-  bool SetConstexprSpec(SourceLocation Loc, const char *&PrevSpec,
-                        unsigned &DiagID);
+  bool SetConstexprSpec(ConstexprSpecKind ConstexprKind, SourceLocation Loc,
+                        const char *&PrevSpec, unsigned &DiagID);
 
   bool isFriendSpecified() const { return Friend_specified; }
   SourceLocation getFriendSpecLoc() const { return FriendLoc; }
@@ -723,11 +728,17 @@
   bool isModulePrivateSpecified() const { return ModulePrivateLoc.isValid(); }
   SourceLocation getModulePrivateSpecLoc() const { return ModulePrivateLoc; }
 
-  bool isConstexprSpecified() const { return Constexpr_specified; }
+  ConstexprSpecKind getConstexprSpecifier() const {
+    return ConstexprSpecKind(ConstexprSpecifier);
+  }
+
   SourceLocation getConstexprSpecLoc() const { return ConstexprLoc; }
+  bool hasConstexprSpecifier() const {
+    return ConstexprSpecifier != CSK_unspecified;
+  }
 
   void ClearConstexprSpec() {
-    Constexpr_specified = false;
+    ConstexprSpecifier = CSK_unspecified;
     ConstexprLoc = SourceLocation();
   }
 
diff --git a/linux-x64/clang/include/clang/Sema/Initialization.h b/linux-x64/clang/include/clang/Sema/Initialization.h
index 8efa2e7..f726f38 100644
--- a/linux-x64/clang/include/clang/Sema/Initialization.h
+++ b/linux-x64/clang/include/clang/Sema/Initialization.h
@@ -386,6 +386,8 @@
   }
 
   /// Create the initialization entity for a lambda capture.
+  ///
+  /// \p VarID The name of the entity being captured, or nullptr for 'this'.
   static InitializedEntity InitializeLambdaCapture(IdentifierInfo *VarID,
                                                    QualType FieldType,
                                                    SourceLocation Loc) {
@@ -509,7 +511,7 @@
   /// For a lambda capture, return the capture's name.
   StringRef getCapturedVarName() const {
     assert(getKind() == EK_LambdaCapture && "Not a lambda capture!");
-    return Capture.VarID->getName();
+    return Capture.VarID ? Capture.VarID->getName() : "this";
   }
 
   /// Determine the location of the capture when initializing
@@ -819,9 +821,6 @@
     /// Perform a conversion adding _Atomic to a type.
     SK_AtomicConversion,
 
-    /// Perform a load from a glvalue, producing an rvalue.
-    SK_LValueToRValue,
-
     /// Perform an implicit conversion sequence.
     SK_ConversionSequence,
 
@@ -1010,6 +1009,9 @@
     /// Reference binding drops qualifiers.
     FK_ReferenceInitDropsQualifiers,
 
+    /// Reference with mismatching address space binding to temporary.
+    FK_ReferenceAddrspaceMismatchTemporary,
+
     /// Reference binding failed.
     FK_ReferenceInitFailed,
 
@@ -1265,12 +1267,6 @@
   /// type.
   void AddAtomicConversionStep(QualType Ty);
 
-  /// Add a new step that performs a load of the given type.
-  ///
-  /// Although the term "LValueToRValue" is conventional, this applies to both
-  /// lvalues and xvalues.
-  void AddLValueToRValueStep(QualType Ty);
-
   /// Add a new step that applies an implicit conversion sequence.
   void AddConversionSequenceStep(const ImplicitConversionSequence &ICS,
                                  QualType T, bool TopLevelOfInitList = false);
diff --git a/linux-x64/clang/include/clang/Sema/Lookup.h b/linux-x64/clang/include/clang/Sema/Lookup.h
index 990005f..0466d06 100644
--- a/linux-x64/clang/include/clang/Sema/Lookup.h
+++ b/linux-x64/clang/include/clang/Sema/Lookup.h
@@ -172,7 +172,8 @@
       : SemaPtr(Other.SemaPtr), NameInfo(Other.NameInfo),
         LookupKind(Other.LookupKind), IDNS(Other.IDNS), Redecl(Other.Redecl),
         ExternalRedecl(Other.ExternalRedecl), HideTags(Other.HideTags),
-        AllowHidden(Other.AllowHidden) {}
+        AllowHidden(Other.AllowHidden),
+        TemplateNameLookup(Other.TemplateNameLookup) {}
 
   // FIXME: Remove these deleted methods once the default build includes
   // -Wdeprecated.
@@ -193,7 +194,8 @@
         HideTags(std::move(Other.HideTags)),
         Diagnose(std::move(Other.Diagnose)),
         AllowHidden(std::move(Other.AllowHidden)),
-        Shadowed(std::move(Other.Shadowed)) {
+        Shadowed(std::move(Other.Shadowed)),
+        TemplateNameLookup(std::move(Other.TemplateNameLookup)) {
     Other.Paths = nullptr;
     Other.Diagnose = false;
   }
@@ -216,6 +218,7 @@
     Diagnose = std::move(Other.Diagnose);
     AllowHidden = std::move(Other.AllowHidden);
     Shadowed = std::move(Other.Shadowed);
+    TemplateNameLookup = std::move(Other.TemplateNameLookup);
     Other.Paths = nullptr;
     Other.Diagnose = false;
     return *this;
@@ -286,6 +289,15 @@
     HideTags = Hide;
   }
 
+  /// Sets whether this is a template-name lookup. For template-name lookups,
+  /// injected-class-names are treated as naming a template rather than a
+  /// template specialization.
+  void setTemplateNameLookup(bool TemplateName) {
+    TemplateNameLookup = TemplateName;
+  }
+
+  bool isTemplateNameLookup() const { return TemplateNameLookup; }
+
   bool isAmbiguous() const {
     return getResultKind() == Ambiguous;
   }
@@ -739,6 +751,9 @@
   /// declaration that we skipped. This only happens when \c LookupKind
   /// is \c LookupRedeclarationWithLinkage.
   bool Shadowed = false;
+
+  /// True if we're looking up a template-name.
+  bool TemplateNameLookup = false;
 };
 
 /// Consumes visible declarations found when searching for
diff --git a/linux-x64/clang/include/clang/Sema/Overload.h b/linux-x64/clang/include/clang/Sema/Overload.h
index f5490e8..96aadea 100644
--- a/linux-x64/clang/include/clang/Sema/Overload.h
+++ b/linux-x64/clang/include/clang/Sema/Overload.h
@@ -705,6 +705,11 @@
     /// attribute disabled it.
     ovl_fail_enable_if,
 
+    /// This candidate constructor or conversion fonction
+    /// is used implicitly but the explicit(bool) specifier
+    /// was resolved to true
+    ovl_fail_explicit_resolved,
+
     /// This candidate was not viable because its address could not be taken.
     ovl_fail_addr_not_available,
 
@@ -718,6 +723,11 @@
     /// This candidate was not viable because it is a non-default multiversioned
     /// function.
     ovl_non_default_multiversion_function,
+
+    /// This constructor/conversion candidate fail due to an address space
+    /// mismatch between the object being constructed and the overload
+    /// candidate.
+    ovl_fail_object_addrspace_mismatch
   };
 
   /// A list of implicit conversion sequences for the arguments of an
@@ -873,6 +883,9 @@
     unsigned NumInlineBytesUsed = 0;
     llvm::AlignedCharArray<alignof(void *), NumInlineBytes> InlineSpace;
 
+    // Address space of the object being constructed.
+    LangAS DestAS = LangAS::Default;
+
     /// If we have space, allocates from inline storage. Otherwise, allocates
     /// from the slab allocator.
     /// FIXME: It would probably be nice to have a SmallBumpPtrAllocator
@@ -961,13 +974,34 @@
     OverloadingResult BestViableFunction(Sema &S, SourceLocation Loc,
                                          OverloadCandidateSet::iterator& Best);
 
-    void NoteCandidates(Sema &S,
-                        OverloadCandidateDisplayKind OCD,
-                        ArrayRef<Expr *> Args,
+    SmallVector<OverloadCandidate *, 32> CompleteCandidates(
+        Sema &S, OverloadCandidateDisplayKind OCD, ArrayRef<Expr *> Args,
+        SourceLocation OpLoc = SourceLocation(),
+        llvm::function_ref<bool(OverloadCandidate &)> Filter =
+            [](OverloadCandidate &) { return true; });
+
+    void NoteCandidates(
+        PartialDiagnosticAt PA, Sema &S, OverloadCandidateDisplayKind OCD,
+        ArrayRef<Expr *> Args, StringRef Opc = "",
+        SourceLocation Loc = SourceLocation(),
+        llvm::function_ref<bool(OverloadCandidate &)> Filter =
+            [](OverloadCandidate &) { return true; });
+
+    void NoteCandidates(Sema &S, ArrayRef<Expr *> Args,
+                        ArrayRef<OverloadCandidate *> Cands,
                         StringRef Opc = "",
-                        SourceLocation Loc = SourceLocation(),
-                        llvm::function_ref<bool(OverloadCandidate&)> Filter =
-                          [](OverloadCandidate&) { return true; });
+                        SourceLocation OpLoc = SourceLocation());
+
+    LangAS getDestAS() { return DestAS; }
+
+    void setDestAS(LangAS AS) {
+      assert((Kind == CSK_InitByConstructor ||
+              Kind == CSK_InitByUserDefinedConversion) &&
+             "can't set the destination address space when not constructing an "
+             "object");
+      DestAS = AS;
+    }
+
   };
 
   bool isBetterOverloadCandidate(Sema &S,
diff --git a/linux-x64/clang/include/clang/Sema/ParsedAttr.h b/linux-x64/clang/include/clang/Sema/ParsedAttr.h
index d125d3b..d87d5da 100644
--- a/linux-x64/clang/include/clang/Sema/ParsedAttr.h
+++ b/linux-x64/clang/include/clang/Sema/ParsedAttr.h
@@ -167,6 +167,8 @@
 private:
   IdentifierInfo *AttrName;
   IdentifierInfo *ScopeName;
+  IdentifierInfo *MacroII = nullptr;
+  SourceLocation MacroExpansionLoc;
   SourceRange AttrRange;
   SourceLocation ScopeLoc;
   SourceLocation EllipsisLoc;
@@ -438,7 +440,7 @@
   }
 
   bool isUsedAsTypeAttr() const { return UsedAsTypeAttr; }
-  void setUsedAsTypeAttr() { UsedAsTypeAttr = true; }
+  void setUsedAsTypeAttr(bool Used = true) { UsedAsTypeAttr = Used; }
 
   /// True if the attribute is specified using '#pragma clang attribute'.
   bool isPragmaClangAttribute() const { return IsPragmaClangAttribute; }
@@ -547,6 +549,27 @@
     return getPropertyDataBuffer().SetterId;
   }
 
+  /// Set the macro identifier info object that this parsed attribute was
+  /// declared in if it was declared in a macro. Also set the expansion location
+  /// of the macro.
+  void setMacroIdentifier(IdentifierInfo *MacroName, SourceLocation Loc) {
+    MacroII = MacroName;
+    MacroExpansionLoc = Loc;
+  }
+
+  /// Returns true if this attribute was declared in a macro.
+  bool hasMacroIdentifier() const { return MacroII != nullptr; }
+
+  /// Return the macro identifier if this attribute was declared in a macro.
+  /// nullptr is returned if it was not declared in a macro.
+  IdentifierInfo *getMacroIdentifier() const { return MacroII; }
+
+  SourceLocation getMacroExpansionLoc() const {
+    assert(hasMacroIdentifier() && "Can only get the macro expansion location "
+                                   "if this attribute has a macro identifier.");
+    return MacroExpansionLoc;
+  }
+
   /// Get an index into the attribute spelling list
   /// defined in Attr.td. This index is used by an attribute
   /// to pretty print itself.
@@ -659,6 +682,7 @@
 
 class AttributePool {
   friend class AttributeFactory;
+  friend class ParsedAttributes;
   AttributeFactory &Factory;
   llvm::TinyPtrVector<ParsedAttr *> Attrs;
 
@@ -892,6 +916,13 @@
     pool.takeAllFrom(attrs.pool);
   }
 
+  void takeOneFrom(ParsedAttributes &Attrs, ParsedAttr *PA) {
+    Attrs.getPool().remove(PA);
+    Attrs.remove(PA);
+    getPool().add(PA);
+    addAtEnd(PA);
+  }
+
   void clear() {
     clearListOnly();
     pool.clear();
diff --git a/linux-x64/clang/include/clang/Sema/Scope.h b/linux-x64/clang/include/clang/Sema/Scope.h
index a1b451c..7848df8 100644
--- a/linux-x64/clang/include/clang/Sema/Scope.h
+++ b/linux-x64/clang/include/clang/Sema/Scope.h
@@ -131,6 +131,9 @@
 
     /// We are between inheritance colon and the real class/struct definition scope.
     ClassInheritanceScope = 0x800000,
+
+    /// This is the scope of a C++ catch statement.
+    CatchScope = 0x1000000,
   };
 
 private:
diff --git a/linux-x64/clang/include/clang/Sema/ScopeInfo.h b/linux-x64/clang/include/clang/Sema/ScopeInfo.h
index e2346fd..ea25951 100644
--- a/linux-x64/clang/include/clang/Sema/ScopeInfo.h
+++ b/linux-x64/clang/include/clang/Sema/ScopeInfo.h
@@ -15,6 +15,7 @@
 #define LLVM_CLANG_SEMA_SCOPEINFO_H
 
 #include "clang/AST/Expr.h"
+#include "clang/AST/ExprCXX.h"
 #include "clang/AST/Type.h"
 #include "clang/Basic/CapturedStmt.h"
 #include "clang/Basic/LLVM.h"
@@ -84,11 +85,11 @@
 public:
   PartialDiagnostic PD;
   SourceLocation Loc;
-  const Stmt *stmt;
+  llvm::TinyPtrVector<const Stmt*> Stmts;
 
   PossiblyUnreachableDiag(const PartialDiagnostic &PD, SourceLocation Loc,
-                          const Stmt *stmt)
-      : PD(PD), Loc(Loc), stmt(stmt) {}
+                          ArrayRef<const Stmt *> Stmts)
+      : PD(PD), Loc(Loc), Stmts(Stmts) {}
 };
 
 /// Retains information about a function, method, or block that is
@@ -487,6 +488,8 @@
   /// Clear out the information in this function scope, making it
   /// suitable for reuse.
   void Clear();
+
+  bool isPlainFunction() const { return Kind == SK_Function; }
 };
 
 class Capture {
@@ -506,92 +509,106 @@
   enum CaptureKind {
     Cap_ByCopy, Cap_ByRef, Cap_Block, Cap_VLA
   };
-  enum {
-    IsNestedCapture = 0x1,
-    IsThisCaptured = 0x2
+
+  union {
+    /// If Kind == Cap_VLA, the captured type.
+    const VariableArrayType *CapturedVLA;
+
+    /// Otherwise, the captured variable (if any).
+    VarDecl *CapturedVar;
   };
 
-  /// The variable being captured (if we are not capturing 'this') and whether
-  /// this is a nested capture, and whether we are capturing 'this'
-  llvm::PointerIntPair<VarDecl*, 2> VarAndNestedAndThis;
-
-  /// Expression to initialize a field of the given type, and the kind of
-  /// capture (if this is a capture and not an init-capture). The expression
-  /// is only required if we are capturing ByVal and the variable's type has
-  /// a non-trivial copy constructor.
-  llvm::PointerIntPair<void *, 2, CaptureKind> InitExprAndCaptureKind;
-
   /// The source location at which the first capture occurred.
   SourceLocation Loc;
 
   /// The location of the ellipsis that expands a parameter pack.
   SourceLocation EllipsisLoc;
 
-  /// The type as it was captured, which is in effect the type of the
-  /// non-static data member that would hold the capture.
+  /// The type as it was captured, which is the type of the non-static data
+  /// member that would hold the capture.
   QualType CaptureType;
 
+  /// The CaptureKind of this capture.
+  unsigned Kind : 2;
+
+  /// Whether this is a nested capture (a capture of an enclosing capturing
+  /// scope's capture).
+  unsigned Nested : 1;
+
+  /// Whether this is a capture of '*this'.
+  unsigned CapturesThis : 1;
+
   /// Whether an explicit capture has been odr-used in the body of the
   /// lambda.
-  bool ODRUsed = false;
+  unsigned ODRUsed : 1;
 
   /// Whether an explicit capture has been non-odr-used in the body of
   /// the lambda.
-  bool NonODRUsed = false;
+  unsigned NonODRUsed : 1;
+
+  /// Whether the capture is invalid (a capture was required but the entity is
+  /// non-capturable).
+  unsigned Invalid : 1;
 
 public:
   Capture(VarDecl *Var, bool Block, bool ByRef, bool IsNested,
-          SourceLocation Loc, SourceLocation EllipsisLoc,
-          QualType CaptureType, Expr *Cpy)
-      : VarAndNestedAndThis(Var, IsNested ? IsNestedCapture : 0),
-        InitExprAndCaptureKind(
-            Cpy, !Var ? Cap_VLA : Block ? Cap_Block : ByRef ? Cap_ByRef
-                                                            : Cap_ByCopy),
-        Loc(Loc), EllipsisLoc(EllipsisLoc), CaptureType(CaptureType) {}
+          SourceLocation Loc, SourceLocation EllipsisLoc, QualType CaptureType,
+          bool Invalid)
+      : CapturedVar(Var), Loc(Loc), EllipsisLoc(EllipsisLoc),
+        CaptureType(CaptureType),
+        Kind(Block ? Cap_Block : ByRef ? Cap_ByRef : Cap_ByCopy),
+        Nested(IsNested), CapturesThis(false), ODRUsed(false),
+        NonODRUsed(false), Invalid(Invalid) {}
 
   enum IsThisCapture { ThisCapture };
   Capture(IsThisCapture, bool IsNested, SourceLocation Loc,
-          QualType CaptureType, Expr *Cpy, const bool ByCopy)
-      : VarAndNestedAndThis(
-            nullptr, (IsThisCaptured | (IsNested ? IsNestedCapture : 0))),
-        InitExprAndCaptureKind(Cpy, ByCopy ? Cap_ByCopy : Cap_ByRef),
-        Loc(Loc), CaptureType(CaptureType) {}
+          QualType CaptureType, const bool ByCopy, bool Invalid)
+      : Loc(Loc), CaptureType(CaptureType),
+        Kind(ByCopy ? Cap_ByCopy : Cap_ByRef), Nested(IsNested),
+        CapturesThis(true), ODRUsed(false), NonODRUsed(false),
+        Invalid(Invalid) {}
 
-  bool isThisCapture() const {
-    return VarAndNestedAndThis.getInt() & IsThisCaptured;
-  }
+  enum IsVLACapture { VLACapture };
+  Capture(IsVLACapture, const VariableArrayType *VLA, bool IsNested,
+          SourceLocation Loc, QualType CaptureType)
+      : CapturedVLA(VLA), Loc(Loc), CaptureType(CaptureType), Kind(Cap_VLA),
+        Nested(IsNested), CapturesThis(false), ODRUsed(false),
+        NonODRUsed(false), Invalid(false) {}
 
+  bool isThisCapture() const { return CapturesThis; }
   bool isVariableCapture() const {
     return !isThisCapture() && !isVLATypeCapture();
   }
 
-  bool isCopyCapture() const {
-    return InitExprAndCaptureKind.getInt() == Cap_ByCopy;
-  }
+  bool isCopyCapture() const { return Kind == Cap_ByCopy; }
+  bool isReferenceCapture() const { return Kind == Cap_ByRef; }
+  bool isBlockCapture() const { return Kind == Cap_Block; }
+  bool isVLATypeCapture() const { return Kind == Cap_VLA; }
 
-  bool isReferenceCapture() const {
-    return InitExprAndCaptureKind.getInt() == Cap_ByRef;
-  }
+  bool isNested() const { return Nested; }
 
-  bool isBlockCapture() const {
-    return InitExprAndCaptureKind.getInt() == Cap_Block;
-  }
+  bool isInvalid() const { return Invalid; }
 
-  bool isVLATypeCapture() const {
-    return InitExprAndCaptureKind.getInt() == Cap_VLA;
-  }
-
-  bool isNested() const {
-    return VarAndNestedAndThis.getInt() & IsNestedCapture;
-  }
+  /// Determine whether this capture is an init-capture.
+  bool isInitCapture() const;
 
   bool isODRUsed() const { return ODRUsed; }
   bool isNonODRUsed() const { return NonODRUsed; }
-  void markUsed(bool IsODRUse) { (IsODRUse ? ODRUsed : NonODRUsed) = true; }
+  void markUsed(bool IsODRUse) {
+    if (IsODRUse)
+      ODRUsed = true;
+    else
+      NonODRUsed = true;
+  }
 
   VarDecl *getVariable() const {
     assert(isVariableCapture());
-    return VarAndNestedAndThis.getPointer();
+    return CapturedVar;
+  }
+
+  const VariableArrayType *getCapturedVLAType() const {
+    assert(isVLATypeCapture());
+    return CapturedVLA;
   }
 
   /// Retrieve the location at which this variable was captured.
@@ -604,15 +621,7 @@
   /// Retrieve the capture type for this capture, which is effectively
   /// the type of the non-static data member in the lambda/block structure
   /// that would store this capture.
-  QualType getCaptureType() const {
-    assert(!isThisCapture());
-    return CaptureType;
-  }
-
-  Expr *getInitExpr() const {
-    assert(!isVLATypeCapture() && "no init expression for type capture");
-    return static_cast<Expr *>(InitExprAndCaptureKind.getPointer());
-  }
+  QualType getCaptureType() const { return CaptureType; }
 };
 
 class CapturingScopeInfo : public FunctionScopeInfo {
@@ -650,24 +659,20 @@
 
   void addCapture(VarDecl *Var, bool isBlock, bool isByref, bool isNested,
                   SourceLocation Loc, SourceLocation EllipsisLoc,
-                  QualType CaptureType, Expr *Cpy) {
+                  QualType CaptureType, bool Invalid) {
     Captures.push_back(Capture(Var, isBlock, isByref, isNested, Loc,
-                               EllipsisLoc, CaptureType, Cpy));
+                               EllipsisLoc, CaptureType, Invalid));
     CaptureMap[Var] = Captures.size();
   }
 
-  void addVLATypeCapture(SourceLocation Loc, QualType CaptureType) {
-    Captures.push_back(Capture(/*Var*/ nullptr, /*isBlock*/ false,
-                               /*isByref*/ false, /*isNested*/ false, Loc,
-                               /*EllipsisLoc*/ SourceLocation(), CaptureType,
-                               /*Cpy*/ nullptr));
+  void addVLATypeCapture(SourceLocation Loc, const VariableArrayType *VLAType,
+                         QualType CaptureType) {
+    Captures.push_back(Capture(Capture::VLACapture, VLAType,
+                               /*FIXME: IsNested*/ false, Loc, CaptureType));
   }
 
-  // Note, we do not need to add the type of 'this' since that is always
-  // retrievable from Sema::getCurrentThisType - and is also encoded within the
-  // type of the corresponding FieldDecl.
-  void addThisCapture(bool isNested, SourceLocation Loc,
-                      Expr *Cpy, bool ByCopy);
+  void addThisCapture(bool isNested, SourceLocation Loc, QualType CaptureType,
+                      bool ByCopy);
 
   /// Determine whether the C++ 'this' is captured.
   bool isCXXThisCaptured() const { return CXXThisCaptureIndex != 0; }
@@ -816,16 +821,24 @@
   /// each 'auto' parameter, during initial AST construction.
   unsigned AutoTemplateParameterDepth = 0;
 
-  /// Store the list of the auto parameters for a generic lambda.
-  /// If this is a generic lambda, store the list of the auto
-  /// parameters converted into TemplateTypeParmDecls into a vector
-  /// that can be used to construct the generic lambda's template
-  /// parameter list, during initial AST construction.
-  SmallVector<TemplateTypeParmDecl*, 4> AutoTemplateParams;
+  /// The number of parameters in the template parameter list that were
+  /// explicitly specified by the user, as opposed to being invented by use
+  /// of an auto parameter.
+  unsigned NumExplicitTemplateParams = 0;
+
+  /// Source range covering the explicit template parameter list (if it exists).
+  SourceRange ExplicitTemplateParamsRange;
+
+  /// Store the list of the template parameters for a generic lambda.
+  /// If this is a generic lambda, this holds the explicit template parameters
+  /// followed by the auto parameters converted into TemplateTypeParmDecls.
+  /// It can be used to construct the generic lambda's template parameter list
+  /// during initial AST construction.
+  SmallVector<NamedDecl*, 4> TemplateParams;
 
   /// If this is a generic lambda, and the template parameter
-  /// list has been created (from the AutoTemplateParams) then
-  /// store a reference to it (cache it to avoid reconstructing it).
+  /// list has been created (from the TemplateParams) then store
+  /// a reference to it (cache it to avoid reconstructing it).
   TemplateParameterList *GLTemplateParameterList = nullptr;
 
   /// Contains all variable-referring-expressions (i.e. DeclRefExprs
@@ -878,9 +891,9 @@
   }
 
   /// Is this scope known to be for a generic lambda? (This will be false until
-  /// we parse the first 'auto'-typed parameter.
+  /// we parse a template parameter list or the first 'auto'-typed parameter).
   bool isGenericLambda() const {
-    return !AutoTemplateParams.empty() || GLTemplateParameterList;
+    return !TemplateParams.empty() || GLTemplateParameterList;
   }
 
   /// Add a variable that might potentially be captured by the
@@ -901,7 +914,8 @@
   ///   };
   /// }
   void addPotentialCapture(Expr *VarExpr) {
-    assert(isa<DeclRefExpr>(VarExpr) || isa<MemberExpr>(VarExpr));
+    assert(isa<DeclRefExpr>(VarExpr) || isa<MemberExpr>(VarExpr) ||
+           isa<FunctionParmPackExpr>(VarExpr));
     PotentiallyCapturingExprs.push_back(VarExpr);
   }
 
@@ -953,13 +967,15 @@
   ///  building such a node. So we need a rule that anyone can implement and get
   ///  exactly the same result".
   void markVariableExprAsNonODRUsed(Expr *CapturingVarExpr) {
-    assert(isa<DeclRefExpr>(CapturingVarExpr)
-        || isa<MemberExpr>(CapturingVarExpr));
+    assert(isa<DeclRefExpr>(CapturingVarExpr) ||
+           isa<MemberExpr>(CapturingVarExpr) ||
+           isa<FunctionParmPackExpr>(CapturingVarExpr));
     NonODRUsedCapturingExprs.insert(CapturingVarExpr);
   }
   bool isVariableExprMarkedAsNonODRUsed(Expr *CapturingVarExpr) const {
-    assert(isa<DeclRefExpr>(CapturingVarExpr)
-      || isa<MemberExpr>(CapturingVarExpr));
+    assert(isa<DeclRefExpr>(CapturingVarExpr) ||
+           isa<MemberExpr>(CapturingVarExpr) ||
+           isa<FunctionParmPackExpr>(CapturingVarExpr));
     return NonODRUsedCapturingExprs.count(CapturingVarExpr);
   }
   void removePotentialCapture(Expr *E) {
@@ -981,9 +997,8 @@
                                   PotentialThisCaptureLocation.isValid();
   }
 
-  // When passed the index, returns the VarDecl and Expr associated
-  // with the index.
-  void getPotentialVariableCapture(unsigned Idx, VarDecl *&VD, Expr *&E) const;
+  void visitPotentialCaptures(
+      llvm::function_ref<void(VarDecl *, Expr *)> Callback) const;
 };
 
 FunctionScopeInfo::WeakObjectProfileTy::WeakObjectProfileTy()
@@ -1003,12 +1018,12 @@
   Uses.push_back(WeakUseTy(E, IsRead));
 }
 
-inline void
-CapturingScopeInfo::addThisCapture(bool isNested, SourceLocation Loc,
-                                   Expr *Cpy,
-                                   const bool ByCopy) {
-  Captures.push_back(Capture(Capture::ThisCapture, isNested, Loc, QualType(),
-                             Cpy, ByCopy));
+inline void CapturingScopeInfo::addThisCapture(bool isNested,
+                                               SourceLocation Loc,
+                                               QualType CaptureType,
+                                               bool ByCopy) {
+  Captures.push_back(Capture(Capture::ThisCapture, isNested, Loc, CaptureType,
+                             ByCopy, /*Invalid*/ false));
   CXXThisCaptureIndex = Captures.size();
 }
 
diff --git a/linux-x64/clang/include/clang/Sema/Sema.h b/linux-x64/clang/include/clang/Sema/Sema.h
index 0c2479a..4cb0474 100644
--- a/linux-x64/clang/include/clang/Sema/Sema.h
+++ b/linux-x64/clang/include/clang/Sema/Sema.h
@@ -156,6 +156,7 @@
   class OMPDeclareReductionDecl;
   class OMPDeclareSimdDecl;
   class OMPClause;
+  struct OMPVarListLocTy;
   struct OverloadCandidate;
   class OverloadCandidateSet;
   class OverloadExpr;
@@ -285,6 +286,14 @@
   void enterCondition(Sema &S, SourceLocation Tok);
   void enterReturn(Sema &S, SourceLocation Tok);
   void enterVariableInit(SourceLocation Tok, Decl *D);
+  /// Computing a type for the function argument may require running
+  /// overloading, so we postpone its computation until it is actually needed.
+  ///
+  /// Clients should be very careful when using this funciton, as it stores a
+  /// function_ref, clients should make sure all calls to get() with the same
+  /// location happen while function_ref is alive.
+  void enterFunctionArgument(SourceLocation Tok,
+                             llvm::function_ref<QualType()> ComputeType);
 
   void enterParenExpr(SourceLocation Tok, SourceLocation LParLoc);
   void enterUnary(Sema &S, SourceLocation Tok, tok::TokenKind OpKind,
@@ -296,8 +305,12 @@
   void enterTypeCast(SourceLocation Tok, QualType CastType);
 
   QualType get(SourceLocation Tok) const {
-    if (Tok == ExpectedLoc)
+    if (Tok != ExpectedLoc)
+      return QualType();
+    if (!Type.isNull())
       return Type;
+    if (ComputeType)
+      return ComputeType();
     return QualType();
   }
 
@@ -306,6 +319,9 @@
   SourceLocation ExpectedLoc;
   /// Expected type for a token starting at ExpectedLoc.
   QualType Type;
+  /// A function to compute expected type at ExpectedLoc. It is only considered
+  /// if Type is null.
+  llvm::function_ref<QualType()> ComputeType;
 };
 
 /// Sema - This implements semantic analysis and AST building for C.
@@ -571,15 +587,15 @@
   /// element type here is ExprWithCleanups::Object.
   SmallVector<BlockDecl*, 8> ExprCleanupObjects;
 
-  /// Store a list of either DeclRefExprs or MemberExprs
-  ///  that contain a reference to a variable (constant) that may or may not
-  ///  be odr-used in this Expr, and we won't know until all lvalue-to-rvalue
-  ///  and discarded value conversions have been applied to all subexpressions
-  ///  of the enclosing full expression.  This is cleared at the end of each
-  ///  full expression.
-  llvm::SmallPtrSet<Expr*, 2> MaybeODRUseExprs;
+  /// Store a set of either DeclRefExprs or MemberExprs that contain a reference
+  /// to a variable (constant) that may or may not be odr-used in this Expr, and
+  /// we won't know until all lvalue-to-rvalue and discarded value conversions
+  /// have been applied to all subexpressions of the enclosing full expression.
+  /// This is cleared at the end of each full expression.
+  using MaybeODRUseExprSet = llvm::SmallPtrSet<Expr *, 2>;
+  MaybeODRUseExprSet MaybeODRUseExprs;
 
-  std::unique_ptr<sema::FunctionScopeInfo> PreallocatedFunctionScope;
+  std::unique_ptr<sema::FunctionScopeInfo> CachedFunctionScope;
 
   /// Stack containing information about each of the nested
   /// function, block, and method scopes that are currently active.
@@ -666,16 +682,6 @@
   SmallVector<std::pair<FunctionDecl*, FunctionDecl*>, 2>
     DelayedEquivalentExceptionSpecChecks;
 
-  /// All the members seen during a class definition which were both
-  /// explicitly defaulted and had explicitly-specified exception
-  /// specifications, along with the function type containing their
-  /// user-specified exception specification. Those exception specifications
-  /// were overridden with the default specifications, but we still need to
-  /// check whether they are compatible with the default specification, and
-  /// we can't do that until the nesting set of class definitions is complete.
-  SmallVector<std::pair<CXXMethodDecl*, const FunctionProtoType*>, 2>
-    DelayedDefaultedMemberExceptionSpecs;
-
   typedef llvm::MapVector<const FunctionDecl *,
                           std::unique_ptr<LateParsedTemplate>>
       LateParsedTemplateMapT;
@@ -791,6 +797,15 @@
     }
   };
 
+  /// Used to change context to isConstantEvaluated without pushing a heavy
+  /// ExpressionEvaluationContextRecord object.
+  bool isConstantEvaluatedOverride;
+
+  bool isConstantEvaluated() {
+    return ExprEvalContexts.back().isConstantEvaluated() ||
+           isConstantEvaluatedOverride;
+  }
+
   /// RAII object to handle the state changes required to synthesize
   /// a function body.
   class SynthesizedFunctionScope {
@@ -1013,7 +1028,7 @@
     /// context (i.e. the number of TypoExprs created).
     unsigned NumTypos;
 
-    llvm::SmallPtrSet<Expr*, 2> SavedMaybeODRUseExprs;
+    MaybeODRUseExprSet SavedMaybeODRUseExprs;
 
     /// The lambdas that are present within this context, if it
     /// is indeed an unevaluated context.
@@ -1197,6 +1212,11 @@
   /// of -Wselector.
   llvm::MapVector<Selector, SourceLocation> ReferencedSelectors;
 
+  /// List of SourceLocations where 'self' is implicitly retained inside a
+  /// block.
+  llvm::SmallVector<std::pair<SourceLocation, const BlockDecl *>, 1>
+      ImplicitlyRetainedSelfLocs;
+
   /// Kinds of C++ special members.
   enum CXXSpecialMember {
     CXXDefaultConstructor,
@@ -1365,8 +1385,21 @@
 
   void emitAndClearUnusedLocalTypedefWarnings();
 
+  enum TUFragmentKind {
+    /// The global module fragment, between 'module;' and a module-declaration.
+    Global,
+    /// A normal translation unit fragment. For a non-module unit, this is the
+    /// entire translation unit. Otherwise, it runs from the module-declaration
+    /// to the private-module-fragment (if any) or the end of the TU (if not).
+    Normal,
+    /// The private module fragment, between 'module :private;' and the end of
+    /// the translation unit.
+    Private
+  };
+
   void ActOnStartOfTranslationUnit();
   void ActOnEndOfTranslationUnit();
+  void ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind);
 
   void CheckDelegatingCtorCycles();
 
@@ -1384,10 +1417,24 @@
   void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD,
                                RecordDecl *RD,
                                CapturedRegionKind K);
-  void
+
+  /// Custom deleter to allow FunctionScopeInfos to be kept alive for a short
+  /// time after they've been popped.
+  class PoppedFunctionScopeDeleter {
+    Sema *Self;
+
+  public:
+    explicit PoppedFunctionScopeDeleter(Sema *Self) : Self(Self) {}
+    void operator()(sema::FunctionScopeInfo *Scope) const;
+  };
+
+  using PoppedFunctionScopePtr =
+      std::unique_ptr<sema::FunctionScopeInfo, PoppedFunctionScopeDeleter>;
+
+  PoppedFunctionScopePtr
   PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr,
                        const Decl *D = nullptr,
-                       const BlockExpr *blkExpr = nullptr);
+                       QualType BlockType = QualType());
 
   sema::FunctionScopeInfo *getCurFunction() const {
     return FunctionScopes.empty() ? nullptr : FunctionScopes.back();
@@ -1403,7 +1450,6 @@
   void PopCompoundScope();
 
   sema::CompoundScopeInfo &getCurCompoundScope() const;
-  bool isCurCompoundStmtAStmtExpr() const;
 
   bool hasAnyUnrecoverableErrorsInThisFunction() const;
 
@@ -1527,6 +1573,7 @@
   bool CheckExceptionSpecSubset(const PartialDiagnostic &DiagID,
                                 const PartialDiagnostic &NestedDiagID,
                                 const PartialDiagnostic &NoteID,
+                                const PartialDiagnostic &NoThrowDiagID,
                                 const FunctionProtoType *Superset,
                                 SourceLocation SuperLoc,
                                 const FunctionProtoType *Subset,
@@ -1609,13 +1656,18 @@
                                TypeDiagnoser *Diagnoser);
 
   struct ModuleScope {
+    SourceLocation BeginLoc;
     clang::Module *Module = nullptr;
     bool ModuleInterface = false;
+    bool ImplicitGlobalModuleFragment = false;
     VisibleModuleSet OuterVisibleModules;
   };
   /// The modules we're currently parsing.
   llvm::SmallVector<ModuleScope, 16> ModuleScopes;
 
+  /// Namespace definitions that we will export when they finish.
+  llvm::SmallPtrSet<const NamespaceDecl*, 8> DeferredExportedNamespaces;
+
   /// Get the module whose scope we are currently within.
   Module *getCurrentModule() const {
     return ModuleScopes.empty() ? nullptr : ModuleScopes.back().Module;
@@ -1795,7 +1847,8 @@
     NC_NestedNameSpecifier,
     NC_TypeTemplate,
     NC_VarTemplate,
-    NC_FunctionTemplate
+    NC_FunctionTemplate,
+    NC_UndeclaredTemplate,
   };
 
   class NameClassification {
@@ -1843,6 +1896,12 @@
       return Result;
     }
 
+    static NameClassification UndeclaredTemplate(TemplateName Name) {
+      NameClassification Result(NC_UndeclaredTemplate);
+      Result.Template = Name;
+      return Result;
+    }
+
     NameClassificationKind getKind() const { return Kind; }
 
     ParsedType getType() const {
@@ -1857,7 +1916,7 @@
 
     TemplateName getTemplateName() const {
       assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate ||
-             Kind == NC_VarTemplate);
+             Kind == NC_VarTemplate || Kind == NC_UndeclaredTemplate);
       return Template;
     }
 
@@ -1869,6 +1928,8 @@
         return TNK_Function_template;
       case NC_VarTemplate:
         return TNK_Var_template;
+      case NC_UndeclaredTemplate:
+        return TNK_Undeclared_template;
       default:
         llvm_unreachable("unsupported name classification.");
       }
@@ -1899,11 +1960,11 @@
   ///        expression.
   ///
   /// \param CCC The correction callback, if typo correction is desired.
-  NameClassification
-  ClassifyName(Scope *S, CXXScopeSpec &SS, IdentifierInfo *&Name,
-               SourceLocation NameLoc, const Token &NextToken,
-               bool IsAddressOfOperand,
-               std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr);
+  NameClassification ClassifyName(Scope *S, CXXScopeSpec &SS,
+                                  IdentifierInfo *&Name, SourceLocation NameLoc,
+                                  const Token &NextToken,
+                                  bool IsAddressOfOperand,
+                                  CorrectionCandidateCallback *CCC = nullptr);
 
   /// Describes the detailed kind of a template name. Used in diagnostics.
   enum class TemplateNameKindForDiagnostics {
@@ -2002,7 +2063,7 @@
   bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous);
   void CheckVariableDeclarationType(VarDecl *NewVD);
   bool DeduceVariableDeclarationType(VarDecl *VDecl, bool DirectInit,
-                                     Expr *&Init);
+                                     Expr *Init);
   void CheckCompleteVariableDeclaration(VarDecl *VD);
   void CheckCompleteDecompositionDeclaration(DecompositionDecl *DD);
   void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D);
@@ -2031,7 +2092,9 @@
                                       QualType NewT, QualType OldT);
   void CheckMain(FunctionDecl *FD, const DeclSpec &D);
   void CheckMSVCRTEntryPoint(FunctionDecl *FD);
-  Attr *getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD, bool IsDefinition);
+  Attr *getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD,
+                                                   bool IsDefinition);
+  void CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D);
   Decl *ActOnParamDeclarator(Scope *S, Declarator &D);
   ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC,
                                           SourceLocation Loc,
@@ -2140,24 +2203,40 @@
   enum class ModuleDeclKind {
     Interface,      ///< 'export module X;'
     Implementation, ///< 'module X;'
-    Partition,      ///< 'module partition X;'
   };
 
   /// The parser has processed a module-declaration that begins the definition
   /// of a module interface or implementation.
   DeclGroupPtrTy ActOnModuleDecl(SourceLocation StartLoc,
                                  SourceLocation ModuleLoc, ModuleDeclKind MDK,
-                                 ModuleIdPath Path);
+                                 ModuleIdPath Path, bool IsFirstDecl);
+
+  /// The parser has processed a global-module-fragment declaration that begins
+  /// the definition of the global module fragment of the current module unit.
+  /// \param ModuleLoc The location of the 'module' keyword.
+  DeclGroupPtrTy ActOnGlobalModuleFragmentDecl(SourceLocation ModuleLoc);
+
+  /// The parser has processed a private-module-fragment declaration that begins
+  /// the definition of the private module fragment of the current module unit.
+  /// \param ModuleLoc The location of the 'module' keyword.
+  /// \param PrivateLoc The location of the 'private' keyword.
+  DeclGroupPtrTy ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc,
+                                                SourceLocation PrivateLoc);
 
   /// The parser has processed a module import declaration.
   ///
-  /// \param AtLoc The location of the '@' symbol, if any.
-  ///
+  /// \param StartLoc The location of the first token in the declaration. This
+  ///        could be the location of an '@', 'export', or 'import'.
+  /// \param ExportLoc The location of the 'export' keyword, if any.
   /// \param ImportLoc The location of the 'import' keyword.
-  ///
   /// \param Path The module access path.
-  DeclResult ActOnModuleImport(SourceLocation AtLoc, SourceLocation ImportLoc,
-                               ModuleIdPath Path);
+  DeclResult ActOnModuleImport(SourceLocation StartLoc,
+                               SourceLocation ExportLoc,
+                               SourceLocation ImportLoc, ModuleIdPath Path);
+  DeclResult ActOnModuleImport(SourceLocation StartLoc,
+                               SourceLocation ExportLoc,
+                               SourceLocation ImportLoc, Module *M,
+                               ModuleIdPath Path = {});
 
   /// The parser has processed a module import translated from a
   /// #include or similar preprocessing directive.
@@ -2451,14 +2530,6 @@
   /// Add this decl to the scope shadowed decl chains.
   void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true);
 
-  /// Make the given externally-produced declaration visible at the
-  /// top level scope.
-  ///
-  /// \param D The externally-produced declaration to push.
-  ///
-  /// \param Name The name of the externally-produced declaration.
-  void pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name);
-
   /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true
   /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns
   /// true if 'D' belongs to the given declaration context.
@@ -2619,13 +2690,6 @@
   bool IsOverload(FunctionDecl *New, FunctionDecl *Old, bool IsForUsingDecl,
                   bool ConsiderCudaAttrs = true);
 
-  /// Checks availability of the function depending on the current
-  /// function context.Inside an unavailable function,unavailability is ignored.
-  ///
-  /// \returns true if \p FD is unavailable and current context is inside
-  /// an available function, false otherwise.
-  bool isFunctionConsideredUnavailable(FunctionDecl *FD);
-
   ImplicitConversionSequence
   TryImplicitConversion(Expr *From, QualType ToType,
                         bool SuppressUserConversions,
@@ -2705,7 +2769,8 @@
     CCEK_Enumerator,  ///< Enumerator value with fixed underlying type.
     CCEK_TemplateArg, ///< Value of a non-type template parameter.
     CCEK_NewExpr,     ///< Constant expression in a noptr-new-declarator.
-    CCEK_ConstexprIf  ///< Condition in a constexpr if statement.
+    CCEK_ConstexprIf, ///< Condition in a constexpr if statement.
+    CCEK_ExplicitBool ///< Condition in an explicit(bool) specifier.
   };
   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
                                               llvm::APSInt &Value, CCEKind CCE);
@@ -2827,7 +2892,8 @@
                             OverloadCandidateSet &CandidateSet,
                             bool SuppressUserConversions = false,
                             bool PartialOverloading = false,
-                            bool AllowExplicit = false,
+                            bool AllowExplicit = true,
+                            bool AllowExplicitConversion = false,
                             ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
                             ConversionSequenceList EarlyConversions = None);
   void AddFunctionCandidates(const UnresolvedSetImpl &Functions,
@@ -2866,7 +2932,7 @@
       FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
       TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
       OverloadCandidateSet &CandidateSet, bool SuppressUserConversions = false,
-      bool PartialOverloading = false,
+      bool PartialOverloading = false, bool AllowExplicit = true,
       ADLCallKind IsADLCandidate = ADLCallKind::NotADL);
   bool CheckNonDependentConversions(FunctionTemplateDecl *FunctionTemplate,
                                     ArrayRef<QualType> ParamTypes,
@@ -2878,20 +2944,16 @@
                                     QualType ObjectType = QualType(),
                                     Expr::Classification
                                         ObjectClassification = {});
-  void AddConversionCandidate(CXXConversionDecl *Conversion,
-                              DeclAccessPair FoundDecl,
-                              CXXRecordDecl *ActingContext,
-                              Expr *From, QualType ToType,
-                              OverloadCandidateSet& CandidateSet,
-                              bool AllowObjCConversionOnExplicit,
-                              bool AllowResultConversion = true);
-  void AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
-                                      DeclAccessPair FoundDecl,
-                                      CXXRecordDecl *ActingContext,
-                                      Expr *From, QualType ToType,
-                                      OverloadCandidateSet &CandidateSet,
-                                      bool AllowObjCConversionOnExplicit,
-                                      bool AllowResultConversion = true);
+  void AddConversionCandidate(
+      CXXConversionDecl *Conversion, DeclAccessPair FoundDecl,
+      CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
+      OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
+      bool AllowExplicit, bool AllowResultConversion = true);
+  void AddTemplateConversionCandidate(
+      FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl,
+      CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
+      OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
+      bool AllowExplicit, bool AllowResultConversion = true);
   void AddSurrogateCandidate(CXXConversionDecl *Conversion,
                              DeclAccessPair FoundDecl,
                              CXXRecordDecl *ActingContext,
@@ -3258,7 +3320,7 @@
   makeTypoCorrectionConsumer(const DeclarationNameInfo &Typo,
                              Sema::LookupNameKind LookupKind, Scope *S,
                              CXXScopeSpec *SS,
-                             std::unique_ptr<CorrectionCandidateCallback> CCC,
+                             CorrectionCandidateCallback &CCC,
                              DeclContext *MemberContext, bool EnteringContext,
                              const ObjCObjectPointerType *OPT,
                              bool ErrorRecovery);
@@ -3342,7 +3404,7 @@
   TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo,
                              Sema::LookupNameKind LookupKind,
                              Scope *S, CXXScopeSpec *SS,
-                             std::unique_ptr<CorrectionCandidateCallback> CCC,
+                             CorrectionCandidateCallback &CCC,
                              CorrectTypoKind Mode,
                              DeclContext *MemberContext = nullptr,
                              bool EnteringContext = false,
@@ -3352,7 +3414,7 @@
   TypoExpr *CorrectTypoDelayed(const DeclarationNameInfo &Typo,
                                Sema::LookupNameKind LookupKind, Scope *S,
                                CXXScopeSpec *SS,
-                               std::unique_ptr<CorrectionCandidateCallback> CCC,
+                               CorrectionCandidateCallback &CCC,
                                TypoDiagnosticGenerator TDG,
                                TypoRecoveryCallback TRC, CorrectTypoKind Mode,
                                DeclContext *MemberContext = nullptr,
@@ -3477,7 +3539,7 @@
   // Check if there is an explicit attribute, but only look through parens.
   // The intent is to look for an attribute on the current declarator, but not
   // one that came from a typedef.
-  bool hasExplicitCallingConv(QualType &T);
+  bool hasExplicitCallingConv(QualType T);
 
   /// Get the outermost AttributedType node that sets a calling convention.
   /// Valid types should not have multiple attributes with different CCs.
@@ -3935,6 +3997,7 @@
                              unsigned NumInputs, IdentifierInfo **Names,
                              MultiExprArg Constraints, MultiExprArg Exprs,
                              Expr *AsmString, MultiExprArg Clobbers,
+                             unsigned NumLabels,
                              SourceLocation RParenLoc);
 
   void FillInlineAsmIdentifierInfo(Expr *Res,
@@ -4087,7 +4150,6 @@
                          ObjCInterfaceDecl *ClassReciever = nullptr);
   void NoteDeletedFunction(FunctionDecl *FD);
   void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD);
-  std::string getDeletedOrUnavailableSuffix(const FunctionDecl *FD);
   bool DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *PD,
                                         ObjCMethodDecl *Getter,
                                         SourceLocation Loc);
@@ -4130,8 +4192,11 @@
   void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var);
   void MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base = nullptr);
   void MarkMemberReferenced(MemberExpr *E);
+  void MarkFunctionParmPackReferenced(FunctionParmPackExpr *E);
+  void MarkCaptureUsedInEnclosingContext(VarDecl *Capture, SourceLocation Loc,
+                                         unsigned CapturingScopeIndex);
 
-  void UpdateMarkingForLValueToRValue(Expr *E);
+  ExprResult CheckLValueToRValueConversionOperand(Expr *E);
   void CleanupVarDeclMarking();
 
   enum TryCaptureKind {
@@ -4216,6 +4281,10 @@
   /// If it is unreachable, the diagnostic will not be emitted.
   bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement,
                            const PartialDiagnostic &PD);
+  /// Similar, but diagnostic is only produced if all the specified statements
+  /// are reachable.
+  bool DiagRuntimeBehavior(SourceLocation Loc, ArrayRef<const Stmt*> Stmts,
+                           const PartialDiagnostic &PD);
 
   // Primary Expressions.
   SourceRange getExprRange(Expr *E) const;
@@ -4223,7 +4292,7 @@
   ExprResult ActOnIdExpression(
       Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
       UnqualifiedId &Id, bool HasTrailingLParen, bool IsAddressOfOperand,
-      std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr,
+      CorrectionCandidateCallback *CCC = nullptr,
       bool IsInlineAsmIdentifier = false, Token *KeywordReplacement = nullptr);
 
   void DecomposeUnqualifiedId(const UnqualifiedId &Id,
@@ -4233,7 +4302,7 @@
 
   bool
   DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R,
-                      std::unique_ptr<CorrectionCandidateCallback> CCC,
+                      CorrectionCandidateCallback &CCC,
                       TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
                       ArrayRef<Expr *> Args = None, TypoExpr **Out = nullptr);
 
@@ -4247,16 +4316,28 @@
                                         bool isAddressOfOperand,
                                 const TemplateArgumentListInfo *TemplateArgs);
 
-  ExprResult BuildDeclRefExpr(ValueDecl *D, QualType Ty,
-                              ExprValueKind VK,
-                              SourceLocation Loc,
-                              const CXXScopeSpec *SS = nullptr);
-  ExprResult
+  /// If \p D cannot be odr-used in the current expression evaluation context,
+  /// return a reason explaining why. Otherwise, return NOUR_None.
+  NonOdrUseReason getNonOdrUseReasonInCurrentContext(ValueDecl *D);
+
+  DeclRefExpr *BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
+                                SourceLocation Loc,
+                                const CXXScopeSpec *SS = nullptr);
+  DeclRefExpr *
   BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
                    const DeclarationNameInfo &NameInfo,
                    const CXXScopeSpec *SS = nullptr,
                    NamedDecl *FoundD = nullptr,
+                   SourceLocation TemplateKWLoc = SourceLocation(),
                    const TemplateArgumentListInfo *TemplateArgs = nullptr);
+  DeclRefExpr *
+  BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
+                   const DeclarationNameInfo &NameInfo,
+                   NestedNameSpecifierLoc NNS,
+                   NamedDecl *FoundD = nullptr,
+                   SourceLocation TemplateKWLoc = SourceLocation(),
+                   const TemplateArgumentListInfo *TemplateArgs = nullptr);
+
   ExprResult
   BuildAnonymousStructUnionMemberReference(
       const CXXScopeSpec &SS,
@@ -4444,6 +4525,23 @@
                                    UnqualifiedId &Member,
                                    Decl *ObjCImpDecl);
 
+  MemberExpr *
+  BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
+                  const CXXScopeSpec *SS, SourceLocation TemplateKWLoc,
+                  ValueDecl *Member, DeclAccessPair FoundDecl,
+                  bool HadMultipleCandidates,
+                  const DeclarationNameInfo &MemberNameInfo, QualType Ty,
+                  ExprValueKind VK, ExprObjectKind OK,
+                  const TemplateArgumentListInfo *TemplateArgs = nullptr);
+  MemberExpr *
+  BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
+                  NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
+                  ValueDecl *Member, DeclAccessPair FoundDecl,
+                  bool HadMultipleCandidates,
+                  const DeclarationNameInfo &MemberNameInfo, QualType Ty,
+                  ExprValueKind VK, ExprObjectKind OK,
+                  const TemplateArgumentListInfo *TemplateArgs = nullptr);
+
   void ActOnDefaultCtorInitializers(Decl *CDtorDecl);
   bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
                                FunctionDecl *FDecl,
@@ -4460,6 +4558,9 @@
   /// locations.
   ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
                            MultiExprArg ArgExprs, SourceLocation RParenLoc,
+                           Expr *ExecConfig = nullptr);
+  ExprResult BuildCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
+                           MultiExprArg ArgExprs, SourceLocation RParenLoc,
                            Expr *ExecConfig = nullptr,
                            bool IsExecConfig = false);
   ExprResult
@@ -4533,6 +4634,8 @@
   void ActOnStartStmtExpr();
   ExprResult ActOnStmtExpr(SourceLocation LPLoc, Stmt *SubStmt,
                            SourceLocation RPLoc); // "({..})"
+  // Handle the final expression in a statement expression.
+  ExprResult ActOnStmtExprResult(ExprResult E);
   void ActOnStmtExprError();
 
   // __builtin_offsetof(type, identifier(.identifier|[expr])*)
@@ -4568,6 +4671,17 @@
   ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E,
                             TypeSourceInfo *TInfo, SourceLocation RPLoc);
 
+  // __builtin_LINE(), __builtin_FUNCTION(), __builtin_FILE(),
+  // __builtin_COLUMN()
+  ExprResult ActOnSourceLocExpr(SourceLocExpr::IdentKind Kind,
+                                SourceLocation BuiltinLoc,
+                                SourceLocation RPLoc);
+
+  // Build a potentially resolved SourceLocExpr.
+  ExprResult BuildSourceLocExpr(SourceLocExpr::IdentKind Kind,
+                                SourceLocation BuiltinLoc, SourceLocation RPLoc,
+                                DeclContext *ParentContext);
+
   // __null
   ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc);
 
@@ -5122,6 +5236,13 @@
                                SourceRange AngleBrackets,
                                SourceRange Parens);
 
+  ExprResult ActOnBuiltinBitCastExpr(SourceLocation KWLoc, Declarator &Dcl,
+                                     ExprResult Operand,
+                                     SourceLocation RParenLoc);
+
+  ExprResult BuildBuiltinBitCastExpr(SourceLocation KWLoc, TypeSourceInfo *TSI,
+                                     Expr *Operand, SourceLocation RParenLoc);
+
   ExprResult BuildCXXTypeId(QualType TypeInfoType,
                             SourceLocation TypeidLoc,
                             TypeSourceInfo *Operand,
@@ -5160,13 +5281,18 @@
   ExprResult BuildCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS,
                               BinaryOperatorKind Operator,
                               SourceLocation EllipsisLoc, Expr *RHS,
-                              SourceLocation RParenLoc);
+                              SourceLocation RParenLoc,
+                              Optional<unsigned> NumExpansions);
   ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc,
                                    BinaryOperatorKind Operator);
 
   //// ActOnCXXThis -  Parse 'this' pointer.
   ExprResult ActOnCXXThis(SourceLocation loc);
 
+  /// Build a CXXThisExpr and mark it referenced in the current context.
+  Expr *BuildCXXThisExpr(SourceLocation Loc, QualType Type, bool IsImplicit);
+  void MarkThisReferenced(CXXThisExpr *This);
+
   /// Try to retrieve the type of the 'this' pointer.
   ///
   /// \returns The type of 'this', if possible. Otherwise, returns a NULL type.
@@ -5270,7 +5396,7 @@
                          SourceRange TypeIdParens,
                          QualType AllocType,
                          TypeSourceInfo *AllocTypeInfo,
-                         Expr *ArraySize,
+                         Optional<Expr *> ArraySize,
                          SourceRange DirectInitRange,
                          Expr *Initializer);
 
@@ -5634,12 +5760,12 @@
                                          LambdaCaptureDefault CaptureDefault);
 
   /// Start the definition of a lambda expression.
-  CXXMethodDecl *startLambdaDefinition(CXXRecordDecl *Class,
-                                       SourceRange IntroducerRange,
-                                       TypeSourceInfo *MethodType,
-                                       SourceLocation EndLoc,
-                                       ArrayRef<ParmVarDecl *> Params,
-                                       bool IsConstexprSpecified);
+  CXXMethodDecl *
+  startLambdaDefinition(CXXRecordDecl *Class, SourceRange IntroducerRange,
+                        TypeSourceInfo *MethodType, SourceLocation EndLoc,
+                        ArrayRef<ParmVarDecl *> Params,
+                        ConstexprSpecKind ConstexprKind,
+                        Optional<std::pair<unsigned, Decl *>> Mangling = None);
 
   /// Endow the lambda scope info with the relevant properties.
   void buildLambdaScope(sema::LambdaScopeInfo *LSI,
@@ -5655,14 +5781,16 @@
   /// any implicit conversions such as an lvalue-to-rvalue conversion if
   /// not being used to initialize a reference.
   ParsedType actOnLambdaInitCaptureInitialization(
-      SourceLocation Loc, bool ByRef, IdentifierInfo *Id,
-      LambdaCaptureInitKind InitKind, Expr *&Init) {
+      SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
+      IdentifierInfo *Id, LambdaCaptureInitKind InitKind, Expr *&Init) {
     return ParsedType::make(buildLambdaInitCaptureInitialization(
-        Loc, ByRef, Id, InitKind != LambdaCaptureInitKind::CopyInit, Init));
+        Loc, ByRef, EllipsisLoc, None, Id,
+        InitKind != LambdaCaptureInitKind::CopyInit, Init));
   }
-  QualType buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef,
-                                                IdentifierInfo *Id,
-                                                bool DirectInit, Expr *&Init);
+  QualType buildLambdaInitCaptureInitialization(
+      SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc,
+      Optional<unsigned> NumExpansions, IdentifierInfo *Id, bool DirectInit,
+      Expr *&Init);
 
   /// Create a dummy variable within the declcontext of the lambda's
   ///  call operator, for name lookup purposes for a lambda init capture.
@@ -5671,16 +5799,23 @@
   ///  variables appropriately.
   VarDecl *createLambdaInitCaptureVarDecl(SourceLocation Loc,
                                           QualType InitCaptureType,
+                                          SourceLocation EllipsisLoc,
                                           IdentifierInfo *Id,
                                           unsigned InitStyle, Expr *Init);
 
-  /// Build the implicit field for an init-capture.
-  FieldDecl *buildInitCaptureField(sema::LambdaScopeInfo *LSI, VarDecl *Var);
+  /// Add an init-capture to a lambda scope.
+  void addInitCapture(sema::LambdaScopeInfo *LSI, VarDecl *Var);
 
   /// Note that we have finished the explicit captures for the
   /// given lambda.
   void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI);
 
+  /// \brief This is called after parsing the explicit template parameter list
+  /// on a lambda (if it exists) in C++2a.
+  void ActOnLambdaExplicitTemplateParameterList(SourceLocation LAngleLoc,
+                                                ArrayRef<NamedDecl *> TParams,
+                                                SourceLocation RAngleLoc);
+
   /// Introduce the lambda parameters into scope.
   void addLambdaParameters(
       ArrayRef<LambdaIntroducer::LambdaCapture> Captures,
@@ -5715,6 +5850,14 @@
   bool DiagnoseUnusedLambdaCapture(SourceRange CaptureRange,
                                    const sema::Capture &From);
 
+  /// Build a FieldDecl suitable to hold the given capture.
+  FieldDecl *BuildCaptureField(RecordDecl *RD, const sema::Capture &Capture);
+
+  /// Initialize the given capture with a suitable expression.
+  ExprResult BuildCaptureInit(const sema::Capture &Capture,
+                              SourceLocation ImplicitCaptureLoc,
+                              bool IsOpenMPMapping = false);
+
   /// Complete a lambda-expression having processed and attached the
   /// lambda body.
   ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
@@ -5934,8 +6077,8 @@
 
   /// MarkVirtualMembersReferenced - Will mark all members of the given
   /// CXXRecordDecl referenced.
-  void MarkVirtualMembersReferenced(SourceLocation Loc,
-                                    const CXXRecordDecl *RD);
+  void MarkVirtualMembersReferenced(SourceLocation Loc, const CXXRecordDecl *RD,
+                                    bool ConstexprOnly = false);
 
   /// Define all of the vtables that have been used in this
   /// translation unit and reference any virtual members used by those
@@ -6022,8 +6165,6 @@
   void CheckDeductionGuideTemplate(FunctionTemplateDecl *TD);
 
   void CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD);
-  void CheckExplicitlyDefaultedMemberExceptionSpec(CXXMethodDecl *MD,
-                                                   const FunctionProtoType *T);
   void CheckDelayedMemberExceptionSpecs();
 
   //===--------------------------------------------------------------------===//
@@ -6211,14 +6352,37 @@
   // C++ Templates [C++ 14]
   //
   void FilterAcceptableTemplateNames(LookupResult &R,
-                                     bool AllowFunctionTemplates = true);
+                                     bool AllowFunctionTemplates = true,
+                                     bool AllowDependent = true);
   bool hasAnyAcceptableTemplateNames(LookupResult &R,
-                                     bool AllowFunctionTemplates = true);
+                                     bool AllowFunctionTemplates = true,
+                                     bool AllowDependent = true,
+                                     bool AllowNonTemplateFunctions = false);
+  /// Try to interpret the lookup result D as a template-name.
+  ///
+  /// \param D A declaration found by name lookup.
+  /// \param AllowFunctionTemplates Whether function templates should be
+  ///        considered valid results.
+  /// \param AllowDependent Whether unresolved using declarations (that might
+  ///        name templates) should be considered valid results.
+  NamedDecl *getAsTemplateNameDecl(NamedDecl *D,
+                                   bool AllowFunctionTemplates = true,
+                                   bool AllowDependent = true);
 
+  enum class AssumedTemplateKind {
+    /// This is not assumed to be a template name.
+    None,
+    /// This is assumed to be a template name because lookup found nothing.
+    FoundNothing,
+    /// This is assumed to be a template name because lookup found one or more
+    /// functions (but no function templates).
+    FoundFunctions,
+  };
   bool LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
                           QualType ObjectType, bool EnteringContext,
                           bool &MemberOfUnknownSpecialization,
-                          SourceLocation TemplateKWLoc = SourceLocation());
+                          SourceLocation TemplateKWLoc = SourceLocation(),
+                          AssumedTemplateKind *ATK = nullptr);
 
   TemplateNameKind isTemplateName(Scope *S,
                                   CXXScopeSpec &SS,
@@ -6229,6 +6393,20 @@
                                   TemplateTy &Template,
                                   bool &MemberOfUnknownSpecialization);
 
+  /// Try to resolve an undeclared template name as a type template.
+  ///
+  /// Sets II to the identifier corresponding to the template name, and updates
+  /// Name to a corresponding (typo-corrected) type template name and TNK to
+  /// the corresponding kind, if possible.
+  void ActOnUndeclaredTypeTemplateName(Scope *S, TemplateTy &Name,
+                                       TemplateNameKind &TNK,
+                                       SourceLocation NameLoc,
+                                       IdentifierInfo *&II);
+
+  bool resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name,
+                                        SourceLocation NameLoc,
+                                        bool Diagnose = true);
+
   /// Determine whether a particular identifier might be the name in a C++1z
   /// deduction-guide declaration.
   bool isDeductionGuideName(Scope *S, const IdentifierInfo &Name,
@@ -6338,14 +6516,11 @@
                               TemplateArgumentListInfo &TemplateArgs);
 
   TypeResult
-  ActOnTemplateIdType(CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
+  ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
                       TemplateTy Template, IdentifierInfo *TemplateII,
-                      SourceLocation TemplateIILoc,
-                      SourceLocation LAngleLoc,
-                      ASTTemplateArgsPtr TemplateArgs,
-                      SourceLocation RAngleLoc,
-                      bool IsCtorOrDtorName = false,
-                      bool IsClassName = false);
+                      SourceLocation TemplateIILoc, SourceLocation LAngleLoc,
+                      ASTTemplateArgsPtr TemplateArgs, SourceLocation RAngleLoc,
+                      bool IsCtorOrDtorName = false, bool IsClassName = false);
 
   /// Parsed an elaborated-type-specifier that refers to a template-id,
   /// such as \c class T::template apply<U>.
@@ -7165,7 +7340,7 @@
   QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name,
                                         QualType Type, TypeSourceInfo *TSI,
                                         SourceRange Range, bool DirectInit,
-                                        Expr *&Init);
+                                        Expr *Init);
 
   TypeLoc getReturnTypeLoc(FunctionDecl *FD) const;
 
@@ -7337,8 +7512,10 @@
     SourceRange InstantiationRange;
 
     CodeSynthesisContext()
-      : Kind(TemplateInstantiation), Entity(nullptr), Template(nullptr),
-        TemplateArgs(nullptr), NumTemplateArgs(0), DeductionInfo(nullptr) {}
+        : Kind(TemplateInstantiation),
+          SavedInNonInstantiationSFINAEContext(false), Entity(nullptr),
+          Template(nullptr), TemplateArgs(nullptr), NumTemplateArgs(0),
+          DeductionInfo(nullptr) {}
 
     /// Determines whether this template is an actual instantiation
     /// that should be counted toward the maximum instantiation depth.
@@ -7991,7 +8168,8 @@
                              LateInstantiatedAttrVec *LateAttrs,
                              DeclContext *Owner,
                              LocalInstantiationScope *StartingScope,
-                             bool InstantiatingVarTemplate = false);
+                             bool InstantiatingVarTemplate = false,
+                             VarTemplateSpecializationDecl *PrevVTSD = nullptr);
   void InstantiateVariableInitializer(
       VarDecl *Var, VarDecl *OldVar,
       const MultiLevelTemplateArgumentList &TemplateArgs);
@@ -8084,17 +8262,19 @@
       const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc,
       const ParsedAttributesView &AttrList);
 
-  Decl *ActOnStartClassImplementation(
-                    SourceLocation AtClassImplLoc,
-                    IdentifierInfo *ClassName, SourceLocation ClassLoc,
-                    IdentifierInfo *SuperClassname,
-                    SourceLocation SuperClassLoc);
+  Decl *ActOnStartClassImplementation(SourceLocation AtClassImplLoc,
+                                      IdentifierInfo *ClassName,
+                                      SourceLocation ClassLoc,
+                                      IdentifierInfo *SuperClassname,
+                                      SourceLocation SuperClassLoc,
+                                      const ParsedAttributesView &AttrList);
 
   Decl *ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc,
                                          IdentifierInfo *ClassName,
                                          SourceLocation ClassLoc,
                                          IdentifierInfo *CatName,
-                                         SourceLocation CatLoc);
+                                         SourceLocation CatLoc,
+                                         const ParsedAttributesView &AttrList);
 
   DeclGroupPtrTy ActOnFinishObjCImplementation(Decl *ObjCImpDecl,
                                                ArrayRef<Decl *> Decls);
@@ -8645,6 +8825,16 @@
   void AddXConsumedAttr(Decl *D, SourceRange SR, unsigned SpellingIndex,
                         RetainOwnershipKind K, bool IsTemplateInstantiation);
 
+  /// addAMDGPUFlatWorkGroupSizeAttr - Adds an amdgpu_flat_work_group_size
+  /// attribute to a particular declaration.
+  void addAMDGPUFlatWorkGroupSizeAttr(SourceRange AttrRange, Decl *D, Expr *Min,
+                                      Expr *Max, unsigned SpellingListIndex);
+
+  /// addAMDGPUWavePersEUAttr - Adds an amdgpu_waves_per_eu attribute to a
+  /// particular declaration.
+  void addAMDGPUWavesPerEUAttr(SourceRange AttrRange, Decl *D, Expr *Min,
+                               Expr *Max, unsigned SpellingListIndex);
+
   bool checkNSReturnsRetainedReturnType(SourceLocation loc, QualType type);
 
   //===--------------------------------------------------------------------===//
@@ -8766,6 +8956,10 @@
   /// Check whether we're allowed to call Callee from the current function.
   void checkOpenMPDeviceFunction(SourceLocation Loc, FunctionDecl *Callee);
 
+  /// Check if the expression is allowed to be used in expressions for the
+  /// OpenMP devices.
+  void checkOpenMPDeviceExpr(const Expr *E);
+
   /// Checks if a type or a declaration is disabled due to the owning extension
   /// being disabled, and emits diagnostic messages if it is disabled.
   /// \param D type or declaration to be checked.
@@ -8782,6 +8976,10 @@
                                      SourceRange SrcRange = SourceRange());
 
 public:
+  /// Function tries to capture lambda's captured variables in the OpenMP region
+  /// before the original lambda is captured.
+  void tryCaptureOpenMPLambdas(ValueDecl *V);
+
   /// Return true if the provided declaration \a VD should be captured by
   /// reference.
   /// \param Level Relative level of nested OpenMP construct for that the check
@@ -8791,7 +8989,8 @@
   /// Check if the specified variable is used in one of the private
   /// clauses (private, firstprivate, lastprivate, reduction etc.) in OpenMP
   /// constructs.
-  VarDecl *isOpenMPCapturedDecl(ValueDecl *D);
+  VarDecl *isOpenMPCapturedDecl(ValueDecl *D, bool CheckScopeInfo = false,
+                                unsigned StopAt = 0);
   ExprResult getOpenMPCapturedExpr(VarDecl *Capture, ExprValueKind VK,
                                    ExprObjectKind OK, SourceLocation Loc);
 
@@ -8836,9 +9035,9 @@
   // OpenMP directives and clauses.
   /// Called on correct id-expression from the '#pragma omp
   /// threadprivate'.
-  ExprResult ActOnOpenMPIdExpression(Scope *CurScope,
-                                     CXXScopeSpec &ScopeSpec,
-                                     const DeclarationNameInfo &Id);
+  ExprResult ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec,
+                                     const DeclarationNameInfo &Id,
+                                     OpenMPDirectiveKind Kind);
   /// Called on well-formed '#pragma omp threadprivate'.
   DeclGroupPtrTy ActOnOpenMPThreadprivateDirective(
                                      SourceLocation Loc,
@@ -8846,6 +9045,11 @@
   /// Builds a new OpenMPThreadPrivateDecl and checks its correctness.
   OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(SourceLocation Loc,
                                                   ArrayRef<Expr *> VarList);
+  /// Called on well-formed '#pragma omp allocate'.
+  DeclGroupPtrTy ActOnOpenMPAllocateDirective(SourceLocation Loc,
+                                              ArrayRef<Expr *> VarList,
+                                              ArrayRef<OMPClause *> Clauses,
+                                              DeclContext *Owner = nullptr);
   /// Called on well-formed '#pragma omp requires'.
   DeclGroupPtrTy ActOnOpenMPRequiresDirective(SourceLocation Loc,
                                               ArrayRef<OMPClause *> ClauseList);
@@ -9200,6 +9404,11 @@
                                          SourceLocation StartLoc,
                                          SourceLocation LParenLoc,
                                          SourceLocation EndLoc);
+  /// Called on well-formed 'allocator' clause.
+  OMPClause *ActOnOpenMPAllocatorClause(Expr *Allocator,
+                                        SourceLocation StartLoc,
+                                        SourceLocation LParenLoc,
+                                        SourceLocation EndLoc);
   /// Called on well-formed 'if' clause.
   OMPClause *ActOnOpenMPIfClause(OpenMPDirectiveKind NameModifier,
                                  Expr *Condition, SourceLocation StartLoc,
@@ -9266,7 +9475,7 @@
                                        SourceLocation StartLoc,
                                        SourceLocation LParenLoc,
                                        SourceLocation EndLoc);
-  
+
   OMPClause *ActOnOpenMPSingleExprWithArgClause(
       OpenMPClauseKind Kind, ArrayRef<unsigned> Arguments, Expr *Expr,
       SourceLocation StartLoc, SourceLocation LParenLoc,
@@ -9321,7 +9530,7 @@
   /// Called on well-formed 'unified_address' clause.
   OMPClause *ActOnOpenMPUnifiedSharedMemoryClause(SourceLocation StartLoc,
                                                   SourceLocation EndLoc);
-  
+
   /// Called on well-formed 'reverse_offload' clause.
   OMPClause *ActOnOpenMPReverseOffloadClause(SourceLocation StartLoc,
                                              SourceLocation EndLoc);
@@ -9337,15 +9546,18 @@
 
   OMPClause *ActOnOpenMPVarListClause(
       OpenMPClauseKind Kind, ArrayRef<Expr *> Vars, Expr *TailExpr,
-      SourceLocation StartLoc, SourceLocation LParenLoc,
-      SourceLocation ColonLoc, SourceLocation EndLoc,
-      CXXScopeSpec &ReductionIdScopeSpec,
-      const DeclarationNameInfo &ReductionId, OpenMPDependClauseKind DepKind,
+      const OMPVarListLocTy &Locs, SourceLocation ColonLoc,
+      CXXScopeSpec &ReductionOrMapperIdScopeSpec,
+      DeclarationNameInfo &ReductionOrMapperId, OpenMPDependClauseKind DepKind,
       OpenMPLinearClauseKind LinKind,
       ArrayRef<OpenMPMapModifierKind> MapTypeModifiers,
-      ArrayRef<SourceLocation> MapTypeModifiersLoc,
-      OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
-      SourceLocation DepLinMapLoc);
+      ArrayRef<SourceLocation> MapTypeModifiersLoc, OpenMPMapClauseKind MapType,
+      bool IsMapTypeImplicit, SourceLocation DepLinMapLoc);
+  /// Called on well-formed 'allocate' clause.
+  OMPClause *
+  ActOnOpenMPAllocateClause(Expr *Allocator, ArrayRef<Expr *> VarList,
+                            SourceLocation StartLoc, SourceLocation ColonLoc,
+                            SourceLocation LParenLoc, SourceLocation EndLoc);
   /// Called on well-formed 'private' clause.
   OMPClause *ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList,
                                       SourceLocation StartLoc,
@@ -9429,10 +9641,12 @@
   OMPClause *
   ActOnOpenMPMapClause(ArrayRef<OpenMPMapModifierKind> MapTypeModifiers,
                        ArrayRef<SourceLocation> MapTypeModifiersLoc,
+                       CXXScopeSpec &MapperIdScopeSpec,
+                       DeclarationNameInfo &MapperId,
                        OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
                        SourceLocation MapLoc, SourceLocation ColonLoc,
-                       ArrayRef<Expr *> VarList, SourceLocation StartLoc,
-                       SourceLocation LParenLoc, SourceLocation EndLoc);
+                       ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs,
+                       ArrayRef<Expr *> UnresolvedMappers = llvm::None);
   /// Called on well-formed 'num_teams' clause.
   OMPClause *ActOnOpenMPNumTeamsClause(Expr *NumTeams, SourceLocation StartLoc,
                                        SourceLocation LParenLoc,
@@ -9457,25 +9671,22 @@
       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc,
       SourceLocation KindLoc, SourceLocation EndLoc);
   /// Called on well-formed 'to' clause.
-  OMPClause *ActOnOpenMPToClause(ArrayRef<Expr *> VarList,
-                                 SourceLocation StartLoc,
-                                 SourceLocation LParenLoc,
-                                 SourceLocation EndLoc);
+  OMPClause *
+  ActOnOpenMPToClause(ArrayRef<Expr *> VarList, CXXScopeSpec &MapperIdScopeSpec,
+                      DeclarationNameInfo &MapperId,
+                      const OMPVarListLocTy &Locs,
+                      ArrayRef<Expr *> UnresolvedMappers = llvm::None);
   /// Called on well-formed 'from' clause.
-  OMPClause *ActOnOpenMPFromClause(ArrayRef<Expr *> VarList,
-                                   SourceLocation StartLoc,
-                                   SourceLocation LParenLoc,
-                                   SourceLocation EndLoc);
+  OMPClause *ActOnOpenMPFromClause(
+      ArrayRef<Expr *> VarList, CXXScopeSpec &MapperIdScopeSpec,
+      DeclarationNameInfo &MapperId, const OMPVarListLocTy &Locs,
+      ArrayRef<Expr *> UnresolvedMappers = llvm::None);
   /// Called on well-formed 'use_device_ptr' clause.
   OMPClause *ActOnOpenMPUseDevicePtrClause(ArrayRef<Expr *> VarList,
-                                           SourceLocation StartLoc,
-                                           SourceLocation LParenLoc,
-                                           SourceLocation EndLoc);
+                                           const OMPVarListLocTy &Locs);
   /// Called on well-formed 'is_device_ptr' clause.
   OMPClause *ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList,
-                                          SourceLocation StartLoc,
-                                          SourceLocation LParenLoc,
-                                          SourceLocation EndLoc);
+                                          const OMPVarListLocTy &Locs);
 
   /// The kind of conversion being performed.
   enum CheckedConversionKind {
@@ -9644,6 +9855,12 @@
     /// like address spaces.
     IncompatiblePointerDiscardsQualifiers,
 
+    /// IncompatibleNestedPointerAddressSpaceMismatch - The assignment
+    /// changes address spaces in nested pointer types which is not allowed.
+    /// For instance, converting __private int ** to __generic int ** is
+    /// illegal even though __private could be converted to __generic.
+    IncompatibleNestedPointerAddressSpaceMismatch,
+
     /// IncompatibleNestedPointerQualifiers - The assignment is between two
     /// nested pointer types, and the qualifiers other than the first two
     /// levels differ e.g. char ** -> const char **, but we accept them as an
@@ -10039,6 +10256,14 @@
   ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E,
                                    bool IsConstexpr = false);
 
+  /// ActOnExplicitBoolSpecifier - Build an ExplicitSpecifier from an expression
+  /// found in an explicit(bool) specifier.
+  ExplicitSpecifier ActOnExplicitBoolSpecifier(Expr *E);
+
+  /// tryResolveExplicitSpecifier - Attempt to resolve the explict specifier.
+  /// Returns true if the explicit specifier is now resolved.
+  bool tryResolveExplicitSpecifier(ExplicitSpecifier &ExplicitSpec);
+
   /// DiagnoseAssignmentAsCondition - Given that an expression is
   /// being used as a boolean condition, warn if it's an assignment.
   void DiagnoseAssignmentAsCondition(Expr *E);
@@ -10183,6 +10408,8 @@
 
     DeviceDiagBuilder(Kind K, SourceLocation Loc, unsigned DiagID,
                       FunctionDecl *Fn, Sema &S);
+    DeviceDiagBuilder(DeviceDiagBuilder &&D);
+    DeviceDiagBuilder(const DeviceDiagBuilder &) = default;
     ~DeviceDiagBuilder();
 
     /// Convertible to bool: True if we immediately emitted an error, false if
@@ -10202,8 +10429,9 @@
                                                const T &Value) {
       if (Diag.ImmediateDiag.hasValue())
         *Diag.ImmediateDiag << Value;
-      else if (Diag.PartialDiag.hasValue())
-        *Diag.PartialDiag << Value;
+      else if (Diag.PartialDiagId.hasValue())
+        Diag.S.DeviceDeferredDiags[Diag.Fn][*Diag.PartialDiagId].second
+            << Value;
       return Diag;
     }
 
@@ -10217,7 +10445,7 @@
     // Invariant: At most one of these Optionals has a value.
     // FIXME: Switch these to a Variant once that exists.
     llvm::Optional<SemaDiagnosticBuilder> ImmediateDiag;
-    llvm::Optional<PartialDiagnostic> PartialDiag;
+    llvm::Optional<unsigned> PartialDiagId;
   };
 
   /// Indicate that this function (and thus everything it transtively calls)
@@ -10269,6 +10497,8 @@
   ///  // Otherwise, continue parsing as normal.
   DeviceDiagBuilder diagIfOpenMPDeviceCode(SourceLocation Loc, unsigned DiagID);
 
+  DeviceDiagBuilder targetDiag(SourceLocation Loc, unsigned DiagID);
+
   enum CUDAFunctionTarget {
     CFT_Device,
     CFT_Global,
@@ -10494,8 +10724,8 @@
   void CodeCompleteInitializer(Scope *S, Decl *D);
   void CodeCompleteAfterIf(Scope *S);
 
-  void CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
-                               bool EnteringContext, QualType BaseType);
+  void CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS, bool EnteringContext,
+                               QualType BaseType, QualType PreferredType);
   void CodeCompleteUsing(Scope *S);
   void CodeCompleteUsingDirective(Scope *S);
   void CodeCompleteNamespaceDecl(Scope *S);
@@ -10620,6 +10850,7 @@
 
   ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl,
                                       unsigned BuiltinID, CallExpr *TheCall);
+  void checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall);
 
   bool CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall,
                                     unsigned MaxWidth);
@@ -10673,6 +10904,7 @@
   bool SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall,
                                 int ArgNum, unsigned ExpectedFieldNum,
                                 bool AllowName);
+  bool SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall);
 public:
   enum FormatStringType {
     FST_Scanf,
@@ -10895,9 +11127,6 @@
              "there shouldn't be any pending delayed exception spec checks");
       assert(S.DelayedEquivalentExceptionSpecChecks.empty() &&
              "there shouldn't be any pending delayed exception spec checks");
-      assert(S.DelayedDefaultedMemberExceptionSpecs.empty() &&
-             "there shouldn't be any pending delayed defaulted member "
-             "exception specs");
       assert(S.DelayedDllExportClasses.empty() &&
              "there shouldn't be any pending delayed DLL export classes");
       swapSavedState();
@@ -10909,8 +11138,6 @@
         SavedOverridingExceptionSpecChecks;
     decltype(DelayedEquivalentExceptionSpecChecks)
         SavedEquivalentExceptionSpecChecks;
-    decltype(DelayedDefaultedMemberExceptionSpecs)
-        SavedDefaultedMemberExceptionSpecs;
     decltype(DelayedDllExportClasses) SavedDllExportClasses;
 
     void swapSavedState() {
@@ -10918,8 +11145,6 @@
           S.DelayedOverridingExceptionSpecChecks);
       SavedEquivalentExceptionSpecChecks.swap(
           S.DelayedEquivalentExceptionSpecChecks);
-      SavedDefaultedMemberExceptionSpecs.swap(
-          S.DelayedDefaultedMemberExceptionSpecs);
       SavedDllExportClasses.swap(S.DelayedDllExportClasses);
     }
   };
@@ -10969,6 +11194,15 @@
       Expr *E,
       llvm::function_ref<void(Expr *, RecordDecl *, FieldDecl *, CharUnits)>
           Action);
+
+  /// Describes the reason a calling convention specification was ignored, used
+  /// for diagnostics.
+  enum class CallingConventionIgnoredReason {
+    ForThisTarget = 0,
+    VariadicFunction,
+    ConstructorDestructor,
+    BuiltinFunction
+  };
 };
 
 /// RAII object that enters a new expression evaluation context.
diff --git a/linux-x64/clang/include/clang/Sema/SemaInternal.h b/linux-x64/clang/include/clang/Sema/SemaInternal.h
index 07e633c..dfb34da 100644
--- a/linux-x64/clang/include/clang/Sema/SemaInternal.h
+++ b/linux-x64/clang/include/clang/Sema/SemaInternal.h
@@ -38,15 +38,6 @@
   return FTI.NumParams && !FTIHasSingleVoidParameter(FTI);
 }
 
-// This requires the variable to be non-dependent and the initializer
-// to not be value dependent.
-inline bool IsVariableAConstantExpression(VarDecl *Var, ASTContext &Context) {
-  const VarDecl *DefVD = nullptr;
-  return !isa<ParmVarDecl>(Var) &&
-    Var->isUsableInConstantExpressions(Context) &&
-    Var->getAnyInitializer(DefVD) && DefVD->checkInitIsICE();
-}
-
 // Helper function to check whether D's attributes match current CUDA mode.
 // Decls with mismatched attributes and related diagnostics may have to be
 // ignored during this CUDA compilation pass.
@@ -59,36 +50,6 @@
   return isDeviceSideDecl == LangOpts.CUDAIsDevice;
 }
 
-// Directly mark a variable odr-used. Given a choice, prefer to use
-// MarkVariableReferenced since it does additional checks and then
-// calls MarkVarDeclODRUsed.
-// If the variable must be captured:
-//  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext
-//  - else capture it in the DeclContext that maps to the
-//    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.
-inline void MarkVarDeclODRUsed(VarDecl *Var,
-    SourceLocation Loc, Sema &SemaRef,
-    const unsigned *const FunctionScopeIndexToStopAt) {
-  // Keep track of used but undefined variables.
-  // FIXME: We shouldn't suppress this warning for static data members.
-  if (Var->hasDefinition(SemaRef.Context) == VarDecl::DeclarationOnly &&
-      (!Var->isExternallyVisible() || Var->isInline() ||
-       SemaRef.isExternalWithNoLinkageType(Var)) &&
-      !(Var->isStaticDataMember() && Var->hasInit())) {
-    SourceLocation &old = SemaRef.UndefinedButUsed[Var->getCanonicalDecl()];
-    if (old.isInvalid())
-      old = Loc;
-  }
-  QualType CaptureType, DeclRefType;
-  SemaRef.tryCaptureVariable(Var, Loc, Sema::TryCapture_Implicit,
-    /*EllipsisLoc*/ SourceLocation(),
-    /*BuildAndDiagnose*/ true,
-    CaptureType, DeclRefType,
-    FunctionScopeIndexToStopAt);
-
-  Var->markUsed(SemaRef.Context);
-}
-
 /// Return a DLL attribute from the declaration.
 inline InheritableAttr *getDLLAttr(Decl *D) {
   assert(!(D->hasAttr<DLLImportAttr>() && D->hasAttr<DLLExportAttr>()) &&
diff --git a/linux-x64/clang/include/clang/Sema/Template.h b/linux-x64/clang/include/clang/Sema/Template.h
index b2f0fbb..68c8c83 100644
--- a/linux-x64/clang/include/clang/Sema/Template.h
+++ b/linux-x64/clang/include/clang/Sema/Template.h
@@ -227,7 +227,7 @@
   class LocalInstantiationScope {
   public:
     /// A set of declarations.
-    using DeclArgumentPack = SmallVector<ParmVarDecl *, 4>;
+    using DeclArgumentPack = SmallVector<VarDecl *, 4>;
 
   private:
     /// Reference to the semantic analysis that is performing
@@ -378,7 +378,7 @@
     findInstantiationOf(const Decl *D);
 
     void InstantiatedLocal(const Decl *D, Decl *Inst);
-    void InstantiatedLocalPackArg(const Decl *D, ParmVarDecl *Inst);
+    void InstantiatedLocalPackArg(const Decl *D, VarDecl *Inst);
     void MakeInstantiatedLocalArgPack(const Decl *D);
 
     /// Note that the given parameter pack has been partially substituted
@@ -475,7 +475,8 @@
     // A few supplemental visitor functions.
     Decl *VisitCXXMethodDecl(CXXMethodDecl *D,
                              TemplateParameterList *TemplateParams,
-                             bool IsClassScopeSpecialization = false);
+                             Optional<const ASTTemplateArgumentListInfo *>
+                                 ClassScopeSpecializationArgs = llvm::None);
     Decl *VisitFunctionDecl(FunctionDecl *D,
                             TemplateParameterList *TemplateParams);
     Decl *VisitDecl(Decl *D);
@@ -544,7 +545,8 @@
     Decl *VisitVarTemplateSpecializationDecl(
         VarTemplateDecl *VarTemplate, VarDecl *FromVar, void *InsertPos,
         const TemplateArgumentListInfo &TemplateArgsInfo,
-        ArrayRef<TemplateArgument> Converted);
+        ArrayRef<TemplateArgument> Converted,
+        VarTemplateSpecializationDecl *PrevDecl = nullptr);
 
     Decl *InstantiateTypedefNameDecl(TypedefNameDecl *D, bool IsTypeAlias);
     ClassTemplatePartialSpecializationDecl *
diff --git a/linux-x64/clang/include/clang/Sema/TypoCorrection.h b/linux-x64/clang/include/clang/Sema/TypoCorrection.h
index da57d1b..b49a96c 100644
--- a/linux-x64/clang/include/clang/Sema/TypoCorrection.h
+++ b/linux-x64/clang/include/clang/Sema/TypoCorrection.h
@@ -312,6 +312,13 @@
                : InvalidDistance;
   }
 
+  /// Clone this CorrectionCandidateCallback. CorrectionCandidateCallbacks are
+  /// initially stack-allocated. However in case where delayed typo-correction
+  /// is done we need to move the callback to storage with a longer lifetime.
+  /// Every class deriving from CorrectionCandidateCallback must implement
+  /// this method.
+  virtual std::unique_ptr<CorrectionCandidateCallback> clone() = 0;
+
   void setTypoName(IdentifierInfo *II) { Typo = II; }
   void setTypoNNS(NestedNameSpecifier *NNS) { TypoNNS = NNS; }
 
@@ -342,14 +349,28 @@
   NestedNameSpecifier *TypoNNS;
 };
 
+class DefaultFilterCCC final : public CorrectionCandidateCallback {
+public:
+  explicit DefaultFilterCCC(IdentifierInfo *Typo = nullptr,
+                            NestedNameSpecifier *TypoNNS = nullptr)
+      : CorrectionCandidateCallback(Typo, TypoNNS) {}
+
+  std::unique_ptr<CorrectionCandidateCallback> clone() override {
+    return llvm::make_unique<DefaultFilterCCC>(*this);
+  }
+};
+
 /// Simple template class for restricting typo correction candidates
 /// to ones having a single Decl* of the given type.
 template <class C>
-class DeclFilterCCC : public CorrectionCandidateCallback {
+class DeclFilterCCC final : public CorrectionCandidateCallback {
 public:
   bool ValidateCandidate(const TypoCorrection &candidate) override {
     return candidate.getCorrectionDeclAs<C>();
   }
+  std::unique_ptr<CorrectionCandidateCallback> clone() override {
+    return llvm::make_unique<DeclFilterCCC>(*this);
+  }
 };
 
 // Callback class to limit the allowed keywords and to only accept typo
@@ -362,6 +383,9 @@
                         MemberExpr *ME = nullptr);
 
   bool ValidateCandidate(const TypoCorrection &candidate) override;
+  std::unique_ptr<CorrectionCandidateCallback> clone() override {
+    return llvm::make_unique<FunctionCallFilterCCC>(*this);
+  }
 
 private:
   unsigned NumArgs;
@@ -371,7 +395,7 @@
 };
 
 // Callback class that effectively disabled typo correction
-class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
+class NoTypoCorrectionCCC final : public CorrectionCandidateCallback {
 public:
   NoTypoCorrectionCCC() {
     WantTypeSpecifiers = false;
@@ -384,6 +408,9 @@
   bool ValidateCandidate(const TypoCorrection &candidate) override {
     return false;
   }
+  std::unique_ptr<CorrectionCandidateCallback> clone() override {
+    return llvm::make_unique<NoTypoCorrectionCCC>(*this);
+  }
 };
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h b/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h
index a1ab611..ee545c7 100644
--- a/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h
+++ b/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h
@@ -23,7 +23,7 @@
 #include "clang/Basic/OperatorKinds.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/DenseMapInfo.h"
-#include "llvm/Bitcode/BitCodes.h"
+#include "llvm/Bitstream/BitCodes.h"
 #include <cassert>
 #include <cstdint>
 
@@ -1173,7 +1173,10 @@
       TYPE_DEPENDENT_ADDRESS_SPACE = 47,
 
       /// A dependentSizedVectorType record.
-      TYPE_DEPENDENT_SIZED_VECTOR = 48
+      TYPE_DEPENDENT_SIZED_VECTOR = 48,
+
+      /// A type defined in a macro.
+      TYPE_MACRO_QUALIFIED = 49
     };
 
     /// The type IDs for special types constructed by semantic
@@ -1438,9 +1441,6 @@
       /// A CXXConstructorDecl record.
       DECL_CXX_CONSTRUCTOR,
 
-      /// A CXXConstructorDecl record for an inherited constructor.
-      DECL_CXX_INHERITED_CONSTRUCTOR,
-
       /// A CXXDestructorDecl record.
       DECL_CXX_DESTRUCTOR,
 
@@ -1521,7 +1521,10 @@
 
       /// An OMPRequiresDecl record.
       DECL_OMP_REQUIRES,
-	 
+
+      /// An OMPAllocateDcl record.
+      DECL_OMP_ALLOCATE,
+
       /// An EmptyDecl record.
       DECL_EMPTY,
 
@@ -1729,6 +1732,9 @@
       /// A GNUNullExpr record.
       EXPR_GNU_NULL,
 
+      /// A SourceLocExpr record.
+      EXPR_SOURCE_LOC,
+
       /// A ShuffleVectorExpr record.
       EXPR_SHUFFLE_VECTOR,
 
diff --git a/linux-x64/clang/include/clang/Serialization/ASTReader.h b/linux-x64/clang/include/clang/Serialization/ASTReader.h
index 798adee..37bea48 100644
--- a/linux-x64/clang/include/clang/Serialization/ASTReader.h
+++ b/linux-x64/clang/include/clang/Serialization/ASTReader.h
@@ -56,7 +56,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/iterator.h"
 #include "llvm/ADT/iterator_range.h"
-#include "llvm/Bitcode/BitstreamReader.h"
+#include "llvm/Bitstream/BitstreamReader.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/MemoryBuffer.h"
@@ -97,7 +97,7 @@
 class LangOptions;
 class LazyASTUnresolvedSet;
 class MacroInfo;
-class MemoryBufferCache;
+class InMemoryModuleCache;
 class NamedDecl;
 class NamespaceDecl;
 class ObjCCategoryDecl;
@@ -440,9 +440,6 @@
   /// The module manager which manages modules and their dependencies
   ModuleManager ModuleMgr;
 
-  /// The cache that manages memory buffers for PCM files.
-  MemoryBufferCache &PCMCache;
-
   /// A dummy identifier resolver used to merge TU-scope declarations in
   /// C, for the cases where we don't have a Sema object to provide a real
   /// identifier resolver.
@@ -1440,6 +1437,7 @@
   void Error(StringRef Msg) const;
   void Error(unsigned DiagID, StringRef Arg1 = StringRef(),
              StringRef Arg2 = StringRef()) const;
+  void Error(llvm::Error &&Err) const;
 
 public:
   /// Load the AST file and validate its contents against the given
@@ -1481,8 +1479,8 @@
   ///
   /// \param ReadTimer If non-null, a timer used to track the time spent
   /// deserializing.
-  ASTReader(Preprocessor &PP, ASTContext *Context,
-            const PCHContainerReader &PCHContainerRdr,
+  ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
+            ASTContext *Context, const PCHContainerReader &PCHContainerRdr,
             ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
             StringRef isysroot = "", bool DisableValidation = false,
             bool AllowASTWithCompilerErrors = false,
@@ -2223,6 +2221,9 @@
   llvm::APFloat ReadAPFloat(const RecordData &Record,
                             const llvm::fltSemantics &Sem, unsigned &Idx);
 
+  /// Read an APValue
+  APValue ReadAPValue(const RecordData &Record, unsigned &Idx);
+
   // Read a string
   static std::string ReadString(const RecordData &Record, unsigned &Idx);
 
@@ -2234,6 +2235,10 @@
   // Read a path
   std::string ReadPath(ModuleFile &F, const RecordData &Record, unsigned &Idx);
 
+  // Read a path
+  std::string ReadPath(StringRef BaseDirectory, const RecordData &Record,
+                       unsigned &Idx);
+
   // Skip a path
   static void SkipPath(const RecordData &Record, unsigned &Idx) {
     SkipString(Record, Idx);
@@ -2375,7 +2380,8 @@
 
   /// Reads a record with id AbbrevID from Cursor, resetting the
   /// internal state.
-  unsigned readRecord(llvm::BitstreamCursor &Cursor, unsigned AbbrevID);
+  Expected<unsigned> readRecord(llvm::BitstreamCursor &Cursor,
+                                unsigned AbbrevID);
 
   /// Is this a module file for a module (rather than a PCH or similar).
   bool isModule() const { return F->isModule(); }
@@ -2429,6 +2435,14 @@
                                                  ID);
   }
 
+  ExplicitSpecifier readExplicitSpec() {
+    uint64_t Kind = readInt();
+    bool HasExpr = Kind & 0x1;
+    Kind = Kind >> 1;
+    return ExplicitSpecifier(HasExpr ? readExpr() : nullptr,
+                             static_cast<ExplicitSpecKind>(Kind));
+  }
+
   void readExceptionSpec(SmallVectorImpl<QualType> &ExceptionStorage,
                          FunctionProtoType::ExceptionSpecInfo &ESI) {
     return Reader->readExceptionSpec(*F, ExceptionStorage, ESI, Record, Idx);
@@ -2603,6 +2617,8 @@
     return Reader->ReadSourceRange(*F, Record, Idx);
   }
 
+  APValue readAPValue() { return Reader->ReadAPValue(Record, Idx); }
+
   /// Read an integral value, advancing Idx.
   llvm::APInt readAPInt() {
     return Reader->ReadAPInt(Record, Idx);
@@ -2665,7 +2681,10 @@
       : Cursor(Cursor), Offset(Cursor.GetCurrentBitNo()) {}
 
   ~SavedStreamPosition() {
-    Cursor.JumpToBit(Offset);
+    if (llvm::Error Err = Cursor.JumpToBit(Offset))
+      llvm::report_fatal_error(
+          "Cursor should always be able to go back, failed: " +
+          toString(std::move(Err)));
   }
 
 private:
@@ -2686,7 +2705,6 @@
       : Record(Record), Context(Record.getContext()) {}
 
 #define OPENMP_CLAUSE(Name, Class) void Visit##Class(Class *C);
-  OPENMP_CLAUSE(flush, OMPFlushClause)
 #include "clang/Basic/OpenMPKinds.def"
   OMPClause *readClause();
   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
diff --git a/linux-x64/clang/include/clang/Serialization/ASTWriter.h b/linux-x64/clang/include/clang/Serialization/ASTWriter.h
index 2d12f6a..76bd874 100644
--- a/linux-x64/clang/include/clang/Serialization/ASTWriter.h
+++ b/linux-x64/clang/include/clang/Serialization/ASTWriter.h
@@ -36,7 +36,7 @@
 #include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Bitcode/BitstreamWriter.h"
+#include "llvm/Bitstream/BitstreamWriter.h"
 #include <cassert>
 #include <cstddef>
 #include <cstdint>
@@ -74,8 +74,8 @@
 class LangOptions;
 class MacroDefinitionRecord;
 class MacroInfo;
-class MemoryBufferCache;
 class Module;
+class InMemoryModuleCache;
 class ModuleFileExtension;
 class ModuleFileExtensionWriter;
 class NamedDecl;
@@ -132,7 +132,7 @@
   const SmallVectorImpl<char> &Buffer;
 
   /// The PCM manager which manages memory buffers for pcm files.
-  MemoryBufferCache &PCMCache;
+  InMemoryModuleCache &ModuleCache;
 
   /// The ASTContext we're writing.
   ASTContext *Context = nullptr;
@@ -542,7 +542,7 @@
   /// Create a new precompiled header writer that outputs to
   /// the given bitstream.
   ASTWriter(llvm::BitstreamWriter &Stream, SmallVectorImpl<char> &Buffer,
-            MemoryBufferCache &PCMCache,
+            InMemoryModuleCache &ModuleCache,
             ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
             bool IncludeTimestamps = true);
   ~ASTWriter() override;
@@ -570,7 +570,8 @@
   /// the module but currently is merely a random 32-bit number.
   ASTFileSignature WriteAST(Sema &SemaRef, const std::string &OutputFile,
                             Module *WritingModule, StringRef isysroot,
-                            bool hasErrors = false);
+                            bool hasErrors = false,
+                            bool ShouldCacheASTInMemory = false);
 
   /// Emit a token.
   void AddToken(const Token &Tok, RecordDataImpl &Record);
@@ -737,6 +738,7 @@
   void DeclarationMarkedOpenMPThreadPrivate(const Decl *D) override;
   void DeclarationMarkedOpenMPDeclareTarget(const Decl *D,
                                             const Attr *Attr) override;
+  void DeclarationMarkedOpenMPAllocate(const Decl *D, const Attr *A) override;
   void RedefinedHiddenDefinition(const NamedDecl *D, Module *M) override;
   void AddedAttributeToRecord(const Attr *Attr,
                               const RecordDecl *Record) override;
@@ -861,6 +863,9 @@
   /// Emit a floating-point value.
   void AddAPFloat(const llvm::APFloat &Value);
 
+  /// Emit an APvalue.
+  void AddAPValue(const APValue &Value);
+
   /// Emit a reference to an identifier.
   void AddIdentifierRef(const IdentifierInfo *II) {
     return Writer->AddIdentifierRef(II, *Record);
@@ -973,6 +978,7 @@
   llvm::BitstreamWriter Stream;
   ASTWriter Writer;
   bool AllowASTWithErrors;
+  bool ShouldCacheASTInMemory;
 
 protected:
   ASTWriter &getWriter() { return Writer; }
@@ -980,10 +986,12 @@
   SmallVectorImpl<char> &getPCH() const { return Buffer->Data; }
 
 public:
-  PCHGenerator(const Preprocessor &PP, StringRef OutputFile, StringRef isysroot,
+  PCHGenerator(const Preprocessor &PP, InMemoryModuleCache &ModuleCache,
+               StringRef OutputFile, StringRef isysroot,
                std::shared_ptr<PCHBuffer> Buffer,
                ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
-               bool AllowASTWithErrors = false, bool IncludeTimestamps = true);
+               bool AllowASTWithErrors = false, bool IncludeTimestamps = true,
+               bool ShouldCacheASTInMemory = false);
   ~PCHGenerator() override;
 
   void InitializeSema(Sema &S) override { SemaPtr = &S; }
@@ -999,7 +1007,6 @@
 public:
   OMPClauseWriter(ASTRecordWriter &Record) : Record(Record) {}
 #define OPENMP_CLAUSE(Name, Class) void Visit##Class(Class *S);
-  OPENMP_CLAUSE(flush, OMPFlushClause)
 #include "clang/Basic/OpenMPKinds.def"
   void writeClause(OMPClause *C);
   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
diff --git a/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc b/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc
index 7c6f09f..75060a3 100644
--- a/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc
+++ b/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc
@@ -20,8 +20,8 @@
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
     unsigned Spelling = Record.readInt();
-    unsigned min = Record.readInt();
-    unsigned max = Record.readInt();
+    Expr * min = Record.readExpr();
+    Expr * max = Record.readExpr();
     New = new (Context) AMDGPUFlatWorkGroupSizeAttr(Range, Context, min, max, Spelling);
     cast<InheritableAttr>(New)->setInherited(isInherited);
     New->setImplicit(isImplicit);
@@ -51,8 +51,8 @@
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
     unsigned Spelling = Record.readInt();
-    unsigned min = Record.readInt();
-    unsigned max = Record.readInt();
+    Expr * min = Record.readExpr();
+    Expr * max = Record.readExpr();
     New = new (Context) AMDGPUWavesPerEUAttr(Range, Context, min, max, Spelling);
     cast<InheritableAttr>(New)->setInherited(isInherited);
     New->setImplicit(isImplicit);
@@ -925,17 +925,6 @@
     New->setImplicit(isImplicit);
     break;
   }
-  case attr::FortifyStdLib: {
-    bool isInherited = Record.readInt();
-    bool isImplicit = Record.readInt();
-    unsigned Spelling = Record.readInt();
-    int type = Record.readInt();
-    int flag = Record.readInt();
-    New = new (Context) FortifyStdLibAttr(Range, Context, type, flag, Spelling);
-    cast<InheritableAttr>(New)->setInherited(isInherited);
-    New->setImplicit(isImplicit);
-    break;
-  }
   case attr::GNUInline: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -964,6 +953,15 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::HIPPinnedShadow: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    New = new (Context) HIPPinnedShadowAttr(Range, Context, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::Hot: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -1107,6 +1105,15 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::MIGServerRoutine: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    New = new (Context) MIGServerRoutineAttr(Range, Context, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::MSABI: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -1116,6 +1123,15 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::MSAllocator: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    New = new (Context) MSAllocatorAttr(Range, Context, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::MSInheritance: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -1477,6 +1493,15 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::NoUniqueAddress: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    New = new (Context) NoUniqueAddressAttr(Range, Context, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::NonNull: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -1500,6 +1525,17 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::OMPAllocateDecl: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    OMPAllocateDeclAttr::AllocatorTypeTy allocatorType(static_cast<OMPAllocateDeclAttr::AllocatorTypeTy>(Record.readInt()));
+    Expr * allocator = Record.readExpr();
+    New = new (Context) OMPAllocateDeclAttr(Range, Context, allocatorType, allocator, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::OMPCaptureKind: {
     bool isImplicit = Record.readInt();
     unsigned Spelling = Record.readInt();
@@ -1676,6 +1712,13 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::ObjCClassStub: {
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    New = new (Context) ObjCClassStubAttr(Range, Context, Spelling);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::ObjCDesignatedInitializer: {
     bool isImplicit = Record.readInt();
     unsigned Spelling = Record.readInt();
diff --git a/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc b/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc
index 09a9af0..cd7ecff 100644
--- a/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc
+++ b/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc
@@ -19,8 +19,8 @@
     Record.push_back(SA->isInherited());
     Record.push_back(A->isImplicit());
     Record.push_back(A->getSpellingListIndex());
-    Record.push_back(SA->getMin());
-    Record.push_back(SA->getMax());
+    Record.AddStmt(SA->getMin());
+    Record.AddStmt(SA->getMax());
     break;
   }
   case attr::AMDGPUNumSGPR: {
@@ -44,8 +44,8 @@
     Record.push_back(SA->isInherited());
     Record.push_back(A->isImplicit());
     Record.push_back(A->getSpellingListIndex());
-    Record.push_back(SA->getMin());
-    Record.push_back(SA->getMax());
+    Record.AddStmt(SA->getMin());
+    Record.AddStmt(SA->getMax());
     break;
   }
   case attr::ARMInterrupt: {
@@ -722,15 +722,6 @@
     Record.push_back(SA->getFormatIdx().serialize());
     break;
   }
-  case attr::FortifyStdLib: {
-    const auto *SA = cast<FortifyStdLibAttr>(A);
-    Record.push_back(SA->isInherited());
-    Record.push_back(A->isImplicit());
-    Record.push_back(A->getSpellingListIndex());
-    Record.push_back(SA->getType());
-    Record.push_back(SA->getFlag());
-    break;
-  }
   case attr::GNUInline: {
     const auto *SA = cast<GNUInlineAttr>(A);
     Record.push_back(SA->isInherited());
@@ -753,6 +744,13 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::HIPPinnedShadow: {
+    const auto *SA = cast<HIPPinnedShadowAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    break;
+  }
   case attr::Hot: {
     const auto *SA = cast<HotAttr>(A);
     Record.push_back(SA->isInherited());
@@ -867,6 +865,13 @@
     Record.AddStmt(SA->getValue());
     break;
   }
+  case attr::MIGServerRoutine: {
+    const auto *SA = cast<MIGServerRoutineAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    break;
+  }
   case attr::MSABI: {
     const auto *SA = cast<MSABIAttr>(A);
     Record.push_back(SA->isInherited());
@@ -874,6 +879,13 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::MSAllocator: {
+    const auto *SA = cast<MSAllocatorAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    break;
+  }
   case attr::MSInheritance: {
     const auto *SA = cast<MSInheritanceAttr>(A);
     Record.push_back(SA->isInherited());
@@ -1152,6 +1164,13 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::NoUniqueAddress: {
+    const auto *SA = cast<NoUniqueAddressAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    break;
+  }
   case attr::NonNull: {
     const auto *SA = cast<NonNullAttr>(A);
     Record.push_back(SA->isInherited());
@@ -1169,6 +1188,15 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::OMPAllocateDecl: {
+    const auto *SA = cast<OMPAllocateDeclAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getAllocatorType());
+    Record.AddStmt(SA->getAllocator());
+    break;
+  }
   case attr::OMPCaptureKind: {
     const auto *SA = cast<OMPCaptureKindAttr>(A);
     Record.push_back(A->isImplicit());
@@ -1304,6 +1332,11 @@
     Record.AddIdentifierRef(SA->getInstanceMethod());
     break;
   }
+  case attr::ObjCClassStub: {
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    break;
+  }
   case attr::ObjCDesignatedInitializer: {
     Record.push_back(A->isImplicit());
     Record.push_back(A->getSpellingListIndex());
diff --git a/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h b/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h
index ce5748b..0c05537 100644
--- a/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h
+++ b/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h
@@ -73,7 +73,7 @@
   }
 
   void insertOrReplace(const value_type &Val) {
-    iterator I = std::lower_bound(Rep.begin(), Rep.end(), Val, Compare());
+    iterator I = llvm::lower_bound(Rep, Val, Compare());
     if (I != Rep.end() && I->first == Val.first) {
       I->second = Val.second;
       return;
@@ -91,7 +91,7 @@
   const_iterator end() const { return Rep.end(); }
 
   iterator find(Int K) {
-    iterator I = std::upper_bound(Rep.begin(), Rep.end(), K, Compare());
+    iterator I = llvm::upper_bound(Rep, K, Compare());
     // I points to the first entry with a key > K, which is the range that
     // follows the one containing K.
     if (I == Rep.begin())
diff --git a/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h b/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h
index 2f9a70d..5f48126 100644
--- a/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h
+++ b/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h
@@ -20,6 +20,7 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
 #include <memory>
 #include <utility>
 
@@ -122,27 +123,14 @@
 public:
   ~GlobalModuleIndex();
 
-  /// An error code returned when trying to read an index.
-  enum ErrorCode {
-    /// No error occurred.
-    EC_None,
-    /// No index was found.
-    EC_NotFound,
-    /// Some other process is currently building the index; it is not
-    /// available yet.
-    EC_Building,
-    /// There was an unspecified I/O error reading or writing the index.
-    EC_IOError
-  };
-
   /// Read a global index file for the given directory.
   ///
   /// \param Path The path to the specific module cache where the module files
   /// for the intended configuration reside.
   ///
   /// \returns A pair containing the global module index (if it exists) and
-  /// the error code.
-  static std::pair<GlobalModuleIndex *, ErrorCode>
+  /// the error.
+  static std::pair<GlobalModuleIndex *, llvm::Error>
   readIndex(llvm::StringRef Path);
 
   /// Returns an iterator for identifiers stored in the index table.
@@ -194,9 +182,9 @@
   /// creating modules.
   /// \param Path The path to the directory containing module files, into
   /// which the global index will be written.
-  static ErrorCode writeIndex(FileManager &FileMgr,
-                              const PCHContainerReader &PCHContainerRdr,
-                              llvm::StringRef Path);
+  static llvm::Error writeIndex(FileManager &FileMgr,
+                                const PCHContainerReader &PCHContainerRdr,
+                                llvm::StringRef Path);
 };
 }
 
diff --git a/linux-x64/clang/include/clang/Serialization/InMemoryModuleCache.h b/linux-x64/clang/include/clang/Serialization/InMemoryModuleCache.h
new file mode 100644
index 0000000..7b5b5c1
--- /dev/null
+++ b/linux-x64/clang/include/clang/Serialization/InMemoryModuleCache.h
@@ -0,0 +1,107 @@
+//===- InMemoryModuleCache.h - In-memory cache for modules ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_SERIALIZATION_INMEMORYMODULECACHE_H
+#define LLVM_CLANG_SERIALIZATION_INMEMORYMODULECACHE_H
+
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include <memory>
+
+namespace clang {
+
+/// In-memory cache for modules.
+///
+/// This is a cache for modules for use across a compilation, sharing state
+/// between the CompilerInstances in an implicit modules build.  It must be
+/// shared by each CompilerInstance, ASTReader, ASTWriter, and ModuleManager
+/// that are coordinating.
+///
+/// Critically, it ensures that a single process has a consistent view of each
+/// PCM.  This is used by \a CompilerInstance when building PCMs to ensure that
+/// each \a ModuleManager sees the same files.
+class InMemoryModuleCache : public llvm::RefCountedBase<InMemoryModuleCache> {
+  struct PCM {
+    std::unique_ptr<llvm::MemoryBuffer> Buffer;
+
+    /// Track whether this PCM is known to be good (either built or
+    /// successfully imported by a CompilerInstance/ASTReader using this
+    /// cache).
+    bool IsFinal = false;
+
+    PCM() = default;
+    PCM(std::unique_ptr<llvm::MemoryBuffer> Buffer)
+        : Buffer(std::move(Buffer)) {}
+  };
+
+  /// Cache of buffers.
+  llvm::StringMap<PCM> PCMs;
+
+public:
+  /// There are four states for a PCM.  It must monotonically increase.
+  ///
+  ///  1. Unknown: the PCM has neither been read from disk nor built.
+  ///  2. Tentative: the PCM has been read from disk but not yet imported or
+  ///     built.  It might work.
+  ///  3. ToBuild: the PCM read from disk did not work but a new one has not
+  ///     been built yet.
+  ///  4. Final: indicating that the current PCM was either built in this
+  ///     process or has been successfully imported.
+  enum State { Unknown, Tentative, ToBuild, Final };
+
+  /// Get the state of the PCM.
+  State getPCMState(llvm::StringRef Filename) const;
+
+  /// Store the PCM under the Filename.
+  ///
+  /// \pre state is Unknown
+  /// \post state is Tentative
+  /// \return a reference to the buffer as a convenience.
+  llvm::MemoryBuffer &addPCM(llvm::StringRef Filename,
+                             std::unique_ptr<llvm::MemoryBuffer> Buffer);
+
+  /// Store a just-built PCM under the Filename.
+  ///
+  /// \pre state is Unknown or ToBuild.
+  /// \pre state is not Tentative.
+  /// \return a reference to the buffer as a convenience.
+  llvm::MemoryBuffer &addBuiltPCM(llvm::StringRef Filename,
+                                  std::unique_ptr<llvm::MemoryBuffer> Buffer);
+
+  /// Try to remove a buffer from the cache.  No effect if state is Final.
+  ///
+  /// \pre state is Tentative/Final.
+  /// \post Tentative => ToBuild or Final => Final.
+  /// \return false on success, i.e. if Tentative => ToBuild.
+  bool tryToDropPCM(llvm::StringRef Filename);
+
+  /// Mark a PCM as final.
+  ///
+  /// \pre state is Tentative or Final.
+  /// \post state is Final.
+  void finalizePCM(llvm::StringRef Filename);
+
+  /// Get a pointer to the pCM if it exists; else nullptr.
+  llvm::MemoryBuffer *lookupPCM(llvm::StringRef Filename) const;
+
+  /// Check whether the PCM is final and has been shown to work.
+  ///
+  /// \return true iff state is Final.
+  bool isPCMFinal(llvm::StringRef Filename) const;
+
+  /// Check whether the PCM is waiting to be built.
+  ///
+  /// \return true iff state is ToBuild.
+  bool shouldBuildPCM(llvm::StringRef Filename) const;
+};
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_SERIALIZATION_INMEMORYMODULECACHE_H
diff --git a/linux-x64/clang/include/clang/Serialization/Module.h b/linux-x64/clang/include/clang/Serialization/Module.h
index 45f82d4..1979c53 100644
--- a/linux-x64/clang/include/clang/Serialization/Module.h
+++ b/linux-x64/clang/include/clang/Serialization/Module.h
@@ -24,7 +24,7 @@
 #include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Bitcode/BitstreamReader.h"
+#include "llvm/Bitstream/BitstreamReader.h"
 #include "llvm/Support/Endian.h"
 #include <cassert>
 #include <cstdint>
@@ -174,7 +174,7 @@
   unsigned Generation;
 
   /// The memory buffer that stores the data associated with
-  /// this AST file, owned by the PCMCache in the ModuleManager.
+  /// this AST file, owned by the InMemoryModuleCache.
   llvm::MemoryBuffer *Buffer;
 
   /// The size of this file, in bits.
diff --git a/linux-x64/clang/include/clang/Serialization/ModuleManager.h b/linux-x64/clang/include/clang/Serialization/ModuleManager.h
index 7bd7dc2..5b3b22b 100644
--- a/linux-x64/clang/include/clang/Serialization/ModuleManager.h
+++ b/linux-x64/clang/include/clang/Serialization/ModuleManager.h
@@ -38,7 +38,7 @@
 class FileManager;
 class GlobalModuleIndex;
 class HeaderSearch;
-class MemoryBufferCache;
+class InMemoryModuleCache;
 class ModuleMap;
 class PCHContainerReader;
 
@@ -67,7 +67,7 @@
   FileManager &FileMgr;
 
   /// Cache of PCM files.
-  IntrusiveRefCntPtr<MemoryBufferCache> PCMCache;
+  IntrusiveRefCntPtr<InMemoryModuleCache> ModuleCache;
 
   /// Knows how to unwrap module containers.
   const PCHContainerReader &PCHContainerRdr;
@@ -139,7 +139,7 @@
       SmallVectorImpl<std::unique_ptr<ModuleFile>>::reverse_iterator>;
   using ModuleOffset = std::pair<uint32_t, StringRef>;
 
-  explicit ModuleManager(FileManager &FileMgr, MemoryBufferCache &PCMCache,
+  explicit ModuleManager(FileManager &FileMgr, InMemoryModuleCache &ModuleCache,
                          const PCHContainerReader &PCHContainerRdr,
                          const HeaderSearch &HeaderSearchInfo);
   ~ModuleManager();
@@ -317,7 +317,7 @@
   /// View the graphviz representation of the module graph.
   void viewGraph();
 
-  MemoryBufferCache &getPCMCache() const { return *PCMCache; }
+  InMemoryModuleCache &getModuleCache() const { return *ModuleCache; }
 };
 
 } // namespace serialization
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h
index 51b3002..c773233 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h
@@ -26,7 +26,7 @@
 class CheckerRegistry;
 
 #define GET_CHECKERS
-#define CHECKER(FULLNAME, CLASS, HELPTEXT, DOC_URI)                            \
+#define CHECKER(FULLNAME, CLASS, HELPTEXT, DOC_URI, IS_HIDDEN)                 \
   void register##CLASS(CheckerManager &mgr);                                   \
   bool shouldRegister##CLASS(const LangOptions &LO);
 #include "clang/StaticAnalyzer/Checkers/Checkers.inc"
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc
index 4182e84..491e53d 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc
@@ -14,10 +14,12 @@
 PACKAGE("optin.portability")
 PACKAGE("nullability")
 PACKAGE("core.uninitialized")
+PACKAGE("apiModeling.llvm")
 PACKAGE("apiModeling.google")
 PACKAGE("alpha.security.taint")
 PACKAGE("alpha.deadcode")
 PACKAGE("alpha.cplusplus")
+PACKAGE("alpha.nondeterminism")
 PACKAGE("alpha.osx.cocoa")
 PACKAGE("optin.cplusplus")
 PACKAGE("optin.osx.cocoa")
@@ -44,163 +46,177 @@
 #endif // GET_PACKAGES
 
 
+#ifdef GET_PACKAGE_OPTIONS
+PACKAGE_OPTION("bool", "nullability", "NoDiagnoseCallsToSystemHeaders", "Suppresses warnings for violating nullability annotations of system header functions. This is useful if you are concerned with your custom nullability annotations more than with following nullability specifications of system header functions.", "false", "released", false)
+#endif // GET_PACKAGE_OPTIONS
+
+
 #ifdef GET_CHECKERS
 
-CHECKER("debug.AnalysisOrder", AnalysisOrderChecker, "Print callbacks that are called during analysis in order", "")
-CHECKER("debug.Stats", AnalyzerStatsChecker, "Emit warnings with analyzer statistics", "")
-CHECKER("alpha.security.ArrayBound", ArrayBoundChecker, "Warn about buffer overflows (older checker)", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.ArrayBound")
-CHECKER("alpha.security.ArrayBoundV2", ArrayBoundCheckerV2, "Warn about buffer overflows (newer checker)", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.ArrayBoundV2")
-CHECKER("osx.cocoa.AutoreleaseWrite", AutoreleaseWriteChecker, "Warn about potentially crashing writes to autoreleasing objects from different autoreleasing pools in Objective-C", "")
-CHECKER("alpha.unix.BlockInCriticalSection", BlockInCriticalSectionChecker, "Check for calls to blocking functions inside a critical section", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.BlockInCriticalSection")
-CHECKER("alpha.core.BoolAssignment", BoolAssignmentChecker, "Warn about assigning non-{0,1} values to Boolean variables", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.BoolAssignment")
-CHECKER("core.builtin.BuiltinFunctions", BuiltinFunctionChecker, "Evaluate compiler builtin functions (e.g., alloca())", "")
-CHECKER("osx.coreFoundation.CFError", CFErrorChecker, "Check usage of CFErrorRef* parameters", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.CFError")
-CHECKER("debug.DumpCFG", CFGDumper, "Display Control-Flow Graphs", "")
-CHECKER("debug.ViewCFG", CFGViewer, "View Control-Flow Graphs using GraphViz", "")
-CHECKER("osx.coreFoundation.CFNumber", CFNumberChecker, "Check for proper uses of CFNumber APIs", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.CFNumber")
-CHECKER("osx.coreFoundation.CFRetainRelease", CFRetainReleaseChecker, "Check for null arguments to CFRetain/CFRelease/CFMakeCollectable", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.CFRetainRelease")
-CHECKER("alpha.unix.cstring.BufferOverlap", CStringBufferOverlap, "Checks for overlap in two buffer arguments", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.cstring.BufferOverlap")
-CHECKER("unix.cstring.CStringModeling", CStringModeling, "The base of several CString related checkers. On it's own it emits no reports, but adds valuable information to the analysis when enabled.", "")
-CHECKER("alpha.unix.cstring.NotNullTerminated", CStringNotNullTerm, "Check for arguments which are not null-terminating strings", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.cstring.NotNullTerminated")
-CHECKER("unix.cstring.NullArg", CStringNullArg, "Check for null pointers being passed as arguments to C string functions", "https://clang-analyzer.llvm.org/available_checks.html#unix.cstring.NullArg")
-CHECKER("alpha.unix.cstring.OutOfBounds", CStringOutOfBounds, "Check for out-of-bounds access in string functions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.cstring.OutOfBounds")
-CHECKER("unix.cstring.BadSizeArg", CStringSyntaxChecker, "Check the size argument passed into C string functions for common erroneous patterns", "https://clang-analyzer.llvm.org/available_checks.html#unix.cstring.BadSizeArg")
-CHECKER("cplusplus.SelfAssignment", CXXSelfAssignmentChecker, "Checks C++ copy and move assignment operators for self assignment", "")
-CHECKER("core.CallAndMessage", CallAndMessageChecker, "Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers)", "https://clang-analyzer.llvm.org/available_checks.html#core.CallAndMessage")
-CHECKER("alpha.core.CallAndMessageUnInitRefArg", CallAndMessageUnInitRefArg, "Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers, and pointer to undefined variables)", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.CallAndMessageUnInitRefArg")
-CHECKER("debug.DumpCalls", CallDumper, "Print calls as they are traversed by the engine", "")
-CHECKER("debug.DumpCallGraph", CallGraphDumper, "Display Call Graph", "")
-CHECKER("debug.ViewCallGraph", CallGraphViewer, "View Call Graph using GraphViz", "")
-CHECKER("alpha.core.CastSize", CastSizeChecker, "Check when casting a malloc'ed type T, whether the size is a multiple of the size of T", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.CastSize")
-CHECKER("alpha.core.CastToStruct", CastToStructChecker, "Check for cast from non-struct pointer to struct pointer", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.CastToStruct")
-CHECKER("alpha.unix.Chroot", ChrootChecker, "Check improper use of chroot", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.Chroot")
-CHECKER("osx.cocoa.ClassRelease", ClassReleaseChecker, "Check for sending 'retain', 'release', or 'autorelease' directly to a Class", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.ClassRelease")
-CHECKER("alpha.clone.CloneChecker", CloneChecker, "Reports similar pieces of code.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.clone.CloneChecker")
-CHECKER("debug.ConfigDumper", ConfigDumper, "Dump config table", "")
-CHECKER("alpha.core.Conversion", ConversionChecker, "Loss of sign/precision in implicit conversions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.Conversion")
-CHECKER("valist.CopyToSelf", CopyToSelfChecker, "Check for va_lists which are copied onto itself.", "")
-CHECKER("deadcode.DeadStores", DeadStoresChecker, "Check for values stored to variables that are never read afterwards", "https://clang-analyzer.llvm.org/available_checks.html#deadcode.DeadStores")
-CHECKER("alpha.cplusplus.DeleteWithNonVirtualDtor", DeleteWithNonVirtualDtorChecker, "Reports destructions of polymorphic objects with a non-virtual destructor in their base class", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.DeleteWithNonVirtualDtor")
-CHECKER("security.insecureAPI.DeprecatedOrUnsafeBufferHandling", DeprecatedOrUnsafeBufferHandling, "Warn on uses of unsecure or deprecated buffer manipulating functions", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.DeprecatedOrUnsafeBufferHandling")
-CHECKER("core.NullDereference", DereferenceChecker, "Check for dereferences of null pointers", "https://clang-analyzer.llvm.org/available_checks.html#core.NullDereference")
-CHECKER("alpha.osx.cocoa.DirectIvarAssignment", DirectIvarAssignment, "Check for direct assignments to instance variables", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.DirectIvarAssignment")
-CHECKER("alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions", DirectIvarAssignmentForAnnotatedFunctions, "Check for direct assignments to instance variables in the methods annotated with objc_no_direct_instance_variable_assignment", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions")
-CHECKER("core.DivideZero", DivZeroChecker, "Check for division by zero", "https://clang-analyzer.llvm.org/available_checks.html#core.DivideZero")
-CHECKER("debug.DumpDominators", DominatorsTreeDumper, "Print the dominance tree for a given CFG", "")
-CHECKER("unix.DynamicMemoryModeling", DynamicMemoryModeling, "The base of several malloc() related checkers. On it's own it emits no reports, but adds valuable information to the analysis when enabled.", "")
-CHECKER("alpha.core.DynamicTypeChecker", DynamicTypeChecker, "Check for cases where the dynamic and the static type of an object are unrelated.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.DynamicTypeChecker")
-CHECKER("core.DynamicTypePropagation", DynamicTypePropagation, "Generate dynamic type information", "")
-CHECKER("optin.osx.cocoa.localizability.EmptyLocalizationContextChecker", EmptyLocalizationContextChecker, "Check that NSLocalizedString macros include a comment for context", "https://clang-analyzer.llvm.org/available_checks.html#optin.osx.cocoa.localizability.EmptyLocalizationContextChecker")
-CHECKER("alpha.cplusplus.EnumCastOutOfRange", EnumCastOutOfRangeChecker, "Check integer to enumeration casts for out of range values", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.EnumCastOutOfRange")
-CHECKER("debug.ViewExplodedGraph", ExplodedGraphViewer, "View Exploded Graphs using GraphViz", "")
-CHECKER("debug.ExprInspection", ExprInspectionChecker, "Check the analyzer's understanding of expressions", "")
-CHECKER("alpha.core.FixedAddr", FixedAddressChecker, "Check for assignment of a fixed address to a pointer", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.FixedAddr")
-CHECKER("security.FloatLoopCounter", FloatLoopCounter, "Warn on using a floating point value as a loop counter (CERT: FLP30-C, FLP30-CPP)", "https://clang-analyzer.llvm.org/available_checks.html#security.FloatLoopCounter")
-CHECKER("optin.performance.GCDAntipattern", GCDAntipattern, "Check for performance anti-patterns when using Grand Central Dispatch", "")
-CHECKER("apiModeling.google.GTest", GTestChecker, "Model gtest assertion APIs", "")
-CHECKER("alpha.security.taint.TaintPropagation", GenericTaintChecker, "Generate taint information used by other checkers", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.taint.TaintPropagation")
-CHECKER("alpha.core.IdenticalExpr", IdenticalExprChecker, "Warn about unintended use of identical expressions in operators", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.IdenticalExpr")
-CHECKER("cplusplus.InnerPointer", InnerPointerChecker, "Check for inner pointers of C++ containers used after re/deallocation", "")
-CHECKER("alpha.osx.cocoa.InstanceVariableInvalidation", InstanceVariableInvalidation, "Check that the invalidatable instance variables are invalidated in the methods annotated with objc_instance_variable_invalidator", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.InstanceVariableInvalidation")
-CHECKER("alpha.cplusplus.InvalidatedIterator", InvalidatedIteratorChecker, "Check for use of invalidated iterators", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.InvalidatedIterator")
-CHECKER("alpha.cplusplus.IteratorModeling", IteratorModeling, "Models iterators of C++ containers", "")
-CHECKER("alpha.cplusplus.IteratorRange", IteratorRangeChecker, "Check for iterators used outside their valid ranges", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.IteratorRange")
-CHECKER("alpha.osx.cocoa.IvarInvalidationModeling", IvarInvalidationModeling, "Gathers information for annotation driven invalidation checking for classes that contains a method annotated with 'objc_instance_variable_invalidator'", "")
-CHECKER("alpha.llvm.Conventions", LLVMConventionsChecker, "Check code for LLVM codebase conventions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.llvm.Conventions")
-CHECKER("debug.DumpLiveStmts", LiveStatementsDumper, "Print results of live statement analysis", "")
-CHECKER("debug.DumpLiveVars", LiveVariablesDumper, "Print results of live variable analysis", "")
-CHECKER("optin.mpi.MPI-Checker", MPIChecker, "Checks MPI code", "https://clang-analyzer.llvm.org/available_checks.html#optin.mpi.MPI-Checker")
-CHECKER("osx.SecKeychainAPI", MacOSKeychainAPIChecker, "Check for proper uses of Secure Keychain APIs", "https://clang-analyzer.llvm.org/available_checks.html#osx.SecKeychainAPI")
-CHECKER("osx.API", MacOSXAPIChecker, "Check for proper uses of various Apple APIs", "https://clang-analyzer.llvm.org/available_checks.html#osx.API")
-CHECKER("unix.Malloc", MallocChecker, "Check for memory leaks, double free, and use-after-free problems. Traces memory managed by malloc()/free().", "https://clang-analyzer.llvm.org/available_checks.html#unix.Malloc")
-CHECKER("alpha.security.MallocOverflow", MallocOverflowSecurityChecker, "Check for overflows in the arguments to malloc()", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.MallocOverflow")
-CHECKER("unix.MallocSizeof", MallocSizeofChecker, "Check for dubious malloc arguments involving sizeof", "https://clang-analyzer.llvm.org/available_checks.html#unix.MallocSizeof")
-CHECKER("unix.MismatchedDeallocator", MismatchedDeallocatorChecker, "Check for mismatched deallocators.", "https://clang-analyzer.llvm.org/available_checks.html#unix.MismatchedDeallocator")
-CHECKER("alpha.cplusplus.MismatchedIterator", MismatchedIteratorChecker, "Check for use of iterators of different containers where iterators of the same container are expected", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.MismatchedIterator")
-CHECKER("alpha.osx.cocoa.MissingInvalidationMethod", MissingInvalidationMethod, "Check that the invalidation methods are present in classes that contain invalidatable instance variables", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.MissingInvalidationMethod")
-CHECKER("alpha.security.MmapWriteExec", MmapWriteExecChecker, "Warn on mmap() calls that are both writable and executable", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.MmapWriteExec")
-CHECKER("cplusplus.Move", MoveChecker, "Find use-after-move bugs in C++", "https://clang-analyzer.llvm.org/available_checks.html#cplusplus.Move")
-CHECKER("osx.cocoa.NSAutoreleasePool", NSAutoreleasePoolChecker, "Warn for suboptimal uses of NSAutoreleasePool in Objective-C GC mode", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.NSAutoreleasePool")
-CHECKER("osx.cocoa.NSError", NSErrorChecker, "Check usage of NSError** parameters", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.NSError")
-CHECKER("osx.NSOrCFErrorDerefChecker", NSOrCFErrorDerefChecker, "Implementation checker for NSErrorChecker and CFErrorChecker", "")
-CHECKER("cplusplus.NewDelete", NewDeleteChecker, "Check for double-free and use-after-free problems. Traces memory managed by new/delete.", "https://clang-analyzer.llvm.org/available_checks.html#cplusplus.NewDelete")
-CHECKER("cplusplus.NewDeleteLeaks", NewDeleteLeaksChecker, "Check for memory leaks. Traces memory managed by new/delete.", "https://clang-analyzer.llvm.org/available_checks.html#cplusplus.NewDeleteLeaks")
-CHECKER("osx.cocoa.NilArg", NilArgChecker, "Check for prohibited nil arguments to ObjC method calls", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.NilArg")
-CHECKER("core.builtin.NoReturnFunctions", NoReturnFunctionChecker, "Evaluate \"panic\" functions that are known to not return to the caller", "")
-CHECKER("optin.osx.cocoa.localizability.NonLocalizedStringChecker", NonLocalizedStringChecker, "Warns about uses of non-localized NSStrings passed to UI methods expecting localized NSStrings", "https://clang-analyzer.llvm.org/available_checks.html#optin.osx.cocoa.localizability.NonLocalizedStringChecker")
-CHECKER("core.NonNullParamChecker", NonNullParamChecker, "Check for null pointers passed as arguments to a function whose arguments are references or marked with the 'nonnull' attribute", "https://clang-analyzer.llvm.org/available_checks.html#core.NonNullParamChecker")
-CHECKER("core.NonnilStringConstants", NonnullGlobalConstantsChecker, "Assume that const string-like globals are non-null", "")
-CHECKER("nullability.NullPassedToNonnull", NullPassedToNonnullChecker, "Warns when a null pointer is passed to a pointer which has a _Nonnull type.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullPassedToNonnull")
-CHECKER("nullability.NullReturnedFromNonnull", NullReturnedFromNonnullChecker, "Warns when a null pointer is returned from a function that has _Nonnull return type.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullReturnedFromNonnull")
-CHECKER("nullability.NullabilityBase", NullabilityBase, "Stores information during the analysis about nullability.", "")
-CHECKER("nullability.NullableDereferenced", NullableDereferencedChecker, "Warns when a nullable pointer is dereferenced.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullableDereferenced")
-CHECKER("nullability.NullablePassedToNonnull", NullablePassedToNonnullChecker, "Warns when a nullable pointer is passed to a pointer which has a _Nonnull type.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullablePassedToNonnull")
-CHECKER("nullability.NullableReturnedFromNonnull", NullableReturnedFromNonnullChecker, "Warns when a nullable pointer is returned from a function that has _Nonnull return type.", "")
-CHECKER("osx.NumberObjectConversion", NumberObjectConversionChecker, "Check for erroneous conversions of objects representing numbers into numbers", "")
-CHECKER("optin.osx.OSObjectCStyleCast", OSObjectCStyleCast, "Checker for C-style casts of OSObjects", "")
-CHECKER("osx.OSObjectRetainCount", OSObjectRetainCountChecker, "Check for leaks and improper reference count management for OSObject", "")
-CHECKER("osx.cocoa.AtSync", ObjCAtSyncChecker, "Check for nil pointers used as mutexes for @synchronized", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.AtSync")
-CHECKER("osx.coreFoundation.containers.PointerSizedValues", ObjCContainersASTChecker, "Warns if 'CFArray', 'CFDictionary', 'CFSet' are created with non-pointer-size values", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.containers.PointerSizedValues")
-CHECKER("osx.coreFoundation.containers.OutOfBounds", ObjCContainersChecker, "Checks for index out-of-bounds when using 'CFArray' API", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.containers.OutOfBounds")
-CHECKER("osx.cocoa.Dealloc", ObjCDeallocChecker, "Warn about Objective-C classes that lack a correct implementation of -dealloc", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.Dealloc")
-CHECKER("osx.cocoa.ObjCGenerics", ObjCGenericsChecker, "Check for type errors when using Objective-C generics", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.ObjCGenerics")
-CHECKER("osx.cocoa.Loops", ObjCLoopChecker, "Improved modeling of loops using Cocoa collection types", "")
-CHECKER("osx.cocoa.IncompatibleMethodTypes", ObjCMethSigsChecker, "Warn about Objective-C method signatures with type incompatibilities", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.IncompatibleMethodTypes")
-CHECKER("osx.cocoa.NonNilReturnValue", ObjCNonNilReturnValueChecker, "Model the APIs that are guaranteed to return a non-nil value", "")
-CHECKER("osx.ObjCProperty", ObjCPropertyChecker, "Check for proper uses of Objective-C properties", "")
-CHECKER("osx.cocoa.SelfInit", ObjCSelfInitChecker, "Check that 'self' is properly initialized inside an initializer method", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.SelfInit")
-CHECKER("osx.cocoa.MissingSuperCall", ObjCSuperCallChecker, "Warn about Objective-C methods that lack a necessary call to super", "")
-CHECKER("osx.cocoa.SuperDealloc", ObjCSuperDeallocChecker, "Warn about improper use of '[super dealloc]' in Objective-C", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.SuperDealloc")
-CHECKER("osx.cocoa.UnusedIvars", ObjCUnusedIvarsChecker, "Warn about private ivars that are never used", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.UnusedIvars")
-CHECKER("optin.performance.Padding", PaddingChecker, "Check for excessively padded structs.", "")
-CHECKER("alpha.osx.cocoa.localizability.PluralMisuseChecker", PluralMisuseChecker, "Warns against using one vs. many plural pattern in code when generating localized strings.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.localizability.PluralMisuseChecker")
-CHECKER("alpha.core.PointerArithm", PointerArithChecker, "Check for pointer arithmetic on locations other than array elements", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.PointerArithm")
-CHECKER("alpha.core.PointerSub", PointerSubChecker, "Check for pointer subtractions on two pointers pointing to different memory chunks", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.PointerSub")
-CHECKER("alpha.unix.PthreadLock", PthreadLockChecker, "Simple lock -> unlock checker", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.PthreadLock")
-CHECKER("osx.cocoa.RetainCountBase", RetainCountBase, "Common base of various retain count related checkers", "")
-CHECKER("osx.cocoa.RetainCount", RetainCountChecker, "Check for leaks and improper reference count management", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.RetainCount")
-CHECKER("alpha.security.ReturnPtrRange", ReturnPointerRangeChecker, "Check for an out-of-bound pointer being returned to callers", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.ReturnPtrRange")
-CHECKER("core.uninitialized.UndefReturn", ReturnUndefChecker, "Check for uninitialized values being returned to the caller", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.UndefReturn")
-CHECKER("osx.cocoa.RunLoopAutoreleaseLeak", RunLoopAutoreleaseLeakChecker, "Check for leaked memory in autorelease pools that will never be drained", "")
-CHECKER("security.insecureAPI.SecuritySyntaxChecker", SecuritySyntaxChecker, "Base of various security function related checkers", "")
-CHECKER("alpha.unix.SimpleStream", SimpleStreamChecker, "Check for misuses of stream APIs", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.SimpleStream")
-CHECKER("alpha.core.SizeofPtr", SizeofPointerChecker, "Warn about unintended use of sizeof() on pointer expressions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.SizeofPtr")
-CHECKER("alpha.core.StackAddressAsyncEscape", StackAddrAsyncEscapeChecker, "Check that addresses to stack memory do not escape the function", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.StackAddressAsyncEscape")
-CHECKER("core.StackAddrEscapeBase", StackAddrEscapeBase, "Generate information about stack address escapes.", "")
-CHECKER("core.StackAddressEscape", StackAddrEscapeChecker, "Check that addresses to stack memory do not escape the function", "https://clang-analyzer.llvm.org/available_checks.html#core.StackAddressEscape")
-CHECKER("apiModeling.StdCLibraryFunctions", StdCLibraryFunctionsChecker, "Improve modeling of the C standard library functions", "")
-CHECKER("alpha.unix.Stream", StreamChecker, "Check stream handling functions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.Stream")
-CHECKER("debug.TaintTest", TaintTesterChecker, "Mark tainted symbols as such.", "")
-CHECKER("alpha.core.TestAfterDivZero", TestAfterDivZeroChecker, "Check for division by variable that is later compared against 0. Either the comparison is useless or there is division by zero.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.TestAfterDivZero")
-CHECKER("debug.DumpTraversal", TraversalDumper, "Print branch conditions as they are traversed by the engine", "")
-CHECKER("apiModeling.TrustNonnull", TrustNonnullChecker, "Trust that returns from framework methods annotated with _Nonnull are not null", "")
-CHECKER("security.insecureAPI.UncheckedReturn", UncheckedReturn, "Warn on uses of functions whose return values must be always checked", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.UncheckedReturn")
-CHECKER("core.uninitialized.Branch", UndefBranchChecker, "Check for uninitialized values used as branch conditions", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.Branch")
-CHECKER("core.uninitialized.CapturedBlockVariable", UndefCapturedBlockVarChecker, "Check for blocks that capture uninitialized values", "")
-CHECKER("core.UndefinedBinaryOperatorResult", UndefResultChecker, "Check for undefined results of binary operators", "https://clang-analyzer.llvm.org/available_checks.html#core.UndefinedBinaryOperatorResult")
-CHECKER("core.uninitialized.ArraySubscript", UndefinedArraySubscriptChecker, "Check for uninitialized values used as array subscripts", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.ArraySubscript")
-CHECKER("core.uninitialized.Assign", UndefinedAssignmentChecker, "Check for assigning uninitialized values", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.Assign")
-CHECKER("valist.Uninitialized", UninitializedChecker, "Check for usages of uninitialized (or already released) va_lists.", "")
-CHECKER("alpha.cplusplus.UninitializedObject", UninitializedObjectChecker, "Reports uninitialized fields after object construction", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.UninitializedObject")
-CHECKER("unix.API", UnixAPIMisuseChecker, "Check calls to various UNIX/Posix functions", "https://clang-analyzer.llvm.org/available_checks.html#unix.API")
-CHECKER("optin.portability.UnixAPI", UnixAPIPortabilityChecker, "Finds implementation-defined behavior in UNIX/Posix functions", "")
-CHECKER("alpha.deadcode.UnreachableCode", UnreachableCodeChecker, "Check unreachable code", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.deadcode.UnreachableCode")
-CHECKER("valist.Unterminated", UnterminatedChecker, "Check for va_lists which are not released by a va_end call.", "")
-CHECKER("core.VLASize", VLASizeChecker, "Check for declarations of VLA of undefined or zero size", "https://clang-analyzer.llvm.org/available_checks.html#core.VLASize")
-CHECKER("valist.ValistBase", ValistBase, "Gathers information about va_lists.", "")
-CHECKER("osx.cocoa.VariadicMethodTypes", VariadicMethodTypeChecker, "Check for passing non-Objective-C types to variadic collection initialization methods that expect only Objective-C types", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.VariadicMethodTypes")
-CHECKER("unix.Vfork", VforkChecker, "Check for proper usage of vfork", "https://clang-analyzer.llvm.org/available_checks.html#unix.Vfork")
-CHECKER("optin.cplusplus.VirtualCall", VirtualCallChecker, "Check virtual function calls during construction or destruction", "https://clang-analyzer.llvm.org/available_checks.html#optin.cplusplus.VirtualCall")
-CHECKER("security.insecureAPI.bcmp", bcmp, "Warn on uses of the 'bcmp' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.bcmp")
-CHECKER("security.insecureAPI.bcopy", bcopy, "Warn on uses of the 'bcopy' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.bcopy")
-CHECKER("security.insecureAPI.bzero", bzero, "Warn on uses of the 'bzero' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.bzero")
-CHECKER("security.insecureAPI.getpw", getpw, "Warn on uses of the 'getpw' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.getpw")
-CHECKER("security.insecureAPI.gets", gets, "Warn on uses of the 'gets' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.gets")
-CHECKER("security.insecureAPI.mkstemp", mkstemp, "Warn when 'mkstemp' is passed fewer than 6 X's in the format string", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.mkstemp")
-CHECKER("security.insecureAPI.mktemp", mktemp, "Warn on uses of the 'mktemp' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.mktemp")
-CHECKER("security.insecureAPI.rand", rand, "Warn on uses of the 'rand', 'random', and related functions", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.rand")
-CHECKER("security.insecureAPI.strcpy", strcpy, "Warn on uses of the 'strcpy' and 'strcat' functions", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.strcpy")
-CHECKER("security.insecureAPI.vfork", vfork, "Warn on uses of the 'vfork' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.vfork")
+CHECKER("debug.AnalysisOrder", AnalysisOrderChecker, "Print callbacks that are called during analysis in order", "", true)
+CHECKER("debug.Stats", AnalyzerStatsChecker, "Emit warnings with analyzer statistics", "", true)
+CHECKER("alpha.security.ArrayBound", ArrayBoundChecker, "Warn about buffer overflows (older checker)", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.ArrayBound", false)
+CHECKER("alpha.security.ArrayBoundV2", ArrayBoundCheckerV2, "Warn about buffer overflows (newer checker)", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.ArrayBoundV2", false)
+CHECKER("osx.cocoa.AutoreleaseWrite", AutoreleaseWriteChecker, "Warn about potentially crashing writes to autoreleasing objects from different autoreleasing pools in Objective-C", "", false)
+CHECKER("alpha.unix.BlockInCriticalSection", BlockInCriticalSectionChecker, "Check for calls to blocking functions inside a critical section", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.BlockInCriticalSection", false)
+CHECKER("alpha.core.BoolAssignment", BoolAssignmentChecker, "Warn about assigning non-{0,1} values to Boolean variables", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.BoolAssignment", false)
+CHECKER("core.builtin.BuiltinFunctions", BuiltinFunctionChecker, "Evaluate compiler builtin functions (e.g., alloca())", "", true)
+CHECKER("osx.coreFoundation.CFError", CFErrorChecker, "Check usage of CFErrorRef* parameters", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.CFError", false)
+CHECKER("debug.DumpCFG", CFGDumper, "Display Control-Flow Graphs", "", true)
+CHECKER("debug.ViewCFG", CFGViewer, "View Control-Flow Graphs using GraphViz", "", true)
+CHECKER("osx.coreFoundation.CFNumber", CFNumberChecker, "Check for proper uses of CFNumber APIs", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.CFNumber", false)
+CHECKER("osx.coreFoundation.CFRetainRelease", CFRetainReleaseChecker, "Check for null arguments to CFRetain/CFRelease/CFMakeCollectable", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.CFRetainRelease", false)
+CHECKER("alpha.unix.cstring.BufferOverlap", CStringBufferOverlap, "Checks for overlap in two buffer arguments", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.cstring.BufferOverlap", false)
+CHECKER("unix.cstring.CStringModeling", CStringModeling, "The base of several CString related checkers. On it's own it emits no reports, but adds valuable information to the analysis when enabled.", "", true)
+CHECKER("alpha.unix.cstring.NotNullTerminated", CStringNotNullTerm, "Check for arguments which are not null-terminating strings", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.cstring.NotNullTerminated", false)
+CHECKER("unix.cstring.NullArg", CStringNullArg, "Check for null pointers being passed as arguments to C string functions", "https://clang-analyzer.llvm.org/available_checks.html#unix.cstring.NullArg", false)
+CHECKER("alpha.unix.cstring.OutOfBounds", CStringOutOfBounds, "Check for out-of-bounds access in string functions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.cstring.OutOfBounds", false)
+CHECKER("unix.cstring.BadSizeArg", CStringSyntaxChecker, "Check the size argument passed into C string functions for common erroneous patterns", "https://clang-analyzer.llvm.org/available_checks.html#unix.cstring.BadSizeArg", false)
+CHECKER("cplusplus.SelfAssignment", CXXSelfAssignmentChecker, "Checks C++ copy and move assignment operators for self assignment", "", true)
+CHECKER("core.CallAndMessage", CallAndMessageChecker, "Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers)", "https://clang-analyzer.llvm.org/available_checks.html#core.CallAndMessage", false)
+CHECKER("alpha.core.CallAndMessageUnInitRefArg", CallAndMessageUnInitRefArg, "Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers, and pointer to undefined variables)", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.CallAndMessageUnInitRefArg", false)
+CHECKER("debug.DumpCalls", CallDumper, "Print calls as they are traversed by the engine", "", true)
+CHECKER("debug.DumpCallGraph", CallGraphDumper, "Display Call Graph", "", true)
+CHECKER("debug.ViewCallGraph", CallGraphViewer, "View Call Graph using GraphViz", "", true)
+CHECKER("alpha.core.CastSize", CastSizeChecker, "Check when casting a malloc'ed type T, whether the size is a multiple of the size of T", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.CastSize", false)
+CHECKER("alpha.core.CastToStruct", CastToStructChecker, "Check for cast from non-struct pointer to struct pointer", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.CastToStruct", false)
+CHECKER("apiModeling.llvm.CastValue", CastValueChecker, "Model implementation of custom RTTIs", "", true)
+CHECKER("alpha.unix.Chroot", ChrootChecker, "Check improper use of chroot", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.Chroot", false)
+CHECKER("osx.cocoa.ClassRelease", ClassReleaseChecker, "Check for sending 'retain', 'release', or 'autorelease' directly to a Class", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.ClassRelease", false)
+CHECKER("alpha.clone.CloneChecker", CloneChecker, "Reports similar pieces of code.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.clone.CloneChecker", false)
+CHECKER("debug.ConfigDumper", ConfigDumper, "Dump config table", "", true)
+CHECKER("debug.DumpControlDependencies", ControlDependencyTreeDumper, "Print the post control dependency tree for a given CFG", "", true)
+CHECKER("alpha.core.Conversion", ConversionChecker, "Loss of sign/precision in implicit conversions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.Conversion", false)
+CHECKER("valist.CopyToSelf", CopyToSelfChecker, "Check for va_lists which are copied onto itself.", "", false)
+CHECKER("deadcode.DeadStores", DeadStoresChecker, "Check for values stored to variables that are never read afterwards", "https://clang-analyzer.llvm.org/available_checks.html#deadcode.DeadStores", false)
+CHECKER("alpha.cplusplus.DeleteWithNonVirtualDtor", DeleteWithNonVirtualDtorChecker, "Reports destructions of polymorphic objects with a non-virtual destructor in their base class", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.DeleteWithNonVirtualDtor", false)
+CHECKER("security.insecureAPI.DeprecatedOrUnsafeBufferHandling", DeprecatedOrUnsafeBufferHandling, "Warn on uses of unsecure or deprecated buffer manipulating functions", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.DeprecatedOrUnsafeBufferHandling", false)
+CHECKER("core.NullDereference", DereferenceChecker, "Check for dereferences of null pointers", "https://clang-analyzer.llvm.org/available_checks.html#core.NullDereference", false)
+CHECKER("alpha.osx.cocoa.DirectIvarAssignment", DirectIvarAssignment, "Check for direct assignments to instance variables", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.DirectIvarAssignment", false)
+CHECKER("alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions", DirectIvarAssignmentForAnnotatedFunctions, "Check for direct assignments to instance variables in the methods annotated with objc_no_direct_instance_variable_assignment", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions", false)
+CHECKER("core.DivideZero", DivZeroChecker, "Check for division by zero", "https://clang-analyzer.llvm.org/available_checks.html#core.DivideZero", false)
+CHECKER("debug.DumpDominators", DominatorsTreeDumper, "Print the dominance tree for a given CFG", "", true)
+CHECKER("unix.DynamicMemoryModeling", DynamicMemoryModeling, "The base of several malloc() related checkers. On it's own it emits no reports, but adds valuable information to the analysis when enabled.", "", true)
+CHECKER("alpha.core.DynamicTypeChecker", DynamicTypeChecker, "Check for cases where the dynamic and the static type of an object are unrelated.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.DynamicTypeChecker", false)
+CHECKER("core.DynamicTypePropagation", DynamicTypePropagation, "Generate dynamic type information", "", false)
+CHECKER("optin.osx.cocoa.localizability.EmptyLocalizationContextChecker", EmptyLocalizationContextChecker, "Check that NSLocalizedString macros include a comment for context", "https://clang-analyzer.llvm.org/available_checks.html#optin.osx.cocoa.localizability.EmptyLocalizationContextChecker", false)
+CHECKER("alpha.cplusplus.EnumCastOutOfRange", EnumCastOutOfRangeChecker, "Check integer to enumeration casts for out of range values", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.EnumCastOutOfRange", false)
+CHECKER("debug.ViewExplodedGraph", ExplodedGraphViewer, "View Exploded Graphs using GraphViz", "", true)
+CHECKER("debug.ExprInspection", ExprInspectionChecker, "Check the analyzer's understanding of expressions", "", true)
+CHECKER("alpha.core.FixedAddr", FixedAddressChecker, "Check for assignment of a fixed address to a pointer", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.FixedAddr", false)
+CHECKER("security.FloatLoopCounter", FloatLoopCounter, "Warn on using a floating point value as a loop counter (CERT: FLP30-C, FLP30-CPP)", "https://clang-analyzer.llvm.org/available_checks.html#security.FloatLoopCounter", false)
+CHECKER("optin.performance.GCDAntipattern", GCDAntipattern, "Check for performance anti-patterns when using Grand Central Dispatch", "", false)
+CHECKER("apiModeling.google.GTest", GTestChecker, "Model gtest assertion APIs", "", true)
+CHECKER("alpha.security.taint.TaintPropagation", GenericTaintChecker, "Generate taint information used by other checkers", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.taint.TaintPropagation", false)
+CHECKER("alpha.core.IdenticalExpr", IdenticalExprChecker, "Warn about unintended use of identical expressions in operators", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.IdenticalExpr", false)
+CHECKER("cplusplus.InnerPointer", InnerPointerChecker, "Check for inner pointers of C++ containers used after re/deallocation", "", false)
+CHECKER("alpha.osx.cocoa.InstanceVariableInvalidation", InstanceVariableInvalidation, "Check that the invalidatable instance variables are invalidated in the methods annotated with objc_instance_variable_invalidator", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.InstanceVariableInvalidation", false)
+CHECKER("alpha.cplusplus.InvalidatedIterator", InvalidatedIteratorChecker, "Check for use of invalidated iterators", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.InvalidatedIterator", false)
+CHECKER("alpha.cplusplus.IteratorModeling", IteratorModeling, "Models iterators of C++ containers", "", true)
+CHECKER("alpha.cplusplus.IteratorRange", IteratorRangeChecker, "Check for iterators used outside their valid ranges", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.IteratorRange", false)
+CHECKER("alpha.osx.cocoa.IvarInvalidationModeling", IvarInvalidationModeling, "Gathers information for annotation driven invalidation checking for classes that contains a method annotated with 'objc_instance_variable_invalidator'", "", true)
+CHECKER("alpha.llvm.Conventions", LLVMConventionsChecker, "Check code for LLVM codebase conventions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.llvm.Conventions", false)
+CHECKER("debug.DumpLiveStmts", LiveStatementsDumper, "Print results of live statement analysis", "", true)
+CHECKER("debug.DumpLiveVars", LiveVariablesDumper, "Print results of live variable analysis", "", true)
+CHECKER("osx.MIG", MIGChecker, "Find violations of the Mach Interface Generator calling convention", "", false)
+CHECKER("optin.mpi.MPI-Checker", MPIChecker, "Checks MPI code", "https://clang-analyzer.llvm.org/available_checks.html#optin.mpi.MPI-Checker", false)
+CHECKER("osx.SecKeychainAPI", MacOSKeychainAPIChecker, "Check for proper uses of Secure Keychain APIs", "https://clang-analyzer.llvm.org/available_checks.html#osx.SecKeychainAPI", false)
+CHECKER("osx.API", MacOSXAPIChecker, "Check for proper uses of various Apple APIs", "https://clang-analyzer.llvm.org/available_checks.html#osx.API", false)
+CHECKER("unix.Malloc", MallocChecker, "Check for memory leaks, double free, and use-after-free problems. Traces memory managed by malloc()/free().", "https://clang-analyzer.llvm.org/available_checks.html#unix.Malloc", false)
+CHECKER("alpha.security.MallocOverflow", MallocOverflowSecurityChecker, "Check for overflows in the arguments to malloc()", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.MallocOverflow", false)
+CHECKER("unix.MallocSizeof", MallocSizeofChecker, "Check for dubious malloc arguments involving sizeof", "https://clang-analyzer.llvm.org/available_checks.html#unix.MallocSizeof", false)
+CHECKER("unix.MismatchedDeallocator", MismatchedDeallocatorChecker, "Check for mismatched deallocators.", "https://clang-analyzer.llvm.org/available_checks.html#unix.MismatchedDeallocator", false)
+CHECKER("alpha.cplusplus.MismatchedIterator", MismatchedIteratorChecker, "Check for use of iterators of different containers where iterators of the same container are expected", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.cplusplus.MismatchedIterator", false)
+CHECKER("alpha.osx.cocoa.MissingInvalidationMethod", MissingInvalidationMethod, "Check that the invalidation methods are present in classes that contain invalidatable instance variables", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.MissingInvalidationMethod", false)
+CHECKER("alpha.security.MmapWriteExec", MmapWriteExecChecker, "Warn on mmap() calls that are both writable and executable", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.MmapWriteExec", false)
+CHECKER("cplusplus.Move", MoveChecker, "Find use-after-move bugs in C++", "https://clang-analyzer.llvm.org/available_checks.html#cplusplus.Move", false)
+CHECKER("osx.cocoa.NSAutoreleasePool", NSAutoreleasePoolChecker, "Warn for suboptimal uses of NSAutoreleasePool in Objective-C GC mode", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.NSAutoreleasePool", false)
+CHECKER("osx.cocoa.NSError", NSErrorChecker, "Check usage of NSError** parameters", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.NSError", false)
+CHECKER("osx.NSOrCFErrorDerefChecker", NSOrCFErrorDerefChecker, "Implementation checker for NSErrorChecker and CFErrorChecker", "", true)
+CHECKER("cplusplus.NewDelete", NewDeleteChecker, "Check for double-free and use-after-free problems. Traces memory managed by new/delete.", "https://clang-analyzer.llvm.org/available_checks.html#cplusplus.NewDelete", false)
+CHECKER("cplusplus.NewDeleteLeaks", NewDeleteLeaksChecker, "Check for memory leaks. Traces memory managed by new/delete.", "https://clang-analyzer.llvm.org/available_checks.html#cplusplus.NewDeleteLeaks", false)
+CHECKER("osx.cocoa.NilArg", NilArgChecker, "Check for prohibited nil arguments to ObjC method calls", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.NilArg", false)
+CHECKER("core.builtin.NoReturnFunctions", NoReturnFunctionChecker, "Evaluate \"panic\" functions that are known to not return to the caller", "", true)
+CHECKER("optin.osx.cocoa.localizability.NonLocalizedStringChecker", NonLocalizedStringChecker, "Warns about uses of non-localized NSStrings passed to UI methods expecting localized NSStrings", "https://clang-analyzer.llvm.org/available_checks.html#optin.osx.cocoa.localizability.NonLocalizedStringChecker", false)
+CHECKER("core.NonNullParamChecker", NonNullParamChecker, "Check for null pointers passed as arguments to a function whose arguments are references or marked with the 'nonnull' attribute", "https://clang-analyzer.llvm.org/available_checks.html#core.NonNullParamChecker", false)
+CHECKER("core.NonnilStringConstants", NonnullGlobalConstantsChecker, "Assume that const string-like globals are non-null", "", true)
+CHECKER("nullability.NullPassedToNonnull", NullPassedToNonnullChecker, "Warns when a null pointer is passed to a pointer which has a _Nonnull type.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullPassedToNonnull", false)
+CHECKER("nullability.NullReturnedFromNonnull", NullReturnedFromNonnullChecker, "Warns when a null pointer is returned from a function that has _Nonnull return type.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullReturnedFromNonnull", false)
+CHECKER("nullability.NullabilityBase", NullabilityBase, "Stores information during the analysis about nullability.", "", true)
+CHECKER("nullability.NullableDereferenced", NullableDereferencedChecker, "Warns when a nullable pointer is dereferenced.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullableDereferenced", false)
+CHECKER("nullability.NullablePassedToNonnull", NullablePassedToNonnullChecker, "Warns when a nullable pointer is passed to a pointer which has a _Nonnull type.", "https://clang-analyzer.llvm.org/available_checks.html#nullability.NullablePassedToNonnull", false)
+CHECKER("nullability.NullableReturnedFromNonnull", NullableReturnedFromNonnullChecker, "Warns when a nullable pointer is returned from a function that has _Nonnull return type.", "", false)
+CHECKER("osx.NumberObjectConversion", NumberObjectConversionChecker, "Check for erroneous conversions of objects representing numbers into numbers", "", false)
+CHECKER("optin.osx.OSObjectCStyleCast", OSObjectCStyleCast, "Checker for C-style casts of OSObjects", "", false)
+CHECKER("osx.OSObjectRetainCount", OSObjectRetainCountChecker, "Check for leaks and improper reference count management for OSObject", "", false)
+CHECKER("osx.cocoa.AtSync", ObjCAtSyncChecker, "Check for nil pointers used as mutexes for @synchronized", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.AtSync", false)
+CHECKER("osx.coreFoundation.containers.PointerSizedValues", ObjCContainersASTChecker, "Warns if 'CFArray', 'CFDictionary', 'CFSet' are created with non-pointer-size values", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.containers.PointerSizedValues", false)
+CHECKER("osx.coreFoundation.containers.OutOfBounds", ObjCContainersChecker, "Checks for index out-of-bounds when using 'CFArray' API", "https://clang-analyzer.llvm.org/available_checks.html#osx.coreFoundation.containers.OutOfBounds", false)
+CHECKER("osx.cocoa.Dealloc", ObjCDeallocChecker, "Warn about Objective-C classes that lack a correct implementation of -dealloc", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.Dealloc", false)
+CHECKER("osx.cocoa.ObjCGenerics", ObjCGenericsChecker, "Check for type errors when using Objective-C generics", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.ObjCGenerics", false)
+CHECKER("osx.cocoa.Loops", ObjCLoopChecker, "Improved modeling of loops using Cocoa collection types", "", false)
+CHECKER("osx.cocoa.IncompatibleMethodTypes", ObjCMethSigsChecker, "Warn about Objective-C method signatures with type incompatibilities", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.IncompatibleMethodTypes", false)
+CHECKER("osx.cocoa.NonNilReturnValue", ObjCNonNilReturnValueChecker, "Model the APIs that are guaranteed to return a non-nil value", "", false)
+CHECKER("osx.ObjCProperty", ObjCPropertyChecker, "Check for proper uses of Objective-C properties", "", false)
+CHECKER("osx.cocoa.SelfInit", ObjCSelfInitChecker, "Check that 'self' is properly initialized inside an initializer method", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.SelfInit", false)
+CHECKER("osx.cocoa.MissingSuperCall", ObjCSuperCallChecker, "Warn about Objective-C methods that lack a necessary call to super", "", false)
+CHECKER("osx.cocoa.SuperDealloc", ObjCSuperDeallocChecker, "Warn about improper use of '[super dealloc]' in Objective-C", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.SuperDealloc", false)
+CHECKER("osx.cocoa.UnusedIvars", ObjCUnusedIvarsChecker, "Warn about private ivars that are never used", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.UnusedIvars", false)
+CHECKER("optin.performance.Padding", PaddingChecker, "Check for excessively padded structs.", "", false)
+CHECKER("alpha.osx.cocoa.localizability.PluralMisuseChecker", PluralMisuseChecker, "Warns against using one vs. many plural pattern in code when generating localized strings.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.osx.cocoa.localizability.PluralMisuseChecker", false)
+CHECKER("alpha.core.PointerArithm", PointerArithChecker, "Check for pointer arithmetic on locations other than array elements", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.PointerArithm", false)
+CHECKER("alpha.nondeterminism.PointerIteration", PointerIterationChecker, "Checks for non-determinism caused by iteration of unordered containers of pointers", "https://clang-analyzer.llvm.org/available_checks.html#alpha.nondeterminism.PointerIteration", false)
+CHECKER("alpha.nondeterminism.PointerSorting", PointerSortingChecker, "Check for non-determinism caused by sorting of pointers", "https://clang-analyzer.llvm.org/available_checks.html#alpha.nondeterminism.PointerSorting", false)
+CHECKER("alpha.core.PointerSub", PointerSubChecker, "Check for pointer subtractions on two pointers pointing to different memory chunks", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.PointerSub", false)
+CHECKER("debug.DumpPostDominators", PostDominatorsTreeDumper, "Print the post dominance tree for a given CFG", "", true)
+CHECKER("alpha.unix.PthreadLock", PthreadLockChecker, "Simple lock -> unlock checker", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.PthreadLock", false)
+CHECKER("debug.ReportStmts", ReportStmts, "Emits a warning for every statement.", "", true)
+CHECKER("osx.cocoa.RetainCountBase", RetainCountBase, "Common base of various retain count related checkers", "", true)
+CHECKER("osx.cocoa.RetainCount", RetainCountChecker, "Check for leaks and improper reference count management", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.RetainCount", false)
+CHECKER("alpha.security.ReturnPtrRange", ReturnPointerRangeChecker, "Check for an out-of-bound pointer being returned to callers", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.security.ReturnPtrRange", false)
+CHECKER("core.uninitialized.UndefReturn", ReturnUndefChecker, "Check for uninitialized values being returned to the caller", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.UndefReturn", false)
+CHECKER("apiModeling.llvm.ReturnValue", ReturnValueChecker, "Model the guaranteed boolean return value of function calls", "", true)
+CHECKER("osx.cocoa.RunLoopAutoreleaseLeak", RunLoopAutoreleaseLeakChecker, "Check for leaked memory in autorelease pools that will never be drained", "", false)
+CHECKER("security.insecureAPI.SecuritySyntaxChecker", SecuritySyntaxChecker, "Base of various security function related checkers", "", true)
+CHECKER("alpha.unix.SimpleStream", SimpleStreamChecker, "Check for misuses of stream APIs", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.SimpleStream", false)
+CHECKER("alpha.core.SizeofPtr", SizeofPointerChecker, "Warn about unintended use of sizeof() on pointer expressions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.SizeofPtr", false)
+CHECKER("cplusplus.SmartPtr", SmartPtrModeling, "Model behavior of C++ smart pointers", "", true)
+CHECKER("alpha.core.StackAddressAsyncEscape", StackAddrAsyncEscapeChecker, "Check that addresses to stack memory do not escape the function", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.StackAddressAsyncEscape", false)
+CHECKER("core.StackAddrEscapeBase", StackAddrEscapeBase, "Generate information about stack address escapes.", "", true)
+CHECKER("core.StackAddressEscape", StackAddrEscapeChecker, "Check that addresses to stack memory do not escape the function", "https://clang-analyzer.llvm.org/available_checks.html#core.StackAddressEscape", false)
+CHECKER("apiModeling.StdCLibraryFunctions", StdCLibraryFunctionsChecker, "Improve modeling of the C standard library functions", "", true)
+CHECKER("alpha.unix.Stream", StreamChecker, "Check stream handling functions", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.unix.Stream", false)
+CHECKER("debug.TaintTest", TaintTesterChecker, "Mark tainted symbols as such.", "", true)
+CHECKER("alpha.core.TestAfterDivZero", TestAfterDivZeroChecker, "Check for division by variable that is later compared against 0. Either the comparison is useless or there is division by zero.", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.core.TestAfterDivZero", false)
+CHECKER("debug.DumpTraversal", TraversalDumper, "Print branch conditions as they are traversed by the engine", "", true)
+CHECKER("apiModeling.TrustNonnull", TrustNonnullChecker, "Trust that returns from framework methods annotated with _Nonnull are not null", "", true)
+CHECKER("security.insecureAPI.UncheckedReturn", UncheckedReturn, "Warn on uses of functions whose return values must be always checked", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.UncheckedReturn", false)
+CHECKER("core.uninitialized.Branch", UndefBranchChecker, "Check for uninitialized values used as branch conditions", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.Branch", false)
+CHECKER("core.uninitialized.CapturedBlockVariable", UndefCapturedBlockVarChecker, "Check for blocks that capture uninitialized values", "", false)
+CHECKER("core.UndefinedBinaryOperatorResult", UndefResultChecker, "Check for undefined results of binary operators", "https://clang-analyzer.llvm.org/available_checks.html#core.UndefinedBinaryOperatorResult", false)
+CHECKER("core.uninitialized.ArraySubscript", UndefinedArraySubscriptChecker, "Check for uninitialized values used as array subscripts", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.ArraySubscript", false)
+CHECKER("core.uninitialized.Assign", UndefinedAssignmentChecker, "Check for assigning uninitialized values", "https://clang-analyzer.llvm.org/available_checks.html#core.uninitialized.Assign", false)
+CHECKER("valist.Uninitialized", UninitializedChecker, "Check for usages of uninitialized (or already released) va_lists.", "", false)
+CHECKER("optin.cplusplus.UninitializedObject", UninitializedObjectChecker, "Reports uninitialized fields after object construction", "https://clang-analyzer.llvm.org/alpha_checks.html#optin.cplusplus.UninitializedObject", false)
+CHECKER("unix.API", UnixAPIMisuseChecker, "Check calls to various UNIX/Posix functions", "https://clang-analyzer.llvm.org/available_checks.html#unix.API", false)
+CHECKER("optin.portability.UnixAPI", UnixAPIPortabilityChecker, "Finds implementation-defined behavior in UNIX/Posix functions", "", false)
+CHECKER("alpha.deadcode.UnreachableCode", UnreachableCodeChecker, "Check unreachable code", "https://clang-analyzer.llvm.org/alpha_checks.html#alpha.deadcode.UnreachableCode", false)
+CHECKER("valist.Unterminated", UnterminatedChecker, "Check for va_lists which are not released by a va_end call.", "", false)
+CHECKER("core.VLASize", VLASizeChecker, "Check for declarations of VLA of undefined or zero size", "https://clang-analyzer.llvm.org/available_checks.html#core.VLASize", false)
+CHECKER("valist.ValistBase", ValistBase, "Gathers information about va_lists.", "", true)
+CHECKER("osx.cocoa.VariadicMethodTypes", VariadicMethodTypeChecker, "Check for passing non-Objective-C types to variadic collection initialization methods that expect only Objective-C types", "https://clang-analyzer.llvm.org/available_checks.html#osx.cocoa.VariadicMethodTypes", false)
+CHECKER("unix.Vfork", VforkChecker, "Check for proper usage of vfork", "https://clang-analyzer.llvm.org/available_checks.html#unix.Vfork", false)
+CHECKER("optin.cplusplus.VirtualCall", VirtualCallChecker, "Check virtual function calls during construction or destruction", "https://clang-analyzer.llvm.org/available_checks.html#optin.cplusplus.VirtualCall", false)
+CHECKER("security.insecureAPI.bcmp", bcmp, "Warn on uses of the 'bcmp' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.bcmp", false)
+CHECKER("security.insecureAPI.bcopy", bcopy, "Warn on uses of the 'bcopy' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.bcopy", false)
+CHECKER("security.insecureAPI.bzero", bzero, "Warn on uses of the 'bzero' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.bzero", false)
+CHECKER("security.insecureAPI.getpw", getpw, "Warn on uses of the 'getpw' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.getpw", false)
+CHECKER("security.insecureAPI.gets", gets, "Warn on uses of the 'gets' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.gets", false)
+CHECKER("security.insecureAPI.mkstemp", mkstemp, "Warn when 'mkstemp' is passed fewer than 6 X's in the format string", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.mkstemp", false)
+CHECKER("security.insecureAPI.mktemp", mktemp, "Warn on uses of the 'mktemp' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.mktemp", false)
+CHECKER("security.insecureAPI.rand", rand, "Warn on uses of the 'rand', 'random', and related functions", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.rand", false)
+CHECKER("security.insecureAPI.strcpy", strcpy, "Warn on uses of the 'strcpy' and 'strcat' functions", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.strcpy", false)
+CHECKER("security.insecureAPI.vfork", vfork, "Warn on uses of the 'vfork' function", "https://clang-analyzer.llvm.org/available_checks.html#security.insecureAPI.vfork", false)
 
 #endif // GET_CHECKERS
 
@@ -240,6 +256,7 @@
 CHECKER_DEPENDENCY("alpha.core.StackAddressAsyncEscape", "core.StackAddrEscapeBase")
 CHECKER_DEPENDENCY("core.StackAddressEscape", "core.StackAddrEscapeBase")
 CHECKER_DEPENDENCY("security.insecureAPI.UncheckedReturn", "security.insecureAPI.SecuritySyntaxChecker")
+CHECKER_DEPENDENCY("valist.Uninitialized", "valist.ValistBase")
 CHECKER_DEPENDENCY("valist.Unterminated", "valist.ValistBase")
 CHECKER_DEPENDENCY("security.insecureAPI.bcmp", "security.insecureAPI.SecuritySyntaxChecker")
 CHECKER_DEPENDENCY("security.insecureAPI.bcopy", "security.insecureAPI.SecuritySyntaxChecker")
@@ -253,3 +270,41 @@
 CHECKER_DEPENDENCY("security.insecureAPI.vfork", "security.insecureAPI.SecuritySyntaxChecker")
 
 #endif // GET_CHECKER_DEPENDENCIES
+
+#ifdef GET_CHECKER_OPTIONS
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PreStmtCastExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PostStmtCastExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PreStmtArraySubscriptExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PostStmtArraySubscriptExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PreStmtCXXNewExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PostStmtCXXNewExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PreStmtOffsetOfExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PostStmtOffsetOfExpr", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PreCall", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "PostCall", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "EndFunction", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "NewAllocator", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "Bind", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "LiveSymbols", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "RegionChanges", "", "false", "released", true)
+CHECKER_OPTION("bool", "debug.AnalysisOrder", "*", "Enables all callbacks.", "false", "released", true)
+CHECKER_OPTION("int", "alpha.clone.CloneChecker", "MinimumCloneComplexity", "Ensures that every clone has at least the given complexity. Complexity is here defined as the total amount of children of a statement. This constraint assumes the first statement in the group is representative for all other statements in the group in terms of complexity.", "50", "released", false)
+CHECKER_OPTION("bool", "alpha.clone.CloneChecker", "ReportNormalClones", "Report all clones, even less suspicious ones.", "true", "released", false)
+CHECKER_OPTION("string", "alpha.clone.CloneChecker", "IgnoredFilesPattern", "If supplied, the checker wont analyze files with a filename that matches the given pattern.", "\"\"", "released", false)
+CHECKER_OPTION("bool", "unix.DynamicMemoryModeling", "Optimistic", "If set to true, the checker assumes that all the allocating and deallocating functions are annotated with ownership_holds, ownership_takes and ownership_returns.", "false", "alpha", false)
+CHECKER_OPTION("int", "alpha.security.MmapWriteExec", "MmapProtExec", "Specifies the value of PROT_EXEC", "0x04", "released", false)
+CHECKER_OPTION("int", "alpha.security.MmapWriteExec", "MmapProtRead", "Specifies the value of PROT_READ", "0x01", "released", false)
+CHECKER_OPTION("string", "cplusplus.Move", "WarnOn", "In non-aggressive mode, only warn on use-after-move of local variables (or local rvalue references) and of STL objects. The former is possible because local variables (or local rvalue references) are not tempting their user to re-use the storage. The latter is possible because STL objects are known to end up in a valid but unspecified state after the move and their state-reset methods are also known, which allows us to predict precisely when use-after-move is invalid. Some STL objects are known to conform to additional contracts after move, so they are not tracked. However, smart pointers specifically are tracked because we can perform extra checking over them. In aggressive mode, warn on any use-after-move because the user has intentionally asked us to completely eliminate use-after-move in his code. Values: \"KnownsOnly\", \"KnownsAndLocals\", \"All\".", "KnownsAndLocals", "released", false)
+CHECKER_OPTION("bool", "optin.osx.cocoa.localizability.NonLocalizedStringChecker", "AggressiveReport", "Marks a string being returned by any call as localized if it is in LocStringFunctions (LSF) or the function is annotated. Otherwise, we mark it as NonLocalized (Aggressive) or NonLocalized only if it is not backed by a SymRegion (Non-Aggressive), basically leaving only string literals as NonLocalized.", "false", "alpha", true)
+CHECKER_OPTION("bool", "osx.NumberObjectConversion", "Pedantic", "Enables detection of more conversion patterns (which are most likely more harmless, and therefore are more likely to produce false positives).", "false", "released", false)
+CHECKER_OPTION("int", "optin.performance.Padding", "AllowedPad", "Reports are only generated if the excessive padding exceeds 'AllowedPad' in bytes.", "24", "released", false)
+CHECKER_OPTION("bool", "osx.cocoa.RetainCount", "CheckOSObject", "Find violations of retain-release rules applied to XNU OSObject instances. By default, the checker only checks retain-release rules for Objective-C NSObject instances and CoreFoundation objects.", "true", "alpha", true)
+CHECKER_OPTION("bool", "osx.cocoa.RetainCount", "TrackNSCFStartParam", "Check not only that the code follows retain-release rules with respect to objects it allocates or borrows from elsewhere, but also that it fulfills its own retain count specification with respect to objects that it receives as arguments.", "false", "released", false)
+CHECKER_OPTION("bool", "optin.cplusplus.UninitializedObject", "Pedantic", "If set to false, the checker won't emit warnings for objects that don't have at least one initialized field.", "false", "released", false)
+CHECKER_OPTION("bool", "optin.cplusplus.UninitializedObject", "NotesAsWarnings", "If set to true, the checker will emit a warning for each uninitalized field, as opposed to emitting one warning per constructor call, and listing the uninitialized fields that belongs to it in notes.", "false", "released", true)
+CHECKER_OPTION("bool", "optin.cplusplus.UninitializedObject", "CheckPointeeInitialization", "If set to false, the checker will not analyze the pointee of pointer/reference fields, and will only check whether the object itself is initialized.", "false", "alpha", false)
+CHECKER_OPTION("string", "optin.cplusplus.UninitializedObject", "IgnoreRecordsWithField", "If supplied, the checker will not analyze structures that have a field with a name or type name that matches the given pattern.", "\"\"", "released", false)
+CHECKER_OPTION("bool", "optin.cplusplus.UninitializedObject", "IgnoreGuardedFields", "If set to true, the checker will analyze _syntactically_ whether the found uninitialized object is used without a preceding assert call. Defaults to false.", "false", "alpha", false)
+CHECKER_OPTION("bool", "optin.cplusplus.VirtualCall", "PureOnly", "Whether to only report calls to pure virtual methods.", "false", "released", false)
+#endif // GET_CHECKER_OPTIONS
+
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def b/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
index cc8b70b..70bd476 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
@@ -204,6 +204,10 @@
                 "be pruned out of the final output.",
                 true)
 
+ANALYZER_OPTION(bool, ShouldAddPopUpNotes, "add-pop-up-notes",
+                "Whether pop-up notes should be added to the final output.",
+                true)
+
 ANALYZER_OPTION(
     bool, ShouldConditionalizeStaticInitializers,
     "cfg-conditional-static-initializers",
@@ -287,6 +291,23 @@
                 "the analyzer's progress related to ctu.",
                 false)
 
+ANALYZER_OPTION(bool, ShouldTrackConditions, "track-conditions",
+                "Whether to track conditions that are a control dependency of "
+                "an already tracked variable.",
+                false)
+
+ANALYZER_OPTION(bool, ShouldTrackConditionsDebug, "track-conditions-debug",
+                "Whether to place an event at each tracked condition.",
+                false)
+
+ANALYZER_OPTION(unsigned, CTUImportThreshold, "ctu-import-threshold",
+                "The maximal amount of translation units that is considered "
+                "for import when inlining functions during CTU analysis. "
+                "Lowering this threshold can alleviate the memory burder of "
+                "analysis with many interdependent definitions located in "
+                "various translation units.",
+                100u)
+
 //===----------------------------------------------------------------------===//
 // Unsinged analyzer options.
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
index 775f0dd..9630a22 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
@@ -166,6 +166,29 @@
   static std::vector<StringRef>
   getRegisteredCheckers(bool IncludeExperimental = false);
 
+  /// Convenience function for printing options or checkers and their
+  /// description in a formatted manner. If \p MinLineWidth is set to 0, no line
+  /// breaks are introduced for the description.
+  ///
+  /// Format, depending whether the option name's length is less then
+  /// \p OptionWidth:
+  ///
+  ///   <padding>EntryName<padding>Description
+  ///   <---------padding--------->Description
+  ///   <---------padding--------->Description
+  ///
+  ///   <padding>VeryVeryLongOptionName
+  ///   <---------padding--------->Description
+  ///   <---------padding--------->Description
+  ///   ^~~~~~~~ InitialPad
+  ///   ^~~~~~~~~~~~~~~~~~~~~~~~~~ EntryWidth
+  ///   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MinLineWidth
+  static void printFormattedEntry(
+      llvm::raw_ostream &Out,
+      std::pair<StringRef, StringRef> EntryDescPair,
+      size_t EntryWidth, size_t InitialPad, size_t MinLineWidth = 0);
+
+
   /// Pair of checker name and enable/disable.
   std::vector<std::pair<std::string, bool>> CheckersControlList;
 
@@ -197,6 +220,13 @@
   unsigned DisableAllChecks : 1;
 
   unsigned ShowCheckerHelp : 1;
+  unsigned ShowCheckerHelpAlpha : 1;
+  unsigned ShowCheckerHelpDeveloper : 1;
+
+  unsigned ShowCheckerOptionList : 1;
+  unsigned ShowCheckerOptionAlphaList : 1;
+  unsigned ShowCheckerOptionDeveloperList : 1;
+
   unsigned ShowEnabledCheckerList : 1;
   unsigned ShowConfigOptionsList : 1;
   unsigned ShouldEmitErrorsOnInvalidConfigValue : 1;
@@ -215,6 +245,9 @@
   /// strategy. We get better code coverage when retry is enabled.
   unsigned NoRetryExhausted : 1;
 
+  /// Emit analyzer warnings as errors.
+  unsigned AnalyzerWerror : 1;
+
   /// The inlining stack depth limit.
   // Cap the stack depth at 4 calls (5 stack frames, base + 4 calls).
   unsigned InlineMaxStackDepth = 5;
@@ -260,11 +293,14 @@
 
   AnalyzerOptions()
       : DisableAllChecks(false), ShowCheckerHelp(false),
-        ShowEnabledCheckerList(false), ShowConfigOptionsList(false),
-        AnalyzeAll(false), AnalyzerDisplayProgress(false),
-        AnalyzeNestedBlocks(false), eagerlyAssumeBinOpBifurcation(false),
-        TrimGraph(false), visualizeExplodedGraphWithGraphViz(false),
-        UnoptimizedCFG(false), PrintStats(false), NoRetryExhausted(false) {
+        ShowCheckerHelpAlpha(false), ShowCheckerHelpDeveloper(false),
+        ShowCheckerOptionList(false), ShowCheckerOptionAlphaList(false),
+        ShowCheckerOptionDeveloperList(false), ShowEnabledCheckerList(false),
+        ShowConfigOptionsList(false), AnalyzeAll(false),
+        AnalyzerDisplayProgress(false), AnalyzeNestedBlocks(false),
+        eagerlyAssumeBinOpBifurcation(false), TrimGraph(false),
+        visualizeExplodedGraphWithGraphViz(false), UnoptimizedCFG(false),
+        PrintStats(false), NoRetryExhausted(false), AnalyzerWerror(false) {
     llvm::sort(AnalyzerConfigCmdFlags);
   }
 
@@ -272,54 +308,63 @@
   /// interpreted as true and the "false" string is interpreted as false.
   ///
   /// If an option value is not provided, returns the given \p DefaultVal.
-  /// @param [in] Name Name for option to retrieve.
-  /// @param [in] DefaultVal Default value returned if no such option was
-  /// specified.
-  /// @param [in] C The checker object the option belongs to. Checker options
-  /// are retrieved in the following format:
-  /// `-analyzer-config <package and checker name>:OptionName=Value.
+  /// @param [in] CheckerName The *full name* of the checker. One may retrieve
+  /// this from the checker object's field \c Name, or through \c
+  /// CheckerManager::getCurrentCheckName within the checker's registry
+  /// function.
+  /// Checker options are retrieved in the following format:
+  /// `-analyzer-config CheckerName:OptionName=Value.
+  /// @param [in] OptionName Name for option to retrieve.
   /// @param [in] SearchInParents If set to true and the searched option was not
   /// specified for the given checker the options for the parent packages will
   /// be searched as well. The inner packages take precedence over the outer
   /// ones.
-  bool getCheckerBooleanOption(StringRef Name, bool DefaultVal,
-                        const ento::CheckerBase *C,
-                        bool SearchInParents = false) const;
+  bool getCheckerBooleanOption(StringRef CheckerName, StringRef OptionName,
+                               bool SearchInParents = false) const;
 
+  bool getCheckerBooleanOption(const ento::CheckerBase *C, StringRef OptionName,
+                               bool SearchInParents = false) const;
 
   /// Interprets an option's string value as an integer value.
   ///
   /// If an option value is not provided, returns the given \p DefaultVal.
-  /// @param [in] Name Name for option to retrieve.
-  /// @param [in] DefaultVal Default value returned if no such option was
-  /// specified.
-  /// @param [in] C The checker object the option belongs to. Checker options
-  /// are retrieved in the following format:
-  /// `-analyzer-config <package and checker name>:OptionName=Value.
+  /// @param [in] CheckerName The *full name* of the checker. One may retrieve
+  /// this from the checker object's field \c Name, or through \c
+  /// CheckerManager::getCurrentCheckName within the checker's registry
+  /// function.
+  /// Checker options are retrieved in the following format:
+  /// `-analyzer-config CheckerName:OptionName=Value.
+  /// @param [in] OptionName Name for option to retrieve.
   /// @param [in] SearchInParents If set to true and the searched option was not
   /// specified for the given checker the options for the parent packages will
   /// be searched as well. The inner packages take precedence over the outer
   /// ones.
-  int getCheckerIntegerOption(StringRef Name, int DefaultVal,
-                         const ento::CheckerBase *C,
-                         bool SearchInParents = false) const;
+  int getCheckerIntegerOption(StringRef CheckerName, StringRef OptionName,
+                              bool SearchInParents = false) const;
+
+  int getCheckerIntegerOption(const ento::CheckerBase *C, StringRef OptionName,
+                              bool SearchInParents = false) const;
 
   /// Query an option's string value.
   ///
   /// If an option value is not provided, returns the given \p DefaultVal.
-  /// @param [in] Name Name for option to retrieve.
-  /// @param [in] DefaultVal Default value returned if no such option was
-  /// specified.
-  /// @param [in] C The checker object the option belongs to. Checker options
-  /// are retrieved in the following format:
-  /// `-analyzer-config <package and checker name>:OptionName=Value.
+  /// @param [in] CheckerName The *full name* of the checker. One may retrieve
+  /// this from the checker object's field \c Name, or through \c
+  /// CheckerManager::getCurrentCheckName within the checker's registry
+  /// function.
+  /// Checker options are retrieved in the following format:
+  /// `-analyzer-config CheckerName:OptionName=Value.
+  /// @param [in] OptionName Name for option to retrieve.
   /// @param [in] SearchInParents If set to true and the searched option was not
   /// specified for the given checker the options for the parent packages will
   /// be searched as well. The inner packages take precedence over the outer
   /// ones.
-  StringRef getCheckerStringOption(StringRef Name, StringRef DefaultVal,
-                              const ento::CheckerBase *C,
-                              bool SearchInParents = false) const;
+  StringRef getCheckerStringOption(StringRef CheckerName, StringRef OptionName,
+                                   bool SearchInParents = false) const;
+
+  StringRef getCheckerStringOption(const ento::CheckerBase *C,
+                                   StringRef OptionName,
+                                   bool SearchInParents = false) const;
 
   /// Retrieves and sets the UserMode. This is a high-level option,
   /// which is used to set other low-level options. It is not accessible
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
index a53efbb..d30ad19 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
@@ -153,6 +153,9 @@
   /// \sa removeInvalidation
   llvm::SmallSet<InvalidationRecord, 4> Invalidations;
 
+  /// Conditions we're already tracking.
+  llvm::SmallSet<const ExplodedNode *, 4> TrackedConditions;
+
 private:
   // Used internally by BugReporter.
   Symbols &getInterestingSymbols();
@@ -349,6 +352,13 @@
   visitor_iterator visitor_begin() { return Callbacks.begin(); }
   visitor_iterator visitor_end() { return Callbacks.end(); }
 
+  /// Notes that the condition of the CFGBlock associated with \p Cond is
+  /// being tracked.
+  /// \returns false if the condition is already being tracked.
+  bool addTrackedCondition(const ExplodedNode *Cond) {
+    return TrackedConditions.insert(Cond).second;
+  }
+
   /// Profile to identify equivalent bug reports for error report coalescing.
   /// Reports are uniqued to ensure that we do not emit multiple diagnostics
   /// for each bug.
@@ -592,6 +602,63 @@
   NodeMapClosure& getNodeResolver() { return NMC; }
 };
 
+
+/// The tag upon which the TagVisitor reacts. Add these in order to display
+/// additional PathDiagnosticEventPieces along the path.
+class NoteTag : public ProgramPointTag {
+public:
+  using Callback =
+      std::function<std::string(BugReporterContext &, BugReport &)>;
+
+private:
+  static int Kind;
+
+  const Callback Cb;
+  const bool IsPrunable;
+
+  NoteTag(Callback &&Cb, bool IsPrunable)
+      : ProgramPointTag(&Kind), Cb(std::move(Cb)), IsPrunable(IsPrunable) {}
+
+public:
+  static bool classof(const ProgramPointTag *T) {
+    return T->getTagKind() == &Kind;
+  }
+
+  Optional<std::string> generateMessage(BugReporterContext &BRC,
+                                        BugReport &R) const {
+    std::string Msg = Cb(BRC, R);
+    if (Msg.empty())
+      return None;
+
+    return std::move(Msg);
+  }
+
+  StringRef getTagDescription() const override {
+    // TODO: Remember a few examples of generated messages
+    // and display them in the ExplodedGraph dump by
+    // returning them from this function.
+    return "Note Tag";
+  }
+
+  bool isPrunable() const { return IsPrunable; }
+
+  // Manage memory for NoteTag objects.
+  class Factory {
+    std::vector<std::unique_ptr<NoteTag>> Tags;
+
+  public:
+    const NoteTag *makeNoteTag(Callback &&Cb, bool IsPrunable = false) {
+      // We cannot use make_unique because we cannot access the private
+      // constructor from inside it.
+      std::unique_ptr<NoteTag> T(new NoteTag(std::move(Cb), IsPrunable));
+      Tags.push_back(std::move(T));
+      return Tags.back().get();
+    }
+  };
+
+  friend class TagVisitor;
+};
+
 } // namespace ento
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
index 91f7cee..ef5d327 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
@@ -14,6 +14,7 @@
 #ifndef LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGREPORTERVISITORS_H
 #define LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGREPORTERVISITORS_H
 
+#include "clang/Analysis/ProgramPoint.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
@@ -188,22 +189,40 @@
                   BugReporterContext &BRC);
 
   std::shared_ptr<PathDiagnosticPiece>
-  VisitTrueTest(const Expr *Cond, bool tookTrue, BugReporterContext &BRC,
-                BugReport &R, const ExplodedNode *N);
+  VisitTrueTest(const Expr *Cond, BugReporterContext &BRC, BugReport &R,
+                const ExplodedNode *N, bool TookTrue);
 
   std::shared_ptr<PathDiagnosticPiece>
-  VisitTrueTest(const Expr *Cond, const DeclRefExpr *DR, const bool tookTrue,
-                BugReporterContext &BRC, BugReport &R, const ExplodedNode *N);
+  VisitTrueTest(const Expr *Cond, const DeclRefExpr *DR,
+                BugReporterContext &BRC, BugReport &R, const ExplodedNode *N,
+                bool TookTrue, bool IsAssuming);
 
   std::shared_ptr<PathDiagnosticPiece>
   VisitTrueTest(const Expr *Cond, const BinaryOperator *BExpr,
-                const bool tookTrue, BugReporterContext &BRC, BugReport &R,
-                const ExplodedNode *N);
+                BugReporterContext &BRC, BugReport &R, const ExplodedNode *N,
+                bool TookTrue, bool IsAssuming);
+
+  std::shared_ptr<PathDiagnosticPiece>
+  VisitTrueTest(const Expr *Cond, const MemberExpr *ME, BugReporterContext &BRC,
+                BugReport &R, const ExplodedNode *N, bool TookTrue,
+                bool IsAssuming);
 
   std::shared_ptr<PathDiagnosticPiece>
   VisitConditionVariable(StringRef LhsString, const Expr *CondVarExpr,
-                         const bool tookTrue, BugReporterContext &BRC,
-                         BugReport &R, const ExplodedNode *N);
+                         BugReporterContext &BRC, BugReport &R,
+                         const ExplodedNode *N, bool TookTrue);
+
+  /// Tries to print the value of the given expression.
+  ///
+  /// \param CondVarExpr The expression to print its value.
+  /// \param Out The stream to print.
+  /// \param N The node where we encountered the condition.
+  /// \param TookTrue Whether we took the \c true branch of the condition.
+  ///
+  /// \return Whether the print was successful. (The printing is successful if
+  ///         we model the value and we could obtain it.)
+  bool printValue(const Expr *CondVarExpr, raw_ostream &Out,
+                  const ExplodedNode *N, bool TookTrue, bool IsAssuming);
 
   bool patternMatch(const Expr *Ex,
                     const Expr *ParentEx,
@@ -211,7 +230,8 @@
                     BugReporterContext &BRC,
                     BugReport &R,
                     const ExplodedNode *N,
-                    Optional<bool> &prunable);
+                    Optional<bool> &prunable,
+                    bool IsSameFieldName);
 
   static bool isPieceMessageGeneric(const PathDiagnosticPiece *Piece);
 };
@@ -293,34 +313,6 @@
                                                  BugReport &BR) override;
 };
 
-class CXXSelfAssignmentBRVisitor final : public BugReporterVisitor {
-  bool Satisfied = false;
-
-public:
-  CXXSelfAssignmentBRVisitor() = default;
-
-  void Profile(llvm::FoldingSetNodeID &ID) const override {}
-
-  std::shared_ptr<PathDiagnosticPiece> VisitNode(const ExplodedNode *Succ,
-                                                 BugReporterContext &BRC,
-                                                 BugReport &BR) override;
-};
-
-/// The bug visitor prints a diagnostic message at the location where a given
-/// variable was tainted.
-class TaintBugVisitor final : public BugReporterVisitor {
-private:
-  const SVal V;
-
-public:
-  TaintBugVisitor(const SVal V) : V(V) {}
-  void Profile(llvm::FoldingSetNodeID &ID) const override { ID.Add(V); }
-
-  std::shared_ptr<PathDiagnosticPiece> VisitNode(const ExplodedNode *N,
-                                                 BugReporterContext &BRC,
-                                                 BugReport &BR) override;
-};
-
 /// The bug visitor will walk all the nodes in a path and collect all the
 /// constraints. When it reaches the root node, will create a refutation
 /// manager and check if the constraints are satisfiable
@@ -342,6 +334,17 @@
                        BugReport &BR) override;
 };
 
+
+/// The visitor detects NoteTags and displays the event notes they contain.
+class TagVisitor : public BugReporterVisitor {
+public:
+  void Profile(llvm::FoldingSetNodeID &ID) const override;
+
+  std::shared_ptr<PathDiagnosticPiece> VisitNode(const ExplodedNode *N,
+                                                 BugReporterContext &BRC,
+                                                 BugReport &R) override;
+};
+
 namespace bugreporter {
 
 /// Attempts to add visitors to track expression value back to its point of
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
index 3c8f85e..5230742 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
@@ -313,6 +313,8 @@
 
   bool hasRange() const { return K == StmtK || K == RangeK || K == DeclK; }
 
+  bool hasValidLocation() const { return asLocation().isValid(); }
+
   void invalidate() {
     *this = PathDiagnosticLocation();
   }
@@ -365,7 +367,7 @@
 
 class PathDiagnosticPiece: public llvm::FoldingSetNode {
 public:
-  enum Kind { ControlFlow, Event, Macro, Call, Note };
+  enum Kind { ControlFlow, Event, Macro, Call, Note, PopUp };
   enum DisplayHint { Above, Below };
 
 private:
@@ -468,7 +470,7 @@
                           PathDiagnosticPiece::Kind k,
                           bool addPosRange = true)
       : PathDiagnosticPiece(s, k), Pos(pos) {
-    assert(Pos.isValid() && Pos.asLocation().isValid() &&
+    assert(Pos.isValid() && Pos.hasValidLocation() &&
            "PathDiagnosticSpotPiece's must have a valid location.");
     if (addPosRange && Pos.hasRange()) addRange(Pos.asRange());
   }
@@ -480,7 +482,7 @@
 
   static bool classof(const PathDiagnosticPiece *P) {
     return P->getKind() == Event || P->getKind() == Macro ||
-           P->getKind() == Note;
+           P->getKind() == Note || P->getKind() == PopUp;
   }
 };
 
@@ -744,7 +746,7 @@
 class PathDiagnosticNotePiece: public PathDiagnosticSpotPiece {
 public:
   PathDiagnosticNotePiece(const PathDiagnosticLocation &Pos, StringRef S,
-                               bool AddPosRange = true)
+                          bool AddPosRange = true)
       : PathDiagnosticSpotPiece(Pos, S, Note, AddPosRange) {}
   ~PathDiagnosticNotePiece() override;
 
@@ -757,6 +759,22 @@
   void Profile(llvm::FoldingSetNodeID &ID) const override;
 };
 
+class PathDiagnosticPopUpPiece: public PathDiagnosticSpotPiece {
+public:
+  PathDiagnosticPopUpPiece(const PathDiagnosticLocation &Pos, StringRef S,
+                           bool AddPosRange = true)
+      : PathDiagnosticSpotPiece(Pos, S, PopUp, AddPosRange) {}
+  ~PathDiagnosticPopUpPiece() override;
+
+  static bool classof(const PathDiagnosticPiece *P) {
+    return P->getKind() == PopUp;
+  }
+
+  void dump() const override;
+
+  void Profile(llvm::FoldingSetNodeID &ID) const override;
+};
+
 /// File IDs mapped to sets of line numbers.
 using FilesToLineNumsMap = std::map<FileID, std::set<unsigned>>;
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h
index db3ae74..d0fe15f 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h
@@ -474,8 +474,9 @@
 
 class Call {
   template <typename CHECKER>
-  static bool _evalCall(void *checker, const CallExpr *CE, CheckerContext &C) {
-    return ((const CHECKER *)checker)->evalCall(CE, C);
+  static bool _evalCall(void *checker, const CallEvent &Call,
+                        CheckerContext &C) {
+    return ((const CHECKER *)checker)->evalCall(Call, C);
   }
 
 public:
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h
index b4de26d..6cc4baa 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h
@@ -136,6 +136,12 @@
   AnalyzerOptions &getAnalyzerOptions() { return AOptions; }
   ASTContext &getASTContext() { return Context; }
 
+  /// Emits an error through a DiagnosticsEngine about an invalid user supplied
+  /// checker option value.
+  void reportInvalidCheckerOptionValue(const CheckerBase *C,
+                                       StringRef OptionName,
+                                       StringRef ExpectedValueDesc);
+
   using CheckerRef = CheckerBase *;
   using CheckerTag = const void *;
   using CheckerDtor = CheckerFn<void ()>;
@@ -400,16 +406,20 @@
   ///
   /// Unlike most other callbacks, any checker can simply implement the virtual
   /// method CheckerBase::printState if it has custom data to print.
-  /// \param Out The output stream
+  ///
+  /// \param Out   The output stream
   /// \param State The state being printed
-  /// \param NL The preferred representation of a newline.
-  /// \param Sep The preferred separator between different kinds of data.
-  void runCheckersForPrintState(raw_ostream &Out, ProgramStateRef State,
-                                const char *NL, const char *Sep);
+  /// \param NL    The preferred representation of a newline.
+  /// \param Space The preferred space between the left side and the message.
+  /// \param IsDot Whether the message will be printed in 'dot' format.
+  void runCheckersForPrintStateJson(raw_ostream &Out, ProgramStateRef State,
+                                    const char *NL = "\n",
+                                    unsigned int Space = 0,
+                                    bool IsDot = false) const;
 
-//===----------------------------------------------------------------------===//
-// Internal registration functions for AST traversing.
-//===----------------------------------------------------------------------===//
+  //===----------------------------------------------------------------------===//
+  // Internal registration functions for AST traversing.
+  //===----------------------------------------------------------------------===//
 
   // Functions used by the registration mechanism, checkers should not touch
   // these directly.
@@ -480,7 +490,7 @@
       CheckerFn<ProgramStateRef (ProgramStateRef, const SVal &cond,
                                  bool assumption)>;
 
-  using EvalCallFunc = CheckerFn<bool (const CallExpr *, CheckerContext &)>;
+  using EvalCallFunc = CheckerFn<bool (const CallEvent &, CheckerContext &)>;
 
   using CheckEndOfTranslationUnit =
       CheckerFn<void (const TranslationUnitDecl *, AnalysisManager &,
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
index 19996cf..db84102 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
@@ -71,39 +71,7 @@
 };
 
 class CallEvent;
-
-/// This class represents a description of a function call using the number of
-/// arguments and the name of the function.
-class CallDescription {
-  friend CallEvent;
-
-  mutable IdentifierInfo *II = nullptr;
-  mutable bool IsLookupDone = false;
-  // The list of the qualified names used to identify the specified CallEvent,
-  // e.g. "{a, b}" represent the qualified names, like "a::b".
-  std::vector<const char *> QualifiedName;
-  unsigned RequiredArgs;
-
-public:
-  const static unsigned NoArgRequirement = std::numeric_limits<unsigned>::max();
-
-  /// Constructs a CallDescription object.
-  ///
-  /// @param QualifiedName The list of the name qualifiers of the function that
-  /// will be matched. The user is allowed to skip any of the qualifiers.
-  /// For example, {"std", "basic_string", "c_str"} would match both
-  /// std::basic_string<...>::c_str() and std::__1::basic_string<...>::c_str().
-  ///
-  /// @param RequiredArgs The number of arguments that is expected to match a
-  /// call. Omit this parameter to match every occurrence of call with a given
-  /// name regardless the number of arguments.
-  CallDescription(ArrayRef<const char *> QualifiedName,
-                  unsigned RequiredArgs = NoArgRequirement)
-      : QualifiedName(QualifiedName), RequiredArgs(RequiredArgs) {}
-
-  /// Get the name of the function that this object matches.
-  StringRef getFunctionName() const { return QualifiedName.back(); }
-};
+class CallDescription;
 
 template<typename T = CallEvent>
 class CallEventRef : public IntrusiveRefCntPtr<const T> {
@@ -1076,6 +1044,85 @@
   }
 };
 
+enum CallDescriptionFlags : int {
+  /// Describes a C standard function that is sometimes implemented as a macro
+  /// that expands to a compiler builtin with some __builtin prefix.
+  /// The builtin may as well have a few extra arguments on top of the requested
+  /// number of arguments.
+  CDF_MaybeBuiltin = 1 << 0,
+};
+
+/// This class represents a description of a function call using the number of
+/// arguments and the name of the function.
+class CallDescription {
+  friend CallEvent;
+
+  mutable IdentifierInfo *II = nullptr;
+  mutable bool IsLookupDone = false;
+  // The list of the qualified names used to identify the specified CallEvent,
+  // e.g. "{a, b}" represent the qualified names, like "a::b".
+  std::vector<const char *> QualifiedName;
+  Optional<unsigned> RequiredArgs;
+  int Flags;
+
+public:
+  /// Constructs a CallDescription object.
+  ///
+  /// @param QualifiedName The list of the name qualifiers of the function that
+  /// will be matched. The user is allowed to skip any of the qualifiers.
+  /// For example, {"std", "basic_string", "c_str"} would match both
+  /// std::basic_string<...>::c_str() and std::__1::basic_string<...>::c_str().
+  ///
+  /// @param RequiredArgs The number of arguments that is expected to match a
+  /// call. Omit this parameter to match every occurrence of call with a given
+  /// name regardless the number of arguments.
+  CallDescription(int Flags, ArrayRef<const char *> QualifiedName,
+                  Optional<unsigned> RequiredArgs = None)
+      : QualifiedName(QualifiedName), RequiredArgs(RequiredArgs),
+        Flags(Flags) {}
+
+  /// Construct a CallDescription with default flags.
+  CallDescription(ArrayRef<const char *> QualifiedName,
+                  Optional<unsigned> RequiredArgs = None)
+      : CallDescription(0, QualifiedName, RequiredArgs) {}
+
+  /// Get the name of the function that this object matches.
+  StringRef getFunctionName() const { return QualifiedName.back(); }
+};
+
+/// An immutable map from CallDescriptions to arbitrary data. Provides a unified
+/// way for checkers to react on function calls.
+template <typename T> class CallDescriptionMap {
+  // Some call descriptions aren't easily hashable (eg., the ones with qualified
+  // names in which some sections are omitted), so let's put them
+  // in a simple vector and use linear lookup.
+  // TODO: Implement an actual map for fast lookup for "hashable" call
+  // descriptions (eg., the ones for C functions that just match the name).
+  std::vector<std::pair<CallDescription, T>> LinearMap;
+
+public:
+  CallDescriptionMap(
+      std::initializer_list<std::pair<CallDescription, T>> &&List)
+      : LinearMap(List) {}
+
+  ~CallDescriptionMap() = default;
+
+  // These maps are usually stored once per checker, so let's make sure
+  // we don't do redundant copies.
+  CallDescriptionMap(const CallDescriptionMap &) = delete;
+  CallDescriptionMap &operator=(const CallDescription &) = delete;
+
+  const T *lookup(const CallEvent &Call) const {
+    // Slow path: linear lookup.
+    // TODO: Implement some sort of fast path.
+    for (const std::pair<CallDescription, T> &I : LinearMap)
+      if (Call.isCalled(I.first))
+        return &I.second;
+
+    return nullptr;
+  }
+};
+
 /// Manages the lifetime of CallEvent objects.
 ///
 /// CallEventManager provides a way to create arbitrary CallEvents "on the
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
index 5710ee7..981133e 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
@@ -219,6 +219,45 @@
     Eng.getBugReporter().emitReport(std::move(R));
   }
 
+  /// Produce a program point tag that displays an additional path note
+  /// to the user. This is a lightweight alternative to the
+  /// BugReporterVisitor mechanism: instead of visiting the bug report
+  /// node-by-node to restore the sequence of events that led to discovering
+  /// a bug, you can add notes as you add your transitions.
+  ///
+  /// @param Cb Callback with 'BugReporterContext &, BugReport &' parameters.
+  /// @param IsPrunable Whether the note is prunable. It allows BugReporter
+  ///        to omit the note from the report if it would make the displayed
+  ///        bug path significantly shorter.
+  const NoteTag *getNoteTag(NoteTag::Callback &&Cb, bool IsPrunable = false) {
+    return Eng.getNoteTags().makeNoteTag(std::move(Cb), IsPrunable);
+  }
+
+  /// A shorthand version of getNoteTag that doesn't require you to accept
+  /// the BugReporterContext arguments when you don't need it.
+  ///
+  /// @param Cb Callback only with 'BugReport &' parameter.
+  /// @param IsPrunable Whether the note is prunable. It allows BugReporter
+  ///        to omit the note from the report if it would make the displayed
+  ///        bug path significantly shorter.
+  const NoteTag *getNoteTag(std::function<std::string(BugReport &)> &&Cb,
+                            bool IsPrunable = false) {
+    return getNoteTag(
+        [Cb](BugReporterContext &, BugReport &BR) { return Cb(BR); },
+        IsPrunable);
+  }
+
+  /// A shorthand version of getNoteTag that accepts a plain note.
+  ///
+  /// @param Note The note.
+  /// @param IsPrunable Whether the note is prunable. It allows BugReporter
+  ///        to omit the note from the report if it would make the displayed
+  ///        bug path significantly shorter.
+  const NoteTag *getNoteTag(StringRef Note, bool IsPrunable = false) {
+    return getNoteTag(
+        [Note](BugReporterContext &, BugReport &) { return Note; }, IsPrunable);
+  }
+
   /// Returns the word that should be used to refer to the declaration
   /// in the report.
   StringRef getDeclDescription(const Decl *D);
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
index 0a8712e..f85c373 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
@@ -79,6 +79,9 @@
   ConstraintManager() = default;
   virtual ~ConstraintManager();
 
+  virtual bool haveEqualConstraints(ProgramStateRef S1,
+                                    ProgramStateRef S2) const = 0;
+
   virtual ProgramStateRef assume(ProgramStateRef state,
                                  DefinedSVal Cond,
                                  bool Assumption) = 0;
@@ -159,12 +162,9 @@
   virtual ProgramStateRef removeDeadBindings(ProgramStateRef state,
                                                  SymbolReaper& SymReaper) = 0;
 
-  virtual void print(ProgramStateRef state,
-                     raw_ostream &Out,
-                     const char* nl,
-                     const char *sep) = 0;
-
-  virtual void EndPath(ProgramStateRef state) {}
+  virtual void printJson(raw_ostream &Out, ProgramStateRef State,
+                         const char *NL, unsigned int Space,
+                         bool IsDot) const = 0;
 
   /// Convenience method to query the state to see if a symbol is null or
   /// not null, or if neither assumption can be made.
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
index a01678e..278193e 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
@@ -19,6 +19,7 @@
 #include "clang/Analysis/CFG.h"
 #include "clang/Analysis/ProgramPoint.h"
 #include "clang/Basic/LLVM.h"
+#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/BlockCounter.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
@@ -95,6 +96,10 @@
   /// (This data is owned by AnalysisConsumer.)
   FunctionSummariesTy *FunctionSummaries;
 
+  /// Add path note tags along the path when we see that something interesting
+  /// is happening. This field is the allocator for such tags.
+  NoteTag::Factory NoteTags;
+
   void generateNode(const ProgramPoint &Loc,
                     ProgramStateRef State,
                     ExplodedNode *Pred);
@@ -116,6 +121,8 @@
   void HandleStaticInit(const DeclStmt *DS, const CFGBlock *B,
                         ExplodedNode *Pred);
 
+  void HandleVirtualBaseBranch(const CFGBlock *B, ExplodedNode *Pred);
+
 private:
   ExplodedNode *generateCallExitBeginNode(ExplodedNode *N,
                                           const ReturnStmt *RS);
@@ -192,9 +199,11 @@
 
   /// Enqueue a single node created as a result of statement processing.
   void enqueueStmtNode(ExplodedNode *N, const CFGBlock *Block, unsigned Idx);
+
+  NoteTag::Factory &getNoteTags() { return NoteTags; }
 };
 
-// TODO: Turn into a calss.
+// TODO: Turn into a class.
 struct NodeBuilderContext {
   const CoreEngine &Eng;
   const CFGBlock *Block;
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
index 6608f26..a84b248 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
@@ -29,12 +29,11 @@
 /// symbol to its most likely type.
 struct DynamicTypeMap {};
 
-using DynamicTypeMapImpl =
-    llvm::ImmutableMap<const MemRegion *, DynamicTypeInfo>;
+using DynamicTypeMapTy = llvm::ImmutableMap<const MemRegion *, DynamicTypeInfo>;
 
 template <>
 struct ProgramStateTrait<DynamicTypeMap>
-    : public ProgramStatePartialTrait<DynamicTypeMapImpl> {
+    : public ProgramStatePartialTrait<DynamicTypeMapTy> {
   static void *GDMIndex();
 };
 
@@ -54,8 +53,9 @@
                             DynamicTypeInfo(NewTy, CanBeSubClassed));
 }
 
-void printDynamicTypeInfo(ProgramStateRef State, raw_ostream &Out,
-                          const char *NL, const char *Sep);
+void printDynamicTypeInfoJson(raw_ostream &Out, ProgramStateRef State,
+                              const char *NL = "\n", unsigned int Space = 0,
+                              bool IsDot = false);
 
 } // namespace ento
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
index 6fc589b..498e36e 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
@@ -91,9 +91,9 @@
     return ExprBindings == RHS.ExprBindings;
   }
 
-  void print(raw_ostream &Out, const char *NL, const char *Sep,
-             const ASTContext &Context,
-             const LocationContext *WithLC = nullptr) const;
+  void printJson(raw_ostream &Out, const ASTContext &Ctx,
+                 const LocationContext *LCtx = nullptr, const char *NL = "\n",
+                 unsigned int Space = 0, bool IsDot = false) const;
 };
 
 class EnvironmentManager {
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
index 605e1c7..2629d71 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
@@ -22,6 +22,7 @@
 #include "clang/Analysis/ProgramPoint.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
+#include "clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/FunctionSummary.h"
@@ -160,7 +161,7 @@
              SetOfConstDecls *VisitedCalleesIn,
              FunctionSummariesTy *FS, InliningModes HowToInlineIn);
 
-  ~ExprEngine() override;
+  ~ExprEngine() override = default;
 
   /// Returns true if there is still simulation state on the worklist.
   bool ExecuteWorkList(const LocationContext *L, unsigned Steps = 150000) {
@@ -375,10 +376,10 @@
                        const LocationContext *LCtx,
                        const CallEvent *Call) override;
 
-  /// printState - Called by ProgramStateManager to print checker-specific data.
-  void printState(raw_ostream &Out, ProgramStateRef State, const char *NL,
-                  const char *Sep,
-                  const LocationContext *LCtx = nullptr) override;
+  /// printJson - Called by ProgramStateManager to print checker-specific data.
+  void printJson(raw_ostream &Out, ProgramStateRef State,
+                 const LocationContext *LCtx, const char *NL,
+                 unsigned int Space, bool IsDot) const override;
 
   ProgramStateManager &getStateManager() override { return StateMgr; }
 
@@ -396,6 +397,8 @@
   SymbolManager &getSymbolManager() { return SymMgr; }
   MemRegionManager &getRegionManager() { return MRMgr; }
 
+  NoteTag::Factory &getNoteTags() { return Engine.getNoteTags(); }
+
 
   // Functions for external checking of whether we have unfinished work
   bool wasBlocksExhausted() const { return Engine.wasBlocksExhausted(); }
@@ -713,6 +716,25 @@
                                      AnalyzerOptions &Opts,
                                      const EvalCallOptions &CallOpts);
 
+  /// See if the given AnalysisDeclContext is built for a function that we
+  /// should always inline simply because it's small enough.
+  /// Apart from "small" functions, we also have "large" functions
+  /// (cf. isLarge()), some of which are huge (cf. isHuge()), and we classify
+  /// the remaining functions as "medium".
+  bool isSmall(AnalysisDeclContext *ADC) const;
+
+  /// See if the given AnalysisDeclContext is built for a function that we
+  /// should inline carefully because it looks pretty large.
+  bool isLarge(AnalysisDeclContext *ADC) const;
+
+  /// See if the given AnalysisDeclContext is built for a function that we
+  /// should never inline because it's legit gigantic.
+  bool isHuge(AnalysisDeclContext *ADC) const;
+
+  /// See if the given AnalysisDeclContext is built for a function that we
+  /// should inline, just by looking at the declaration of the function.
+  bool mayInlineDecl(AnalysisDeclContext *ADC) const;
+
   /// Checks our policies and decides weither the given call should be inlined.
   bool shouldInlineCall(const CallEvent &Call, const Decl *D,
                         const ExplodedNode *Pred,
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
index 3b1c638..d38058f 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
@@ -20,7 +20,6 @@
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/Store.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h"
 #include "llvm/ADT/FoldingSet.h"
 #include "llvm/ADT/ImmutableMap.h"
 #include "llvm/Support/Allocator.h"
@@ -43,7 +42,6 @@
     ProgramStateManager &, SubEngine *);
 typedef std::unique_ptr<StoreManager>(*StoreManagerCreator)(
     ProgramStateManager &);
-typedef llvm::ImmutableMap<const SubRegion*, TaintTagType> TaintedSubRegions;
 
 //===----------------------------------------------------------------------===//
 // ProgramStateTrait - Traits used by the Generic Data Map of a ProgramState.
@@ -367,38 +365,6 @@
   template <typename CB> CB
   scanReachableSymbols(llvm::iterator_range<region_iterator> Reachable) const;
 
-  /// Create a new state in which the statement is marked as tainted.
-  LLVM_NODISCARD ProgramStateRef
-  addTaint(const Stmt *S, const LocationContext *LCtx,
-           TaintTagType Kind = TaintTagGeneric) const;
-
-  /// Create a new state in which the value is marked as tainted.
-  LLVM_NODISCARD ProgramStateRef
-  addTaint(SVal V, TaintTagType Kind = TaintTagGeneric) const;
-
-  /// Create a new state in which the symbol is marked as tainted.
-  LLVM_NODISCARD ProgramStateRef addTaint(SymbolRef S,
-                               TaintTagType Kind = TaintTagGeneric) const;
-
-  /// Create a new state in which the region symbol is marked as tainted.
-  LLVM_NODISCARD ProgramStateRef
-  addTaint(const MemRegion *R, TaintTagType Kind = TaintTagGeneric) const;
-
-  /// Create a new state in a which a sub-region of a given symbol is tainted.
-  /// This might be necessary when referring to regions that can not have an
-  /// individual symbol, e.g. if they are represented by the default binding of
-  /// a LazyCompoundVal.
-  LLVM_NODISCARD ProgramStateRef
-  addPartialTaint(SymbolRef ParentSym, const SubRegion *SubRegion,
-                  TaintTagType Kind = TaintTagGeneric) const;
-
-  /// Check if the statement is tainted in the current state.
-  bool isTainted(const Stmt *S, const LocationContext *LCtx,
-                 TaintTagType Kind = TaintTagGeneric) const;
-  bool isTainted(SVal V, TaintTagType Kind = TaintTagGeneric) const;
-  bool isTainted(SymbolRef Sym, TaintTagType Kind = TaintTagGeneric) const;
-  bool isTainted(const MemRegion *Reg, TaintTagType Kind=TaintTagGeneric) const;
-
   //==---------------------------------------------------------------------==//
   // Accessing the Generic Data Map (GDM).
   //==---------------------------------------------------------------------==//
@@ -458,14 +424,14 @@
   }
 
   // Pretty-printing.
-  void print(raw_ostream &Out, const char *nl = "\n", const char *sep = "",
-             const LocationContext *CurrentLC = nullptr) const;
-  void printDOT(raw_ostream &Out,
-                const LocationContext *CurrentLC = nullptr) const;
-  void printTaint(raw_ostream &Out, const char *nl = "\n") const;
+  void printJson(raw_ostream &Out, const LocationContext *LCtx = nullptr,
+                 const char *NL = "\n", unsigned int Space = 0,
+                 bool IsDot = false) const;
+
+  void printDOT(raw_ostream &Out, const LocationContext *LCtx = nullptr,
+                unsigned int Space = 0) const;
 
   void dump() const;
-  void dumpTaint() const;
 
 private:
   friend void ProgramStateRetain(const ProgramState *state);
@@ -499,7 +465,6 @@
   std::unique_ptr<ConstraintManager>   ConstraintMgr;
 
   ProgramState::GenericDataMap::Factory     GDMFactory;
-  TaintedSubRegions::Factory TSRFactory;
 
   typedef llvm::DenseMap<void*,std::pair<void*,void (*)(void*)> > GDMContextsTy;
   GDMContextsTy GDMContexts;
@@ -588,11 +553,15 @@
   ProgramStateRef getPersistentStateWithGDM(ProgramStateRef FromState,
                                            ProgramStateRef GDMState);
 
-  bool haveEqualEnvironments(ProgramStateRef S1, ProgramStateRef S2) {
+  bool haveEqualConstraints(ProgramStateRef S1, ProgramStateRef S2) const {
+    return ConstraintMgr->haveEqualConstraints(S1, S2);
+  }
+
+  bool haveEqualEnvironments(ProgramStateRef S1, ProgramStateRef S2) const {
     return S1->Env == S2->Env;
   }
 
-  bool haveEqualStores(ProgramStateRef S1, ProgramStateRef S2) {
+  bool haveEqualStores(ProgramStateRef S1, ProgramStateRef S2) const {
     return S1->store == S2->store;
   }
 
@@ -665,10 +634,6 @@
 
     return ProgramStateTrait<T>::MakeContext(p);
   }
-
-  void EndPath(ProgramStateRef St) {
-    ConstraintMgr->EndPath(St);
-  }
 };
 
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h
index 16c30ec..a9ca345 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h
@@ -113,7 +113,8 @@
 public:
   RangeSet Intersect(BasicValueFactory &BV, Factory &F, llvm::APSInt Lower,
                      llvm::APSInt Upper) const;
-
+  RangeSet Intersect(BasicValueFactory &BV, Factory &F,
+                     const RangeSet &Other) const;
   RangeSet Negate(BasicValueFactory &BV, Factory &F) const;
 
   void print(raw_ostream &os) const;
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTAPI.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTAPI.h
deleted file mode 100644
index 5164892..0000000
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTAPI.h
+++ /dev/null
@@ -1,405 +0,0 @@
-//===- SMTAPI.h -------------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-//  This file defines a SMT generic Solver API, which will be the base class
-//  for every SMT solver specific class.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTSOLVER_H
-#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTSOLVER_H
-
-#include "clang/Basic/TargetInfo.h"
-#include "llvm/ADT/APSInt.h"
-#include "llvm/ADT/FoldingSet.h"
-
-namespace clang {
-namespace ento {
-
-/// Generic base class for SMT sorts
-class SMTSort {
-public:
-  SMTSort() = default;
-  virtual ~SMTSort() = default;
-
-  /// Returns true if the sort is a bitvector, calls isBitvectorSortImpl().
-  virtual bool isBitvectorSort() const { return isBitvectorSortImpl(); }
-
-  /// Returns true if the sort is a floating-point, calls isFloatSortImpl().
-  virtual bool isFloatSort() const { return isFloatSortImpl(); }
-
-  /// Returns true if the sort is a boolean, calls isBooleanSortImpl().
-  virtual bool isBooleanSort() const { return isBooleanSortImpl(); }
-
-  /// Returns the bitvector size, fails if the sort is not a bitvector
-  /// Calls getBitvectorSortSizeImpl().
-  virtual unsigned getBitvectorSortSize() const {
-    assert(isBitvectorSort() && "Not a bitvector sort!");
-    unsigned Size = getBitvectorSortSizeImpl();
-    assert(Size && "Size is zero!");
-    return Size;
-  };
-
-  /// Returns the floating-point size, fails if the sort is not a floating-point
-  /// Calls getFloatSortSizeImpl().
-  virtual unsigned getFloatSortSize() const {
-    assert(isFloatSort() && "Not a floating-point sort!");
-    unsigned Size = getFloatSortSizeImpl();
-    assert(Size && "Size is zero!");
-    return Size;
-  };
-
-  virtual void Profile(llvm::FoldingSetNodeID &ID) const = 0;
-
-  bool operator<(const SMTSort &Other) const {
-    llvm::FoldingSetNodeID ID1, ID2;
-    Profile(ID1);
-    Other.Profile(ID2);
-    return ID1 < ID2;
-  }
-
-  friend bool operator==(SMTSort const &LHS, SMTSort const &RHS) {
-    return LHS.equal_to(RHS);
-  }
-
-  virtual void print(raw_ostream &OS) const = 0;
-
-  LLVM_DUMP_METHOD void dump() const { print(llvm::errs()); }
-
-protected:
-  /// Query the SMT solver and returns true if two sorts are equal (same kind
-  /// and bit width). This does not check if the two sorts are the same objects.
-  virtual bool equal_to(SMTSort const &other) const = 0;
-
-  /// Query the SMT solver and checks if a sort is bitvector.
-  virtual bool isBitvectorSortImpl() const = 0;
-
-  /// Query the SMT solver and checks if a sort is floating-point.
-  virtual bool isFloatSortImpl() const = 0;
-
-  /// Query the SMT solver and checks if a sort is boolean.
-  virtual bool isBooleanSortImpl() const = 0;
-
-  /// Query the SMT solver and returns the sort bit width.
-  virtual unsigned getBitvectorSortSizeImpl() const = 0;
-
-  /// Query the SMT solver and returns the sort bit width.
-  virtual unsigned getFloatSortSizeImpl() const = 0;
-};
-
-/// Shared pointer for SMTSorts, used by SMTSolver API.
-using SMTSortRef = const SMTSort *;
-
-/// Generic base class for SMT exprs
-class SMTExpr {
-public:
-  SMTExpr() = default;
-  virtual ~SMTExpr() = default;
-
-  bool operator<(const SMTExpr &Other) const {
-    llvm::FoldingSetNodeID ID1, ID2;
-    Profile(ID1);
-    Other.Profile(ID2);
-    return ID1 < ID2;
-  }
-
-  virtual void Profile(llvm::FoldingSetNodeID &ID) const = 0;
-
-  friend bool operator==(SMTExpr const &LHS, SMTExpr const &RHS) {
-    return LHS.equal_to(RHS);
-  }
-
-  virtual void print(raw_ostream &OS) const = 0;
-
-  LLVM_DUMP_METHOD void dump() const { print(llvm::errs()); }
-
-protected:
-  /// Query the SMT solver and returns true if two sorts are equal (same kind
-  /// and bit width). This does not check if the two sorts are the same objects.
-  virtual bool equal_to(SMTExpr const &other) const = 0;
-};
-
-/// Shared pointer for SMTExprs, used by SMTSolver API.
-using SMTExprRef = const SMTExpr *;
-
-/// Generic base class for SMT Solvers
-///
-/// This class is responsible for wrapping all sorts and expression generation,
-/// through the mk* methods. It also provides methods to create SMT expressions
-/// straight from clang's AST, through the from* methods.
-class SMTSolver {
-public:
-  SMTSolver() = default;
-  virtual ~SMTSolver() = default;
-
-  LLVM_DUMP_METHOD void dump() const { print(llvm::errs()); }
-
-  // Returns an appropriate floating-point sort for the given bitwidth.
-  SMTSortRef getFloatSort(unsigned BitWidth) {
-    switch (BitWidth) {
-    case 16:
-      return getFloat16Sort();
-    case 32:
-      return getFloat32Sort();
-    case 64:
-      return getFloat64Sort();
-    case 128:
-      return getFloat128Sort();
-    default:;
-    }
-    llvm_unreachable("Unsupported floating-point bitwidth!");
-  }
-
-  // Returns a boolean sort.
-  virtual SMTSortRef getBoolSort() = 0;
-
-  // Returns an appropriate bitvector sort for the given bitwidth.
-  virtual SMTSortRef getBitvectorSort(const unsigned BitWidth) = 0;
-
-  // Returns a floating-point sort of width 16
-  virtual SMTSortRef getFloat16Sort() = 0;
-
-  // Returns a floating-point sort of width 32
-  virtual SMTSortRef getFloat32Sort() = 0;
-
-  // Returns a floating-point sort of width 64
-  virtual SMTSortRef getFloat64Sort() = 0;
-
-  // Returns a floating-point sort of width 128
-  virtual SMTSortRef getFloat128Sort() = 0;
-
-  // Returns an appropriate sort for the given AST.
-  virtual SMTSortRef getSort(const SMTExprRef &AST) = 0;
-
-  /// Given a constraint, adds it to the solver
-  virtual void addConstraint(const SMTExprRef &Exp) const = 0;
-
-  /// Creates a bitvector addition operation
-  virtual SMTExprRef mkBVAdd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector subtraction operation
-  virtual SMTExprRef mkBVSub(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector multiplication operation
-  virtual SMTExprRef mkBVMul(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector signed modulus operation
-  virtual SMTExprRef mkBVSRem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector unsigned modulus operation
-  virtual SMTExprRef mkBVURem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector signed division operation
-  virtual SMTExprRef mkBVSDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector unsigned division operation
-  virtual SMTExprRef mkBVUDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector logical shift left operation
-  virtual SMTExprRef mkBVShl(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector arithmetic shift right operation
-  virtual SMTExprRef mkBVAshr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector logical shift right operation
-  virtual SMTExprRef mkBVLshr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector negation operation
-  virtual SMTExprRef mkBVNeg(const SMTExprRef &Exp) = 0;
-
-  /// Creates a bitvector not operation
-  virtual SMTExprRef mkBVNot(const SMTExprRef &Exp) = 0;
-
-  /// Creates a bitvector xor operation
-  virtual SMTExprRef mkBVXor(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector or operation
-  virtual SMTExprRef mkBVOr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector and operation
-  virtual SMTExprRef mkBVAnd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector unsigned less-than operation
-  virtual SMTExprRef mkBVUlt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector signed less-than operation
-  virtual SMTExprRef mkBVSlt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector unsigned greater-than operation
-  virtual SMTExprRef mkBVUgt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector signed greater-than operation
-  virtual SMTExprRef mkBVSgt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector unsigned less-equal-than operation
-  virtual SMTExprRef mkBVUle(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector signed less-equal-than operation
-  virtual SMTExprRef mkBVSle(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector unsigned greater-equal-than operation
-  virtual SMTExprRef mkBVUge(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a bitvector signed greater-equal-than operation
-  virtual SMTExprRef mkBVSge(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a boolean not operation
-  virtual SMTExprRef mkNot(const SMTExprRef &Exp) = 0;
-
-  /// Creates a boolean equality operation
-  virtual SMTExprRef mkEqual(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a boolean and operation
-  virtual SMTExprRef mkAnd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a boolean or operation
-  virtual SMTExprRef mkOr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a boolean ite operation
-  virtual SMTExprRef mkIte(const SMTExprRef &Cond, const SMTExprRef &T,
-                           const SMTExprRef &F) = 0;
-
-  /// Creates a bitvector sign extension operation
-  virtual SMTExprRef mkBVSignExt(unsigned i, const SMTExprRef &Exp) = 0;
-
-  /// Creates a bitvector zero extension operation
-  virtual SMTExprRef mkBVZeroExt(unsigned i, const SMTExprRef &Exp) = 0;
-
-  /// Creates a bitvector extract operation
-  virtual SMTExprRef mkBVExtract(unsigned High, unsigned Low,
-                                 const SMTExprRef &Exp) = 0;
-
-  /// Creates a bitvector concat operation
-  virtual SMTExprRef mkBVConcat(const SMTExprRef &LHS,
-                                const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point negation operation
-  virtual SMTExprRef mkFPNeg(const SMTExprRef &Exp) = 0;
-
-  /// Creates a floating-point isInfinite operation
-  virtual SMTExprRef mkFPIsInfinite(const SMTExprRef &Exp) = 0;
-
-  /// Creates a floating-point isNaN operation
-  virtual SMTExprRef mkFPIsNaN(const SMTExprRef &Exp) = 0;
-
-  /// Creates a floating-point isNormal operation
-  virtual SMTExprRef mkFPIsNormal(const SMTExprRef &Exp) = 0;
-
-  /// Creates a floating-point isZero operation
-  virtual SMTExprRef mkFPIsZero(const SMTExprRef &Exp) = 0;
-
-  /// Creates a floating-point multiplication operation
-  virtual SMTExprRef mkFPMul(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point division operation
-  virtual SMTExprRef mkFPDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point remainder operation
-  virtual SMTExprRef mkFPRem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point addition operation
-  virtual SMTExprRef mkFPAdd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point subtraction operation
-  virtual SMTExprRef mkFPSub(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point less-than operation
-  virtual SMTExprRef mkFPLt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point greater-than operation
-  virtual SMTExprRef mkFPGt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point less-than-or-equal operation
-  virtual SMTExprRef mkFPLe(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point greater-than-or-equal operation
-  virtual SMTExprRef mkFPGe(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point equality operation
-  virtual SMTExprRef mkFPEqual(const SMTExprRef &LHS,
-                               const SMTExprRef &RHS) = 0;
-
-  /// Creates a floating-point conversion from floatint-point to floating-point
-  /// operation
-  virtual SMTExprRef mkFPtoFP(const SMTExprRef &From, const SMTSortRef &To) = 0;
-
-  /// Creates a floating-point conversion from signed bitvector to
-  /// floatint-point operation
-  virtual SMTExprRef mkSBVtoFP(const SMTExprRef &From,
-                               const SMTSortRef &To) = 0;
-
-  /// Creates a floating-point conversion from unsigned bitvector to
-  /// floatint-point operation
-  virtual SMTExprRef mkUBVtoFP(const SMTExprRef &From,
-                               const SMTSortRef &To) = 0;
-
-  /// Creates a floating-point conversion from floatint-point to signed
-  /// bitvector operation
-  virtual SMTExprRef mkFPtoSBV(const SMTExprRef &From, unsigned ToWidth) = 0;
-
-  /// Creates a floating-point conversion from floatint-point to unsigned
-  /// bitvector operation
-  virtual SMTExprRef mkFPtoUBV(const SMTExprRef &From, unsigned ToWidth) = 0;
-
-  /// Creates a new symbol, given a name and a sort
-  virtual SMTExprRef mkSymbol(const char *Name, SMTSortRef Sort) = 0;
-
-  // Returns an appropriate floating-point rounding mode.
-  virtual SMTExprRef getFloatRoundingMode() = 0;
-
-  // If the a model is available, returns the value of a given bitvector symbol
-  virtual llvm::APSInt getBitvector(const SMTExprRef &Exp, unsigned BitWidth,
-                                    bool isUnsigned) = 0;
-
-  // If the a model is available, returns the value of a given boolean symbol
-  virtual bool getBoolean(const SMTExprRef &Exp) = 0;
-
-  /// Constructs an SMTExprRef from a boolean.
-  virtual SMTExprRef mkBoolean(const bool b) = 0;
-
-  /// Constructs an SMTExprRef from a finite APFloat.
-  virtual SMTExprRef mkFloat(const llvm::APFloat Float) = 0;
-
-  /// Constructs an SMTExprRef from an APSInt and its bit width
-  virtual SMTExprRef mkBitvector(const llvm::APSInt Int, unsigned BitWidth) = 0;
-
-  /// Given an expression, extract the value of this operand in the model.
-  virtual bool getInterpretation(const SMTExprRef &Exp, llvm::APSInt &Int) = 0;
-
-  /// Given an expression extract the value of this operand in the model.
-  virtual bool getInterpretation(const SMTExprRef &Exp,
-                                 llvm::APFloat &Float) = 0;
-
-  /// Check if the constraints are satisfiable
-  virtual Optional<bool> check() const = 0;
-
-  /// Push the current solver state
-  virtual void push() = 0;
-
-  /// Pop the previous solver state
-  virtual void pop(unsigned NumStates = 1) = 0;
-
-  /// Reset the solver and remove all constraints.
-  virtual void reset() = 0;
-
-  /// Checks if the solver supports floating-points.
-  virtual bool isFPSupported() = 0;
-
-  virtual void print(raw_ostream &OS) const = 0;
-};
-
-/// Shared pointer for SMTSolvers.
-using SMTSolverRef = std::shared_ptr<SMTSolver>;
-
-/// Convenience method to create and Z3Solver object
-SMTSolverRef CreateZ3Solver();
-
-} // namespace ento
-} // namespace clang
-
-#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h
index 72f3601..1712501 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h
@@ -14,11 +14,12 @@
 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTCONSTRAINTMANAGER_H
 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTCONSTRAINTMANAGER_H
 
+#include "clang/Basic/JsonSupport.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h"
 
 typedef llvm::ImmutableSet<
-    std::pair<clang::ento::SymbolRef, const clang::ento::SMTExpr *>>
+    std::pair<clang::ento::SymbolRef, const llvm::SMTExpr *>>
     ConstraintSMTType;
 REGISTER_TRAIT_WITH_PROGRAMSTATE(ConstraintSMT, ConstraintSMTType)
 
@@ -26,7 +27,7 @@
 namespace ento {
 
 class SMTConstraintManager : public clang::ento::SimpleConstraintManager {
-  mutable SMTSolverRef Solver = CreateZ3Solver();
+  mutable llvm::SMTSolverRef Solver = llvm::CreateZ3Solver();
 
 public:
   SMTConstraintManager(clang::ento::SubEngine *SE, clang::ento::SValBuilder &SB)
@@ -44,7 +45,8 @@
     QualType RetTy;
     bool hasComparison;
 
-    SMTExprRef Exp = SMTConv::getExpr(Solver, Ctx, Sym, &RetTy, &hasComparison);
+    llvm::SMTExprRef Exp =
+        SMTConv::getExpr(Solver, Ctx, Sym, &RetTy, &hasComparison);
 
     // Create zero comparison for implicit boolean cast, with reversed
     // assumption
@@ -80,12 +82,12 @@
 
     QualType RetTy;
     // The expression may be casted, so we cannot call getZ3DataExpr() directly
-    SMTExprRef VarExp = SMTConv::getExpr(Solver, Ctx, Sym, &RetTy);
-    SMTExprRef Exp =
+    llvm::SMTExprRef VarExp = SMTConv::getExpr(Solver, Ctx, Sym, &RetTy);
+    llvm::SMTExprRef Exp =
         SMTConv::getZeroExpr(Solver, Ctx, VarExp, RetTy, /*Assumption=*/true);
 
     // Negate the constraint
-    SMTExprRef NotExp =
+    llvm::SMTExprRef NotExp =
         SMTConv::getZeroExpr(Solver, Ctx, VarExp, RetTy, /*Assumption=*/false);
 
     ConditionTruthVal isSat = checkModel(State, Sym, Exp);
@@ -118,7 +120,7 @@
       // this method tries to get the interpretation (the actual value) from
       // the solver, which is currently not cached.
 
-      SMTExprRef Exp =
+      llvm::SMTExprRef Exp =
           SMTConv::fromData(Solver, SD->getSymbolID(), Ty, Ctx.getTypeSize(Ty));
 
       Solver->reset();
@@ -134,7 +136,7 @@
         return nullptr;
 
       // A value has been obtained, check if it is the only value
-      SMTExprRef NotExp = SMTConv::fromBinOp(
+      llvm::SMTExprRef NotExp = SMTConv::fromBinOp(
           Solver, Exp, BO_NE,
           Ty->isBooleanType() ? Solver->mkBoolean(Value.getBoolValue())
                               : Solver->mkBitvector(Value, Value.getBitWidth()),
@@ -207,17 +209,37 @@
     return State->set<ConstraintSMT>(CZ);
   }
 
-  void print(ProgramStateRef St, raw_ostream &OS, const char *nl,
-             const char *sep) override {
+  void printJson(raw_ostream &Out, ProgramStateRef State, const char *NL = "\n",
+                 unsigned int Space = 0, bool IsDot = false) const override {
+    ConstraintSMTType Constraints = State->get<ConstraintSMT>();
 
-    auto CZ = St->get<ConstraintSMT>();
-
-    OS << nl << sep << "Constraints:";
-    for (auto I = CZ.begin(), E = CZ.end(); I != E; ++I) {
-      OS << nl << ' ' << I->first << " : ";
-      I->second->print(OS);
+    Indent(Out, Space, IsDot) << "\"constraints\": ";
+    if (Constraints.isEmpty()) {
+      Out << "null," << NL;
+      return;
     }
-    OS << nl;
+
+    ++Space;
+    Out << '[' << NL;
+    for (ConstraintSMTType::iterator I = Constraints.begin();
+         I != Constraints.end(); ++I) {
+      Indent(Out, Space, IsDot)
+          << "{ \"symbol\": \"" << I->first << "\", \"range\": \"";
+      I->second->print(Out);
+      Out << "\" }";
+
+      if (std::next(I) != Constraints.end())
+        Out << ',';
+      Out << NL;
+    }
+
+    --Space;
+    Indent(Out, Space, IsDot) << "],";
+  }
+
+  bool haveEqualConstraints(ProgramStateRef S1,
+                            ProgramStateRef S2) const override {
+    return S1->get<ConstraintSMT>() == S2->get<ConstraintSMT>();
   }
 
   bool canReasonAbout(SVal X) const override {
@@ -272,7 +294,7 @@
 protected:
   // Check whether a new model is satisfiable, and update the program state.
   virtual ProgramStateRef assumeExpr(ProgramStateRef State, SymbolRef Sym,
-                                     const SMTExprRef &Exp) {
+                                     const llvm::SMTExprRef &Exp) {
     // Check the model, avoid simplifying AST to save time
     if (checkModel(State, Sym, Exp).isConstrainedTrue())
       return State->add<ConstraintSMT>(std::make_pair(Sym, Exp));
@@ -289,9 +311,9 @@
 
     // Construct the logical AND of all the constraints
     if (I != IE) {
-      std::vector<SMTExprRef> ASTs;
+      std::vector<llvm::SMTExprRef> ASTs;
 
-      SMTExprRef Constraint = I++->second;
+      llvm::SMTExprRef Constraint = I++->second;
       while (I != IE) {
         Constraint = Solver->mkAnd(Constraint, I++->second);
       }
@@ -302,7 +324,7 @@
 
   // Generate and check a Z3 model, using the given constraint.
   ConditionTruthVal checkModel(ProgramStateRef State, SymbolRef Sym,
-                               const SMTExprRef &Exp) const {
+                               const llvm::SMTExprRef &Exp) const {
     ProgramStateRef NewState =
         State->add<ConstraintSMT>(std::make_pair(Sym, Exp));
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
index f514569..bdebe23 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
@@ -15,8 +15,8 @@
 
 #include "clang/AST/Expr.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/SMTAPI.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h"
+#include "llvm/Support/SMTAPI.h"
 
 namespace clang {
 namespace ento {
@@ -24,8 +24,8 @@
 class SMTConv {
 public:
   // Returns an appropriate sort, given a QualType and it's bit width.
-  static inline SMTSortRef mkSort(SMTSolverRef &Solver, const QualType &Ty,
-                                  unsigned BitWidth) {
+  static inline llvm::SMTSortRef mkSort(llvm::SMTSolverRef &Solver,
+                                        const QualType &Ty, unsigned BitWidth) {
     if (Ty->isBooleanType())
       return Solver->getBoolSort();
 
@@ -35,10 +35,10 @@
     return Solver->getBitvectorSort(BitWidth);
   }
 
-  /// Constructs an SMTExprRef from an unary operator.
-  static inline SMTExprRef fromUnOp(SMTSolverRef &Solver,
-                                    const UnaryOperator::Opcode Op,
-                                    const SMTExprRef &Exp) {
+  /// Constructs an SMTSolverRef from an unary operator.
+  static inline llvm::SMTExprRef fromUnOp(llvm::SMTSolverRef &Solver,
+                                          const UnaryOperator::Opcode Op,
+                                          const llvm::SMTExprRef &Exp) {
     switch (Op) {
     case UO_Minus:
       return Solver->mkBVNeg(Exp);
@@ -54,10 +54,10 @@
     llvm_unreachable("Unimplemented opcode");
   }
 
-  /// Constructs an SMTExprRef from a floating-point unary operator.
-  static inline SMTExprRef fromFloatUnOp(SMTSolverRef &Solver,
-                                         const UnaryOperator::Opcode Op,
-                                         const SMTExprRef &Exp) {
+  /// Constructs an SMTSolverRef from a floating-point unary operator.
+  static inline llvm::SMTExprRef fromFloatUnOp(llvm::SMTSolverRef &Solver,
+                                               const UnaryOperator::Opcode Op,
+                                               const llvm::SMTExprRef &Exp) {
     switch (Op) {
     case UO_Minus:
       return Solver->mkFPNeg(Exp);
@@ -70,27 +70,28 @@
     llvm_unreachable("Unimplemented opcode");
   }
 
-  /// Construct an SMTExprRef from a n-ary binary operator.
-  static inline SMTExprRef fromNBinOp(SMTSolverRef &Solver,
-                                      const BinaryOperator::Opcode Op,
-                                      const std::vector<SMTExprRef> &ASTs) {
+  /// Construct an SMTSolverRef from a n-ary binary operator.
+  static inline llvm::SMTExprRef
+  fromNBinOp(llvm::SMTSolverRef &Solver, const BinaryOperator::Opcode Op,
+             const std::vector<llvm::SMTExprRef> &ASTs) {
     assert(!ASTs.empty());
 
     if (Op != BO_LAnd && Op != BO_LOr)
       llvm_unreachable("Unimplemented opcode");
 
-    SMTExprRef res = ASTs.front();
+    llvm::SMTExprRef res = ASTs.front();
     for (std::size_t i = 1; i < ASTs.size(); ++i)
       res = (Op == BO_LAnd) ? Solver->mkAnd(res, ASTs[i])
                             : Solver->mkOr(res, ASTs[i]);
     return res;
   }
 
-  /// Construct an SMTExprRef from a binary operator.
-  static inline SMTExprRef fromBinOp(SMTSolverRef &Solver,
-                                     const SMTExprRef &LHS,
-                                     const BinaryOperator::Opcode Op,
-                                     const SMTExprRef &RHS, bool isSigned) {
+  /// Construct an SMTSolverRef from a binary operator.
+  static inline llvm::SMTExprRef fromBinOp(llvm::SMTSolverRef &Solver,
+                                           const llvm::SMTExprRef &LHS,
+                                           const BinaryOperator::Opcode Op,
+                                           const llvm::SMTExprRef &RHS,
+                                           bool isSigned) {
     assert(*Solver->getSort(LHS) == *Solver->getSort(RHS) &&
            "AST's must have the same sort!");
 
@@ -162,9 +163,10 @@
     llvm_unreachable("Unimplemented opcode");
   }
 
-  /// Construct an SMTExprRef from a special floating-point binary operator.
-  static inline SMTExprRef
-  fromFloatSpecialBinOp(SMTSolverRef &Solver, const SMTExprRef &LHS,
+  /// Construct an SMTSolverRef from a special floating-point binary
+  /// operator.
+  static inline llvm::SMTExprRef
+  fromFloatSpecialBinOp(llvm::SMTSolverRef &Solver, const llvm::SMTExprRef &LHS,
                         const BinaryOperator::Opcode Op,
                         const llvm::APFloat::fltCategory &RHS) {
     switch (Op) {
@@ -195,11 +197,11 @@
     llvm_unreachable("Unimplemented opcode");
   }
 
-  /// Construct an SMTExprRef from a floating-point binary operator.
-  static inline SMTExprRef fromFloatBinOp(SMTSolverRef &Solver,
-                                          const SMTExprRef &LHS,
-                                          const BinaryOperator::Opcode Op,
-                                          const SMTExprRef &RHS) {
+  /// Construct an SMTSolverRef from a floating-point binary operator.
+  static inline llvm::SMTExprRef fromFloatBinOp(llvm::SMTSolverRef &Solver,
+                                                const llvm::SMTExprRef &LHS,
+                                                const BinaryOperator::Opcode Op,
+                                                const llvm::SMTExprRef &RHS) {
     assert(*Solver->getSort(LHS) == *Solver->getSort(RHS) &&
            "AST's must have the same sort!");
 
@@ -253,11 +255,13 @@
     llvm_unreachable("Unimplemented opcode");
   }
 
-  /// Construct an SMTExprRef from a QualType FromTy to a QualType ToTy, and
-  /// their bit widths.
-  static inline SMTExprRef fromCast(SMTSolverRef &Solver, const SMTExprRef &Exp,
-                                    QualType ToTy, uint64_t ToBitWidth,
-                                    QualType FromTy, uint64_t FromBitWidth) {
+  /// Construct an SMTSolverRef from a QualType FromTy to a QualType ToTy,
+  /// and their bit widths.
+  static inline llvm::SMTExprRef fromCast(llvm::SMTSolverRef &Solver,
+                                          const llvm::SMTExprRef &Exp,
+                                          QualType ToTy, uint64_t ToBitWidth,
+                                          QualType FromTy,
+                                          uint64_t FromBitWidth) {
     if ((FromTy->isIntegralOrEnumerationType() &&
          ToTy->isIntegralOrEnumerationType()) ||
         (FromTy->isAnyPointerType() ^ ToTy->isAnyPointerType()) ||
@@ -291,7 +295,7 @@
     }
 
     if (FromTy->isIntegralOrEnumerationType() && ToTy->isRealFloatingType()) {
-      SMTSortRef Sort = Solver->getFloatSort(ToBitWidth);
+      llvm::SMTSortRef Sort = Solver->getFloatSort(ToBitWidth);
       return FromTy->isSignedIntegerOrEnumerationType()
                  ? Solver->mkSBVtoFP(Exp, Sort)
                  : Solver->mkUBVtoFP(Exp, Sort);
@@ -306,7 +310,7 @@
   }
 
   // Callback function for doCast parameter on APSInt type.
-  static inline llvm::APSInt castAPSInt(SMTSolverRef &Solver,
+  static inline llvm::APSInt castAPSInt(llvm::SMTSolverRef &Solver,
                                         const llvm::APSInt &V, QualType ToTy,
                                         uint64_t ToWidth, QualType FromTy,
                                         uint64_t FromWidth) {
@@ -314,30 +318,32 @@
     return TargetType.convert(V);
   }
 
-  /// Construct an SMTExprRef from a SymbolData.
-  static inline SMTExprRef fromData(SMTSolverRef &Solver, const SymbolID ID,
-                                    const QualType &Ty, uint64_t BitWidth) {
+  /// Construct an SMTSolverRef from a SymbolData.
+  static inline llvm::SMTExprRef fromData(llvm::SMTSolverRef &Solver,
+                                          const SymbolID ID, const QualType &Ty,
+                                          uint64_t BitWidth) {
     llvm::Twine Name = "$" + llvm::Twine(ID);
     return Solver->mkSymbol(Name.str().c_str(), mkSort(Solver, Ty, BitWidth));
   }
 
-  // Wrapper to generate SMTExprRef from SymbolCast data.
-  static inline SMTExprRef getCastExpr(SMTSolverRef &Solver, ASTContext &Ctx,
-                                       const SMTExprRef &Exp, QualType FromTy,
-                                       QualType ToTy) {
+  // Wrapper to generate SMTSolverRef from SymbolCast data.
+  static inline llvm::SMTExprRef getCastExpr(llvm::SMTSolverRef &Solver,
+                                             ASTContext &Ctx,
+                                             const llvm::SMTExprRef &Exp,
+                                             QualType FromTy, QualType ToTy) {
     return fromCast(Solver, Exp, ToTy, Ctx.getTypeSize(ToTy), FromTy,
                     Ctx.getTypeSize(FromTy));
   }
 
-  // Wrapper to generate SMTExprRef from unpacked binary symbolic expression.
-  // Sets the RetTy parameter. See getSMTExprRef().
-  static inline SMTExprRef getBinExpr(SMTSolverRef &Solver, ASTContext &Ctx,
-                                      const SMTExprRef &LHS, QualType LTy,
-                                      BinaryOperator::Opcode Op,
-                                      const SMTExprRef &RHS, QualType RTy,
-                                      QualType *RetTy) {
-    SMTExprRef NewLHS = LHS;
-    SMTExprRef NewRHS = RHS;
+  // Wrapper to generate SMTSolverRef from unpacked binary symbolic
+  // expression. Sets the RetTy parameter. See getSMTSolverRef().
+  static inline llvm::SMTExprRef
+  getBinExpr(llvm::SMTSolverRef &Solver, ASTContext &Ctx,
+             const llvm::SMTExprRef &LHS, QualType LTy,
+             BinaryOperator::Opcode Op, const llvm::SMTExprRef &RHS,
+             QualType RTy, QualType *RetTy) {
+    llvm::SMTExprRef NewLHS = LHS;
+    llvm::SMTExprRef NewRHS = RHS;
     doTypeConversion(Solver, Ctx, NewLHS, NewRHS, LTy, RTy);
 
     // Update the return type parameter if the output type has changed.
@@ -365,36 +371,40 @@
                            LTy->isSignedIntegerOrEnumerationType());
   }
 
-  // Wrapper to generate SMTExprRef from BinarySymExpr.
-  // Sets the hasComparison and RetTy parameters. See getSMTExprRef().
-  static inline SMTExprRef getSymBinExpr(SMTSolverRef &Solver, ASTContext &Ctx,
-                                         const BinarySymExpr *BSE,
-                                         bool *hasComparison, QualType *RetTy) {
+  // Wrapper to generate SMTSolverRef from BinarySymExpr.
+  // Sets the hasComparison and RetTy parameters. See getSMTSolverRef().
+  static inline llvm::SMTExprRef getSymBinExpr(llvm::SMTSolverRef &Solver,
+                                               ASTContext &Ctx,
+                                               const BinarySymExpr *BSE,
+                                               bool *hasComparison,
+                                               QualType *RetTy) {
     QualType LTy, RTy;
     BinaryOperator::Opcode Op = BSE->getOpcode();
 
     if (const SymIntExpr *SIE = dyn_cast<SymIntExpr>(BSE)) {
-      SMTExprRef LHS =
+      llvm::SMTExprRef LHS =
           getSymExpr(Solver, Ctx, SIE->getLHS(), &LTy, hasComparison);
       llvm::APSInt NewRInt;
       std::tie(NewRInt, RTy) = fixAPSInt(Ctx, SIE->getRHS());
-      SMTExprRef RHS = Solver->mkBitvector(NewRInt, NewRInt.getBitWidth());
+      llvm::SMTExprRef RHS =
+          Solver->mkBitvector(NewRInt, NewRInt.getBitWidth());
       return getBinExpr(Solver, Ctx, LHS, LTy, Op, RHS, RTy, RetTy);
     }
 
     if (const IntSymExpr *ISE = dyn_cast<IntSymExpr>(BSE)) {
       llvm::APSInt NewLInt;
       std::tie(NewLInt, LTy) = fixAPSInt(Ctx, ISE->getLHS());
-      SMTExprRef LHS = Solver->mkBitvector(NewLInt, NewLInt.getBitWidth());
-      SMTExprRef RHS =
+      llvm::SMTExprRef LHS =
+          Solver->mkBitvector(NewLInt, NewLInt.getBitWidth());
+      llvm::SMTExprRef RHS =
           getSymExpr(Solver, Ctx, ISE->getRHS(), &RTy, hasComparison);
       return getBinExpr(Solver, Ctx, LHS, LTy, Op, RHS, RTy, RetTy);
     }
 
     if (const SymSymExpr *SSM = dyn_cast<SymSymExpr>(BSE)) {
-      SMTExprRef LHS =
+      llvm::SMTExprRef LHS =
           getSymExpr(Solver, Ctx, SSM->getLHS(), &LTy, hasComparison);
-      SMTExprRef RHS =
+      llvm::SMTExprRef RHS =
           getSymExpr(Solver, Ctx, SSM->getRHS(), &RTy, hasComparison);
       return getBinExpr(Solver, Ctx, LHS, LTy, Op, RHS, RTy, RetTy);
     }
@@ -404,9 +414,10 @@
 
   // Recursive implementation to unpack and generate symbolic expression.
   // Sets the hasComparison and RetTy parameters. See getExpr().
-  static inline SMTExprRef getSymExpr(SMTSolverRef &Solver, ASTContext &Ctx,
-                                      SymbolRef Sym, QualType *RetTy,
-                                      bool *hasComparison) {
+  static inline llvm::SMTExprRef getSymExpr(llvm::SMTSolverRef &Solver,
+                                            ASTContext &Ctx, SymbolRef Sym,
+                                            QualType *RetTy,
+                                            bool *hasComparison) {
     if (const SymbolData *SD = dyn_cast<SymbolData>(Sym)) {
       if (RetTy)
         *RetTy = Sym->getType();
@@ -420,7 +431,7 @@
         *RetTy = Sym->getType();
 
       QualType FromTy;
-      SMTExprRef Exp =
+      llvm::SMTExprRef Exp =
           getSymExpr(Solver, Ctx, SC->getOperand(), &FromTy, hasComparison);
 
       // Casting an expression with a comparison invalidates it. Note that this
@@ -432,7 +443,8 @@
     }
 
     if (const BinarySymExpr *BSE = dyn_cast<BinarySymExpr>(Sym)) {
-      SMTExprRef Exp = getSymBinExpr(Solver, Ctx, BSE, hasComparison, RetTy);
+      llvm::SMTExprRef Exp =
+          getSymBinExpr(Solver, Ctx, BSE, hasComparison, RetTy);
       // Set the hasComparison parameter, in post-order traversal order.
       if (hasComparison)
         *hasComparison = BinaryOperator::isComparisonOp(BSE->getOpcode());
@@ -442,13 +454,14 @@
     llvm_unreachable("Unsupported SymbolRef type!");
   }
 
-  // Generate an SMTExprRef that represents the given symbolic expression.
+  // Generate an SMTSolverRef that represents the given symbolic expression.
   // Sets the hasComparison parameter if the expression has a comparison
   // operator. Sets the RetTy parameter to the final return type after
   // promotions and casts.
-  static inline SMTExprRef getExpr(SMTSolverRef &Solver, ASTContext &Ctx,
-                                   SymbolRef Sym, QualType *RetTy = nullptr,
-                                   bool *hasComparison = nullptr) {
+  static inline llvm::SMTExprRef getExpr(llvm::SMTSolverRef &Solver,
+                                         ASTContext &Ctx, SymbolRef Sym,
+                                         QualType *RetTy = nullptr,
+                                         bool *hasComparison = nullptr) {
     if (hasComparison) {
       *hasComparison = false;
     }
@@ -456,11 +469,11 @@
     return getSymExpr(Solver, Ctx, Sym, RetTy, hasComparison);
   }
 
-  // Generate an SMTExprRef that compares the expression to zero.
-  static inline SMTExprRef getZeroExpr(SMTSolverRef &Solver, ASTContext &Ctx,
-                                       const SMTExprRef &Exp, QualType Ty,
-                                       bool Assumption) {
-
+  // Generate an SMTSolverRef that compares the expression to zero.
+  static inline llvm::SMTExprRef getZeroExpr(llvm::SMTSolverRef &Solver,
+                                             ASTContext &Ctx,
+                                             const llvm::SMTExprRef &Exp,
+                                             QualType Ty, bool Assumption) {
     if (Ty->isRealFloatingType()) {
       llvm::APFloat Zero =
           llvm::APFloat::getZero(Ctx.getFloatTypeSemantics(Ty));
@@ -485,21 +498,21 @@
     llvm_unreachable("Unsupported type for zero value!");
   }
 
-  // Wrapper to generate SMTExprRef from a range. If From == To, an equality
-  // will be created instead.
-  static inline SMTExprRef getRangeExpr(SMTSolverRef &Solver, ASTContext &Ctx,
-                                        SymbolRef Sym, const llvm::APSInt &From,
-                                        const llvm::APSInt &To, bool InRange) {
+  // Wrapper to generate SMTSolverRef from a range. If From == To, an
+  // equality will be created instead.
+  static inline llvm::SMTExprRef
+  getRangeExpr(llvm::SMTSolverRef &Solver, ASTContext &Ctx, SymbolRef Sym,
+               const llvm::APSInt &From, const llvm::APSInt &To, bool InRange) {
     // Convert lower bound
     QualType FromTy;
     llvm::APSInt NewFromInt;
     std::tie(NewFromInt, FromTy) = fixAPSInt(Ctx, From);
-    SMTExprRef FromExp =
+    llvm::SMTExprRef FromExp =
         Solver->mkBitvector(NewFromInt, NewFromInt.getBitWidth());
 
     // Convert symbol
     QualType SymTy;
-    SMTExprRef Exp = getExpr(Solver, Ctx, Sym, &SymTy);
+    llvm::SMTExprRef Exp = getExpr(Solver, Ctx, Sym, &SymTy);
 
     // Construct single (in)equality
     if (From == To)
@@ -509,16 +522,17 @@
     QualType ToTy;
     llvm::APSInt NewToInt;
     std::tie(NewToInt, ToTy) = fixAPSInt(Ctx, To);
-    SMTExprRef ToExp = Solver->mkBitvector(NewToInt, NewToInt.getBitWidth());
+    llvm::SMTExprRef ToExp =
+        Solver->mkBitvector(NewToInt, NewToInt.getBitWidth());
     assert(FromTy == ToTy && "Range values have different types!");
 
     // Construct two (in)equalities, and a logical and/or
-    SMTExprRef LHS =
+    llvm::SMTExprRef LHS =
         getBinExpr(Solver, Ctx, Exp, SymTy, InRange ? BO_GE : BO_LT, FromExp,
                    FromTy, /*RetTy=*/nullptr);
-    SMTExprRef RHS = getBinExpr(Solver, Ctx, Exp, SymTy,
-                                InRange ? BO_LE : BO_GT, ToExp, ToTy,
-                                /*RetTy=*/nullptr);
+    llvm::SMTExprRef RHS = getBinExpr(Solver, Ctx, Exp, SymTy,
+                                      InRange ? BO_LE : BO_GT, ToExp, ToTy,
+                                      /*RetTy=*/nullptr);
 
     return fromBinOp(Solver, LHS, InRange ? BO_LAnd : BO_LOr, RHS,
                      SymTy->isSignedIntegerOrEnumerationType());
@@ -550,23 +564,24 @@
   // Perform implicit type conversion on binary symbolic expressions.
   // May modify all input parameters.
   // TODO: Refactor to use built-in conversion functions
-  static inline void doTypeConversion(SMTSolverRef &Solver, ASTContext &Ctx,
-                                      SMTExprRef &LHS, SMTExprRef &RHS,
-                                      QualType &LTy, QualType &RTy) {
+  static inline void doTypeConversion(llvm::SMTSolverRef &Solver,
+                                      ASTContext &Ctx, llvm::SMTExprRef &LHS,
+                                      llvm::SMTExprRef &RHS, QualType &LTy,
+                                      QualType &RTy) {
     assert(!LTy.isNull() && !RTy.isNull() && "Input type is null!");
 
     // Perform type conversion
     if ((LTy->isIntegralOrEnumerationType() &&
          RTy->isIntegralOrEnumerationType()) &&
         (LTy->isArithmeticType() && RTy->isArithmeticType())) {
-      SMTConv::doIntTypeConversion<SMTExprRef, &fromCast>(Solver, Ctx, LHS, LTy,
-                                                          RHS, RTy);
+      SMTConv::doIntTypeConversion<llvm::SMTExprRef, &fromCast>(
+          Solver, Ctx, LHS, LTy, RHS, RTy);
       return;
     }
 
     if (LTy->isRealFloatingType() || RTy->isRealFloatingType()) {
-      SMTConv::doFloatTypeConversion<SMTExprRef, &fromCast>(Solver, Ctx, LHS,
-                                                            LTy, RHS, RTy);
+      SMTConv::doFloatTypeConversion<llvm::SMTExprRef, &fromCast>(
+          Solver, Ctx, LHS, LTy, RHS, RTy);
       return;
     }
 
@@ -624,12 +639,11 @@
   // Perform implicit integer type conversion.
   // May modify all input parameters.
   // TODO: Refactor to use Sema::handleIntegerConversion()
-  template <typename T, T (*doCast)(SMTSolverRef &Solver, const T &, QualType,
-                                    uint64_t, QualType, uint64_t)>
-  static inline void doIntTypeConversion(SMTSolverRef &Solver, ASTContext &Ctx,
-                                         T &LHS, QualType &LTy, T &RHS,
-                                         QualType &RTy) {
-
+  template <typename T, T (*doCast)(llvm::SMTSolverRef &Solver, const T &,
+                                    QualType, uint64_t, QualType, uint64_t)>
+  static inline void doIntTypeConversion(llvm::SMTSolverRef &Solver,
+                                         ASTContext &Ctx, T &LHS, QualType &LTy,
+                                         T &RHS, QualType &RTy) {
     uint64_t LBitWidth = Ctx.getTypeSize(LTy);
     uint64_t RBitWidth = Ctx.getTypeSize(RTy);
 
@@ -707,12 +721,11 @@
   // Perform implicit floating-point type conversion.
   // May modify all input parameters.
   // TODO: Refactor to use Sema::handleFloatConversion()
-  template <typename T, T (*doCast)(SMTSolverRef &Solver, const T &, QualType,
-                                    uint64_t, QualType, uint64_t)>
+  template <typename T, T (*doCast)(llvm::SMTSolverRef &Solver, const T &,
+                                    QualType, uint64_t, QualType, uint64_t)>
   static inline void
-  doFloatTypeConversion(SMTSolverRef &Solver, ASTContext &Ctx, T &LHS,
+  doFloatTypeConversion(llvm::SMTSolverRef &Solver, ASTContext &Ctx, T &LHS,
                         QualType &LTy, T &RHS, QualType &RTy) {
-
     uint64_t LBitWidth = Ctx.getTypeSize(LTy);
     uint64_t RBitWidth = Ctx.getTypeSize(RTy);
 
@@ -749,4 +762,4 @@
 } // namespace ento
 } // namespace clang
 
-#endif
\ No newline at end of file
+#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
index e859936..1abe297 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
@@ -190,6 +190,9 @@
 
   const MemRegion *getAsRegion() const;
 
+  /// printJson - Pretty-prints in JSON format.
+  void printJson(raw_ostream &Out, bool AddQuotes) const;
+
   void dumpToStream(raw_ostream &OS) const;
   void dump() const;
 
@@ -303,7 +306,7 @@
 
   static bool isCompoundType(QualType T) {
     return T->isArrayType() || T->isRecordType() ||
-           T->isComplexType() || T->isVectorType();
+           T->isAnyComplexType() || T->isVectorType();
   }
 
 private:
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
index 1773683..cbff299 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
@@ -253,7 +253,8 @@
   virtual bool scanReachableSymbols(Store S, const MemRegion *R,
                                     ScanReachableSymbols &Visitor) = 0;
 
-  virtual void print(Store store, raw_ostream &Out, const char* nl) = 0;
+  virtual void printJson(raw_ostream &Out, Store S, const char *NL,
+                         unsigned int Space, bool IsDot) const = 0;
 
   class BindingsHandler {
   public:
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
index 9296e17..7789b43 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
@@ -158,10 +158,10 @@
                            const CallEvent *Call,
                            RegionAndSymbolInvalidationTraits &HTraits) = 0;
 
-  /// printState - Called by ProgramStateManager to print checker-specific data.
-  virtual void printState(raw_ostream &Out, ProgramStateRef State,
-                          const char *NL, const char *Sep,
-                          const LocationContext *LCtx = nullptr) = 0;
+  /// printJson - Called by ProgramStateManager to print checker-specific data.
+  virtual void printJson(raw_ostream &Out, ProgramStateRef State,
+                         const LocationContext *LCtx, const char *NL,
+                         unsigned int Space, bool IsDot) const = 0;
 
   /// Called by CoreEngine when the analysis worklist is either empty or the
   //  maximum number of analysis steps have been reached.
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h
deleted file mode 100644
index 9424392..0000000
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//===- TaintManager.h - Managing taint --------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-//  This file provides APIs for adding, removing, querying symbol taint.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTMANAGER_H
-#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTMANAGER_H
-
-#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h"
-#include "llvm/ADT/ImmutableMap.h"
-
-namespace clang {
-namespace ento {
-
-/// The GDM component containing the tainted root symbols. We lazily infer the
-/// taint of the dependent symbols. Currently, this is a map from a symbol to
-/// tag kind. TODO: Should support multiple tag kinds.
-// FIXME: This does not use the nice trait macros because it must be accessible
-// from multiple translation units.
-struct TaintMap {};
-
-using TaintMapImpl = llvm::ImmutableMap<SymbolRef, TaintTagType>;
-
-template<> struct ProgramStateTrait<TaintMap>
-    :  public ProgramStatePartialTrait<TaintMapImpl> {
-  static void *GDMIndex();
-};
-
-/// The GDM component mapping derived symbols' parent symbols to their
-/// underlying regions. This is used to efficiently check whether a symbol is
-/// tainted when it represents a sub-region of a tainted symbol.
-struct DerivedSymTaint {};
-
-using DerivedSymTaintImpl = llvm::ImmutableMap<SymbolRef, TaintedSubRegions>;
-
-template<> struct ProgramStateTrait<DerivedSymTaint>
-    :  public ProgramStatePartialTrait<DerivedSymTaintImpl> {
-  static void *GDMIndex();
-};
-
-class TaintManager {
-  TaintManager() = default;
-};
-
-} // namespace ento
-} // namespace clang
-
-#endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTMANAGER_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h
deleted file mode 100644
index d1018f9..0000000
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h
+++ /dev/null
@@ -1,29 +0,0 @@
-//===- TaintTag.h - Path-sensitive "State" for tracking values --*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// Defines a set of taint tags. Several tags are used to differentiate kinds
-// of taint.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTTAG_H
-#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTTAG_H
-
-namespace clang {
-namespace ento {
-
-/// The type of taint, which helps to differentiate between different types of
-/// taint.
-using TaintTagType = unsigned;
-
-static const TaintTagType TaintTagGeneric = 0;
-
-} // namespace ento
-} // namespace clang
-
-#endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTTAG_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h
index 5487334..bc25816 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h
@@ -81,17 +81,56 @@
 /// "core.builtin", or the full name "core.builtin.NoReturnFunctionChecker".
 class CheckerRegistry {
 public:
-  CheckerRegistry(
-      ArrayRef<std::string> plugins, DiagnosticsEngine &diags,
-      AnalyzerOptions &AnOpts, const LangOptions &LangOpts,
-      ArrayRef<std::function<void(CheckerRegistry &)>>
-          checkerRegistrationFns = {});
+  CheckerRegistry(ArrayRef<std::string> plugins, DiagnosticsEngine &diags,
+                  AnalyzerOptions &AnOpts, const LangOptions &LangOpts,
+                  ArrayRef<std::function<void(CheckerRegistry &)>>
+                      checkerRegistrationFns = {});
 
   /// Initialization functions perform any necessary setup for a checker.
   /// They should include a call to CheckerManager::registerChecker.
   using InitializationFunction = void (*)(CheckerManager &);
   using ShouldRegisterFunction = bool (*)(const LangOptions &);
 
+  /// Specifies a command line option. It may either belong to a checker or a
+  /// package.
+  struct CmdLineOption {
+    StringRef OptionType;
+    StringRef OptionName;
+    StringRef DefaultValStr;
+    StringRef Description;
+    StringRef DevelopmentStatus;
+    bool IsHidden;
+
+    CmdLineOption(StringRef OptionType, StringRef OptionName,
+                  StringRef DefaultValStr, StringRef Description,
+                  StringRef DevelopmentStatus, bool IsHidden)
+        : OptionType(OptionType), OptionName(OptionName),
+          DefaultValStr(DefaultValStr), Description(Description),
+          DevelopmentStatus(DevelopmentStatus), IsHidden(IsHidden) {
+
+      assert((OptionType == "bool" || OptionType == "string" ||
+              OptionType == "int") &&
+             "Unknown command line option type!");
+
+      assert((OptionType != "bool" ||
+              (DefaultValStr == "true" || DefaultValStr == "false")) &&
+             "Invalid value for boolean command line option! Maybe incorrect "
+             "parameters to the addCheckerOption or addPackageOption method?");
+
+      int Tmp;
+      assert((OptionType != "int" || !DefaultValStr.getAsInteger(0, Tmp)) &&
+             "Invalid value for integer command line option! Maybe incorrect "
+             "parameters to the addCheckerOption or addPackageOption method?");
+      (void)Tmp;
+
+      assert((DevelopmentStatus == "alpha" || DevelopmentStatus == "beta" ||
+              DevelopmentStatus == "released") &&
+             "Invalid development status!");
+    }
+  };
+
+  using CmdLineOptionList = llvm::SmallVector<CmdLineOption, 0>;
+
   struct CheckerInfo;
 
   using CheckerInfoList = std::vector<CheckerInfo>;
@@ -99,6 +138,8 @@
   using ConstCheckerInfoList = llvm::SmallVector<const CheckerInfo *, 0>;
   using CheckerInfoSet = llvm::SetVector<const CheckerInfo *>;
 
+  /// Specifies a checker. Note that this isn't what we call a checker object,
+  /// it merely contains everything required to create one.
   struct CheckerInfo {
     enum class StateFromCmdLine {
       // This checker wasn't explicitly enabled or disabled.
@@ -109,11 +150,13 @@
       State_Enabled
     };
 
-    InitializationFunction Initialize;
-    ShouldRegisterFunction ShouldRegister;
+    InitializationFunction Initialize = nullptr;
+    ShouldRegisterFunction ShouldRegister = nullptr;
     StringRef FullName;
     StringRef Desc;
     StringRef DocumentationUri;
+    CmdLineOptionList CmdLineOptions;
+    bool IsHidden = false;
     StateFromCmdLine State = StateFromCmdLine::State_Unspecified;
 
     ConstCheckerInfoList Dependencies;
@@ -126,23 +169,47 @@
       return State == StateFromCmdLine::State_Disabled && ShouldRegister(LO);
     }
 
+    // Since each checker must have a different full name, we can identify
+    // CheckerInfo objects by them.
+    bool operator==(const CheckerInfo &Rhs) const {
+      return FullName == Rhs.FullName;
+    }
+
     CheckerInfo(InitializationFunction Fn, ShouldRegisterFunction sfn,
-                StringRef Name, StringRef Desc, StringRef DocsUri)
+                StringRef Name, StringRef Desc, StringRef DocsUri,
+                bool IsHidden)
         : Initialize(Fn), ShouldRegister(sfn), FullName(Name), Desc(Desc),
-          DocumentationUri(DocsUri) {}
+          DocumentationUri(DocsUri), IsHidden(IsHidden) {}
+
+    // Used for lower_bound.
+    explicit CheckerInfo(StringRef FullName) : FullName(FullName) {}
   };
 
   using StateFromCmdLine = CheckerInfo::StateFromCmdLine;
 
+  /// Specifies a package. Each package option is implicitly an option for all
+  /// checkers within the package.
+  struct PackageInfo {
+    StringRef FullName;
+    CmdLineOptionList CmdLineOptions;
+
+    // Since each package must have a different full name, we can identify
+    // CheckerInfo objects by them.
+    bool operator==(const PackageInfo &Rhs) const {
+      return FullName == Rhs.FullName;
+    }
+
+    explicit PackageInfo(StringRef FullName) : FullName(FullName) {}
+  };
+
+  using PackageInfoList = llvm::SmallVector<PackageInfo, 0>;
+
 private:
-  template <typename T>
-  static void initializeManager(CheckerManager &mgr) {
+  template <typename T> static void initializeManager(CheckerManager &mgr) {
     mgr.registerChecker<T>();
   }
 
-
-  template <typename T>
-  static bool returnTrue(const LangOptions &LO) {
+  template <typename T> static bool returnTrue(const LangOptions &LO) {
     return true;
   }
 
@@ -150,54 +217,72 @@
   /// Adds a checker to the registry. Use this non-templated overload when your
   /// checker requires custom initialization.
   void addChecker(InitializationFunction Fn, ShouldRegisterFunction sfn,
-                  StringRef FullName, StringRef Desc, StringRef DocsUri);
+                  StringRef FullName, StringRef Desc, StringRef DocsUri,
+                  bool IsHidden);
 
   /// Adds a checker to the registry. Use this templated overload when your
   /// checker does not require any custom initialization.
   template <class T>
-  void addChecker(StringRef FullName, StringRef Desc, StringRef DocsUri) {
+  void addChecker(StringRef FullName, StringRef Desc, StringRef DocsUri,
+                  bool IsHidden = false) {
     // Avoid MSVC's Compiler Error C2276:
     // http://msdn.microsoft.com/en-us/library/850cstw1(v=VS.80).aspx
     addChecker(&CheckerRegistry::initializeManager<T>,
-               &CheckerRegistry::returnTrue<T>, FullName, Desc, DocsUri);
+               &CheckerRegistry::returnTrue<T>, FullName, Desc, DocsUri,
+               IsHidden);
   }
 
   /// Makes the checker with the full name \p fullName depends on the checker
   /// called \p dependency.
-  void addDependency(StringRef fullName, StringRef dependency) {
-    auto CheckerThatNeedsDeps =
-       [&fullName](const CheckerInfo &Chk) { return Chk.FullName == fullName; };
-    auto Dependency =
-      [&dependency](const CheckerInfo &Chk) {
-        return Chk.FullName == dependency;
-      };
+  void addDependency(StringRef FullName, StringRef Dependency);
 
-    auto CheckerIt = llvm::find_if(Checkers, CheckerThatNeedsDeps);
-    assert(CheckerIt != Checkers.end() &&
-           "Failed to find the checker while attempting to set up it's "
-           "dependencies!");
+  /// Registers an option to a given checker. A checker option will always have
+  /// the following format:
+  ///   CheckerFullName:OptionName=Value
+  /// And can be specified from the command line like this:
+  ///   -analyzer-config CheckerFullName:OptionName=Value
+  ///
+  /// Options for unknown checkers, or unknown options for a given checker, or
+  /// invalid value types for that given option are reported as an error in
+  /// non-compatibility mode.
+  void addCheckerOption(StringRef OptionType, StringRef CheckerFullName,
+                        StringRef OptionName, StringRef DefaultValStr,
+                        StringRef Description, StringRef DevelopmentStatus,
+                        bool IsHidden = false);
 
-    auto DependencyIt = llvm::find_if(Checkers, Dependency);
-    assert(DependencyIt != Checkers.end() &&
-           "Failed to find the dependency of a checker!");
+  /// Adds a package to the registry.
+  void addPackage(StringRef FullName);
 
-    CheckerIt->Dependencies.push_back(&*DependencyIt);
-  }
+  /// Registers an option to a given package. A package option will always have
+  /// the following format:
+  ///   PackageFullName:OptionName=Value
+  /// And can be specified from the command line like this:
+  ///   -analyzer-config PackageFullName:OptionName=Value
+  ///
+  /// Options for unknown packages, or unknown options for a given package, or
+  /// invalid value types for that given option are reported as an error in
+  /// non-compatibility mode.
+  void addPackageOption(StringRef OptionType, StringRef PackageFullName,
+                        StringRef OptionName, StringRef DefaultValStr,
+                        StringRef Description, StringRef DevelopmentStatus,
+                         bool IsHidden = false);
 
   // FIXME: This *really* should be added to the frontend flag descriptions.
   /// Initializes a CheckerManager by calling the initialization functions for
   /// all checkers specified by the given CheckerOptInfo list. The order of this
   /// list is significant; later options can be used to reverse earlier ones.
   /// This can be used to exclude certain checkers in an included package.
-  void initializeManager(CheckerManager &mgr) const;
+  void initializeManager(CheckerManager &CheckerMgr) const;
 
   /// Check if every option corresponds to a specific checker or package.
   void validateCheckerOptions() const;
 
   /// Prints the name and description of all checkers in this registry.
   /// This output is not intended to be machine-parseable.
-  void printHelp(raw_ostream &out, size_t maxNameChars = 30) const;
-  void printList(raw_ostream &out) const;
+  void printCheckerWithDescList(raw_ostream &Out,
+                                size_t MaxNameChars = 30) const;
+  void printEnabledCheckerList(raw_ostream &Out) const;
+  void printCheckerOptionList(raw_ostream &Out) const;
 
 private:
   /// Collect all enabled checkers. The returned container preserves the order
@@ -211,7 +296,23 @@
   CheckerInfoListRange getMutableCheckersForCmdLineArg(StringRef CmdLineArg);
 
   CheckerInfoList Checkers;
-  llvm::StringMap<size_t> Packages;
+  PackageInfoList Packages;
+  /// Used for couting how many checkers belong to a certain package in the
+  /// \c Checkers field. For convenience purposes.
+  llvm::StringMap<size_t> PackageSizes;
+
+  /// Contains all (Dependendent checker, Dependency) pairs. We need this, as
+  /// we'll resolve dependencies after all checkers were added first.
+  llvm::SmallVector<std::pair<StringRef, StringRef>, 0> Dependencies;
+  void resolveDependencies();
+
+  /// Contains all (FullName, CmdLineOption) pairs. Similarly to dependencies,
+  /// we only modify the actual CheckerInfo and PackageInfo objects once all
+  /// of them have been added.
+  llvm::SmallVector<std::pair<StringRef, CmdLineOption>, 0> PackageOptions;
+  llvm::SmallVector<std::pair<StringRef, CmdLineOption>, 0> CheckerOptions;
+
+  void resolveCheckerAndPackageOptions();
 
   DiagnosticsEngine &Diags;
   AnalyzerOptions &AnOpts;
@@ -219,7 +320,6 @@
 };
 
 } // namespace ento
-
 } // namespace clang
 
 #endif // LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
index 5f26a48..878b65a 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
@@ -61,6 +61,10 @@
                              DiagnosticsEngine &diags,
                              const LangOptions &LangOpts);
 void printAnalyzerConfigList(raw_ostream &OS);
+void printCheckerConfigList(raw_ostream &OS, ArrayRef<std::string> plugins,
+                            AnalyzerOptions &opts,
+                            DiagnosticsEngine &diags,
+                            const LangOptions &LangOpts);
 
 } // end GR namespace
 
diff --git a/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h b/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h
index 984e866..dea046a 100644
--- a/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h
+++ b/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h
@@ -59,9 +59,15 @@
   /// The output file associated with the command.
   std::string Output;
 
+  /// If this compile command was guessed rather than read from an authoritative
+  /// source, a short human-readable explanation.
+  /// e.g. "inferred from foo/bar.h".
+  std::string Heuristic;
+
   friend bool operator==(const CompileCommand &LHS, const CompileCommand &RHS) {
     return LHS.Directory == RHS.Directory && LHS.Filename == RHS.Filename &&
-           LHS.CommandLine == RHS.CommandLine && LHS.Output == RHS.Output;
+           LHS.CommandLine == RHS.CommandLine && LHS.Output == RHS.Output &&
+           LHS.Heuristic == RHS.Heuristic;
   }
 
   friend bool operator!=(const CompileCommand &LHS, const CompileCommand &RHS) {
@@ -207,6 +213,12 @@
 std::unique_ptr<CompilationDatabase>
     inferMissingCompileCommands(std::unique_ptr<CompilationDatabase>);
 
+/// Returns a wrapped CompilationDatabase that will add -target and -mode flags
+/// to commandline when they can be deduced from argv[0] of commandline returned
+/// by underlying database.
+std::unique_ptr<CompilationDatabase>
+inferTargetAndDriverMode(std::unique_ptr<CompilationDatabase> Base);
+
 } // namespace tooling
 } // namespace clang
 
diff --git a/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h b/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h
index 646bb56..4e0feba 100644
--- a/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h
+++ b/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h
@@ -42,6 +42,9 @@
   std::string Message;
   std::string FilePath;
   unsigned FileOffset;
+
+  /// Fixes for this diagnostic, grouped by file path.
+  llvm::StringMap<Replacements> Fix;
 };
 
 /// Represents the diagnostic with the level of severity and possible
@@ -58,7 +61,6 @@
              StringRef BuildDirectory);
 
   Diagnostic(llvm::StringRef DiagnosticName, const DiagnosticMessage &Message,
-             const llvm::StringMap<Replacements> &Fix,
              const SmallVector<DiagnosticMessage, 1> &Notes, Level DiagLevel,
              llvm::StringRef BuildDirectory);
 
@@ -68,9 +70,6 @@
   /// Message associated to the diagnostic.
   DiagnosticMessage Message;
 
-  /// Fixes to apply, grouped by file path.
-  llvm::StringMap<Replacements> Fix;
-
   /// Potential notes about the diagnostic.
   SmallVector<DiagnosticMessage, 1> Notes;
 
@@ -94,6 +93,10 @@
   std::vector<Diagnostic> Diagnostics;
 };
 
+/// Get the first fix to apply for this diagnostic.
+/// \returns nullptr if no fixes are attached to the diagnostic.
+const llvm::StringMap<Replacements> *selectFirstFix(const Diagnostic& D);
+
 } // end namespace tooling
 } // end namespace clang
 #endif // LLVM_CLANG_TOOLING_CORE_DIAGNOSTIC_H
diff --git a/linux-x64/clang/include/clang/Tooling/Core/Lookup.h b/linux-x64/clang/include/clang/Tooling/Core/Lookup.h
index a27e915..02b561c 100644
--- a/linux-x64/clang/include/clang/Tooling/Core/Lookup.h
+++ b/linux-x64/clang/include/clang/Tooling/Core/Lookup.h
@@ -14,6 +14,7 @@
 #define LLVM_CLANG_TOOLING_CORE_LOOKUP_H
 
 #include "clang/Basic/LLVM.h"
+#include "clang/Basic/SourceLocation.h"
 #include <string>
 
 namespace clang {
@@ -30,6 +31,7 @@
 /// This does not perform a full C++ lookup so ADL will not work.
 ///
 /// \param Use The nested name to be replaced.
+/// \param UseLoc The location of name to be replaced.
 /// \param UseContext The context in which the nested name is contained. This
 ///                   will be used to minimize namespace qualifications.
 /// \param FromDecl The declaration to which the nested name points.
@@ -37,6 +39,7 @@
 ///                          qualified including a leading "::".
 /// \returns The new name to be inserted in place of the current nested name.
 std::string replaceNestedName(const NestedNameSpecifier *Use,
+                              SourceLocation UseLoc,
                               const DeclContext *UseContext,
                               const NamedDecl *FromDecl,
                               StringRef ReplacementString);
diff --git a/linux-x64/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h b/linux-x64/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h
new file mode 100644
index 0000000..3ea261a
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h
@@ -0,0 +1,58 @@
+//===- DependencyScanningWorker.h - clang-scan-deps worker ===---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_DEPENDENCY_SCANNING_WORKER_H
+#define LLVM_CLANG_TOOLING_DEPENDENCY_SCANNING_WORKER_H
+
+#include "clang/Basic/DiagnosticOptions.h"
+#include "clang/Basic/LLVM.h"
+#include "clang/Frontend/PCHContainerOperations.h"
+#include "clang/Tooling/CompilationDatabase.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FileSystem.h"
+#include <string>
+
+namespace clang {
+namespace tooling {
+namespace dependencies {
+
+/// An individual dependency scanning worker that is able to run on its own
+/// thread.
+///
+/// The worker computes the dependencies for the input files by preprocessing
+/// sources either using a fast mode where the source files are minimized, or
+/// using the regular processing run.
+class DependencyScanningWorker {
+public:
+  DependencyScanningWorker();
+
+  /// Print out the dependency information into a string using the dependency
+  /// file format that is specified in the options (-MD is the default) and
+  /// return it.
+  ///
+  /// \returns A \c StringError with the diagnostic output if clang errors
+  /// occurred, dependency file contents otherwise.
+  llvm::Expected<std::string> getDependencyFile(const std::string &Input,
+                                                StringRef WorkingDirectory,
+                                                const CompilationDatabase &CDB);
+
+private:
+  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
+  std::shared_ptr<PCHContainerOperations> PCHContainerOps;
+
+  /// The file system that is used by each worker when scanning for
+  /// dependencies. This filesystem persists accross multiple compiler
+  /// invocations.
+  llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> WorkerFS;
+};
+
+} // end namespace dependencies
+} // end namespace tooling
+} // end namespace clang
+
+#endif // LLVM_CLANG_TOOLING_DEPENDENCY_SCANNING_WORKER_H
diff --git a/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h b/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h
index 1cd2a4e..366ee6f 100644
--- a/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h
+++ b/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h
@@ -31,6 +31,20 @@
     Io.mapRequired("Message", M.Message);
     Io.mapOptional("FilePath", M.FilePath);
     Io.mapOptional("FileOffset", M.FileOffset);
+    std::vector<clang::tooling::Replacement> Fixes;
+    for (auto &Replacements : M.Fix) {
+      for (auto &Replacement : Replacements.second)
+        Fixes.push_back(Replacement);
+    }
+    Io.mapRequired("Replacements", Fixes);
+    for (auto &Fix : Fixes) {
+      llvm::Error Err = M.Fix[Fix.getFilePath()].add(Fix);
+      if (Err) {
+        // FIXME: Implement better conflict handling.
+        llvm::errs() << "Fix conflicts with existing fix: "
+                     << llvm::toString(std::move(Err)) << "\n";
+      }
+    }
   }
 };
 
@@ -43,12 +57,11 @@
         : DiagLevel(clang::tooling::Diagnostic::Level::Warning) {}
 
     NormalizedDiagnostic(const IO &, const clang::tooling::Diagnostic &D)
-        : DiagnosticName(D.DiagnosticName), Message(D.Message), Fix(D.Fix),
-          Notes(D.Notes), DiagLevel(D.DiagLevel),
-          BuildDirectory(D.BuildDirectory) {}
+        : DiagnosticName(D.DiagnosticName), Message(D.Message), Notes(D.Notes),
+          DiagLevel(D.DiagLevel), BuildDirectory(D.BuildDirectory) {}
 
     clang::tooling::Diagnostic denormalize(const IO &) {
-      return clang::tooling::Diagnostic(DiagnosticName, Message, Fix, Notes,
+      return clang::tooling::Diagnostic(DiagnosticName, Message, Notes,
                                         DiagLevel, BuildDirectory);
     }
 
@@ -64,28 +77,10 @@
     MappingNormalization<NormalizedDiagnostic, clang::tooling::Diagnostic> Keys(
         Io, D);
     Io.mapRequired("DiagnosticName", Keys->DiagnosticName);
-    Io.mapRequired("Message", Keys->Message.Message);
-    Io.mapRequired("FileOffset", Keys->Message.FileOffset);
-    Io.mapRequired("FilePath", Keys->Message.FilePath);
+    Io.mapRequired("DiagnosticMessage", Keys->Message);
     Io.mapOptional("Notes", Keys->Notes);
 
     // FIXME: Export properly all the different fields.
-
-    std::vector<clang::tooling::Replacement> Fixes;
-    for (auto &Replacements : Keys->Fix) {
-      for (auto &Replacement : Replacements.second) {
-        Fixes.push_back(Replacement);
-      }
-    }
-    Io.mapRequired("Replacements", Fixes);
-    for (auto &Fix : Fixes) {
-      llvm::Error Err = Keys->Fix[Fix.getFilePath()].add(Fix);
-      if (Err) {
-        // FIXME: Implement better conflict handling.
-        llvm::errs() << "Fix conflicts with existing fix: "
-                     << llvm::toString(std::move(Err)) << "\n";
-      }
-    }
   }
 };
 
diff --git a/linux-x64/clang/include/clang/Tooling/FixIt.h b/linux-x64/clang/include/clang/Tooling/FixIt.h
index 8c76236..5fce71f 100644
--- a/linux-x64/clang/include/clang/Tooling/FixIt.h
+++ b/linux-x64/clang/include/clang/Tooling/FixIt.h
@@ -26,25 +26,26 @@
 namespace fixit {
 
 namespace internal {
-StringRef getText(SourceRange Range, const ASTContext &Context);
+StringRef getText(CharSourceRange Range, const ASTContext &Context);
 
-/// Returns the SourceRange of a SourceRange. This identity function is
-///        used by the following template abstractions.
-inline SourceRange getSourceRange(const SourceRange &Range) { return Range; }
-
-/// Returns the SourceRange of the token at Location \p Loc.
-inline SourceRange getSourceRange(const SourceLocation &Loc) {
-  return SourceRange(Loc);
+/// Returns the token CharSourceRange corresponding to \p Range.
+inline CharSourceRange getSourceRange(const SourceRange &Range) {
+  return CharSourceRange::getTokenRange(Range);
 }
 
-/// Returns the SourceRange of an given Node. \p Node is typically a
+/// Returns the CharSourceRange of the token at Location \p Loc.
+inline CharSourceRange getSourceRange(const SourceLocation &Loc) {
+  return CharSourceRange::getTokenRange(Loc, Loc);
+}
+
+/// Returns the CharSourceRange of an given Node. \p Node is typically a
 ///        'Stmt', 'Expr' or a 'Decl'.
-template <typename T> SourceRange getSourceRange(const T &Node) {
-  return Node.getSourceRange();
+template <typename T> CharSourceRange getSourceRange(const T &Node) {
+  return CharSourceRange::getTokenRange(Node.getSourceRange());
 }
 } // end namespace internal
 
-// Returns a textual representation of \p Node.
+/// Returns a textual representation of \p Node.
 template <typename T>
 StringRef getText(const T &Node, const ASTContext &Context) {
   return internal::getText(internal::getSourceRange(Node), Context);
diff --git a/linux-x64/clang/include/clang/Tooling/Inclusions/IncludeStyle.h b/linux-x64/clang/include/clang/Tooling/Inclusions/IncludeStyle.h
index 7191380..a0f236e 100644
--- a/linux-x64/clang/include/clang/Tooling/Inclusions/IncludeStyle.h
+++ b/linux-x64/clang/include/clang/Tooling/Inclusions/IncludeStyle.h
@@ -67,7 +67,7 @@
   /// used for ordering ``#includes``.
   ///
   /// `POSIX extended
-  /// <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
+  /// <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
   /// regular expressions are supported.
   ///
   /// These regular expressions are matched against the filename of an include
@@ -79,7 +79,7 @@
   /// If none of the regular expressions match, INT_MAX is assigned as
   /// category. The main header for a source file automatically gets category 0.
   /// so that it is generally kept at the beginning of the ``#includes``
-  /// (http://llvm.org/docs/CodingStandards.html#include-style). However, you
+  /// (https://llvm.org/docs/CodingStandards.html#include-style). However, you
   /// can also assign negative priorities if you have certain headers that
   /// always need to be first.
   ///
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/RangeSelector.h b/linux-x64/clang/include/clang/Tooling/Refactoring/RangeSelector.h
new file mode 100644
index 0000000..b117e4d
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/RangeSelector.h
@@ -0,0 +1,89 @@
+//===--- RangeSelector.h - Source-selection library ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+///  \file
+///  Defines a combinator library supporting the definition of _selectors_,
+///  which select source ranges based on (bound) AST nodes.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_REFACTOR_RANGE_SELECTOR_H_
+#define LLVM_CLANG_TOOLING_REFACTOR_RANGE_SELECTOR_H_
+
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Basic/SourceLocation.h"
+#include "llvm/Support/Error.h"
+#include <functional>
+#include <string>
+
+namespace clang {
+namespace tooling {
+using RangeSelector = std::function<Expected<CharSourceRange>(
+    const ast_matchers::MatchFinder::MatchResult &)>;
+
+inline RangeSelector charRange(CharSourceRange R) {
+  return [R](const ast_matchers::MatchFinder::MatchResult &)
+             -> Expected<CharSourceRange> { return R; };
+}
+
+/// Selects from the start of \p Begin and to the end of \p End.
+RangeSelector range(RangeSelector Begin, RangeSelector End);
+
+/// Convenience version of \c range where end-points are bound nodes.
+RangeSelector range(std::string BeginID, std::string EndID);
+
+/// Selects the (empty) range [B,B) when \p Selector selects the range [B,E).
+RangeSelector before(RangeSelector Selector);
+
+/// Selects the the point immediately following \p Selector. That is, the
+/// (empty) range [E,E), when \p Selector selects either
+/// * the CharRange [B,E) or
+/// * the TokenRange [B,E'] where the token at E' spans the range [E,E').
+RangeSelector after(RangeSelector Selector);
+
+/// Selects a node, including trailing semicolon (for non-expression
+/// statements). \p ID is the node's binding in the match result.
+RangeSelector node(std::string ID);
+
+/// Selects a node, including trailing semicolon (always). Useful for selecting
+/// expression statements. \p ID is the node's binding in the match result.
+RangeSelector statement(std::string ID);
+
+/// Given a \c MemberExpr, selects the member token. \p ID is the node's
+/// binding in the match result.
+RangeSelector member(std::string ID);
+
+/// Given a node with a "name", (like \c NamedDecl, \c DeclRefExpr or \c
+/// CxxCtorInitializer) selects the name's token.  Only selects the final
+/// identifier of a qualified name, but not any qualifiers or template
+/// arguments.  For example, for `::foo::bar::baz` and `::foo::bar::baz<int>`,
+/// it selects only `baz`.
+///
+/// \param ID is the node's binding in the match result.
+RangeSelector name(std::string ID);
+
+// Given a \c CallExpr (bound to \p ID), selects the arguments' source text (all
+// source between the call's parentheses).
+RangeSelector callArgs(std::string ID);
+
+// Given a \c CompoundStmt (bound to \p ID), selects the source of the
+// statements (all source between the braces).
+RangeSelector statements(std::string ID);
+
+// Given a \c InitListExpr (bound to \p ID), selects the range of the elements
+// (all source between the braces).
+RangeSelector initListElements(std::string ID);
+
+/// Selects the range from which `S` was expanded (possibly along with other
+/// source), if `S` is an expansion, and `S` itself, otherwise.  Corresponds to
+/// `SourceManager::getExpansionRange`.
+RangeSelector expansion(RangeSelector S);
+} // namespace tooling
+} // namespace clang
+
+#endif // LLVM_CLANG_TOOLING_REFACTOR_RANGE_SELECTOR_H_
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h
index 315ce99..b04bc3e 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h
@@ -54,6 +54,8 @@
 
   static const RefactoringDescriptor &describe();
 
+  const NamedDecl *getRenameDecl() const;
+
 private:
   RenameOccurrences(const NamedDecl *ND, std::string NewName)
       : ND(ND), NewName(std::move(NewName)) {}
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/SourceCode.h b/linux-x64/clang/include/clang/Tooling/Refactoring/SourceCode.h
new file mode 100644
index 0000000..498dbea
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/SourceCode.h
@@ -0,0 +1,77 @@
+//===--- SourceCode.h - Source code manipulation routines -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file provides functions that simplify extraction of source code.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_REFACTOR_SOURCE_CODE_H
+#define LLVM_CLANG_TOOLING_REFACTOR_SOURCE_CODE_H
+
+#include "clang/AST/ASTContext.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/TokenKinds.h"
+
+namespace clang {
+namespace tooling {
+
+/// Extends \p Range to include the token \p Next, if it immediately follows the
+/// end of the range. Otherwise, returns \p Range unchanged.
+CharSourceRange maybeExtendRange(CharSourceRange Range, tok::TokenKind Next,
+                                 ASTContext &Context);
+
+/// Returns the source range spanning the node, extended to include \p Next, if
+/// it immediately follows \p Node. Otherwise, returns the normal range of \p
+/// Node.  See comments on `getExtendedText()` for examples.
+template <typename T>
+CharSourceRange getExtendedRange(const T &Node, tok::TokenKind Next,
+                                 ASTContext &Context) {
+  return maybeExtendRange(CharSourceRange::getTokenRange(Node.getSourceRange()),
+                          Next, Context);
+}
+
+/// Returns the source-code text in the specified range.
+StringRef getText(CharSourceRange Range, const ASTContext &Context);
+
+/// Returns the source-code text corresponding to \p Node.
+template <typename T>
+StringRef getText(const T &Node, const ASTContext &Context) {
+  return getText(CharSourceRange::getTokenRange(Node.getSourceRange()),
+                 Context);
+}
+
+/// Returns the source text of the node, extended to include \p Next, if it
+/// immediately follows the node. Otherwise, returns the text of just \p Node.
+///
+/// For example, given statements S1 and S2 below:
+/// \code
+///   {
+///     // S1:
+///     if (!x) return foo();
+///     // S2:
+///     if (!x) { return 3; }
+///   }
+/// \endcode
+/// then
+/// \code
+///   getText(S1, Context) = "if (!x) return foo()"
+///   getExtendedText(S1, tok::TokenKind::semi, Context)
+///     = "if (!x) return foo();"
+///   getExtendedText(*S1.getThen(), tok::TokenKind::semi, Context)
+///     = "return foo();"
+///   getExtendedText(*S2.getThen(), tok::TokenKind::semi, Context)
+///     = getText(S2, Context) = "{ return 3; }"
+/// \endcode
+template <typename T>
+StringRef getExtendedText(const T &Node, tok::TokenKind Next,
+                          ASTContext &Context) {
+  return getText(getExtendedRange(Node, Next, Context), Context);
+}
+} // namespace tooling
+} // namespace clang
+#endif // LLVM_CLANG_TOOLING_REFACTOR_SOURCE_CODE_H
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Stencil.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Stencil.h
new file mode 100644
index 0000000..e57a576
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Stencil.h
@@ -0,0 +1,173 @@
+//===--- Stencil.h - Stencil class ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// /file
+/// This file defines the *Stencil* abstraction: a code-generating object,
+/// parameterized by named references to (bound) AST nodes.  Given a match
+/// result, a stencil can be evaluated to a string of source code.
+///
+/// A stencil is similar in spirit to a format string: it is composed of a
+/// series of raw text strings, references to nodes (the parameters) and helper
+/// code-generation operations.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_REFACTOR_STENCIL_H_
+#define LLVM_CLANG_TOOLING_REFACTOR_STENCIL_H_
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/ASTTypeTraits.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Tooling/Refactoring/RangeSelector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include <string>
+#include <vector>
+
+namespace clang {
+namespace tooling {
+
+/// A stencil is represented as a sequence of "parts" that can each individually
+/// generate a code string based on a match result.  The different kinds of
+/// parts include (raw) text, references to bound nodes and assorted operations
+/// on bound nodes.
+///
+/// Users can create custom Stencil operations by implementing this interface.
+class StencilPartInterface {
+public:
+  virtual ~StencilPartInterface() = default;
+
+  /// Evaluates this part to a string and appends it to \c Result.  \c Result is
+  /// undefined in the case of an error.
+  virtual llvm::Error eval(const ast_matchers::MatchFinder::MatchResult &Match,
+                           std::string *Result) const = 0;
+
+  virtual bool isEqual(const StencilPartInterface &other) const = 0;
+
+  const void *typeId() const { return TypeId; }
+
+protected:
+  StencilPartInterface(const void *DerivedId) : TypeId(DerivedId) {}
+
+  // Since this is an abstract class, copying/assigning only make sense for
+  // derived classes implementing `clone()`.
+  StencilPartInterface(const StencilPartInterface &) = default;
+  StencilPartInterface &operator=(const StencilPartInterface &) = default;
+
+  /// Unique identifier of the concrete type of this instance.  Supports safe
+  /// downcasting.
+  const void *TypeId;
+};
+
+/// A copyable facade for a std::unique_ptr<StencilPartInterface>. Copies result
+/// in a copy of the underlying pointee object.
+class StencilPart {
+public:
+  explicit StencilPart(std::shared_ptr<StencilPartInterface> Impl)
+      : Impl(std::move(Impl)) {}
+
+  /// See `StencilPartInterface::eval()`.
+  llvm::Error eval(const ast_matchers::MatchFinder::MatchResult &Match,
+                   std::string *Result) const {
+    return Impl->eval(Match, Result);
+  }
+
+  bool operator==(const StencilPart &Other) const {
+    if (Impl == Other.Impl)
+      return true;
+    if (Impl == nullptr || Other.Impl == nullptr)
+      return false;
+    return Impl->isEqual(*Other.Impl);
+  }
+
+private:
+  std::shared_ptr<StencilPartInterface> Impl;
+};
+
+/// A sequence of code fragments, references to parameters and code-generation
+/// operations that together can be evaluated to (a fragment of) source code,
+/// given a match result.
+class Stencil {
+public:
+  Stencil() = default;
+
+  /// Composes a stencil from a series of parts.
+  template <typename... Ts> static Stencil cat(Ts &&... Parts) {
+    Stencil S;
+    S.Parts = {wrap(std::forward<Ts>(Parts))...};
+    return S;
+  }
+
+  /// Appends data from a \p OtherStencil to this stencil.
+  void append(Stencil OtherStencil);
+
+  // Evaluates the stencil given a match result. Requires that the nodes in the
+  // result includes any ids referenced in the stencil. References to missing
+  // nodes will result in an invalid_argument error.
+  llvm::Expected<std::string>
+  eval(const ast_matchers::MatchFinder::MatchResult &Match) const;
+
+  // Allow Stencils to operate as std::function, for compatibility with
+  // Transformer's TextGenerator.
+  llvm::Expected<std::string>
+  operator()(const ast_matchers::MatchFinder::MatchResult &Result) const {
+    return eval(Result);
+  }
+
+private:
+  friend bool operator==(const Stencil &A, const Stencil &B);
+  static StencilPart wrap(llvm::StringRef Text);
+  static StencilPart wrap(RangeSelector Selector);
+  static StencilPart wrap(StencilPart Part) { return Part; }
+
+  std::vector<StencilPart> Parts;
+};
+
+inline bool operator==(const Stencil &A, const Stencil &B) {
+  return A.Parts == B.Parts;
+}
+
+inline bool operator!=(const Stencil &A, const Stencil &B) { return !(A == B); }
+
+// Functions for conveniently building stencils.
+namespace stencil {
+/// Convenience wrapper for Stencil::cat that can be imported with a using decl.
+template <typename... Ts> Stencil cat(Ts &&... Parts) {
+  return Stencil::cat(std::forward<Ts>(Parts)...);
+}
+
+/// \returns exactly the text provided.
+StencilPart text(llvm::StringRef Text);
+
+/// \returns the source corresponding to the selected range.
+StencilPart selection(RangeSelector Selector);
+
+/// \returns the source corresponding to the identified node.
+/// FIXME: Deprecated. Write `selection(node(Id))` instead.
+inline StencilPart node(llvm::StringRef Id) {
+  return selection(tooling::node(Id));
+}
+
+/// Variant of \c node() that identifies the node as a statement, for purposes
+/// of deciding whether to include any trailing semicolon.  Only relevant for
+/// Expr nodes, which, by default, are *not* considered as statements.
+/// \returns the source corresponding to the identified node, considered as a
+/// statement.
+/// FIXME: Deprecated. Write `selection(statement(Id))` instead.
+inline StencilPart sNode(llvm::StringRef Id) {
+  return selection(tooling::statement(Id));
+}
+
+/// For debug use only; semantics are not guaranteed.
+///
+/// \returns the string resulting from calling the node's print() method.
+StencilPart dPrint(llvm::StringRef Id);
+} // namespace stencil
+} // namespace tooling
+} // namespace clang
+#endif // LLVM_CLANG_TOOLING_REFACTOR_STENCIL_H_
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Transformer.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Transformer.h
new file mode 100644
index 0000000..6d9c5a3
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Transformer.h
@@ -0,0 +1,308 @@
+//===--- Transformer.h - Clang source-rewriting library ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+///  \file
+///  Defines a library supporting the concise specification of clang-based
+///  source-to-source transformations.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_REFACTOR_TRANSFORMER_H_
+#define LLVM_CLANG_TOOLING_REFACTOR_TRANSFORMER_H_
+
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/ASTMatchers/ASTMatchers.h"
+#include "clang/ASTMatchers/ASTMatchersInternal.h"
+#include "clang/Tooling/Refactoring/AtomicChange.h"
+#include "clang/Tooling/Refactoring/RangeSelector.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/Error.h"
+#include <deque>
+#include <functional>
+#include <string>
+#include <type_traits>
+#include <utility>
+
+namespace clang {
+namespace tooling {
+
+// Note that \p TextGenerator is allowed to fail, e.g. when trying to access a
+// matched node that was not bound.  Allowing this to fail simplifies error
+// handling for interactive tools like clang-query.
+using TextGenerator = std::function<Expected<std::string>(
+    const ast_matchers::MatchFinder::MatchResult &)>;
+
+/// Wraps a string as a TextGenerator.
+inline TextGenerator text(std::string M) {
+  return [M](const ast_matchers::MatchFinder::MatchResult &)
+             -> Expected<std::string> { return M; };
+}
+
+// Description of a source-code edit, expressed in terms of an AST node.
+// Includes: an ID for the (bound) node, a selector for source related to the
+// node, a replacement and, optionally, an explanation for the edit.
+//
+// * Target: the source code impacted by the rule. This identifies an AST node,
+//   or part thereof (\c Part), whose source range indicates the extent of the
+//   replacement applied by the replacement term.  By default, the extent is the
+//   node matched by the pattern term (\c NodePart::Node). Target's are typed
+//   (\c Kind), which guides the determination of the node extent.
+//
+// * Replacement: a function that produces a replacement string for the target,
+//   based on the match result.
+//
+// * Note: (optional) a note specifically for this edit, potentially referencing
+//   elements of the match.  This will be displayed to the user, where possible;
+//   for example, in clang-tidy diagnostics.  Use of notes should be rare --
+//   explanations of the entire rewrite should be set in the rule
+//   (`RewriteRule::Explanation`) instead.  Notes serve the rare cases wherein
+//   edit-specific diagnostics are required.
+//
+// `ASTEdit` should be built using the `change` convenience functions. For
+// example,
+// \code
+//   change(name(fun), text("Frodo"))
+// \endcode
+// Or, if we use Stencil for the TextGenerator:
+// \code
+//   using stencil::cat;
+//   change(statement(thenNode), cat("{", thenNode, "}"))
+//   change(callArgs(call), cat(x, ",", y))
+// \endcode
+// Or, if you are changing the node corresponding to the rule's matcher, you can
+// use the single-argument override of \c change:
+// \code
+//   change(cat("different_expr"))
+// \endcode
+struct ASTEdit {
+  RangeSelector TargetRange;
+  TextGenerator Replacement;
+  TextGenerator Note;
+};
+
+/// Format of the path in an include directive -- angle brackets or quotes.
+enum class IncludeFormat {
+  Quoted,
+  Angled,
+};
+
+/// Description of a source-code transformation.
+//
+// A *rewrite rule* describes a transformation of source code. A simple rule
+// contains each of the following components:
+//
+// * Matcher: the pattern term, expressed as clang matchers (with Transformer
+//   extensions).
+//
+// * Edits: a set of Edits to the source code, described with ASTEdits.
+//
+// * Explanation: explanation of the rewrite.  This will be displayed to the
+//   user, where possible; for example, in clang-tidy diagnostics.
+//
+// However, rules can also consist of (sub)rules, where the first that matches
+// is applied and the rest are ignored.  So, the above components are gathered
+// as a `Case` and a rule is a list of cases.
+//
+// Rule cases have an additional, implicit, component: the parameters. These are
+// portions of the pattern which are left unspecified, yet bound in the pattern
+// so that we can reference them in the edits.
+//
+// The \c Transformer class can be used to apply the rewrite rule and obtain the
+// corresponding replacements.
+struct RewriteRule {
+  struct Case {
+    ast_matchers::internal::DynTypedMatcher Matcher;
+    SmallVector<ASTEdit, 1> Edits;
+    TextGenerator Explanation;
+    // Include paths to add to the file affected by this case.  These are
+    // bundled with the `Case`, rather than the `RewriteRule`, because each case
+    // might have different associated changes to the includes.
+    std::vector<std::pair<std::string, IncludeFormat>> AddedIncludes;
+  };
+  // We expect RewriteRules will most commonly include only one case.
+  SmallVector<Case, 1> Cases;
+
+  // ID used as the default target of each match. The node described by the
+  // matcher is should always be bound to this id.
+  static constexpr llvm::StringLiteral RootID = "___root___";
+};
+
+/// Convenience function for constructing a simple \c RewriteRule.
+RewriteRule makeRule(ast_matchers::internal::DynTypedMatcher M,
+                     SmallVector<ASTEdit, 1> Edits,
+                     TextGenerator Explanation = nullptr);
+
+/// Convenience overload of \c makeRule for common case of only one edit.
+inline RewriteRule makeRule(ast_matchers::internal::DynTypedMatcher M,
+                            ASTEdit Edit,
+                            TextGenerator Explanation = nullptr) {
+  SmallVector<ASTEdit, 1> Edits;
+  Edits.emplace_back(std::move(Edit));
+  return makeRule(std::move(M), std::move(Edits), std::move(Explanation));
+}
+
+/// For every case in Rule, adds an include directive for the given header. The
+/// common use is assumed to be a rule with only one case. For example, to
+/// replace a function call and add headers corresponding to the new code, one
+/// could write:
+/// \code
+///   auto R = makeRule(callExpr(callee(functionDecl(hasName("foo")))),
+///            change(text("bar()")));
+///   AddInclude(R, "path/to/bar_header.h");
+///   AddInclude(R, "vector", IncludeFormat::Angled);
+/// \endcode
+void addInclude(RewriteRule &Rule, llvm::StringRef Header,
+                IncludeFormat Format = IncludeFormat::Quoted);
+
+/// Applies the first rule whose pattern matches; other rules are ignored.
+///
+/// N.B. All of the rules must use the same kind of matcher (that is, share a
+/// base class in the AST hierarchy).  However, this constraint is caused by an
+/// implementation detail and should be lifted in the future.
+//
+// `applyFirst` is like an `anyOf` matcher with an edit action attached to each
+// of its cases. Anywhere you'd use `anyOf(m1.bind("id1"), m2.bind("id2"))` and
+// then dispatch on those ids in your code for control flow, `applyFirst` lifts
+// that behavior to the rule level.  So, you can write `applyFirst({makeRule(m1,
+// action1), makeRule(m2, action2), ...});`
+//
+// For example, consider a type `T` with a deterministic serialization function,
+// `serialize()`.  For performance reasons, we would like to make it
+// non-deterministic.  Therefore, we want to drop the expectation that
+// `a.serialize() = b.serialize() iff a = b` (although we'll maintain
+// `deserialize(a.serialize()) = a`).
+//
+// We have three cases to consider (for some equality function, `eq`):
+// ```
+// eq(a.serialize(), b.serialize()) --> eq(a,b)
+// eq(a, b.serialize())             --> eq(deserialize(a), b)
+// eq(a.serialize(), b)             --> eq(a, deserialize(b))
+// ```
+//
+// `applyFirst` allows us to specify each independently:
+// ```
+// auto eq_fun = functionDecl(...);
+// auto method_call = cxxMemberCallExpr(...);
+//
+// auto two_calls = callExpr(callee(eq_fun), hasArgument(0, method_call),
+//                           hasArgument(1, method_call));
+// auto left_call =
+//     callExpr(callee(eq_fun), callExpr(hasArgument(0, method_call)));
+// auto right_call =
+//     callExpr(callee(eq_fun), callExpr(hasArgument(1, method_call)));
+//
+// RewriteRule R = applyFirst({makeRule(two_calls, two_calls_action),
+//                             makeRule(left_call, left_call_action),
+//                             makeRule(right_call, right_call_action)});
+// ```
+RewriteRule applyFirst(ArrayRef<RewriteRule> Rules);
+
+/// Replaces a portion of the source text with \p Replacement.
+ASTEdit change(RangeSelector Target, TextGenerator Replacement);
+
+/// Replaces the entirety of a RewriteRule's match with \p Replacement.  For
+/// example, to replace a function call, one could write:
+/// \code
+///   makeRule(callExpr(callee(functionDecl(hasName("foo")))),
+///            change(text("bar()")))
+/// \endcode
+inline ASTEdit change(TextGenerator Replacement) {
+  return change(node(RewriteRule::RootID), std::move(Replacement));
+}
+
+/// Inserts \p Replacement before \p S, leaving the source selected by \S
+/// unchanged.
+inline ASTEdit insertBefore(RangeSelector S, TextGenerator Replacement) {
+  return change(before(std::move(S)), std::move(Replacement));
+}
+
+/// Inserts \p Replacement after \p S, leaving the source selected by \S
+/// unchanged.
+inline ASTEdit insertAfter(RangeSelector S, TextGenerator Replacement) {
+  return change(after(std::move(S)), std::move(Replacement));
+}
+
+/// Removes the source selected by \p S.
+inline ASTEdit remove(RangeSelector S) {
+  return change(std::move(S), text(""));
+}
+
+/// The following three functions are a low-level part of the RewriteRule
+/// API. We expose them for use in implementing the fixtures that interpret
+/// RewriteRule, like Transformer and TransfomerTidy, or for more advanced
+/// users.
+//
+// FIXME: These functions are really public, if advanced, elements of the
+// RewriteRule API.  Recast them as such.  Or, just declare these functions
+// public and well-supported and move them out of `detail`.
+namespace detail {
+/// Builds a single matcher for the rule, covering all of the rule's cases.
+ast_matchers::internal::DynTypedMatcher buildMatcher(const RewriteRule &Rule);
+
+/// Returns the \c Case of \c Rule that was selected in the match result.
+/// Assumes a matcher built with \c buildMatcher.
+const RewriteRule::Case &
+findSelectedCase(const ast_matchers::MatchFinder::MatchResult &Result,
+                 const RewriteRule &Rule);
+
+/// A source "transformation," represented by a character range in the source to
+/// be replaced and a corresponding replacement string.
+struct Transformation {
+  CharSourceRange Range;
+  std::string Replacement;
+};
+
+/// Attempts to translate `Edits`, which are in terms of AST nodes bound in the
+/// match `Result`, into Transformations, which are in terms of the source code
+/// text.
+///
+/// Returns an empty vector if any of the edits apply to portions of the source
+/// that are ineligible for rewriting (certain interactions with macros, for
+/// example).  Fails if any invariants are violated relating to bound nodes in
+/// the match.  However, it does not fail in the case of conflicting edits --
+/// conflict handling is left to clients.  We recommend use of the \c
+/// AtomicChange or \c Replacements classes for assistance in detecting such
+/// conflicts.
+Expected<SmallVector<Transformation, 1>>
+translateEdits(const ast_matchers::MatchFinder::MatchResult &Result,
+               llvm::ArrayRef<ASTEdit> Edits);
+} // namespace detail
+
+/// Handles the matcher and callback registration for a single rewrite rule, as
+/// defined by the arguments of the constructor.
+class Transformer : public ast_matchers::MatchFinder::MatchCallback {
+public:
+  using ChangeConsumer =
+      std::function<void(Expected<clang::tooling::AtomicChange> Change)>;
+
+  /// \param Consumer Receives each rewrite or error.  Will not necessarily be
+  /// called for each match; for example, if the rewrite is not applicable
+  /// because of macros, but doesn't fail.  Note that clients are responsible
+  /// for handling the case that independent \c AtomicChanges conflict with each
+  /// other.
+  Transformer(RewriteRule Rule, ChangeConsumer Consumer)
+      : Rule(std::move(Rule)), Consumer(std::move(Consumer)) {}
+
+  /// N.B. Passes `this` pointer to `MatchFinder`.  So, this object should not
+  /// be moved after this call.
+  void registerMatchers(ast_matchers::MatchFinder *MatchFinder);
+
+  /// Not called directly by users -- called by the framework, via base class
+  /// pointer.
+  void run(const ast_matchers::MatchFinder::MatchResult &Result) override;
+
+private:
+  RewriteRule Rule;
+  /// Receives each successful rewrites as an \c AtomicChange.
+  ChangeConsumer Consumer;
+};
+} // namespace tooling
+} // namespace clang
+
+#endif // LLVM_CLANG_TOOLING_REFACTOR_TRANSFORMER_H_
diff --git a/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h b/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h
index 83e35d6..2e3e401 100644
--- a/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h
+++ b/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h
@@ -35,7 +35,13 @@
 
     NormalizedReplacement(const IO &, const clang::tooling::Replacement &R)
         : FilePath(R.getFilePath()), Offset(R.getOffset()),
-          Length(R.getLength()), ReplacementText(R.getReplacementText()) {}
+          Length(R.getLength()), ReplacementText(R.getReplacementText()) {
+      size_t lineBreakPos = ReplacementText.find('\n');
+      while (lineBreakPos != std::string::npos) {
+        ReplacementText.replace(lineBreakPos, 1, "\n\n");
+        lineBreakPos = ReplacementText.find('\n', lineBreakPos + 2);
+      }
+    }
 
     clang::tooling::Replacement denormalize(const IO &) {
       return clang::tooling::Replacement(FilePath, Offset, Length,
diff --git a/linux-x64/clang/include/clang/Tooling/Syntax/BuildTree.h b/linux-x64/clang/include/clang/Tooling/Syntax/BuildTree.h
new file mode 100644
index 0000000..055d646
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Syntax/BuildTree.h
@@ -0,0 +1,24 @@
+//===- BuildTree.h - build syntax trees -----------------------*- C++ -*-=====//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// Functions to construct a syntax tree from an AST.
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_TOOLING_SYNTAX_TREE_H
+#define LLVM_CLANG_TOOLING_SYNTAX_TREE_H
+
+#include "clang/AST/Decl.h"
+#include "clang/Tooling/Syntax/Nodes.h"
+
+namespace clang {
+namespace syntax {
+
+/// Build a syntax tree for the main file.
+syntax::TranslationUnit *buildSyntaxTree(Arena &A,
+                                         const clang::TranslationUnitDecl &TU);
+} // namespace syntax
+} // namespace clang
+#endif
diff --git a/linux-x64/clang/include/clang/Tooling/Syntax/Nodes.h b/linux-x64/clang/include/clang/Tooling/Syntax/Nodes.h
new file mode 100644
index 0000000..d20c7cb
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Syntax/Nodes.h
@@ -0,0 +1,92 @@
+//===- Nodes.h - syntax nodes for C/C++ grammar constructs ----*- C++ -*-=====//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// Syntax tree nodes for C, C++ and Objective-C grammar constructs.
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_TOOLING_SYNTAX_NODES_H
+#define LLVM_CLANG_TOOLING_SYNTAX_NODES_H
+
+#include "clang/Basic/TokenKinds.h"
+#include "clang/Lex/Token.h"
+#include "clang/Tooling/Syntax/Tokens.h"
+#include "clang/Tooling/Syntax/Tree.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace clang {
+namespace syntax {
+
+/// A kind of a syntax node, used for implementing casts.
+enum class NodeKind : uint16_t {
+  Leaf,
+  TranslationUnit,
+  TopLevelDeclaration,
+  CompoundStatement
+};
+/// For debugging purposes.
+llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, NodeKind K);
+
+/// A relation between a parent and child node. Used for implementing accessors.
+enum class NodeRole : uint8_t {
+  // A node without a parent.
+  Detached,
+  // Children of an unknown semantic nature, e.g. skipped tokens, comments.
+  Unknown,
+  // FIXME: should this be shared for all other nodes with braces, e.g. init
+  //        lists?
+  CompoundStatement_lbrace,
+  CompoundStatement_rbrace
+};
+
+/// A root node for a translation unit. Parent is always null.
+class TranslationUnit final : public Tree {
+public:
+  TranslationUnit() : Tree(NodeKind::TranslationUnit) {}
+  static bool classof(const Node *N) {
+    return N->kind() == NodeKind::TranslationUnit;
+  }
+};
+
+/// FIXME: this node is temporary and will be replaced with nodes for various
+///        'declarations' and 'declarators' from the C/C++ grammar
+///
+/// Represents any top-level declaration. Only there to give the syntax tree a
+/// bit of structure until we implement syntax nodes for declarations and
+/// declarators.
+class TopLevelDeclaration final : public Tree {
+public:
+  TopLevelDeclaration() : Tree(NodeKind::TopLevelDeclaration) {}
+  static bool classof(const Node *N) {
+    return N->kind() == NodeKind::TopLevelDeclaration;
+  }
+};
+
+/// An abstract node for C++ statements, e.g. 'while', 'if', etc.
+class Statement : public Tree {
+public:
+  Statement(NodeKind K) : Tree(K) {}
+  static bool classof(const Node *N) {
+    return NodeKind::CompoundStatement <= N->kind() &&
+           N->kind() <= NodeKind::CompoundStatement;
+  }
+};
+
+/// { statement1; statement2; … }
+class CompoundStatement final : public Statement {
+public:
+  CompoundStatement() : Statement(NodeKind::CompoundStatement) {}
+  static bool classof(const Node *N) {
+    return N->kind() == NodeKind::CompoundStatement;
+  }
+  syntax::Leaf *lbrace();
+  syntax::Leaf *rbrace();
+};
+
+} // namespace syntax
+} // namespace clang
+#endif
diff --git a/linux-x64/clang/include/clang/Tooling/Syntax/Tokens.h b/linux-x64/clang/include/clang/Tooling/Syntax/Tokens.h
new file mode 100644
index 0000000..4640ccb
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Syntax/Tokens.h
@@ -0,0 +1,355 @@
+//===- Tokens.h - collect tokens from preprocessing --------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// Record tokens that a preprocessor emits and define operations to map between
+// the tokens written in a file and tokens produced by the preprocessor.
+//
+// When running the compiler, there are two token streams we are interested in:
+//   - "spelled" tokens directly correspond to a substring written in some
+//     source file.
+//   - "expanded" tokens represent the result of preprocessing, parses consumes
+//     this token stream to produce the AST.
+//
+// Expanded tokens correspond directly to locations found in the AST, allowing
+// to find subranges of the token stream covered by various AST nodes. Spelled
+// tokens correspond directly to the source code written by the user.
+//
+// To allow composing these two use-cases, we also define operations that map
+// between expanded and spelled tokens that produced them (macro calls,
+// directives, etc).
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_SYNTAX_TOKENS_H
+#define LLVM_CLANG_TOOLING_SYNTAX_TOKENS_H
+
+#include "clang/Basic/FileManager.h"
+#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+#include "clang/Basic/TokenKinds.h"
+#include "clang/Lex/Token.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cstdint>
+#include <tuple>
+
+namespace clang {
+class Preprocessor;
+
+namespace syntax {
+
+/// A half-open character range inside a particular file, the start offset is
+/// included and the end offset is excluded from the range.
+struct FileRange {
+  /// EXPECTS: File.isValid() && Begin <= End.
+  FileRange(FileID File, unsigned BeginOffset, unsigned EndOffset);
+  /// EXPECTS: BeginLoc.isValid() && BeginLoc.isFileID().
+  FileRange(const SourceManager &SM, SourceLocation BeginLoc, unsigned Length);
+  /// EXPECTS: BeginLoc.isValid() && BeginLoc.isFileID(), Begin <= End and files
+  ///          are the same.
+  FileRange(const SourceManager &SM, SourceLocation BeginLoc,
+            SourceLocation EndLoc);
+
+  FileID file() const { return File; }
+  /// Start is a start offset (inclusive) in the corresponding file.
+  unsigned beginOffset() const { return Begin; }
+  /// End offset (exclusive) in the corresponding file.
+  unsigned endOffset() const { return End; }
+
+  unsigned length() const { return End - Begin; }
+
+  /// Check if \p Offset is inside the range.
+  bool contains(unsigned Offset) const {
+    return Begin <= Offset && Offset < End;
+  }
+  /// Check \p Offset is inside the range or equal to its endpoint.
+  bool touches(unsigned Offset) const {
+    return Begin <= Offset && Offset <= End;
+  }
+
+  /// Gets the substring that this FileRange refers to.
+  llvm::StringRef text(const SourceManager &SM) const;
+
+  friend bool operator==(const FileRange &L, const FileRange &R) {
+    return std::tie(L.File, L.Begin, L.End) == std::tie(R.File, R.Begin, R.End);
+  }
+  friend bool operator!=(const FileRange &L, const FileRange &R) {
+    return !(L == R);
+  }
+
+private:
+  FileID File;
+  unsigned Begin;
+  unsigned End;
+};
+
+/// For debugging purposes.
+llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const FileRange &R);
+
+/// A token coming directly from a file or from a macro invocation. Has just
+/// enough information to locate the token in the source code.
+/// Can represent both expanded and spelled tokens.
+class Token {
+public:
+  Token(SourceLocation Location, unsigned Length, tok::TokenKind Kind);
+  /// EXPECTS: clang::Token is not an annotation token.
+  explicit Token(const clang::Token &T);
+
+  tok::TokenKind kind() const { return Kind; }
+  /// Location of the first character of a token.
+  SourceLocation location() const { return Location; }
+  /// Location right after the last character of a token.
+  SourceLocation endLocation() const {
+    return Location.getLocWithOffset(Length);
+  }
+  unsigned length() const { return Length; }
+
+  /// Get the substring covered by the token. Note that will include all
+  /// digraphs, newline continuations, etc. E.g. tokens for 'int' and
+  ///    in\
+  ///    t
+  /// both have the same kind tok::kw_int, but results of text() are different.
+  llvm::StringRef text(const SourceManager &SM) const;
+
+  /// Gets a range of this token.
+  /// EXPECTS: token comes from a file, not from a macro expansion.
+  FileRange range(const SourceManager &SM) const;
+
+  /// Given two tokens inside the same file, returns a file range that starts at
+  /// \p First and ends at \p Last.
+  /// EXPECTS: First and Last are file tokens from the same file, Last starts
+  ///          after First.
+  static FileRange range(const SourceManager &SM, const syntax::Token &First,
+                         const syntax::Token &Last);
+
+  std::string dumpForTests(const SourceManager &SM) const;
+  /// For debugging purposes.
+  std::string str() const;
+
+private:
+  SourceLocation Location;
+  unsigned Length;
+  tok::TokenKind Kind;
+};
+/// For debugging purposes. Equivalent to a call to Token::str().
+llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Token &T);
+
+/// A list of tokens obtained by preprocessing a text buffer and operations to
+/// map between the expanded and spelled tokens, i.e. TokenBuffer has
+/// information about two token streams:
+///    1. Expanded tokens: tokens produced by the preprocessor after all macro
+///       replacements,
+///    2. Spelled tokens: corresponding directly to the source code of a file
+///       before any macro replacements occurred.
+/// Here's an example to illustrate a difference between those two:
+///     #define FOO 10
+///     int a = FOO;
+///
+/// Spelled tokens are {'#','define','FOO','10','int','a','=','FOO',';'}.
+/// Expanded tokens are {'int','a','=','10',';','eof'}.
+///
+/// Note that the expanded token stream has a tok::eof token at the end, the
+/// spelled tokens never store a 'eof' token.
+///
+/// The full list expanded tokens can be obtained with expandedTokens(). Spelled
+/// tokens for each of the files can be obtained via spelledTokens(FileID).
+///
+/// To map between the expanded and spelled tokens use findSpelledByExpanded().
+///
+/// To build a token buffer use the TokenCollector class. You can also compute
+/// the spelled tokens of a file using the tokenize() helper.
+///
+/// FIXME: allow to map from spelled to expanded tokens when use-case shows up.
+/// FIXME: allow mappings into macro arguments.
+class TokenBuffer {
+public:
+  TokenBuffer(const SourceManager &SourceMgr) : SourceMgr(&SourceMgr) {}
+  /// All tokens produced by the preprocessor after all macro replacements,
+  /// directives, etc. Source locations found in the clang AST will always
+  /// point to one of these tokens.
+  /// FIXME: figure out how to handle token splitting, e.g. '>>' can be split
+  ///        into two '>' tokens by the parser. However, TokenBuffer currently
+  ///        keeps it as a single '>>' token.
+  llvm::ArrayRef<syntax::Token> expandedTokens() const {
+    return ExpandedTokens;
+  }
+
+  /// Find the subrange of spelled tokens that produced the corresponding \p
+  /// Expanded tokens.
+  ///
+  /// EXPECTS: \p Expanded is a subrange of expandedTokens().
+  ///
+  /// Will fail if the expanded tokens do not correspond to a
+  /// sequence of spelled tokens. E.g. for the following example:
+  ///
+  ///   #define FIRST f1 f2 f3
+  ///   #define SECOND s1 s2 s3
+  ///
+  ///   a FIRST b SECOND c // expanded tokens are: a f1 f2 f3 b s1 s2 s3 c
+  ///
+  /// the results would be:
+  ///   expanded   => spelled
+  ///   ------------------------
+  ///            a => a
+  ///     s1 s2 s3 => SECOND
+  ///   a f1 f2 f3 => a FIRST
+  ///         a f1 => can't map
+  ///        s1 s2 => can't map
+  ///
+  /// If \p Expanded is empty, the returned value is llvm::None.
+  /// Complexity is logarithmic.
+  llvm::Optional<llvm::ArrayRef<syntax::Token>>
+  spelledForExpanded(llvm::ArrayRef<syntax::Token> Expanded) const;
+
+  /// An expansion produced by the preprocessor, includes macro expansions and
+  /// preprocessor directives. Preprocessor always maps a non-empty range of
+  /// spelled tokens to a (possibly empty) range of expanded tokens. Here is a
+  /// few examples of expansions:
+  ///    #pragma once      // Expands to an empty range.
+  ///    #define FOO 1 2 3 // Expands an empty range.
+  ///    FOO               // Expands to "1 2 3".
+  /// FIXME(ibiryukov): implement this, currently #include expansions are empty.
+  ///    #include <vector> // Expands to tokens produced by the include.
+  struct Expansion {
+    llvm::ArrayRef<syntax::Token> Spelled;
+    llvm::ArrayRef<syntax::Token> Expanded;
+  };
+  /// If \p Spelled starts a mapping (e.g. if it's a macro name or '#' starting
+  /// a preprocessor directive) return the subrange of expanded tokens that the
+  /// macro expands to.
+  llvm::Optional<Expansion>
+  expansionStartingAt(const syntax::Token *Spelled) const;
+
+  /// Lexed tokens of a file before preprocessing. E.g. for the following input
+  ///     #define DECL(name) int name = 10
+  ///     DECL(a);
+  /// spelledTokens() returns {"#", "define", "DECL", "(", "name", ")", "eof"}.
+  /// FIXME: we do not yet store tokens of directives, like #include, #define,
+  ///        #pragma, etc.
+  llvm::ArrayRef<syntax::Token> spelledTokens(FileID FID) const;
+
+  const SourceManager &sourceManager() const { return *SourceMgr; }
+
+  std::string dumpForTests() const;
+
+private:
+  /// Describes a mapping between a continuous subrange of spelled tokens and
+  /// expanded tokens. Represents macro expansions, preprocessor directives,
+  /// conditionally disabled pp regions, etc.
+  ///   #define FOO 1+2
+  ///   #define BAR(a) a + 1
+  ///   FOO    // invocation #1, tokens = {'1','+','2'}, macroTokens = {'FOO'}.
+  ///   BAR(1) // invocation #2, tokens = {'a', '+', '1'},
+  ///                            macroTokens = {'BAR', '(', '1', ')'}.
+  struct Mapping {
+    // Positions in the corresponding spelled token stream. The corresponding
+    // range is never empty.
+    unsigned BeginSpelled = 0;
+    unsigned EndSpelled = 0;
+    // Positions in the expanded token stream. The corresponding range can be
+    // empty.
+    unsigned BeginExpanded = 0;
+    unsigned EndExpanded = 0;
+
+    /// For debugging purposes.
+    std::string str() const;
+  };
+  /// Spelled tokens of the file with information about the subranges.
+  struct MarkedFile {
+    /// Lexed, but not preprocessed, tokens of the file. These map directly to
+    /// text in the corresponding files and include tokens of all preprocessor
+    /// directives.
+    /// FIXME: spelled tokens don't change across FileID that map to the same
+    ///        FileEntry. We could consider deduplicating them to save memory.
+    std::vector<syntax::Token> SpelledTokens;
+    /// A sorted list to convert between the spelled and expanded token streams.
+    std::vector<Mapping> Mappings;
+    /// The first expanded token produced for this FileID.
+    unsigned BeginExpanded = 0;
+    unsigned EndExpanded = 0;
+  };
+
+  friend class TokenCollector;
+
+  /// Maps a single expanded token to its spelled counterpart or a mapping that
+  /// produced it.
+  std::pair<const syntax::Token *, const Mapping *>
+  spelledForExpandedToken(const syntax::Token *Expanded) const;
+
+  /// Token stream produced after preprocessing, conceputally this captures the
+  /// same stream as 'clang -E' (excluding the preprocessor directives like
+  /// #file, etc.).
+  std::vector<syntax::Token> ExpandedTokens;
+  llvm::DenseMap<FileID, MarkedFile> Files;
+  // The value is never null, pointer instead of reference to avoid disabling
+  // implicit assignment operator.
+  const SourceManager *SourceMgr;
+};
+
+/// Lex the text buffer, corresponding to \p FID, in raw mode and record the
+/// resulting spelled tokens. Does minimal post-processing on raw identifiers,
+/// setting the appropriate token kind (instead of the raw_identifier reported
+/// by lexer in raw mode). This is a very low-level function, most users should
+/// prefer to use TokenCollector. Lexing in raw mode produces wildly different
+/// results from what one might expect when running a C++ frontend, e.g.
+/// preprocessor does not run at all.
+/// The result will *not* have a 'eof' token at the end.
+std::vector<syntax::Token> tokenize(FileID FID, const SourceManager &SM,
+                                    const LangOptions &LO);
+
+/// Collects tokens for the main file while running the frontend action. An
+/// instance of this object should be created on
+/// FrontendAction::BeginSourceFile() and the results should be consumed after
+/// FrontendAction::Execute() finishes.
+class TokenCollector {
+public:
+  /// Adds the hooks to collect the tokens. Should be called before the
+  /// preprocessing starts, i.e. as a part of BeginSourceFile() or
+  /// CreateASTConsumer().
+  TokenCollector(Preprocessor &P);
+
+  /// Finalizes token collection. Should be called after preprocessing is
+  /// finished, i.e. after running Execute().
+  LLVM_NODISCARD TokenBuffer consume() &&;
+
+private:
+  /// Maps from a start to an end spelling location of transformations
+  /// performed by the preprocessor. These include:
+  ///   1. range from '#' to the last token in the line for PP directives,
+  ///   2. macro name and arguments for macro expansions.
+  /// Note that we record only top-level macro expansions, intermediate
+  /// expansions (e.g. inside macro arguments) are ignored.
+  ///
+  /// Used to find correct boundaries of macro calls and directives when
+  /// building mappings from spelled to expanded tokens.
+  ///
+  /// Logically, at each point of the preprocessor execution there is a stack of
+  /// macro expansions being processed and we could use it to recover the
+  /// location information we need. However, the public preprocessor API only
+  /// exposes the points when macro expansions start (when we push a macro onto
+  /// the stack) and not when they end (when we pop a macro from the stack).
+  /// To workaround this limitation, we rely on source location information
+  /// stored in this map.
+  using PPExpansions = llvm::DenseMap</*SourceLocation*/ int, SourceLocation>;
+  class Builder;
+  class CollectPPExpansions;
+
+  std::vector<syntax::Token> Expanded;
+  // FIXME: we only store macro expansions, also add directives(#pragma, etc.)
+  PPExpansions Expansions;
+  Preprocessor &PP;
+  CollectPPExpansions *Collector;
+};
+
+} // namespace syntax
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/Tooling/Syntax/Tree.h b/linux-x64/clang/include/clang/Tooling/Syntax/Tree.h
new file mode 100644
index 0000000..b667775
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Syntax/Tree.h
@@ -0,0 +1,142 @@
+//===- Tree.h - structure of the syntax tree ------------------*- C++ -*-=====//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// Defines the basic structure of the syntax tree. There are two kinds of nodes:
+//   - leaf nodes correspond to a token in the expanded token stream,
+//   - tree nodes correspond to language grammar constructs.
+//
+// The tree is initially built from an AST. Each node of a newly built tree
+// covers a continous subrange of expanded tokens (i.e. tokens after
+// preprocessing), the specific tokens coverered are stored in the leaf nodes of
+// a tree. A post-order traversal of a tree will visit leaf nodes in an order
+// corresponding the original order of expanded tokens.
+//
+// This is still work in progress and highly experimental, we leave room for
+// ourselves to completely change the design and/or implementation.
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_TOOLING_SYNTAX_TREE_CASCADE_H
+#define LLVM_CLANG_TOOLING_SYNTAX_TREE_CASCADE_H
+
+#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+#include "clang/Basic/TokenKinds.h"
+#include "clang/Tooling/Syntax/Tokens.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/Support/Allocator.h"
+#include <cstdint>
+
+namespace clang {
+namespace syntax {
+
+/// A memory arena for syntax trees. Also tracks the underlying token buffers,
+/// source manager, etc.
+class Arena {
+public:
+  Arena(SourceManager &SourceMgr, const LangOptions &LangOpts,
+        TokenBuffer Tokens);
+
+  const SourceManager &sourceManager() const { return SourceMgr; }
+  const LangOptions &langOptions() const { return LangOpts; }
+
+  const TokenBuffer &tokenBuffer() const;
+  llvm::BumpPtrAllocator &allocator() { return Allocator; }
+
+  /// Add \p Buffer to the underlying source manager, tokenize it and store the
+  /// resulting tokens. Useful when there is a need to materialize tokens that
+  /// were not written in user code.
+  std::pair<FileID, llvm::ArrayRef<syntax::Token>>
+  lexBuffer(std::unique_ptr<llvm::MemoryBuffer> Buffer);
+
+private:
+  SourceManager &SourceMgr;
+  const LangOptions &LangOpts;
+  TokenBuffer Tokens;
+  /// IDs and storage for additional tokenized files.
+  llvm::DenseMap<FileID, std::vector<syntax::Token>> ExtraTokens;
+  /// Keeps all the allocated nodes and their intermediate data structures.
+  llvm::BumpPtrAllocator Allocator;
+};
+
+class Tree;
+class TreeBuilder;
+enum class NodeKind : uint16_t;
+enum class NodeRole : uint8_t;
+
+/// A node in a syntax tree. Each node is either a Leaf (representing tokens) or
+/// a Tree (representing language constructrs).
+class Node {
+public:
+  /// Newly created nodes are detached from a tree, parent and sibling links are
+  /// set when the node is added as a child to another one.
+  Node(NodeKind Kind);
+
+  NodeKind kind() const { return static_cast<NodeKind>(Kind); }
+  NodeRole role() const { return static_cast<NodeRole>(Role); }
+
+  const Tree *parent() const { return Parent; }
+  Tree *parent() { return Parent; }
+
+  const Node *nextSibling() const { return NextSibling; }
+  Node *nextSibling() { return NextSibling; }
+
+  /// Dumps the structure of a subtree. For debugging and testing purposes.
+  std::string dump(const Arena &A) const;
+  /// Dumps the tokens forming this subtree.
+  std::string dumpTokens(const Arena &A) const;
+
+private:
+  // Tree is allowed to change the Parent link and Role.
+  friend class Tree;
+
+  Tree *Parent;
+  Node *NextSibling;
+  unsigned Kind : 16;
+  unsigned Role : 8;
+};
+
+/// A leaf node points to a single token inside the expanded token stream.
+class Leaf final : public Node {
+public:
+  Leaf(const syntax::Token *T);
+  static bool classof(const Node *N);
+
+  const syntax::Token *token() const { return Tok; }
+
+private:
+  const syntax::Token *Tok;
+};
+
+/// A node that has children and represents a syntactic language construct.
+class Tree : public Node {
+public:
+  using Node::Node;
+  static bool classof(const Node *N);
+
+  Node *firstChild() { return FirstChild; }
+  const Node *firstChild() const { return FirstChild; }
+
+protected:
+  /// Find the first node with a corresponding role.
+  syntax::Node *findChild(NodeRole R);
+
+private:
+  /// Prepend \p Child to the list of children and and sets the parent pointer.
+  /// A very low-level operation that does not check any invariants, only used
+  /// by TreeBuilder.
+  /// EXPECTS: Role != NodeRoleDetached.
+  void prependChildLowLevel(Node *Child, NodeRole Role);
+  friend class TreeBuilder;
+
+  Node *FirstChild = nullptr;
+};
+
+} // namespace syntax
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/Tooling/Tooling.h b/linux-x64/clang/include/clang/Tooling/Tooling.h
index f76484a..83fe43a 100644
--- a/linux-x64/clang/include/clang/Tooling/Tooling.h
+++ b/linux-x64/clang/include/clang/Tooling/Tooling.h
@@ -360,6 +360,10 @@
   /// turn this off when running on multiple threads to avoid the raciness.
   void setRestoreWorkingDir(bool RestoreCWD);
 
+  /// Sets whether an error message should be printed out if an action fails. By
+  /// default, if an action fails, a message is printed out to stderr.
+  void setPrintErrorMessage(bool PrintErrorMessage);
+
   /// Returns the file manager used in the tool.
   ///
   /// The file manager is shared between all translation units.
@@ -386,6 +390,7 @@
   DiagnosticConsumer *DiagConsumer = nullptr;
 
   bool RestoreCWD = true;
+  bool PrintErrorMessage = true;
 };
 
 template <typename T>
diff --git a/linux-x64/clang/include/lld/Common/Args.h b/linux-x64/clang/include/lld/Common/Args.h
index d943646..b3c8686 100644
--- a/linux-x64/clang/include/lld/Common/Args.h
+++ b/linux-x64/clang/include/lld/Common/Args.h
@@ -23,18 +23,19 @@
 namespace lld {
 namespace args {
 
-llvm::CodeGenOpt::Level getCGOptLevel(int OptLevelLTO);
+llvm::CodeGenOpt::Level getCGOptLevel(int optLevelLTO);
 
-int getInteger(llvm::opt::InputArgList &Args, unsigned Key, int Default);
+int64_t getInteger(llvm::opt::InputArgList &args, unsigned key,
+                   int64_t Default);
 
-std::vector<StringRef> getStrings(llvm::opt::InputArgList &Args, int Id);
+std::vector<StringRef> getStrings(llvm::opt::InputArgList &args, int id);
 
-uint64_t getZOptionValue(llvm::opt::InputArgList &Args, int Id, StringRef Key,
+uint64_t getZOptionValue(llvm::opt::InputArgList &args, int id, StringRef key,
                          uint64_t Default);
 
-std::vector<StringRef> getLines(MemoryBufferRef MB);
+std::vector<StringRef> getLines(MemoryBufferRef mb);
 
-StringRef getFilenameWithoutExe(StringRef Path);
+StringRef getFilenameWithoutExe(StringRef path);
 
 } // namespace args
 } // namespace lld
diff --git a/linux-x64/clang/include/lld/Common/Driver.h b/linux-x64/clang/include/lld/Common/Driver.h
index 745ef72..e559595 100644
--- a/linux-x64/clang/include/lld/Common/Driver.h
+++ b/linux-x64/clang/include/lld/Common/Driver.h
@@ -14,28 +14,28 @@
 
 namespace lld {
 namespace coff {
-bool link(llvm::ArrayRef<const char *> Args, bool CanExitEarly,
-          llvm::raw_ostream &Diag = llvm::errs());
+bool link(llvm::ArrayRef<const char *> args, bool canExitEarly,
+          llvm::raw_ostream &diag = llvm::errs());
 }
 
 namespace mingw {
-bool link(llvm::ArrayRef<const char *> Args,
-          llvm::raw_ostream &Diag = llvm::errs());
+bool link(llvm::ArrayRef<const char *> args,
+          llvm::raw_ostream &diag = llvm::errs());
 }
 
 namespace elf {
-bool link(llvm::ArrayRef<const char *> Args, bool CanExitEarly,
-          llvm::raw_ostream &Diag = llvm::errs());
+bool link(llvm::ArrayRef<const char *> args, bool canExitEarly,
+          llvm::raw_ostream &diag = llvm::errs());
 }
 
 namespace mach_o {
-bool link(llvm::ArrayRef<const char *> Args, bool CanExitEarly,
-          llvm::raw_ostream &Diag = llvm::errs());
+bool link(llvm::ArrayRef<const char *> args, bool canExitEarly,
+          llvm::raw_ostream &diag = llvm::errs());
 }
 
 namespace wasm {
-bool link(llvm::ArrayRef<const char *> Args, bool CanExitEarly,
-          llvm::raw_ostream &Diag = llvm::errs());
+bool link(llvm::ArrayRef<const char *> args, bool canExitEarly,
+          llvm::raw_ostream &diag = llvm::errs());
 }
 }
 
diff --git a/linux-x64/clang/include/lld/Common/ErrorHandler.h b/linux-x64/clang/include/lld/Common/ErrorHandler.h
index bd9c257..3467fdc 100644
--- a/linux-x64/clang/include/lld/Common/ErrorHandler.h
+++ b/linux-x64/clang/include/lld/Common/ErrorHandler.h
@@ -82,74 +82,74 @@
 
 class ErrorHandler {
 public:
-  uint64_t ErrorCount = 0;
-  uint64_t ErrorLimit = 20;
-  StringRef ErrorLimitExceededMsg = "too many errors emitted, stopping now";
-  StringRef LogName = "lld";
-  llvm::raw_ostream *ErrorOS = &llvm::errs();
-  bool ColorDiagnostics = llvm::errs().has_colors();
-  bool ExitEarly = true;
-  bool FatalWarnings = false;
-  bool Verbose = false;
+  uint64_t errorCount = 0;
+  uint64_t errorLimit = 20;
+  StringRef errorLimitExceededMsg = "too many errors emitted, stopping now";
+  StringRef logName = "lld";
+  llvm::raw_ostream *errorOS = &llvm::errs();
+  bool colorDiagnostics = llvm::errs().has_colors();
+  bool exitEarly = true;
+  bool fatalWarnings = false;
+  bool verbose = false;
 
-  void error(const Twine &Msg);
-  LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg);
-  void log(const Twine &Msg);
-  void message(const Twine &Msg);
-  void warn(const Twine &Msg);
+  void error(const Twine &msg);
+  LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &msg);
+  void log(const Twine &msg);
+  void message(const Twine &msg);
+  void warn(const Twine &msg);
 
-  std::unique_ptr<llvm::FileOutputBuffer> OutputBuffer;
+  std::unique_ptr<llvm::FileOutputBuffer> outputBuffer;
 
 private:
-  void print(StringRef S, raw_ostream::Colors C);
+  void print(StringRef s, raw_ostream::Colors c);
 };
 
 /// Returns the default error handler.
 ErrorHandler &errorHandler();
 
-inline void error(const Twine &Msg) { errorHandler().error(Msg); }
-inline LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg) {
-  errorHandler().fatal(Msg);
+inline void error(const Twine &msg) { errorHandler().error(msg); }
+inline LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &msg) {
+  errorHandler().fatal(msg);
 }
-inline void log(const Twine &Msg) { errorHandler().log(Msg); }
-inline void message(const Twine &Msg) { errorHandler().message(Msg); }
-inline void warn(const Twine &Msg) { errorHandler().warn(Msg); }
-inline uint64_t errorCount() { return errorHandler().ErrorCount; }
+inline void log(const Twine &msg) { errorHandler().log(msg); }
+inline void message(const Twine &msg) { errorHandler().message(msg); }
+inline void warn(const Twine &msg) { errorHandler().warn(msg); }
+inline uint64_t errorCount() { return errorHandler().errorCount; }
 
-LLVM_ATTRIBUTE_NORETURN void exitLld(int Val);
+LLVM_ATTRIBUTE_NORETURN void exitLld(int val);
 
-void diagnosticHandler(const llvm::DiagnosticInfo &DI);
-void checkError(Error E);
+void diagnosticHandler(const llvm::DiagnosticInfo &di);
+void checkError(Error e);
 
 // check functions are convenient functions to strip errors
 // from error-or-value objects.
-template <class T> T check(ErrorOr<T> E) {
-  if (auto EC = E.getError())
-    fatal(EC.message());
-  return std::move(*E);
+template <class T> T check(ErrorOr<T> e) {
+  if (auto ec = e.getError())
+    fatal(ec.message());
+  return std::move(*e);
 }
 
-template <class T> T check(Expected<T> E) {
-  if (!E)
-    fatal(llvm::toString(E.takeError()));
-  return std::move(*E);
+template <class T> T check(Expected<T> e) {
+  if (!e)
+    fatal(llvm::toString(e.takeError()));
+  return std::move(*e);
 }
 
 template <class T>
-T check2(ErrorOr<T> E, llvm::function_ref<std::string()> Prefix) {
-  if (auto EC = E.getError())
-    fatal(Prefix() + ": " + EC.message());
-  return std::move(*E);
+T check2(ErrorOr<T> e, llvm::function_ref<std::string()> prefix) {
+  if (auto ec = e.getError())
+    fatal(prefix() + ": " + ec.message());
+  return std::move(*e);
 }
 
 template <class T>
-T check2(Expected<T> E, llvm::function_ref<std::string()> Prefix) {
-  if (!E)
-    fatal(Prefix() + ": " + toString(E.takeError()));
-  return std::move(*E);
+T check2(Expected<T> e, llvm::function_ref<std::string()> prefix) {
+  if (!e)
+    fatal(prefix() + ": " + toString(e.takeError()));
+  return std::move(*e);
 }
 
-inline std::string toString(const Twine &S) { return S.str(); }
+inline std::string toString(const Twine &s) { return s.str(); }
 
 // To evaluate the second argument lazily, we use C macro.
 #define CHECK(E, S) check2((E), [&] { return toString(S); })
diff --git a/linux-x64/clang/include/lld/Common/Filesystem.h b/linux-x64/clang/include/lld/Common/Filesystem.h
new file mode 100644
index 0000000..63a0f55
--- /dev/null
+++ b/linux-x64/clang/include/lld/Common/Filesystem.h
@@ -0,0 +1,20 @@
+//===- Filesystem.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_FILESYSTEM_H
+#define LLD_FILESYSTEM_H
+
+#include "lld/Common/LLVM.h"
+#include <system_error>
+
+namespace lld {
+void unlinkAsync(StringRef path);
+std::error_code tryCreateFile(StringRef path);
+} // namespace lld
+
+#endif
diff --git a/linux-x64/clang/include/lld/Common/LLVM.h b/linux-x64/clang/include/lld/Common/LLVM.h
index 944bb41..f7ed1d7 100644
--- a/linux-x64/clang/include/lld/Common/LLVM.h
+++ b/linux-x64/clang/include/lld/Common/LLVM.h
@@ -29,6 +29,7 @@
 class MemoryBuffer;
 class MemoryBufferRef;
 template <typename T> class ArrayRef;
+template <typename T> class MutableArrayRef;
 template <unsigned InternalLen> class SmallString;
 template <typename T, unsigned N> class SmallVector;
 template <typename T> class ErrorOr;
@@ -62,6 +63,7 @@
 
 // ADT's.
 using llvm::ArrayRef;
+using llvm::MutableArrayRef;
 using llvm::Error;
 using llvm::ErrorOr;
 using llvm::Expected;
diff --git a/linux-x64/clang/include/lld/Common/Memory.h b/linux-x64/clang/include/lld/Common/Memory.h
index 78f6e24..41d8f15 100644
--- a/linux-x64/clang/include/lld/Common/Memory.h
+++ b/linux-x64/clang/include/lld/Common/Memory.h
@@ -28,30 +28,30 @@
 namespace lld {
 
 // Use this arena if your object doesn't have a destructor.
-extern llvm::BumpPtrAllocator BAlloc;
-extern llvm::StringSaver Saver;
+extern llvm::BumpPtrAllocator bAlloc;
+extern llvm::StringSaver saver;
 
 void freeArena();
 
 // These two classes are hack to keep track of all
 // SpecificBumpPtrAllocator instances.
 struct SpecificAllocBase {
-  SpecificAllocBase() { Instances.push_back(this); }
+  SpecificAllocBase() { instances.push_back(this); }
   virtual ~SpecificAllocBase() = default;
   virtual void reset() = 0;
-  static std::vector<SpecificAllocBase *> Instances;
+  static std::vector<SpecificAllocBase *> instances;
 };
 
 template <class T> struct SpecificAlloc : public SpecificAllocBase {
-  void reset() override { Alloc.DestroyAll(); }
-  llvm::SpecificBumpPtrAllocator<T> Alloc;
+  void reset() override { alloc.DestroyAll(); }
+  llvm::SpecificBumpPtrAllocator<T> alloc;
 };
 
 // Use this arena if your object has a destructor.
 // Your destructor will be invoked from freeArena().
-template <typename T, typename... U> T *make(U &&... Args) {
-  static SpecificAlloc<T> Alloc;
-  return new (Alloc.Alloc.Allocate()) T(std::forward<U>(Args)...);
+template <typename T, typename... U> T *make(U &&... args) {
+  static SpecificAlloc<T> alloc;
+  return new (alloc.alloc.Allocate()) T(std::forward<U>(args)...);
 }
 
 } // namespace lld
diff --git a/linux-x64/clang/include/lld/Common/Reproduce.h b/linux-x64/clang/include/lld/Common/Reproduce.h
index ac7a822..734d9e4 100644
--- a/linux-x64/clang/include/lld/Common/Reproduce.h
+++ b/linux-x64/clang/include/lld/Common/Reproduce.h
@@ -22,17 +22,13 @@
 // Makes a given pathname an absolute path first, and then remove
 // beginning /. For example, "../foo.o" is converted to "home/john/foo.o",
 // assuming that the current directory is "/home/john/bar".
-std::string relativeToRoot(StringRef Path);
+std::string relativeToRoot(StringRef path);
 
 // Quote a given string if it contains a space character.
-std::string quote(StringRef S);
-
-// Rewrite the given path if a file exists with that pathname, otherwise
-// returns the original path.
-std::string rewritePath(StringRef S);
+std::string quote(StringRef s);
 
 // Returns the string form of the given argument.
-std::string toString(const llvm::opt::Arg &Arg);
+std::string toString(const llvm::opt::Arg &arg);
 }
 
 #endif
diff --git a/linux-x64/clang/include/lld/Common/Strings.h b/linux-x64/clang/include/lld/Common/Strings.h
index efc9245..ded22dd 100644
--- a/linux-x64/clang/include/lld/Common/Strings.h
+++ b/linux-x64/clang/include/lld/Common/Strings.h
@@ -19,25 +19,25 @@
 namespace lld {
 // Returns a demangled C++ symbol name. If Name is not a mangled
 // name, it returns Optional::None.
-llvm::Optional<std::string> demangleItanium(llvm::StringRef Name);
-llvm::Optional<std::string> demangleMSVC(llvm::StringRef S);
+llvm::Optional<std::string> demangleItanium(llvm::StringRef name);
+llvm::Optional<std::string> demangleMSVC(llvm::StringRef s);
 
-std::vector<uint8_t> parseHex(llvm::StringRef S);
-bool isValidCIdentifier(llvm::StringRef S);
+std::vector<uint8_t> parseHex(llvm::StringRef s);
+bool isValidCIdentifier(llvm::StringRef s);
 
 // Write the contents of the a buffer to a file
-void saveBuffer(llvm::StringRef Buffer, const llvm::Twine &Path);
+void saveBuffer(llvm::StringRef buffer, const llvm::Twine &path);
 
 // This class represents multiple glob patterns.
 class StringMatcher {
 public:
   StringMatcher() = default;
-  explicit StringMatcher(llvm::ArrayRef<llvm::StringRef> Pat);
+  explicit StringMatcher(llvm::ArrayRef<llvm::StringRef> pat);
 
-  bool match(llvm::StringRef S) const;
+  bool match(llvm::StringRef s) const;
 
 private:
-  std::vector<llvm::GlobPattern> Patterns;
+  std::vector<llvm::GlobPattern> patterns;
 };
 
 } // namespace lld
diff --git a/linux-x64/clang/include/lld/Common/Threads.h b/linux-x64/clang/include/lld/Common/Threads.h
index e356fcd..7834130 100644
--- a/linux-x64/clang/include/lld/Common/Threads.h
+++ b/linux-x64/clang/include/lld/Common/Threads.h
@@ -63,21 +63,28 @@
 
 namespace lld {
 
-extern bool ThreadsEnabled;
+extern bool threadsEnabled;
 
-template <typename R, class FuncTy> void parallelForEach(R &&Range, FuncTy Fn) {
-  if (ThreadsEnabled)
-    for_each(llvm::parallel::par, std::begin(Range), std::end(Range), Fn);
+template <typename R, class FuncTy> void parallelForEach(R &&range, FuncTy fn) {
+  if (threadsEnabled)
+    for_each(llvm::parallel::par, std::begin(range), std::end(range), fn);
   else
-    for_each(llvm::parallel::seq, std::begin(Range), std::end(Range), Fn);
+    for_each(llvm::parallel::seq, std::begin(range), std::end(range), fn);
 }
 
-inline void parallelForEachN(size_t Begin, size_t End,
-                             llvm::function_ref<void(size_t)> Fn) {
-  if (ThreadsEnabled)
-    for_each_n(llvm::parallel::par, Begin, End, Fn);
+inline void parallelForEachN(size_t begin, size_t end,
+                             llvm::function_ref<void(size_t)> fn) {
+  if (threadsEnabled)
+    for_each_n(llvm::parallel::par, begin, end, fn);
   else
-    for_each_n(llvm::parallel::seq, Begin, End, Fn);
+    for_each_n(llvm::parallel::seq, begin, end, fn);
+}
+
+template <typename R, class FuncTy> void parallelSort(R &&range, FuncTy fn) {
+  if (threadsEnabled)
+    sort(llvm::parallel::par, std::begin(range), std::end(range), fn);
+  else
+    sort(llvm::parallel::seq, std::begin(range), std::end(range), fn);
 }
 
 } // namespace lld
diff --git a/linux-x64/clang/include/lld/Common/Timer.h b/linux-x64/clang/include/lld/Common/Timer.h
index e2b6951..4a298b0 100644
--- a/linux-x64/clang/include/lld/Common/Timer.h
+++ b/linux-x64/clang/include/lld/Common/Timer.h
@@ -21,18 +21,18 @@
 class Timer;
 
 struct ScopedTimer {
-  explicit ScopedTimer(Timer &T);
+  explicit ScopedTimer(Timer &t);
 
   ~ScopedTimer();
 
   void stop();
 
-  Timer *T = nullptr;
+  Timer *t = nullptr;
 };
 
 class Timer {
 public:
-  Timer(llvm::StringRef Name, Timer &Parent);
+  Timer(llvm::StringRef name, Timer &parent);
 
   static Timer &root();
 
@@ -43,14 +43,14 @@
   double millis() const;
 
 private:
-  explicit Timer(llvm::StringRef Name);
-  void print(int Depth, double TotalDuration, bool Recurse = true) const;
+  explicit Timer(llvm::StringRef name);
+  void print(int depth, double totalDuration, bool recurse = true) const;
 
-  std::chrono::time_point<std::chrono::high_resolution_clock> StartTime;
-  std::chrono::nanoseconds Total;
-  std::vector<Timer *> Children;
-  std::string Name;
-  Timer *Parent;
+  std::chrono::time_point<std::chrono::high_resolution_clock> startTime;
+  std::chrono::nanoseconds total;
+  std::vector<Timer *> children;
+  std::string name;
+  Timer *parent;
 };
 
 } // namespace lld
diff --git a/linux-x64/clang/include/lldb/API/LLDB.h b/linux-x64/clang/include/lldb/API/LLDB.h
new file mode 100644
index 0000000..0806ab7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/LLDB.h
@@ -0,0 +1,80 @@
+//===-- LLDB.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_LLDB_h_
+#define LLDB_LLDB_h_
+
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBAttachInfo.h"
+#include "lldb/API/SBBlock.h"
+#include "lldb/API/SBBreakpoint.h"
+#include "lldb/API/SBBreakpointName.h"
+#include "lldb/API/SBBreakpointLocation.h"
+#include "lldb/API/SBBroadcaster.h"
+#include "lldb/API/SBCommandInterpreter.h"
+#include "lldb/API/SBCommandReturnObject.h"
+#include "lldb/API/SBCommunication.h"
+#include "lldb/API/SBCompileUnit.h"
+#include "lldb/API/SBData.h"
+#include "lldb/API/SBDebugger.h"
+#include "lldb/API/SBDeclaration.h"
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBError.h"
+#include "lldb/API/SBEvent.h"
+#include "lldb/API/SBExecutionContext.h"
+#include "lldb/API/SBExpressionOptions.h"
+#include "lldb/API/SBFileSpec.h"
+#include "lldb/API/SBFileSpecList.h"
+#include "lldb/API/SBFrame.h"
+#include "lldb/API/SBFunction.h"
+#include "lldb/API/SBHostOS.h"
+#include "lldb/API/SBInstruction.h"
+#include "lldb/API/SBInstructionList.h"
+#include "lldb/API/SBLanguageRuntime.h"
+#include "lldb/API/SBLaunchInfo.h"
+#include "lldb/API/SBLineEntry.h"
+#include "lldb/API/SBListener.h"
+#include "lldb/API/SBMemoryRegionInfo.h"
+#include "lldb/API/SBMemoryRegionInfoList.h"
+#include "lldb/API/SBModule.h"
+#include "lldb/API/SBModuleSpec.h"
+#include "lldb/API/SBPlatform.h"
+#include "lldb/API/SBProcess.h"
+#include "lldb/API/SBProcessInfo.h"
+#include "lldb/API/SBQueue.h"
+#include "lldb/API/SBQueueItem.h"
+#include "lldb/API/SBReproducer.h"
+#include "lldb/API/SBSection.h"
+#include "lldb/API/SBSourceManager.h"
+#include "lldb/API/SBStream.h"
+#include "lldb/API/SBStringList.h"
+#include "lldb/API/SBStructuredData.h"
+#include "lldb/API/SBSymbol.h"
+#include "lldb/API/SBSymbolContext.h"
+#include "lldb/API/SBSymbolContextList.h"
+#include "lldb/API/SBTarget.h"
+#include "lldb/API/SBThread.h"
+#include "lldb/API/SBThreadCollection.h"
+#include "lldb/API/SBThreadPlan.h"
+#include "lldb/API/SBTrace.h"
+#include "lldb/API/SBTraceOptions.h"
+#include "lldb/API/SBType.h"
+#include "lldb/API/SBTypeCategory.h"
+#include "lldb/API/SBTypeEnumMember.h"
+#include "lldb/API/SBTypeFilter.h"
+#include "lldb/API/SBTypeFormat.h"
+#include "lldb/API/SBTypeNameSpecifier.h"
+#include "lldb/API/SBTypeSummary.h"
+#include "lldb/API/SBTypeSynthetic.h"
+#include "lldb/API/SBUnixSignals.h"
+#include "lldb/API/SBValue.h"
+#include "lldb/API/SBValueList.h"
+#include "lldb/API/SBVariablesOptions.h"
+#include "lldb/API/SBWatchpoint.h"
+
+#endif // LLDB_LLDB_h_
diff --git a/linux-x64/clang/include/lldb/API/SBAddress.h b/linux-x64/clang/include/lldb/API/SBAddress.h
new file mode 100644
index 0000000..2874a36
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBAddress.h
@@ -0,0 +1,130 @@
+//===-- SBAddress.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBAddress_h_
+#define LLDB_SBAddress_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBModule.h"
+
+namespace lldb {
+
+class LLDB_API SBAddress {
+public:
+  SBAddress();
+
+  SBAddress(const lldb::SBAddress &rhs);
+
+  SBAddress(lldb::SBSection section, lldb::addr_t offset);
+
+  // Create an address by resolving a load address using the supplied target
+  SBAddress(lldb::addr_t load_addr, lldb::SBTarget &target);
+
+  ~SBAddress();
+
+  const lldb::SBAddress &operator=(const lldb::SBAddress &rhs);
+
+  explicit operator bool() const;
+
+  // operator== is a free function
+
+  bool operator!=(const SBAddress &rhs) const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  addr_t GetFileAddress() const;
+
+  addr_t GetLoadAddress(const lldb::SBTarget &target) const;
+
+  void SetAddress(lldb::SBSection section, lldb::addr_t offset);
+
+  void SetLoadAddress(lldb::addr_t load_addr, lldb::SBTarget &target);
+  bool OffsetAddress(addr_t offset);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  // The following queries can lookup symbol information for a given address.
+  // An address might refer to code or data from an existing module, or it
+  // might refer to something on the stack or heap. The following functions
+  // will only return valid values if the address has been resolved to a code
+  // or data address using "void SBAddress::SetLoadAddress(...)" or
+  // "lldb::SBAddress SBTarget::ResolveLoadAddress (...)".
+  lldb::SBSymbolContext GetSymbolContext(uint32_t resolve_scope);
+
+  // The following functions grab individual objects for a given address and
+  // are less efficient if you want more than one symbol related objects. Use
+  // one of the following when you want multiple debug symbol related objects
+  // for an address:
+  //    lldb::SBSymbolContext SBAddress::GetSymbolContext (uint32_t
+  //    resolve_scope);
+  //    lldb::SBSymbolContext SBTarget::ResolveSymbolContextForAddress (const
+  //    SBAddress &addr, uint32_t resolve_scope);
+  // One or more bits from the SymbolContextItem enumerations can be logically
+  // OR'ed together to more efficiently retrieve multiple symbol objects.
+
+  lldb::SBSection GetSection();
+
+  lldb::addr_t GetOffset();
+
+  lldb::SBModule GetModule();
+
+  lldb::SBCompileUnit GetCompileUnit();
+
+  lldb::SBFunction GetFunction();
+
+  lldb::SBBlock GetBlock();
+
+  lldb::SBSymbol GetSymbol();
+
+  lldb::SBLineEntry GetLineEntry();
+
+protected:
+  friend class SBBlock;
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBFrame;
+  friend class SBFunction;
+  friend class SBLineEntry;
+  friend class SBInstruction;
+  friend class SBModule;
+  friend class SBSection;
+  friend class SBSymbol;
+  friend class SBSymbolContext;
+  friend class SBTarget;
+  friend class SBThread;
+  friend class SBThreadPlan;
+  friend class SBValue;
+  friend class SBQueueItem;
+
+  lldb_private::Address *operator->();
+
+  const lldb_private::Address *operator->() const;
+
+  friend bool LLDB_API operator==(const SBAddress &lhs, const SBAddress &rhs);
+
+  lldb_private::Address *get();
+
+  lldb_private::Address &ref();
+
+  const lldb_private::Address &ref() const;
+
+  SBAddress(const lldb_private::Address *lldb_object_ptr);
+
+  void SetAddress(const lldb_private::Address *lldb_object_ptr);
+
+private:
+  std::unique_ptr<lldb_private::Address> m_opaque_up;
+};
+
+bool LLDB_API operator==(const SBAddress &lhs, const SBAddress &rhs);
+
+} // namespace lldb
+
+#endif // LLDB_SBAddress_h_
diff --git a/linux-x64/clang/include/lldb/API/SBAttachInfo.h b/linux-x64/clang/include/lldb/API/SBAttachInfo.h
new file mode 100644
index 0000000..3c20a08
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBAttachInfo.h
@@ -0,0 +1,177 @@
+//===-- SBAttachInfo.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBAttachInfo_h_
+#define LLDB_SBAttachInfo_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class SBTarget;
+
+class LLDB_API SBAttachInfo {
+public:
+  SBAttachInfo();
+
+  SBAttachInfo(lldb::pid_t pid);
+
+  /// Attach to a process by name.
+  ///
+  /// This function implies that a future call to SBTarget::Attach(...)
+  /// will be synchronous.
+  ///
+  /// \param[in] path
+  ///     A full or partial name for the process to attach to.
+  ///
+  /// \param[in] wait_for
+  ///     If \b false, attach to an existing process whose name matches.
+  ///     If \b true, then wait for the next process whose name matches.
+  SBAttachInfo(const char *path, bool wait_for);
+
+  /// Attach to a process by name.
+  ///
+  /// Future calls to SBTarget::Attach(...) will be synchronous or
+  /// asynchronous depending on the \a async argument.
+  ///
+  /// \param[in] path
+  ///     A full or partial name for the process to attach to.
+  ///
+  /// \param[in] wait_for
+  ///     If \b false, attach to an existing process whose name matches.
+  ///     If \b true, then wait for the next process whose name matches.
+  ///
+  /// \param[in] async
+  ///     If \b false, then the SBTarget::Attach(...) call will be a
+  ///     synchronous call with no way to cancel the attach in
+  ///     progress.
+  ///     If \b true, then the SBTarget::Attach(...) function will
+  ///     return immediately and clients are expected to wait for a
+  ///     process eStateStopped event if a suitable process is
+  ///     eventually found. If the client wants to cancel the event,
+  ///     SBProcess::Stop() can be called and an eStateExited process
+  ///     event will be delivered.
+  SBAttachInfo(const char *path, bool wait_for, bool async);
+
+  SBAttachInfo(const SBAttachInfo &rhs);
+
+  ~SBAttachInfo();
+
+  SBAttachInfo &operator=(const SBAttachInfo &rhs);
+
+  lldb::pid_t GetProcessID();
+
+  void SetProcessID(lldb::pid_t pid);
+
+  void SetExecutable(const char *path);
+
+  void SetExecutable(lldb::SBFileSpec exe_file);
+
+  bool GetWaitForLaunch();
+
+  /// Set attach by process name settings.
+  ///
+  /// Designed to be used after a call to SBAttachInfo::SetExecutable().
+  /// This function implies that a call to SBTarget::Attach(...) will
+  /// be synchronous.
+  ///
+  /// \param[in] b
+  ///     If \b false, attach to an existing process whose name matches.
+  ///     If \b true, then wait for the next process whose name matches.
+  void SetWaitForLaunch(bool b);
+
+  /// Set attach by process name settings.
+  ///
+  /// Designed to be used after a call to SBAttachInfo::SetExecutable().
+  /// Future calls to SBTarget::Attach(...) will be synchronous or
+  /// asynchronous depending on the \a async argument.
+  ///
+  /// \param[in] b
+  ///     If \b false, attach to an existing process whose name matches.
+  ///     If \b true, then wait for the next process whose name matches.
+  ///
+  /// \param[in] async
+  ///     If \b false, then the SBTarget::Attach(...) call will be a
+  ///     synchronous call with no way to cancel the attach in
+  ///     progress.
+  ///     If \b true, then the SBTarget::Attach(...) function will
+  ///     return immediately and clients are expected to wait for a
+  ///     process eStateStopped event if a suitable process is
+  ///     eventually found. If the client wants to cancel the event,
+  ///     SBProcess::Stop() can be called and an eStateExited process
+  ///     event will be delivered.
+  void SetWaitForLaunch(bool b, bool async);
+
+  bool GetIgnoreExisting();
+
+  void SetIgnoreExisting(bool b);
+
+  uint32_t GetResumeCount();
+
+  void SetResumeCount(uint32_t c);
+
+  const char *GetProcessPluginName();
+
+  void SetProcessPluginName(const char *plugin_name);
+
+  uint32_t GetUserID();
+
+  uint32_t GetGroupID();
+
+  bool UserIDIsValid();
+
+  bool GroupIDIsValid();
+
+  void SetUserID(uint32_t uid);
+
+  void SetGroupID(uint32_t gid);
+
+  uint32_t GetEffectiveUserID();
+
+  uint32_t GetEffectiveGroupID();
+
+  bool EffectiveUserIDIsValid();
+
+  bool EffectiveGroupIDIsValid();
+
+  void SetEffectiveUserID(uint32_t uid);
+
+  void SetEffectiveGroupID(uint32_t gid);
+
+  lldb::pid_t GetParentProcessID();
+
+  void SetParentProcessID(lldb::pid_t pid);
+
+  bool ParentProcessIDIsValid();
+
+  /// Get the listener that will be used to receive process events.
+  ///
+  /// If no listener has been set via a call to
+  /// SBAttachInfo::SetListener(), then an invalid SBListener will be
+  /// returned (SBListener::IsValid() will return false). If a listener
+  /// has been set, then the valid listener object will be returned.
+  SBListener GetListener();
+
+  /// Set the listener that will be used to receive process events.
+  ///
+  /// By default the SBDebugger, which has a listener, that the SBTarget
+  /// belongs to will listen for the process events. Calling this function
+  /// allows a different listener to be used to listen for process events.
+  void SetListener(SBListener &listener);
+
+protected:
+  friend class SBTarget;
+
+  lldb_private::ProcessAttachInfo &ref();
+
+  ProcessAttachInfoSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBAttachInfo_h_
diff --git a/linux-x64/clang/include/lldb/API/SBBlock.h b/linux-x64/clang/include/lldb/API/SBBlock.h
new file mode 100644
index 0000000..0ca92ff
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBBlock.h
@@ -0,0 +1,95 @@
+//===-- SBBlock.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBBlock_h_
+#define LLDB_SBBlock_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFrame.h"
+#include "lldb/API/SBTarget.h"
+#include "lldb/API/SBValueList.h"
+
+namespace lldb {
+
+class LLDB_API SBBlock {
+public:
+  SBBlock();
+
+  SBBlock(const lldb::SBBlock &rhs);
+
+  ~SBBlock();
+
+  const lldb::SBBlock &operator=(const lldb::SBBlock &rhs);
+
+  bool IsInlined() const;
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetInlinedName() const;
+
+  lldb::SBFileSpec GetInlinedCallSiteFile() const;
+
+  uint32_t GetInlinedCallSiteLine() const;
+
+  uint32_t GetInlinedCallSiteColumn() const;
+
+  lldb::SBBlock GetParent();
+
+  lldb::SBBlock GetSibling();
+
+  lldb::SBBlock GetFirstChild();
+
+  uint32_t GetNumRanges();
+
+  lldb::SBAddress GetRangeStartAddress(uint32_t idx);
+
+  lldb::SBAddress GetRangeEndAddress(uint32_t idx);
+
+  uint32_t GetRangeIndexForBlockAddress(lldb::SBAddress block_addr);
+
+  lldb::SBValueList GetVariables(lldb::SBFrame &frame, bool arguments,
+                                 bool locals, bool statics,
+                                 lldb::DynamicValueType use_dynamic);
+
+  lldb::SBValueList GetVariables(lldb::SBTarget &target, bool arguments,
+                                 bool locals, bool statics);
+  /// Get the inlined block that contains this block.
+  ///
+  /// \return
+  ///     If this block is inlined, it will return this block, else
+  ///     parent blocks will be searched to see if any contain this
+  ///     block and are themselves inlined. An invalid SBBlock will
+  ///     be returned if this block nor any parent blocks are inlined
+  ///     function blocks.
+  lldb::SBBlock GetContainingInlinedBlock();
+
+  bool GetDescription(lldb::SBStream &description);
+
+private:
+  friend class SBAddress;
+  friend class SBFrame;
+  friend class SBFunction;
+  friend class SBSymbolContext;
+
+  lldb_private::Block *GetPtr();
+
+  void SetPtr(lldb_private::Block *lldb_object_ptr);
+
+  SBBlock(lldb_private::Block *lldb_object_ptr);
+
+  void AppendVariables(bool can_create, bool get_parent_variables,
+                       lldb_private::VariableList *var_list);
+
+  lldb_private::Block *m_opaque_ptr;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBBlock_h_
diff --git a/linux-x64/clang/include/lldb/API/SBBreakpoint.h b/linux-x64/clang/include/lldb/API/SBBreakpoint.h
new file mode 100644
index 0000000..75c0e69
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBBreakpoint.h
@@ -0,0 +1,181 @@
+//===-- SBBreakpoint.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBBreakpoint_h_
+#define LLDB_SBBreakpoint_h_
+
+#include "lldb/API/SBDefines.h"
+
+class SBBreakpointListImpl;
+
+namespace lldb {
+
+class LLDB_API SBBreakpoint {
+public:
+
+  SBBreakpoint();
+
+  SBBreakpoint(const lldb::SBBreakpoint &rhs);
+
+  SBBreakpoint(const lldb::BreakpointSP &bp_sp);
+
+  ~SBBreakpoint();
+
+  const lldb::SBBreakpoint &operator=(const lldb::SBBreakpoint &rhs);
+
+  // Tests to see if the opaque breakpoint object in this object matches the
+  // opaque breakpoint object in "rhs".
+  bool operator==(const lldb::SBBreakpoint &rhs);
+
+  bool operator!=(const lldb::SBBreakpoint &rhs);
+
+  break_id_t GetID() const;
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void ClearAllBreakpointSites();
+
+  lldb::SBBreakpointLocation FindLocationByAddress(lldb::addr_t vm_addr);
+
+  lldb::break_id_t FindLocationIDByAddress(lldb::addr_t vm_addr);
+
+  lldb::SBBreakpointLocation FindLocationByID(lldb::break_id_t bp_loc_id);
+
+  lldb::SBBreakpointLocation GetLocationAtIndex(uint32_t index);
+
+  void SetEnabled(bool enable);
+
+  bool IsEnabled();
+
+  void SetOneShot(bool one_shot);
+
+  bool IsOneShot() const;
+
+  bool IsInternal();
+
+  uint32_t GetHitCount() const;
+
+  void SetIgnoreCount(uint32_t count);
+
+  uint32_t GetIgnoreCount() const;
+
+  void SetCondition(const char *condition);
+
+  const char *GetCondition();
+
+  void SetAutoContinue(bool auto_continue);
+
+  bool GetAutoContinue();
+
+  void SetThreadID(lldb::tid_t sb_thread_id);
+
+  lldb::tid_t GetThreadID();
+
+  void SetThreadIndex(uint32_t index);
+
+  uint32_t GetThreadIndex() const;
+
+  void SetThreadName(const char *thread_name);
+
+  const char *GetThreadName() const;
+
+  void SetQueueName(const char *queue_name);
+
+  const char *GetQueueName() const;
+
+  void SetCallback(SBBreakpointHitCallback callback, void *baton);
+
+  void SetScriptCallbackFunction(const char *callback_function_name);
+
+  void SetCommandLineCommands(SBStringList &commands);
+
+  bool GetCommandLineCommands(SBStringList &commands);
+
+  SBError SetScriptCallbackBody(const char *script_body_text);
+
+  bool AddName(const char *new_name);
+
+  void RemoveName(const char *name_to_remove);
+
+  bool MatchesName(const char *name);
+
+  void GetNames(SBStringList &names);
+
+  size_t GetNumResolvedLocations() const;
+
+  size_t GetNumLocations() const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+  bool GetDescription(lldb::SBStream &description, bool include_locations);
+
+  static bool EventIsBreakpointEvent(const lldb::SBEvent &event);
+
+  static lldb::BreakpointEventType
+  GetBreakpointEventTypeFromEvent(const lldb::SBEvent &event);
+
+  static lldb::SBBreakpoint GetBreakpointFromEvent(const lldb::SBEvent &event);
+
+  static lldb::SBBreakpointLocation
+  GetBreakpointLocationAtIndexFromEvent(const lldb::SBEvent &event,
+                                        uint32_t loc_idx);
+
+  static uint32_t
+  GetNumBreakpointLocationsFromEvent(const lldb::SBEvent &event_sp);
+
+  bool IsHardware() const;
+
+  // Can only be called from a ScriptedBreakpointResolver...
+  SBError
+  AddLocation(SBAddress &address);
+  
+private:
+  friend class SBBreakpointList;
+  friend class SBBreakpointLocation;
+  friend class SBBreakpointName;
+  friend class SBTarget;
+
+  lldb::BreakpointSP GetSP() const;
+
+  lldb::BreakpointWP m_opaque_wp;
+};
+
+class LLDB_API SBBreakpointList {
+public:
+  SBBreakpointList(SBTarget &target);
+
+  ~SBBreakpointList();
+
+  size_t GetSize() const;
+
+  SBBreakpoint GetBreakpointAtIndex(size_t idx);
+
+  SBBreakpoint FindBreakpointByID(lldb::break_id_t);
+
+  void Append(const SBBreakpoint &sb_bkpt);
+
+  bool AppendIfUnique(const SBBreakpoint &sb_bkpt);
+
+  void AppendByID(lldb::break_id_t id);
+
+  void Clear();
+
+protected:
+  friend class SBTarget;
+
+  void CopyToBreakpointIDList(lldb_private::BreakpointIDList &bp_id_list);
+
+private:
+  std::shared_ptr<SBBreakpointListImpl> m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBBreakpoint_h_
diff --git a/linux-x64/clang/include/lldb/API/SBBreakpointLocation.h b/linux-x64/clang/include/lldb/API/SBBreakpointLocation.h
new file mode 100644
index 0000000..085bed9
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBBreakpointLocation.h
@@ -0,0 +1,100 @@
+//===-- SBBreakpointLocation.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBBreakpointLocation_h_
+#define LLDB_SBBreakpointLocation_h_
+
+#include "lldb/API/SBBreakpoint.h"
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBBreakpointLocation {
+public:
+  SBBreakpointLocation();
+
+  SBBreakpointLocation(const lldb::SBBreakpointLocation &rhs);
+
+  ~SBBreakpointLocation();
+
+  const lldb::SBBreakpointLocation &
+  operator=(const lldb::SBBreakpointLocation &rhs);
+
+  break_id_t GetID();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::SBAddress GetAddress();
+
+  lldb::addr_t GetLoadAddress();
+
+  void SetEnabled(bool enabled);
+
+  bool IsEnabled();
+
+  uint32_t GetHitCount();
+
+  uint32_t GetIgnoreCount();
+
+  void SetIgnoreCount(uint32_t n);
+
+  void SetCondition(const char *condition);
+
+  const char *GetCondition();
+   
+  void SetAutoContinue(bool auto_continue);
+
+  bool GetAutoContinue();
+
+  void SetScriptCallbackFunction(const char *callback_function_name);
+
+  SBError SetScriptCallbackBody(const char *script_body_text);
+  
+  void SetCommandLineCommands(SBStringList &commands);
+
+  bool GetCommandLineCommands(SBStringList &commands);
+ 
+  void SetThreadID(lldb::tid_t sb_thread_id);
+
+  lldb::tid_t GetThreadID();
+
+  void SetThreadIndex(uint32_t index);
+
+  uint32_t GetThreadIndex() const;
+
+  void SetThreadName(const char *thread_name);
+
+  const char *GetThreadName() const;
+
+  void SetQueueName(const char *queue_name);
+
+  const char *GetQueueName() const;
+
+  bool IsResolved();
+
+  bool GetDescription(lldb::SBStream &description, DescriptionLevel level);
+
+  SBBreakpoint GetBreakpoint();
+
+  SBBreakpointLocation(const lldb::BreakpointLocationSP &break_loc_sp);
+
+private:
+  friend class SBBreakpoint;
+  friend class SBBreakpointCallbackBaton;
+
+  void SetLocation(const lldb::BreakpointLocationSP &break_loc_sp);
+  BreakpointLocationSP GetSP() const;
+
+  lldb::BreakpointLocationWP m_opaque_wp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBBreakpointLocation_h_
diff --git a/linux-x64/clang/include/lldb/API/SBBreakpointName.h b/linux-x64/clang/include/lldb/API/SBBreakpointName.h
new file mode 100644
index 0000000..018238b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBBreakpointName.h
@@ -0,0 +1,119 @@
+//===-- SBBreakpointName.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBBreakpointName_h_
+#define LLDB_SBBreakpointName_h_
+
+#include "lldb/API/SBDefines.h"
+
+class SBBreakpointNameImpl;
+
+namespace lldb {
+
+class LLDB_API SBBreakpointName {
+public:
+//  typedef bool (*BreakpointHitCallback)(void *baton, SBProcess &process,
+//                                        SBThread &thread,
+//                                        lldb::SBBreakpointLocation &location);
+
+  SBBreakpointName();
+  
+  SBBreakpointName(SBTarget &target, const char *name);
+  
+  SBBreakpointName(SBBreakpoint &bkpt, const char *name);
+
+  SBBreakpointName(const lldb::SBBreakpointName &rhs);
+
+  ~SBBreakpointName();
+
+  const lldb::SBBreakpointName &operator=(const lldb::SBBreakpointName &rhs);
+
+  // Tests to see if the opaque breakpoint object in this object matches the
+  // opaque breakpoint object in "rhs".
+  bool operator==(const lldb::SBBreakpointName &rhs);
+
+  bool operator!=(const lldb::SBBreakpointName &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+  
+  const char *GetName() const;
+
+  void SetEnabled(bool enable);
+
+  bool IsEnabled();
+
+  void SetOneShot(bool one_shot);
+
+  bool IsOneShot() const;
+
+  void SetIgnoreCount(uint32_t count);
+
+  uint32_t GetIgnoreCount() const;
+
+  void SetCondition(const char *condition);
+
+  const char *GetCondition();
+
+  void SetAutoContinue(bool auto_continue);
+
+  bool GetAutoContinue();
+
+  void SetThreadID(lldb::tid_t sb_thread_id);
+
+  lldb::tid_t GetThreadID();
+
+  void SetThreadIndex(uint32_t index);
+
+  uint32_t GetThreadIndex() const;
+
+  void SetThreadName(const char *thread_name);
+
+  const char *GetThreadName() const;
+
+  void SetQueueName(const char *queue_name);
+
+  const char *GetQueueName() const;
+
+  void SetCallback(SBBreakpointHitCallback callback, void *baton);
+
+  void SetScriptCallbackFunction(const char *callback_function_name);
+
+  void SetCommandLineCommands(SBStringList &commands);
+
+  bool GetCommandLineCommands(SBStringList &commands);
+
+  SBError SetScriptCallbackBody(const char *script_body_text);
+  
+  const char *GetHelpString() const;
+  void SetHelpString(const char *help_string);
+  
+  bool GetAllowList() const;
+  void SetAllowList(bool value);
+    
+  bool GetAllowDelete();
+  void SetAllowDelete(bool value);
+    
+  bool GetAllowDisable();
+  void SetAllowDisable(bool value);
+
+  bool GetDescription(lldb::SBStream &description);
+
+private:
+  friend class SBTarget;
+  
+  lldb_private::BreakpointName *GetBreakpointName() const;
+  void UpdateName(lldb_private::BreakpointName &bp_name);
+
+  std::unique_ptr<SBBreakpointNameImpl> m_impl_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBBreakpointName_h_
diff --git a/linux-x64/clang/include/lldb/API/SBBroadcaster.h b/linux-x64/clang/include/lldb/API/SBBroadcaster.h
new file mode 100644
index 0000000..fc5e888
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBBroadcaster.h
@@ -0,0 +1,84 @@
+//===-- SBBroadcaster.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBBroadcaster_h_
+#define LLDB_SBBroadcaster_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBBroadcaster {
+public:
+  SBBroadcaster();
+
+  SBBroadcaster(const char *name);
+
+  SBBroadcaster(const SBBroadcaster &rhs);
+
+  const SBBroadcaster &operator=(const SBBroadcaster &rhs);
+
+  ~SBBroadcaster();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  void BroadcastEventByType(uint32_t event_type, bool unique = false);
+
+  void BroadcastEvent(const lldb::SBEvent &event, bool unique = false);
+
+  void AddInitialEventsToListener(const lldb::SBListener &listener,
+                                  uint32_t requested_events);
+
+  uint32_t AddListener(const lldb::SBListener &listener, uint32_t event_mask);
+
+  const char *GetName() const;
+
+  bool EventTypeHasListeners(uint32_t event_type);
+
+  bool RemoveListener(const lldb::SBListener &listener,
+                      uint32_t event_mask = UINT32_MAX);
+
+  // This comparison is checking if the internal opaque pointer value is equal
+  // to that in "rhs".
+  bool operator==(const lldb::SBBroadcaster &rhs) const;
+
+  // This comparison is checking if the internal opaque pointer value is not
+  // equal to that in "rhs".
+  bool operator!=(const lldb::SBBroadcaster &rhs) const;
+
+  // This comparison is checking if the internal opaque pointer value is less
+  // than that in "rhs" so SBBroadcaster objects can be contained in ordered
+  // containers.
+  bool operator<(const lldb::SBBroadcaster &rhs) const;
+
+protected:
+  friend class SBCommandInterpreter;
+  friend class SBCommunication;
+  friend class SBEvent;
+  friend class SBListener;
+  friend class SBProcess;
+  friend class SBTarget;
+
+  SBBroadcaster(lldb_private::Broadcaster *broadcaster, bool owns);
+
+  lldb_private::Broadcaster *get() const;
+
+  void reset(lldb_private::Broadcaster *broadcaster, bool owns);
+
+private:
+  lldb::BroadcasterSP m_opaque_sp;
+  lldb_private::Broadcaster *m_opaque_ptr;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBBroadcaster_h_
diff --git a/linux-x64/clang/include/lldb/API/SBCommandInterpreter.h b/linux-x64/clang/include/lldb/API/SBCommandInterpreter.h
new file mode 100644
index 0000000..6c80e8e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBCommandInterpreter.h
@@ -0,0 +1,305 @@
+//===-- SBCommandInterpreter.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBCommandInterpreter_h_
+#define LLDB_SBCommandInterpreter_h_
+
+#include <memory>
+
+#include "lldb/API/SBDebugger.h"
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBCommandInterpreterRunOptions {
+  friend class SBDebugger;
+  friend class SBCommandInterpreter;
+
+public:
+  SBCommandInterpreterRunOptions();
+  ~SBCommandInterpreterRunOptions();
+
+  bool GetStopOnContinue() const;
+
+  void SetStopOnContinue(bool);
+
+  bool GetStopOnError() const;
+
+  void SetStopOnError(bool);
+
+  bool GetStopOnCrash() const;
+
+  void SetStopOnCrash(bool);
+
+  bool GetEchoCommands() const;
+
+  void SetEchoCommands(bool);
+
+  bool GetEchoCommentCommands() const;
+
+  void SetEchoCommentCommands(bool echo);
+
+  bool GetPrintResults() const;
+
+  void SetPrintResults(bool);
+
+  bool GetAddToHistory() const;
+
+  void SetAddToHistory(bool);
+
+private:
+  lldb_private::CommandInterpreterRunOptions *get() const;
+
+  lldb_private::CommandInterpreterRunOptions &ref() const;
+
+  // This is set in the constructor and will always be valid.
+  mutable std::unique_ptr<lldb_private::CommandInterpreterRunOptions>
+      m_opaque_up;
+};
+
+class SBCommandInterpreter {
+public:
+  enum {
+    eBroadcastBitThreadShouldExit = (1 << 0),
+    eBroadcastBitResetPrompt = (1 << 1),
+    eBroadcastBitQuitCommandReceived = (1 << 2), // User entered quit
+    eBroadcastBitAsynchronousOutputData = (1 << 3),
+    eBroadcastBitAsynchronousErrorData = (1 << 4)
+  };
+
+  SBCommandInterpreter(const lldb::SBCommandInterpreter &rhs);
+
+  ~SBCommandInterpreter();
+
+  const lldb::SBCommandInterpreter &
+  operator=(const lldb::SBCommandInterpreter &rhs);
+
+  static const char *
+  GetArgumentTypeAsCString(const lldb::CommandArgumentType arg_type);
+
+  static const char *
+  GetArgumentDescriptionAsCString(const lldb::CommandArgumentType arg_type);
+
+  static bool EventIsCommandInterpreterEvent(const lldb::SBEvent &event);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  bool CommandExists(const char *cmd);
+
+  bool AliasExists(const char *cmd);
+
+  lldb::SBBroadcaster GetBroadcaster();
+
+  static const char *GetBroadcasterClass();
+
+  bool HasCommands();
+
+  bool HasAliases();
+
+  bool HasAliasOptions();
+
+  lldb::SBProcess GetProcess();
+
+  lldb::SBDebugger GetDebugger();
+
+  lldb::SBCommand AddMultiwordCommand(const char *name, const char *help);
+
+  lldb::SBCommand AddCommand(const char *name,
+                             lldb::SBCommandPluginInterface *impl,
+                             const char *help);
+
+  lldb::SBCommand AddCommand(const char *name,
+                             lldb::SBCommandPluginInterface *impl,
+                             const char *help, const char *syntax);
+
+  void SourceInitFileInHomeDirectory(lldb::SBCommandReturnObject &result);
+
+  void
+  SourceInitFileInCurrentWorkingDirectory(lldb::SBCommandReturnObject &result);
+
+  lldb::ReturnStatus HandleCommand(const char *command_line,
+                                   lldb::SBCommandReturnObject &result,
+                                   bool add_to_history = false);
+
+  lldb::ReturnStatus HandleCommand(const char *command_line,
+                                   SBExecutionContext &exe_ctx,
+                                   SBCommandReturnObject &result,
+                                   bool add_to_history = false);
+
+  void HandleCommandsFromFile(lldb::SBFileSpec &file,
+                              lldb::SBExecutionContext &override_context,
+                              lldb::SBCommandInterpreterRunOptions &options,
+                              lldb::SBCommandReturnObject result);
+
+  // The pointer based interface is not useful in SWIG, since the cursor &
+  // last_char arguments are string pointers INTO current_line and you can't do
+  // that in a scripting language interface in general...
+
+  // In either case, the way this works is that the you give it a line and
+  // cursor position in the line.  The function will return the number of
+  // completions.  The matches list will contain number_of_completions + 1
+  // elements.  The first element is the common substring after the cursor
+  // position for all the matches.  The rest of the elements are the matches.
+  // The first element is useful if you are emulating the common shell behavior
+  // where the tab completes to the string that is common among all the
+  // matches, then you should first check if the first element is non-empty,
+  // and if so just insert it and move the cursor to the end of the insertion.
+  // The next tab will return an empty common substring, and a list of choices
+  // (if any), at which point you should display the choices and let the user
+  // type further to disambiguate.
+
+  int HandleCompletion(const char *current_line, const char *cursor,
+                       const char *last_char, int match_start_point,
+                       int max_return_elements, lldb::SBStringList &matches);
+
+  int HandleCompletion(const char *current_line, uint32_t cursor_pos,
+                       int match_start_point, int max_return_elements,
+                       lldb::SBStringList &matches);
+
+  // Same as HandleCompletion, but also fills out `descriptions` with
+  // descriptions for each match.
+  int HandleCompletionWithDescriptions(
+      const char *current_line, const char *cursor, const char *last_char,
+      int match_start_point, int max_return_elements,
+      lldb::SBStringList &matches, lldb::SBStringList &descriptions);
+
+  int HandleCompletionWithDescriptions(const char *current_line,
+                                       uint32_t cursor_pos,
+                                       int match_start_point,
+                                       int max_return_elements,
+                                       lldb::SBStringList &matches,
+                                       lldb::SBStringList &descriptions);
+
+  bool WasInterrupted() const;
+
+  // Catch commands before they execute by registering a callback that will get
+  // called when the command gets executed. This allows GUI or command line
+  // interfaces to intercept a command and stop it from happening
+  bool SetCommandOverrideCallback(const char *command_name,
+                                  lldb::CommandOverrideCallback callback,
+                                  void *baton);
+
+  SBCommandInterpreter(
+      lldb_private::CommandInterpreter *interpreter_ptr =
+          nullptr); // Access using SBDebugger::GetCommandInterpreter();
+
+  /// Return true if the command interpreter is the active IO handler.
+  ///
+  /// This indicates that any input coming into the debugger handles will
+  /// go to the command interpreter and will result in LLDB command line
+  /// commands being executed.
+  bool IsActive();
+
+  /// Get the string that needs to be written to the debugger stdin file
+  /// handle when a control character is typed.
+  ///
+  /// Some GUI programs will intercept "control + char" sequences and want
+  /// to have them do what normally would happen when using a real
+  /// terminal, so this function allows GUI programs to emulate this
+  /// functionality.
+  ///
+  /// \param[in] ch
+  ///     The character that was typed along with the control key
+  ///
+  /// \return
+  ///     The string that should be written into the file handle that is
+  ///     feeding the input stream for the debugger, or nullptr if there is
+  ///     no string for this control key.
+  const char *GetIOHandlerControlSequence(char ch);
+
+  bool GetPromptOnQuit();
+
+  void SetPromptOnQuit(bool b);
+
+  /// Sets whether the command interpreter should allow custom exit codes
+  /// for the 'quit' command.
+  void AllowExitCodeOnQuit(bool allow);
+
+  /// Returns true if the user has called the 'quit' command with a custom exit
+  /// code.
+  bool HasCustomQuitExitCode();
+
+  /// Returns the exit code that the user has specified when running the
+  /// 'quit' command. Returns 0 if the user hasn't called 'quit' at all or
+  /// without a custom exit code.
+  int GetQuitStatus();
+
+  /// Resolve the command just as HandleCommand would, expanding abbreviations
+  /// and aliases.  If successful, result->GetOutput has the full expansion.
+  void ResolveCommand(const char *command_line, SBCommandReturnObject &result);
+
+protected:
+  lldb_private::CommandInterpreter &ref();
+
+  lldb_private::CommandInterpreter *get();
+
+  void reset(lldb_private::CommandInterpreter *);
+
+private:
+  friend class SBDebugger;
+
+  lldb_private::CommandInterpreter *m_opaque_ptr;
+};
+
+class SBCommandPluginInterface {
+public:
+  virtual ~SBCommandPluginInterface() = default;
+
+  virtual bool DoExecute(lldb::SBDebugger /*debugger*/, char ** /*command*/,
+                         lldb::SBCommandReturnObject & /*result*/) {
+    return false;
+  }
+};
+
+class SBCommand {
+public:
+  SBCommand();
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+  const char *GetName();
+
+  const char *GetHelp();
+
+  const char *GetHelpLong();
+
+  void SetHelp(const char *);
+
+  void SetHelpLong(const char *);
+
+  uint32_t GetFlags();
+
+  void SetFlags(uint32_t flags);
+
+  lldb::SBCommand AddMultiwordCommand(const char *name,
+                                      const char *help = nullptr);
+
+  lldb::SBCommand AddCommand(const char *name,
+                             lldb::SBCommandPluginInterface *impl,
+                             const char *help = nullptr);
+
+  lldb::SBCommand AddCommand(const char *name,
+                             lldb::SBCommandPluginInterface *impl,
+                             const char *help, const char *syntax);
+
+private:
+  friend class SBDebugger;
+  friend class SBCommandInterpreter;
+
+  SBCommand(lldb::CommandObjectSP cmd_sp);
+
+  lldb::CommandObjectSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBCommandInterpreter_h_
diff --git a/linux-x64/clang/include/lldb/API/SBCommandReturnObject.h b/linux-x64/clang/include/lldb/API/SBCommandReturnObject.h
new file mode 100644
index 0000000..2877afb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBCommandReturnObject.h
@@ -0,0 +1,109 @@
+//===-- SBCommandReturnObject.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBCommandReturnObject_h_
+#define LLDB_SBCommandReturnObject_h_
+
+#include <stdio.h>
+
+#include <memory>
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBCommandReturnObject {
+public:
+  SBCommandReturnObject();
+
+  SBCommandReturnObject(const lldb::SBCommandReturnObject &rhs);
+
+  ~SBCommandReturnObject();
+
+  const lldb::SBCommandReturnObject &
+  operator=(const lldb::SBCommandReturnObject &rhs);
+
+  SBCommandReturnObject(lldb_private::CommandReturnObject *ptr);
+
+  lldb_private::CommandReturnObject *Release();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetOutput();
+
+  const char *GetError();
+
+  size_t PutOutput(FILE *fh);
+
+  size_t GetOutputSize();
+
+  size_t GetErrorSize();
+
+  size_t PutError(FILE *fh);
+
+  void Clear();
+
+  lldb::ReturnStatus GetStatus();
+
+  void SetStatus(lldb::ReturnStatus status);
+
+  bool Succeeded();
+
+  bool HasResult();
+
+  void AppendMessage(const char *message);
+
+  void AppendWarning(const char *message);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  // deprecated, these two functions do not take ownership of file handle
+  void SetImmediateOutputFile(FILE *fh);
+
+  void SetImmediateErrorFile(FILE *fh);
+
+  void SetImmediateOutputFile(FILE *fh, bool transfer_ownership);
+
+  void SetImmediateErrorFile(FILE *fh, bool transfer_ownership);
+
+  void PutCString(const char *string, int len = -1);
+
+  size_t Printf(const char *format, ...) __attribute__((format(printf, 2, 3)));
+
+  const char *GetOutput(bool only_if_no_immediate);
+
+  const char *GetError(bool only_if_no_immediate);
+
+  void SetError(lldb::SBError &error,
+                const char *fallback_error_cstr = nullptr);
+
+  void SetError(const char *error_cstr);
+
+protected:
+  friend class SBCommandInterpreter;
+  friend class SBOptions;
+
+  lldb_private::CommandReturnObject *operator->() const;
+
+  lldb_private::CommandReturnObject *get() const;
+
+  lldb_private::CommandReturnObject &operator*() const;
+
+  lldb_private::CommandReturnObject &ref() const;
+
+  void SetLLDBObjectPtr(lldb_private::CommandReturnObject *ptr);
+
+private:
+  std::unique_ptr<lldb_private::CommandReturnObject> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBCommandReturnObject_h_
diff --git a/linux-x64/clang/include/lldb/API/SBCommunication.h b/linux-x64/clang/include/lldb/API/SBCommunication.h
new file mode 100644
index 0000000..5b803fc
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBCommunication.h
@@ -0,0 +1,83 @@
+//===-- SBCommunication.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBCommunication_h_
+#define LLDB_SBCommunication_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBError.h"
+
+namespace lldb {
+
+class LLDB_API SBCommunication {
+public:
+  FLAGS_ANONYMOUS_ENUM(){
+      eBroadcastBitDisconnected =
+          (1 << 0), ///< Sent when the communications connection is lost.
+      eBroadcastBitReadThreadGotBytes =
+          (1 << 1), ///< Sent by the read thread when bytes become available.
+      eBroadcastBitReadThreadDidExit =
+          (1
+           << 2), ///< Sent by the read thread when it exits to inform clients.
+      eBroadcastBitReadThreadShouldExit =
+          (1 << 3), ///< Sent by clients that need to cancel the read thread.
+      eBroadcastBitPacketAvailable =
+          (1 << 4), ///< Sent when data received makes a complete packet.
+      eAllEventBits = 0xffffffff};
+
+  typedef void (*ReadThreadBytesReceived)(void *baton, const void *src,
+                                          size_t src_len);
+
+  SBCommunication();
+  SBCommunication(const char *broadcaster_name);
+  ~SBCommunication();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::SBBroadcaster GetBroadcaster();
+
+  static const char *GetBroadcasterClass();
+
+  lldb::ConnectionStatus AdoptFileDesriptor(int fd, bool owns_fd);
+
+  lldb::ConnectionStatus Connect(const char *url);
+
+  lldb::ConnectionStatus Disconnect();
+
+  bool IsConnected() const;
+
+  bool GetCloseOnEOF();
+
+  void SetCloseOnEOF(bool b);
+
+  size_t Read(void *dst, size_t dst_len, uint32_t timeout_usec,
+              lldb::ConnectionStatus &status);
+
+  size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status);
+
+  bool ReadThreadStart();
+
+  bool ReadThreadStop();
+
+  bool ReadThreadIsRunning();
+
+  bool SetReadThreadBytesReceivedCallback(ReadThreadBytesReceived callback,
+                                          void *callback_baton);
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SBCommunication);
+
+  lldb_private::Communication *m_opaque;
+  bool m_opaque_owned;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBCommunication_h_
diff --git a/linux-x64/clang/include/lldb/API/SBCompileUnit.h b/linux-x64/clang/include/lldb/API/SBCompileUnit.h
new file mode 100644
index 0000000..b6b1382
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBCompileUnit.h
@@ -0,0 +1,95 @@
+//===-- SBCompileUnit.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBCompileUnit_h_
+#define LLDB_SBCompileUnit_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFileSpec.h"
+
+namespace lldb {
+
+class LLDB_API SBCompileUnit {
+public:
+  SBCompileUnit();
+
+  SBCompileUnit(const lldb::SBCompileUnit &rhs);
+
+  ~SBCompileUnit();
+
+  const lldb::SBCompileUnit &operator=(const lldb::SBCompileUnit &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::SBFileSpec GetFileSpec() const;
+
+  uint32_t GetNumLineEntries() const;
+
+  lldb::SBLineEntry GetLineEntryAtIndex(uint32_t idx) const;
+
+  uint32_t FindLineEntryIndex(uint32_t start_idx, uint32_t line,
+                              lldb::SBFileSpec *inline_file_spec) const;
+
+  uint32_t FindLineEntryIndex(uint32_t start_idx, uint32_t line,
+                              lldb::SBFileSpec *inline_file_spec,
+                              bool exact) const;
+
+  SBFileSpec GetSupportFileAtIndex(uint32_t idx) const;
+
+  uint32_t GetNumSupportFiles() const;
+
+  uint32_t FindSupportFileIndex(uint32_t start_idx, const SBFileSpec &sb_file,
+                                bool full);
+
+  /// Get all types matching \a type_mask from debug info in this
+  /// compile unit.
+  ///
+  /// \param[in] type_mask
+  ///    A bitfield that consists of one or more bits logically OR'ed
+  ///    together from the lldb::TypeClass enumeration. This allows
+  ///    you to request only structure types, or only class, struct
+  ///    and union types. Passing in lldb::eTypeClassAny will return
+  ///    all types found in the debug information for this compile
+  ///    unit.
+  ///
+  /// \return
+  ///    A list of types in this compile unit that match \a type_mask
+  lldb::SBTypeList GetTypes(uint32_t type_mask = lldb::eTypeClassAny);
+
+  lldb::LanguageType GetLanguage();
+
+  bool operator==(const lldb::SBCompileUnit &rhs) const;
+
+  bool operator!=(const lldb::SBCompileUnit &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+private:
+  friend class SBAddress;
+  friend class SBFrame;
+  friend class SBSymbolContext;
+  friend class SBModule;
+
+  SBCompileUnit(lldb_private::CompileUnit *lldb_object_ptr);
+
+  const lldb_private::CompileUnit *operator->() const;
+
+  const lldb_private::CompileUnit &operator*() const;
+
+  lldb_private::CompileUnit *get();
+
+  void reset(lldb_private::CompileUnit *lldb_object_ptr);
+
+  lldb_private::CompileUnit *m_opaque_ptr;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBCompileUnit_h_
diff --git a/linux-x64/clang/include/lldb/API/SBData.h b/linux-x64/clang/include/lldb/API/SBData.h
new file mode 100644
index 0000000..886fe82
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBData.h
@@ -0,0 +1,155 @@
+//===-- SBData.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBData_h_
+#define LLDB_SBData_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBData {
+public:
+  SBData();
+
+  SBData(const SBData &rhs);
+
+  const SBData &operator=(const SBData &rhs);
+
+  ~SBData();
+
+  uint8_t GetAddressByteSize();
+
+  void SetAddressByteSize(uint8_t addr_byte_size);
+
+  void Clear();
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+  size_t GetByteSize();
+
+  lldb::ByteOrder GetByteOrder();
+
+  void SetByteOrder(lldb::ByteOrder endian);
+
+  float GetFloat(lldb::SBError &error, lldb::offset_t offset);
+
+  double GetDouble(lldb::SBError &error, lldb::offset_t offset);
+
+  long double GetLongDouble(lldb::SBError &error, lldb::offset_t offset);
+
+  lldb::addr_t GetAddress(lldb::SBError &error, lldb::offset_t offset);
+
+  uint8_t GetUnsignedInt8(lldb::SBError &error, lldb::offset_t offset);
+
+  uint16_t GetUnsignedInt16(lldb::SBError &error, lldb::offset_t offset);
+
+  uint32_t GetUnsignedInt32(lldb::SBError &error, lldb::offset_t offset);
+
+  uint64_t GetUnsignedInt64(lldb::SBError &error, lldb::offset_t offset);
+
+  int8_t GetSignedInt8(lldb::SBError &error, lldb::offset_t offset);
+
+  int16_t GetSignedInt16(lldb::SBError &error, lldb::offset_t offset);
+
+  int32_t GetSignedInt32(lldb::SBError &error, lldb::offset_t offset);
+
+  int64_t GetSignedInt64(lldb::SBError &error, lldb::offset_t offset);
+
+  const char *GetString(lldb::SBError &error, lldb::offset_t offset);
+
+  size_t ReadRawData(lldb::SBError &error, lldb::offset_t offset, void *buf,
+                     size_t size);
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::addr_t base_addr = LLDB_INVALID_ADDRESS);
+
+  // it would be nice to have SetData(SBError, const void*, size_t) when
+  // endianness and address size can be inferred from the existing
+  // DataExtractor, but having two SetData() signatures triggers a SWIG bug
+  // where the typemap isn't applied before resolving the overload, and thus
+  // the right function never gets called
+  void SetData(lldb::SBError &error, const void *buf, size_t size,
+               lldb::ByteOrder endian, uint8_t addr_size);
+
+  // see SetData() for why we don't have Append(const void* buf, size_t size)
+  bool Append(const SBData &rhs);
+
+  static lldb::SBData CreateDataFromCString(lldb::ByteOrder endian,
+                                            uint32_t addr_byte_size,
+                                            const char *data);
+
+  // in the following CreateData*() and SetData*() prototypes, the two
+  // parameters array and array_len should not be renamed or rearranged,
+  // because doing so will break the SWIG typemap
+  static lldb::SBData CreateDataFromUInt64Array(lldb::ByteOrder endian,
+                                                uint32_t addr_byte_size,
+                                                uint64_t *array,
+                                                size_t array_len);
+
+  static lldb::SBData CreateDataFromUInt32Array(lldb::ByteOrder endian,
+                                                uint32_t addr_byte_size,
+                                                uint32_t *array,
+                                                size_t array_len);
+
+  static lldb::SBData CreateDataFromSInt64Array(lldb::ByteOrder endian,
+                                                uint32_t addr_byte_size,
+                                                int64_t *array,
+                                                size_t array_len);
+
+  static lldb::SBData CreateDataFromSInt32Array(lldb::ByteOrder endian,
+                                                uint32_t addr_byte_size,
+                                                int32_t *array,
+                                                size_t array_len);
+
+  static lldb::SBData CreateDataFromDoubleArray(lldb::ByteOrder endian,
+                                                uint32_t addr_byte_size,
+                                                double *array,
+                                                size_t array_len);
+
+  bool SetDataFromCString(const char *data);
+
+  bool SetDataFromUInt64Array(uint64_t *array, size_t array_len);
+
+  bool SetDataFromUInt32Array(uint32_t *array, size_t array_len);
+
+  bool SetDataFromSInt64Array(int64_t *array, size_t array_len);
+
+  bool SetDataFromSInt32Array(int32_t *array, size_t array_len);
+
+  bool SetDataFromDoubleArray(double *array, size_t array_len);
+
+protected:
+  // Mimic shared pointer...
+  lldb_private::DataExtractor *get() const;
+
+  lldb_private::DataExtractor *operator->() const;
+
+  lldb::DataExtractorSP &operator*();
+
+  const lldb::DataExtractorSP &operator*() const;
+
+  SBData(const lldb::DataExtractorSP &data_sp);
+
+  void SetOpaque(const lldb::DataExtractorSP &data_sp);
+
+private:
+  friend class SBInstruction;
+  friend class SBProcess;
+  friend class SBSection;
+  friend class SBTarget;
+  friend class SBValue;
+
+  lldb::DataExtractorSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBData_h_
diff --git a/linux-x64/clang/include/lldb/API/SBDebugger.h b/linux-x64/clang/include/lldb/API/SBDebugger.h
new file mode 100644
index 0000000..417cead
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBDebugger.h
@@ -0,0 +1,297 @@
+//===-- SBDebugger.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBDebugger_h_
+#define LLDB_SBDebugger_h_
+
+#include <stdio.h>
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBPlatform.h"
+
+namespace lldb {
+
+class LLDB_API SBInputReader {
+public:
+  SBInputReader() = default;
+  ~SBInputReader() = default;
+
+  SBError Initialize(lldb::SBDebugger &sb_debugger,
+                     unsigned long (*callback)(void *, lldb::SBInputReader *,
+                                               lldb::InputReaderAction,
+                                               char const *, unsigned long),
+                     void *a, lldb::InputReaderGranularity b, char const *c,
+                     char const *d, bool e);
+  void SetIsDone(bool);
+  bool IsActive() const;
+};
+
+class LLDB_API SBDebugger {
+public:
+  SBDebugger();
+
+  SBDebugger(const lldb::SBDebugger &rhs);
+
+  SBDebugger(const lldb::DebuggerSP &debugger_sp);
+
+  ~SBDebugger();
+
+  lldb::SBDebugger &operator=(const lldb::SBDebugger &rhs);
+
+  static void Initialize();
+
+  static lldb::SBError InitializeWithErrorHandling();
+
+  static void Terminate();
+
+  // Deprecated, use the one that takes a source_init_files bool.
+  static lldb::SBDebugger Create();
+
+  static lldb::SBDebugger Create(bool source_init_files);
+
+  static lldb::SBDebugger Create(bool source_init_files,
+                                 lldb::LogOutputCallback log_callback,
+                                 void *baton);
+
+  static void Destroy(lldb::SBDebugger &debugger);
+
+  static void MemoryPressureDetected();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  void SetAsync(bool b);
+
+  bool GetAsync();
+
+  void SkipLLDBInitFiles(bool b);
+
+  void SkipAppInitFiles(bool b);
+
+  void SetInputFileHandle(FILE *f, bool transfer_ownership);
+
+  void SetOutputFileHandle(FILE *f, bool transfer_ownership);
+
+  void SetErrorFileHandle(FILE *f, bool transfer_ownership);
+
+  FILE *GetInputFileHandle();
+
+  FILE *GetOutputFileHandle();
+
+  FILE *GetErrorFileHandle();
+
+  void SaveInputTerminalState();
+
+  void RestoreInputTerminalState();
+
+  lldb::SBCommandInterpreter GetCommandInterpreter();
+
+  void HandleCommand(const char *command);
+
+  lldb::SBListener GetListener();
+
+  void HandleProcessEvent(const lldb::SBProcess &process,
+                          const lldb::SBEvent &event, FILE *out, FILE *err);
+
+  lldb::SBTarget CreateTarget(const char *filename, const char *target_triple,
+                              const char *platform_name,
+                              bool add_dependent_modules, lldb::SBError &error);
+
+  lldb::SBTarget CreateTargetWithFileAndTargetTriple(const char *filename,
+                                                     const char *target_triple);
+
+  lldb::SBTarget CreateTargetWithFileAndArch(const char *filename,
+                                             const char *archname);
+
+  lldb::SBTarget CreateTarget(const char *filename);
+
+  lldb::SBTarget GetDummyTarget();
+
+  // Return true if target is deleted from the target list of the debugger.
+  bool DeleteTarget(lldb::SBTarget &target);
+
+  lldb::SBTarget GetTargetAtIndex(uint32_t idx);
+
+  uint32_t GetIndexOfTarget(lldb::SBTarget target);
+
+  lldb::SBTarget FindTargetWithProcessID(pid_t pid);
+
+  lldb::SBTarget FindTargetWithFileAndArch(const char *filename,
+                                           const char *arch);
+
+  uint32_t GetNumTargets();
+
+  lldb::SBTarget GetSelectedTarget();
+
+  void SetSelectedTarget(SBTarget &target);
+
+  lldb::SBPlatform GetSelectedPlatform();
+
+  void SetSelectedPlatform(lldb::SBPlatform &platform);
+
+  /// Get the number of currently active platforms.
+  uint32_t GetNumPlatforms();
+
+  /// Get one of the currently active platforms.
+  lldb::SBPlatform GetPlatformAtIndex(uint32_t idx);
+
+  /// Get the number of available platforms.
+  ///
+  /// The return value should match the number of entries output by the
+  /// "platform list" command.
+  uint32_t GetNumAvailablePlatforms();
+
+  /// Get the name and description of one of the available platforms.
+  ///
+  /// \param[in] idx
+  ///     Zero-based index of the platform for which info should be retrieved,
+  ///     must be less than the value returned by GetNumAvailablePlatforms().
+  lldb::SBStructuredData GetAvailablePlatformInfoAtIndex(uint32_t idx);
+
+  lldb::SBSourceManager GetSourceManager();
+
+  // REMOVE: just for a quick fix, need to expose platforms through
+  // SBPlatform from this class.
+  lldb::SBError SetCurrentPlatform(const char *platform_name);
+
+  bool SetCurrentPlatformSDKRoot(const char *sysroot);
+
+  // FIXME: Once we get the set show stuff in place, the driver won't need
+  // an interface to the Set/Get UseExternalEditor.
+  bool SetUseExternalEditor(bool input);
+
+  bool GetUseExternalEditor();
+
+  bool SetUseColor(bool use_color);
+
+  bool GetUseColor() const;
+
+  static bool GetDefaultArchitecture(char *arch_name, size_t arch_name_len);
+
+  static bool SetDefaultArchitecture(const char *arch_name);
+
+  lldb::ScriptLanguage GetScriptingLanguage(const char *script_language_name);
+
+  static const char *GetVersionString();
+
+  static const char *StateAsCString(lldb::StateType state);
+
+  static SBStructuredData GetBuildConfiguration();
+
+  static bool StateIsRunningState(lldb::StateType state);
+
+  static bool StateIsStoppedState(lldb::StateType state);
+
+  bool EnableLog(const char *channel, const char **categories);
+
+  void SetLoggingCallback(lldb::LogOutputCallback log_callback, void *baton);
+
+  // DEPRECATED
+  void DispatchInput(void *baton, const void *data, size_t data_len);
+
+  void DispatchInput(const void *data, size_t data_len);
+
+  void DispatchInputInterrupt();
+
+  void DispatchInputEndOfFile();
+
+  void PushInputReader(lldb::SBInputReader &reader);
+
+  const char *GetInstanceName();
+
+  static SBDebugger FindDebuggerWithID(int id);
+
+  static lldb::SBError SetInternalVariable(const char *var_name,
+                                           const char *value,
+                                           const char *debugger_instance_name);
+
+  static lldb::SBStringList
+  GetInternalVariableValue(const char *var_name,
+                           const char *debugger_instance_name);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  uint32_t GetTerminalWidth() const;
+
+  void SetTerminalWidth(uint32_t term_width);
+
+  lldb::user_id_t GetID();
+
+  const char *GetPrompt() const;
+
+  void SetPrompt(const char *prompt);
+
+  const char *GetReproducerPath() const;
+
+  lldb::ScriptLanguage GetScriptLanguage() const;
+
+  void SetScriptLanguage(lldb::ScriptLanguage script_lang);
+
+  bool GetCloseInputOnEOF() const;
+
+  void SetCloseInputOnEOF(bool b);
+
+  SBTypeCategory GetCategory(const char *category_name);
+
+  SBTypeCategory GetCategory(lldb::LanguageType lang_type);
+
+  SBTypeCategory CreateCategory(const char *category_name);
+
+  bool DeleteCategory(const char *category_name);
+
+  uint32_t GetNumCategories();
+
+  SBTypeCategory GetCategoryAtIndex(uint32_t);
+
+  SBTypeCategory GetDefaultCategory();
+
+  SBTypeFormat GetFormatForType(SBTypeNameSpecifier);
+
+  SBTypeSummary GetSummaryForType(SBTypeNameSpecifier);
+
+  SBTypeFilter GetFilterForType(SBTypeNameSpecifier);
+
+  SBTypeSynthetic GetSyntheticForType(SBTypeNameSpecifier);
+
+  void RunCommandInterpreter(bool auto_handle_events, bool spawn_thread);
+
+  void RunCommandInterpreter(bool auto_handle_events, bool spawn_thread,
+                             SBCommandInterpreterRunOptions &options,
+                             int &num_errors, bool &quit_requested,
+                             bool &stopped_for_crash);
+
+  SBError RunREPL(lldb::LanguageType language, const char *repl_options);
+
+private:
+  friend class SBCommandInterpreter;
+  friend class SBInputReader;
+  friend class SBListener;
+  friend class SBProcess;
+  friend class SBSourceManager;
+  friend class SBTarget;
+
+  lldb::SBTarget FindTargetWithLLDBProcess(const lldb::ProcessSP &processSP);
+
+  void reset(const lldb::DebuggerSP &debugger_sp);
+
+  lldb_private::Debugger *get() const;
+
+  lldb_private::Debugger &ref() const;
+
+  const lldb::DebuggerSP &get_sp() const;
+
+  lldb::DebuggerSP m_opaque_sp;
+
+}; // class SBDebugger
+
+} // namespace lldb
+
+#endif // LLDB_SBDebugger_h_
diff --git a/linux-x64/clang/include/lldb/API/SBDeclaration.h b/linux-x64/clang/include/lldb/API/SBDeclaration.h
new file mode 100644
index 0000000..d2b423e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBDeclaration.h
@@ -0,0 +1,71 @@
+//===-- SBDeclaration.h -------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBDeclaration_h_
+#define LLDB_SBDeclaration_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFileSpec.h"
+
+namespace lldb {
+
+class LLDB_API SBDeclaration {
+public:
+  SBDeclaration();
+
+  SBDeclaration(const lldb::SBDeclaration &rhs);
+
+  ~SBDeclaration();
+
+  const lldb::SBDeclaration &operator=(const lldb::SBDeclaration &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::SBFileSpec GetFileSpec() const;
+
+  uint32_t GetLine() const;
+
+  uint32_t GetColumn() const;
+
+  void SetFileSpec(lldb::SBFileSpec filespec);
+
+  void SetLine(uint32_t line);
+
+  void SetColumn(uint32_t column);
+
+  bool operator==(const lldb::SBDeclaration &rhs) const;
+
+  bool operator!=(const lldb::SBDeclaration &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+protected:
+  lldb_private::Declaration *get();
+
+private:
+  friend class SBValue;
+
+  const lldb_private::Declaration *operator->() const;
+
+  lldb_private::Declaration &ref();
+
+  const lldb_private::Declaration &ref() const;
+
+  SBDeclaration(const lldb_private::Declaration *lldb_object_ptr);
+
+  void SetDeclaration(const lldb_private::Declaration &lldb_object_ref);
+
+  std::unique_ptr<lldb_private::Declaration> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBDeclaration_h_
diff --git a/linux-x64/clang/include/lldb/API/SBDefines.h b/linux-x64/clang/include/lldb/API/SBDefines.h
new file mode 100644
index 0000000..838c84c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBDefines.h
@@ -0,0 +1,101 @@
+//===-- SBDefines.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBDefines_h_
+#define LLDB_SBDefines_h_
+
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+#include "lldb/lldb-versioning.h"
+
+// Forward Declarations
+namespace lldb {
+
+class LLDB_API SBAddress;
+class LLDB_API SBBlock;
+class LLDB_API SBBreakpoint;
+class LLDB_API SBBreakpointLocation;
+class LLDB_API SBBreakpointName;
+class LLDB_API SBBreakpointNameImpl;
+class LLDB_API SBBroadcaster;
+class LLDB_API SBCommand;
+class LLDB_API SBCommandInterpreter;
+class LLDB_API SBCommandInterpreterRunOptions;
+class LLDB_API SBCommandPluginInterface;
+class LLDB_API SBCommandReturnObject;
+class LLDB_API SBCommunication;
+class LLDB_API SBCompileUnit;
+class LLDB_API SBData;
+class LLDB_API SBDebugger;
+class LLDB_API SBDeclaration;
+class LLDB_API SBError;
+class LLDB_API SBEvent;
+class LLDB_API SBEventList;
+class LLDB_API SBExecutionContext;
+class LLDB_API SBExpressionOptions;
+class LLDB_API SBFileSpec;
+class LLDB_API SBFileSpecList;
+class LLDB_API SBFrame;
+class LLDB_API SBFunction;
+class LLDB_API SBHostOS;
+class LLDB_API SBInstruction;
+class LLDB_API SBInstructionList;
+class LLDB_API SBLanguageRuntime;
+class LLDB_API SBLaunchInfo;
+class LLDB_API SBLineEntry;
+class LLDB_API SBListener;
+class LLDB_API SBMemoryRegionInfo;
+class LLDB_API SBMemoryRegionInfoList;
+class LLDB_API SBModule;
+class LLDB_API SBModuleSpec;
+class LLDB_API SBModuleSpecList;
+class LLDB_API SBProcess;
+class LLDB_API SBProcessInfo;
+class LLDB_API SBQueue;
+class LLDB_API SBQueueItem;
+class LLDB_API SBSection;
+class LLDB_API SBSourceManager;
+class LLDB_API SBStream;
+class LLDB_API SBStringList;
+class LLDB_API SBStructuredData;
+class LLDB_API SBSymbol;
+class LLDB_API SBSymbolContext;
+class LLDB_API SBSymbolContextList;
+class LLDB_API SBTarget;
+class LLDB_API SBThread;
+class LLDB_API SBThreadCollection;
+class LLDB_API SBThreadPlan;
+class LLDB_API SBTrace;
+class LLDB_API SBTraceOptions;
+class LLDB_API SBType;
+class LLDB_API SBTypeCategory;
+class LLDB_API SBTypeEnumMember;
+class LLDB_API SBTypeEnumMemberList;
+class LLDB_API SBTypeFilter;
+class LLDB_API SBTypeFormat;
+class LLDB_API SBTypeMemberFunction;
+class LLDB_API SBTypeNameSpecifier;
+class LLDB_API SBTypeSummary;
+class LLDB_API SBTypeSummaryOptions;
+class LLDB_API SBTypeSynthetic;
+class LLDB_API SBTypeList;
+class LLDB_API SBValue;
+class LLDB_API SBValueList;
+class LLDB_API SBVariablesOptions;
+class LLDB_API SBWatchpoint;
+class LLDB_API SBUnixSignals;
+
+typedef bool (*SBBreakpointHitCallback)(void *baton, SBProcess &process,
+                                        SBThread &thread,
+                                        lldb::SBBreakpointLocation &location);
+}
+
+#endif // LLDB_SBDefines_h_
diff --git a/linux-x64/clang/include/lldb/API/SBError.h b/linux-x64/clang/include/lldb/API/SBError.h
new file mode 100644
index 0000000..b076f87
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBError.h
@@ -0,0 +1,92 @@
+//===-- SBError.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBError_h_
+#define LLDB_SBError_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBError {
+public:
+  SBError();
+
+  SBError(const lldb::SBError &rhs);
+
+  ~SBError();
+
+  const SBError &operator=(const lldb::SBError &rhs);
+
+  const char *GetCString() const;
+
+  void Clear();
+
+  bool Fail() const;
+
+  bool Success() const;
+
+  uint32_t GetError() const;
+
+  lldb::ErrorType GetType() const;
+
+  void SetError(uint32_t err, lldb::ErrorType type);
+
+  void SetErrorToErrno();
+
+  void SetErrorToGenericError();
+
+  void SetErrorString(const char *err_str);
+
+  int SetErrorStringWithFormat(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+protected:
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBBreakpointName;
+  friend class SBCommandReturnObject;
+  friend class SBCommunication;
+  friend class SBData;
+  friend class SBDebugger;
+  friend class SBHostOS;
+  friend class SBPlatform;
+  friend class SBProcess;
+  friend class SBReproducer;
+  friend class SBStructuredData;
+  friend class SBTarget;
+  friend class SBThread;
+  friend class SBTrace;
+  friend class SBValue;
+  friend class SBWatchpoint;
+
+  lldb_private::Status *get();
+
+  lldb_private::Status *operator->();
+
+  const lldb_private::Status &operator*() const;
+
+  lldb_private::Status &ref();
+
+  void SetError(const lldb_private::Status &lldb_error);
+
+private:
+  std::unique_ptr<lldb_private::Status> m_opaque_up;
+
+  void CreateIfNeeded();
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBError_h_
diff --git a/linux-x64/clang/include/lldb/API/SBEvent.h b/linux-x64/clang/include/lldb/API/SBEvent.h
new file mode 100644
index 0000000..d297cbe
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBEvent.h
@@ -0,0 +1,87 @@
+//===-- SBEvent.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBEvent_h_
+#define LLDB_SBEvent_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <stdio.h>
+#include <vector>
+
+namespace lldb {
+
+class SBBroadcaster;
+
+class LLDB_API SBEvent {
+public:
+  SBEvent();
+
+  SBEvent(const lldb::SBEvent &rhs);
+
+  // Make an event that contains a C string.
+  SBEvent(uint32_t event, const char *cstr, uint32_t cstr_len);
+
+  SBEvent(lldb::EventSP &event_sp);
+
+  SBEvent(lldb_private::Event *event_sp);
+
+  ~SBEvent();
+
+  const SBEvent &operator=(const lldb::SBEvent &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetDataFlavor();
+
+  uint32_t GetType() const;
+
+  lldb::SBBroadcaster GetBroadcaster() const;
+
+  const char *GetBroadcasterClass() const;
+
+  bool BroadcasterMatchesPtr(const lldb::SBBroadcaster *broadcaster);
+
+  bool BroadcasterMatchesRef(const lldb::SBBroadcaster &broadcaster);
+
+  void Clear();
+
+  static const char *GetCStringFromEvent(const lldb::SBEvent &event);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  bool GetDescription(lldb::SBStream &description) const;
+
+protected:
+  friend class SBListener;
+  friend class SBBroadcaster;
+  friend class SBBreakpoint;
+  friend class SBDebugger;
+  friend class SBProcess;
+  friend class SBTarget;
+  friend class SBThread;
+  friend class SBWatchpoint;
+
+  lldb::EventSP &GetSP() const;
+
+  void reset(lldb::EventSP &event_sp);
+
+  void reset(lldb_private::Event *event);
+
+  lldb_private::Event *get() const;
+
+private:
+  mutable lldb::EventSP m_event_sp;
+  mutable lldb_private::Event *m_opaque_ptr;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBEvent_h_
diff --git a/linux-x64/clang/include/lldb/API/SBExecutionContext.h b/linux-x64/clang/include/lldb/API/SBExecutionContext.h
new file mode 100644
index 0000000..45c0b1b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBExecutionContext.h
@@ -0,0 +1,63 @@
+//===-- SBExecutionContext.h -----------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBExecutionContext_h_
+#define LLDB_SBExecutionContext_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <stdio.h>
+#include <vector>
+
+namespace lldb {
+
+class LLDB_API SBExecutionContext {
+  friend class SBCommandInterpreter;
+
+public:
+  SBExecutionContext();
+
+  SBExecutionContext(const lldb::SBExecutionContext &rhs);
+
+  SBExecutionContext(lldb::ExecutionContextRefSP exe_ctx_ref_sp);
+
+  SBExecutionContext(const lldb::SBTarget &target);
+
+  SBExecutionContext(const lldb::SBProcess &process);
+
+  SBExecutionContext(lldb::SBThread thread); // can't be a const& because
+                                             // SBThread::get() isn't itself a
+                                             // const function
+
+  SBExecutionContext(const lldb::SBFrame &frame);
+
+  ~SBExecutionContext();
+
+  const SBExecutionContext &operator=(const lldb::SBExecutionContext &rhs);
+
+  SBTarget GetTarget() const;
+
+  SBProcess GetProcess() const;
+
+  SBThread GetThread() const;
+
+  SBFrame GetFrame() const;
+
+protected:
+  void reset(lldb::ExecutionContextRefSP &event_sp);
+
+  lldb_private::ExecutionContextRef *get() const;
+
+private:
+  mutable lldb::ExecutionContextRefSP m_exe_ctx_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBExecutionContext_h_
diff --git a/linux-x64/clang/include/lldb/API/SBExpressionOptions.h b/linux-x64/clang/include/lldb/API/SBExpressionOptions.h
new file mode 100644
index 0000000..04cd74f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBExpressionOptions.h
@@ -0,0 +1,115 @@
+//===-- SBExpressionOptions.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBExpressionOptions_h_
+#define LLDB_SBExpressionOptions_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <vector>
+
+namespace lldb {
+
+class LLDB_API SBExpressionOptions {
+public:
+  SBExpressionOptions();
+
+  SBExpressionOptions(const lldb::SBExpressionOptions &rhs);
+
+  ~SBExpressionOptions();
+
+  const SBExpressionOptions &operator=(const lldb::SBExpressionOptions &rhs);
+
+  bool GetCoerceResultToId() const;
+
+  void SetCoerceResultToId(bool coerce = true);
+
+  bool GetUnwindOnError() const;
+
+  void SetUnwindOnError(bool unwind = true);
+
+  bool GetIgnoreBreakpoints() const;
+
+  void SetIgnoreBreakpoints(bool ignore = true);
+
+  lldb::DynamicValueType GetFetchDynamicValue() const;
+
+  void SetFetchDynamicValue(
+      lldb::DynamicValueType dynamic = lldb::eDynamicCanRunTarget);
+
+  uint32_t GetTimeoutInMicroSeconds() const;
+
+  // Set the timeout for the expression, 0 means wait forever.
+  void SetTimeoutInMicroSeconds(uint32_t timeout = 0);
+
+  uint32_t GetOneThreadTimeoutInMicroSeconds() const;
+
+  // Set the timeout for running on one thread, 0 means use the default
+  // behavior. If you set this higher than the overall timeout, you'll get an
+  // error when you try to run the expression.
+  void SetOneThreadTimeoutInMicroSeconds(uint32_t timeout = 0);
+
+  bool GetTryAllThreads() const;
+
+  void SetTryAllThreads(bool run_others = true);
+
+  bool GetStopOthers() const;
+
+  void SetStopOthers(bool stop_others = true);
+
+  bool GetTrapExceptions() const;
+
+  void SetTrapExceptions(bool trap_exceptions = true);
+
+  void SetLanguage(lldb::LanguageType language);
+
+  void SetCancelCallback(lldb::ExpressionCancelCallback callback, void *baton);
+
+  bool GetGenerateDebugInfo();
+
+  void SetGenerateDebugInfo(bool b = true);
+
+  bool GetSuppressPersistentResult();
+
+  void SetSuppressPersistentResult(bool b = false);
+
+  const char *GetPrefix() const;
+
+  void SetPrefix(const char *prefix);
+
+  void SetAutoApplyFixIts(bool b = true);
+
+  bool GetAutoApplyFixIts();
+
+  bool GetTopLevel();
+
+  void SetTopLevel(bool b = true);
+
+  // Gets whether we will JIT an expression if it cannot be interpreted
+  bool GetAllowJIT();
+
+  // Sets whether we will JIT an expression if it cannot be interpreted
+  void SetAllowJIT(bool allow);
+
+protected:
+  lldb_private::EvaluateExpressionOptions *get() const;
+
+  lldb_private::EvaluateExpressionOptions &ref() const;
+
+  friend class SBFrame;
+  friend class SBValue;
+  friend class SBTarget;
+
+private:
+  // This auto_pointer is made in the constructor and is always valid.
+  mutable std::unique_ptr<lldb_private::EvaluateExpressionOptions> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBExpressionOptions_h_
diff --git a/linux-x64/clang/include/lldb/API/SBFileSpec.h b/linux-x64/clang/include/lldb/API/SBFileSpec.h
new file mode 100644
index 0000000..2714977
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBFileSpec.h
@@ -0,0 +1,95 @@
+//===-- SBFileSpec.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBFileSpec_h_
+#define LLDB_SBFileSpec_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBFileSpec {
+public:
+  SBFileSpec();
+
+  SBFileSpec(const lldb::SBFileSpec &rhs);
+
+  SBFileSpec(const char *path); // Deprecated, use SBFileSpec (const char *path,
+                                // bool resolve)
+
+  SBFileSpec(const char *path, bool resolve);
+
+  ~SBFileSpec();
+
+  const SBFileSpec &operator=(const lldb::SBFileSpec &rhs);
+
+  explicit operator bool() const;
+
+  bool operator==(const SBFileSpec &rhs) const;
+
+  bool operator!=(const SBFileSpec &rhs) const;
+
+  bool IsValid() const;
+
+  bool Exists() const;
+
+  bool ResolveExecutableLocation();
+
+  const char *GetFilename() const;
+
+  const char *GetDirectory() const;
+
+  void SetFilename(const char *filename);
+
+  void SetDirectory(const char *directory);
+
+  uint32_t GetPath(char *dst_path, size_t dst_len) const;
+
+  static int ResolvePath(const char *src_path, char *dst_path, size_t dst_len);
+
+  bool GetDescription(lldb::SBStream &description) const;
+
+  void AppendPathComponent(const char *file_or_directory);
+
+private:
+  friend class SBAttachInfo;
+  friend class SBBlock;
+  friend class SBCommandInterpreter;
+  friend class SBCompileUnit;
+  friend class SBDeclaration;
+  friend class SBFileSpecList;
+  friend class SBHostOS;
+  friend class SBLaunchInfo;
+  friend class SBLineEntry;
+  friend class SBModule;
+  friend class SBModuleSpec;
+  friend class SBPlatform;
+  friend class SBProcess;
+  friend class SBProcessInfo;
+  friend class SBSourceManager;
+  friend class SBTarget;
+  friend class SBThread;
+
+  SBFileSpec(const lldb_private::FileSpec &fspec);
+
+  void SetFileSpec(const lldb_private::FileSpec &fspec);
+
+  const lldb_private::FileSpec *operator->() const;
+
+  const lldb_private::FileSpec *get() const;
+
+  const lldb_private::FileSpec &operator*() const;
+
+  const lldb_private::FileSpec &ref() const;
+
+  std::unique_ptr<lldb_private::FileSpec> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBFileSpec_h_
diff --git a/linux-x64/clang/include/lldb/API/SBFileSpecList.h b/linux-x64/clang/include/lldb/API/SBFileSpecList.h
new file mode 100644
index 0000000..5a13150
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBFileSpecList.h
@@ -0,0 +1,57 @@
+//===-- SBFileSpecList.h --------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBFileSpecList_h_
+#define LLDB_SBFileSpecList_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBFileSpecList {
+public:
+  SBFileSpecList();
+
+  SBFileSpecList(const lldb::SBFileSpecList &rhs);
+
+  ~SBFileSpecList();
+
+  const SBFileSpecList &operator=(const lldb::SBFileSpecList &rhs);
+
+  uint32_t GetSize() const;
+
+  bool GetDescription(SBStream &description) const;
+
+  void Append(const SBFileSpec &sb_file);
+
+  bool AppendIfUnique(const SBFileSpec &sb_file);
+
+  void Clear();
+
+  uint32_t FindFileIndex(uint32_t idx, const SBFileSpec &sb_file, bool full);
+
+  const SBFileSpec GetFileSpecAtIndex(uint32_t idx) const;
+
+private:
+  friend class SBTarget;
+
+  const lldb_private::FileSpecList *operator->() const;
+
+  const lldb_private::FileSpecList *get() const;
+
+  const lldb_private::FileSpecList &operator*() const;
+
+  const lldb_private::FileSpecList &ref() const;
+
+  std::unique_ptr<lldb_private::FileSpecList> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBFileSpecList_h_
diff --git a/linux-x64/clang/include/lldb/API/SBFrame.h b/linux-x64/clang/include/lldb/API/SBFrame.h
new file mode 100644
index 0000000..b213f89
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBFrame.h
@@ -0,0 +1,205 @@
+//===-- SBFrame.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBFrame_h_
+#define LLDB_SBFrame_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBValueList.h"
+
+namespace lldb {
+
+class LLDB_API SBFrame {
+public:
+  SBFrame();
+
+  SBFrame(const lldb::SBFrame &rhs);
+
+  const lldb::SBFrame &operator=(const lldb::SBFrame &rhs);
+
+  ~SBFrame();
+
+  bool IsEqual(const lldb::SBFrame &that) const;
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  uint32_t GetFrameID() const;
+
+  lldb::addr_t GetCFA() const;
+
+  lldb::addr_t GetPC() const;
+
+  bool SetPC(lldb::addr_t new_pc);
+
+  lldb::addr_t GetSP() const;
+
+  lldb::addr_t GetFP() const;
+
+  lldb::SBAddress GetPCAddress() const;
+
+  lldb::SBSymbolContext GetSymbolContext(uint32_t resolve_scope) const;
+
+  lldb::SBModule GetModule() const;
+
+  lldb::SBCompileUnit GetCompileUnit() const;
+
+  lldb::SBFunction GetFunction() const;
+
+  lldb::SBSymbol GetSymbol() const;
+
+  /// Gets the deepest block that contains the frame PC.
+  ///
+  /// See also GetFrameBlock().
+  lldb::SBBlock GetBlock() const;
+
+  /// Get the appropriate function name for this frame. Inlined functions in
+  /// LLDB are represented by Blocks that have inlined function information, so
+  /// just looking at the SBFunction or SBSymbol for a frame isn't enough.
+  /// This function will return the appropriate function, symbol or inlined
+  /// function name for the frame.
+  ///
+  /// This function returns:
+  /// - the name of the inlined function (if there is one)
+  /// - the name of the concrete function (if there is one)
+  /// - the name of the symbol (if there is one)
+  /// - NULL
+  ///
+  /// See also IsInlined().
+  const char *GetFunctionName();
+
+  // Get an appropriate function name for this frame that is suitable for
+  // display to a user
+  const char *GetDisplayFunctionName();
+
+  const char *GetFunctionName() const;
+  
+  // Return the frame function's language.  If there isn't a function, then
+  // guess the language type from the mangled name.
+  lldb::LanguageType GuessLanguage() const;
+
+  /// Return true if this frame represents an inlined function.
+  ///
+  /// See also GetFunctionName().
+  bool IsInlined();
+
+  bool IsInlined() const;
+
+  bool IsArtificial();
+
+  bool IsArtificial() const;
+
+  /// The version that doesn't supply a 'use_dynamic' value will use the
+  /// target's default.
+  lldb::SBValue EvaluateExpression(const char *expr);
+
+  lldb::SBValue EvaluateExpression(const char *expr,
+                                   lldb::DynamicValueType use_dynamic);
+
+  lldb::SBValue EvaluateExpression(const char *expr,
+                                   lldb::DynamicValueType use_dynamic,
+                                   bool unwind_on_error);
+
+  lldb::SBValue EvaluateExpression(const char *expr,
+                                   const SBExpressionOptions &options);
+
+  /// Gets the lexical block that defines the stack frame. Another way to think
+  /// of this is it will return the block that contains all of the variables
+  /// for a stack frame. Inlined functions are represented as SBBlock objects
+  /// that have inlined function information: the name of the inlined function,
+  /// where it was called from. The block that is returned will be the first
+  /// block at or above the block for the PC (SBFrame::GetBlock()) that defines
+  /// the scope of the frame. When a function contains no inlined functions,
+  /// this will be the top most lexical block that defines the function.
+  /// When a function has inlined functions and the PC is currently
+  /// in one of those inlined functions, this method will return the inlined
+  /// block that defines this frame. If the PC isn't currently in an inlined
+  /// function, the lexical block that defines the function is returned.
+  lldb::SBBlock GetFrameBlock() const;
+
+  lldb::SBLineEntry GetLineEntry() const;
+
+  lldb::SBThread GetThread() const;
+
+  const char *Disassemble() const;
+
+  void Clear();
+
+  bool operator==(const lldb::SBFrame &rhs) const;
+
+  bool operator!=(const lldb::SBFrame &rhs) const;
+
+  /// The version that doesn't supply a 'use_dynamic' value will use the
+  /// target's default.
+  lldb::SBValueList GetVariables(bool arguments, bool locals, bool statics,
+                                 bool in_scope_only);
+
+  lldb::SBValueList GetVariables(bool arguments, bool locals, bool statics,
+                                 bool in_scope_only,
+                                 lldb::DynamicValueType use_dynamic);
+
+  lldb::SBValueList GetVariables(const lldb::SBVariablesOptions &options);
+
+  lldb::SBValueList GetRegisters();
+
+  lldb::SBValue FindRegister(const char *name);
+
+  /// The version that doesn't supply a 'use_dynamic' value will use the
+  /// target's default.
+  lldb::SBValue FindVariable(const char *var_name);
+
+  lldb::SBValue FindVariable(const char *var_name,
+                             lldb::DynamicValueType use_dynamic);
+
+  // Find a value for a variable expression path like "rect.origin.x" or
+  // "pt_ptr->x", "*self", "*this->obj_ptr". The returned value is _not_ and
+  // expression result and is not a constant object like
+  // SBFrame::EvaluateExpression(...) returns, but a child object of the
+  // variable value.
+  lldb::SBValue GetValueForVariablePath(const char *var_expr_cstr,
+                                        DynamicValueType use_dynamic);
+
+  /// The version that doesn't supply a 'use_dynamic' value will use the
+  /// target's default.
+  lldb::SBValue GetValueForVariablePath(const char *var_path);
+
+  /// Find variables, register sets, registers, or persistent variables using
+  /// the frame as the scope.
+  ///
+  /// NB. This function does not look up ivars in the function object pointer.
+  /// To do that use GetValueForVariablePath.
+  ///
+  /// The version that doesn't supply a 'use_dynamic' value will use the
+  /// target's default.
+  lldb::SBValue FindValue(const char *name, ValueType value_type);
+
+  lldb::SBValue FindValue(const char *name, ValueType value_type,
+                          lldb::DynamicValueType use_dynamic);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  SBFrame(const lldb::StackFrameSP &lldb_object_sp);
+
+protected:
+  friend class SBBlock;
+  friend class SBExecutionContext;
+  friend class SBInstruction;
+  friend class SBThread;
+  friend class SBValue;
+
+  lldb::StackFrameSP GetFrameSP() const;
+
+  void SetFrameSP(const lldb::StackFrameSP &lldb_object_sp);
+
+  lldb::ExecutionContextRefSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBFrame_h_
diff --git a/linux-x64/clang/include/lldb/API/SBFunction.h b/linux-x64/clang/include/lldb/API/SBFunction.h
new file mode 100644
index 0000000..43f01d7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBFunction.h
@@ -0,0 +1,82 @@
+//===-- SBFunction.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBFunction_h_
+#define LLDB_SBFunction_h_
+
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBInstructionList.h"
+
+namespace lldb {
+
+class LLDB_API SBFunction {
+public:
+  SBFunction();
+
+  SBFunction(const lldb::SBFunction &rhs);
+
+  const lldb::SBFunction &operator=(const lldb::SBFunction &rhs);
+
+  ~SBFunction();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetName() const;
+
+  const char *GetDisplayName() const;
+
+  const char *GetMangledName() const;
+
+  lldb::SBInstructionList GetInstructions(lldb::SBTarget target);
+
+  lldb::SBInstructionList GetInstructions(lldb::SBTarget target,
+                                          const char *flavor);
+
+  lldb::SBAddress GetStartAddress();
+
+  lldb::SBAddress GetEndAddress();
+
+  const char *GetArgumentName(uint32_t arg_idx);
+
+  uint32_t GetPrologueByteSize();
+
+  lldb::SBType GetType();
+
+  lldb::SBBlock GetBlock();
+
+  lldb::LanguageType GetLanguage();
+
+  bool GetIsOptimized();
+
+  bool operator==(const lldb::SBFunction &rhs) const;
+
+  bool operator!=(const lldb::SBFunction &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+protected:
+  lldb_private::Function *get();
+
+  void reset(lldb_private::Function *lldb_object_ptr);
+
+private:
+  friend class SBAddress;
+  friend class SBFrame;
+  friend class SBSymbolContext;
+
+  SBFunction(lldb_private::Function *lldb_object_ptr);
+
+  lldb_private::Function *m_opaque_ptr;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBFunction_h_
diff --git a/linux-x64/clang/include/lldb/API/SBHostOS.h b/linux-x64/clang/include/lldb/API/SBHostOS.h
new file mode 100644
index 0000000..ecd7920
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBHostOS.h
@@ -0,0 +1,44 @@
+//===-- SBHostOS.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBHostOS_h_
+#define LLDB_SBHostOS_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFileSpec.h"
+
+namespace lldb {
+
+class LLDB_API SBHostOS {
+public:
+  static lldb::SBFileSpec GetProgramFileSpec();
+
+  static lldb::SBFileSpec GetLLDBPythonPath();
+
+  static lldb::SBFileSpec GetLLDBPath(lldb::PathType path_type);
+
+  static lldb::SBFileSpec GetUserHomeDirectory();
+
+  static void ThreadCreated(const char *name);
+
+  static lldb::thread_t ThreadCreate(const char *name,
+                                     lldb::thread_func_t thread_function,
+                                     void *thread_arg, lldb::SBError *err);
+
+  static bool ThreadCancel(lldb::thread_t thread, lldb::SBError *err);
+
+  static bool ThreadDetach(lldb::thread_t thread, lldb::SBError *err);
+  static bool ThreadJoin(lldb::thread_t thread, lldb::thread_result_t *result,
+                         lldb::SBError *err);
+
+private:
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBHostOS_h_
diff --git a/linux-x64/clang/include/lldb/API/SBInstruction.h b/linux-x64/clang/include/lldb/API/SBInstruction.h
new file mode 100644
index 0000000..0bb5877
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBInstruction.h
@@ -0,0 +1,85 @@
+//===-- SBInstruction.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBInstruction_h_
+#define LLDB_SBInstruction_h_
+
+#include "lldb/API/SBData.h"
+#include "lldb/API/SBDefines.h"
+
+#include <stdio.h>
+
+// There's a lot to be fixed here, but need to wait for underlying insn
+// implementation to be revised & settle down first.
+
+class InstructionImpl;
+
+namespace lldb {
+
+class LLDB_API SBInstruction {
+public:
+  SBInstruction();
+
+  SBInstruction(const SBInstruction &rhs);
+
+  const SBInstruction &operator=(const SBInstruction &rhs);
+
+  ~SBInstruction();
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+  SBAddress GetAddress();
+
+  const char *GetMnemonic(lldb::SBTarget target);
+
+  const char *GetOperands(lldb::SBTarget target);
+
+  const char *GetComment(lldb::SBTarget target);
+
+  lldb::SBData GetData(lldb::SBTarget target);
+
+  size_t GetByteSize();
+
+  bool DoesBranch();
+
+  bool HasDelaySlot();
+
+  bool CanSetBreakpoint();
+
+  void Print(FILE *out);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  bool EmulateWithFrame(lldb::SBFrame &frame, uint32_t evaluate_options);
+
+  bool DumpEmulation(const char *triple); // triple is to specify the
+                                          // architecture, e.g. 'armv6' or
+                                          // 'armv7-apple-ios'
+
+  bool TestEmulation(lldb::SBStream &output_stream, const char *test_file);
+
+protected:
+  friend class SBInstructionList;
+
+  SBInstruction(const lldb::DisassemblerSP &disasm_sp,
+                const lldb::InstructionSP &inst_sp);
+
+  void SetOpaque(const lldb::DisassemblerSP &disasm_sp,
+                 const lldb::InstructionSP &inst_sp);
+
+  lldb::InstructionSP GetOpaque();
+
+private:
+  std::shared_ptr<InstructionImpl> m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBInstruction_h_
diff --git a/linux-x64/clang/include/lldb/API/SBInstructionList.h b/linux-x64/clang/include/lldb/API/SBInstructionList.h
new file mode 100644
index 0000000..4434d50
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBInstructionList.h
@@ -0,0 +1,66 @@
+//===-- SBInstructionList.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBInstructionList_h_
+#define LLDB_SBInstructionList_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <stdio.h>
+
+namespace lldb {
+
+class LLDB_API SBInstructionList {
+public:
+  SBInstructionList();
+
+  SBInstructionList(const SBInstructionList &rhs);
+
+  const SBInstructionList &operator=(const SBInstructionList &rhs);
+
+  ~SBInstructionList();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  size_t GetSize();
+
+  lldb::SBInstruction GetInstructionAtIndex(uint32_t idx);
+
+  // Returns the number of instructions between the start and end address. If
+  // canSetBreakpoint is true then the count will be the number of
+  // instructions on which a breakpoint can be set.
+  size_t GetInstructionsCount(const SBAddress &start,
+                              const SBAddress &end,
+                              bool canSetBreakpoint = false);                                   
+
+  void Clear();
+
+  void AppendInstruction(lldb::SBInstruction inst);
+
+  void Print(FILE *out);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  bool DumpEmulationForAllInstructions(const char *triple);
+
+protected:
+  friend class SBFunction;
+  friend class SBSymbol;
+  friend class SBTarget;
+
+  void SetDisassembler(const lldb::DisassemblerSP &opaque_sp);
+
+private:
+  lldb::DisassemblerSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBInstructionList_h_
diff --git a/linux-x64/clang/include/lldb/API/SBLanguageRuntime.h b/linux-x64/clang/include/lldb/API/SBLanguageRuntime.h
new file mode 100644
index 0000000..d28c441
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBLanguageRuntime.h
@@ -0,0 +1,25 @@
+//===-- SBLanguageRuntime.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBLanguageRuntime_h_
+#define LLDB_SBLanguageRuntime_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class SBLanguageRuntime {
+public:
+  static lldb::LanguageType GetLanguageTypeFromString(const char *string);
+
+  static const char *GetNameForLanguageType(lldb::LanguageType language);
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBLanguageRuntime_h_
diff --git a/linux-x64/clang/include/lldb/API/SBLaunchInfo.h b/linux-x64/clang/include/lldb/API/SBLaunchInfo.h
new file mode 100644
index 0000000..c7b381f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBLaunchInfo.h
@@ -0,0 +1,149 @@
+//===-- SBLaunchInfo.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBLaunchInfo_h_
+#define LLDB_SBLaunchInfo_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb_private {
+class SBLaunchInfoImpl;
+}
+
+namespace lldb {
+
+class SBPlatform;
+class SBTarget;
+
+class LLDB_API SBLaunchInfo {
+public:
+  SBLaunchInfo(const char **argv);
+
+  ~SBLaunchInfo();
+
+  lldb::pid_t GetProcessID();
+
+  uint32_t GetUserID();
+
+  uint32_t GetGroupID();
+
+  bool UserIDIsValid();
+
+  bool GroupIDIsValid();
+
+  void SetUserID(uint32_t uid);
+
+  void SetGroupID(uint32_t gid);
+
+  SBFileSpec GetExecutableFile();
+
+  /// Set the executable file that will be used to launch the process and
+  /// optionally set it as the first argument in the argument vector.
+  ///
+  /// This only needs to be specified if clients wish to carefully control
+  /// the exact path will be used to launch a binary. If you create a
+  /// target with a symlink, that symlink will get resolved in the target
+  /// and the resolved path will get used to launch the process. Calling
+  /// this function can help you still launch your process using the
+  /// path of your choice.
+  ///
+  /// If this function is not called prior to launching with
+  /// SBTarget::Launch(...), the target will use the resolved executable
+  /// path that was used to create the target.
+  ///
+  /// \param[in] exe_file
+  ///     The override path to use when launching the executable.
+  ///
+  /// \param[in] add_as_first_arg
+  ///     If true, then the path will be inserted into the argument vector
+  ///     prior to launching. Otherwise the argument vector will be left
+  ///     alone.
+  void SetExecutableFile(SBFileSpec exe_file, bool add_as_first_arg);
+
+  /// Get the listener that will be used to receive process events.
+  ///
+  /// If no listener has been set via a call to
+  /// SBLaunchInfo::SetListener(), then an invalid SBListener will be
+  /// returned (SBListener::IsValid() will return false). If a listener
+  /// has been set, then the valid listener object will be returned.
+  SBListener GetListener();
+
+  /// Set the listener that will be used to receive process events.
+  ///
+  /// By default the SBDebugger, which has a listener, that the SBTarget
+  /// belongs to will listen for the process events. Calling this function
+  /// allows a different listener to be used to listen for process events.
+  void SetListener(SBListener &listener);
+
+  uint32_t GetNumArguments();
+
+  const char *GetArgumentAtIndex(uint32_t idx);
+
+  void SetArguments(const char **argv, bool append);
+
+  uint32_t GetNumEnvironmentEntries();
+
+  const char *GetEnvironmentEntryAtIndex(uint32_t idx);
+
+  void SetEnvironmentEntries(const char **envp, bool append);
+
+  void Clear();
+
+  const char *GetWorkingDirectory() const;
+
+  void SetWorkingDirectory(const char *working_dir);
+
+  uint32_t GetLaunchFlags();
+
+  void SetLaunchFlags(uint32_t flags);
+
+  const char *GetProcessPluginName();
+
+  void SetProcessPluginName(const char *plugin_name);
+
+  const char *GetShell();
+
+  void SetShell(const char *path);
+
+  bool GetShellExpandArguments();
+
+  void SetShellExpandArguments(bool expand);
+
+  uint32_t GetResumeCount();
+
+  void SetResumeCount(uint32_t c);
+
+  bool AddCloseFileAction(int fd);
+
+  bool AddDuplicateFileAction(int fd, int dup_fd);
+
+  bool AddOpenFileAction(int fd, const char *path, bool read, bool write);
+
+  bool AddSuppressFileAction(int fd, bool read, bool write);
+
+  void SetLaunchEventData(const char *data);
+
+  const char *GetLaunchEventData() const;
+
+  bool GetDetachOnError() const;
+
+  void SetDetachOnError(bool enable);
+
+protected:
+  friend class SBPlatform;
+  friend class SBTarget;
+
+  const lldb_private::ProcessLaunchInfo &ref() const;
+  void set_ref(const lldb_private::ProcessLaunchInfo &info);
+
+  std::shared_ptr<lldb_private::SBLaunchInfoImpl> m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBLaunchInfo_h_
diff --git a/linux-x64/clang/include/lldb/API/SBLineEntry.h b/linux-x64/clang/include/lldb/API/SBLineEntry.h
new file mode 100644
index 0000000..855c28d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBLineEntry.h
@@ -0,0 +1,78 @@
+//===-- SBLineEntry.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBLineEntry_h_
+#define LLDB_SBLineEntry_h_
+
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFileSpec.h"
+
+namespace lldb {
+
+class LLDB_API SBLineEntry {
+public:
+  SBLineEntry();
+
+  SBLineEntry(const lldb::SBLineEntry &rhs);
+
+  ~SBLineEntry();
+
+  const lldb::SBLineEntry &operator=(const lldb::SBLineEntry &rhs);
+
+  lldb::SBAddress GetStartAddress() const;
+
+  lldb::SBAddress GetEndAddress() const;
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::SBFileSpec GetFileSpec() const;
+
+  uint32_t GetLine() const;
+
+  uint32_t GetColumn() const;
+
+  void SetFileSpec(lldb::SBFileSpec filespec);
+
+  void SetLine(uint32_t line);
+
+  void SetColumn(uint32_t column);
+
+  bool operator==(const lldb::SBLineEntry &rhs) const;
+
+  bool operator!=(const lldb::SBLineEntry &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+protected:
+  lldb_private::LineEntry *get();
+
+private:
+  friend class SBAddress;
+  friend class SBCompileUnit;
+  friend class SBFrame;
+  friend class SBSymbolContext;
+
+  const lldb_private::LineEntry *operator->() const;
+
+  lldb_private::LineEntry &ref();
+
+  const lldb_private::LineEntry &ref() const;
+
+  SBLineEntry(const lldb_private::LineEntry *lldb_object_ptr);
+
+  void SetLineEntry(const lldb_private::LineEntry &lldb_object_ref);
+
+  std::unique_ptr<lldb_private::LineEntry> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBLineEntry_h_
diff --git a/linux-x64/clang/include/lldb/API/SBListener.h b/linux-x64/clang/include/lldb/API/SBListener.h
new file mode 100644
index 0000000..21aface
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBListener.h
@@ -0,0 +1,108 @@
+//===-- SBListener.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBListener_h_
+#define LLDB_SBListener_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBListener {
+public:
+  SBListener();
+
+  SBListener(const char *name);
+
+  SBListener(const SBListener &rhs);
+
+  ~SBListener();
+
+  const lldb::SBListener &operator=(const lldb::SBListener &rhs);
+
+  void AddEvent(const lldb::SBEvent &event);
+
+  void Clear();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  uint32_t StartListeningForEventClass(SBDebugger &debugger,
+                                       const char *broadcaster_class,
+                                       uint32_t event_mask);
+
+  bool StopListeningForEventClass(SBDebugger &debugger,
+                                  const char *broadcaster_class,
+                                  uint32_t event_mask);
+
+  uint32_t StartListeningForEvents(const lldb::SBBroadcaster &broadcaster,
+                                   uint32_t event_mask);
+
+  bool StopListeningForEvents(const lldb::SBBroadcaster &broadcaster,
+                              uint32_t event_mask);
+
+  // Returns true if an event was received, false if we timed out.
+  bool WaitForEvent(uint32_t num_seconds, lldb::SBEvent &event);
+
+  bool WaitForEventForBroadcaster(uint32_t num_seconds,
+                                  const lldb::SBBroadcaster &broadcaster,
+                                  lldb::SBEvent &sb_event);
+
+  bool WaitForEventForBroadcasterWithType(
+      uint32_t num_seconds, const lldb::SBBroadcaster &broadcaster,
+      uint32_t event_type_mask, lldb::SBEvent &sb_event);
+
+  bool PeekAtNextEvent(lldb::SBEvent &sb_event);
+
+  bool PeekAtNextEventForBroadcaster(const lldb::SBBroadcaster &broadcaster,
+                                     lldb::SBEvent &sb_event);
+
+  bool
+  PeekAtNextEventForBroadcasterWithType(const lldb::SBBroadcaster &broadcaster,
+                                        uint32_t event_type_mask,
+                                        lldb::SBEvent &sb_event);
+
+  bool GetNextEvent(lldb::SBEvent &sb_event);
+
+  bool GetNextEventForBroadcaster(const lldb::SBBroadcaster &broadcaster,
+                                  lldb::SBEvent &sb_event);
+
+  bool
+  GetNextEventForBroadcasterWithType(const lldb::SBBroadcaster &broadcaster,
+                                     uint32_t event_type_mask,
+                                     lldb::SBEvent &sb_event);
+
+  bool HandleBroadcastEvent(const lldb::SBEvent &event);
+
+protected:
+  friend class SBAttachInfo;
+  friend class SBBroadcaster;
+  friend class SBCommandInterpreter;
+  friend class SBDebugger;
+  friend class SBLaunchInfo;
+  friend class SBTarget;
+
+  SBListener(const lldb::ListenerSP &listener_sp);
+
+  lldb::ListenerSP GetSP();
+
+private:
+  lldb_private::Listener *operator->() const;
+
+  lldb_private::Listener *get() const;
+
+  void reset(lldb::ListenerSP listener_sp);
+
+  lldb::ListenerSP m_opaque_sp;
+  lldb_private::Listener *m_unused_ptr;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBListener_h_
diff --git a/linux-x64/clang/include/lldb/API/SBMemoryRegionInfo.h b/linux-x64/clang/include/lldb/API/SBMemoryRegionInfo.h
new file mode 100644
index 0000000..2a9ae94
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBMemoryRegionInfo.h
@@ -0,0 +1,98 @@
+//===-- SBMemoryRegionInfo.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBMemoryRegionInfo_h_
+#define LLDB_SBMemoryRegionInfo_h_
+
+#include "lldb/API/SBData.h"
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBMemoryRegionInfo {
+public:
+  SBMemoryRegionInfo();
+
+  SBMemoryRegionInfo(const lldb::SBMemoryRegionInfo &rhs);
+
+  ~SBMemoryRegionInfo();
+
+  const lldb::SBMemoryRegionInfo &
+  operator=(const lldb::SBMemoryRegionInfo &rhs);
+
+  void Clear();
+
+  /// Get the base address of this memory range.
+  ///
+  /// \return
+  ///     The base address of this memory range.
+  lldb::addr_t GetRegionBase();
+
+  /// Get the end address of this memory range.
+  ///
+  /// \return
+  ///     The base address of this memory range.
+  lldb::addr_t GetRegionEnd();
+
+  /// Check if this memory address is marked readable to the process.
+  ///
+  /// \return
+  ///     true if this memory address is marked readable
+  bool IsReadable();
+
+  /// Check if this memory address is marked writable to the process.
+  ///
+  /// \return
+  ///     true if this memory address is marked writable
+  bool IsWritable();
+
+  /// Check if this memory address is marked executable to the process.
+  ///
+  /// \return
+  ///     true if this memory address is marked executable
+  bool IsExecutable();
+
+  /// Check if this memory address is mapped into the process address
+  /// space.
+  ///
+  /// \return
+  ///     true if this memory address is in the process address space.
+  bool IsMapped();
+
+  /// Returns the name of the memory region mapped at the given
+  /// address.
+  ///
+  /// \return
+  ///     In case of memory mapped files it is the absolute path of
+  ///     the file otherwise it is a name associated with the memory
+  ///     region. If no name can be determined the returns nullptr.
+  const char *GetName();
+
+  bool operator==(const lldb::SBMemoryRegionInfo &rhs) const;
+
+  bool operator!=(const lldb::SBMemoryRegionInfo &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+private:
+  friend class SBProcess;
+  friend class SBMemoryRegionInfoList;
+
+  lldb_private::MemoryRegionInfo &ref();
+
+  const lldb_private::MemoryRegionInfo &ref() const;
+
+  // Unused.
+  SBMemoryRegionInfo(const lldb_private::MemoryRegionInfo *lldb_object_ptr);
+
+  lldb::MemoryRegionInfoUP m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBMemoryRegionInfo_h_
diff --git a/linux-x64/clang/include/lldb/API/SBMemoryRegionInfoList.h b/linux-x64/clang/include/lldb/API/SBMemoryRegionInfoList.h
new file mode 100644
index 0000000..5592efe
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBMemoryRegionInfoList.h
@@ -0,0 +1,55 @@
+//===-- SBMemoryRegionInfoList.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBMemoryRegionInfoList_h_
+#define LLDB_SBMemoryRegionInfoList_h_
+
+#include "lldb/API/SBDefines.h"
+
+class MemoryRegionInfoListImpl;
+
+namespace lldb {
+
+class LLDB_API SBMemoryRegionInfoList {
+public:
+  SBMemoryRegionInfoList();
+
+  SBMemoryRegionInfoList(const lldb::SBMemoryRegionInfoList &rhs);
+
+  const SBMemoryRegionInfoList &operator=(const SBMemoryRegionInfoList &rhs);
+
+  ~SBMemoryRegionInfoList();
+
+  uint32_t GetSize() const;
+
+  bool GetMemoryRegionAtIndex(uint32_t idx, SBMemoryRegionInfo &region_info);
+
+  void Append(lldb::SBMemoryRegionInfo &region);
+
+  void Append(lldb::SBMemoryRegionInfoList &region_list);
+
+  void Clear();
+
+protected:
+  const MemoryRegionInfoListImpl *operator->() const;
+
+  const MemoryRegionInfoListImpl &operator*() const;
+
+private:
+  friend class SBProcess;
+
+  lldb_private::MemoryRegionInfos &ref();
+
+  const lldb_private::MemoryRegionInfos &ref() const;
+
+  std::unique_ptr<MemoryRegionInfoListImpl> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBMemoryRegionInfoList_h_
diff --git a/linux-x64/clang/include/lldb/API/SBModule.h b/linux-x64/clang/include/lldb/API/SBModule.h
new file mode 100644
index 0000000..d2b6a18
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBModule.h
@@ -0,0 +1,309 @@
+//===-- SBModule.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBModule_h_
+#define LLDB_SBModule_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBError.h"
+#include "lldb/API/SBSection.h"
+#include "lldb/API/SBSymbolContext.h"
+#include "lldb/API/SBValueList.h"
+
+namespace lldb {
+
+class LLDB_API SBModule {
+public:
+  SBModule();
+
+  SBModule(const SBModule &rhs);
+
+  SBModule(const SBModuleSpec &module_spec);
+
+  const SBModule &operator=(const SBModule &rhs);
+
+  SBModule(lldb::SBProcess &process, lldb::addr_t header_addr);
+
+  ~SBModule();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  /// Get const accessor for the module file specification.
+  ///
+  /// This function returns the file for the module on the host system
+  /// that is running LLDB. This can differ from the path on the
+  /// platform since we might be doing remote debugging.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  lldb::SBFileSpec GetFileSpec() const;
+
+  /// Get accessor for the module platform file specification.
+  ///
+  /// Platform file refers to the path of the module as it is known on
+  /// the remote system on which it is being debugged. For local
+  /// debugging this is always the same as Module::GetFileSpec(). But
+  /// remote debugging might mention a file '/usr/lib/liba.dylib'
+  /// which might be locally downloaded and cached. In this case the
+  /// platform file could be something like:
+  /// '/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib'
+  /// The file could also be cached in a local developer kit directory.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  lldb::SBFileSpec GetPlatformFileSpec() const;
+
+  bool SetPlatformFileSpec(const lldb::SBFileSpec &platform_file);
+
+  /// Get accessor for the remote install path for a module.
+  ///
+  /// When debugging to a remote platform by connecting to a remote
+  /// platform, the install path of the module can be set. If the
+  /// install path is set, every time the process is about to launch
+  /// the target will install this module on the remote platform prior
+  /// to launching.
+  ///
+  /// \return
+  ///     A file specification object.
+  lldb::SBFileSpec GetRemoteInstallFileSpec();
+
+  /// Set accessor for the remote install path for a module.
+  ///
+  /// When debugging to a remote platform by connecting to a remote
+  /// platform, the install path of the module can be set. If the
+  /// install path is set, every time the process is about to launch
+  /// the target will install this module on the remote platform prior
+  /// to launching.
+  ///
+  /// If \a file specifies a full path to an install location, the
+  /// module will be installed to this path. If the path is relative
+  /// (no directory specified, or the path is partial like "usr/lib"
+  /// or "./usr/lib", then the install path will be resolved using
+  /// the platform's current working directory as the base path.
+  ///
+  /// \param[in] file
+  ///     A file specification object.
+  bool SetRemoteInstallFileSpec(lldb::SBFileSpec &file);
+
+  lldb::ByteOrder GetByteOrder();
+
+  uint32_t GetAddressByteSize();
+
+  const char *GetTriple();
+
+  const uint8_t *GetUUIDBytes() const;
+
+  const char *GetUUIDString() const;
+
+  bool operator==(const lldb::SBModule &rhs) const;
+
+  bool operator!=(const lldb::SBModule &rhs) const;
+
+  lldb::SBSection FindSection(const char *sect_name);
+
+  lldb::SBAddress ResolveFileAddress(lldb::addr_t vm_addr);
+
+  lldb::SBSymbolContext
+  ResolveSymbolContextForAddress(const lldb::SBAddress &addr,
+                                 uint32_t resolve_scope);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  uint32_t GetNumCompileUnits();
+
+  lldb::SBCompileUnit GetCompileUnitAtIndex(uint32_t);
+
+  /// Find compile units related to *this module and passed source
+  /// file.
+  ///
+  /// \param[in] sb_file_spec
+  ///     A lldb::SBFileSpec object that contains source file
+  ///     specification.
+  ///
+  /// \return
+  ///     A lldb::SBSymbolContextList that gets filled in with all of
+  ///     the symbol contexts for all the matches.
+  lldb::SBSymbolContextList
+  FindCompileUnits(const lldb::SBFileSpec &sb_file_spec);
+
+  size_t GetNumSymbols();
+
+  lldb::SBSymbol GetSymbolAtIndex(size_t idx);
+
+  lldb::SBSymbol FindSymbol(const char *name,
+                            lldb::SymbolType type = eSymbolTypeAny);
+
+  lldb::SBSymbolContextList FindSymbols(const char *name,
+                                        lldb::SymbolType type = eSymbolTypeAny);
+
+  size_t GetNumSections();
+
+  lldb::SBSection GetSectionAtIndex(size_t idx);
+  /// Find functions by name.
+  ///
+  /// \param[in] name
+  ///     The name of the function we are looking for.
+  ///
+  /// \param[in] name_type_mask
+  ///     A logical OR of one or more FunctionNameType enum bits that
+  ///     indicate what kind of names should be used when doing the
+  ///     lookup. Bits include fully qualified names, base names,
+  ///     C++ methods, or ObjC selectors.
+  ///     See FunctionNameType for more details.
+  ///
+  /// \return
+  ///     A lldb::SBSymbolContextList that gets filled in with all of
+  ///     the symbol contexts for all the matches.
+  lldb::SBSymbolContextList
+  FindFunctions(const char *name,
+                uint32_t name_type_mask = lldb::eFunctionNameTypeAny);
+
+  /// Find global and static variables by name.
+  ///
+  /// \param[in] target
+  ///     A valid SBTarget instance representing the debuggee.
+  ///
+  /// \param[in] name
+  ///     The name of the global or static variable we are looking
+  ///     for.
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a max_matches.
+  ///
+  /// \return
+  ///     A list of matched variables in an SBValueList.
+  lldb::SBValueList FindGlobalVariables(lldb::SBTarget &target,
+                                        const char *name, uint32_t max_matches);
+
+  /// Find the first global (or static) variable by name.
+  ///
+  /// \param[in] target
+  ///     A valid SBTarget instance representing the debuggee.
+  ///
+  /// \param[in] name
+  ///     The name of the global or static variable we are looking
+  ///     for.
+  ///
+  /// \return
+  ///     An SBValue that gets filled in with the found variable (if any).
+  lldb::SBValue FindFirstGlobalVariable(lldb::SBTarget &target,
+                                        const char *name);
+
+  lldb::SBType FindFirstType(const char *name);
+
+  lldb::SBTypeList FindTypes(const char *type);
+
+  /// Get a type using its type ID.
+  ///
+  /// Each symbol file reader will assign different user IDs to their
+  /// types, but it is sometimes useful when debugging type issues to
+  /// be able to grab a type using its type ID.
+  ///
+  /// For DWARF debug info, the type ID is the DIE offset.
+  ///
+  /// \param[in] uid
+  ///     The type user ID.
+  ///
+  /// \return
+  ///     An SBType for the given type ID, or an empty SBType if the
+  ///     type was not found.
+  lldb::SBType GetTypeByID(lldb::user_id_t uid);
+
+  lldb::SBType GetBasicType(lldb::BasicType type);
+
+  /// Get all types matching \a type_mask from debug info in this
+  /// module.
+  ///
+  /// \param[in] type_mask
+  ///     A bitfield that consists of one or more bits logically OR'ed
+  ///     together from the lldb::TypeClass enumeration. This allows
+  ///     you to request only structure types, or only class, struct
+  ///     and union types. Passing in lldb::eTypeClassAny will return
+  ///     all types found in the debug information for this module.
+  ///
+  /// \return
+  ///     A list of types in this module that match \a type_mask
+  lldb::SBTypeList GetTypes(uint32_t type_mask = lldb::eTypeClassAny);
+
+  /// Get the module version numbers.
+  ///
+  /// Many object files have a set of version numbers that describe
+  /// the version of the executable or shared library. Typically there
+  /// are major, minor and build, but there may be more. This function
+  /// will extract the versions from object files if they are available.
+  ///
+  /// If \a versions is NULL, or if \a num_versions is 0, the return
+  /// value will indicate how many version numbers are available in
+  /// this object file. Then a subsequent call can be made to this
+  /// function with a value of \a versions and \a num_versions that
+  /// has enough storage to store some or all version numbers.
+  ///
+  /// \param[out] versions
+  ///     A pointer to an array of uint32_t types that is \a num_versions
+  ///     long. If this value is NULL, the return value will indicate
+  ///     how many version numbers are required for a subsequent call
+  ///     to this function so that all versions can be retrieved. If
+  ///     the value is non-NULL, then at most \a num_versions of the
+  ///     existing versions numbers will be filled into \a versions.
+  ///     If there is no version information available, \a versions
+  ///     will be filled with \a num_versions UINT32_MAX values
+  ///     and zero will be returned.
+  ///
+  /// \param[in] num_versions
+  ///     The maximum number of entries to fill into \a versions. If
+  ///     this value is zero, then the return value will indicate
+  ///     how many version numbers there are in total so another call
+  ///     to this function can be make with adequate storage in
+  ///     \a versions to get all of the version numbers. If \a
+  ///     num_versions is less than the actual number of version
+  ///     numbers in this object file, only \a num_versions will be
+  ///     filled into \a versions (if \a versions is non-NULL).
+  ///
+  /// \return
+  ///     This function always returns the number of version numbers
+  ///     that this object file has regardless of the number of
+  ///     version numbers that were copied into \a versions.
+  uint32_t GetVersion(uint32_t *versions, uint32_t num_versions);
+
+  /// Get accessor for the symbol file specification.
+  ///
+  /// When debugging an object file an additional debug information can
+  /// be provided in separate file. Therefore if you debugging something
+  /// like '/usr/lib/liba.dylib' then debug information can be located
+  /// in folder like '/usr/lib/liba.dylib.dSYM/'.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  lldb::SBFileSpec GetSymbolFileSpec() const;
+
+  lldb::SBAddress GetObjectFileHeaderAddress() const;
+  lldb::SBAddress GetObjectFileEntryPointAddress() const;
+
+private:
+  friend class SBAddress;
+  friend class SBFrame;
+  friend class SBSection;
+  friend class SBSymbolContext;
+  friend class SBTarget;
+
+  explicit SBModule(const lldb::ModuleSP &module_sp);
+
+  ModuleSP GetSP() const;
+
+  void SetSP(const ModuleSP &module_sp);
+
+  lldb::ModuleSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBModule_h_
diff --git a/linux-x64/clang/include/lldb/API/SBModuleSpec.h b/linux-x64/clang/include/lldb/API/SBModuleSpec.h
new file mode 100644
index 0000000..29b3117
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBModuleSpec.h
@@ -0,0 +1,122 @@
+//===-- SBModuleSpec.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBModuleSpec_h_
+#define LLDB_SBModuleSpec_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFileSpec.h"
+
+namespace lldb {
+
+class LLDB_API SBModuleSpec {
+public:
+  SBModuleSpec();
+
+  SBModuleSpec(const SBModuleSpec &rhs);
+
+  ~SBModuleSpec();
+
+  const SBModuleSpec &operator=(const SBModuleSpec &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  /// Get const accessor for the module file.
+  ///
+  /// This function returns the file for the module on the host system
+  /// that is running LLDB. This can differ from the path on the
+  /// platform since we might be doing remote debugging.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  lldb::SBFileSpec GetFileSpec();
+
+  void SetFileSpec(const lldb::SBFileSpec &fspec);
+
+  /// Get accessor for the module platform file.
+  ///
+  /// Platform file refers to the path of the module as it is known on
+  /// the remote system on which it is being debugged. For local
+  /// debugging this is always the same as Module::GetFileSpec(). But
+  /// remote debugging might mention a file '/usr/lib/liba.dylib'
+  /// which might be locally downloaded and cached. In this case the
+  /// platform file could be something like:
+  /// '/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib'
+  /// The file could also be cached in a local developer kit directory.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  lldb::SBFileSpec GetPlatformFileSpec();
+
+  void SetPlatformFileSpec(const lldb::SBFileSpec &fspec);
+
+  lldb::SBFileSpec GetSymbolFileSpec();
+
+  void SetSymbolFileSpec(const lldb::SBFileSpec &fspec);
+
+  const char *GetObjectName();
+
+  void SetObjectName(const char *name);
+
+  const char *GetTriple();
+
+  void SetTriple(const char *triple);
+
+  const uint8_t *GetUUIDBytes();
+
+  size_t GetUUIDLength();
+
+  bool SetUUIDBytes(const uint8_t *uuid, size_t uuid_len);
+
+  bool GetDescription(lldb::SBStream &description);
+
+private:
+  friend class SBModuleSpecList;
+  friend class SBModule;
+  friend class SBTarget;
+
+  std::unique_ptr<lldb_private::ModuleSpec> m_opaque_up;
+};
+
+class SBModuleSpecList {
+public:
+  SBModuleSpecList();
+
+  SBModuleSpecList(const SBModuleSpecList &rhs);
+
+  ~SBModuleSpecList();
+
+  SBModuleSpecList &operator=(const SBModuleSpecList &rhs);
+
+  static SBModuleSpecList GetModuleSpecifications(const char *path);
+
+  void Append(const SBModuleSpec &spec);
+
+  void Append(const SBModuleSpecList &spec_list);
+
+  SBModuleSpec FindFirstMatchingSpec(const SBModuleSpec &match_spec);
+
+  SBModuleSpecList FindMatchingSpecs(const SBModuleSpec &match_spec);
+
+  size_t GetSize();
+
+  SBModuleSpec GetSpecAtIndex(size_t i);
+
+  bool GetDescription(lldb::SBStream &description);
+
+private:
+  std::unique_ptr<lldb_private::ModuleSpecList> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBModuleSpec_h_
diff --git a/linux-x64/clang/include/lldb/API/SBPlatform.h b/linux-x64/clang/include/lldb/API/SBPlatform.h
new file mode 100644
index 0000000..7207b2e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBPlatform.h
@@ -0,0 +1,166 @@
+//===-- SBPlatform.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBPlatform_h_
+#define LLDB_SBPlatform_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <functional>
+
+struct PlatformConnectOptions;
+struct PlatformShellCommand;
+
+namespace lldb {
+
+class SBLaunchInfo;
+
+class LLDB_API SBPlatformConnectOptions {
+public:
+  SBPlatformConnectOptions(const char *url);
+
+  SBPlatformConnectOptions(const SBPlatformConnectOptions &rhs);
+
+  ~SBPlatformConnectOptions();
+
+  void operator=(const SBPlatformConnectOptions &rhs);
+
+  const char *GetURL();
+
+  void SetURL(const char *url);
+
+  bool GetRsyncEnabled();
+
+  void EnableRsync(const char *options, const char *remote_path_prefix,
+                   bool omit_remote_hostname);
+
+  void DisableRsync();
+
+  const char *GetLocalCacheDirectory();
+
+  void SetLocalCacheDirectory(const char *path);
+
+protected:
+  PlatformConnectOptions *m_opaque_ptr;
+};
+
+class LLDB_API SBPlatformShellCommand {
+public:
+  SBPlatformShellCommand(const char *shell_command);
+
+  SBPlatformShellCommand(const SBPlatformShellCommand &rhs);
+
+  ~SBPlatformShellCommand();
+
+  void Clear();
+
+  const char *GetCommand();
+
+  void SetCommand(const char *shell_command);
+
+  const char *GetWorkingDirectory();
+
+  void SetWorkingDirectory(const char *path);
+
+  uint32_t GetTimeoutSeconds();
+
+  void SetTimeoutSeconds(uint32_t sec);
+
+  int GetSignal();
+
+  int GetStatus();
+
+  const char *GetOutput();
+
+protected:
+  friend class SBPlatform;
+
+  PlatformShellCommand *m_opaque_ptr;
+};
+
+class LLDB_API SBPlatform {
+public:
+  SBPlatform();
+
+  SBPlatform(const char *platform_name);
+
+  ~SBPlatform();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  const char *GetWorkingDirectory();
+
+  bool SetWorkingDirectory(const char *path);
+
+  const char *GetName();
+
+  SBError ConnectRemote(SBPlatformConnectOptions &connect_options);
+
+  void DisconnectRemote();
+
+  bool IsConnected();
+
+  // The following functions will work if the platform is connected
+  const char *GetTriple();
+
+  const char *GetHostname();
+
+  const char *GetOSBuild();
+
+  const char *GetOSDescription();
+
+  uint32_t GetOSMajorVersion();
+
+  uint32_t GetOSMinorVersion();
+
+  uint32_t GetOSUpdateVersion();
+
+  SBError Put(SBFileSpec &src, SBFileSpec &dst);
+
+  SBError Get(SBFileSpec &src, SBFileSpec &dst);
+
+  SBError Install(SBFileSpec &src, SBFileSpec &dst);
+
+  SBError Run(SBPlatformShellCommand &shell_command);
+
+  SBError Launch(SBLaunchInfo &launch_info);
+
+  SBError Kill(const lldb::pid_t pid);
+
+  SBError
+  MakeDirectory(const char *path,
+                uint32_t file_permissions = eFilePermissionsDirectoryDefault);
+
+  uint32_t GetFilePermissions(const char *path);
+
+  SBError SetFilePermissions(const char *path, uint32_t file_permissions);
+
+  SBUnixSignals GetUnixSignals() const;
+
+protected:
+  friend class SBDebugger;
+  friend class SBTarget;
+
+  lldb::PlatformSP GetSP() const;
+
+  void SetSP(const lldb::PlatformSP &platform_sp);
+
+  SBError ExecuteConnected(
+      const std::function<lldb_private::Status(const lldb::PlatformSP &)>
+          &func);
+
+  lldb::PlatformSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBPlatform_h_
diff --git a/linux-x64/clang/include/lldb/API/SBProcess.h b/linux-x64/clang/include/lldb/API/SBProcess.h
new file mode 100644
index 0000000..863cb3c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBProcess.h
@@ -0,0 +1,415 @@
+//===-- SBProcess.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBProcess_h_
+#define LLDB_SBProcess_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBError.h"
+#include "lldb/API/SBProcessInfo.h"
+#include "lldb/API/SBQueue.h"
+#include "lldb/API/SBTarget.h"
+#include <stdio.h>
+
+namespace lldb {
+
+class SBEvent;
+
+class LLDB_API SBProcess {
+public:
+  /// Broadcaster event bits definitions.
+  FLAGS_ANONYMOUS_ENUM(){eBroadcastBitStateChanged = (1 << 0),
+                         eBroadcastBitInterrupt = (1 << 1),
+                         eBroadcastBitSTDOUT = (1 << 2),
+                         eBroadcastBitSTDERR = (1 << 3),
+                         eBroadcastBitProfileData = (1 << 4),
+                         eBroadcastBitStructuredData = (1 << 5)};
+
+  SBProcess();
+
+  SBProcess(const lldb::SBProcess &rhs);
+
+  const lldb::SBProcess &operator=(const lldb::SBProcess &rhs);
+
+  SBProcess(const lldb::ProcessSP &process_sp);
+
+  ~SBProcess();
+
+  static const char *GetBroadcasterClassName();
+
+  const char *GetPluginName();
+
+  // DEPRECATED: use GetPluginName()
+  const char *GetShortPluginName();
+
+  void Clear();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::SBTarget GetTarget() const;
+
+  lldb::ByteOrder GetByteOrder() const;
+
+  size_t PutSTDIN(const char *src, size_t src_len);
+
+  size_t GetSTDOUT(char *dst, size_t dst_len) const;
+
+  size_t GetSTDERR(char *dst, size_t dst_len) const;
+
+  size_t GetAsyncProfileData(char *dst, size_t dst_len) const;
+
+  void ReportEventState(const lldb::SBEvent &event, FILE *out) const;
+
+  void AppendEventStateReport(const lldb::SBEvent &event,
+                              lldb::SBCommandReturnObject &result);
+
+  /// Remote connection related functions. These will fail if the
+  /// process is not in eStateConnected. They are intended for use
+  /// when connecting to an externally managed debugserver instance.
+  bool RemoteAttachToProcessWithID(lldb::pid_t pid, lldb::SBError &error);
+
+  bool RemoteLaunch(char const **argv, char const **envp,
+                    const char *stdin_path, const char *stdout_path,
+                    const char *stderr_path, const char *working_directory,
+                    uint32_t launch_flags, bool stop_at_entry,
+                    lldb::SBError &error);
+
+  // Thread related functions
+  uint32_t GetNumThreads();
+
+  lldb::SBThread GetThreadAtIndex(size_t index);
+
+  lldb::SBThread GetThreadByID(lldb::tid_t sb_thread_id);
+
+  lldb::SBThread GetThreadByIndexID(uint32_t index_id);
+
+  lldb::SBThread GetSelectedThread() const;
+
+  // Function for lazily creating a thread using the current OS plug-in. This
+  // function will be removed in the future when there are APIs to create
+  // SBThread objects through the interface and add them to the process through
+  // the SBProcess API.
+  lldb::SBThread CreateOSPluginThread(lldb::tid_t tid, lldb::addr_t context);
+
+  bool SetSelectedThread(const lldb::SBThread &thread);
+
+  bool SetSelectedThreadByID(lldb::tid_t tid);
+
+  bool SetSelectedThreadByIndexID(uint32_t index_id);
+
+  // Queue related functions
+  uint32_t GetNumQueues();
+
+  lldb::SBQueue GetQueueAtIndex(size_t index);
+
+  // Stepping related functions
+
+  lldb::StateType GetState();
+
+  int GetExitStatus();
+
+  const char *GetExitDescription();
+
+  /// Gets the process ID
+  ///
+  /// Returns the process identifier for the process as it is known
+  /// on the system on which the process is running. For unix systems
+  /// this is typically the same as if you called "getpid()" in the
+  /// process.
+  ///
+  /// \return
+  ///     Returns LLDB_INVALID_PROCESS_ID if this object does not
+  ///     contain a valid process object, or if the process has not
+  ///     been launched. Returns a valid process ID if the process is
+  ///     valid.
+  lldb::pid_t GetProcessID();
+
+  /// Gets the unique ID associated with this process object
+  ///
+  /// Unique IDs start at 1 and increment up with each new process
+  /// instance. Since starting a process on a system might always
+  /// create a process with the same process ID, there needs to be a
+  /// way to tell two process instances apart.
+  ///
+  /// \return
+  ///     Returns a non-zero integer ID if this object contains a
+  ///     valid process object, zero if this object does not contain
+  ///     a valid process object.
+  uint32_t GetUniqueID();
+
+  uint32_t GetAddressByteSize() const;
+
+  lldb::SBError Destroy();
+
+  lldb::SBError Continue();
+
+  lldb::SBError Stop();
+
+  lldb::SBError Kill();
+
+  lldb::SBError Detach();
+
+  lldb::SBError Detach(bool keep_stopped);
+
+  lldb::SBError Signal(int signal);
+
+  lldb::SBUnixSignals GetUnixSignals();
+
+  void SendAsyncInterrupt();
+
+  uint32_t GetStopID(bool include_expression_stops = false);
+
+  /// Gets the stop event corresponding to stop ID.
+  //
+  /// Note that it wasn't fully implemented and tracks only the stop
+  /// event for the last natural stop ID.
+  ///
+  /// \param [in] stop_id
+  ///   The ID of the stop event to return.
+  ///
+  /// \return
+  ///   The stop event corresponding to stop ID.
+  lldb::SBEvent GetStopEventForStopID(uint32_t stop_id);
+
+  size_t ReadMemory(addr_t addr, void *buf, size_t size, lldb::SBError &error);
+
+  size_t WriteMemory(addr_t addr, const void *buf, size_t size,
+                     lldb::SBError &error);
+
+  size_t ReadCStringFromMemory(addr_t addr, void *buf, size_t size,
+                               lldb::SBError &error);
+
+  uint64_t ReadUnsignedFromMemory(addr_t addr, uint32_t byte_size,
+                                  lldb::SBError &error);
+
+  lldb::addr_t ReadPointerFromMemory(addr_t addr, lldb::SBError &error);
+
+  // Events
+  static lldb::StateType GetStateFromEvent(const lldb::SBEvent &event);
+
+  static bool GetRestartedFromEvent(const lldb::SBEvent &event);
+
+  static size_t GetNumRestartedReasonsFromEvent(const lldb::SBEvent &event);
+
+  static const char *
+  GetRestartedReasonAtIndexFromEvent(const lldb::SBEvent &event, size_t idx);
+
+  static lldb::SBProcess GetProcessFromEvent(const lldb::SBEvent &event);
+
+  static bool GetInterruptedFromEvent(const lldb::SBEvent &event);
+
+  static lldb::SBStructuredData
+  GetStructuredDataFromEvent(const lldb::SBEvent &event);
+
+  static bool EventIsProcessEvent(const lldb::SBEvent &event);
+
+  static bool EventIsStructuredDataEvent(const lldb::SBEvent &event);
+
+  lldb::SBBroadcaster GetBroadcaster() const;
+
+  static const char *GetBroadcasterClass();
+
+  bool GetDescription(lldb::SBStream &description);
+
+  /// Start Tracing with the given SBTraceOptions.
+  ///
+  /// \param[in] options
+  ///     Class containing trace options like trace buffer size, meta
+  ///     data buffer size, TraceType and any custom parameters
+  ///     {formatted as a JSON Dictionary}. In case of errors in
+  ///     formatting, an error would be reported.
+  ///     It must be noted that tracing options such as buffer sizes
+  ///     or other custom parameters passed maybe invalid for some
+  ///     trace technologies. In such cases the trace implementations
+  ///     could choose to either throw an error or could round off to
+  ///     the nearest valid options to start tracing if the passed
+  ///     value is not supported. To obtain the actual used trace
+  ///     options please use the GetTraceConfig API. For the custom
+  ///     parameters, only the parameters recognized by the target
+  ///     would be used and others would be ignored.
+  ///
+  /// \param[out] error
+  ///     An error explaining what went wrong.
+  ///
+  /// \return
+  ///     A SBTrace instance, which should be used
+  ///     to get the trace data or other trace related operations.
+  lldb::SBTrace StartTrace(SBTraceOptions &options, lldb::SBError &error);
+
+  uint32_t GetNumSupportedHardwareWatchpoints(lldb::SBError &error) const;
+
+  /// Load a shared library into this process.
+  ///
+  /// \param[in] remote_image_spec
+  ///     The path for the shared library on the target what you want
+  ///     to load.
+  ///
+  /// \param[out] error
+  ///     An error object that gets filled in with any errors that
+  ///     might occur when trying to load the shared library.
+  ///
+  /// \return
+  ///     A token that represents the shared library that can be
+  ///     later used to unload the shared library. A value of
+  ///     LLDB_INVALID_IMAGE_TOKEN will be returned if the shared
+  ///     library can't be opened.
+  uint32_t LoadImage(lldb::SBFileSpec &remote_image_spec, lldb::SBError &error);
+
+  /// Load a shared library into this process.
+  ///
+  /// \param[in] local_image_spec
+  ///     The file spec that points to the shared library that you
+  ///     want to load if the library is located on the host. The
+  ///     library will be copied over to the location specified by
+  ///     remote_image_spec or into the current working directory with
+  ///     the same filename if the remote_image_spec isn't specified.
+  ///
+  /// \param[in] remote_image_spec
+  ///     If local_image_spec is specified then the location where the
+  ///     library should be copied over from the host. If
+  ///     local_image_spec isn't specified, then the path for the
+  ///     shared library on the target what you want to load.
+  ///
+  /// \param[out] error
+  ///     An error object that gets filled in with any errors that
+  ///     might occur when trying to load the shared library.
+  ///
+  /// \return
+  ///     A token that represents the shared library that can be
+  ///     later used to unload the shared library. A value of
+  ///     LLDB_INVALID_IMAGE_TOKEN will be returned if the shared
+  ///     library can't be opened.
+  uint32_t LoadImage(const lldb::SBFileSpec &local_image_spec,
+                     const lldb::SBFileSpec &remote_image_spec,
+                     lldb::SBError &error);
+
+  /// Load a shared library into this process, starting with a
+  /// library name and a list of paths, searching along the list of
+  /// paths till you find a matching library.
+  ///
+  /// \param[in] image_spec
+  ///     The name of the shared library that you want to load.  
+  ///     If image_spec is a relative path, the relative path will be
+  ///     appended to the search paths.
+  ///     If the image_spec is an absolute path, just the basename is used.
+  ///
+  /// \param[in] paths
+  ///     A list of paths to search for the library whose basename is 
+  ///     local_spec.
+  ///
+  /// \param[out] loaded_path
+  ///     If the library was found along the paths, this will store the
+  ///     full path to the found library.
+  ///
+  /// \param[out] error
+  ///     An error object that gets filled in with any errors that
+  ///     might occur when trying to search for the shared library.
+  ///
+  /// \return
+  ///     A token that represents the shared library that can be
+  ///     later passed to UnloadImage. A value of
+  ///     LLDB_INVALID_IMAGE_TOKEN will be returned if the shared
+  ///     library can't be opened.
+  uint32_t LoadImageUsingPaths(const lldb::SBFileSpec &image_spec,
+                               SBStringList &paths,
+                               lldb::SBFileSpec &loaded_path, 
+                               lldb::SBError &error);
+
+  lldb::SBError UnloadImage(uint32_t image_token);
+
+  lldb::SBError SendEventData(const char *data);
+
+  /// Return the number of different thread-origin extended backtraces
+  /// this process can support.
+  ///
+  /// When the process is stopped and you have an SBThread, lldb may be
+  /// able to show a backtrace of when that thread was originally created,
+  /// or the work item was enqueued to it (in the case of a libdispatch
+  /// queue).
+  ///
+  /// \return
+  ///   The number of thread-origin extended backtrace types that may be
+  ///   available.
+  uint32_t GetNumExtendedBacktraceTypes();
+
+  /// Return the name of one of the thread-origin extended backtrace
+  /// methods.
+  ///
+  /// \param [in] idx
+  ///   The index of the name to return.  They will be returned in
+  ///   the order that the user will most likely want to see them.
+  ///   e.g. if the type at index 0 is not available for a thread,
+  ///   see if the type at index 1 provides an extended backtrace.
+  ///
+  /// \return
+  ///   The name at that index.
+  const char *GetExtendedBacktraceTypeAtIndex(uint32_t idx);
+
+  lldb::SBThreadCollection GetHistoryThreads(addr_t addr);
+
+  bool IsInstrumentationRuntimePresent(InstrumentationRuntimeType type);
+
+  /// Save the state of the process in a core file (or mini dump on Windows).
+  lldb::SBError SaveCore(const char *file_name);
+
+  /// Query the address load_addr and store the details of the memory
+  /// region that contains it in the supplied SBMemoryRegionInfo object.
+  /// To iterate over all memory regions use GetMemoryRegionList.
+  ///
+  /// \param[in] load_addr
+  ///     The address to be queried.
+  ///
+  /// \param[out] region_info
+  ///     A reference to an SBMemoryRegionInfo object that will contain
+  ///     the details of the memory region containing load_addr.
+  ///
+  /// \return
+  ///     An error object describes any errors that occurred while
+  ///     querying load_addr.
+  lldb::SBError GetMemoryRegionInfo(lldb::addr_t load_addr,
+                                    lldb::SBMemoryRegionInfo &region_info);
+
+  /// Return the list of memory regions within the process.
+  ///
+  /// \return
+  ///     A list of all witin the process memory regions.
+  lldb::SBMemoryRegionInfoList GetMemoryRegions();
+
+  /// Return information about the process.
+  ///
+  /// Valid process info will only be returned when the process is
+  /// alive, use SBProcessInfo::IsValid() to check returned info is
+  /// valid.
+  lldb::SBProcessInfo GetProcessInfo();
+
+protected:
+  friend class SBAddress;
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBCommandInterpreter;
+  friend class SBDebugger;
+  friend class SBExecutionContext;
+  friend class SBFunction;
+  friend class SBModule;
+  friend class SBTarget;
+  friend class SBThread;
+  friend class SBValue;
+  friend class lldb_private::QueueImpl;
+
+  lldb::ProcessSP GetSP() const;
+
+  void SetSP(const lldb::ProcessSP &process_sp);
+
+  lldb::ProcessWP m_opaque_wp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBProcess_h_
diff --git a/linux-x64/clang/include/lldb/API/SBProcessInfo.h b/linux-x64/clang/include/lldb/API/SBProcessInfo.h
new file mode 100644
index 0000000..86dba9a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBProcessInfo.h
@@ -0,0 +1,65 @@
+//===-- SBProcessInfo.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBProcessInfo_h_
+#define LLDB_SBProcessInfo_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBProcessInfo {
+public:
+  SBProcessInfo();
+  SBProcessInfo(const SBProcessInfo &rhs);
+
+  ~SBProcessInfo();
+
+  SBProcessInfo &operator=(const SBProcessInfo &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetName();
+
+  SBFileSpec GetExecutableFile();
+
+  lldb::pid_t GetProcessID();
+
+  uint32_t GetUserID();
+
+  uint32_t GetGroupID();
+
+  bool UserIDIsValid();
+
+  bool GroupIDIsValid();
+
+  uint32_t GetEffectiveUserID();
+
+  uint32_t GetEffectiveGroupID();
+
+  bool EffectiveUserIDIsValid();
+
+  bool EffectiveGroupIDIsValid();
+
+  lldb::pid_t GetParentProcessID();
+
+private:
+  friend class SBProcess;
+
+  lldb_private::ProcessInstanceInfo &ref();
+
+  void SetProcessInfo(const lldb_private::ProcessInstanceInfo &proc_info_ref);
+
+  std::unique_ptr<lldb_private::ProcessInstanceInfo> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBProcessInfo_h_
diff --git a/linux-x64/clang/include/lldb/API/SBQueue.h b/linux-x64/clang/include/lldb/API/SBQueue.h
new file mode 100644
index 0000000..0124c1c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBQueue.h
@@ -0,0 +1,69 @@
+//===-- SBQueue.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBQueue_h_
+#define LLDB_SBQueue_h_
+
+#include <vector>
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/lldb-forward.h"
+
+namespace lldb {
+
+class LLDB_API SBQueue {
+public:
+  SBQueue();
+
+  SBQueue(const QueueSP &queue_sp);
+
+  SBQueue(const SBQueue &rhs);
+
+  const SBQueue &operator=(const lldb::SBQueue &rhs);
+
+  ~SBQueue();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  lldb::SBProcess GetProcess();
+
+  lldb::queue_id_t GetQueueID() const;
+
+  const char *GetName() const;
+
+  uint32_t GetIndexID() const;
+
+  uint32_t GetNumThreads();
+
+  lldb::SBThread GetThreadAtIndex(uint32_t);
+
+  uint32_t GetNumPendingItems();
+
+  lldb::SBQueueItem GetPendingItemAtIndex(uint32_t);
+
+  uint32_t GetNumRunningItems();
+
+  lldb::QueueKind GetKind();
+
+protected:
+  friend class SBProcess;
+  friend class SBThread;
+
+  void SetQueue(const lldb::QueueSP &queue_sp);
+
+private:
+  std::shared_ptr<lldb_private::QueueImpl> m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBQueue_h_
diff --git a/linux-x64/clang/include/lldb/API/SBQueueItem.h b/linux-x64/clang/include/lldb/API/SBQueueItem.h
new file mode 100644
index 0000000..455a1f9
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBQueueItem.h
@@ -0,0 +1,49 @@
+//===-- SBQueueItem.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBQueueItem_h_
+#define LLDB_SBQueueItem_h_
+
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBQueueItem {
+public:
+  SBQueueItem();
+
+  SBQueueItem(const lldb::QueueItemSP &queue_item_sp);
+
+  ~SBQueueItem();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  lldb::QueueItemKind GetKind() const;
+
+  void SetKind(lldb::QueueItemKind kind);
+
+  lldb::SBAddress GetAddress() const;
+
+  void SetAddress(lldb::SBAddress addr);
+
+  void SetQueueItem(const lldb::QueueItemSP &queue_item_sp);
+
+  SBThread GetExtendedBacktraceThread(const char *type);
+
+private:
+  lldb::QueueItemSP m_queue_item_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBQueueItem_h_
diff --git a/linux-x64/clang/include/lldb/API/SBReproducer.h b/linux-x64/clang/include/lldb/API/SBReproducer.h
new file mode 100644
index 0000000..0f1739d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBReproducer.h
@@ -0,0 +1,28 @@
+//===-- SBReproducer.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_API_SBREPRODUCER_H
+#define LLDB_API_SBREPRODUCER_H
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+/// The SBReproducer class is special because it bootstraps the capture and
+/// replay of SB API calls. As a result we cannot rely on any other SB objects
+/// in the interface or implementation of this class.
+class LLDB_API SBReproducer {
+public:
+  static const char *Capture();
+  static const char *Capture(const char *path);
+  static const char *Replay(const char *path);
+};
+
+} // namespace lldb
+
+#endif
diff --git a/linux-x64/clang/include/lldb/API/SBSection.h b/linux-x64/clang/include/lldb/API/SBSection.h
new file mode 100644
index 0000000..06a195e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBSection.h
@@ -0,0 +1,101 @@
+//===-- SBSection.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBSection_h_
+#define LLDB_SBSection_h_
+
+#include "lldb/API/SBData.h"
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBSection {
+public:
+  SBSection();
+
+  SBSection(const lldb::SBSection &rhs);
+
+  ~SBSection();
+
+  const lldb::SBSection &operator=(const lldb::SBSection &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetName();
+
+  lldb::SBSection GetParent();
+
+  lldb::SBSection FindSubSection(const char *sect_name);
+
+  size_t GetNumSubSections();
+
+  lldb::SBSection GetSubSectionAtIndex(size_t idx);
+
+  lldb::addr_t GetFileAddress();
+
+  lldb::addr_t GetLoadAddress(lldb::SBTarget &target);
+
+  lldb::addr_t GetByteSize();
+
+  uint64_t GetFileOffset();
+
+  uint64_t GetFileByteSize();
+
+  lldb::SBData GetSectionData();
+
+  lldb::SBData GetSectionData(uint64_t offset, uint64_t size);
+
+  SectionType GetSectionType();
+
+  /// Gets the permissions (RWX) of the section of the object file
+  ///
+  /// Returns a mask of bits of enum lldb::Permissions for this section.
+  /// Sections for which permissions are not defined, 0 is returned for
+  /// them. The binary representation of this value corresponds to [XRW]
+  /// i.e. for a section having read and execute permissions, the value
+  /// returned is 6
+  ///
+  /// \return
+  ///     Returns an unsigned value for Permissions for the section.
+  uint32_t
+  GetPermissions() const;
+
+  /// Return the size of a target's byte represented by this section
+  /// in numbers of host bytes. Note that certain architectures have
+  /// varying minimum addressable unit (i.e. byte) size for their
+  /// CODE or DATA buses.
+  ///
+  /// \return
+  ///     The number of host (8-bit) bytes needed to hold a target byte
+  uint32_t GetTargetByteSize();
+
+  bool operator==(const lldb::SBSection &rhs);
+
+  bool operator!=(const lldb::SBSection &rhs);
+
+  bool GetDescription(lldb::SBStream &description);
+
+private:
+  friend class SBAddress;
+  friend class SBModule;
+  friend class SBTarget;
+
+  SBSection(const lldb::SectionSP &section_sp);
+
+  lldb::SectionSP GetSP() const;
+
+  void SetSP(const lldb::SectionSP &section_sp);
+
+  lldb::SectionWP m_opaque_wp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBSection_h_
diff --git a/linux-x64/clang/include/lldb/API/SBSourceManager.h b/linux-x64/clang/include/lldb/API/SBSourceManager.h
new file mode 100644
index 0000000..3d69aa2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBSourceManager.h
@@ -0,0 +1,47 @@
+//===-- SBSourceManager.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBSourceManager_h_
+#define LLDB_SBSourceManager_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <stdio.h>
+
+namespace lldb {
+
+class LLDB_API SBSourceManager {
+public:
+  SBSourceManager(const SBDebugger &debugger);
+  SBSourceManager(const SBTarget &target);
+  SBSourceManager(const SBSourceManager &rhs);
+
+  ~SBSourceManager();
+
+  const lldb::SBSourceManager &operator=(const lldb::SBSourceManager &rhs);
+
+  size_t DisplaySourceLinesWithLineNumbers(
+      const lldb::SBFileSpec &file, uint32_t line, uint32_t context_before,
+      uint32_t context_after, const char *current_line_cstr, lldb::SBStream &s);
+
+  size_t DisplaySourceLinesWithLineNumbersAndColumn(
+      const lldb::SBFileSpec &file, uint32_t line, uint32_t column,
+      uint32_t context_before, uint32_t context_after,
+      const char *current_line_cstr, lldb::SBStream &s);
+
+protected:
+  friend class SBCommandInterpreter;
+  friend class SBDebugger;
+
+private:
+  std::unique_ptr<lldb_private::SourceManagerImpl> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBSourceManager_h_
diff --git a/linux-x64/clang/include/lldb/API/SBStream.h b/linux-x64/clang/include/lldb/API/SBStream.h
new file mode 100644
index 0000000..8afbf45
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBStream.h
@@ -0,0 +1,105 @@
+//===-- SBStream.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBStream_h_
+#define LLDB_SBStream_h_
+
+#include <stdio.h>
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBStream {
+public:
+  SBStream();
+
+  SBStream(SBStream &&rhs);
+
+  ~SBStream();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  // If this stream is not redirected to a file, it will maintain a local cache
+  // for the stream data which can be accessed using this accessor.
+  const char *GetData();
+
+  // If this stream is not redirected to a file, it will maintain a local cache
+  // for the stream output whose length can be accessed using this accessor.
+  size_t GetSize();
+
+  void Printf(const char *format, ...) __attribute__((format(printf, 2, 3)));
+
+  void RedirectToFile(const char *path, bool append);
+
+  void RedirectToFileHandle(FILE *fh, bool transfer_fh_ownership);
+
+  void RedirectToFileDescriptor(int fd, bool transfer_fh_ownership);
+
+  // If the stream is redirected to a file, forget about the file and if
+  // ownership of the file was transferred to this object, close the file. If
+  // the stream is backed by a local cache, clear this cache.
+  void Clear();
+
+protected:
+  friend class SBAddress;
+  friend class SBBlock;
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBBreakpointName;
+  friend class SBCommandReturnObject;
+  friend class SBCompileUnit;
+  friend class SBData;
+  friend class SBDebugger;
+  friend class SBDeclaration;
+  friend class SBEvent;
+  friend class SBFileSpec;
+  friend class SBFileSpecList;
+  friend class SBFrame;
+  friend class SBFunction;
+  friend class SBInstruction;
+  friend class SBInstructionList;
+  friend class SBLineEntry;
+  friend class SBMemoryRegionInfo;
+  friend class SBModule;
+  friend class SBModuleSpec;
+  friend class SBModuleSpecList;
+  friend class SBProcess;
+  friend class SBSection;
+  friend class SBSourceManager;
+  friend class SBStructuredData;
+  friend class SBSymbol;
+  friend class SBSymbolContext;
+  friend class SBSymbolContextList;
+  friend class SBTarget;
+  friend class SBThread;
+  friend class SBThreadPlan;
+  friend class SBType;
+  friend class SBTypeEnumMember;
+  friend class SBTypeMemberFunction;
+  friend class SBTypeMember;
+  friend class SBValue;
+  friend class SBWatchpoint;
+
+  lldb_private::Stream *operator->();
+
+  lldb_private::Stream *get();
+
+  lldb_private::Stream &ref();
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SBStream);
+  std::unique_ptr<lldb_private::Stream> m_opaque_up;
+  bool m_is_file;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBStream_h_
diff --git a/linux-x64/clang/include/lldb/API/SBStringList.h b/linux-x64/clang/include/lldb/API/SBStringList.h
new file mode 100644
index 0000000..1df1e45
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBStringList.h
@@ -0,0 +1,65 @@
+//===-- SBStringList.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBStringList_h_
+#define LLDB_SBStringList_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBStringList {
+public:
+  SBStringList();
+
+  SBStringList(const lldb::SBStringList &rhs);
+
+  const SBStringList &operator=(const SBStringList &rhs);
+
+  ~SBStringList();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void AppendString(const char *str);
+
+  void AppendList(const char **strv, int strc);
+
+  void AppendList(const lldb::SBStringList &strings);
+
+  uint32_t GetSize() const;
+
+  const char *GetStringAtIndex(size_t idx);
+
+  const char *GetStringAtIndex(size_t idx) const;
+
+  void Clear();
+
+protected:
+  friend class SBCommandInterpreter;
+  friend class SBDebugger;
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBBreakpointName;
+
+  SBStringList(const lldb_private::StringList *lldb_strings);
+
+  void AppendList(const lldb_private::StringList &strings);
+
+  const lldb_private::StringList *operator->() const;
+
+  const lldb_private::StringList &operator*() const;
+
+private:
+  std::unique_ptr<lldb_private::StringList> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBStringList_h_
diff --git a/linux-x64/clang/include/lldb/API/SBStructuredData.h b/linux-x64/clang/include/lldb/API/SBStructuredData.h
new file mode 100644
index 0000000..5b10133
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBStructuredData.h
@@ -0,0 +1,99 @@
+//===-- SBStructuredData.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SBStructuredData_h
+#define SBStructuredData_h
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBModule.h"
+
+namespace lldb {
+
+class SBStructuredData {
+public:
+  SBStructuredData();
+
+  SBStructuredData(const lldb::SBStructuredData &rhs);
+
+  SBStructuredData(const lldb::EventSP &event_sp);
+  
+  SBStructuredData(lldb_private::StructuredDataImpl *impl);
+
+  ~SBStructuredData();
+
+  lldb::SBStructuredData &operator=(const lldb::SBStructuredData &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::SBError SetFromJSON(lldb::SBStream &stream);
+
+  void Clear();
+
+  lldb::SBError GetAsJSON(lldb::SBStream &stream) const;
+
+  lldb::SBError GetDescription(lldb::SBStream &stream) const;
+
+  /// Return the type of data in this data structure
+  lldb::StructuredDataType GetType() const;
+  
+  /// Return the size (i.e. number of elements) in this data structure
+  /// if it is an array or dictionary type. For other types, 0 will be
+  //  returned.
+  size_t GetSize() const;
+
+  /// Fill keys with the keys in this object and return true if this data
+  /// structure is a dictionary.  Returns false otherwise.
+   bool GetKeys(lldb::SBStringList &keys) const;
+  
+  /// Return the value corresponding to a key if this data structure
+  /// is a dictionary type.
+  lldb::SBStructuredData GetValueForKey(const char *key) const;
+
+  /// Return the value corresponding to an index if this data structure
+  /// is array.
+  lldb::SBStructuredData GetItemAtIndex(size_t idx) const;
+
+  /// Return the integer value if this data structure is an integer type.
+  uint64_t GetIntegerValue(uint64_t fail_value = 0) const;
+
+  /// Return the floating point value if this data structure is a floating
+  /// type.
+  double GetFloatValue(double fail_value = 0.0) const;
+
+  /// Return the boolean value if this data structure is a boolean type.
+  bool GetBooleanValue(bool fail_value = false) const;
+
+  /// Provides the string value if this data structure is a string type.
+  ///
+  /// \param[out] dst
+  ///     pointer where the string value will be written. In case it is null,
+  ///     nothing will be written at \a dst.
+  ///
+  /// \param[in] dst_len
+  ///     max number of characters that can be written at \a dst. In case it is
+  ///     zero, nothing will be written at \a dst. If this length is not enough
+  ///     to write the complete string value, (\a dst_len - 1) bytes of the
+  ///     string value will be written at \a dst followed by a null character.
+  ///
+  /// \return
+  ///     Returns the byte size needed to completely write the string value at
+  ///     \a dst in all cases.
+  size_t GetStringValue(char *dst, size_t dst_len) const;
+
+protected:
+  friend class SBTraceOptions;
+  friend class SBDebugger;
+  friend class SBTarget;
+
+  StructuredDataImplUP m_impl_up;
+};
+} // namespace lldb
+
+#endif /* SBStructuredData_h */
diff --git a/linux-x64/clang/include/lldb/API/SBSymbol.h b/linux-x64/clang/include/lldb/API/SBSymbol.h
new file mode 100644
index 0000000..52486b8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBSymbol.h
@@ -0,0 +1,86 @@
+//===-- SBSymbol.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBSymbol_h_
+#define LLDB_SBSymbol_h_
+
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBInstructionList.h"
+#include "lldb/API/SBTarget.h"
+
+namespace lldb {
+
+class LLDB_API SBSymbol {
+public:
+  SBSymbol();
+
+  ~SBSymbol();
+
+  SBSymbol(const lldb::SBSymbol &rhs);
+
+  const lldb::SBSymbol &operator=(const lldb::SBSymbol &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetName() const;
+
+  const char *GetDisplayName() const;
+
+  const char *GetMangledName() const;
+
+  lldb::SBInstructionList GetInstructions(lldb::SBTarget target);
+
+  lldb::SBInstructionList GetInstructions(lldb::SBTarget target,
+                                          const char *flavor_string);
+
+  SBAddress GetStartAddress();
+
+  SBAddress GetEndAddress();
+
+  uint32_t GetPrologueByteSize();
+
+  SymbolType GetType();
+
+  bool operator==(const lldb::SBSymbol &rhs) const;
+
+  bool operator!=(const lldb::SBSymbol &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+  // Returns true if the symbol is externally visible in the module that it is
+  // defined in
+  bool IsExternal();
+
+  // Returns true if the symbol was synthetically generated from something
+  // other than the actual symbol table itself in the object file.
+  bool IsSynthetic();
+
+protected:
+  lldb_private::Symbol *get();
+
+  void reset(lldb_private::Symbol *);
+
+private:
+  friend class SBAddress;
+  friend class SBFrame;
+  friend class SBModule;
+  friend class SBSymbolContext;
+
+  SBSymbol(lldb_private::Symbol *lldb_object_ptr);
+
+  void SetSymbol(lldb_private::Symbol *lldb_object_ptr);
+
+  lldb_private::Symbol *m_opaque_ptr;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBSymbol_h_
diff --git a/linux-x64/clang/include/lldb/API/SBSymbolContext.h b/linux-x64/clang/include/lldb/API/SBSymbolContext.h
new file mode 100644
index 0000000..3d16d09
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBSymbolContext.h
@@ -0,0 +1,83 @@
+//===-- SBSymbolContext.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBSymbolContext_h_
+#define LLDB_SBSymbolContext_h_
+
+#include "lldb/API/SBBlock.h"
+#include "lldb/API/SBCompileUnit.h"
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFunction.h"
+#include "lldb/API/SBLineEntry.h"
+#include "lldb/API/SBModule.h"
+#include "lldb/API/SBSymbol.h"
+
+namespace lldb {
+
+class LLDB_API SBSymbolContext {
+public:
+  SBSymbolContext();
+
+  SBSymbolContext(const lldb::SBSymbolContext &rhs);
+
+  SBSymbolContext(const lldb_private::SymbolContext *sc_ptr);
+
+  ~SBSymbolContext();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const lldb::SBSymbolContext &operator=(const lldb::SBSymbolContext &rhs);
+
+  lldb::SBModule GetModule();
+  lldb::SBCompileUnit GetCompileUnit();
+  lldb::SBFunction GetFunction();
+  lldb::SBBlock GetBlock();
+  lldb::SBLineEntry GetLineEntry();
+  lldb::SBSymbol GetSymbol();
+
+  void SetModule(lldb::SBModule module);
+  void SetCompileUnit(lldb::SBCompileUnit compile_unit);
+  void SetFunction(lldb::SBFunction function);
+  void SetBlock(lldb::SBBlock block);
+  void SetLineEntry(lldb::SBLineEntry line_entry);
+  void SetSymbol(lldb::SBSymbol symbol);
+
+  SBSymbolContext GetParentOfInlinedScope(const SBAddress &curr_frame_pc,
+                                          SBAddress &parent_frame_addr) const;
+
+  bool GetDescription(lldb::SBStream &description);
+
+protected:
+  friend class SBAddress;
+  friend class SBFrame;
+  friend class SBModule;
+  friend class SBThread;
+  friend class SBTarget;
+  friend class SBSymbolContextList;
+
+  lldb_private::SymbolContext *operator->() const;
+
+  lldb_private::SymbolContext &operator*();
+
+  lldb_private::SymbolContext &ref();
+
+  const lldb_private::SymbolContext &operator*() const;
+
+  lldb_private::SymbolContext *get() const;
+
+  void SetSymbolContext(const lldb_private::SymbolContext *sc_ptr);
+
+private:
+  std::unique_ptr<lldb_private::SymbolContext> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBSymbolContext_h_
diff --git a/linux-x64/clang/include/lldb/API/SBSymbolContextList.h b/linux-x64/clang/include/lldb/API/SBSymbolContextList.h
new file mode 100644
index 0000000..577993c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBSymbolContextList.h
@@ -0,0 +1,58 @@
+//===-- SBSymbolContextList.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBSymbolContextList_h_
+#define LLDB_SBSymbolContextList_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBSymbolContext.h"
+
+namespace lldb {
+
+class LLDB_API SBSymbolContextList {
+public:
+  SBSymbolContextList();
+
+  SBSymbolContextList(const lldb::SBSymbolContextList &rhs);
+
+  ~SBSymbolContextList();
+
+  const lldb::SBSymbolContextList &
+  operator=(const lldb::SBSymbolContextList &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  uint32_t GetSize() const;
+
+  lldb::SBSymbolContext GetContextAtIndex(uint32_t idx);
+
+  bool GetDescription(lldb::SBStream &description);
+
+  void Append(lldb::SBSymbolContext &sc);
+
+  void Append(lldb::SBSymbolContextList &sc_list);
+
+  void Clear();
+
+protected:
+  friend class SBModule;
+  friend class SBTarget;
+
+  lldb_private::SymbolContextList *operator->() const;
+
+  lldb_private::SymbolContextList &operator*() const;
+
+private:
+  std::unique_ptr<lldb_private::SymbolContextList> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBSymbolContextList_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTarget.h b/linux-x64/clang/include/lldb/API/SBTarget.h
new file mode 100644
index 0000000..80a7fa0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTarget.h
@@ -0,0 +1,852 @@
+//===-- SBTarget.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTarget_h_
+#define LLDB_SBTarget_h_
+
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBAttachInfo.h"
+#include "lldb/API/SBBreakpoint.h"
+#include "lldb/API/SBBroadcaster.h"
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBFileSpec.h"
+#include "lldb/API/SBFileSpecList.h"
+#include "lldb/API/SBLaunchInfo.h"
+#include "lldb/API/SBSymbolContextList.h"
+#include "lldb/API/SBType.h"
+#include "lldb/API/SBValue.h"
+#include "lldb/API/SBWatchpoint.h"
+
+namespace lldb {
+
+class SBPlatform;
+
+class LLDB_API SBTarget {
+public:
+  // Broadcaster bits.
+  enum {
+    eBroadcastBitBreakpointChanged = (1 << 0),
+    eBroadcastBitModulesLoaded = (1 << 1),
+    eBroadcastBitModulesUnloaded = (1 << 2),
+    eBroadcastBitWatchpointChanged = (1 << 3),
+    eBroadcastBitSymbolsLoaded = (1 << 4)
+  };
+
+  // Constructors
+  SBTarget();
+
+  SBTarget(const lldb::SBTarget &rhs);
+
+  SBTarget(const lldb::TargetSP &target_sp);
+
+  // Destructor
+  ~SBTarget();
+
+  const lldb::SBTarget &operator=(const lldb::SBTarget &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  static bool EventIsTargetEvent(const lldb::SBEvent &event);
+
+  static lldb::SBTarget GetTargetFromEvent(const lldb::SBEvent &event);
+
+  static uint32_t GetNumModulesFromEvent(const lldb::SBEvent &event);
+
+  static lldb::SBModule GetModuleAtIndexFromEvent(const uint32_t idx,
+                                                  const lldb::SBEvent &event);
+
+  static const char *GetBroadcasterClassName();
+
+  lldb::SBProcess GetProcess();
+
+  /// Sets whether we should collect statistics on lldb or not.
+  ///
+  /// \param[in] v
+  ///     A boolean to control the collection.
+  void SetCollectingStats(bool v);
+
+  /// Returns whether statistics collection are enabled.
+  ///
+  /// \return
+  ///     true if statistics are currently being collected, false
+  ///     otherwise.
+  bool GetCollectingStats();
+
+  /// Returns a dump of the collected statistics.
+  ///
+  /// \return
+  ///     A SBStructuredData with the statistics collected.
+  lldb::SBStructuredData GetStatistics();
+
+  /// Return the platform object associated with the target.
+  ///
+  /// After return, the platform object should be checked for
+  /// validity.
+  ///
+  /// \return
+  ///     A platform object.
+  lldb::SBPlatform GetPlatform();
+
+  /// Install any binaries that need to be installed.
+  ///
+  /// This function does nothing when debugging on the host system.
+  /// When connected to remote platforms, the target's main executable
+  /// and any modules that have their remote install path set will be
+  /// installed on the remote platform. If the main executable doesn't
+  /// have an install location set, it will be installed in the remote
+  /// platform's working directory.
+  ///
+  /// \return
+  ///     An error describing anything that went wrong during
+  ///     installation.
+  SBError Install();
+
+  /// Launch a new process.
+  ///
+  /// Launch a new process by spawning a new process using the
+  /// target object's executable module's file as the file to launch.
+  /// Arguments are given in \a argv, and the environment variables
+  /// are in \a envp. Standard input and output files can be
+  /// optionally re-directed to \a stdin_path, \a stdout_path, and
+  /// \a stderr_path.
+  ///
+  /// \param[in] listener
+  ///     An optional listener that will receive all process events.
+  ///     If \a listener is valid then \a listener will listen to all
+  ///     process events. If not valid, then this target's debugger
+  ///     (SBTarget::GetDebugger()) will listen to all process events.
+  ///
+  /// \param[in] argv
+  ///     The argument array.
+  ///
+  /// \param[in] envp
+  ///     The environment array.
+  ///
+  /// \param[in] stdin_path
+  ///     The path to use when re-directing the STDIN of the new
+  ///     process. If all stdXX_path arguments are nullptr, a pseudo
+  ///     terminal will be used.
+  ///
+  /// \param[in] stdout_path
+  ///     The path to use when re-directing the STDOUT of the new
+  ///     process. If all stdXX_path arguments are nullptr, a pseudo
+  ///     terminal will be used.
+  ///
+  /// \param[in] stderr_path
+  ///     The path to use when re-directing the STDERR of the new
+  ///     process. If all stdXX_path arguments are nullptr, a pseudo
+  ///     terminal will be used.
+  ///
+  /// \param[in] working_directory
+  ///     The working directory to have the child process run in
+  ///
+  /// \param[in] launch_flags
+  ///     Some launch options specified by logical OR'ing
+  ///     lldb::LaunchFlags enumeration values together.
+  ///
+  /// \param[in] stop_at_entry
+  ///     If false do not stop the inferior at the entry point.
+  ///
+  /// \param[out] error
+  ///     An error object. Contains the reason if there is some failure.
+  ///
+  /// \return
+  ///      A process object for the newly created process.
+  lldb::SBProcess Launch(SBListener &listener, char const **argv,
+                         char const **envp, const char *stdin_path,
+                         const char *stdout_path, const char *stderr_path,
+                         const char *working_directory,
+                         uint32_t launch_flags, // See LaunchFlags
+                         bool stop_at_entry, lldb::SBError &error);
+
+  SBProcess LoadCore(const char *core_file);
+  SBProcess LoadCore(const char *core_file, lldb::SBError &error);
+
+  /// Launch a new process with sensible defaults.
+  ///
+  /// \param[in] argv
+  ///     The argument array.
+  ///
+  /// \param[in] envp
+  ///     The environment array.
+  ///
+  /// \param[in] working_directory
+  ///     The working directory to have the child process run in
+  ///
+  /// Default: listener
+  ///     Set to the target's debugger (SBTarget::GetDebugger())
+  ///
+  /// Default: launch_flags
+  ///     Empty launch flags
+  ///
+  /// Default: stdin_path
+  /// Default: stdout_path
+  /// Default: stderr_path
+  ///     A pseudo terminal will be used.
+  ///
+  /// \return
+  ///      A process object for the newly created process.
+  SBProcess LaunchSimple(const char **argv, const char **envp,
+                         const char *working_directory);
+
+  SBProcess Launch(SBLaunchInfo &launch_info, SBError &error);
+
+  SBProcess Attach(SBAttachInfo &attach_info, SBError &error);
+
+  /// Attach to process with pid.
+  ///
+  /// \param[in] listener
+  ///     An optional listener that will receive all process events.
+  ///     If \a listener is valid then \a listener will listen to all
+  ///     process events. If not valid, then this target's debugger
+  ///     (SBTarget::GetDebugger()) will listen to all process events.
+  ///
+  /// \param[in] pid
+  ///     The process ID to attach to.
+  ///
+  /// \param[out] error
+  ///     An error explaining what went wrong if attach fails.
+  ///
+  /// \return
+  ///      A process object for the attached process.
+  lldb::SBProcess AttachToProcessWithID(SBListener &listener, lldb::pid_t pid,
+                                        lldb::SBError &error);
+
+  /// Attach to process with name.
+  ///
+  /// \param[in] listener
+  ///     An optional listener that will receive all process events.
+  ///     If \a listener is valid then \a listener will listen to all
+  ///     process events. If not valid, then this target's debugger
+  ///     (SBTarget::GetDebugger()) will listen to all process events.
+  ///
+  /// \param[in] name
+  ///     Basename of process to attach to.
+  ///
+  /// \param[in] wait_for
+  ///     If true wait for a new instance of 'name' to be launched.
+  ///
+  /// \param[out] error
+  ///     An error explaining what went wrong if attach fails.
+  ///
+  /// \return
+  ///      A process object for the attached process.
+  lldb::SBProcess AttachToProcessWithName(SBListener &listener,
+                                          const char *name, bool wait_for,
+                                          lldb::SBError &error);
+
+  /// Connect to a remote debug server with url.
+  ///
+  /// \param[in] listener
+  ///     An optional listener that will receive all process events.
+  ///     If \a listener is valid then \a listener will listen to all
+  ///     process events. If not valid, then this target's debugger
+  ///     (SBTarget::GetDebugger()) will listen to all process events.
+  ///
+  /// \param[in] url
+  ///     The url to connect to, e.g., 'connect://localhost:12345'.
+  ///
+  /// \param[in] plugin_name
+  ///     The plugin name to be used; can be nullptr.
+  ///
+  /// \param[out] error
+  ///     An error explaining what went wrong if the connect fails.
+  ///
+  /// \return
+  ///      A process object for the connected process.
+  lldb::SBProcess ConnectRemote(SBListener &listener, const char *url,
+                                const char *plugin_name, SBError &error);
+
+  lldb::SBFileSpec GetExecutable();
+
+  // Append the path mapping (from -> to) to the target's paths mapping list.
+  void AppendImageSearchPath(const char *from, const char *to,
+                             lldb::SBError &error);
+
+  bool AddModule(lldb::SBModule &module);
+
+  lldb::SBModule AddModule(const char *path, const char *triple,
+                           const char *uuid);
+
+  lldb::SBModule AddModule(const char *path, const char *triple,
+                           const char *uuid_cstr, const char *symfile);
+
+  lldb::SBModule AddModule(const SBModuleSpec &module_spec);
+
+  uint32_t GetNumModules() const;
+
+  lldb::SBModule GetModuleAtIndex(uint32_t idx);
+
+  bool RemoveModule(lldb::SBModule module);
+
+  lldb::SBDebugger GetDebugger() const;
+
+  lldb::SBModule FindModule(const lldb::SBFileSpec &file_spec);
+
+  /// Find compile units related to *this target and passed source
+  /// file.
+  ///
+  /// \param[in] sb_file_spec
+  ///     A lldb::SBFileSpec object that contains source file
+  ///     specification.
+  ///
+  /// \return
+  ///     A lldb::SBSymbolContextList that gets filled in with all of
+  ///     the symbol contexts for all the matches.
+  lldb::SBSymbolContextList
+  FindCompileUnits(const lldb::SBFileSpec &sb_file_spec);
+
+  lldb::ByteOrder GetByteOrder();
+
+  uint32_t GetAddressByteSize();
+
+  const char *GetTriple();
+
+  /// Architecture data byte width accessor
+  ///
+  /// \return
+  /// The size in 8-bit (host) bytes of a minimum addressable
+  /// unit from the Architecture's data bus
+  uint32_t GetDataByteSize();
+
+  /// Architecture code byte width accessor
+  ///
+  /// \return
+  /// The size in 8-bit (host) bytes of a minimum addressable
+  /// unit from the Architecture's code bus
+  uint32_t GetCodeByteSize();
+
+  /// Set the base load address for a module section.
+  ///
+  /// \param[in] section
+  ///     The section whose base load address will be set within this
+  ///     target.
+  ///
+  /// \param[in] section_base_addr
+  ///     The base address for the section.
+  ///
+  /// \return
+  ///      An error to indicate success, fail, and any reason for
+  ///     failure.
+  lldb::SBError SetSectionLoadAddress(lldb::SBSection section,
+                                      lldb::addr_t section_base_addr);
+
+  /// Clear the base load address for a module section.
+  ///
+  /// \param[in] section
+  ///     The section whose base load address will be cleared within
+  ///     this target.
+  ///
+  /// \return
+  ///      An error to indicate success, fail, and any reason for
+  ///     failure.
+  lldb::SBError ClearSectionLoadAddress(lldb::SBSection section);
+
+  /// Slide all file addresses for all module sections so that \a module
+  /// appears to loaded at these slide addresses.
+  ///
+  /// When you need all sections within a module to be loaded at a
+  /// rigid slide from the addresses found in the module object file,
+  /// this function will allow you to easily and quickly slide all
+  /// module sections.
+  ///
+  /// \param[in] module
+  ///     The module to load.
+  ///
+  /// \param[in] sections_offset
+  ///     An offset that will be applied to all section file addresses
+  ///     (the virtual addresses found in the object file itself).
+  ///
+  /// \return
+  ///     An error to indicate success, fail, and any reason for
+  ///     failure.
+  lldb::SBError SetModuleLoadAddress(lldb::SBModule module,
+                                     int64_t sections_offset);
+
+  /// Clear the section base load addresses for all sections in a module.
+  ///
+  /// \param[in] module
+  ///     The module to unload.
+  ///
+  /// \return
+  ///     An error to indicate success, fail, and any reason for
+  ///     failure.
+  lldb::SBError ClearModuleLoadAddress(lldb::SBModule module);
+
+  /// Find functions by name.
+  ///
+  /// \param[in] name
+  ///     The name of the function we are looking for.
+  ///
+  /// \param[in] name_type_mask
+  ///     A logical OR of one or more FunctionNameType enum bits that
+  ///     indicate what kind of names should be used when doing the
+  ///     lookup. Bits include fully qualified names, base names,
+  ///     C++ methods, or ObjC selectors.
+  ///     See FunctionNameType for more details.
+  ///
+  /// \return
+  ///     A lldb::SBSymbolContextList that gets filled in with all of
+  ///     the symbol contexts for all the matches.
+  lldb::SBSymbolContextList
+  FindFunctions(const char *name,
+                uint32_t name_type_mask = lldb::eFunctionNameTypeAny);
+
+  /// Find global and static variables by name.
+  ///
+  /// \param[in] name
+  ///     The name of the global or static variable we are looking
+  ///     for.
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a max_matches.
+  ///
+  /// \return
+  ///     A list of matched variables in an SBValueList.
+  lldb::SBValueList FindGlobalVariables(const char *name, uint32_t max_matches);
+
+  /// Find the first global (or static) variable by name.
+  ///
+  /// \param[in] name
+  ///     The name of the global or static variable we are looking
+  ///     for.
+  ///
+  /// \return
+  ///     An SBValue that gets filled in with the found variable (if any).
+  lldb::SBValue FindFirstGlobalVariable(const char *name);
+
+  /// Find global and static variables by pattern.
+  ///
+  /// \param[in] name
+  ///     The pattern to search for global or static variables
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a max_matches.
+  ///
+  /// \param[in] matchtype
+  ///     The match type to use.
+  ///
+  /// \return
+  ///     A list of matched variables in an SBValueList.
+  lldb::SBValueList FindGlobalVariables(const char *name, uint32_t max_matches,
+                                        MatchType matchtype);
+
+  /// Find global functions by their name with pattern matching.
+  ///
+  /// \param[in] name
+  ///     The pattern to search for global or static variables
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a max_matches.
+  ///
+  /// \param[in] matchtype
+  ///     The match type to use.
+  ///
+  /// \return
+  ///     A list of matched variables in an SBValueList.
+  lldb::SBSymbolContextList FindGlobalFunctions(const char *name,
+                                                uint32_t max_matches,
+                                                MatchType matchtype);
+
+  void Clear();
+
+  /// Resolve a current file address into a section offset address.
+  ///
+  /// \param[in] file_addr
+  ///     The file address to resolve.
+  ///
+  /// \return
+  ///     An SBAddress which will be valid if...
+  lldb::SBAddress ResolveFileAddress(lldb::addr_t file_addr);
+
+  /// Resolve a current load address into a section offset address.
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual address from the current process state that is to
+  ///     be translated into a section offset address.
+  ///
+  /// \return
+  ///     An SBAddress which will be valid if \a vm_addr was
+  ///     successfully resolved into a section offset address, or an
+  ///     invalid SBAddress if \a vm_addr doesn't resolve to a section
+  ///     in a module.
+  lldb::SBAddress ResolveLoadAddress(lldb::addr_t vm_addr);
+
+  /// Resolve a current load address into a section offset address
+  /// using the process stop ID to identify a time in the past.
+  ///
+  /// \param[in] stop_id
+  ///     Each time a process stops, the process stop ID integer gets
+  ///     incremented. These stop IDs are used to identify past times
+  ///     and can be used in history objects as a cheap way to store
+  ///     the time at which the sample was taken. Specifying
+  ///     UINT32_MAX will always resolve the address using the
+  ///     currently loaded sections.
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual address from the current process state that is to
+  ///     be translated into a section offset address.
+  ///
+  /// \return
+  ///     An SBAddress which will be valid if \a vm_addr was
+  ///     successfully resolved into a section offset address, or an
+  ///     invalid SBAddress if \a vm_addr doesn't resolve to a section
+  ///     in a module.
+  lldb::SBAddress ResolvePastLoadAddress(uint32_t stop_id,
+                                         lldb::addr_t vm_addr);
+
+  SBSymbolContext ResolveSymbolContextForAddress(const SBAddress &addr,
+                                                 uint32_t resolve_scope);
+
+  /// Read target memory. If a target process is running then memory
+  /// is read from here. Otherwise the memory is read from the object
+  /// files. For a target whose bytes are sized as a multiple of host
+  /// bytes, the data read back will preserve the target's byte order.
+  ///
+  /// \param[in] addr
+  ///     A target address to read from.
+  ///
+  /// \param[out] buf
+  ///     The buffer to read memory into.
+  ///
+  /// \param[in] size
+  ///     The maximum number of host bytes to read in the buffer passed
+  ///     into this call
+  ///
+  /// \param[out] error
+  ///     Status information is written here if the memory read fails.
+  ///
+  /// \return
+  ///     The amount of data read in host bytes.
+  size_t ReadMemory(const SBAddress addr, void *buf, size_t size,
+                    lldb::SBError &error);
+
+  lldb::SBBreakpoint BreakpointCreateByLocation(const char *file,
+                                                uint32_t line);
+
+  lldb::SBBreakpoint
+  BreakpointCreateByLocation(const lldb::SBFileSpec &file_spec, uint32_t line);
+
+  lldb::SBBreakpoint
+  BreakpointCreateByLocation(const lldb::SBFileSpec &file_spec, uint32_t line,
+                             lldb::addr_t offset);
+
+  lldb::SBBreakpoint
+  BreakpointCreateByLocation(const lldb::SBFileSpec &file_spec, uint32_t line,
+                             lldb::addr_t offset, SBFileSpecList &module_list);
+
+  lldb::SBBreakpoint
+  BreakpointCreateByLocation(const lldb::SBFileSpec &file_spec, uint32_t line,
+                             uint32_t column, lldb::addr_t offset,
+                             SBFileSpecList &module_list);
+
+  lldb::SBBreakpoint BreakpointCreateByName(const char *symbol_name,
+                                            const char *module_name = nullptr);
+
+  // This version uses name_type_mask = eFunctionNameTypeAuto
+  lldb::SBBreakpoint
+  BreakpointCreateByName(const char *symbol_name,
+                         const SBFileSpecList &module_list,
+                         const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint BreakpointCreateByName(
+      const char *symbol_name,
+      uint32_t
+          name_type_mask, // Logical OR one or more FunctionNameType enum bits
+      const SBFileSpecList &module_list,
+      const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint BreakpointCreateByName(
+      const char *symbol_name,
+      uint32_t
+          name_type_mask, // Logical OR one or more FunctionNameType enum bits
+      lldb::LanguageType symbol_language,
+      const SBFileSpecList &module_list, const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint BreakpointCreateByNames(
+      const char *symbol_name[], uint32_t num_names,
+      uint32_t
+          name_type_mask, // Logical OR one or more FunctionNameType enum bits
+      const SBFileSpecList &module_list,
+      const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint BreakpointCreateByNames(
+      const char *symbol_name[], uint32_t num_names,
+      uint32_t
+          name_type_mask, // Logical OR one or more FunctionNameType enum bits
+      lldb::LanguageType symbol_language,
+      const SBFileSpecList &module_list, const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint BreakpointCreateByNames(
+      const char *symbol_name[], uint32_t num_names,
+      uint32_t
+          name_type_mask, // Logical OR one or more FunctionNameType enum bits
+      lldb::LanguageType symbol_language,
+      lldb::addr_t offset, const SBFileSpecList &module_list,
+      const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint BreakpointCreateByRegex(const char *symbol_name_regex,
+                                             const char *module_name = nullptr);
+
+  lldb::SBBreakpoint
+  BreakpointCreateByRegex(const char *symbol_name_regex,
+                          const SBFileSpecList &module_list,
+                          const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint BreakpointCreateByRegex(
+      const char *symbol_name_regex, lldb::LanguageType symbol_language,
+      const SBFileSpecList &module_list, const SBFileSpecList &comp_unit_list);
+
+  lldb::SBBreakpoint
+  BreakpointCreateBySourceRegex(const char *source_regex,
+                                const SBFileSpec &source_file,
+                                const char *module_name = nullptr);
+
+  lldb::SBBreakpoint
+  BreakpointCreateBySourceRegex(const char *source_regex,
+                                const SBFileSpecList &module_list,
+                                const SBFileSpecList &source_file);
+
+  lldb::SBBreakpoint BreakpointCreateBySourceRegex(
+      const char *source_regex, const SBFileSpecList &module_list,
+      const SBFileSpecList &source_file, const SBStringList &func_names);
+
+  lldb::SBBreakpoint BreakpointCreateForException(lldb::LanguageType language,
+                                                  bool catch_bp, bool throw_bp);
+
+  lldb::SBBreakpoint BreakpointCreateByAddress(addr_t address);
+
+  lldb::SBBreakpoint BreakpointCreateBySBAddress(SBAddress &address);
+  
+  /// Create a breakpoint using a scripted resolver.
+  ///
+  /// \param[in] class_name
+  ///    This is the name of the class that implements a scripted resolver.
+  ///
+  /// \param[in] extra_args
+  ///    This is an SBStructuredData object that will get passed to the
+  ///    constructor of the class in class_name.  You can use this to 
+  ///    reuse the same class, parametrizing with entries from this 
+  ///    dictionary.
+  ///
+  /// \param module_list
+  ///    If this is non-empty, this will be used as the module filter in the 
+  ///    SearchFilter created for this breakpoint.
+  ///
+  /// \param file_list
+  ///    If this is non-empty, this will be used as the comp unit filter in the 
+  ///    SearchFilter created for this breakpoint.
+  ///
+  /// \return
+  ///     An SBBreakpoint that will set locations based on the logic in the
+  ///     resolver's search callback.
+  lldb::SBBreakpoint BreakpointCreateFromScript(
+      const char *class_name,
+      SBStructuredData &extra_args,
+      const SBFileSpecList &module_list,
+      const SBFileSpecList &file_list,
+      bool request_hardware = false);
+
+  /// Read breakpoints from source_file and return the newly created
+  /// breakpoints in bkpt_list.
+  ///
+  /// \param[in] source_file
+  ///    The file from which to read the breakpoints.
+  ///
+  /// \param[out] new_bps
+  ///    A list of the newly created breakpoints.
+  ///
+  /// \return
+  ///     An SBError detailing any errors in reading in the breakpoints.
+  lldb::SBError BreakpointsCreateFromFile(SBFileSpec &source_file,
+                                          SBBreakpointList &new_bps);
+
+  /// Read breakpoints from source_file and return the newly created
+  /// breakpoints in bkpt_list.
+  ///
+  /// \param[in] source_file
+  ///    The file from which to read the breakpoints.
+  ///
+  /// \param[in] matching_names
+  ///    Only read in breakpoints whose names match one of the names in this
+  ///    list.
+  ///
+  /// \param[out] new_bps
+  ///    A list of the newly created breakpoints.
+  ///
+  /// \return
+  ///     An SBError detailing any errors in reading in the breakpoints.
+  lldb::SBError BreakpointsCreateFromFile(SBFileSpec &source_file,
+                                          SBStringList &matching_names,
+                                          SBBreakpointList &new_bps);
+
+  /// Write breakpoints to dest_file.
+  ///
+  /// \param[in] dest_file
+  ///    The file to which to write the breakpoints.
+  ///
+  /// \return
+  ///     An SBError detailing any errors in writing in the breakpoints.
+  lldb::SBError BreakpointsWriteToFile(SBFileSpec &dest_file);
+
+  /// Write breakpoints listed in bkpt_list to dest_file.
+  ///
+  /// \param[in] dest_file
+  ///    The file to which to write the breakpoints.
+  ///
+  /// \param[in] bkpt_list
+  ///    Only write breakpoints from this list.
+  ///
+  /// \param[in] append
+  ///    If \b true, append the breakpoints in bkpt_list to the others
+  ///    serialized in dest_file.  If dest_file doesn't exist, then a new
+  ///    file will be created and the breakpoints in bkpt_list written to it.
+  ///
+  /// \return
+  ///     An SBError detailing any errors in writing in the breakpoints.
+  lldb::SBError BreakpointsWriteToFile(SBFileSpec &dest_file,
+                                       SBBreakpointList &bkpt_list,
+                                       bool append = false);
+
+  uint32_t GetNumBreakpoints() const;
+
+  lldb::SBBreakpoint GetBreakpointAtIndex(uint32_t idx) const;
+
+  bool BreakpointDelete(break_id_t break_id);
+
+  lldb::SBBreakpoint FindBreakpointByID(break_id_t break_id);
+
+  // Finds all breakpoints by name, returning the list in bkpt_list.  Returns
+  // false if the name is not a valid breakpoint name, true otherwise.
+  bool FindBreakpointsByName(const char *name, SBBreakpointList &bkpt_list);
+
+  void GetBreakpointNames(SBStringList &names);
+
+  void DeleteBreakpointName(const char *name);
+
+  bool EnableAllBreakpoints();
+
+  bool DisableAllBreakpoints();
+
+  bool DeleteAllBreakpoints();
+
+  uint32_t GetNumWatchpoints() const;
+
+  lldb::SBWatchpoint GetWatchpointAtIndex(uint32_t idx) const;
+
+  bool DeleteWatchpoint(lldb::watch_id_t watch_id);
+
+  lldb::SBWatchpoint FindWatchpointByID(lldb::watch_id_t watch_id);
+
+  lldb::SBWatchpoint WatchAddress(lldb::addr_t addr, size_t size, bool read,
+                                  bool write, SBError &error);
+
+  bool EnableAllWatchpoints();
+
+  bool DisableAllWatchpoints();
+
+  bool DeleteAllWatchpoints();
+
+  lldb::SBBroadcaster GetBroadcaster() const;
+
+  lldb::SBType FindFirstType(const char *type);
+
+  lldb::SBTypeList FindTypes(const char *type);
+
+  lldb::SBType GetBasicType(lldb::BasicType type);
+
+  lldb::SBValue CreateValueFromAddress(const char *name, lldb::SBAddress addr,
+                                       lldb::SBType type);
+
+  lldb::SBValue CreateValueFromData(const char *name, lldb::SBData data,
+                                    lldb::SBType type);
+
+  lldb::SBValue CreateValueFromExpression(const char *name, const char *expr);
+
+  SBSourceManager GetSourceManager();
+
+  lldb::SBInstructionList ReadInstructions(lldb::SBAddress base_addr,
+                                           uint32_t count);
+
+  lldb::SBInstructionList ReadInstructions(lldb::SBAddress base_addr,
+                                           uint32_t count,
+                                           const char *flavor_string);
+
+  lldb::SBInstructionList GetInstructions(lldb::SBAddress base_addr,
+                                          const void *buf, size_t size);
+
+  // The "WithFlavor" is necessary to keep SWIG from getting confused about
+  // overloaded arguments when using the buf + size -> Python Object magic.
+
+  lldb::SBInstructionList GetInstructionsWithFlavor(lldb::SBAddress base_addr,
+                                                    const char *flavor_string,
+                                                    const void *buf,
+                                                    size_t size);
+
+  lldb::SBInstructionList GetInstructions(lldb::addr_t base_addr,
+                                          const void *buf, size_t size);
+
+  lldb::SBInstructionList GetInstructionsWithFlavor(lldb::addr_t base_addr,
+                                                    const char *flavor_string,
+                                                    const void *buf,
+                                                    size_t size);
+
+  lldb::SBSymbolContextList FindSymbols(const char *name,
+                                        lldb::SymbolType type = eSymbolTypeAny);
+
+  bool operator==(const lldb::SBTarget &rhs) const;
+
+  bool operator!=(const lldb::SBTarget &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  lldb::SBValue EvaluateExpression(const char *expr);
+
+  lldb::SBValue EvaluateExpression(const char *expr,
+                                   const SBExpressionOptions &options);
+
+  lldb::addr_t GetStackRedZoneSize();
+
+  lldb::SBLaunchInfo GetLaunchInfo() const;
+
+  void SetLaunchInfo(const lldb::SBLaunchInfo &launch_info);
+
+protected:
+  friend class SBAddress;
+  friend class SBBlock;
+  friend class SBBreakpointList;
+  friend class SBBreakpointNameImpl;
+  friend class SBDebugger;
+  friend class SBExecutionContext;
+  friend class SBFunction;
+  friend class SBInstruction;
+  friend class SBModule;
+  friend class SBProcess;
+  friend class SBSection;
+  friend class SBSourceManager;
+  friend class SBSymbol;
+  friend class SBValue;
+  friend class SBVariablesOptions;
+
+  // Constructors are private, use static Target::Create function to create an
+  // instance of this class.
+
+  lldb::TargetSP GetSP() const;
+
+  void SetSP(const lldb::TargetSP &target_sp);
+
+private:
+  lldb::TargetSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTarget_h_
diff --git a/linux-x64/clang/include/lldb/API/SBThread.h b/linux-x64/clang/include/lldb/API/SBThread.h
new file mode 100644
index 0000000..da8726a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBThread.h
@@ -0,0 +1,231 @@
+//===-- SBThread.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBThread_h_
+#define LLDB_SBThread_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <stdio.h>
+
+namespace lldb {
+
+class SBFrame;
+
+class LLDB_API SBThread {
+public:
+  enum {
+    eBroadcastBitStackChanged = (1 << 0),
+    eBroadcastBitThreadSuspended = (1 << 1),
+    eBroadcastBitThreadResumed = (1 << 2),
+    eBroadcastBitSelectedFrameChanged = (1 << 3),
+    eBroadcastBitThreadSelected = (1 << 4)
+  };
+
+  static const char *GetBroadcasterClassName();
+
+  SBThread();
+
+  SBThread(const lldb::SBThread &thread);
+
+  SBThread(const lldb::ThreadSP &lldb_object_sp);
+
+  ~SBThread();
+
+  lldb::SBQueue GetQueue() const;
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  lldb::StopReason GetStopReason();
+
+  /// Get the number of words associated with the stop reason.
+  /// See also GetStopReasonDataAtIndex().
+  size_t GetStopReasonDataCount();
+
+  /// Get information associated with a stop reason.
+  ///
+  /// Breakpoint stop reasons will have data that consists of pairs of
+  /// breakpoint IDs followed by the breakpoint location IDs (they always come
+  /// in pairs).
+  ///
+  /// Stop Reason              Count Data Type
+  /// ======================== ===== =========================================
+  /// eStopReasonNone          0
+  /// eStopReasonTrace         0
+  /// eStopReasonBreakpoint    N     duple: {breakpoint id, location id}
+  /// eStopReasonWatchpoint    1     watchpoint id
+  /// eStopReasonSignal        1     unix signal number
+  /// eStopReasonException     N     exception data
+  /// eStopReasonExec          0
+  /// eStopReasonPlanComplete  0
+  uint64_t GetStopReasonDataAtIndex(uint32_t idx);
+
+  bool GetStopReasonExtendedInfoAsJSON(lldb::SBStream &stream);
+
+  SBThreadCollection
+  GetStopReasonExtendedBacktraces(InstrumentationRuntimeType type);
+
+  size_t GetStopDescription(char *dst, size_t dst_len);
+
+  SBValue GetStopReturnValue();
+
+  lldb::tid_t GetThreadID() const;
+
+  uint32_t GetIndexID() const;
+
+  const char *GetName() const;
+
+  const char *GetQueueName() const;
+
+  lldb::queue_id_t GetQueueID() const;
+
+  bool GetInfoItemByPathAsString(const char *path, SBStream &strm);
+
+  void StepOver(lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
+
+  void StepOver(lldb::RunMode stop_other_threads, SBError &error);
+
+  void StepInto(lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
+
+  void StepInto(const char *target_name,
+                lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
+
+  void StepInto(const char *target_name, uint32_t end_line, SBError &error,
+                lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
+
+  void StepOut();
+
+  void StepOut(SBError &error);
+
+  void StepOutOfFrame(SBFrame &frame);
+
+  void StepOutOfFrame(SBFrame &frame, SBError &error);
+
+  void StepInstruction(bool step_over);
+
+  void StepInstruction(bool step_over, SBError &error);
+
+  SBError StepOverUntil(lldb::SBFrame &frame, lldb::SBFileSpec &file_spec,
+                        uint32_t line);
+
+  SBError StepUsingScriptedThreadPlan(const char *script_class_name);
+
+  SBError StepUsingScriptedThreadPlan(const char *script_class_name,
+                                      bool resume_immediately);
+
+  SBError JumpToLine(lldb::SBFileSpec &file_spec, uint32_t line);
+
+  void RunToAddress(lldb::addr_t addr);
+
+  void RunToAddress(lldb::addr_t addr, SBError &error);
+
+  SBError ReturnFromFrame(SBFrame &frame, SBValue &return_value);
+
+  SBError UnwindInnermostExpression();
+
+  /// LLDB currently supports process centric debugging which means when any
+  /// thread in a process stops, all other threads are stopped. The Suspend()
+  /// call here tells our process to suspend a thread and not let it run when
+  /// the other threads in a process are allowed to run. So when
+  /// SBProcess::Continue() is called, any threads that aren't suspended will
+  /// be allowed to run. If any of the SBThread functions for stepping are
+  /// called (StepOver, StepInto, StepOut, StepInstruction, RunToAddress), the
+  /// thread will not be allowed to run and these functions will simply return.
+  ///
+  /// Eventually we plan to add support for thread centric debugging where
+  /// each thread is controlled individually and each thread would broadcast
+  /// its state, but we haven't implemented this yet.
+  ///
+  /// Likewise the SBThread::Resume() call will again allow the thread to run
+  /// when the process is continued.
+  ///
+  /// Suspend() and Resume() functions are not currently reference counted, if
+  /// anyone has the need for them to be reference counted, please let us
+  /// know.
+  bool Suspend();
+
+  bool Suspend(SBError &error);
+
+  bool Resume();
+
+  bool Resume(SBError &error);
+
+  bool IsSuspended();
+
+  bool IsStopped();
+
+  uint32_t GetNumFrames();
+
+  lldb::SBFrame GetFrameAtIndex(uint32_t idx);
+
+  lldb::SBFrame GetSelectedFrame();
+
+  lldb::SBFrame SetSelectedFrame(uint32_t frame_idx);
+
+  static bool EventIsThreadEvent(const SBEvent &event);
+
+  static SBFrame GetStackFrameFromEvent(const SBEvent &event);
+
+  static SBThread GetThreadFromEvent(const SBEvent &event);
+
+  lldb::SBProcess GetProcess();
+
+  const lldb::SBThread &operator=(const lldb::SBThread &rhs);
+
+  bool operator==(const lldb::SBThread &rhs) const;
+
+  bool operator!=(const lldb::SBThread &rhs) const;
+
+  bool GetDescription(lldb::SBStream &description) const;
+
+  bool GetDescription(lldb::SBStream &description, bool stop_format) const;
+
+  bool GetStatus(lldb::SBStream &status) const;
+
+  SBThread GetExtendedBacktraceThread(const char *type);
+
+  uint32_t GetExtendedBacktraceOriginatingIndexID();
+
+  SBValue GetCurrentException();
+
+  SBThread GetCurrentExceptionBacktrace();
+
+  bool SafeToCallFunctions();
+
+private:
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBBreakpointCallbackBaton;
+  friend class SBExecutionContext;
+  friend class SBFrame;
+  friend class SBProcess;
+  friend class SBDebugger;
+  friend class SBValue;
+  friend class lldb_private::QueueImpl;
+  friend class SBQueueItem;
+  friend class SBThreadPlan;
+
+  void SetThread(const lldb::ThreadSP &lldb_object_sp);
+
+  SBError ResumeNewPlan(lldb_private::ExecutionContext &exe_ctx,
+                        lldb_private::ThreadPlan *new_plan);
+
+  lldb::ExecutionContextRefSP m_opaque_sp;
+
+  lldb_private::Thread *operator->();
+
+  lldb_private::Thread *get();
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBThread_h_
diff --git a/linux-x64/clang/include/lldb/API/SBThreadCollection.h b/linux-x64/clang/include/lldb/API/SBThreadCollection.h
new file mode 100644
index 0000000..1c6b463
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBThreadCollection.h
@@ -0,0 +1,57 @@
+//===-- SBThreadCollection.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBThreadCollection_h_
+#define LLDB_SBThreadCollection_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBThreadCollection {
+public:
+  SBThreadCollection();
+
+  SBThreadCollection(const SBThreadCollection &rhs);
+
+  const SBThreadCollection &operator=(const SBThreadCollection &rhs);
+
+  ~SBThreadCollection();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  size_t GetSize();
+
+  lldb::SBThread GetThreadAtIndex(size_t idx);
+
+protected:
+  // Mimic shared pointer...
+  lldb_private::ThreadCollection *get() const;
+
+  lldb_private::ThreadCollection *operator->() const;
+
+  lldb::ThreadCollectionSP &operator*();
+
+  const lldb::ThreadCollectionSP &operator*() const;
+
+  SBThreadCollection(const lldb::ThreadCollectionSP &threads);
+
+  void SetOpaque(const lldb::ThreadCollectionSP &threads);
+
+private:
+  friend class SBProcess;
+  friend class SBThread;
+
+  lldb::ThreadCollectionSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBThreadCollection_h_
diff --git a/linux-x64/clang/include/lldb/API/SBThreadPlan.h b/linux-x64/clang/include/lldb/API/SBThreadPlan.h
new file mode 100644
index 0000000..007e9e2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBThreadPlan.h
@@ -0,0 +1,122 @@
+//===-- SBThreadPlan.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBThreadPlan_h_
+#define LLDB_SBThreadPlan_h_
+
+#include "lldb/API/SBDefines.h"
+
+#include <stdio.h>
+
+namespace lldb {
+
+class LLDB_API SBThreadPlan {
+
+  friend class lldb_private::ThreadPlan;
+
+public:
+  SBThreadPlan();
+
+  SBThreadPlan(const lldb::SBThreadPlan &threadPlan);
+
+  SBThreadPlan(const lldb::ThreadPlanSP &lldb_object_sp);
+
+  SBThreadPlan(lldb::SBThread &thread, const char *class_name);
+
+  ~SBThreadPlan();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  lldb::StopReason GetStopReason();
+
+  /// Get the number of words associated with the stop reason.
+  /// See also GetStopReasonDataAtIndex().
+  size_t GetStopReasonDataCount();
+
+  /// Get information associated with a stop reason.
+  ///
+  /// Breakpoint stop reasons will have data that consists of pairs of
+  /// breakpoint IDs followed by the breakpoint location IDs (they always come
+  /// in pairs).
+  ///
+  /// Stop Reason              Count Data Type
+  /// ======================== ===== =========================================
+  /// eStopReasonNone          0
+  /// eStopReasonTrace         0
+  /// eStopReasonBreakpoint    N     duple: {breakpoint id, location id}
+  /// eStopReasonWatchpoint    1     watchpoint id
+  /// eStopReasonSignal        1     unix signal number
+  /// eStopReasonException     N     exception data
+  /// eStopReasonExec          0
+  /// eStopReasonPlanComplete  0
+  uint64_t GetStopReasonDataAtIndex(uint32_t idx);
+
+  SBThread GetThread() const;
+
+  const lldb::SBThreadPlan &operator=(const lldb::SBThreadPlan &rhs);
+
+  bool GetDescription(lldb::SBStream &description) const;
+
+  void SetPlanComplete(bool success);
+
+  bool IsPlanComplete();
+
+  bool IsPlanStale();
+
+  bool IsValid();
+
+  // This section allows an SBThreadPlan to push another of the common types of
+  // plans...
+  SBThreadPlan QueueThreadPlanForStepOverRange(SBAddress &start_address,
+                                               lldb::addr_t range_size);
+  SBThreadPlan QueueThreadPlanForStepOverRange(SBAddress &start_address,
+                                               lldb::addr_t range_size,
+                                               SBError &error);
+
+  SBThreadPlan QueueThreadPlanForStepInRange(SBAddress &start_address,
+                                             lldb::addr_t range_size);
+  SBThreadPlan QueueThreadPlanForStepInRange(SBAddress &start_address,
+                                             lldb::addr_t range_size,
+                                             SBError &error);
+
+  SBThreadPlan QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,
+                                         bool first_insn = false);
+  SBThreadPlan QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,
+                                         bool first_insn, SBError &error);
+
+  SBThreadPlan QueueThreadPlanForRunToAddress(SBAddress address);
+  SBThreadPlan QueueThreadPlanForRunToAddress(SBAddress address,
+                                              SBError &error);
+
+  SBThreadPlan QueueThreadPlanForStepScripted(const char *script_class_name);
+  SBThreadPlan QueueThreadPlanForStepScripted(const char *script_class_name,
+                                              SBError &error);
+
+private:
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBFrame;
+  friend class SBProcess;
+  friend class SBDebugger;
+  friend class SBValue;
+  friend class lldb_private::QueueImpl;
+  friend class SBQueueItem;
+
+  lldb_private::ThreadPlan *get();
+  void SetThreadPlan(const lldb::ThreadPlanSP &lldb_object_sp);
+
+  lldb::ThreadPlanSP m_opaque_sp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBThreadPlan_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTrace.h b/linux-x64/clang/include/lldb/API/SBTrace.h
new file mode 100644
index 0000000..87c67ad
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTrace.h
@@ -0,0 +1,116 @@
+//===-- SBTrace.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTrace_h_
+#define LLDB_SBTrace_h_
+
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBError.h"
+
+class TraceImpl;
+
+namespace lldb {
+
+class LLDB_API SBTrace {
+public:
+  SBTrace();
+  /// Obtain the trace data as raw bytes.
+  ///
+  /// \param[out] error
+  ///     An error explaining what went wrong.
+  ///
+  /// \param[in] buf
+  ///     Buffer to write the trace data to.
+  ///
+  /// \param[in] size
+  ///     The size of the buffer used to read the data. This is
+  ///     also the size of the data intended to read. It is also
+  ///     possible to partially read the trace data for some trace
+  ///     technologies by specifying a smaller buffer.
+  ///
+  /// \param[in] offset
+  ///     The start offset to begin reading the trace data.
+  ///
+  /// \param[in] thread_id
+  ///     Tracing could be started for the complete process or a
+  ///     single thread, in the first case the traceid obtained would
+  ///     map to all the threads existing within the process and the
+  ///     ones spawning later. The thread_id parameter can be used in
+  ///     such a scenario to select the trace data for a specific
+  ///     thread.
+  ///
+  /// \return
+  ///     The size of the trace data effectively read by the API call.
+  size_t GetTraceData(SBError &error, void *buf, size_t size, size_t offset = 0,
+                      lldb::tid_t thread_id = LLDB_INVALID_THREAD_ID);
+
+  /// Obtain any meta data as raw bytes for the tracing instance.
+  /// The input parameter definition is similar to the previous
+  /// function.
+  size_t GetMetaData(SBError &error, void *buf, size_t size, size_t offset = 0,
+                     lldb::tid_t thread_id = LLDB_INVALID_THREAD_ID);
+
+  /// Stop the tracing instance. Stopping the trace will also
+  /// lead to deletion of any gathered trace data.
+  ///
+  /// \param[out] error
+  ///     An error explaining what went wrong.
+  ///
+  /// \param[in] thread_id
+  ///     The trace id could map to a tracing instance for a thread
+  ///     or could also map to a group of threads being traced with
+  ///     the same trace options. A thread_id is normally optional
+  ///     except in the case of tracing a complete process and tracing
+  ///     needs to switched off on a particular thread.
+  ///     A situation could occur where initially a thread (lets say
+  ///     thread A) is being individually traced with a particular
+  ///     trace id and then tracing is started on the complete
+  ///     process, in this case thread A will continue without any
+  ///     change. All newly spawned threads would be traced with the
+  ///     trace id of the process.
+  ///     Now if the StopTrace API is called for the whole process,
+  ///     thread A will not be stopped and must be stopped separately.
+  void StopTrace(SBError &error,
+                 lldb::tid_t thread_id = LLDB_INVALID_THREAD_ID);
+
+  /// Get the trace configuration being used for the trace instance.
+  /// The threadid in the SBTraceOptions needs to be set when the
+  /// configuration used by a specific thread is being requested.
+  ///
+  /// \param[out] options
+  ///     The trace options actually used by the trace instance
+  ///     would be filled by the API.
+  ///
+  /// \param[out] error
+  ///     An error explaining what went wrong.
+  void GetTraceConfig(SBTraceOptions &options, SBError &error);
+
+  lldb::user_id_t GetTraceUID();
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+protected:
+  typedef std::shared_ptr<TraceImpl> TraceImplSP;
+
+  friend class SBProcess;
+
+  void SetTraceUID(lldb::user_id_t uid);
+
+  TraceImplSP m_trace_impl_sp;
+
+  lldb::ProcessSP GetSP() const;
+
+  void SetSP(const ProcessSP &process_sp);
+
+  lldb::ProcessWP m_opaque_wp;
+};
+} // namespace lldb
+
+#endif // LLDB_SBTrace_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTraceOptions.h b/linux-x64/clang/include/lldb/API/SBTraceOptions.h
new file mode 100644
index 0000000..4c586bf
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTraceOptions.h
@@ -0,0 +1,59 @@
+//===-- SBTraceOptions ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SBTRACEOPTIONS_H_
+#define SBTRACEOPTIONS_H_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBTraceOptions {
+public:
+  SBTraceOptions();
+
+  lldb::TraceType getType() const;
+
+  uint64_t getTraceBufferSize() const;
+
+  /// The trace parameters consist of any custom parameters
+  /// apart from the generic parameters such as
+  /// TraceType, trace_buffer_size and meta_data_buffer_size.
+  /// The returned parameters would be formatted as a JSON Dictionary.
+  lldb::SBStructuredData getTraceParams(lldb::SBError &error);
+
+  uint64_t getMetaDataBufferSize() const;
+
+  /// SBStructuredData is meant to hold any custom parameters
+  /// apart from meta buffer size and trace size. They should
+  /// be formatted as a JSON Dictionary.
+  void setTraceParams(lldb::SBStructuredData &params);
+
+  void setType(lldb::TraceType type);
+
+  void setTraceBufferSize(uint64_t size);
+
+  void setMetaDataBufferSize(uint64_t size);
+
+  void setThreadID(lldb::tid_t thread_id);
+
+  lldb::tid_t getThreadID();
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+protected:
+  friend class SBProcess;
+  friend class SBTrace;
+
+  lldb::TraceOptionsSP m_traceoptions_sp;
+};
+}
+
+#endif /* SBTRACEOPTIONS_H_ */
diff --git a/linux-x64/clang/include/lldb/API/SBType.h b/linux-x64/clang/include/lldb/API/SBType.h
new file mode 100644
index 0000000..b3f92b7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBType.h
@@ -0,0 +1,262 @@
+//===-- SBType.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBType_h_
+#define LLDB_SBType_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class SBTypeList;
+
+class LLDB_API SBTypeMember {
+public:
+  SBTypeMember();
+
+  SBTypeMember(const lldb::SBTypeMember &rhs);
+
+  ~SBTypeMember();
+
+  lldb::SBTypeMember &operator=(const lldb::SBTypeMember &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetName();
+
+  lldb::SBType GetType();
+
+  uint64_t GetOffsetInBytes();
+
+  uint64_t GetOffsetInBits();
+
+  bool IsBitfield();
+
+  uint32_t GetBitfieldSizeInBits();
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+protected:
+  friend class SBType;
+
+  void reset(lldb_private::TypeMemberImpl *);
+
+  lldb_private::TypeMemberImpl &ref();
+
+  const lldb_private::TypeMemberImpl &ref() const;
+
+  std::unique_ptr<lldb_private::TypeMemberImpl> m_opaque_up;
+};
+
+class SBTypeMemberFunction {
+public:
+  SBTypeMemberFunction();
+
+  SBTypeMemberFunction(const lldb::SBTypeMemberFunction &rhs);
+
+  ~SBTypeMemberFunction();
+
+  lldb::SBTypeMemberFunction &operator=(const lldb::SBTypeMemberFunction &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetName();
+
+  const char *GetDemangledName();
+
+  const char *GetMangledName();
+
+  lldb::SBType GetType();
+
+  lldb::SBType GetReturnType();
+
+  uint32_t GetNumberOfArguments();
+
+  lldb::SBType GetArgumentTypeAtIndex(uint32_t);
+
+  lldb::MemberFunctionKind GetKind();
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+protected:
+  friend class SBType;
+
+  void reset(lldb_private::TypeMemberFunctionImpl *);
+
+  lldb_private::TypeMemberFunctionImpl &ref();
+
+  const lldb_private::TypeMemberFunctionImpl &ref() const;
+
+  lldb::TypeMemberFunctionImplSP m_opaque_sp;
+};
+
+class SBType {
+public:
+  SBType();
+
+  SBType(const lldb::SBType &rhs);
+
+  ~SBType();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  uint64_t GetByteSize();
+
+  bool IsPointerType();
+
+  bool IsReferenceType();
+
+  bool IsFunctionType();
+
+  bool IsPolymorphicClass();
+
+  bool IsArrayType();
+
+  bool IsVectorType();
+
+  bool IsTypedefType();
+
+  bool IsAnonymousType();
+
+  lldb::SBType GetPointerType();
+
+  lldb::SBType GetPointeeType();
+
+  lldb::SBType GetReferenceType();
+
+  lldb::SBType GetTypedefedType();
+
+  lldb::SBType GetDereferencedType();
+
+  lldb::SBType GetUnqualifiedType();
+
+  lldb::SBType GetArrayElementType();
+
+  lldb::SBType GetArrayType(uint64_t size);
+
+  lldb::SBType GetVectorElementType();
+
+  lldb::SBType GetCanonicalType();
+  // Get the "lldb::BasicType" enumeration for a type. If a type is not a basic
+  // type eBasicTypeInvalid will be returned
+  lldb::BasicType GetBasicType();
+
+  // The call below confusing and should really be renamed to "CreateBasicType"
+  lldb::SBType GetBasicType(lldb::BasicType type);
+
+  uint32_t GetNumberOfFields();
+
+  uint32_t GetNumberOfDirectBaseClasses();
+
+  uint32_t GetNumberOfVirtualBaseClasses();
+
+  lldb::SBTypeMember GetFieldAtIndex(uint32_t idx);
+
+  lldb::SBTypeMember GetDirectBaseClassAtIndex(uint32_t idx);
+
+  lldb::SBTypeMember GetVirtualBaseClassAtIndex(uint32_t idx);
+
+  lldb::SBTypeEnumMemberList GetEnumMembers();
+
+  uint32_t GetNumberOfTemplateArguments();
+
+  lldb::SBType GetTemplateArgumentType(uint32_t idx);
+
+  lldb::TemplateArgumentKind GetTemplateArgumentKind(uint32_t idx);
+
+  lldb::SBType GetFunctionReturnType();
+
+  lldb::SBTypeList GetFunctionArgumentTypes();
+
+  uint32_t GetNumberOfMemberFunctions();
+
+  lldb::SBTypeMemberFunction GetMemberFunctionAtIndex(uint32_t idx);
+
+  const char *GetName();
+
+  const char *GetDisplayTypeName();
+
+  lldb::TypeClass GetTypeClass();
+
+  bool IsTypeComplete();
+
+  uint32_t GetTypeFlags();
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  lldb::SBType &operator=(const lldb::SBType &rhs);
+
+  bool operator==(lldb::SBType &rhs);
+
+  bool operator!=(lldb::SBType &rhs);
+
+protected:
+  lldb_private::TypeImpl &ref();
+
+  const lldb_private::TypeImpl &ref() const;
+
+  lldb::TypeImplSP GetSP();
+
+  void SetSP(const lldb::TypeImplSP &type_impl_sp);
+
+  lldb::TypeImplSP m_opaque_sp;
+
+  friend class SBFunction;
+  friend class SBModule;
+  friend class SBTarget;
+  friend class SBTypeEnumMember;
+  friend class SBTypeEnumMemberList;
+  friend class SBTypeNameSpecifier;
+  friend class SBTypeMember;
+  friend class SBTypeMemberFunction;
+  friend class SBTypeList;
+  friend class SBValue;
+
+  SBType(const lldb_private::CompilerType &);
+  SBType(const lldb::TypeSP &);
+  SBType(const lldb::TypeImplSP &);
+};
+
+class SBTypeList {
+public:
+  SBTypeList();
+
+  SBTypeList(const lldb::SBTypeList &rhs);
+
+  ~SBTypeList();
+
+  lldb::SBTypeList &operator=(const lldb::SBTypeList &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+  void Append(lldb::SBType type);
+
+  lldb::SBType GetTypeAtIndex(uint32_t index);
+
+  uint32_t GetSize();
+
+private:
+  std::unique_ptr<lldb_private::TypeListImpl> m_opaque_up;
+  friend class SBModule;
+  friend class SBCompileUnit;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBType_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTypeCategory.h b/linux-x64/clang/include/lldb/API/SBTypeCategory.h
new file mode 100644
index 0000000..c0f4cee
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTypeCategory.h
@@ -0,0 +1,116 @@
+//===-- SBTypeCategory.h --------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTypeCategory_h_
+#define LLDB_SBTypeCategory_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBTypeCategory {
+public:
+  SBTypeCategory();
+
+  SBTypeCategory(const lldb::SBTypeCategory &rhs);
+
+  ~SBTypeCategory();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  bool GetEnabled();
+
+  void SetEnabled(bool);
+
+  const char *GetName();
+
+  lldb::LanguageType GetLanguageAtIndex(uint32_t idx);
+
+  uint32_t GetNumLanguages();
+
+  void AddLanguage(lldb::LanguageType language);
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  uint32_t GetNumFormats();
+
+  uint32_t GetNumSummaries();
+
+  uint32_t GetNumFilters();
+
+  uint32_t GetNumSynthetics();
+
+  SBTypeNameSpecifier GetTypeNameSpecifierForFilterAtIndex(uint32_t);
+
+  SBTypeNameSpecifier GetTypeNameSpecifierForFormatAtIndex(uint32_t);
+
+  SBTypeNameSpecifier GetTypeNameSpecifierForSummaryAtIndex(uint32_t);
+
+  SBTypeNameSpecifier GetTypeNameSpecifierForSyntheticAtIndex(uint32_t);
+
+  SBTypeFilter GetFilterForType(SBTypeNameSpecifier);
+
+  SBTypeFormat GetFormatForType(SBTypeNameSpecifier);
+
+  SBTypeSummary GetSummaryForType(SBTypeNameSpecifier);
+
+  SBTypeSynthetic GetSyntheticForType(SBTypeNameSpecifier);
+
+  SBTypeFilter GetFilterAtIndex(uint32_t);
+
+  SBTypeFormat GetFormatAtIndex(uint32_t);
+
+  SBTypeSummary GetSummaryAtIndex(uint32_t);
+
+  SBTypeSynthetic GetSyntheticAtIndex(uint32_t);
+
+  bool AddTypeFormat(SBTypeNameSpecifier, SBTypeFormat);
+
+  bool DeleteTypeFormat(SBTypeNameSpecifier);
+
+  bool AddTypeSummary(SBTypeNameSpecifier, SBTypeSummary);
+
+  bool DeleteTypeSummary(SBTypeNameSpecifier);
+
+  bool AddTypeFilter(SBTypeNameSpecifier, SBTypeFilter);
+
+  bool DeleteTypeFilter(SBTypeNameSpecifier);
+
+  bool AddTypeSynthetic(SBTypeNameSpecifier, SBTypeSynthetic);
+
+  bool DeleteTypeSynthetic(SBTypeNameSpecifier);
+
+  lldb::SBTypeCategory &operator=(const lldb::SBTypeCategory &rhs);
+
+  bool operator==(lldb::SBTypeCategory &rhs);
+
+  bool operator!=(lldb::SBTypeCategory &rhs);
+
+protected:
+  friend class SBDebugger;
+
+  lldb::TypeCategoryImplSP GetSP();
+
+  void SetSP(const lldb::TypeCategoryImplSP &typecategory_impl_sp);
+
+  TypeCategoryImplSP m_opaque_sp;
+
+  SBTypeCategory(const lldb::TypeCategoryImplSP &);
+
+  SBTypeCategory(const char *);
+
+  bool IsDefaultCategory();
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTypeCategory_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTypeEnumMember.h b/linux-x64/clang/include/lldb/API/SBTypeEnumMember.h
new file mode 100644
index 0000000..2410dbc
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTypeEnumMember.h
@@ -0,0 +1,83 @@
+
+//===-- SBTypeEnumMember.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTypeEnumMember_h_
+#define LLDB_SBTypeEnumMember_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBTypeEnumMember {
+public:
+  SBTypeEnumMember();
+
+  SBTypeEnumMember(const SBTypeEnumMember &rhs);
+
+  ~SBTypeEnumMember();
+
+  SBTypeEnumMember &operator=(const SBTypeEnumMember &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  int64_t GetValueAsSigned();
+
+  uint64_t GetValueAsUnsigned();
+
+  const char *GetName();
+
+  lldb::SBType GetType();
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+protected:
+  friend class SBType;
+  friend class SBTypeEnumMemberList;
+
+  void reset(lldb_private::TypeEnumMemberImpl *);
+
+  lldb_private::TypeEnumMemberImpl &ref();
+
+  const lldb_private::TypeEnumMemberImpl &ref() const;
+
+  lldb::TypeEnumMemberImplSP m_opaque_sp;
+
+  SBTypeEnumMember(const lldb::TypeEnumMemberImplSP &);
+};
+
+class SBTypeEnumMemberList {
+public:
+  SBTypeEnumMemberList();
+
+  SBTypeEnumMemberList(const SBTypeEnumMemberList &rhs);
+
+  ~SBTypeEnumMemberList();
+
+  SBTypeEnumMemberList &operator=(const SBTypeEnumMemberList &rhs);
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+  void Append(SBTypeEnumMember entry);
+
+  SBTypeEnumMember GetTypeEnumMemberAtIndex(uint32_t index);
+
+  uint32_t GetSize();
+
+private:
+  std::unique_ptr<lldb_private::TypeEnumMemberListImpl> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTypeEnumMember_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTypeFilter.h b/linux-x64/clang/include/lldb/API/SBTypeFilter.h
new file mode 100644
index 0000000..4a0de11
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTypeFilter.h
@@ -0,0 +1,74 @@
+//===-- SBTypeFilter.h --------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTypeFilter_h_
+#define LLDB_SBTypeFilter_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBTypeFilter {
+public:
+  SBTypeFilter();
+
+  SBTypeFilter(uint32_t options); // see lldb::eTypeOption values
+
+  SBTypeFilter(const lldb::SBTypeFilter &rhs);
+
+  ~SBTypeFilter();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  uint32_t GetNumberOfExpressionPaths();
+
+  const char *GetExpressionPathAtIndex(uint32_t i);
+
+  bool ReplaceExpressionPathAtIndex(uint32_t i, const char *item);
+
+  void AppendExpressionPath(const char *item);
+
+  void Clear();
+
+  uint32_t GetOptions();
+
+  void SetOptions(uint32_t);
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  lldb::SBTypeFilter &operator=(const lldb::SBTypeFilter &rhs);
+
+  bool IsEqualTo(lldb::SBTypeFilter &rhs);
+
+  bool operator==(lldb::SBTypeFilter &rhs);
+
+  bool operator!=(lldb::SBTypeFilter &rhs);
+
+protected:
+  friend class SBDebugger;
+  friend class SBTypeCategory;
+  friend class SBValue;
+
+  lldb::TypeFilterImplSP GetSP();
+
+  void SetSP(const lldb::TypeFilterImplSP &typefilter_impl_sp);
+
+  lldb::TypeFilterImplSP m_opaque_sp;
+
+  SBTypeFilter(const lldb::TypeFilterImplSP &);
+
+  bool CopyOnWrite_Impl();
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTypeFilter_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTypeFormat.h b/linux-x64/clang/include/lldb/API/SBTypeFormat.h
new file mode 100644
index 0000000..8a0ac77
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTypeFormat.h
@@ -0,0 +1,78 @@
+//===-- SBTypeFormat.h --------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTypeFormat_h_
+#define LLDB_SBTypeFormat_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBTypeFormat {
+public:
+  SBTypeFormat();
+
+  SBTypeFormat(lldb::Format format,
+               uint32_t options = 0); // see lldb::eTypeOption values
+
+  SBTypeFormat(const char *type,
+               uint32_t options = 0); // see lldb::eTypeOption values
+
+  SBTypeFormat(const lldb::SBTypeFormat &rhs);
+
+  ~SBTypeFormat();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  lldb::Format GetFormat();
+
+  const char *GetTypeName();
+
+  uint32_t GetOptions();
+
+  void SetFormat(lldb::Format);
+
+  void SetTypeName(const char *);
+
+  void SetOptions(uint32_t);
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  lldb::SBTypeFormat &operator=(const lldb::SBTypeFormat &rhs);
+
+  bool IsEqualTo(lldb::SBTypeFormat &rhs);
+
+  bool operator==(lldb::SBTypeFormat &rhs);
+
+  bool operator!=(lldb::SBTypeFormat &rhs);
+
+protected:
+  friend class SBDebugger;
+  friend class SBTypeCategory;
+  friend class SBValue;
+
+  lldb::TypeFormatImplSP GetSP();
+
+  void SetSP(const lldb::TypeFormatImplSP &typeformat_impl_sp);
+
+  lldb::TypeFormatImplSP m_opaque_sp;
+
+  SBTypeFormat(const lldb::TypeFormatImplSP &);
+
+  enum class Type { eTypeKeepSame, eTypeFormat, eTypeEnum };
+
+  bool CopyOnWrite_Impl(Type);
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTypeFormat_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTypeNameSpecifier.h b/linux-x64/clang/include/lldb/API/SBTypeNameSpecifier.h
new file mode 100644
index 0000000..9fe449d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTypeNameSpecifier.h
@@ -0,0 +1,65 @@
+//===-- SBTypeNameSpecifier.h --------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTypeNameSpecifier_h_
+#define LLDB_SBTypeNameSpecifier_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBTypeNameSpecifier {
+public:
+  SBTypeNameSpecifier();
+
+  SBTypeNameSpecifier(const char *name, bool is_regex = false);
+
+  SBTypeNameSpecifier(SBType type);
+
+  SBTypeNameSpecifier(const lldb::SBTypeNameSpecifier &rhs);
+
+  ~SBTypeNameSpecifier();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetName();
+
+  SBType GetType();
+
+  bool IsRegex();
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  lldb::SBTypeNameSpecifier &operator=(const lldb::SBTypeNameSpecifier &rhs);
+
+  bool IsEqualTo(lldb::SBTypeNameSpecifier &rhs);
+
+  bool operator==(lldb::SBTypeNameSpecifier &rhs);
+
+  bool operator!=(lldb::SBTypeNameSpecifier &rhs);
+
+protected:
+  friend class SBDebugger;
+  friend class SBTypeCategory;
+
+  lldb::TypeNameSpecifierImplSP GetSP();
+
+  void SetSP(const lldb::TypeNameSpecifierImplSP &type_namespec_sp);
+
+  lldb::TypeNameSpecifierImplSP m_opaque_sp;
+
+  SBTypeNameSpecifier(const lldb::TypeNameSpecifierImplSP &);
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTypeNameSpecifier_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTypeSummary.h b/linux-x64/clang/include/lldb/API/SBTypeSummary.h
new file mode 100644
index 0000000..bb7121f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTypeSummary.h
@@ -0,0 +1,139 @@
+//===-- SBTypeSummary.h -------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTypeSummary_h_
+#define LLDB_SBTypeSummary_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+class LLDB_API SBTypeSummaryOptions {
+public:
+  SBTypeSummaryOptions();
+
+  SBTypeSummaryOptions(const lldb::SBTypeSummaryOptions &rhs);
+
+  SBTypeSummaryOptions(const lldb_private::TypeSummaryOptions *lldb_object_ptr);
+
+  ~SBTypeSummaryOptions();
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+  lldb::LanguageType GetLanguage();
+
+  lldb::TypeSummaryCapping GetCapping();
+
+  void SetLanguage(lldb::LanguageType);
+
+  void SetCapping(lldb::TypeSummaryCapping);
+
+protected:
+  friend class SBValue;
+
+  lldb_private::TypeSummaryOptions *operator->();
+
+  const lldb_private::TypeSummaryOptions *operator->() const;
+
+  lldb_private::TypeSummaryOptions *get();
+
+  lldb_private::TypeSummaryOptions &ref();
+
+  const lldb_private::TypeSummaryOptions &ref() const;
+
+  void SetOptions(const lldb_private::TypeSummaryOptions *lldb_object_ptr);
+
+private:
+  std::unique_ptr<lldb_private::TypeSummaryOptions> m_opaque_up;
+};
+
+class SBTypeSummary {
+public:
+  SBTypeSummary();
+
+  // Native function summary formatter callback
+  typedef bool (*FormatCallback)(SBValue, SBTypeSummaryOptions, SBStream &);
+
+  static SBTypeSummary
+  CreateWithSummaryString(const char *data,
+                          uint32_t options = 0); // see lldb::eTypeOption values
+
+  static SBTypeSummary
+  CreateWithFunctionName(const char *data,
+                         uint32_t options = 0); // see lldb::eTypeOption values
+
+  static SBTypeSummary
+  CreateWithScriptCode(const char *data,
+                       uint32_t options = 0); // see lldb::eTypeOption values
+
+  static SBTypeSummary CreateWithCallback(FormatCallback cb,
+                                          uint32_t options = 0,
+                                          const char *description = nullptr);
+
+  SBTypeSummary(const lldb::SBTypeSummary &rhs);
+
+  ~SBTypeSummary();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  bool IsFunctionCode();
+
+  bool IsFunctionName();
+
+  bool IsSummaryString();
+
+  const char *GetData();
+
+  void SetSummaryString(const char *data);
+
+  void SetFunctionName(const char *data);
+
+  void SetFunctionCode(const char *data);
+
+  uint32_t GetOptions();
+
+  void SetOptions(uint32_t);
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  lldb::SBTypeSummary &operator=(const lldb::SBTypeSummary &rhs);
+
+  bool DoesPrintValue(lldb::SBValue value);
+
+  bool IsEqualTo(lldb::SBTypeSummary &rhs);
+
+  bool operator==(lldb::SBTypeSummary &rhs);
+
+  bool operator!=(lldb::SBTypeSummary &rhs);
+
+protected:
+  friend class SBDebugger;
+  friend class SBTypeCategory;
+  friend class SBValue;
+
+  lldb::TypeSummaryImplSP GetSP();
+
+  void SetSP(const lldb::TypeSummaryImplSP &typefilter_impl_sp);
+
+  lldb::TypeSummaryImplSP m_opaque_sp;
+
+  SBTypeSummary(const lldb::TypeSummaryImplSP &);
+
+  bool CopyOnWrite_Impl();
+
+  bool ChangeSummaryType(bool want_script);
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTypeSummary_h_
diff --git a/linux-x64/clang/include/lldb/API/SBTypeSynthetic.h b/linux-x64/clang/include/lldb/API/SBTypeSynthetic.h
new file mode 100644
index 0000000..c190643
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBTypeSynthetic.h
@@ -0,0 +1,80 @@
+//===-- SBTypeSynthetic.h -----------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBTypeSynthetic_h_
+#define LLDB_SBTypeSynthetic_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBTypeSynthetic {
+public:
+  SBTypeSynthetic();
+
+  static SBTypeSynthetic
+  CreateWithClassName(const char *data,
+                      uint32_t options = 0); // see lldb::eTypeOption values
+
+  static SBTypeSynthetic
+  CreateWithScriptCode(const char *data,
+                       uint32_t options = 0); // see lldb::eTypeOption values
+
+  SBTypeSynthetic(const lldb::SBTypeSynthetic &rhs);
+
+  ~SBTypeSynthetic();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  bool IsClassCode();
+
+  bool IsClassName();
+
+  const char *GetData();
+
+  void SetClassName(const char *data);
+
+  void SetClassCode(const char *data);
+
+  uint32_t GetOptions();
+
+  void SetOptions(uint32_t);
+
+  bool GetDescription(lldb::SBStream &description,
+                      lldb::DescriptionLevel description_level);
+
+  lldb::SBTypeSynthetic &operator=(const lldb::SBTypeSynthetic &rhs);
+
+  bool IsEqualTo(lldb::SBTypeSynthetic &rhs);
+
+  bool operator==(lldb::SBTypeSynthetic &rhs);
+
+  bool operator!=(lldb::SBTypeSynthetic &rhs);
+
+protected:
+  friend class SBDebugger;
+  friend class SBTypeCategory;
+  friend class SBValue;
+
+  lldb::ScriptedSyntheticChildrenSP GetSP();
+
+  void SetSP(const lldb::ScriptedSyntheticChildrenSP &typefilter_impl_sp);
+
+  lldb::ScriptedSyntheticChildrenSP m_opaque_sp;
+
+  SBTypeSynthetic(const lldb::ScriptedSyntheticChildrenSP &);
+
+  bool CopyOnWrite_Impl();
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBTypeSynthetic_h_
diff --git a/linux-x64/clang/include/lldb/API/SBUnixSignals.h b/linux-x64/clang/include/lldb/API/SBUnixSignals.h
new file mode 100644
index 0000000..c7e99d1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBUnixSignals.h
@@ -0,0 +1,71 @@
+//===-- SBUnixSignals.h -----------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBUnixSignals_h_
+#define LLDB_SBUnixSignals_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBUnixSignals {
+public:
+  SBUnixSignals();
+
+  SBUnixSignals(const lldb::SBUnixSignals &rhs);
+
+  ~SBUnixSignals();
+
+  const SBUnixSignals &operator=(const lldb::SBUnixSignals &rhs);
+
+  void Clear();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  const char *GetSignalAsCString(int32_t signo) const;
+
+  int32_t GetSignalNumberFromName(const char *name) const;
+
+  bool GetShouldSuppress(int32_t signo) const;
+
+  bool SetShouldSuppress(int32_t signo, bool value);
+
+  bool GetShouldStop(int32_t signo) const;
+
+  bool SetShouldStop(int32_t signo, bool value);
+
+  bool GetShouldNotify(int32_t signo) const;
+
+  bool SetShouldNotify(int32_t signo, bool value);
+
+  int32_t GetNumSignals() const;
+
+  int32_t GetSignalAtIndex(int32_t index) const;
+
+protected:
+  friend class SBProcess;
+  friend class SBPlatform;
+
+  SBUnixSignals(lldb::ProcessSP &process_sp);
+
+  SBUnixSignals(lldb::PlatformSP &platform_sp);
+
+  lldb::UnixSignalsSP GetSP() const;
+
+  void SetSP(const lldb::UnixSignalsSP &signals_sp);
+
+private:
+  lldb::UnixSignalsWP m_opaque_wp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBUnixSignals_h_
diff --git a/linux-x64/clang/include/lldb/API/SBValue.h b/linux-x64/clang/include/lldb/API/SBValue.h
new file mode 100644
index 0000000..c36ba20
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBValue.h
@@ -0,0 +1,435 @@
+//===-- SBValue.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBValue_h_
+#define LLDB_SBValue_h_
+
+#include "lldb/API/SBData.h"
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBType.h"
+
+class ValueImpl;
+class ValueLocker;
+
+namespace lldb {
+
+class LLDB_API SBValue {
+public:
+  SBValue();
+
+  SBValue(const lldb::SBValue &rhs);
+
+  lldb::SBValue &operator=(const lldb::SBValue &rhs);
+
+  ~SBValue();
+
+  explicit operator bool() const;
+
+  bool IsValid();
+
+  void Clear();
+
+  SBError GetError();
+
+  lldb::user_id_t GetID();
+
+  const char *GetName();
+
+  const char *GetTypeName();
+
+  const char *GetDisplayTypeName();
+
+  size_t GetByteSize();
+
+  bool IsInScope();
+
+  lldb::Format GetFormat();
+
+  void SetFormat(lldb::Format format);
+
+  const char *GetValue();
+
+  int64_t GetValueAsSigned(lldb::SBError &error, int64_t fail_value = 0);
+
+  uint64_t GetValueAsUnsigned(lldb::SBError &error, uint64_t fail_value = 0);
+
+  int64_t GetValueAsSigned(int64_t fail_value = 0);
+
+  uint64_t GetValueAsUnsigned(uint64_t fail_value = 0);
+
+  ValueType GetValueType();
+
+  // If you call this on a newly created ValueObject, it will always return
+  // false.
+  bool GetValueDidChange();
+
+  const char *GetSummary();
+
+  const char *GetSummary(lldb::SBStream &stream,
+                         lldb::SBTypeSummaryOptions &options);
+
+  const char *GetObjectDescription();
+
+  const char *GetTypeValidatorResult();
+
+  lldb::SBValue GetDynamicValue(lldb::DynamicValueType use_dynamic);
+
+  lldb::SBValue GetStaticValue();
+
+  lldb::SBValue GetNonSyntheticValue();
+
+  lldb::DynamicValueType GetPreferDynamicValue();
+
+  void SetPreferDynamicValue(lldb::DynamicValueType use_dynamic);
+
+  bool GetPreferSyntheticValue();
+
+  void SetPreferSyntheticValue(bool use_synthetic);
+
+  bool IsDynamic();
+
+  bool IsSynthetic();
+
+  bool IsSyntheticChildrenGenerated();
+
+  void SetSyntheticChildrenGenerated(bool);
+
+  const char *GetLocation();
+
+  // Deprecated - use the one that takes SBError&
+  bool SetValueFromCString(const char *value_str);
+
+  bool SetValueFromCString(const char *value_str, lldb::SBError &error);
+
+  lldb::SBTypeFormat GetTypeFormat();
+
+  lldb::SBTypeSummary GetTypeSummary();
+
+  lldb::SBTypeFilter GetTypeFilter();
+
+  lldb::SBTypeSynthetic GetTypeSynthetic();
+
+  lldb::SBValue GetChildAtIndex(uint32_t idx);
+
+  lldb::SBValue CreateChildAtOffset(const char *name, uint32_t offset,
+                                    lldb::SBType type);
+
+  // Deprecated - use the expression evaluator to perform type casting
+  lldb::SBValue Cast(lldb::SBType type);
+
+  lldb::SBValue CreateValueFromExpression(const char *name,
+                                          const char *expression);
+
+  lldb::SBValue CreateValueFromExpression(const char *name,
+                                          const char *expression,
+                                          SBExpressionOptions &options);
+
+  lldb::SBValue CreateValueFromAddress(const char *name, lldb::addr_t address,
+                                       lldb::SBType type);
+
+  // this has no address! GetAddress() and GetLoadAddress() as well as
+  // AddressOf() on the return of this call all return invalid
+  lldb::SBValue CreateValueFromData(const char *name, lldb::SBData data,
+                                    lldb::SBType type);
+
+  /// Get a child value by index from a value.
+  ///
+  /// Structs, unions, classes, arrays and pointers have child
+  /// values that can be access by index.
+  ///
+  /// Structs and unions access child members using a zero based index
+  /// for each child member. For
+  ///
+  /// Classes reserve the first indexes for base classes that have
+  /// members (empty base classes are omitted), and all members of the
+  /// current class will then follow the base classes.
+  ///
+  /// Pointers differ depending on what they point to. If the pointer
+  /// points to a simple type, the child at index zero
+  /// is the only child value available, unless \a synthetic_allowed
+  /// is \b true, in which case the pointer will be used as an array
+  /// and can create 'synthetic' child values using positive or
+  /// negative indexes. If the pointer points to an aggregate type
+  /// (an array, class, union, struct), then the pointee is
+  /// transparently skipped and any children are going to be the indexes
+  /// of the child values within the aggregate type. For example if
+  /// we have a 'Point' type and we have a SBValue that contains a
+  /// pointer to a 'Point' type, then the child at index zero will be
+  /// the 'x' member, and the child at index 1 will be the 'y' member
+  /// (the child at index zero won't be a 'Point' instance).
+  ///
+  /// If you actually need an SBValue that represents the type pointed
+  /// to by a SBValue for which GetType().IsPointeeType() returns true,
+  /// regardless of the pointee type, you can do that with SBValue::Dereference.
+  ///
+  /// Arrays have a preset number of children that can be accessed by
+  /// index and will returns invalid child values for indexes that are
+  /// out of bounds unless the \a synthetic_allowed is \b true. In this
+  /// case the array can create 'synthetic' child values for indexes
+  /// that aren't in the array bounds using positive or negative
+  /// indexes.
+  ///
+  /// \param[in] idx
+  ///     The index of the child value to get
+  ///
+  /// \param[in] use_dynamic
+  ///     An enumeration that specifies whether to get dynamic values,
+  ///     and also if the target can be run to figure out the dynamic
+  ///     type of the child value.
+  ///
+  /// \param[in] can_create_synthetic
+  ///     If \b true, then allow child values to be created by index
+  ///     for pointers and arrays for indexes that normally wouldn't
+  ///     be allowed.
+  ///
+  /// \return
+  ///     A new SBValue object that represents the child member value.
+  lldb::SBValue GetChildAtIndex(uint32_t idx,
+                                lldb::DynamicValueType use_dynamic,
+                                bool can_create_synthetic);
+
+  // Matches children of this object only and will match base classes and
+  // member names if this is a clang typed object.
+  uint32_t GetIndexOfChildWithName(const char *name);
+
+  // Matches child members of this object and child members of any base
+  // classes.
+  lldb::SBValue GetChildMemberWithName(const char *name);
+
+  // Matches child members of this object and child members of any base
+  // classes.
+  lldb::SBValue GetChildMemberWithName(const char *name,
+                                       lldb::DynamicValueType use_dynamic);
+
+  // Expands nested expressions like .a->b[0].c[1]->d
+  lldb::SBValue GetValueForExpressionPath(const char *expr_path);
+
+  lldb::SBValue AddressOf();
+
+  lldb::addr_t GetLoadAddress();
+
+  lldb::SBAddress GetAddress();
+
+  /// Get an SBData wrapping what this SBValue points to.
+  ///
+  /// This method will dereference the current SBValue, if its
+  /// data type is a T* or T[], and extract item_count elements
+  /// of type T from it, copying their contents in an SBData.
+  ///
+  /// \param[in] item_idx
+  ///     The index of the first item to retrieve. For an array
+  ///     this is equivalent to array[item_idx], for a pointer
+  ///     to *(pointer + item_idx). In either case, the measurement
+  ///     unit for item_idx is the sizeof(T) rather than the byte
+  ///
+  /// \param[in] item_count
+  ///     How many items should be copied into the output. By default
+  ///     only one item is copied, but more can be asked for.
+  ///
+  /// \return
+  ///     An SBData with the contents of the copied items, on success.
+  ///     An empty SBData otherwise.
+  lldb::SBData GetPointeeData(uint32_t item_idx = 0, uint32_t item_count = 1);
+
+  /// Get an SBData wrapping the contents of this SBValue.
+  ///
+  /// This method will read the contents of this object in memory
+  /// and copy them into an SBData for future use.
+  ///
+  /// \return
+  ///     An SBData with the contents of this SBValue, on success.
+  ///     An empty SBData otherwise.
+  lldb::SBData GetData();
+
+  bool SetData(lldb::SBData &data, lldb::SBError &error);
+
+  lldb::SBDeclaration GetDeclaration();
+
+  /// Find out if a SBValue might have children.
+  ///
+  /// This call is much more efficient than GetNumChildren() as it
+  /// doesn't need to complete the underlying type. This is designed
+  /// to be used in a UI environment in order to detect if the
+  /// disclosure triangle should be displayed or not.
+  ///
+  /// This function returns true for class, union, structure,
+  /// pointers, references, arrays and more. Again, it does so without
+  /// doing any expensive type completion.
+  ///
+  /// \return
+  ///     Returns \b true if the SBValue might have children, or \b
+  ///     false otherwise.
+  bool MightHaveChildren();
+
+  bool IsRuntimeSupportValue();
+
+  uint32_t GetNumChildren();
+
+  uint32_t GetNumChildren(uint32_t max);
+
+  void *GetOpaqueType();
+
+  lldb::SBTarget GetTarget();
+
+  lldb::SBProcess GetProcess();
+
+  lldb::SBThread GetThread();
+
+  lldb::SBFrame GetFrame();
+
+  lldb::SBValue Dereference();
+
+  // Deprecated - please use GetType().IsPointerType() instead.
+  bool TypeIsPointerType();
+
+  lldb::SBType GetType();
+
+  lldb::SBValue Persist();
+
+  bool GetDescription(lldb::SBStream &description);
+
+  bool GetExpressionPath(lldb::SBStream &description);
+
+  bool GetExpressionPath(lldb::SBStream &description,
+                         bool qualify_cxx_base_classes);
+
+  lldb::SBValue EvaluateExpression(const char *expr) const;
+  lldb::SBValue EvaluateExpression(const char *expr,
+                                   const SBExpressionOptions &options) const;
+  lldb::SBValue EvaluateExpression(const char *expr,
+                                   const SBExpressionOptions &options,
+                                   const char *name) const;
+
+  SBValue(const lldb::ValueObjectSP &value_sp);
+
+  /// Watch this value if it resides in memory.
+  ///
+  /// Sets a watchpoint on the value.
+  ///
+  /// \param[in] resolve_location
+  ///     Resolve the location of this value once and watch its address.
+  ///     This value must currently be set to \b true as watching all
+  ///     locations of a variable or a variable path is not yet supported,
+  ///     though we plan to support it in the future.
+  ///
+  /// \param[in] read
+  ///     Stop when this value is accessed.
+  ///
+  /// \param[in] write
+  ///     Stop when this value is modified
+  ///
+  /// \param[out] error
+  ///     An error object. Contains the reason if there is some failure.
+  ///
+  /// \return
+  ///     An SBWatchpoint object. This object might not be valid upon
+  ///     return due to a value not being contained in memory, too
+  ///     large, or watchpoint resources are not available or all in
+  ///     use.
+  lldb::SBWatchpoint Watch(bool resolve_location, bool read, bool write,
+                           SBError &error);
+
+  // Backward compatibility fix in the interim.
+  lldb::SBWatchpoint Watch(bool resolve_location, bool read, bool write);
+
+  /// Watch this value that this value points to in memory
+  ///
+  /// Sets a watchpoint on the value.
+  ///
+  /// \param[in] resolve_location
+  ///     Resolve the location of this value once and watch its address.
+  ///     This value must currently be set to \b true as watching all
+  ///     locations of a variable or a variable path is not yet supported,
+  ///     though we plan to support it in the future.
+  ///
+  /// \param[in] read
+  ///     Stop when this value is accessed.
+  ///
+  /// \param[in] write
+  ///     Stop when this value is modified
+  ///
+  /// \param[out] error
+  ///     An error object. Contains the reason if there is some failure.
+  ///
+  /// \return
+  ///     An SBWatchpoint object. This object might not be valid upon
+  ///     return due to a value not being contained in memory, too
+  ///     large, or watchpoint resources are not available or all in
+  ///     use.
+  lldb::SBWatchpoint WatchPointee(bool resolve_location, bool read, bool write,
+                                  SBError &error);
+
+  /// Same as the protected version of GetSP that takes a locker, except that we
+  /// make the
+  /// locker locally in the function.  Since the Target API mutex is recursive,
+  /// and the
+  /// StopLocker is a read lock, you can call this function even if you are
+  /// already
+  /// holding the two above-mentioned locks.
+  ///
+  /// \return
+  ///     A ValueObjectSP of the best kind (static, dynamic or synthetic) we
+  ///     can cons up, in accordance with the SBValue's settings.
+  lldb::ValueObjectSP GetSP() const;
+
+protected:
+  friend class SBBlock;
+  friend class SBFrame;
+  friend class SBTarget;
+  friend class SBThread;
+  friend class SBValueList;
+
+  /// Get the appropriate ValueObjectSP from this SBValue, consulting the
+  /// use_dynamic and use_synthetic options passed in to SetSP when the
+  /// SBValue's contents were set.  Since this often requires examining memory,
+  /// and maybe even running code, it needs to acquire the Target API and
+  /// Process StopLock.
+  /// Those are held in an opaque class ValueLocker which is currently local to
+  /// SBValue.cpp.
+  /// So you don't have to get these yourself just default construct a
+  /// ValueLocker, and pass it into this.
+  /// If we need to make a ValueLocker and use it in some other .cpp file, we'll
+  /// have to move it to
+  /// ValueObject.h/cpp or somewhere else convenient.  We haven't needed to so
+  /// far.
+  ///
+  /// \param[in] value_locker
+  ///     An object that will hold the Target API, and Process RunLocks, and
+  ///     auto-destroy them when it goes out of scope.  Currently this is only
+  ///     useful in
+  ///     SBValue.cpp.
+  ///
+  /// \return
+  ///     A ValueObjectSP of the best kind (static, dynamic or synthetic) we
+  ///     can cons up, in accordance with the SBValue's settings.
+  lldb::ValueObjectSP GetSP(ValueLocker &value_locker) const;
+
+  // these calls do the right thing WRT adjusting their settings according to
+  // the target's preferences
+  void SetSP(const lldb::ValueObjectSP &sp);
+
+  void SetSP(const lldb::ValueObjectSP &sp, bool use_synthetic);
+
+  void SetSP(const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic);
+
+  void SetSP(const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic,
+             bool use_synthetic);
+
+  void SetSP(const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic,
+             bool use_synthetic, const char *name);
+
+private:
+  typedef std::shared_ptr<ValueImpl> ValueImplSP;
+  ValueImplSP m_opaque_sp;
+
+  void SetSP(ValueImplSP impl_sp);
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBValue_h_
diff --git a/linux-x64/clang/include/lldb/API/SBValueList.h b/linux-x64/clang/include/lldb/API/SBValueList.h
new file mode 100644
index 0000000..d305b35
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBValueList.h
@@ -0,0 +1,75 @@
+//===-- SBValueList.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBValueList_h_
+#define LLDB_SBValueList_h_
+
+#include "lldb/API/SBDefines.h"
+
+class ValueListImpl;
+
+namespace lldb {
+
+class LLDB_API SBValueList {
+public:
+  SBValueList();
+
+  SBValueList(const lldb::SBValueList &rhs);
+
+  ~SBValueList();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  void Clear();
+
+  void Append(const lldb::SBValue &val_obj);
+
+  void Append(const lldb::SBValueList &value_list);
+
+  uint32_t GetSize() const;
+
+  lldb::SBValue GetValueAtIndex(uint32_t idx) const;
+
+  lldb::SBValue GetFirstValueByName(const char *name) const;
+
+  lldb::SBValue FindValueObjectByUID(lldb::user_id_t uid);
+
+  const lldb::SBValueList &operator=(const lldb::SBValueList &rhs);
+
+protected:
+  // only useful for visualizing the pointer or comparing two SBValueLists to
+  // see if they are backed by the same underlying Impl.
+  void *opaque_ptr();
+
+private:
+  friend class SBFrame;
+
+  SBValueList(const ValueListImpl *lldb_object_ptr);
+
+  void Append(lldb::ValueObjectSP &val_obj_sp);
+
+  void CreateIfNeeded();
+
+  ValueListImpl *operator->();
+
+  ValueListImpl &operator*();
+
+  const ValueListImpl *operator->() const;
+
+  const ValueListImpl &operator*() const;
+
+  ValueListImpl &ref();
+
+  std::unique_ptr<ValueListImpl> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBValueList_h_
diff --git a/linux-x64/clang/include/lldb/API/SBVariablesOptions.h b/linux-x64/clang/include/lldb/API/SBVariablesOptions.h
new file mode 100644
index 0000000..e226ce4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBVariablesOptions.h
@@ -0,0 +1,82 @@
+//===-- SBVariablesOptions.h ------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBVariablesOptions_h_
+#define LLDB_SBVariablesOptions_h_
+
+#include "lldb/API/SBDefines.h"
+
+class VariablesOptionsImpl;
+
+namespace lldb {
+
+class LLDB_API SBVariablesOptions {
+public:
+  SBVariablesOptions();
+
+  SBVariablesOptions(const SBVariablesOptions &options);
+
+  SBVariablesOptions &operator=(const SBVariablesOptions &options);
+
+  ~SBVariablesOptions();
+
+  explicit operator bool() const;
+
+  bool IsValid() const;
+
+  bool GetIncludeArguments() const;
+
+  void SetIncludeArguments(bool);
+
+  bool GetIncludeRecognizedArguments(const lldb::SBTarget &) const;
+
+  void SetIncludeRecognizedArguments(bool);
+
+  bool GetIncludeLocals() const;
+
+  void SetIncludeLocals(bool);
+
+  bool GetIncludeStatics() const;
+
+  void SetIncludeStatics(bool);
+
+  bool GetInScopeOnly() const;
+
+  void SetInScopeOnly(bool);
+
+  bool GetIncludeRuntimeSupportValues() const;
+
+  void SetIncludeRuntimeSupportValues(bool);
+
+  lldb::DynamicValueType GetUseDynamic() const;
+
+  void SetUseDynamic(lldb::DynamicValueType);
+
+protected:
+  VariablesOptionsImpl *operator->();
+
+  const VariablesOptionsImpl *operator->() const;
+
+  VariablesOptionsImpl *get();
+
+  VariablesOptionsImpl &ref();
+
+  const VariablesOptionsImpl &ref() const;
+
+  SBVariablesOptions(VariablesOptionsImpl *lldb_object_ptr);
+
+  void SetOptions(VariablesOptionsImpl *lldb_object_ptr);
+
+private:
+  std::unique_ptr<VariablesOptionsImpl> m_opaque_up;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBValue_h_
diff --git a/linux-x64/clang/include/lldb/API/SBWatchpoint.h b/linux-x64/clang/include/lldb/API/SBWatchpoint.h
new file mode 100644
index 0000000..05ff0ca
--- /dev/null
+++ b/linux-x64/clang/include/lldb/API/SBWatchpoint.h
@@ -0,0 +1,85 @@
+//===-- SBWatchpoint.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBWatchpoint_h_
+#define LLDB_SBWatchpoint_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class LLDB_API SBWatchpoint {
+public:
+  SBWatchpoint();
+
+  SBWatchpoint(const lldb::SBWatchpoint &rhs);
+
+  SBWatchpoint(const lldb::WatchpointSP &wp_sp);
+
+  ~SBWatchpoint();
+
+  const lldb::SBWatchpoint &operator=(const lldb::SBWatchpoint &rhs);
+
+  explicit operator bool() const;
+
+  bool operator==(const SBWatchpoint &rhs) const;
+
+  bool operator!=(const SBWatchpoint &rhs) const;
+
+  bool IsValid() const;
+
+  SBError GetError();
+
+  watch_id_t GetID();
+
+  /// With -1 representing an invalid hardware index.
+  int32_t GetHardwareIndex();
+
+  lldb::addr_t GetWatchAddress();
+
+  size_t GetWatchSize();
+
+  void SetEnabled(bool enabled);
+
+  bool IsEnabled();
+
+  uint32_t GetHitCount();
+
+  uint32_t GetIgnoreCount();
+
+  void SetIgnoreCount(uint32_t n);
+
+  const char *GetCondition();
+
+  void SetCondition(const char *condition);
+
+  bool GetDescription(lldb::SBStream &description, DescriptionLevel level);
+
+  void Clear();
+
+  lldb::WatchpointSP GetSP() const;
+
+  void SetSP(const lldb::WatchpointSP &sp);
+
+  static bool EventIsWatchpointEvent(const lldb::SBEvent &event);
+
+  static lldb::WatchpointEventType
+  GetWatchpointEventTypeFromEvent(const lldb::SBEvent &event);
+
+  static lldb::SBWatchpoint GetWatchpointFromEvent(const lldb::SBEvent &event);
+
+private:
+  friend class SBTarget;
+  friend class SBValue;
+
+  std::weak_ptr<lldb_private::Watchpoint> m_opaque_wp;
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBWatchpoint_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/Breakpoint.h b/linux-x64/clang/include/lldb/Breakpoint/Breakpoint.h
new file mode 100644
index 0000000..f561b6d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/Breakpoint.h
@@ -0,0 +1,676 @@
+//===-- Breakpoint.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Breakpoint_h_
+#define liblldb_Breakpoint_h_
+
+#include <memory>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+#include "lldb/Breakpoint/BreakpointID.h"
+#include "lldb/Breakpoint/BreakpointLocationCollection.h"
+#include "lldb/Breakpoint/BreakpointLocationList.h"
+#include "lldb/Breakpoint/BreakpointName.h"
+#include "lldb/Breakpoint/BreakpointOptions.h"
+#include "lldb/Breakpoint/Stoppoint.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/Event.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+
+/// \class Breakpoint Breakpoint.h "lldb/Breakpoint/Breakpoint.h" Class that
+/// manages logical breakpoint setting.
+
+/// General Outline:
+/// A breakpoint has four main parts, a filter, a resolver, the list of
+/// breakpoint
+/// locations that have been determined for the filter/resolver pair, and
+/// finally a set of options for the breakpoint.
+///
+/// \b Filter:
+/// This is an object derived from SearchFilter.  It manages the search for
+/// breakpoint location matches through the symbols in the module list of the
+/// target that owns it.  It also filters out locations based on whatever
+/// logic it wants.
+///
+/// \b Resolver:
+/// This is an object derived from BreakpointResolver.  It provides a callback
+/// to the filter that will find breakpoint locations.  How it does this is
+/// determined by what kind of resolver it is.
+///
+/// The Breakpoint class also provides constructors for the common breakpoint
+/// cases which make the appropriate filter and resolver for you.
+///
+/// \b Location List:
+/// This stores the breakpoint locations that have been determined to date.
+/// For a given breakpoint, there will be only one location with a given
+/// address.  Adding a location at an already taken address will just return
+/// the location already at that address.  Locations can be looked up by ID,
+/// or by address.
+///
+/// \b Options:
+/// This includes:
+///    \b Enabled/Disabled
+///    \b Ignore Count
+///    \b Callback
+///    \b Condition
+/// Note, these options can be set on the breakpoint, and they can also be set
+/// on the individual locations.  The options set on the breakpoint take
+/// precedence over the options set on the individual location. So for
+/// instance disabling the breakpoint will cause NONE of the locations to get
+/// hit. But if the breakpoint is enabled, then the location's enabled state
+/// will be checked to determine whether to insert that breakpoint location.
+/// Similarly, if the breakpoint condition says "stop", we won't check the
+/// location's condition. But if the breakpoint condition says "continue",
+/// then we will check the location for whether to actually stop or not. One
+/// subtle point worth observing here is that you don't actually stop at a
+/// Breakpoint, you always stop at one of its locations.  So the "should stop"
+/// tests are done by the location, not by the breakpoint.
+class Breakpoint : public std::enable_shared_from_this<Breakpoint>,
+                   public Stoppoint {
+public:
+  static ConstString GetEventIdentifier();
+
+  /// An enum specifying the match style for breakpoint settings.  At present
+  /// only used for function name style breakpoints.
+  enum MatchType { Exact, Regexp, Glob };
+
+private:
+  enum class OptionNames : uint32_t { Names = 0, Hardware, LastOptionName };
+
+  static const char
+      *g_option_names[static_cast<uint32_t>(OptionNames::LastOptionName)];
+
+  static const char *GetKey(OptionNames enum_value) {
+    return g_option_names[static_cast<uint32_t>(enum_value)];
+  }
+
+public:
+  class BreakpointEventData : public EventData {
+  public:
+    BreakpointEventData(lldb::BreakpointEventType sub_type,
+                        const lldb::BreakpointSP &new_breakpoint_sp);
+
+    ~BreakpointEventData() override;
+
+    static ConstString GetFlavorString();
+
+    ConstString GetFlavor() const override;
+
+    lldb::BreakpointEventType GetBreakpointEventType() const;
+
+    lldb::BreakpointSP &GetBreakpoint();
+
+    BreakpointLocationCollection &GetBreakpointLocationCollection() {
+      return m_locations;
+    }
+
+    void Dump(Stream *s) const override;
+
+    static lldb::BreakpointEventType
+    GetBreakpointEventTypeFromEvent(const lldb::EventSP &event_sp);
+
+    static lldb::BreakpointSP
+    GetBreakpointFromEvent(const lldb::EventSP &event_sp);
+
+    static lldb::BreakpointLocationSP
+    GetBreakpointLocationAtIndexFromEvent(const lldb::EventSP &event_sp,
+                                          uint32_t loc_idx);
+
+    static size_t
+    GetNumBreakpointLocationsFromEvent(const lldb::EventSP &event_sp);
+
+    static const BreakpointEventData *
+    GetEventDataFromEvent(const Event *event_sp);
+
+  private:
+    lldb::BreakpointEventType m_breakpoint_event;
+    lldb::BreakpointSP m_new_breakpoint_sp;
+    BreakpointLocationCollection m_locations;
+
+    DISALLOW_COPY_AND_ASSIGN(BreakpointEventData);
+  };
+
+  // Saving & restoring breakpoints:
+  static lldb::BreakpointSP CreateFromStructuredData(
+      Target &target, StructuredData::ObjectSP &data_object_sp, Status &error);
+
+  static bool
+  SerializedBreakpointMatchesNames(StructuredData::ObjectSP &bkpt_object_sp,
+                                   std::vector<std::string> &names);
+
+  virtual StructuredData::ObjectSP SerializeToStructuredData();
+
+  static const char *GetSerializationKey() { return "Breakpoint"; }
+  /// Destructor.
+  ///
+  /// The destructor is not virtual since there should be no reason to
+  /// subclass breakpoints.  The varieties of breakpoints are specified
+  /// instead by providing different resolvers & filters.
+  ~Breakpoint() override;
+
+  // Methods
+
+  /// Tell whether this breakpoint is an "internal" breakpoint. \return
+  ///     Returns \b true if this is an internal breakpoint, \b false otherwise.
+  bool IsInternal() const;
+
+  /// Standard "Dump" method.  At present it does nothing.
+  void Dump(Stream *s) override;
+
+  // The next set of methods provide ways to tell the breakpoint to update it's
+  // location list - usually done when modules appear or disappear.
+
+  /// Tell this breakpoint to clear all its breakpoint sites.  Done when the
+  /// process holding the breakpoint sites is destroyed.
+  void ClearAllBreakpointSites();
+
+  /// Tell this breakpoint to scan it's target's module list and resolve any
+  /// new locations that match the breakpoint's specifications.
+  void ResolveBreakpoint();
+
+  /// Tell this breakpoint to scan a given module list and resolve any new
+  /// locations that match the breakpoint's specifications.
+  ///
+  /// \param[in] module_list
+  ///    The list of modules to look in for new locations.
+  ///
+  /// \param[in]  send_event
+  ///     If \b true, send a breakpoint location added event for non-internal
+  ///     breakpoints.
+  void ResolveBreakpointInModules(ModuleList &module_list,
+                                  bool send_event = true);
+
+  /// Tell this breakpoint to scan a given module list and resolve any new
+  /// locations that match the breakpoint's specifications.
+  ///
+  /// \param[in] changed_modules
+  ///    The list of modules to look in for new locations.
+  ///
+  /// \param[in]  new_locations
+  ///     Fills new_locations with the new locations that were made.
+  void ResolveBreakpointInModules(ModuleList &module_list,
+                                  BreakpointLocationCollection &new_locations);
+
+  /// Like ResolveBreakpointInModules, but allows for "unload" events, in
+  /// which case we will remove any locations that are in modules that got
+  /// unloaded.
+  ///
+  /// \param[in] changedModules
+  ///    The list of modules to look in for new locations.
+  /// \param[in] load_event
+  ///    If \b true then the modules were loaded, if \b false, unloaded.
+  /// \param[in] delete_locations
+  ///    If \b true then the modules were unloaded delete any locations in the
+  ///    changed modules.
+  void ModulesChanged(ModuleList &changed_modules, bool load_event,
+                      bool delete_locations = false);
+
+  /// Tells the breakpoint the old module \a old_module_sp has been replaced
+  /// by new_module_sp (usually because the underlying file has been rebuilt,
+  /// and the old version is gone.)
+  ///
+  /// \param[in] old_module_sp
+  ///    The old module that is going away.
+  /// \param[in] new_module_sp
+  ///    The new module that is replacing it.
+  void ModuleReplaced(lldb::ModuleSP old_module_sp,
+                      lldb::ModuleSP new_module_sp);
+
+  // The next set of methods provide access to the breakpoint locations for
+  // this breakpoint.
+
+  /// Add a location to the breakpoint's location list.  This is only meant to
+  /// be called by the breakpoint's resolver.  FIXME: how do I ensure that?
+  ///
+  /// \param[in] addr
+  ///    The Address specifying the new location.
+  /// \param[out] new_location
+  ///    Set to \b true if a new location was created, to \b false if there
+  ///    already was a location at this Address.
+  /// \return
+  ///    Returns a pointer to the new location.
+  lldb::BreakpointLocationSP AddLocation(const Address &addr,
+                                         bool *new_location = nullptr);
+
+  /// Find a breakpoint location by Address.
+  ///
+  /// \param[in] addr
+  ///    The Address specifying the location.
+  /// \return
+  ///    Returns a shared pointer to the location at \a addr.  The pointer
+  ///    in the shared pointer will be nullptr if there is no location at that
+  ///    address.
+  lldb::BreakpointLocationSP FindLocationByAddress(const Address &addr);
+
+  /// Find a breakpoint location ID by Address.
+  ///
+  /// \param[in] addr
+  ///    The Address specifying the location.
+  /// \return
+  ///    Returns the UID of the location at \a addr, or \b LLDB_INVALID_ID if
+  ///    there is no breakpoint location at that address.
+  lldb::break_id_t FindLocationIDByAddress(const Address &addr);
+
+  /// Find a breakpoint location for a given breakpoint location ID.
+  ///
+  /// \param[in] bp_loc_id
+  ///    The ID specifying the location.
+  /// \return
+  ///    Returns a shared pointer to the location with ID \a bp_loc_id.  The
+  ///    pointer
+  ///    in the shared pointer will be nullptr if there is no location with that
+  ///    ID.
+  lldb::BreakpointLocationSP FindLocationByID(lldb::break_id_t bp_loc_id);
+
+  /// Get breakpoint locations by index.
+  ///
+  /// \param[in] index
+  ///    The location index.
+  ///
+  /// \return
+  ///     Returns a shared pointer to the location with index \a
+  ///     index. The shared pointer might contain nullptr if \a index is
+  ///     greater than then number of actual locations.
+  lldb::BreakpointLocationSP GetLocationAtIndex(size_t index);
+
+  /// Removes all invalid breakpoint locations.
+  ///
+  /// Removes all breakpoint locations with architectures that aren't
+  /// compatible with \a arch. Also remove any breakpoint locations with whose
+  /// locations have address where the section has been deleted (module and
+  /// object files no longer exist).
+  ///
+  /// This is typically used after the process calls exec, or anytime the
+  /// architecture of the target changes.
+  ///
+  /// \param[in] arch
+  ///     If valid, check the module in each breakpoint to make sure
+  ///     they are compatible, otherwise, ignore architecture.
+  void RemoveInvalidLocations(const ArchSpec &arch);
+
+  // The next section deals with various breakpoint options.
+
+  /// If \a enable is \b true, enable the breakpoint, if \b false disable it.
+  void SetEnabled(bool enable) override;
+
+  /// Check the Enable/Disable state.
+  /// \return
+  ///     \b true if the breakpoint is enabled, \b false if disabled.
+  bool IsEnabled() override;
+
+  /// Set the breakpoint to ignore the next \a count breakpoint hits.
+  /// \param[in] count
+  ///    The number of breakpoint hits to ignore.
+  void SetIgnoreCount(uint32_t count);
+
+  /// Return the current ignore count/
+  /// \return
+  ///     The number of breakpoint hits to be ignored.
+  uint32_t GetIgnoreCount() const;
+
+  /// Return the current hit count for all locations. \return
+  ///     The current hit count for all locations.
+  uint32_t GetHitCount() const;
+
+  /// If \a one_shot is \b true, breakpoint will be deleted on first hit.
+  void SetOneShot(bool one_shot);
+
+  /// Check the OneShot state.
+  /// \return
+  ///     \b true if the breakpoint is one shot, \b false otherwise.
+  bool IsOneShot() const;
+
+  /// If \a auto_continue is \b true, breakpoint will auto-continue when on
+  /// hit.
+  void SetAutoContinue(bool auto_continue);
+
+  /// Check the AutoContinue state.
+  /// \return
+  ///     \b true if the breakpoint is set to auto-continue, \b false otherwise.
+  bool IsAutoContinue() const;
+
+  /// Set the valid thread to be checked when the breakpoint is hit.
+  /// \param[in] thread_id
+  ///    If this thread hits the breakpoint, we stop, otherwise not.
+  void SetThreadID(lldb::tid_t thread_id);
+
+  /// Return the current stop thread value.
+  /// \return
+  ///     The thread id for which the breakpoint hit will stop,
+  ///     LLDB_INVALID_THREAD_ID for all threads.
+  lldb::tid_t GetThreadID() const;
+
+  void SetThreadIndex(uint32_t index);
+
+  uint32_t GetThreadIndex() const;
+
+  void SetThreadName(const char *thread_name);
+
+  const char *GetThreadName() const;
+
+  void SetQueueName(const char *queue_name);
+
+  const char *GetQueueName() const;
+
+  /// Set the callback action invoked when the breakpoint is hit.
+  ///
+  /// \param[in] callback
+  ///    The method that will get called when the breakpoint is hit.
+  /// \param[in] baton
+  ///    A void * pointer that will get passed back to the callback function.
+  /// \param[in] is_synchronous
+  ///    If \b true the callback will be run on the private event thread
+  ///    before the stop event gets reported.  If false, the callback will get
+  ///    handled on the public event thread after the stop has been posted.
+  ///
+  /// \return
+  ///    \b true if the process should stop when you hit the breakpoint.
+  ///    \b false if it should continue.
+  void SetCallback(BreakpointHitCallback callback, void *baton,
+                   bool is_synchronous = false);
+
+  void SetCallback(BreakpointHitCallback callback,
+                   const lldb::BatonSP &callback_baton_sp,
+                   bool is_synchronous = false);
+
+  void ClearCallback();
+
+  /// Set the breakpoint's condition.
+  ///
+  /// \param[in] condition
+  ///    The condition expression to evaluate when the breakpoint is hit.
+  ///    Pass in nullptr to clear the condition.
+  void SetCondition(const char *condition);
+
+  /// Return a pointer to the text of the condition expression.
+  ///
+  /// \return
+  ///    A pointer to the condition expression text, or nullptr if no
+  //     condition has been set.
+  const char *GetConditionText() const;
+
+  // The next section are various utility functions.
+
+  /// Return the number of breakpoint locations that have resolved to actual
+  /// breakpoint sites.
+  ///
+  /// \return
+  ///     The number locations resolved breakpoint sites.
+  size_t GetNumResolvedLocations() const;
+
+  /// Return whether this breakpoint has any resolved locations.
+  ///
+  /// \return
+  ///     True if GetNumResolvedLocations > 0
+  bool HasResolvedLocations() const;
+
+  /// Return the number of breakpoint locations.
+  ///
+  /// \return
+  ///     The number breakpoint locations.
+  size_t GetNumLocations() const;
+
+  /// Put a description of this breakpoint into the stream \a s.
+  ///
+  /// \param[in] s
+  ///     Stream into which to dump the description.
+  ///
+  /// \param[in] level
+  ///     The description level that indicates the detail level to
+  ///     provide.
+  ///
+  /// \see lldb::DescriptionLevel
+  void GetDescription(Stream *s, lldb::DescriptionLevel level,
+                      bool show_locations = false);
+
+  /// Set the "kind" description for a breakpoint.  If the breakpoint is hit
+  /// the stop info will show this "kind" description instead of the
+  /// breakpoint number.  Mostly useful for internal breakpoints, where the
+  /// breakpoint number doesn't have meaning to the user.
+  ///
+  /// \param[in] kind
+  ///     New "kind" description.
+  void SetBreakpointKind(const char *kind) { m_kind_description.assign(kind); }
+
+  /// Return the "kind" description for a breakpoint.
+  ///
+  /// \return
+  ///     The breakpoint kind, or nullptr if none is set.
+  const char *GetBreakpointKind() const { return m_kind_description.c_str(); }
+
+  /// Accessor for the breakpoint Target.
+  /// \return
+  ///     This breakpoint's Target.
+  Target &GetTarget() { return m_target; }
+
+  const Target &GetTarget() const { return m_target; }
+
+  const lldb::TargetSP GetTargetSP();
+
+  void GetResolverDescription(Stream *s);
+
+  /// Find breakpoint locations which match the (filename, line_number)
+  /// description. The breakpoint location collection is to be filled with the
+  /// matching locations. It should be initialized with 0 size by the API
+  /// client.
+  ///
+  /// \return
+  ///     True if there is a match
+  ///
+  ///     The locations which match the filename and line_number in loc_coll.
+  ///     If its
+  ///     size is 0 and true is returned, it means the breakpoint fully matches
+  ///     the
+  ///     description.
+  bool GetMatchingFileLine(ConstString filename, uint32_t line_number,
+                           BreakpointLocationCollection &loc_coll);
+
+  void GetFilterDescription(Stream *s);
+
+  /// Returns the BreakpointOptions structure set at the breakpoint level.
+  ///
+  /// Meant to be used by the BreakpointLocation class.
+  ///
+  /// \return
+  ///     A pointer to this breakpoint's BreakpointOptions.
+  BreakpointOptions *GetOptions();
+
+  /// Returns the BreakpointOptions structure set at the breakpoint level.
+  ///
+  /// Meant to be used by the BreakpointLocation class.
+  ///
+  /// \return
+  ///     A pointer to this breakpoint's BreakpointOptions.
+  const BreakpointOptions *GetOptions() const;
+
+  /// Invoke the callback action when the breakpoint is hit.
+  ///
+  /// Meant to be used by the BreakpointLocation class.
+  ///
+  /// \param[in] context
+  ///     Described the breakpoint event.
+  ///
+  /// \param[in] bp_loc_id
+  ///     Which breakpoint location hit this breakpoint.
+  ///
+  /// \return
+  ///     \b true if the target should stop at this breakpoint and \b false not.
+  bool InvokeCallback(StoppointCallbackContext *context,
+                      lldb::break_id_t bp_loc_id);
+
+  bool IsHardware() const { return m_hardware; }
+
+  lldb::BreakpointResolverSP GetResolver() { return m_resolver_sp; }
+
+  lldb::SearchFilterSP GetSearchFilter() { return m_filter_sp; }
+
+private: // The target needs to manage adding & removing names.  It will do the
+         // checking for name validity as well.
+  bool AddName(llvm::StringRef new_name);
+
+  void RemoveName(const char *name_to_remove) {
+    if (name_to_remove)
+      m_name_list.erase(name_to_remove);
+  }
+  
+public:
+  bool MatchesName(const char *name) {
+    return m_name_list.find(name) != m_name_list.end();
+  }
+
+  void GetNames(std::vector<std::string> &names) {
+    names.clear();
+    for (auto name : m_name_list) {
+      names.push_back(name);
+    }
+  }
+
+  /// Set a pre-condition filter that overrides all user provided
+  /// filters/callbacks etc.
+  ///
+  /// Used to define fancy breakpoints that can do dynamic hit detection
+  /// without taking up the condition slot - which really belongs to the user
+  /// anyway...
+  ///
+  /// The Precondition should not continue the target, it should return true
+  /// if the condition says to stop and false otherwise.
+  ///
+  void SetPrecondition(lldb::BreakpointPreconditionSP precondition_sp) {
+    m_precondition_sp = precondition_sp;
+  }
+
+  bool EvaluatePrecondition(StoppointCallbackContext &context);
+
+  lldb::BreakpointPreconditionSP GetPrecondition() { return m_precondition_sp; }
+
+  // Produces the OR'ed values for all the names assigned to this breakpoint.
+  const BreakpointName::Permissions &GetPermissions() const { 
+      return m_permissions; 
+  }
+
+  BreakpointName::Permissions &GetPermissions() { 
+      return m_permissions; 
+  }
+  
+  bool AllowList() const {
+    return GetPermissions().GetAllowList();
+  }
+  bool AllowDisable() const {
+    return GetPermissions().GetAllowDisable();
+  }
+  bool AllowDelete() const {
+    return GetPermissions().GetAllowDelete();
+  }
+
+protected:
+  friend class Target;
+  // Protected Methods
+
+  /// Constructors and Destructors
+  /// Only the Target can make a breakpoint, and it owns the breakpoint
+  /// lifespans. The constructor takes a filter and a resolver.  Up in Target
+  /// there are convenience variants that make breakpoints for some common
+  /// cases.
+  ///
+  /// \param[in] target
+  ///    The target in which the breakpoint will be set.
+  ///
+  /// \param[in] filter_sp
+  ///    Shared pointer to the search filter that restricts the search domain of
+  ///    the breakpoint.
+  ///
+  /// \param[in] resolver_sp
+  ///    Shared pointer to the resolver object that will determine breakpoint
+  ///    matches.
+  ///
+  /// \param hardware
+  ///    If true, request a hardware breakpoint to be used to implement the
+  ///    breakpoint locations.
+  ///
+  /// \param resolve_indirect_symbols
+  ///    If true, and the address of a given breakpoint location in this
+  ///    breakpoint is set on an
+  ///    indirect symbol (i.e. Symbol::IsIndirect returns true) then the actual
+  ///    breakpoint site will
+  ///    be set on the target of the indirect symbol.
+  // This is the generic constructor
+  Breakpoint(Target &target, lldb::SearchFilterSP &filter_sp,
+             lldb::BreakpointResolverSP &resolver_sp, bool hardware,
+             bool resolve_indirect_symbols = true);
+
+  friend class BreakpointLocation; // To call the following two when determining
+                                   // whether to stop.
+
+  void DecrementIgnoreCount();
+
+  // BreakpointLocation::IgnoreCountShouldStop &
+  // Breakpoint::IgnoreCountShouldStop can only be called once per stop, and
+  // BreakpointLocation::IgnoreCountShouldStop should be tested first, and if
+  // it returns false we should continue, otherwise we should test
+  // Breakpoint::IgnoreCountShouldStop.
+
+  bool IgnoreCountShouldStop();
+
+  void IncrementHitCount() { m_hit_count++; }
+
+  void DecrementHitCount() {
+    assert(m_hit_count > 0);
+    m_hit_count--;
+  }
+
+private:
+  // This one should only be used by Target to copy breakpoints from target to
+  // target - primarily from the dummy target to prime new targets.
+  Breakpoint(Target &new_target, Breakpoint &bp_to_copy_from);
+
+  // For Breakpoint only
+  bool m_being_created;
+  bool
+      m_hardware; // If this breakpoint is required to use a hardware breakpoint
+  Target &m_target; // The target that holds this breakpoint.
+  std::unordered_set<std::string> m_name_list; // If not empty, this is the name
+                                               // of this breakpoint (many
+                                               // breakpoints can share the same
+                                               // name.)
+  lldb::SearchFilterSP
+      m_filter_sp; // The filter that constrains the breakpoint's domain.
+  lldb::BreakpointResolverSP
+      m_resolver_sp; // The resolver that defines this breakpoint.
+  lldb::BreakpointPreconditionSP m_precondition_sp; // The precondition is a
+                                                    // breakpoint-level hit
+                                                    // filter that can be used
+  // to skip certain breakpoint hits.  For instance, exception breakpoints use
+  // this to limit the stop to certain exception classes, while leaving the
+  // condition & callback free for user specification.
+  std::unique_ptr<BreakpointOptions>
+      m_options_up; // Settable breakpoint options
+  BreakpointLocationList
+      m_locations; // The list of locations currently found for this breakpoint.
+  std::string m_kind_description;
+  bool m_resolve_indirect_symbols;
+  uint32_t m_hit_count; // Number of times this breakpoint/watchpoint has been
+                        // hit.  This is kept
+  // separately from the locations hit counts, since locations can go away when
+  // their backing library gets unloaded, and we would lose hit counts.
+  BreakpointName::Permissions m_permissions;
+
+  void SendBreakpointChangedEvent(lldb::BreakpointEventType eventKind);
+
+  void SendBreakpointChangedEvent(BreakpointEventData *data);
+
+  DISALLOW_COPY_AND_ASSIGN(Breakpoint);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Breakpoint_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointID.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointID.h
new file mode 100644
index 0000000..0951329
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointID.h
@@ -0,0 +1,98 @@
+//===-- BreakpointID.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointID_h_
+#define liblldb_BreakpointID_h_
+
+
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
+
+namespace lldb_private {
+
+// class BreakpointID
+
+class BreakpointID {
+public:
+  BreakpointID(lldb::break_id_t bp_id = LLDB_INVALID_BREAK_ID,
+               lldb::break_id_t loc_id = LLDB_INVALID_BREAK_ID);
+
+  virtual ~BreakpointID();
+
+  lldb::break_id_t GetBreakpointID() const { return m_break_id; }
+
+  lldb::break_id_t GetLocationID() const { return m_location_id; }
+
+  void SetID(lldb::break_id_t bp_id, lldb::break_id_t loc_id) {
+    m_break_id = bp_id;
+    m_location_id = loc_id;
+  }
+
+  void SetBreakpointID(lldb::break_id_t bp_id) { m_break_id = bp_id; }
+
+  void SetBreakpointLocationID(lldb::break_id_t loc_id) {
+    m_location_id = loc_id;
+  }
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+  static bool IsRangeIdentifier(llvm::StringRef str);
+  static bool IsValidIDExpression(llvm::StringRef str);
+  static llvm::ArrayRef<llvm::StringRef> GetRangeSpecifiers();
+
+  /// Takes an input string containing the description of a breakpoint or
+  /// breakpoint and location and returns a BreakpointID filled out with
+  /// the proper id and location.
+  ///
+  /// \param[in] input
+  ///     A string containing JUST the breakpoint description.
+  /// \return
+  ///     If \p input was not a valid breakpoint ID string, returns
+  ///     \b llvm::None.  Otherwise returns a BreakpointID with members filled
+  ///     out accordingly.
+  static llvm::Optional<BreakpointID>
+  ParseCanonicalReference(llvm::StringRef input);
+
+  /// Takes an input string and checks to see whether it is a breakpoint name.
+  /// If it is a mal-formed breakpoint name, error will be set to an appropriate
+  /// error string.
+  ///
+  /// \param[in] input
+  ///     A string containing JUST the breakpoint description.
+  /// \param[out] error
+  ///     If the name is a well-formed breakpoint name, set to success,
+  ///     otherwise set to an error.
+  /// \return
+  ///     \b true if the name is a breakpoint name (as opposed to an ID or
+  ///     range) false otherwise.
+  static bool StringIsBreakpointName(llvm::StringRef str, Status &error);
+
+  /// Takes a breakpoint ID and the breakpoint location id and returns
+  /// a string containing the canonical description for the breakpoint
+  /// or breakpoint location.
+  ///
+  /// \param[out] break_id
+  ///     This is the break id.
+  ///
+  /// \param[out] break_loc_id
+  ///     This is breakpoint location id, or LLDB_INVALID_BREAK_ID is no
+  ///     location is to be specified.
+  static void GetCanonicalReference(Stream *s, lldb::break_id_t break_id,
+                                    lldb::break_id_t break_loc_id);
+
+protected:
+  lldb::break_id_t m_break_id;
+  lldb::break_id_t m_location_id;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointID_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointIDList.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointIDList.h
new file mode 100644
index 0000000..c642922
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointIDList.h
@@ -0,0 +1,76 @@
+//===-- BreakpointIDList.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointIDList_h_
+#define liblldb_BreakpointIDList_h_
+
+#include <utility>
+#include <vector>
+
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/Breakpoint/BreakpointID.h"
+#include "lldb/Breakpoint/BreakpointName.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// class BreakpointIDList
+
+class BreakpointIDList {
+public:
+  // TODO: Convert this class to StringRef.
+  typedef std::vector<BreakpointID> BreakpointIDArray;
+
+  BreakpointIDList();
+
+  virtual ~BreakpointIDList();
+
+  size_t GetSize() const;
+
+  const BreakpointID &GetBreakpointIDAtIndex(size_t index) const;
+
+  bool RemoveBreakpointIDAtIndex(size_t index);
+
+  void Clear();
+
+  bool AddBreakpointID(BreakpointID bp_id);
+
+  bool AddBreakpointID(const char *bp_id);
+
+  // TODO: This should take a const BreakpointID.
+  bool FindBreakpointID(BreakpointID &bp_id, size_t *position) const;
+
+  bool FindBreakpointID(const char *bp_id, size_t *position) const;
+
+  void InsertStringArray(llvm::ArrayRef<const char *> string_array,
+                         CommandReturnObject &result);
+
+  // Returns a pair consisting of the beginning and end of a breakpoint
+  // ID range expression.  If the input string is not a valid specification,
+  // returns an empty pair.
+  static std::pair<llvm::StringRef, llvm::StringRef>
+  SplitIDRangeExpression(llvm::StringRef in_string);
+
+  static void FindAndReplaceIDRanges(Args &old_args, Target *target,
+                                     bool allow_locations,
+                                     BreakpointName::Permissions
+                                       ::PermissionKinds purpose,
+                                     CommandReturnObject &result,
+                                     Args &new_args);
+
+private:
+  BreakpointIDArray m_breakpoint_ids;
+  BreakpointID m_invalid_id;
+
+  DISALLOW_COPY_AND_ASSIGN(BreakpointIDList);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointIDList_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointList.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointList.h
new file mode 100644
index 0000000..fe10adb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointList.h
@@ -0,0 +1,174 @@
+//===-- BreakpointList.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointList_h_
+#define liblldb_BreakpointList_h_
+
+#include <list>
+#include <mutex>
+
+#include "lldb/Breakpoint/Breakpoint.h"
+
+namespace lldb_private {
+
+/// \class BreakpointList BreakpointList.h "lldb/Breakpoint/BreakpointList.h"
+/// This class manages a list of breakpoints.
+
+/// General Outline:
+/// Allows adding and removing breakpoints and find by ID and index.
+
+class BreakpointList {
+public:
+  BreakpointList(bool is_internal);
+
+  ~BreakpointList();
+
+  /// Add the breakpoint \a bp_sp to the list.
+  ///
+  /// \param[in] bp_sp
+  ///   Shared pointer to the breakpoint that will get added to the list.
+  ///
+  /// \result
+  ///   Returns breakpoint id.
+  lldb::break_id_t Add(lldb::BreakpointSP &bp_sp, bool notify);
+
+  /// Standard "Dump" method.  At present it does nothing.
+  void Dump(Stream *s) const;
+
+  /// Returns a shared pointer to the breakpoint with id \a breakID.  Const
+  /// version.
+  ///
+  /// \param[in] breakID
+  ///   The breakpoint ID to seek for.
+  ///
+  /// \result
+  ///   A shared pointer to the breakpoint.  May contain a NULL pointer if the
+  ///   breakpoint doesn't exist.
+  lldb::BreakpointSP FindBreakpointByID(lldb::break_id_t breakID) const;
+
+  /// Returns a shared pointer to the breakpoint with index \a i.
+  ///
+  /// \param[in] i
+  ///   The breakpoint index to seek for.
+  ///
+  /// \result
+  ///   A shared pointer to the breakpoint.  May contain a NULL pointer if the
+  ///   breakpoint doesn't exist.
+  lldb::BreakpointSP GetBreakpointAtIndex(size_t i) const;
+
+  /// Find all the breakpoints with a given name
+  ///
+  /// \param[in] name
+  ///   The breakpoint name for which to search.
+  ///
+  /// \result
+  ///   \bfalse if the input name was not a legal breakpoint name.
+  bool FindBreakpointsByName(const char *name, BreakpointList &matching_bps);
+
+  /// Returns the number of elements in this breakpoint list.
+  ///
+  /// \result
+  ///   The number of elements.
+  size_t GetSize() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_breakpoints.size();
+  }
+
+  /// Removes the breakpoint given by \b breakID from this list.
+  ///
+  /// \param[in] breakID
+  ///   The breakpoint index to remove.
+  ///
+  /// \result
+  ///   \b true if the breakpoint \a breakID was in the list.
+  bool Remove(lldb::break_id_t breakID, bool notify);
+
+  /// Removes all invalid breakpoint locations.
+  ///
+  /// Removes all breakpoint locations in the list with architectures that
+  /// aren't compatible with \a arch. Also remove any breakpoint locations
+  /// with whose locations have address where the section has been deleted
+  /// (module and object files no longer exist).
+  ///
+  /// This is typically used after the process calls exec, or anytime the
+  /// architecture of the target changes.
+  ///
+  /// \param[in] arch
+  ///     If valid, check the module in each breakpoint to make sure
+  ///     they are compatible, otherwise, ignore architecture.
+  void RemoveInvalidLocations(const ArchSpec &arch);
+
+  void SetEnabledAll(bool enabled);
+
+  void SetEnabledAllowed(bool enabled);
+
+  /// Removes all the breakpoints from this list.
+  void RemoveAll(bool notify);
+
+  /// Removes all the breakpoints from this list - first checking the
+  /// ePermDelete on the breakpoints.  This call should be used unless you are
+  /// shutting down and need to actually clear them all.
+  void RemoveAllowed(bool notify);
+
+  /// Tell all the breakpoints to update themselves due to a change in the
+  /// modules in \a module_list.  \a added says whether the module was loaded
+  /// or unloaded.
+  ///
+  /// \param[in] module_list
+  ///   The module list that has changed.
+  ///
+  /// \param[in] load
+  ///   \b true if the modules are loaded, \b false if unloaded.
+  ///
+  /// \param[in] delete_locations
+  ///   If \a load is \b false, then delete breakpoint locations when
+  ///   when updating breakpoints.
+  void UpdateBreakpoints(ModuleList &module_list, bool load,
+                         bool delete_locations);
+
+  void UpdateBreakpointsWhenModuleIsReplaced(lldb::ModuleSP old_module_sp,
+                                             lldb::ModuleSP new_module_sp);
+
+  void ClearAllBreakpointSites();
+
+  /// Sets the passed in Locker to hold the Breakpoint List mutex.
+  ///
+  /// \param[in] locker
+  ///   The locker object that is set.
+  void GetListMutex(std::unique_lock<std::recursive_mutex> &lock);
+
+protected:
+  typedef std::vector<lldb::BreakpointSP> bp_collection;
+
+  bp_collection::iterator GetBreakpointIDIterator(lldb::break_id_t breakID);
+
+  bp_collection::const_iterator
+  GetBreakpointIDConstIterator(lldb::break_id_t breakID) const;
+
+  std::recursive_mutex &GetMutex() const { return m_mutex; }
+
+  mutable std::recursive_mutex m_mutex;
+  bp_collection m_breakpoints;
+  lldb::break_id_t m_next_break_id;
+  bool m_is_internal;
+
+public:
+  typedef LockingAdaptedIterable<bp_collection, lldb::BreakpointSP,
+                                 list_adapter, std::recursive_mutex>
+      BreakpointIterable;
+  BreakpointIterable Breakpoints() {
+    return BreakpointIterable(m_breakpoints, GetMutex());
+  }
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(BreakpointList);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointList_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocation.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocation.h
new file mode 100644
index 0000000..7b27160
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocation.h
@@ -0,0 +1,356 @@
+//===-- BreakpointLocation.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointLocation_h_
+#define liblldb_BreakpointLocation_h_
+
+#include <memory>
+#include <mutex>
+
+#include "lldb/Breakpoint/BreakpointOptions.h"
+#include "lldb/Breakpoint/StoppointLocation.h"
+#include "lldb/Core/Address.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class BreakpointLocation BreakpointLocation.h
+/// "lldb/Breakpoint/BreakpointLocation.h" Class that manages one unique (by
+/// address) instance of a logical breakpoint.
+
+/// General Outline:
+/// A breakpoint location is defined by the breakpoint that produces it,
+/// and the address that resulted in this particular instantiation. Each
+/// breakpoint location also may have a breakpoint site if its address has
+/// been loaded into the program. Finally it has a settable options object.
+///
+/// FIXME: Should we also store some fingerprint for the location, so
+/// we can map one location to the "equivalent location" on rerun?  This would
+/// be useful if you've set options on the locations.
+
+class BreakpointLocation
+    : public std::enable_shared_from_this<BreakpointLocation>,
+      public StoppointLocation {
+public:
+  ~BreakpointLocation() override;
+
+  /// Gets the load address for this breakpoint location \return
+  ///     Returns breakpoint location load address, \b
+  ///     LLDB_INVALID_ADDRESS if not yet set.
+  lldb::addr_t GetLoadAddress() const override;
+
+  /// Gets the Address for this breakpoint location \return
+  ///     Returns breakpoint location Address.
+  Address &GetAddress();
+  /// Gets the Breakpoint that created this breakpoint location \return
+  ///     Returns the owning breakpoint.
+  Breakpoint &GetBreakpoint();
+
+  Target &GetTarget();
+
+  /// Determines whether we should stop due to a hit at this breakpoint
+  /// location.
+  ///
+  /// Side Effects: This may evaluate the breakpoint condition, and run the
+  /// callback.  So this command may do a considerable amount of work.
+  ///
+  /// \return
+  ///     \b true if this breakpoint location thinks we should stop,
+  ///     \b false otherwise.
+  bool ShouldStop(StoppointCallbackContext *context) override;
+
+  // The next section deals with various breakpoint options.
+
+  /// If \a enable is \b true, enable the breakpoint, if \b false disable it.
+  void SetEnabled(bool enabled);
+
+  /// Check the Enable/Disable state.
+  ///
+  /// \return
+  ///     \b true if the breakpoint is enabled, \b false if disabled.
+  bool IsEnabled() const;
+
+  /// If \a auto_continue is \b true, set the breakpoint to continue when hit.
+  void SetAutoContinue(bool auto_continue);
+
+  /// Check the AutoContinue state.
+  ///
+  /// \return
+  ///     \b true if the breakpoint is set to auto-continue, \b false if not.
+  bool IsAutoContinue() const;
+
+  /// Return the current Ignore Count.
+  ///
+  /// \return
+  ///     The number of breakpoint hits to be ignored.
+  uint32_t GetIgnoreCount();
+
+  /// Set the breakpoint to ignore the next \a count breakpoint hits.
+  ///
+  /// \param[in] count
+  ///    The number of breakpoint hits to ignore.
+  void SetIgnoreCount(uint32_t n);
+
+  /// Set the callback action invoked when the breakpoint is hit.
+  ///
+  /// The callback will return a bool indicating whether the target should
+  /// stop at this breakpoint or not.
+  ///
+  /// \param[in] callback
+  ///     The method that will get called when the breakpoint is hit.
+  ///
+  /// \param[in] callback_baton_sp
+  ///     A shared pointer to a Baton that provides the void * needed
+  ///     for the callback.
+  ///
+  /// \see lldb_private::Baton
+  void SetCallback(BreakpointHitCallback callback,
+                   const lldb::BatonSP &callback_baton_sp, bool is_synchronous);
+
+  void SetCallback(BreakpointHitCallback callback, void *baton,
+                   bool is_synchronous);
+
+  void ClearCallback();
+
+  /// Set the breakpoint location's condition.
+  ///
+  /// \param[in] condition
+  ///    The condition expression to evaluate when the breakpoint is hit.
+  void SetCondition(const char *condition);
+
+  /// Return a pointer to the text of the condition expression.
+  ///
+  /// \return
+  ///    A pointer to the condition expression text, or nullptr if no
+  //     condition has been set.
+  const char *GetConditionText(size_t *hash = nullptr) const;
+
+  bool ConditionSaysStop(ExecutionContext &exe_ctx, Status &error);
+
+  /// Set the valid thread to be checked when the breakpoint is hit.
+  ///
+  /// \param[in] thread_id
+  ///    If this thread hits the breakpoint, we stop, otherwise not.
+  void SetThreadID(lldb::tid_t thread_id);
+
+  lldb::tid_t GetThreadID();
+
+  void SetThreadIndex(uint32_t index);
+
+  uint32_t GetThreadIndex() const;
+
+  void SetThreadName(const char *thread_name);
+
+  const char *GetThreadName() const;
+
+  void SetQueueName(const char *queue_name);
+
+  const char *GetQueueName() const;
+
+  // The next section deals with this location's breakpoint sites.
+
+  /// Try to resolve the breakpoint site for this location.
+  ///
+  /// \return
+  ///     \b true if we were successful at setting a breakpoint site,
+  ///     \b false otherwise.
+  bool ResolveBreakpointSite();
+
+  /// Clear this breakpoint location's breakpoint site - for instance when
+  /// disabling the breakpoint.
+  ///
+  /// \return
+  ///     \b true if there was a breakpoint site to be cleared, \b false
+  ///     otherwise.
+  bool ClearBreakpointSite();
+
+  /// Return whether this breakpoint location has a breakpoint site. \return
+  ///     \b true if there was a breakpoint site for this breakpoint
+  ///     location, \b false otherwise.
+  bool IsResolved() const;
+
+  lldb::BreakpointSiteSP GetBreakpointSite() const;
+
+  // The next section are generic report functions.
+
+  /// Print a description of this breakpoint location to the stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to print the description.
+  ///
+  /// \param[in] level
+  ///     The description level that indicates the detail level to
+  ///     provide.
+  ///
+  /// \see lldb::DescriptionLevel
+  void GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+  /// Standard "Dump" method.  At present it does nothing.
+  void Dump(Stream *s) const override;
+
+  /// Use this to set location specific breakpoint options.
+  ///
+  /// It will create a copy of the containing breakpoint's options if that
+  /// hasn't been done already
+  ///
+  /// \return
+  ///    A pointer to the breakpoint options.
+  BreakpointOptions *GetLocationOptions();
+
+  /// Use this to access breakpoint options from this breakpoint location.
+  /// This will return the options that have a setting for the specified
+  /// BreakpointOptions kind.
+  ///
+  /// \param[in] kind
+  ///     The particular option you are looking up.
+  /// \return
+  ///     A pointer to the containing breakpoint's options if this
+  ///     location doesn't have its own copy.
+  const BreakpointOptions *GetOptionsSpecifyingKind(
+      BreakpointOptions::OptionKind kind) const;
+
+  bool ValidForThisThread(Thread *thread);
+
+  /// Invoke the callback action when the breakpoint is hit.
+  ///
+  /// Meant to be used by the BreakpointLocation class.
+  ///
+  /// \param[in] context
+  ///    Described the breakpoint event.
+  ///
+  /// \param[in] bp_loc_id
+  ///    Which breakpoint location hit this breakpoint.
+  ///
+  /// \return
+  ///     \b true if the target should stop at this breakpoint and \b
+  ///     false not.
+  bool InvokeCallback(StoppointCallbackContext *context);
+
+  /// Returns whether we should resolve Indirect functions in setting the
+  /// breakpoint site for this location.
+  ///
+  /// \return
+  ///     \b true if the breakpoint SITE for this location should be set on the
+  ///     resolved location for Indirect functions.
+  bool ShouldResolveIndirectFunctions() {
+    return m_should_resolve_indirect_functions;
+  }
+
+  /// Returns whether the address set in the breakpoint site for this location
+  /// was found by resolving an indirect symbol.
+  ///
+  /// \return
+  ///     \b true or \b false as given in the description above.
+  bool IsIndirect() { return m_is_indirect; }
+
+  void SetIsIndirect(bool is_indirect) { m_is_indirect = is_indirect; }
+
+  /// Returns whether the address set in the breakpoint location was re-routed
+  /// to the target of a re-exported symbol.
+  ///
+  /// \return
+  ///     \b true or \b false as given in the description above.
+  bool IsReExported() { return m_is_reexported; }
+
+  void SetIsReExported(bool is_reexported) { m_is_reexported = is_reexported; }
+
+  /// Returns whether the two breakpoint locations might represent "equivalent
+  /// locations". This is used when modules changed to determine if a Location
+  /// in the old module might be the "same as" the input location.
+  ///
+  /// \param[in] location
+  ///    The location to compare against.
+  ///
+  /// \return
+  ///     \b true or \b false as given in the description above.
+  bool EquivalentToLocation(BreakpointLocation &location);
+
+protected:
+  friend class BreakpointSite;
+  friend class BreakpointLocationList;
+  friend class Process;
+  friend class StopInfoBreakpoint;
+
+  /// Set the breakpoint site for this location to \a bp_site_sp.
+  ///
+  /// \param[in] bp_site_sp
+  ///      The breakpoint site we are setting for this location.
+  ///
+  /// \return
+  ///     \b true if we were successful at setting the breakpoint site,
+  ///     \b false otherwise.
+  bool SetBreakpointSite(lldb::BreakpointSiteSP &bp_site_sp);
+
+  void DecrementIgnoreCount();
+
+  bool IgnoreCountShouldStop();
+
+private:
+  void SwapLocation(lldb::BreakpointLocationSP swap_from);
+
+  void BumpHitCount();
+
+  void UndoBumpHitCount();
+
+  // Constructors and Destructors
+  //
+  // Only the Breakpoint can make breakpoint locations, and it owns them.
+
+  /// Constructor.
+  ///
+  /// \param[in] owner
+  ///     A back pointer to the breakpoint that owns this location.
+  ///
+  /// \param[in] addr
+  ///     The Address defining this location.
+  ///
+  /// \param[in] tid
+  ///     The thread for which this breakpoint location is valid, or
+  ///     LLDB_INVALID_THREAD_ID if it is valid for all threads.
+  ///
+  /// \param[in] hardware
+  ///     \b true if a hardware breakpoint is requested.
+
+  BreakpointLocation(lldb::break_id_t bid, Breakpoint &owner,
+                     const Address &addr, lldb::tid_t tid, bool hardware,
+                     bool check_for_resolver = true);
+
+  // Data members:
+  bool m_being_created;
+  bool m_should_resolve_indirect_functions;
+  bool m_is_reexported;
+  bool m_is_indirect;
+  Address m_address;   ///< The address defining this location.
+  Breakpoint &m_owner; ///< The breakpoint that produced this object.
+  std::unique_ptr<BreakpointOptions> m_options_up; ///< Breakpoint options
+                                                   /// pointer, nullptr if we're
+                                                   /// using our breakpoint's
+                                                   /// options.
+  lldb::BreakpointSiteSP m_bp_site_sp; ///< Our breakpoint site (it may be
+                                       ///shared by more than one location.)
+  lldb::UserExpressionSP m_user_expression_sp; ///< The compiled expression to
+                                               ///use in testing our condition.
+  std::mutex m_condition_mutex; ///< Guards parsing and evaluation of the
+                                ///condition, which could be evaluated by
+                                /// multiple processes.
+  size_t m_condition_hash; ///< For testing whether the condition source code
+                           ///changed.
+
+  void SetShouldResolveIndirectFunctions(bool do_resolve) {
+    m_should_resolve_indirect_functions = do_resolve;
+  }
+
+  void SendBreakpointLocationChangedEvent(lldb::BreakpointEventType eventKind);
+
+  DISALLOW_COPY_AND_ASSIGN(BreakpointLocation);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointLocation_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocationCollection.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocationCollection.h
new file mode 100644
index 0000000..3da52eb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocationCollection.h
@@ -0,0 +1,184 @@
+//===-- BreakpointLocationCollection.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointLocationCollection_h_
+#define liblldb_BreakpointLocationCollection_h_
+
+#include <mutex>
+#include <vector>
+
+#include "lldb/Utility/Iterable.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class BreakpointLocationCollection {
+public:
+  BreakpointLocationCollection();
+
+  ~BreakpointLocationCollection();
+  
+  BreakpointLocationCollection &operator=(const BreakpointLocationCollection &rhs);
+
+  /// Add the breakpoint \a bp_loc_sp to the list.
+  ///
+  /// \param[in] bp_sp
+  ///     Shared pointer to the breakpoint location that will get added
+  ///     to the list.
+  ///
+  /// \result
+  ///     Returns breakpoint location id.
+  void Add(const lldb::BreakpointLocationSP &bp_loc_sp);
+
+  /// Removes the breakpoint location given by \b breakID from this
+  /// list.
+  ///
+  /// \param[in] break_id
+  ///     The breakpoint index to remove.
+  ///
+  /// \param[in] break_loc_id
+  ///     The breakpoint location index in break_id to remove.
+  ///
+  /// \result
+  ///     \b true if the breakpoint was in the list.
+  bool Remove(lldb::break_id_t break_id, lldb::break_id_t break_loc_id);
+
+  /// Returns a shared pointer to the breakpoint location with id \a
+  /// breakID.
+  ///
+  /// \param[in] break_id
+  ///     The breakpoint  ID to seek for.
+  ///
+  /// \param[in] break_loc_id
+  ///     The breakpoint location ID in \a break_id to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint.  May contain a NULL
+  ///     pointer if the breakpoint doesn't exist.
+  lldb::BreakpointLocationSP FindByIDPair(lldb::break_id_t break_id,
+                                          lldb::break_id_t break_loc_id);
+
+  /// Returns a shared pointer to the breakpoint location with id \a
+  /// breakID, const version.
+  ///
+  /// \param[in] breakID
+  ///     The breakpoint location ID to seek for.
+  ///
+  /// \param[in] break_loc_id
+  ///     The breakpoint location ID in \a break_id to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint.  May contain a NULL
+  ///     pointer if the breakpoint doesn't exist.
+  const lldb::BreakpointLocationSP
+  FindByIDPair(lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const;
+
+  /// Returns a shared pointer to the breakpoint location with index
+  /// \a i.
+  ///
+  /// \param[in] i
+  ///     The breakpoint location index to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint.  May contain a NULL
+  ///     pointer if the breakpoint doesn't exist.
+  lldb::BreakpointLocationSP GetByIndex(size_t i);
+
+  /// Returns a shared pointer to the breakpoint location with index
+  /// \a i, const version.
+  ///
+  /// \param[in] i
+  ///     The breakpoint location index to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint.  May contain a NULL
+  ///     pointer if the breakpoint doesn't exist.
+  const lldb::BreakpointLocationSP GetByIndex(size_t i) const;
+
+  /// Returns the number of elements in this breakpoint location list.
+  ///
+  /// \result
+  ///     The number of elements.
+  size_t GetSize() const { return m_break_loc_collection.size(); }
+
+  /// Enquires of all the breakpoint locations in this list whether
+  /// we should stop at a hit at \a breakID.
+  ///
+  /// \param[in] context
+  ///    This contains the information about this stop.
+  ///
+  /// \param[in] breakID
+  ///    This break ID that we hit.
+  ///
+  /// \return
+  ///    \b true if we should stop, \b false otherwise.
+  bool ShouldStop(StoppointCallbackContext *context);
+
+  /// Print a description of the breakpoint locations in this list
+  /// to the stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to print the description.
+  ///
+  /// \param[in] level
+  ///     The description level that indicates the detail level to
+  ///     provide.
+  ///
+  /// \see lldb::DescriptionLevel
+  void GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+  /// Check whether this collection of breakpoint locations have any
+  /// thread specifiers, and if yes, is \a thread_id contained in any
+  /// of these specifiers.
+  ///
+  /// \param[in] thread
+  ///     The thread against which to test.
+  ///
+  /// return
+  ///     \b true if the collection contains at least one location that
+  ///     would be valid for this thread, false otherwise.
+  bool ValidForThisThread(Thread *thread);
+
+  /// Tell whether ALL the breakpoints in the location collection are internal.
+  ///
+  /// \result
+  ///     \b true if all breakpoint locations are owned by internal breakpoints,
+  ///     \b false otherwise.
+  bool IsInternal() const;
+
+protected:
+  // Classes that inherit from BreakpointLocationCollection can see and modify
+  // these
+
+private:
+  // For BreakpointLocationCollection only
+
+  typedef std::vector<lldb::BreakpointLocationSP> collection;
+
+  collection::iterator GetIDPairIterator(lldb::break_id_t break_id,
+                                         lldb::break_id_t break_loc_id);
+
+  collection::const_iterator
+  GetIDPairConstIterator(lldb::break_id_t break_id,
+                         lldb::break_id_t break_loc_id) const;
+
+  collection m_break_loc_collection;
+  mutable std::mutex m_collection_mutex;
+
+public:
+  typedef AdaptedIterable<collection, lldb::BreakpointLocationSP,
+                          vector_adapter>
+      BreakpointLocationCollectionIterable;
+  BreakpointLocationCollectionIterable BreakpointLocations() {
+    return BreakpointLocationCollectionIterable(m_break_loc_collection);
+  }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointLocationCollection_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocationList.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocationList.h
new file mode 100644
index 0000000..b7e0e49
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointLocationList.h
@@ -0,0 +1,223 @@
+//===-- BreakpointLocationList.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointLocationList_h_
+#define liblldb_BreakpointLocationList_h_
+
+#include <map>
+#include <mutex>
+#include <vector>
+
+#include "lldb/Core/Address.h"
+#include "lldb/Utility/Iterable.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class BreakpointLocationList BreakpointLocationList.h
+/// "lldb/Breakpoint/BreakpointLocationList.h" This class is used by
+/// Breakpoint to manage a list of breakpoint locations, each breakpoint
+/// location in the list has a unique ID, and is unique by Address as well.
+class BreakpointLocationList {
+  // Only Breakpoints can make the location list, or add elements to it. This
+  // is not just some random collection of locations.  Rather, the act of
+  // adding the location to this list sets its ID, and implicitly all the
+  // locations have the same breakpoint ID as well.  If you need a generic
+  // container for breakpoint locations, use BreakpointLocationCollection.
+  friend class Breakpoint;
+
+public:
+  virtual ~BreakpointLocationList();
+
+  /// Standard "Dump" method.  At present it does nothing.
+  void Dump(Stream *s) const;
+
+  /// Returns a shared pointer to the breakpoint location at address \a addr -
+  /// const version.
+  ///
+  /// \param[in] addr
+  ///     The address to look for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint. May contain a nullptr
+  ///     pointer if the breakpoint doesn't exist.
+  const lldb::BreakpointLocationSP FindByAddress(const Address &addr) const;
+
+  /// Returns a shared pointer to the breakpoint location with id \a breakID,
+  /// const version.
+  ///
+  /// \param[in] breakID
+  ///     The breakpoint location ID to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint. May contain a nullptr
+  ///     pointer if the breakpoint doesn't exist.
+  lldb::BreakpointLocationSP FindByID(lldb::break_id_t breakID) const;
+
+  /// Returns the breakpoint location id to the breakpoint location at address
+  /// \a addr.
+  ///
+  /// \param[in] addr
+  ///     The address to match.
+  ///
+  /// \result
+  ///     The ID of the breakpoint location, or LLDB_INVALID_BREAK_ID.
+  lldb::break_id_t FindIDByAddress(const Address &addr);
+
+  /// Returns a breakpoint location list of the breakpoint locations in the
+  /// module \a module.  This list is allocated, and owned by the caller.
+  ///
+  /// \param[in] module
+  ///     The module to seek in.
+  ///
+  /// \param[in]
+  ///     A breakpoint collection that gets any breakpoint locations
+  ///     that match \a module appended to.
+  ///
+  /// \result
+  ///     The number of matches
+  size_t FindInModule(Module *module,
+                      BreakpointLocationCollection &bp_loc_list);
+
+  /// Returns a shared pointer to the breakpoint location with index \a i.
+  ///
+  /// \param[in] i
+  ///     The breakpoint location index to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint. May contain a nullptr
+  ///     pointer if the breakpoint doesn't exist.
+  lldb::BreakpointLocationSP GetByIndex(size_t i);
+
+  /// Returns a shared pointer to the breakpoint location with index \a i,
+  /// const version.
+  ///
+  /// \param[in] i
+  ///     The breakpoint location index to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint. May contain a nullptr
+  ///     pointer if the breakpoint doesn't exist.
+  const lldb::BreakpointLocationSP GetByIndex(size_t i) const;
+
+  /// Removes all the locations in this list from their breakpoint site owners
+  /// list.
+  void ClearAllBreakpointSites();
+
+  /// Tells all the breakpoint locations in this list to attempt to resolve
+  /// any possible breakpoint sites.
+  void ResolveAllBreakpointSites();
+
+  /// Returns the number of breakpoint locations in this list with resolved
+  /// breakpoints.
+  ///
+  /// \result
+  ///     Number of qualifying breakpoint locations.
+  size_t GetNumResolvedLocations() const;
+
+  /// Returns the number hit count of all locations in this list.
+  ///
+  /// \result
+  ///     Hit count of all locations in this list.
+  uint32_t GetHitCount() const;
+
+  /// Enquires of the breakpoint location in this list with ID \a breakID
+  /// whether we should stop.
+  ///
+  /// \param[in] context
+  ///     This contains the information about this stop.
+  ///
+  /// \param[in] breakID
+  ///     This break ID that we hit.
+  ///
+  /// \return
+  ///     \b true if we should stop, \b false otherwise.
+  bool ShouldStop(StoppointCallbackContext *context, lldb::break_id_t breakID);
+
+  /// Returns the number of elements in this breakpoint location list.
+  ///
+  /// \result
+  ///     The number of elements.
+  size_t GetSize() const { return m_locations.size(); }
+
+  /// Print a description of the breakpoint locations in this list to the
+  /// stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to print the description.
+  ///
+  /// \param[in] level
+  ///     The description level that indicates the detail level to
+  ///     provide.
+  ///
+  /// \see lldb::DescriptionLevel
+  void GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+protected:
+  /// This is the standard constructor.
+  ///
+  /// It creates an empty breakpoint location list. It is protected here
+  /// because only Breakpoints are allowed to create the breakpoint location
+  /// list.
+  BreakpointLocationList(Breakpoint &owner);
+
+  /// Add the breakpoint \a bp_loc_sp to the list.
+  ///
+  /// \param[in] bp_sp
+  ///     Shared pointer to the breakpoint location that will get
+  ///     added to the list.
+  ///
+  /// \result
+  ///     Returns breakpoint location id.
+  lldb::BreakpointLocationSP Create(const Address &addr,
+                                    bool resolve_indirect_symbols);
+
+  void StartRecordingNewLocations(BreakpointLocationCollection &new_locations);
+
+  void StopRecordingNewLocations();
+
+  lldb::BreakpointLocationSP AddLocation(const Address &addr,
+                                         bool resolve_indirect_symbols,
+                                         bool *new_location = nullptr);
+
+  void SwapLocation(lldb::BreakpointLocationSP to_location_sp,
+                    lldb::BreakpointLocationSP from_location_sp);
+
+  bool RemoveLocation(const lldb::BreakpointLocationSP &bp_loc_sp);
+  
+  void RemoveLocationByIndex(size_t idx);
+
+  void RemoveInvalidLocations(const ArchSpec &arch);
+
+  void Compact();
+
+  typedef std::vector<lldb::BreakpointLocationSP> collection;
+  typedef std::map<lldb_private::Address, lldb::BreakpointLocationSP,
+                   Address::ModulePointerAndOffsetLessThanFunctionObject>
+      addr_map;
+
+  Breakpoint &m_owner;
+  collection m_locations; // Vector of locations, sorted by ID
+  addr_map m_address_to_location;
+  mutable std::recursive_mutex m_mutex;
+  lldb::break_id_t m_next_id;
+  BreakpointLocationCollection *m_new_location_recorder;
+
+public:
+  typedef AdaptedIterable<collection, lldb::BreakpointLocationSP,
+                          vector_adapter>
+      BreakpointLocationIterable;
+
+  BreakpointLocationIterable BreakpointLocations() {
+    return BreakpointLocationIterable(m_locations);
+  }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointLocationList_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointName.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointName.h
new file mode 100644
index 0000000..61020a6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointName.h
@@ -0,0 +1,208 @@
+//===-- BreakpointName.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Breakpoint_Name_h_
+#define liblldb_Breakpoint_Name_h_
+
+#include <memory>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+#include "lldb/Breakpoint/BreakpointID.h"
+#include "lldb/Breakpoint/BreakpointLocationCollection.h"
+#include "lldb/Breakpoint/BreakpointLocationList.h"
+#include "lldb/Breakpoint/BreakpointOptions.h"
+#include "lldb/Breakpoint/Stoppoint.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/Event.h"
+#include "lldb/Utility/Flags.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+
+class BreakpointName {
+public:
+  class Permissions
+  {
+  public:
+  
+    enum PermissionKinds { listPerm = 0, disablePerm = 1, 
+                       deletePerm = 2, allPerms = 3 };
+
+    Permissions(bool in_list, bool in_disable, bool in_delete) 
+    {
+      m_permissions[listPerm]    = in_list;
+      m_permissions[disablePerm] = in_disable;
+      m_permissions[deletePerm]  = in_delete;
+      m_set_mask.Set(permissions_mask[allPerms]);
+    }
+    
+    Permissions(const Permissions &rhs)
+    {
+      m_permissions[listPerm]    = rhs.m_permissions[listPerm];
+      m_permissions[disablePerm] = rhs.m_permissions[disablePerm];
+      m_permissions[deletePerm]  = rhs.m_permissions[deletePerm];
+      m_set_mask = rhs.m_set_mask;
+    }
+    
+    Permissions() 
+    {
+      m_permissions[listPerm]    = true;
+      m_permissions[disablePerm] = true;
+      m_permissions[deletePerm]  = true;
+      m_set_mask.Clear();
+    }
+    
+    const Permissions &operator= (const Permissions &rhs)
+    {
+      if (this != &rhs) {
+        m_permissions[listPerm]    = rhs.m_permissions[listPerm];
+        m_permissions[disablePerm] = rhs.m_permissions[disablePerm];
+        m_permissions[deletePerm]  = rhs.m_permissions[deletePerm];
+        m_set_mask = rhs.m_set_mask;
+      }
+      return *this;
+    }
+    
+    void Clear() {
+      *this = Permissions();
+    }
+    
+    // Merge the permissions from incoming into this set of permissions. Only
+    // merge set permissions, and most restrictive permission wins.
+    void MergeInto(const Permissions &incoming)
+    {
+      MergePermission(incoming, listPerm);
+      MergePermission(incoming, disablePerm);
+      MergePermission(incoming, deletePerm);
+    }
+
+    bool GetAllowList() const { return GetPermission(listPerm); }
+    bool SetAllowList(bool value) { return SetPermission(listPerm, value); }
+    
+    bool GetAllowDelete() const { return GetPermission(deletePerm); }
+    bool SetAllowDelete(bool value) { return SetPermission(deletePerm, value); }
+    
+    bool GetAllowDisable() const { return GetPermission(disablePerm); }
+    bool SetAllowDisable(bool value) { return SetPermission(disablePerm, 
+                                                            value); }
+
+    bool GetPermission(enum PermissionKinds permission) const
+    {
+      return m_permissions[permission];
+    }
+
+    bool GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+    bool IsSet(enum PermissionKinds permission) const
+    {
+      return m_set_mask.Test(permissions_mask[permission]);
+    }
+    
+    bool AnySet() {
+      return m_set_mask.AnySet(permissions_mask[allPerms]);
+    }
+    
+  private:
+    static const Flags::ValueType permissions_mask[allPerms + 1];
+    
+    bool m_permissions[allPerms];
+    Flags m_set_mask;
+    
+    bool SetPermission(enum PermissionKinds permission, bool value)
+    {
+      bool old_value = m_permissions[permission];
+      m_permissions[permission] = value;
+      m_set_mask.Set(permissions_mask[permission]);
+      return old_value;
+    }
+    
+    // If either side disallows the permission, the resultant disallows it.
+    void MergePermission(const Permissions &incoming, 
+                         enum PermissionKinds permission)
+    {
+      if (incoming.IsSet(permission))
+      {
+        SetPermission(permission, !(m_permissions[permission] |
+            incoming.m_permissions[permission]));
+      }
+    }
+  };
+  
+  BreakpointName(ConstString name, const char *help = nullptr) :
+      m_name(name), m_options(false)
+   {
+     SetHelp(help);
+   }
+      
+  BreakpointName(ConstString name,
+                 BreakpointOptions &options,
+                 const Permissions &permissions = Permissions(),
+                 const char *help = nullptr) :
+      m_name(name), m_options(options), 
+      m_permissions(permissions) {
+        SetHelp(help);
+  };
+  
+  BreakpointName(const BreakpointName &rhs) :
+      m_name(rhs.m_name), m_options(rhs.m_options),
+      m_permissions(rhs.m_permissions), m_help(rhs.m_help)
+  {}
+  
+  BreakpointName(ConstString name, const Breakpoint &bkpt,
+                 const char *help);
+      
+  ConstString GetName() const { return m_name; }
+  BreakpointOptions &GetOptions() { return m_options; }
+  const BreakpointOptions &GetOptions() const { return m_options; }
+  
+  void SetOptions(const BreakpointOptions &options) {
+    m_options = options;
+  }
+  
+  Permissions &GetPermissions() { return m_permissions; }
+  const Permissions &GetPermissions() const { return m_permissions; }
+  void SetPermissions(const Permissions &permissions) {
+    m_permissions = permissions;
+  }
+  
+  bool GetPermission(Permissions::PermissionKinds permission) const
+  {
+    return m_permissions.GetPermission(permission);
+  }
+  
+  void SetHelp(const char *description)
+  {
+    if (description)
+      m_help.assign(description);
+    else
+      m_help.clear();
+  }
+  
+  const char *GetHelp()
+  {
+    return m_help.c_str();
+  }
+  
+  // Returns true if any options were set in the name
+  bool GetDescription(Stream *s, lldb::DescriptionLevel level);
+  
+  void ConfigureBreakpoint(lldb::BreakpointSP bp_sp);
+  
+private:
+  ConstString        m_name;
+  BreakpointOptions  m_options;
+  Permissions        m_permissions;
+  std::string        m_help;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Breakpoint_Name_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointOptions.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointOptions.h
new file mode 100644
index 0000000..cdac5d3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointOptions.h
@@ -0,0 +1,390 @@
+//===-- BreakpointOptions.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointOptions_h_
+#define liblldb_BreakpointOptions_h_
+
+#include <memory>
+#include <string>
+
+#include "lldb/Utility/Baton.h"
+#include "lldb/Utility/Flags.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class BreakpointOptions BreakpointOptions.h
+/// "lldb/Breakpoint/BreakpointOptions.h" Class that manages the options on a
+/// breakpoint or breakpoint location.
+
+class BreakpointOptions {
+friend class BreakpointLocation;
+friend class BreakpointName;
+friend class lldb_private::BreakpointOptionGroup;
+friend class Breakpoint;
+
+public:
+  enum OptionKind {
+    eCallback     = 1 << 0,
+    eEnabled      = 1 << 1,
+    eOneShot      = 1 << 2,
+    eIgnoreCount  = 1 << 3,
+    eThreadSpec   = 1 << 4,
+    eCondition    = 1 << 5,
+    eAutoContinue = 1 << 6,
+    eAllOptions   = (eCallback | eEnabled | eOneShot | eIgnoreCount | eThreadSpec
+                     | eCondition | eAutoContinue)
+  };
+  struct CommandData {
+    CommandData()
+        : user_source(), script_source(),
+          interpreter(lldb::eScriptLanguageNone), stop_on_error(true) {}
+
+    CommandData(const StringList &user_source, lldb::ScriptLanguage interp)
+        : user_source(user_source), script_source(), interpreter(interp),
+          stop_on_error(true) {}
+
+    ~CommandData() = default;
+
+    static const char *GetSerializationKey() { return "BKPTCMDData"; }
+
+    StructuredData::ObjectSP SerializeToStructuredData();
+
+    static std::unique_ptr<CommandData>
+    CreateFromStructuredData(const StructuredData::Dictionary &options_dict,
+                             Status &error);
+
+    StringList user_source;
+    std::string script_source;
+    enum lldb::ScriptLanguage
+        interpreter; // eScriptLanguageNone means command interpreter.
+    bool stop_on_error;
+
+  private:
+    enum class OptionNames : uint32_t {
+      UserSource = 0,
+      Interpreter,
+      StopOnError,
+      LastOptionName
+    };
+
+    static const char
+        *g_option_names[static_cast<uint32_t>(OptionNames::LastOptionName)];
+
+    static const char *GetKey(OptionNames enum_value) {
+      return g_option_names[static_cast<uint32_t>(enum_value)];
+    }
+  };
+
+  class CommandBaton : public TypedBaton<CommandData> {
+  public:
+    explicit CommandBaton(std::unique_ptr<CommandData> Data)
+        : TypedBaton(std::move(Data)) {}
+
+    void GetDescription(Stream *s, lldb::DescriptionLevel level) const override;
+  };
+
+  typedef std::shared_ptr<CommandBaton> CommandBatonSP;
+
+  // Constructors and Destructors
+
+  /// This constructor allows you to specify all the breakpoint options except
+  /// the callback.  That one is more complicated, and better to do by hand.
+  ///
+  /// \param[in] condition
+  ///    The expression which if it evaluates to \b true if we are to stop
+  ///
+  /// \param[in] enabled
+  ///    Is this breakpoint enabled.
+  ///
+  /// \param[in] ignore
+  ///    How many breakpoint hits we should ignore before stopping.
+  ///
+  BreakpointOptions(const char *condition, bool enabled = true,
+                    int32_t ignore = 0, bool one_shot = false,
+                    bool auto_continue = false);
+
+  /// Breakpoints make options with all flags set.  Locations and Names make
+  /// options with no flags set.
+  BreakpointOptions(bool all_flags_set);
+  BreakpointOptions(const BreakpointOptions &rhs);
+
+  virtual ~BreakpointOptions();
+
+  static std::unique_ptr<BreakpointOptions>
+  CreateFromStructuredData(Target &target,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  virtual StructuredData::ObjectSP SerializeToStructuredData();
+
+  static const char *GetSerializationKey() { return "BKPTOptions"; }
+
+  // Operators
+  const BreakpointOptions &operator=(const BreakpointOptions &rhs);
+  
+  /// Copy over only the options set in the incoming BreakpointOptions.
+  void CopyOverSetOptions(const BreakpointOptions &rhs);
+
+  // Callbacks
+  //
+  // Breakpoint callbacks come in two forms, synchronous and asynchronous.
+  // Synchronous callbacks will get run before any of the thread plans are
+  // consulted, and if they return false the target will continue "under the
+  // radar" of the thread plans.  There are a couple of restrictions to
+  // synchronous callbacks:
+  // 1) They should NOT resume the target themselves.
+  //     Just return false if you want the target to restart.
+  // 2) Breakpoints with synchronous callbacks can't have conditions
+  //    (or rather, they can have them, but they won't do anything.
+  //    Ditto with ignore counts, etc...  You are supposed to control that all
+  //    through the callback.
+  // Asynchronous callbacks get run as part of the "ShouldStop" logic in the
+  // thread plan.  The logic there is:
+  //   a) If the breakpoint is thread specific and not for this thread, continue
+  //   w/o running the callback.
+  //      NB. This is actually enforced underneath the breakpoint system, the
+  //      Process plugin is expected to
+  //      call BreakpointSite::IsValidForThread, and set the thread's StopInfo
+  //      to "no reason".  That way,
+  //      thread displays won't show stops for breakpoints not for that
+  //      thread...
+  //   b) If the ignore count says we shouldn't stop, then ditto.
+  //   c) If the condition says we shouldn't stop, then ditto.
+  //   d) Otherwise, the callback will get run, and if it returns true we will
+  //      stop, and if false we won't.
+  //  The asynchronous callback can run the target itself, but at present that
+  //  should be the last action the callback does.  We will relax this condition
+  //  at some point, but it will take a bit of plumbing to get that to work.
+  //
+
+  /// Adds a callback to the breakpoint option set.
+  ///
+  /// \param[in] callback
+  ///    The function to be called when the breakpoint gets hit.
+  ///
+  /// \param[in] baton_sp
+  ///    A baton which will get passed back to the callback when it is invoked.
+  ///
+  /// \param[in] synchronous
+  ///    Whether this is a synchronous or asynchronous callback.  See discussion
+  ///    above.
+  void SetCallback(BreakpointHitCallback callback,
+                   const lldb::BatonSP &baton_sp, bool synchronous = false);
+
+  void SetCallback(BreakpointHitCallback callback,
+                   const BreakpointOptions::CommandBatonSP &command_baton_sp,
+                   bool synchronous = false);
+
+  /// Returns the command line commands for the callback on this breakpoint.
+  ///
+  /// \param[out] command_list
+  ///    The commands will be appended to this list.
+  ///
+  /// \return
+  ///    \btrue if the command callback is a command-line callback,
+  ///    \bfalse otherwise.
+  bool GetCommandLineCallbacks(StringList &command_list);
+
+  /// Remove the callback from this option set.
+  void ClearCallback();
+
+  // The rest of these functions are meant to be used only within the
+  // breakpoint handling mechanism.
+
+  /// Use this function to invoke the callback for a specific stop.
+  ///
+  /// \param[in] context
+  ///    The context in which the callback is to be invoked.  This includes the
+  ///    stop event, the
+  ///    execution context of the stop (since you might hit the same breakpoint
+  ///    on multiple threads) and
+  ///    whether we are currently executing synchronous or asynchronous
+  ///    callbacks.
+  ///
+  /// \param[in] break_id
+  ///    The breakpoint ID that owns this option set.
+  ///
+  /// \param[in] break_loc_id
+  ///    The breakpoint location ID that owns this option set.
+  ///
+  /// \return
+  ///     The callback return value.
+  bool InvokeCallback(StoppointCallbackContext *context,
+                      lldb::user_id_t break_id, lldb::user_id_t break_loc_id);
+
+  /// Used in InvokeCallback to tell whether it is the right time to run this
+  /// kind of callback.
+  ///
+  /// \return
+  ///     The synchronicity of our callback.
+  bool IsCallbackSynchronous() const { return m_callback_is_synchronous; }
+
+  /// Fetch the baton from the callback.
+  ///
+  /// \return
+  ///     The baton.
+  Baton *GetBaton();
+
+  /// Fetch  a const version of the baton from the callback.
+  ///
+  /// \return
+  ///     The baton.
+  const Baton *GetBaton() const;
+
+  // Condition
+  /// Set the breakpoint option's condition.
+  ///
+  /// \param[in] condition
+  ///    The condition expression to evaluate when the breakpoint is hit.
+  void SetCondition(const char *condition);
+
+  /// Return a pointer to the text of the condition expression.
+  ///
+  /// \return
+  ///    A pointer to the condition expression text, or nullptr if no
+  //     condition has been set.
+  const char *GetConditionText(size_t *hash = nullptr) const;
+
+  // Enabled/Ignore Count
+
+  /// Check the Enable/Disable state.
+  /// \return
+  ///     \b true if the breakpoint is enabled, \b false if disabled.
+  bool IsEnabled() const { return m_enabled; }
+
+  /// If \a enable is \b true, enable the breakpoint, if \b false disable it.
+  void SetEnabled(bool enabled) { 
+    m_enabled = enabled;
+    m_set_flags.Set(eEnabled);
+  }
+
+  /// Check the auto-continue state.
+  /// \return
+  ///     \b true if the breakpoint is set to auto-continue, \b false otherwise.
+  bool IsAutoContinue() const { return m_auto_continue; }
+
+  /// Set the auto-continue state.
+  void SetAutoContinue(bool auto_continue) { 
+    m_auto_continue = auto_continue;
+    m_set_flags.Set(eAutoContinue);
+  }
+
+  /// Check the One-shot state.
+  /// \return
+  ///     \b true if the breakpoint is one-shot, \b false otherwise.
+  bool IsOneShot() const { return m_one_shot; }
+
+  /// If \a enable is \b true, enable the breakpoint, if \b false disable it.
+  void SetOneShot(bool one_shot) { 
+    m_one_shot = one_shot; 
+    m_set_flags.Set(eOneShot); 
+  }
+
+  /// Set the breakpoint to ignore the next \a count breakpoint hits.
+  /// \param[in] count
+  ///    The number of breakpoint hits to ignore.
+
+  void SetIgnoreCount(uint32_t n) { 
+    m_ignore_count = n; 
+    m_set_flags.Set(eIgnoreCount);
+  }
+
+  /// Return the current Ignore Count.
+  /// \return
+  ///     The number of breakpoint hits to be ignored.
+  uint32_t GetIgnoreCount() const { return m_ignore_count; }
+
+  /// Return the current thread spec for this option. This will return nullptr
+  /// if the no thread specifications have been set for this Option yet.
+  /// \return
+  ///     The thread specification pointer for this option, or nullptr if none
+  ///     has
+  ///     been set yet.
+  const ThreadSpec *GetThreadSpecNoCreate() const;
+
+  /// Returns a pointer to the ThreadSpec for this option, creating it. if it
+  /// hasn't been created already.   This API is used for setting the
+  /// ThreadSpec items for this option.
+  ThreadSpec *GetThreadSpec();
+
+  void SetThreadID(lldb::tid_t thread_id);
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+  /// Returns true if the breakpoint option has a callback set.
+  bool HasCallback() const;
+
+  /// This is the default empty callback.
+  static bool NullCallback(void *baton, StoppointCallbackContext *context,
+                           lldb::user_id_t break_id,
+                           lldb::user_id_t break_loc_id);
+
+  /// Set a callback based on BreakpointOptions::CommandData. \param[in]
+  /// cmd_data
+  ///     A UP holding the new'ed CommandData object.
+  ///     The breakpoint will take ownership of pointer held by this object.
+  void SetCommandDataCallback(std::unique_ptr<CommandData> &cmd_data);
+  
+  void Clear();
+  
+  bool AnySet() const {
+    return m_set_flags.AnySet(eAllOptions);
+  }
+  
+protected:
+  // Classes that inherit from BreakpointOptions can see and modify these
+  bool IsOptionSet(OptionKind kind)
+  {
+    return m_set_flags.Test(kind);
+  }
+
+  enum class OptionNames {
+    ConditionText = 0,
+    IgnoreCount,
+    EnabledState,
+    OneShotState,
+    AutoContinue,
+    LastOptionName
+  };
+  static const char *g_option_names[(size_t)OptionNames::LastOptionName];
+
+  static const char *GetKey(OptionNames enum_value) {
+    return g_option_names[(size_t)enum_value];
+  }
+
+  static bool BreakpointOptionsCallbackFunction(
+      void *baton, StoppointCallbackContext *context, lldb::user_id_t break_id,
+      lldb::user_id_t break_loc_id);
+
+  void SetThreadSpec(std::unique_ptr<ThreadSpec> &thread_spec_up);
+
+private:
+  // For BreakpointOptions only
+  BreakpointHitCallback m_callback;  // This is the callback function pointer
+  lldb::BatonSP m_callback_baton_sp; // This is the client data for the callback
+  bool m_baton_is_command_baton;
+  bool m_callback_is_synchronous;
+  bool m_enabled;
+  bool m_one_shot;
+  uint32_t m_ignore_count; // Number of times to ignore this breakpoint
+  std::unique_ptr<ThreadSpec>
+      m_thread_spec_up;         // Thread for which this breakpoint will take
+  std::string m_condition_text; // The condition to test.
+  size_t m_condition_text_hash; // Its hash, so that locations know when the
+                                // condition is updated.
+  bool m_auto_continue;         // If set, auto-continue from breakpoint.
+  Flags m_set_flags;            // Which options are set at this level.  Drawn
+                                // from BreakpointOptions::SetOptionsFlags.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointOptions_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointPrecondition.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointPrecondition.h
new file mode 100644
index 0000000..2a9461b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointPrecondition.h
@@ -0,0 +1,30 @@
+//===-- BreakpointPrecondition.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointPrecondition_h_
+#define liblldb_BreakpointPrecondition_h_
+
+#include "lldb/lldb-enumerations.h"
+
+namespace lldb_private {
+
+class Args;
+class Status;
+class StoppointCallbackContext;
+class Stream;
+
+class BreakpointPrecondition {
+public:
+  virtual ~BreakpointPrecondition() = default;
+  virtual bool EvaluatePrecondition(StoppointCallbackContext &context);
+  virtual Status ConfigurePrecondition(Args &args);
+  virtual void GetDescription(Stream &stream, lldb::DescriptionLevel level);
+};
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolver.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolver.h
new file mode 100644
index 0000000..11e183b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolver.h
@@ -0,0 +1,230 @@
+//===-- BreakpointResolver.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointResolver_h_
+#define liblldb_BreakpointResolver_h_
+
+#include "lldb/Breakpoint/Breakpoint.h"
+#include "lldb/Core/Address.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/RegularExpression.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class BreakpointResolver BreakpointResolver.h
+/// "lldb/Breakpoint/BreakpointResolver.h" This class works with SearchFilter
+/// to resolve logical breakpoints to their of concrete breakpoint locations.
+
+/// General Outline:
+/// The BreakpointResolver is a Searcher.  In that protocol, the SearchFilter
+/// asks the question "At what depth of the symbol context descent do you want
+/// your callback to get called?" of the filter.  The resolver answers this
+/// question (in the GetDepth method) and provides the resolution callback.
+/// Each Breakpoint has a BreakpointResolver, and it calls either
+/// ResolveBreakpoint or ResolveBreakpointInModules to tell it to look for new
+/// breakpoint locations.
+
+class BreakpointResolver : public Searcher {
+  friend class Breakpoint;
+
+public:
+  /// The breakpoint resolver need to have a breakpoint for "ResolveBreakpoint
+  /// to make sense.  It can be constructed without a breakpoint, but you have
+  /// to call SetBreakpoint before ResolveBreakpoint.
+  ///
+  /// \param[in] bkpt
+  ///   The breakpoint that owns this resolver.
+  /// \param[in] resolverType
+  ///   The concrete breakpoint resolver type for this breakpoint.
+  ///
+  /// \result
+  ///   Returns breakpoint location id.
+  BreakpointResolver(Breakpoint *bkpt, unsigned char resolverType,
+                     lldb::addr_t offset = 0);
+
+  /// The Destructor is virtual, all significant breakpoint resolvers derive
+  /// from this class.
+  ~BreakpointResolver() override;
+
+  /// This sets the breakpoint for this resolver.
+  ///
+  /// \param[in] bkpt
+  ///   The breakpoint that owns this resolver.
+  void SetBreakpoint(Breakpoint *bkpt);
+
+  /// This updates the offset for this breakpoint.  All the locations
+  /// currently set for this breakpoint will have their offset adjusted when
+  /// this is called.
+  ///
+  /// \param[in] offset
+  ///   The offset to add to all locations.
+  void SetOffset(lldb::addr_t offset);
+
+  /// This updates the offset for this breakpoint.  All the locations
+  /// currently set for this breakpoint will have their offset adjusted when
+  /// this is called.
+  ///
+  /// \param[in] offset
+  ///   The offset to add to all locations.
+  lldb::addr_t GetOffset() const { return m_offset; }
+
+  /// In response to this method the resolver scans all the modules in the
+  /// breakpoint's target, and adds any new locations it finds.
+  ///
+  /// \param[in] filter
+  ///   The filter that will manage the search for this resolver.
+  virtual void ResolveBreakpoint(SearchFilter &filter);
+
+  /// In response to this method the resolver scans the modules in the module
+  /// list \a modules, and adds any new locations it finds.
+  ///
+  /// \param[in] filter
+  ///   The filter that will manage the search for this resolver.
+  virtual void ResolveBreakpointInModules(SearchFilter &filter,
+                                          ModuleList &modules);
+
+  /// Prints a canonical description for the breakpoint to the stream \a s.
+  ///
+  /// \param[in] s
+  ///   Stream to which the output is copied.
+  void GetDescription(Stream *s) override = 0;
+
+  /// Standard "Dump" method.  At present it does nothing.
+  virtual void Dump(Stream *s) const = 0;
+
+  /// This section handles serializing and deserializing from StructuredData
+  /// objects.
+
+  static lldb::BreakpointResolverSP
+  CreateFromStructuredData(const StructuredData::Dictionary &resolver_dict,
+                           Status &error);
+
+  virtual StructuredData::ObjectSP SerializeToStructuredData() {
+    return StructuredData::ObjectSP();
+  }
+
+  static const char *GetSerializationKey() { return "BKPTResolver"; }
+
+  static const char *GetSerializationSubclassKey() { return "Type"; }
+
+  static const char *GetSerializationSubclassOptionsKey() { return "Options"; }
+
+  StructuredData::DictionarySP
+  WrapOptionsDict(StructuredData::DictionarySP options_dict_sp);
+
+  /// An enumeration for keeping track of the concrete subclass that is
+  /// actually instantiated. Values of this enumeration are kept in the
+  /// BreakpointResolver's SubclassID field. They are used for concrete type
+  /// identification.
+  enum ResolverTy {
+    FileLineResolver = 0, // This is an instance of BreakpointResolverFileLine
+    AddressResolver,      // This is an instance of BreakpointResolverAddress
+    NameResolver,         // This is an instance of BreakpointResolverName
+    FileRegexResolver,
+    PythonResolver,
+    ExceptionResolver,
+    LastKnownResolverType = ExceptionResolver,
+    UnknownResolver
+  };
+
+  // Translate the Ty to name for serialization, the "+2" is one for size vrs.
+  // index, and one for UnknownResolver.
+  static const char *g_ty_to_name[LastKnownResolverType + 2];
+
+  /// getResolverID - Return an ID for the concrete type of this object.  This
+  /// is used to implement the LLVM classof checks.  This should not be used
+  /// for any other purpose, as the values may change as LLDB evolves.
+  unsigned getResolverID() const { return SubclassID; }
+
+  enum ResolverTy GetResolverTy() {
+    if (SubclassID > ResolverTy::LastKnownResolverType)
+      return ResolverTy::UnknownResolver;
+    else
+      return (enum ResolverTy)SubclassID;
+  }
+
+  const char *GetResolverName() { return ResolverTyToName(GetResolverTy()); }
+
+  static const char *ResolverTyToName(enum ResolverTy);
+
+  static ResolverTy NameToResolverTy(llvm::StringRef name);
+
+  virtual lldb::BreakpointResolverSP
+  CopyForBreakpoint(Breakpoint &breakpoint) = 0;
+
+protected:
+  // Used for serializing resolver options:
+  // The options in this enum and the strings in the g_option_names must be
+  // kept in sync.
+  enum class OptionNames : uint32_t {
+    AddressOffset = 0,
+    ExactMatch,
+    FileName,
+    Inlines,
+    LanguageName,
+    LineNumber,
+    Column,
+    ModuleName,
+    NameMaskArray,
+    Offset,
+    PythonClassName,
+    RegexString,
+    ScriptArgs,
+    SectionName,
+    SearchDepth,
+    SkipPrologue,
+    SymbolNameArray,
+    LastOptionName
+  };
+  static const char
+      *g_option_names[static_cast<uint32_t>(OptionNames::LastOptionName)];
+  
+  virtual void NotifyBreakpointSet() {};
+
+public:
+  static const char *GetKey(OptionNames enum_value) {
+    return g_option_names[static_cast<uint32_t>(enum_value)];
+  }
+
+protected:
+  /// Takes a symbol context list of matches which supposedly represent the
+  /// same file and line number in a CU, and find the nearest actual line
+  /// number that matches, and then filter down the matching addresses to
+  /// unique entries, and skip the prologue if asked to do so, and then set
+  /// breakpoint locations in this breakpoint for all the resultant addresses.
+  /// When \p column is nonzero the \p line and \p column args are used to
+  /// filter the results to find the first breakpoint >= (line, column).
+  void SetSCMatchesByLine(SearchFilter &filter, SymbolContextList &sc_list,
+                          bool skip_prologue, llvm::StringRef log_ident,
+                          uint32_t line = 0, uint32_t column = 0);
+  void SetSCMatchesByLine(SearchFilter &, SymbolContextList &, bool,
+                          const char *) = delete;
+
+  lldb::BreakpointLocationSP AddLocation(Address loc_addr,
+                                         bool *new_location = nullptr);
+
+  Breakpoint *m_breakpoint; // This is the breakpoint we add locations to.
+  lldb::addr_t m_offset;    // A random offset the user asked us to add to any
+                            // breakpoints we set.
+
+private:
+  /// Helper for \p SetSCMatchesByLine.
+  void AddLocation(SearchFilter &filter, const SymbolContext &sc,
+                   bool skip_prologue, llvm::StringRef log_ident);
+
+  // Subclass identifier (for llvm isa/dyn_cast)
+  const unsigned char SubclassID;
+  DISALLOW_COPY_AND_ASSIGN(BreakpointResolver);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointResolver_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverAddress.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverAddress.h
new file mode 100644
index 0000000..949a788
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverAddress.h
@@ -0,0 +1,76 @@
+//===-- BreakpointResolverAddress.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointResolverAddress_h_
+#define liblldb_BreakpointResolverAddress_h_
+
+#include "lldb/Breakpoint/BreakpointResolver.h"
+#include "lldb/Core/ModuleSpec.h"
+
+namespace lldb_private {
+
+/// \class BreakpointResolverAddress BreakpointResolverAddress.h
+/// "lldb/Breakpoint/BreakpointResolverAddress.h" This class sets breakpoints
+/// on a given Address.  This breakpoint only takes once, and then it won't
+/// attempt to reset itself.
+
+class BreakpointResolverAddress : public BreakpointResolver {
+public:
+  BreakpointResolverAddress(Breakpoint *bkpt, const Address &addr);
+
+  BreakpointResolverAddress(Breakpoint *bkpt, const Address &addr,
+                            const FileSpec &module_spec);
+
+  ~BreakpointResolverAddress() override;
+
+  static BreakpointResolver *
+  CreateFromStructuredData(Breakpoint *bkpt,
+                           const StructuredData::Dictionary &options_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+  void ResolveBreakpoint(SearchFilter &filter) override;
+
+  void ResolveBreakpointInModules(SearchFilter &filter,
+                                  ModuleList &modules) override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+  void Dump(Stream *s) const override;
+
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool classof(const BreakpointResolverAddress *) { return true; }
+  static inline bool classof(const BreakpointResolver *V) {
+    return V->getResolverID() == BreakpointResolver::AddressResolver;
+  }
+
+  lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override;
+
+protected:
+  Address
+      m_addr; // The address - may be Section Offset or may be just an offset
+  lldb::addr_t m_resolved_addr; // The current value of the resolved load
+                                // address for this breakpoint,
+  FileSpec m_module_filespec;   // If this filespec is Valid, and m_addr is an
+                                // offset, then it will be converted
+  // to a Section+Offset address in this module, whenever that module gets
+  // around to being loaded.
+private:
+  DISALLOW_COPY_AND_ASSIGN(BreakpointResolverAddress);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointResolverAddress_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverFileLine.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverFileLine.h
new file mode 100644
index 0000000..f146a70
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverFileLine.h
@@ -0,0 +1,75 @@
+//===-- BreakpointResolverFileLine.h ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointResolverFileLine_h_
+#define liblldb_BreakpointResolverFileLine_h_
+
+#include "lldb/Breakpoint/BreakpointResolver.h"
+
+namespace lldb_private {
+
+/// \class BreakpointResolverFileLine BreakpointResolverFileLine.h
+/// "lldb/Breakpoint/BreakpointResolverFileLine.h" This class sets breakpoints
+/// by file and line.  Optionally, it will look for inlined instances of the
+/// file and line specification.
+
+class BreakpointResolverFileLine : public BreakpointResolver {
+public:
+  BreakpointResolverFileLine(Breakpoint *bkpt, const FileSpec &resolver,
+                             uint32_t line_no, uint32_t column,
+                             lldb::addr_t m_offset, bool check_inlines,
+                             bool skip_prologue, bool exact_match);
+
+  static BreakpointResolver *
+  CreateFromStructuredData(Breakpoint *bkpt,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+  ~BreakpointResolverFileLine() override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+  void Dump(Stream *s) const override;
+
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool classof(const BreakpointResolverFileLine *) {
+    return true;
+  }
+  static inline bool classof(const BreakpointResolver *V) {
+    return V->getResolverID() == BreakpointResolver::FileLineResolver;
+  }
+
+  lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override;
+
+protected:
+  void FilterContexts(SymbolContextList &sc_list, bool is_relative);
+
+  friend class Breakpoint;
+  FileSpec m_file_spec;   ///< This is the file spec we are looking for.
+  uint32_t m_line_number; ///< This is the line number that we are looking for.
+  uint32_t m_column;      ///< This is the column that we are looking for.
+  bool m_inlines; ///< This determines whether the resolver looks for inlined
+                  ///< functions or not.
+  bool m_skip_prologue;
+  bool m_exact_match;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(BreakpointResolverFileLine);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointResolverFileLine_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverFileRegex.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverFileRegex.h
new file mode 100644
index 0000000..9631457
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverFileRegex.h
@@ -0,0 +1,77 @@
+//===-- BreakpointResolverFileRegex.h ----------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointResolverFileRegex_h_
+#define liblldb_BreakpointResolverFileRegex_h_
+
+#include <set>
+#include "lldb/Breakpoint/BreakpointResolver.h"
+#include "lldb/Utility/ConstString.h"
+
+namespace lldb_private {
+
+/// \class BreakpointResolverFileRegex BreakpointResolverFileRegex.h
+/// "lldb/Breakpoint/BreakpointResolverFileRegex.h" This class sets
+/// breakpoints by file and line.  Optionally, it will look for inlined
+/// instances of the file and line specification.
+
+class BreakpointResolverFileRegex : public BreakpointResolver {
+public:
+  BreakpointResolverFileRegex(
+      Breakpoint *bkpt, RegularExpression &regex,
+      const std::unordered_set<std::string> &func_name_set, bool exact_match);
+
+  static BreakpointResolver *
+  CreateFromStructuredData(Breakpoint *bkpt,
+                           const StructuredData::Dictionary &options_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+  ~BreakpointResolverFileRegex() override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+  void Dump(Stream *s) const override;
+
+  void AddFunctionName(const char *func_name);
+
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool classof(const BreakpointResolverFileRegex *) {
+    return true;
+  }
+  static inline bool classof(const BreakpointResolver *V) {
+    return V->getResolverID() == BreakpointResolver::FileRegexResolver;
+  }
+
+  lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override;
+
+protected:
+  friend class Breakpoint;
+  RegularExpression
+      m_regex;        // This is the line expression that we are looking for.
+  bool m_exact_match; // If true, then if the source we match is in a comment,
+                      // we won't set a location there.
+  std::unordered_set<std::string> m_function_names; // Limit the search to
+                                                    // functions in the
+                                                    // comp_unit passed in.
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(BreakpointResolverFileRegex);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointResolverFileRegex_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverName.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverName.h
new file mode 100644
index 0000000..85a41b6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverName.h
@@ -0,0 +1,94 @@
+//===-- BreakpointResolverName.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointResolverName_h_
+#define liblldb_BreakpointResolverName_h_
+
+#include <string>
+#include <vector>
+
+#include "lldb/Breakpoint/BreakpointResolver.h"
+#include "lldb/Core/Module.h"
+
+namespace lldb_private {
+
+/// \class BreakpointResolverName BreakpointResolverName.h
+/// "lldb/Breakpoint/BreakpointResolverName.h" This class sets breakpoints on
+/// a given function name, either by exact match or by regular expression.
+
+class BreakpointResolverName : public BreakpointResolver {
+public:
+  BreakpointResolverName(Breakpoint *bkpt, const char *name,
+                         lldb::FunctionNameType name_type_mask,
+                         lldb::LanguageType language,
+                         Breakpoint::MatchType type, lldb::addr_t offset,
+                         bool skip_prologue);
+
+  // This one takes an array of names.  It is always MatchType = Exact.
+  BreakpointResolverName(Breakpoint *bkpt, const char *names[],
+                         size_t num_names,
+                         lldb::FunctionNameType name_type_mask,
+                         lldb::LanguageType language, lldb::addr_t offset,
+                         bool skip_prologue);
+
+  // This one takes a C++ array of names.  It is always MatchType = Exact.
+  BreakpointResolverName(Breakpoint *bkpt, std::vector<std::string> names,
+                         lldb::FunctionNameType name_type_mask,
+                         lldb::LanguageType language, lldb::addr_t offset,
+                         bool skip_prologue);
+
+  // Creates a function breakpoint by regular expression.  Takes over control
+  // of the lifespan of func_regex.
+  BreakpointResolverName(Breakpoint *bkpt, RegularExpression &func_regex,
+                         lldb::LanguageType language, lldb::addr_t offset,
+                         bool skip_prologue);
+
+  static BreakpointResolver *
+  CreateFromStructuredData(Breakpoint *bkpt,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+  ~BreakpointResolverName() override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+  void Dump(Stream *s) const override;
+
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool classof(const BreakpointResolverName *) { return true; }
+  static inline bool classof(const BreakpointResolver *V) {
+    return V->getResolverID() == BreakpointResolver::NameResolver;
+  }
+
+  lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override;
+
+protected:
+  BreakpointResolverName(const BreakpointResolverName &rhs);
+
+  std::vector<Module::LookupInfo> m_lookups;
+  ConstString m_class_name;
+  RegularExpression m_regex;
+  Breakpoint::MatchType m_match_type;
+  lldb::LanguageType m_language;
+  bool m_skip_prologue;
+
+  void AddNameLookup(ConstString name,
+                     lldb::FunctionNameType name_type_mask);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointResolverName_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverScripted.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverScripted.h
new file mode 100644
index 0000000..980bb46
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointResolverScripted.h
@@ -0,0 +1,78 @@
+//===-- BreakpointResolverScripted.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointResolverScripted_h_
+#define liblldb_BreakpointResolverScripted_h_
+
+#include "lldb/lldb-forward.h"
+#include "lldb/Breakpoint/BreakpointResolver.h"
+#include "lldb/Core/ModuleSpec.h"
+
+
+namespace lldb_private {
+
+/// \class BreakpointResolverScripted BreakpointResolverScripted.h
+/// "lldb/Breakpoint/BreakpointResolverScripted.h" This class sets breakpoints
+/// on a given Address.  This breakpoint only takes once, and then it won't
+/// attempt to reset itself.
+
+class BreakpointResolverScripted : public BreakpointResolver {
+public:
+  BreakpointResolverScripted(Breakpoint *bkpt,
+                             const llvm::StringRef class_name,
+                             lldb::SearchDepth depth,
+                             StructuredDataImpl *args_data,
+                             ScriptInterpreter &script_interp);
+
+  ~BreakpointResolverScripted() override;
+
+  static BreakpointResolver *
+  CreateFromStructuredData(Breakpoint *bkpt,
+                           const StructuredData::Dictionary &options_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+  void Dump(Stream *s) const override;
+
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool classof(const BreakpointResolverScripted *) { return true; }
+  static inline bool classof(const BreakpointResolver *V) {
+    return V->getResolverID() == BreakpointResolver::PythonResolver;
+  }
+
+  lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override;
+
+protected:
+  void NotifyBreakpointSet() override;
+private:
+  void CreateImplementationIfNeeded();
+  ScriptInterpreter *GetScriptInterpreter();
+  
+  std::string m_class_name;
+  lldb::SearchDepth m_depth;
+  StructuredDataImpl *m_args_ptr; // We own this, but the implementation
+                                  // has to manage the UP (since that is
+                                  // how it gets stored in the
+                                  // SBStructuredData).
+  StructuredData::GenericSP m_implementation_sp;
+
+  DISALLOW_COPY_AND_ASSIGN(BreakpointResolverScripted);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointResolverScripted_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointSite.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointSite.h
new file mode 100644
index 0000000..51ed84f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointSite.h
@@ -0,0 +1,237 @@
+//===-- BreakpointSite.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointSite_h_
+#define liblldb_BreakpointSite_h_
+
+
+#include <list>
+#include <mutex>
+
+
+#include "lldb/Breakpoint/BreakpointLocationCollection.h"
+#include "lldb/Breakpoint/StoppointLocation.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-forward.h"
+
+namespace lldb_private {
+
+/// \class BreakpointSite BreakpointSite.h "lldb/Breakpoint/BreakpointSite.h"
+/// Class that manages the actual breakpoint that will be inserted into the
+/// running program.
+///
+/// The BreakpointSite class handles the physical breakpoint that is actually
+/// inserted in the target program.  As such, it is also the one that  gets
+/// hit, when the program stops. It keeps a list of all BreakpointLocations
+/// that share this physical site. When the breakpoint is hit, all the
+/// locations are informed by the breakpoint site. Breakpoint sites are owned
+/// by the process.
+
+class BreakpointSite : public std::enable_shared_from_this<BreakpointSite>,
+                       public StoppointLocation {
+public:
+  enum Type {
+    eSoftware, // Breakpoint opcode has been written to memory and
+               // m_saved_opcode
+               // and m_trap_opcode contain the saved and written opcode.
+    eHardware, // Breakpoint site is set as a hardware breakpoint
+    eExternal  // Breakpoint site is managed by an external debug nub or
+               // debug interface where memory reads transparently will not
+               // display any breakpoint opcodes.
+  };
+
+  ~BreakpointSite() override;
+
+  // This section manages the breakpoint traps
+
+  /// Returns the Opcode Bytes for this breakpoint
+  uint8_t *GetTrapOpcodeBytes();
+
+  /// Returns the Opcode Bytes for this breakpoint - const version
+  const uint8_t *GetTrapOpcodeBytes() const;
+
+  /// Get the size of the trap opcode for this address
+  size_t GetTrapOpcodeMaxByteSize() const;
+
+  /// Sets the trap opcode
+  bool SetTrapOpcode(const uint8_t *trap_opcode, uint32_t trap_opcode_size);
+
+  /// Gets the original instruction bytes that were overwritten by the trap
+  uint8_t *GetSavedOpcodeBytes();
+
+  /// Gets the original instruction bytes that were overwritten by the trap
+  /// const version
+  const uint8_t *GetSavedOpcodeBytes() const;
+
+  /// Says whether \a addr and size \a size intersects with the address \a
+  /// intersect_addr
+  bool IntersectsRange(lldb::addr_t addr, size_t size,
+                       lldb::addr_t *intersect_addr, size_t *intersect_size,
+                       size_t *opcode_offset) const;
+
+  /// Tells whether the current breakpoint site is enabled or not
+  ///
+  /// This is a low-level enable bit for the breakpoint sites.  If a
+  /// breakpoint site has no enabled owners, it should just get removed.  This
+  /// enable/disable is for the low-level target code to enable and disable
+  /// breakpoint sites when single stepping, etc.
+  bool IsEnabled() const;
+
+  /// Sets whether the current breakpoint site is enabled or not
+  ///
+  /// \param[in] enabled
+  ///    \b true if the breakpoint is enabled, \b false otherwise.
+  void SetEnabled(bool enabled);
+
+  /// Enquires of the breakpoint locations that produced this breakpoint site
+  /// whether we should stop at this location.
+  ///
+  /// \param[in] context
+  ///    This contains the information about this stop.
+  ///
+  /// \return
+  ///    \b true if we should stop, \b false otherwise.
+  bool ShouldStop(StoppointCallbackContext *context) override;
+
+  /// Standard Dump method
+  ///
+  /// \param[in] context
+  ///    The stream to dump this output.
+  void Dump(Stream *s) const override;
+
+  /// The "Owners" are the breakpoint locations that share this breakpoint
+  /// site. The method adds the \a owner to this breakpoint site's owner list.
+  ///
+  /// \param[in] context
+  ///    \a owner is the Breakpoint Location to add.
+  void AddOwner(const lldb::BreakpointLocationSP &owner);
+
+  /// This method returns the number of breakpoint locations currently located
+  /// at this breakpoint site.
+  ///
+  /// \return
+  ///    The number of owners.
+  size_t GetNumberOfOwners();
+
+  /// This method returns the breakpoint location at index \a index located at
+  /// this breakpoint site.  The owners are listed ordinally from 0 to
+  /// GetNumberOfOwners() - 1 so you can use this method to iterate over the
+  /// owners
+  ///
+  /// \param[in] index
+  ///     The index in the list of owners for which you wish the owner location.
+  /// \return
+  ///    A shared pointer to the breakpoint location at that index.
+  lldb::BreakpointLocationSP GetOwnerAtIndex(size_t idx);
+
+  /// This method copies the breakpoint site's owners into a new collection.
+  /// It does this while the owners mutex is locked.
+  ///
+  /// \param[out] out_collection
+  ///    The BreakpointLocationCollection into which to put the owners
+  ///    of this breakpoint site.
+  ///
+  /// \return
+  ///    The number of elements copied into out_collection.
+  size_t CopyOwnersList(BreakpointLocationCollection &out_collection);
+
+  /// Check whether the owners of this breakpoint site have any thread
+  /// specifiers, and if yes, is \a thread contained in any of these
+  /// specifiers.
+  ///
+  /// \param[in] thread
+  ///     The thread against which to test.
+  ///
+  /// return
+  ///     \b true if the collection contains at least one location that
+  ///     would be valid for this thread, false otherwise.
+  bool ValidForThisThread(Thread *thread);
+
+  /// Print a description of this breakpoint site to the stream \a s.
+  /// GetDescription tells you about the breakpoint site's owners. Use
+  /// BreakpointSite::Dump(Stream *) to get information about the breakpoint
+  /// site itself.
+  ///
+  /// \param[in] s
+  ///     The stream to which to print the description.
+  ///
+  /// \param[in] level
+  ///     The description level that indicates the detail level to
+  ///     provide.
+  ///
+  /// \see lldb::DescriptionLevel
+  void GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+  /// Tell whether a breakpoint has a location at this site.
+  ///
+  /// \param[in] bp_id
+  ///     The breakpoint id to query.
+  ///
+  /// \result
+  ///     \b true if bp_id has a location that is at this site,
+  ///     \b false otherwise.
+  bool IsBreakpointAtThisSite(lldb::break_id_t bp_id);
+
+  /// Tell whether ALL the breakpoints in the location collection are
+  /// internal.
+  ///
+  /// \result
+  ///     \b true if all breakpoint locations are owned by internal breakpoints,
+  ///     \b false otherwise.
+  bool IsInternal() const;
+
+  BreakpointSite::Type GetType() const { return m_type; }
+
+  void SetType(BreakpointSite::Type type) { m_type = type; }
+
+private:
+  friend class Process;
+  friend class BreakpointLocation;
+  // The StopInfoBreakpoint knows when it is processing a hit for a thread for
+  // a site, so let it be the one to manage setting the location hit count once
+  // and only once.
+  friend class StopInfoBreakpoint;
+
+  void BumpHitCounts();
+
+  /// The method removes the owner at \a break_loc_id from this breakpoint
+  /// list.
+  ///
+  /// \param[in] context
+  ///    \a break_loc_id is the Breakpoint Location to remove.
+  size_t RemoveOwner(lldb::break_id_t break_id, lldb::break_id_t break_loc_id);
+
+  BreakpointSite::Type m_type; ///< The type of this breakpoint site.
+  uint8_t m_saved_opcode[8]; ///< The saved opcode bytes if this breakpoint site
+                             ///uses trap opcodes.
+  uint8_t m_trap_opcode[8];  ///< The opcode that was used to create the
+                             ///breakpoint if it is a software breakpoint site.
+  bool
+      m_enabled; ///< Boolean indicating if this breakpoint site enabled or not.
+
+  // Consider adding an optimization where if there is only one owner, we don't
+  // store a list.  The usual case will be only one owner...
+  BreakpointLocationCollection m_owners; ///< This has the BreakpointLocations
+                                         ///that share this breakpoint site.
+  std::recursive_mutex
+      m_owners_mutex; ///< This mutex protects the owners collection.
+
+  static lldb::break_id_t GetNextID();
+
+  // Only the Process can create breakpoint sites in
+  // Process::CreateBreakpointSite (lldb::BreakpointLocationSP &, bool).
+  BreakpointSite(BreakpointSiteList *list,
+                 const lldb::BreakpointLocationSP &owner, lldb::addr_t m_addr,
+                 bool use_hardware);
+
+  DISALLOW_COPY_AND_ASSIGN(BreakpointSite);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointSite_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/BreakpointSiteList.h b/linux-x64/clang/include/lldb/Breakpoint/BreakpointSiteList.h
new file mode 100644
index 0000000..b10d119
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/BreakpointSiteList.h
@@ -0,0 +1,173 @@
+//===-- BreakpointSiteList.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_BreakpointSiteList_h_
+#define liblldb_BreakpointSiteList_h_
+
+#include <functional>
+#include <map>
+#include <mutex>
+
+#include "lldb/Breakpoint/BreakpointSite.h"
+
+namespace lldb_private {
+
+/// \class BreakpointSiteList BreakpointSiteList.h
+/// "lldb/Breakpoint/BreakpointSiteList.h" Class that manages lists of
+/// BreakpointSite shared pointers.
+class BreakpointSiteList {
+  // At present Process directly accesses the map of BreakpointSites so it can
+  // do quick lookups into the map (using GetMap).
+  // FIXME: Find a better interface for this.
+  friend class Process;
+
+public:
+  /// Default constructor makes an empty list.
+  BreakpointSiteList();
+
+  /// Destructor, currently does nothing.
+  ~BreakpointSiteList();
+
+  /// Add a BreakpointSite to the list.
+  ///
+  /// \param[in] bp_site_sp
+  ///    A shared pointer to a breakpoint site being added to the list.
+  ///
+  /// \return
+  ///    The ID of the BreakpointSite in the list.
+  lldb::break_id_t Add(const lldb::BreakpointSiteSP &bp_site_sp);
+
+  /// Standard Dump routine, doesn't do anything at present. \param[in] s
+  ///     Stream into which to dump the description.
+  void Dump(Stream *s) const;
+
+  /// Returns a shared pointer to the breakpoint site at address \a addr.
+  ///
+  /// \param[in] addr
+  ///     The address to look for.
+  ///
+  /// \result
+  ///     A shared pointer to the breakpoint site. May contain a NULL
+  ///     pointer if no breakpoint site exists with a matching address.
+  lldb::BreakpointSiteSP FindByAddress(lldb::addr_t addr);
+
+  /// Returns a shared pointer to the breakpoint site with id \a breakID.
+  ///
+  /// \param[in] breakID
+  ///   The breakpoint site ID to seek for.
+  ///
+  /// \result
+  ///   A shared pointer to the breakpoint site.  May contain a NULL pointer if
+  ///   the
+  ///   breakpoint doesn't exist.
+  lldb::BreakpointSiteSP FindByID(lldb::break_id_t breakID);
+
+  /// Returns a shared pointer to the breakpoint site with id \a breakID -
+  /// const version.
+  ///
+  /// \param[in] breakID
+  ///   The breakpoint site ID to seek for.
+  ///
+  /// \result
+  ///   A shared pointer to the breakpoint site.  May contain a NULL pointer if
+  ///   the
+  ///   breakpoint doesn't exist.
+  const lldb::BreakpointSiteSP FindByID(lldb::break_id_t breakID) const;
+
+  /// Returns the breakpoint site id to the breakpoint site at address \a
+  /// addr.
+  ///
+  /// \param[in] addr
+  ///   The address to match.
+  ///
+  /// \result
+  ///   The ID of the breakpoint site, or LLDB_INVALID_BREAK_ID.
+  lldb::break_id_t FindIDByAddress(lldb::addr_t addr);
+
+  /// Returns whether the breakpoint site \a bp_site_id has \a bp_id
+  //  as one of its owners.
+  ///
+  /// \param[in] bp_site_id
+  ///   The breakpoint site id to query.
+  ///
+  /// \param[in] bp_id
+  ///   The breakpoint id to look for in \a bp_site_id.
+  ///
+  /// \result
+  ///   True if \a bp_site_id exists in the site list AND \a bp_id is one of the
+  ///   owners of that site.
+  bool BreakpointSiteContainsBreakpoint(lldb::break_id_t bp_site_id,
+                                        lldb::break_id_t bp_id);
+
+  void ForEach(std::function<void(BreakpointSite *)> const &callback);
+
+  /// Removes the breakpoint site given by \b breakID from this list.
+  ///
+  /// \param[in] breakID
+  ///   The breakpoint site index to remove.
+  ///
+  /// \result
+  ///   \b true if the breakpoint site \a breakID was in the list.
+  bool Remove(lldb::break_id_t breakID);
+
+  /// Removes the breakpoint site at address \a addr from this list.
+  ///
+  /// \param[in] addr
+  ///   The address from which to remove a breakpoint site.
+  ///
+  /// \result
+  ///   \b true if \a addr had a breakpoint site to remove from the list.
+  bool RemoveByAddress(lldb::addr_t addr);
+
+  bool FindInRange(lldb::addr_t lower_bound, lldb::addr_t upper_bound,
+                   BreakpointSiteList &bp_site_list) const;
+
+  typedef void (*BreakpointSiteSPMapFunc)(lldb::BreakpointSiteSP &bp,
+                                          void *baton);
+
+  /// Enquires of the breakpoint site on in this list with ID \a breakID
+  /// whether we should stop for the breakpoint or not.
+  ///
+  /// \param[in] context
+  ///    This contains the information about this stop.
+  ///
+  /// \param[in] breakID
+  ///    This break ID that we hit.
+  ///
+  /// \return
+  ///    \b true if we should stop, \b false otherwise.
+  bool ShouldStop(StoppointCallbackContext *context, lldb::break_id_t breakID);
+
+  /// Returns the number of elements in the list.
+  ///
+  /// \result
+  ///   The number of elements.
+  size_t GetSize() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_bp_site_list.size();
+  }
+
+  bool IsEmpty() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_bp_site_list.empty();
+  }
+
+protected:
+  typedef std::map<lldb::addr_t, lldb::BreakpointSiteSP> collection;
+
+  collection::iterator GetIDIterator(lldb::break_id_t breakID);
+
+  collection::const_iterator GetIDConstIterator(lldb::break_id_t breakID) const;
+
+  mutable std::recursive_mutex m_mutex;
+  collection m_bp_site_list; // The breakpoint site list.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_BreakpointSiteList_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/Stoppoint.h b/linux-x64/clang/include/lldb/Breakpoint/Stoppoint.h
new file mode 100644
index 0000000..f20b100
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/Stoppoint.h
@@ -0,0 +1,45 @@
+//===-- Stoppoint.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Stoppoint_h_
+#define liblldb_Stoppoint_h_
+
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class Stoppoint {
+public:
+  // Constructors and Destructors
+  Stoppoint();
+
+  virtual ~Stoppoint();
+
+  // Methods
+  virtual void Dump(Stream *) = 0;
+
+  virtual bool IsEnabled() = 0;
+
+  virtual void SetEnabled(bool enable) = 0;
+
+  lldb::break_id_t GetID() const;
+
+  void SetID(lldb::break_id_t bid);
+
+protected:
+  lldb::break_id_t m_bid;
+
+private:
+  // For Stoppoint only
+  DISALLOW_COPY_AND_ASSIGN(Stoppoint);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Stoppoint_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/StoppointCallbackContext.h b/linux-x64/clang/include/lldb/Breakpoint/StoppointCallbackContext.h
new file mode 100644
index 0000000..c1724a6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/StoppointCallbackContext.h
@@ -0,0 +1,51 @@
+//===-- StoppointCallbackContext.h ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StoppointCallbackContext_h_
+#define liblldb_StoppointCallbackContext_h_
+
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class StoppointCallbackContext StoppointCallbackContext.h
+/// "lldb/Breakpoint/StoppointCallbackContext.h" Class holds the information
+/// that a breakpoint callback needs to evaluate this stop.
+
+/// General Outline:
+/// When we hit a breakpoint we need to package up whatever information is
+/// needed to evaluate breakpoint commands and conditions.  This class is the
+/// container of that information.
+
+class StoppointCallbackContext {
+public:
+  StoppointCallbackContext();
+
+  StoppointCallbackContext(Event *event, const ExecutionContext &exe_ctx,
+                           bool synchronously = false);
+
+  /// Clear the object's state.
+  ///
+  /// Sets the event, process and thread to NULL, and the frame index to an
+  /// invalid value.
+  void Clear();
+
+  // Member variables
+  Event *event; // This is the event, the callback can modify this to indicate
+                // the meaning of the breakpoint hit
+  ExecutionContextRef
+      exe_ctx_ref;     // This tells us where we have stopped, what thread.
+  bool is_synchronous; // Is the callback being executed synchronously with the
+                       // breakpoint,
+                       // or asynchronously as the event is retrieved?
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StoppointCallbackContext_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/StoppointLocation.h b/linux-x64/clang/include/lldb/Breakpoint/StoppointLocation.h
new file mode 100644
index 0000000..3926f45
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/StoppointLocation.h
@@ -0,0 +1,86 @@
+//===-- StoppointLocation.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StoppointLocation_h_
+#define liblldb_StoppointLocation_h_
+
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+// #include "lldb/Breakpoint/BreakpointOptions.h"
+
+namespace lldb_private {
+
+class StoppointLocation {
+public:
+  // Constructors and Destructors
+  StoppointLocation(lldb::break_id_t bid, lldb::addr_t m_addr, bool hardware);
+
+  StoppointLocation(lldb::break_id_t bid, lldb::addr_t m_addr,
+                    uint32_t byte_size, bool hardware);
+
+  virtual ~StoppointLocation();
+
+  // Operators
+
+  // Methods
+  virtual lldb::addr_t GetLoadAddress() const { return m_addr; }
+
+  virtual void SetLoadAddress(lldb::addr_t addr) { m_addr = addr; }
+
+  uint32_t GetByteSize() const { return m_byte_size; }
+
+  uint32_t GetHitCount() const { return m_hit_count; }
+
+  uint32_t GetHardwareIndex() const { return m_hardware_index; }
+
+  bool HardwareRequired() const { return m_hardware; }
+
+  virtual bool IsHardware() const {
+    return m_hardware_index != LLDB_INVALID_INDEX32;
+  }
+
+  virtual bool ShouldStop(StoppointCallbackContext *context) { return true; }
+
+  virtual void Dump(Stream *stream) const {}
+
+  void SetHardwareIndex(uint32_t index) { m_hardware_index = index; }
+
+  lldb::break_id_t GetID() const { return m_loc_id; }
+
+protected:
+  // Classes that inherit from StoppointLocation can see and modify these
+  lldb::break_id_t m_loc_id; // Stoppoint location ID
+  lldb::addr_t
+      m_addr; // The load address of this stop point. The base Stoppoint doesn't
+  // store a full Address since that's not needed for the breakpoint sites.
+  bool m_hardware; // True if this point has been is required to use hardware
+                   // (which may fail due to lack of resources)
+  uint32_t m_hardware_index; // The hardware resource index for this
+                             // breakpoint/watchpoint
+  uint32_t m_byte_size; // The size in bytes of stop location.  e.g. the length
+                        // of the trap opcode for
+  // software breakpoints, or the optional length in bytes for hardware
+  // breakpoints, or the length of the watchpoint.
+  uint32_t
+      m_hit_count; // Number of times this breakpoint/watchpoint has been hit
+
+  // If you override this, be sure to call the base class to increment the
+  // internal counter.
+  void IncrementHitCount() { ++m_hit_count; }
+
+  void DecrementHitCount();
+
+private:
+  // For StoppointLocation only
+  DISALLOW_COPY_AND_ASSIGN(StoppointLocation);
+  StoppointLocation() = delete;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StoppointLocation_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/Watchpoint.h b/linux-x64/clang/include/lldb/Breakpoint/Watchpoint.h
new file mode 100644
index 0000000..e71f89b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/Watchpoint.h
@@ -0,0 +1,217 @@
+//===-- Watchpoint.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Watchpoint_h_
+#define liblldb_Watchpoint_h_
+
+#include <memory>
+#include <string>
+
+#include "lldb/Breakpoint/StoppointLocation.h"
+#include "lldb/Breakpoint/WatchpointOptions.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Target/Target.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class Watchpoint : public std::enable_shared_from_this<Watchpoint>,
+                   public StoppointLocation {
+public:
+  class WatchpointEventData : public EventData {
+  public:
+    WatchpointEventData(lldb::WatchpointEventType sub_type,
+                        const lldb::WatchpointSP &new_watchpoint_sp);
+
+    ~WatchpointEventData() override;
+
+    static ConstString GetFlavorString();
+
+    ConstString GetFlavor() const override;
+
+    lldb::WatchpointEventType GetWatchpointEventType() const;
+
+    lldb::WatchpointSP &GetWatchpoint();
+
+    void Dump(Stream *s) const override;
+
+    static lldb::WatchpointEventType
+    GetWatchpointEventTypeFromEvent(const lldb::EventSP &event_sp);
+
+    static lldb::WatchpointSP
+    GetWatchpointFromEvent(const lldb::EventSP &event_sp);
+
+    static const WatchpointEventData *
+    GetEventDataFromEvent(const Event *event_sp);
+
+  private:
+    lldb::WatchpointEventType m_watchpoint_event;
+    lldb::WatchpointSP m_new_watchpoint_sp;
+
+    DISALLOW_COPY_AND_ASSIGN(WatchpointEventData);
+  };
+
+  Watchpoint(Target &target, lldb::addr_t addr, uint32_t size,
+             const CompilerType *type, bool hardware = true);
+
+  ~Watchpoint() override;
+
+  void IncrementFalseAlarmsAndReviseHitCount();
+
+  bool IsEnabled() const;
+
+  // This doesn't really enable/disable the watchpoint.   It is currently just
+  // for use in the Process plugin's {Enable,Disable}Watchpoint, which should
+  // be used instead.
+  
+  void SetEnabled(bool enabled, bool notify = true);
+
+  bool IsHardware() const override;
+
+  bool ShouldStop(StoppointCallbackContext *context) override;
+
+  bool WatchpointRead() const;
+  bool WatchpointWrite() const;
+  uint32_t GetIgnoreCount() const;
+  void SetIgnoreCount(uint32_t n);
+  void SetWatchpointType(uint32_t type, bool notify = true);
+  void SetDeclInfo(const std::string &str);
+  std::string GetWatchSpec();
+  void SetWatchSpec(const std::string &str);
+
+  // Snapshot management interface.
+  bool IsWatchVariable() const;
+  void SetWatchVariable(bool val);
+  bool CaptureWatchedValue(const ExecutionContext &exe_ctx);
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level);
+  void Dump(Stream *s) const override;
+  void DumpSnapshots(Stream *s, const char *prefix = nullptr) const;
+  void DumpWithLevel(Stream *s, lldb::DescriptionLevel description_level) const;
+  Target &GetTarget() { return m_target; }
+  const Status &GetError() { return m_error; }
+
+  /// Returns the WatchpointOptions structure set for this watchpoint.
+  ///
+  /// \return
+  ///     A pointer to this watchpoint's WatchpointOptions.
+  WatchpointOptions *GetOptions() { return &m_options; }
+
+  /// Set the callback action invoked when the watchpoint is hit.
+  ///
+  /// \param[in] callback
+  ///    The method that will get called when the watchpoint is hit.
+  /// \param[in] callback_baton
+  ///    A void * pointer that will get passed back to the callback function.
+  /// \param[in] is_synchronous
+  ///    If \b true the callback will be run on the private event thread
+  ///    before the stop event gets reported.  If false, the callback will get
+  ///    handled on the public event thread after the stop has been posted.
+  ///
+  /// \return
+  ///    \b true if the process should stop when you hit the watchpoint.
+  ///    \b false if it should continue.
+  void SetCallback(WatchpointHitCallback callback, void *callback_baton,
+                   bool is_synchronous = false);
+
+  void SetCallback(WatchpointHitCallback callback,
+                   const lldb::BatonSP &callback_baton_sp,
+                   bool is_synchronous = false);
+
+  void ClearCallback();
+
+  /// Invoke the callback action when the watchpoint is hit.
+  ///
+  /// \param[in] context
+  ///     Described the watchpoint event.
+  ///
+  /// \return
+  ///     \b true if the target should stop at this watchpoint and \b false not.
+  bool InvokeCallback(StoppointCallbackContext *context);
+
+  // Condition
+  /// Set the watchpoint's condition.
+  ///
+  /// \param[in] condition
+  ///    The condition expression to evaluate when the watchpoint is hit.
+  ///    Pass in nullptr to clear the condition.
+  void SetCondition(const char *condition);
+
+  /// Return a pointer to the text of the condition expression.
+  ///
+  /// \return
+  ///    A pointer to the condition expression text, or nullptr if no
+  //     condition has been set.
+  const char *GetConditionText() const;
+
+  void TurnOnEphemeralMode();
+
+  void TurnOffEphemeralMode();
+
+  bool IsDisabledDuringEphemeralMode();
+
+  const CompilerType &GetCompilerType() { return m_type; }
+
+private:
+  friend class Target;
+  friend class WatchpointList;
+
+  void ResetHitCount() { m_hit_count = 0; }
+
+  void ResetHistoricValues() {
+    m_old_value_sp.reset(nullptr);
+    m_new_value_sp.reset(nullptr);
+  }
+
+  Target &m_target;
+  bool m_enabled;           // Is this watchpoint enabled
+  bool m_is_hardware;       // Is this a hardware watchpoint
+  bool m_is_watch_variable; // True if set via 'watchpoint set variable'.
+  bool m_is_ephemeral;      // True if the watchpoint is in the ephemeral mode,
+                            // meaning that it is
+  // undergoing a pair of temporary disable/enable actions to avoid recursively
+  // triggering further watchpoint events.
+  uint32_t m_disabled_count; // Keep track of the count that the watchpoint is
+                             // disabled while in ephemeral mode.
+  // At the end of the ephemeral mode when the watchpoint is to be enabled
+  // again, we check the count, if it is more than 1, it means the user-
+  // supplied actions actually want the watchpoint to be disabled!
+  uint32_t m_watch_read : 1, // 1 if we stop when the watched data is read from
+      m_watch_write : 1,     // 1 if we stop when the watched data is written to
+      m_watch_was_read : 1, // Set to 1 when watchpoint is hit for a read access
+      m_watch_was_written : 1;  // Set to 1 when watchpoint is hit for a write
+                                // access
+  uint32_t m_ignore_count;      // Number of times to ignore this watchpoint
+  uint32_t m_false_alarms;      // Number of false alarms.
+  std::string m_decl_str;       // Declaration information, if any.
+  std::string m_watch_spec_str; // Spec for the watchpoint.
+  lldb::ValueObjectSP m_old_value_sp;
+  lldb::ValueObjectSP m_new_value_sp;
+  CompilerType m_type;
+  Status m_error; // An error object describing errors associated with this
+                  // watchpoint.
+  WatchpointOptions
+      m_options; // Settable watchpoint options, which is a delegate to handle
+                 // the callback machinery.
+  bool m_being_created;
+
+  std::unique_ptr<UserExpression> m_condition_up; // The condition to test.
+
+  void SetID(lldb::watch_id_t id) { m_loc_id = id; }
+
+  void SendWatchpointChangedEvent(lldb::WatchpointEventType eventKind);
+
+  void SendWatchpointChangedEvent(WatchpointEventData *data);
+
+  DISALLOW_COPY_AND_ASSIGN(Watchpoint);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Watchpoint_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/WatchpointList.h b/linux-x64/clang/include/lldb/Breakpoint/WatchpointList.h
new file mode 100644
index 0000000..98c6483
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/WatchpointList.h
@@ -0,0 +1,206 @@
+//===-- WatchpointList.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_WatchpointList_h_
+#define liblldb_WatchpointList_h_
+
+#include <list>
+#include <mutex>
+#include <vector>
+
+#include "lldb/Core/Address.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class WatchpointList WatchpointList.h "lldb/Breakpoint/WatchpointList.h"
+/// This class is used by Watchpoint to manage a list of watchpoints,
+//  each watchpoint in the list has a unique ID, and is unique by Address as
+//  well.
+
+class WatchpointList {
+  // Only Target can make the watchpoint list, or add elements to it. This is
+  // not just some random collection of watchpoints.  Rather, the act of adding
+  // the watchpoint to this list sets its ID.
+  friend class Watchpoint;
+  friend class Target;
+
+public:
+  /// Default constructor makes an empty list.
+  WatchpointList();
+
+  /// Destructor, currently does nothing.
+  ~WatchpointList();
+
+  /// Add a Watchpoint to the list.
+  ///
+  /// \param[in] wp_sp
+  ///    A shared pointer to a watchpoint being added to the list.
+  ///
+  /// \return
+  ///    The ID of the Watchpoint in the list.
+  lldb::watch_id_t Add(const lldb::WatchpointSP &wp_sp, bool notify);
+
+  /// Standard "Dump" method.
+  void Dump(Stream *s) const;
+
+  /// Dump with lldb::DescriptionLevel.
+  void DumpWithLevel(Stream *s, lldb::DescriptionLevel description_level) const;
+
+  /// Returns a shared pointer to the watchpoint at address \a addr - const
+  /// version.
+  ///
+  /// \param[in] addr
+  ///     The address to look for.
+  ///
+  /// \result
+  ///     A shared pointer to the watchpoint.  May contain a NULL
+  ///     pointer if the watchpoint doesn't exist.
+  const lldb::WatchpointSP FindByAddress(lldb::addr_t addr) const;
+
+  /// Returns a shared pointer to the watchpoint with watchpoint spec \a spec
+  /// - const version.
+  ///
+  /// \param[in] spec
+  ///     The watchpoint spec to look for.
+  ///
+  /// \result
+  ///     A shared pointer to the watchpoint.  May contain a NULL
+  ///     pointer if the watchpoint doesn't exist.
+  const lldb::WatchpointSP FindBySpec(std::string spec) const;
+
+  /// Returns a shared pointer to the watchpoint with id \a watchID, const
+  /// version.
+  ///
+  /// \param[in] watchID
+  ///     The watchpoint location ID to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the watchpoint.  May contain a NULL
+  ///     pointer if the watchpoint doesn't exist.
+  lldb::WatchpointSP FindByID(lldb::watch_id_t watchID) const;
+
+  /// Returns the watchpoint id to the watchpoint at address \a addr.
+  ///
+  /// \param[in] addr
+  ///     The address to match.
+  ///
+  /// \result
+  ///     The ID of the watchpoint, or LLDB_INVALID_WATCH_ID.
+  lldb::watch_id_t FindIDByAddress(lldb::addr_t addr);
+
+  /// Returns the watchpoint id to the watchpoint with watchpoint spec \a
+  /// spec.
+  ///
+  /// \param[in] spec
+  ///     The watchpoint spec to match.
+  ///
+  /// \result
+  ///     The ID of the watchpoint, or LLDB_INVALID_WATCH_ID.
+  lldb::watch_id_t FindIDBySpec(std::string spec);
+
+  /// Returns a shared pointer to the watchpoint with index \a i.
+  ///
+  /// \param[in] i
+  ///     The watchpoint index to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the watchpoint.  May contain a NULL pointer if
+  ///     the watchpoint doesn't exist.
+  lldb::WatchpointSP GetByIndex(uint32_t i);
+
+  /// Returns a shared pointer to the watchpoint with index \a i, const
+  /// version.
+  ///
+  /// \param[in] i
+  ///     The watchpoint index to seek for.
+  ///
+  /// \result
+  ///     A shared pointer to the watchpoint.  May contain a NULL pointer if
+  ///     the watchpoint location doesn't exist.
+  const lldb::WatchpointSP GetByIndex(uint32_t i) const;
+
+  /// Removes the watchpoint given by \b watchID from this list.
+  ///
+  /// \param[in] watchID
+  ///   The watchpoint ID to remove.
+  ///
+  /// \result
+  ///   \b true if the watchpoint \a watchID was in the list.
+  bool Remove(lldb::watch_id_t watchID, bool notify);
+
+  /// Returns the number hit count of all watchpoints in this list.
+  ///
+  /// \result
+  ///     Hit count of all watchpoints in this list.
+  uint32_t GetHitCount() const;
+
+  /// Enquires of the watchpoint in this list with ID \a watchID whether we
+  /// should stop.
+  ///
+  /// \param[in] context
+  ///     This contains the information about this stop.
+  ///
+  /// \param[in] watchID
+  ///     This watch ID that we hit.
+  ///
+  /// \return
+  ///     \b true if we should stop, \b false otherwise.
+  bool ShouldStop(StoppointCallbackContext *context, lldb::watch_id_t watchID);
+
+  /// Returns the number of elements in this watchpoint list.
+  ///
+  /// \result
+  ///     The number of elements.
+  size_t GetSize() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_watchpoints.size();
+  }
+
+  /// Print a description of the watchpoints in this list to the stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to print the description.
+  ///
+  /// \param[in] level
+  ///     The description level that indicates the detail level to
+  ///     provide.
+  ///
+  /// \see lldb::DescriptionLevel
+  void GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+  void SetEnabledAll(bool enabled);
+
+  void RemoveAll(bool notify);
+
+  /// Sets the passed in Locker to hold the Watchpoint List mutex.
+  ///
+  /// \param[in] locker
+  ///   The locker object that is set.
+  void GetListMutex(std::unique_lock<std::recursive_mutex> &lock);
+
+protected:
+  typedef std::list<lldb::WatchpointSP> wp_collection;
+  typedef std::vector<lldb::watch_id_t> id_vector;
+
+  id_vector GetWatchpointIDs() const;
+
+  wp_collection::iterator GetIDIterator(lldb::watch_id_t watchID);
+
+  wp_collection::const_iterator
+  GetIDConstIterator(lldb::watch_id_t watchID) const;
+
+  wp_collection m_watchpoints;
+  mutable std::recursive_mutex m_mutex;
+
+  lldb::watch_id_t m_next_wp_id;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_WatchpointList_h_
diff --git a/linux-x64/clang/include/lldb/Breakpoint/WatchpointOptions.h b/linux-x64/clang/include/lldb/Breakpoint/WatchpointOptions.h
new file mode 100644
index 0000000..b395dde
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Breakpoint/WatchpointOptions.h
@@ -0,0 +1,200 @@
+//===-- WatchpointOptions.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_WatchpointOptions_h_
+#define liblldb_WatchpointOptions_h_
+
+#include <memory>
+#include <string>
+
+#include "lldb/Utility/Baton.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class WatchpointOptions WatchpointOptions.h
+/// "lldb/Breakpoint/WatchpointOptions.h" Class that manages the options on a
+/// watchpoint.
+
+class WatchpointOptions {
+public:
+  // Constructors and Destructors
+  /// Default constructor.  The watchpoint is enabled, and has no condition,
+  /// callback, ignore count, etc...
+  WatchpointOptions();
+  WatchpointOptions(const WatchpointOptions &rhs);
+
+  static WatchpointOptions *CopyOptionsNoCallback(WatchpointOptions &rhs);
+  /// This constructor allows you to specify all the watchpoint options.
+  ///
+  /// \param[in] callback
+  ///    This is the plugin for some code that gets run, returns \b true if we
+  ///    are to stop.
+  ///
+  /// \param[in] baton
+  ///    Client data that will get passed to the callback.
+  ///
+  /// \param[in] thread_id
+  ///    Only stop if \a thread_id hits the watchpoint.
+  WatchpointOptions(WatchpointHitCallback callback, void *baton,
+                    lldb::tid_t thread_id = LLDB_INVALID_THREAD_ID);
+
+  virtual ~WatchpointOptions();
+
+  // Operators
+  const WatchpointOptions &operator=(const WatchpointOptions &rhs);
+
+  // Callbacks
+  //
+  // Watchpoint callbacks come in two forms, synchronous and asynchronous.
+  // Synchronous callbacks will get run before any of the thread plans are
+  // consulted, and if they return false the target will continue "under the
+  // radar" of the thread plans.  There are a couple of restrictions to
+  // synchronous callbacks: 1) They should NOT resume the target themselves.
+  // Just return false if you want the target to restart. 2) Watchpoints with
+  // synchronous callbacks can't have conditions (or rather, they can have
+  // them, but they
+  //    won't do anything.  Ditto with ignore counts, etc...  You are supposed
+  //    to control that all through the
+  //    callback.
+  // Asynchronous callbacks get run as part of the "ShouldStop" logic in the
+  // thread plan.  The logic there is:
+  //   a) If the watchpoint is thread specific and not for this thread, continue
+  //   w/o running the callback.
+  //   b) If the ignore count says we shouldn't stop, then ditto.
+  //   c) If the condition says we shouldn't stop, then ditto.
+  //   d) Otherwise, the callback will get run, and if it returns true we will
+  //   stop, and if false we won't.
+  //  The asynchronous callback can run the target itself, but at present that
+  //  should be the last action the
+  //  callback does.  We will relax this condition at some point, but it will
+  //  take a bit of plumbing to get
+  //  that to work.
+  //
+
+  /// Adds a callback to the watchpoint option set.
+  ///
+  /// \param[in] callback
+  ///    The function to be called when the watchpoint gets hit.
+  ///
+  /// \param[in] baton_sp
+  ///    A baton which will get passed back to the callback when it is invoked.
+  ///
+  /// \param[in] synchronous
+  ///    Whether this is a synchronous or asynchronous callback.  See discussion
+  ///    above.
+  void SetCallback(WatchpointHitCallback callback,
+                   const lldb::BatonSP &baton_sp, bool synchronous = false);
+
+  /// Remove the callback from this option set.
+  void ClearCallback();
+
+  // The rest of these functions are meant to be used only within the
+  // watchpoint handling mechanism.
+
+  /// Use this function to invoke the callback for a specific stop.
+  ///
+  /// \param[in] context
+  ///    The context in which the callback is to be invoked.  This includes the
+  ///    stop event, the
+  ///    execution context of the stop (since you might hit the same watchpoint
+  ///    on multiple threads) and
+  ///    whether we are currently executing synchronous or asynchronous
+  ///    callbacks.
+  ///
+  /// \param[in] watch_id
+  ///    The watchpoint ID that owns this option set.
+  ///
+  /// \return
+  ///     The callback return value.
+  bool InvokeCallback(StoppointCallbackContext *context,
+                      lldb::user_id_t watch_id);
+
+  /// Used in InvokeCallback to tell whether it is the right time to run this
+  /// kind of callback.
+  ///
+  /// \return
+  ///     The synchronicity of our callback.
+  bool IsCallbackSynchronous() { return m_callback_is_synchronous; }
+
+  /// Fetch the baton from the callback.
+  ///
+  /// \return
+  ///     The baton.
+  Baton *GetBaton();
+
+  /// Fetch  a const version of the baton from the callback.
+  ///
+  /// \return
+  ///     The baton.
+  const Baton *GetBaton() const;
+
+  /// Return the current thread spec for this option. This will return nullptr
+  /// if the no thread specifications have been set for this Option yet.
+  /// \return
+  ///     The thread specification pointer for this option, or nullptr if none
+  ///     has
+  ///     been set yet.
+  const ThreadSpec *GetThreadSpecNoCreate() const;
+
+  /// Returns a pointer to the ThreadSpec for this option, creating it. if it
+  /// hasn't been created already.   This API is used for setting the
+  /// ThreadSpec items for this option.
+  ThreadSpec *GetThreadSpec();
+
+  void SetThreadID(lldb::tid_t thread_id);
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+  /// Get description for callback only.
+  void GetCallbackDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+  /// Returns true if the watchpoint option has a callback set.
+  bool HasCallback();
+
+  /// This is the default empty callback.
+  /// \return
+  ///     The thread id for which the watchpoint hit will stop,
+  ///     LLDB_INVALID_THREAD_ID for all threads.
+  static bool NullCallback(void *baton, StoppointCallbackContext *context,
+                           lldb::user_id_t watch_id);
+
+  struct CommandData {
+    CommandData() : user_source(), script_source(), stop_on_error(true) {}
+
+    ~CommandData() = default;
+
+    StringList user_source;
+    std::string script_source;
+    bool stop_on_error;
+  };
+
+  class CommandBaton : public TypedBaton<CommandData> {
+  public:
+    CommandBaton(std::unique_ptr<CommandData> Data)
+        : TypedBaton(std::move(Data)) {}
+
+    void GetDescription(Stream *s, lldb::DescriptionLevel level) const override;
+  };
+
+protected:
+  // Classes that inherit from WatchpointOptions can see and modify these
+
+private:
+  // For WatchpointOptions only
+  WatchpointHitCallback m_callback;  // This is the callback function pointer
+  lldb::BatonSP m_callback_baton_sp; // This is the client data for the callback
+  bool m_callback_is_synchronous;
+  std::unique_ptr<ThreadSpec>
+      m_thread_spec_up; // Thread for which this watchpoint will take
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_WatchpointOptions_h_
diff --git a/linux-x64/clang/include/lldb/Core/Address.h b/linux-x64/clang/include/lldb/Core/Address.h
new file mode 100644
index 0000000..080c00e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Address.h
@@ -0,0 +1,491 @@
+//===-- Address.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Address_h_
+#define liblldb_Address_h_
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class Block;
+class CompileUnit;
+class ExecutionContextScope;
+class Function;
+class SectionList;
+class Stream;
+class Symbol;
+class SymbolContext;
+class Target;
+struct LineEntry;
+
+/// \class Address Address.h "lldb/Core/Address.h"
+/// A section + offset based address class.
+///
+/// The Address class allows addresses to be relative to a section that can
+/// move during runtime due to images (executables, shared libraries, bundles,
+/// frameworks) being loaded at different addresses than the addresses found
+/// in the object file that represents them on disk. There are currently two
+/// types of addresses for a section:
+///     \li file addresses
+///     \li load addresses
+///
+/// File addresses represent the virtual addresses that are in the "on disk"
+/// object files. These virtual addresses are converted to be relative to
+/// unique sections scoped to the object file so that when/if the addresses
+/// slide when the images are loaded/unloaded in memory, we can easily track
+/// these changes without having to update every object (compile unit ranges,
+/// line tables, function address ranges, lexical block and inlined subroutine
+/// address ranges, global and static variables) each time an image is loaded
+/// or unloaded.
+///
+/// Load addresses represent the virtual addresses where each section ends up
+/// getting loaded at runtime. Before executing a program, it is common for
+/// all of the load addresses to be unresolved. When a DynamicLoader plug-in
+/// receives notification that shared libraries have been loaded/unloaded, the
+/// load addresses of the main executable and any images (shared libraries)
+/// will be  resolved/unresolved. When this happens, breakpoints that are in
+/// one of these sections can be set/cleared.
+class Address {
+public:
+  /// Dump styles allow the Address::Dump(Stream *,DumpStyle) const function
+  /// to display Address contents in a variety of ways.
+  enum DumpStyle {
+    DumpStyleInvalid,           ///< Invalid dump style
+    DumpStyleSectionNameOffset, ///< Display as the section name + offset.
+                                ///< \code
+    /// // address for printf in libSystem.B.dylib as a section name + offset
+    /// libSystem.B.dylib.__TEXT.__text + 0x0005cfdf \endcode
+    DumpStyleSectionPointerOffset, ///< Display as the section pointer + offset
+                                   ///(debug output).
+                                   ///< \code
+    /// // address for printf in libSystem.B.dylib as a section pointer +
+    /// offset (lldb::Section *)0x35cc50 + 0x000000000005cfdf \endcode
+    DumpStyleFileAddress, ///< Display as the file address (if any).
+                          ///< \code
+    /// // address for printf in libSystem.B.dylib as a file address
+    /// 0x000000000005dcff \endcode
+    DumpStyleModuleWithFileAddress, ///< Display as the file address with the
+                                    /// module name prepended (if any).
+                                    ///< \code
+    /// // address for printf in libSystem.B.dylib as a file address
+    /// libSystem.B.dylib[0x000000000005dcff] \endcode
+    DumpStyleLoadAddress, ///< Display as the load address (if resolved).
+                          ///< \code
+    /// // address for printf in libSystem.B.dylib as a load address
+    /// 0x00007fff8306bcff \endcode
+    DumpStyleResolvedDescription, ///< Display the details about what an address
+                                  /// resolves to. This can
+    ///< be anything from a symbol context summary (module, function/symbol,
+    ///< and file and line), to information about what the pointer points to
+    ///< if the address is in a section (section of pointers, c strings, etc).
+    DumpStyleResolvedDescriptionNoModule,
+    DumpStyleResolvedDescriptionNoFunctionArguments,
+    DumpStyleNoFunctionName, ///< Elide the function name; display an offset
+                             /// into the current function.
+                             ///< Used primarily in disassembly symbolication
+    DumpStyleDetailedSymbolContext, ///< Detailed symbol context information for
+                                    /// an address for all symbol
+                                    ///< context members.
+    DumpStyleResolvedPointerDescription ///< Dereference a pointer at the
+                                        /// current address and then lookup the
+    ///< dereferenced address using DumpStyleResolvedDescription
+  };
+
+  /// Default constructor.
+  ///
+  /// Initialize with a invalid section (NULL) and an invalid offset
+  /// (LLDB_INVALID_ADDRESS).
+  Address() : m_section_wp(), m_offset(LLDB_INVALID_ADDRESS) {}
+
+  /// Copy constructor
+  ///
+  /// Makes a copy of the another Address object \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     A const Address object reference to copy.
+  Address(const Address &rhs)
+      : m_section_wp(rhs.m_section_wp), m_offset(rhs.m_offset) {}
+
+  /// Construct with a section pointer and offset.
+  ///
+  /// Initialize the address with the supplied \a section and \a offset.
+  ///
+  /// \param[in] section
+  ///     A section pointer to a valid lldb::Section, or NULL if the
+  ///     address doesn't have a section or will get resolved later.
+  ///
+  /// \param[in] offset
+  ///     The offset in bytes into \a section.
+  Address(const lldb::SectionSP &section_sp, lldb::addr_t offset)
+      : m_section_wp(), // Don't init with section_sp in case section_sp is
+                        // invalid (the weak_ptr will throw)
+        m_offset(offset) {
+    if (section_sp)
+      m_section_wp = section_sp;
+  }
+
+  /// Construct with a virtual address and section list.
+  ///
+  /// Initialize and resolve the address with the supplied virtual address \a
+  /// file_addr.
+  ///
+  /// \param[in] file_addr
+  ///     A virtual file address.
+  ///
+  /// \param[in] section_list
+  ///     A list of sections, one of which may contain the \a file_addr.
+  Address(lldb::addr_t file_addr, const SectionList *section_list);
+
+  Address(lldb::addr_t abs_addr);
+
+/// Assignment operator.
+///
+/// Copies the address value from another Address object \a rhs into \a this
+/// object.
+///
+/// \param[in] rhs
+///     A const Address object reference to copy.
+///
+/// \return
+///     A const Address object reference to \a this.
+  const Address &operator=(const Address &rhs);
+
+  /// Clear the object's state.
+  ///
+  /// Sets the section to an invalid value (NULL) and an invalid offset
+  /// (LLDB_INVALID_ADDRESS).
+  void Clear() {
+    m_section_wp.reset();
+    m_offset = LLDB_INVALID_ADDRESS;
+  }
+
+  /// Compare two Address objects.
+  ///
+  /// \param[in] lhs
+  ///     The Left Hand Side const Address object reference.
+  ///
+  /// \param[in] rhs
+  ///     The Right Hand Side const Address object reference.
+  ///
+  /// \return
+  ///     \li -1 if lhs < rhs
+  ///     \li 0 if lhs == rhs
+  ///     \li 1 if lhs > rhs
+  static int CompareFileAddress(const Address &lhs, const Address &rhs);
+
+  static int CompareLoadAddress(const Address &lhs, const Address &rhs,
+                                Target *target);
+
+  static int CompareModulePointerAndOffset(const Address &lhs,
+                                           const Address &rhs);
+
+  // For use with std::map, std::multi_map
+  class ModulePointerAndOffsetLessThanFunctionObject {
+  public:
+    ModulePointerAndOffsetLessThanFunctionObject() = default;
+
+    bool operator()(const Address &a, const Address &b) const {
+      return Address::CompareModulePointerAndOffset(a, b) < 0;
+    }
+  };
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s. There are many ways to display a section offset based address, and
+  /// \a style lets the user choose.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] style
+  ///     The display style for the address.
+  ///
+  /// \param[in] fallback_style
+  ///     The display style for the address.
+  ///
+  /// \return
+  ///     Returns \b true if the address was able to be displayed.
+  ///     File and load addresses may be unresolved and it may not be
+  ///     possible to display a valid value, \b false will be returned
+  ///     in such cases.
+  ///
+  /// \see Address::DumpStyle
+  bool Dump(Stream *s, ExecutionContextScope *exe_scope, DumpStyle style,
+            DumpStyle fallback_style = DumpStyleInvalid,
+            uint32_t addr_byte_size = UINT32_MAX) const;
+
+  AddressClass GetAddressClass() const;
+
+  /// Get the file address.
+  ///
+  /// If an address comes from a file on disk that has section relative
+  /// addresses, then it has a virtual address that is relative to unique
+  /// section in the object file.
+  ///
+  /// \return
+  ///     The valid file virtual address, or LLDB_INVALID_ADDRESS if
+  ///     the address doesn't have a file virtual address (image is
+  ///     from memory only with no representation on disk).
+  lldb::addr_t GetFileAddress() const;
+
+  /// Get the load address.
+  ///
+  /// If an address comes from a file on disk that has section relative
+  /// addresses, then it has a virtual address that is relative to unique
+  /// section in the object file. Sections get resolved at runtime by
+  /// DynamicLoader plug-ins as images (executables and shared libraries) get
+  /// loaded/unloaded. If a section is loaded, then the load address can be
+  /// resolved.
+  ///
+  /// \return
+  ///     The valid load virtual address, or LLDB_INVALID_ADDRESS if
+  ///     the address is currently not loaded.
+  lldb::addr_t GetLoadAddress(Target *target) const;
+
+  /// Get the load address as a callable code load address.
+  ///
+  /// This function will first resolve its address to a load address. Then, if
+  /// the address turns out to be in code address, return the load address
+  /// that would be required to call or return to. The address might have
+  /// extra bits set (bit zero will be set to Thumb functions for an ARM
+  /// target) that are required when changing the program counter to setting a
+  /// return address.
+  ///
+  /// \return
+  ///     The valid load virtual address, or LLDB_INVALID_ADDRESS if
+  ///     the address is currently not loaded.
+  lldb::addr_t GetCallableLoadAddress(Target *target,
+                                      bool is_indirect = false) const;
+
+  /// Get the load address as an opcode load address.
+  ///
+  /// This function will first resolve its address to a load address. Then, if
+  /// the address turns out to be in code address, return the load address for
+  /// an opcode. This address object might have extra bits set (bit zero will
+  /// be set to Thumb functions for an
+  /// ARM target) that are required for changing the program counter
+  /// and this function will remove any bits that are intended for these
+  /// special purposes. The result of this function can be used to safely
+  /// write a software breakpoint trap to memory.
+  ///
+  /// \return
+  ///     The valid load virtual address with extra callable bits
+  ///     removed, or LLDB_INVALID_ADDRESS if the address is currently
+  ///     not loaded.
+  lldb::addr_t GetOpcodeLoadAddress(
+      Target *target,
+      AddressClass addr_class = AddressClass::eInvalid) const;
+
+  /// Get the section relative offset value.
+  ///
+  /// \return
+  ///     The current offset, or LLDB_INVALID_ADDRESS if this address
+  ///     doesn't contain a valid offset.
+  lldb::addr_t GetOffset() const { return m_offset; }
+
+  /// Check if an address is section offset.
+  ///
+  /// When converting a virtual file or load address into a section offset
+  /// based address, we often need to know if, given a section list, if the
+  /// address was able to be converted to section offset. This function
+  /// returns true if the current value contained in this object is section
+  /// offset based.
+  ///
+  /// \return
+  ///     Returns \b true if the address has a valid section and
+  ///     offset, \b false otherwise.
+  bool IsSectionOffset() const {
+    return IsValid() && (GetSection().get() != nullptr);
+  }
+
+  /// Check if the object state is valid.
+  ///
+  /// A valid Address object contains either a section pointer and
+  /// offset (for section offset based addresses), or just a valid offset
+  /// (for absolute addresses that have no section).
+  ///
+  /// \return
+  ///     Returns \b true if the offset is valid, \b false
+  ///     otherwise.
+  bool IsValid() const { return m_offset != LLDB_INVALID_ADDRESS; }
+
+  /// Get the memory cost of this object.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  size_t MemorySize() const;
+
+  /// Resolve a file virtual address using a section list.
+  ///
+  /// Given a list of sections, attempt to resolve \a addr as an offset into
+  /// one of the file sections.
+  ///
+  /// \return
+  ///     Returns \b true if \a addr was able to be resolved, \b false
+  ///     otherwise.
+  bool ResolveAddressUsingFileSections(lldb::addr_t addr,
+                                       const SectionList *sections);
+
+  /// Set the address to represent \a load_addr.
+  ///
+  /// The address will attempt to find a loaded section within \a target that
+  /// contains \a load_addr. If successful, this address object will have a
+  /// valid section and offset. Else this address object will have no section
+  /// (NULL) and the offset will be \a load_addr.
+  ///
+  /// \param[in] load_addr
+  ///     A load address from a current process.
+  ///
+  /// \param[in] target
+  ///     The target to use when trying resolve the address into
+  ///     a section + offset. The Target's SectionLoadList object
+  ///     is used to resolve the address.
+  ///
+  /// \param[in] allow_section_end
+  ///     If true, treat an address pointing to the end of the module as
+  ///     belonging to that module.
+  ///
+  /// \return
+  ///     Returns \b true if the load address was resolved to be
+  ///     section/offset, \b false otherwise. It is often ok for an
+  ///     address to not resolve to a section in a module, this often
+  ///     happens for JIT'ed code, or any load addresses on the stack
+  ///     or heap.
+  bool SetLoadAddress(lldb::addr_t load_addr, Target *target,
+                      bool allow_section_end = false);
+
+  bool SetOpcodeLoadAddress(
+      lldb::addr_t load_addr, Target *target,
+      AddressClass addr_class = AddressClass::eInvalid,
+      bool allow_section_end = false);
+
+  bool SetCallableLoadAddress(lldb::addr_t load_addr, Target *target);
+
+  /// Get accessor for the module for this address.
+  ///
+  /// \return
+  ///     Returns the Module pointer that this address is an offset
+  ///     in, or NULL if this address doesn't belong in a module, or
+  ///     isn't resolved yet.
+  lldb::ModuleSP GetModule() const;
+
+  /// Get const accessor for the section.
+  ///
+  /// \return
+  ///     Returns the const lldb::Section pointer that this address is an
+  ///     offset in, or NULL if this address is absolute.
+  lldb::SectionSP GetSection() const { return m_section_wp.lock(); }
+
+  /// Set accessor for the offset.
+  ///
+  /// \param[in] offset
+  ///     A new offset value for this object.
+  ///
+  /// \return
+  ///     Returns \b true if the offset changed, \b false otherwise.
+  bool SetOffset(lldb::addr_t offset) {
+    bool changed = m_offset != offset;
+    m_offset = offset;
+    return changed;
+  }
+
+  void SetRawAddress(lldb::addr_t addr) {
+    m_section_wp.reset();
+    m_offset = addr;
+  }
+
+  bool Slide(int64_t offset) {
+    if (m_offset != LLDB_INVALID_ADDRESS) {
+      m_offset += offset;
+      return true;
+    }
+    return false;
+  }
+
+  /// Set accessor for the section.
+  ///
+  /// \param[in] section
+  ///     A new lldb::Section pointer to use as the section base. Can
+  ///     be NULL for absolute addresses that are not relative to
+  ///     any section.
+  void SetSection(const lldb::SectionSP &section_sp) {
+    m_section_wp = section_sp;
+  }
+
+  void ClearSection() { m_section_wp.reset(); }
+
+  /// Reconstruct a symbol context from an address.
+  ///
+  /// This class doesn't inherit from SymbolContextScope because many address
+  /// objects have short lifespans. Address objects that are section offset
+  /// can reconstruct their symbol context by looking up the address in the
+  /// module found in the section.
+  ///
+  /// \see SymbolContextScope::CalculateSymbolContext(SymbolContext*)
+  uint32_t CalculateSymbolContext(SymbolContext *sc,
+                                  lldb::SymbolContextItem resolve_scope =
+                                      lldb::eSymbolContextEverything) const;
+
+  lldb::ModuleSP CalculateSymbolContextModule() const;
+
+  CompileUnit *CalculateSymbolContextCompileUnit() const;
+
+  Function *CalculateSymbolContextFunction() const;
+
+  Block *CalculateSymbolContextBlock() const;
+
+  Symbol *CalculateSymbolContextSymbol() const;
+
+  bool CalculateSymbolContextLineEntry(LineEntry &line_entry) const;
+
+  // Returns true if the section should be valid, but isn't because the shared
+  // pointer to the section can't be reconstructed from a weak pointer that
+  // contains a valid weak reference to a section. Returns false if the section
+  // weak pointer has no reference to a section, or if the section is still
+  // valid
+  bool SectionWasDeleted() const;
+
+protected:
+  // Member variables.
+  lldb::SectionWP m_section_wp; ///< The section for the address, can be NULL.
+  lldb::addr_t m_offset; ///< Offset into section if \a m_section_wp is valid...
+
+  // Returns true if the m_section_wp once had a reference to a valid section
+  // shared pointer, but no longer does. This can happen if we have an address
+  // from a module that gets unloaded and deleted. This function should only be
+  // called if GetSection() returns an empty shared pointer and you want to
+  // know if this address used to have a valid section.
+  bool SectionWasDeletedPrivate() const;
+};
+
+// NOTE: Be careful using this operator. It can correctly compare two
+// addresses from the same Module correctly. It can't compare two addresses
+// from different modules in any meaningful way, but it will compare the module
+// pointers.
+//
+// To sum things up:
+// - works great for addresses within the same module - it works for addresses
+// across multiple modules, but don't expect the
+//   address results to make much sense
+//
+// This basically lets Address objects be used in ordered collection classes.
+bool operator<(const Address &lhs, const Address &rhs);
+bool operator>(const Address &lhs, const Address &rhs);
+bool operator==(const Address &lhs, const Address &rhs);
+bool operator!=(const Address &lhs, const Address &rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_Address_h_
diff --git a/linux-x64/clang/include/lldb/Core/AddressRange.h b/linux-x64/clang/include/lldb/Core/AddressRange.h
new file mode 100644
index 0000000..4a019bf
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/AddressRange.h
@@ -0,0 +1,253 @@
+//===-- AddressRange.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_AddressRange_h_
+#define liblldb_AddressRange_h_
+
+#include "lldb/Core/Address.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+
+namespace lldb_private {
+class SectionList;
+class Stream;
+class Target;
+
+/// \class AddressRange AddressRange.h "lldb/Core/AddressRange.h"
+/// A section + offset based address range class.
+class AddressRange {
+public:
+  /// Default constructor.
+  ///
+  /// Initialize with a invalid section (NULL), an invalid offset
+  /// (LLDB_INVALID_ADDRESS), and zero byte size.
+  AddressRange();
+
+  /// Construct with a section pointer, offset, and byte_size.
+  ///
+  /// Initialize the address with the supplied \a section, \a offset and \a
+  /// byte_size.
+  ///
+  /// \param[in] section
+  ///     A section pointer to a valid lldb::Section, or NULL if the
+  ///     address doesn't have a section or will get resolved later.
+  ///
+  /// \param[in] offset
+  ///     The offset in bytes into \a section.
+  ///
+  /// \param[in] byte_size
+  ///     The size in bytes of the address range.
+  AddressRange(const lldb::SectionSP &section, lldb::addr_t offset,
+               lldb::addr_t byte_size);
+
+  /// Construct with a virtual address, section list and byte size.
+  ///
+  /// Initialize and resolve the address with the supplied virtual address \a
+  /// file_addr, and byte size \a byte_size.
+  ///
+  /// \param[in] file_addr
+  ///     A virtual address.
+  ///
+  /// \param[in] byte_size
+  ///     The size in bytes of the address range.
+  ///
+  /// \param[in] section_list
+  ///     A list of sections, one of which may contain the \a vaddr.
+  AddressRange(lldb::addr_t file_addr, lldb::addr_t byte_size,
+               const SectionList *section_list = nullptr);
+
+  /// Construct with a Address object address and byte size.
+  ///
+  /// Initialize by copying the section offset address in \a so_addr, and
+  /// setting the byte size to \a byte_size.
+  ///
+  /// \param[in] so_addr
+  ///     A section offset address object.
+  ///
+  /// \param[in] byte_size
+  ///     The size in bytes of the address range.
+  AddressRange(const Address &so_addr, lldb::addr_t byte_size);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual in case this class is subclassed.
+  ~AddressRange();
+
+  /// Clear the object's state.
+  ///
+  /// Sets the section to an invalid value (NULL), an invalid offset
+  /// (LLDB_INVALID_ADDRESS) and a zero byte size.
+  void Clear();
+
+  /// Check if a section offset address is contained in this range.
+  ///
+  /// \param[in] so_addr
+  ///     A section offset address object reference.
+  ///
+  /// \return
+  ///     Returns \b true if \a so_addr is contained in this range,
+  ///     \b false otherwise.
+  //    bool
+  //    Contains (const Address &so_addr) const;
+
+  /// Check if a section offset address is contained in this range.
+  ///
+  /// \param[in] so_addr_ptr
+  ///     A section offset address object pointer.
+  ///
+  /// \return
+  ///     Returns \b true if \a so_addr is contained in this range,
+  ///     \b false otherwise.
+  //    bool
+  //    Contains (const Address *so_addr_ptr) const;
+
+  /// Check if a section offset \a so_addr when represented as a file address
+  /// is contained within this object's file address range.
+  ///
+  /// \param[in] so_addr
+  ///     A section offset address object reference.
+  ///
+  /// \return
+  ///     Returns \b true if both \a this and \a so_addr have
+  ///     resolvable file address values and \a so_addr is contained
+  ///     in the address range, \b false otherwise.
+  bool ContainsFileAddress(const Address &so_addr) const;
+
+  /// Check if the resolved file address \a file_addr is contained within this
+  /// object's file address range.
+  ///
+  /// \param[in] so_addr
+  ///     A section offset address object reference.
+  ///
+  /// \return
+  ///     Returns \b true if both \a this has a resolvable file
+  ///     address value and \a so_addr is contained in the address
+  ///     range, \b false otherwise.
+  bool ContainsFileAddress(lldb::addr_t file_addr) const;
+
+  /// Check if a section offset \a so_addr when represented as a load address
+  /// is contained within this object's load address range.
+  ///
+  /// \param[in] so_addr
+  ///     A section offset address object reference.
+  ///
+  /// \return
+  ///     Returns \b true if both \a this and \a so_addr have
+  ///     resolvable load address values and \a so_addr is contained
+  ///     in the address range, \b false otherwise.
+  bool ContainsLoadAddress(const Address &so_addr, Target *target) const;
+
+  /// Check if the resolved load address \a load_addr is contained within this
+  /// object's load address range.
+  ///
+  /// \param[in] so_addr
+  ///     A section offset address object reference.
+  ///
+  /// \return
+  ///     Returns \b true if both \a this has a resolvable load
+  ///     address value and \a so_addr is contained in the address
+  ///     range, \b false otherwise.
+  bool ContainsLoadAddress(lldb::addr_t load_addr, Target *target) const;
+
+  //------------------------------------------------------------------
+  /// Extends this range with \b rhs_range if it overlaps this range on the
+  /// right side. The range overlaps on the right side if the base address
+  /// of \b rhs_range lies within this range or if it's contiguous on its
+  /// right side.
+  ///
+  /// @param[in] rhs_range
+  ///     The range to extend at the right side.
+  ///
+  /// @return
+  ///     Returns \b true if this range was extended, \b false otherwise.
+  //------------------------------------------------------------------
+  bool Extend(const AddressRange &rhs_range);
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s. There are many ways to display a section offset based address
+  /// range, and \a style lets the user choose how the base address gets
+  /// displayed.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] style
+  ///     The display style for the address.
+  ///
+  /// \return
+  ///     Returns \b true if the address was able to be displayed.
+  ///     File and load addresses may be unresolved and it may not be
+  ///     possible to display a valid value, \b false will be returned
+  ///     in such cases.
+  ///
+  /// \see Address::DumpStyle
+  bool
+  Dump(Stream *s, Target *target, Address::DumpStyle style,
+       Address::DumpStyle fallback_style = Address::DumpStyleInvalid) const;
+
+  /// Dump a debug description of this object to a Stream.
+  ///
+  /// Dump a debug description of the contents of this object to the supplied
+  /// stream \a s.
+  ///
+  /// The debug description contains verbose internal state such and pointer
+  /// values, reference counts, etc.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void DumpDebug(Stream *s) const;
+
+  /// Get accessor for the base address of the range.
+  ///
+  /// \return
+  ///     A reference to the base address object.
+  Address &GetBaseAddress() { return m_base_addr; }
+
+  /// Get const accessor for the base address of the range.
+  ///
+  /// \return
+  ///     A const reference to the base address object.
+  const Address &GetBaseAddress() const { return m_base_addr; }
+
+  /// Get accessor for the byte size of this range.
+  ///
+  /// \return
+  ///     The size in bytes of this address range.
+  lldb::addr_t GetByteSize() const { return m_byte_size; }
+
+  /// Get the memory cost of this object.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  size_t MemorySize() const {
+    // Noting special for the memory size of a single AddressRange object, it
+    // is just the size of itself.
+    return sizeof(AddressRange);
+  }
+
+  /// Set accessor for the byte size of this range.
+  ///
+  /// \param[in] byte_size
+  ///     The new size in bytes of this address range.
+  void SetByteSize(lldb::addr_t byte_size) { m_byte_size = byte_size; }
+
+protected:
+  // Member variables
+  Address m_base_addr;      ///< The section offset base address of this range.
+  lldb::addr_t m_byte_size; ///< The size in bytes of this address range.
+};
+
+// bool operator== (const AddressRange& lhs, const AddressRange& rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_AddressRange_h_
diff --git a/linux-x64/clang/include/lldb/Core/AddressResolver.h b/linux-x64/clang/include/lldb/Core/AddressResolver.h
new file mode 100644
index 0000000..cd95c7c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/AddressResolver.h
@@ -0,0 +1,63 @@
+//===-- AddressResolver.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_AddressResolver_h_
+#define liblldb_AddressResolver_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/lldb-defines.h"
+
+#include <stddef.h>
+#include <vector>
+
+namespace lldb_private {
+class ModuleList;
+class Stream;
+
+/// \class AddressResolver AddressResolver.h "lldb/Core/AddressResolver.h"
+/// This class works with SearchFilter to resolve function names and source
+/// file locations to their concrete addresses.
+
+/// General Outline:
+/// The AddressResolver is a Searcher.  In that protocol, the SearchFilter
+/// asks the question "At what depth of the symbol context descent do you want
+/// your callback to get called?" of the filter.  The resolver answers this
+/// question (in the GetDepth method) and provides the resolution callback.
+
+class AddressResolver : public Searcher {
+public:
+  enum MatchType { Exact, Regexp, Glob };
+
+  AddressResolver();
+
+  ~AddressResolver() override;
+
+  virtual void ResolveAddress(SearchFilter &filter);
+
+  virtual void ResolveAddressInModules(SearchFilter &filter,
+                                       ModuleList &modules);
+
+  void GetDescription(Stream *s) override = 0;
+
+  std::vector<AddressRange> &GetAddressRanges();
+
+  size_t GetNumberOfAddresses();
+
+  AddressRange &GetAddressRangeAtIndex(size_t idx);
+
+protected:
+  std::vector<AddressRange> m_address_ranges;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(AddressResolver);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_AddressResolver_h_
diff --git a/linux-x64/clang/include/lldb/Core/AddressResolverFileLine.h b/linux-x64/clang/include/lldb/Core/AddressResolverFileLine.h
new file mode 100644
index 0000000..b98e7d4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/AddressResolverFileLine.h
@@ -0,0 +1,56 @@
+//===-- AddressResolverFileLine.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_AddressResolverFileLine_h_
+#define liblldb_AddressResolverFileLine_h_
+
+#include "lldb/Core/AddressResolver.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-defines.h"
+
+#include <stdint.h>
+
+namespace lldb_private {
+class Address;
+class Stream;
+class SymbolContext;
+
+/// \class AddressResolverFileLine AddressResolverFileLine.h
+/// "lldb/Core/AddressResolverFileLine.h" This class finds address for source
+/// file and line.  Optionally, it will look for inlined instances of the file
+/// and line specification.
+
+class AddressResolverFileLine : public AddressResolver {
+public:
+  AddressResolverFileLine(const FileSpec &resolver, uint32_t line_no,
+                          bool check_inlines);
+
+  ~AddressResolverFileLine() override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+protected:
+  FileSpec m_file_spec;   // This is the file spec we are looking for.
+  uint32_t m_line_number; // This is the line number that we are looking for.
+  bool m_inlines; // This determines whether the resolver looks for inlined
+                  // functions or not.
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(AddressResolverFileLine);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_AddressResolverFileLine_h_
diff --git a/linux-x64/clang/include/lldb/Core/AddressResolverName.h b/linux-x64/clang/include/lldb/Core/AddressResolverName.h
new file mode 100644
index 0000000..ad14ef6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/AddressResolverName.h
@@ -0,0 +1,62 @@
+//===-- AddressResolverName.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_AddressResolverName_h_
+#define liblldb_AddressResolverName_h_
+
+#include "lldb/Core/AddressResolver.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/RegularExpression.h"
+#include "lldb/lldb-defines.h"
+
+namespace lldb_private {
+class Address;
+class Stream;
+class SymbolContext;
+
+/// \class AddressResolverName AddressResolverName.h
+/// "lldb/Core/AddressResolverName.h" This class finds addresses for a given
+/// function name, either by exact match or by regular expression.
+
+class AddressResolverName : public AddressResolver {
+public:
+  AddressResolverName(const char *func_name,
+                      AddressResolver::MatchType type = Exact);
+
+  // Creates a function breakpoint by regular expression.  Takes over control
+  // of the lifespan of func_regex.
+  AddressResolverName(RegularExpression &func_regex);
+
+  AddressResolverName(const char *class_name, const char *method,
+                      AddressResolver::MatchType type);
+
+  ~AddressResolverName() override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+protected:
+  ConstString m_func_name;
+  ConstString m_class_name; // FIXME: Not used yet.  The idea would be to stop
+                            // on methods of this class.
+  RegularExpression m_regex;
+  AddressResolver::MatchType m_match_type;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(AddressResolverName);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_AddressResolverName_h_
diff --git a/linux-x64/clang/include/lldb/Core/Architecture.h b/linux-x64/clang/include/lldb/Core/Architecture.h
new file mode 100644
index 0000000..d8dbbb4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Architecture.h
@@ -0,0 +1,111 @@
+//===-- Architecture.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_CORE_ARCHITECTURE_H
+#define LLDB_CORE_ARCHITECTURE_H
+
+#include "lldb/Core/PluginInterface.h"
+
+namespace lldb_private {
+
+class Architecture : public PluginInterface {
+public:
+  Architecture() = default;
+  ~Architecture() override = default;
+
+  /// This is currently intended to handle cases where a
+  /// program stops at an instruction that won't get executed and it
+  /// allows the stop reason, like "breakpoint hit", to be replaced
+  /// with a different stop reason like "no stop reason".
+  ///
+  /// This is specifically used for ARM in Thumb code when we stop in
+  /// an IT instruction (if/then/else) where the instruction won't get
+  /// executed and therefore it wouldn't be correct to show the program
+  /// stopped at the current PC. The code is generic and applies to all
+  /// ARM CPUs.
+  virtual void OverrideStopInfo(Thread &thread) const = 0;
+
+  /// This method is used to get the number of bytes that should be
+  /// skipped, from function start address, to reach the first
+  /// instruction after the prologue. If overrode, it must return
+  /// non-zero only if the current address matches one of the known
+  /// function entry points.
+  ///
+  /// This method is called only if the standard platform-independent
+  /// code fails to get the number of bytes to skip, giving the plugin
+  /// a chance to try to find the missing info.
+  ///
+  /// This is specifically used for PPC64, where functions may have
+  /// more than one entry point, global and local, so both should
+  /// be compared with current address, in order to find out the
+  /// number of bytes that should be skipped, in case we are stopped
+  /// at either function entry point.
+  virtual size_t GetBytesToSkip(Symbol &func, const Address &curr_addr) const {
+    return 0;
+  }
+
+  /// Adjust function breakpoint address, if needed. In some cases,
+  /// the function start address is not the right place to set the
+  /// breakpoint, specially in functions with multiple entry points.
+  ///
+  /// This is specifically used for PPC64, for functions that have
+  /// both a global and a local entry point. In this case, the
+  /// breakpoint is adjusted to the first function address reached
+  /// by both entry points.
+  virtual void AdjustBreakpointAddress(const Symbol &func,
+                                       Address &addr) const {}
+
+
+  /// Get \a load_addr as a callable code load address for this target
+  ///
+  /// Take \a load_addr and potentially add any address bits that are
+  /// needed to make the address callable. For ARM this can set bit
+  /// zero (if it already isn't) if \a load_addr is a thumb function.
+  /// If \a addr_class is set to AddressClass::eInvalid, then the address
+  /// adjustment will always happen. If it is set to an address class
+  /// that doesn't have code in it, LLDB_INVALID_ADDRESS will be
+  /// returned.
+  virtual lldb::addr_t GetCallableLoadAddress(
+      lldb::addr_t addr, AddressClass addr_class = AddressClass::eInvalid) const {
+    return addr;
+  }
+
+  /// Get \a load_addr as an opcode for this target.
+  ///
+  /// Take \a load_addr and potentially strip any address bits that are
+  /// needed to make the address point to an opcode. For ARM this can
+  /// clear bit zero (if it already isn't) if \a load_addr is a
+  /// thumb function and load_addr is in code.
+  /// If \a addr_class is set to AddressClass::eInvalid, then the address
+  /// adjustment will always happen. If it is set to an address class
+  /// that doesn't have code in it, LLDB_INVALID_ADDRESS will be
+  /// returned.
+
+  virtual lldb::addr_t GetOpcodeLoadAddress(
+      lldb::addr_t addr, AddressClass addr_class = AddressClass::eInvalid) const {
+    return addr;
+  }
+
+  // Get load_addr as breakable load address for this target. Take a addr and
+  // check if for any reason there is a better address than this to put a
+  // breakpoint on. If there is then return that address. For MIPS, if
+  // instruction at addr is a delay slot instruction then this method will find
+  // the address of its previous instruction and return that address.
+  virtual lldb::addr_t GetBreakableLoadAddress(lldb::addr_t addr,
+                                               Target &target) const {
+    return addr;
+  }
+
+private:
+  Architecture(const Architecture &) = delete;
+  void operator=(const Architecture &) = delete;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_CORE_ARCHITECTURE_H
diff --git a/linux-x64/clang/include/lldb/Core/ClangForward.h b/linux-x64/clang/include/lldb/Core/ClangForward.h
new file mode 100644
index 0000000..6b24b47
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ClangForward.h
@@ -0,0 +1,134 @@
+//===-- ClangForward.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ClangForward_h_
+#define liblldb_ClangForward_h_
+
+
+#if defined(__cplusplus)
+
+namespace clang {
+namespace Builtin {
+class Context;
+}
+
+class Action;
+class ASTConsumer;
+class ASTContext;
+class ASTRecordLayout;
+class AddrLabelExpr;
+class AnalyzerOptions;
+class BinaryOperator;
+class ClassTemplateDecl;
+class ClassTemplateSpecializationDecl;
+class CodeGenOptions;
+class CodeGenerator;
+class CompilerInstance;
+class CompoundStmt;
+class CXXBaseSpecifier;
+class CXXBoolLiteralExpr;
+class CXXFunctionalCastExpr;
+class CXXMethodDecl;
+class CXXNamedCastExpr;
+class CXXRecordDecl;
+class CXXThisExpr;
+class CharacterLiteral;
+class CompoundAssignOperator;
+class Decl;
+class DeclarationName;
+class DeclaratorDecl;
+class DeclContext;
+class DeclRefExpr;
+class DeclStmt;
+class DependencyOutputOptions;
+class Diagnostic;
+class DiagnosticConsumer;
+class DiagnosticsEngine;
+class DiagnosticOptions;
+class EnumDecl;
+class EnumConstantDecl;
+class Expr;
+class ExternalASTSource;
+class ExtVectorElementExpr;
+class FieldDecl;
+class FileManager;
+class FileSystemOptions;
+class FloatingLiteral;
+class FrontendOptions;
+class FunctionDecl;
+class FunctionTemplateDecl;
+class FunctionTemplateSpecializationInfo;
+class GotoStmt;
+class HeaderSearchOptions;
+class IdentifierInfo;
+class IdentifierTable;
+class IntegerLiteral;
+class LabelStmt;
+class LangOptions;
+class MacroDirective;
+class MemberExpr;
+class Module;
+class NamedDecl;
+class NamespaceDecl;
+class NonTypeTemplateParmDecl;
+class ObjCEncodeExpr;
+class ObjCImplicitSetterGetterRefExpr;
+class ObjCInterfaceDecl;
+class ObjCIvarDecl;
+class ObjCIvarRefExpr;
+class ObjCMessageExpr;
+class ObjCMethodDecl;
+class ObjCPropertyRefExpr;
+class ObjCProtocolDecl;
+class ObjCProtocolExpr;
+class ObjCSelectorExpr;
+class ObjCSuperExpr;
+class ParenExpr;
+class ParmVarDecl;
+class PredefinedExpr;
+class PreprocessorOptions;
+class PreprocessorOutputOptions;
+class QualType;
+class QualifiedNameType;
+class RecordDecl;
+class SelectorTable;
+class SizeOfAlignOfExpr;
+class SourceLocation;
+class SourceManager;
+class Stmt;
+class StmtIteratorBase;
+class StringLiteral;
+class TagDecl;
+class TargetInfo;
+class TargetOptions;
+class TemplateArgument;
+class TemplateDecl;
+class TemplateParameterList;
+class TemplateTemplateParmDecl;
+class TemplateTypeParmDecl;
+class TextDiagnosticBuffer;
+class TranslationUnitDecl;
+class Type;
+class TypeDecl;
+class TypedefDecl;
+class TypesCompatibleExpr;
+class UnaryOperator;
+class ValueDecl;
+class VarDecl;
+struct PrintingPolicy;
+}
+
+namespace llvm {
+class APInt;
+class APSInt;
+class LLVMContext;
+class ExecutionEngine;
+}
+
+#endif // #if defined(__cplusplus)
+#endif // liblldb_ClangForward_h_
diff --git a/linux-x64/clang/include/lldb/Core/Communication.h b/linux-x64/clang/include/lldb/Core/Communication.h
new file mode 100644
index 0000000..901b8fd
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Communication.h
@@ -0,0 +1,367 @@
+//===-- Communication.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Communication_h_
+#define liblldb_Communication_h_
+
+#include "lldb/Host/HostThread.h"
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/Timeout.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include <atomic>
+#include <mutex>
+#include <ratio>
+#include <string>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class Connection;
+class ConstString;
+class Status;
+
+/// \class Communication Communication.h "lldb/Core/Communication.h" An
+/// abstract communications class.
+///
+/// Communication is an class that handles data communication between two data
+/// sources. It uses a Connection class to do the real communication. This
+/// approach has a couple of advantages: it allows a single instance of this
+/// class to be used even though its connection can change. Connections could
+/// negotiate for different connections based on abilities like starting with
+/// Bluetooth and negotiating up to WiFi if available. It also allows this
+/// class to be subclassed by any interfaces that don't want to give bytes but
+/// want to validate and give out packets. This can be done by overriding:
+///
+/// AppendBytesToCache (const uint8_t *src, size_t src_len, bool broadcast);
+///
+/// Communication inherits from Broadcaster which means it can be used in
+/// conjunction with Listener to wait for multiple broadcaster objects and
+/// multiple events from each of those objects. Communication defines a set of
+/// pre-defined event bits (see enumerations definitions that start with
+/// "eBroadcastBit" below).
+///
+/// There are two modes in which communications can occur:
+///     \li single-threaded
+///     \li multi-threaded
+///
+/// In single-threaded mode, all reads and writes happen synchronously on the
+/// calling thread.
+///
+/// In multi-threaded mode, a read thread is spawned that continually reads
+/// data and caches any received bytes. To start the read thread clients call:
+///
+///     bool Communication::StartReadThread (Status *);
+///
+/// If true is returned a read thread has been spawned that will continually
+/// execute a call to the pure virtual DoRead function:
+///
+///     size_t Communication::ReadFromConnection (void *, size_t, uint32_t);
+///
+/// When bytes are received the data gets cached in \a m_bytes and this class
+/// will broadcast a \b eBroadcastBitReadThreadGotBytes event. Clients that
+/// want packet based communication should override AppendBytesToCache. The
+/// subclasses can choose to call the built in AppendBytesToCache with the \a
+/// broadcast parameter set to false. This will cause the \b
+/// eBroadcastBitReadThreadGotBytes event not get broadcast, and then the
+/// subclass can post a \b eBroadcastBitPacketAvailable event when a full
+/// packet of data has been received.
+///
+/// If the connection is disconnected a \b eBroadcastBitDisconnected event
+/// gets broadcast. If the read thread exits a \b
+/// eBroadcastBitReadThreadDidExit event will be broadcast. Clients can also
+/// post a \b eBroadcastBitReadThreadShouldExit event to this object which
+/// will cause the read thread to exit.
+class Communication : public Broadcaster {
+public:
+  FLAGS_ANONYMOUS_ENUM(){
+      eBroadcastBitDisconnected =
+          (1u << 0), ///< Sent when the communications connection is lost.
+      eBroadcastBitReadThreadGotBytes =
+          (1u << 1), ///< Sent by the read thread when bytes become available.
+      eBroadcastBitReadThreadDidExit =
+          (1u
+           << 2), ///< Sent by the read thread when it exits to inform clients.
+      eBroadcastBitReadThreadShouldExit =
+          (1u << 3), ///< Sent by clients that need to cancel the read thread.
+      eBroadcastBitPacketAvailable =
+          (1u << 4), ///< Sent when data received makes a complete packet.
+      eBroadcastBitNoMorePendingInput = (1u << 5), ///< Sent by the read thread
+                                                   ///to indicate all pending
+                                                   ///input has been processed.
+      kLoUserBroadcastBit =
+          (1u << 16), ///< Subclasses can used bits 31:16 for any needed events.
+      kHiUserBroadcastBit = (1u << 31),
+      eAllEventBits = 0xffffffff};
+
+  typedef void (*ReadThreadBytesReceived)(void *baton, const void *src,
+                                          size_t src_len);
+
+  /// Construct the Communication object with the specified name for the
+  /// Broadcaster that this object inherits from.
+  ///
+  /// \param[in] broadcaster_name
+  ///     The name of the broadcaster object.  This name should be as
+  ///     complete as possible to uniquely identify this object. The
+  ///     broadcaster name can be updated after the connect function
+  ///     is called.
+  Communication(const char *broadcaster_name);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class gets subclassed.
+  ~Communication() override;
+
+  void Clear();
+
+  /// Connect using the current connection by passing \a url to its connect
+  /// function. string.
+  ///
+  /// \param[in] url
+  ///     A string that contains all information needed by the
+  ///     subclass to connect to another client.
+  ///
+  /// \return
+  ///     \b True if the connect succeeded, \b false otherwise. The
+  ///     internal error object should be filled in with an
+  ///     appropriate value based on the result of this function.
+  ///
+  /// \see Status& Communication::GetError ();
+  /// \see bool Connection::Connect (const char *url);
+  lldb::ConnectionStatus Connect(const char *url, Status *error_ptr);
+
+  /// Disconnect the communications connection if one is currently connected.
+  ///
+  /// \return
+  ///     \b True if the disconnect succeeded, \b false otherwise. The
+  ///     internal error object should be filled in with an
+  ///     appropriate value based on the result of this function.
+  ///
+  /// \see Status& Communication::GetError ();
+  /// \see bool Connection::Disconnect ();
+  lldb::ConnectionStatus Disconnect(Status *error_ptr = nullptr);
+
+  /// Check if the connection is valid.
+  ///
+  /// \return
+  ///     \b True if this object is currently connected, \b false
+  ///     otherwise.
+  bool IsConnected() const;
+
+  bool HasConnection() const;
+
+  lldb_private::Connection *GetConnection() { return m_connection_sp.get(); }
+
+  /// Read bytes from the current connection.
+  ///
+  /// If no read thread is running, this function call the connection's
+  /// Connection::Read(...) function to get any available.
+  ///
+  /// If a read thread has been started, this function will check for any
+  /// cached bytes that have already been read and return any currently
+  /// available bytes. If no bytes are cached, it will wait for the bytes to
+  /// become available by listening for the \a eBroadcastBitReadThreadGotBytes
+  /// event. If this function consumes all of the bytes in the cache, it will
+  /// reset the \a eBroadcastBitReadThreadGotBytes event bit.
+  ///
+  /// \param[in] dst
+  ///     A destination buffer that must be at least \a dst_len bytes
+  ///     long.
+  ///
+  /// \param[in] dst_len
+  ///     The number of bytes to attempt to read, and also the max
+  ///     number of bytes that can be placed into \a dst.
+  ///
+  /// \param[in] timeout
+  ///     A timeout value or llvm::None for no timeout.
+  ///
+  /// \return
+  ///     The number of bytes actually read.
+  ///
+  /// \see size_t Connection::Read (void *, size_t);
+  size_t Read(void *dst, size_t dst_len, const Timeout<std::micro> &timeout,
+              lldb::ConnectionStatus &status, Status *error_ptr);
+
+  /// The actual write function that attempts to write to the communications
+  /// protocol.
+  ///
+  /// Subclasses must override this function.
+  ///
+  /// \param[in] src
+  ///     A source buffer that must be at least \a src_len bytes
+  ///     long.
+  ///
+  /// \param[in] src_len
+  ///     The number of bytes to attempt to write, and also the
+  ///     number of bytes are currently available in \a src.
+  ///
+  /// \return
+  ///     The number of bytes actually Written.
+  size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status,
+               Status *error_ptr);
+
+  /// Sets the connection that it to be used by this class.
+  ///
+  /// By making a communication class that uses different connections it
+  /// allows a single communication interface to negotiate and change its
+  /// connection without any interruption to the client. It also allows the
+  /// Communication class to be subclassed for packet based communication.
+  ///
+  /// \param[in] connection
+  ///     A connection that this class will own and destroy.
+  ///
+  /// \see
+  ///     class Connection
+  void SetConnection(Connection *connection);
+
+  /// Starts a read thread whose sole purpose it to read bytes from the
+  /// current connection. This function will call connection's read function:
+  ///
+  /// size_t Connection::Read (void *, size_t);
+  ///
+  /// When bytes are read and cached, this function will call:
+  ///
+  /// Communication::AppendBytesToCache (const uint8_t * bytes, size_t len,
+  /// bool
+  /// broadcast);
+  ///
+  /// Subclasses should override this function if they wish to override the
+  /// default action of caching the bytes and broadcasting a \b
+  /// eBroadcastBitReadThreadGotBytes event.
+  ///
+  /// \return
+  ///     \b True if the read thread was successfully started, \b
+  ///     false otherwise.
+  ///
+  /// \see size_t Connection::Read (void *, size_t);
+  /// \see void Communication::AppendBytesToCache (const uint8_t * bytes,
+  ///                                              size_t len, bool broadcast);
+  virtual bool StartReadThread(Status *error_ptr = nullptr);
+
+  /// Stops the read thread by cancelling it.
+  ///
+  /// \return
+  ///     \b True if the read thread was successfully canceled, \b
+  ///     false otherwise.
+  virtual bool StopReadThread(Status *error_ptr = nullptr);
+
+  virtual bool JoinReadThread(Status *error_ptr = nullptr);
+  /// Checks if there is a currently running read thread.
+  ///
+  /// \return
+  ///     \b True if the read thread is running, \b false otherwise.
+  bool ReadThreadIsRunning();
+
+  /// The static read thread function. This function will call the "DoRead"
+  /// function continuously and wait for data to become available. When data
+  /// is received it will append the available data to the internal cache and
+  /// broadcast a \b eBroadcastBitReadThreadGotBytes event.
+  ///
+  /// \param[in] comm_ptr
+  ///     A pointer to an instance of this class.
+  ///
+  /// \return
+  ///     \b NULL.
+  ///
+  /// \see void Communication::ReadThreadGotBytes (const uint8_t *, size_t);
+  static lldb::thread_result_t ReadThread(lldb::thread_arg_t comm_ptr);
+
+  void SetReadThreadBytesReceivedCallback(ReadThreadBytesReceived callback,
+                                          void *callback_baton);
+
+  /// Wait for the read thread to process all outstanding data.
+  ///
+  /// After this function returns, the read thread has processed all data that
+  /// has been waiting in the Connection queue.
+  ///
+  void SynchronizeWithReadThread();
+
+  static const char *ConnectionStatusAsCString(lldb::ConnectionStatus status);
+
+  bool GetCloseOnEOF() const { return m_close_on_eof; }
+
+  void SetCloseOnEOF(bool b) { m_close_on_eof = b; }
+
+  static ConstString &GetStaticBroadcasterClass();
+
+  ConstString &GetBroadcasterClass() const override {
+    return GetStaticBroadcasterClass();
+  }
+
+protected:
+  lldb::ConnectionSP m_connection_sp; ///< The connection that is current in use
+                                      ///by this communications class.
+  HostThread m_read_thread; ///< The read thread handle in case we need to
+                            ///cancel the thread.
+  std::atomic<bool> m_read_thread_enabled;
+  std::atomic<bool> m_read_thread_did_exit;
+  std::string
+      m_bytes; ///< A buffer to cache bytes read in the ReadThread function.
+  std::recursive_mutex m_bytes_mutex; ///< A mutex to protect multi-threaded
+                                      ///access to the cached bytes.
+  std::mutex
+      m_write_mutex; ///< Don't let multiple threads write at the same time...
+  std::mutex m_synchronize_mutex;
+  ReadThreadBytesReceived m_callback;
+  void *m_callback_baton;
+  bool m_close_on_eof;
+
+  size_t ReadFromConnection(void *dst, size_t dst_len,
+                            const Timeout<std::micro> &timeout,
+                            lldb::ConnectionStatus &status, Status *error_ptr);
+
+  /// Append new bytes that get read from the read thread into the internal
+  /// object byte cache. This will cause a \b eBroadcastBitReadThreadGotBytes
+  /// event to be broadcast if \a broadcast is true.
+  ///
+  /// Subclasses can override this function in order to inspect the received
+  /// data and check if a packet is available.
+  ///
+  /// Subclasses can also still call this function from the overridden method
+  /// to allow the caching to correctly happen and suppress the broadcasting
+  /// of the \a eBroadcastBitReadThreadGotBytes event by setting \a broadcast
+  /// to false.
+  ///
+  /// \param[in] src
+  ///     A source buffer that must be at least \a src_len bytes
+  ///     long.
+  ///
+  /// \param[in] src_len
+  ///     The number of bytes to append to the cache.
+  virtual void AppendBytesToCache(const uint8_t *src, size_t src_len,
+                                  bool broadcast,
+                                  lldb::ConnectionStatus status);
+
+  /// Get any available bytes from our data cache. If this call empties the
+  /// data cache, the \b eBroadcastBitReadThreadGotBytes event will be reset
+  /// to signify no more bytes are available.
+  ///
+  /// \param[in] dst
+  ///     A destination buffer that must be at least \a dst_len bytes
+  ///     long.
+  ///
+  /// \param[in] dst_len
+  ///     The number of bytes to attempt to read from the cache,
+  ///     and also the max number of bytes that can be placed into
+  ///     \a dst.
+  ///
+  /// \return
+  ///     The number of bytes extracted from the data cache.
+  size_t GetCachedBytes(void *dst, size_t dst_len);
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(Communication);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Communication_h_
diff --git a/linux-x64/clang/include/lldb/Core/Debugger.h b/linux-x64/clang/include/lldb/Core/Debugger.h
new file mode 100644
index 0000000..8e60871
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Debugger.h
@@ -0,0 +1,418 @@
+//===-- Debugger.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Debugger_h_
+#define liblldb_Debugger_h_
+
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+#include "lldb/Core/FormatEntity.h"
+#include "lldb/Core/IOHandler.h"
+#include "lldb/Core/SourceManager.h"
+#include "lldb/Core/UserSettingsController.h"
+#include "lldb/Host/HostThread.h"
+#include "lldb/Host/Terminal.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Target/Platform.h"
+#include "lldb/Target/TargetList.h"
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-private-types.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/DynamicLibrary.h"
+#include "llvm/Support/Threading.h"
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdio.h>
+
+namespace llvm {
+class raw_ostream;
+}
+
+namespace lldb_private {
+class Address;
+class CommandInterpreter;
+class Process;
+class Stream;
+class SymbolContext;
+class Target;
+
+namespace repro {
+class DataRecorder;
+}
+
+/// \class Debugger Debugger.h "lldb/Core/Debugger.h"
+/// A class to manage flag bits.
+///
+/// Provides a global root objects for the debugger core.
+
+class Debugger : public std::enable_shared_from_this<Debugger>,
+                 public UserID,
+                 public Properties {
+  friend class SourceManager; // For GetSourceFileCache.
+
+public:
+  ~Debugger() override;
+
+  static lldb::DebuggerSP
+  CreateInstance(lldb::LogOutputCallback log_callback = nullptr,
+                 void *baton = nullptr);
+
+  static lldb::TargetSP FindTargetWithProcessID(lldb::pid_t pid);
+
+  static lldb::TargetSP FindTargetWithProcess(Process *process);
+
+  static void Initialize(LoadPluginCallbackType load_plugin_callback);
+
+  static void Terminate();
+
+  static void SettingsInitialize();
+
+  static void SettingsTerminate();
+
+  static void Destroy(lldb::DebuggerSP &debugger_sp);
+
+  static lldb::DebuggerSP FindDebuggerWithID(lldb::user_id_t id);
+
+  static lldb::DebuggerSP
+  FindDebuggerWithInstanceName(ConstString instance_name);
+
+  static size_t GetNumDebuggers();
+
+  static lldb::DebuggerSP GetDebuggerAtIndex(size_t index);
+
+  static bool FormatDisassemblerAddress(const FormatEntity::Entry *format,
+                                        const SymbolContext *sc,
+                                        const SymbolContext *prev_sc,
+                                        const ExecutionContext *exe_ctx,
+                                        const Address *addr, Stream &s);
+
+  void Clear();
+
+  bool GetAsyncExecution();
+
+  void SetAsyncExecution(bool async);
+
+  lldb::StreamFileSP GetInputFile() { return m_input_file_sp; }
+
+  lldb::StreamFileSP GetOutputFile() { return m_output_file_sp; }
+
+  lldb::StreamFileSP GetErrorFile() { return m_error_file_sp; }
+
+  repro::DataRecorder *GetInputRecorder();
+
+  void SetInputFileHandle(FILE *fh, bool tranfer_ownership,
+                          repro::DataRecorder *recorder = nullptr);
+
+  void SetOutputFileHandle(FILE *fh, bool tranfer_ownership);
+
+  void SetErrorFileHandle(FILE *fh, bool tranfer_ownership);
+
+  void SaveInputTerminalState();
+
+  void RestoreInputTerminalState();
+
+  lldb::StreamSP GetAsyncOutputStream();
+
+  lldb::StreamSP GetAsyncErrorStream();
+
+  CommandInterpreter &GetCommandInterpreter() {
+    assert(m_command_interpreter_up.get());
+    return *m_command_interpreter_up;
+  }
+
+  ScriptInterpreter *GetScriptInterpreter(bool can_create = true);
+
+  lldb::ListenerSP GetListener() { return m_listener_sp; }
+
+  // This returns the Debugger's scratch source manager.  It won't be able to
+  // look up files in debug information, but it can look up files by absolute
+  // path and display them to you. To get the target's source manager, call
+  // GetSourceManager on the target instead.
+  SourceManager &GetSourceManager();
+
+  lldb::TargetSP GetSelectedTarget() {
+    return m_target_list.GetSelectedTarget();
+  }
+
+  ExecutionContext GetSelectedExecutionContext();
+  /// Get accessor for the target list.
+  ///
+  /// The target list is part of the global debugger object. This the single
+  /// debugger shared instance to control where targets get created and to
+  /// allow for tracking and searching for targets based on certain criteria.
+  ///
+  /// \return
+  ///     A global shared target list.
+  TargetList &GetTargetList() { return m_target_list; }
+
+  PlatformList &GetPlatformList() { return m_platform_list; }
+
+  void DispatchInputInterrupt();
+
+  void DispatchInputEndOfFile();
+
+  // If any of the streams are not set, set them to the in/out/err stream of
+  // the top most input reader to ensure they at least have something
+  void AdoptTopIOHandlerFilesIfInvalid(lldb::StreamFileSP &in,
+                                       lldb::StreamFileSP &out,
+                                       lldb::StreamFileSP &err);
+
+  void PushIOHandler(const lldb::IOHandlerSP &reader_sp,
+                     bool cancel_top_handler = true);
+
+  bool PopIOHandler(const lldb::IOHandlerSP &reader_sp);
+
+  // Synchronously run an input reader until it is done
+  void RunIOHandler(const lldb::IOHandlerSP &reader_sp);
+
+  bool IsTopIOHandler(const lldb::IOHandlerSP &reader_sp);
+
+  bool CheckTopIOHandlerTypes(IOHandler::Type top_type,
+                              IOHandler::Type second_top_type);
+
+  void PrintAsync(const char *s, size_t len, bool is_stdout);
+
+  ConstString GetTopIOHandlerControlSequence(char ch);
+
+  const char *GetIOHandlerCommandPrefix();
+
+  const char *GetIOHandlerHelpPrologue();
+
+  void ClearIOHandlers();
+
+  bool GetCloseInputOnEOF() const;
+
+  void SetCloseInputOnEOF(bool b);
+
+  bool EnableLog(llvm::StringRef channel,
+                 llvm::ArrayRef<const char *> categories,
+                 llvm::StringRef log_file, uint32_t log_options,
+                 llvm::raw_ostream &error_stream);
+
+  void SetLoggingCallback(lldb::LogOutputCallback log_callback, void *baton);
+
+  // Properties Functions
+  enum StopDisassemblyType {
+    eStopDisassemblyTypeNever = 0,
+    eStopDisassemblyTypeNoDebugInfo,
+    eStopDisassemblyTypeNoSource,
+    eStopDisassemblyTypeAlways
+  };
+
+  Status SetPropertyValue(const ExecutionContext *exe_ctx,
+                          VarSetOperationType op, llvm::StringRef property_path,
+                          llvm::StringRef value) override;
+
+  bool GetAutoConfirm() const;
+
+  const FormatEntity::Entry *GetDisassemblyFormat() const;
+
+  const FormatEntity::Entry *GetFrameFormat() const;
+
+  const FormatEntity::Entry *GetFrameFormatUnique() const;
+
+  const FormatEntity::Entry *GetThreadFormat() const;
+
+  const FormatEntity::Entry *GetThreadStopFormat() const;
+
+  lldb::ScriptLanguage GetScriptLanguage() const;
+
+  bool SetScriptLanguage(lldb::ScriptLanguage script_lang);
+
+  uint32_t GetTerminalWidth() const;
+
+  bool SetTerminalWidth(uint32_t term_width);
+
+  llvm::StringRef GetPrompt() const;
+
+  void SetPrompt(llvm::StringRef p);
+  void SetPrompt(const char *) = delete;
+
+  llvm::StringRef GetReproducerPath() const;
+
+  bool GetUseExternalEditor() const;
+
+  bool SetUseExternalEditor(bool use_external_editor_p);
+
+  bool GetUseColor() const;
+
+  bool SetUseColor(bool use_color);
+
+  bool GetHighlightSource() const;
+
+  lldb::StopShowColumn GetStopShowColumn() const;
+
+  llvm::StringRef GetStopShowColumnAnsiPrefix() const;
+
+  llvm::StringRef GetStopShowColumnAnsiSuffix() const;
+
+  uint32_t GetStopSourceLineCount(bool before) const;
+
+  StopDisassemblyType GetStopDisassemblyDisplay() const;
+
+  uint32_t GetDisassemblyLineCount() const;
+
+  bool GetAutoOneLineSummaries() const;
+
+  bool GetAutoIndent() const;
+
+  bool SetAutoIndent(bool b);
+
+  bool GetPrintDecls() const;
+
+  bool SetPrintDecls(bool b);
+
+  uint32_t GetTabSize() const;
+
+  bool SetTabSize(uint32_t tab_size);
+
+  bool GetEscapeNonPrintables() const;
+
+  bool GetNotifyVoid() const;
+
+  ConstString GetInstanceName() { return m_instance_name; }
+
+  bool LoadPlugin(const FileSpec &spec, Status &error);
+
+  void ExecuteIOHandlers();
+
+  bool IsForwardingEvents();
+
+  void EnableForwardEvents(const lldb::ListenerSP &listener_sp);
+
+  void CancelForwardEvents(const lldb::ListenerSP &listener_sp);
+
+  bool IsHandlingEvents() const { return m_event_handler_thread.IsJoinable(); }
+
+  Status RunREPL(lldb::LanguageType language, const char *repl_options);
+
+  // This is for use in the command interpreter, when you either want the
+  // selected target, or if no target is present you want to prime the dummy
+  // target with entities that will be copied over to new targets.
+  Target *GetSelectedOrDummyTarget(bool prefer_dummy = false);
+  Target *GetDummyTarget();
+
+  lldb::BroadcasterManagerSP GetBroadcasterManager() {
+    return m_broadcaster_manager_sp;
+  }
+
+protected:
+  friend class CommandInterpreter;
+  friend class REPL;
+
+  bool StartEventHandlerThread();
+
+  void StopEventHandlerThread();
+
+  static lldb::thread_result_t EventHandlerThread(lldb::thread_arg_t arg);
+
+  bool HasIOHandlerThread();
+
+  bool StartIOHandlerThread();
+
+  void StopIOHandlerThread();
+
+  void JoinIOHandlerThread();
+
+  static lldb::thread_result_t IOHandlerThread(lldb::thread_arg_t arg);
+
+  void DefaultEventHandler();
+
+  void HandleBreakpointEvent(const lldb::EventSP &event_sp);
+
+  void HandleProcessEvent(const lldb::EventSP &event_sp);
+
+  void HandleThreadEvent(const lldb::EventSP &event_sp);
+
+  size_t GetProcessSTDOUT(Process *process, Stream *stream);
+
+  size_t GetProcessSTDERR(Process *process, Stream *stream);
+
+  SourceManager::SourceFileCache &GetSourceFileCache() {
+    return m_source_file_cache;
+  }
+
+  void InstanceInitialize();
+
+  lldb::StreamFileSP m_input_file_sp;
+  lldb::StreamFileSP m_output_file_sp;
+  lldb::StreamFileSP m_error_file_sp;
+
+  /// Used for shadowing the input file when capturing a reproducer.
+  repro::DataRecorder *m_input_recorder;
+
+  lldb::BroadcasterManagerSP m_broadcaster_manager_sp; // The debugger acts as a
+                                                       // broadcaster manager of
+                                                       // last resort.
+  // It needs to get constructed before the target_list or any other member
+  // that might want to broadcast through the debugger.
+
+  TerminalState m_terminal_state;
+  TargetList m_target_list;
+
+  PlatformList m_platform_list;
+  lldb::ListenerSP m_listener_sp;
+  std::unique_ptr<SourceManager> m_source_manager_up; // This is a scratch
+                                                      // source manager that we
+                                                      // return if we have no
+                                                      // targets.
+  SourceManager::SourceFileCache m_source_file_cache; // All the source managers
+                                                      // for targets created in
+                                                      // this debugger used this
+                                                      // shared
+                                                      // source file cache.
+  std::unique_ptr<CommandInterpreter> m_command_interpreter_up;
+
+  lldb::ScriptInterpreterSP m_script_interpreter_sp;
+  std::recursive_mutex m_script_interpreter_mutex;
+
+  IOHandlerStack m_input_reader_stack;
+  llvm::StringMap<std::weak_ptr<llvm::raw_ostream>> m_log_streams;
+  std::shared_ptr<llvm::raw_ostream> m_log_callback_stream_sp;
+  ConstString m_instance_name;
+  static LoadPluginCallbackType g_load_plugin_callback;
+  typedef std::vector<llvm::sys::DynamicLibrary> LoadedPluginsList;
+  LoadedPluginsList m_loaded_plugins;
+  HostThread m_event_handler_thread;
+  HostThread m_io_handler_thread;
+  Broadcaster m_sync_broadcaster;
+  lldb::ListenerSP m_forward_listener_sp;
+  llvm::once_flag m_clear_once;
+
+  // Events for m_sync_broadcaster
+  enum {
+    eBroadcastBitEventThreadIsListening = (1 << 0),
+  };
+
+private:
+  // Use Debugger::CreateInstance() to get a shared pointer to a new debugger
+  // object
+  Debugger(lldb::LogOutputCallback m_log_callback, void *baton);
+
+  DISALLOW_COPY_AND_ASSIGN(Debugger);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Debugger_h_
diff --git a/linux-x64/clang/include/lldb/Core/Disassembler.h b/linux-x64/clang/include/lldb/Core/Disassembler.h
new file mode 100644
index 0000000..ba9ca87
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Disassembler.h
@@ -0,0 +1,551 @@
+//===-- Disassembler.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Disassembler_h_
+#define liblldb_Disassembler_h_
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/EmulateInstruction.h"
+#include "lldb/Core/FormatEntity.h"
+#include "lldb/Core/Opcode.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Symbol/LineEntry.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include <functional>
+#include <map>
+#include <memory>
+#include <set>
+#include <string>
+#include <vector>
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+namespace llvm {
+template <typename T> class SmallVectorImpl;
+}
+
+namespace lldb_private {
+class AddressRange;
+class DataExtractor;
+class Debugger;
+class Disassembler;
+class Module;
+class Stream;
+class SymbolContext;
+class SymbolContextList;
+class Target;
+struct RegisterInfo;
+
+class Instruction {
+public:
+  Instruction(const Address &address,
+              AddressClass addr_class = AddressClass::eInvalid);
+
+  virtual ~Instruction();
+
+  const Address &GetAddress() const { return m_address; }
+
+  const char *GetMnemonic(const ExecutionContext *exe_ctx) {
+    CalculateMnemonicOperandsAndCommentIfNeeded(exe_ctx);
+    return m_opcode_name.c_str();
+  }
+
+  const char *GetOperands(const ExecutionContext *exe_ctx) {
+    CalculateMnemonicOperandsAndCommentIfNeeded(exe_ctx);
+    return m_mnemonics.c_str();
+  }
+
+  const char *GetComment(const ExecutionContext *exe_ctx) {
+    CalculateMnemonicOperandsAndCommentIfNeeded(exe_ctx);
+    return m_comment.c_str();
+  }
+
+  virtual void
+  CalculateMnemonicOperandsAndComment(const ExecutionContext *exe_ctx) = 0;
+
+  AddressClass GetAddressClass();
+
+  void SetAddress(const Address &addr) {
+    // Invalidate the address class to lazily discover it if we need to.
+    m_address_class = AddressClass::eInvalid;
+    m_address = addr;
+  }
+
+  /// Dump the text representation of this Instruction to a Stream
+  ///
+  /// Print the (optional) address, (optional) bytes, opcode,
+  /// operands, and instruction comments to a stream.
+  ///
+  /// \param[in] s
+  ///     The Stream to add the text to.
+  ///
+  /// \param[in] show_address
+  ///     Whether the address (using disassembly_addr_format_spec formatting)
+  ///     should be printed.
+  ///
+  /// \param[in] show_bytes
+  ///     Whether the bytes of the assembly instruction should be printed.
+  ///
+  /// \param[in] max_opcode_byte_size
+  ///     The size (in bytes) of the largest instruction in the list that
+  ///     we are printing (for text justification/alignment purposes)
+  ///     Only needed if show_bytes is true.
+  ///
+  /// \param[in] exe_ctx
+  ///     The current execution context, if available.  May be used in
+  ///     the assembling of the operands+comments for this instruction.
+  ///     Pass NULL if not applicable.
+  ///
+  /// \param[in] sym_ctx
+  ///     The SymbolContext for this instruction.
+  ///     Pass NULL if not available/computed.
+  ///     Only needed if show_address is true.
+  ///
+  /// \param[in] prev_sym_ctx
+  ///     The SymbolContext for the previous instruction.  Depending on
+  ///     the disassembly address format specification, a change in
+  ///     Symbol / Function may mean that a line is printed with the new
+  ///     symbol/function name.
+  ///     Pass NULL if unavailable, or if this is the first instruction of
+  ///     the InstructionList.
+  ///     Only needed if show_address is true.
+  ///
+  /// \param[in] disassembly_addr_format
+  ///     The format specification for how addresses are printed.
+  ///     Only needed if show_address is true.
+  ///
+  /// \param[in] max_address_text_size
+  ///     The length of the longest address string at the start of the
+  ///     disassembly line that will be printed (the
+  ///     Debugger::FormatDisassemblerAddress() string)
+  ///     so this method can properly align the instruction opcodes.
+  ///     May be 0 to indicate no indentation/alignment of the opcodes.
+  virtual void Dump(Stream *s, uint32_t max_opcode_byte_size, bool show_address,
+                    bool show_bytes, const ExecutionContext *exe_ctx,
+                    const SymbolContext *sym_ctx,
+                    const SymbolContext *prev_sym_ctx,
+                    const FormatEntity::Entry *disassembly_addr_format,
+                    size_t max_address_text_size);
+
+  virtual bool DoesBranch() = 0;
+
+  virtual bool HasDelaySlot();
+
+  bool CanSetBreakpoint ();
+
+  virtual size_t Decode(const Disassembler &disassembler,
+                        const DataExtractor &data,
+                        lldb::offset_t data_offset) = 0;
+
+  virtual void SetDescription(llvm::StringRef) {
+  } // May be overridden in sub-classes that have descriptions.
+
+  lldb::OptionValueSP ReadArray(FILE *in_file, Stream *out_stream,
+                                OptionValue::Type data_type);
+
+  lldb::OptionValueSP ReadDictionary(FILE *in_file, Stream *out_stream);
+
+  bool DumpEmulation(const ArchSpec &arch);
+
+  virtual bool TestEmulation(Stream *stream, const char *test_file_name);
+
+  bool Emulate(const ArchSpec &arch, uint32_t evaluate_options, void *baton,
+               EmulateInstruction::ReadMemoryCallback read_mem_callback,
+               EmulateInstruction::WriteMemoryCallback write_mem_calback,
+               EmulateInstruction::ReadRegisterCallback read_reg_callback,
+               EmulateInstruction::WriteRegisterCallback write_reg_callback);
+
+  const Opcode &GetOpcode() const { return m_opcode; }
+
+  uint32_t GetData(DataExtractor &data);
+
+  struct Operand {
+    enum class Type {
+      Invalid = 0,
+      Register,
+      Immediate,
+      Dereference,
+      Sum,
+      Product
+    } m_type = Type::Invalid;
+    std::vector<Operand> m_children;
+    lldb::addr_t m_immediate = 0;
+    ConstString m_register;
+    bool m_negative = false;
+    bool m_clobbered = false;
+
+    bool IsValid() { return m_type != Type::Invalid; }
+
+    static Operand BuildRegister(ConstString &r);
+    static Operand BuildImmediate(lldb::addr_t imm, bool neg);
+    static Operand BuildImmediate(int64_t imm);
+    static Operand BuildDereference(const Operand &ref);
+    static Operand BuildSum(const Operand &lhs, const Operand &rhs);
+    static Operand BuildProduct(const Operand &lhs, const Operand &rhs);
+  };
+
+  virtual bool ParseOperands(llvm::SmallVectorImpl<Operand> &operands) {
+    return false;
+  }
+
+  virtual bool IsCall() { return false; }
+
+protected:
+  Address m_address; // The section offset address of this instruction
+                     // We include an address class in the Instruction class to
+                     // allow the instruction specify the
+                     // AddressClass::eCodeAlternateISA (currently used for
+                     // thumb), and also to specify data (AddressClass::eData).
+                     // The usual value will be AddressClass::eCode, but often
+                     // when disassembling memory, you might run into data.
+                     // This can help us to disassemble appropriately.
+private:
+  AddressClass m_address_class; // Use GetAddressClass () accessor function!
+
+protected:
+  Opcode m_opcode; // The opcode for this instruction
+  std::string m_opcode_name;
+  std::string m_mnemonics;
+  std::string m_comment;
+  bool m_calculated_strings;
+
+  void
+  CalculateMnemonicOperandsAndCommentIfNeeded(const ExecutionContext *exe_ctx) {
+    if (!m_calculated_strings) {
+      m_calculated_strings = true;
+      CalculateMnemonicOperandsAndComment(exe_ctx);
+    }
+  }
+};
+
+namespace OperandMatchers {
+std::function<bool(const Instruction::Operand &)>
+MatchBinaryOp(std::function<bool(const Instruction::Operand &)> base,
+              std::function<bool(const Instruction::Operand &)> left,
+              std::function<bool(const Instruction::Operand &)> right);
+
+std::function<bool(const Instruction::Operand &)>
+MatchUnaryOp(std::function<bool(const Instruction::Operand &)> base,
+             std::function<bool(const Instruction::Operand &)> child);
+
+std::function<bool(const Instruction::Operand &)>
+MatchRegOp(const RegisterInfo &info);
+
+std::function<bool(const Instruction::Operand &)> FetchRegOp(ConstString &reg);
+
+std::function<bool(const Instruction::Operand &)> MatchImmOp(int64_t imm);
+
+std::function<bool(const Instruction::Operand &)> FetchImmOp(int64_t &imm);
+
+std::function<bool(const Instruction::Operand &)>
+MatchOpType(Instruction::Operand::Type type);
+}
+
+class InstructionList {
+public:
+  InstructionList();
+  ~InstructionList();
+
+  size_t GetSize() const;
+
+  uint32_t GetMaxOpcocdeByteSize() const;
+
+  lldb::InstructionSP GetInstructionAtIndex(size_t idx) const;
+
+  //------------------------------------------------------------------
+  /// Get the index of the next branch instruction.
+  ///
+  /// Given a list of instructions, find the next branch instruction
+  /// in the list by returning an index.
+  ///
+  /// @param[in] start
+  ///     The instruction index of the first instruction to check.
+  ///
+  /// @param[in] target
+  ///     A LLDB target object that is used to resolve addresses.
+  ///    
+  /// @param[in] ignore_calls
+  ///     It true, then fine the first branch instruction that isn't
+  ///     a function call (a branch that calls and returns to the next
+  ///     instruction). If false, find the instruction index of any 
+  ///     branch in the list.
+  ///    
+  /// @return
+  ///     The instruction index of the first branch that is at or past
+  ///     \a start. Returns UINT32_MAX if no matching branches are 
+  ///     found.
+  //------------------------------------------------------------------
+  uint32_t GetIndexOfNextBranchInstruction(uint32_t start,
+                                           Target &target,
+                                           bool ignore_calls) const;
+
+  uint32_t GetIndexOfInstructionAtLoadAddress(lldb::addr_t load_addr,
+                                              Target &target);
+
+  uint32_t GetIndexOfInstructionAtAddress(const Address &addr);
+
+  void Clear();
+
+  void Append(lldb::InstructionSP &inst_sp);
+
+  void Dump(Stream *s, bool show_address, bool show_bytes,
+            const ExecutionContext *exe_ctx);
+
+private:
+  typedef std::vector<lldb::InstructionSP> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  collection m_instructions;
+};
+
+class PseudoInstruction : public Instruction {
+public:
+  PseudoInstruction();
+
+  ~PseudoInstruction() override;
+
+  bool DoesBranch() override;
+
+  bool HasDelaySlot() override;
+
+  void CalculateMnemonicOperandsAndComment(
+      const ExecutionContext *exe_ctx) override {
+    // TODO: fill this in and put opcode name into Instruction::m_opcode_name,
+    // mnemonic into Instruction::m_mnemonics, and any comment into
+    // Instruction::m_comment
+  }
+
+  size_t Decode(const Disassembler &disassembler, const DataExtractor &data,
+                lldb::offset_t data_offset) override;
+
+  void SetOpcode(size_t opcode_size, void *opcode_data);
+
+  void SetDescription(llvm::StringRef description) override;
+
+protected:
+  std::string m_description;
+
+  DISALLOW_COPY_AND_ASSIGN(PseudoInstruction);
+};
+
+class Disassembler : public std::enable_shared_from_this<Disassembler>,
+                     public PluginInterface {
+public:
+  enum {
+    eOptionNone = 0u,
+    eOptionShowBytes = (1u << 0),
+    eOptionRawOuput = (1u << 1),
+    eOptionMarkPCSourceLine = (1u << 2), // Mark the source line that contains
+                                         // the current PC (mixed mode only)
+    eOptionMarkPCAddress =
+        (1u << 3) // Mark the disassembly line the contains the PC
+  };
+
+  enum HexImmediateStyle {
+    eHexStyleC,
+    eHexStyleAsm,
+  };
+
+  // FindPlugin should be lax about the flavor string (it is too annoying to
+  // have various internal uses of the disassembler fail because the global
+  // flavor string gets set wrong. Instead, if you get a flavor string you
+  // don't understand, use the default.  Folks who care to check can use the
+  // FlavorValidForArchSpec method on the disassembler they got back.
+  static lldb::DisassemblerSP
+  FindPlugin(const ArchSpec &arch, const char *flavor, const char *plugin_name);
+
+  // This version will use the value in the Target settings if flavor is NULL;
+  static lldb::DisassemblerSP
+  FindPluginForTarget(const lldb::TargetSP target_sp, const ArchSpec &arch,
+                      const char *flavor, const char *plugin_name);
+
+  static lldb::DisassemblerSP
+  DisassembleRange(const ArchSpec &arch, const char *plugin_name,
+                   const char *flavor, const ExecutionContext &exe_ctx,
+                   const AddressRange &disasm_range, bool prefer_file_cache);
+
+  static lldb::DisassemblerSP
+  DisassembleBytes(const ArchSpec &arch, const char *plugin_name,
+                   const char *flavor, const Address &start, const void *bytes,
+                   size_t length, uint32_t max_num_instructions,
+                   bool data_from_file);
+
+  static bool Disassemble(Debugger &debugger, const ArchSpec &arch,
+                          const char *plugin_name, const char *flavor,
+                          const ExecutionContext &exe_ctx,
+                          const AddressRange &range, uint32_t num_instructions,
+                          bool mixed_source_and_assembly,
+                          uint32_t num_mixed_context_lines, uint32_t options,
+                          Stream &strm);
+
+  static bool Disassemble(Debugger &debugger, const ArchSpec &arch,
+                          const char *plugin_name, const char *flavor,
+                          const ExecutionContext &exe_ctx, const Address &start,
+                          uint32_t num_instructions,
+                          bool mixed_source_and_assembly,
+                          uint32_t num_mixed_context_lines, uint32_t options,
+                          Stream &strm);
+
+  static size_t
+  Disassemble(Debugger &debugger, const ArchSpec &arch, const char *plugin_name,
+              const char *flavor, const ExecutionContext &exe_ctx,
+              SymbolContextList &sc_list, uint32_t num_instructions,
+              bool mixed_source_and_assembly, uint32_t num_mixed_context_lines,
+              uint32_t options, Stream &strm);
+
+  static bool
+  Disassemble(Debugger &debugger, const ArchSpec &arch, const char *plugin_name,
+              const char *flavor, const ExecutionContext &exe_ctx,
+              ConstString name, Module *module,
+              uint32_t num_instructions, bool mixed_source_and_assembly,
+              uint32_t num_mixed_context_lines, uint32_t options, Stream &strm);
+
+  static bool
+  Disassemble(Debugger &debugger, const ArchSpec &arch, const char *plugin_name,
+              const char *flavor, const ExecutionContext &exe_ctx,
+              uint32_t num_instructions, bool mixed_source_and_assembly,
+              uint32_t num_mixed_context_lines, uint32_t options, Stream &strm);
+
+  // Constructors and Destructors
+  Disassembler(const ArchSpec &arch, const char *flavor);
+  ~Disassembler() override;
+
+  typedef const char *(*SummaryCallback)(const Instruction &inst,
+                                         ExecutionContext *exe_context,
+                                         void *user_data);
+
+  static bool PrintInstructions(Disassembler *disasm_ptr, Debugger &debugger,
+                                const ArchSpec &arch,
+                                const ExecutionContext &exe_ctx,
+                                uint32_t num_instructions,
+                                bool mixed_source_and_assembly,
+                                uint32_t num_mixed_context_lines,
+                                uint32_t options, Stream &strm);
+
+  size_t ParseInstructions(const ExecutionContext *exe_ctx,
+                           const AddressRange &range, Stream *error_strm_ptr,
+                           bool prefer_file_cache);
+
+  size_t ParseInstructions(const ExecutionContext *exe_ctx,
+                           const Address &range, uint32_t num_instructions,
+                           bool prefer_file_cache);
+
+  virtual size_t DecodeInstructions(const Address &base_addr,
+                                    const DataExtractor &data,
+                                    lldb::offset_t data_offset,
+                                    size_t num_instructions, bool append,
+                                    bool data_from_file) = 0;
+
+  InstructionList &GetInstructionList();
+
+  const InstructionList &GetInstructionList() const;
+
+  const ArchSpec &GetArchitecture() const { return m_arch; }
+
+  const char *GetFlavor() const { return m_flavor.c_str(); }
+
+  virtual bool FlavorValidForArchSpec(const lldb_private::ArchSpec &arch,
+                                      const char *flavor) = 0;
+
+protected:
+  // SourceLine and SourceLinesToDisplay structures are only used in the mixed
+  // source and assembly display methods internal to this class.
+
+  struct SourceLine {
+    FileSpec file;
+    uint32_t line;
+    uint32_t column;
+
+    SourceLine() : file(), line(LLDB_INVALID_LINE_NUMBER), column(0) {}
+
+    bool operator==(const SourceLine &rhs) const {
+      return file == rhs.file && line == rhs.line && rhs.column == column;
+    }
+
+    bool operator!=(const SourceLine &rhs) const {
+      return file != rhs.file || line != rhs.line || column != rhs.column;
+    }
+
+    bool IsValid() const { return line != LLDB_INVALID_LINE_NUMBER; }
+  };
+
+  struct SourceLinesToDisplay {
+    std::vector<SourceLine> lines;
+
+    // index of the "current" source line, if we want to highlight that when
+    // displaying the source lines.  (as opposed to the surrounding source
+    // lines provided to give context)
+    size_t current_source_line;
+
+    // Whether to print a blank line at the end of the source lines.
+    bool print_source_context_end_eol;
+
+    SourceLinesToDisplay()
+        : lines(), current_source_line(-1), print_source_context_end_eol(true) {
+    }
+  };
+
+  // Get the function's declaration line number, hopefully a line number
+  // earlier than the opening curly brace at the start of the function body.
+  static SourceLine GetFunctionDeclLineEntry(const SymbolContext &sc);
+
+  // Add the provided SourceLine to the map of filenames-to-source-lines-seen.
+  static void AddLineToSourceLineTables(
+      SourceLine &line,
+      std::map<FileSpec, std::set<uint32_t>> &source_lines_seen);
+
+  // Given a source line, determine if we should print it when we're doing
+  // mixed source & assembly output. We're currently using the
+  // target.process.thread.step-avoid-regexp setting (which is used for
+  // stepping over inlined STL functions by default) to determine what source
+  // lines to avoid showing.
+  //
+  // Returns true if this source line should be elided (if the source line
+  // should not be displayed).
+  static bool
+  ElideMixedSourceAndDisassemblyLine(const ExecutionContext &exe_ctx,
+                                     const SymbolContext &sc, SourceLine &line);
+
+  static bool
+  ElideMixedSourceAndDisassemblyLine(const ExecutionContext &exe_ctx,
+                                     const SymbolContext &sc, LineEntry &line) {
+    SourceLine sl;
+    sl.file = line.file;
+    sl.line = line.line;
+    sl.column = line.column;
+    return ElideMixedSourceAndDisassemblyLine(exe_ctx, sc, sl);
+  };
+
+  // Classes that inherit from Disassembler can see and modify these
+  ArchSpec m_arch;
+  InstructionList m_instruction_list;
+  lldb::addr_t m_base_addr;
+  std::string m_flavor;
+
+private:
+  // For Disassembler only
+  DISALLOW_COPY_AND_ASSIGN(Disassembler);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Disassembler_h_
diff --git a/linux-x64/clang/include/lldb/Core/DumpDataExtractor.h b/linux-x64/clang/include/lldb/Core/DumpDataExtractor.h
new file mode 100644
index 0000000..2a9d778
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/DumpDataExtractor.h
@@ -0,0 +1,92 @@
+//===-- DumpDataExtractor.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_CORE_DUMPDATAEXTRACTOR_H
+#define LLDB_CORE_DUMPDATAEXTRACTOR_H
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class DataExtractor;
+class ExecutionContextScope;
+class Stream;
+
+/// Dumps \a item_count objects into the stream \a s.
+///
+/// Dumps \a item_count objects using \a item_format, each of which
+/// are \a item_byte_size bytes long starting at offset \a offset
+/// bytes into the contained data, into the stream \a s. \a
+/// num_per_line objects will be dumped on each line before a new
+/// line will be output. If \a base_addr is a valid address, then
+/// each new line of output will be preceded by the address value
+/// plus appropriate offset, and a colon and space. Bitfield values
+/// can be dumped by calling this function multiple times with the
+/// same start offset, format and size, yet differing \a
+/// item_bit_size and \a item_bit_offset values.
+///
+/// \param[in] s
+///     The stream to dump the output to. This value can not be nullptr.
+///
+/// \param[in] offset
+///     The offset into the data at which to start dumping.
+///
+/// \param[in] item_format
+///     The format to use when dumping each item.
+///
+/// \param[in] item_byte_size
+///     The byte size of each item.
+///
+/// \param[in] item_count
+///     The number of items to dump.
+///
+/// \param[in] num_per_line
+///     The number of items to display on each line.
+///
+/// \param[in] base_addr
+///     The base address that gets added to the offset displayed on
+///     each line if the value is valid. Is \a base_addr is
+///     LLDB_INVALID_ADDRESS then no address values will be prepended
+///     to any lines.
+///
+/// \param[in] item_bit_size
+///     If the value to display is a bitfield, this value should
+///     be the number of bits that the bitfield item has within the
+///     item's byte size value. This function will need to be called
+///     multiple times with identical \a offset and \a item_byte_size
+///     values in order to display multiple bitfield values that
+///     exist within the same integer value. If the items being
+///     displayed are not bitfields, this value should be zero.
+///
+/// \param[in] item_bit_offset
+///     If the value to display is a bitfield, this value should
+///     be the offset in bits, or shift right amount, that the
+///     bitfield item occupies within the item's byte size value.
+///     This function will need to be called multiple times with
+///     identical \a offset and \a item_byte_size values in order
+///     to display multiple bitfield values that exist within the
+///     same integer value. If the items being displayed are not
+///     bitfields, this value should be zero.
+///
+/// \return
+///     The offset at which dumping ended.
+lldb::offset_t
+DumpDataExtractor(const DataExtractor &DE, Stream *s, lldb::offset_t offset,
+                  lldb::Format item_format, size_t item_byte_size,
+                  size_t item_count, size_t num_per_line, uint64_t base_addr,
+                  uint32_t item_bit_size, uint32_t item_bit_offset,
+                  ExecutionContextScope *exe_scope = nullptr);
+
+void DumpHexBytes(Stream *s, const void *src, size_t src_len,
+                  uint32_t bytes_per_line, lldb::addr_t base_addr);
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Core/DumpRegisterValue.h b/linux-x64/clang/include/lldb/Core/DumpRegisterValue.h
new file mode 100644
index 0000000..443fdb3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/DumpRegisterValue.h
@@ -0,0 +1,30 @@
+//===-- DumpRegisterValue.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_CORE_DUMPREGISTERVALUE_H
+#define LLDB_CORE_DUMPREGISTERVALUE_H
+
+#include "lldb/lldb-enumerations.h"
+#include <cstdint>
+
+namespace lldb_private {
+
+class RegisterValue;
+struct RegisterInfo;
+class Stream;
+
+// The default value of 0 for reg_name_right_align_at means no alignment at
+// all.
+bool DumpRegisterValue(const RegisterValue &reg_val, Stream *s,
+                       const RegisterInfo *reg_info, bool prefix_with_name,
+                       bool prefix_with_alt_name, lldb::Format format,
+                       uint32_t reg_name_right_align_at = 0);
+
+} // namespace lldb_private
+
+#endif // LLDB_CORE_DUMPREGISTERVALUE_H
diff --git a/linux-x64/clang/include/lldb/Core/EmulateInstruction.h b/linux-x64/clang/include/lldb/Core/EmulateInstruction.h
new file mode 100644
index 0000000..6b19c17
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/EmulateInstruction.h
@@ -0,0 +1,507 @@
+//===-- EmulateInstruction.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_EmulateInstruction_h_
+#define lldb_EmulateInstruction_h_
+
+#include <string>
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/Opcode.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-private-types.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class OptionValueDictionary;
+class RegisterContext;
+class RegisterValue;
+class Stream;
+class Target;
+class UnwindPlan;
+
+/// \class EmulateInstruction EmulateInstruction.h
+/// "lldb/Core/EmulateInstruction.h"
+/// A class that allows emulation of CPU opcodes.
+///
+/// This class is a plug-in interface that is accessed through the standard
+/// static FindPlugin function call in the EmulateInstruction class. The
+/// FindPlugin takes a target triple and returns a new object if there is a
+/// plug-in that supports the architecture and OS. Four callbacks and a baton
+/// are provided. The four callbacks are read register, write register, read
+/// memory and write memory.
+///
+/// This class is currently designed for these main use cases: - Auto
+/// generation of Call Frame Information (CFI) from assembly code - Predicting
+/// single step breakpoint locations - Emulating instructions for breakpoint
+/// traps
+///
+/// Objects can be asked to read an instruction which will cause a call to the
+/// read register callback to get the PC, followed by a read memory call to
+/// read the opcode. If ReadInstruction () returns true, then a call to
+/// EmulateInstruction::EvaluateInstruction () can be made. At this point the
+/// EmulateInstruction subclass will use all of the callbacks to emulate an
+/// instruction.
+///
+/// Clients that provide the callbacks can either do the read/write
+/// registers/memory to actually emulate the instruction on a real or virtual
+/// CPU, or watch for the EmulateInstruction::Context which is context for the
+/// read/write register/memory which explains why the callback is being
+/// called. Examples of a context are: "pushing register 3 onto the stack at
+/// offset -12", or "adjusting stack pointer by -16". This extra context
+/// allows the generation of
+/// CFI information from assembly code without having to actually do
+/// the read/write register/memory.
+///
+/// Clients must be prepared that not all instructions for an Instruction Set
+/// Architecture (ISA) will be emulated.
+///
+/// Subclasses at the very least should implement the instructions that save
+/// and restore registers onto the stack and adjustment to the stack pointer.
+/// By just implementing a few instructions for an ISA that are the typical
+/// prologue opcodes, you can then generate CFI using a class that will soon
+/// be available.
+///
+/// Implementing all of the instructions that affect the PC can then allow
+/// single step prediction support.
+///
+/// Implementing all of the instructions allows for emulation of opcodes for
+/// breakpoint traps and will pave the way for "thread centric" debugging. The
+/// current debugging model is "process centric" where all threads must be
+/// stopped when any thread is stopped; when hitting software breakpoints we
+/// must disable the breakpoint by restoring the original breakpoint opcode,
+/// single stepping and restoring the breakpoint trap. If all threads were
+/// allowed to run then other threads could miss the breakpoint.
+///
+/// This class centralizes the code that usually is done in separate code
+/// paths in a debugger (single step prediction, finding save restore
+/// locations of registers for unwinding stack frame variables) and emulating
+/// the instruction is just a bonus.
+
+class EmulateInstruction : public PluginInterface {
+public:
+  static EmulateInstruction *FindPlugin(const ArchSpec &arch,
+                                        InstructionType supported_inst_type,
+                                        const char *plugin_name);
+
+  enum ContextType {
+    eContextInvalid = 0,
+    // Read an instruction opcode from memory
+    eContextReadOpcode,
+
+    // Usually used for writing a register value whose source value is an
+    // immediate
+    eContextImmediate,
+
+    // Exclusively used when saving a register to the stack as part of the
+    // prologue
+    eContextPushRegisterOnStack,
+
+    // Exclusively used when restoring a register off the stack as part of the
+    // epilogue
+    eContextPopRegisterOffStack,
+
+    // Add or subtract a value from the stack
+    eContextAdjustStackPointer,
+
+    // Adjust the frame pointer for the current frame
+    eContextSetFramePointer,
+
+    // Typically in an epilogue sequence.  Copy the frame pointer back into the
+    // stack pointer, use SP for CFA calculations again.
+    eContextRestoreStackPointer,
+
+    // Add or subtract a value from a base address register (other than SP)
+    eContextAdjustBaseRegister,
+
+    // Add or subtract a value from the PC or store a value to the PC.
+    eContextAdjustPC,
+
+    // Used in WriteRegister callbacks to indicate where the
+    eContextRegisterPlusOffset,
+
+    // Used in WriteMemory callback to indicate where the data came from
+    eContextRegisterStore,
+
+    eContextRegisterLoad,
+
+    // Used when performing a PC-relative branch where the
+    eContextRelativeBranchImmediate,
+
+    // Used when performing an absolute branch where the
+    eContextAbsoluteBranchRegister,
+
+    // Used when performing a supervisor call to an operating system to provide
+    // a service:
+    eContextSupervisorCall,
+
+    // Used when performing a MemU operation to read the PC-relative offset
+    // from an address.
+    eContextTableBranchReadMemory,
+
+    // Used when random bits are written into a register
+    eContextWriteRegisterRandomBits,
+
+    // Used when random bits are written to memory
+    eContextWriteMemoryRandomBits,
+
+    eContextArithmetic,
+
+    eContextAdvancePC,
+
+    eContextReturnFromException
+  };
+
+  enum InfoType {
+    eInfoTypeRegisterPlusOffset,
+    eInfoTypeRegisterPlusIndirectOffset,
+    eInfoTypeRegisterToRegisterPlusOffset,
+    eInfoTypeRegisterToRegisterPlusIndirectOffset,
+    eInfoTypeRegisterRegisterOperands,
+    eInfoTypeOffset,
+    eInfoTypeRegister,
+    eInfoTypeImmediate,
+    eInfoTypeImmediateSigned,
+    eInfoTypeAddress,
+    eInfoTypeISAAndImmediate,
+    eInfoTypeISAAndImmediateSigned,
+    eInfoTypeISA,
+    eInfoTypeNoArgs
+  } InfoType;
+
+  struct Context {
+    ContextType type;
+    enum InfoType info_type;
+    union {
+      struct RegisterPlusOffset {
+        RegisterInfo reg;      // base register
+        int64_t signed_offset; // signed offset added to base register
+      } RegisterPlusOffset;
+
+      struct RegisterPlusIndirectOffset {
+        RegisterInfo base_reg;   // base register number
+        RegisterInfo offset_reg; // offset register kind
+      } RegisterPlusIndirectOffset;
+
+      struct RegisterToRegisterPlusOffset {
+        RegisterInfo data_reg; // source/target register for data
+        RegisterInfo base_reg; // base register for address calculation
+        int64_t offset;        // offset for address calculation
+      } RegisterToRegisterPlusOffset;
+
+      struct RegisterToRegisterPlusIndirectOffset {
+        RegisterInfo base_reg;   // base register for address calculation
+        RegisterInfo offset_reg; // offset register for address calculation
+        RegisterInfo data_reg;   // source/target register for data
+      } RegisterToRegisterPlusIndirectOffset;
+
+      struct RegisterRegisterOperands {
+        RegisterInfo
+            operand1; // register containing first operand for binary op
+        RegisterInfo
+            operand2; // register containing second operand for binary op
+      } RegisterRegisterOperands;
+
+      int64_t signed_offset; // signed offset by which to adjust self (for
+                             // registers only)
+
+      RegisterInfo reg; // plain register
+
+      uint64_t unsigned_immediate; // unsigned immediate value
+      int64_t signed_immediate;    // signed immediate value
+
+      lldb::addr_t address; // direct address
+
+      struct ISAAndImmediate {
+        uint32_t isa;
+        uint32_t unsigned_data32; // immediate data
+      } ISAAndImmediate;
+
+      struct ISAAndImmediateSigned {
+        uint32_t isa;
+        int32_t signed_data32; // signed immediate data
+      } ISAAndImmediateSigned;
+
+      uint32_t isa;
+    } info;
+
+    Context() : type(eContextInvalid), info_type(eInfoTypeNoArgs) {}
+
+    void SetRegisterPlusOffset(RegisterInfo base_reg, int64_t signed_offset) {
+      info_type = eInfoTypeRegisterPlusOffset;
+      info.RegisterPlusOffset.reg = base_reg;
+      info.RegisterPlusOffset.signed_offset = signed_offset;
+    }
+
+    void SetRegisterPlusIndirectOffset(RegisterInfo base_reg,
+                                       RegisterInfo offset_reg) {
+      info_type = eInfoTypeRegisterPlusIndirectOffset;
+      info.RegisterPlusIndirectOffset.base_reg = base_reg;
+      info.RegisterPlusIndirectOffset.offset_reg = offset_reg;
+    }
+
+    void SetRegisterToRegisterPlusOffset(RegisterInfo data_reg,
+                                         RegisterInfo base_reg,
+                                         int64_t offset) {
+      info_type = eInfoTypeRegisterToRegisterPlusOffset;
+      info.RegisterToRegisterPlusOffset.data_reg = data_reg;
+      info.RegisterToRegisterPlusOffset.base_reg = base_reg;
+      info.RegisterToRegisterPlusOffset.offset = offset;
+    }
+
+    void SetRegisterToRegisterPlusIndirectOffset(RegisterInfo base_reg,
+                                                 RegisterInfo offset_reg,
+                                                 RegisterInfo data_reg) {
+      info_type = eInfoTypeRegisterToRegisterPlusIndirectOffset;
+      info.RegisterToRegisterPlusIndirectOffset.base_reg = base_reg;
+      info.RegisterToRegisterPlusIndirectOffset.offset_reg = offset_reg;
+      info.RegisterToRegisterPlusIndirectOffset.data_reg = data_reg;
+    }
+
+    void SetRegisterRegisterOperands(RegisterInfo op1_reg,
+                                     RegisterInfo op2_reg) {
+      info_type = eInfoTypeRegisterRegisterOperands;
+      info.RegisterRegisterOperands.operand1 = op1_reg;
+      info.RegisterRegisterOperands.operand2 = op2_reg;
+    }
+
+    void SetOffset(int64_t signed_offset) {
+      info_type = eInfoTypeOffset;
+      info.signed_offset = signed_offset;
+    }
+
+    void SetRegister(RegisterInfo reg) {
+      info_type = eInfoTypeRegister;
+      info.reg = reg;
+    }
+
+    void SetImmediate(uint64_t immediate) {
+      info_type = eInfoTypeImmediate;
+      info.unsigned_immediate = immediate;
+    }
+
+    void SetImmediateSigned(int64_t signed_immediate) {
+      info_type = eInfoTypeImmediateSigned;
+      info.signed_immediate = signed_immediate;
+    }
+
+    void SetAddress(lldb::addr_t address) {
+      info_type = eInfoTypeAddress;
+      info.address = address;
+    }
+    void SetISAAndImmediate(uint32_t isa, uint32_t data) {
+      info_type = eInfoTypeISAAndImmediate;
+      info.ISAAndImmediate.isa = isa;
+      info.ISAAndImmediate.unsigned_data32 = data;
+    }
+
+    void SetISAAndImmediateSigned(uint32_t isa, int32_t data) {
+      info_type = eInfoTypeISAAndImmediateSigned;
+      info.ISAAndImmediateSigned.isa = isa;
+      info.ISAAndImmediateSigned.signed_data32 = data;
+    }
+
+    void SetISA(uint32_t isa) {
+      info_type = eInfoTypeISA;
+      info.isa = isa;
+    }
+
+    void SetNoArgs() { info_type = eInfoTypeNoArgs; }
+
+    void Dump(Stream &s, EmulateInstruction *instruction) const;
+  };
+
+  typedef size_t (*ReadMemoryCallback)(EmulateInstruction *instruction,
+                                       void *baton, const Context &context,
+                                       lldb::addr_t addr, void *dst,
+                                       size_t length);
+
+  typedef size_t (*WriteMemoryCallback)(EmulateInstruction *instruction,
+                                        void *baton, const Context &context,
+                                        lldb::addr_t addr, const void *dst,
+                                        size_t length);
+
+  typedef bool (*ReadRegisterCallback)(EmulateInstruction *instruction,
+                                       void *baton,
+                                       const RegisterInfo *reg_info,
+                                       RegisterValue &reg_value);
+
+  typedef bool (*WriteRegisterCallback)(EmulateInstruction *instruction,
+                                        void *baton, const Context &context,
+                                        const RegisterInfo *reg_info,
+                                        const RegisterValue &reg_value);
+
+  // Type to represent the condition of an instruction. The UINT32 value is
+  // reserved for the unconditional case and all other value can be used in an
+  // architecture dependent way.
+  typedef uint32_t InstructionCondition;
+  static const InstructionCondition UnconditionalCondition = UINT32_MAX;
+
+  EmulateInstruction(const ArchSpec &arch);
+
+  ~EmulateInstruction() override = default;
+
+  // Mandatory overrides
+  virtual bool
+  SupportsEmulatingInstructionsOfType(InstructionType inst_type) = 0;
+
+  virtual bool SetTargetTriple(const ArchSpec &arch) = 0;
+
+  virtual bool ReadInstruction() = 0;
+
+  virtual bool EvaluateInstruction(uint32_t evaluate_options) = 0;
+
+  virtual InstructionCondition GetInstructionCondition() {
+    return UnconditionalCondition;
+  }
+
+  virtual bool TestEmulation(Stream *out_stream, ArchSpec &arch,
+                             OptionValueDictionary *test_data) = 0;
+
+  virtual bool GetRegisterInfo(lldb::RegisterKind reg_kind, uint32_t reg_num,
+                               RegisterInfo &reg_info) = 0;
+
+  // Optional overrides
+  virtual bool SetInstruction(const Opcode &insn_opcode,
+                              const Address &inst_addr, Target *target);
+
+  virtual bool CreateFunctionEntryUnwind(UnwindPlan &unwind_plan);
+
+  static const char *TranslateRegister(lldb::RegisterKind reg_kind,
+                                       uint32_t reg_num, std::string &reg_name);
+
+  // RegisterInfo variants
+  bool ReadRegister(const RegisterInfo *reg_info, RegisterValue &reg_value);
+
+  uint64_t ReadRegisterUnsigned(const RegisterInfo *reg_info,
+                                uint64_t fail_value, bool *success_ptr);
+
+  bool WriteRegister(const Context &context, const RegisterInfo *ref_info,
+                     const RegisterValue &reg_value);
+
+  bool WriteRegisterUnsigned(const Context &context,
+                             const RegisterInfo *reg_info, uint64_t reg_value);
+
+  // Register kind and number variants
+  bool ReadRegister(lldb::RegisterKind reg_kind, uint32_t reg_num,
+                    RegisterValue &reg_value);
+
+  bool WriteRegister(const Context &context, lldb::RegisterKind reg_kind,
+                     uint32_t reg_num, const RegisterValue &reg_value);
+
+  uint64_t ReadRegisterUnsigned(lldb::RegisterKind reg_kind, uint32_t reg_num,
+                                uint64_t fail_value, bool *success_ptr);
+
+  bool WriteRegisterUnsigned(const Context &context,
+                             lldb::RegisterKind reg_kind, uint32_t reg_num,
+                             uint64_t reg_value);
+
+  size_t ReadMemory(const Context &context, lldb::addr_t addr, void *dst,
+                    size_t dst_len);
+
+  uint64_t ReadMemoryUnsigned(const Context &context, lldb::addr_t addr,
+                              size_t byte_size, uint64_t fail_value,
+                              bool *success_ptr);
+
+  bool WriteMemory(const Context &context, lldb::addr_t addr, const void *src,
+                   size_t src_len);
+
+  bool WriteMemoryUnsigned(const Context &context, lldb::addr_t addr,
+                           uint64_t uval, size_t uval_byte_size);
+
+  uint32_t GetAddressByteSize() const { return m_arch.GetAddressByteSize(); }
+
+  lldb::ByteOrder GetByteOrder() const { return m_arch.GetByteOrder(); }
+
+  const Opcode &GetOpcode() const { return m_opcode; }
+
+  lldb::addr_t GetAddress() const { return m_addr; }
+
+  const ArchSpec &GetArchitecture() const { return m_arch; }
+
+  static size_t ReadMemoryFrame(EmulateInstruction *instruction, void *baton,
+                                const Context &context, lldb::addr_t addr,
+                                void *dst, size_t length);
+
+  static size_t WriteMemoryFrame(EmulateInstruction *instruction, void *baton,
+                                 const Context &context, lldb::addr_t addr,
+                                 const void *dst, size_t length);
+
+  static bool ReadRegisterFrame(EmulateInstruction *instruction, void *baton,
+                                const RegisterInfo *reg_info,
+                                RegisterValue &reg_value);
+
+  static bool WriteRegisterFrame(EmulateInstruction *instruction, void *baton,
+                                 const Context &context,
+                                 const RegisterInfo *reg_info,
+                                 const RegisterValue &reg_value);
+
+  static size_t ReadMemoryDefault(EmulateInstruction *instruction, void *baton,
+                                  const Context &context, lldb::addr_t addr,
+                                  void *dst, size_t length);
+
+  static size_t WriteMemoryDefault(EmulateInstruction *instruction, void *baton,
+                                   const Context &context, lldb::addr_t addr,
+                                   const void *dst, size_t length);
+
+  static bool ReadRegisterDefault(EmulateInstruction *instruction, void *baton,
+                                  const RegisterInfo *reg_info,
+                                  RegisterValue &reg_value);
+
+  static bool WriteRegisterDefault(EmulateInstruction *instruction, void *baton,
+                                   const Context &context,
+                                   const RegisterInfo *reg_info,
+                                   const RegisterValue &reg_value);
+
+  void SetBaton(void *baton);
+
+  void SetCallbacks(ReadMemoryCallback read_mem_callback,
+                    WriteMemoryCallback write_mem_callback,
+                    ReadRegisterCallback read_reg_callback,
+                    WriteRegisterCallback write_reg_callback);
+
+  void SetReadMemCallback(ReadMemoryCallback read_mem_callback);
+
+  void SetWriteMemCallback(WriteMemoryCallback write_mem_callback);
+
+  void SetReadRegCallback(ReadRegisterCallback read_reg_callback);
+
+  void SetWriteRegCallback(WriteRegisterCallback write_reg_callback);
+
+  static bool GetBestRegisterKindAndNumber(const RegisterInfo *reg_info,
+                                           lldb::RegisterKind &reg_kind,
+                                           uint32_t &reg_num);
+
+  static uint32_t GetInternalRegisterNumber(RegisterContext *reg_ctx,
+                                            const RegisterInfo &reg_info);
+
+protected:
+  ArchSpec m_arch;
+  void *m_baton = nullptr;
+  ReadMemoryCallback m_read_mem_callback = &ReadMemoryDefault;
+  WriteMemoryCallback m_write_mem_callback = &WriteMemoryDefault;
+  ReadRegisterCallback m_read_reg_callback = &ReadRegisterDefault;
+  WriteRegisterCallback m_write_reg_callback = &WriteRegisterDefault;
+  lldb::addr_t m_addr = LLDB_INVALID_ADDRESS;
+  Opcode m_opcode;
+
+private:
+  // For EmulateInstruction only
+  DISALLOW_COPY_AND_ASSIGN(EmulateInstruction);
+};
+
+} // namespace lldb_private
+
+#endif // lldb_EmulateInstruction_h_
diff --git a/linux-x64/clang/include/lldb/Core/FileLineResolver.h b/linux-x64/clang/include/lldb/Core/FileLineResolver.h
new file mode 100644
index 0000000..1967ed5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/FileLineResolver.h
@@ -0,0 +1,66 @@
+//===-- FileLineResolver.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_FileLineResolver_h_
+#define liblldb_FileLineResolver_h_
+
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-defines.h"
+
+#include <stdint.h>
+
+namespace lldb_private {
+class Address;
+class Stream;
+
+/// \class FileLineResolver FileLineResolver.h "lldb/Core/FileLineResolver.h"
+/// This class finds address for source file and line.  Optionally, it will
+/// look for inlined instances of the file and line specification.
+
+class FileLineResolver : public Searcher {
+public:
+  FileLineResolver()
+      : m_file_spec(),
+        m_line_number(UINT32_MAX), // Set this to zero for all lines in a file
+        m_sc_list(), m_inlines(true) {}
+
+  FileLineResolver(const FileSpec &resolver, uint32_t line_no,
+                   bool check_inlines);
+
+  ~FileLineResolver() override;
+
+  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                          SymbolContext &context, Address *addr,
+                                          bool containing) override;
+
+  lldb::SearchDepth GetDepth() override;
+
+  void GetDescription(Stream *s) override;
+
+  const SymbolContextList &GetFileLineMatches() { return m_sc_list; }
+
+  void Clear();
+
+  void Reset(const FileSpec &file_spec, uint32_t line, bool check_inlines);
+
+protected:
+  FileSpec m_file_spec;   // This is the file spec we are looking for.
+  uint32_t m_line_number; // This is the line number that we are looking for.
+  SymbolContextList m_sc_list;
+  bool m_inlines; // This determines whether the resolver looks for inlined
+                  // functions or not.
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(FileLineResolver);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_FileLineResolver_h_
diff --git a/linux-x64/clang/include/lldb/Core/FileSpecList.h b/linux-x64/clang/include/lldb/Core/FileSpecList.h
new file mode 100644
index 0000000..79623ef
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/FileSpecList.h
@@ -0,0 +1,194 @@
+//===-- FileSpecList.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_FileSpecList_h_
+#define liblldb_FileSpecList_h_
+#if defined(__cplusplus)
+
+#include "lldb/Utility/FileSpec.h"
+
+#include <vector>
+
+#include <stddef.h>
+
+namespace lldb_private {
+class Stream;
+
+/// \class FileSpecList FileSpecList.h "lldb/Core/FileSpecList.h"
+/// A file collection class.
+///
+/// A class that contains a mutable list of FileSpec objects.
+class FileSpecList {
+public:
+  /// Default constructor.
+  ///
+  /// Initialize this object with an empty file list.
+  FileSpecList();
+
+  /// Copy constructor.
+  FileSpecList(const FileSpecList &rhs) = default;
+
+  /// Move constructor
+  FileSpecList(FileSpecList &&rhs) = default;
+
+  /// Initialize this object from a vector of FileSpecs
+  FileSpecList(std::vector<FileSpec> &&rhs) : m_files(std::move(rhs)) {}
+
+  /// Destructor.
+  ~FileSpecList();
+
+  /// Assignment operator.
+  ///
+  /// Replace the file list in this object with the file list from \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     A file list object to copy.
+  ///
+  /// \return
+  ///     A const reference to this object.
+  FileSpecList &operator=(const FileSpecList &rhs) = default;
+
+  /// Move-assignment operator.
+  FileSpecList &operator=(FileSpecList &&rhs) = default;
+
+  /// Append a FileSpec object to the list.
+  ///
+  /// Appends \a file to the end of the file list.
+  ///
+  /// \param[in] file
+  ///     A new file to append to this file list.
+  void Append(const FileSpec &file);
+
+  /// Append a FileSpec object if unique.
+  ///
+  /// Appends \a file to the end of the file list if it doesn't already exist
+  /// in the file list.
+  ///
+  /// \param[in] file
+  ///     A new file to append to this file list.
+  ///
+  /// \return
+  ///     \b true if the file was appended, \b false otherwise.
+  bool AppendIfUnique(const FileSpec &file);
+
+  /// Clears the file list.
+  void Clear();
+
+  /// Dumps the file list to the supplied stream pointer "s".
+  ///
+  /// \param[in] s
+  ///     The stream that will be used to dump the object description.
+  void Dump(Stream *s, const char *separator_cstr = "\n") const;
+
+  /// Find a file index.
+  ///
+  /// Find the index of the file in the file spec list that matches \a file
+  /// starting \a idx entries into the file spec list.
+  ///
+  /// \param[in] idx
+  ///     An index into the file list.
+  ///
+  /// \param[in] file
+  ///     The file specification to search for.
+  ///
+  /// \param[in] full
+  ///     Should FileSpec::Equal be called with "full" true or false.
+  ///
+  /// \return
+  ///     The index of the file that matches \a file if it is found,
+  ///     else UINT32_MAX is returned.
+  size_t FindFileIndex(size_t idx, const FileSpec &file, bool full) const;
+
+  /// Get file at index.
+  ///
+  /// Gets a file from the file list. If \a idx is not a valid index, an empty
+  /// FileSpec object will be returned. The file objects that are returned can
+  /// be tested using FileSpec::operator void*().
+  ///
+  /// \param[in] idx
+  ///     An index into the file list.
+  ///
+  /// \return
+  ///     A copy of the FileSpec object at index \a idx. If \a idx
+  ///     is out of range, then an empty FileSpec object will be
+  ///     returned.
+  const FileSpec &GetFileSpecAtIndex(size_t idx) const;
+
+  /// Get file specification pointer at index.
+  ///
+  /// Gets a file from the file list. The file objects that are returned can
+  /// be tested using FileSpec::operator void*().
+  ///
+  /// \param[in] idx
+  ///     An index into the file list.
+  ///
+  /// \return
+  ///     A pointer to a contained FileSpec object at index \a idx.
+  ///     If \a idx is out of range, then an NULL is returned.
+  const FileSpec *GetFileSpecPointerAtIndex(size_t idx) const;
+
+  /// Get the memory cost of this object.
+  ///
+  /// Return the size in bytes that this object takes in memory. This returns
+  /// the size in bytes of this object, not any shared string values it may
+  /// refer to.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  size_t MemorySize() const;
+
+  bool IsEmpty() const { return m_files.empty(); }
+
+  /// Get the number of files in the file list.
+  ///
+  /// \return
+  ///     The number of files in the file spec list.
+  size_t GetSize() const;
+
+  bool Insert(size_t idx, const FileSpec &file) {
+    if (idx < m_files.size()) {
+      m_files.insert(m_files.begin() + idx, file);
+      return true;
+    } else if (idx == m_files.size()) {
+      m_files.push_back(file);
+      return true;
+    }
+    return false;
+  }
+
+  bool Replace(size_t idx, const FileSpec &file) {
+    if (idx < m_files.size()) {
+      m_files[idx] = file;
+      return true;
+    }
+    return false;
+  }
+
+  bool Remove(size_t idx) {
+    if (idx < m_files.size()) {
+      m_files.erase(m_files.begin() + idx);
+      return true;
+    }
+    return false;
+  }
+
+  static size_t GetFilesMatchingPartialPath(const char *path, bool dir_okay,
+                                            FileSpecList &matches);
+
+protected:
+  typedef std::vector<FileSpec>
+      collection;     ///< The collection type for the file list.
+  collection m_files; ///< A collection of FileSpec objects.
+};
+
+} // namespace lldb_private
+
+#endif // #if defined(__cplusplus)
+#endif // liblldb_FileSpecList_h_
diff --git a/linux-x64/clang/include/lldb/Core/FormatEntity.h b/linux-x64/clang/include/lldb/Core/FormatEntity.h
new file mode 100644
index 0000000..634d9df
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/FormatEntity.h
@@ -0,0 +1,220 @@
+//===-- FormatEntity.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_FormatEntity_h_
+#define liblldb_FormatEntity_h_
+
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-types.h"
+#include <algorithm>
+#include <stddef.h>
+#include <stdint.h>
+
+#include <string>
+#include <vector>
+
+namespace lldb_private {
+class Address;
+class ExecutionContext;
+class Stream;
+class StringList;
+class SymbolContext;
+class ValueObject;
+}
+namespace llvm {
+class StringRef;
+}
+
+namespace lldb_private {
+class FormatEntity {
+public:
+  struct Entry {
+    enum class Type {
+      Invalid,
+      ParentNumber,
+      ParentString,
+      EscapeCode,
+      Root,
+      String,
+      Scope,
+      Variable,
+      VariableSynthetic,
+      ScriptVariable,
+      ScriptVariableSynthetic,
+      AddressLoad,
+      AddressFile,
+      AddressLoadOrFile,
+      ProcessID,
+      ProcessFile,
+      ScriptProcess,
+      ThreadID,
+      ThreadProtocolID,
+      ThreadIndexID,
+      ThreadName,
+      ThreadQueue,
+      ThreadStopReason,
+      ThreadReturnValue,
+      ThreadCompletedExpression,
+      ScriptThread,
+      ThreadInfo,
+      TargetArch,
+      ScriptTarget,
+      ModuleFile,
+      File,
+      Lang,
+      FrameIndex,
+      FrameNoDebug,
+      FrameRegisterPC,
+      FrameRegisterSP,
+      FrameRegisterFP,
+      FrameRegisterFlags,
+      FrameRegisterByName,
+      FrameIsArtificial,
+      ScriptFrame,
+      FunctionID,
+      FunctionDidChange,
+      FunctionInitialFunction,
+      FunctionName,
+      FunctionNameWithArgs,
+      FunctionNameNoArgs,
+      FunctionAddrOffset,
+      FunctionAddrOffsetConcrete,
+      FunctionLineOffset,
+      FunctionPCOffset,
+      FunctionInitial,
+      FunctionChanged,
+      FunctionIsOptimized,
+      LineEntryFile,
+      LineEntryLineNumber,
+      LineEntryColumn,
+      LineEntryStartAddress,
+      LineEntryEndAddress,
+      CurrentPCArrow
+    };
+
+    struct Definition {
+      const char *name;
+      const char *string; // Insert this exact string into the output
+      Entry::Type type;
+      uint64_t data;
+      uint32_t num_children;
+      Definition *children; // An array of "num_children" Definition entries,
+      bool keep_separator;
+    };
+
+    Entry(Type t = Type::Invalid, const char *s = nullptr,
+          const char *f = nullptr)
+        : string(s ? s : ""), printf_format(f ? f : ""), children(),
+          definition(nullptr), type(t), fmt(lldb::eFormatDefault), number(0),
+          deref(false) {}
+
+    Entry(llvm::StringRef s);
+    Entry(char ch);
+
+    void AppendChar(char ch);
+
+    void AppendText(const llvm::StringRef &s);
+
+    void AppendText(const char *cstr);
+
+    void AppendEntry(const Entry &&entry) { children.push_back(entry); }
+
+    void Clear() {
+      string.clear();
+      printf_format.clear();
+      children.clear();
+      definition = nullptr;
+      type = Type::Invalid;
+      fmt = lldb::eFormatDefault;
+      number = 0;
+      deref = false;
+    }
+
+    static const char *TypeToCString(Type t);
+
+    void Dump(Stream &s, int depth = 0) const;
+
+    bool operator==(const Entry &rhs) const {
+      if (string != rhs.string)
+        return false;
+      if (printf_format != rhs.printf_format)
+        return false;
+      const size_t n = children.size();
+      const size_t m = rhs.children.size();
+      for (size_t i = 0; i < std::min<size_t>(n, m); ++i) {
+        if (!(children[i] == rhs.children[i]))
+          return false;
+      }
+      if (children != rhs.children)
+        return false;
+      if (definition != rhs.definition)
+        return false;
+      if (type != rhs.type)
+        return false;
+      if (fmt != rhs.fmt)
+        return false;
+      if (deref != rhs.deref)
+        return false;
+      return true;
+    }
+
+    std::string string;
+    std::string printf_format;
+    std::vector<Entry> children;
+    Definition *definition;
+    Type type;
+    lldb::Format fmt;
+    lldb::addr_t number;
+    bool deref;
+  };
+
+  static bool Format(const Entry &entry, Stream &s, const SymbolContext *sc,
+                     const ExecutionContext *exe_ctx, const Address *addr,
+                     ValueObject *valobj, bool function_changed,
+                     bool initial_function);
+
+  static bool FormatStringRef(const llvm::StringRef &format, Stream &s,
+                              const SymbolContext *sc,
+                              const ExecutionContext *exe_ctx,
+                              const Address *addr, ValueObject *valobj,
+                              bool function_changed, bool initial_function);
+
+  static bool FormatCString(const char *format, Stream &s,
+                            const SymbolContext *sc,
+                            const ExecutionContext *exe_ctx,
+                            const Address *addr, ValueObject *valobj,
+                            bool function_changed, bool initial_function);
+
+  static Status Parse(const llvm::StringRef &format, Entry &entry);
+
+  static Status ExtractVariableInfo(llvm::StringRef &format_str,
+                                    llvm::StringRef &variable_name,
+                                    llvm::StringRef &variable_format);
+
+  static size_t AutoComplete(lldb_private::CompletionRequest &request);
+
+  // Format the current elements into the stream \a s.
+  //
+  // The root element will be stripped off and the format str passed in will be
+  // either an empty string (print a description of this object), or contain a
+  // `.`-separated series like a domain name that identifies further
+  //  sub-elements to display.
+  static bool FormatFileSpec(const FileSpec &file, Stream &s,
+                             llvm::StringRef elements,
+                             llvm::StringRef element_format);
+
+protected:
+  static Status ParseInternal(llvm::StringRef &format, Entry &parent_entry,
+                              uint32_t depth);
+};
+} // namespace lldb_private
+
+#endif // liblldb_FormatEntity_h_
diff --git a/linux-x64/clang/include/lldb/Core/Highlighter.h b/linux-x64/clang/include/lldb/Core/Highlighter.h
new file mode 100644
index 0000000..88d3bb3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Highlighter.h
@@ -0,0 +1,156 @@
+//===-- Highlighter.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Highlighter_h_
+#define liblldb_Highlighter_h_
+
+#include <utility>
+#include <vector>
+
+#include "lldb/Utility/Stream.h"
+#include "lldb/lldb-enumerations.h"
+#include "llvm/ADT/StringRef.h"
+
+namespace lldb_private {
+
+/// Represents style that the highlighter should apply to the given source code.
+/// Stores information about how every kind of token should be annotated.
+struct HighlightStyle {
+
+  /// A pair of strings that should be placed around a certain token. Usually
+  /// stores color codes in these strings (the suffix string is often used for
+  /// resetting the terminal attributes back to normal).
+  class ColorStyle {
+    std::string m_prefix;
+    std::string m_suffix;
+
+  public:
+    ColorStyle() = default;
+    ColorStyle(llvm::StringRef prefix, llvm::StringRef suffix) {
+      Set(prefix, suffix);
+    }
+
+    /// Applies this style to the given value.
+    /// \param s
+    ///     The stream to which the result should be appended.
+    /// \param value
+    ///     The value that we should place our strings around.
+    void Apply(Stream &s, llvm::StringRef value) const;
+
+    /// Sets the prefix and suffix strings.
+    /// \param prefix
+    /// \param suffix
+    void Set(llvm::StringRef prefix, llvm::StringRef suffix);
+  };
+
+  /// The style for the token which is below the cursor of the user. Note that
+  /// this style is overwritten by the SourceManager with the values of
+  /// stop-show-column-ansi-prefix/stop-show-column-ansi-suffix.
+  ColorStyle selected;
+
+  /// Matches identifiers to variable or functions.
+  ColorStyle identifier;
+  /// Matches any string or character literals in the language: "foo" or 'f'
+  ColorStyle string_literal;
+  /// Matches scalar value literals like '42' or '0.1'.
+  ColorStyle scalar_literal;
+  /// Matches all reserved keywords in the language.
+  ColorStyle keyword;
+  /// Matches any comments in the language.
+  ColorStyle comment;
+  /// Matches commas: ','
+  ColorStyle comma;
+  /// Matches one colon: ':'
+  ColorStyle colon;
+  /// Matches any semicolon: ';'
+  ColorStyle semicolons;
+  /// Matches operators like '+', '-', '%', '&', '='
+  ColorStyle operators;
+
+  /// Matches '{' or '}'
+  ColorStyle braces;
+  /// Matches '[' or ']'
+  ColorStyle square_brackets;
+  /// Matches '(' or ')'
+  ColorStyle parentheses;
+
+  // C language specific options
+
+  /// Matches directives to a preprocessor (if the language has any).
+  ColorStyle pp_directive;
+
+  /// Returns a HighlightStyle that is based on vim's default highlight style.
+  static HighlightStyle MakeVimStyle();
+};
+
+/// Annotates source code with color attributes.
+class Highlighter {
+public:
+  Highlighter() = default;
+  virtual ~Highlighter() = default;
+  DISALLOW_COPY_AND_ASSIGN(Highlighter);
+
+  /// Returns a human readable name for the selected highlighter.
+  virtual llvm::StringRef GetName() const = 0;
+
+  /// Highlights the given line
+  /// \param options
+  /// \param line
+  ///     The user supplied line that needs to be highlighted.
+  /// \param cursor_pos
+  ///     The cursor position of the user in this line, starting at 0 (which
+  ///     means the cursor is on the first character in 'line').
+  /// \param previous_lines
+  ///     Any previous lines the user has written which we should only use
+  ///     for getting the context of the Highlighting right.
+  /// \param s
+  ///     The stream to which the highlighted version of the user string should
+  ///     be written.
+  virtual void Highlight(const HighlightStyle &options, llvm::StringRef line,
+                         llvm::Optional<size_t> cursor_pos,
+                         llvm::StringRef previous_lines, Stream &s) const = 0;
+
+  /// Utility method for calling Highlight without a stream.
+  std::string Highlight(const HighlightStyle &options, llvm::StringRef line,
+                        llvm::Optional<size_t> cursor_pos,
+                        llvm::StringRef previous_lines = "") const;
+};
+
+/// A default highlighter that only highlights the user cursor, but doesn't
+/// do any other highlighting.
+class DefaultHighlighter : public Highlighter {
+public:
+  llvm::StringRef GetName() const override { return "none"; }
+
+  void Highlight(const HighlightStyle &options, llvm::StringRef line,
+                 llvm::Optional<size_t> cursor_pos,
+                 llvm::StringRef previous_lines, Stream &s) const override;
+};
+
+/// Manages the available highlighters.
+class HighlighterManager {
+  DefaultHighlighter m_default;
+
+public:
+  /// Queries all known highlighter for one that can highlight some source code.
+  /// \param language_type
+  ///     The language type that the caller thinks the source code was given in.
+  /// \param path
+  ///     The path to the file the source code is from. Used as a fallback when
+  ///     the user can't provide a language.
+  /// \return
+  ///     The highlighter that wants to highlight the source code. Could be an
+  ///     empty highlighter that does nothing.
+  const Highlighter &getHighlighterFor(lldb::LanguageType language_type,
+                                       llvm::StringRef path) const;
+  const Highlighter &getDefaultHighlighter() const { return m_default; }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Highlighter_h_
diff --git a/linux-x64/clang/include/lldb/Core/IOHandler.h b/linux-x64/clang/include/lldb/Core/IOHandler.h
new file mode 100644
index 0000000..b718067
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/IOHandler.h
@@ -0,0 +1,592 @@
+//===-- IOHandler.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_IOHandler_h_
+#define liblldb_IOHandler_h_
+
+#include "lldb/Core/ValueObjectList.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Flags.h"
+#include "lldb/Utility/Predicate.h"
+#include "lldb/Utility/Reproducer.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <memory>
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include <stdint.h>
+#include <stdio.h>
+
+namespace lldb_private {
+class Debugger;
+}
+
+namespace curses {
+class Application;
+typedef std::unique_ptr<Application> ApplicationAP;
+} // namespace curses
+
+namespace lldb_private {
+
+class IOHandler {
+public:
+  enum class Type {
+    CommandInterpreter,
+    CommandList,
+    Confirm,
+    Curses,
+    Expression,
+    REPL,
+    ProcessIO,
+    PythonInterpreter,
+    PythonCode,
+    Other
+  };
+
+  IOHandler(Debugger &debugger, IOHandler::Type type);
+
+  IOHandler(Debugger &debugger, IOHandler::Type type,
+            const lldb::StreamFileSP &input_sp,
+            const lldb::StreamFileSP &output_sp,
+            const lldb::StreamFileSP &error_sp, uint32_t flags,
+            repro::DataRecorder *data_recorder);
+
+  virtual ~IOHandler();
+
+  // Each IOHandler gets to run until it is done. It should read data from the
+  // "in" and place output into "out" and "err and return when done.
+  virtual void Run() = 0;
+
+  // Called when an input reader should relinquish its control so another can
+  // be pushed onto the IO handler stack, or so the current IO handler can pop
+  // itself off the stack
+
+  virtual void Cancel() = 0;
+
+  // Called when CTRL+C is pressed which usually causes
+  // Debugger::DispatchInputInterrupt to be called.
+
+  virtual bool Interrupt() = 0;
+
+  virtual void GotEOF() = 0;
+
+  virtual bool IsActive() { return m_active && !m_done; }
+
+  virtual void SetIsDone(bool b) { m_done = b; }
+
+  virtual bool GetIsDone() { return m_done; }
+
+  Type GetType() const { return m_type; }
+
+  virtual void Activate() { m_active = true; }
+
+  virtual void Deactivate() { m_active = false; }
+
+  virtual const char *GetPrompt() {
+    // Prompt support isn't mandatory
+    return nullptr;
+  }
+
+  virtual bool SetPrompt(llvm::StringRef prompt) {
+    // Prompt support isn't mandatory
+    return false;
+  }
+  bool SetPrompt(const char *) = delete;
+
+  virtual ConstString GetControlSequence(char ch) { return ConstString(); }
+
+  virtual const char *GetCommandPrefix() { return nullptr; }
+
+  virtual const char *GetHelpPrologue() { return nullptr; }
+
+  int GetInputFD();
+
+  int GetOutputFD();
+
+  int GetErrorFD();
+
+  FILE *GetInputFILE();
+
+  FILE *GetOutputFILE();
+
+  FILE *GetErrorFILE();
+
+  lldb::StreamFileSP &GetInputStreamFile();
+
+  lldb::StreamFileSP &GetOutputStreamFile();
+
+  lldb::StreamFileSP &GetErrorStreamFile();
+
+  Debugger &GetDebugger() { return m_debugger; }
+
+  void *GetUserData() { return m_user_data; }
+
+  void SetUserData(void *user_data) { m_user_data = user_data; }
+
+  Flags &GetFlags() { return m_flags; }
+
+  const Flags &GetFlags() const { return m_flags; }
+
+  /// Check if the input is being supplied interactively by a user
+  ///
+  /// This will return true if the input stream is a terminal (tty or
+  /// pty) and can cause IO handlers to do different things (like
+  /// for a confirmation when deleting all breakpoints).
+  bool GetIsInteractive();
+
+  /// Check if the input is coming from a real terminal.
+  ///
+  /// A real terminal has a valid size with a certain number of rows
+  /// and columns. If this function returns true, then terminal escape
+  /// sequences are expected to work (cursor movement escape sequences,
+  /// clearing lines, etc).
+  bool GetIsRealTerminal();
+
+  void SetPopped(bool b);
+
+  void WaitForPop();
+
+  virtual void PrintAsync(Stream *stream, const char *s, size_t len) {
+    stream->Write(s, len);
+    stream->Flush();
+  }
+
+protected:
+  Debugger &m_debugger;
+  lldb::StreamFileSP m_input_sp;
+  lldb::StreamFileSP m_output_sp;
+  lldb::StreamFileSP m_error_sp;
+  repro::DataRecorder *m_data_recorder;
+  Predicate<bool> m_popped;
+  Flags m_flags;
+  Type m_type;
+  void *m_user_data;
+  bool m_done;
+  bool m_active;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(IOHandler);
+};
+
+/// A delegate class for use with IOHandler subclasses.
+///
+/// The IOHandler delegate is designed to be mixed into classes so
+/// they can use an IOHandler subclass to fetch input and notify the
+/// object that inherits from this delegate class when a token is
+/// received.
+class IOHandlerDelegate {
+public:
+  enum class Completion { None, LLDBCommand, Expression };
+
+  IOHandlerDelegate(Completion completion = Completion::None)
+      : m_completion(completion) {}
+
+  virtual ~IOHandlerDelegate() = default;
+
+  virtual void IOHandlerActivated(IOHandler &io_handler, bool interactive) {}
+
+  virtual void IOHandlerDeactivated(IOHandler &io_handler) {}
+
+  virtual int IOHandlerComplete(IOHandler &io_handler, const char *current_line,
+                                const char *cursor, const char *last_char,
+                                int skip_first_n_matches, int max_matches,
+                                StringList &matches, StringList &descriptions);
+
+  virtual const char *IOHandlerGetFixIndentationCharacters() { return nullptr; }
+
+  /// Called when a new line is created or one of an identified set of
+  /// indentation characters is typed.
+  ///
+  /// This function determines how much indentation should be added
+  /// or removed to match the recommended amount for the final line.
+  ///
+  /// \param[in] io_handler
+  ///     The IOHandler that responsible for input.
+  ///
+  /// \param[in] lines
+  ///     The current input up to the line to be corrected.  Lines
+  ///     following the line containing the cursor are not included.
+  ///
+  /// \param[in] cursor_position
+  ///     The number of characters preceding the cursor on the final
+  ///     line at the time.
+  ///
+  /// \return
+  ///     Returns an integer describing the number of spaces needed
+  ///     to correct the indentation level.  Positive values indicate
+  ///     that spaces should be added, while negative values represent
+  ///     spaces that should be removed.
+  virtual int IOHandlerFixIndentation(IOHandler &io_handler,
+                                      const StringList &lines,
+                                      int cursor_position) {
+    return 0;
+  }
+
+  /// Called when a line or lines have been retrieved.
+  ///
+  /// This function can handle the current line and possibly call
+  /// IOHandler::SetIsDone(true) when the IO handler is done like when
+  /// "quit" is entered as a command, of when an empty line is
+  /// received. It is up to the delegate to determine when a line
+  /// should cause a IOHandler to exit.
+  virtual void IOHandlerInputComplete(IOHandler &io_handler,
+                                      std::string &data) = 0;
+
+  virtual void IOHandlerInputInterrupted(IOHandler &io_handler,
+                                         std::string &data) {}
+
+  /// Called to determine whether typing enter after the last line in
+  /// \a lines should end input.  This function will not be called on
+  /// IOHandler objects that are getting single lines.
+  /// \param[in] io_handler
+  ///     The IOHandler that responsible for updating the lines.
+  ///
+  /// \param[in] lines
+  ///     The current multi-line content.  May be altered to provide
+  ///     alternative input when complete.
+  ///
+  /// \return
+  ///     Return an boolean to indicate whether input is complete,
+  ///     true indicates that no additional input is necessary, while
+  ///     false indicates that more input is required.
+  virtual bool IOHandlerIsInputComplete(IOHandler &io_handler,
+                                        StringList &lines) {
+    // Impose no requirements for input to be considered complete.  subclasses
+    // should do something more intelligent.
+    return true;
+  }
+
+  virtual ConstString IOHandlerGetControlSequence(char ch) {
+    return ConstString();
+  }
+
+  virtual const char *IOHandlerGetCommandPrefix() { return nullptr; }
+
+  virtual const char *IOHandlerGetHelpPrologue() { return nullptr; }
+
+  // Intercept the IOHandler::Interrupt() calls and do something.
+  //
+  // Return true if the interrupt was handled, false if the IOHandler should
+  // continue to try handle the interrupt itself.
+  virtual bool IOHandlerInterrupt(IOHandler &io_handler) { return false; }
+
+protected:
+  Completion m_completion; // Support for common builtin completions
+};
+
+// IOHandlerDelegateMultiline
+//
+// A IOHandlerDelegate that handles terminating multi-line input when
+// the last line is equal to "end_line" which is specified in the constructor.
+class IOHandlerDelegateMultiline : public IOHandlerDelegate {
+public:
+  IOHandlerDelegateMultiline(const char *end_line,
+                             Completion completion = Completion::None)
+      : IOHandlerDelegate(completion),
+        m_end_line((end_line && end_line[0]) ? end_line : "") {}
+
+  ~IOHandlerDelegateMultiline() override = default;
+
+  ConstString IOHandlerGetControlSequence(char ch) override {
+    if (ch == 'd')
+      return ConstString(m_end_line + "\n");
+    return ConstString();
+  }
+
+  bool IOHandlerIsInputComplete(IOHandler &io_handler,
+                                StringList &lines) override {
+    // Determine whether the end of input signal has been entered
+    const size_t num_lines = lines.GetSize();
+    if (num_lines > 0 && lines[num_lines - 1] == m_end_line) {
+      // Remove the terminal line from "lines" so it doesn't appear in the
+      // resulting input and return true to indicate we are done getting lines
+      lines.PopBack();
+      return true;
+    }
+    return false;
+  }
+
+protected:
+  const std::string m_end_line;
+};
+
+class IOHandlerEditline : public IOHandler {
+public:
+  IOHandlerEditline(Debugger &debugger, IOHandler::Type type,
+                    const char *editline_name, // Used for saving history files
+                    llvm::StringRef prompt, llvm::StringRef continuation_prompt,
+                    bool multi_line, bool color_prompts,
+                    uint32_t line_number_start, // If non-zero show line numbers
+                                                // starting at
+                                                // 'line_number_start'
+                    IOHandlerDelegate &delegate,
+                    repro::DataRecorder *data_recorder);
+
+  IOHandlerEditline(Debugger &debugger, IOHandler::Type type,
+                    const lldb::StreamFileSP &input_sp,
+                    const lldb::StreamFileSP &output_sp,
+                    const lldb::StreamFileSP &error_sp, uint32_t flags,
+                    const char *editline_name, // Used for saving history files
+                    llvm::StringRef prompt, llvm::StringRef continuation_prompt,
+                    bool multi_line, bool color_prompts,
+                    uint32_t line_number_start, // If non-zero show line numbers
+                                                // starting at
+                                                // 'line_number_start'
+                    IOHandlerDelegate &delegate,
+                    repro::DataRecorder *data_recorder);
+
+  IOHandlerEditline(Debugger &, IOHandler::Type, const char *, const char *,
+                    const char *, bool, bool, uint32_t,
+                    IOHandlerDelegate &) = delete;
+
+  IOHandlerEditline(Debugger &, IOHandler::Type, const lldb::StreamFileSP &,
+                    const lldb::StreamFileSP &, const lldb::StreamFileSP &,
+                    uint32_t, const char *, const char *, const char *, bool,
+                    bool, uint32_t, IOHandlerDelegate &) = delete;
+
+  ~IOHandlerEditline() override;
+
+  void Run() override;
+
+  void Cancel() override;
+
+  bool Interrupt() override;
+
+  void GotEOF() override;
+
+  void Activate() override;
+
+  void Deactivate() override;
+
+  ConstString GetControlSequence(char ch) override {
+    return m_delegate.IOHandlerGetControlSequence(ch);
+  }
+
+  const char *GetCommandPrefix() override {
+    return m_delegate.IOHandlerGetCommandPrefix();
+  }
+
+  const char *GetHelpPrologue() override {
+    return m_delegate.IOHandlerGetHelpPrologue();
+  }
+
+  const char *GetPrompt() override;
+
+  bool SetPrompt(llvm::StringRef prompt) override;
+  bool SetPrompt(const char *prompt) = delete;
+
+  const char *GetContinuationPrompt();
+
+  void SetContinuationPrompt(llvm::StringRef prompt);
+  void SetContinuationPrompt(const char *) = delete;
+
+  bool GetLine(std::string &line, bool &interrupted);
+
+  bool GetLines(StringList &lines, bool &interrupted);
+
+  void SetBaseLineNumber(uint32_t line);
+
+  bool GetInterruptExits() { return m_interrupt_exits; }
+
+  void SetInterruptExits(bool b) { m_interrupt_exits = b; }
+
+  const StringList *GetCurrentLines() const { return m_current_lines_ptr; }
+
+  uint32_t GetCurrentLineIndex() const;
+
+  void PrintAsync(Stream *stream, const char *s, size_t len) override;
+
+private:
+#ifndef LLDB_DISABLE_LIBEDIT
+  static bool IsInputCompleteCallback(Editline *editline, StringList &lines,
+                                      void *baton);
+
+  static int FixIndentationCallback(Editline *editline, const StringList &lines,
+                                    int cursor_position, void *baton);
+
+  static int AutoCompleteCallback(const char *current_line, const char *cursor,
+                                  const char *last_char,
+                                  int skip_first_n_matches, int max_matches,
+                                  StringList &matches, StringList &descriptions,
+                                  void *baton);
+#endif
+
+protected:
+#ifndef LLDB_DISABLE_LIBEDIT
+  std::unique_ptr<Editline> m_editline_up;
+#endif
+  IOHandlerDelegate &m_delegate;
+  std::string m_prompt;
+  std::string m_continuation_prompt;
+  StringList *m_current_lines_ptr;
+  uint32_t m_base_line_number; // If non-zero, then show line numbers in prompt
+  uint32_t m_curr_line_idx;
+  bool m_multi_line;
+  bool m_color_prompts;
+  bool m_interrupt_exits;
+  bool m_editing; // Set to true when fetching a line manually (not using
+                  // libedit)
+};
+
+// The order of base classes is important. Look at the constructor of
+// IOHandlerConfirm to see how.
+class IOHandlerConfirm : public IOHandlerDelegate, public IOHandlerEditline {
+public:
+  IOHandlerConfirm(Debugger &debugger, llvm::StringRef prompt,
+                   bool default_response);
+
+  ~IOHandlerConfirm() override;
+
+  bool GetResponse() const { return m_user_response; }
+
+  int IOHandlerComplete(IOHandler &io_handler, const char *current_line,
+                        const char *cursor, const char *last_char,
+                        int skip_first_n_matches, int max_matches,
+                        StringList &matches, StringList &descriptions) override;
+
+  void IOHandlerInputComplete(IOHandler &io_handler,
+                              std::string &data) override;
+
+protected:
+  const bool m_default_response;
+  bool m_user_response;
+};
+
+class IOHandlerCursesGUI : public IOHandler {
+public:
+  IOHandlerCursesGUI(Debugger &debugger);
+
+  ~IOHandlerCursesGUI() override;
+
+  void Run() override;
+
+  void Cancel() override;
+
+  bool Interrupt() override;
+
+  void GotEOF() override;
+
+  void Activate() override;
+
+  void Deactivate() override;
+
+protected:
+  curses::ApplicationAP m_app_ap;
+};
+
+class IOHandlerCursesValueObjectList : public IOHandler {
+public:
+  IOHandlerCursesValueObjectList(Debugger &debugger,
+                                 ValueObjectList &valobj_list);
+
+  ~IOHandlerCursesValueObjectList() override;
+
+  void Run() override;
+
+  void GotEOF() override;
+
+protected:
+  ValueObjectList m_valobj_list;
+};
+
+class IOHandlerStack {
+public:
+  IOHandlerStack() : m_stack(), m_mutex(), m_top(nullptr) {}
+
+  ~IOHandlerStack() = default;
+
+  size_t GetSize() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_stack.size();
+  }
+
+  void Push(const lldb::IOHandlerSP &sp) {
+    if (sp) {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      sp->SetPopped(false);
+      m_stack.push_back(sp);
+      // Set m_top the non-locking IsTop() call
+      m_top = sp.get();
+    }
+  }
+
+  bool IsEmpty() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_stack.empty();
+  }
+
+  lldb::IOHandlerSP Top() {
+    lldb::IOHandlerSP sp;
+    {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      if (!m_stack.empty())
+        sp = m_stack.back();
+    }
+    return sp;
+  }
+
+  void Pop() {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    if (!m_stack.empty()) {
+      lldb::IOHandlerSP sp(m_stack.back());
+      m_stack.pop_back();
+      sp->SetPopped(true);
+    }
+    // Set m_top the non-locking IsTop() call
+
+    m_top = (m_stack.empty() ? nullptr : m_stack.back().get());
+  }
+
+  std::recursive_mutex &GetMutex() { return m_mutex; }
+
+  bool IsTop(const lldb::IOHandlerSP &io_handler_sp) const {
+    return m_top == io_handler_sp.get();
+  }
+
+  bool CheckTopIOHandlerTypes(IOHandler::Type top_type,
+                              IOHandler::Type second_top_type) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    const size_t num_io_handlers = m_stack.size();
+    return (num_io_handlers >= 2 &&
+            m_stack[num_io_handlers - 1]->GetType() == top_type &&
+            m_stack[num_io_handlers - 2]->GetType() == second_top_type);
+  }
+
+  ConstString GetTopIOHandlerControlSequence(char ch) {
+    return ((m_top != nullptr) ? m_top->GetControlSequence(ch) : ConstString());
+  }
+
+  const char *GetTopIOHandlerCommandPrefix() {
+    return ((m_top != nullptr) ? m_top->GetCommandPrefix() : nullptr);
+  }
+
+  const char *GetTopIOHandlerHelpPrologue() {
+    return ((m_top != nullptr) ? m_top->GetHelpPrologue() : nullptr);
+  }
+
+  void PrintAsync(Stream *stream, const char *s, size_t len);
+
+protected:
+  typedef std::vector<lldb::IOHandlerSP> collection;
+  collection m_stack;
+  mutable std::recursive_mutex m_mutex;
+  IOHandler *m_top;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(IOHandlerStack);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_IOHandler_h_
diff --git a/linux-x64/clang/include/lldb/Core/IOStreamMacros.h b/linux-x64/clang/include/lldb/Core/IOStreamMacros.h
new file mode 100644
index 0000000..45bde88
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/IOStreamMacros.h
@@ -0,0 +1,41 @@
+//===-- IOStreamMacros.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_IOStreamMacros_h_
+#define liblldb_IOStreamMacros_h_
+#if defined(__cplusplus)
+
+#include <iomanip>
+
+#define RAW_HEXBASE std::setfill('0') << std::hex << std::right
+#define HEXBASE '0' << 'x' << RAW_HEXBASE
+#define RAWHEX8(x) RAW_HEXBASE << std::setw(2) << ((uint32_t)(x))
+#define RAWHEX16 RAW_HEXBASE << std::setw(4)
+#define RAWHEX32 RAW_HEXBASE << std::setw(8)
+#define RAWHEX64 RAW_HEXBASE << std::setw(16)
+#define HEX8(x) HEXBASE << std::setw(2) << ((uint32_t)(x))
+#define HEX16 HEXBASE << std::setw(4)
+#define HEX32 HEXBASE << std::setw(8)
+#define HEX64 HEXBASE << std::setw(16)
+#define RAW_HEX(x) RAW_HEXBASE << std::setw(sizeof(x) * 2) << (x)
+#define HEX(x) HEXBASE << std::setw(sizeof(x) * 2) << (x)
+#define HEX_SIZE(x, sz) HEXBASE << std::setw((sz)) << (x)
+#define STRING_WIDTH(w) std::setfill(' ') << std::setw(w)
+#define LEFT_STRING_WIDTH(s, w)                                                \
+  std::left << std::setfill(' ') << std::setw(w) << (s) << std::right
+#define DECIMAL std::dec << std::setfill(' ')
+#define DECIMAL_WIDTH(w) DECIMAL << std::setw(w)
+//#define FLOAT(n, d)       std::setfill(' ') << std::setw((n)+(d)+1) <<
+//std::setprecision(d) << std::showpoint << std::fixed
+#define INDENT_WITH_SPACES(iword_idx)                                          \
+  std::setfill(' ') << std::setw((iword_idx)) << ""
+#define INDENT_WITH_TABS(iword_idx)                                            \
+  std::setfill('\t') << std::setw((iword_idx)) << ""
+
+#endif // #if defined(__cplusplus)
+#endif // liblldb_IOStreamMacros_h_
diff --git a/linux-x64/clang/include/lldb/Core/LoadedModuleInfoList.h b/linux-x64/clang/include/lldb/Core/LoadedModuleInfoList.h
new file mode 100644
index 0000000..f7f8360
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/LoadedModuleInfoList.h
@@ -0,0 +1,119 @@
+//===-- LoadedModuleInfoList.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_LoadedModuleInfoList_h_
+#define liblldb_LoadedModuleInfoList_h_
+
+
+#include <cassert>
+#include <string>
+#include <vector>
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-private-forward.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+class LoadedModuleInfoList {
+public:
+  class LoadedModuleInfo {
+  public:
+    enum e_data_point {
+      e_has_name = 0,
+      e_has_base,
+      e_has_dynamic,
+      e_has_link_map,
+      e_num
+    };
+
+    LoadedModuleInfo() {
+      for (uint32_t i = 0; i < e_num; ++i)
+        m_has[i] = false;
+    };
+
+    void set_name(const std::string &name) {
+      m_name = name;
+      m_has[e_has_name] = true;
+    }
+    bool get_name(std::string &out) const {
+      out = m_name;
+      return m_has[e_has_name];
+    }
+
+    void set_base(const lldb::addr_t base) {
+      m_base = base;
+      m_has[e_has_base] = true;
+    }
+    bool get_base(lldb::addr_t &out) const {
+      out = m_base;
+      return m_has[e_has_base];
+    }
+
+    void set_base_is_offset(bool is_offset) { m_base_is_offset = is_offset; }
+    bool get_base_is_offset(bool &out) const {
+      out = m_base_is_offset;
+      return m_has[e_has_base];
+    }
+
+    void set_link_map(const lldb::addr_t addr) {
+      m_link_map = addr;
+      m_has[e_has_link_map] = true;
+    }
+    bool get_link_map(lldb::addr_t &out) const {
+      out = m_link_map;
+      return m_has[e_has_link_map];
+    }
+
+    void set_dynamic(const lldb::addr_t addr) {
+      m_dynamic = addr;
+      m_has[e_has_dynamic] = true;
+    }
+    bool get_dynamic(lldb::addr_t &out) const {
+      out = m_dynamic;
+      return m_has[e_has_dynamic];
+    }
+
+    bool has_info(e_data_point datum) const {
+      assert(datum < e_num);
+      return m_has[datum];
+    }
+
+    bool operator==(LoadedModuleInfo const &rhs) const {
+      if (e_num != rhs.e_num)
+        return false;
+
+      for (size_t i = 0; i < e_num; ++i) {
+        if (m_has[i] != rhs.m_has[i])
+          return false;
+      }
+
+      return (m_base == rhs.m_base) && (m_link_map == rhs.m_link_map) &&
+             (m_dynamic == rhs.m_dynamic) && (m_name == rhs.m_name);
+    }
+
+  protected:
+    bool m_has[e_num];
+    std::string m_name;
+    lldb::addr_t m_link_map;
+    lldb::addr_t m_base;
+    bool m_base_is_offset;
+    lldb::addr_t m_dynamic;
+  };
+
+  LoadedModuleInfoList() : m_list(), m_link_map(LLDB_INVALID_ADDRESS) {}
+
+  void add(const LoadedModuleInfo &mod) { m_list.push_back(mod); }
+
+  void clear() { m_list.clear(); }
+
+  std::vector<LoadedModuleInfo> m_list;
+  lldb::addr_t m_link_map;
+};
+} // namespace lldb_private
+
+#endif // liblldb_LoadedModuleInfoList_h_
diff --git a/linux-x64/clang/include/lldb/Core/Mangled.h b/linux-x64/clang/include/lldb/Core/Mangled.h
new file mode 100644
index 0000000..fb52afd
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Mangled.h
@@ -0,0 +1,296 @@
+//===-- Mangled.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Mangled_h_
+#define liblldb_Mangled_h_
+#if defined(__cplusplus)
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+
+#include "lldb/Utility/ConstString.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include <memory>
+#include <stddef.h>
+
+namespace lldb_private {
+
+/// \class Mangled Mangled.h "lldb/Core/Mangled.h"
+/// A class that handles mangled names.
+///
+/// Designed to handle mangled names. The demangled version of any names will
+/// be computed when the demangled name is accessed through the Demangled()
+/// acccessor. This class can also tokenize the demangled version of the name
+/// for powerful searches. Functions and symbols could make instances of this
+/// class for their mangled names. Uniqued string pools are used for the
+/// mangled, demangled, and token string values to allow for faster
+/// comparisons and for efficient memory use.
+class Mangled {
+public:
+  enum NamePreference {
+    ePreferMangled,
+    ePreferDemangled,
+    ePreferDemangledWithoutArguments
+  };
+
+  enum ManglingScheme {
+    eManglingSchemeNone = 0,
+    eManglingSchemeMSVC,
+    eManglingSchemeItanium
+  };
+
+  /// Default constructor.
+  ///
+  /// Initialize with both mangled and demangled names empty.
+  Mangled();
+
+  /// Construct with name.
+  ///
+  /// Constructor with an optional string and a boolean indicating if it is
+  /// the mangled version.
+  ///
+  /// \param[in] name
+  ///     The already const name to copy into this object.
+  ///
+  /// \param[in] is_mangled
+  ///     If \b true then \a name is a mangled name, if \b false then
+  ///     \a name is demangled.
+  Mangled(ConstString name, bool is_mangled);
+  Mangled(llvm::StringRef name, bool is_mangled);
+
+  /// Construct with name.
+  ///
+  /// Constructor with an optional string and auto-detect if \a name is
+  /// mangled or not.
+  ///
+  /// \param[in] name
+  ///     The already const name to copy into this object.
+  explicit Mangled(ConstString name);
+
+  explicit Mangled(llvm::StringRef name);
+
+  /// Destructor
+  ///
+  /// Releases its ref counts on the mangled and demangled strings that live
+  /// in the global string pool.
+  ~Mangled();
+
+  /// Convert to pointer operator.
+  ///
+  /// This allows code to check a Mangled object to see if it contains a valid
+  /// mangled name using code such as:
+  ///
+  /// \code
+  /// Mangled mangled(...);
+  /// if (mangled)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     A pointer to this object if either the mangled or unmangled
+  ///     name is set, NULL otherwise.
+  operator void *() const;
+
+  /// Logical NOT operator.
+  ///
+  /// This allows code to check a Mangled object to see if it contains an
+  /// empty mangled name using code such as:
+  ///
+  /// \code
+  /// Mangled mangled(...);
+  /// if (!mangled)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     Returns \b true if the object has an empty mangled and
+  ///     unmangled name, \b false otherwise.
+  bool operator!() const;
+
+  /// Clear the mangled and demangled values.
+  void Clear();
+
+  /// Compare the mangled string values
+  ///
+  /// Compares the Mangled::GetName() string in \a lhs and \a rhs.
+  ///
+  /// \param[in] lhs
+  ///     A const reference to the Left Hand Side object to compare.
+  ///
+  /// \param[in] rhs
+  ///     A const reference to the Right Hand Side object to compare.
+  ///
+  /// \return
+  ///     \li -1 if \a lhs is less than \a rhs
+  ///     \li 0 if \a lhs is equal to \a rhs
+  ///     \li 1 if \a lhs is greater than \a rhs
+  static int Compare(const Mangled &lhs, const Mangled &rhs);
+
+  /// Dump a description of this object to a Stream \a s.
+  ///
+  /// Dump a Mangled object to stream \a s. We don't force our demangled name
+  /// to be computed currently (we don't use the accessor).
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s) const;
+
+  /// Dump a debug description of this object to a Stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void DumpDebug(Stream *s) const;
+
+  /// Demangled name get accessor.
+  ///
+  /// \return
+  ///     A const reference to the demangled name string object.
+  ConstString GetDemangledName(lldb::LanguageType language) const;
+
+  /// Display demangled name get accessor.
+  ///
+  /// \return
+  ///     A const reference to the display demangled name string object.
+  ConstString GetDisplayDemangledName(lldb::LanguageType language) const;
+
+  void SetDemangledName(ConstString name) { m_demangled = name; }
+
+  void SetMangledName(ConstString name) { m_mangled = name; }
+
+  /// Mangled name get accessor.
+  ///
+  /// \return
+  ///     A reference to the mangled name string object.
+  ConstString &GetMangledName() { return m_mangled; }
+
+  /// Mangled name get accessor.
+  ///
+  /// \return
+  ///     A const reference to the mangled name string object.
+  ConstString GetMangledName() const { return m_mangled; }
+
+  /// Best name get accessor.
+  ///
+  /// \param[in] preference
+  ///     Which name would you prefer to get?
+  ///
+  /// \return
+  ///     A const reference to the preferred name string object if this
+  ///     object has a valid name of that kind, else a const reference to the
+  ///     other name is returned.
+  ConstString GetName(lldb::LanguageType language,
+                      NamePreference preference = ePreferDemangled) const;
+
+  /// Check if "name" matches either the mangled or demangled name.
+  ///
+  /// \param[in] name
+  ///     A name to match against both strings.
+  ///
+  /// \return
+  ///     \b True if \a name matches either name, \b false otherwise.
+  bool NameMatches(ConstString name, lldb::LanguageType language) const {
+    if (m_mangled == name)
+      return true;
+    return GetDemangledName(language) == name;
+  }
+  bool NameMatches(const RegularExpression &regex,
+                   lldb::LanguageType language) const;
+
+  /// Get the memory cost of this object.
+  ///
+  /// Return the size in bytes that this object takes in memory. This returns
+  /// the size in bytes of this object, not any shared string values it may
+  /// refer to.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  size_t MemorySize() const;
+
+  /// Set the string value in this object.
+  ///
+  /// If \a is_mangled is \b true, then the mangled named is set to \a name,
+  /// else the demangled name is set to \a name.
+  ///
+  /// \param[in] name
+  ///     The already const version of the name for this object.
+  ///
+  /// \param[in] is_mangled
+  ///     If \b true then \a name is a mangled name, if \b false then
+  ///     \a name is demangled.
+  void SetValue(ConstString name, bool is_mangled);
+
+  /// Set the string value in this object.
+  ///
+  /// This version auto detects if the string is mangled by inspecting the
+  /// string value and looking for common mangling prefixes.
+  ///
+  /// \param[in] name
+  ///     The already const version of the name for this object.
+  void SetValue(ConstString name);
+
+  /// Try to guess the language from the mangling.
+  ///
+  /// For a mangled name to have a language it must have both a mangled and a
+  /// demangled name and it can be guessed from the mangling what the language
+  /// is.  Note: this will return C++ for any language that uses Itanium ABI
+  /// mangling.
+  ///
+  /// Standard C function names will return eLanguageTypeUnknown because they
+  /// aren't mangled and it isn't clear what language the name represents
+  /// (there will be no mangled name).
+  ///
+  /// \return
+  ///     The language for the mangled/demangled name, eLanguageTypeUnknown
+  ///     if there is no mangled or demangled counterpart.
+  lldb::LanguageType GuessLanguage() const;
+
+  /// Function signature for filtering mangled names.
+  using SkipMangledNameFn = bool(llvm::StringRef, ManglingScheme);
+
+  /// Trigger explicit demangling to obtain rich mangling information. This is
+  /// optimized for batch processing while populating a name index. To get the
+  /// pure demangled name string for a single entity, use GetDemangledName()
+  /// instead.
+  ///
+  /// For names that match the Itanium mangling scheme, this uses LLVM's
+  /// ItaniumPartialDemangler. All other names fall back to LLDB's builtin
+  /// parser currently.
+  ///
+  /// This function is thread-safe when used with different \a context
+  /// instances in different threads.
+  ///
+  /// \param[in] context
+  ///     The context for this function. A single instance can be stack-
+  ///     allocated in the caller's frame and used for multiple calls.
+  ///
+  /// \param[in] skip_mangled_name
+  ///     A filtering function for skipping entities based on name and mangling
+  ///     scheme. This can be null if unused.
+  ///
+  /// \return
+  ///     True on success, false otherwise.
+  bool DemangleWithRichManglingInfo(RichManglingContext &context,
+                                    SkipMangledNameFn *skip_mangled_name);
+
+private:
+  /// Mangled member variables.
+  ConstString m_mangled;           ///< The mangled version of the name
+  mutable ConstString m_demangled; ///< Mutable so we can get it on demand with
+                                   ///a const version of this object
+};
+
+Stream &operator<<(Stream &s, const Mangled &obj);
+
+} // namespace lldb_private
+
+#endif // #if defined(__cplusplus)
+#endif // liblldb_Mangled_h_
diff --git a/linux-x64/clang/include/lldb/Core/MappedHash.h b/linux-x64/clang/include/lldb/Core/MappedHash.h
new file mode 100644
index 0000000..7dc9b5b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/MappedHash.h
@@ -0,0 +1,310 @@
+//===-- MappedHash.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_MappedHash_h_
+#define liblldb_MappedHash_h_
+
+#include <assert.h>
+#include <stdint.h>
+
+#include <algorithm>
+#include <functional>
+#include <map>
+#include <vector>
+
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/Stream.h"
+#include "llvm/Support/DJB.h"
+
+class MappedHash {
+public:
+  enum HashFunctionType {
+    eHashFunctionDJB = 0u // Daniel J Bernstein hash function that is also used
+                          // by the ELF GNU_HASH sections
+  };
+
+  static uint32_t HashString(uint32_t hash_function, llvm::StringRef s) {
+    switch (hash_function) {
+    case MappedHash::eHashFunctionDJB:
+      return llvm::djbHash(s);
+
+    default:
+      break;
+    }
+    llvm_unreachable("Invalid hash function index");
+  }
+
+  static const uint32_t HASH_MAGIC = 0x48415348u;
+  static const uint32_t HASH_CIGAM = 0x48534148u;
+
+  template <typename T> struct Header {
+    typedef T HeaderData;
+
+    uint32_t
+        magic; // HASH_MAGIC or HASH_CIGAM magic value to allow endian detection
+    uint16_t version;         // Version number
+    uint16_t hash_function;   // The hash function enumeration that was used
+    uint32_t bucket_count;    // The number of buckets in this hash table
+    uint32_t hashes_count;    // The total number of unique hash values and hash
+                              // data offsets in this table
+    uint32_t header_data_len; // The size in bytes of the "header_data" template
+                              // member below
+    HeaderData header_data;   //
+
+    Header()
+        : magic(HASH_MAGIC), version(1), hash_function(eHashFunctionDJB),
+          bucket_count(0), hashes_count(0), header_data_len(sizeof(T)),
+          header_data() {}
+
+    virtual ~Header() = default;
+
+    size_t GetByteSize() const {
+      return sizeof(magic) + sizeof(version) + sizeof(hash_function) +
+             sizeof(bucket_count) + sizeof(hashes_count) +
+             sizeof(header_data_len) + header_data_len;
+    }
+
+    virtual size_t GetByteSize(const HeaderData &header_data) = 0;
+
+    void SetHeaderDataByteSize(uint32_t header_data_byte_size) {
+      header_data_len = header_data_byte_size;
+    }
+
+    void Dump(lldb_private::Stream &s) {
+      s.Printf("header.magic              = 0x%8.8x\n", magic);
+      s.Printf("header.version            = 0x%4.4x\n", version);
+      s.Printf("header.hash_function      = 0x%4.4x\n", hash_function);
+      s.Printf("header.bucket_count       = 0x%8.8x %u\n", bucket_count,
+               bucket_count);
+      s.Printf("header.hashes_count       = 0x%8.8x %u\n", hashes_count,
+               hashes_count);
+      s.Printf("header.header_data_len    = 0x%8.8x %u\n", header_data_len,
+               header_data_len);
+    }
+
+    virtual lldb::offset_t Read(lldb_private::DataExtractor &data,
+                                lldb::offset_t offset) {
+      if (data.ValidOffsetForDataOfSize(
+              offset, sizeof(magic) + sizeof(version) + sizeof(hash_function) +
+                          sizeof(bucket_count) + sizeof(hashes_count) +
+                          sizeof(header_data_len))) {
+        magic = data.GetU32(&offset);
+        if (magic != HASH_MAGIC) {
+          if (magic == HASH_CIGAM) {
+            switch (data.GetByteOrder()) {
+            case lldb::eByteOrderBig:
+              data.SetByteOrder(lldb::eByteOrderLittle);
+              break;
+            case lldb::eByteOrderLittle:
+              data.SetByteOrder(lldb::eByteOrderBig);
+              break;
+            default:
+              return LLDB_INVALID_OFFSET;
+            }
+          } else {
+            // Magic bytes didn't match
+            version = 0;
+            return LLDB_INVALID_OFFSET;
+          }
+        }
+
+        version = data.GetU16(&offset);
+        if (version != 1) {
+          // Unsupported version
+          return LLDB_INVALID_OFFSET;
+        }
+        hash_function = data.GetU16(&offset);
+        if (hash_function == 4)
+          hash_function = 0; // Deal with pre-release version of this table...
+        bucket_count = data.GetU32(&offset);
+        hashes_count = data.GetU32(&offset);
+        header_data_len = data.GetU32(&offset);
+        return offset;
+      }
+      return LLDB_INVALID_OFFSET;
+    }
+    //
+    //        // Returns a buffer that contains a serialized version of this
+    //        table
+    //        // that must be freed with free().
+    //        virtual void *
+    //        Write (int fd);
+  };
+
+  // A class for reading and using a saved hash table from a block of data
+  // in memory
+  template <typename __KeyType, class __HeaderType, class __HashData>
+  class MemoryTable {
+  public:
+    typedef __HeaderType HeaderType;
+    typedef __KeyType KeyType;
+    typedef __HashData HashData;
+
+    enum Result {
+      eResultKeyMatch = 0u, // The entry was found, key matched and "pair" was
+                            // filled in successfully
+      eResultKeyMismatch =
+          1u, // Bucket hash data collision, but key didn't match
+      eResultEndOfHashData = 2u, // The chain of items for this hash data in
+                                 // this bucket is terminated, search no more
+      eResultError = 3u          // Status parsing the hash data, abort
+    };
+
+    struct Pair {
+      KeyType key;
+      HashData value;
+    };
+
+    MemoryTable(lldb_private::DataExtractor &data)
+        : m_header(), m_hash_indexes(nullptr), m_hash_values(nullptr),
+          m_hash_offsets(nullptr) {
+      lldb::offset_t offset = m_header.Read(data, 0);
+      if (offset != LLDB_INVALID_OFFSET && IsValid()) {
+        m_hash_indexes = (const uint32_t *)data.GetData(
+            &offset, m_header.bucket_count * sizeof(uint32_t));
+        m_hash_values = (const uint32_t *)data.GetData(
+            &offset, m_header.hashes_count * sizeof(uint32_t));
+        m_hash_offsets = (const uint32_t *)data.GetData(
+            &offset, m_header.hashes_count * sizeof(uint32_t));
+      }
+    }
+
+    virtual ~MemoryTable() = default;
+
+    bool IsValid() const {
+      return m_header.version == 1 &&
+             m_header.hash_function == eHashFunctionDJB &&
+             m_header.bucket_count > 0;
+    }
+
+    uint32_t GetHashIndex(uint32_t bucket_idx) const {
+      uint32_t result = UINT32_MAX;
+      if (m_hash_indexes && bucket_idx < m_header.bucket_count)
+        memcpy(&result, m_hash_indexes + bucket_idx, sizeof(uint32_t));
+      return result;
+    }
+
+    uint32_t GetHashValue(uint32_t hash_idx) const {
+      uint32_t result = UINT32_MAX;
+      if (m_hash_values && hash_idx < m_header.hashes_count)
+        memcpy(&result, m_hash_values + hash_idx, sizeof(uint32_t));
+      return result;
+    }
+
+    uint32_t GetHashDataOffset(uint32_t hash_idx) const {
+      uint32_t result = UINT32_MAX;
+      if (m_hash_offsets && hash_idx < m_header.hashes_count)
+        memcpy(&result, m_hash_offsets + hash_idx, sizeof(uint32_t));
+      return result;
+    }
+
+    bool Find(llvm::StringRef name, Pair &pair) const {
+      if (name.empty())
+        return false;
+
+      if (IsValid()) {
+        const uint32_t bucket_count = m_header.bucket_count;
+        const uint32_t hash_count = m_header.hashes_count;
+        const uint32_t hash_value =
+            MappedHash::HashString(m_header.hash_function, name);
+        const uint32_t bucket_idx = hash_value % bucket_count;
+        uint32_t hash_idx = GetHashIndex(bucket_idx);
+        if (hash_idx < hash_count) {
+          for (; hash_idx < hash_count; ++hash_idx) {
+            const uint32_t curr_hash_value = GetHashValue(hash_idx);
+            if (curr_hash_value == hash_value) {
+              lldb::offset_t hash_data_offset = GetHashDataOffset(hash_idx);
+              while (hash_data_offset != UINT32_MAX) {
+                const lldb::offset_t prev_hash_data_offset = hash_data_offset;
+                Result hash_result =
+                    GetHashDataForName(name, &hash_data_offset, pair);
+                // Check the result of getting our hash data
+                switch (hash_result) {
+                case eResultKeyMatch:
+                  return true;
+
+                case eResultKeyMismatch:
+                  if (prev_hash_data_offset == hash_data_offset)
+                    return false;
+                  break;
+
+                case eResultEndOfHashData:
+                  // The last HashData for this key has been reached, stop
+                  // searching
+                  return false;
+                case eResultError:
+                  // Status parsing the hash data, abort
+                  return false;
+                }
+              }
+            }
+            if ((curr_hash_value % bucket_count) != bucket_idx)
+              break;
+          }
+        }
+      }
+      return false;
+    }
+
+    // This method must be implemented in any subclasses. The KeyType is user
+    // specified and must somehow result in a string value. For example, the
+    // KeyType might be a string offset in a string table and subclasses can
+    // store their string table as a member of the subclass and return a valie
+    // "const char *" given a "key". The value could also be a C string
+    // pointer, in which case just returning "key" will suffice.
+    virtual const char *GetStringForKeyType(KeyType key) const = 0;
+
+    virtual bool ReadHashData(uint32_t hash_data_offset,
+                              HashData &hash_data) const = 0;
+
+    // This method must be implemented in any subclasses and it must try to
+    // read one "Pair" at the offset pointed to by the "hash_data_offset_ptr"
+    // parameter. This offset should be updated as bytes are consumed and a
+    // value "Result" enum should be returned. If the "name" matches the full
+    // name for the "pair.key" (which must be filled in by this call), then the
+    // HashData in the pair ("pair.value") should be extracted and filled in
+    // and "eResultKeyMatch" should be returned. If "name" doesn't match this
+    // string for the key, then "eResultKeyMismatch" should be returned and all
+    // data for the current HashData must be consumed or skipped and the
+    // "hash_data_offset_ptr" offset needs to be updated to point to the next
+    // HashData. If the end of the HashData objects for a given hash value have
+    // been reached, then "eResultEndOfHashData" should be returned. If
+    // anything else goes wrong during parsing, return "eResultError" and the
+    // corresponding "Find()" function will be canceled and return false.
+    virtual Result GetHashDataForName(llvm::StringRef name,
+                                      lldb::offset_t *hash_data_offset_ptr,
+                                      Pair &pair) const = 0;
+
+    const HeaderType &GetHeader() { return m_header; }
+
+    void ForEach(
+        std::function<bool(const HashData &hash_data)> const &callback) const {
+      const size_t num_hash_offsets = m_header.hashes_count;
+      for (size_t i = 0; i < num_hash_offsets; ++i) {
+        uint32_t hash_data_offset = GetHashDataOffset(i);
+        if (hash_data_offset != UINT32_MAX) {
+          HashData hash_data;
+          if (ReadHashData(hash_data_offset, hash_data)) {
+            // If the callback returns false, then we are done and should stop
+            if (callback(hash_data) == false)
+              return;
+          }
+        }
+      }
+    }
+
+  protected:
+    // Implementation agnostic information
+    HeaderType m_header;
+    const uint32_t *m_hash_indexes;
+    const uint32_t *m_hash_values;
+    const uint32_t *m_hash_offsets;
+  };
+};
+
+#endif // liblldb_MappedHash_h_
diff --git a/linux-x64/clang/include/lldb/Core/Module.h b/linux-x64/clang/include/lldb/Core/Module.h
new file mode 100644
index 0000000..544895e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Module.h
@@ -0,0 +1,1086 @@
+//===-- Module.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Module_h_
+#define liblldb_Module_h_
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/ModuleSpec.h"
+#include "lldb/Symbol/ObjectFile.h"
+#include "lldb/Symbol/SymbolContextScope.h"
+#include "lldb/Symbol/TypeSystem.h"
+#include "lldb/Target/PathMappingList.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/UUID.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/DenseSet.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Chrono.h"
+
+#include <atomic>
+#include <memory>
+#include <mutex>
+#include <stddef.h>
+#include <stdint.h>
+#include <string>
+#include <vector>
+
+namespace lldb_private {
+class CompilerDeclContext;
+class Function;
+class Log;
+class ObjectFile;
+class RegularExpression;
+class SectionList;
+class Stream;
+class Symbol;
+class SymbolContext;
+class SymbolContextList;
+class SymbolFile;
+class SymbolVendor;
+class Symtab;
+class Target;
+class TypeList;
+class TypeMap;
+class VariableList;
+
+/// \class Module Module.h "lldb/Core/Module.h"
+/// A class that describes an executable image and its associated
+///        object and symbol files.
+///
+/// The module is designed to be able to select a single slice of an
+/// executable image as it would appear on disk and during program execution.
+///
+/// Modules control when and if information is parsed according to which
+/// accessors are called. For example the object file (ObjectFile)
+/// representation will only be parsed if the object file is requested using
+/// the Module::GetObjectFile() is called. The debug symbols will only be
+/// parsed if the symbol vendor (SymbolVendor) is requested using the
+/// Module::GetSymbolVendor() is called.
+///
+/// The module will parse more detailed information as more queries are made.
+class Module : public std::enable_shared_from_this<Module>,
+               public SymbolContextScope {
+public:
+  // Static functions that can track the lifetime of module objects. This is
+  // handy because we might have Module objects that are in shared pointers
+  // that aren't in the global module list (from ModuleList). If this is the
+  // case we need to know about it. The modules in the global list maintained
+  // by these functions can be viewed using the "target modules list" command
+  // using the "--global" (-g for short).
+  static size_t GetNumberAllocatedModules();
+
+  static Module *GetAllocatedModuleAtIndex(size_t idx);
+
+  static std::recursive_mutex &GetAllocationModuleCollectionMutex();
+
+  /// Construct with file specification and architecture.
+  ///
+  /// Clients that wish to share modules with other targets should use
+  /// ModuleList::GetSharedModule().
+  ///
+  /// \param[in] file_spec
+  ///     The file specification for the on disk representation of
+  ///     this executable image.
+  ///
+  /// \param[in] arch
+  ///     The architecture to set as the current architecture in
+  ///     this module.
+  ///
+  /// \param[in] object_name
+  ///     The name of an object in a module used to extract a module
+  ///     within a module (.a files and modules that contain multiple
+  ///     architectures).
+  ///
+  /// \param[in] object_offset
+  ///     The offset within an existing module used to extract a
+  ///     module within a module (.a files and modules that contain
+  ///     multiple architectures).
+  Module(
+      const FileSpec &file_spec, const ArchSpec &arch,
+      const ConstString *object_name = nullptr,
+      lldb::offset_t object_offset = 0,
+      const llvm::sys::TimePoint<> &object_mod_time = llvm::sys::TimePoint<>());
+
+  Module(const ModuleSpec &module_spec);
+
+  template <typename ObjFilePlugin, typename... Args>
+  static lldb::ModuleSP CreateModuleFromObjectFile(Args &&... args) {
+    // Must create a module and place it into a shared pointer before we can
+    // create an object file since it has a std::weak_ptr back to the module,
+    // so we need to control the creation carefully in this static function
+    lldb::ModuleSP module_sp(new Module());
+    module_sp->m_objfile_sp =
+        std::make_shared<ObjFilePlugin>(module_sp, std::forward<Args>(args)...);
+    module_sp->m_did_load_objfile.store(true, std::memory_order_relaxed);
+
+    // Once we get the object file, set module ArchSpec to the one we get from
+    // the object file. If the object file does not have an architecture, we
+    // consider the creation a failure.
+    ArchSpec arch = module_sp->m_objfile_sp->GetArchitecture();
+    if (!arch)
+      return nullptr;
+    module_sp->m_arch = arch;
+
+    // Also copy the object file's FileSpec.
+    module_sp->m_file = module_sp->m_objfile_sp->GetFileSpec();
+    return module_sp;
+  }
+
+  /// Destructor.
+  ~Module() override;
+
+  bool MatchesModuleSpec(const ModuleSpec &module_ref);
+
+  /// Set the load address for all sections in a module to be the file address
+  /// plus \a slide.
+  ///
+  /// Many times a module will be loaded in a target with a constant offset
+  /// applied to all top level sections. This function can set the load
+  /// address for all top level sections to be the section file address +
+  /// offset.
+  ///
+  /// \param[in] target
+  ///     The target in which to apply the section load addresses.
+  ///
+  /// \param[in] value
+  ///     if \a value_is_offset is true, then value is the offset to
+  ///     apply to all file addresses for all top level sections in
+  ///     the object file as each section load address is being set.
+  ///     If \a value_is_offset is false, then "value" is the new
+  ///     absolute base address for the image.
+  ///
+  /// \param[in] value_is_offset
+  ///     If \b true, then \a value is an offset to apply to each
+  ///     file address of each top level section.
+  ///     If \b false, then \a value is the image base address that
+  ///     will be used to rigidly slide all loadable sections.
+  ///
+  /// \param[out] changed
+  ///     If any section load addresses were changed in \a target,
+  ///     then \a changed will be set to \b true. Else \a changed
+  ///     will be set to false. This allows this function to be
+  ///     called multiple times on the same module for the same
+  ///     target. If the module hasn't moved, then \a changed will
+  ///     be false and no module updated notification will need to
+  ///     be sent out.
+  ///
+  /// \return
+  ///     /b True if any sections were successfully loaded in \a target,
+  ///     /b false otherwise.
+  bool SetLoadAddress(Target &target, lldb::addr_t value, bool value_is_offset,
+                      bool &changed);
+
+  /// \copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
+  ///
+  /// \see SymbolContextScope
+  void CalculateSymbolContext(SymbolContext *sc) override;
+
+  lldb::ModuleSP CalculateSymbolContextModule() override;
+
+  void
+  GetDescription(Stream *s,
+                 lldb::DescriptionLevel level = lldb::eDescriptionLevelFull);
+
+  /// Get the module path and object name.
+  ///
+  /// Modules can refer to object files. In this case the specification is
+  /// simple and would return the path to the file:
+  ///
+  ///     "/usr/lib/foo.dylib"
+  ///
+  /// Modules can be .o files inside of a BSD archive (.a file). In this case,
+  /// the object specification will look like:
+  ///
+  ///     "/usr/lib/foo.a(bar.o)"
+  ///
+  /// There are many places where logging wants to log this fully qualified
+  /// specification, so we centralize this functionality here.
+  ///
+  /// \return
+  ///     The object path + object name if there is one.
+  std::string GetSpecificationDescription() const;
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s. The dumped content will be only what has been loaded or parsed up
+  /// to this point at which this function is called, so this is a good way to
+  /// see what has been parsed in a module.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s);
+
+  /// \copydoc SymbolContextScope::DumpSymbolContext(Stream*)
+  ///
+  /// \see SymbolContextScope
+  void DumpSymbolContext(Stream *s) override;
+
+  /// Find a symbol in the object file's symbol table.
+  ///
+  /// \param[in] name
+  ///     The name of the symbol that we are looking for.
+  ///
+  /// \param[in] symbol_type
+  ///     If set to eSymbolTypeAny, find a symbol of any type that
+  ///     has a name that matches \a name. If set to any other valid
+  ///     SymbolType enumeration value, then search only for
+  ///     symbols that match \a symbol_type.
+  ///
+  /// \return
+  ///     Returns a valid symbol pointer if a symbol was found,
+  ///     nullptr otherwise.
+  const Symbol *FindFirstSymbolWithNameAndType(
+      ConstString name,
+      lldb::SymbolType symbol_type = lldb::eSymbolTypeAny);
+
+  size_t FindSymbolsWithNameAndType(ConstString name,
+                                    lldb::SymbolType symbol_type,
+                                    SymbolContextList &sc_list);
+
+  size_t FindSymbolsMatchingRegExAndType(const RegularExpression &regex,
+                                         lldb::SymbolType symbol_type,
+                                         SymbolContextList &sc_list);
+
+  /// Find a function symbols in the object file's symbol table.
+  ///
+  /// \param[in] name
+  ///     The name of the symbol that we are looking for.
+  ///
+  /// \param[in] name_type_mask
+  ///     A mask that has one or more bitwise OR'ed values from the
+  ///     lldb::FunctionNameType enumeration type that indicate what
+  ///     kind of names we are looking for.
+  ///
+  /// \param[out] sc_list
+  ///     A list to append any matching symbol contexts to.
+  ///
+  /// \return
+  ///     The number of symbol contexts that were added to \a sc_list
+  size_t FindFunctionSymbols(ConstString name, uint32_t name_type_mask,
+                             SymbolContextList &sc_list);
+
+  /// Find compile units by partial or full path.
+  ///
+  /// Finds all compile units that match \a path in all of the modules and
+  /// returns the results in \a sc_list.
+  ///
+  /// \param[in] path
+  ///     The name of the function we are looking for.
+  ///
+  /// \param[in] append
+  ///     If \b true, then append any compile units that were found
+  ///     to \a sc_list. If \b false, then the \a sc_list is cleared
+  ///     and the contents of \a sc_list are replaced.
+  ///
+  /// \param[out] sc_list
+  ///     A symbol context list that gets filled in with all of the
+  ///     matches.
+  ///
+  /// \return
+  ///     The number of matches added to \a sc_list.
+  size_t FindCompileUnits(const FileSpec &path, bool append,
+                          SymbolContextList &sc_list);
+
+  /// Find functions by name.
+  ///
+  /// If the function is an inlined function, it will have a block,
+  /// representing the inlined function, and the function will be the
+  /// containing function.  If it is not inlined, then the block will be NULL.
+  ///
+  /// \param[in] name
+  ///     The name of the compile unit we are looking for.
+  ///
+  /// \param[in] namespace_decl
+  ///     If valid, a namespace to search in.
+  ///
+  /// \param[in] name_type_mask
+  ///     A bit mask of bits that indicate what kind of names should
+  ///     be used when doing the lookup. Bits include fully qualified
+  ///     names, base names, C++ methods, or ObjC selectors.
+  ///     See FunctionNameType for more details.
+  ///
+  /// \param[in] append
+  ///     If \b true, any matches will be appended to \a sc_list, else
+  ///     matches replace the contents of \a sc_list.
+  ///
+  /// \param[out] sc_list
+  ///     A symbol context list that gets filled in with all of the
+  ///     matches.
+  ///
+  /// \return
+  ///     The number of matches added to \a sc_list.
+  size_t FindFunctions(ConstString name,
+                       const CompilerDeclContext *parent_decl_ctx,
+                       lldb::FunctionNameType name_type_mask, bool symbols_ok,
+                       bool inlines_ok, bool append,
+                       SymbolContextList &sc_list);
+
+  /// Find functions by name.
+  ///
+  /// If the function is an inlined function, it will have a block,
+  /// representing the inlined function, and the function will be the
+  /// containing function.  If it is not inlined, then the block will be NULL.
+  ///
+  /// \param[in] regex
+  ///     A regular expression to use when matching the name.
+  ///
+  /// \param[in] append
+  ///     If \b true, any matches will be appended to \a sc_list, else
+  ///     matches replace the contents of \a sc_list.
+  ///
+  /// \param[out] sc_list
+  ///     A symbol context list that gets filled in with all of the
+  ///     matches.
+  ///
+  /// \return
+  ///     The number of matches added to \a sc_list.
+  size_t FindFunctions(const RegularExpression &regex, bool symbols_ok,
+                       bool inlines_ok, bool append,
+                       SymbolContextList &sc_list);
+
+  /// Find addresses by file/line
+  ///
+  /// \param[in] target_sp
+  ///     The target the addresses are desired for.
+  ///
+  /// \param[in] file
+  ///     Source file to locate.
+  ///
+  /// \param[in] line
+  ///     Source line to locate.
+  ///
+  /// \param[in] function
+  ///	    Optional filter function. Addresses within this function will be
+  ///     added to the 'local' list. All others will be added to the 'extern'
+  ///     list.
+  ///
+  /// \param[out] output_local
+  ///     All matching addresses within 'function'
+  ///
+  /// \param[out] output_extern
+  ///     All matching addresses not within 'function'
+  void FindAddressesForLine(const lldb::TargetSP target_sp,
+                            const FileSpec &file, uint32_t line,
+                            Function *function,
+                            std::vector<Address> &output_local,
+                            std::vector<Address> &output_extern);
+
+  /// Find global and static variables by name.
+  ///
+  /// \param[in] name
+  ///     The name of the global or static variable we are looking
+  ///     for.
+  ///
+  /// \param[in] parent_decl_ctx
+  ///     If valid, a decl context that results must exist within
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a
+  ///     max_matches. Specify UINT32_MAX to get all possible matches.
+  ///
+  /// \param[in] variable_list
+  ///     A list of variables that gets the matches appended to.
+  ///
+  /// \return
+  ///     The number of matches added to \a variable_list.
+  size_t FindGlobalVariables(ConstString name,
+                             const CompilerDeclContext *parent_decl_ctx,
+                             size_t max_matches, VariableList &variable_list);
+
+  /// Find global and static variables by regular expression.
+  ///
+  /// \param[in] regex
+  ///     A regular expression to use when matching the name.
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a
+  ///     max_matches. Specify UINT32_MAX to get all possible matches.
+  ///
+  /// \param[in] variable_list
+  ///     A list of variables that gets the matches appended to.
+  ///
+  /// \return
+  ///     The number of matches added to \a variable_list.
+  size_t FindGlobalVariables(const RegularExpression &regex, size_t max_matches,
+                             VariableList &variable_list);
+
+  /// Find types by name.
+  ///
+  /// Type lookups in modules go through the SymbolVendor (which will use one
+  /// or more SymbolFile subclasses). The SymbolFile needs to be able to
+  /// lookup types by basename and not the fully qualified typename. This
+  /// allows the type accelerator tables to stay small, even with heavily
+  /// templatized C++. The type search will then narrow down the search
+  /// results. If "exact_match" is true, then the type search will only match
+  /// exact type name matches. If "exact_match" is false, the type will match
+  /// as long as the base typename matches and as long as any immediate
+  /// containing namespaces/class scopes that are specified match. So to
+  /// search for a type "d" in "b::c", the name "b::c::d" can be specified and
+  /// it will match any class/namespace "b" which contains a class/namespace
+  /// "c" which contains type "d". We do this to allow users to not always
+  /// have to specify complete scoping on all expressions, but it also allows
+  /// for exact matching when required.
+  ///
+  /// \param[in] type_name
+  ///     The name of the type we are looking for that is a fully
+  ///     or partially qualified type name.
+  ///
+  /// \param[in] exact_match
+  ///     If \b true, \a type_name is fully qualified and must match
+  ///     exactly. If \b false, \a type_name is a partially qualified
+  ///     name where the leading namespaces or classes can be
+  ///     omitted to make finding types that a user may type
+  ///     easier.
+  ///
+  /// \param[out] type_list
+  ///     A type list gets populated with any matches.
+  ///
+  /// \return
+  ///     The number of matches added to \a type_list.
+  size_t
+  FindTypes(ConstString type_name, bool exact_match, size_t max_matches,
+            llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files,
+            TypeList &types);
+
+  lldb::TypeSP FindFirstType(const SymbolContext &sc,
+                             ConstString type_name, bool exact_match);
+
+  /// Find types by name that are in a namespace. This function is used by the
+  /// expression parser when searches need to happen in an exact namespace
+  /// scope.
+  ///
+  /// \param[in] type_name
+  ///     The name of a type within a namespace that should not include
+  ///     any qualifying namespaces (just a type basename).
+  ///
+  /// \param[in] namespace_decl
+  ///     The namespace declaration that this type must exist in.
+  ///
+  /// \param[out] type_list
+  ///     A type list gets populated with any matches.
+  ///
+  /// \return
+  ///     The number of matches added to \a type_list.
+  size_t FindTypesInNamespace(ConstString type_name,
+                              const CompilerDeclContext *parent_decl_ctx,
+                              size_t max_matches, TypeList &type_list);
+
+  /// Get const accessor for the module architecture.
+  ///
+  /// \return
+  ///     A const reference to the architecture object.
+  const ArchSpec &GetArchitecture() const;
+
+  /// Get const accessor for the module file specification.
+  ///
+  /// This function returns the file for the module on the host system that is
+  /// running LLDB. This can differ from the path on the platform since we
+  /// might be doing remote debugging.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  const FileSpec &GetFileSpec() const { return m_file; }
+
+  /// Get accessor for the module platform file specification.
+  ///
+  /// Platform file refers to the path of the module as it is known on the
+  /// remote system on which it is being debugged. For local debugging this is
+  /// always the same as Module::GetFileSpec(). But remote debugging might
+  /// mention a file "/usr/lib/liba.dylib" which might be locally downloaded
+  /// and cached. In this case the platform file could be something like:
+  /// "/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib" The
+  /// file could also be cached in a local developer kit directory.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  const FileSpec &GetPlatformFileSpec() const {
+    if (m_platform_file)
+      return m_platform_file;
+    return m_file;
+  }
+
+  void SetPlatformFileSpec(const FileSpec &file) { m_platform_file = file; }
+
+  const FileSpec &GetRemoteInstallFileSpec() const {
+    return m_remote_install_file;
+  }
+
+  void SetRemoteInstallFileSpec(const FileSpec &file) {
+    m_remote_install_file = file;
+  }
+
+  const FileSpec &GetSymbolFileFileSpec() const { return m_symfile_spec; }
+
+  void PreloadSymbols();
+
+  void SetSymbolFileFileSpec(const FileSpec &file);
+
+  const llvm::sys::TimePoint<> &GetModificationTime() const {
+    return m_mod_time;
+  }
+
+  const llvm::sys::TimePoint<> &GetObjectModificationTime() const {
+    return m_object_mod_time;
+  }
+
+  void SetObjectModificationTime(const llvm::sys::TimePoint<> &mod_time) {
+    m_mod_time = mod_time;
+  }
+
+  /// Tells whether this module is capable of being the main executable for a
+  /// process.
+  ///
+  /// \return
+  ///     \b true if it is, \b false otherwise.
+  bool IsExecutable();
+
+  /// Tells whether this module has been loaded in the target passed in. This
+  /// call doesn't distinguish between whether the module is loaded by the
+  /// dynamic loader, or by a "target module add" type call.
+  ///
+  /// \param[in] target
+  ///    The target to check whether this is loaded in.
+  ///
+  /// \return
+  ///     \b true if it is, \b false otherwise.
+  bool IsLoadedInTarget(Target *target);
+
+  bool LoadScriptingResourceInTarget(Target *target, Status &error,
+                                     Stream *feedback_stream = nullptr);
+
+  /// Get the number of compile units for this module.
+  ///
+  /// \return
+  ///     The number of compile units that the symbol vendor plug-in
+  ///     finds.
+  size_t GetNumCompileUnits();
+
+  lldb::CompUnitSP GetCompileUnitAtIndex(size_t idx);
+
+  ConstString GetObjectName() const;
+
+  uint64_t GetObjectOffset() const { return m_object_offset; }
+
+  /// Get the object file representation for the current architecture.
+  ///
+  /// If the object file has not been located or parsed yet, this function
+  /// will find the best ObjectFile plug-in that can parse Module::m_file.
+  ///
+  /// \return
+  ///     If Module::m_file does not exist, or no plug-in was found
+  ///     that can parse the file, or the object file doesn't contain
+  ///     the current architecture in Module::m_arch, nullptr will be
+  ///     returned, else a valid object file interface will be
+  ///     returned. The returned pointer is owned by this object and
+  ///     remains valid as long as the object is around.
+  virtual ObjectFile *GetObjectFile();
+
+  /// Get the unified section list for the module. This is the section list
+  /// created by the module's object file and any debug info and symbol files
+  /// created by the symbol vendor.
+  ///
+  /// If the symbol vendor has not been loaded yet, this function will return
+  /// the section list for the object file.
+  ///
+  /// \return
+  ///     Unified module section list.
+  virtual SectionList *GetSectionList();
+
+  /// Notify the module that the file addresses for the Sections have been
+  /// updated.
+  ///
+  /// If the Section file addresses for a module are updated, this method
+  /// should be called.  Any parts of the module, object file, or symbol file
+  /// that has cached those file addresses must invalidate or update its
+  /// cache.
+  virtual void SectionFileAddressesChanged();
+
+  /// Returns a reference to the UnwindTable for this Module
+  ///
+  /// The UnwindTable contains FuncUnwinders objects for any function in this
+  /// Module.  If a FuncUnwinders object hasn't been created yet (i.e. the
+  /// function has yet to be unwound in a stack walk), it will be created when
+  /// requested.  Specifically, we do not create FuncUnwinders objects for
+  /// functions until they are needed.
+  ///
+  /// \return
+  ///     Returns the unwind table for this module. If this object has no
+  ///     associated object file, an empty UnwindTable is returned.
+  UnwindTable &GetUnwindTable();
+
+  llvm::VersionTuple GetVersion();
+
+  /// Load an object file from memory.
+  ///
+  /// If available, the size of the object file in memory may be passed to
+  /// avoid additional round trips to process memory. If the size is not
+  /// provided, a default value is used. This value should be large enough to
+  /// enable the ObjectFile plugins to read the header of the object file
+  /// without going back to the process.
+  ///
+  /// \return
+  ///     The object file loaded from memory or nullptr, if the operation
+  ///     failed (see the `error` for more information in that case).
+  ObjectFile *GetMemoryObjectFile(const lldb::ProcessSP &process_sp,
+                                  lldb::addr_t header_addr, Status &error,
+                                  size_t size_to_read = 512);
+  /// Get the symbol vendor interface for the current architecture.
+  ///
+  /// If the symbol vendor file has not been located yet, this function will
+  /// find the best SymbolVendor plug-in that can use the current object file.
+  ///
+  /// \return
+  ///     If this module does not have a valid object file, or no
+  ///     plug-in can be found that can use the object file, nullptr will
+  ///     be returned, else a valid symbol vendor plug-in interface
+  ///     will be returned. The returned pointer is owned by this
+  ///     object and remains valid as long as the object is around.
+  virtual SymbolVendor *
+  GetSymbolVendor(bool can_create = true,
+                  lldb_private::Stream *feedback_strm = nullptr);
+
+  /// Get accessor the type list for this module.
+  ///
+  /// \return
+  ///     A valid type list pointer, or nullptr if there is no valid
+  ///     symbol vendor for this module.
+  TypeList *GetTypeList();
+
+  /// Get a reference to the UUID value contained in this object.
+  ///
+  /// If the executable image file doesn't not have a UUID value built into
+  /// the file format, an MD5 checksum of the entire file, or slice of the
+  /// file for the current architecture should be used.
+  ///
+  /// \return
+  ///     A const pointer to the internal copy of the UUID value in
+  ///     this module if this module has a valid UUID value, NULL
+  ///     otherwise.
+  const lldb_private::UUID &GetUUID();
+
+  /// A debugging function that will cause everything in a module to
+  /// be parsed.
+  ///
+  /// All compile units will be parsed, along with all globals and static
+  /// variables and all functions for those compile units. All types, scopes,
+  /// local variables, static variables, global variables, and line tables
+  /// will be parsed. This can be used prior to dumping a module to see a
+  /// complete list of the resulting debug information that gets parsed, or as
+  /// a debug function to ensure that the module can consume all of the debug
+  /// data the symbol vendor provides.
+  void ParseAllDebugSymbols();
+
+  bool ResolveFileAddress(lldb::addr_t vm_addr, Address &so_addr);
+
+  /// Resolve the symbol context for the given address.
+  ///
+  /// Tries to resolve the matching symbol context based on a lookup from the
+  /// current symbol vendor.  If the lazy lookup fails, an attempt is made to
+  /// parse the eh_frame section to handle stripped symbols.  If this fails,
+  /// an attempt is made to resolve the symbol to the previous address to
+  /// handle the case of a function with a tail call.
+  ///
+  /// Use properties of the modified SymbolContext to inspect any resolved
+  /// target, module, compilation unit, symbol, function, function block or
+  /// line entry.  Use the return value to determine which of these properties
+  /// have been modified.
+  ///
+  /// \param[in] so_addr
+  ///     A load address to resolve.
+  ///
+  /// \param[in] resolve_scope
+  ///     The scope that should be resolved (see SymbolContext::Scope).
+  ///     A combination of flags from the enumeration SymbolContextItem
+  ///     requesting a resolution depth.  Note that the flags that are
+  ///     actually resolved may be a superset of the requested flags.
+  ///     For instance, eSymbolContextSymbol requires resolution of
+  ///     eSymbolContextModule, and eSymbolContextFunction requires
+  ///     eSymbolContextSymbol.
+  ///
+  /// \param[out] sc
+  ///     The SymbolContext that is modified based on symbol resolution.
+  ///
+  /// \param[in] resolve_tail_call_address
+  ///     Determines if so_addr should resolve to a symbol in the case
+  ///     of a function whose last instruction is a call.  In this case,
+  ///     the PC can be one past the address range of the function.
+  ///
+  /// \return
+  ///     The scope that has been resolved (see SymbolContext::Scope).
+  ///
+  /// \see SymbolContext::Scope
+  uint32_t ResolveSymbolContextForAddress(
+      const Address &so_addr, lldb::SymbolContextItem resolve_scope,
+      SymbolContext &sc, bool resolve_tail_call_address = false);
+
+  /// Resolve items in the symbol context for a given file and line.
+  ///
+  /// Tries to resolve \a file_path and \a line to a list of matching symbol
+  /// contexts.
+  ///
+  /// The line table entries contains addresses that can be used to further
+  /// resolve the values in each match: the function, block, symbol. Care
+  /// should be taken to minimize the amount of information that is requested
+  /// to only what is needed -- typically the module, compile unit, line table
+  /// and line table entry are sufficient.
+  ///
+  /// \param[in] file_path
+  ///     A path to a source file to match. If \a file_path does not
+  ///     specify a directory, then this query will match all files
+  ///     whose base filename matches. If \a file_path does specify
+  ///     a directory, the fullpath to the file must match.
+  ///
+  /// \param[in] line
+  ///     The source line to match, or zero if just the compile unit
+  ///     should be resolved.
+  ///
+  /// \param[in] check_inlines
+  ///     Check for inline file and line number matches. This option
+  ///     should be used sparingly as it will cause all line tables
+  ///     for every compile unit to be parsed and searched for
+  ///     matching inline file entries.
+  ///
+  /// \param[in] resolve_scope
+  ///     The scope that should be resolved (see
+  ///     SymbolContext::Scope).
+  ///
+  /// \param[out] sc_list
+  ///     A symbol context list that gets matching symbols contexts
+  ///     appended to.
+  ///
+  /// \return
+  ///     The number of matches that were added to \a sc_list.
+  ///
+  /// \see SymbolContext::Scope
+  uint32_t ResolveSymbolContextForFilePath(
+      const char *file_path, uint32_t line, bool check_inlines,
+      lldb::SymbolContextItem resolve_scope, SymbolContextList &sc_list);
+
+  /// Resolve items in the symbol context for a given file and line.
+  ///
+  /// Tries to resolve \a file_spec and \a line to a list of matching symbol
+  /// contexts.
+  ///
+  /// The line table entries contains addresses that can be used to further
+  /// resolve the values in each match: the function, block, symbol. Care
+  /// should be taken to minimize the amount of information that is requested
+  /// to only what is needed -- typically the module, compile unit, line table
+  /// and line table entry are sufficient.
+  ///
+  /// \param[in] file_spec
+  ///     A file spec to a source file to match. If \a file_path does
+  ///     not specify a directory, then this query will match all
+  ///     files whose base filename matches. If \a file_path does
+  ///     specify a directory, the fullpath to the file must match.
+  ///
+  /// \param[in] line
+  ///     The source line to match, or zero if just the compile unit
+  ///     should be resolved.
+  ///
+  /// \param[in] check_inlines
+  ///     Check for inline file and line number matches. This option
+  ///     should be used sparingly as it will cause all line tables
+  ///     for every compile unit to be parsed and searched for
+  ///     matching inline file entries.
+  ///
+  /// \param[in] resolve_scope
+  ///     The scope that should be resolved (see
+  ///     SymbolContext::Scope).
+  ///
+  /// \param[out] sc_list
+  ///     A symbol context list that gets filled in with all of the
+  ///     matches.
+  ///
+  /// \return
+  ///     A integer that contains SymbolContext::Scope bits set for
+  ///     each item that was successfully resolved.
+  ///
+  /// \see SymbolContext::Scope
+  uint32_t ResolveSymbolContextsForFileSpec(
+      const FileSpec &file_spec, uint32_t line, bool check_inlines,
+      lldb::SymbolContextItem resolve_scope, SymbolContextList &sc_list);
+
+  void SetFileSpecAndObjectName(const FileSpec &file,
+                                ConstString object_name);
+
+  bool GetIsDynamicLinkEditor();
+
+  TypeSystem *GetTypeSystemForLanguage(lldb::LanguageType language);
+
+  // Special error functions that can do printf style formatting that will
+  // prepend the message with something appropriate for this module (like the
+  // architecture, path and object name (if any)). This centralizes code so
+  // that everyone doesn't need to format their error and log messages on their
+  // own and keeps the output a bit more consistent.
+  void LogMessage(Log *log, const char *format, ...)
+      __attribute__((format(printf, 3, 4)));
+
+  void LogMessageVerboseBacktrace(Log *log, const char *format, ...)
+      __attribute__((format(printf, 3, 4)));
+
+  void ReportWarning(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  void ReportError(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  // Only report an error once when the module is first detected to be modified
+  // so we don't spam the console with many messages.
+  void ReportErrorIfModifyDetected(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  // Return true if the file backing this module has changed since the module
+  // was originally created  since we saved the initial file modification time
+  // when the module first gets created.
+  bool FileHasChanged() const;
+
+  // SymbolVendor, SymbolFile and ObjectFile member objects should lock the
+  // module mutex to avoid deadlocks.
+  std::recursive_mutex &GetMutex() const { return m_mutex; }
+
+  PathMappingList &GetSourceMappingList() { return m_source_mappings; }
+
+  const PathMappingList &GetSourceMappingList() const {
+    return m_source_mappings;
+  }
+
+  /// Finds a source file given a file spec using the module source path
+  /// remappings (if any).
+  ///
+  /// Tries to resolve \a orig_spec by checking the module source path
+  /// remappings. It makes sure the file exists, so this call can be expensive
+  /// if the remappings are on a network file system, so use this function
+  /// sparingly (not in a tight debug info parsing loop).
+  ///
+  /// \param[in] orig_spec
+  ///     The original source file path to try and remap.
+  ///
+  /// \param[out] new_spec
+  ///     The newly remapped filespec that is guaranteed to exist.
+  ///
+  /// \return
+  ///     /b true if \a orig_spec was successfully located and
+  ///     \a new_spec is filled in with an existing file spec,
+  ///     \b false otherwise.
+  bool FindSourceFile(const FileSpec &orig_spec, FileSpec &new_spec) const;
+
+  /// Remaps a source file given \a path into \a new_path.
+  ///
+  /// Remaps \a path if any source remappings match. This function does NOT
+  /// stat the file system so it can be used in tight loops where debug info
+  /// is being parsed.
+  ///
+  /// \param[in] path
+  ///     The original source file path to try and remap.
+  ///
+  /// \param[out] new_path
+  ///     The newly remapped filespec that is may or may not exist.
+  ///
+  /// \return
+  ///     /b true if \a path was successfully located and \a new_path
+  ///     is filled in with a new source path, \b false otherwise.
+  bool RemapSourceFile(llvm::StringRef path, std::string &new_path) const;
+  bool RemapSourceFile(const char *, std::string &) const = delete;
+
+  /// \class LookupInfo Module.h "lldb/Core/Module.h"
+  /// A class that encapsulates name lookup information.
+  ///
+  /// Users can type a wide variety of partial names when setting breakpoints
+  /// by name or when looking for functions by name. SymbolVendor and
+  /// SymbolFile objects are only required to implement name lookup for
+  /// function basenames and for fully mangled names. This means if the user
+  /// types in a partial name, we must reduce this to a name lookup that will
+  /// work with all SymbolFile objects. So we might reduce a name lookup to
+  /// look for a basename, and then prune out any results that don't match.
+  ///
+  /// The "m_name" member variable represents the name as it was typed by the
+  /// user. "m_lookup_name" will be the name we actually search for through
+  /// the symbol or objects files. Lanaguage is included in case we need to
+  /// filter results by language at a later date. The "m_name_type_mask"
+  /// member variable tells us what kinds of names we are looking for and can
+  /// help us prune out unwanted results.
+  ///
+  /// Function lookups are done in Module.cpp, ModuleList.cpp and in
+  /// BreakpointResolverName.cpp and they all now use this class to do lookups
+  /// correctly.
+  class LookupInfo {
+  public:
+    LookupInfo()
+        : m_name(), m_lookup_name(), m_language(lldb::eLanguageTypeUnknown),
+          m_name_type_mask(lldb::eFunctionNameTypeNone),
+          m_match_name_after_lookup(false) {}
+
+    LookupInfo(ConstString name, lldb::FunctionNameType name_type_mask,
+               lldb::LanguageType language);
+
+    ConstString GetName() const { return m_name; }
+
+    void SetName(ConstString name) { m_name = name; }
+
+    ConstString GetLookupName() const { return m_lookup_name; }
+
+    void SetLookupName(ConstString name) { m_lookup_name = name; }
+
+    lldb::FunctionNameType GetNameTypeMask() const { return m_name_type_mask; }
+
+    void SetNameTypeMask(lldb::FunctionNameType mask) {
+      m_name_type_mask = mask;
+    }
+
+    void Prune(SymbolContextList &sc_list, size_t start_idx) const;
+
+  protected:
+    /// What the user originally typed
+    ConstString m_name;
+
+    /// The actual name will lookup when calling in the object or symbol file
+    ConstString m_lookup_name;
+
+    /// Limit matches to only be for this language
+    lldb::LanguageType m_language;
+
+    /// One or more bits from lldb::FunctionNameType that indicate what kind of
+    /// names we are looking for
+    lldb::FunctionNameType m_name_type_mask;
+
+    ///< If \b true, then demangled names that match will need to contain
+    ///< "m_name" in order to be considered a match
+    bool m_match_name_after_lookup;
+  };
+
+protected:
+  // Member Variables
+  mutable std::recursive_mutex m_mutex; ///< A mutex to keep this object happy
+                                        ///in multi-threaded environments.
+
+  /// The modification time for this module when it was created.
+  llvm::sys::TimePoint<> m_mod_time;
+
+  ArchSpec m_arch;      ///< The architecture for this module.
+  UUID m_uuid; ///< Each module is assumed to have a unique identifier to help
+               ///match it up to debug symbols.
+  FileSpec m_file; ///< The file representation on disk for this module (if
+                   ///there is one).
+  FileSpec m_platform_file; ///< The path to the module on the platform on which
+                            ///it is being debugged
+  FileSpec m_remote_install_file; ///< If set when debugging on remote
+                                  ///platforms, this module will be installed at
+                                  ///this location
+  FileSpec m_symfile_spec;   ///< If this path is valid, then this is the file
+                             ///that _will_ be used as the symbol file for this
+                             ///module
+  ConstString m_object_name; ///< The name an object within this module that is
+                             ///selected, or empty of the module is represented
+                             ///by \a m_file.
+  uint64_t m_object_offset;
+  llvm::sys::TimePoint<> m_object_mod_time;
+  lldb::ObjectFileSP m_objfile_sp; ///< A shared pointer to the object file
+                                   ///parser for this module as it may or may
+                                   ///not be shared with the SymbolFile
+  llvm::Optional<UnwindTable> m_unwind_table; ///< Table of FuncUnwinders
+                                              /// objects created for this
+                                              /// Module's functions
+  lldb::SymbolVendorUP
+      m_symfile_up; ///< A pointer to the symbol vendor for this module.
+  std::vector<lldb::SymbolVendorUP>
+      m_old_symfiles; ///< If anyone calls Module::SetSymbolFileFileSpec() and
+                      ///changes the symbol file,
+  ///< we need to keep all old symbol files around in case anyone has type
+  ///references to them
+  TypeSystemMap m_type_system_map;   ///< A map of any type systems associated
+                                     ///with this module
+  PathMappingList m_source_mappings; ///< Module specific source remappings for
+                                     ///when you have debug info for a module
+                                     ///that doesn't match where the sources
+                                     ///currently are
+  lldb::SectionListUP m_sections_up; ///< Unified section list for module that
+                                     /// is used by the ObjectFile and and
+                                     /// ObjectFile instances for the debug info
+
+  std::atomic<bool> m_did_load_objfile{false};
+  std::atomic<bool> m_did_load_symbol_vendor{false};
+  std::atomic<bool> m_did_set_uuid{false};
+  mutable bool m_file_has_changed : 1,
+      m_first_file_changed_log : 1; /// See if the module was modified after it
+                                    /// was initially opened.
+
+  /// Resolve a file or load virtual address.
+  ///
+  /// Tries to resolve \a vm_addr as a file address (if \a
+  /// vm_addr_is_file_addr is true) or as a load address if \a
+  /// vm_addr_is_file_addr is false) in the symbol vendor. \a resolve_scope
+  /// indicates what clients wish to resolve and can be used to limit the
+  /// scope of what is parsed.
+  ///
+  /// \param[in] vm_addr
+  ///     The load virtual address to resolve.
+  ///
+  /// \param[in] vm_addr_is_file_addr
+  ///     If \b true, \a vm_addr is a file address, else \a vm_addr
+  ///     if a load address.
+  ///
+  /// \param[in] resolve_scope
+  ///     The scope that should be resolved (see
+  ///     SymbolContext::Scope).
+  ///
+  /// \param[out] so_addr
+  ///     The section offset based address that got resolved if
+  ///     any bits are returned.
+  ///
+  /// \param[out] sc
+  //      The symbol context that has objects filled in. Each bit
+  ///     in the \a resolve_scope pertains to a member in the \a sc.
+  ///
+  /// \return
+  ///     A integer that contains SymbolContext::Scope bits set for
+  ///     each item that was successfully resolved.
+  ///
+  /// \see SymbolContext::Scope
+  uint32_t ResolveSymbolContextForAddress(lldb::addr_t vm_addr,
+                                          bool vm_addr_is_file_addr,
+                                          lldb::SymbolContextItem resolve_scope,
+                                          Address &so_addr, SymbolContext &sc);
+
+  void SymbolIndicesToSymbolContextList(Symtab *symtab,
+                                        std::vector<uint32_t> &symbol_indexes,
+                                        SymbolContextList &sc_list);
+
+  bool SetArchitecture(const ArchSpec &new_arch);
+
+  void SetUUID(const lldb_private::UUID &uuid);
+
+  SectionList *GetUnifiedSectionList();
+
+  friend class ModuleList;
+  friend class ObjectFile;
+  friend class SymbolFile;
+
+private:
+  Module(); // Only used internally by CreateJITModule ()
+
+  size_t FindTypes_Impl(
+      ConstString name, const CompilerDeclContext *parent_decl_ctx,
+      bool append, size_t max_matches,
+      llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files,
+      TypeMap &types);
+
+  DISALLOW_COPY_AND_ASSIGN(Module);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Module_h_
diff --git a/linux-x64/clang/include/lldb/Core/ModuleChild.h b/linux-x64/clang/include/lldb/Core/ModuleChild.h
new file mode 100644
index 0000000..8a81c1a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ModuleChild.h
@@ -0,0 +1,62 @@
+//===-- ModuleChild.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ModuleChild_h_
+#define liblldb_ModuleChild_h_
+
+#include "lldb/lldb-forward.h"
+
+namespace lldb_private {
+
+/// \class ModuleChild ModuleChild.h "lldb/Core/ModuleChild.h"
+/// A mix in class that contains a pointer back to the module
+///        that owns the object which inherits from it.
+class ModuleChild {
+public:
+  /// Construct with owning module.
+  ///
+  /// \param[in] module
+  ///     The module that owns the object that inherits from this
+  ///     class.
+  ModuleChild(const lldb::ModuleSP &module_sp);
+
+  /// Destructor.
+  ~ModuleChild();
+
+  /// Assignment operator.
+  ///
+  /// \param[in] rhs
+  ///     A const ModuleChild class reference to copy.
+  ///
+  /// \return
+  ///     A const reference to this object.
+  const ModuleChild &operator=(const ModuleChild &rhs);
+
+  /// Get const accessor for the module pointer.
+  ///
+  /// \return
+  ///     A const pointer to the module that owns the object that
+  ///     inherits from this class.
+  lldb::ModuleSP GetModule() const;
+
+  /// Set accessor for the module pointer.
+  ///
+  /// \param[in] module
+  ///     A new module that owns the object that inherits from this
+  ///      class.
+  void SetModule(const lldb::ModuleSP &module_sp);
+
+protected:
+  // Member variables
+  lldb::ModuleWP m_module_wp; ///< The Module that owns the object that inherits
+                              ///< from this class.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ModuleChild_h_
diff --git a/linux-x64/clang/include/lldb/Core/ModuleList.h b/linux-x64/clang/include/lldb/Core/ModuleList.h
new file mode 100644
index 0000000..1e26c35
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ModuleList.h
@@ -0,0 +1,542 @@
+//===-- ModuleList.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ModuleList_h_
+#define liblldb_ModuleList_h_
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/ModuleSpec.h"
+#include "lldb/Core/UserSettingsController.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Iterable.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/DenseSet.h"
+
+#include <functional>
+#include <list>
+#include <mutex>
+#include <vector>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class ConstString;
+class FileSpecList;
+class Function;
+class Log;
+class Module;
+class RegularExpression;
+class Stream;
+class SymbolContext;
+class SymbolContextList;
+class SymbolFile;
+class Target;
+class TypeList;
+class UUID;
+class VariableList;
+
+class ModuleListProperties : public Properties {
+public:
+  ModuleListProperties();
+
+  FileSpec GetClangModulesCachePath() const;
+  bool SetClangModulesCachePath(llvm::StringRef path);
+  bool GetEnableExternalLookup() const;
+  bool SetEnableExternalLookup(bool new_value);
+}; 
+
+/// \class ModuleList ModuleList.h "lldb/Core/ModuleList.h"
+/// A collection class for Module objects.
+///
+/// Modules in the module collection class are stored as reference counted
+/// shared pointers to Module objects.
+class ModuleList {
+public:
+  class Notifier {
+  public:
+    virtual ~Notifier() = default;
+
+    virtual void NotifyModuleAdded(const ModuleList &module_list,
+                                   const lldb::ModuleSP &module_sp) = 0;
+    virtual void NotifyModuleRemoved(const ModuleList &module_list,
+                                     const lldb::ModuleSP &module_sp) = 0;
+    virtual void NotifyModuleUpdated(const ModuleList &module_list,
+                                     const lldb::ModuleSP &old_module_sp,
+                                     const lldb::ModuleSP &new_module_sp) = 0;
+    virtual void NotifyWillClearList(const ModuleList &module_list) = 0;
+
+    virtual void NotifyModulesRemoved(lldb_private::ModuleList &module_list) = 0;
+  };
+
+  /// Default constructor.
+  ///
+  /// Creates an empty list of Module objects.
+  ModuleList();
+
+  /// Copy Constructor.
+  ///
+  /// Creates a new module list object with a copy of the modules from \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     Another module list object.
+  ModuleList(const ModuleList &rhs);
+
+  ModuleList(ModuleList::Notifier *notifier);
+
+  /// Destructor.
+  ~ModuleList();
+
+  /// Assignment operator.
+  ///
+  /// Copies the module list from \a rhs into this list.
+  ///
+  /// \param[in] rhs
+  ///     Another module list object.
+  ///
+  /// \return
+  ///     A const reference to this object.
+  const ModuleList &operator=(const ModuleList &rhs);
+
+  /// Append a module to the module list.
+  ///
+  /// \param[in] module_sp
+  ///     A shared pointer to a module to add to this collection.
+  ///
+  /// \param[in] notify
+  ///     If true, and a notifier function is set, the notifier function
+  ///     will be called.  Defaults to true.
+  ///
+  ///     When this ModuleList is the Target's ModuleList, the notifier 
+  ///     function is Target::ModulesDidLoad -- the call to 
+  ///     ModulesDidLoad may be deferred when adding multiple Modules 
+  ///     to the Target, but it must be called at the end, 
+  ///     before resuming execution.
+  void Append(const lldb::ModuleSP &module_sp, bool notify = true);
+
+  /// Append a module to the module list and remove any equivalent modules.
+  /// Equivalent modules are ones whose file, platform file and architecture
+  /// matches.
+  ///
+  /// Replaces the module to the collection.
+  ///
+  /// \param[in] module_sp
+  ///     A shared pointer to a module to replace in this collection.
+  void ReplaceEquivalent(const lldb::ModuleSP &module_sp);
+
+  /// Append a module to the module list, if it is not already there.
+  ///
+  /// \param[in] module_sp
+  ///
+  /// \param[in] notify
+  ///     If true, and a notifier function is set, the notifier function
+  ///     will be called.  Defaults to true.
+  ///
+  ///     When this ModuleList is the Target's ModuleList, the notifier 
+  ///     function is Target::ModulesDidLoad -- the call to 
+  ///     ModulesDidLoad may be deferred when adding multiple Modules 
+  ///     to the Target, but it must be called at the end, 
+  ///     before resuming execution.
+  bool AppendIfNeeded(const lldb::ModuleSP &module_sp, bool notify = true);
+
+  void Append(const ModuleList &module_list);
+
+  bool AppendIfNeeded(const ModuleList &module_list);
+
+  bool ReplaceModule(const lldb::ModuleSP &old_module_sp,
+                     const lldb::ModuleSP &new_module_sp);
+
+  /// Clear the object's state.
+  ///
+  /// Clears the list of modules and releases a reference to each module
+  /// object and if the reference count goes to zero, the module will be
+  /// deleted.
+  void Clear();
+
+  /// Clear the object's state.
+  ///
+  /// Clears the list of modules and releases a reference to each module
+  /// object and if the reference count goes to zero, the module will be
+  /// deleted. Also release all memory that might be held by any collection
+  /// classes (like std::vector)
+  void Destroy();
+
+  /// Dump the description of each module contained in this list.
+  ///
+  /// Dump the description of each module contained in this list to the
+  /// supplied stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \see Module::Dump(Stream *) const
+  void Dump(Stream *s) const;
+
+  void LogUUIDAndPaths(Log *log, const char *prefix_cstr);
+
+  std::recursive_mutex &GetMutex() const { return m_modules_mutex; }
+
+  size_t GetIndexForModule(const Module *module) const;
+
+  /// Get the module shared pointer for the module at index \a idx.
+  ///
+  /// \param[in] idx
+  ///     An index into this module collection.
+  ///
+  /// \return
+  ///     A shared pointer to a Module which can contain NULL if
+  ///     \a idx is out of range.
+  ///
+  /// \see ModuleList::GetSize()
+  lldb::ModuleSP GetModuleAtIndex(size_t idx) const;
+
+  /// Get the module shared pointer for the module at index \a idx without
+  /// acquiring the ModuleList mutex.  This MUST already have been acquired
+  /// with ModuleList::GetMutex and locked for this call to be safe.
+  ///
+  /// \param[in] idx
+  ///     An index into this module collection.
+  ///
+  /// \return
+  ///     A shared pointer to a Module which can contain NULL if
+  ///     \a idx is out of range.
+  ///
+  /// \see ModuleList::GetSize()
+  lldb::ModuleSP GetModuleAtIndexUnlocked(size_t idx) const;
+
+  /// Get the module pointer for the module at index \a idx.
+  ///
+  /// \param[in] idx
+  ///     An index into this module collection.
+  ///
+  /// \return
+  ///     A pointer to a Module which can by nullptr if \a idx is out
+  ///     of range.
+  ///
+  /// \see ModuleList::GetSize()
+  Module *GetModulePointerAtIndex(size_t idx) const;
+
+  /// Get the module pointer for the module at index \a idx without acquiring
+  /// the ModuleList mutex.  This MUST already have been acquired with
+  /// ModuleList::GetMutex and locked for this call to be safe.
+  ///
+  /// \param[in] idx
+  ///     An index into this module collection.
+  ///
+  /// \return
+  ///     A pointer to a Module which can by nullptr if \a idx is out
+  ///     of range.
+  ///
+  /// \see ModuleList::GetSize()
+  Module *GetModulePointerAtIndexUnlocked(size_t idx) const;
+
+  /// Find compile units by partial or full path.
+  ///
+  /// Finds all compile units that match \a path in all of the modules and
+  /// returns the results in \a sc_list.
+  ///
+  /// \param[in] path
+  ///     The name of the compile unit we are looking for.
+  ///
+  /// \param[in] append
+  ///     If \b true, then append any compile units that were found
+  ///     to \a sc_list. If \b false, then the \a sc_list is cleared
+  ///     and the contents of \a sc_list are replaced.
+  ///
+  /// \param[out] sc_list
+  ///     A symbol context list that gets filled in with all of the
+  ///     matches.
+  ///
+  /// \return
+  ///     The number of matches added to \a sc_list.
+  size_t FindCompileUnits(const FileSpec &path, bool append,
+                          SymbolContextList &sc_list) const;
+
+  /// \see Module::FindFunctions ()
+  size_t FindFunctions(ConstString name,
+                       lldb::FunctionNameType name_type_mask,
+                       bool include_symbols, bool include_inlines, bool append,
+                       SymbolContextList &sc_list) const;
+
+  /// \see Module::FindFunctionSymbols ()
+  size_t FindFunctionSymbols(ConstString name,
+                             lldb::FunctionNameType name_type_mask,
+                             SymbolContextList &sc_list);
+
+  /// \see Module::FindFunctions ()
+  size_t FindFunctions(const RegularExpression &name, bool include_symbols,
+                       bool include_inlines, bool append,
+                       SymbolContextList &sc_list);
+
+  /// Find global and static variables by name.
+  ///
+  /// \param[in] name
+  ///     The name of the global or static variable we are looking
+  ///     for.
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a
+  ///     max_matches. Specify UINT32_MAX to get all possible matches.
+  ///
+  /// \param[in] variable_list
+  ///     A list of variables that gets the matches appended to.
+  ///
+  /// \return
+  ///     The number of matches added to \a variable_list.
+  size_t FindGlobalVariables(ConstString name, size_t max_matches,
+                             VariableList &variable_list) const;
+
+  /// Find global and static variables by regular expression.
+  ///
+  /// \param[in] regex
+  ///     A regular expression to use when matching the name.
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a
+  ///     max_matches. Specify UINT32_MAX to get all possible matches.
+  ///
+  /// \param[in] variable_list
+  ///     A list of variables that gets the matches appended to.
+  ///
+  /// \return
+  ///     The number of matches added to \a variable_list.
+  size_t FindGlobalVariables(const RegularExpression &regex, size_t max_matches,
+                             VariableList &variable_list) const;
+
+  /// Finds the first module whose file specification matches \a file_spec.
+  ///
+  /// \param[in] file_spec_ptr
+  ///     A file specification object to match against the Module's
+  ///     file specifications. If \a file_spec does not have
+  ///     directory information, matches will occur by matching only
+  ///     the basename of any modules in this list. If this value is
+  ///     NULL, then file specifications won't be compared when
+  ///     searching for matching modules.
+  ///
+  /// \param[in] arch_ptr
+  ///     The architecture to search for if non-NULL. If this value
+  ///     is NULL no architecture matching will be performed.
+  ///
+  /// \param[in] uuid_ptr
+  ///     The uuid to search for if non-NULL. If this value is NULL
+  ///     no uuid matching will be performed.
+  ///
+  /// \param[in] object_name
+  ///     An optional object name that must match as well. This value
+  ///     can be NULL.
+  ///
+  /// \param[out] matching_module_list
+  ///     A module list that gets filled in with any modules that
+  ///     match the search criteria.
+  ///
+  /// \return
+  ///     The number of matching modules found by the search.
+  size_t FindModules(const ModuleSpec &module_spec,
+                     ModuleList &matching_module_list) const;
+
+  lldb::ModuleSP FindModule(const Module *module_ptr) const;
+
+  // Find a module by UUID
+  //
+  // The UUID value for a module is extracted from the ObjectFile and is the
+  // MD5 checksum, or a smarter object file equivalent, so finding modules by
+  // UUID values is very efficient and accurate.
+  lldb::ModuleSP FindModule(const UUID &uuid) const;
+
+  lldb::ModuleSP FindFirstModule(const ModuleSpec &module_spec) const;
+
+  size_t FindSymbolsWithNameAndType(ConstString name,
+                                    lldb::SymbolType symbol_type,
+                                    SymbolContextList &sc_list,
+                                    bool append = false) const;
+
+  size_t FindSymbolsMatchingRegExAndType(const RegularExpression &regex,
+                                         lldb::SymbolType symbol_type,
+                                         SymbolContextList &sc_list,
+                                         bool append = false) const;
+
+  /// Find types by name.
+  ///
+  /// \param[in] search_first
+  ///     If non-null, this module will be searched before any other
+  ///     modules.
+  ///
+  /// \param[in] name
+  ///     The name of the type we are looking for.
+  ///
+  /// \param[in] append
+  ///     If \b true, any matches will be appended to \a
+  ///     variable_list, else matches replace the contents of
+  ///     \a variable_list.
+  ///
+  /// \param[in] max_matches
+  ///     Allow the number of matches to be limited to \a
+  ///     max_matches. Specify UINT32_MAX to get all possible matches.
+  ///
+  /// \param[in] encoding
+  ///     Limit the search to specific types, or get all types if
+  ///     set to Type::invalid.
+  ///
+  /// \param[in] udt_name
+  ///     If the encoding is a user defined type, specify the name
+  ///     of the user defined type ("struct", "union", "class", etc).
+  ///
+  /// \param[out] type_list
+  ///     A type list gets populated with any matches.
+  ///
+  /// \return
+  ///     The number of matches added to \a type_list.
+  size_t FindTypes(Module *search_first, ConstString name,
+                   bool name_is_fully_qualified, size_t max_matches,
+                   llvm::DenseSet<SymbolFile *> &searched_symbol_files,
+                   TypeList &types) const;
+
+  bool FindSourceFile(const FileSpec &orig_spec, FileSpec &new_spec) const;
+
+  /// Find addresses by file/line
+  ///
+  /// \param[in] target_sp
+  ///     The target the addresses are desired for.
+  ///
+  /// \param[in] file
+  ///     Source file to locate.
+  ///
+  /// \param[in] line
+  ///     Source line to locate.
+  ///
+  /// \param[in] function
+  ///     Optional filter function. Addresses within this function will be
+  ///     added to the 'local' list. All others will be added to the 'extern'
+  ///     list.
+  ///
+  /// \param[out] output_local
+  ///     All matching addresses within 'function'
+  ///
+  /// \param[out] output_extern
+  ///     All matching addresses not within 'function'
+  void FindAddressesForLine(const lldb::TargetSP target_sp,
+                            const FileSpec &file, uint32_t line,
+                            Function *function,
+                            std::vector<Address> &output_local,
+                            std::vector<Address> &output_extern);
+
+  /// Remove a module from the module list.
+  ///
+  /// \param[in] module_sp
+  ///     A shared pointer to a module to remove from this collection.
+  ///
+  /// \param[in] notify
+  ///     If true, and a notifier function is set, the notifier function
+  ///     will be called.  Defaults to true.
+  ///
+  ///     When this ModuleList is the Target's ModuleList, the notifier 
+  ///     function is Target::ModulesDidUnload -- the call to 
+  ///     ModulesDidUnload may be deferred when removing multiple Modules 
+  ///     from the Target, but it must be called at the end, 
+  ///     before resuming execution.
+  bool Remove(const lldb::ModuleSP &module_sp, bool notify = true);
+
+  size_t Remove(ModuleList &module_list);
+
+  bool RemoveIfOrphaned(const Module *module_ptr);
+
+  size_t RemoveOrphans(bool mandatory);
+
+  bool ResolveFileAddress(lldb::addr_t vm_addr, Address &so_addr) const;
+
+  /// \copydoc Module::ResolveSymbolContextForAddress (const Address
+  /// &,uint32_t,SymbolContext&)
+  uint32_t ResolveSymbolContextForAddress(const Address &so_addr,
+                                          lldb::SymbolContextItem resolve_scope,
+                                          SymbolContext &sc) const;
+
+  /// \copydoc Module::ResolveSymbolContextForFilePath (const char
+  /// *,uint32_t,bool,uint32_t,SymbolContextList&)
+  uint32_t ResolveSymbolContextForFilePath(
+      const char *file_path, uint32_t line, bool check_inlines,
+      lldb::SymbolContextItem resolve_scope, SymbolContextList &sc_list) const;
+
+  /// \copydoc Module::ResolveSymbolContextsForFileSpec (const FileSpec
+  /// &,uint32_t,bool,uint32_t,SymbolContextList&)
+  uint32_t ResolveSymbolContextsForFileSpec(
+      const FileSpec &file_spec, uint32_t line, bool check_inlines,
+      lldb::SymbolContextItem resolve_scope, SymbolContextList &sc_list) const;
+
+  /// Gets the size of the module list.
+  ///
+  /// \return
+  ///     The number of modules in the module list.
+  size_t GetSize() const;
+
+  bool LoadScriptingResourcesInTarget(Target *target, std::list<Status> &errors,
+                                      Stream *feedback_stream = nullptr,
+                                      bool continue_on_error = true);
+
+  static ModuleListProperties &GetGlobalModuleListProperties();
+
+  static bool ModuleIsInCache(const Module *module_ptr);
+
+  static Status GetSharedModule(const ModuleSpec &module_spec,
+                                lldb::ModuleSP &module_sp,
+                                const FileSpecList *module_search_paths_ptr,
+                                lldb::ModuleSP *old_module_sp_ptr,
+                                bool *did_create_ptr,
+                                bool always_create = false);
+
+  static bool RemoveSharedModule(lldb::ModuleSP &module_sp);
+
+  static size_t FindSharedModules(const ModuleSpec &module_spec,
+                                  ModuleList &matching_module_list);
+
+  static size_t RemoveOrphanSharedModules(bool mandatory);
+
+  static bool RemoveSharedModuleIfOrphaned(const Module *module_ptr);
+  
+  void ForEach(std::function<bool(const lldb::ModuleSP &module_sp)> const
+                   &callback) const;
+
+protected:
+  // Class typedefs.
+  typedef std::vector<lldb::ModuleSP>
+      collection; ///< The module collection type.
+
+  void AppendImpl(const lldb::ModuleSP &module_sp, bool use_notifier = true);
+
+  bool RemoveImpl(const lldb::ModuleSP &module_sp, bool use_notifier = true);
+
+  collection::iterator RemoveImpl(collection::iterator pos,
+                                  bool use_notifier = true);
+
+  void ClearImpl(bool use_notifier = true);
+
+  // Member variables.
+  collection m_modules; ///< The collection of modules.
+  mutable std::recursive_mutex m_modules_mutex;
+
+  Notifier *m_notifier;
+
+public:
+  typedef LockingAdaptedIterable<collection, lldb::ModuleSP, vector_adapter,
+                                 std::recursive_mutex>
+      ModuleIterable;
+  ModuleIterable Modules() { return ModuleIterable(m_modules, GetMutex()); }
+
+  typedef AdaptedIterable<collection, lldb::ModuleSP, vector_adapter>
+      ModuleIterableNoLocking;
+  ModuleIterableNoLocking ModulesNoLocking() {
+    return ModuleIterableNoLocking(m_modules);
+  }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ModuleList_h_
diff --git a/linux-x64/clang/include/lldb/Core/ModuleSpec.h b/linux-x64/clang/include/lldb/Core/ModuleSpec.h
new file mode 100644
index 0000000..ab0f4e9
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ModuleSpec.h
@@ -0,0 +1,425 @@
+//===-- ModuleSpec.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ModuleSpec_h_
+#define liblldb_ModuleSpec_h_
+
+#include "lldb/Host/FileSystem.h"
+#include "lldb/Target/PathMappingList.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/Utility/UUID.h"
+
+#include "llvm/Support/Chrono.h"
+
+#include <mutex>
+#include <vector>
+
+namespace lldb_private {
+
+class ModuleSpec {
+public:
+  ModuleSpec()
+      : m_file(), m_platform_file(), m_symbol_file(), m_arch(), m_uuid(),
+        m_object_name(), m_object_offset(0), m_object_size(0),
+        m_source_mappings() {}
+
+  ModuleSpec(const FileSpec &file_spec, const UUID &uuid = UUID())
+      : m_file(file_spec), m_platform_file(), m_symbol_file(), m_arch(),
+        m_uuid(uuid), m_object_name(), m_object_offset(0),
+        m_object_size(FileSystem::Instance().GetByteSize(file_spec)),
+        m_source_mappings() {}
+
+  ModuleSpec(const FileSpec &file_spec, const ArchSpec &arch)
+      : m_file(file_spec), m_platform_file(), m_symbol_file(), m_arch(arch),
+        m_uuid(), m_object_name(), m_object_offset(0),
+        m_object_size(FileSystem::Instance().GetByteSize(file_spec)),
+        m_source_mappings() {}
+
+  ModuleSpec(const ModuleSpec &rhs)
+      : m_file(rhs.m_file), m_platform_file(rhs.m_platform_file),
+        m_symbol_file(rhs.m_symbol_file), m_arch(rhs.m_arch),
+        m_uuid(rhs.m_uuid), m_object_name(rhs.m_object_name),
+        m_object_offset(rhs.m_object_offset), m_object_size(rhs.m_object_size),
+        m_object_mod_time(rhs.m_object_mod_time),
+        m_source_mappings(rhs.m_source_mappings) {}
+
+  ModuleSpec &operator=(const ModuleSpec &rhs) {
+    if (this != &rhs) {
+      m_file = rhs.m_file;
+      m_platform_file = rhs.m_platform_file;
+      m_symbol_file = rhs.m_symbol_file;
+      m_arch = rhs.m_arch;
+      m_uuid = rhs.m_uuid;
+      m_object_name = rhs.m_object_name;
+      m_object_offset = rhs.m_object_offset;
+      m_object_size = rhs.m_object_size;
+      m_object_mod_time = rhs.m_object_mod_time;
+      m_source_mappings = rhs.m_source_mappings;
+    }
+    return *this;
+  }
+
+  FileSpec *GetFileSpecPtr() { return (m_file ? &m_file : nullptr); }
+
+  const FileSpec *GetFileSpecPtr() const {
+    return (m_file ? &m_file : nullptr);
+  }
+
+  FileSpec &GetFileSpec() { return m_file; }
+
+  const FileSpec &GetFileSpec() const { return m_file; }
+
+  FileSpec *GetPlatformFileSpecPtr() {
+    return (m_platform_file ? &m_platform_file : nullptr);
+  }
+
+  const FileSpec *GetPlatformFileSpecPtr() const {
+    return (m_platform_file ? &m_platform_file : nullptr);
+  }
+
+  FileSpec &GetPlatformFileSpec() { return m_platform_file; }
+
+  const FileSpec &GetPlatformFileSpec() const { return m_platform_file; }
+
+  FileSpec *GetSymbolFileSpecPtr() {
+    return (m_symbol_file ? &m_symbol_file : nullptr);
+  }
+
+  const FileSpec *GetSymbolFileSpecPtr() const {
+    return (m_symbol_file ? &m_symbol_file : nullptr);
+  }
+
+  FileSpec &GetSymbolFileSpec() { return m_symbol_file; }
+
+  const FileSpec &GetSymbolFileSpec() const { return m_symbol_file; }
+
+  ArchSpec *GetArchitecturePtr() {
+    return (m_arch.IsValid() ? &m_arch : nullptr);
+  }
+
+  const ArchSpec *GetArchitecturePtr() const {
+    return (m_arch.IsValid() ? &m_arch : nullptr);
+  }
+
+  ArchSpec &GetArchitecture() { return m_arch; }
+
+  const ArchSpec &GetArchitecture() const { return m_arch; }
+
+  UUID *GetUUIDPtr() { return (m_uuid.IsValid() ? &m_uuid : nullptr); }
+
+  const UUID *GetUUIDPtr() const {
+    return (m_uuid.IsValid() ? &m_uuid : nullptr);
+  }
+
+  UUID &GetUUID() { return m_uuid; }
+
+  const UUID &GetUUID() const { return m_uuid; }
+
+  ConstString &GetObjectName() { return m_object_name; }
+
+  ConstString GetObjectName() const { return m_object_name; }
+
+  uint64_t GetObjectOffset() const { return m_object_offset; }
+
+  void SetObjectOffset(uint64_t object_offset) {
+    m_object_offset = object_offset;
+  }
+
+  uint64_t GetObjectSize() const { return m_object_size; }
+
+  void SetObjectSize(uint64_t object_size) { m_object_size = object_size; }
+
+  llvm::sys::TimePoint<> &GetObjectModificationTime() {
+    return m_object_mod_time;
+  }
+
+  const llvm::sys::TimePoint<> &GetObjectModificationTime() const {
+    return m_object_mod_time;
+  }
+
+  PathMappingList &GetSourceMappingList() const { return m_source_mappings; }
+
+  void Clear() {
+    m_file.Clear();
+    m_platform_file.Clear();
+    m_symbol_file.Clear();
+    m_arch.Clear();
+    m_uuid.Clear();
+    m_object_name.Clear();
+    m_object_offset = 0;
+    m_object_size = 0;
+    m_source_mappings.Clear(false);
+    m_object_mod_time = llvm::sys::TimePoint<>();
+  }
+
+  explicit operator bool() const {
+    if (m_file)
+      return true;
+    if (m_platform_file)
+      return true;
+    if (m_symbol_file)
+      return true;
+    if (m_arch.IsValid())
+      return true;
+    if (m_uuid.IsValid())
+      return true;
+    if (m_object_name)
+      return true;
+    if (m_object_size)
+      return true;
+    if (m_object_mod_time != llvm::sys::TimePoint<>())
+      return true;
+    return false;
+  }
+
+  void Dump(Stream &strm) const {
+    bool dumped_something = false;
+    if (m_file) {
+      strm.PutCString("file = '");
+      strm << m_file;
+      strm.PutCString("'");
+      dumped_something = true;
+    }
+    if (m_platform_file) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.PutCString("platform_file = '");
+      strm << m_platform_file;
+      strm.PutCString("'");
+      dumped_something = true;
+    }
+    if (m_symbol_file) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.PutCString("symbol_file = '");
+      strm << m_symbol_file;
+      strm.PutCString("'");
+      dumped_something = true;
+    }
+    if (m_arch.IsValid()) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.Printf("arch = ");
+      m_arch.DumpTriple(strm);
+      dumped_something = true;
+    }
+    if (m_uuid.IsValid()) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.PutCString("uuid = ");
+      m_uuid.Dump(&strm);
+      dumped_something = true;
+    }
+    if (m_object_name) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.Printf("object_name = %s", m_object_name.GetCString());
+      dumped_something = true;
+    }
+    if (m_object_offset > 0) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.Printf("object_offset = %" PRIu64, m_object_offset);
+      dumped_something = true;
+    }
+    if (m_object_size > 0) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.Printf("object size = %" PRIu64, m_object_size);
+      dumped_something = true;
+    }
+    if (m_object_mod_time != llvm::sys::TimePoint<>()) {
+      if (dumped_something)
+        strm.PutCString(", ");
+      strm.Format("object_mod_time = {0:x+}",
+                  uint64_t(llvm::sys::toTimeT(m_object_mod_time)));
+    }
+  }
+
+  bool Matches(const ModuleSpec &match_module_spec,
+               bool exact_arch_match) const {
+    if (match_module_spec.GetUUIDPtr() &&
+        match_module_spec.GetUUID() != GetUUID())
+      return false;
+    if (match_module_spec.GetObjectName() &&
+        match_module_spec.GetObjectName() != GetObjectName())
+      return false;
+    if (match_module_spec.GetFileSpecPtr()) {
+      const FileSpec &fspec = match_module_spec.GetFileSpec();
+      if (!FileSpec::Equal(fspec, GetFileSpec(),
+                           !fspec.GetDirectory().IsEmpty()))
+        return false;
+    }
+    if (GetPlatformFileSpec() && match_module_spec.GetPlatformFileSpecPtr()) {
+      const FileSpec &fspec = match_module_spec.GetPlatformFileSpec();
+      if (!FileSpec::Equal(fspec, GetPlatformFileSpec(),
+                           !fspec.GetDirectory().IsEmpty()))
+        return false;
+    }
+    // Only match the symbol file spec if there is one in this ModuleSpec
+    if (GetSymbolFileSpec() && match_module_spec.GetSymbolFileSpecPtr()) {
+      const FileSpec &fspec = match_module_spec.GetSymbolFileSpec();
+      if (!FileSpec::Equal(fspec, GetSymbolFileSpec(),
+                           !fspec.GetDirectory().IsEmpty()))
+        return false;
+    }
+    if (match_module_spec.GetArchitecturePtr()) {
+      if (exact_arch_match) {
+        if (!GetArchitecture().IsExactMatch(
+                match_module_spec.GetArchitecture()))
+          return false;
+      } else {
+        if (!GetArchitecture().IsCompatibleMatch(
+                match_module_spec.GetArchitecture()))
+          return false;
+      }
+    }
+    return true;
+  }
+
+protected:
+  FileSpec m_file;
+  FileSpec m_platform_file;
+  FileSpec m_symbol_file;
+  ArchSpec m_arch;
+  UUID m_uuid;
+  ConstString m_object_name;
+  uint64_t m_object_offset;
+  uint64_t m_object_size;
+  llvm::sys::TimePoint<> m_object_mod_time;
+  mutable PathMappingList m_source_mappings;
+};
+
+class ModuleSpecList {
+public:
+  ModuleSpecList() : m_specs(), m_mutex() {}
+
+  ModuleSpecList(const ModuleSpecList &rhs) : m_specs(), m_mutex() {
+    std::lock_guard<std::recursive_mutex> lhs_guard(m_mutex);
+    std::lock_guard<std::recursive_mutex> rhs_guard(rhs.m_mutex);
+    m_specs = rhs.m_specs;
+  }
+
+  ~ModuleSpecList() = default;
+
+  ModuleSpecList &operator=(const ModuleSpecList &rhs) {
+    if (this != &rhs) {
+      std::lock(m_mutex, rhs.m_mutex);
+      std::lock_guard<std::recursive_mutex> lhs_guard(m_mutex, std::adopt_lock);
+      std::lock_guard<std::recursive_mutex> rhs_guard(rhs.m_mutex, 
+                                                      std::adopt_lock);
+      m_specs = rhs.m_specs;
+    }
+    return *this;
+  }
+
+  size_t GetSize() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_specs.size();
+  }
+
+  void Clear() {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    m_specs.clear();
+  }
+
+  void Append(const ModuleSpec &spec) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    m_specs.push_back(spec);
+  }
+
+  void Append(const ModuleSpecList &rhs) {
+    std::lock_guard<std::recursive_mutex> lhs_guard(m_mutex);
+    std::lock_guard<std::recursive_mutex> rhs_guard(rhs.m_mutex);
+    m_specs.insert(m_specs.end(), rhs.m_specs.begin(), rhs.m_specs.end());
+  }
+
+  // The index "i" must be valid and this can't be used in multi-threaded code
+  // as no mutex lock is taken.
+  ModuleSpec &GetModuleSpecRefAtIndex(size_t i) { return m_specs[i]; }
+
+  bool GetModuleSpecAtIndex(size_t i, ModuleSpec &module_spec) const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    if (i < m_specs.size()) {
+      module_spec = m_specs[i];
+      return true;
+    }
+    module_spec.Clear();
+    return false;
+  }
+
+  bool FindMatchingModuleSpec(const ModuleSpec &module_spec,
+                              ModuleSpec &match_module_spec) const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    bool exact_arch_match = true;
+    for (auto spec : m_specs) {
+      if (spec.Matches(module_spec, exact_arch_match)) {
+        match_module_spec = spec;
+        return true;
+      }
+    }
+
+    // If there was an architecture, retry with a compatible arch
+    if (module_spec.GetArchitecturePtr()) {
+      exact_arch_match = false;
+      for (auto spec : m_specs) {
+        if (spec.Matches(module_spec, exact_arch_match)) {
+          match_module_spec = spec;
+          return true;
+        }
+      }
+    }
+    match_module_spec.Clear();
+    return false;
+  }
+
+  size_t FindMatchingModuleSpecs(const ModuleSpec &module_spec,
+                                 ModuleSpecList &matching_list) const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    bool exact_arch_match = true;
+    const size_t initial_match_count = matching_list.GetSize();
+    for (auto spec : m_specs) {
+      if (spec.Matches(module_spec, exact_arch_match))
+        matching_list.Append(spec);
+    }
+
+    // If there was an architecture, retry with a compatible arch if no matches
+    // were found
+    if (module_spec.GetArchitecturePtr() &&
+        (initial_match_count == matching_list.GetSize())) {
+      exact_arch_match = false;
+      for (auto spec : m_specs) {
+        if (spec.Matches(module_spec, exact_arch_match))
+          matching_list.Append(spec);
+      }
+    }
+    return matching_list.GetSize() - initial_match_count;
+  }
+
+  void Dump(Stream &strm) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    uint32_t idx = 0;
+    for (auto spec : m_specs) {
+      strm.Printf("[%u] ", idx);
+      spec.Dump(strm);
+      strm.EOL();
+      ++idx;
+    }
+  }
+
+protected:
+  typedef std::vector<ModuleSpec> collection; ///< The module collection type.
+  collection m_specs;                         ///< The collection of modules.
+  mutable std::recursive_mutex m_mutex;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ModuleSpec_h_
diff --git a/linux-x64/clang/include/lldb/Core/Opcode.h b/linux-x64/clang/include/lldb/Core/Opcode.h
new file mode 100644
index 0000000..1a30ce4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Opcode.h
@@ -0,0 +1,273 @@
+//===-- Opcode.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Opcode_h
+#define lldb_Opcode_h
+
+#include "lldb/Utility/Endian.h"
+#include "lldb/lldb-enumerations.h"
+
+#include "llvm/Support/MathExtras.h"
+
+#include <assert.h>
+#include <stdint.h>
+#include <string.h>
+
+namespace lldb {
+class SBInstruction;
+}
+
+namespace lldb_private {
+class DataExtractor;
+class Stream;
+
+class Opcode {
+public:
+  enum Type {
+    eTypeInvalid,
+    eType8,
+    eType16,
+    eType16_2, // a 32-bit Thumb instruction, made up of two words
+    eType32,
+    eType64,
+    eTypeBytes
+  };
+
+  Opcode() : m_byte_order(lldb::eByteOrderInvalid), m_type(eTypeInvalid) {}
+
+  Opcode(uint8_t inst, lldb::ByteOrder order)
+      : m_byte_order(order), m_type(eType8) {
+    m_data.inst8 = inst;
+  }
+
+  Opcode(uint16_t inst, lldb::ByteOrder order)
+      : m_byte_order(order), m_type(eType16) {
+    m_data.inst16 = inst;
+  }
+
+  Opcode(uint32_t inst, lldb::ByteOrder order)
+      : m_byte_order(order), m_type(eType32) {
+    m_data.inst32 = inst;
+  }
+
+  Opcode(uint64_t inst, lldb::ByteOrder order)
+      : m_byte_order(order), m_type(eType64) {
+    m_data.inst64 = inst;
+  }
+
+  Opcode(uint8_t *bytes, size_t length)
+      : m_byte_order(lldb::eByteOrderInvalid) {
+    SetOpcodeBytes(bytes, length);
+  }
+
+  void Clear() {
+    m_byte_order = lldb::eByteOrderInvalid;
+    m_type = Opcode::eTypeInvalid;
+  }
+
+  Opcode::Type GetType() const { return m_type; }
+
+  uint8_t GetOpcode8(uint8_t invalid_opcode = UINT8_MAX) const {
+    switch (m_type) {
+    case Opcode::eTypeInvalid:
+      break;
+    case Opcode::eType8:
+      return m_data.inst8;
+    case Opcode::eType16:
+      break;
+    case Opcode::eType16_2:
+      break;
+    case Opcode::eType32:
+      break;
+    case Opcode::eType64:
+      break;
+    case Opcode::eTypeBytes:
+      break;
+    }
+    return invalid_opcode;
+  }
+
+  uint16_t GetOpcode16(uint16_t invalid_opcode = UINT16_MAX) const {
+    switch (m_type) {
+    case Opcode::eTypeInvalid:
+      break;
+    case Opcode::eType8:
+      return m_data.inst8;
+    case Opcode::eType16:
+      return GetEndianSwap() ? llvm::ByteSwap_16(m_data.inst16) : m_data.inst16;
+    case Opcode::eType16_2:
+      break;
+    case Opcode::eType32:
+      break;
+    case Opcode::eType64:
+      break;
+    case Opcode::eTypeBytes:
+      break;
+    }
+    return invalid_opcode;
+  }
+
+  uint32_t GetOpcode32(uint32_t invalid_opcode = UINT32_MAX) const {
+    switch (m_type) {
+    case Opcode::eTypeInvalid:
+      break;
+    case Opcode::eType8:
+      return m_data.inst8;
+    case Opcode::eType16:
+      return GetEndianSwap() ? llvm::ByteSwap_16(m_data.inst16) : m_data.inst16;
+    case Opcode::eType16_2: // passthrough
+    case Opcode::eType32:
+      return GetEndianSwap() ? llvm::ByteSwap_32(m_data.inst32) : m_data.inst32;
+    case Opcode::eType64:
+      break;
+    case Opcode::eTypeBytes:
+      break;
+    }
+    return invalid_opcode;
+  }
+
+  uint64_t GetOpcode64(uint64_t invalid_opcode = UINT64_MAX) const {
+    switch (m_type) {
+    case Opcode::eTypeInvalid:
+      break;
+    case Opcode::eType8:
+      return m_data.inst8;
+    case Opcode::eType16:
+      return GetEndianSwap() ? llvm::ByteSwap_16(m_data.inst16) : m_data.inst16;
+    case Opcode::eType16_2: // passthrough
+    case Opcode::eType32:
+      return GetEndianSwap() ? llvm::ByteSwap_32(m_data.inst32) : m_data.inst32;
+    case Opcode::eType64:
+      return GetEndianSwap() ? llvm::ByteSwap_64(m_data.inst64) : m_data.inst64;
+    case Opcode::eTypeBytes:
+      break;
+    }
+    return invalid_opcode;
+  }
+
+  void SetOpcode8(uint8_t inst, lldb::ByteOrder order) {
+    m_type = eType8;
+    m_data.inst8 = inst;
+    m_byte_order = order;
+  }
+
+  void SetOpcode16(uint16_t inst, lldb::ByteOrder order) {
+    m_type = eType16;
+    m_data.inst16 = inst;
+    m_byte_order = order;
+  }
+
+  void SetOpcode16_2(uint32_t inst, lldb::ByteOrder order) {
+    m_type = eType16_2;
+    m_data.inst32 = inst;
+    m_byte_order = order;
+  }
+
+  void SetOpcode32(uint32_t inst, lldb::ByteOrder order) {
+    m_type = eType32;
+    m_data.inst32 = inst;
+    m_byte_order = order;
+  }
+
+  void SetOpcode64(uint64_t inst, lldb::ByteOrder order) {
+    m_type = eType64;
+    m_data.inst64 = inst;
+    m_byte_order = order;
+  }
+
+  void SetOpcodeBytes(const void *bytes, size_t length) {
+    if (bytes != nullptr && length > 0) {
+      m_type = eTypeBytes;
+      m_data.inst.length = length;
+      assert(length < sizeof(m_data.inst.bytes));
+      memcpy(m_data.inst.bytes, bytes, length);
+      m_byte_order = lldb::eByteOrderInvalid;
+    } else {
+      m_type = eTypeInvalid;
+      m_data.inst.length = 0;
+    }
+  }
+
+  int Dump(Stream *s, uint32_t min_byte_width);
+
+  const void *GetOpcodeBytes() const {
+    return ((m_type == Opcode::eTypeBytes) ? m_data.inst.bytes : nullptr);
+  }
+
+  uint32_t GetByteSize() const {
+    switch (m_type) {
+    case Opcode::eTypeInvalid:
+      break;
+    case Opcode::eType8:
+      return sizeof(m_data.inst8);
+    case Opcode::eType16:
+      return sizeof(m_data.inst16);
+    case Opcode::eType16_2: // passthrough
+    case Opcode::eType32:
+      return sizeof(m_data.inst32);
+    case Opcode::eType64:
+      return sizeof(m_data.inst64);
+    case Opcode::eTypeBytes:
+      return m_data.inst.length;
+    }
+    return 0;
+  }
+
+  // Get the opcode exactly as it would be laid out in memory.
+  uint32_t GetData(DataExtractor &data) const;
+
+protected:
+  friend class lldb::SBInstruction;
+
+  const void *GetOpcodeDataBytes() const {
+    switch (m_type) {
+    case Opcode::eTypeInvalid:
+      break;
+    case Opcode::eType8:
+      return &m_data.inst8;
+    case Opcode::eType16:
+      return &m_data.inst16;
+    case Opcode::eType16_2: // passthrough
+    case Opcode::eType32:
+      return &m_data.inst32;
+    case Opcode::eType64:
+      return &m_data.inst64;
+    case Opcode::eTypeBytes:
+      return m_data.inst.bytes;
+    }
+    return nullptr;
+  }
+
+  lldb::ByteOrder GetDataByteOrder() const;
+
+  bool GetEndianSwap() const {
+    return (m_byte_order == lldb::eByteOrderBig &&
+            endian::InlHostByteOrder() == lldb::eByteOrderLittle) ||
+           (m_byte_order == lldb::eByteOrderLittle &&
+            endian::InlHostByteOrder() == lldb::eByteOrderBig);
+  }
+
+  lldb::ByteOrder m_byte_order;
+
+  Opcode::Type m_type;
+  union {
+    uint8_t inst8;
+    uint16_t inst16;
+    uint32_t inst32;
+    uint64_t inst64;
+    struct {
+      uint8_t bytes[16]; // This must be big enough to handle any opcode for any
+                         // supported target.
+      uint8_t length;
+    } inst;
+  } m_data;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_Opcode_h
diff --git a/linux-x64/clang/include/lldb/Core/PluginInterface.h b/linux-x64/clang/include/lldb/Core/PluginInterface.h
new file mode 100644
index 0000000..6e625a6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/PluginInterface.h
@@ -0,0 +1,27 @@
+//===-- PluginInterface.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_PluginInterface_h_
+#define liblldb_PluginInterface_h_
+
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class PluginInterface {
+public:
+  virtual ~PluginInterface() {}
+
+  virtual ConstString GetPluginName() = 0;
+
+  virtual uint32_t GetPluginVersion() = 0;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_PluginInterface_h_
diff --git a/linux-x64/clang/include/lldb/Core/PluginManager.h b/linux-x64/clang/include/lldb/Core/PluginManager.h
new file mode 100644
index 0000000..1bac1e5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/PluginManager.h
@@ -0,0 +1,492 @@
+//===-- PluginManager.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_PluginManager_h_
+#define liblldb_PluginManager_h_
+
+#include "lldb/Core/Architecture.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-interfaces.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class CommandInterpreter;
+class ConstString;
+class Debugger;
+class StringList;
+
+class PluginManager {
+public:
+  static void Initialize();
+
+  static void Terminate();
+
+  // ABI
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             ABICreateInstance create_callback);
+
+  static bool UnregisterPlugin(ABICreateInstance create_callback);
+
+  static ABICreateInstance GetABICreateCallbackAtIndex(uint32_t idx);
+
+  static ABICreateInstance
+  GetABICreateCallbackForPluginName(ConstString name);
+
+  // Architecture
+  using ArchitectureCreateInstance =
+      std::unique_ptr<Architecture> (*)(const ArchSpec &);
+
+  static void RegisterPlugin(ConstString name,
+                             llvm::StringRef description,
+                             ArchitectureCreateInstance create_callback);
+
+  static void UnregisterPlugin(ArchitectureCreateInstance create_callback);
+
+  static std::unique_ptr<Architecture>
+  CreateArchitectureInstance(const ArchSpec &arch);
+
+  // Disassembler
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             DisassemblerCreateInstance create_callback);
+
+  static bool UnregisterPlugin(DisassemblerCreateInstance create_callback);
+
+  static DisassemblerCreateInstance
+  GetDisassemblerCreateCallbackAtIndex(uint32_t idx);
+
+  static DisassemblerCreateInstance
+  GetDisassemblerCreateCallbackForPluginName(ConstString name);
+
+  // DynamicLoader
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 DynamicLoaderCreateInstance create_callback,
+                 DebuggerInitializeCallback debugger_init_callback = nullptr);
+
+  static bool UnregisterPlugin(DynamicLoaderCreateInstance create_callback);
+
+  static DynamicLoaderCreateInstance
+  GetDynamicLoaderCreateCallbackAtIndex(uint32_t idx);
+
+  static DynamicLoaderCreateInstance
+  GetDynamicLoaderCreateCallbackForPluginName(ConstString name);
+
+  // JITLoader
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 JITLoaderCreateInstance create_callback,
+                 DebuggerInitializeCallback debugger_init_callback = nullptr);
+
+  static bool UnregisterPlugin(JITLoaderCreateInstance create_callback);
+
+  static JITLoaderCreateInstance
+  GetJITLoaderCreateCallbackAtIndex(uint32_t idx);
+
+  static JITLoaderCreateInstance
+  GetJITLoaderCreateCallbackForPluginName(ConstString name);
+
+  // EmulateInstruction
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             EmulateInstructionCreateInstance create_callback);
+
+  static bool
+  UnregisterPlugin(EmulateInstructionCreateInstance create_callback);
+
+  static EmulateInstructionCreateInstance
+  GetEmulateInstructionCreateCallbackAtIndex(uint32_t idx);
+
+  static EmulateInstructionCreateInstance
+  GetEmulateInstructionCreateCallbackForPluginName(ConstString name);
+
+  // OperatingSystem
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             OperatingSystemCreateInstance create_callback,
+                             DebuggerInitializeCallback debugger_init_callback);
+
+  static bool UnregisterPlugin(OperatingSystemCreateInstance create_callback);
+
+  static OperatingSystemCreateInstance
+  GetOperatingSystemCreateCallbackAtIndex(uint32_t idx);
+
+  static OperatingSystemCreateInstance
+  GetOperatingSystemCreateCallbackForPluginName(ConstString name);
+
+  // Language
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             LanguageCreateInstance create_callback);
+
+  static bool UnregisterPlugin(LanguageCreateInstance create_callback);
+
+  static LanguageCreateInstance GetLanguageCreateCallbackAtIndex(uint32_t idx);
+
+  static LanguageCreateInstance
+  GetLanguageCreateCallbackForPluginName(ConstString name);
+
+  // LanguageRuntime
+  static bool RegisterPlugin(
+      ConstString name, const char *description,
+      LanguageRuntimeCreateInstance create_callback,
+      LanguageRuntimeGetCommandObject command_callback = nullptr,
+      LanguageRuntimeGetExceptionPrecondition precondition_callback = nullptr);
+
+  static bool UnregisterPlugin(LanguageRuntimeCreateInstance create_callback);
+
+  static LanguageRuntimeCreateInstance
+  GetLanguageRuntimeCreateCallbackAtIndex(uint32_t idx);
+
+  static LanguageRuntimeGetCommandObject
+  GetLanguageRuntimeGetCommandObjectAtIndex(uint32_t idx);
+
+  static LanguageRuntimeGetExceptionPrecondition
+  GetLanguageRuntimeGetExceptionPreconditionAtIndex(uint32_t idx);
+
+  static LanguageRuntimeCreateInstance
+  GetLanguageRuntimeCreateCallbackForPluginName(ConstString name);
+
+  // SystemRuntime
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             SystemRuntimeCreateInstance create_callback);
+
+  static bool UnregisterPlugin(SystemRuntimeCreateInstance create_callback);
+
+  static SystemRuntimeCreateInstance
+  GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx);
+
+  static SystemRuntimeCreateInstance
+  GetSystemRuntimeCreateCallbackForPluginName(ConstString name);
+
+  // ObjectFile
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 ObjectFileCreateInstance create_callback,
+                 ObjectFileCreateMemoryInstance create_memory_callback,
+                 ObjectFileGetModuleSpecifications get_module_specifications,
+                 ObjectFileSaveCore save_core = nullptr);
+
+  static bool UnregisterPlugin(ObjectFileCreateInstance create_callback);
+
+  static ObjectFileCreateInstance
+  GetObjectFileCreateCallbackAtIndex(uint32_t idx);
+
+  static ObjectFileCreateMemoryInstance
+  GetObjectFileCreateMemoryCallbackAtIndex(uint32_t idx);
+
+  static ObjectFileGetModuleSpecifications
+  GetObjectFileGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
+
+  static ObjectFileCreateInstance
+  GetObjectFileCreateCallbackForPluginName(ConstString name);
+
+  static ObjectFileCreateMemoryInstance
+  GetObjectFileCreateMemoryCallbackForPluginName(ConstString name);
+
+  static Status SaveCore(const lldb::ProcessSP &process_sp,
+                         const FileSpec &outfile);
+
+  // ObjectContainer
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 ObjectContainerCreateInstance create_callback,
+                 ObjectFileGetModuleSpecifications get_module_specifications);
+
+  static bool UnregisterPlugin(ObjectContainerCreateInstance create_callback);
+
+  static ObjectContainerCreateInstance
+  GetObjectContainerCreateCallbackAtIndex(uint32_t idx);
+
+  static ObjectContainerCreateInstance
+  GetObjectContainerCreateCallbackForPluginName(ConstString name);
+
+  static ObjectFileGetModuleSpecifications
+  GetObjectContainerGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
+
+  // Platform
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 PlatformCreateInstance create_callback,
+                 DebuggerInitializeCallback debugger_init_callback = nullptr);
+
+  static bool UnregisterPlugin(PlatformCreateInstance create_callback);
+
+  static PlatformCreateInstance GetPlatformCreateCallbackAtIndex(uint32_t idx);
+
+  static PlatformCreateInstance
+  GetPlatformCreateCallbackForPluginName(ConstString name);
+
+  static const char *GetPlatformPluginNameAtIndex(uint32_t idx);
+
+  static const char *GetPlatformPluginDescriptionAtIndex(uint32_t idx);
+
+  static size_t AutoCompletePlatformName(llvm::StringRef partial_name,
+                                         StringList &matches);
+  // Process
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 ProcessCreateInstance create_callback,
+                 DebuggerInitializeCallback debugger_init_callback = nullptr);
+
+  static bool UnregisterPlugin(ProcessCreateInstance create_callback);
+
+  static ProcessCreateInstance GetProcessCreateCallbackAtIndex(uint32_t idx);
+
+  static ProcessCreateInstance
+  GetProcessCreateCallbackForPluginName(ConstString name);
+
+  static const char *GetProcessPluginNameAtIndex(uint32_t idx);
+
+  static const char *GetProcessPluginDescriptionAtIndex(uint32_t idx);
+
+  // ScriptInterpreter
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             lldb::ScriptLanguage script_lang,
+                             ScriptInterpreterCreateInstance create_callback);
+
+  static bool UnregisterPlugin(ScriptInterpreterCreateInstance create_callback);
+
+  static ScriptInterpreterCreateInstance
+  GetScriptInterpreterCreateCallbackAtIndex(uint32_t idx);
+
+  static lldb::ScriptInterpreterSP
+  GetScriptInterpreterForLanguage(lldb::ScriptLanguage script_lang,
+                                  Debugger &debugger);
+
+  // StructuredDataPlugin
+
+  /// Register a StructuredDataPlugin class along with optional
+  /// callbacks for debugger initialization and Process launch info
+  /// filtering and manipulation.
+  ///
+  /// \param[in] name
+  ///    The name of the plugin.
+  ///
+  /// \param[in] description
+  ///    A description string for the plugin.
+  ///
+  /// \param[in] create_callback
+  ///    The callback that will be invoked to create an instance of
+  ///    the callback.  This may not be nullptr.
+  ///
+  /// \param[in] debugger_init_callback
+  ///    An optional callback that will be made when a Debugger
+  ///    instance is initialized.
+  ///
+  /// \param[in] filter_callback
+  ///    An optional callback that will be invoked before LLDB
+  ///    launches a process for debugging.  The callback must
+  ///    do the following:
+  ///    1. Only do something if the plugin's behavior is enabled.
+  ///    2. Only make changes for processes that are relevant to the
+  ///       plugin.  The callback gets a pointer to the Target, which
+  ///       can be inspected as needed.  The ProcessLaunchInfo is
+  ///       provided in read-write mode, and may be modified by the
+  ///       plugin if, for instance, additional environment variables
+  ///       are needed to support the feature when enabled.
+  ///
+  /// \return
+  ///    Returns true upon success; otherwise, false.
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 StructuredDataPluginCreateInstance create_callback,
+                 DebuggerInitializeCallback debugger_init_callback = nullptr,
+                 StructuredDataFilterLaunchInfo filter_callback = nullptr);
+
+  static bool
+  UnregisterPlugin(StructuredDataPluginCreateInstance create_callback);
+
+  static StructuredDataPluginCreateInstance
+  GetStructuredDataPluginCreateCallbackAtIndex(uint32_t idx);
+
+  static StructuredDataPluginCreateInstance
+  GetStructuredDataPluginCreateCallbackForPluginName(ConstString name);
+
+  static StructuredDataFilterLaunchInfo
+  GetStructuredDataFilterCallbackAtIndex(uint32_t idx,
+                                         bool &iteration_complete);
+
+  // SymbolFile
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 SymbolFileCreateInstance create_callback,
+                 DebuggerInitializeCallback debugger_init_callback = nullptr);
+
+  static bool UnregisterPlugin(SymbolFileCreateInstance create_callback);
+
+  static SymbolFileCreateInstance
+  GetSymbolFileCreateCallbackAtIndex(uint32_t idx);
+
+  static SymbolFileCreateInstance
+  GetSymbolFileCreateCallbackForPluginName(ConstString name);
+
+  // SymbolVendor
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             SymbolVendorCreateInstance create_callback);
+
+  static bool UnregisterPlugin(SymbolVendorCreateInstance create_callback);
+
+  static SymbolVendorCreateInstance
+  GetSymbolVendorCreateCallbackAtIndex(uint32_t idx);
+
+  static SymbolVendorCreateInstance
+  GetSymbolVendorCreateCallbackForPluginName(ConstString name);
+
+  // UnwindAssembly
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             UnwindAssemblyCreateInstance create_callback);
+
+  static bool UnregisterPlugin(UnwindAssemblyCreateInstance create_callback);
+
+  static UnwindAssemblyCreateInstance
+  GetUnwindAssemblyCreateCallbackAtIndex(uint32_t idx);
+
+  static UnwindAssemblyCreateInstance
+  GetUnwindAssemblyCreateCallbackForPluginName(ConstString name);
+
+  // MemoryHistory
+  static bool RegisterPlugin(ConstString name, const char *description,
+                             MemoryHistoryCreateInstance create_callback);
+
+  static bool UnregisterPlugin(MemoryHistoryCreateInstance create_callback);
+
+  static MemoryHistoryCreateInstance
+  GetMemoryHistoryCreateCallbackAtIndex(uint32_t idx);
+
+  static MemoryHistoryCreateInstance
+  GetMemoryHistoryCreateCallbackForPluginName(ConstString name);
+
+  // InstrumentationRuntime
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 InstrumentationRuntimeCreateInstance create_callback,
+                 InstrumentationRuntimeGetType get_type_callback);
+
+  static bool
+  UnregisterPlugin(InstrumentationRuntimeCreateInstance create_callback);
+
+  static InstrumentationRuntimeGetType
+  GetInstrumentationRuntimeGetTypeCallbackAtIndex(uint32_t idx);
+
+  static InstrumentationRuntimeCreateInstance
+  GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx);
+
+  static InstrumentationRuntimeCreateInstance
+  GetInstrumentationRuntimeCreateCallbackForPluginName(ConstString name);
+
+  // TypeSystem
+  static bool RegisterPlugin(
+      ConstString name, const char *description,
+      TypeSystemCreateInstance create_callback,
+      TypeSystemEnumerateSupportedLanguages enumerate_languages_callback);
+
+  static bool UnregisterPlugin(TypeSystemCreateInstance create_callback);
+
+  static TypeSystemCreateInstance
+  GetTypeSystemCreateCallbackAtIndex(uint32_t idx);
+
+  static TypeSystemCreateInstance
+  GetTypeSystemCreateCallbackForPluginName(ConstString name);
+
+  static TypeSystemEnumerateSupportedLanguages
+  GetTypeSystemEnumerateSupportedLanguagesCallbackAtIndex(uint32_t idx);
+
+  static TypeSystemEnumerateSupportedLanguages
+  GetTypeSystemEnumerateSupportedLanguagesCallbackForPluginName(
+      ConstString name);
+
+  // REPL
+  static bool
+  RegisterPlugin(ConstString name, const char *description,
+                 REPLCreateInstance create_callback,
+                 REPLEnumerateSupportedLanguages enumerate_languages_callback);
+
+  static bool UnregisterPlugin(REPLCreateInstance create_callback);
+
+  static REPLCreateInstance GetREPLCreateCallbackAtIndex(uint32_t idx);
+
+  static REPLCreateInstance
+  GetREPLCreateCallbackForPluginName(ConstString name);
+
+  static REPLEnumerateSupportedLanguages
+  GetREPLEnumerateSupportedLanguagesCallbackAtIndex(uint32_t idx);
+
+  static REPLEnumerateSupportedLanguages
+  GetREPLSystemEnumerateSupportedLanguagesCallbackForPluginName(
+      ConstString name);
+
+  // Some plug-ins might register a DebuggerInitializeCallback callback when
+  // registering the plug-in. After a new Debugger instance is created, this
+  // DebuggerInitialize function will get called. This allows plug-ins to
+  // install Properties and do any other initialization that requires a
+  // debugger instance.
+  static void DebuggerInitialize(Debugger &debugger);
+
+  static lldb::OptionValuePropertiesSP
+  GetSettingForDynamicLoaderPlugin(Debugger &debugger,
+                                   ConstString setting_name);
+
+  static bool CreateSettingForDynamicLoaderPlugin(
+      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
+      ConstString description, bool is_global_property);
+
+  static lldb::OptionValuePropertiesSP
+  GetSettingForPlatformPlugin(Debugger &debugger,
+                              ConstString setting_name);
+
+  static bool CreateSettingForPlatformPlugin(
+      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
+      ConstString description, bool is_global_property);
+
+  static lldb::OptionValuePropertiesSP
+  GetSettingForProcessPlugin(Debugger &debugger,
+                             ConstString setting_name);
+
+  static bool CreateSettingForProcessPlugin(
+      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
+      ConstString description, bool is_global_property);
+
+  static lldb::OptionValuePropertiesSP
+  GetSettingForSymbolFilePlugin(Debugger &debugger,
+                                ConstString setting_name);
+
+  static bool CreateSettingForSymbolFilePlugin(
+      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
+      ConstString description, bool is_global_property);
+
+  static lldb::OptionValuePropertiesSP
+  GetSettingForJITLoaderPlugin(Debugger &debugger,
+                               ConstString setting_name);
+
+  static bool CreateSettingForJITLoaderPlugin(
+      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
+      ConstString description, bool is_global_property);
+
+  static lldb::OptionValuePropertiesSP
+  GetSettingForOperatingSystemPlugin(Debugger &debugger,
+                                     ConstString setting_name);
+
+  static bool CreateSettingForOperatingSystemPlugin(
+      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
+      ConstString description, bool is_global_property);
+
+  static lldb::OptionValuePropertiesSP
+  GetSettingForStructuredDataPlugin(Debugger &debugger,
+                                    ConstString setting_name);
+
+  static bool CreateSettingForStructuredDataPlugin(
+      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
+      ConstString description, bool is_global_property);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_PluginManager_h_
diff --git a/linux-x64/clang/include/lldb/Core/RichManglingContext.h b/linux-x64/clang/include/lldb/Core/RichManglingContext.h
new file mode 100644
index 0000000..e6fa259
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/RichManglingContext.h
@@ -0,0 +1,107 @@
+//===-- RichManglingContext.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_RichManglingContext_h_
+#define liblldb_RichManglingContext_h_
+
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+
+#include "lldb/Utility/ConstString.h"
+
+#include "llvm/ADT/Any.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Demangle/Demangle.h"
+
+namespace lldb_private {
+
+/// Uniform wrapper for access to rich mangling information from different
+/// providers. See Mangled::DemangleWithRichManglingInfo()
+class RichManglingContext {
+public:
+  RichManglingContext() : m_provider(None), m_ipd_buf_size(2048) {
+    m_ipd_buf = static_cast<char *>(std::malloc(m_ipd_buf_size));
+    m_ipd_buf[0] = '\0';
+  }
+
+  ~RichManglingContext() { std::free(m_ipd_buf); }
+
+  /// Use the ItaniumPartialDemangler to obtain rich mangling information from
+  /// the given mangled name.
+  bool FromItaniumName(ConstString mangled);
+
+  /// Use the legacy language parser implementation to obtain rich mangling
+  /// information from the given demangled name.
+  bool FromCxxMethodName(ConstString demangled);
+
+  /// If this symbol describes a constructor or destructor.
+  bool IsCtorOrDtor() const;
+
+  /// If this symbol describes a function.
+  bool IsFunction() const;
+
+  /// Get the base name of a function. This doesn't include trailing template
+  /// arguments, ie "a::b<int>" gives "b". The result will overwrite the
+  /// internal buffer. It can be obtained via GetBufferRef().
+  void ParseFunctionBaseName();
+
+  /// Get the context name for a function. For "a::b::c", this function returns
+  /// "a::b". The result will overwrite the internal buffer. It can be obtained
+  /// via GetBufferRef().
+  void ParseFunctionDeclContextName();
+
+  /// Get the entire demangled name. The result will overwrite the internal
+  /// buffer. It can be obtained via GetBufferRef().
+  void ParseFullName();
+
+  /// Obtain a StringRef to the internal buffer that holds the result of the
+  /// most recent ParseXy() operation. The next ParseXy() call invalidates it.
+  llvm::StringRef GetBufferRef() const {
+    assert(m_provider != None && "Initialize a provider first");
+    return m_buffer;
+  }
+
+private:
+  enum InfoProvider { None, ItaniumPartialDemangler, PluginCxxLanguage };
+
+  /// Selects the rich mangling info provider.
+  InfoProvider m_provider;
+
+  /// Reference to the buffer used for results of ParseXy() operations.
+  llvm::StringRef m_buffer;
+
+  /// Members for ItaniumPartialDemangler
+  llvm::ItaniumPartialDemangler m_ipd;
+  char *m_ipd_buf;
+  size_t m_ipd_buf_size;
+
+  /// Members for PluginCxxLanguage
+  /// Cannot forward declare inner class CPlusPlusLanguage::MethodName. The
+  /// respective header is in Plugins and including it from here causes cyclic
+  /// dependency. Instead keep a llvm::Any and cast it on-access in the cpp.
+  llvm::Any m_cxx_method_parser;
+
+  /// Clean up memory and set a new info provider for this instance.
+  void ResetProvider(InfoProvider new_provider);
+
+  /// Uniform handling of string buffers for ItaniumPartialDemangler.
+  void processIPDStrResult(char *ipd_res, size_t res_len);
+
+  /// Cast the given parser to the given type. Ideally we would have a type
+  /// trait to deduce \a ParserT from a given InfoProvider, but unfortunately we
+  /// can't access CPlusPlusLanguage::MethodName from within the header.
+  template <class ParserT> static ParserT *get(llvm::Any parser) {
+    assert(parser.hasValue());
+    assert(llvm::any_isa<ParserT *>(parser));
+    return llvm::any_cast<ParserT *>(parser);
+  }
+};
+
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Core/STLUtils.h b/linux-x64/clang/include/lldb/Core/STLUtils.h
new file mode 100644
index 0000000..830aca3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/STLUtils.h
@@ -0,0 +1,74 @@
+//===-- STLUtils.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_STLUtils_h_
+#define liblldb_STLUtils_h_
+
+#include <string.h>
+
+#include <map>
+#include <ostream>
+#include <vector>
+
+
+// C string less than compare function object
+struct CStringCompareFunctionObject {
+  bool operator()(const char *s1, const char *s2) const {
+    return strcmp(s1, s2) < 0;
+  }
+};
+
+// C string equality function object (binary predicate).
+struct CStringEqualBinaryPredicate {
+  bool operator()(const char *s1, const char *s2) const {
+    return strcmp(s1, s2) == 0;
+  }
+};
+
+// Templated type for finding an entry in a std::map<F,S> whose value is equal
+// to something
+template <class F, class S> class ValueEquals {
+public:
+  ValueEquals(const S &val) : second_value(val) {}
+
+  // Compare the second item
+  bool operator()(std::pair<const F, S> elem) {
+    return elem.second == second_value;
+  }
+
+private:
+  S second_value;
+};
+
+template <class T>
+inline void PrintAllCollectionElements(std::ostream &s, const T &coll,
+                                       const char *header_cstr = nullptr,
+                                       const char *separator_cstr = " ") {
+  typename T::const_iterator pos;
+
+  if (header_cstr)
+    s << header_cstr;
+  for (pos = coll.begin(); pos != coll.end(); ++pos) {
+    s << *pos << separator_cstr;
+  }
+  s << std::endl;
+}
+
+// The function object below can be used to delete a STL container that
+// contains C++ object pointers.
+//
+// Usage: std::for_each(vector.begin(), vector.end(), for_each_delete());
+
+struct for_each_cplusplus_delete {
+  template <typename T> void operator()(T *ptr) { delete ptr; }
+};
+
+typedef std::vector<std::string> STLStringArray;
+typedef std::vector<const char *> CStringArray;
+
+#endif // liblldb_STLUtils_h_
diff --git a/linux-x64/clang/include/lldb/Core/SearchFilter.h b/linux-x64/clang/include/lldb/Core/SearchFilter.h
new file mode 100644
index 0000000..f38690c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/SearchFilter.h
@@ -0,0 +1,456 @@
+//===-- SearchFilter.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SearchFilter_h_
+#define liblldb_SearchFilter_h_
+
+#include "lldb/Core/FileSpecList.h"
+#include "lldb/Utility/StructuredData.h"
+
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-forward.h"
+
+#include <stdint.h>
+
+namespace lldb_private {
+class Address;
+class Breakpoint;
+class CompileUnit;
+class Status;
+class Function;
+class ModuleList;
+class SearchFilter;
+class Stream;
+class SymbolContext;
+class Target;
+}
+
+namespace lldb_private {
+
+/// \class Searcher SearchFilter.h "lldb/Core/SearchFilter.h" Class that is
+/// driven by the SearchFilter to search the SymbolContext space of the target
+/// program.
+
+/// General Outline:
+/// Provides the callback and search depth for the SearchFilter search.
+
+class Searcher {
+public:
+  enum CallbackReturn {
+    eCallbackReturnStop = 0, // Stop the iteration
+    eCallbackReturnContinue, // Continue the iteration
+    eCallbackReturnPop       // Pop one level up and continue iterating
+  };
+
+  Searcher();
+
+  virtual ~Searcher();
+
+  virtual CallbackReturn SearchCallback(SearchFilter &filter,
+                                        SymbolContext &context, Address *addr,
+                                        bool complete) = 0;
+
+  virtual lldb::SearchDepth GetDepth() = 0;
+
+  /// Prints a canonical description for the searcher to the stream \a s.
+  ///
+  /// \param[in] s
+  ///   Stream to which the output is copied.
+  virtual void GetDescription(Stream *s);
+};
+
+/// \class SearchFilter SearchFilter.h "lldb/Core/SearchFilter.h" Class
+/// descends through the SymbolContext space of the target, applying a filter
+/// at each stage till it reaches the depth specified by the GetDepth method
+/// of the searcher, and calls its callback at that point.
+
+/// General Outline:
+/// Provides the callback and search depth for the SearchFilter search.
+///
+/// The search is done by cooperation between the search filter and the
+/// searcher. The search filter does the heavy work of recursing through the
+/// SymbolContext space of the target program's symbol space.  The Searcher
+/// specifies the depth at which it wants its callback to be invoked.  Note
+/// that since the resolution of the Searcher may be greater than that of the
+/// SearchFilter, before the Searcher qualifies an address it should pass it
+/// to "AddressPasses." The default implementation is "Everything Passes."
+
+class SearchFilter {
+public:
+  /// The basic constructor takes a Target, which gives the space to search.
+  ///
+  /// \param[in] target
+  ///    The Target that provides the module list to search.
+  SearchFilter(const lldb::TargetSP &target_sp);
+
+  SearchFilter(const lldb::TargetSP &target_sp, unsigned char filterType);
+
+  virtual ~SearchFilter();
+
+  /// Call this method with a file spec to see if that spec passes the filter.
+  ///
+  /// \param[in] spec
+  ///    The file spec to check against the filter.
+  /// \return
+  ///    \b true if \a spec passes, and \b false otherwise.
+  virtual bool ModulePasses(const FileSpec &spec);
+
+  /// Call this method with a Module to see if that module passes the filter.
+  ///
+  /// \param[in] module
+  ///    The Module to check against the filter.
+  ///
+  /// \return
+  ///    \b true if \a module passes, and \b false otherwise.
+  virtual bool ModulePasses(const lldb::ModuleSP &module_sp);
+
+  /// Call this method with a Address to see if \a address passes the filter.
+  ///
+  /// \param[in] addr
+  ///    The address to check against the filter.
+  ///
+  /// \return
+  ///    \b true if \a address passes, and \b false otherwise.
+  virtual bool AddressPasses(Address &addr);
+
+  /// Call this method with a FileSpec to see if \a file spec passes the
+  /// filter as the name of a compilation unit.
+  ///
+  /// \param[in] fileSpec
+  ///    The file spec to check against the filter.
+  ///
+  /// \return
+  ///    \b true if \a file spec passes, and \b false otherwise.
+  virtual bool CompUnitPasses(FileSpec &fileSpec);
+
+  /// Call this method with a CompileUnit to see if \a comp unit passes the
+  /// filter.
+  ///
+  /// \param[in] compUnit
+  ///    The CompileUnit to check against the filter.
+  ///
+  /// \return
+  ///    \b true if \a Comp Unit passes, and \b false otherwise.
+  virtual bool CompUnitPasses(CompileUnit &compUnit);
+
+  /// Call this method with a Function to see if \a function passes the
+  /// filter.
+  ///
+  /// \param[in] function
+  ///    The Functions to check against the filter.
+  ///
+  /// \return
+  ///    \b true if \a function passes, and \b false otherwise.
+  virtual bool FunctionPasses(Function &function);
+
+  /// Call this method to do the search using the Searcher.
+  ///
+  /// \param[in] searcher
+  ///    The searcher to drive with this search.
+  ///
+  virtual void Search(Searcher &searcher);
+
+  /// Call this method to do the search using the Searcher in the module list
+  /// \a modules.
+  ///
+  /// \param[in] searcher
+  ///    The searcher to drive with this search.
+  ///
+  /// \param[in] modules
+  ///    The module list within which to restrict the search.
+  ///
+  virtual void SearchInModuleList(Searcher &searcher, ModuleList &modules);
+
+  /// This determines which items are REQUIRED for the filter to pass. For
+  /// instance, if you are filtering by Compilation Unit, obviously symbols
+  /// that have no compilation unit can't pass  So return eSymbolContextCU and
+  /// search callbacks can then short cut the search to avoid looking at
+  /// things that obviously won't pass.
+  ///
+  /// \return
+  ///    The required elements for the search, which is an or'ed together
+  ///    set of lldb:SearchContextItem enum's.
+  ///
+  virtual uint32_t GetFilterRequiredItems();
+
+  /// Prints a canonical description for the search filter to the stream \a s.
+  ///
+  /// \param[in] s
+  ///   Stream to which the output is copied.
+  virtual void GetDescription(Stream *s);
+
+  /// Standard "Dump" method.  At present it does nothing.
+  virtual void Dump(Stream *s) const;
+
+  lldb::SearchFilterSP CopyForBreakpoint(Breakpoint &breakpoint);
+
+  static lldb::SearchFilterSP
+  CreateFromStructuredData(Target &target,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  virtual StructuredData::ObjectSP SerializeToStructuredData() {
+    return StructuredData::ObjectSP();
+  }
+
+  static const char *GetSerializationKey() { return "SearchFilter"; }
+
+  static const char *GetSerializationSubclassKey() { return "Type"; }
+
+  static const char *GetSerializationSubclassOptionsKey() { return "Options"; }
+
+  enum FilterTy {
+    Unconstrained = 0,
+    Exception,
+    ByModule,
+    ByModules,
+    ByModulesAndCU,
+    LastKnownFilterType = ByModulesAndCU,
+    UnknownFilter
+  };
+
+  static const char *g_ty_to_name[LastKnownFilterType + 2];
+
+  enum FilterTy GetFilterTy() {
+    if (SubclassID > FilterTy::LastKnownFilterType)
+      return FilterTy::UnknownFilter;
+    else
+      return (enum FilterTy)SubclassID;
+  }
+
+  const char *GetFilterName() { return FilterTyToName(GetFilterTy()); }
+
+  static const char *FilterTyToName(enum FilterTy);
+
+  static FilterTy NameToFilterTy(llvm::StringRef name);
+
+protected:
+  // Serialization of SearchFilter options:
+  enum OptionNames { ModList = 0, CUList, LanguageName, LastOptionName };
+  static const char *g_option_names[LastOptionName];
+
+  static const char *GetKey(enum OptionNames enum_value) {
+    return g_option_names[enum_value];
+  }
+
+  StructuredData::DictionarySP
+  WrapOptionsDict(StructuredData::DictionarySP options_dict_sp);
+
+  void SerializeFileSpecList(StructuredData::DictionarySP &options_dict_sp,
+                             OptionNames name, FileSpecList &file_list);
+
+  // These are utility functions to assist with the search iteration.  They are
+  // used by the default Search method.
+
+  Searcher::CallbackReturn DoModuleIteration(const SymbolContext &context,
+                                             Searcher &searcher);
+
+  Searcher::CallbackReturn DoModuleIteration(const lldb::ModuleSP &module_sp,
+                                             Searcher &searcher);
+
+  Searcher::CallbackReturn DoCUIteration(const lldb::ModuleSP &module_sp,
+                                         const SymbolContext &context,
+                                         Searcher &searcher);
+
+  Searcher::CallbackReturn DoFunctionIteration(Function *function,
+                                               const SymbolContext &context,
+                                               Searcher &searcher);
+
+  virtual lldb::SearchFilterSP DoCopyForBreakpoint(Breakpoint &breakpoint) = 0;
+
+  void SetTarget(lldb::TargetSP &target_sp) { m_target_sp = target_sp; }
+
+  lldb::TargetSP
+      m_target_sp; // Every filter has to be associated with a target for
+                   // now since you need a starting place for the search.
+private:
+  unsigned char SubclassID;
+};
+
+/// \class SearchFilterForUnconstrainedSearches SearchFilter.h
+/// "lldb/Core/SearchFilter.h" This is a SearchFilter that searches through
+/// all modules.  It also consults the
+/// Target::ModuleIsExcludedForUnconstrainedSearches.
+class SearchFilterForUnconstrainedSearches : public SearchFilter {
+public:
+  SearchFilterForUnconstrainedSearches(const lldb::TargetSP &target_sp)
+      : SearchFilter(target_sp, FilterTy::Unconstrained) {}
+
+  ~SearchFilterForUnconstrainedSearches() override = default;
+
+  bool ModulePasses(const FileSpec &module_spec) override;
+
+  bool ModulePasses(const lldb::ModuleSP &module_sp) override;
+
+  static lldb::SearchFilterSP
+  CreateFromStructuredData(Target &target,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+protected:
+  lldb::SearchFilterSP DoCopyForBreakpoint(Breakpoint &breakpoint) override;
+};
+
+/// \class SearchFilterByModule SearchFilter.h "lldb/Core/SearchFilter.h" This
+/// is a SearchFilter that restricts the search to a given module.
+
+class SearchFilterByModule : public SearchFilter {
+public:
+  /// The basic constructor takes a Target, which gives the space to search,
+  /// and the module to restrict the search to.
+  ///
+  /// \param[in] target
+  ///    The Target that provides the module list to search.
+  ///
+  /// \param[in] module
+  ///    The Module that limits the search.
+  SearchFilterByModule(const lldb::TargetSP &targetSP, const FileSpec &module);
+
+  ~SearchFilterByModule() override;
+
+  bool ModulePasses(const lldb::ModuleSP &module_sp) override;
+
+  bool ModulePasses(const FileSpec &spec) override;
+
+  bool AddressPasses(Address &address) override;
+
+  bool CompUnitPasses(FileSpec &fileSpec) override;
+
+  bool CompUnitPasses(CompileUnit &compUnit) override;
+
+  void GetDescription(Stream *s) override;
+
+  uint32_t GetFilterRequiredItems() override;
+
+  void Dump(Stream *s) const override;
+
+  void Search(Searcher &searcher) override;
+
+  static lldb::SearchFilterSP
+  CreateFromStructuredData(Target &target,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+protected:
+  lldb::SearchFilterSP DoCopyForBreakpoint(Breakpoint &breakpoint) override;
+
+private:
+  FileSpec m_module_spec;
+};
+
+class SearchFilterByModuleList : public SearchFilter {
+public:
+  /// The basic constructor takes a Target, which gives the space to search,
+  /// and the module list to restrict the search to.
+  ///
+  /// \param[in] target
+  ///    The Target that provides the module list to search.
+  ///
+  /// \param[in] module
+  ///    The Module that limits the search.
+  SearchFilterByModuleList(const lldb::TargetSP &targetSP,
+                           const FileSpecList &module_list);
+
+  SearchFilterByModuleList(const lldb::TargetSP &targetSP,
+                           const FileSpecList &module_list,
+                           enum FilterTy filter_ty);
+
+  ~SearchFilterByModuleList() override;
+
+  SearchFilterByModuleList &operator=(const SearchFilterByModuleList &rhs);
+
+  bool ModulePasses(const lldb::ModuleSP &module_sp) override;
+
+  bool ModulePasses(const FileSpec &spec) override;
+
+  bool AddressPasses(Address &address) override;
+
+  bool CompUnitPasses(FileSpec &fileSpec) override;
+
+  bool CompUnitPasses(CompileUnit &compUnit) override;
+
+  void GetDescription(Stream *s) override;
+
+  uint32_t GetFilterRequiredItems() override;
+
+  void Dump(Stream *s) const override;
+
+  void Search(Searcher &searcher) override;
+
+  static lldb::SearchFilterSP
+  CreateFromStructuredData(Target &target,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+  void SerializeUnwrapped(StructuredData::DictionarySP &options_dict_sp);
+
+protected:
+  lldb::SearchFilterSP DoCopyForBreakpoint(Breakpoint &breakpoint) override;
+
+protected:
+  FileSpecList m_module_spec_list;
+};
+
+class SearchFilterByModuleListAndCU : public SearchFilterByModuleList {
+public:
+  /// The basic constructor takes a Target, which gives the space to search,
+  /// and the module list to restrict the search to.
+  ///
+  /// \param[in] target
+  ///    The Target that provides the module list to search.
+  ///
+  /// \param[in] module
+  ///    The Module that limits the search.
+  SearchFilterByModuleListAndCU(const lldb::TargetSP &targetSP,
+                                const FileSpecList &module_list,
+                                const FileSpecList &cu_list);
+
+  SearchFilterByModuleListAndCU(const SearchFilterByModuleListAndCU &rhs);
+
+  ~SearchFilterByModuleListAndCU() override;
+
+  SearchFilterByModuleListAndCU &
+  operator=(const SearchFilterByModuleListAndCU &rhs);
+
+  bool AddressPasses(Address &address) override;
+
+  bool CompUnitPasses(FileSpec &fileSpec) override;
+
+  bool CompUnitPasses(CompileUnit &compUnit) override;
+
+  void GetDescription(Stream *s) override;
+
+  uint32_t GetFilterRequiredItems() override;
+
+  void Dump(Stream *s) const override;
+
+  void Search(Searcher &searcher) override;
+
+  static lldb::SearchFilterSP
+  CreateFromStructuredData(Target &target,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+protected:
+  lldb::SearchFilterSP DoCopyForBreakpoint(Breakpoint &breakpoint) override;
+
+private:
+  FileSpecList m_cu_spec_list;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SearchFilter_h_
diff --git a/linux-x64/clang/include/lldb/Core/Section.h b/linux-x64/clang/include/lldb/Core/Section.h
new file mode 100644
index 0000000..542849b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Section.h
@@ -0,0 +1,271 @@
+//===-- Section.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Section_h_
+#define liblldb_Section_h_
+
+#include "lldb/Core/ModuleChild.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Flags.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include <memory>
+#include <vector>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class Address;
+class DataExtractor;
+class ObjectFile;
+class Section;
+class Stream;
+class Target;
+
+class SectionList {
+public:
+  typedef std::vector<lldb::SectionSP> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  SectionList();
+
+  ~SectionList();
+
+  SectionList &operator=(const SectionList &rhs);
+
+  size_t AddSection(const lldb::SectionSP &section_sp);
+
+  size_t AddUniqueSection(const lldb::SectionSP &section_sp);
+
+  size_t FindSectionIndex(const Section *sect);
+
+  bool ContainsSection(lldb::user_id_t sect_id) const;
+
+  void Dump(Stream *s, Target *target, bool show_header, uint32_t depth) const;
+
+  lldb::SectionSP FindSectionByName(ConstString section_dstr) const;
+
+  lldb::SectionSP FindSectionByID(lldb::user_id_t sect_id) const;
+
+  lldb::SectionSP FindSectionByType(lldb::SectionType sect_type,
+                                    bool check_children,
+                                    size_t start_idx = 0) const;
+
+  lldb::SectionSP
+  FindSectionContainingFileAddress(lldb::addr_t addr,
+                                   uint32_t depth = UINT32_MAX) const;
+
+  // Get the number of sections in this list only
+  size_t GetSize() const { return m_sections.size(); }
+
+  // Get the number of sections in this list, and any contained child sections
+  size_t GetNumSections(uint32_t depth) const;
+
+  bool ReplaceSection(lldb::user_id_t sect_id,
+                      const lldb::SectionSP &section_sp,
+                      uint32_t depth = UINT32_MAX);
+
+  // Warning, this can be slow as it's removing items from a std::vector.
+  bool DeleteSection(size_t idx);
+
+  lldb::SectionSP GetSectionAtIndex(size_t idx) const;
+
+  size_t Slide(lldb::addr_t slide_amount, bool slide_children);
+
+  void Clear() { m_sections.clear(); }
+
+protected:
+  collection m_sections;
+};
+
+class Section : public std::enable_shared_from_this<Section>,
+                public ModuleChild,
+                public UserID,
+                public Flags {
+public:
+  // Create a root section (one that has no parent)
+  Section(const lldb::ModuleSP &module_sp, ObjectFile *obj_file,
+          lldb::user_id_t sect_id, ConstString name,
+          lldb::SectionType sect_type, lldb::addr_t file_vm_addr,
+          lldb::addr_t vm_size, lldb::offset_t file_offset,
+          lldb::offset_t file_size, uint32_t log2align, uint32_t flags,
+          uint32_t target_byte_size = 1);
+
+  // Create a section that is a child of parent_section_sp
+  Section(const lldb::SectionSP &parent_section_sp, // NULL for top level
+                                                    // sections, non-NULL for
+                                                    // child sections
+          const lldb::ModuleSP &module_sp, ObjectFile *obj_file,
+          lldb::user_id_t sect_id, ConstString name,
+          lldb::SectionType sect_type, lldb::addr_t file_vm_addr,
+          lldb::addr_t vm_size, lldb::offset_t file_offset,
+          lldb::offset_t file_size, uint32_t log2align, uint32_t flags,
+          uint32_t target_byte_size = 1);
+
+  ~Section();
+
+  static int Compare(const Section &a, const Section &b);
+
+  bool ContainsFileAddress(lldb::addr_t vm_addr) const;
+
+  SectionList &GetChildren() { return m_children; }
+
+  const SectionList &GetChildren() const { return m_children; }
+
+  void Dump(Stream *s, Target *target, uint32_t depth) const;
+
+  void DumpName(Stream *s) const;
+
+  lldb::addr_t GetLoadBaseAddress(Target *target) const;
+
+  bool ResolveContainedAddress(lldb::addr_t offset, Address &so_addr,
+                               bool allow_section_end = false) const;
+
+  lldb::offset_t GetFileOffset() const { return m_file_offset; }
+
+  void SetFileOffset(lldb::offset_t file_offset) {
+    m_file_offset = file_offset;
+  }
+
+  lldb::offset_t GetFileSize() const { return m_file_size; }
+
+  void SetFileSize(lldb::offset_t file_size) { m_file_size = file_size; }
+
+  lldb::addr_t GetFileAddress() const;
+
+  bool SetFileAddress(lldb::addr_t file_addr);
+
+  lldb::addr_t GetOffset() const;
+
+  lldb::addr_t GetByteSize() const { return m_byte_size; }
+
+  void SetByteSize(lldb::addr_t byte_size) { m_byte_size = byte_size; }
+
+  bool IsFake() const { return m_fake; }
+
+  void SetIsFake(bool fake) { m_fake = fake; }
+
+  bool IsEncrypted() const { return m_encrypted; }
+
+  void SetIsEncrypted(bool b) { m_encrypted = b; }
+
+  bool IsDescendant(const Section *section);
+
+  ConstString GetName() const { return m_name; }
+
+  bool Slide(lldb::addr_t slide_amount, bool slide_children);
+
+  lldb::SectionType GetType() const { return m_type; }
+
+  const char *GetTypeAsCString() const;
+
+  lldb::SectionSP GetParent() const { return m_parent_wp.lock(); }
+
+  bool IsThreadSpecific() const { return m_thread_specific; }
+
+  void SetIsThreadSpecific(bool b) { m_thread_specific = b; }
+
+  /// Get the permissions as OR'ed bits from lldb::Permissions
+  uint32_t GetPermissions() const;
+
+  /// Set the permissions using bits OR'ed from lldb::Permissions
+  void SetPermissions(uint32_t permissions);
+
+  ObjectFile *GetObjectFile() { return m_obj_file; }
+  const ObjectFile *GetObjectFile() const { return m_obj_file; }
+
+  /// Read the section data from the object file that the section
+  /// resides in.
+  ///
+  /// \param[in] dst
+  ///     Where to place the data
+  ///
+  /// \param[in] dst_len
+  ///     How many bytes of section data to read
+  ///
+  /// \param[in] offset
+  ///     The offset in bytes within this section's data at which to
+  ///     start copying data from.
+  ///
+  /// \return
+  ///     The number of bytes read from the section, or zero if the
+  ///     section has no data or \a offset is not a valid offset
+  ///     in this section.
+  lldb::offset_t GetSectionData(void *dst, lldb::offset_t dst_len,
+                                lldb::offset_t offset = 0);
+
+  /// Get the shared reference to the section data from the object
+  /// file that the section resides in. No copies of the data will be
+  /// make unless the object file has been read from memory. If the
+  /// object file is on disk, it will shared the mmap data for the
+  /// entire object file.
+  ///
+  /// \param[in] data
+  ///     Where to place the data, address byte size, and byte order
+  ///
+  /// \return
+  ///     The number of bytes read from the section, or zero if the
+  ///     section has no data or \a offset is not a valid offset
+  ///     in this section.
+  lldb::offset_t GetSectionData(DataExtractor &data);
+
+  uint32_t GetLog2Align() { return m_log2align; }
+
+  void SetLog2Align(uint32_t align) { m_log2align = align; }
+
+  // Get the number of host bytes required to hold a target byte
+  uint32_t GetTargetByteSize() const { return m_target_byte_size; }
+
+  bool IsRelocated() const { return m_relocated; }
+
+  void SetIsRelocated(bool b) { m_relocated = b; }
+
+protected:
+  ObjectFile *m_obj_file;   // The object file that data for this section should
+                            // be read from
+  lldb::SectionType m_type; // The type of this section
+  lldb::SectionWP m_parent_wp; // Weak pointer to parent section
+  ConstString m_name;          // Name of this section
+  lldb::addr_t m_file_addr; // The absolute file virtual address range of this
+                            // section if m_parent == NULL,
+  // offset from parent file virtual address if m_parent != NULL
+  lldb::addr_t m_byte_size; // Size in bytes that this section will occupy in
+                            // memory at runtime
+  lldb::offset_t m_file_offset; // Object file offset (if any)
+  lldb::offset_t m_file_size;   // Object file size (can be smaller than
+                                // m_byte_size for zero filled sections...)
+  uint32_t m_log2align;   // log_2(align) of the section (i.e. section has to be
+                          // aligned to 2^m_log2align)
+  SectionList m_children; // Child sections
+  bool m_fake : 1, // If true, then this section only can contain the address if
+                   // one of its
+      // children contains an address. This allows for gaps between the
+      // children that are contained in the address range for this section, but
+      // do not produce hits unless the children contain the address.
+      m_encrypted : 1,         // Set to true if the contents are encrypted
+      m_thread_specific : 1,   // This section is thread specific
+      m_readable : 1,          // If this section has read permissions
+      m_writable : 1,          // If this section has write permissions
+      m_executable : 1,        // If this section has executable permissions
+      m_relocated : 1;         // If this section has had relocations applied
+  uint32_t m_target_byte_size; // Some architectures have non-8-bit byte size.
+                               // This is specified as
+                               // as a multiple number of a host bytes
+private:
+  DISALLOW_COPY_AND_ASSIGN(Section);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Section_h_
diff --git a/linux-x64/clang/include/lldb/Core/SourceManager.h b/linux-x64/clang/include/lldb/Core/SourceManager.h
new file mode 100644
index 0000000..bca8177
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/SourceManager.h
@@ -0,0 +1,167 @@
+//===-- SourceManager.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SourceManager_h_
+#define liblldb_SourceManager_h_
+
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+
+#include "llvm/Support/Chrono.h"
+
+#include <cstdint>
+#include <map>
+#include <memory>
+#include <stddef.h>
+#include <string>
+#include <vector>
+
+namespace lldb_private {
+class RegularExpression;
+class Stream;
+class SymbolContextList;
+class Target;
+
+class SourceManager {
+public:
+  class File {
+    friend bool operator==(const SourceManager::File &lhs,
+                           const SourceManager::File &rhs);
+
+  public:
+    File(const FileSpec &file_spec, Target *target);
+    File(const FileSpec &file_spec, lldb::DebuggerSP debugger_sp);
+    ~File() = default;
+
+    void UpdateIfNeeded();
+
+    size_t DisplaySourceLines(uint32_t line, llvm::Optional<size_t> column,
+                              uint32_t context_before, uint32_t context_after,
+                              Stream *s);
+    void FindLinesMatchingRegex(RegularExpression &regex, uint32_t start_line,
+                                uint32_t end_line,
+                                std::vector<uint32_t> &match_lines);
+
+    bool GetLine(uint32_t line_no, std::string &buffer);
+
+    uint32_t GetLineOffset(uint32_t line);
+
+    bool LineIsValid(uint32_t line);
+
+    bool FileSpecMatches(const FileSpec &file_spec);
+
+    const FileSpec &GetFileSpec() { return m_file_spec; }
+
+    uint32_t GetSourceMapModificationID() const { return m_source_map_mod_id; }
+
+    const char *PeekLineData(uint32_t line);
+
+    uint32_t GetLineLength(uint32_t line, bool include_newline_chars);
+
+    uint32_t GetNumLines();
+
+  protected:
+    bool CalculateLineOffsets(uint32_t line = UINT32_MAX);
+
+    FileSpec m_file_spec_orig; // The original file spec that was used (can be
+                               // different from m_file_spec)
+    FileSpec m_file_spec; // The actually file spec being used (if the target
+                          // has source mappings, this might be different from
+                          // m_file_spec_orig)
+
+    // Keep the modification time that this file data is valid for
+    llvm::sys::TimePoint<> m_mod_time;
+
+    // If the target uses path remappings, be sure to clear our notion of a
+    // source file if the path modification ID changes
+    uint32_t m_source_map_mod_id = 0;
+    lldb::DataBufferSP m_data_sp;
+    typedef std::vector<uint32_t> LineOffsets;
+    LineOffsets m_offsets;
+    lldb::DebuggerWP m_debugger_wp;
+
+  private:
+    void CommonInitializer(const FileSpec &file_spec, Target *target);
+  };
+
+  typedef std::shared_ptr<File> FileSP;
+
+  // The SourceFileCache class separates the source manager from the cache of
+  // source files, so the cache can be stored in the Debugger, but the source
+  // managers can be per target.
+  class SourceFileCache {
+  public:
+    SourceFileCache() = default;
+    ~SourceFileCache() = default;
+
+    void AddSourceFile(const FileSP &file_sp);
+    FileSP FindSourceFile(const FileSpec &file_spec) const;
+
+  protected:
+    typedef std::map<FileSpec, FileSP> FileCache;
+    FileCache m_file_cache;
+  };
+
+  // Constructors and Destructors
+  // A source manager can be made with a non-null target, in which case it can
+  // use the path remappings to find
+  // source files that are not in their build locations.  With no target it
+  // won't be able to do this.
+  SourceManager(const lldb::DebuggerSP &debugger_sp);
+  SourceManager(const lldb::TargetSP &target_sp);
+
+  ~SourceManager();
+
+  FileSP GetLastFile() { return m_last_file_sp; }
+
+  size_t
+  DisplaySourceLinesWithLineNumbers(const FileSpec &file, uint32_t line,
+                                    uint32_t column, uint32_t context_before,
+                                    uint32_t context_after,
+                                    const char *current_line_cstr, Stream *s,
+                                    const SymbolContextList *bp_locs = nullptr);
+
+  // This variant uses the last file we visited.
+  size_t DisplaySourceLinesWithLineNumbersUsingLastFile(
+      uint32_t start_line, uint32_t count, uint32_t curr_line, uint32_t column,
+      const char *current_line_cstr, Stream *s,
+      const SymbolContextList *bp_locs = nullptr);
+
+  size_t DisplayMoreWithLineNumbers(Stream *s, uint32_t count, bool reverse,
+                                    const SymbolContextList *bp_locs = nullptr);
+
+  bool SetDefaultFileAndLine(const FileSpec &file_spec, uint32_t line);
+
+  bool GetDefaultFileAndLine(FileSpec &file_spec, uint32_t &line);
+
+  bool DefaultFileAndLineSet() { return (m_last_file_sp.get() != nullptr); }
+
+  void FindLinesMatchingRegex(FileSpec &file_spec, RegularExpression &regex,
+                              uint32_t start_line, uint32_t end_line,
+                              std::vector<uint32_t> &match_lines);
+
+  FileSP GetFile(const FileSpec &file_spec);
+
+protected:
+  FileSP m_last_file_sp;
+  uint32_t m_last_line;
+  uint32_t m_last_count;
+  bool m_default_set;
+  lldb::TargetWP m_target_wp;
+  lldb::DebuggerWP m_debugger_wp;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SourceManager);
+};
+
+bool operator==(const SourceManager::File &lhs, const SourceManager::File &rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_SourceManager_h_
diff --git a/linux-x64/clang/include/lldb/Core/StreamAsynchronousIO.h b/linux-x64/clang/include/lldb/Core/StreamAsynchronousIO.h
new file mode 100644
index 0000000..6237e12
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/StreamAsynchronousIO.h
@@ -0,0 +1,40 @@
+//===-- StreamAsynchronousIO.h -----------------------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StreamAsynchronousIO_h_
+#define liblldb_StreamAsynchronousIO_h_
+
+#include "lldb/Utility/Stream.h"
+
+#include <string>
+
+#include <stddef.h>
+
+namespace lldb_private {
+class Debugger;
+
+class StreamAsynchronousIO : public Stream {
+public:
+  StreamAsynchronousIO(Debugger &debugger, bool for_stdout);
+
+  ~StreamAsynchronousIO() override;
+
+  void Flush() override;
+
+protected:
+  size_t WriteImpl(const void *src, size_t src_len) override;
+
+private:
+  Debugger &m_debugger;
+  std::string m_data;
+  bool m_for_stdout;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StreamAsynchronousIO_h
diff --git a/linux-x64/clang/include/lldb/Core/StreamBuffer.h b/linux-x64/clang/include/lldb/Core/StreamBuffer.h
new file mode 100644
index 0000000..6c51651
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/StreamBuffer.h
@@ -0,0 +1,54 @@
+//===-- StreamBuffer.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StreamBuffer_h_
+#define liblldb_StreamBuffer_h_
+
+#include "lldb/Utility/Stream.h"
+#include "llvm/ADT/SmallVector.h"
+#include <stdio.h>
+#include <string>
+
+namespace lldb_private {
+
+template <unsigned N> class StreamBuffer : public Stream {
+public:
+  StreamBuffer() : Stream(0, 4, lldb::eByteOrderBig), m_packet() {}
+
+  StreamBuffer(uint32_t flags, uint32_t addr_size, lldb::ByteOrder byte_order)
+      : Stream(flags, addr_size, byte_order), m_packet() {}
+
+  ~StreamBuffer() override {}
+
+  void Flush() override {
+    // Nothing to do when flushing a buffer based stream...
+  }
+
+  void Clear() { m_packet.clear(); }
+
+  // Beware, this might not be NULL terminated as you can expect from
+  // StringString as there may be random bits in the llvm::SmallVector. If you
+  // are using this class to create a C string, be sure the call PutChar ('\0')
+  // after you have created your string, or use StreamString.
+  const char *GetData() const { return m_packet.data(); }
+
+  size_t GetSize() const { return m_packet.size(); }
+
+protected:
+  llvm::SmallVector<char, N> m_packet;
+
+  size_t WriteImpl(const void *s, size_t length) override {
+    if (s && length)
+      m_packet.append((const char *)s, ((const char *)s) + length);
+    return length;
+  }
+};
+
+} // namespace lldb_private
+
+#endif // #ifndef liblldb_StreamBuffer_h_
diff --git a/linux-x64/clang/include/lldb/Core/StreamFile.h b/linux-x64/clang/include/lldb/Core/StreamFile.h
new file mode 100644
index 0000000..54aeab1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/StreamFile.h
@@ -0,0 +1,58 @@
+//===-- StreamFile.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StreamFile_h_
+#define liblldb_StreamFile_h_
+
+#include "lldb/Host/File.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+
+#include <stdint.h>
+#include <stdio.h>
+
+namespace lldb_private {
+
+class StreamFile : public Stream {
+public:
+  // Constructors and Destructors
+  StreamFile();
+
+  StreamFile(uint32_t flags, uint32_t addr_size, lldb::ByteOrder byte_order);
+
+  StreamFile(int fd, bool transfer_ownership);
+
+  StreamFile(const char *path);
+
+  StreamFile(const char *path, uint32_t options,
+             uint32_t permissions = lldb::eFilePermissionsFileDefault);
+
+  StreamFile(FILE *fh, bool transfer_ownership);
+
+  ~StreamFile() override;
+
+  File &GetFile() { return m_file; }
+
+  const File &GetFile() const { return m_file; }
+
+  void Flush() override;
+
+
+protected:
+  // Classes that inherit from StreamFile can see and modify these
+  File m_file;
+  size_t WriteImpl(const void *s, size_t length) override;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(StreamFile);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StreamFile_h_
diff --git a/linux-x64/clang/include/lldb/Core/StructuredDataImpl.h b/linux-x64/clang/include/lldb/Core/StructuredDataImpl.h
new file mode 100644
index 0000000..79a709a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/StructuredDataImpl.h
@@ -0,0 +1,155 @@
+//===-- StructuredDataImpl.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StructuredDataImpl_h_
+#define liblldb_StructuredDataImpl_h_
+
+#include "lldb/Target/StructuredDataPlugin.h"
+#include "lldb/Utility/Event.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "llvm/ADT/StringRef.h"
+
+#pragma mark--
+#pragma mark StructuredDataImpl
+
+namespace lldb_private {
+
+class StructuredDataImpl {
+public:
+  StructuredDataImpl() : m_plugin_wp(), m_data_sp() {}
+
+  StructuredDataImpl(const StructuredDataImpl &rhs) = default;
+
+  StructuredDataImpl(const lldb::EventSP &event_sp)
+      : m_plugin_wp(
+            EventDataStructuredData::GetPluginFromEvent(event_sp.get())),
+        m_data_sp(EventDataStructuredData::GetObjectFromEvent(event_sp.get())) {
+  }
+
+  ~StructuredDataImpl() = default;
+
+  StructuredDataImpl &operator=(const StructuredDataImpl &rhs) = default;
+
+  bool IsValid() const { return m_data_sp.get() != nullptr; }
+
+  void Clear() {
+    m_plugin_wp.reset();
+    m_data_sp.reset();
+  }
+
+  Status GetAsJSON(Stream &stream) const {
+    Status error;
+
+    if (!m_data_sp) {
+      error.SetErrorString("No structured data.");
+      return error;
+    }
+
+    m_data_sp->Dump(stream);
+    return error;
+  }
+
+  Status GetDescription(Stream &stream) const {
+    Status error;
+
+    if (!m_data_sp) {
+      error.SetErrorString("Cannot pretty print structured data: "
+                           "no data to print.");
+      return error;
+    }
+
+    // Grab the plugin.
+    auto plugin_sp = lldb::StructuredDataPluginSP(m_plugin_wp);
+    if (!plugin_sp) {
+      error.SetErrorString("Cannot pretty print structured data: "
+                           "plugin doesn't exist.");
+      return error;
+    }
+
+    // Get the data's description.
+    return plugin_sp->GetDescription(m_data_sp, stream);
+  }
+
+  StructuredData::ObjectSP GetObjectSP() { return m_data_sp; }
+
+  void SetObjectSP(const StructuredData::ObjectSP &obj) { m_data_sp = obj; }
+
+  lldb::StructuredDataType GetType() const {
+    return (m_data_sp ? m_data_sp->GetType() :
+        lldb::eStructuredDataTypeInvalid);
+  }
+
+  size_t GetSize() const {
+    if (!m_data_sp)
+      return 0;
+
+    if (m_data_sp->GetType() == lldb::eStructuredDataTypeDictionary) {
+      auto dict = m_data_sp->GetAsDictionary();
+      return (dict->GetSize());
+    } else if (m_data_sp->GetType() == lldb::eStructuredDataTypeArray) {
+      auto array = m_data_sp->GetAsArray();
+      return (array->GetSize());
+    } else
+      return 0;
+  }
+
+  StructuredData::ObjectSP GetValueForKey(const char *key) const {
+    if (m_data_sp) {
+      auto dict = m_data_sp->GetAsDictionary();
+      if (dict)
+        return dict->GetValueForKey(llvm::StringRef(key));
+    }
+    return StructuredData::ObjectSP();
+  }
+
+  StructuredData::ObjectSP GetItemAtIndex(size_t idx) const {
+    if (m_data_sp) {
+      auto array = m_data_sp->GetAsArray();
+      if (array)
+        return array->GetItemAtIndex(idx);
+    }
+    return StructuredData::ObjectSP();
+  }
+
+  uint64_t GetIntegerValue(uint64_t fail_value = 0) const {
+    return (m_data_sp ? m_data_sp->GetIntegerValue(fail_value) : fail_value);
+  }
+
+  double GetFloatValue(double fail_value = 0.0) const {
+    return (m_data_sp ? m_data_sp->GetFloatValue(fail_value) : fail_value);
+  }
+
+  bool GetBooleanValue(bool fail_value = false) const {
+    return (m_data_sp ? m_data_sp->GetBooleanValue(fail_value) : fail_value);
+  }
+
+  size_t GetStringValue(char *dst, size_t dst_len) const {
+    if (!m_data_sp)
+      return 0;
+
+    llvm::StringRef result = m_data_sp->GetStringValue();
+    if (result.empty())
+      return 0;
+
+    if (!dst || !dst_len) {
+      char s[1];
+      return (::snprintf(s, 1, "%s", result.data()));
+    }
+    return (::snprintf(dst, dst_len, "%s", result.data()));
+  }
+
+private:
+  lldb::StructuredDataPluginWP m_plugin_wp;
+  StructuredData::ObjectSP m_data_sp;
+};
+} // namespace lldb_private
+#endif
diff --git a/linux-x64/clang/include/lldb/Core/ThreadSafeDenseMap.h b/linux-x64/clang/include/lldb/Core/ThreadSafeDenseMap.h
new file mode 100644
index 0000000..c485b91
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ThreadSafeDenseMap.h
@@ -0,0 +1,65 @@
+//===-- ThreadSafeDenseMap.h ------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadSafeDenseMap_h_
+#define liblldb_ThreadSafeDenseMap_h_
+
+#include <mutex>
+
+#include "llvm/ADT/DenseMap.h"
+
+
+namespace lldb_private {
+
+template <typename _KeyType, typename _ValueType,
+          typename _MutexType = std::mutex>
+class ThreadSafeDenseMap {
+public:
+  typedef llvm::DenseMap<_KeyType, _ValueType> LLVMMapType;
+
+  ThreadSafeDenseMap(unsigned map_initial_capacity = 0)
+      : m_map(map_initial_capacity), m_mutex() {}
+
+  void Insert(_KeyType k, _ValueType v) {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    m_map.insert(std::make_pair(k, v));
+  }
+
+  void Erase(_KeyType k) {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    m_map.erase(k);
+  }
+
+  _ValueType Lookup(_KeyType k) {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    return m_map.lookup(k);
+  }
+
+  bool Lookup(_KeyType k, _ValueType &v) {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    auto iter = m_map.find(k), end = m_map.end();
+    if (iter == end)
+      return false;
+    v = iter->second;
+    return true;
+  }
+
+  void Clear() {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    m_map.clear();
+  }
+
+protected:
+  LLVMMapType m_map;
+  _MutexType m_mutex;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadSafeSTLMap_h_
diff --git a/linux-x64/clang/include/lldb/Core/ThreadSafeDenseSet.h b/linux-x64/clang/include/lldb/Core/ThreadSafeDenseSet.h
new file mode 100644
index 0000000..fbc8d3f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ThreadSafeDenseSet.h
@@ -0,0 +1,55 @@
+//===-- ThreadSafeDenseSet.h ------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadSafeDenseSet_h_
+#define liblldb_ThreadSafeDenseSet_h_
+
+#include <mutex>
+
+#include "llvm/ADT/DenseSet.h"
+
+
+namespace lldb_private {
+
+template <typename _ElementType, typename _MutexType = std::mutex>
+class ThreadSafeDenseSet {
+public:
+  typedef llvm::DenseSet<_ElementType> LLVMSetType;
+
+  ThreadSafeDenseSet(unsigned set_initial_capacity = 0)
+      : m_set(set_initial_capacity), m_mutex() {}
+
+  void Insert(_ElementType e) {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    m_set.insert(e);
+  }
+
+  void Erase(_ElementType e) {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    m_set.erase(e);
+  }
+
+  bool Lookup(_ElementType e) {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    return (m_set.count(e) > 0);
+  }
+
+  void Clear() {
+    std::lock_guard<_MutexType> guard(m_mutex);
+    m_set.clear();
+  }
+
+protected:
+  LLVMSetType m_set;
+  _MutexType m_mutex;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadSafeDenseSet_h_
diff --git a/linux-x64/clang/include/lldb/Core/ThreadSafeSTLMap.h b/linux-x64/clang/include/lldb/Core/ThreadSafeSTLMap.h
new file mode 100644
index 0000000..df0208c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ThreadSafeSTLMap.h
@@ -0,0 +1,128 @@
+//===-- ThreadSafeSTLMap.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadSafeSTLMap_h_
+#define liblldb_ThreadSafeSTLMap_h_
+
+#include <map>
+#include <mutex>
+
+#include "lldb/lldb-defines.h"
+
+namespace lldb_private {
+
+template <typename _Key, typename _Tp> class ThreadSafeSTLMap {
+public:
+  typedef std::map<_Key, _Tp> collection;
+  typedef typename collection::iterator iterator;
+  typedef typename collection::const_iterator const_iterator;
+  // Constructors and Destructors
+  ThreadSafeSTLMap() : m_collection(), m_mutex() {}
+
+  ~ThreadSafeSTLMap() {}
+
+  bool IsEmpty() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_collection.empty();
+  }
+
+  void Clear() {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_collection.clear();
+  }
+
+  size_t Erase(const _Key &key) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return EraseNoLock(key);
+  }
+
+  size_t EraseNoLock(const _Key &key) { return m_collection.erase(key); }
+
+  bool GetValueForKey(const _Key &key, _Tp &value) const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return GetValueForKeyNoLock(key, value);
+  }
+
+  // Call this if you have already manually locked the mutex using the
+  // GetMutex() accessor
+  bool GetValueForKeyNoLock(const _Key &key, _Tp &value) const {
+    const_iterator pos = m_collection.find(key);
+    if (pos != m_collection.end()) {
+      value = pos->second;
+      return true;
+    }
+    return false;
+  }
+
+  bool GetFirstKeyForValue(const _Tp &value, _Key &key) const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return GetFirstKeyForValueNoLock(value, key);
+  }
+
+  bool GetFirstKeyForValueNoLock(const _Tp &value, _Key &key) const {
+    const_iterator pos, end = m_collection.end();
+    for (pos = m_collection.begin(); pos != end; ++pos) {
+      if (pos->second == value) {
+        key = pos->first;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  bool LowerBound(const _Key &key, _Key &match_key, _Tp &match_value,
+                  bool decrement_if_not_equal) const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return LowerBoundNoLock(key, match_key, match_value,
+                            decrement_if_not_equal);
+  }
+
+  bool LowerBoundNoLock(const _Key &key, _Key &match_key, _Tp &match_value,
+                        bool decrement_if_not_equal) const {
+    const_iterator pos = m_collection.lower_bound(key);
+    if (pos != m_collection.end()) {
+      match_key = pos->first;
+      if (decrement_if_not_equal && key != match_key &&
+          pos != m_collection.begin()) {
+        --pos;
+        match_key = pos->first;
+      }
+      match_value = pos->second;
+      return true;
+    }
+    return false;
+  }
+
+  iterator lower_bound_unsafe(const _Key &key) {
+    return m_collection.lower_bound(key);
+  }
+
+  void SetValueForKey(const _Key &key, const _Tp &value) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    SetValueForKeyNoLock(key, value);
+  }
+
+  // Call this if you have already manually locked the mutex using the
+  // GetMutex() accessor
+  void SetValueForKeyNoLock(const _Key &key, const _Tp &value) {
+    m_collection[key] = value;
+  }
+
+  std::recursive_mutex &GetMutex() { return m_mutex; }
+
+private:
+  collection m_collection;
+  mutable std::recursive_mutex m_mutex;
+
+  // For ThreadSafeSTLMap only
+  DISALLOW_COPY_AND_ASSIGN(ThreadSafeSTLMap);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadSafeSTLMap_h_
diff --git a/linux-x64/clang/include/lldb/Core/ThreadSafeSTLVector.h b/linux-x64/clang/include/lldb/Core/ThreadSafeSTLVector.h
new file mode 100644
index 0000000..e1666a6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ThreadSafeSTLVector.h
@@ -0,0 +1,72 @@
+//===-- ThreadSafeSTLVector.h ------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadSafeSTLVector_h_
+#define liblldb_ThreadSafeSTLVector_h_
+
+#include <mutex>
+#include <vector>
+
+#include "lldb/lldb-defines.h"
+
+namespace lldb_private {
+
+template <typename _Object> class ThreadSafeSTLVector {
+public:
+  typedef std::vector<_Object> collection;
+  typedef typename collection::iterator iterator;
+  typedef typename collection::const_iterator const_iterator;
+  // Constructors and Destructors
+  ThreadSafeSTLVector() : m_collection(), m_mutex() {}
+
+  ~ThreadSafeSTLVector() = default;
+
+  bool IsEmpty() const {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_collection.empty();
+  }
+
+  void Clear() {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_collection.clear();
+  }
+
+  size_t GetCount() {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_collection.size();
+  }
+
+  void AppendObject(_Object &object) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    m_collection.push_back(object);
+  }
+
+  _Object GetObject(size_t index) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_collection.at(index);
+  }
+
+  void SetObject(size_t index, const _Object &object) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    m_collection.at(index) = object;
+  }
+
+  std::recursive_mutex &GetMutex() { return m_mutex; }
+
+private:
+  collection m_collection;
+  mutable std::recursive_mutex m_mutex;
+
+  // For ThreadSafeSTLVector only
+  DISALLOW_COPY_AND_ASSIGN(ThreadSafeSTLVector);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadSafeSTLVector_h_
diff --git a/linux-x64/clang/include/lldb/Core/ThreadSafeValue.h b/linux-x64/clang/include/lldb/Core/ThreadSafeValue.h
new file mode 100644
index 0000000..91f9681
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ThreadSafeValue.h
@@ -0,0 +1,61 @@
+//===-- ThreadSafeValue.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadSafeValue_h_
+#define liblldb_ThreadSafeValue_h_
+
+
+#include <mutex>
+
+#include "lldb/lldb-defines.h"
+
+namespace lldb_private {
+
+template <class T> class ThreadSafeValue {
+public:
+  // Constructors and Destructors
+  ThreadSafeValue() : m_value(), m_mutex() {}
+
+  ThreadSafeValue(const T &value) : m_value(value), m_mutex() {}
+
+  ~ThreadSafeValue() {}
+
+  T GetValue() const {
+    T value;
+    {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      value = m_value;
+    }
+    return value;
+  }
+
+  // Call this if you have already manually locked the mutex using the
+  // GetMutex() accessor
+  const T &GetValueNoLock() const { return m_value; }
+
+  void SetValue(const T &value) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    m_value = value;
+  }
+
+  // Call this if you have already manually locked the mutex using the
+  // GetMutex() accessor
+  void SetValueNoLock(const T &value) { m_value = value; }
+
+  std::recursive_mutex &GetMutex() { return m_mutex; }
+
+private:
+  T m_value;
+  mutable std::recursive_mutex m_mutex;
+
+  // For ThreadSafeValue only
+  DISALLOW_COPY_AND_ASSIGN(ThreadSafeValue);
+};
+
+} // namespace lldb_private
+#endif // liblldb_ThreadSafeValue_h_
diff --git a/linux-x64/clang/include/lldb/Core/UniqueCStringMap.h b/linux-x64/clang/include/lldb/Core/UniqueCStringMap.h
new file mode 100644
index 0000000..9949bd4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/UniqueCStringMap.h
@@ -0,0 +1,207 @@
+//===-- UniqueCStringMap.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UniqueCStringMap_h_
+#define liblldb_UniqueCStringMap_h_
+
+#include <algorithm>
+#include <vector>
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/RegularExpression.h"
+
+namespace lldb_private {
+
+// Templatized uniqued string map.
+//
+// This map is useful for mapping unique C string names to values of type T.
+// Each "const char *" name added must be unique for a given
+// C string value. ConstString::GetCString() can provide such strings.
+// Any other string table that has guaranteed unique values can also be used.
+template <typename T> class UniqueCStringMap {
+public:
+  struct Entry {
+    Entry(ConstString cstr, const T &v) : cstring(cstr), value(v) {}
+
+    ConstString cstring;
+    T value;
+  };
+
+  // Call this function multiple times to add a bunch of entries to this map,
+  // then later call UniqueCStringMap<T>::Sort() before doing any searches by
+  // name.
+  void Append(ConstString unique_cstr, const T &value) {
+    m_map.push_back(typename UniqueCStringMap<T>::Entry(unique_cstr, value));
+  }
+
+  void Append(const Entry &e) { m_map.push_back(e); }
+
+  void Clear() { m_map.clear(); }
+
+  // Get an entries by index in a variety of forms.
+  //
+  // The caller is responsible for ensuring that the collection does not change
+  // during while using the returned values.
+  bool GetValueAtIndex(uint32_t idx, T &value) const {
+    if (idx < m_map.size()) {
+      value = m_map[idx].value;
+      return true;
+    }
+    return false;
+  }
+
+  ConstString GetCStringAtIndexUnchecked(uint32_t idx) const {
+    return m_map[idx].cstring;
+  }
+
+  // Use this function if you have simple types in your map that you can easily
+  // copy when accessing values by index.
+  T GetValueAtIndexUnchecked(uint32_t idx) const { return m_map[idx].value; }
+
+  // Use this function if you have complex types in your map that you don't
+  // want to copy when accessing values by index.
+  const T &GetValueRefAtIndexUnchecked(uint32_t idx) const {
+    return m_map[idx].value;
+  }
+
+  ConstString GetCStringAtIndex(uint32_t idx) const {
+    return ((idx < m_map.size()) ? m_map[idx].cstring : ConstString());
+  }
+
+  // Find the value for the unique string in the map.
+  //
+  // Return the value for \a unique_cstr if one is found, return \a fail_value
+  // otherwise. This method works well for simple type
+  // T values and only if there is a sensible failure value that can
+  // be returned and that won't match any existing values.
+  T Find(ConstString unique_cstr, T fail_value) const {
+    auto pos = llvm::lower_bound(m_map, unique_cstr, Compare());
+    if (pos != m_map.end() && pos->cstring == unique_cstr)
+      return pos->value;
+    return fail_value;
+  }
+
+  // Get a pointer to the first entry that matches "name". nullptr will be
+  // returned if there is no entry that matches "name".
+  //
+  // The caller is responsible for ensuring that the collection does not change
+  // during while using the returned pointer.
+  const Entry *FindFirstValueForName(ConstString unique_cstr) const {
+    auto pos = llvm::lower_bound(m_map, unique_cstr, Compare());
+    if (pos != m_map.end() && pos->cstring == unique_cstr)
+      return &(*pos);
+    return nullptr;
+  }
+
+  // Get a pointer to the next entry that matches "name" from a previously
+  // returned Entry pointer. nullptr will be returned if there is no subsequent
+  // entry that matches "name".
+  //
+  // The caller is responsible for ensuring that the collection does not change
+  // during while using the returned pointer.
+  const Entry *FindNextValueForName(const Entry *entry_ptr) const {
+    if (!m_map.empty()) {
+      const Entry *first_entry = &m_map[0];
+      const Entry *after_last_entry = first_entry + m_map.size();
+      const Entry *next_entry = entry_ptr + 1;
+      if (first_entry <= next_entry && next_entry < after_last_entry) {
+        if (next_entry->cstring == entry_ptr->cstring)
+          return next_entry;
+      }
+    }
+    return nullptr;
+  }
+
+  size_t GetValues(ConstString unique_cstr, std::vector<T> &values) const {
+    const size_t start_size = values.size();
+
+    for (const Entry &entry : llvm::make_range(std::equal_range(
+             m_map.begin(), m_map.end(), unique_cstr, Compare())))
+      values.push_back(entry.value);
+
+    return values.size() - start_size;
+  }
+
+  size_t GetValues(const RegularExpression &regex,
+                   std::vector<T> &values) const {
+    const size_t start_size = values.size();
+
+    const_iterator pos, end = m_map.end();
+    for (pos = m_map.begin(); pos != end; ++pos) {
+      if (regex.Execute(pos->cstring.GetCString()))
+        values.push_back(pos->value);
+    }
+
+    return values.size() - start_size;
+  }
+
+  // Get the total number of entries in this map.
+  size_t GetSize() const { return m_map.size(); }
+
+  // Returns true if this map is empty.
+  bool IsEmpty() const { return m_map.empty(); }
+
+  // Reserve memory for at least "n" entries in the map. This is useful to call
+  // when you know you will be adding a lot of entries using
+  // UniqueCStringMap::Append() (which should be followed by a call to
+  // UniqueCStringMap::Sort()) or to UniqueCStringMap::Insert().
+  void Reserve(size_t n) { m_map.reserve(n); }
+
+  // Sort the unsorted contents in this map. A typical code flow would be:
+  // size_t approximate_num_entries = ....
+  // UniqueCStringMap<uint32_t> my_map;
+  // my_map.Reserve (approximate_num_entries);
+  // for (...)
+  // {
+  //      my_map.Append (UniqueCStringMap::Entry(GetName(...), GetValue(...)));
+  // }
+  // my_map.Sort();
+  void Sort() { llvm::sort(m_map.begin(), m_map.end(), Compare()); }
+
+  // Since we are using a vector to contain our items it will always double its
+  // memory consumption as things are added to the vector, so if you intend to
+  // keep a UniqueCStringMap around and have a lot of entries in the map, you
+  // will want to call this function to create a new vector and copy _only_ the
+  // exact size needed as part of the finalization of the string map.
+  void SizeToFit() {
+    if (m_map.size() < m_map.capacity()) {
+      collection temp(m_map.begin(), m_map.end());
+      m_map.swap(temp);
+    }
+  }
+
+protected:
+  struct Compare {
+    bool operator()(const Entry &lhs, const Entry &rhs) {
+      return operator()(lhs.cstring, rhs.cstring);
+    }
+
+    bool operator()(const Entry &lhs, ConstString rhs) {
+      return operator()(lhs.cstring, rhs);
+    }
+
+    bool operator()(ConstString lhs, const Entry &rhs) {
+      return operator()(lhs, rhs.cstring);
+    }
+
+    // This is only for uniqueness, not lexicographical ordering, so we can
+    // just compare pointers. *However*, comparing pointers from different
+    // allocations is UB, so we need compare their integral values instead.
+    bool operator()(ConstString lhs, ConstString rhs) {
+      return uintptr_t(lhs.GetCString()) < uintptr_t(rhs.GetCString());
+    }
+  };
+  typedef std::vector<Entry> collection;
+  typedef typename collection::iterator iterator;
+  typedef typename collection::const_iterator const_iterator;
+  collection m_map;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_UniqueCStringMap_h_
diff --git a/linux-x64/clang/include/lldb/Core/UserSettingsController.h b/linux-x64/clang/include/lldb/Core/UserSettingsController.h
new file mode 100644
index 0000000..6ae3bde
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/UserSettingsController.h
@@ -0,0 +1,91 @@
+//====-- UserSettingsController.h --------------------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UserSettingsController_h_
+#define liblldb_UserSettingsController_h_
+
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include <vector>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class CommandInterpreter;
+class ConstString;
+class ExecutionContext;
+class Property;
+class Stream;
+}
+
+namespace lldb_private {
+
+class Properties {
+public:
+  Properties() : m_collection_sp() {}
+
+  Properties(const lldb::OptionValuePropertiesSP &collection_sp)
+      : m_collection_sp(collection_sp) {}
+
+  virtual ~Properties() {}
+
+  virtual lldb::OptionValuePropertiesSP GetValueProperties() const {
+    // This function is virtual in case subclasses want to lazily implement
+    // creating the properties.
+    return m_collection_sp;
+  }
+
+  virtual lldb::OptionValueSP GetPropertyValue(const ExecutionContext *exe_ctx,
+                                               llvm::StringRef property_path,
+                                               bool will_modify,
+                                               Status &error) const;
+
+  virtual Status SetPropertyValue(const ExecutionContext *exe_ctx,
+                                  VarSetOperationType op,
+                                  llvm::StringRef property_path,
+                                  llvm::StringRef value);
+
+  virtual Status DumpPropertyValue(const ExecutionContext *exe_ctx,
+                                   Stream &strm, llvm::StringRef property_path,
+                                   uint32_t dump_mask);
+
+  virtual void DumpAllPropertyValues(const ExecutionContext *exe_ctx,
+                                     Stream &strm, uint32_t dump_mask);
+
+  virtual void DumpAllDescriptions(CommandInterpreter &interpreter,
+                                   Stream &strm) const;
+
+  size_t Apropos(llvm::StringRef keyword,
+                 std::vector<const Property *> &matching_properties) const;
+
+  lldb::OptionValuePropertiesSP GetSubProperty(const ExecutionContext *exe_ctx,
+                                               ConstString name);
+
+  // We sometimes need to introduce a setting to enable experimental features,
+  // but then we don't want the setting for these to cause errors when the
+  // setting goes away.  Add a sub-topic of the settings using this
+  // experimental name, and two things will happen.  One is that settings that
+  // don't find the name will not be treated as errors.  Also, if you decide to
+  // keep the settings just move them into the containing properties, and we
+  // will auto-forward the experimental settings to the real one.
+  static const char *GetExperimentalSettingsName();
+
+  static bool IsSettingExperimental(llvm::StringRef setting);
+
+protected:
+  lldb::OptionValuePropertiesSP m_collection_sp;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_UserSettingsController_h_
diff --git a/linux-x64/clang/include/lldb/Core/Value.h b/linux-x64/clang/include/lldb/Core/Value.h
new file mode 100644
index 0000000..b786e48
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/Value.h
@@ -0,0 +1,262 @@
+//===-- Value.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Value_h_
+#define liblldb_Value_h_
+
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/DataBufferHeap.h"
+#include "lldb/Utility/Scalar.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-private-types.h"
+
+#include "llvm/ADT/APInt.h"
+
+#include <vector>
+
+#include <stdint.h>
+#include <string.h>
+
+namespace lldb_private {
+class DataExtractor;
+class ExecutionContext;
+class Module;
+class Stream;
+class Type;
+class Variable;
+}
+
+namespace lldb_private {
+
+class Value {
+public:
+  // Values Less than zero are an error, greater than or equal to zero returns
+  // what the Scalar result is.
+  enum ValueType {
+    // m_value contains...
+    // ============================
+    eValueTypeScalar,      // raw scalar value
+    eValueTypeVector,      // byte array of m_vector.length with endianness of
+                           // m_vector.byte_order
+    eValueTypeFileAddress, // file address value
+    eValueTypeLoadAddress, // load address value
+    eValueTypeHostAddress  // host address value (for memory in the process that
+                           // is using liblldb)
+  };
+
+  enum ContextType // Type that describes Value::m_context
+  {
+    // m_context contains...
+    // ====================
+    eContextTypeInvalid,      // undefined
+    eContextTypeRegisterInfo, // RegisterInfo * (can be a scalar or a vector
+                              // register)
+    eContextTypeLLDBType,     // lldb_private::Type *
+    eContextTypeVariable      // lldb_private::Variable *
+  };
+
+  const static size_t kMaxByteSize = 32u;
+
+  struct Vector {
+    // The byte array must be big enough to hold vector registers for any
+    // supported target.
+    uint8_t bytes[kMaxByteSize];
+    size_t length;
+    lldb::ByteOrder byte_order;
+
+    Vector() : length(0), byte_order(lldb::eByteOrderInvalid) {}
+
+    Vector(const Vector &vector) { *this = vector; }
+    const Vector &operator=(const Vector &vector) {
+      SetBytes(vector.bytes, vector.length, vector.byte_order);
+      return *this;
+    }
+
+    void Clear() { length = 0; }
+
+    bool SetBytes(const void *bytes, size_t length,
+                  lldb::ByteOrder byte_order) {
+      this->length = length;
+      this->byte_order = byte_order;
+      if (length)
+        ::memcpy(this->bytes, bytes,
+                 length < kMaxByteSize ? length : kMaxByteSize);
+      return IsValid();
+    }
+
+    bool IsValid() const {
+      return (length > 0 && length < kMaxByteSize &&
+              byte_order != lldb::eByteOrderInvalid);
+    }
+    // Casts a vector, if valid, to an unsigned int of matching or largest
+    // supported size. Truncates to the beginning of the vector if required.
+    // Returns a default constructed Scalar if the Vector data is internally
+    // inconsistent.
+    llvm::APInt rhs = llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
+                                  ((type128 *)bytes)->x);
+    Scalar GetAsScalar() const {
+      Scalar scalar;
+      if (IsValid()) {
+        if (length == 1)
+          scalar = *(const uint8_t *)bytes;
+        else if (length == 2)
+          scalar = *(const uint16_t *)bytes;
+        else if (length == 4)
+          scalar = *(const uint32_t *)bytes;
+        else if (length == 8)
+          scalar = *(const uint64_t *)bytes;
+        else if (length >= 16)
+          scalar = rhs;
+      }
+      return scalar;
+    }
+  };
+
+  Value();
+  Value(const Scalar &scalar);
+  Value(const Vector &vector);
+  Value(const void *bytes, int len);
+  Value(const Value &rhs);
+
+  void SetBytes(const void *bytes, int len);
+
+  void AppendBytes(const void *bytes, int len);
+
+  Value &operator=(const Value &rhs);
+
+  const CompilerType &GetCompilerType();
+
+  void SetCompilerType(const CompilerType &compiler_type);
+
+  ValueType GetValueType() const;
+
+  AddressType GetValueAddressType() const;
+
+  ContextType GetContextType() const { return m_context_type; }
+
+  void SetValueType(ValueType value_type) { m_value_type = value_type; }
+
+  void ClearContext() {
+    m_context = nullptr;
+    m_context_type = eContextTypeInvalid;
+  }
+
+  void SetContext(ContextType context_type, void *p) {
+    m_context_type = context_type;
+    m_context = p;
+    if (m_context_type == eContextTypeRegisterInfo) {
+      RegisterInfo *reg_info = GetRegisterInfo();
+      if (reg_info->encoding == lldb::eEncodingVector &&
+          m_vector.byte_order != lldb::eByteOrderInvalid)
+        SetValueType(eValueTypeScalar);
+    }
+  }
+
+  RegisterInfo *GetRegisterInfo() const;
+
+  Type *GetType();
+
+  Scalar &ResolveValue(ExecutionContext *exe_ctx);
+
+  const Scalar &GetScalar() const { return m_value; }
+
+  const Vector &GetVector() const { return m_vector; }
+
+  Scalar &GetScalar() { return m_value; }
+
+  Vector &GetVector() { return m_vector; }
+
+  bool SetVectorBytes(const Vector &vector) {
+    m_vector = vector;
+    return m_vector.IsValid();
+  }
+
+  bool SetVectorBytes(uint8_t *bytes, size_t length,
+                      lldb::ByteOrder byte_order) {
+    return m_vector.SetBytes(bytes, length, byte_order);
+  }
+
+  bool SetScalarFromVector() {
+    if (m_vector.IsValid()) {
+      m_value = m_vector.GetAsScalar();
+      return true;
+    }
+    return false;
+  }
+
+  size_t ResizeData(size_t len);
+
+  size_t AppendDataToHostBuffer(const Value &rhs);
+
+  DataBufferHeap &GetBuffer() { return m_data_buffer; }
+
+  const DataBufferHeap &GetBuffer() const { return m_data_buffer; }
+
+  bool ValueOf(ExecutionContext *exe_ctx);
+
+  Variable *GetVariable();
+
+  void Dump(Stream *strm);
+
+  lldb::Format GetValueDefaultFormat();
+
+  uint64_t GetValueByteSize(Status *error_ptr, ExecutionContext *exe_ctx);
+
+  Status GetValueAsData(ExecutionContext *exe_ctx, DataExtractor &data,
+                        uint32_t data_offset,
+                        Module *module); // Can be nullptr
+
+  static const char *GetValueTypeAsCString(ValueType context_type);
+
+  static const char *GetContextTypeAsCString(ContextType context_type);
+
+  /// Convert this value's file address to a load address, if possible.
+  void ConvertToLoadAddress(Module *module, Target *target);
+
+  bool GetData(DataExtractor &data);
+
+  void Clear();
+
+protected:
+  Scalar m_value;
+  Vector m_vector;
+  CompilerType m_compiler_type;
+  void *m_context;
+  ValueType m_value_type;
+  ContextType m_context_type;
+  DataBufferHeap m_data_buffer;
+};
+
+class ValueList {
+public:
+  ValueList() : m_values() {}
+
+  ValueList(const ValueList &rhs);
+
+  ~ValueList() = default;
+
+  const ValueList &operator=(const ValueList &rhs);
+
+  // void InsertValue (Value *value, size_t idx);
+  void PushValue(const Value &value);
+
+  size_t GetSize();
+  Value *GetValueAtIndex(size_t idx);
+  void Clear();
+
+private:
+  typedef std::vector<Value> collection;
+
+  collection m_values;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Value_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObject.h b/linux-x64/clang/include/lldb/Core/ValueObject.h
new file mode 100644
index 0000000..0808b86
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObject.h
@@ -0,0 +1,1042 @@
+//===-- ValueObject.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObject_h_
+#define liblldb_ValueObject_h_
+
+#include "lldb/Core/Value.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/Type.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/SharedCluster.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <functional>
+#include <initializer_list>
+#include <map>
+#include <mutex>
+#include <string>
+#include <utility>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class Declaration;
+class DumpValueObjectOptions;
+class EvaluateExpressionOptions;
+class ExecutionContextScope;
+class Log;
+class Scalar;
+class Stream;
+class SymbolContextScope;
+class TypeFormatImpl;
+class TypeSummaryImpl;
+class TypeSummaryOptions;
+
+/// ValueObject:
+///
+/// This abstract class provides an interface to a particular value, be it a
+/// register, a local or global variable,
+/// that is evaluated in some particular scope.  The ValueObject also has the
+/// capability of being the "child" of
+/// some other variable object, and in turn of having children.
+/// If a ValueObject is a root variable object - having no parent - then it must
+/// be constructed with respect to some
+/// particular ExecutionContextScope.  If it is a child, it inherits the
+/// ExecutionContextScope from its parent.
+/// The ValueObject will update itself if necessary before fetching its value,
+/// summary, object description, etc.
+/// But it will always update itself in the ExecutionContextScope with which it
+/// was originally created.
+
+/// A brief note on life cycle management for ValueObjects.  This is a little
+/// tricky because a ValueObject can contain
+/// various other ValueObjects - the Dynamic Value, its children, the
+/// dereference value, etc.  Any one of these can be
+/// handed out as a shared pointer, but for that contained value object to be
+/// valid, the root object and potentially other
+/// of the value objects need to stay around.
+/// We solve this problem by handing out shared pointers to the Value Object and
+/// any of its dependents using a shared
+/// ClusterManager.  This treats each shared pointer handed out for the entire
+/// cluster as a reference to the whole
+/// cluster.  The whole cluster will stay around until the last reference is
+/// released.
+///
+/// The ValueObject mostly handle this automatically, if a value object is made
+/// with a Parent ValueObject, then it adds
+/// itself to the ClusterManager of the parent.
+
+/// It does mean that external to the ValueObjects we should only ever make
+/// available ValueObjectSP's, never ValueObjects
+/// or pointers to them.  So all the "Root level" ValueObject derived
+/// constructors should be private, and
+/// should implement a Create function that new's up object and returns a Shared
+/// Pointer that it gets from the GetSP() method.
+///
+/// However, if you are making an derived ValueObject that will be contained in
+/// a parent value object, you should just
+/// hold onto a pointer to it internally, and by virtue of passing the parent
+/// ValueObject into its constructor, it will
+/// be added to the ClusterManager for the parent.  Then if you ever hand out a
+/// Shared Pointer to the contained ValueObject,
+/// just do so by calling GetSP() on the contained object.
+
+class ValueObject : public UserID {
+public:
+  enum GetExpressionPathFormat {
+    eGetExpressionPathFormatDereferencePointers = 1,
+    eGetExpressionPathFormatHonorPointers
+  };
+
+  enum ValueObjectRepresentationStyle {
+    eValueObjectRepresentationStyleValue = 1,
+    eValueObjectRepresentationStyleSummary,
+    eValueObjectRepresentationStyleLanguageSpecific,
+    eValueObjectRepresentationStyleLocation,
+    eValueObjectRepresentationStyleChildrenCount,
+    eValueObjectRepresentationStyleType,
+    eValueObjectRepresentationStyleName,
+    eValueObjectRepresentationStyleExpressionPath
+  };
+
+  enum ExpressionPathScanEndReason {
+    eExpressionPathScanEndReasonEndOfString = 1,      // out of data to parse
+    eExpressionPathScanEndReasonNoSuchChild,          // child element not found
+    eExpressionPathScanEndReasonNoSuchSyntheticChild, // (synthetic) child
+                                                      // element not found
+    eExpressionPathScanEndReasonEmptyRangeNotAllowed, // [] only allowed for
+                                                      // arrays
+    eExpressionPathScanEndReasonDotInsteadOfArrow, // . used when -> should be
+                                                   // used
+    eExpressionPathScanEndReasonArrowInsteadOfDot, // -> used when . should be
+                                                   // used
+    eExpressionPathScanEndReasonFragileIVarNotAllowed,   // ObjC ivar expansion
+                                                         // not allowed
+    eExpressionPathScanEndReasonRangeOperatorNotAllowed, // [] not allowed by
+                                                         // options
+    eExpressionPathScanEndReasonRangeOperatorInvalid, // [] not valid on objects
+                                                      // other than scalars,
+                                                      // pointers or arrays
+    eExpressionPathScanEndReasonArrayRangeOperatorMet, // [] is good for arrays,
+                                                       // but I cannot parse it
+    eExpressionPathScanEndReasonBitfieldRangeOperatorMet, // [] is good for
+                                                          // bitfields, but I
+                                                          // cannot parse after
+                                                          // it
+    eExpressionPathScanEndReasonUnexpectedSymbol, // something is malformed in
+                                                  // the expression
+    eExpressionPathScanEndReasonTakingAddressFailed,   // impossible to apply &
+                                                       // operator
+    eExpressionPathScanEndReasonDereferencingFailed,   // impossible to apply *
+                                                       // operator
+    eExpressionPathScanEndReasonRangeOperatorExpanded, // [] was expanded into a
+                                                       // VOList
+    eExpressionPathScanEndReasonSyntheticValueMissing, // getting the synthetic
+                                                       // children failed
+    eExpressionPathScanEndReasonUnknown = 0xFFFF
+  };
+
+  enum ExpressionPathEndResultType {
+    eExpressionPathEndResultTypePlain = 1,       // anything but...
+    eExpressionPathEndResultTypeBitfield,        // a bitfield
+    eExpressionPathEndResultTypeBoundedRange,    // a range [low-high]
+    eExpressionPathEndResultTypeUnboundedRange,  // a range []
+    eExpressionPathEndResultTypeValueObjectList, // several items in a VOList
+    eExpressionPathEndResultTypeInvalid = 0xFFFF
+  };
+
+  enum ExpressionPathAftermath {
+    eExpressionPathAftermathNothing = 1, // just return it
+    eExpressionPathAftermathDereference, // dereference the target
+    eExpressionPathAftermathTakeAddress  // take target's address
+  };
+
+  enum ClearUserVisibleDataItems {
+    eClearUserVisibleDataItemsNothing = 1u << 0,
+    eClearUserVisibleDataItemsValue = 1u << 1,
+    eClearUserVisibleDataItemsSummary = 1u << 2,
+    eClearUserVisibleDataItemsLocation = 1u << 3,
+    eClearUserVisibleDataItemsDescription = 1u << 4,
+    eClearUserVisibleDataItemsSyntheticChildren = 1u << 5,
+    eClearUserVisibleDataItemsValidator = 1u << 6,
+    eClearUserVisibleDataItemsAllStrings =
+        eClearUserVisibleDataItemsValue | eClearUserVisibleDataItemsSummary |
+        eClearUserVisibleDataItemsLocation |
+        eClearUserVisibleDataItemsDescription,
+    eClearUserVisibleDataItemsAll = 0xFFFF
+  };
+
+  struct GetValueForExpressionPathOptions {
+    enum class SyntheticChildrenTraversal {
+      None,
+      ToSynthetic,
+      FromSynthetic,
+      Both
+    };
+
+    bool m_check_dot_vs_arrow_syntax;
+    bool m_no_fragile_ivar;
+    bool m_allow_bitfields_syntax;
+    SyntheticChildrenTraversal m_synthetic_children_traversal;
+
+    GetValueForExpressionPathOptions(
+        bool dot = false, bool no_ivar = false, bool bitfield = true,
+        SyntheticChildrenTraversal synth_traverse =
+            SyntheticChildrenTraversal::ToSynthetic)
+        : m_check_dot_vs_arrow_syntax(dot), m_no_fragile_ivar(no_ivar),
+          m_allow_bitfields_syntax(bitfield),
+          m_synthetic_children_traversal(synth_traverse) {}
+
+    GetValueForExpressionPathOptions &DoCheckDotVsArrowSyntax() {
+      m_check_dot_vs_arrow_syntax = true;
+      return *this;
+    }
+
+    GetValueForExpressionPathOptions &DontCheckDotVsArrowSyntax() {
+      m_check_dot_vs_arrow_syntax = false;
+      return *this;
+    }
+
+    GetValueForExpressionPathOptions &DoAllowFragileIVar() {
+      m_no_fragile_ivar = false;
+      return *this;
+    }
+
+    GetValueForExpressionPathOptions &DontAllowFragileIVar() {
+      m_no_fragile_ivar = true;
+      return *this;
+    }
+
+    GetValueForExpressionPathOptions &DoAllowBitfieldSyntax() {
+      m_allow_bitfields_syntax = true;
+      return *this;
+    }
+
+    GetValueForExpressionPathOptions &DontAllowBitfieldSyntax() {
+      m_allow_bitfields_syntax = false;
+      return *this;
+    }
+
+    GetValueForExpressionPathOptions &
+    SetSyntheticChildrenTraversal(SyntheticChildrenTraversal traverse) {
+      m_synthetic_children_traversal = traverse;
+      return *this;
+    }
+
+    static const GetValueForExpressionPathOptions DefaultOptions() {
+      static GetValueForExpressionPathOptions g_default_options;
+
+      return g_default_options;
+    }
+  };
+
+  class EvaluationPoint {
+  public:
+    EvaluationPoint();
+
+    EvaluationPoint(ExecutionContextScope *exe_scope,
+                    bool use_selected = false);
+
+    EvaluationPoint(const EvaluationPoint &rhs);
+
+    ~EvaluationPoint();
+
+    const ExecutionContextRef &GetExecutionContextRef() const {
+      return m_exe_ctx_ref;
+    }
+
+    // Set the EvaluationPoint to the values in exe_scope, Return true if the
+    // Evaluation Point changed. Since the ExecutionContextScope is always
+    // going to be valid currently, the Updated Context will also always be
+    // valid.
+
+    //        bool
+    //        SetContext (ExecutionContextScope *exe_scope);
+
+    void SetIsConstant() {
+      SetUpdated();
+      m_mod_id.SetInvalid();
+    }
+
+    bool IsConstant() const { return !m_mod_id.IsValid(); }
+
+    ProcessModID GetModID() const { return m_mod_id; }
+
+    void SetUpdateID(ProcessModID new_id) { m_mod_id = new_id; }
+
+    void SetNeedsUpdate() { m_needs_update = true; }
+
+    void SetUpdated();
+
+    bool NeedsUpdating(bool accept_invalid_exe_ctx) {
+      SyncWithProcessState(accept_invalid_exe_ctx);
+      return m_needs_update;
+    }
+
+    bool IsValid() {
+      const bool accept_invalid_exe_ctx = false;
+      if (!m_mod_id.IsValid())
+        return false;
+      else if (SyncWithProcessState(accept_invalid_exe_ctx)) {
+        if (!m_mod_id.IsValid())
+          return false;
+      }
+      return true;
+    }
+
+    void SetInvalid() {
+      // Use the stop id to mark us as invalid, leave the thread id and the
+      // stack id around for logging and history purposes.
+      m_mod_id.SetInvalid();
+
+      // Can't update an invalid state.
+      m_needs_update = false;
+    }
+
+  private:
+    bool SyncWithProcessState(bool accept_invalid_exe_ctx);
+
+    ProcessModID m_mod_id; // This is the stop id when this ValueObject was last
+                           // evaluated.
+    ExecutionContextRef m_exe_ctx_ref;
+    bool m_needs_update;
+  };
+
+  virtual ~ValueObject();
+
+  const EvaluationPoint &GetUpdatePoint() const { return m_update_point; }
+
+  EvaluationPoint &GetUpdatePoint() { return m_update_point; }
+
+  const ExecutionContextRef &GetExecutionContextRef() const {
+    return m_update_point.GetExecutionContextRef();
+  }
+
+  lldb::TargetSP GetTargetSP() const {
+    return m_update_point.GetExecutionContextRef().GetTargetSP();
+  }
+
+  lldb::ProcessSP GetProcessSP() const {
+    return m_update_point.GetExecutionContextRef().GetProcessSP();
+  }
+
+  lldb::ThreadSP GetThreadSP() const {
+    return m_update_point.GetExecutionContextRef().GetThreadSP();
+  }
+
+  lldb::StackFrameSP GetFrameSP() const {
+    return m_update_point.GetExecutionContextRef().GetFrameSP();
+  }
+
+  void SetNeedsUpdate();
+
+  CompilerType GetCompilerType();
+
+  // this vends a TypeImpl that is useful at the SB API layer
+  virtual TypeImpl GetTypeImpl();
+
+  virtual bool CanProvideValue();
+
+  // Subclasses must implement the functions below.
+  virtual uint64_t GetByteSize() = 0;
+
+  virtual lldb::ValueType GetValueType() const = 0;
+
+  // Subclasses can implement the functions below.
+  virtual ConstString GetTypeName();
+
+  virtual ConstString GetDisplayTypeName();
+
+  virtual ConstString GetQualifiedTypeName();
+
+  virtual lldb::LanguageType GetObjectRuntimeLanguage();
+
+  virtual uint32_t
+  GetTypeInfo(CompilerType *pointee_or_element_compiler_type = nullptr);
+
+  virtual bool IsPointerType();
+
+  virtual bool IsArrayType();
+
+  virtual bool IsScalarType();
+
+  virtual bool IsPointerOrReferenceType();
+
+  virtual bool IsPossibleDynamicType();
+
+  bool IsNilReference();
+
+  bool IsUninitializedReference();
+
+  virtual bool IsBaseClass() { return false; }
+
+  bool IsBaseClass(uint32_t &depth);
+
+  virtual bool IsDereferenceOfParent() { return false; }
+
+  bool IsIntegerType(bool &is_signed);
+
+  virtual bool GetBaseClassPath(Stream &s);
+
+  virtual void GetExpressionPath(
+      Stream &s, bool qualify_cxx_base_classes,
+      GetExpressionPathFormat = eGetExpressionPathFormatDereferencePointers);
+
+  lldb::ValueObjectSP GetValueForExpressionPath(
+      llvm::StringRef expression,
+      ExpressionPathScanEndReason *reason_to_stop = nullptr,
+      ExpressionPathEndResultType *final_value_type = nullptr,
+      const GetValueForExpressionPathOptions &options =
+          GetValueForExpressionPathOptions::DefaultOptions(),
+      ExpressionPathAftermath *final_task_on_target = nullptr);
+
+  virtual bool IsInScope() { return true; }
+
+  virtual lldb::offset_t GetByteOffset() { return 0; }
+
+  virtual uint32_t GetBitfieldBitSize() { return 0; }
+
+  virtual uint32_t GetBitfieldBitOffset() { return 0; }
+
+  bool IsBitfield() {
+    return (GetBitfieldBitSize() != 0) || (GetBitfieldBitOffset() != 0);
+  }
+
+  virtual bool IsArrayItemForPointer() { return m_is_array_item_for_pointer; }
+
+  virtual const char *GetValueAsCString();
+
+  virtual bool GetValueAsCString(const lldb_private::TypeFormatImpl &format,
+                                 std::string &destination);
+
+  bool GetValueAsCString(lldb::Format format, std::string &destination);
+
+  virtual uint64_t GetValueAsUnsigned(uint64_t fail_value,
+                                      bool *success = nullptr);
+
+  virtual int64_t GetValueAsSigned(int64_t fail_value, bool *success = nullptr);
+
+  virtual bool SetValueFromCString(const char *value_str, Status &error);
+
+  // Return the module associated with this value object in case the value is
+  // from an executable file and might have its data in sections of the file.
+  // This can be used for variables.
+  virtual lldb::ModuleSP GetModule();
+
+  ValueObject *GetRoot();
+
+  // Given a ValueObject, loop over itself and its parent, and its parent's
+  // parent, .. until either the given callback returns false, or you end up at
+  // a null pointer
+  ValueObject *FollowParentChain(std::function<bool(ValueObject *)>);
+
+  virtual bool GetDeclaration(Declaration &decl);
+
+  // The functions below should NOT be modified by subclasses
+  const Status &GetError();
+
+  ConstString GetName() const;
+
+  virtual lldb::ValueObjectSP GetChildAtIndex(size_t idx, bool can_create);
+
+  // this will always create the children if necessary
+  lldb::ValueObjectSP GetChildAtIndexPath(llvm::ArrayRef<size_t> idxs,
+                                          size_t *index_of_error = nullptr);
+
+  lldb::ValueObjectSP
+  GetChildAtIndexPath(llvm::ArrayRef<std::pair<size_t, bool>> idxs,
+                      size_t *index_of_error = nullptr);
+
+  // this will always create the children if necessary
+  lldb::ValueObjectSP GetChildAtNamePath(llvm::ArrayRef<ConstString> names,
+                                         ConstString *name_of_error = nullptr);
+
+  lldb::ValueObjectSP
+  GetChildAtNamePath(llvm::ArrayRef<std::pair<ConstString, bool>> names,
+                     ConstString *name_of_error = nullptr);
+
+  virtual lldb::ValueObjectSP GetChildMemberWithName(ConstString name,
+                                                     bool can_create);
+
+  virtual size_t GetIndexOfChildWithName(ConstString name);
+
+  size_t GetNumChildren(uint32_t max = UINT32_MAX);
+
+  const Value &GetValue() const;
+
+  Value &GetValue();
+
+  virtual bool ResolveValue(Scalar &scalar);
+
+  // return 'false' whenever you set the error, otherwise callers may assume
+  // true means everything is OK - this will break breakpoint conditions among
+  // potentially a few others
+  virtual bool IsLogicalTrue(Status &error);
+
+  virtual const char *GetLocationAsCString();
+
+  const char *
+  GetSummaryAsCString(lldb::LanguageType lang = lldb::eLanguageTypeUnknown);
+
+  bool
+  GetSummaryAsCString(TypeSummaryImpl *summary_ptr, std::string &destination,
+                      lldb::LanguageType lang = lldb::eLanguageTypeUnknown);
+
+  bool GetSummaryAsCString(std::string &destination,
+                           const TypeSummaryOptions &options);
+
+  bool GetSummaryAsCString(TypeSummaryImpl *summary_ptr,
+                           std::string &destination,
+                           const TypeSummaryOptions &options);
+
+  std::pair<TypeValidatorResult, std::string> GetValidationStatus();
+
+  const char *GetObjectDescription();
+
+  bool HasSpecialPrintableRepresentation(
+      ValueObjectRepresentationStyle val_obj_display,
+      lldb::Format custom_format);
+
+  enum class PrintableRepresentationSpecialCases : bool {
+    eDisable = false,
+    eAllow = true
+  };
+
+  bool
+  DumpPrintableRepresentation(Stream &s,
+                              ValueObjectRepresentationStyle val_obj_display =
+                                  eValueObjectRepresentationStyleSummary,
+                              lldb::Format custom_format = lldb::eFormatInvalid,
+                              PrintableRepresentationSpecialCases special =
+                                  PrintableRepresentationSpecialCases::eAllow,
+                              bool do_dump_error = true);
+  bool GetValueIsValid() const;
+
+  // If you call this on a newly created ValueObject, it will always return
+  // false.
+  bool GetValueDidChange();
+
+  bool UpdateValueIfNeeded(bool update_format = true);
+
+  bool UpdateFormatsIfNeeded();
+
+  lldb::ValueObjectSP GetSP() { return m_manager->GetSharedPointer(this); }
+
+  // Change the name of the current ValueObject. Should *not* be used from a
+  // synthetic child provider as it would change the name of the non synthetic
+  // child as well.
+  void SetName(ConstString name);
+
+  virtual lldb::addr_t GetAddressOf(bool scalar_is_load_address = true,
+                                    AddressType *address_type = nullptr);
+
+  lldb::addr_t GetPointerValue(AddressType *address_type = nullptr);
+
+  lldb::ValueObjectSP GetSyntheticChild(ConstString key) const;
+
+  lldb::ValueObjectSP GetSyntheticArrayMember(size_t index, bool can_create);
+
+  lldb::ValueObjectSP GetSyntheticBitFieldChild(uint32_t from, uint32_t to,
+                                                bool can_create);
+
+  lldb::ValueObjectSP GetSyntheticExpressionPathChild(const char *expression,
+                                                      bool can_create);
+
+  virtual lldb::ValueObjectSP
+  GetSyntheticChildAtOffset(uint32_t offset, const CompilerType &type,
+                            bool can_create,
+                            ConstString name_const_str = ConstString());
+
+  virtual lldb::ValueObjectSP
+  GetSyntheticBase(uint32_t offset, const CompilerType &type, bool can_create,
+                   ConstString name_const_str = ConstString());
+
+  virtual lldb::ValueObjectSP GetDynamicValue(lldb::DynamicValueType valueType);
+
+  lldb::DynamicValueType GetDynamicValueType();
+
+  virtual lldb::ValueObjectSP GetStaticValue();
+
+  virtual lldb::ValueObjectSP GetNonSyntheticValue();
+
+  lldb::ValueObjectSP GetSyntheticValue(bool use_synthetic = true);
+
+  virtual bool HasSyntheticValue();
+
+  virtual bool IsSynthetic() { return false; }
+
+  lldb::ValueObjectSP
+  GetQualifiedRepresentationIfAvailable(lldb::DynamicValueType dynValue,
+                                        bool synthValue);
+
+  virtual lldb::ValueObjectSP CreateConstantValue(ConstString name);
+
+  virtual lldb::ValueObjectSP Dereference(Status &error);
+
+  // Creates a copy of the ValueObject with a new name and setting the current
+  // ValueObject as its parent. It should be used when we want to change the
+  // name of a ValueObject without modifying the actual ValueObject itself
+  // (e.g. sythetic child provider).
+  virtual lldb::ValueObjectSP Clone(ConstString new_name);
+
+  virtual lldb::ValueObjectSP AddressOf(Status &error);
+
+  virtual lldb::addr_t GetLiveAddress() { return LLDB_INVALID_ADDRESS; }
+
+  virtual void SetLiveAddress(lldb::addr_t addr = LLDB_INVALID_ADDRESS,
+                              AddressType address_type = eAddressTypeLoad) {}
+
+  virtual lldb::ValueObjectSP Cast(const CompilerType &compiler_type);
+
+  virtual lldb::ValueObjectSP CastPointerType(const char *name,
+                                              CompilerType &ast_type);
+
+  virtual lldb::ValueObjectSP CastPointerType(const char *name,
+                                              lldb::TypeSP &type_sp);
+
+  // The backing bits of this value object were updated, clear any descriptive
+  // string, so we know we have to refetch them
+  virtual void ValueUpdated() {
+    ClearUserVisibleData(eClearUserVisibleDataItemsValue |
+                         eClearUserVisibleDataItemsSummary |
+                         eClearUserVisibleDataItemsDescription);
+  }
+
+  virtual bool IsDynamic() { return false; }
+
+  virtual bool DoesProvideSyntheticValue() { return false; }
+
+  virtual bool IsSyntheticChildrenGenerated();
+
+  virtual void SetSyntheticChildrenGenerated(bool b);
+
+  virtual SymbolContextScope *GetSymbolContextScope();
+
+  void Dump(Stream &s);
+
+  void Dump(Stream &s, const DumpValueObjectOptions &options);
+
+  static lldb::ValueObjectSP
+  CreateValueObjectFromExpression(llvm::StringRef name,
+                                  llvm::StringRef expression,
+                                  const ExecutionContext &exe_ctx);
+
+  static lldb::ValueObjectSP
+  CreateValueObjectFromExpression(llvm::StringRef name,
+                                  llvm::StringRef expression,
+                                  const ExecutionContext &exe_ctx,
+                                  const EvaluateExpressionOptions &options);
+
+  static lldb::ValueObjectSP
+  CreateValueObjectFromAddress(llvm::StringRef name, uint64_t address,
+                               const ExecutionContext &exe_ctx,
+                               CompilerType type);
+
+  static lldb::ValueObjectSP
+  CreateValueObjectFromData(llvm::StringRef name, const DataExtractor &data,
+                            const ExecutionContext &exe_ctx, CompilerType type);
+
+  void LogValueObject(Log *log);
+
+  void LogValueObject(Log *log, const DumpValueObjectOptions &options);
+
+  lldb::ValueObjectSP Persist();
+
+  // returns true if this is a char* or a char[] if it is a char* and
+  // check_pointer is true, it also checks that the pointer is valid
+  bool IsCStringContainer(bool check_pointer = false);
+
+  std::pair<size_t, bool>
+  ReadPointedString(lldb::DataBufferSP &buffer_sp, Status &error,
+                    uint32_t max_length = 0, bool honor_array = true,
+                    lldb::Format item_format = lldb::eFormatCharArray);
+
+  virtual size_t GetPointeeData(DataExtractor &data, uint32_t item_idx = 0,
+                                uint32_t item_count = 1);
+
+  virtual uint64_t GetData(DataExtractor &data, Status &error);
+
+  virtual bool SetData(DataExtractor &data, Status &error);
+
+  virtual bool GetIsConstant() const { return m_update_point.IsConstant(); }
+
+  bool NeedsUpdating() {
+    const bool accept_invalid_exe_ctx =
+        (CanUpdateWithInvalidExecutionContext() == eLazyBoolYes);
+    return m_update_point.NeedsUpdating(accept_invalid_exe_ctx);
+  }
+
+  void SetIsConstant() { m_update_point.SetIsConstant(); }
+
+  lldb::Format GetFormat() const;
+
+  virtual void SetFormat(lldb::Format format) {
+    if (format != m_format)
+      ClearUserVisibleData(eClearUserVisibleDataItemsValue);
+    m_format = format;
+  }
+
+  virtual lldb::LanguageType GetPreferredDisplayLanguage();
+
+  void SetPreferredDisplayLanguage(lldb::LanguageType);
+
+  lldb::TypeSummaryImplSP GetSummaryFormat() {
+    UpdateFormatsIfNeeded();
+    return m_type_summary_sp;
+  }
+
+  void SetSummaryFormat(lldb::TypeSummaryImplSP format) {
+    m_type_summary_sp = format;
+    ClearUserVisibleData(eClearUserVisibleDataItemsSummary);
+  }
+
+  lldb::TypeValidatorImplSP GetValidator() {
+    UpdateFormatsIfNeeded();
+    return m_type_validator_sp;
+  }
+
+  void SetValidator(lldb::TypeValidatorImplSP format) {
+    m_type_validator_sp = format;
+    ClearUserVisibleData(eClearUserVisibleDataItemsValidator);
+  }
+
+  void SetValueFormat(lldb::TypeFormatImplSP format) {
+    m_type_format_sp = format;
+    ClearUserVisibleData(eClearUserVisibleDataItemsValue);
+  }
+
+  lldb::TypeFormatImplSP GetValueFormat() {
+    UpdateFormatsIfNeeded();
+    return m_type_format_sp;
+  }
+
+  void SetSyntheticChildren(const lldb::SyntheticChildrenSP &synth_sp) {
+    if (synth_sp.get() == m_synthetic_children_sp.get())
+      return;
+    ClearUserVisibleData(eClearUserVisibleDataItemsSyntheticChildren);
+    m_synthetic_children_sp = synth_sp;
+  }
+
+  lldb::SyntheticChildrenSP GetSyntheticChildren() {
+    UpdateFormatsIfNeeded();
+    return m_synthetic_children_sp;
+  }
+
+  // Use GetParent for display purposes, but if you want to tell the parent to
+  // update itself then use m_parent.  The ValueObjectDynamicValue's parent is
+  // not the correct parent for displaying, they are really siblings, so for
+  // display it needs to route through to its grandparent.
+  virtual ValueObject *GetParent() { return m_parent; }
+
+  virtual const ValueObject *GetParent() const { return m_parent; }
+
+  ValueObject *GetNonBaseClassParent();
+
+  void SetAddressTypeOfChildren(AddressType at) {
+    m_address_type_of_ptr_or_ref_children = at;
+  }
+
+  AddressType GetAddressTypeOfChildren();
+
+  void SetHasCompleteType() { m_did_calculate_complete_objc_class_type = true; }
+
+  /// Find out if a ValueObject might have children.
+  ///
+  /// This call is much more efficient than CalculateNumChildren() as
+  /// it doesn't need to complete the underlying type. This is designed
+  /// to be used in a UI environment in order to detect if the
+  /// disclosure triangle should be displayed or not.
+  ///
+  /// This function returns true for class, union, structure,
+  /// pointers, references, arrays and more. Again, it does so without
+  /// doing any expensive type completion.
+  ///
+  /// \return
+  ///     Returns \b true if the ValueObject might have children, or \b
+  ///     false otherwise.
+  virtual bool MightHaveChildren();
+
+  virtual lldb::VariableSP GetVariable() { return nullptr; }
+
+  virtual bool IsRuntimeSupportValue();
+
+  virtual uint64_t GetLanguageFlags();
+
+  virtual void SetLanguageFlags(uint64_t flags);
+
+protected:
+  typedef ClusterManager<ValueObject> ValueObjectManager;
+
+  class ChildrenManager {
+  public:
+    ChildrenManager() : m_mutex(), m_children(), m_children_count(0) {}
+
+    bool HasChildAtIndex(size_t idx) {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      return (m_children.find(idx) != m_children.end());
+    }
+
+    ValueObject *GetChildAtIndex(size_t idx) {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      const auto iter = m_children.find(idx);
+      return ((iter == m_children.end()) ? nullptr : iter->second);
+    }
+
+    void SetChildAtIndex(size_t idx, ValueObject *valobj) {
+      // we do not need to be mutex-protected to make a pair
+      ChildrenPair pair(idx, valobj);
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      m_children.insert(pair);
+    }
+
+    void SetChildrenCount(size_t count) { Clear(count); }
+
+    size_t GetChildrenCount() { return m_children_count; }
+
+    void Clear(size_t new_count = 0) {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      m_children_count = new_count;
+      m_children.clear();
+    }
+
+  private:
+    typedef std::map<size_t, ValueObject *> ChildrenMap;
+    typedef ChildrenMap::iterator ChildrenIterator;
+    typedef ChildrenMap::value_type ChildrenPair;
+    std::recursive_mutex m_mutex;
+    ChildrenMap m_children;
+    size_t m_children_count;
+  };
+
+  // Classes that inherit from ValueObject can see and modify these
+  ValueObject
+      *m_parent; // The parent value object, or nullptr if this has no parent
+  ValueObject *m_root; // The root of the hierarchy for this ValueObject (or
+                       // nullptr if never calculated)
+  EvaluationPoint m_update_point; // Stores both the stop id and the full
+                                  // context at which this value was last
+  // updated.  When we are asked to update the value object, we check whether
+  // the context & stop id are the same before updating.
+  ConstString m_name; // The name of this object
+  DataExtractor
+      m_data; // A data extractor that can be used to extract the value.
+  Value m_value;
+  Status
+      m_error; // An error object that can describe any errors that occur when
+               // updating values.
+  std::string m_value_str; // Cached value string that will get cleared if/when
+                           // the value is updated.
+  std::string m_old_value_str; // Cached old value string from the last time the
+                               // value was gotten
+  std::string m_location_str;  // Cached location string that will get cleared
+                               // if/when the value is updated.
+  std::string m_summary_str;   // Cached summary string that will get cleared
+                               // if/when the value is updated.
+  std::string m_object_desc_str; // Cached result of the "object printer".  This
+                                 // differs from the summary
+  // in that the summary is consed up by us, the object_desc_string is builtin.
+
+  llvm::Optional<std::pair<TypeValidatorResult, std::string>>
+      m_validation_result;
+
+  CompilerType m_override_type; // If the type of the value object should be
+                                // overridden, the type to impose.
+
+  ValueObjectManager *m_manager; // This object is managed by the root object
+                                 // (any ValueObject that gets created
+  // without a parent.)  The manager gets passed through all the generations of
+  // dependent objects, and will keep the whole cluster of objects alive as
+  // long as a shared pointer to any of them has been handed out.  Shared
+  // pointers to value objects must always be made with the GetSP method.
+
+  ChildrenManager m_children;
+  std::map<ConstString, ValueObject *> m_synthetic_children;
+
+  ValueObject *m_dynamic_value;
+  ValueObject *m_synthetic_value;
+  ValueObject *m_deref_valobj;
+
+  lldb::ValueObjectSP m_addr_of_valobj_sp; // We have to hold onto a shared
+                                           // pointer to this one because it is
+                                           // created
+  // as an independent ValueObjectConstResult, which isn't managed by us.
+
+  lldb::Format m_format;
+  lldb::Format m_last_format;
+  uint32_t m_last_format_mgr_revision;
+  lldb::TypeSummaryImplSP m_type_summary_sp;
+  lldb::TypeFormatImplSP m_type_format_sp;
+  lldb::SyntheticChildrenSP m_synthetic_children_sp;
+  lldb::TypeValidatorImplSP m_type_validator_sp;
+  ProcessModID m_user_id_of_forced_summary;
+  AddressType m_address_type_of_ptr_or_ref_children;
+
+  llvm::SmallVector<uint8_t, 16> m_value_checksum;
+
+  lldb::LanguageType m_preferred_display_language;
+
+  uint64_t m_language_flags;
+
+  bool m_value_is_valid : 1, m_value_did_change : 1, m_children_count_valid : 1,
+      m_old_value_valid : 1, m_is_deref_of_parent : 1,
+      m_is_array_item_for_pointer : 1, m_is_bitfield_for_scalar : 1,
+      m_is_child_at_offset : 1, m_is_getting_summary : 1,
+      m_did_calculate_complete_objc_class_type : 1,
+      m_is_synthetic_children_generated : 1;
+
+  friend class ValueObjectChild;
+  friend class ClangExpressionDeclMap; // For GetValue
+  friend class ExpressionVariable;     // For SetName
+  friend class Target;                 // For SetName
+  friend class ValueObjectConstResultImpl;
+  friend class ValueObjectSynthetic; // For ClearUserVisibleData
+
+  // Constructors and Destructors
+
+  // Use the no-argument constructor to make a constant variable object (with
+  // no ExecutionContextScope.)
+
+  ValueObject();
+
+  // Use this constructor to create a "root variable object".  The ValueObject
+  // will be locked to this context through-out its lifespan.
+
+  ValueObject(ExecutionContextScope *exe_scope,
+              AddressType child_ptr_or_ref_addr_type = eAddressTypeLoad);
+
+  // Use this constructor to create a ValueObject owned by another ValueObject.
+  // It will inherit the ExecutionContext of its parent.
+
+  ValueObject(ValueObject &parent);
+
+  ValueObjectManager *GetManager() { return m_manager; }
+
+  virtual bool UpdateValue() = 0;
+
+  virtual LazyBool CanUpdateWithInvalidExecutionContext() {
+    return eLazyBoolCalculate;
+  }
+
+  virtual void CalculateDynamicValue(lldb::DynamicValueType use_dynamic);
+
+  virtual lldb::DynamicValueType GetDynamicValueTypeImpl() {
+    return lldb::eNoDynamicValues;
+  }
+
+  virtual bool HasDynamicValueTypeInfo() { return false; }
+
+  virtual void CalculateSyntheticValue(bool use_synthetic = true);
+
+  // Should only be called by ValueObject::GetChildAtIndex() Returns a
+  // ValueObject managed by this ValueObject's manager.
+  virtual ValueObject *CreateChildAtIndex(size_t idx,
+                                          bool synthetic_array_member,
+                                          int32_t synthetic_index);
+
+  // Should only be called by ValueObject::GetNumChildren()
+  virtual size_t CalculateNumChildren(uint32_t max = UINT32_MAX) = 0;
+
+  void SetNumChildren(size_t num_children);
+
+  void SetValueDidChange(bool value_changed);
+
+  void SetValueIsValid(bool valid);
+
+  void ClearUserVisibleData(
+      uint32_t items = ValueObject::eClearUserVisibleDataItemsAllStrings);
+
+  void AddSyntheticChild(ConstString key, ValueObject *valobj);
+
+  DataExtractor &GetDataExtractor();
+
+  void ClearDynamicTypeInformation();
+
+  // Subclasses must implement the functions below.
+
+  virtual CompilerType GetCompilerTypeImpl() = 0;
+
+  const char *GetLocationAsCStringImpl(const Value &value,
+                                       const DataExtractor &data);
+
+  bool IsChecksumEmpty();
+
+  void SetPreferredDisplayLanguageIfNeeded(lldb::LanguageType);
+
+private:
+  virtual CompilerType MaybeCalculateCompleteType();
+
+  lldb::ValueObjectSP GetValueForExpressionPath_Impl(
+      llvm::StringRef expression_cstr,
+      ExpressionPathScanEndReason *reason_to_stop,
+      ExpressionPathEndResultType *final_value_type,
+      const GetValueForExpressionPathOptions &options,
+      ExpressionPathAftermath *final_task_on_target);
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObject);
+};
+
+// A value object manager class that is seeded with the static variable value
+// and it vends the user facing value object. If the type is dynamic it can
+// vend the dynamic type. If this user type also has a synthetic type
+// associated with it, it will vend the synthetic type. The class watches the
+// process' stop
+// ID and will update the user type when needed.
+class ValueObjectManager {
+  // The root value object is the static typed variable object.
+  lldb::ValueObjectSP m_root_valobj_sp;
+  // The user value object is the value object the user wants to see.
+  lldb::ValueObjectSP m_user_valobj_sp;
+  lldb::DynamicValueType m_use_dynamic;
+  uint32_t m_stop_id; // The stop ID that m_user_valobj_sp is valid for.
+  bool m_use_synthetic;
+
+public:
+  ValueObjectManager() {}
+  
+  ValueObjectManager(lldb::ValueObjectSP in_valobj_sp,
+                     lldb::DynamicValueType use_dynamic, bool use_synthetic);
+  
+  bool IsValid() const;
+  
+  lldb::ValueObjectSP GetRootSP() const { return m_root_valobj_sp; }
+  
+  // Gets the correct value object from the root object for a given process
+  // stop ID. If dynamic values are enabled, or if synthetic children are
+  // enabled, the value object that the user wants to see might change while
+  // debugging.
+  lldb::ValueObjectSP GetSP();
+  
+  void SetUseDynamic(lldb::DynamicValueType use_dynamic);
+  void SetUseSynthetic(bool use_synthetic);
+  lldb::DynamicValueType GetUseDynamic() const { return m_use_dynamic; }
+  bool GetUseSynthetic() const { return m_use_synthetic; }
+  lldb::TargetSP GetTargetSP() const;
+  lldb::ProcessSP GetProcessSP() const;
+  lldb::ThreadSP GetThreadSP() const;
+  lldb::StackFrameSP GetFrameSP() const;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObject_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectCast.h b/linux-x64/clang/include/lldb/Core/ValueObjectCast.h
new file mode 100644
index 0000000..feee493
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectCast.h
@@ -0,0 +1,65 @@
+//===-- ValueObjectCast.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectCast_h_
+#define liblldb_ValueObjectCast_h_
+
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class ConstString;
+
+// A ValueObject that represents a given value represented as a different type.
+class ValueObjectCast : public ValueObject {
+public:
+  ~ValueObjectCast() override;
+
+  static lldb::ValueObjectSP Create(ValueObject &parent,
+                                    ConstString name,
+                                    const CompilerType &cast_type);
+
+  uint64_t GetByteSize() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  lldb::ValueType GetValueType() const override;
+
+  bool IsInScope() override;
+
+  ValueObject *GetParent() override {
+    return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
+  }
+
+  const ValueObject *GetParent() const override {
+    return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
+  }
+
+protected:
+  ValueObjectCast(ValueObject &parent, ConstString name,
+                  const CompilerType &cast_type);
+
+  bool UpdateValue() override;
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  CompilerType m_cast_type;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectCast);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectCast_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectChild.h b/linux-x64/clang/include/lldb/Core/ValueObjectChild.h
new file mode 100644
index 0000000..76209a2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectChild.h
@@ -0,0 +1,96 @@
+//===-- ValueObjectChild.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectChild_h_
+#define liblldb_ValueObjectChild_h_
+
+#include "lldb/Core/ValueObject.h"
+
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/Optional.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+
+// A child of another ValueObject.
+class ValueObjectChild : public ValueObject {
+public:
+  ~ValueObjectChild() override;
+
+  uint64_t GetByteSize() override { return m_byte_size; }
+
+  lldb::offset_t GetByteOffset() override { return m_byte_offset; }
+
+  uint32_t GetBitfieldBitSize() override { return m_bitfield_bit_size; }
+
+  uint32_t GetBitfieldBitOffset() override { return m_bitfield_bit_offset; }
+
+  lldb::ValueType GetValueType() const override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  ConstString GetTypeName() override;
+
+  ConstString GetQualifiedTypeName() override;
+
+  ConstString GetDisplayTypeName() override;
+
+  bool IsInScope() override;
+
+  bool IsBaseClass() override { return m_is_base_class; }
+
+  bool IsDereferenceOfParent() override { return m_is_deref_of_parent; }
+
+protected:
+  bool UpdateValue() override;
+
+  LazyBool CanUpdateWithInvalidExecutionContext() override;
+
+  CompilerType GetCompilerTypeImpl() override { return m_compiler_type; }
+
+  CompilerType m_compiler_type;
+  ConstString m_type_name;
+  uint64_t m_byte_size;
+  int32_t m_byte_offset;
+  uint8_t m_bitfield_bit_size;
+  uint8_t m_bitfield_bit_offset;
+  bool m_is_base_class;
+  bool m_is_deref_of_parent;
+  llvm::Optional<LazyBool> m_can_update_with_invalid_exe_ctx;
+
+  //
+  //  void
+  //  ReadValueFromMemory (ValueObject* parent, lldb::addr_t address);
+
+protected:
+  friend class ValueObject;
+  friend class ValueObjectConstResult;
+  friend class ValueObjectConstResultImpl;
+
+  ValueObjectChild(ValueObject &parent, const CompilerType &compiler_type,
+                   ConstString name, uint64_t byte_size,
+                   int32_t byte_offset, uint32_t bitfield_bit_size,
+                   uint32_t bitfield_bit_offset, bool is_base_class,
+                   bool is_deref_of_parent,
+                   AddressType child_ptr_or_ref_addr_type,
+                   uint64_t language_flags);
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectChild);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectChild_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectConstResult.h b/linux-x64/clang/include/lldb/Core/ValueObjectConstResult.h
new file mode 100644
index 0000000..3bc957e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectConstResult.h
@@ -0,0 +1,154 @@
+//===-- ValueObjectConstResult.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectConstResult_h_
+#define liblldb_ValueObjectConstResult_h_
+
+#include "lldb/Core/Value.h"
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Core/ValueObjectConstResultImpl.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class DataExtractor;
+class ExecutionContextScope;
+class Module;
+
+// A frozen ValueObject copied into host memory
+class ValueObjectConstResult : public ValueObject {
+public:
+  ~ValueObjectConstResult() override;
+
+  static lldb::ValueObjectSP
+  Create(ExecutionContextScope *exe_scope, lldb::ByteOrder byte_order,
+         uint32_t addr_byte_size, lldb::addr_t address = LLDB_INVALID_ADDRESS);
+
+  static lldb::ValueObjectSP
+  Create(ExecutionContextScope *exe_scope, const CompilerType &compiler_type,
+         ConstString name, const DataExtractor &data,
+         lldb::addr_t address = LLDB_INVALID_ADDRESS);
+
+  static lldb::ValueObjectSP
+  Create(ExecutionContextScope *exe_scope, const CompilerType &compiler_type,
+         ConstString name, const lldb::DataBufferSP &result_data_sp,
+         lldb::ByteOrder byte_order, uint32_t addr_size,
+         lldb::addr_t address = LLDB_INVALID_ADDRESS);
+
+  static lldb::ValueObjectSP
+  Create(ExecutionContextScope *exe_scope, const CompilerType &compiler_type,
+         ConstString name, lldb::addr_t address,
+         AddressType address_type, uint32_t addr_byte_size);
+
+  static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
+                                    Value &value, ConstString name,
+                                    Module *module = nullptr);
+
+  // When an expression fails to evaluate, we return an error
+  static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
+                                    const Status &error);
+
+  uint64_t GetByteSize() override;
+
+  lldb::ValueType GetValueType() const override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  ConstString GetTypeName() override;
+
+  ConstString GetDisplayTypeName() override;
+
+  bool IsInScope() override;
+
+  void SetByteSize(size_t size);
+
+  lldb::ValueObjectSP Dereference(Status &error) override;
+
+  ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
+                                  int32_t synthetic_index) override;
+
+  lldb::ValueObjectSP GetSyntheticChildAtOffset(
+      uint32_t offset, const CompilerType &type, bool can_create,
+      ConstString name_const_str = ConstString()) override;
+
+  lldb::ValueObjectSP AddressOf(Status &error) override;
+
+  lldb::addr_t GetAddressOf(bool scalar_is_load_address = true,
+                            AddressType *address_type = nullptr) override;
+
+  size_t GetPointeeData(DataExtractor &data, uint32_t item_idx = 0,
+                        uint32_t item_count = 1) override;
+
+  lldb::addr_t GetLiveAddress() override { return m_impl.GetLiveAddress(); }
+
+  void SetLiveAddress(lldb::addr_t addr = LLDB_INVALID_ADDRESS,
+                      AddressType address_type = eAddressTypeLoad) override {
+    m_impl.SetLiveAddress(addr, address_type);
+  }
+
+  lldb::ValueObjectSP
+  GetDynamicValue(lldb::DynamicValueType valueType) override;
+
+  lldb::LanguageType GetPreferredDisplayLanguage() override;
+
+  lldb::ValueObjectSP Cast(const CompilerType &compiler_type) override;
+
+protected:
+  bool UpdateValue() override;
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  ConstString m_type_name;
+  uint64_t m_byte_size;
+
+  ValueObjectConstResultImpl m_impl;
+
+private:
+  friend class ValueObjectConstResultImpl;
+
+  ValueObjectConstResult(ExecutionContextScope *exe_scope,
+                         lldb::ByteOrder byte_order, uint32_t addr_byte_size,
+                         lldb::addr_t address);
+
+  ValueObjectConstResult(ExecutionContextScope *exe_scope,
+                         const CompilerType &compiler_type,
+                         ConstString name, const DataExtractor &data,
+                         lldb::addr_t address);
+
+  ValueObjectConstResult(ExecutionContextScope *exe_scope,
+                         const CompilerType &compiler_type,
+                         ConstString name,
+                         const lldb::DataBufferSP &result_data_sp,
+                         lldb::ByteOrder byte_order, uint32_t addr_size,
+                         lldb::addr_t address);
+
+  ValueObjectConstResult(ExecutionContextScope *exe_scope,
+                         const CompilerType &compiler_type,
+                         ConstString name, lldb::addr_t address,
+                         AddressType address_type, uint32_t addr_byte_size);
+
+  ValueObjectConstResult(ExecutionContextScope *exe_scope, const Value &value,
+                         ConstString name, Module *module = nullptr);
+
+  ValueObjectConstResult(ExecutionContextScope *exe_scope, const Status &error);
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectConstResult);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectConstResult_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectConstResultCast.h b/linux-x64/clang/include/lldb/Core/ValueObjectConstResultCast.h
new file mode 100644
index 0000000..be9b12b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectConstResultCast.h
@@ -0,0 +1,69 @@
+//===-- ValueObjectConstResultCast.h ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectConstResultCast_h_
+#define liblldb_ValueObjectConstResultCast_h_
+
+#include "lldb/Core/ValueObjectCast.h"
+#include "lldb/Core/ValueObjectConstResultImpl.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class DataExtractor;
+class Status;
+class ValueObject;
+
+class ValueObjectConstResultCast : public ValueObjectCast {
+public:
+  ValueObjectConstResultCast(ValueObject &parent, ConstString name,
+                             const CompilerType &cast_type,
+                             lldb::addr_t live_address = LLDB_INVALID_ADDRESS);
+
+  ~ValueObjectConstResultCast() override;
+
+  lldb::ValueObjectSP Dereference(Status &error) override;
+
+  ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
+                                  int32_t synthetic_index) override;
+
+  virtual CompilerType GetCompilerType() {
+    return ValueObjectCast::GetCompilerType();
+  }
+
+  lldb::ValueObjectSP GetSyntheticChildAtOffset(
+      uint32_t offset, const CompilerType &type, bool can_create,
+      ConstString name_const_str = ConstString()) override;
+
+  lldb::ValueObjectSP AddressOf(Status &error) override;
+
+  size_t GetPointeeData(DataExtractor &data, uint32_t item_idx = 0,
+                        uint32_t item_count = 1) override;
+
+  lldb::ValueObjectSP Cast(const CompilerType &compiler_type) override;
+
+protected:
+  ValueObjectConstResultImpl m_impl;
+
+private:
+  friend class ValueObject;
+  friend class ValueObjectConstResult;
+  friend class ValueObjectConstResultImpl;
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectConstResultCast);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectConstResultCast_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectConstResultChild.h b/linux-x64/clang/include/lldb/Core/ValueObjectConstResultChild.h
new file mode 100644
index 0000000..16fa74f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectConstResultChild.h
@@ -0,0 +1,78 @@
+//===-- ValueObjectConstResultChild.h ----------------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectConstResultChild_h_
+#define liblldb_ValueObjectConstResultChild_h_
+
+#include "lldb/Core/ValueObjectChild.h"
+#include "lldb/Core/ValueObjectConstResultImpl.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class DataExtractor;
+class Status;
+class ValueObject;
+
+// A child of a ValueObjectConstResult.
+class ValueObjectConstResultChild : public ValueObjectChild {
+public:
+  ValueObjectConstResultChild(ValueObject &parent,
+                              const CompilerType &compiler_type,
+                              ConstString name, uint32_t byte_size,
+                              int32_t byte_offset, uint32_t bitfield_bit_size,
+                              uint32_t bitfield_bit_offset, bool is_base_class,
+                              bool is_deref_of_parent,
+                              lldb::addr_t live_address,
+                              uint64_t language_flags);
+
+  ~ValueObjectConstResultChild() override;
+
+  lldb::ValueObjectSP Dereference(Status &error) override;
+
+  ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
+                                  int32_t synthetic_index) override;
+
+  virtual CompilerType GetCompilerType() {
+    return ValueObjectChild::GetCompilerType();
+  }
+
+  lldb::ValueObjectSP GetSyntheticChildAtOffset(
+      uint32_t offset, const CompilerType &type, bool can_create,
+      ConstString name_const_str = ConstString()) override;
+
+  lldb::ValueObjectSP AddressOf(Status &error) override;
+
+  lldb::addr_t GetAddressOf(bool scalar_is_load_address = true,
+                            AddressType *address_type = nullptr) override;
+
+  size_t GetPointeeData(DataExtractor &data, uint32_t item_idx = 0,
+                        uint32_t item_count = 1) override;
+
+  lldb::ValueObjectSP Cast(const CompilerType &compiler_type) override;
+
+protected:
+  ValueObjectConstResultImpl m_impl;
+
+private:
+  friend class ValueObject;
+  friend class ValueObjectConstResult;
+  friend class ValueObjectConstResultImpl;
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectConstResultChild);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectConstResultChild_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectConstResultImpl.h b/linux-x64/clang/include/lldb/Core/ValueObjectConstResultImpl.h
new file mode 100644
index 0000000..ffac98e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectConstResultImpl.h
@@ -0,0 +1,79 @@
+//===-- ValueObjectConstResultImpl.h ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectConstResultImpl_h_
+#define liblldb_ValueObjectConstResultImpl_h_
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+namespace lldb_private {
+class CompilerType;
+class DataExtractor;
+class Status;
+class ValueObject;
+}
+
+namespace lldb_private {
+
+// A class wrapping common implementation details for operations in
+// ValueObjectConstResult ( & Child ) that may need to jump from the host
+// memory space into the target's memory space
+class ValueObjectConstResultImpl {
+public:
+  ValueObjectConstResultImpl(ValueObject *valobj,
+                             lldb::addr_t live_address = LLDB_INVALID_ADDRESS);
+
+  virtual ~ValueObjectConstResultImpl() = default;
+
+  lldb::ValueObjectSP Dereference(Status &error);
+
+  ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
+                                  int32_t synthetic_index);
+
+  lldb::ValueObjectSP
+  GetSyntheticChildAtOffset(uint32_t offset, const CompilerType &type,
+                            bool can_create,
+                            ConstString name_const_str = ConstString());
+
+  lldb::ValueObjectSP AddressOf(Status &error);
+
+  lldb::addr_t GetLiveAddress() { return m_live_address; }
+
+  lldb::ValueObjectSP Cast(const CompilerType &compiler_type);
+
+  void SetLiveAddress(lldb::addr_t addr = LLDB_INVALID_ADDRESS,
+                      AddressType address_type = eAddressTypeLoad) {
+    m_live_address = addr;
+    m_live_address_type = address_type;
+  }
+
+  virtual lldb::addr_t GetAddressOf(bool scalar_is_load_address = true,
+                                    AddressType *address_type = nullptr);
+
+  virtual size_t GetPointeeData(DataExtractor &data, uint32_t item_idx = 0,
+                                uint32_t item_count = 1);
+
+private:
+  ValueObject *m_impl_backend;
+  lldb::addr_t m_live_address;
+  AddressType m_live_address_type;
+  lldb::ValueObjectSP m_load_addr_backend;
+  lldb::ValueObjectSP m_address_of_backend;
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectConstResultImpl);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectConstResultImpl_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectDynamicValue.h b/linux-x64/clang/include/lldb/Core/ValueObjectDynamicValue.h
new file mode 100644
index 0000000..f656d42
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectDynamicValue.h
@@ -0,0 +1,136 @@
+//===-- ValueObjectDynamicValue.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectDynamicValue_h_
+#define liblldb_ValueObjectDynamicValue_h_
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/Type.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/SharingPtr.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class DataExtractor;
+class Declaration;
+class Status;
+
+// A ValueObject that represents memory at a given address, viewed as some
+// set lldb type.
+class ValueObjectDynamicValue : public ValueObject {
+public:
+  ~ValueObjectDynamicValue() override;
+
+  uint64_t GetByteSize() override;
+
+  ConstString GetTypeName() override;
+
+  ConstString GetQualifiedTypeName() override;
+
+  ConstString GetDisplayTypeName() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  lldb::ValueType GetValueType() const override;
+
+  bool IsInScope() override;
+
+  bool IsDynamic() override { return true; }
+
+  bool IsBaseClass() override {
+    if (m_parent)
+      return m_parent->IsBaseClass();
+    return false;
+  }
+
+  bool GetIsConstant() const override { return false; }
+
+  ValueObject *GetParent() override {
+    return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
+  }
+
+  const ValueObject *GetParent() const override {
+    return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
+  }
+
+  lldb::ValueObjectSP GetStaticValue() override { return m_parent->GetSP(); }
+
+  void SetOwningSP(lldb::ValueObjectSP &owning_sp) {
+    if (m_owning_valobj_sp == owning_sp)
+      return;
+
+    assert(m_owning_valobj_sp.get() == nullptr);
+    m_owning_valobj_sp = owning_sp;
+  }
+
+  bool SetValueFromCString(const char *value_str, Status &error) override;
+
+  bool SetData(DataExtractor &data, Status &error) override;
+
+  TypeImpl GetTypeImpl() override;
+
+  lldb::VariableSP GetVariable() override {
+    return m_parent ? m_parent->GetVariable() : nullptr;
+  }
+
+  lldb::LanguageType GetPreferredDisplayLanguage() override;
+
+  void SetPreferredDisplayLanguage(lldb::LanguageType);
+
+  bool IsSyntheticChildrenGenerated() override;
+
+  void SetSyntheticChildrenGenerated(bool b) override;
+
+  bool GetDeclaration(Declaration &decl) override;
+
+  uint64_t GetLanguageFlags() override;
+
+  void SetLanguageFlags(uint64_t flags) override;
+
+protected:
+  bool UpdateValue() override;
+
+  LazyBool CanUpdateWithInvalidExecutionContext() override {
+    return eLazyBoolYes;
+  }
+
+  lldb::DynamicValueType GetDynamicValueTypeImpl() override {
+    return m_use_dynamic;
+  }
+
+  bool HasDynamicValueTypeInfo() override { return true; }
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  Address m_address; ///< The variable that this value object is based upon
+  TypeAndOrName m_dynamic_type_info; // We can have a type_sp or just a name
+  lldb::ValueObjectSP m_owning_valobj_sp;
+  lldb::DynamicValueType m_use_dynamic;
+  TypeImpl m_type_impl;
+
+private:
+  friend class ValueObject;
+  friend class ValueObjectConstResult;
+  ValueObjectDynamicValue(ValueObject &parent,
+                          lldb::DynamicValueType use_dynamic);
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectDynamicValue);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectDynamicValue_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectList.h b/linux-x64/clang/include/lldb/Core/ValueObjectList.h
new file mode 100644
index 0000000..42d1967
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectList.h
@@ -0,0 +1,62 @@
+//===-- ValueObjectList.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectList_h_
+#define liblldb_ValueObjectList_h_
+
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include <vector>
+
+#include <stddef.h>
+
+namespace lldb_private {
+class ValueObject;
+
+// A collection of ValueObject values that
+class ValueObjectList {
+public:
+  const ValueObjectList &operator=(const ValueObjectList &rhs);
+
+  void Append(const lldb::ValueObjectSP &val_obj_sp);
+
+  void Append(const ValueObjectList &valobj_list);
+
+  lldb::ValueObjectSP FindValueObjectByPointer(ValueObject *valobj);
+
+  size_t GetSize() const;
+
+  void Resize(size_t size);
+
+  lldb::ValueObjectSP GetValueObjectAtIndex(size_t idx);
+
+  lldb::ValueObjectSP RemoveValueObjectAtIndex(size_t idx);
+
+  void SetValueObjectAtIndex(size_t idx, const lldb::ValueObjectSP &valobj_sp);
+
+  lldb::ValueObjectSP FindValueObjectByValueName(const char *name);
+
+  lldb::ValueObjectSP FindValueObjectByUID(lldb::user_id_t uid);
+
+  void Swap(ValueObjectList &value_object_list);
+
+  void Clear() { m_value_objects.clear(); }
+
+  const std::vector<lldb::ValueObjectSP> &GetObjects() const {
+    return m_value_objects;
+  }
+protected:
+  typedef std::vector<lldb::ValueObjectSP> collection;
+  // Classes that inherit from ValueObjectList can see and modify these
+  collection m_value_objects;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectList_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectMemory.h b/linux-x64/clang/include/lldb/Core/ValueObjectMemory.h
new file mode 100644
index 0000000..df3557f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectMemory.h
@@ -0,0 +1,78 @@
+//===-- ValueObjectMemory.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectMemory_h_
+#define liblldb_ValueObjectMemory_h_
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class ExecutionContextScope;
+
+// A ValueObject that represents memory at a given address, viewed as some
+// set lldb type.
+class ValueObjectMemory : public ValueObject {
+public:
+  ~ValueObjectMemory() override;
+
+  static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
+                                    llvm::StringRef name,
+                                    const Address &address,
+                                    lldb::TypeSP &type_sp);
+
+  static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
+                                    llvm::StringRef name,
+                                    const Address &address,
+                                    const CompilerType &ast_type);
+
+  uint64_t GetByteSize() override;
+
+  ConstString GetTypeName() override;
+
+  ConstString GetDisplayTypeName() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  lldb::ValueType GetValueType() const override;
+
+  bool IsInScope() override;
+
+  lldb::ModuleSP GetModule() override;
+
+protected:
+  bool UpdateValue() override;
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  Address m_address; ///< The variable that this value object is based upon
+  lldb::TypeSP m_type_sp;
+  CompilerType m_compiler_type;
+
+private:
+  ValueObjectMemory(ExecutionContextScope *exe_scope, llvm::StringRef name,
+                    const Address &address, lldb::TypeSP &type_sp);
+
+  ValueObjectMemory(ExecutionContextScope *exe_scope, llvm::StringRef name,
+                    const Address &address, const CompilerType &ast_type);
+  // For ValueObject only
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectMemory);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectMemory_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectRegister.h b/linux-x64/clang/include/lldb/Core/ValueObjectRegister.h
new file mode 100644
index 0000000..e584be6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectRegister.h
@@ -0,0 +1,171 @@
+//===-- ValueObjectRegister.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectRegister_h_
+#define liblldb_ValueObjectRegister_h_
+
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/RegisterValue.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class DataExtractor;
+class Status;
+class ExecutionContextScope;
+class Scalar;
+class Stream;
+
+// A ValueObject that contains a root variable that may or may not
+// have children.
+class ValueObjectRegisterContext : public ValueObject {
+public:
+  ~ValueObjectRegisterContext() override;
+
+  uint64_t GetByteSize() override;
+
+  lldb::ValueType GetValueType() const override {
+    return lldb::eValueTypeRegisterSet;
+  }
+
+  ConstString GetTypeName() override;
+
+  ConstString GetQualifiedTypeName() override;
+
+  ConstString GetDisplayTypeName() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
+                                  int32_t synthetic_index) override;
+
+protected:
+  bool UpdateValue() override;
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  lldb::RegisterContextSP m_reg_ctx_sp;
+
+private:
+  ValueObjectRegisterContext(ValueObject &parent,
+                             lldb::RegisterContextSP &reg_ctx_sp);
+  // For ValueObject only
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectRegisterContext);
+};
+
+class ValueObjectRegisterSet : public ValueObject {
+public:
+  ~ValueObjectRegisterSet() override;
+
+  static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
+                                    lldb::RegisterContextSP &reg_ctx_sp,
+                                    uint32_t set_idx);
+
+  uint64_t GetByteSize() override;
+
+  lldb::ValueType GetValueType() const override {
+    return lldb::eValueTypeRegisterSet;
+  }
+
+  ConstString GetTypeName() override;
+
+  ConstString GetQualifiedTypeName() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
+                                  int32_t synthetic_index) override;
+
+  lldb::ValueObjectSP GetChildMemberWithName(ConstString name,
+                                             bool can_create) override;
+
+  size_t GetIndexOfChildWithName(ConstString name) override;
+
+protected:
+  bool UpdateValue() override;
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  lldb::RegisterContextSP m_reg_ctx_sp;
+  const RegisterSet *m_reg_set;
+  uint32_t m_reg_set_idx;
+
+private:
+  friend class ValueObjectRegisterContext;
+
+  ValueObjectRegisterSet(ExecutionContextScope *exe_scope,
+                         lldb::RegisterContextSP &reg_ctx_sp, uint32_t set_idx);
+
+  // For ValueObject only
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectRegisterSet);
+};
+
+class ValueObjectRegister : public ValueObject {
+public:
+  ~ValueObjectRegister() override;
+
+  static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
+                                    lldb::RegisterContextSP &reg_ctx_sp,
+                                    uint32_t reg_num);
+
+  uint64_t GetByteSize() override;
+
+  lldb::ValueType GetValueType() const override {
+    return lldb::eValueTypeRegister;
+  }
+
+  ConstString GetTypeName() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  bool SetValueFromCString(const char *value_str, Status &error) override;
+
+  bool SetData(DataExtractor &data, Status &error) override;
+
+  bool ResolveValue(Scalar &scalar) override;
+
+  void
+  GetExpressionPath(Stream &s, bool qualify_cxx_base_classes,
+                    GetExpressionPathFormat epformat =
+                        eGetExpressionPathFormatDereferencePointers) override;
+
+protected:
+  bool UpdateValue() override;
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  lldb::RegisterContextSP m_reg_ctx_sp;
+  RegisterInfo m_reg_info;
+  RegisterValue m_reg_value;
+  ConstString m_type_name;
+  CompilerType m_compiler_type;
+
+private:
+  void ConstructObject(uint32_t reg_num);
+
+  friend class ValueObjectRegisterSet;
+
+  ValueObjectRegister(ValueObject &parent, lldb::RegisterContextSP &reg_ctx_sp,
+                      uint32_t reg_num);
+  ValueObjectRegister(ExecutionContextScope *exe_scope,
+                      lldb::RegisterContextSP &reg_ctx_sp, uint32_t reg_num);
+
+  // For ValueObject only
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectRegister);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectRegister_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectSyntheticFilter.h b/linux-x64/clang/include/lldb/Core/ValueObjectSyntheticFilter.h
new file mode 100644
index 0000000..3b14a3e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectSyntheticFilter.h
@@ -0,0 +1,169 @@
+//===-- ValueObjectSyntheticFilter.h ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectSyntheticFilter_h_
+#define liblldb_ValueObjectSyntheticFilter_h_
+
+#include "lldb/Core/ThreadSafeSTLMap.h"
+#include "lldb/Core/ThreadSafeSTLVector.h"
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+
+#include <cstdint>
+#include <memory>
+
+#include <stddef.h>
+
+namespace lldb_private {
+class Declaration;
+class Status;
+class SyntheticChildrenFrontEnd;
+
+// A ValueObject that obtains its children from some source other than
+// real information
+// This is currently used to implement Python-based children and filters but
+// you can bind it to any source of synthetic information and have it behave
+// accordingly
+class ValueObjectSynthetic : public ValueObject {
+public:
+  ~ValueObjectSynthetic() override;
+
+  uint64_t GetByteSize() override;
+
+  ConstString GetTypeName() override;
+
+  ConstString GetQualifiedTypeName() override;
+
+  ConstString GetDisplayTypeName() override;
+
+  bool MightHaveChildren() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  lldb::ValueType GetValueType() const override;
+
+  lldb::ValueObjectSP GetChildAtIndex(size_t idx, bool can_create) override;
+
+  lldb::ValueObjectSP GetChildMemberWithName(ConstString name,
+                                             bool can_create) override;
+
+  size_t GetIndexOfChildWithName(ConstString name) override;
+
+  lldb::ValueObjectSP
+  GetDynamicValue(lldb::DynamicValueType valueType) override;
+
+  bool IsInScope() override;
+
+  bool HasSyntheticValue() override { return false; }
+
+  bool IsSynthetic() override { return true; }
+
+  void CalculateSyntheticValue(bool use_synthetic) override {}
+
+  bool IsDynamic() override {
+    return ((m_parent != nullptr) ? m_parent->IsDynamic() : false);
+  }
+
+  lldb::ValueObjectSP GetStaticValue() override {
+    return ((m_parent != nullptr) ? m_parent->GetStaticValue() : GetSP());
+  }
+
+  virtual lldb::DynamicValueType GetDynamicValueType() {
+    return ((m_parent != nullptr) ? m_parent->GetDynamicValueType()
+                                  : lldb::eNoDynamicValues);
+  }
+
+  ValueObject *GetParent() override {
+    return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
+  }
+
+  const ValueObject *GetParent() const override {
+    return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
+  }
+
+  lldb::ValueObjectSP GetNonSyntheticValue() override;
+
+  bool CanProvideValue() override;
+
+  bool DoesProvideSyntheticValue() override {
+    return (UpdateValueIfNeeded(), m_provides_value == eLazyBoolYes);
+  }
+
+  bool GetIsConstant() const override { return false; }
+
+  bool SetValueFromCString(const char *value_str, Status &error) override;
+
+  void SetFormat(lldb::Format format) override;
+
+  lldb::LanguageType GetPreferredDisplayLanguage() override;
+
+  void SetPreferredDisplayLanguage(lldb::LanguageType);
+
+  bool IsSyntheticChildrenGenerated() override;
+
+  void SetSyntheticChildrenGenerated(bool b) override;
+
+  bool GetDeclaration(Declaration &decl) override;
+
+  uint64_t GetLanguageFlags() override;
+
+  void SetLanguageFlags(uint64_t flags) override;
+
+protected:
+  bool UpdateValue() override;
+
+  LazyBool CanUpdateWithInvalidExecutionContext() override {
+    return eLazyBoolYes;
+  }
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  virtual void CreateSynthFilter();
+
+  // we need to hold on to the SyntheticChildren because someone might delete
+  // the type binding while we are alive
+  lldb::SyntheticChildrenSP m_synth_sp;
+  std::unique_ptr<SyntheticChildrenFrontEnd> m_synth_filter_up;
+
+  typedef ThreadSafeSTLMap<uint32_t, ValueObject *> ByIndexMap;
+  typedef ThreadSafeSTLMap<const char *, uint32_t> NameToIndexMap;
+  typedef ThreadSafeSTLVector<lldb::ValueObjectSP> SyntheticChildrenCache;
+
+  typedef ByIndexMap::iterator ByIndexIterator;
+  typedef NameToIndexMap::iterator NameToIndexIterator;
+
+  ByIndexMap m_children_byindex;
+  NameToIndexMap m_name_toindex;
+  uint32_t m_synthetic_children_count; // FIXME use the ValueObject's
+                                       // ChildrenManager instead of a special
+                                       // purpose solution
+  SyntheticChildrenCache m_synthetic_children_cache;
+
+  ConstString m_parent_type_name;
+
+  LazyBool m_might_have_children;
+
+  LazyBool m_provides_value;
+
+private:
+  friend class ValueObject;
+  ValueObjectSynthetic(ValueObject &parent, lldb::SyntheticChildrenSP filter);
+
+  void CopyValueData(ValueObject *source);
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectSynthetic);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectSyntheticFilter_h_
diff --git a/linux-x64/clang/include/lldb/Core/ValueObjectVariable.h b/linux-x64/clang/include/lldb/Core/ValueObjectVariable.h
new file mode 100644
index 0000000..86bb8ef
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/ValueObjectVariable.h
@@ -0,0 +1,87 @@
+//===-- ValueObjectVariable.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ValueObjectVariable_h_
+#define liblldb_ValueObjectVariable_h_
+
+#include "lldb/Core/ValueObject.h"
+
+#include "lldb/Core/Value.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class DataExtractor;
+class Declaration;
+class Status;
+class ExecutionContextScope;
+class SymbolContextScope;
+
+// A ValueObject that contains a root variable that may or may not
+// have children.
+class ValueObjectVariable : public ValueObject {
+public:
+  ~ValueObjectVariable() override;
+
+  static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
+                                    const lldb::VariableSP &var_sp);
+
+  uint64_t GetByteSize() override;
+
+  ConstString GetTypeName() override;
+
+  ConstString GetQualifiedTypeName() override;
+
+  ConstString GetDisplayTypeName() override;
+
+  size_t CalculateNumChildren(uint32_t max) override;
+
+  lldb::ValueType GetValueType() const override;
+
+  bool IsInScope() override;
+
+  lldb::ModuleSP GetModule() override;
+
+  SymbolContextScope *GetSymbolContextScope() override;
+
+  bool GetDeclaration(Declaration &decl) override;
+
+  const char *GetLocationAsCString() override;
+
+  bool SetValueFromCString(const char *value_str, Status &error) override;
+
+  bool SetData(DataExtractor &data, Status &error) override;
+
+  lldb::VariableSP GetVariable() override { return m_variable_sp; }
+
+protected:
+  bool UpdateValue() override;
+
+  CompilerType GetCompilerTypeImpl() override;
+
+  lldb::VariableSP
+      m_variable_sp;      ///< The variable that this value object is based upon
+  Value m_resolved_value; ///< The value that DWARFExpression resolves this
+                          ///variable to before we patch it up
+
+private:
+  ValueObjectVariable(ExecutionContextScope *exe_scope,
+                      const lldb::VariableSP &var_sp);
+  // For ValueObject only
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectVariable);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ValueObjectVariable_h_
diff --git a/linux-x64/clang/include/lldb/Core/dwarf.h b/linux-x64/clang/include/lldb/Core/dwarf.h
new file mode 100644
index 0000000..afe62e0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Core/dwarf.h
@@ -0,0 +1,76 @@
+//===-- dwarf.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef DebugBase_dwarf_h_
+#define DebugBase_dwarf_h_
+
+#include "lldb/Utility/RangeMap.h"
+#include <stdint.h>
+
+// Get the DWARF constant definitions from llvm
+#include "llvm/BinaryFormat/Dwarf.h"
+
+// and stuff them in our default namespace
+using namespace llvm::dwarf;
+
+typedef uint32_t dw_uleb128_t;
+typedef int32_t dw_sleb128_t;
+typedef uint16_t dw_attr_t;
+typedef uint16_t dw_form_t;
+typedef uint16_t dw_tag_t;
+typedef uint64_t dw_addr_t; // Dwarf address define that must be big enough for
+                            // any addresses in the compile units that get
+                            // parsed
+
+typedef uint32_t dw_offset_t; // Dwarf Debug Information Entry offset for any
+                              // offset into the file
+
+/* Constants */
+#define DW_INVALID_OFFSET (~(dw_offset_t)0)
+#define DW_INVALID_INDEX 0xFFFFFFFFul
+
+// #define DW_ADDR_none 0x0
+
+#define DW_EH_PE_MASK_ENCODING 0x0F
+
+//// The following are used only internally within lldb - don't
+//// document them in the llvm Dwarf.h header file, we won't see
+//// them in executable files anywhere.
+//// These constants fit between DW_OP_lo_user (0xe0) and DW_OP_hi_user (0xff).
+//
+//#define DW_OP_APPLE_array_ref     0xEE // first pops index, then pops array;
+//pushes array[index]
+//#define DW_OP_APPLE_extern        0xEF // ULEB128 index of external object
+//(i.e., an entity from the program that was used in the expression)
+#define DW_OP_APPLE_uninit                                                     \
+  0xF0 // This is actually generated by some apple compilers in locations lists
+//#define DW_OP_APPLE_assign        0xF1 // pops value off and assigns it to
+//second item on stack (2nd item must have assignable context)
+//#define DW_OP_APPLE_address_of    0xF2 // gets the address of the top stack
+//item (top item must be a variable, or have value_type that is an address
+//already)
+//#define DW_OP_APPLE_value_of      0xF3 // pops the value off the stack and
+//pushes the value of that object (top item must be a variable, or expression
+//local)
+//#define DW_OP_APPLE_deref_type    0xF4 // gets the address of the top stack
+//item (top item must be a variable, or a clang type)
+//#define DW_OP_APPLE_expr_local    0xF5 // ULEB128 expression local index
+//#define DW_OP_APPLE_constf        0xF6 // 1 byte float size, followed by
+//constant float data
+//#define DW_OP_APPLE_scalar_cast   0xF7 // Cast top of stack to 2nd in stack's
+//type leaving all items in place
+//#define DW_OP_APPLE_clang_cast    0xF8 // pointer size clang::Type * off the
+//stack and cast top stack item to this type
+//#define DW_OP_APPLE_clear         0xFE // clears the entire expression stack,
+//ok if the stack is empty
+//#define DW_OP_APPLE_error         0xFF // Stops expression evaluation and
+//returns an error (no args)
+
+typedef lldb_private::RangeArray<dw_addr_t, dw_addr_t, 2> DWARFRangeList;
+
+#endif // DebugBase_dwarf_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/CXXFunctionPointer.h b/linux-x64/clang/include/lldb/DataFormatters/CXXFunctionPointer.h
new file mode 100644
index 0000000..b541789
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/CXXFunctionPointer.h
@@ -0,0 +1,21 @@
+//===-- CXXFunctionPointer.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CXXFunctionPointer_h_
+#define liblldb_CXXFunctionPointer_h_
+
+#include "lldb/lldb-forward.h"
+
+namespace lldb_private {
+namespace formatters {
+bool CXXFunctionPointerSummaryProvider(ValueObject &valobj, Stream &stream,
+                                       const TypeSummaryOptions &options);
+} // namespace formatters
+} // namespace lldb_private
+
+#endif // liblldb_CXXFunctionPointer_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/DataVisualization.h b/linux-x64/clang/include/lldb/DataFormatters/DataVisualization.h
new file mode 100644
index 0000000..cdb2eab
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/DataVisualization.h
@@ -0,0 +1,131 @@
+//===-- DataVisualization.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_DataVisualization_h_
+#define lldb_DataVisualization_h_
+
+
+#include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/FormatManager.h"
+#include "lldb/Utility/ConstString.h"
+
+namespace lldb_private {
+
+// this class is the high-level front-end of LLDB Data Visualization code in
+// FormatManager.h/cpp is the low-level implementation of this feature clients
+// should refer to this class as the entry-point into the data formatters
+// unless they have a good reason to bypass this and go to the backend
+class DataVisualization {
+public:
+  // use this call to force the FM to consider itself updated even when there
+  // is no apparent reason for that
+  static void ForceUpdate();
+
+  static uint32_t GetCurrentRevision();
+
+  static bool ShouldPrintAsOneLiner(ValueObject &valobj);
+
+  static lldb::TypeFormatImplSP GetFormat(ValueObject &valobj,
+                                          lldb::DynamicValueType use_dynamic);
+
+  static lldb::TypeFormatImplSP
+  GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  static lldb::TypeSummaryImplSP
+  GetSummaryFormat(ValueObject &valobj, lldb::DynamicValueType use_dynamic);
+
+  static lldb::TypeSummaryImplSP
+  GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  static lldb::TypeFilterImplSP
+  GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  static lldb::ScriptedSyntheticChildrenSP
+  GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  static lldb::SyntheticChildrenSP
+  GetSyntheticChildren(ValueObject &valobj, lldb::DynamicValueType use_dynamic);
+
+  static lldb::TypeValidatorImplSP
+  GetValidator(ValueObject &valobj, lldb::DynamicValueType use_dynamic);
+
+  static lldb::TypeValidatorImplSP
+  GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  static bool
+  AnyMatches(ConstString type_name,
+             TypeCategoryImpl::FormatCategoryItems items =
+                 TypeCategoryImpl::ALL_ITEM_TYPES,
+             bool only_enabled = true, const char **matching_category = nullptr,
+             TypeCategoryImpl::FormatCategoryItems *matching_type = nullptr);
+
+  class NamedSummaryFormats {
+  public:
+    static bool GetSummaryFormat(ConstString type,
+                                 lldb::TypeSummaryImplSP &entry);
+
+    static void Add(ConstString type,
+                    const lldb::TypeSummaryImplSP &entry);
+
+    static bool Delete(ConstString type);
+
+    static void Clear();
+
+    static void
+    ForEach(std::function<bool(ConstString, const lldb::TypeSummaryImplSP &)>
+                callback);
+
+    static uint32_t GetCount();
+  };
+
+  class Categories {
+  public:
+    static bool GetCategory(ConstString category,
+                            lldb::TypeCategoryImplSP &entry,
+                            bool allow_create = true);
+
+    static bool GetCategory(lldb::LanguageType language,
+                            lldb::TypeCategoryImplSP &entry);
+
+    static void Add(ConstString category);
+
+    static bool Delete(ConstString category);
+
+    static void Clear();
+
+    static void Clear(ConstString category);
+
+    static void Enable(ConstString category,
+                       TypeCategoryMap::Position = TypeCategoryMap::Default);
+
+    static void Enable(lldb::LanguageType lang_type);
+
+    static void Disable(ConstString category);
+
+    static void Disable(lldb::LanguageType lang_type);
+
+    static void Enable(const lldb::TypeCategoryImplSP &category,
+                       TypeCategoryMap::Position = TypeCategoryMap::Default);
+
+    static void Disable(const lldb::TypeCategoryImplSP &category);
+
+    static void EnableStar();
+
+    static void DisableStar();
+
+    static void ForEach(TypeCategoryMap::ForEachCallback callback);
+
+    static uint32_t GetCount();
+
+    static lldb::TypeCategoryImplSP GetCategoryAtIndex(size_t);
+  };
+};
+
+} // namespace lldb_private
+
+#endif // lldb_DataVisualization_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/DumpValueObjectOptions.h b/linux-x64/clang/include/lldb/DataFormatters/DumpValueObjectOptions.h
new file mode 100644
index 0000000..c374115
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/DumpValueObjectOptions.h
@@ -0,0 +1,160 @@
+//===-- DumpValueObjectOptions.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_DumpValueObjectOptions_h_
+#define lldb_DumpValueObjectOptions_h_
+
+#include <string>
+
+#include "lldb/lldb-private.h"
+#include "lldb/lldb-public.h"
+
+#include <functional>
+#include <string>
+
+namespace lldb_private {
+
+class DumpValueObjectOptions {
+public:
+  struct PointerDepth {
+    enum class Mode { Always, Default, Never } m_mode;
+    uint32_t m_count;
+
+    PointerDepth operator--() const {
+      if (m_count > 0)
+        return PointerDepth{m_mode, m_count - 1};
+      return PointerDepth{m_mode, m_count};
+    }
+
+    bool CanAllowExpansion() const;
+  };
+
+  struct PointerAsArraySettings {
+    size_t m_element_count;
+    size_t m_base_element;
+    size_t m_stride;
+
+    PointerAsArraySettings()
+        : m_element_count(0), m_base_element(0), m_stride() {}
+
+    PointerAsArraySettings(size_t elem_count, size_t base_elem = 0,
+                           size_t stride = 1)
+        : m_element_count(elem_count), m_base_element(base_elem),
+          m_stride(stride) {}
+
+    operator bool() { return m_element_count > 0; }
+  };
+
+  typedef std::function<bool(ConstString, ConstString,
+                             const DumpValueObjectOptions &, Stream &)>
+      DeclPrintingHelper;
+
+  static const DumpValueObjectOptions DefaultOptions() {
+    static DumpValueObjectOptions g_default_options;
+
+    return g_default_options;
+  }
+
+  DumpValueObjectOptions();
+
+  DumpValueObjectOptions(const DumpValueObjectOptions &rhs) = default;
+
+  DumpValueObjectOptions(ValueObject &valobj);
+
+  DumpValueObjectOptions &
+  SetMaximumPointerDepth(PointerDepth depth = {PointerDepth::Mode::Never, 0});
+
+  DumpValueObjectOptions &SetMaximumDepth(uint32_t depth = 0);
+
+  DumpValueObjectOptions &SetDeclPrintingHelper(DeclPrintingHelper helper);
+
+  DumpValueObjectOptions &SetShowTypes(bool show = false);
+
+  DumpValueObjectOptions &SetShowLocation(bool show = false);
+
+  DumpValueObjectOptions &SetUseObjectiveC(bool use = false);
+
+  DumpValueObjectOptions &SetShowSummary(bool show = true);
+
+  DumpValueObjectOptions &
+  SetUseDynamicType(lldb::DynamicValueType dyn = lldb::eNoDynamicValues);
+
+  DumpValueObjectOptions &SetUseSyntheticValue(bool use_synthetic = true);
+
+  DumpValueObjectOptions &SetScopeChecked(bool check = true);
+
+  DumpValueObjectOptions &SetFlatOutput(bool flat = false);
+
+  DumpValueObjectOptions &SetOmitSummaryDepth(uint32_t depth = 0);
+
+  DumpValueObjectOptions &SetIgnoreCap(bool ignore = false);
+
+  DumpValueObjectOptions &SetRawDisplay();
+
+  DumpValueObjectOptions &SetFormat(lldb::Format format = lldb::eFormatDefault);
+
+  DumpValueObjectOptions &
+  SetSummary(lldb::TypeSummaryImplSP summary = lldb::TypeSummaryImplSP());
+
+  DumpValueObjectOptions &SetRootValueObjectName(const char *name = nullptr);
+
+  DumpValueObjectOptions &SetHideRootType(bool hide_root_type = false);
+
+  DumpValueObjectOptions &SetHideName(bool hide_name = false);
+
+  DumpValueObjectOptions &SetHideValue(bool hide_value = false);
+
+  DumpValueObjectOptions &SetHidePointerValue(bool hide = false);
+
+  DumpValueObjectOptions &SetVariableFormatDisplayLanguage(
+      lldb::LanguageType lang = lldb::eLanguageTypeUnknown);
+
+  DumpValueObjectOptions &SetRunValidator(bool run = true);
+
+  DumpValueObjectOptions &SetUseTypeDisplayName(bool dis = false);
+
+  DumpValueObjectOptions &SetAllowOnelinerMode(bool oneliner = false);
+
+  DumpValueObjectOptions &SetRevealEmptyAggregates(bool reveal = true);
+
+  DumpValueObjectOptions &SetElementCount(uint32_t element_count = 0);
+
+  DumpValueObjectOptions &
+  SetPointerAsArray(const PointerAsArraySettings &ptr_array);
+
+public:
+  uint32_t m_max_depth = UINT32_MAX;
+  lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues;
+  uint32_t m_omit_summary_depth = 0;
+  lldb::Format m_format = lldb::eFormatDefault;
+  lldb::TypeSummaryImplSP m_summary_sp;
+  std::string m_root_valobj_name;
+  lldb::LanguageType m_varformat_language = lldb::eLanguageTypeUnknown;
+  PointerDepth m_max_ptr_depth;
+  DeclPrintingHelper m_decl_printing_helper;
+  PointerAsArraySettings m_pointer_as_array;
+  bool m_use_synthetic : 1;
+  bool m_scope_already_checked : 1;
+  bool m_flat_output : 1;
+  bool m_ignore_cap : 1;
+  bool m_show_types : 1;
+  bool m_show_location : 1;
+  bool m_use_objc : 1;
+  bool m_hide_root_type : 1;
+  bool m_hide_name : 1;
+  bool m_hide_value : 1;
+  bool m_run_validator : 1;
+  bool m_use_type_display_name : 1;
+  bool m_allow_oneliner_mode : 1;
+  bool m_hide_pointer_value : 1;
+  bool m_reveal_empty_aggregates : 1;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_DumpValueObjectOptions_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/FormatCache.h b/linux-x64/clang/include/lldb/DataFormatters/FormatCache.h
new file mode 100644
index 0000000..7a6774b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/FormatCache.h
@@ -0,0 +1,107 @@
+//===-- FormatCache.h ---------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_FormatCache_h_
+#define lldb_FormatCache_h_
+
+#include <map>
+#include <mutex>
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+class FormatCache {
+private:
+  struct Entry {
+  private:
+    bool m_format_cached : 1;
+    bool m_summary_cached : 1;
+    bool m_synthetic_cached : 1;
+    bool m_validator_cached : 1;
+
+    lldb::TypeFormatImplSP m_format_sp;
+    lldb::TypeSummaryImplSP m_summary_sp;
+    lldb::SyntheticChildrenSP m_synthetic_sp;
+    lldb::TypeValidatorImplSP m_validator_sp;
+
+  public:
+    Entry();
+    Entry(lldb::TypeFormatImplSP);
+    Entry(lldb::TypeSummaryImplSP);
+    Entry(lldb::SyntheticChildrenSP);
+    Entry(lldb::TypeValidatorImplSP);
+    Entry(lldb::TypeFormatImplSP, lldb::TypeSummaryImplSP,
+          lldb::SyntheticChildrenSP, lldb::TypeValidatorImplSP);
+
+    bool IsFormatCached();
+
+    bool IsSummaryCached();
+
+    bool IsSyntheticCached();
+
+    bool IsValidatorCached();
+
+    lldb::TypeFormatImplSP GetFormat();
+
+    lldb::TypeSummaryImplSP GetSummary();
+
+    lldb::SyntheticChildrenSP GetSynthetic();
+
+    lldb::TypeValidatorImplSP GetValidator();
+
+    void SetFormat(lldb::TypeFormatImplSP);
+
+    void SetSummary(lldb::TypeSummaryImplSP);
+
+    void SetSynthetic(lldb::SyntheticChildrenSP);
+
+    void SetValidator(lldb::TypeValidatorImplSP);
+  };
+  typedef std::map<ConstString, Entry> CacheMap;
+  CacheMap m_map;
+  std::recursive_mutex m_mutex;
+
+  uint64_t m_cache_hits;
+  uint64_t m_cache_misses;
+
+  Entry &GetEntry(ConstString type);
+
+public:
+  FormatCache();
+
+  bool GetFormat(ConstString type, lldb::TypeFormatImplSP &format_sp);
+
+  bool GetSummary(ConstString type, lldb::TypeSummaryImplSP &summary_sp);
+
+  bool GetSynthetic(ConstString type,
+                    lldb::SyntheticChildrenSP &synthetic_sp);
+
+  bool GetValidator(ConstString type,
+                    lldb::TypeValidatorImplSP &summary_sp);
+
+  void SetFormat(ConstString type, lldb::TypeFormatImplSP &format_sp);
+
+  void SetSummary(ConstString type, lldb::TypeSummaryImplSP &summary_sp);
+
+  void SetSynthetic(ConstString type,
+                    lldb::SyntheticChildrenSP &synthetic_sp);
+
+  void SetValidator(ConstString type,
+                    lldb::TypeValidatorImplSP &synthetic_sp);
+
+  void Clear();
+
+  uint64_t GetCacheHits() { return m_cache_hits; }
+
+  uint64_t GetCacheMisses() { return m_cache_misses; }
+};
+} // namespace lldb_private
+
+#endif // lldb_FormatCache_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/FormatClasses.h b/linux-x64/clang/include/lldb/DataFormatters/FormatClasses.h
new file mode 100644
index 0000000..5144bc6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/FormatClasses.h
@@ -0,0 +1,165 @@
+//===-- FormatClasses.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_FormatClasses_h_
+#define lldb_FormatClasses_h_
+
+#include <functional>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "lldb/DataFormatters/TypeFormat.h"
+#include "lldb/DataFormatters/TypeSummary.h"
+#include "lldb/DataFormatters/TypeSynthetic.h"
+#include "lldb/DataFormatters/TypeValidator.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/Type.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class HardcodedFormatters {
+public:
+  template <typename FormatterType>
+  using HardcodedFormatterFinder =
+      std::function<typename FormatterType::SharedPointer(
+          lldb_private::ValueObject &, lldb::DynamicValueType,
+          FormatManager &)>;
+
+  template <typename FormatterType>
+  using HardcodedFormatterFinders =
+      std::vector<HardcodedFormatterFinder<FormatterType>>;
+
+  typedef HardcodedFormatterFinders<TypeFormatImpl> HardcodedFormatFinder;
+  typedef HardcodedFormatterFinders<TypeSummaryImpl> HardcodedSummaryFinder;
+  typedef HardcodedFormatterFinders<SyntheticChildren> HardcodedSyntheticFinder;
+  typedef HardcodedFormatterFinders<TypeValidatorImpl> HardcodedValidatorFinder;
+};
+
+class FormattersMatchCandidate {
+public:
+  FormattersMatchCandidate(ConstString name, uint32_t reason, bool strip_ptr,
+                           bool strip_ref, bool strip_tydef)
+      : m_type_name(name), m_reason(reason), m_stripped_pointer(strip_ptr),
+        m_stripped_reference(strip_ref), m_stripped_typedef(strip_tydef) {}
+
+  ~FormattersMatchCandidate() = default;
+
+  ConstString GetTypeName() const { return m_type_name; }
+
+  uint32_t GetReason() const { return m_reason; }
+
+  bool DidStripPointer() const { return m_stripped_pointer; }
+
+  bool DidStripReference() const { return m_stripped_reference; }
+
+  bool DidStripTypedef() const { return m_stripped_typedef; }
+
+  template <class Formatter>
+  bool IsMatch(const std::shared_ptr<Formatter> &formatter_sp) const {
+    if (!formatter_sp)
+      return false;
+    if (formatter_sp->Cascades() == false && DidStripTypedef())
+      return false;
+    if (formatter_sp->SkipsPointers() && DidStripPointer())
+      return false;
+    if (formatter_sp->SkipsReferences() && DidStripReference())
+      return false;
+    return true;
+  }
+
+private:
+  ConstString m_type_name;
+  uint32_t m_reason;
+  bool m_stripped_pointer;
+  bool m_stripped_reference;
+  bool m_stripped_typedef;
+};
+
+typedef std::vector<FormattersMatchCandidate> FormattersMatchVector;
+typedef std::vector<lldb::LanguageType> CandidateLanguagesVector;
+
+class FormattersMatchData {
+public:
+  FormattersMatchData(ValueObject &, lldb::DynamicValueType);
+
+  FormattersMatchVector GetMatchesVector();
+
+  ConstString GetTypeForCache();
+
+  CandidateLanguagesVector GetCandidateLanguages();
+
+  ValueObject &GetValueObject();
+
+  lldb::DynamicValueType GetDynamicValueType();
+
+private:
+  ValueObject &m_valobj;
+  lldb::DynamicValueType m_dynamic_value_type;
+  std::pair<FormattersMatchVector, bool> m_formatters_match_vector;
+  ConstString m_type_for_cache;
+  CandidateLanguagesVector m_candidate_languages;
+};
+
+class TypeNameSpecifierImpl {
+public:
+  TypeNameSpecifierImpl() : m_is_regex(false), m_type() {}
+
+  TypeNameSpecifierImpl(llvm::StringRef name, bool is_regex)
+      : m_is_regex(is_regex), m_type() {
+    m_type.m_type_name = name;
+  }
+
+  // if constructing with a given type, is_regex cannot be true since we are
+  // giving an exact type to match
+  TypeNameSpecifierImpl(lldb::TypeSP type) : m_is_regex(false), m_type() {
+    if (type) {
+      m_type.m_type_name = type->GetName().GetStringRef();
+      m_type.m_compiler_type = type->GetForwardCompilerType();
+    }
+  }
+
+  TypeNameSpecifierImpl(CompilerType type) : m_is_regex(false), m_type() {
+    if (type.IsValid()) {
+      m_type.m_type_name.assign(type.GetConstTypeName().GetCString());
+      m_type.m_compiler_type = type;
+    }
+  }
+
+  const char *GetName() {
+    if (m_type.m_type_name.size())
+      return m_type.m_type_name.c_str();
+    return nullptr;
+  }
+
+  CompilerType GetCompilerType() {
+    if (m_type.m_compiler_type.IsValid())
+      return m_type.m_compiler_type;
+    return CompilerType();
+  }
+
+  bool IsRegex() { return m_is_regex; }
+
+private:
+  bool m_is_regex;
+  // TODO: Replace this with TypeAndOrName.
+  struct TypeOrName {
+    std::string m_type_name;
+    CompilerType m_compiler_type;
+  };
+  TypeOrName m_type;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(TypeNameSpecifierImpl);
+};
+
+} // namespace lldb_private
+
+#endif // lldb_FormatClasses_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/FormatManager.h b/linux-x64/clang/include/lldb/DataFormatters/FormatManager.h
new file mode 100644
index 0000000..afaafda
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/FormatManager.h
@@ -0,0 +1,249 @@
+//===-- FormatManager.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_FormatManager_h_
+#define lldb_FormatManager_h_
+
+#include <atomic>
+#include <initializer_list>
+#include <map>
+#include <mutex>
+#include <vector>
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+#include "lldb/DataFormatters/FormatCache.h"
+#include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/FormattersContainer.h"
+#include "lldb/DataFormatters/LanguageCategory.h"
+#include "lldb/DataFormatters/TypeCategory.h"
+#include "lldb/DataFormatters/TypeCategoryMap.h"
+
+namespace lldb_private {
+
+// this file (and its. cpp) contain the low-level implementation of LLDB Data
+// Visualization class DataVisualization is the high-level front-end of this
+// feature clients should refer to that class as the entry-point into the data
+// formatters unless they have a good reason to bypass it and prefer to use
+// this file's objects directly
+
+class FormatManager : public IFormatChangeListener {
+  typedef FormatMap<ConstString, TypeSummaryImpl> NamedSummariesMap;
+  typedef TypeCategoryMap::MapType::iterator CategoryMapIterator;
+
+public:
+  typedef std::map<lldb::LanguageType, LanguageCategory::UniquePointer>
+      LanguageCategories;
+
+  FormatManager();
+
+  ~FormatManager() override = default;
+
+  NamedSummariesMap &GetNamedSummaryContainer() {
+    return m_named_summaries_map;
+  }
+
+  void
+  EnableCategory(ConstString category_name,
+                 TypeCategoryMap::Position pos = TypeCategoryMap::Default) {
+    EnableCategory(category_name, pos,
+                   std::initializer_list<lldb::LanguageType>());
+  }
+
+  void EnableCategory(ConstString category_name,
+                      TypeCategoryMap::Position pos, lldb::LanguageType lang) {
+    std::initializer_list<lldb::LanguageType> langs = {lang};
+    EnableCategory(category_name, pos, langs);
+  }
+
+  void EnableCategory(ConstString category_name,
+                      TypeCategoryMap::Position pos = TypeCategoryMap::Default,
+                      std::initializer_list<lldb::LanguageType> langs = {}) {
+    TypeCategoryMap::ValueSP category_sp;
+    if (m_categories_map.Get(category_name, category_sp) && category_sp) {
+      m_categories_map.Enable(category_sp, pos);
+      for (const lldb::LanguageType lang : langs)
+        category_sp->AddLanguage(lang);
+    }
+  }
+
+  void DisableCategory(ConstString category_name) {
+    m_categories_map.Disable(category_name);
+  }
+
+  void
+  EnableCategory(const lldb::TypeCategoryImplSP &category,
+                 TypeCategoryMap::Position pos = TypeCategoryMap::Default) {
+    m_categories_map.Enable(category, pos);
+  }
+
+  void DisableCategory(const lldb::TypeCategoryImplSP &category) {
+    m_categories_map.Disable(category);
+  }
+
+  void EnableAllCategories();
+
+  void DisableAllCategories();
+
+  bool DeleteCategory(ConstString category_name) {
+    return m_categories_map.Delete(category_name);
+  }
+
+  void ClearCategories() { return m_categories_map.Clear(); }
+
+  uint32_t GetCategoriesCount() { return m_categories_map.GetCount(); }
+
+  lldb::TypeCategoryImplSP GetCategoryAtIndex(size_t index) {
+    return m_categories_map.GetAtIndex(index);
+  }
+
+  void ForEachCategory(TypeCategoryMap::ForEachCallback callback);
+
+  lldb::TypeCategoryImplSP GetCategory(const char *category_name = nullptr,
+                                       bool can_create = true) {
+    if (!category_name)
+      return GetCategory(m_default_category_name);
+    return GetCategory(ConstString(category_name));
+  }
+
+  lldb::TypeCategoryImplSP GetCategory(ConstString category_name,
+                                       bool can_create = true);
+
+  lldb::TypeFormatImplSP
+  GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  lldb::TypeSummaryImplSP
+  GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  lldb::TypeFilterImplSP
+  GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  lldb::ScriptedSyntheticChildrenSP
+  GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  lldb::TypeValidatorImplSP
+  GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  lldb::TypeFormatImplSP GetFormat(ValueObject &valobj,
+                                   lldb::DynamicValueType use_dynamic);
+
+  lldb::TypeSummaryImplSP GetSummaryFormat(ValueObject &valobj,
+                                           lldb::DynamicValueType use_dynamic);
+
+  lldb::SyntheticChildrenSP
+  GetSyntheticChildren(ValueObject &valobj, lldb::DynamicValueType use_dynamic);
+
+  lldb::TypeValidatorImplSP GetValidator(ValueObject &valobj,
+                                         lldb::DynamicValueType use_dynamic);
+
+  bool
+  AnyMatches(ConstString type_name,
+             TypeCategoryImpl::FormatCategoryItems items =
+                 TypeCategoryImpl::ALL_ITEM_TYPES,
+             bool only_enabled = true, const char **matching_category = nullptr,
+             TypeCategoryImpl::FormatCategoryItems *matching_type = nullptr) {
+    return m_categories_map.AnyMatches(type_name, items, only_enabled,
+                                       matching_category, matching_type);
+  }
+
+  static bool GetFormatFromCString(const char *format_cstr,
+                                   bool partial_match_ok, lldb::Format &format);
+
+  static char GetFormatAsFormatChar(lldb::Format format);
+
+  static const char *GetFormatAsCString(lldb::Format format);
+
+  // if the user tries to add formatters for, say, "struct Foo" those will not
+  // match any type because of the way we strip qualifiers from typenames this
+  // method looks for the case where the user is adding a
+  // "class","struct","enum" or "union" Foo and strips the unnecessary
+  // qualifier
+  static ConstString GetValidTypeName(ConstString type);
+
+  // when DataExtractor dumps a vectorOfT, it uses a predefined format for each
+  // item this method returns it, or eFormatInvalid if vector_format is not a
+  // vectorOf
+  static lldb::Format GetSingleItemFormat(lldb::Format vector_format);
+
+  // this returns true if the ValueObjectPrinter is *highly encouraged* to
+  // actually represent this ValueObject in one-liner format If this object has
+  // a summary formatter, however, we should not try and do one-lining, just
+  // let the summary do the right thing
+  bool ShouldPrintAsOneLiner(ValueObject &valobj);
+
+  void Changed() override;
+
+  uint32_t GetCurrentRevision() override { return m_last_revision; }
+
+  static FormattersMatchVector
+  GetPossibleMatches(ValueObject &valobj, lldb::DynamicValueType use_dynamic) {
+    FormattersMatchVector matches;
+    GetPossibleMatches(valobj, valobj.GetCompilerType(),
+                       lldb_private::eFormatterChoiceCriterionDirectChoice,
+                       use_dynamic, matches, false, false, false, true);
+    return matches;
+  }
+
+  static ConstString GetTypeForCache(ValueObject &, lldb::DynamicValueType);
+
+  LanguageCategory *GetCategoryForLanguage(lldb::LanguageType lang_type);
+
+  static std::vector<lldb::LanguageType>
+  GetCandidateLanguages(lldb::LanguageType lang_type);
+
+private:
+  static std::vector<lldb::LanguageType>
+  GetCandidateLanguages(ValueObject &valobj);
+
+  static void GetPossibleMatches(ValueObject &valobj,
+                                 CompilerType compiler_type, uint32_t reason,
+                                 lldb::DynamicValueType use_dynamic,
+                                 FormattersMatchVector &entries,
+                                 bool did_strip_ptr, bool did_strip_ref,
+                                 bool did_strip_typedef,
+                                 bool root_level = false);
+
+  std::atomic<uint32_t> m_last_revision;
+  FormatCache m_format_cache;
+  std::recursive_mutex m_language_categories_mutex;
+  LanguageCategories m_language_categories_map;
+  NamedSummariesMap m_named_summaries_map;
+  TypeCategoryMap m_categories_map;
+
+  ConstString m_default_category_name;
+  ConstString m_system_category_name;
+  ConstString m_vectortypes_category_name;
+
+  lldb::TypeFormatImplSP GetHardcodedFormat(FormattersMatchData &);
+
+  lldb::TypeSummaryImplSP GetHardcodedSummaryFormat(FormattersMatchData &);
+
+  lldb::SyntheticChildrenSP
+  GetHardcodedSyntheticChildren(FormattersMatchData &);
+
+  lldb::TypeValidatorImplSP GetHardcodedValidator(FormattersMatchData &);
+
+  TypeCategoryMap &GetCategories() { return m_categories_map; }
+
+  // These functions are meant to initialize formatters that are very low-
+  // level/global in nature and do not naturally belong in any language. The
+  // intent is that most formatters go in language-specific categories.
+  // Eventually, the runtimes should also be allowed to vend their own
+  // formatters, and then one could put formatters that depend on specific
+  // library load events in the language runtimes, on an as-needed basis
+  void LoadSystemFormatters();
+
+  void LoadVectorFormatters();
+
+  friend class FormattersMatchData;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_FormatManager_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/FormattersContainer.h b/linux-x64/clang/include/lldb/DataFormatters/FormattersContainer.h
new file mode 100644
index 0000000..9d7d373
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/FormattersContainer.h
@@ -0,0 +1,343 @@
+//===-- FormattersContainer.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_FormattersContainer_h_
+#define lldb_FormattersContainer_h_
+
+#include <functional>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <string>
+
+#include "lldb/lldb-public.h"
+
+#include "lldb/Core/ValueObject.h"
+#include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/TypeFormat.h"
+#include "lldb/DataFormatters/TypeSummary.h"
+#include "lldb/DataFormatters/TypeSynthetic.h"
+#include "lldb/DataFormatters/TypeValidator.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/RegularExpression.h"
+#include "lldb/Utility/StringLexer.h"
+
+namespace lldb_private {
+
+class IFormatChangeListener {
+public:
+  virtual ~IFormatChangeListener() = default;
+
+  virtual void Changed() = 0;
+
+  virtual uint32_t GetCurrentRevision() = 0;
+};
+
+// if the user tries to add formatters for, say, "struct Foo" those will not
+// match any type because of the way we strip qualifiers from typenames this
+// method looks for the case where the user is adding a "class","struct","enum"
+// or "union" Foo and strips the unnecessary qualifier
+static inline ConstString GetValidTypeName_Impl(ConstString type) {
+  if (type.IsEmpty())
+    return type;
+
+  std::string type_cstr(type.AsCString());
+  lldb_utility::StringLexer type_lexer(type_cstr);
+
+  type_lexer.AdvanceIf("class ");
+  type_lexer.AdvanceIf("enum ");
+  type_lexer.AdvanceIf("struct ");
+  type_lexer.AdvanceIf("union ");
+
+  while (type_lexer.NextIf({' ', '\t', '\v', '\f'}).first)
+    ;
+
+  return ConstString(type_lexer.GetUnlexed());
+}
+
+template <typename KeyType, typename ValueType> class FormattersContainer;
+
+template <typename KeyType, typename ValueType> class FormatMap {
+public:
+  typedef typename ValueType::SharedPointer ValueSP;
+  typedef std::map<KeyType, ValueSP> MapType;
+  typedef typename MapType::iterator MapIterator;
+  typedef std::function<bool(KeyType, const ValueSP &)> ForEachCallback;
+
+  FormatMap(IFormatChangeListener *lst)
+      : m_map(), m_map_mutex(), listener(lst) {}
+
+  void Add(KeyType name, const ValueSP &entry) {
+    if (listener)
+      entry->GetRevision() = listener->GetCurrentRevision();
+    else
+      entry->GetRevision() = 0;
+
+    std::lock_guard<std::recursive_mutex> guard(m_map_mutex);
+    m_map[name] = entry;
+    if (listener)
+      listener->Changed();
+  }
+
+  bool Delete(KeyType name) {
+    std::lock_guard<std::recursive_mutex> guard(m_map_mutex);
+    MapIterator iter = m_map.find(name);
+    if (iter == m_map.end())
+      return false;
+    m_map.erase(name);
+    if (listener)
+      listener->Changed();
+    return true;
+  }
+
+  void Clear() {
+    std::lock_guard<std::recursive_mutex> guard(m_map_mutex);
+    m_map.clear();
+    if (listener)
+      listener->Changed();
+  }
+
+  bool Get(KeyType name, ValueSP &entry) {
+    std::lock_guard<std::recursive_mutex> guard(m_map_mutex);
+    MapIterator iter = m_map.find(name);
+    if (iter == m_map.end())
+      return false;
+    entry = iter->second;
+    return true;
+  }
+
+  void ForEach(ForEachCallback callback) {
+    if (callback) {
+      std::lock_guard<std::recursive_mutex> guard(m_map_mutex);
+      MapIterator pos, end = m_map.end();
+      for (pos = m_map.begin(); pos != end; pos++) {
+        KeyType type = pos->first;
+        if (!callback(type, pos->second))
+          break;
+      }
+    }
+  }
+
+  uint32_t GetCount() { return m_map.size(); }
+
+  ValueSP GetValueAtIndex(size_t index) {
+    std::lock_guard<std::recursive_mutex> guard(m_map_mutex);
+    MapIterator iter = m_map.begin();
+    MapIterator end = m_map.end();
+    while (index > 0) {
+      iter++;
+      index--;
+      if (end == iter)
+        return ValueSP();
+    }
+    return iter->second;
+  }
+
+  KeyType GetKeyAtIndex(size_t index) {
+    std::lock_guard<std::recursive_mutex> guard(m_map_mutex);
+    MapIterator iter = m_map.begin();
+    MapIterator end = m_map.end();
+    while (index > 0) {
+      iter++;
+      index--;
+      if (end == iter)
+        return KeyType();
+    }
+    return iter->first;
+  }
+
+protected:
+  MapType m_map;
+  std::recursive_mutex m_map_mutex;
+  IFormatChangeListener *listener;
+
+  MapType &map() { return m_map; }
+
+  std::recursive_mutex &mutex() { return m_map_mutex; }
+
+  friend class FormattersContainer<KeyType, ValueType>;
+  friend class FormatManager;
+};
+
+template <typename KeyType, typename ValueType> class FormattersContainer {
+protected:
+  typedef FormatMap<KeyType, ValueType> BackEndType;
+
+public:
+  typedef typename BackEndType::MapType MapType;
+  typedef typename MapType::iterator MapIterator;
+  typedef typename MapType::key_type MapKeyType;
+  typedef typename MapType::mapped_type MapValueType;
+  typedef typename BackEndType::ForEachCallback ForEachCallback;
+  typedef typename std::shared_ptr<FormattersContainer<KeyType, ValueType>>
+      SharedPointer;
+
+  friend class TypeCategoryImpl;
+
+  FormattersContainer(std::string name, IFormatChangeListener *lst)
+      : m_format_map(lst), m_name(name) {}
+
+  void Add(const MapKeyType &type, const MapValueType &entry) {
+    Add_Impl(type, entry, static_cast<KeyType *>(nullptr));
+  }
+
+  bool Delete(ConstString type) {
+    return Delete_Impl(type, static_cast<KeyType *>(nullptr));
+  }
+
+  bool Get(ValueObject &valobj, MapValueType &entry,
+           lldb::DynamicValueType use_dynamic, uint32_t *why = nullptr) {
+    uint32_t value = lldb_private::eFormatterChoiceCriterionDirectChoice;
+    CompilerType ast_type(valobj.GetCompilerType());
+    bool ret = Get(valobj, ast_type, entry, use_dynamic, value);
+    if (ret)
+      entry = MapValueType(entry);
+    else
+      entry = MapValueType();
+    if (why)
+      *why = value;
+    return ret;
+  }
+
+  bool Get(ConstString type, MapValueType &entry) {
+    return Get_Impl(type, entry, static_cast<KeyType *>(nullptr));
+  }
+
+  bool GetExact(ConstString type, MapValueType &entry) {
+    return GetExact_Impl(type, entry, static_cast<KeyType *>(nullptr));
+  }
+
+  MapValueType GetAtIndex(size_t index) {
+    return m_format_map.GetValueAtIndex(index);
+  }
+
+  lldb::TypeNameSpecifierImplSP GetTypeNameSpecifierAtIndex(size_t index) {
+    return GetTypeNameSpecifierAtIndex_Impl(index,
+                                            static_cast<KeyType *>(nullptr));
+  }
+
+  void Clear() { m_format_map.Clear(); }
+
+  void ForEach(ForEachCallback callback) { m_format_map.ForEach(callback); }
+
+  uint32_t GetCount() { return m_format_map.GetCount(); }
+
+protected:
+  BackEndType m_format_map;
+  std::string m_name;
+
+  DISALLOW_COPY_AND_ASSIGN(FormattersContainer);
+
+  void Add_Impl(const MapKeyType &type, const MapValueType &entry,
+                lldb::RegularExpressionSP *dummy) {
+    m_format_map.Add(type, entry);
+  }
+
+  void Add_Impl(ConstString type, const MapValueType &entry,
+                ConstString *dummy) {
+    m_format_map.Add(GetValidTypeName_Impl(type), entry);
+  }
+
+  bool Delete_Impl(ConstString type, ConstString *dummy) {
+    return m_format_map.Delete(type);
+  }
+
+  bool Delete_Impl(ConstString type, lldb::RegularExpressionSP *dummy) {
+    std::lock_guard<std::recursive_mutex> guard(m_format_map.mutex());
+    MapIterator pos, end = m_format_map.map().end();
+    for (pos = m_format_map.map().begin(); pos != end; pos++) {
+      lldb::RegularExpressionSP regex = pos->first;
+      if (type.GetStringRef() == regex->GetText()) {
+        m_format_map.map().erase(pos);
+        if (m_format_map.listener)
+          m_format_map.listener->Changed();
+        return true;
+      }
+    }
+    return false;
+  }
+
+  bool Get_Impl(ConstString type, MapValueType &entry, ConstString *dummy) {
+    return m_format_map.Get(type, entry);
+  }
+
+  bool GetExact_Impl(ConstString type, MapValueType &entry,
+                     ConstString *dummy) {
+    return Get_Impl(type, entry, static_cast<KeyType *>(nullptr));
+  }
+
+  lldb::TypeNameSpecifierImplSP
+  GetTypeNameSpecifierAtIndex_Impl(size_t index, ConstString *dummy) {
+    ConstString key = m_format_map.GetKeyAtIndex(index);
+    if (key)
+      return lldb::TypeNameSpecifierImplSP(
+          new TypeNameSpecifierImpl(key.AsCString(), false));
+    else
+      return lldb::TypeNameSpecifierImplSP();
+  }
+
+  lldb::TypeNameSpecifierImplSP
+  GetTypeNameSpecifierAtIndex_Impl(size_t index,
+                                   lldb::RegularExpressionSP *dummy) {
+    lldb::RegularExpressionSP regex = m_format_map.GetKeyAtIndex(index);
+    if (regex.get() == nullptr)
+      return lldb::TypeNameSpecifierImplSP();
+    return lldb::TypeNameSpecifierImplSP(
+        new TypeNameSpecifierImpl(regex->GetText().str().c_str(), true));
+  }
+
+  bool Get_Impl(ConstString key, MapValueType &value,
+                lldb::RegularExpressionSP *dummy) {
+    llvm::StringRef key_str = key.GetStringRef();
+    std::lock_guard<std::recursive_mutex> guard(m_format_map.mutex());
+    MapIterator pos, end = m_format_map.map().end();
+    for (pos = m_format_map.map().begin(); pos != end; pos++) {
+      lldb::RegularExpressionSP regex = pos->first;
+      if (regex->Execute(key_str)) {
+        value = pos->second;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  bool GetExact_Impl(ConstString key, MapValueType &value,
+                     lldb::RegularExpressionSP *dummy) {
+    std::lock_guard<std::recursive_mutex> guard(m_format_map.mutex());
+    MapIterator pos, end = m_format_map.map().end();
+    for (pos = m_format_map.map().begin(); pos != end; pos++) {
+      lldb::RegularExpressionSP regex = pos->first;
+      if (regex->GetText() == key.GetStringRef()) {
+        value = pos->second;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  bool Get(const FormattersMatchVector &candidates, MapValueType &entry,
+           uint32_t *reason) {
+    for (const FormattersMatchCandidate &candidate : candidates) {
+      if (Get(candidate.GetTypeName(), entry)) {
+        if (candidate.IsMatch(entry) == false) {
+          entry.reset();
+          continue;
+        } else {
+          if (reason)
+            *reason = candidate.GetReason();
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+};
+
+} // namespace lldb_private
+
+#endif // lldb_FormattersContainer_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/FormattersHelpers.h b/linux-x64/clang/include/lldb/DataFormatters/FormattersHelpers.h
new file mode 100644
index 0000000..79bd376
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/FormattersHelpers.h
@@ -0,0 +1,187 @@
+//===-- FormattersHelpers.h --------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_FormattersHelpers_h_
+#define lldb_FormattersHelpers_h_
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+
+#include "lldb/DataFormatters/TypeCategory.h"
+#include "lldb/DataFormatters/TypeFormat.h"
+#include "lldb/DataFormatters/TypeSummary.h"
+#include "lldb/DataFormatters/TypeSynthetic.h"
+
+namespace lldb_private {
+namespace formatters {
+void AddFormat(TypeCategoryImpl::SharedPointer category_sp, lldb::Format format,
+               ConstString type_name, TypeFormatImpl::Flags flags,
+               bool regex = false);
+
+void AddSummary(TypeCategoryImpl::SharedPointer category_sp,
+                lldb::TypeSummaryImplSP summary_sp, ConstString type_name,
+                bool regex = false);
+
+void AddStringSummary(TypeCategoryImpl::SharedPointer category_sp,
+                      const char *string, ConstString type_name,
+                      TypeSummaryImpl::Flags flags, bool regex = false);
+
+void AddOneLineSummary(TypeCategoryImpl::SharedPointer category_sp,
+                       ConstString type_name, TypeSummaryImpl::Flags flags,
+                       bool regex = false);
+
+void AddCXXSummary(TypeCategoryImpl::SharedPointer category_sp,
+                   CXXFunctionSummaryFormat::Callback funct,
+                   const char *description, ConstString type_name,
+                   TypeSummaryImpl::Flags flags, bool regex = false);
+
+void AddCXXSynthetic(TypeCategoryImpl::SharedPointer category_sp,
+                     CXXSyntheticChildren::CreateFrontEndCallback generator,
+                     const char *description, ConstString type_name,
+                     ScriptedSyntheticChildren::Flags flags,
+                     bool regex = false);
+
+void AddFilter(TypeCategoryImpl::SharedPointer category_sp,
+               std::vector<std::string> children, const char *description,
+               ConstString type_name, ScriptedSyntheticChildren::Flags flags,
+               bool regex = false);
+
+size_t ExtractIndexFromString(const char *item_name);
+
+lldb::addr_t GetArrayAddressOrPointerValue(ValueObject &valobj);
+
+time_t GetOSXEpoch();
+
+struct InferiorSizedWord {
+
+  InferiorSizedWord(const InferiorSizedWord &word) : ptr_size(word.ptr_size) {
+    if (ptr_size == 4)
+      thirty_two = word.thirty_two;
+    else
+      sixty_four = word.sixty_four;
+  }
+
+  InferiorSizedWord operator=(const InferiorSizedWord &word) {
+    ptr_size = word.ptr_size;
+    if (ptr_size == 4)
+      thirty_two = word.thirty_two;
+    else
+      sixty_four = word.sixty_four;
+    return *this;
+  }
+
+  InferiorSizedWord(uint64_t val, Process &process)
+      : ptr_size(process.GetAddressByteSize()) {
+    if (ptr_size == 4)
+      thirty_two = (uint32_t)val;
+    else if (ptr_size == 8)
+      sixty_four = val;
+    else
+      assert(false && "new pointer size is unknown");
+  }
+
+  bool IsNegative() const {
+    if (ptr_size == 4)
+      return ((int32_t)thirty_two) < 0;
+    else
+      return ((int64_t)sixty_four) < 0;
+  }
+
+  bool IsZero() const {
+    if (ptr_size == 4)
+      return thirty_two == 0;
+    else
+      return sixty_four == 0;
+  }
+
+  static InferiorSizedWord GetMaximum(Process &process) {
+    if (process.GetAddressByteSize() == 4)
+      return InferiorSizedWord(UINT32_MAX, 4);
+    else
+      return InferiorSizedWord(UINT64_MAX, 8);
+  }
+
+  InferiorSizedWord operator>>(int rhs) const {
+    if (ptr_size == 4)
+      return InferiorSizedWord(thirty_two >> rhs, 4);
+    return InferiorSizedWord(sixty_four >> rhs, 8);
+  }
+
+  InferiorSizedWord operator<<(int rhs) const {
+    if (ptr_size == 4)
+      return InferiorSizedWord(thirty_two << rhs, 4);
+    return InferiorSizedWord(sixty_four << rhs, 8);
+  }
+
+  InferiorSizedWord operator&(const InferiorSizedWord &word) const {
+    if (ptr_size != word.ptr_size)
+      return InferiorSizedWord(0, ptr_size);
+    if (ptr_size == 4)
+      return InferiorSizedWord(thirty_two & word.thirty_two, 4);
+    return InferiorSizedWord(sixty_four & word.sixty_four, 8);
+  }
+
+  InferiorSizedWord operator&(int x) const {
+    if (ptr_size == 4)
+      return InferiorSizedWord(thirty_two & x, 4);
+    return InferiorSizedWord(sixty_four & x, 8);
+  }
+
+  size_t GetBitSize() const { return ptr_size << 3; }
+
+  size_t GetByteSize() const { return ptr_size; }
+
+  uint64_t GetValue() const {
+    if (ptr_size == 4)
+      return (uint64_t)thirty_two;
+    return sixty_four;
+  }
+
+  InferiorSizedWord SignExtend() const {
+    if (ptr_size == 4)
+      return InferiorSizedWord((int32_t)thirty_two, 4);
+    return InferiorSizedWord((int64_t)sixty_four, 8);
+  }
+
+  uint8_t *CopyToBuffer(uint8_t *buffer) const {
+    if (ptr_size == 4) {
+      memcpy(buffer, &thirty_two, 4);
+      return buffer + 4;
+    } else {
+      memcpy(buffer, &sixty_four, 8);
+      return buffer + 8;
+    }
+  }
+
+  DataExtractor
+  GetAsData(lldb::ByteOrder byte_order = lldb::eByteOrderInvalid) const {
+    if (ptr_size == 4)
+      return DataExtractor(&thirty_two, 4, byte_order, 4);
+    else
+      return DataExtractor(&sixty_four, 8, byte_order, 8);
+  }
+
+private:
+  InferiorSizedWord(uint64_t val, size_t psz) : ptr_size(psz) {
+    if (ptr_size == 4)
+      thirty_two = (uint32_t)val;
+    else
+      sixty_four = val;
+  }
+
+  size_t ptr_size;
+  union {
+    uint32_t thirty_two;
+    uint64_t sixty_four;
+  };
+};
+} // namespace formatters
+} // namespace lldb_private
+
+#endif // lldb_FormattersHelpers_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/LanguageCategory.h b/linux-x64/clang/include/lldb/DataFormatters/LanguageCategory.h
new file mode 100644
index 0000000..f109d46
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/LanguageCategory.h
@@ -0,0 +1,75 @@
+//===-- LanguageCategory.h----------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_LanguageCategory_h_
+#define lldb_LanguageCategory_h_
+
+
+#include "lldb/DataFormatters/FormatCache.h"
+#include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/lldb-public.h"
+
+#include <memory>
+
+namespace lldb_private {
+
+class LanguageCategory {
+public:
+  typedef std::unique_ptr<LanguageCategory> UniquePointer;
+
+  LanguageCategory(lldb::LanguageType lang_type);
+
+  bool Get(FormattersMatchData &match_data, lldb::TypeFormatImplSP &format_sp);
+
+  bool Get(FormattersMatchData &match_data, lldb::TypeSummaryImplSP &format_sp);
+
+  bool Get(FormattersMatchData &match_data,
+           lldb::SyntheticChildrenSP &format_sp);
+
+  bool Get(FormattersMatchData &match_data,
+           lldb::TypeValidatorImplSP &format_sp);
+
+  bool GetHardcoded(FormatManager &fmt_mgr, FormattersMatchData &match_data,
+                    lldb::TypeFormatImplSP &format_sp);
+
+  bool GetHardcoded(FormatManager &fmt_mgr, FormattersMatchData &match_data,
+                    lldb::TypeSummaryImplSP &format_sp);
+
+  bool GetHardcoded(FormatManager &fmt_mgr, FormattersMatchData &match_data,
+                    lldb::SyntheticChildrenSP &format_sp);
+
+  bool GetHardcoded(FormatManager &fmt_mgr, FormattersMatchData &match_data,
+                    lldb::TypeValidatorImplSP &format_sp);
+
+  lldb::TypeCategoryImplSP GetCategory() const;
+
+  FormatCache &GetFormatCache();
+
+  void Enable();
+
+  void Disable();
+
+  bool IsEnabled();
+
+private:
+  lldb::TypeCategoryImplSP m_category_sp;
+
+  HardcodedFormatters::HardcodedFormatFinder m_hardcoded_formats;
+  HardcodedFormatters::HardcodedSummaryFinder m_hardcoded_summaries;
+  HardcodedFormatters::HardcodedSyntheticFinder m_hardcoded_synthetics;
+  HardcodedFormatters::HardcodedValidatorFinder m_hardcoded_validators;
+
+  lldb_private::FormatCache m_format_cache;
+
+  bool m_enabled;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_LanguageCategory_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/StringPrinter.h b/linux-x64/clang/include/lldb/DataFormatters/StringPrinter.h
new file mode 100644
index 0000000..41d5edd
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/StringPrinter.h
@@ -0,0 +1,342 @@
+//===-- StringPrinter.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StringPrinter_h_
+#define liblldb_StringPrinter_h_
+
+#include <functional>
+#include <string>
+
+#include "lldb/lldb-forward.h"
+
+#include "lldb/Utility/DataExtractor.h"
+
+namespace lldb_private {
+namespace formatters {
+class StringPrinter {
+public:
+  enum class StringElementType { ASCII, UTF8, UTF16, UTF32 };
+
+  enum class GetPrintableElementType { ASCII, UTF8 };
+
+  class ReadStringAndDumpToStreamOptions {
+  public:
+    ReadStringAndDumpToStreamOptions()
+        : m_location(0), m_process_sp(), m_stream(nullptr), m_prefix_token(),
+          m_suffix_token(), m_quote('"'), m_source_size(0),
+          m_needs_zero_termination(true), m_escape_non_printables(true),
+          m_ignore_max_length(false), m_zero_is_terminator(true),
+          m_language_type(lldb::eLanguageTypeUnknown) {}
+
+    ReadStringAndDumpToStreamOptions(ValueObject &valobj);
+
+    ReadStringAndDumpToStreamOptions &SetLocation(uint64_t l) {
+      m_location = l;
+      return *this;
+    }
+
+    uint64_t GetLocation() const { return m_location; }
+
+    ReadStringAndDumpToStreamOptions &SetProcessSP(lldb::ProcessSP p) {
+      m_process_sp = p;
+      return *this;
+    }
+
+    lldb::ProcessSP GetProcessSP() const { return m_process_sp; }
+
+    ReadStringAndDumpToStreamOptions &SetStream(Stream *s) {
+      m_stream = s;
+      return *this;
+    }
+
+    Stream *GetStream() const { return m_stream; }
+
+    ReadStringAndDumpToStreamOptions &SetPrefixToken(const std::string &p) {
+      m_prefix_token = p;
+      return *this;
+    }
+
+    ReadStringAndDumpToStreamOptions &SetPrefixToken(std::nullptr_t) {
+      m_prefix_token.clear();
+      return *this;
+    }
+
+    const char *GetPrefixToken() const { return m_prefix_token.c_str(); }
+
+    ReadStringAndDumpToStreamOptions &SetSuffixToken(const std::string &p) {
+      m_suffix_token = p;
+      return *this;
+    }
+
+    ReadStringAndDumpToStreamOptions &SetSuffixToken(std::nullptr_t) {
+      m_suffix_token.clear();
+      return *this;
+    }
+
+    const char *GetSuffixToken() const { return m_suffix_token.c_str(); }
+
+    ReadStringAndDumpToStreamOptions &SetQuote(char q) {
+      m_quote = q;
+      return *this;
+    }
+
+    char GetQuote() const { return m_quote; }
+
+    ReadStringAndDumpToStreamOptions &SetSourceSize(uint32_t s) {
+      m_source_size = s;
+      return *this;
+    }
+
+    uint32_t GetSourceSize() const { return m_source_size; }
+
+    ReadStringAndDumpToStreamOptions &SetNeedsZeroTermination(bool z) {
+      m_needs_zero_termination = z;
+      return *this;
+    }
+
+    bool GetNeedsZeroTermination() const { return m_needs_zero_termination; }
+
+    ReadStringAndDumpToStreamOptions &SetBinaryZeroIsTerminator(bool e) {
+      m_zero_is_terminator = e;
+      return *this;
+    }
+
+    bool GetBinaryZeroIsTerminator() const { return m_zero_is_terminator; }
+
+    ReadStringAndDumpToStreamOptions &SetEscapeNonPrintables(bool e) {
+      m_escape_non_printables = e;
+      return *this;
+    }
+
+    bool GetEscapeNonPrintables() const { return m_escape_non_printables; }
+
+    ReadStringAndDumpToStreamOptions &SetIgnoreMaxLength(bool e) {
+      m_ignore_max_length = e;
+      return *this;
+    }
+
+    bool GetIgnoreMaxLength() const { return m_ignore_max_length; }
+
+    ReadStringAndDumpToStreamOptions &SetLanguage(lldb::LanguageType l) {
+      m_language_type = l;
+      return *this;
+    }
+
+    lldb::LanguageType GetLanguage() const
+
+    {
+      return m_language_type;
+    }
+
+  private:
+    uint64_t m_location;
+    lldb::ProcessSP m_process_sp;
+    Stream *m_stream;
+    std::string m_prefix_token;
+    std::string m_suffix_token;
+    char m_quote;
+    uint32_t m_source_size;
+    bool m_needs_zero_termination;
+    bool m_escape_non_printables;
+    bool m_ignore_max_length;
+    bool m_zero_is_terminator;
+    lldb::LanguageType m_language_type;
+  };
+
+  class ReadBufferAndDumpToStreamOptions {
+  public:
+    ReadBufferAndDumpToStreamOptions()
+        : m_data(), m_stream(nullptr), m_prefix_token(), m_suffix_token(),
+          m_quote('"'), m_source_size(0), m_escape_non_printables(true),
+          m_zero_is_terminator(true), m_is_truncated(false),
+          m_language_type(lldb::eLanguageTypeUnknown) {}
+
+    ReadBufferAndDumpToStreamOptions(ValueObject &valobj);
+
+    ReadBufferAndDumpToStreamOptions(
+        const ReadStringAndDumpToStreamOptions &options);
+
+    ReadBufferAndDumpToStreamOptions &SetData(DataExtractor d) {
+      m_data = d;
+      return *this;
+    }
+
+    lldb_private::DataExtractor GetData() const { return m_data; }
+
+    ReadBufferAndDumpToStreamOptions &SetStream(Stream *s) {
+      m_stream = s;
+      return *this;
+    }
+
+    Stream *GetStream() const { return m_stream; }
+
+    ReadBufferAndDumpToStreamOptions &SetPrefixToken(const std::string &p) {
+      m_prefix_token = p;
+      return *this;
+    }
+
+    ReadBufferAndDumpToStreamOptions &SetPrefixToken(std::nullptr_t) {
+      m_prefix_token.clear();
+      return *this;
+    }
+
+    const char *GetPrefixToken() const { return m_prefix_token.c_str(); }
+
+    ReadBufferAndDumpToStreamOptions &SetSuffixToken(const std::string &p) {
+      m_suffix_token = p;
+      return *this;
+    }
+
+    ReadBufferAndDumpToStreamOptions &SetSuffixToken(std::nullptr_t) {
+      m_suffix_token.clear();
+      return *this;
+    }
+
+    const char *GetSuffixToken() const { return m_suffix_token.c_str(); }
+
+    ReadBufferAndDumpToStreamOptions &SetQuote(char q) {
+      m_quote = q;
+      return *this;
+    }
+
+    char GetQuote() const { return m_quote; }
+
+    ReadBufferAndDumpToStreamOptions &SetSourceSize(uint32_t s) {
+      m_source_size = s;
+      return *this;
+    }
+
+    uint32_t GetSourceSize() const { return m_source_size; }
+
+    ReadBufferAndDumpToStreamOptions &SetEscapeNonPrintables(bool e) {
+      m_escape_non_printables = e;
+      return *this;
+    }
+
+    bool GetEscapeNonPrintables() const { return m_escape_non_printables; }
+
+    ReadBufferAndDumpToStreamOptions &SetBinaryZeroIsTerminator(bool e) {
+      m_zero_is_terminator = e;
+      return *this;
+    }
+
+    bool GetBinaryZeroIsTerminator() const { return m_zero_is_terminator; }
+
+    ReadBufferAndDumpToStreamOptions &SetIsTruncated(bool t) {
+      m_is_truncated = t;
+      return *this;
+    }
+
+    bool GetIsTruncated() const { return m_is_truncated; }
+
+    ReadBufferAndDumpToStreamOptions &SetLanguage(lldb::LanguageType l) {
+      m_language_type = l;
+      return *this;
+    }
+
+    lldb::LanguageType GetLanguage() const
+
+    {
+      return m_language_type;
+    }
+
+  private:
+    DataExtractor m_data;
+    Stream *m_stream;
+    std::string m_prefix_token;
+    std::string m_suffix_token;
+    char m_quote;
+    uint32_t m_source_size;
+    bool m_escape_non_printables;
+    bool m_zero_is_terminator;
+    bool m_is_truncated;
+    lldb::LanguageType m_language_type;
+  };
+
+  // I can't use a std::unique_ptr for this because the Deleter is a template
+  // argument there
+  // and I want the same type to represent both pointers I want to free and
+  // pointers I don't need to free - which is what this class essentially is
+  // It's very specialized to the needs of this file, and not suggested for
+  // general use
+  template <typename T = uint8_t, typename U = char, typename S = size_t>
+  struct StringPrinterBufferPointer {
+  public:
+    typedef std::function<void(const T *)> Deleter;
+
+    StringPrinterBufferPointer(std::nullptr_t ptr)
+        : m_data(nullptr), m_size(0), m_deleter() {}
+
+    StringPrinterBufferPointer(const T *bytes, S size,
+                               Deleter deleter = nullptr)
+        : m_data(bytes), m_size(size), m_deleter(deleter) {}
+
+    StringPrinterBufferPointer(const U *bytes, S size,
+                               Deleter deleter = nullptr)
+        : m_data(reinterpret_cast<const T *>(bytes)), m_size(size),
+          m_deleter(deleter) {}
+
+    StringPrinterBufferPointer(StringPrinterBufferPointer &&rhs)
+        : m_data(rhs.m_data), m_size(rhs.m_size), m_deleter(rhs.m_deleter) {
+      rhs.m_data = nullptr;
+    }
+
+    StringPrinterBufferPointer(const StringPrinterBufferPointer &rhs)
+        : m_data(rhs.m_data), m_size(rhs.m_size), m_deleter(rhs.m_deleter) {
+      rhs.m_data = nullptr; // this is why m_data has to be mutable
+    }
+
+    ~StringPrinterBufferPointer() {
+      if (m_data && m_deleter)
+        m_deleter(m_data);
+      m_data = nullptr;
+    }
+
+    const T *GetBytes() const { return m_data; }
+
+    const S GetSize() const { return m_size; }
+
+    StringPrinterBufferPointer &
+    operator=(const StringPrinterBufferPointer &rhs) {
+      if (m_data && m_deleter)
+        m_deleter(m_data);
+      m_data = rhs.m_data;
+      m_size = rhs.m_size;
+      m_deleter = rhs.m_deleter;
+      rhs.m_data = nullptr;
+      return *this;
+    }
+
+  private:
+    mutable const T *m_data;
+    size_t m_size;
+    Deleter m_deleter;
+  };
+
+  typedef std::function<StringPrinter::StringPrinterBufferPointer<
+      uint8_t, char, size_t>(uint8_t *, uint8_t *, uint8_t *&)>
+      EscapingHelper;
+  typedef std::function<EscapingHelper(GetPrintableElementType)>
+      EscapingHelperGenerator;
+
+  static EscapingHelper
+  GetDefaultEscapingHelper(GetPrintableElementType elem_type);
+
+  template <StringElementType element_type>
+  static bool
+  ReadStringAndDumpToStream(const ReadStringAndDumpToStreamOptions &options);
+
+  template <StringElementType element_type>
+  static bool
+  ReadBufferAndDumpToStream(const ReadBufferAndDumpToStreamOptions &options);
+};
+
+} // namespace formatters
+} // namespace lldb_private
+
+#endif // liblldb_StringPrinter_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/TypeCategory.h b/linux-x64/clang/include/lldb/DataFormatters/TypeCategory.h
new file mode 100644
index 0000000..bdb393a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/TypeCategory.h
@@ -0,0 +1,427 @@
+//===-- TypeCategory.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_TypeCategory_h_
+#define lldb_TypeCategory_h_
+
+#include <initializer_list>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+#include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/FormattersContainer.h"
+
+namespace lldb_private {
+
+template <typename FormatterImpl> class FormatterContainerPair {
+public:
+  typedef FormattersContainer<ConstString, FormatterImpl> ExactMatchContainer;
+  typedef FormattersContainer<lldb::RegularExpressionSP, FormatterImpl>
+      RegexMatchContainer;
+
+  typedef typename ExactMatchContainer::MapType ExactMatchMap;
+  typedef typename RegexMatchContainer::MapType RegexMatchMap;
+
+  typedef typename ExactMatchContainer::MapValueType MapValueType;
+
+  typedef typename ExactMatchContainer::SharedPointer ExactMatchContainerSP;
+  typedef typename RegexMatchContainer::SharedPointer RegexMatchContainerSP;
+
+  typedef
+      typename ExactMatchContainer::ForEachCallback ExactMatchForEachCallback;
+  typedef
+      typename RegexMatchContainer::ForEachCallback RegexMatchForEachCallback;
+
+  FormatterContainerPair(const char *exact_name, const char *regex_name,
+                         IFormatChangeListener *clist)
+      : m_exact_sp(new ExactMatchContainer(std::string(exact_name), clist)),
+        m_regex_sp(new RegexMatchContainer(std::string(regex_name), clist)) {}
+
+  ~FormatterContainerPair() = default;
+
+  ExactMatchContainerSP GetExactMatch() const { return m_exact_sp; }
+
+  RegexMatchContainerSP GetRegexMatch() const { return m_regex_sp; }
+
+  uint32_t GetCount() {
+    return GetExactMatch()->GetCount() + GetRegexMatch()->GetCount();
+  }
+
+private:
+  ExactMatchContainerSP m_exact_sp;
+  RegexMatchContainerSP m_regex_sp;
+};
+
+class TypeCategoryImpl {
+private:
+  typedef FormatterContainerPair<TypeFormatImpl> FormatContainer;
+  typedef FormatterContainerPair<TypeSummaryImpl> SummaryContainer;
+  typedef FormatterContainerPair<TypeFilterImpl> FilterContainer;
+  typedef FormatterContainerPair<TypeValidatorImpl> ValidatorContainer;
+  typedef FormatterContainerPair<SyntheticChildren> SynthContainer;
+
+public:
+  typedef uint16_t FormatCategoryItems;
+  static const uint16_t ALL_ITEM_TYPES = UINT16_MAX;
+
+  typedef FormatContainer::ExactMatchContainerSP FormatContainerSP;
+  typedef FormatContainer::RegexMatchContainerSP RegexFormatContainerSP;
+
+  typedef SummaryContainer::ExactMatchContainerSP SummaryContainerSP;
+  typedef SummaryContainer::RegexMatchContainerSP RegexSummaryContainerSP;
+
+  typedef FilterContainer::ExactMatchContainerSP FilterContainerSP;
+  typedef FilterContainer::RegexMatchContainerSP RegexFilterContainerSP;
+
+  typedef SynthContainer::ExactMatchContainerSP SynthContainerSP;
+  typedef SynthContainer::RegexMatchContainerSP RegexSynthContainerSP;
+
+  typedef ValidatorContainer::ExactMatchContainerSP ValidatorContainerSP;
+  typedef ValidatorContainer::RegexMatchContainerSP RegexValidatorContainerSP;
+
+  template <typename T> class ForEachCallbacks {
+  public:
+    ForEachCallbacks() = default;
+    ~ForEachCallbacks() = default;
+
+    template <typename U = TypeFormatImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetExact(FormatContainer::ExactMatchForEachCallback callback) {
+      m_format_exact = callback;
+      return *this;
+    }
+    template <typename U = TypeFormatImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetWithRegex(FormatContainer::RegexMatchForEachCallback callback) {
+      m_format_regex = callback;
+      return *this;
+    }
+
+    template <typename U = TypeSummaryImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetExact(SummaryContainer::ExactMatchForEachCallback callback) {
+      m_summary_exact = callback;
+      return *this;
+    }
+    template <typename U = TypeSummaryImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetWithRegex(SummaryContainer::RegexMatchForEachCallback callback) {
+      m_summary_regex = callback;
+      return *this;
+    }
+
+    template <typename U = TypeFilterImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetExact(FilterContainer::ExactMatchForEachCallback callback) {
+      m_filter_exact = callback;
+      return *this;
+    }
+    template <typename U = TypeFilterImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetWithRegex(FilterContainer::RegexMatchForEachCallback callback) {
+      m_filter_regex = callback;
+      return *this;
+    }
+
+    template <typename U = SyntheticChildren>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetExact(SynthContainer::ExactMatchForEachCallback callback) {
+      m_synth_exact = callback;
+      return *this;
+    }
+    template <typename U = SyntheticChildren>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetWithRegex(SynthContainer::RegexMatchForEachCallback callback) {
+      m_synth_regex = callback;
+      return *this;
+    }
+    template <typename U = TypeValidatorImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetExact(ValidatorContainer::ExactMatchForEachCallback callback) {
+      m_validator_exact = callback;
+      return *this;
+    }
+    template <typename U = TypeValidatorImpl>
+    typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type
+    SetWithRegex(ValidatorContainer::RegexMatchForEachCallback callback) {
+      m_validator_regex = callback;
+      return *this;
+    }
+
+    FormatContainer::ExactMatchForEachCallback GetFormatExactCallback() const {
+      return m_format_exact;
+    }
+    FormatContainer::RegexMatchForEachCallback GetFormatRegexCallback() const {
+      return m_format_regex;
+    }
+
+    SummaryContainer::ExactMatchForEachCallback
+    GetSummaryExactCallback() const {
+      return m_summary_exact;
+    }
+    SummaryContainer::RegexMatchForEachCallback
+    GetSummaryRegexCallback() const {
+      return m_summary_regex;
+    }
+
+    FilterContainer::ExactMatchForEachCallback GetFilterExactCallback() const {
+      return m_filter_exact;
+    }
+    FilterContainer::RegexMatchForEachCallback GetFilterRegexCallback() const {
+      return m_filter_regex;
+    }
+
+    SynthContainer::ExactMatchForEachCallback GetSynthExactCallback() const {
+      return m_synth_exact;
+    }
+    SynthContainer::RegexMatchForEachCallback GetSynthRegexCallback() const {
+      return m_synth_regex;
+    }
+
+    ValidatorContainer::ExactMatchForEachCallback
+    GetValidatorExactCallback() const {
+      return m_validator_exact;
+    }
+    ValidatorContainer::RegexMatchForEachCallback
+    GetValidatorRegexCallback() const {
+      return m_validator_regex;
+    }
+
+  private:
+    FormatContainer::ExactMatchForEachCallback m_format_exact;
+    FormatContainer::RegexMatchForEachCallback m_format_regex;
+
+    SummaryContainer::ExactMatchForEachCallback m_summary_exact;
+    SummaryContainer::RegexMatchForEachCallback m_summary_regex;
+
+    FilterContainer::ExactMatchForEachCallback m_filter_exact;
+    FilterContainer::RegexMatchForEachCallback m_filter_regex;
+
+    SynthContainer::ExactMatchForEachCallback m_synth_exact;
+    SynthContainer::RegexMatchForEachCallback m_synth_regex;
+
+    ValidatorContainer::ExactMatchForEachCallback m_validator_exact;
+    ValidatorContainer::RegexMatchForEachCallback m_validator_regex;
+  };
+
+  TypeCategoryImpl(IFormatChangeListener *clist, ConstString name,
+                   std::initializer_list<lldb::LanguageType> langs = {});
+
+  template <typename T> void ForEach(const ForEachCallbacks<T> &foreach) {
+    GetTypeFormatsContainer()->ForEach(foreach.GetFormatExactCallback());
+    GetRegexTypeFormatsContainer()->ForEach(foreach.GetFormatRegexCallback());
+
+    GetTypeSummariesContainer()->ForEach(foreach.GetSummaryExactCallback());
+    GetRegexTypeSummariesContainer()->ForEach(
+        foreach.GetSummaryRegexCallback());
+
+    GetTypeFiltersContainer()->ForEach(foreach.GetFilterExactCallback());
+    GetRegexTypeFiltersContainer()->ForEach(foreach.GetFilterRegexCallback());
+
+    GetTypeSyntheticsContainer()->ForEach(foreach.GetSynthExactCallback());
+    GetRegexTypeSyntheticsContainer()->ForEach(foreach.GetSynthRegexCallback());
+
+    GetTypeValidatorsContainer()->ForEach(foreach.GetValidatorExactCallback());
+    GetRegexTypeValidatorsContainer()->ForEach(
+        foreach.GetValidatorRegexCallback());
+  }
+
+  FormatContainerSP GetTypeFormatsContainer() {
+    return m_format_cont.GetExactMatch();
+  }
+
+  RegexFormatContainerSP GetRegexTypeFormatsContainer() {
+    return m_format_cont.GetRegexMatch();
+  }
+
+  FormatContainer &GetFormatContainer() { return m_format_cont; }
+
+  SummaryContainerSP GetTypeSummariesContainer() {
+    return m_summary_cont.GetExactMatch();
+  }
+
+  RegexSummaryContainerSP GetRegexTypeSummariesContainer() {
+    return m_summary_cont.GetRegexMatch();
+  }
+
+  SummaryContainer &GetSummaryContainer() { return m_summary_cont; }
+
+  FilterContainerSP GetTypeFiltersContainer() {
+    return m_filter_cont.GetExactMatch();
+  }
+
+  RegexFilterContainerSP GetRegexTypeFiltersContainer() {
+    return m_filter_cont.GetRegexMatch();
+  }
+
+  FilterContainer &GetFilterContainer() { return m_filter_cont; }
+
+  FormatContainer::MapValueType
+  GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  SummaryContainer::MapValueType
+  GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  FilterContainer::MapValueType
+  GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  SynthContainer::MapValueType
+  GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  ValidatorContainer::MapValueType
+  GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp);
+
+  lldb::TypeNameSpecifierImplSP
+  GetTypeNameSpecifierForFormatAtIndex(size_t index);
+
+  lldb::TypeNameSpecifierImplSP
+  GetTypeNameSpecifierForSummaryAtIndex(size_t index);
+
+  FormatContainer::MapValueType GetFormatAtIndex(size_t index);
+
+  SummaryContainer::MapValueType GetSummaryAtIndex(size_t index);
+
+  FilterContainer::MapValueType GetFilterAtIndex(size_t index);
+
+  lldb::TypeNameSpecifierImplSP
+  GetTypeNameSpecifierForFilterAtIndex(size_t index);
+
+  SynthContainerSP GetTypeSyntheticsContainer() {
+    return m_synth_cont.GetExactMatch();
+  }
+
+  RegexSynthContainerSP GetRegexTypeSyntheticsContainer() {
+    return m_synth_cont.GetRegexMatch();
+  }
+
+  SynthContainer &GetSyntheticsContainer() { return m_synth_cont; }
+
+  SynthContainer::MapValueType GetSyntheticAtIndex(size_t index);
+
+  lldb::TypeNameSpecifierImplSP
+  GetTypeNameSpecifierForSyntheticAtIndex(size_t index);
+
+  ValidatorContainerSP GetTypeValidatorsContainer() {
+    return m_validator_cont.GetExactMatch();
+  }
+
+  RegexValidatorContainerSP GetRegexTypeValidatorsContainer() {
+    return m_validator_cont.GetRegexMatch();
+  }
+
+  ValidatorContainer::MapValueType GetValidatorAtIndex(size_t index);
+
+  lldb::TypeNameSpecifierImplSP
+  GetTypeNameSpecifierForValidatorAtIndex(size_t index);
+
+  bool IsEnabled() const { return m_enabled; }
+
+  uint32_t GetEnabledPosition() {
+    if (!m_enabled)
+      return UINT32_MAX;
+    else
+      return m_enabled_position;
+  }
+
+  bool Get(ValueObject &valobj, const FormattersMatchVector &candidates,
+           lldb::TypeFormatImplSP &entry, uint32_t *reason = nullptr);
+
+  bool Get(ValueObject &valobj, const FormattersMatchVector &candidates,
+           lldb::TypeSummaryImplSP &entry, uint32_t *reason = nullptr);
+
+  bool Get(ValueObject &valobj, const FormattersMatchVector &candidates,
+           lldb::SyntheticChildrenSP &entry, uint32_t *reason = nullptr);
+
+  bool Get(ValueObject &valobj, const FormattersMatchVector &candidates,
+           lldb::TypeValidatorImplSP &entry, uint32_t *reason = nullptr);
+
+  void Clear(FormatCategoryItems items = ALL_ITEM_TYPES);
+
+  bool Delete(ConstString name, FormatCategoryItems items = ALL_ITEM_TYPES);
+
+  uint32_t GetCount(FormatCategoryItems items = ALL_ITEM_TYPES);
+
+  const char *GetName() { return m_name.GetCString(); }
+
+  size_t GetNumLanguages();
+
+  lldb::LanguageType GetLanguageAtIndex(size_t idx);
+
+  void AddLanguage(lldb::LanguageType lang);
+
+  bool HasLanguage(lldb::LanguageType lang);
+
+  std::string GetDescription();
+
+  bool AnyMatches(ConstString type_name,
+                  FormatCategoryItems items = ALL_ITEM_TYPES,
+                  bool only_enabled = true,
+                  const char **matching_category = nullptr,
+                  FormatCategoryItems *matching_type = nullptr);
+
+  typedef std::shared_ptr<TypeCategoryImpl> SharedPointer;
+
+private:
+  FormatContainer m_format_cont;
+  SummaryContainer m_summary_cont;
+  FilterContainer m_filter_cont;
+  SynthContainer m_synth_cont;
+  ValidatorContainer m_validator_cont;
+
+  bool m_enabled;
+
+  IFormatChangeListener *m_change_listener;
+
+  std::recursive_mutex m_mutex;
+
+  ConstString m_name;
+
+  std::vector<lldb::LanguageType> m_languages;
+
+  uint32_t m_enabled_position;
+
+  void Enable(bool value, uint32_t position);
+
+  void Disable() { Enable(false, UINT32_MAX); }
+
+  bool IsApplicable(ValueObject &valobj);
+
+  uint32_t GetLastEnabledPosition() { return m_enabled_position; }
+
+  void SetEnabledPosition(uint32_t p) { m_enabled_position = p; }
+
+  friend class FormatManager;
+  friend class LanguageCategory;
+  friend class TypeCategoryMap;
+
+  friend class FormattersContainer<ConstString, TypeFormatImpl>;
+  friend class FormattersContainer<lldb::RegularExpressionSP, TypeFormatImpl>;
+
+  friend class FormattersContainer<ConstString, TypeSummaryImpl>;
+  friend class FormattersContainer<lldb::RegularExpressionSP, TypeSummaryImpl>;
+
+  friend class FormattersContainer<ConstString, TypeFilterImpl>;
+  friend class FormattersContainer<lldb::RegularExpressionSP, TypeFilterImpl>;
+
+  friend class FormattersContainer<ConstString, ScriptedSyntheticChildren>;
+  friend class FormattersContainer<lldb::RegularExpressionSP,
+                                   ScriptedSyntheticChildren>;
+
+  friend class FormattersContainer<ConstString, TypeValidatorImpl>;
+  friend class FormattersContainer<lldb::RegularExpressionSP,
+                                   TypeValidatorImpl>;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_TypeCategory_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/TypeCategoryMap.h b/linux-x64/clang/include/lldb/DataFormatters/TypeCategoryMap.h
new file mode 100644
index 0000000..753b58c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/TypeCategoryMap.h
@@ -0,0 +1,118 @@
+//===-- TypeCategoryMap.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_TypeCategoryMap_h_
+#define lldb_TypeCategoryMap_h_
+
+#include <functional>
+#include <list>
+#include <map>
+#include <mutex>
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+#include "lldb/DataFormatters/FormattersContainer.h"
+#include "lldb/DataFormatters/TypeCategory.h"
+
+namespace lldb_private {
+class TypeCategoryMap {
+private:
+  typedef ConstString KeyType;
+  typedef TypeCategoryImpl ValueType;
+  typedef ValueType::SharedPointer ValueSP;
+  typedef std::list<lldb::TypeCategoryImplSP> ActiveCategoriesList;
+  typedef ActiveCategoriesList::iterator ActiveCategoriesIterator;
+
+public:
+  typedef std::map<KeyType, ValueSP> MapType;
+  typedef MapType::iterator MapIterator;
+  typedef std::function<bool(const ValueSP &)> ForEachCallback;
+
+  typedef uint32_t Position;
+
+  static const Position First = 0;
+  static const Position Default = 1;
+  static const Position Last = UINT32_MAX;
+
+  TypeCategoryMap(IFormatChangeListener *lst);
+
+  void Add(KeyType name, const ValueSP &entry);
+
+  bool Delete(KeyType name);
+
+  bool Enable(KeyType category_name, Position pos = Default);
+
+  bool Disable(KeyType category_name);
+
+  bool Enable(ValueSP category, Position pos = Default);
+
+  bool Disable(ValueSP category);
+
+  void EnableAllCategories();
+
+  void DisableAllCategories();
+
+  void Clear();
+
+  bool Get(KeyType name, ValueSP &entry);
+
+  bool Get(uint32_t pos, ValueSP &entry);
+
+  void ForEach(ForEachCallback callback);
+
+  lldb::TypeCategoryImplSP GetAtIndex(uint32_t);
+
+  bool
+  AnyMatches(ConstString type_name,
+             TypeCategoryImpl::FormatCategoryItems items =
+                 TypeCategoryImpl::ALL_ITEM_TYPES,
+             bool only_enabled = true, const char **matching_category = nullptr,
+             TypeCategoryImpl::FormatCategoryItems *matching_type = nullptr);
+
+  uint32_t GetCount() { return m_map.size(); }
+
+  lldb::TypeFormatImplSP GetFormat(FormattersMatchData &match_data);
+
+  lldb::TypeSummaryImplSP GetSummaryFormat(FormattersMatchData &match_data);
+
+  lldb::SyntheticChildrenSP
+  GetSyntheticChildren(FormattersMatchData &match_data);
+
+  lldb::TypeValidatorImplSP GetValidator(FormattersMatchData &match_data);
+
+private:
+  class delete_matching_categories {
+    lldb::TypeCategoryImplSP ptr;
+
+  public:
+    delete_matching_categories(lldb::TypeCategoryImplSP p) : ptr(p) {}
+
+    bool operator()(const lldb::TypeCategoryImplSP &other) {
+      return ptr.get() == other.get();
+    }
+  };
+
+  std::recursive_mutex m_map_mutex;
+  IFormatChangeListener *listener;
+
+  MapType m_map;
+  ActiveCategoriesList m_active_categories;
+
+  MapType &map() { return m_map; }
+
+  ActiveCategoriesList &active_list() { return m_active_categories; }
+
+  std::recursive_mutex &mutex() { return m_map_mutex; }
+
+  friend class FormattersContainer<KeyType, ValueType>;
+  friend class FormatManager;
+};
+} // namespace lldb_private
+
+#endif // lldb_TypeCategoryMap_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/TypeFormat.h b/linux-x64/clang/include/lldb/DataFormatters/TypeFormat.h
new file mode 100644
index 0000000..77e8c0e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/TypeFormat.h
@@ -0,0 +1,217 @@
+//===-- TypeFormat.h ----------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_TypeFormat_h_
+#define lldb_TypeFormat_h_
+
+
+#include <functional>
+#include <string>
+#include <unordered_map>
+
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+#include "lldb/Core/ValueObject.h"
+
+namespace lldb_private {
+class TypeFormatImpl {
+public:
+  class Flags {
+  public:
+    Flags() : m_flags(lldb::eTypeOptionCascade) {}
+
+    Flags(const Flags &other) : m_flags(other.m_flags) {}
+
+    Flags(uint32_t value) : m_flags(value) {}
+
+    Flags &operator=(const Flags &rhs) {
+      if (&rhs != this)
+        m_flags = rhs.m_flags;
+
+      return *this;
+    }
+
+    Flags &operator=(const uint32_t &rhs) {
+      m_flags = rhs;
+      return *this;
+    }
+
+    Flags &Clear() {
+      m_flags = 0;
+      return *this;
+    }
+
+    bool GetCascades() const {
+      return (m_flags & lldb::eTypeOptionCascade) == lldb::eTypeOptionCascade;
+    }
+
+    Flags &SetCascades(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionCascade;
+      else
+        m_flags &= ~lldb::eTypeOptionCascade;
+      return *this;
+    }
+
+    bool GetSkipPointers() const {
+      return (m_flags & lldb::eTypeOptionSkipPointers) ==
+             lldb::eTypeOptionSkipPointers;
+    }
+
+    Flags &SetSkipPointers(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipPointers;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipPointers;
+      return *this;
+    }
+
+    bool GetSkipReferences() const {
+      return (m_flags & lldb::eTypeOptionSkipReferences) ==
+             lldb::eTypeOptionSkipReferences;
+    }
+
+    Flags &SetSkipReferences(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipReferences;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipReferences;
+      return *this;
+    }
+
+    bool GetNonCacheable() const {
+      return (m_flags & lldb::eTypeOptionNonCacheable) ==
+             lldb::eTypeOptionNonCacheable;
+    }
+
+    Flags &SetNonCacheable(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionNonCacheable;
+      else
+        m_flags &= ~lldb::eTypeOptionNonCacheable;
+      return *this;
+    }
+
+    uint32_t GetValue() { return m_flags; }
+
+    void SetValue(uint32_t value) { m_flags = value; }
+
+  private:
+    uint32_t m_flags;
+  };
+
+  TypeFormatImpl(const Flags &flags = Flags());
+
+  typedef std::shared_ptr<TypeFormatImpl> SharedPointer;
+
+  virtual ~TypeFormatImpl();
+
+  bool Cascades() const { return m_flags.GetCascades(); }
+
+  bool SkipsPointers() const { return m_flags.GetSkipPointers(); }
+
+  bool SkipsReferences() const { return m_flags.GetSkipReferences(); }
+
+  bool NonCacheable() const { return m_flags.GetNonCacheable(); }
+
+  void SetCascades(bool value) { m_flags.SetCascades(value); }
+
+  void SetSkipsPointers(bool value) { m_flags.SetSkipPointers(value); }
+
+  void SetSkipsReferences(bool value) { m_flags.SetSkipReferences(value); }
+
+  void SetNonCacheable(bool value) { m_flags.SetNonCacheable(value); }
+
+  uint32_t GetOptions() { return m_flags.GetValue(); }
+
+  void SetOptions(uint32_t value) { m_flags.SetValue(value); }
+
+  uint32_t &GetRevision() { return m_my_revision; }
+
+  enum class Type { eTypeUnknown, eTypeFormat, eTypeEnum };
+
+  virtual Type GetType() { return Type::eTypeUnknown; }
+
+  // we are using a ValueObject* instead of a ValueObjectSP because we do not
+  // need to hold on to this for extended periods of time and we trust the
+  // ValueObject to stay around for as long as it is required for us to
+  // generate its value
+  virtual bool FormatObject(ValueObject *valobj, std::string &dest) const = 0;
+
+  virtual std::string GetDescription() = 0;
+
+protected:
+  Flags m_flags;
+  uint32_t m_my_revision;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(TypeFormatImpl);
+};
+
+class TypeFormatImpl_Format : public TypeFormatImpl {
+public:
+  TypeFormatImpl_Format(lldb::Format f = lldb::eFormatInvalid,
+                        const TypeFormatImpl::Flags &flags = Flags());
+
+  typedef std::shared_ptr<TypeFormatImpl_Format> SharedPointer;
+
+  ~TypeFormatImpl_Format() override;
+
+  lldb::Format GetFormat() const { return m_format; }
+
+  void SetFormat(lldb::Format fmt) { m_format = fmt; }
+
+  TypeFormatImpl::Type GetType() override {
+    return TypeFormatImpl::Type::eTypeFormat;
+  }
+
+  bool FormatObject(ValueObject *valobj, std::string &dest) const override;
+
+  std::string GetDescription() override;
+
+protected:
+  lldb::Format m_format;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(TypeFormatImpl_Format);
+};
+
+class TypeFormatImpl_EnumType : public TypeFormatImpl {
+public:
+  TypeFormatImpl_EnumType(ConstString type_name = ConstString(""),
+                          const TypeFormatImpl::Flags &flags = Flags());
+
+  typedef std::shared_ptr<TypeFormatImpl_EnumType> SharedPointer;
+
+  ~TypeFormatImpl_EnumType() override;
+
+  ConstString GetTypeName() { return m_enum_type; }
+
+  void SetTypeName(ConstString enum_type) { m_enum_type = enum_type; }
+
+  TypeFormatImpl::Type GetType() override {
+    return TypeFormatImpl::Type::eTypeEnum;
+  }
+
+  bool FormatObject(ValueObject *valobj, std::string &dest) const override;
+
+  std::string GetDescription() override;
+
+protected:
+  ConstString m_enum_type;
+  mutable std::unordered_map<void *, CompilerType> m_types;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(TypeFormatImpl_EnumType);
+};
+} // namespace lldb_private
+
+#endif // lldb_TypeFormat_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/TypeSummary.h b/linux-x64/clang/include/lldb/DataFormatters/TypeSummary.h
new file mode 100644
index 0000000..9c97b36
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/TypeSummary.h
@@ -0,0 +1,394 @@
+//===-- TypeSummary.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_TypeSummary_h_
+#define lldb_TypeSummary_h_
+
+#include <stdint.h>
+
+#include <functional>
+#include <memory>
+#include <string>
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+#include "lldb/Core/FormatEntity.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+class TypeSummaryOptions {
+public:
+  TypeSummaryOptions();
+
+  ~TypeSummaryOptions() = default;
+
+  lldb::LanguageType GetLanguage() const;
+
+  lldb::TypeSummaryCapping GetCapping() const;
+
+  TypeSummaryOptions &SetLanguage(lldb::LanguageType);
+
+  TypeSummaryOptions &SetCapping(lldb::TypeSummaryCapping);
+
+private:
+  lldb::LanguageType m_lang;
+  lldb::TypeSummaryCapping m_capping;
+};
+
+class TypeSummaryImpl {
+public:
+  enum class Kind { eSummaryString, eScript, eCallback, eInternal };
+
+  virtual ~TypeSummaryImpl() = default;
+
+  Kind GetKind() const { return m_kind; }
+
+  class Flags {
+  public:
+    Flags() : m_flags(lldb::eTypeOptionCascade) {}
+
+    Flags(const Flags &other) : m_flags(other.m_flags) {}
+
+    Flags(uint32_t value) : m_flags(value) {}
+
+    Flags &operator=(const Flags &rhs) {
+      if (&rhs != this)
+        m_flags = rhs.m_flags;
+
+      return *this;
+    }
+
+    Flags &operator=(const uint32_t &rhs) {
+      m_flags = rhs;
+      return *this;
+    }
+
+    Flags &Clear() {
+      m_flags = 0;
+      return *this;
+    }
+
+    bool GetCascades() const {
+      return (m_flags & lldb::eTypeOptionCascade) == lldb::eTypeOptionCascade;
+    }
+
+    Flags &SetCascades(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionCascade;
+      else
+        m_flags &= ~lldb::eTypeOptionCascade;
+      return *this;
+    }
+
+    bool GetSkipPointers() const {
+      return (m_flags & lldb::eTypeOptionSkipPointers) ==
+             lldb::eTypeOptionSkipPointers;
+    }
+
+    Flags &SetSkipPointers(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipPointers;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipPointers;
+      return *this;
+    }
+
+    bool GetSkipReferences() const {
+      return (m_flags & lldb::eTypeOptionSkipReferences) ==
+             lldb::eTypeOptionSkipReferences;
+    }
+
+    Flags &SetSkipReferences(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipReferences;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipReferences;
+      return *this;
+    }
+
+    bool GetDontShowChildren() const {
+      return (m_flags & lldb::eTypeOptionHideChildren) ==
+             lldb::eTypeOptionHideChildren;
+    }
+
+    Flags &SetDontShowChildren(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionHideChildren;
+      else
+        m_flags &= ~lldb::eTypeOptionHideChildren;
+      return *this;
+    }
+
+    bool GetHideEmptyAggregates() const {
+      return (m_flags & lldb::eTypeOptionHideEmptyAggregates) ==
+             lldb::eTypeOptionHideEmptyAggregates;
+    }
+
+    Flags &SetHideEmptyAggregates(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionHideEmptyAggregates;
+      else
+        m_flags &= ~lldb::eTypeOptionHideEmptyAggregates;
+      return *this;
+    }
+
+    bool GetDontShowValue() const {
+      return (m_flags & lldb::eTypeOptionHideValue) ==
+             lldb::eTypeOptionHideValue;
+    }
+
+    Flags &SetDontShowValue(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionHideValue;
+      else
+        m_flags &= ~lldb::eTypeOptionHideValue;
+      return *this;
+    }
+
+    bool GetShowMembersOneLiner() const {
+      return (m_flags & lldb::eTypeOptionShowOneLiner) ==
+             lldb::eTypeOptionShowOneLiner;
+    }
+
+    Flags &SetShowMembersOneLiner(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionShowOneLiner;
+      else
+        m_flags &= ~lldb::eTypeOptionShowOneLiner;
+      return *this;
+    }
+
+    bool GetHideItemNames() const {
+      return (m_flags & lldb::eTypeOptionHideNames) ==
+             lldb::eTypeOptionHideNames;
+    }
+
+    Flags &SetHideItemNames(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionHideNames;
+      else
+        m_flags &= ~lldb::eTypeOptionHideNames;
+      return *this;
+    }
+
+    bool GetNonCacheable() const {
+      return (m_flags & lldb::eTypeOptionNonCacheable) ==
+             lldb::eTypeOptionNonCacheable;
+    }
+
+    Flags &SetNonCacheable(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionNonCacheable;
+      else
+        m_flags &= ~lldb::eTypeOptionNonCacheable;
+      return *this;
+    }
+
+    uint32_t GetValue() { return m_flags; }
+
+    void SetValue(uint32_t value) { m_flags = value; }
+
+  private:
+    uint32_t m_flags;
+  };
+
+  bool Cascades() const { return m_flags.GetCascades(); }
+
+  bool SkipsPointers() const { return m_flags.GetSkipPointers(); }
+
+  bool SkipsReferences() const { return m_flags.GetSkipReferences(); }
+
+  bool NonCacheable() const { return m_flags.GetNonCacheable(); }
+
+  virtual bool DoesPrintChildren(ValueObject *valobj) const {
+    return !m_flags.GetDontShowChildren();
+  }
+
+  virtual bool DoesPrintEmptyAggregates() const {
+    return !m_flags.GetHideEmptyAggregates();
+  }
+
+  virtual bool DoesPrintValue(ValueObject *valobj) const {
+    return !m_flags.GetDontShowValue();
+  }
+
+  bool IsOneLiner() const { return m_flags.GetShowMembersOneLiner(); }
+
+  virtual bool HideNames(ValueObject *valobj) const {
+    return m_flags.GetHideItemNames();
+  }
+
+  void SetCascades(bool value) { m_flags.SetCascades(value); }
+
+  void SetSkipsPointers(bool value) { m_flags.SetSkipPointers(value); }
+
+  void SetSkipsReferences(bool value) { m_flags.SetSkipReferences(value); }
+
+  virtual void SetDoesPrintChildren(bool value) {
+    m_flags.SetDontShowChildren(!value);
+  }
+
+  virtual void SetDoesPrintValue(bool value) {
+    m_flags.SetDontShowValue(!value);
+  }
+
+  void SetIsOneLiner(bool value) { m_flags.SetShowMembersOneLiner(value); }
+
+  virtual void SetHideNames(bool value) { m_flags.SetHideItemNames(value); }
+
+  virtual void SetNonCacheable(bool value) { m_flags.SetNonCacheable(value); }
+
+  uint32_t GetOptions() { return m_flags.GetValue(); }
+
+  void SetOptions(uint32_t value) { m_flags.SetValue(value); }
+
+  // we are using a ValueObject* instead of a ValueObjectSP because we do not
+  // need to hold on to this for extended periods of time and we trust the
+  // ValueObject to stay around for as long as it is required for us to
+  // generate its summary
+  virtual bool FormatObject(ValueObject *valobj, std::string &dest,
+                            const TypeSummaryOptions &options) = 0;
+
+  virtual std::string GetDescription() = 0;
+
+  uint32_t &GetRevision() { return m_my_revision; }
+
+  typedef std::shared_ptr<TypeSummaryImpl> SharedPointer;
+
+protected:
+  uint32_t m_my_revision;
+  Flags m_flags;
+
+  TypeSummaryImpl(Kind kind, const TypeSummaryImpl::Flags &flags);
+
+private:
+  Kind m_kind;
+  DISALLOW_COPY_AND_ASSIGN(TypeSummaryImpl);
+};
+
+// simple string-based summaries, using ${var to show data
+struct StringSummaryFormat : public TypeSummaryImpl {
+  std::string m_format_str;
+  FormatEntity::Entry m_format;
+  Status m_error;
+
+  StringSummaryFormat(const TypeSummaryImpl::Flags &flags, const char *f);
+
+  ~StringSummaryFormat() override = default;
+
+  const char *GetSummaryString() const { return m_format_str.c_str(); }
+
+  void SetSummaryString(const char *f);
+
+  bool FormatObject(ValueObject *valobj, std::string &dest,
+                    const TypeSummaryOptions &options) override;
+
+  std::string GetDescription() override;
+
+  static bool classof(const TypeSummaryImpl *S) {
+    return S->GetKind() == Kind::eSummaryString;
+  }
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(StringSummaryFormat);
+};
+
+// summaries implemented via a C++ function
+struct CXXFunctionSummaryFormat : public TypeSummaryImpl {
+  // we should convert these to SBValue and SBStream if we ever cross the
+  // boundary towards the external world
+  typedef std::function<bool(ValueObject &, Stream &,
+                             const TypeSummaryOptions &)>
+      Callback;
+
+  Callback m_impl;
+  std::string m_description;
+
+  CXXFunctionSummaryFormat(const TypeSummaryImpl::Flags &flags, Callback impl,
+                           const char *description);
+
+  ~CXXFunctionSummaryFormat() override = default;
+
+  Callback GetBackendFunction() const { return m_impl; }
+
+  const char *GetTextualInfo() const { return m_description.c_str(); }
+
+  void SetBackendFunction(Callback cb_func) { m_impl = cb_func; }
+
+  void SetTextualInfo(const char *descr) {
+    if (descr)
+      m_description.assign(descr);
+    else
+      m_description.clear();
+  }
+
+  bool FormatObject(ValueObject *valobj, std::string &dest,
+                    const TypeSummaryOptions &options) override;
+
+  std::string GetDescription() override;
+
+  static bool classof(const TypeSummaryImpl *S) {
+    return S->GetKind() == Kind::eCallback;
+  }
+
+  typedef std::shared_ptr<CXXFunctionSummaryFormat> SharedPointer;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(CXXFunctionSummaryFormat);
+};
+
+// Python-based summaries, running script code to show data
+struct ScriptSummaryFormat : public TypeSummaryImpl {
+  std::string m_function_name;
+  std::string m_python_script;
+  StructuredData::ObjectSP m_script_function_sp;
+
+  ScriptSummaryFormat(const TypeSummaryImpl::Flags &flags,
+                      const char *function_name,
+                      const char *python_script = nullptr);
+
+  ~ScriptSummaryFormat() override = default;
+
+  const char *GetFunctionName() const { return m_function_name.c_str(); }
+
+  const char *GetPythonScript() const { return m_python_script.c_str(); }
+
+  void SetFunctionName(const char *function_name) {
+    if (function_name)
+      m_function_name.assign(function_name);
+    else
+      m_function_name.clear();
+    m_python_script.clear();
+  }
+
+  void SetPythonScript(const char *script) {
+    if (script)
+      m_python_script.assign(script);
+    else
+      m_python_script.clear();
+  }
+
+  bool FormatObject(ValueObject *valobj, std::string &dest,
+                    const TypeSummaryOptions &options) override;
+
+  std::string GetDescription() override;
+
+  static bool classof(const TypeSummaryImpl *S) {
+    return S->GetKind() == Kind::eScript;
+  }
+
+  typedef std::shared_ptr<ScriptSummaryFormat> SharedPointer;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ScriptSummaryFormat);
+};
+} // namespace lldb_private
+
+#endif // lldb_TypeSummary_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/TypeSynthetic.h b/linux-x64/clang/include/lldb/DataFormatters/TypeSynthetic.h
new file mode 100644
index 0000000..93443cf
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/TypeSynthetic.h
@@ -0,0 +1,455 @@
+//===-- TypeSynthetic.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_TypeSynthetic_h_
+#define lldb_TypeSynthetic_h_
+
+#include <stdint.h>
+
+#include <functional>
+#include <initializer_list>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+class SyntheticChildrenFrontEnd {
+protected:
+  ValueObject &m_backend;
+
+  void SetValid(bool valid) { m_valid = valid; }
+
+  bool IsValid() { return m_valid; }
+
+public:
+  SyntheticChildrenFrontEnd(ValueObject &backend)
+      : m_backend(backend), m_valid(true) {}
+
+  virtual ~SyntheticChildrenFrontEnd() = default;
+
+  virtual size_t CalculateNumChildren() = 0;
+
+  virtual size_t CalculateNumChildren(uint32_t max) {
+    auto count = CalculateNumChildren();
+    return count <= max ? count : max;
+  }
+
+  virtual lldb::ValueObjectSP GetChildAtIndex(size_t idx) = 0;
+
+  virtual size_t GetIndexOfChildWithName(ConstString name) = 0;
+
+  // this function is assumed to always succeed and it if fails, the front-end
+  // should know to deal with it in the correct way (most probably, by refusing
+  // to return any children) the return value of Update() should actually be
+  // interpreted as "ValueObjectSyntheticFilter cache is good/bad" if =true,
+  // ValueObjectSyntheticFilter is allowed to use the children it fetched
+  // previously and cached if =false, ValueObjectSyntheticFilter must throw
+  // away its cache, and query again for children
+  virtual bool Update() = 0;
+
+  // if this function returns false, then CalculateNumChildren() MUST return 0
+  // since UI frontends might validly decide not to inquire for children given
+  // a false return value from this call if it returns true, then
+  // CalculateNumChildren() can return any number >= 0 (0 being valid) it
+  // should if at all possible be more efficient than CalculateNumChildren()
+  virtual bool MightHaveChildren() = 0;
+
+  // if this function returns a non-null ValueObject, then the returned
+  // ValueObject will stand for this ValueObject whenever a "value" request is
+  // made to this ValueObject
+  virtual lldb::ValueObjectSP GetSyntheticValue() { return nullptr; }
+
+  // if this function returns a non-empty ConstString, then clients are
+  // expected to use the return as the name of the type of this ValueObject for
+  // display purposes
+  virtual ConstString GetSyntheticTypeName() { return ConstString(); }
+
+  typedef std::shared_ptr<SyntheticChildrenFrontEnd> SharedPointer;
+  typedef std::unique_ptr<SyntheticChildrenFrontEnd> AutoPointer;
+
+protected:
+  lldb::ValueObjectSP
+  CreateValueObjectFromExpression(llvm::StringRef name,
+                                  llvm::StringRef expression,
+                                  const ExecutionContext &exe_ctx);
+
+  lldb::ValueObjectSP
+  CreateValueObjectFromAddress(llvm::StringRef name, uint64_t address,
+                               const ExecutionContext &exe_ctx,
+                               CompilerType type);
+
+  lldb::ValueObjectSP CreateValueObjectFromData(llvm::StringRef name,
+                                                const DataExtractor &data,
+                                                const ExecutionContext &exe_ctx,
+                                                CompilerType type);
+
+private:
+  bool m_valid;
+  DISALLOW_COPY_AND_ASSIGN(SyntheticChildrenFrontEnd);
+};
+
+class SyntheticValueProviderFrontEnd : public SyntheticChildrenFrontEnd {
+public:
+  SyntheticValueProviderFrontEnd(ValueObject &backend)
+      : SyntheticChildrenFrontEnd(backend) {}
+
+  ~SyntheticValueProviderFrontEnd() override = default;
+
+  size_t CalculateNumChildren() override { return 0; }
+
+  lldb::ValueObjectSP GetChildAtIndex(size_t idx) override { return nullptr; }
+
+  size_t GetIndexOfChildWithName(ConstString name) override {
+    return UINT32_MAX;
+  }
+
+  bool Update() override { return false; }
+
+  bool MightHaveChildren() override { return false; }
+
+  lldb::ValueObjectSP GetSyntheticValue() override = 0;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SyntheticValueProviderFrontEnd);
+};
+
+class SyntheticChildren {
+public:
+  class Flags {
+  public:
+    Flags() : m_flags(lldb::eTypeOptionCascade) {}
+
+    Flags(const Flags &other) : m_flags(other.m_flags) {}
+
+    Flags(uint32_t value) : m_flags(value) {}
+
+    Flags &operator=(const Flags &rhs) {
+      if (&rhs != this)
+        m_flags = rhs.m_flags;
+
+      return *this;
+    }
+
+    Flags &operator=(const uint32_t &rhs) {
+      m_flags = rhs;
+      return *this;
+    }
+
+    Flags &Clear() {
+      m_flags = 0;
+      return *this;
+    }
+
+    bool GetCascades() const {
+      return (m_flags & lldb::eTypeOptionCascade) == lldb::eTypeOptionCascade;
+    }
+
+    Flags &SetCascades(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionCascade;
+      else
+        m_flags &= ~lldb::eTypeOptionCascade;
+      return *this;
+    }
+
+    bool GetSkipPointers() const {
+      return (m_flags & lldb::eTypeOptionSkipPointers) ==
+             lldb::eTypeOptionSkipPointers;
+    }
+
+    Flags &SetSkipPointers(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipPointers;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipPointers;
+      return *this;
+    }
+
+    bool GetSkipReferences() const {
+      return (m_flags & lldb::eTypeOptionSkipReferences) ==
+             lldb::eTypeOptionSkipReferences;
+    }
+
+    Flags &SetSkipReferences(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipReferences;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipReferences;
+      return *this;
+    }
+
+    bool GetNonCacheable() const {
+      return (m_flags & lldb::eTypeOptionNonCacheable) ==
+             lldb::eTypeOptionNonCacheable;
+    }
+
+    Flags &SetNonCacheable(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionNonCacheable;
+      else
+        m_flags &= ~lldb::eTypeOptionNonCacheable;
+      return *this;
+    }
+
+    bool GetFrontEndWantsDereference() const {
+      return (m_flags & lldb::eTypeOptionFrontEndWantsDereference) ==
+             lldb::eTypeOptionFrontEndWantsDereference;
+    }
+
+    Flags &SetFrontEndWantsDereference(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionFrontEndWantsDereference;
+      else
+        m_flags &= ~lldb::eTypeOptionFrontEndWantsDereference;
+      return *this;
+    }
+
+    uint32_t GetValue() { return m_flags; }
+
+    void SetValue(uint32_t value) { m_flags = value; }
+
+  private:
+    uint32_t m_flags;
+  };
+
+  SyntheticChildren(const Flags &flags) : m_flags(flags) {}
+
+  virtual ~SyntheticChildren() = default;
+
+  bool Cascades() const { return m_flags.GetCascades(); }
+
+  bool SkipsPointers() const { return m_flags.GetSkipPointers(); }
+
+  bool SkipsReferences() const { return m_flags.GetSkipReferences(); }
+
+  bool NonCacheable() const { return m_flags.GetNonCacheable(); }
+  
+  bool WantsDereference() const { return m_flags.GetFrontEndWantsDereference();} 
+
+  void SetCascades(bool value) { m_flags.SetCascades(value); }
+
+  void SetSkipsPointers(bool value) { m_flags.SetSkipPointers(value); }
+
+  void SetSkipsReferences(bool value) { m_flags.SetSkipReferences(value); }
+
+  void SetNonCacheable(bool value) { m_flags.SetNonCacheable(value); }
+
+  uint32_t GetOptions() { return m_flags.GetValue(); }
+
+  void SetOptions(uint32_t value) { m_flags.SetValue(value); }
+
+  virtual bool IsScripted() = 0;
+
+  virtual std::string GetDescription() = 0;
+
+  virtual SyntheticChildrenFrontEnd::AutoPointer
+  GetFrontEnd(ValueObject &backend) = 0;
+
+  typedef std::shared_ptr<SyntheticChildren> SharedPointer;
+
+  uint32_t &GetRevision() { return m_my_revision; }
+
+protected:
+  uint32_t m_my_revision;
+  Flags m_flags;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SyntheticChildren);
+};
+
+class TypeFilterImpl : public SyntheticChildren {
+  std::vector<std::string> m_expression_paths;
+
+public:
+  TypeFilterImpl(const SyntheticChildren::Flags &flags)
+      : SyntheticChildren(flags), m_expression_paths() {}
+
+  TypeFilterImpl(const SyntheticChildren::Flags &flags,
+                 const std::initializer_list<const char *> items)
+      : SyntheticChildren(flags), m_expression_paths() {
+    for (auto path : items)
+      AddExpressionPath(path);
+  }
+
+  void AddExpressionPath(const char *path) {
+    AddExpressionPath(std::string(path));
+  }
+
+  void Clear() { m_expression_paths.clear(); }
+
+  size_t GetCount() const { return m_expression_paths.size(); }
+
+  const char *GetExpressionPathAtIndex(size_t i) const {
+    return m_expression_paths[i].c_str();
+  }
+
+  bool SetExpressionPathAtIndex(size_t i, const char *path) {
+    return SetExpressionPathAtIndex(i, std::string(path));
+  }
+
+  void AddExpressionPath(const std::string &path);
+
+  bool SetExpressionPathAtIndex(size_t i, const std::string &path);
+
+  bool IsScripted() override { return false; }
+
+  std::string GetDescription() override;
+
+  class FrontEnd : public SyntheticChildrenFrontEnd {
+  public:
+    FrontEnd(TypeFilterImpl *flt, ValueObject &backend)
+        : SyntheticChildrenFrontEnd(backend), filter(flt) {}
+
+    ~FrontEnd() override = default;
+
+    size_t CalculateNumChildren() override { return filter->GetCount(); }
+
+    lldb::ValueObjectSP GetChildAtIndex(size_t idx) override {
+      if (idx >= filter->GetCount())
+        return lldb::ValueObjectSP();
+      return m_backend.GetSyntheticExpressionPathChild(
+          filter->GetExpressionPathAtIndex(idx), true);
+    }
+
+    bool Update() override { return false; }
+
+    bool MightHaveChildren() override { return filter->GetCount() > 0; }
+
+    size_t GetIndexOfChildWithName(ConstString name) override;
+
+    typedef std::shared_ptr<SyntheticChildrenFrontEnd> SharedPointer;
+
+  private:
+    TypeFilterImpl *filter;
+
+    DISALLOW_COPY_AND_ASSIGN(FrontEnd);
+  };
+
+  SyntheticChildrenFrontEnd::AutoPointer
+  GetFrontEnd(ValueObject &backend) override {
+    return SyntheticChildrenFrontEnd::AutoPointer(new FrontEnd(this, backend));
+  }
+
+  typedef std::shared_ptr<TypeFilterImpl> SharedPointer;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(TypeFilterImpl);
+};
+
+class CXXSyntheticChildren : public SyntheticChildren {
+public:
+  typedef std::function<SyntheticChildrenFrontEnd *(CXXSyntheticChildren *,
+                                                    lldb::ValueObjectSP)>
+      CreateFrontEndCallback;
+  CXXSyntheticChildren(const SyntheticChildren::Flags &flags,
+                       const char *description, CreateFrontEndCallback callback)
+      : SyntheticChildren(flags), m_create_callback(callback),
+        m_description(description ? description : "") {}
+
+  bool IsScripted() override { return false; }
+
+  std::string GetDescription() override;
+
+  SyntheticChildrenFrontEnd::AutoPointer
+  GetFrontEnd(ValueObject &backend) override {
+    return SyntheticChildrenFrontEnd::AutoPointer(
+        m_create_callback(this, backend.GetSP()));
+  }
+
+protected:
+  CreateFrontEndCallback m_create_callback;
+  std::string m_description;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(CXXSyntheticChildren);
+};
+
+class ScriptedSyntheticChildren : public SyntheticChildren {
+  std::string m_python_class;
+  std::string m_python_code;
+
+public:
+  ScriptedSyntheticChildren(const SyntheticChildren::Flags &flags,
+                            const char *pclass, const char *pcode = nullptr)
+      : SyntheticChildren(flags), m_python_class(), m_python_code() {
+    if (pclass)
+      m_python_class = pclass;
+    if (pcode)
+      m_python_code = pcode;
+  }
+
+  const char *GetPythonClassName() { return m_python_class.c_str(); }
+
+  const char *GetPythonCode() { return m_python_code.c_str(); }
+
+  void SetPythonClassName(const char *fname) {
+    m_python_class.assign(fname);
+    m_python_code.clear();
+  }
+
+  void SetPythonCode(const char *script) { m_python_code.assign(script); }
+
+  std::string GetDescription() override;
+
+  bool IsScripted() override { return true; }
+
+  class FrontEnd : public SyntheticChildrenFrontEnd {
+  public:
+    FrontEnd(std::string pclass, ValueObject &backend);
+
+    ~FrontEnd() override;
+
+    bool IsValid();
+
+    size_t CalculateNumChildren() override;
+
+    size_t CalculateNumChildren(uint32_t max) override;
+
+    lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
+
+    bool Update() override;
+
+    bool MightHaveChildren() override;
+
+    size_t GetIndexOfChildWithName(ConstString name) override;
+
+    lldb::ValueObjectSP GetSyntheticValue() override;
+
+    ConstString GetSyntheticTypeName() override;
+
+    typedef std::shared_ptr<SyntheticChildrenFrontEnd> SharedPointer;
+
+  private:
+    std::string m_python_class;
+    StructuredData::ObjectSP m_wrapper_sp;
+    ScriptInterpreter *m_interpreter;
+
+    DISALLOW_COPY_AND_ASSIGN(FrontEnd);
+  };
+
+  SyntheticChildrenFrontEnd::AutoPointer
+  GetFrontEnd(ValueObject &backend) override {
+    auto synth_ptr = SyntheticChildrenFrontEnd::AutoPointer(
+        new FrontEnd(m_python_class, backend));
+    if (synth_ptr && ((FrontEnd *)synth_ptr.get())->IsValid())
+      return synth_ptr;
+    return nullptr;
+  }
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ScriptedSyntheticChildren);
+};
+} // namespace lldb_private
+
+#endif // lldb_TypeSynthetic_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/TypeValidator.h b/linux-x64/clang/include/lldb/DataFormatters/TypeValidator.h
new file mode 100644
index 0000000..531812e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/TypeValidator.h
@@ -0,0 +1,201 @@
+//===-- TypeValidator.h ------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_TypeValidator_h_
+#define lldb_TypeValidator_h_
+
+
+#include <functional>
+#include <string>
+
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class TypeValidatorImpl {
+public:
+  class Flags {
+  public:
+    Flags() : m_flags(lldb::eTypeOptionCascade) {}
+
+    Flags(const Flags &other) : m_flags(other.m_flags) {}
+
+    Flags(uint32_t value) : m_flags(value) {}
+
+    Flags &operator=(const Flags &rhs) {
+      if (&rhs != this)
+        m_flags = rhs.m_flags;
+
+      return *this;
+    }
+
+    Flags &operator=(const uint32_t &rhs) {
+      m_flags = rhs;
+      return *this;
+    }
+
+    Flags &Clear() {
+      m_flags = 0;
+      return *this;
+    }
+
+    bool GetCascades() const {
+      return (m_flags & lldb::eTypeOptionCascade) == lldb::eTypeOptionCascade;
+    }
+
+    Flags &SetCascades(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionCascade;
+      else
+        m_flags &= ~lldb::eTypeOptionCascade;
+      return *this;
+    }
+
+    bool GetSkipPointers() const {
+      return (m_flags & lldb::eTypeOptionSkipPointers) ==
+             lldb::eTypeOptionSkipPointers;
+    }
+
+    Flags &SetSkipPointers(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipPointers;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipPointers;
+      return *this;
+    }
+
+    bool GetSkipReferences() const {
+      return (m_flags & lldb::eTypeOptionSkipReferences) ==
+             lldb::eTypeOptionSkipReferences;
+    }
+
+    Flags &SetSkipReferences(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionSkipReferences;
+      else
+        m_flags &= ~lldb::eTypeOptionSkipReferences;
+      return *this;
+    }
+
+    bool GetNonCacheable() const {
+      return (m_flags & lldb::eTypeOptionNonCacheable) ==
+             lldb::eTypeOptionNonCacheable;
+    }
+
+    Flags &SetNonCacheable(bool value = true) {
+      if (value)
+        m_flags |= lldb::eTypeOptionNonCacheable;
+      else
+        m_flags &= ~lldb::eTypeOptionNonCacheable;
+      return *this;
+    }
+
+    uint32_t GetValue() { return m_flags; }
+
+    void SetValue(uint32_t value) { m_flags = value; }
+
+  private:
+    uint32_t m_flags;
+  };
+
+  TypeValidatorImpl(const Flags &flags = Flags());
+
+  typedef std::shared_ptr<TypeValidatorImpl> SharedPointer;
+
+  virtual ~TypeValidatorImpl();
+
+  bool Cascades() const { return m_flags.GetCascades(); }
+  bool SkipsPointers() const { return m_flags.GetSkipPointers(); }
+  bool SkipsReferences() const { return m_flags.GetSkipReferences(); }
+  bool NonCacheable() const { return m_flags.GetNonCacheable(); }
+
+  void SetCascades(bool value) { m_flags.SetCascades(value); }
+
+  void SetSkipsPointers(bool value) { m_flags.SetSkipPointers(value); }
+
+  void SetSkipsReferences(bool value) { m_flags.SetSkipReferences(value); }
+
+  void SetNonCacheable(bool value) { m_flags.SetNonCacheable(value); }
+
+  uint32_t GetOptions() { return m_flags.GetValue(); }
+
+  void SetOptions(uint32_t value) { m_flags.SetValue(value); }
+
+  uint32_t &GetRevision() { return m_my_revision; }
+
+  enum class Type { eTypeUnknown, eTypeCXX };
+
+  struct ValidationResult {
+    TypeValidatorResult m_result;
+    std::string m_message;
+  };
+
+  virtual Type GetType() { return Type::eTypeUnknown; }
+
+  // we are using a ValueObject* instead of a ValueObjectSP because we do not
+  // need to hold on to this for extended periods of time and we trust the
+  // ValueObject to stay around for as long as it is required for us to
+  // generate its value
+  virtual ValidationResult FormatObject(ValueObject *valobj) const = 0;
+
+  virtual std::string GetDescription() = 0;
+
+  static ValidationResult Success();
+
+  static ValidationResult Failure(std::string message);
+
+protected:
+  Flags m_flags;
+  uint32_t m_my_revision;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(TypeValidatorImpl);
+};
+
+class TypeValidatorImpl_CXX : public TypeValidatorImpl {
+public:
+  typedef std::function<TypeValidatorImpl::ValidationResult(
+      ValueObject *valobj)>
+      ValidatorFunction;
+
+  TypeValidatorImpl_CXX(ValidatorFunction f, std::string d,
+                        const TypeValidatorImpl::Flags &flags = Flags());
+
+  typedef std::shared_ptr<TypeValidatorImpl_CXX> SharedPointer;
+
+  ~TypeValidatorImpl_CXX() override;
+
+  ValidatorFunction GetValidatorFunction() const {
+    return m_validator_function;
+  }
+
+  void SetValidatorFunction(ValidatorFunction f) { m_validator_function = f; }
+
+  TypeValidatorImpl::Type GetType() override {
+    return TypeValidatorImpl::Type::eTypeCXX;
+  }
+
+  ValidationResult FormatObject(ValueObject *valobj) const override;
+
+  std::string GetDescription() override;
+
+protected:
+  std::string m_description;
+  ValidatorFunction m_validator_function;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(TypeValidatorImpl_CXX);
+};
+
+} // namespace lldb_private
+
+#endif // lldb_TypeValidator_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/ValueObjectPrinter.h b/linux-x64/clang/include/lldb/DataFormatters/ValueObjectPrinter.h
new file mode 100644
index 0000000..41adc2d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/ValueObjectPrinter.h
@@ -0,0 +1,157 @@
+//===-- ValueObjectPrinter.h ---------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_ValueObjectPrinter_h_
+#define lldb_ValueObjectPrinter_h_
+
+
+#include "lldb/lldb-private.h"
+#include "lldb/lldb-public.h"
+
+#include "lldb/Utility/Flags.h"
+
+#include "lldb/DataFormatters/DumpValueObjectOptions.h"
+#include "lldb/Symbol/CompilerType.h"
+
+namespace lldb_private {
+
+class ValueObjectPrinter {
+public:
+  ValueObjectPrinter(ValueObject *valobj, Stream *s);
+
+  ValueObjectPrinter(ValueObject *valobj, Stream *s,
+                     const DumpValueObjectOptions &options);
+
+  ~ValueObjectPrinter() {}
+
+  bool PrintValueObject();
+
+protected:
+  typedef std::set<uint64_t> InstancePointersSet;
+  typedef std::shared_ptr<InstancePointersSet> InstancePointersSetSP;
+
+  InstancePointersSetSP m_printed_instance_pointers;
+
+  // only this class (and subclasses, if any) should ever be concerned with the
+  // depth mechanism
+  ValueObjectPrinter(ValueObject *valobj, Stream *s,
+                     const DumpValueObjectOptions &options,
+                     const DumpValueObjectOptions::PointerDepth &ptr_depth,
+                     uint32_t curr_depth,
+                     InstancePointersSetSP printed_instance_pointers);
+
+  // we should actually be using delegating constructors here but some versions
+  // of GCC still have trouble with those
+  void Init(ValueObject *valobj, Stream *s,
+            const DumpValueObjectOptions &options,
+            const DumpValueObjectOptions::PointerDepth &ptr_depth,
+            uint32_t curr_depth,
+            InstancePointersSetSP printed_instance_pointers);
+
+  bool GetMostSpecializedValue();
+
+  const char *GetDescriptionForDisplay();
+
+  const char *GetRootNameForDisplay(const char *if_fail = nullptr);
+
+  bool ShouldPrintValueObject();
+
+  bool ShouldPrintValidation();
+
+  bool IsNil();
+
+  bool IsUninitialized();
+
+  bool IsPtr();
+
+  bool IsRef();
+
+  bool IsInstancePointer();
+
+  bool IsAggregate();
+
+  bool PrintValidationMarkerIfNeeded();
+
+  bool PrintValidationErrorIfNeeded();
+
+  bool PrintLocationIfNeeded();
+
+  void PrintDecl();
+
+  bool CheckScopeIfNeeded();
+
+  bool ShouldPrintEmptyBrackets(bool value_printed, bool summary_printed);
+
+  TypeSummaryImpl *GetSummaryFormatter(bool null_if_omitted = true);
+
+  void GetValueSummaryError(std::string &value, std::string &summary,
+                            std::string &error);
+
+  bool PrintValueAndSummaryIfNeeded(bool &value_printed, bool &summary_printed);
+
+  bool PrintObjectDescriptionIfNeeded(bool value_printed, bool summary_printed);
+
+  bool
+  ShouldPrintChildren(bool is_failed_description,
+                      DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
+
+  bool ShouldExpandEmptyAggregates();
+
+  ValueObject *GetValueObjectForChildrenGeneration();
+
+  void PrintChildrenPreamble();
+
+  void PrintChildrenPostamble(bool print_dotdotdot);
+
+  lldb::ValueObjectSP GenerateChild(ValueObject *synth_valobj, size_t idx);
+
+  void PrintChild(lldb::ValueObjectSP child_sp,
+                  const DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
+
+  uint32_t GetMaxNumChildrenToPrint(bool &print_dotdotdot);
+
+  void
+  PrintChildren(bool value_printed, bool summary_printed,
+                const DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
+
+  void PrintChildrenIfNeeded(bool value_printed, bool summary_printed);
+
+  bool PrintChildrenOneLiner(bool hide_names);
+
+private:
+  ValueObject *m_orig_valobj;
+  ValueObject *m_valobj;
+  Stream *m_stream;
+  DumpValueObjectOptions m_options;
+  Flags m_type_flags;
+  CompilerType m_compiler_type;
+  DumpValueObjectOptions::PointerDepth m_ptr_depth;
+  uint32_t m_curr_depth;
+  LazyBool m_should_print;
+  LazyBool m_is_nil;
+  LazyBool m_is_uninit;
+  LazyBool m_is_ptr;
+  LazyBool m_is_ref;
+  LazyBool m_is_aggregate;
+  LazyBool m_is_instance_ptr;
+  std::pair<TypeSummaryImpl *, bool> m_summary_formatter;
+  std::string m_value;
+  std::string m_summary;
+  std::string m_error;
+  bool m_val_summary_ok;
+  std::pair<TypeValidatorResult, std::string> m_validation;
+
+  friend struct StringSummaryFormat;
+
+  DISALLOW_COPY_AND_ASSIGN(ValueObjectPrinter);
+};
+
+} // namespace lldb_private
+
+#endif // lldb_ValueObjectPrinter_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/VectorIterator.h b/linux-x64/clang/include/lldb/DataFormatters/VectorIterator.h
new file mode 100644
index 0000000..cde4be4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/VectorIterator.h
@@ -0,0 +1,45 @@
+//===-- VectorIterator.h ----------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_VectorIterator_h_
+#define liblldb_VectorIterator_h_
+
+#include "lldb/lldb-forward.h"
+
+#include "lldb/DataFormatters/TypeSynthetic.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Utility/ConstString.h"
+
+namespace lldb_private {
+namespace formatters {
+class VectorIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
+public:
+  VectorIteratorSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp,
+                                  ConstString item_name);
+
+  size_t CalculateNumChildren() override;
+
+  lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
+
+  bool Update() override;
+
+  bool MightHaveChildren() override;
+
+  size_t GetIndexOfChildWithName(ConstString name) override;
+
+private:
+  ExecutionContextRef m_exe_ctx_ref;
+  ConstString m_item_name;
+  lldb::ValueObjectSP m_item_sp;
+};
+
+} // namespace formatters
+} // namespace lldb_private
+
+#endif // liblldb_CF_h_
diff --git a/linux-x64/clang/include/lldb/DataFormatters/VectorType.h b/linux-x64/clang/include/lldb/DataFormatters/VectorType.h
new file mode 100644
index 0000000..b757f75
--- /dev/null
+++ b/linux-x64/clang/include/lldb/DataFormatters/VectorType.h
@@ -0,0 +1,24 @@
+//===-- VectorType.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_VectorType_h_
+#define liblldb_VectorType_h_
+
+#include "lldb/lldb-forward.h"
+
+namespace lldb_private {
+namespace formatters {
+bool VectorTypeSummaryProvider(ValueObject &, Stream &,
+                               const TypeSummaryOptions &);
+
+SyntheticChildrenFrontEnd *
+VectorTypeSyntheticFrontEndCreator(CXXSyntheticChildren *, lldb::ValueObjectSP);
+} // namespace formatters
+} // namespace lldb_private
+
+#endif // liblldb_VectorType_h_
diff --git a/linux-x64/clang/include/lldb/Expression/DWARFExpression.h b/linux-x64/clang/include/lldb/Expression/DWARFExpression.h
new file mode 100644
index 0000000..21830a5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/DWARFExpression.h
@@ -0,0 +1,322 @@
+//===-- DWARFExpression.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DWARFExpression_h_
+#define liblldb_DWARFExpression_h_
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/Disassembler.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/Scalar.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-private.h"
+#include <functional>
+
+class DWARFUnit;
+
+namespace lldb_private {
+
+/// \class DWARFExpression DWARFExpression.h
+/// "lldb/Expression/DWARFExpression.h" Encapsulates a DWARF location
+/// expression and interprets it.
+///
+/// DWARF location expressions are used in two ways by LLDB.  The first
+/// use is to find entities specified in the debug information, since their
+/// locations are specified in precisely this language.  The second is to
+/// interpret expressions without having to run the target in cases where the
+/// overhead from copying JIT-compiled code into the target is too high or
+/// where the target cannot be run.  This class encapsulates a single DWARF
+/// location expression or a location list and interprets it.
+class DWARFExpression {
+public:
+  enum LocationListFormat : uint8_t {
+    NonLocationList,     // Not a location list
+    RegularLocationList, // Location list format used in non-split dwarf files
+    SplitDwarfLocationList, // Location list format used in pre-DWARF v5 split
+                            // dwarf files (.debug_loc.dwo)
+    LocLists,               // Location list format used in DWARF v5
+                            // (.debug_loclists/.debug_loclists.dwo).
+  };
+
+  DWARFExpression();
+
+  /// Constructor
+  ///
+  /// \param[in] data
+  ///     A data extractor configured to read the DWARF location expression's
+  ///     bytecode.
+  ///
+  /// \param[in] data_offset
+  ///     The offset of the location expression in the extractor.
+  ///
+  /// \param[in] data_length
+  ///     The byte length of the location expression.
+  DWARFExpression(lldb::ModuleSP module, const DataExtractor &data,
+                  const DWARFUnit *dwarf_cu, lldb::offset_t data_offset,
+                  lldb::offset_t data_length);
+
+  /// Destructor
+  virtual ~DWARFExpression();
+
+  /// Print the description of the expression to a stream
+  ///
+  /// \param[in] s
+  ///     The stream to print to.
+  ///
+  /// \param[in] level
+  ///     The level of verbosity to use.
+  ///
+  /// \param[in] location_list_base_addr
+  ///     If this is a location list based expression, this is the
+  ///     address of the object that owns it. NOTE: this value is
+  ///     different from the DWARF version of the location list base
+  ///     address which is compile unit relative. This base address
+  ///     is the address of the object that owns the location list.
+  ///
+  /// \param[in] abi
+  ///     An optional ABI plug-in that can be used to resolve register
+  ///     names.
+  void GetDescription(Stream *s, lldb::DescriptionLevel level,
+                      lldb::addr_t location_list_base_addr, ABI *abi) const;
+
+  /// Return true if the location expression contains data
+  bool IsValid() const;
+
+  /// Return true if a location list was provided
+  bool IsLocationList() const;
+
+  /// Search for a load address in the location list
+  ///
+  /// \param[in] process
+  ///     The process to use when resolving the load address
+  ///
+  /// \param[in] addr
+  ///     The address to resolve
+  ///
+  /// \return
+  ///     True if IsLocationList() is true and the address was found;
+  ///     false otherwise.
+  //    bool
+  //    LocationListContainsLoadAddress (Process* process, const Address &addr)
+  //    const;
+  //
+  bool LocationListContainsAddress(lldb::addr_t loclist_base_addr,
+                                   lldb::addr_t addr) const;
+
+  /// If a location is not a location list, return true if the location
+  /// contains a DW_OP_addr () opcode in the stream that matches \a file_addr.
+  /// If file_addr is LLDB_INVALID_ADDRESS, the this function will return true
+  /// if the variable there is any DW_OP_addr in a location that (yet still is
+  /// NOT a location list). This helps us detect if a variable is a global or
+  /// static variable since there is no other indication from DWARF debug
+  /// info.
+  ///
+  /// \param[in] op_addr_idx
+  ///     The DW_OP_addr index to retrieve in case there is more than
+  ///     one DW_OP_addr opcode in the location byte stream.
+  ///
+  /// \param[out] error
+  ///     If the location stream contains unknown DW_OP opcodes or the
+  ///     data is missing, \a error will be set to \b true.
+  ///
+  /// \return
+  ///     LLDB_INVALID_ADDRESS if the location doesn't contain a
+  ///     DW_OP_addr for \a op_addr_idx, otherwise a valid file address
+  lldb::addr_t GetLocation_DW_OP_addr(uint32_t op_addr_idx, bool &error) const;
+
+  bool Update_DW_OP_addr(lldb::addr_t file_addr);
+
+  void UpdateValue(uint64_t const_value, lldb::offset_t const_value_byte_size,
+                   uint8_t addr_byte_size);
+
+  void SetModule(const lldb::ModuleSP &module) { m_module_wp = module; }
+
+  bool ContainsThreadLocalStorage() const;
+
+  bool LinkThreadLocalStorage(
+      lldb::ModuleSP new_module_sp,
+      std::function<lldb::addr_t(lldb::addr_t file_addr)> const
+          &link_address_callback);
+
+  /// Tells the expression that it refers to a location list.
+  ///
+  /// \param[in] slide
+  ///     This value should be a slide that is applied to any values
+  ///     in the location list data so the values become zero based
+  ///     offsets into the object that owns the location list. We need
+  ///     to make location lists relative to the objects that own them
+  ///     so we can relink addresses on the fly.
+  void SetLocationListSlide(lldb::addr_t slide);
+
+  /// Return the call-frame-info style register kind
+  int GetRegisterKind();
+
+  /// Set the call-frame-info style register kind
+  ///
+  /// \param[in] reg_kind
+  ///     The register kind.
+  void SetRegisterKind(lldb::RegisterKind reg_kind);
+
+  /// Wrapper for the static evaluate function that accepts an
+  /// ExecutionContextScope instead of an ExecutionContext and uses member
+  /// variables to populate many operands
+  bool Evaluate(ExecutionContextScope *exe_scope,
+                lldb::addr_t loclist_base_load_addr,
+                const Value *initial_value_ptr, const Value *object_address_ptr,
+                Value &result, Status *error_ptr) const;
+
+  /// Wrapper for the static evaluate function that uses member variables to
+  /// populate many operands
+  bool Evaluate(ExecutionContext *exe_ctx, RegisterContext *reg_ctx,
+                lldb::addr_t loclist_base_load_addr,
+                const Value *initial_value_ptr, const Value *object_address_ptr,
+                Value &result, Status *error_ptr) const;
+
+  /// Evaluate a DWARF location expression in a particular context
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context in which to evaluate the location
+  ///     expression.  The location expression may access the target's
+  ///     memory, especially if it comes from the expression parser.
+  ///
+  /// \param[in] opcode_ctx
+  ///     The module which defined the expression.
+  ///
+  /// \param[in] opcodes
+  ///     This is a static method so the opcodes need to be provided
+  ///     explicitly.
+  ///
+  /// \param[in] expr_locals
+  ///     If the location expression was produced by the expression parser,
+  ///     the list of local variables referenced by the DWARF expression.
+  ///     This list should already have been populated during parsing;
+  ///     the DWARF expression refers to variables by index.  Can be NULL if
+  ///     the location expression uses no locals.
+  ///
+  /// \param[in] decl_map
+  ///     If the location expression was produced by the expression parser,
+  ///     the list of external variables referenced by the location
+  ///     expression.  Can be NULL if the location expression uses no
+  ///     external variables.
+  ///
+  ///  \param[in] reg_ctx
+  ///     An optional parameter which provides a RegisterContext for use
+  ///     when evaluating the expression (i.e. for fetching register values).
+  ///     Normally this will come from the ExecutionContext's StackFrame but
+  ///     in the case where an expression needs to be evaluated while building
+  ///     the stack frame list, this short-cut is available.
+  ///
+  /// \param[in] offset
+  ///     The offset of the location expression in the data extractor.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of the location expression.
+  ///
+  /// \param[in] reg_set
+  ///     The call-frame-info style register kind.
+  ///
+  /// \param[in] initial_value_ptr
+  ///     A value to put on top of the interpreter stack before evaluating
+  ///     the expression, if the expression is parametrized.  Can be NULL.
+  ///
+  /// \param[in] result
+  ///     A value into which the result of evaluating the expression is
+  ///     to be placed.
+  ///
+  /// \param[in] error_ptr
+  ///     If non-NULL, used to report errors in expression evaluation.
+  ///
+  /// \return
+  ///     True on success; false otherwise.  If error_ptr is non-NULL,
+  ///     details of the failure are provided through it.
+  static bool Evaluate(ExecutionContext *exe_ctx, RegisterContext *reg_ctx,
+                       lldb::ModuleSP opcode_ctx, const DataExtractor &opcodes,
+                       const DWARFUnit *dwarf_cu, const lldb::offset_t offset,
+                       const lldb::offset_t length,
+                       const lldb::RegisterKind reg_set,
+                       const Value *initial_value_ptr,
+                       const Value *object_address_ptr, Value &result,
+                       Status *error_ptr);
+
+  bool GetExpressionData(DataExtractor &data) const {
+    data = m_data;
+    return data.GetByteSize() > 0;
+  }
+
+  bool DumpLocationForAddress(Stream *s, lldb::DescriptionLevel level,
+                              lldb::addr_t loclist_base_load_addr,
+                              lldb::addr_t address, ABI *abi);
+
+  static size_t LocationListSize(const DWARFUnit *dwarf_cu,
+                                 const DataExtractor &debug_loc_data,
+                                 lldb::offset_t offset);
+
+  static bool PrintDWARFExpression(Stream &s, const DataExtractor &data,
+                                   int address_size, int dwarf_ref_size,
+                                   bool location_expression);
+
+  static void PrintDWARFLocationList(Stream &s, const DWARFUnit *cu,
+                                     const DataExtractor &debug_loc_data,
+                                     lldb::offset_t offset);
+
+  bool MatchesOperand(StackFrame &frame, const Instruction::Operand &op);
+
+private:
+  /// Pretty-prints the location expression to a stream
+  ///
+  /// \param[in] stream
+  ///     The stream to use for pretty-printing.
+  ///
+  /// \param[in] offset
+  ///     The offset into the data buffer of the opcodes to be printed.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of the opcodes to be printed.
+  ///
+  /// \param[in] level
+  ///     The level of detail to use in pretty-printing.
+  ///
+  /// \param[in] abi
+  ///     An optional ABI plug-in that can be used to resolve register
+  ///     names.
+  void DumpLocation(Stream *s, lldb::offset_t offset, lldb::offset_t length,
+                    lldb::DescriptionLevel level, ABI *abi) const;
+
+  bool GetLocation(lldb::addr_t base_addr, lldb::addr_t pc,
+                   lldb::offset_t &offset, lldb::offset_t &len);
+
+  static bool AddressRangeForLocationListEntry(
+      const DWARFUnit *dwarf_cu, const DataExtractor &debug_loc_data,
+      lldb::offset_t *offset_ptr, lldb::addr_t &low_pc, lldb::addr_t &high_pc);
+
+  bool GetOpAndEndOffsets(StackFrame &frame, lldb::offset_t &op_offset,
+                          lldb::offset_t &end_offset);
+
+  /// Module which defined this expression.
+  lldb::ModuleWP m_module_wp;
+
+  /// A data extractor capable of reading opcode bytes
+  DataExtractor m_data;
+
+  /// The DWARF compile unit this expression belongs to. It is used to evaluate
+  /// values indexing into the .debug_addr section (e.g. DW_OP_GNU_addr_index,
+  /// DW_OP_GNU_const_index)
+  const DWARFUnit *m_dwarf_cu;
+
+  /// One of the defines that starts with LLDB_REGKIND_
+  lldb::RegisterKind m_reg_kind;
+
+  /// A value used to slide the location list offsets so that m_c they are
+  /// relative to the object that owns the location list (the function for
+  /// frame base and variable location lists)
+  lldb::addr_t m_loclist_slide;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_DWARFExpression_h_
diff --git a/linux-x64/clang/include/lldb/Expression/DiagnosticManager.h b/linux-x64/clang/include/lldb/Expression/DiagnosticManager.h
new file mode 100644
index 0000000..7e3e2bb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/DiagnosticManager.h
@@ -0,0 +1,165 @@
+//===-- DiagnosticManager.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_DiagnosticManager_h
+#define lldb_DiagnosticManager_h
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include <string>
+#include <vector>
+
+namespace lldb_private {
+
+enum DiagnosticOrigin {
+  eDiagnosticOriginUnknown = 0,
+  eDiagnosticOriginLLDB,
+  eDiagnosticOriginClang,
+  eDiagnosticOriginGo,
+  eDiagnosticOriginSwift,
+  eDiagnosticOriginLLVM
+};
+
+enum DiagnosticSeverity {
+  eDiagnosticSeverityError,
+  eDiagnosticSeverityWarning,
+  eDiagnosticSeverityRemark
+};
+
+const uint32_t LLDB_INVALID_COMPILER_ID = UINT32_MAX;
+
+class Diagnostic {
+  friend class DiagnosticManager;
+
+public:
+  DiagnosticOrigin getKind() const { return m_origin; }
+
+  static bool classof(const Diagnostic *diag) {
+    DiagnosticOrigin kind = diag->getKind();
+    switch (kind) {
+    case eDiagnosticOriginUnknown:
+    case eDiagnosticOriginLLDB:
+    case eDiagnosticOriginGo:
+    case eDiagnosticOriginLLVM:
+      return true;
+    case eDiagnosticOriginClang:
+    case eDiagnosticOriginSwift:
+      return false;
+    }
+  }
+
+  Diagnostic(llvm::StringRef message, DiagnosticSeverity severity,
+             DiagnosticOrigin origin, uint32_t compiler_id)
+      : m_message(message), m_severity(severity), m_origin(origin),
+        m_compiler_id(compiler_id) {}
+
+  Diagnostic(const Diagnostic &rhs)
+      : m_message(rhs.m_message), m_severity(rhs.m_severity),
+        m_origin(rhs.m_origin), m_compiler_id(rhs.m_compiler_id) {}
+
+  virtual ~Diagnostic() = default;
+
+  virtual bool HasFixIts() const { return false; }
+
+  DiagnosticSeverity GetSeverity() const { return m_severity; }
+
+  uint32_t GetCompilerID() const { return m_compiler_id; }
+
+  llvm::StringRef GetMessage() const { return m_message; }
+
+  void AppendMessage(llvm::StringRef message,
+                     bool precede_with_newline = true) {
+    if (precede_with_newline)
+      m_message.push_back('\n');
+    m_message.append(message);
+  }
+
+protected:
+  std::string m_message;
+  DiagnosticSeverity m_severity;
+  DiagnosticOrigin m_origin;
+  uint32_t m_compiler_id; // Compiler-specific diagnostic ID
+};
+
+typedef std::vector<Diagnostic *> DiagnosticList;
+
+class DiagnosticManager {
+public:
+  void Clear() {
+    m_diagnostics.clear();
+    m_fixed_expression.clear();
+  }
+
+  // The diagnostic manager holds a list of diagnostics, which are owned by the
+  // manager.
+  const DiagnosticList &Diagnostics() { return m_diagnostics; }
+
+  ~DiagnosticManager() {
+    for (Diagnostic *diag : m_diagnostics) {
+      delete diag;
+    }
+  }
+
+  bool HasFixIts() {
+    for (Diagnostic *diag : m_diagnostics) {
+      if (diag->HasFixIts())
+        return true;
+    }
+    return false;
+  }
+
+  void AddDiagnostic(llvm::StringRef message, DiagnosticSeverity severity,
+                     DiagnosticOrigin origin,
+                     uint32_t compiler_id = LLDB_INVALID_COMPILER_ID) {
+    m_diagnostics.push_back(
+        new Diagnostic(message, severity, origin, compiler_id));
+  }
+
+  void AddDiagnostic(Diagnostic *diagnostic) {
+    m_diagnostics.push_back(diagnostic);
+  }
+
+  void CopyDiagnostics(DiagnosticManager &otherDiagnostics);
+
+  size_t Printf(DiagnosticSeverity severity, const char *format, ...)
+      __attribute__((format(printf, 3, 4)));
+  size_t PutString(DiagnosticSeverity severity, llvm::StringRef str);
+
+  void AppendMessageToDiagnostic(llvm::StringRef str) {
+    if (!m_diagnostics.empty()) {
+      m_diagnostics.back()->AppendMessage(str);
+    }
+  }
+
+  // Returns a string containing errors in this format:
+  //
+  // "error: error text\n
+  // warning: warning text\n
+  // remark text\n"
+  std::string GetString(char separator = '\n');
+
+  void Dump(Log *log);
+
+  const std::string &GetFixedExpression() { return m_fixed_expression; }
+
+  // Moves fixed_expression to the internal storage.
+  void SetFixedExpression(std::string fixed_expression) {
+    m_fixed_expression = std::move(fixed_expression);
+    fixed_expression.clear();
+  }
+
+protected:
+  DiagnosticList m_diagnostics;
+  std::string m_fixed_expression;
+};
+}
+
+#endif /* lldb_DiagnosticManager_h */
diff --git a/linux-x64/clang/include/lldb/Expression/Expression.h b/linux-x64/clang/include/lldb/Expression/Expression.h
new file mode 100644
index 0000000..2f0183c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/Expression.h
@@ -0,0 +1,114 @@
+//===-- Expression.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Expression_h_
+#define liblldb_Expression_h_
+
+#include <map>
+#include <string>
+#include <vector>
+
+
+#include "lldb/Expression/ExpressionTypeSystemHelper.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class RecordingMemoryManager;
+
+/// \class Expression Expression.h "lldb/Expression/Expression.h" Encapsulates
+/// a single expression for use in lldb
+///
+/// LLDB uses expressions for various purposes, notably to call functions
+/// and as a backend for the expr command.  Expression encapsulates the
+/// objects needed to parse and interpret or JIT an expression.  It uses the
+/// expression parser appropriate to the language of the expression to produce
+/// LLVM IR from the expression.
+class Expression {
+public:
+  /// Discriminator for LLVM-style RTTI (dyn_cast<> et al.)
+  enum ExpressionKind {
+    eKindFunctionCaller,
+    eKindClangFunctionCaller,
+    eKindUserExpression,
+    eKindLLVMUserExpression,
+    eKindClangUserExpression,
+    eKindUtilityFunction,
+    eKindClangUtilityFunction,
+  };
+
+  enum ResultType { eResultTypeAny, eResultTypeId };
+
+  Expression(Target &target, ExpressionKind kind);
+
+  Expression(ExecutionContextScope &exe_scope, ExpressionKind kind);
+
+  /// Destructor
+  virtual ~Expression() {}
+
+  /// Return the string that the parser should parse.  Must be a full
+  /// translation unit.
+  virtual const char *Text() = 0;
+
+  /// Return the function name that should be used for executing the
+  /// expression.  Text() should contain the definition of this function.
+  virtual const char *FunctionName() = 0;
+
+  /// Return the language that should be used when parsing.  To use the
+  /// default, return eLanguageTypeUnknown.
+  virtual lldb::LanguageType Language() { return lldb::eLanguageTypeUnknown; }
+
+  /// Return the desired result type of the function, or eResultTypeAny if
+  /// indifferent.
+  virtual ResultType DesiredResultType() { return eResultTypeAny; }
+
+  /// Flags
+
+  /// Return true if validation code should be inserted into the expression.
+  virtual bool NeedsValidation() = 0;
+
+  /// Return true if external variables in the expression should be resolved.
+  virtual bool NeedsVariableResolution() = 0;
+
+  virtual EvaluateExpressionOptions *GetOptions() { return nullptr; };
+
+  /// Return the address of the function's JIT-compiled code, or
+  /// LLDB_INVALID_ADDRESS if the function is not JIT compiled
+  lldb::addr_t StartAddress() { return m_jit_start_addr; }
+
+  /// Called to notify the expression that it is about to be executed.
+  virtual void WillStartExecuting() {}
+
+  /// Called to notify the expression that its execution has finished.
+  virtual void DidFinishExecuting() {}
+
+  virtual ExpressionTypeSystemHelper *GetTypeSystemHelper() { return nullptr; }
+
+  /// LLVM-style RTTI support.
+  ExpressionKind getKind() const { return m_kind; }
+  
+private:
+  /// LLVM-style RTTI support.
+  const ExpressionKind m_kind;
+protected:
+  lldb::TargetWP m_target_wp; /// Expression's always have to have a target...
+  lldb::ProcessWP m_jit_process_wp; /// An expression might have a process, but
+                                    /// it doesn't need to (e.g. calculator
+                                    /// mode.)
+  lldb::addr_t m_jit_start_addr; ///< The address of the JITted function within
+                                 ///the JIT allocation.  LLDB_INVALID_ADDRESS if
+                                 ///invalid.
+  lldb::addr_t m_jit_end_addr;   ///< The address of the JITted function within
+                                 ///the JIT allocation.  LLDB_INVALID_ADDRESS if
+                                 ///invalid.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Expression_h_
diff --git a/linux-x64/clang/include/lldb/Expression/ExpressionParser.h b/linux-x64/clang/include/lldb/Expression/ExpressionParser.h
new file mode 100644
index 0000000..59f7c15
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/ExpressionParser.h
@@ -0,0 +1,147 @@
+//===-- ExpressionParser.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ExpressionParser_h_
+#define liblldb_ExpressionParser_h_
+
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class IRExecutionUnit;
+
+/// \class ExpressionParser ExpressionParser.h
+/// "lldb/Expression/ExpressionParser.h" Encapsulates an instance of a
+/// compiler that can parse expressions.
+///
+/// ExpressionParser is the base class for llvm based Expression parsers.
+class ExpressionParser {
+public:
+  /// Constructor
+  ///
+  /// Initializes class variables.
+  ///
+  /// \param[in] exe_scope,
+  ///     If non-NULL, an execution context scope that can help to
+  ///     correctly create an expression with a valid process for
+  ///     optional tuning Objective-C runtime support. Can be NULL.
+  ///
+  /// \param[in] expr
+  ///     The expression to be parsed.
+  ExpressionParser(ExecutionContextScope *exe_scope, Expression &expr,
+                   bool generate_debug_info)
+      : m_expr(expr), m_generate_debug_info(generate_debug_info) {}
+
+  /// Destructor
+  virtual ~ExpressionParser(){};
+
+  /// Attempts to find possible command line completions for the given
+  /// expression.
+  ///
+  /// \param[out] request
+  ///     The completion request to fill out. The completion should be a string
+  ///     that would complete the current token at the cursor position.
+  ///     Note that the string in the list replaces the current token
+  ///     in the command line.
+  ///
+  /// \param[in] line
+  ///     The line with the completion cursor inside the expression as a string.
+  ///     The first line in the expression has the number 0.
+  ///
+  /// \param[in] pos
+  ///     The character position in the line with the completion cursor.
+  ///     If the value is 0, then the cursor is on top of the first character
+  ///     in the line (i.e. the user has requested completion from the start of
+  ///     the expression).
+  ///
+  /// \param[in] typed_pos
+  ///     The cursor position in the line as typed by the user. If the user
+  ///     expression has not been transformed in some form (e.g. wrapping it
+  ///     in a function body for C languages), then this is equal to the
+  ///     'pos' parameter. The semantics of this value are otherwise equal to
+  ///     'pos' (e.g. a value of 0 means the cursor is at start of the
+  ///     expression).
+  ///
+  /// \return
+  ///     True if we added any completion results to the output;
+  ///     false otherwise.
+  virtual bool Complete(CompletionRequest &request, unsigned line, unsigned pos,
+                        unsigned typed_pos) = 0;
+
+  /// Parse a single expression and convert it to IR using Clang.  Don't wrap
+  /// the expression in anything at all.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager in which to store the errors and warnings.
+  ///
+  /// \return
+  ///     The number of errors encountered during parsing.  0 means
+  ///     success.
+  virtual unsigned Parse(DiagnosticManager &diagnostic_manager) = 0;
+
+  /// Try to use the FixIts in the diagnostic_manager to rewrite the
+  /// expression.  If successful, the rewritten expression is stored in the
+  /// diagnostic_manager, get it out with GetFixedExpression.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager containing fixit's to apply.
+  ///
+  /// \return
+  ///     \b true if the rewrite was successful, \b false otherwise.
+  virtual bool RewriteExpression(DiagnosticManager &diagnostic_manager) {
+    return false;
+  }
+
+  /// Ready an already-parsed expression for execution, possibly evaluating it
+  /// statically.
+  ///
+  /// \param[out] func_addr
+  ///     The address to which the function has been written.
+  ///
+  /// \param[out] func_end
+  ///     The end of the function's allocated memory region.  (func_addr
+  ///     and func_end do not delimit an allocated region; the allocated
+  ///     region may begin before func_addr.)
+  ///
+  /// \param[in] execution_unit_sp
+  ///     After parsing, ownership of the execution unit for
+  ///     for the expression is handed to this shared pointer.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to write the function into.
+  ///
+  /// \param[out] can_interpret
+  ///     Set to true if the expression could be interpreted statically;
+  ///     untouched otherwise.
+  ///
+  /// \param[in] execution_policy
+  ///     Determines whether the expression must be JIT-compiled, must be
+  ///     evaluated statically, or whether this decision may be made
+  ///     opportunistically.
+  ///
+  /// \return
+  ///     An error code indicating the success or failure of the operation.
+  ///     Test with Success().
+  virtual Status
+  PrepareForExecution(lldb::addr_t &func_addr, lldb::addr_t &func_end,
+                      std::shared_ptr<IRExecutionUnit> &execution_unit_sp,
+                      ExecutionContext &exe_ctx, bool &can_interpret,
+                      lldb_private::ExecutionPolicy execution_policy) = 0;
+
+  bool GetGenerateDebugInfo() const { return m_generate_debug_info; }
+
+protected:
+  Expression &m_expr; ///< The expression to be parsed
+  bool m_generate_debug_info;
+};
+}
+
+#endif // liblldb_ExpressionParser_h_
diff --git a/linux-x64/clang/include/lldb/Expression/ExpressionSourceCode.h b/linux-x64/clang/include/lldb/Expression/ExpressionSourceCode.h
new file mode 100644
index 0000000..d0d01b5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/ExpressionSourceCode.h
@@ -0,0 +1,38 @@
+//===-- ExpressionSourceCode.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ExpressionSourceCode_h
+#define liblldb_ExpressionSourceCode_h
+
+#include "lldb/lldb-enumerations.h"
+#include "llvm/ADT/ArrayRef.h"
+
+#include <string>
+
+namespace lldb_private {
+
+class ExpressionSourceCode {
+public:
+  bool NeedsWrapping() const { return m_wrap; }
+
+  const char *GetName() const { return m_name.c_str(); }
+
+protected:
+  ExpressionSourceCode(const char *name, const char *prefix, const char *body,
+                       bool wrap)
+      : m_name(name), m_prefix(prefix), m_body(body), m_wrap(wrap) {}
+
+  std::string m_name;
+  std::string m_prefix;
+  std::string m_body;
+  bool m_wrap;
+};
+
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Expression/ExpressionTypeSystemHelper.h b/linux-x64/clang/include/lldb/Expression/ExpressionTypeSystemHelper.h
new file mode 100644
index 0000000..9c64553
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/ExpressionTypeSystemHelper.h
@@ -0,0 +1,47 @@
+//===-- ExpressionTypeSystemHelper.h ---------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef ExpressionTypeSystemHelper_h
+#define ExpressionTypeSystemHelper_h
+
+#include "llvm/Support/Casting.h"
+
+namespace lldb_private {
+
+/// \class ExpressionTypeSystemHelper ExpressionTypeSystemHelper.h
+/// "lldb/Expression/ExpressionTypeSystemHelper.h"
+/// A helper object that the Expression can pass to its ExpressionParser
+/// to provide generic information that
+/// any type of expression will need to supply.  It's only job is to support
+/// dyn_cast so that the expression parser can cast it back to the requisite
+/// specific type.
+///
+
+class ExpressionTypeSystemHelper {
+public:
+  enum LLVMCastKind {
+    eKindClangHelper,
+    eKindSwiftHelper,
+    eKindGoHelper,
+    kNumKinds
+  };
+
+  LLVMCastKind getKind() const { return m_kind; }
+
+  ExpressionTypeSystemHelper(LLVMCastKind kind) : m_kind(kind) {}
+
+  ~ExpressionTypeSystemHelper() {}
+
+protected:
+  LLVMCastKind m_kind;
+};
+
+} // namespace lldb_private
+
+#endif /* ExpressionTypeSystemHelper_h */
diff --git a/linux-x64/clang/include/lldb/Expression/ExpressionVariable.h b/linux-x64/clang/include/lldb/Expression/ExpressionVariable.h
new file mode 100644
index 0000000..08c9872
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/ExpressionVariable.h
@@ -0,0 +1,256 @@
+//===-- ExpressionVariable.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ExpressionVariable_h_
+#define liblldb_ExpressionVariable_h_
+
+#include <memory>
+#include <vector>
+
+#include "llvm/ADT/DenseMap.h"
+
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class ExpressionVariable
+    : public std::enable_shared_from_this<ExpressionVariable> {
+public:
+  // See TypeSystem.h for how to add subclasses to this.
+  enum LLVMCastKind { eKindClang, eKindSwift, eKindGo, kNumKinds };
+
+  LLVMCastKind getKind() const { return m_kind; }
+
+  ExpressionVariable(LLVMCastKind kind) : m_flags(0), m_kind(kind) {}
+
+  virtual ~ExpressionVariable();
+
+  size_t GetByteSize() { return m_frozen_sp->GetByteSize(); }
+
+  ConstString GetName() { return m_frozen_sp->GetName(); }
+
+  lldb::ValueObjectSP GetValueObject() { return m_frozen_sp; }
+
+  uint8_t *GetValueBytes();
+
+  void ValueUpdated() { m_frozen_sp->ValueUpdated(); }
+
+  RegisterInfo *GetRegisterInfo() {
+    return m_frozen_sp->GetValue().GetRegisterInfo();
+  }
+
+  void SetRegisterInfo(const RegisterInfo *reg_info) {
+    return m_frozen_sp->GetValue().SetContext(
+        Value::eContextTypeRegisterInfo, const_cast<RegisterInfo *>(reg_info));
+  }
+
+  CompilerType GetCompilerType() { return m_frozen_sp->GetCompilerType(); }
+
+  void SetCompilerType(const CompilerType &compiler_type) {
+    m_frozen_sp->GetValue().SetCompilerType(compiler_type);
+  }
+
+  void SetName(ConstString name) { m_frozen_sp->SetName(name); }
+
+  // this function is used to copy the address-of m_live_sp into m_frozen_sp
+  // this is necessary because the results of certain cast and pointer-
+  // arithmetic operations (such as those described in bugzilla issues 11588
+  // and 11618) generate frozen objects that do not have a valid address-of,
+  // which can be troublesome when using synthetic children providers.
+  // Transferring the address-of the live object solves these issues and
+  // provides the expected user-level behavior
+  void TransferAddress(bool force = false) {
+    if (m_live_sp.get() == nullptr)
+      return;
+
+    if (m_frozen_sp.get() == nullptr)
+      return;
+
+    if (force || (m_frozen_sp->GetLiveAddress() == LLDB_INVALID_ADDRESS))
+      m_frozen_sp->SetLiveAddress(m_live_sp->GetLiveAddress());
+  }
+
+  enum Flags {
+    EVNone = 0,
+    EVIsLLDBAllocated = 1 << 0, ///< This variable is resident in a location
+                                ///specifically allocated for it by LLDB in the
+                                ///target process
+    EVIsProgramReference = 1 << 1, ///< This variable is a reference to a
+                                   ///(possibly invalid) area managed by the
+                                   ///target program
+    EVNeedsAllocation = 1 << 2,    ///< Space for this variable has yet to be
+                                   ///allocated in the target process
+    EVIsFreezeDried = 1 << 3, ///< This variable's authoritative version is in
+                              ///m_frozen_sp (for example, for
+                              ///statically-computed results)
+    EVNeedsFreezeDry =
+        1 << 4, ///< Copy from m_live_sp to m_frozen_sp during dematerialization
+    EVKeepInTarget = 1 << 5, ///< Keep the allocation after the expression is
+                             ///complete rather than freeze drying its contents
+                             ///and freeing it
+    EVTypeIsReference = 1 << 6, ///< The original type of this variable is a
+                                ///reference, so materialize the value rather
+                                ///than the location
+    EVUnknownType = 1 << 7, ///< This is a symbol of unknown type, and the type
+                            ///must be resolved after parsing is complete
+    EVBareRegister = 1 << 8 ///< This variable is a direct reference to $pc or
+                            ///some other entity.
+  };
+
+  typedef uint16_t FlagType;
+
+  FlagType m_flags; // takes elements of Flags
+
+  // these should be private
+  lldb::ValueObjectSP m_frozen_sp;
+  lldb::ValueObjectSP m_live_sp;
+  LLVMCastKind m_kind;
+};
+
+/// \class ExpressionVariableList ExpressionVariable.h
+/// "lldb/Expression/ExpressionVariable.h"
+/// A list of variable references.
+///
+/// This class stores variables internally, acting as the permanent store.
+class ExpressionVariableList {
+public:
+  /// Implementation of methods in ExpressionVariableListBase
+  size_t GetSize() { return m_variables.size(); }
+
+  lldb::ExpressionVariableSP GetVariableAtIndex(size_t index) {
+    lldb::ExpressionVariableSP var_sp;
+    if (index < m_variables.size())
+      var_sp = m_variables[index];
+    return var_sp;
+  }
+
+  size_t AddVariable(const lldb::ExpressionVariableSP &var_sp) {
+    m_variables.push_back(var_sp);
+    return m_variables.size() - 1;
+  }
+
+  lldb::ExpressionVariableSP
+  AddNewlyConstructedVariable(ExpressionVariable *var) {
+    lldb::ExpressionVariableSP var_sp(var);
+    m_variables.push_back(var_sp);
+    return m_variables.back();
+  }
+
+  bool ContainsVariable(const lldb::ExpressionVariableSP &var_sp) {
+    const size_t size = m_variables.size();
+    for (size_t index = 0; index < size; ++index) {
+      if (m_variables[index].get() == var_sp.get())
+        return true;
+    }
+    return false;
+  }
+
+  /// Finds a variable by name in the list.
+  ///
+  /// \param[in] name
+  ///     The name of the requested variable.
+  ///
+  /// \return
+  ///     The variable requested, or nullptr if that variable is not in the
+  ///     list.
+  lldb::ExpressionVariableSP GetVariable(ConstString name) {
+    lldb::ExpressionVariableSP var_sp;
+    for (size_t index = 0, size = GetSize(); index < size; ++index) {
+      var_sp = GetVariableAtIndex(index);
+      if (var_sp->GetName() == name)
+        return var_sp;
+    }
+    var_sp.reset();
+    return var_sp;
+  }
+
+  lldb::ExpressionVariableSP GetVariable(llvm::StringRef name) {
+    if (name.empty())
+      return nullptr;
+
+    for (size_t index = 0, size = GetSize(); index < size; ++index) {
+      auto var_sp = GetVariableAtIndex(index);
+      llvm::StringRef var_name_str = var_sp->GetName().GetStringRef();
+      if (var_name_str == name)
+        return var_sp;
+    }
+    return nullptr;
+  }
+
+  void RemoveVariable(lldb::ExpressionVariableSP var_sp) {
+    for (std::vector<lldb::ExpressionVariableSP>::iterator
+             vi = m_variables.begin(),
+             ve = m_variables.end();
+         vi != ve; ++vi) {
+      if (vi->get() == var_sp.get()) {
+        m_variables.erase(vi);
+        return;
+      }
+    }
+  }
+
+  void Clear() { m_variables.clear(); }
+
+private:
+  std::vector<lldb::ExpressionVariableSP> m_variables;
+};
+
+class PersistentExpressionState : public ExpressionVariableList {
+public:
+  // See TypeSystem.h for how to add subclasses to this.
+  enum LLVMCastKind { eKindClang, eKindSwift, eKindGo, kNumKinds };
+
+  LLVMCastKind getKind() const { return m_kind; }
+
+  PersistentExpressionState(LLVMCastKind kind) : m_kind(kind) {}
+
+  virtual ~PersistentExpressionState();
+
+  virtual lldb::ExpressionVariableSP
+  CreatePersistentVariable(const lldb::ValueObjectSP &valobj_sp) = 0;
+
+  virtual lldb::ExpressionVariableSP
+  CreatePersistentVariable(ExecutionContextScope *exe_scope,
+                           ConstString name, const CompilerType &type,
+                           lldb::ByteOrder byte_order,
+                           uint32_t addr_byte_size) = 0;
+
+  /// Return a new persistent variable name with the specified prefix.
+  ConstString GetNextPersistentVariableName(Target &target,
+                                            llvm::StringRef prefix);
+
+  virtual llvm::StringRef
+  GetPersistentVariablePrefix(bool is_error = false) const = 0;
+
+  virtual void
+  RemovePersistentVariable(lldb::ExpressionVariableSP variable) = 0;
+
+  virtual llvm::Optional<CompilerType>
+  GetCompilerTypeFromPersistentDecl(ConstString type_name) = 0;
+
+  virtual lldb::addr_t LookupSymbol(ConstString name);
+
+  void RegisterExecutionUnit(lldb::IRExecutionUnitSP &execution_unit_sp);
+
+private:
+  LLVMCastKind m_kind;
+
+  typedef std::set<lldb::IRExecutionUnitSP> ExecutionUnitSet;
+  ExecutionUnitSet
+      m_execution_units; ///< The execution units that contain valuable symbols.
+
+  typedef llvm::DenseMap<const char *, lldb::addr_t> SymbolMap;
+  SymbolMap
+      m_symbol_map; ///< The addresses of the symbols in m_execution_units.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ExpressionVariable_h_
diff --git a/linux-x64/clang/include/lldb/Expression/FunctionCaller.h b/linux-x64/clang/include/lldb/Expression/FunctionCaller.h
new file mode 100644
index 0000000..ea9d020
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/FunctionCaller.h
@@ -0,0 +1,350 @@
+//===-- FunctionCaller.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_FunctionCaller_h_
+#define liblldb_FunctionCaller_h_
+
+#include <list>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/Value.h"
+#include "lldb/Expression/Expression.h"
+#include "lldb/Expression/ExpressionParser.h"
+#include "lldb/Symbol/CompilerType.h"
+
+namespace lldb_private {
+
+/// \class FunctionCaller FunctionCaller.h "lldb/Expression/FunctionCaller.h"
+/// Encapsulates a function that can be called.
+///
+/// A given FunctionCaller object can handle a single function signature.
+/// Once constructed, it can set up any number of concurrent calls to
+/// functions with that signature.
+///
+/// It performs the call by synthesizing a structure that contains the pointer
+/// to the function and the arguments that should be passed to that function,
+/// and producing a special-purpose JIT-compiled function that accepts a void*
+/// pointing to this struct as its only argument and calls the function in the
+/// struct with the written arguments.  This method lets Clang handle the
+/// vagaries of function calling conventions.
+///
+/// The simplest use of the FunctionCaller is to construct it with a function
+/// representative of the signature you want to use, then call
+/// ExecuteFunction(ExecutionContext &, Stream &, Value &).
+///
+/// If you need to reuse the arguments for several calls, you can call
+/// InsertFunction() followed by WriteFunctionArguments(), which will return
+/// the location of the args struct for the wrapper function in args_addr_ref.
+///
+/// If you need to call the function on the thread plan stack, you can also
+/// call InsertFunction() followed by GetThreadPlanToCallFunction().
+///
+/// Any of the methods that take arg_addr_ptr or arg_addr_ref can be passed a
+/// pointer set to LLDB_INVALID_ADDRESS and new structure will be allocated
+/// and its address returned in that variable.
+///
+/// Any of the methods that take arg_addr_ptr can be passed nullptr, and the
+/// argument space will be managed for you.
+class FunctionCaller : public Expression {
+public:
+  /// LLVM-style RTTI support.
+  static bool classof(const Expression *E) {
+    return E->getKind() == eKindFunctionCaller;
+  }
+  
+  /// Constructor
+  ///
+  /// \param[in] exe_scope
+  ///     An execution context scope that gets us at least a target and
+  ///     process.
+  ///
+  /// \param[in] ast_context
+  ///     The AST context to evaluate argument types in.
+  ///
+  /// \param[in] return_qualtype
+  ///     An opaque Clang QualType for the function result.  Should be
+  ///     defined in ast_context.
+  ///
+  /// \param[in] function_address
+  ///     The address of the function to call.
+  ///
+  /// \param[in] arg_value_list
+  ///     The default values to use when calling this function.  Can
+  ///     be overridden using WriteFunctionArguments().
+  FunctionCaller(ExecutionContextScope &exe_scope,
+                 const CompilerType &return_type,
+                 const Address &function_address,
+                 const ValueList &arg_value_list, const char *name);
+
+  /// Destructor
+  ~FunctionCaller() override;
+
+  /// Compile the wrapper function
+  ///
+  /// \param[in] thread_to_use_sp
+  ///     Compilation might end up calling functions.  Pass in the thread you
+  ///     want the compilation to use.  If you pass in an empty ThreadSP it will
+  ///     use the currently selected thread.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager to report parser errors to.
+  ///
+  /// \return
+  ///     The number of errors.
+  virtual unsigned CompileFunction(lldb::ThreadSP thread_to_use_sp,
+                                   DiagnosticManager &diagnostic_manager) = 0;
+
+  /// Insert the default function wrapper and its default argument struct
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to insert the function and its arguments
+  ///     into.
+  ///
+  /// \param[in,out] args_addr_ref
+  ///     The address of the structure to write the arguments into.  May
+  ///     be LLDB_INVALID_ADDRESS; if it is, a new structure is allocated
+  ///     and args_addr_ref is pointed to it.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager to report errors to.
+  ///
+  /// \return
+  ///     True on success; false otherwise.
+  bool InsertFunction(ExecutionContext &exe_ctx, lldb::addr_t &args_addr_ref,
+                      DiagnosticManager &diagnostic_manager);
+
+  /// Insert the default function wrapper (using the JIT)
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to insert the function and its arguments
+  ///     into.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager to report errors to.
+  ///
+  /// \return
+  ///     True on success; false otherwise.
+  bool WriteFunctionWrapper(ExecutionContext &exe_ctx,
+                            DiagnosticManager &diagnostic_manager);
+
+  /// Insert the default function argument struct
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to insert the function and its arguments
+  ///     into.
+  ///
+  /// \param[in,out] args_addr_ref
+  ///     The address of the structure to write the arguments into.  May
+  ///     be LLDB_INVALID_ADDRESS; if it is, a new structure is allocated
+  ///     and args_addr_ref is pointed to it.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager to report errors to.
+  ///
+  /// \return
+  ///     True on success; false otherwise.
+  bool WriteFunctionArguments(ExecutionContext &exe_ctx,
+                              lldb::addr_t &args_addr_ref,
+                              DiagnosticManager &diagnostic_manager);
+
+  /// Insert an argument struct with a non-default function address and non-
+  /// default argument values
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to insert the function and its arguments
+  ///     into.
+  ///
+  /// \param[in,out] args_addr_ref
+  ///     The address of the structure to write the arguments into.  May
+  ///     be LLDB_INVALID_ADDRESS; if it is, a new structure is allocated
+  ///     and args_addr_ref is pointed at it.
+  ///
+  /// \param[in] arg_values
+  ///     The values of the function's arguments.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager to report errors to.
+  ///
+  /// \return
+  ///     True on success; false otherwise.
+  bool WriteFunctionArguments(ExecutionContext &exe_ctx,
+                              lldb::addr_t &args_addr_ref,
+                              ValueList &arg_values,
+                              DiagnosticManager &diagnostic_manager);
+
+  /// Run the function this FunctionCaller was created with.
+  ///
+  /// This is the full version.
+  ///
+  /// \param[in] exe_ctx
+  ///     The thread & process in which this function will run.
+  ///
+  /// \param[in] args_addr_ptr
+  ///     If nullptr, the function will take care of allocating & deallocating
+  ///     the wrapper
+  ///     args structure.  Otherwise, if set to LLDB_INVALID_ADDRESS, a new
+  ///     structure
+  ///     will be allocated, filled and the address returned to you.  You are
+  ///     responsible
+  ///     for deallocating it.  And if passed in with a value other than
+  ///     LLDB_INVALID_ADDRESS,
+  ///     this should point to an already allocated structure with the values
+  ///     already written.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager to report errors to.
+  ///
+  /// \param[in] options
+  ///     The options for this expression execution.
+  ///
+  /// \param[out] results
+  ///     The result value will be put here after running the function.
+  ///
+  /// \return
+  ///     Returns one of the ExpressionResults enum indicating function call
+  ///     status.
+  lldb::ExpressionResults
+  ExecuteFunction(ExecutionContext &exe_ctx, lldb::addr_t *args_addr_ptr,
+                  const EvaluateExpressionOptions &options,
+                  DiagnosticManager &diagnostic_manager, Value &results);
+
+  /// Get a thread plan to run the function this FunctionCaller was created
+  /// with.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to insert the function and its arguments
+  ///     into.
+  ///
+  /// \param[in] func_addr
+  ///     The address of the function in the target process.
+  ///
+  /// \param[in] args_addr
+  ///     The address of the argument struct.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     The diagnostic manager to report errors to.
+  ///
+  /// \param[in] stop_others
+  ///     True if other threads should pause during execution.
+  ///
+  /// \param[in] unwind_on_error
+  ///     True if the thread plan may simply be discarded if an error occurs.
+  ///
+  /// \return
+  ///     A ThreadPlan shared pointer for executing the function.
+  lldb::ThreadPlanSP
+  GetThreadPlanToCallFunction(ExecutionContext &exe_ctx, lldb::addr_t args_addr,
+                              const EvaluateExpressionOptions &options,
+                              DiagnosticManager &diagnostic_manager);
+
+  /// Get the result of the function from its struct
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to retrieve the result from.
+  ///
+  /// \param[in] args_addr
+  ///     The address of the argument struct.
+  ///
+  /// \param[out] ret_value
+  ///     The value returned by the function.
+  ///
+  /// \return
+  ///     True on success; false otherwise.
+  bool FetchFunctionResults(ExecutionContext &exe_ctx, lldb::addr_t args_addr,
+                            Value &ret_value);
+
+  /// Deallocate the arguments structure
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to insert the function and its arguments
+  ///     into.
+  ///
+  /// \param[in] args_addr
+  ///     The address of the argument struct.
+  void DeallocateFunctionResults(ExecutionContext &exe_ctx,
+                                 lldb::addr_t args_addr);
+
+  /// Interface for ClangExpression
+
+  /// Return the string that the parser should parse.  Must be a full
+  /// translation unit.
+  const char *Text() override { return m_wrapper_function_text.c_str(); }
+
+  /// Return the function name that should be used for executing the
+  /// expression.  Text() should contain the definition of this function.
+  const char *FunctionName() override {
+    return m_wrapper_function_name.c_str();
+  }
+
+  /// Return the object that the parser should use when registering local
+  /// variables. May be nullptr if the Expression doesn't care.
+  ExpressionVariableList *LocalVariables() { return nullptr; }
+
+  /// Return true if validation code should be inserted into the expression.
+  bool NeedsValidation() override { return false; }
+
+  /// Return true if external variables in the expression should be resolved.
+  bool NeedsVariableResolution() override { return false; }
+
+  ValueList GetArgumentValues() const { return m_arg_values; }
+
+protected:
+  // Note: the parser needs to be destructed before the execution unit, so
+  // declare the execution unit first.
+  std::shared_ptr<IRExecutionUnit> m_execution_unit_sp;
+  std::unique_ptr<ExpressionParser>
+      m_parser; ///< The parser responsible for compiling the function.
+                ///< This will get made in CompileFunction, so it is
+                ///< safe to access it after that.
+
+  lldb::ModuleWP m_jit_module_wp;
+  std::string
+      m_name; ///< The name of this clang function - for debugging purposes.
+
+  Function *m_function_ptr; ///< The function we're going to call. May be
+                            ///nullptr if we don't have debug info for the
+                            ///function.
+  Address m_function_addr;  ///< If we don't have the FunctionSP, we at least
+                            ///need the address & return type.
+  CompilerType m_function_return_type; ///< The opaque clang qual type for the
+                                       ///function return type.
+
+  std::string m_wrapper_function_name; ///< The name of the wrapper function.
+  std::string
+      m_wrapper_function_text;       ///< The contents of the wrapper function.
+  std::string m_wrapper_struct_name; ///< The name of the struct that contains
+                                     ///the target function address, arguments,
+                                     ///and result.
+  std::list<lldb::addr_t> m_wrapper_args_addrs; ///< The addresses of the
+                                                ///arguments to the wrapper
+                                                ///function.
+
+  bool m_struct_valid; ///< True if the ASTStructExtractor has populated the
+                       ///variables below.
+
+  /// These values are populated by the ASTStructExtractor
+  size_t m_struct_size; ///< The size of the argument struct, in bytes.
+  std::vector<uint64_t>
+      m_member_offsets; ///< The offset of each member in the struct, in bytes.
+  uint64_t m_return_size;   ///< The size of the result variable, in bytes.
+  uint64_t m_return_offset; ///< The offset of the result variable in the
+                            ///struct, in bytes.
+
+  ValueList m_arg_values; ///< The default values of the arguments.
+
+  bool m_compiled; ///< True if the wrapper function has already been parsed.
+  bool
+      m_JITted; ///< True if the wrapper function has already been JIT-compiled.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_FunctionCaller_h_
diff --git a/linux-x64/clang/include/lldb/Expression/IRDynamicChecks.h b/linux-x64/clang/include/lldb/Expression/IRDynamicChecks.h
new file mode 100644
index 0000000..26f1cdb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/IRDynamicChecks.h
@@ -0,0 +1,146 @@
+//===-- IRDynamicChecks.h ---------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_IRDynamicChecks_h_
+#define liblldb_IRDynamicChecks_h_
+
+#include "lldb/lldb-types.h"
+#include "llvm/Pass.h"
+
+namespace llvm {
+class BasicBlock;
+class CallInst;
+class Constant;
+class Function;
+class Instruction;
+class Module;
+class DataLayout;
+class Value;
+}
+
+namespace lldb_private {
+
+class ClangExpressionDeclMap;
+class ExecutionContext;
+class Stream;
+
+/// \class DynamicCheckerFunctions IRDynamicChecks.h
+/// "lldb/Expression/IRDynamicChecks.h" Encapsulates dynamic check functions
+/// used by expressions.
+///
+/// Each of the utility functions encapsulated in this class is responsible
+/// for validating some data that an expression is about to use.  Examples
+/// are:
+///
+/// a = *b;     // check that b is a valid pointer [b init];   // check that b
+/// is a valid object to send "init" to
+///
+/// The class installs each checker function into the target process and makes
+/// it available to IRDynamicChecks to use.
+class DynamicCheckerFunctions {
+public:
+  /// Constructor
+  DynamicCheckerFunctions();
+
+  /// Destructor
+  ~DynamicCheckerFunctions();
+
+  /// Install the utility functions into a process.  This binds the instance
+  /// of DynamicCheckerFunctions to that process.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     A diagnostic manager to report errors to.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to install the functions into.
+  ///
+  /// \return
+  ///     True on success; false on failure, or if the functions have
+  ///     already been installed.
+  bool Install(DiagnosticManager &diagnostic_manager,
+               ExecutionContext &exe_ctx);
+
+  bool DoCheckersExplainStop(lldb::addr_t addr, Stream &message);
+
+  std::unique_ptr<UtilityFunction> m_valid_pointer_check;
+  std::unique_ptr<UtilityFunction> m_objc_object_check;
+};
+
+/// \class IRDynamicChecks IRDynamicChecks.h
+/// "lldb/Expression/IRDynamicChecks.h" Adds dynamic checks to a user-entered
+/// expression to reduce its likelihood of crashing
+///
+/// When an IR function is executed in the target process, it may cause
+/// crashes or hangs by dereferencing NULL pointers, trying to call
+/// Objective-C methods on objects that do not respond to them, and so forth.
+///
+/// IRDynamicChecks adds calls to the functions in DynamicCheckerFunctions to
+/// appropriate locations in an expression's IR.
+class IRDynamicChecks : public llvm::ModulePass {
+public:
+  /// Constructor
+  ///
+  /// \param[in] checker_functions
+  ///     The checker functions for the target process.
+  ///
+  /// \param[in] func_name
+  ///     The name of the function to prepare for execution in the target.
+  ///
+  /// \param[in] decl_map
+  ///     The mapping used to look up entities in the target process. In
+  ///     this case, used to find objc_msgSend
+  IRDynamicChecks(DynamicCheckerFunctions &checker_functions,
+                  const char *func_name = "$__lldb_expr");
+
+  /// Destructor
+  ~IRDynamicChecks() override;
+
+  /// Run this IR transformer on a single module
+  ///
+  /// \param[in] M
+  ///     The module to run on.  This module is searched for the function
+  ///     $__lldb_expr, and that function is passed to the passes one by
+  ///     one.
+  ///
+  /// \return
+  ///     True on success; false otherwise
+  bool runOnModule(llvm::Module &M) override;
+
+  /// Interface stub
+  void assignPassManager(
+      llvm::PMStack &PMS,
+      llvm::PassManagerType T = llvm::PMT_ModulePassManager) override;
+
+  /// Returns PMT_ModulePassManager
+  llvm::PassManagerType getPotentialPassManagerType() const override;
+
+private:
+  /// A basic block-level pass to find all pointer dereferences and
+  /// validate them before use.
+
+  /// The top-level pass implementation
+  ///
+  /// \param[in] M
+  ///     The module currently being processed.
+  ///
+  /// \param[in] BB
+  ///     The basic block currently being processed.
+  ///
+  /// \return
+  ///     True on success; false otherwise
+  bool FindDataLoads(llvm::Module &M, llvm::BasicBlock &BB);
+
+  std::string m_func_name; ///< The name of the function to add checks to
+  DynamicCheckerFunctions
+      &m_checker_functions; ///< The checker functions for the process
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_IRDynamicChecks_h_
diff --git a/linux-x64/clang/include/lldb/Expression/IRExecutionUnit.h b/linux-x64/clang/include/lldb/Expression/IRExecutionUnit.h
new file mode 100644
index 0000000..beff44d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/IRExecutionUnit.h
@@ -0,0 +1,408 @@
+//===-- IRExecutionUnit.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_IRExecutionUnit_h_
+#define liblldb_IRExecutionUnit_h_
+
+#include <atomic>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "llvm/ExecutionEngine/SectionMemoryManager.h"
+#include "llvm/IR/Module.h"
+
+#include "lldb/Expression/IRMemoryMap.h"
+#include "lldb/Symbol/ObjectFile.h"
+#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Utility/DataBufferHeap.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+
+namespace llvm {
+
+class Module;
+class ExecutionEngine;
+class ObjectCache;
+
+} // namespace llvm
+
+namespace lldb_private {
+
+class Status;
+
+/// \class IRExecutionUnit IRExecutionUnit.h
+/// "lldb/Expression/IRExecutionUnit.h" Contains the IR and, optionally, JIT-
+/// compiled code for a module.
+///
+/// This class encapsulates the compiled version of an expression, in IR form
+/// (for interpretation purposes) and in raw machine code form (for execution
+/// in the target).
+///
+/// This object wraps an IR module that comes from the expression parser, and
+/// knows how to use the JIT to make it into executable code.  It can then be
+/// used as input to the IR interpreter, or the address of the executable code
+/// can be passed to a thread plan to run in the target.
+///
+/// This class creates a subclass of LLVM's SectionMemoryManager, because that
+/// is how the JIT emits code.  Because LLDB needs to move JIT-compiled code
+/// into the target process, the IRExecutionUnit knows how to copy the emitted
+/// code into the target process.
+class IRExecutionUnit : public std::enable_shared_from_this<IRExecutionUnit>,
+                        public IRMemoryMap,
+                        public ObjectFileJITDelegate {
+public:
+  /// Constructor
+  IRExecutionUnit(std::unique_ptr<llvm::LLVMContext> &context_up,
+                  std::unique_ptr<llvm::Module> &module_up, ConstString &name,
+                  const lldb::TargetSP &target_sp, const SymbolContext &sym_ctx,
+                  std::vector<std::string> &cpu_features);
+
+  /// Destructor
+  ~IRExecutionUnit() override;
+
+  ConstString GetFunctionName() { return m_name; }
+
+  llvm::Module *GetModule() { return m_module; }
+
+  llvm::Function *GetFunction() {
+    return ((m_module != nullptr) ? m_module->getFunction(m_name.AsCString())
+                                  : nullptr);
+  }
+
+  void GetRunnableInfo(Status &error, lldb::addr_t &func_addr,
+                       lldb::addr_t &func_end);
+
+  /// Accessors for IRForTarget and other clients that may want binary data
+  /// placed on their behalf.  The binary data is owned by the IRExecutionUnit
+  /// unless the client explicitly chooses to free it.
+
+  lldb::addr_t WriteNow(const uint8_t *bytes, size_t size, Status &error);
+
+  void FreeNow(lldb::addr_t allocation);
+
+  /// ObjectFileJITDelegate overrides
+  lldb::ByteOrder GetByteOrder() const override;
+
+  uint32_t GetAddressByteSize() const override;
+
+  void PopulateSymtab(lldb_private::ObjectFile *obj_file,
+                      lldb_private::Symtab &symtab) override;
+
+  void PopulateSectionList(lldb_private::ObjectFile *obj_file,
+                           lldb_private::SectionList &section_list) override;
+
+  ArchSpec GetArchitecture() override;
+
+  lldb::ModuleSP GetJITModule();
+
+  lldb::addr_t FindSymbol(ConstString name, bool &missing_weak);
+
+  void GetStaticInitializers(std::vector<lldb::addr_t> &static_initializers);
+
+  /// \class JittedFunction IRExecutionUnit.h
+  /// "lldb/Expression/IRExecutionUnit.h"
+  /// Encapsulates a single function that has been generated by the JIT.
+  ///
+  /// Functions that have been generated by the JIT are first resident in the
+  /// local process, and then placed in the target process.  JittedFunction
+  /// represents a function possibly resident in both.
+  struct JittedEntity {
+    ConstString m_name;        ///< The function's name
+    lldb::addr_t m_local_addr; ///< The address of the function in LLDB's memory
+    lldb::addr_t
+        m_remote_addr; ///< The address of the function in the target's memory
+
+    /// Constructor
+    ///
+    /// Initializes class variabes.
+    ///
+    /// \param[in] name
+    ///     The name of the function.
+    ///
+    /// \param[in] local_addr
+    ///     The address of the function in LLDB, or LLDB_INVALID_ADDRESS if
+    ///     it is not present in LLDB's memory.
+    ///
+    /// \param[in] remote_addr
+    ///     The address of the function in the target, or LLDB_INVALID_ADDRESS
+    ///     if it is not present in the target's memory.
+    JittedEntity(const char *name,
+                 lldb::addr_t local_addr = LLDB_INVALID_ADDRESS,
+                 lldb::addr_t remote_addr = LLDB_INVALID_ADDRESS)
+        : m_name(name), m_local_addr(local_addr), m_remote_addr(remote_addr) {}
+  };
+
+  struct JittedFunction : JittedEntity {
+    bool m_external;
+    JittedFunction(const char *name, bool external,
+                   lldb::addr_t local_addr = LLDB_INVALID_ADDRESS,
+                   lldb::addr_t remote_addr = LLDB_INVALID_ADDRESS)
+        : JittedEntity(name, local_addr, remote_addr), m_external(external) {}
+  };
+
+  struct JittedGlobalVariable : JittedEntity {
+    JittedGlobalVariable(const char *name,
+                         lldb::addr_t local_addr = LLDB_INVALID_ADDRESS,
+                         lldb::addr_t remote_addr = LLDB_INVALID_ADDRESS)
+        : JittedEntity(name, local_addr, remote_addr) {}
+  };
+
+  const std::vector<JittedFunction> &GetJittedFunctions() {
+    return m_jitted_functions;
+  }
+
+  const std::vector<JittedGlobalVariable> &GetJittedGlobalVariables() {
+    return m_jitted_global_variables;
+  }
+
+private:
+  /// Look up the object in m_address_map that contains a given address, find
+  /// where it was copied to, and return the remote address at the same offset
+  /// into the copied entity
+  ///
+  /// \param[in] local_address
+  ///     The address in the debugger.
+  ///
+  /// \return
+  ///     The address in the target process.
+  lldb::addr_t GetRemoteAddressForLocal(lldb::addr_t local_address);
+
+  /// Look up the object in m_address_map that contains a given address, find
+  /// where it was copied to, and return its address range in the target
+  /// process
+  ///
+  /// \param[in] local_address
+  ///     The address in the debugger.
+  ///
+  /// \return
+  ///     The range of the containing object in the target process.
+  typedef std::pair<lldb::addr_t, uintptr_t> AddrRange;
+  AddrRange GetRemoteRangeForLocal(lldb::addr_t local_address);
+
+  /// Commit all allocations to the process and record where they were stored.
+  ///
+  /// \param[in] process
+  ///     The process to allocate memory in.
+  ///
+  /// \return
+  ///     True <=> all allocations were performed successfully.
+  ///     This method will attempt to free allocated memory if the
+  ///     operation fails.
+  bool CommitAllocations(lldb::ProcessSP &process_sp);
+
+  /// Report all committed allocations to the execution engine.
+  ///
+  /// \param[in] engine
+  ///     The execution engine to notify.
+  void ReportAllocations(llvm::ExecutionEngine &engine);
+
+  /// Write the contents of all allocations to the process.
+  ///
+  /// \param[in] local_address
+  ///     The process containing the allocations.
+  ///
+  /// \return
+  ///     True <=> all allocations were performed successfully.
+  bool WriteData(lldb::ProcessSP &process_sp);
+
+  Status DisassembleFunction(Stream &stream, lldb::ProcessSP &process_sp);
+
+  struct SearchSpec;
+
+  void CollectCandidateCNames(std::vector<SearchSpec> &C_specs,
+                              ConstString name);
+
+  void CollectCandidateCPlusPlusNames(std::vector<SearchSpec> &CPP_specs,
+                                      const std::vector<SearchSpec> &C_specs,
+                                      const SymbolContext &sc);
+
+  void CollectFallbackNames(std::vector<SearchSpec> &fallback_specs,
+                            const std::vector<SearchSpec> &C_specs);
+
+  lldb::addr_t FindInSymbols(const std::vector<SearchSpec> &specs,
+                             const lldb_private::SymbolContext &sc,
+                             bool &symbol_was_missing_weak);
+
+  lldb::addr_t FindInRuntimes(const std::vector<SearchSpec> &specs,
+                              const lldb_private::SymbolContext &sc);
+
+  lldb::addr_t FindInUserDefinedSymbols(const std::vector<SearchSpec> &specs,
+                                        const lldb_private::SymbolContext &sc);
+
+  void ReportSymbolLookupError(ConstString name);
+
+  class MemoryManager : public llvm::SectionMemoryManager {
+  public:
+    MemoryManager(IRExecutionUnit &parent);
+
+    ~MemoryManager() override;
+
+    /// Allocate space for executable code, and add it to the m_spaceBlocks
+    /// map
+    ///
+    /// \param[in] Size
+    ///     The size of the area.
+    ///
+    /// \param[in] Alignment
+    ///     The required alignment of the area.
+    ///
+    /// \param[in] SectionID
+    ///     A unique identifier for the section.
+    ///
+    /// \return
+    ///     Allocated space.
+    uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment,
+                                 unsigned SectionID,
+                                 llvm::StringRef SectionName) override;
+
+    /// Allocate space for data, and add it to the m_spaceBlocks map
+    ///
+    /// \param[in] Size
+    ///     The size of the area.
+    ///
+    /// \param[in] Alignment
+    ///     The required alignment of the area.
+    ///
+    /// \param[in] SectionID
+    ///     A unique identifier for the section.
+    ///
+    /// \param[in] IsReadOnly
+    ///     Flag indicating the section is read-only.
+    ///
+    /// \return
+    ///     Allocated space.
+    uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment,
+                                 unsigned SectionID,
+                                 llvm::StringRef SectionName,
+                                 bool IsReadOnly) override;
+
+    /// Called when object loading is complete and section page permissions
+    /// can be applied. Currently unimplemented for LLDB.
+    ///
+    /// \param[out] ErrMsg
+    ///     The error that prevented the page protection from succeeding.
+    ///
+    /// \return
+    ///     True in case of failure, false in case of success.
+    bool finalizeMemory(std::string *ErrMsg) override {
+      // TODO: Ensure that the instruction cache is flushed because
+      // relocations are updated by dy-load.  See:
+      //   sys::Memory::InvalidateInstructionCache
+      //   llvm::SectionMemoryManager
+      return false;
+    }
+
+    void registerEHFrames(uint8_t *Addr, uint64_t LoadAddr,
+                          size_t Size) override {}
+
+    uint64_t getSymbolAddress(const std::string &Name) override;
+    
+    // Find the address of the symbol Name.  If Name is a missing weak symbol
+    // then missing_weak will be true.
+    uint64_t GetSymbolAddressAndPresence(const std::string &Name, 
+                                         bool &missing_weak);
+    
+    llvm::JITSymbol findSymbol(const std::string &Name) override;
+
+    void *getPointerToNamedFunction(const std::string &Name,
+                                    bool AbortOnFailure = true) override;
+
+  private:
+    std::unique_ptr<SectionMemoryManager> m_default_mm_up; ///< The memory
+                                                           /// allocator to use
+                                                           /// in actually
+                                                           /// creating space.
+                                                           /// All calls are
+                                                           /// passed through to
+                                                           /// it.
+    IRExecutionUnit &m_parent; ///< The execution unit this is a proxy for.
+  };
+
+  static const unsigned eSectionIDInvalid = (unsigned)-1;
+
+  /// \class AllocationRecord IRExecutionUnit.h
+  /// "lldb/Expression/IRExecutionUnit.h" Encapsulates a single allocation
+  /// request made by the JIT.
+  ///
+  /// Allocations made by the JIT are first queued up and then applied in bulk
+  /// to the underlying process.
+  enum class AllocationKind { Stub, Code, Data, Global, Bytes };
+
+  static lldb::SectionType
+  GetSectionTypeFromSectionName(const llvm::StringRef &name,
+                                AllocationKind alloc_kind);
+
+  struct AllocationRecord {
+    std::string m_name;
+    lldb::addr_t m_process_address;
+    uintptr_t m_host_address;
+    uint32_t m_permissions;
+    lldb::SectionType m_sect_type;
+    size_t m_size;
+    unsigned m_alignment;
+    unsigned m_section_id;
+
+    AllocationRecord(uintptr_t host_address, uint32_t permissions,
+                     lldb::SectionType sect_type, size_t size,
+                     unsigned alignment, unsigned section_id, const char *name)
+        : m_name(), m_process_address(LLDB_INVALID_ADDRESS),
+          m_host_address(host_address), m_permissions(permissions),
+          m_sect_type(sect_type), m_size(size), m_alignment(alignment),
+          m_section_id(section_id) {
+      if (name && name[0])
+        m_name = name;
+    }
+
+    void dump(Log *log);
+  };
+
+  bool CommitOneAllocation(lldb::ProcessSP &process_sp, Status &error,
+                           AllocationRecord &record);
+
+  typedef std::vector<AllocationRecord> RecordVector;
+  RecordVector m_records;
+
+  std::unique_ptr<llvm::LLVMContext> m_context_up;
+  std::unique_ptr<llvm::ExecutionEngine> m_execution_engine_up;
+  std::unique_ptr<llvm::ObjectCache> m_object_cache_up;
+  std::unique_ptr<llvm::Module>
+      m_module_up;        ///< Holder for the module until it's been handed off
+  llvm::Module *m_module; ///< Owned by the execution engine
+  std::vector<std::string> m_cpu_features;
+  std::vector<JittedFunction> m_jitted_functions; ///< A vector of all functions
+                                                  ///that have been JITted into
+                                                  ///machine code
+  std::vector<JittedGlobalVariable> m_jitted_global_variables; ///< A vector of
+                                                               ///all functions
+                                                               ///that have been
+                                                               ///JITted into
+                                                               ///machine code
+  const ConstString m_name;
+  SymbolContext m_sym_ctx; ///< Used for symbol lookups
+  std::vector<ConstString> m_failed_lookups;
+
+  std::atomic<bool> m_did_jit;
+
+  lldb::addr_t m_function_load_addr;
+  lldb::addr_t m_function_end_load_addr;
+
+  bool m_strip_underscore = true; ///< True for platforms where global symbols
+                                  ///  have a _ prefix
+  bool m_reported_allocations; ///< True after allocations have been reported.
+                               ///It is possible that
+  ///< sections will be allocated when this is true, in which case they weren't
+  ///< depended on by any function.  (Top-level code defining a variable, but
+  ///< defining no functions using that variable, would do this.)  If this
+  ///< is true, any allocations need to be committed immediately -- no
+  ///< opportunity for relocation.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_IRExecutionUnit_h_
diff --git a/linux-x64/clang/include/lldb/Expression/IRInterpreter.h b/linux-x64/clang/include/lldb/Expression/IRInterpreter.h
new file mode 100644
index 0000000..6148093
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/IRInterpreter.h
@@ -0,0 +1,55 @@
+//===-- IRInterpreter.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_IRInterpreter_h_
+#define liblldb_IRInterpreter_h_
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/lldb-public.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/Pass.h"
+
+namespace llvm {
+class Function;
+class Module;
+}
+
+namespace lldb_private {
+
+class ClangExpressionDeclMap;
+class IRMemoryMap;
+}
+
+/// \class IRInterpreter IRInterpreter.h "lldb/Expression/IRInterpreter.h"
+/// Attempt to interpret the function's code if it does not require
+///        running the target.
+///
+/// In some cases, the IR for an expression can be evaluated entirely in the
+/// debugger, manipulating variables but not executing any code in the target.
+/// The IRInterpreter attempts to do this.
+class IRInterpreter {
+public:
+  static bool CanInterpret(llvm::Module &module, llvm::Function &function,
+                           lldb_private::Status &error,
+                           const bool support_function_calls);
+
+  static bool Interpret(llvm::Module &module, llvm::Function &function,
+                        llvm::ArrayRef<lldb::addr_t> args,
+                        lldb_private::IRExecutionUnit &execution_unit,
+                        lldb_private::Status &error,
+                        lldb::addr_t stack_frame_bottom,
+                        lldb::addr_t stack_frame_top,
+                        lldb_private::ExecutionContext &exe_ctx);
+
+private:
+  static bool supportsFunction(llvm::Function &llvm_function,
+                               lldb_private::Status &err);
+};
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Expression/IRMemoryMap.h b/linux-x64/clang/include/lldb/Expression/IRMemoryMap.h
new file mode 100644
index 0000000..d6a17a9
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/IRMemoryMap.h
@@ -0,0 +1,136 @@
+//===-- IRMemoryMap.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_IRMemoryMap_h_
+#define lldb_IRMemoryMap_h_
+
+#include "lldb/Utility/DataBufferHeap.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-public.h"
+
+#include <map>
+
+namespace lldb_private {
+
+/// \class IRMemoryMap IRMemoryMap.h "lldb/Expression/IRMemoryMap.h"
+/// Encapsulates memory that may exist in the process but must
+///     also be available in the host process.
+///
+/// This class encapsulates a group of memory objects that must be readable or
+/// writable from the host process regardless of whether the process exists.
+/// This allows the IR interpreter as well as JITted code to access the same
+/// memory.  All allocations made by this class are represented as disjoint
+/// intervals.
+///
+/// Point queries against this group of memory objects can be made by the
+/// address in the tar at which they reside.  If the inferior does not exist,
+/// allocations still get made-up addresses.  If an inferior appears at some
+/// point, then those addresses need to be re-mapped.
+class IRMemoryMap {
+public:
+  IRMemoryMap(lldb::TargetSP target_sp);
+  ~IRMemoryMap();
+
+  enum AllocationPolicy : uint8_t {
+    eAllocationPolicyInvalid =
+        0, ///< It is an error for an allocation to have this policy.
+    eAllocationPolicyHostOnly, ///< This allocation was created in the host and
+                               ///will never make it into the process.
+    ///< It is an error to create other types of allocations while such
+    ///allocations exist.
+    eAllocationPolicyMirror, ///< The intent is that this allocation exist both
+                             ///in the host and the process and have
+                             ///< the same content in both.
+    eAllocationPolicyProcessOnly ///< The intent is that this allocation exist
+                                 ///only in the process.
+  };
+
+  lldb::addr_t Malloc(size_t size, uint8_t alignment, uint32_t permissions,
+                      AllocationPolicy policy, bool zero_memory, Status &error);
+  void Leak(lldb::addr_t process_address, Status &error);
+  void Free(lldb::addr_t process_address, Status &error);
+
+  void WriteMemory(lldb::addr_t process_address, const uint8_t *bytes,
+                   size_t size, Status &error);
+  void WriteScalarToMemory(lldb::addr_t process_address, Scalar &scalar,
+                           size_t size, Status &error);
+  void WritePointerToMemory(lldb::addr_t process_address, lldb::addr_t address,
+                            Status &error);
+  void ReadMemory(uint8_t *bytes, lldb::addr_t process_address, size_t size,
+                  Status &error);
+  void ReadScalarFromMemory(Scalar &scalar, lldb::addr_t process_address,
+                            size_t size, Status &error);
+  void ReadPointerFromMemory(lldb::addr_t *address,
+                             lldb::addr_t process_address, Status &error);
+  bool GetAllocSize(lldb::addr_t address, size_t &size);
+  void GetMemoryData(DataExtractor &extractor, lldb::addr_t process_address,
+                     size_t size, Status &error);
+
+  lldb::ByteOrder GetByteOrder();
+  uint32_t GetAddressByteSize();
+
+  // This function can return NULL.
+  ExecutionContextScope *GetBestExecutionContextScope() const;
+
+  lldb::TargetSP GetTarget() { return m_target_wp.lock(); }
+
+protected:
+  // This function should only be used if you know you are using the JIT. Any
+  // other cases should use GetBestExecutionContextScope().
+
+  lldb::ProcessWP &GetProcessWP() { return m_process_wp; }
+
+private:
+  struct Allocation {
+    lldb::addr_t
+        m_process_alloc; ///< The (unaligned) base for the remote allocation.
+    lldb::addr_t
+        m_process_start; ///< The base address of the allocation in the process.
+    size_t m_size;       ///< The size of the requested allocation.
+    DataBufferHeap m_data;
+
+    /// Flags. Keep these grouped together to avoid structure padding.
+    AllocationPolicy m_policy;
+    bool m_leak;
+    uint8_t m_permissions; ///< The access permissions on the memory in the
+                           /// process. In the host, the memory is always
+                           /// read/write.
+    uint8_t m_alignment;   ///< The alignment of the requested allocation.
+
+  public:
+    Allocation(lldb::addr_t process_alloc, lldb::addr_t process_start,
+               size_t size, uint32_t permissions, uint8_t alignment,
+               AllocationPolicy m_policy);
+
+    DISALLOW_COPY_AND_ASSIGN(Allocation);
+  };
+
+  static_assert(sizeof(Allocation) <=
+                    (4 * sizeof(lldb::addr_t)) + sizeof(DataBufferHeap),
+                "IRMemoryMap::Allocation is larger than expected");
+
+  lldb::ProcessWP m_process_wp;
+  lldb::TargetWP m_target_wp;
+  typedef std::map<lldb::addr_t, Allocation> AllocationMap;
+  AllocationMap m_allocations;
+
+  lldb::addr_t FindSpace(size_t size);
+  bool ContainsHostOnlyAllocations();
+  AllocationMap::iterator FindAllocation(lldb::addr_t addr, size_t size);
+
+  // Returns true if the given allocation intersects any allocation in the
+  // memory map.
+  bool IntersectsAllocation(lldb::addr_t addr, size_t size) const;
+
+  // Returns true if the two given allocations intersect each other.
+  static bool AllocationsIntersect(lldb::addr_t addr1, size_t size1,
+                                   lldb::addr_t addr2, size_t size2);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Expression/LLVMUserExpression.h b/linux-x64/clang/include/lldb/Expression/LLVMUserExpression.h
new file mode 100644
index 0000000..c2af723
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/LLVMUserExpression.h
@@ -0,0 +1,134 @@
+//===-- LLVMUserExpression.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_LLVMUserExpression_h
+#define liblldb_LLVMUserExpression_h
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "llvm/IR/LegacyPassManager.h"
+
+#include "lldb/Expression/UserExpression.h"
+
+namespace lldb_private {
+
+/// \class LLVMUserExpression LLVMUserExpression.h
+/// "lldb/Expression/LLVMUserExpression.h" Encapsulates a one-time expression
+/// for use in lldb.
+///
+/// LLDB uses expressions for various purposes, notably to call functions
+/// and as a backend for the expr command.  LLVMUserExpression is a virtual
+/// base class that encapsulates the objects needed to parse and JIT an
+/// expression. The actual parsing part will be provided by the specific
+/// implementations of LLVMUserExpression - which will be vended through the
+/// appropriate TypeSystem.
+class LLVMUserExpression : public UserExpression {
+public:
+  /// LLVM-style RTTI support.
+  static bool classof(const Expression *E) {
+    return E->getKind() == eKindLLVMUserExpression;
+  }
+
+  // The IRPasses struct is filled in by a runtime after an expression is
+  // compiled and can be used to to run fixups/analysis passes as required.
+  // EarlyPasses are run on the generated module before lldb runs its own IR
+  // fixups and inserts instrumentation code/pointer checks. LatePasses are run
+  // after the module has been processed by llvm, before the module is
+  // assembled and run in the ThreadPlan.
+  struct IRPasses {
+    IRPasses() : EarlyPasses(nullptr), LatePasses(nullptr){};
+    std::shared_ptr<llvm::legacy::PassManager> EarlyPasses;
+    std::shared_ptr<llvm::legacy::PassManager> LatePasses;
+  };
+
+  LLVMUserExpression(ExecutionContextScope &exe_scope, llvm::StringRef expr,
+                     llvm::StringRef prefix, lldb::LanguageType language,
+                     ResultType desired_type,
+                     const EvaluateExpressionOptions &options,
+                     ExpressionKind kind);
+  ~LLVMUserExpression() override;
+
+  bool FinalizeJITExecution(
+      DiagnosticManager &diagnostic_manager, ExecutionContext &exe_ctx,
+      lldb::ExpressionVariableSP &result,
+      lldb::addr_t function_stack_bottom = LLDB_INVALID_ADDRESS,
+      lldb::addr_t function_stack_top = LLDB_INVALID_ADDRESS) override;
+
+  bool CanInterpret() override { return m_can_interpret; }
+
+  /// Return the string that the parser should parse.  Must be a full
+  /// translation unit.
+  const char *Text() override { return m_transformed_text.c_str(); }
+
+  lldb::ModuleSP GetJITModule() override;
+
+protected:
+  lldb::ExpressionResults
+  DoExecute(DiagnosticManager &diagnostic_manager, ExecutionContext &exe_ctx,
+            const EvaluateExpressionOptions &options,
+            lldb::UserExpressionSP &shared_ptr_to_me,
+            lldb::ExpressionVariableSP &result) override;
+
+  virtual void ScanContext(ExecutionContext &exe_ctx,
+                           lldb_private::Status &err) = 0;
+
+  bool PrepareToExecuteJITExpression(DiagnosticManager &diagnostic_manager,
+                                     ExecutionContext &exe_ctx,
+                                     lldb::addr_t &struct_address);
+
+  virtual bool AddArguments(ExecutionContext &exe_ctx,
+                            std::vector<lldb::addr_t> &args,
+                            lldb::addr_t struct_address,
+                            DiagnosticManager &diagnostic_manager) = 0;
+
+  lldb::addr_t
+      m_stack_frame_bottom;       ///< The bottom of the allocated stack frame.
+  lldb::addr_t m_stack_frame_top; ///< The top of the allocated stack frame.
+
+  bool m_allow_cxx;  ///< True if the language allows C++.
+  bool m_allow_objc; ///< True if the language allows Objective-C.
+  std::string
+      m_transformed_text; ///< The text of the expression, as send to the parser
+
+  std::shared_ptr<IRExecutionUnit>
+      m_execution_unit_sp; ///< The execution unit the expression is stored in.
+  std::unique_ptr<Materializer> m_materializer_up; ///< The materializer to use
+                                                   /// when running the
+                                                   /// expression.
+  lldb::ModuleWP m_jit_module_wp;
+  bool m_enforce_valid_object; ///< True if the expression parser should enforce
+                               ///the presence of a valid class pointer
+  /// in order to generate the expression as a method.
+  bool m_in_cplusplus_method;  ///< True if the expression is compiled as a C++
+                               ///member function (true if it was parsed
+                               /// when exe_ctx was in a C++ method).
+  bool m_in_objectivec_method; ///< True if the expression is compiled as an
+                               ///Objective-C method (true if it was parsed
+                               /// when exe_ctx was in an Objective-C method).
+  bool m_in_static_method; ///< True if the expression is compiled as a static
+                           ///(or class) method (currently true if it
+  /// was parsed when exe_ctx was in an Objective-C class method).
+  bool m_needs_object_ptr; ///< True if "this" or "self" must be looked up and
+                           ///passed in.  False if the expression
+                           /// doesn't really use them and they can be NULL.
+  bool m_const_object;     ///< True if "this" is const.
+  Target *m_target; ///< The target for storing persistent data like types and
+                    ///variables.
+
+  bool m_can_interpret; ///< True if the expression could be evaluated
+                        ///statically; false otherwise.
+  lldb::addr_t m_materialized_address; ///< The address at which the arguments
+                                       ///to the expression have been
+                                       ///materialized.
+  Materializer::DematerializerSP m_dematerializer_sp; ///< The dematerializer.
+};
+
+} // namespace lldb_private
+#endif
diff --git a/linux-x64/clang/include/lldb/Expression/Materializer.h b/linux-x64/clang/include/lldb/Expression/Materializer.h
new file mode 100644
index 0000000..603b4e0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/Materializer.h
@@ -0,0 +1,139 @@
+//===-- Materializer.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Materializer_h
+#define liblldb_Materializer_h
+
+#include <memory>
+#include <vector>
+
+#include "lldb/Expression/IRMemoryMap.h"
+#include "lldb/Symbol/TaggedASTType.h"
+#include "lldb/Target/StackFrame.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-private-types.h"
+
+namespace lldb_private {
+
+class Materializer {
+public:
+  Materializer();
+  ~Materializer();
+
+  class Dematerializer {
+  public:
+    Dematerializer()
+        : m_materializer(nullptr), m_map(nullptr),
+          m_process_address(LLDB_INVALID_ADDRESS) {}
+
+    ~Dematerializer() { Wipe(); }
+
+    void Dematerialize(Status &err, lldb::addr_t frame_top,
+                       lldb::addr_t frame_bottom);
+
+    void Wipe();
+
+    bool IsValid() {
+      return m_materializer && m_map &&
+             (m_process_address != LLDB_INVALID_ADDRESS);
+    }
+
+  private:
+    friend class Materializer;
+
+    Dematerializer(Materializer &materializer, lldb::StackFrameSP &frame_sp,
+                   IRMemoryMap &map, lldb::addr_t process_address)
+        : m_materializer(&materializer), m_map(&map),
+          m_process_address(process_address) {
+      if (frame_sp) {
+        m_thread_wp = frame_sp->GetThread();
+        m_stack_id = frame_sp->GetStackID();
+      }
+    }
+
+    Materializer *m_materializer;
+    lldb::ThreadWP m_thread_wp;
+    StackID m_stack_id;
+    IRMemoryMap *m_map;
+    lldb::addr_t m_process_address;
+  };
+
+  typedef std::shared_ptr<Dematerializer> DematerializerSP;
+  typedef std::weak_ptr<Dematerializer> DematerializerWP;
+
+  DematerializerSP Materialize(lldb::StackFrameSP &frame_sp, IRMemoryMap &map,
+                               lldb::addr_t process_address, Status &err);
+
+  class PersistentVariableDelegate {
+  public:
+    virtual ~PersistentVariableDelegate();
+    virtual ConstString GetName() = 0;
+    virtual void DidDematerialize(lldb::ExpressionVariableSP &variable) = 0;
+  };
+
+  uint32_t
+  AddPersistentVariable(lldb::ExpressionVariableSP &persistent_variable_sp,
+                        PersistentVariableDelegate *delegate, Status &err);
+  uint32_t AddVariable(lldb::VariableSP &variable_sp, Status &err);
+  uint32_t AddResultVariable(const CompilerType &type, bool is_lvalue,
+                             bool keep_in_memory,
+                             PersistentVariableDelegate *delegate, Status &err);
+  uint32_t AddSymbol(const Symbol &symbol_sp, Status &err);
+  uint32_t AddRegister(const RegisterInfo &register_info, Status &err);
+
+  uint32_t GetStructAlignment() { return m_struct_alignment; }
+
+  uint32_t GetStructByteSize() { return m_current_offset; }
+
+  class Entity {
+  public:
+    Entity() : m_alignment(1), m_size(0), m_offset(0) {}
+
+    virtual ~Entity() = default;
+
+    virtual void Materialize(lldb::StackFrameSP &frame_sp, IRMemoryMap &map,
+                             lldb::addr_t process_address, Status &err) = 0;
+    virtual void Dematerialize(lldb::StackFrameSP &frame_sp, IRMemoryMap &map,
+                               lldb::addr_t process_address,
+                               lldb::addr_t frame_top,
+                               lldb::addr_t frame_bottom, Status &err) = 0;
+    virtual void DumpToLog(IRMemoryMap &map, lldb::addr_t process_address,
+                           Log *log) = 0;
+    virtual void Wipe(IRMemoryMap &map, lldb::addr_t process_address) = 0;
+
+    uint32_t GetAlignment() { return m_alignment; }
+
+    uint32_t GetSize() { return m_size; }
+
+    uint32_t GetOffset() { return m_offset; }
+
+    void SetOffset(uint32_t offset) { m_offset = offset; }
+
+  protected:
+    void SetSizeAndAlignmentFromType(CompilerType &type);
+
+    uint32_t m_alignment;
+    uint32_t m_size;
+    uint32_t m_offset;
+  };
+
+private:
+  uint32_t AddStructMember(Entity &entity);
+
+  typedef std::unique_ptr<Entity> EntityUP;
+  typedef std::vector<EntityUP> EntityVector;
+
+  DematerializerWP m_dematerializer_wp;
+  EntityVector m_entities;
+  uint32_t m_current_offset;
+  uint32_t m_struct_alignment;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Materializer_h
diff --git a/linux-x64/clang/include/lldb/Expression/REPL.h b/linux-x64/clang/include/lldb/Expression/REPL.h
new file mode 100644
index 0000000..850d2f6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/REPL.h
@@ -0,0 +1,163 @@
+//===-- REPL.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_REPL_h
+#define lldb_REPL_h
+
+#include <string>
+
+#include "lldb/Core/IOHandler.h"
+#include "lldb/Interpreter/OptionGroupFormat.h"
+#include "lldb/Interpreter/OptionGroupValueObjectDisplay.h"
+#include "lldb/Target/Target.h"
+
+namespace lldb_private {
+
+class REPL : public IOHandlerDelegate {
+public:
+  // See TypeSystem.h for how to add subclasses to this.
+  enum LLVMCastKind { eKindClang, eKindSwift, eKindGo, kNumKinds };
+
+  LLVMCastKind getKind() const { return m_kind; }
+
+  REPL(LLVMCastKind kind, Target &target);
+
+  ~REPL() override;
+
+  /// Get a REPL with an existing target (or, failing that, a debugger to use),
+  /// and (optional) extra arguments for the compiler.
+  ///
+  /// \param[out] error
+  ///     If this language is supported but the REPL couldn't be created, this
+  ///     error is populated with the reason.
+  ///
+  /// \param[in] language
+  ///     The language to create a REPL for.
+  ///
+  /// \param[in] debugger
+  ///     If provided, and target is nullptr, the debugger to use when setting
+  ///     up a top-level REPL.
+  ///
+  /// \param[in] target
+  ///     If provided, the target to put the REPL inside.
+  ///
+  /// \param[in] repl_options
+  ///     If provided, additional options for the compiler when parsing REPL
+  ///     expressions.
+  ///
+  /// \return
+  ///     The range of the containing object in the target process.
+  static lldb::REPLSP Create(Status &Status, lldb::LanguageType language,
+                             Debugger *debugger, Target *target,
+                             const char *repl_options);
+
+  void SetFormatOptions(const OptionGroupFormat &options) {
+    m_format_options = options;
+  }
+
+  void
+  SetValueObjectDisplayOptions(const OptionGroupValueObjectDisplay &options) {
+    m_varobj_options = options;
+  }
+
+  void SetEvaluateOptions(const EvaluateExpressionOptions &options) {
+    m_expr_options = options;
+  }
+
+  void SetCompilerOptions(const char *options) {
+    if (options)
+      m_compiler_options = options;
+  }
+
+  lldb::IOHandlerSP GetIOHandler();
+
+  Status RunLoop();
+
+  // IOHandler::Delegate functions
+  void IOHandlerActivated(IOHandler &io_handler, bool interactive) override;
+
+  bool IOHandlerInterrupt(IOHandler &io_handler) override;
+
+  void IOHandlerInputInterrupted(IOHandler &io_handler,
+                                 std::string &line) override;
+
+  const char *IOHandlerGetFixIndentationCharacters() override;
+
+  ConstString IOHandlerGetControlSequence(char ch) override;
+
+  const char *IOHandlerGetCommandPrefix() override;
+
+  const char *IOHandlerGetHelpPrologue() override;
+
+  bool IOHandlerIsInputComplete(IOHandler &io_handler,
+                                StringList &lines) override;
+
+  int IOHandlerFixIndentation(IOHandler &io_handler, const StringList &lines,
+                              int cursor_position) override;
+
+  void IOHandlerInputComplete(IOHandler &io_handler,
+                              std::string &line) override;
+
+  int IOHandlerComplete(IOHandler &io_handler, const char *current_line,
+                        const char *cursor, const char *last_char,
+                        int skip_first_n_matches, int max_matches,
+                        StringList &matches, StringList &descriptions) override;
+
+protected:
+  static int CalculateActualIndentation(const StringList &lines);
+
+  // Subclasses should override these functions to implement a functional REPL.
+
+  virtual Status DoInitialization() = 0;
+
+  virtual ConstString GetSourceFileBasename() = 0;
+
+  virtual const char *GetAutoIndentCharacters() = 0;
+
+  virtual bool SourceIsComplete(const std::string &source) = 0;
+
+  virtual lldb::offset_t GetDesiredIndentation(
+      const StringList &lines, int cursor_position,
+      int tab_size) = 0; // LLDB_INVALID_OFFSET means no change
+
+  virtual lldb::LanguageType GetLanguage() = 0;
+
+  virtual bool PrintOneVariable(Debugger &debugger,
+                                lldb::StreamFileSP &output_sp,
+                                lldb::ValueObjectSP &valobj_sp,
+                                ExpressionVariable *var = nullptr) = 0;
+
+  virtual int CompleteCode(const std::string &current_code,
+                           StringList &matches) = 0;
+
+  OptionGroupFormat m_format_options = OptionGroupFormat(lldb::eFormatDefault);
+  OptionGroupValueObjectDisplay m_varobj_options;
+  EvaluateExpressionOptions m_expr_options;
+  std::string m_compiler_options;
+
+  bool m_enable_auto_indent = true;
+  std::string m_indent_str; // Use this string for each level of indentation
+  std::string m_current_indent_str;
+  uint32_t m_current_indent_level = 0;
+
+  std::string m_repl_source_path;
+  bool m_dedicated_repl_mode = false;
+
+  StringList m_code; // All accumulated REPL statements are saved here
+
+  Target &m_target;
+  lldb::IOHandlerSP m_io_handler_sp;
+  LLVMCastKind m_kind;
+
+private:
+  std::string GetSourcePath();
+};
+
+} // namespace lldb_private
+
+#endif // lldb_REPL_h
diff --git a/linux-x64/clang/include/lldb/Expression/UserExpression.h b/linux-x64/clang/include/lldb/Expression/UserExpression.h
new file mode 100644
index 0000000..b1d52f8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/UserExpression.h
@@ -0,0 +1,315 @@
+//===-- UserExpression.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UserExpression_h_
+#define liblldb_UserExpression_h_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "lldb/Core/Address.h"
+#include "lldb/Expression/Expression.h"
+#include "lldb/Expression/Materializer.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Target/Target.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class UserExpression UserExpression.h "lldb/Expression/UserExpression.h"
+/// Encapsulates a one-time expression for use in lldb.
+///
+/// LLDB uses expressions for various purposes, notably to call functions
+/// and as a backend for the expr command.  UserExpression is a virtual base
+/// class that encapsulates the objects needed to parse and interpret or
+/// JIT an expression.  The actual parsing part will be provided by the specific
+/// implementations of UserExpression - which will be vended through the
+/// appropriate TypeSystem.
+class UserExpression : public Expression {
+public:
+  /// LLVM-style RTTI support.
+  static bool classof(const Expression *E) {
+    return E->getKind() == eKindUserExpression;
+  }
+  
+  enum { kDefaultTimeout = 500000u };
+
+  /// Constructor
+  ///
+  /// \param[in] expr
+  ///     The expression to parse.
+  ///
+  /// \param[in] expr_prefix
+  ///     If non-nullptr, a C string containing translation-unit level
+  ///     definitions to be included when the expression is parsed.
+  ///
+  /// \param[in] language
+  ///     If not eLanguageTypeUnknown, a language to use when parsing
+  ///     the expression.  Currently restricted to those languages
+  ///     supported by Clang.
+  ///
+  /// \param[in] desired_type
+  ///     If not eResultTypeAny, the type to use for the expression
+  ///     result.
+  UserExpression(ExecutionContextScope &exe_scope, llvm::StringRef expr,
+                 llvm::StringRef prefix, lldb::LanguageType language,
+                 ResultType desired_type,
+                 const EvaluateExpressionOptions &options,
+                 ExpressionKind kind);
+
+  /// Destructor
+  ~UserExpression() override;
+
+  /// Parse the expression
+  ///
+  /// \param[in] diagnostic_manager
+  ///     A diagnostic manager to report parse errors and warnings to.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to use when looking up entities that
+  ///     are needed for parsing (locations of functions, types of
+  ///     variables, persistent variables, etc.)
+  ///
+  /// \param[in] execution_policy
+  ///     Determines whether interpretation is possible or mandatory.
+  ///
+  /// \param[in] keep_result_in_memory
+  ///     True if the resulting persistent variable should reside in
+  ///     target memory, if applicable.
+  ///
+  /// \return
+  ///     True on success (no errors); false otherwise.
+  virtual bool Parse(DiagnosticManager &diagnostic_manager,
+                     ExecutionContext &exe_ctx,
+                     lldb_private::ExecutionPolicy execution_policy,
+                     bool keep_result_in_memory, bool generate_debug_info) = 0;
+
+  /// Attempts to find possible command line completions for the given
+  /// (possible incomplete) user expression.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to use when looking up entities that
+  ///     are needed for parsing and completing (locations of functions, types
+  ///     of variables, persistent variables, etc.)
+  ///
+  /// \param[out] request
+  ///     The completion request to fill out. The completion should be a string
+  ///     that would complete the current token at the cursor position.
+  ///     Note that the string in the list replaces the current token
+  ///     in the command line.
+  ///
+  /// \param[in] complete_pos
+  ///     The position of the cursor inside the user expression string.
+  ///     The completion process starts on the token that the cursor is in.
+  ///
+  /// \return
+  ///     True if we added any completion results to the output;
+  ///     false otherwise.
+  virtual bool Complete(ExecutionContext &exe_ctx, CompletionRequest &request,
+                        unsigned complete_pos) {
+    return false;
+  }
+
+  virtual bool CanInterpret() = 0;
+
+  bool MatchesContext(ExecutionContext &exe_ctx);
+
+  /// Execute the parsed expression by callinng the derived class's DoExecute
+  /// method.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     A diagnostic manager to report errors to.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to use when looking up entities that
+  ///     are needed for parsing (locations of variables, etc.)
+  ///
+  /// \param[in] options
+  ///     Expression evaluation options.
+  ///
+  /// \param[in] shared_ptr_to_me
+  ///     This is a shared pointer to this UserExpression.  This is
+  ///     needed because Execute can push a thread plan that will hold onto
+  ///     the UserExpression for an unbounded period of time.  So you
+  ///     need to give the thread plan a reference to this object that can
+  ///     keep it alive.
+  ///
+  /// \param[in] result
+  ///     A pointer to direct at the persistent variable in which the
+  ///     expression's result is stored.
+  ///
+  /// \return
+  ///     A Process::Execution results value.
+  lldb::ExpressionResults Execute(DiagnosticManager &diagnostic_manager,
+                                  ExecutionContext &exe_ctx,
+                                  const EvaluateExpressionOptions &options,
+                                  lldb::UserExpressionSP &shared_ptr_to_me,
+                                  lldb::ExpressionVariableSP &result);
+
+  /// Apply the side effects of the function to program state.
+  ///
+  /// \param[in] diagnostic_manager
+  ///     A diagnostic manager to report errors to.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to use when looking up entities that
+  ///     are needed for parsing (locations of variables, etc.)
+  ///
+  /// \param[in] result
+  ///     A pointer to direct at the persistent variable in which the
+  ///     expression's result is stored.
+  ///
+  /// \param[in] function_stack_pointer
+  ///     A pointer to the base of the function's stack frame.  This
+  ///     is used to determine whether the expression result resides in
+  ///     memory that will still be valid, or whether it needs to be
+  ///     treated as homeless for the purpose of future expressions.
+  ///
+  /// \return
+  ///     A Process::Execution results value.
+  virtual bool FinalizeJITExecution(
+      DiagnosticManager &diagnostic_manager, ExecutionContext &exe_ctx,
+      lldb::ExpressionVariableSP &result,
+      lldb::addr_t function_stack_bottom = LLDB_INVALID_ADDRESS,
+      lldb::addr_t function_stack_top = LLDB_INVALID_ADDRESS) = 0;
+
+  /// Return the string that the parser should parse.
+  const char *Text() override { return m_expr_text.c_str(); }
+
+  /// Return the string that the user typed.
+  const char *GetUserText() { return m_expr_text.c_str(); }
+
+  /// Return the function name that should be used for executing the
+  /// expression.  Text() should contain the definition of this function.
+  const char *FunctionName() override { return "$__lldb_expr"; }
+
+  /// Return the language that should be used when parsing.  To use the
+  /// default, return eLanguageTypeUnknown.
+  lldb::LanguageType Language() override { return m_language; }
+
+  /// Return the desired result type of the function, or eResultTypeAny if
+  /// indifferent.
+  ResultType DesiredResultType() override { return m_desired_type; }
+
+  /// Return true if validation code should be inserted into the expression.
+  bool NeedsValidation() override { return true; }
+
+  /// Return true if external variables in the expression should be resolved.
+  bool NeedsVariableResolution() override { return true; }
+
+  EvaluateExpressionOptions *GetOptions() override { return &m_options; }
+
+  virtual lldb::ExpressionVariableSP
+  GetResultAfterDematerialization(ExecutionContextScope *exe_scope) {
+    return lldb::ExpressionVariableSP();
+  }
+
+  virtual lldb::ModuleSP GetJITModule() { return lldb::ModuleSP(); }
+
+  /// Evaluate one expression in the scratch context of the target passed in
+  /// the exe_ctx and return its result.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to use when evaluating the expression.
+  ///
+  /// \param[in] options
+  ///     Expression evaluation options.  N.B. The language in the
+  ///     evaluation options will be used to determine the language used for
+  ///     expression evaluation.
+  ///
+  /// \param[in] expr_cstr
+  ///     A C string containing the expression to be evaluated.
+  ///
+  /// \param[in] expr_prefix
+  ///     If non-nullptr, a C string containing translation-unit level
+  ///     definitions to be included when the expression is parsed.
+  ///
+  /// \param[in,out] result_valobj_sp
+  ///      If execution is successful, the result valobj is placed here.
+  ///
+  /// \param[out] error
+  ///     Filled in with an error in case the expression evaluation
+  ///     fails to parse, run, or evaluated.
+  ///
+  /// \param[out] fixed_expression
+  ///     If non-nullptr, the fixed expression is copied into the provided
+  ///     string.
+  ///
+  /// \param[out] jit_module_sp_ptr
+  ///     If non-nullptr, used to persist the generated IR module.
+  ///
+  /// \param[in] ctx_obj
+  ///     If specified, then the expression will be evaluated in the context of
+  ///     this object. It means that the context object's address will be
+  ///     treated as `this` for the expression (the expression will be
+  ///     evaluated as if it was inside of a method of the context object's
+  ///     class, and its `this` parameter were pointing to the context object).
+  ///     The parameter makes sense for class and union types only.
+  ///     Currently there is a limitation: the context object must be located
+  ///     in the debuggee process' memory (and have the load address).
+  ///
+  /// \result
+  ///      A Process::ExpressionResults value.  eExpressionCompleted for
+  ///      success.
+  static lldb::ExpressionResults
+  Evaluate(ExecutionContext &exe_ctx, const EvaluateExpressionOptions &options,
+           llvm::StringRef expr_cstr, llvm::StringRef expr_prefix,
+           lldb::ValueObjectSP &result_valobj_sp, Status &error,
+           std::string *fixed_expression = nullptr,
+           lldb::ModuleSP *jit_module_sp_ptr = nullptr,
+           ValueObject *ctx_obj = nullptr);
+
+  static const Status::ValueType kNoResult =
+      0x1001; ///< ValueObject::GetError() returns this if there is no result
+              /// from the expression.
+
+  const char *GetFixedText() {
+    if (m_fixed_text.empty())
+      return nullptr;
+    return m_fixed_text.c_str();
+  }
+
+protected:
+  virtual lldb::ExpressionResults
+  DoExecute(DiagnosticManager &diagnostic_manager, ExecutionContext &exe_ctx,
+            const EvaluateExpressionOptions &options,
+            lldb::UserExpressionSP &shared_ptr_to_me,
+            lldb::ExpressionVariableSP &result) = 0;
+
+  static lldb::addr_t GetObjectPointer(lldb::StackFrameSP frame_sp,
+                                       ConstString &object_name, Status &err);
+
+  /// Populate m_in_cplusplus_method and m_in_objectivec_method based on the
+  /// environment.
+
+  void InstallContext(ExecutionContext &exe_ctx);
+
+  bool LockAndCheckContext(ExecutionContext &exe_ctx, lldb::TargetSP &target_sp,
+                           lldb::ProcessSP &process_sp,
+                           lldb::StackFrameSP &frame_sp);
+
+  Address m_address;       ///< The address the process is stopped in.
+  std::string m_expr_text; ///< The text of the expression, as typed by the user
+  std::string m_expr_prefix; ///< The text of the translation-level definitions,
+                             ///as provided by the user
+  std::string m_fixed_text; ///< The text of the expression with fix-its applied
+                            ///- this won't be set if the fixed text doesn't
+                            ///parse.
+  lldb::LanguageType m_language; ///< The language to use when parsing
+                                 ///(eLanguageTypeUnknown means use defaults)
+  ResultType m_desired_type; ///< The type to coerce the expression's result to.
+                             ///If eResultTypeAny, inferred from the expression.
+  EvaluateExpressionOptions
+      m_options; ///< Additional options provided by the user.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_UserExpression_h_
diff --git a/linux-x64/clang/include/lldb/Expression/UtilityFunction.h b/linux-x64/clang/include/lldb/Expression/UtilityFunction.h
new file mode 100644
index 0000000..26da081
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Expression/UtilityFunction.h
@@ -0,0 +1,120 @@
+//===-- UtilityFunction.h ----------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UtilityFunction_h_
+#define liblldb_UtilityFunction_h_
+
+#include <memory>
+#include <string>
+
+#include "lldb/Expression/Expression.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class UtilityFunction UtilityFunction.h
+/// "lldb/Expression/UtilityFunction.h" Encapsulates a bit of source code that
+/// provides a function that is callable
+///
+/// LLDB uses expressions for various purposes, notably to call functions
+/// and as a backend for the expr command.  UtilityFunction encapsulates a
+/// self-contained function meant to be used from other code.  Utility
+/// functions can perform error-checking for ClangUserExpressions,
+class UtilityFunction : public Expression {
+public:
+  /// LLVM-style RTTI support.
+  static bool classof(const Expression *E) {
+    return E->getKind() == eKindUtilityFunction;
+  }
+  
+  /// Constructor
+  ///
+  /// \param[in] text
+  ///     The text of the function.  Must be a full translation unit.
+  ///
+  /// \param[in] name
+  ///     The name of the function, as used in the text.
+  UtilityFunction(ExecutionContextScope &exe_scope, const char *text,
+                  const char *name, ExpressionKind kind);
+
+  ~UtilityFunction() override;
+
+  /// Install the utility function into a process
+  ///
+  /// \param[in] diagnostic_manager
+  ///     A diagnostic manager to print parse errors and warnings to.
+  ///
+  /// \param[in] exe_ctx
+  ///     The execution context to install the utility function to.
+  ///
+  /// \return
+  ///     True on success (no errors); false otherwise.
+  virtual bool Install(DiagnosticManager &diagnostic_manager,
+                       ExecutionContext &exe_ctx) = 0;
+
+  /// Check whether the given PC is inside the function
+  ///
+  /// Especially useful if the function dereferences nullptr to indicate a
+  /// failed assert.
+  ///
+  /// \param[in] pc
+  ///     The program counter to check.
+  ///
+  /// \return
+  ///     True if the program counter falls within the function's bounds;
+  ///     false if not (or the function is not JIT compiled)
+  bool ContainsAddress(lldb::addr_t address) {
+    // nothing is both >= LLDB_INVALID_ADDRESS and < LLDB_INVALID_ADDRESS, so
+    // this always returns false if the function is not JIT compiled yet
+    return (address >= m_jit_start_addr && address < m_jit_end_addr);
+  }
+
+  /// Return the string that the parser should parse.  Must be a full
+  /// translation unit.
+  const char *Text() override { return m_function_text.c_str(); }
+
+  /// Return the function name that should be used for executing the
+  /// expression.  Text() should contain the definition of this function.
+  const char *FunctionName() override { return m_function_name.c_str(); }
+
+  /// Return the object that the parser should use when registering local
+  /// variables. May be nullptr if the Expression doesn't care.
+  ExpressionVariableList *LocalVariables() { return nullptr; }
+
+  /// Return true if validation code should be inserted into the expression.
+  bool NeedsValidation() override { return false; }
+
+  /// Return true if external variables in the expression should be resolved.
+  bool NeedsVariableResolution() override { return false; }
+
+  // This makes the function caller function. Pass in the ThreadSP if you have
+  // one available, compilation can end up calling code (e.g. to look up
+  // indirect functions) and we don't want this to wander onto another thread.
+  FunctionCaller *MakeFunctionCaller(const CompilerType &return_type,
+                                     const ValueList &arg_value_list,
+                                     lldb::ThreadSP compilation_thread,
+                                     Status &error);
+
+  // This one retrieves the function caller that is already made.  If you
+  // haven't made it yet, this returns nullptr
+  FunctionCaller *GetFunctionCaller() { return m_caller_up.get(); }
+
+protected:
+  std::shared_ptr<IRExecutionUnit> m_execution_unit_sp;
+  lldb::ModuleWP m_jit_module_wp;
+  std::string m_function_text; ///< The text of the function.  Must be a
+                               ///well-formed translation unit.
+  std::string m_function_name; ///< The name of the function.
+  std::unique_ptr<FunctionCaller> m_caller_up;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_UtilityFunction_h_
diff --git a/linux-x64/clang/include/lldb/Host/Config.h b/linux-x64/clang/include/lldb/Host/Config.h
new file mode 100644
index 0000000..12f73c4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Config.h
@@ -0,0 +1,38 @@
+//===-- Config.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_HOST_CONFIG_H
+#define LLDB_HOST_CONFIG_H
+
+#define LLDB_CONFIG_TERMIOS_SUPPORTED
+
+#define LLDB_EDITLINE_USE_WCHAR 0
+
+#define LLDB_HAVE_EL_RFUNC_T 0
+
+/* #undef LLDB_DISABLE_POSIX */
+
+#define LLDB_LIBDIR_SUFFIX "64"
+
+#define HAVE_SYS_TYPES_H 1
+
+#define HAVE_SYS_EVENT_H 0
+
+#define HAVE_PPOLL 1
+
+#define HAVE_SIGACTION 1
+
+#define HAVE_PROCESS_VM_READV 1
+
+#define HAVE_NR_PROCESS_VM_READV 1
+
+#ifndef HAVE_LIBCOMPRESSION
+/* #undef HAVE_LIBCOMPRESSION */
+#endif
+
+#endif // #ifndef LLDB_HOST_CONFIG_H
diff --git a/linux-x64/clang/include/lldb/Host/ConnectionFileDescriptor.h b/linux-x64/clang/include/lldb/Host/ConnectionFileDescriptor.h
new file mode 100644
index 0000000..00444d0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/ConnectionFileDescriptor.h
@@ -0,0 +1,14 @@
+//===-- ConnectionFileDescriptor.h ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_ConnectionFileDescriptor_h_
+#define liblldb_Host_ConnectionFileDescriptor_h_
+
+#include "lldb/Host/posix/ConnectionFileDescriptorPosix.h"
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/Debug.h b/linux-x64/clang/include/lldb/Host/Debug.h
new file mode 100644
index 0000000..036ce1e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Debug.h
@@ -0,0 +1,151 @@
+//===-- Debug.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Debug_h_
+#define liblldb_Debug_h_
+
+#include <vector>
+
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// Tells a thread what it needs to do when the process is resumed.
+struct ResumeAction {
+  lldb::tid_t tid;       // The thread ID that this action applies to,
+                         // LLDB_INVALID_THREAD_ID for the default thread
+                         // action
+  lldb::StateType state; // Valid values are eStateStopped/eStateSuspended,
+                         // eStateRunning, and eStateStepping.
+  int signal; // When resuming this thread, resume it with this signal if this
+              // value is > 0
+};
+
+// A class that contains instructions for all threads for
+// NativeProcessProtocol::Resume(). Each thread can either run, stay suspended,
+// or step when the process is resumed. We optionally have the ability to also
+// send a signal to the thread when the action is run or step.
+class ResumeActionList {
+public:
+  ResumeActionList() : m_actions(), m_signal_handled() {}
+
+  ResumeActionList(lldb::StateType default_action, int signal)
+      : m_actions(), m_signal_handled() {
+    SetDefaultThreadActionIfNeeded(default_action, signal);
+  }
+
+  ResumeActionList(const ResumeAction *actions, size_t num_actions)
+      : m_actions(), m_signal_handled() {
+    if (actions && num_actions) {
+      m_actions.assign(actions, actions + num_actions);
+      m_signal_handled.assign(num_actions, false);
+    }
+  }
+
+  ~ResumeActionList() = default;
+
+  bool IsEmpty() const { return m_actions.empty(); }
+
+  void Append(const ResumeAction &action) {
+    m_actions.push_back(action);
+    m_signal_handled.push_back(false);
+  }
+
+  void AppendAction(lldb::tid_t tid, lldb::StateType state, int signal = 0) {
+    ResumeAction action = {tid, state, signal};
+    Append(action);
+  }
+
+  void AppendResumeAll() {
+    AppendAction(LLDB_INVALID_THREAD_ID, lldb::eStateRunning);
+  }
+
+  void AppendSuspendAll() {
+    AppendAction(LLDB_INVALID_THREAD_ID, lldb::eStateStopped);
+  }
+
+  void AppendStepAll() {
+    AppendAction(LLDB_INVALID_THREAD_ID, lldb::eStateStepping);
+  }
+
+  const ResumeAction *GetActionForThread(lldb::tid_t tid,
+                                         bool default_ok) const {
+    const size_t num_actions = m_actions.size();
+    for (size_t i = 0; i < num_actions; ++i) {
+      if (m_actions[i].tid == tid)
+        return &m_actions[i];
+    }
+    if (default_ok && tid != LLDB_INVALID_THREAD_ID)
+      return GetActionForThread(LLDB_INVALID_THREAD_ID, false);
+    return nullptr;
+  }
+
+  size_t NumActionsWithState(lldb::StateType state) const {
+    size_t count = 0;
+    const size_t num_actions = m_actions.size();
+    for (size_t i = 0; i < num_actions; ++i) {
+      if (m_actions[i].state == state)
+        ++count;
+    }
+    return count;
+  }
+
+  bool SetDefaultThreadActionIfNeeded(lldb::StateType action, int signal) {
+    if (GetActionForThread(LLDB_INVALID_THREAD_ID, true) == nullptr) {
+      // There isn't a default action so we do need to set it.
+      ResumeAction default_action = {LLDB_INVALID_THREAD_ID, action, signal};
+      m_actions.push_back(default_action);
+      m_signal_handled.push_back(false);
+      return true; // Return true as we did add the default action
+    }
+    return false;
+  }
+
+  void SetSignalHandledForThread(lldb::tid_t tid) const {
+    if (tid != LLDB_INVALID_THREAD_ID) {
+      const size_t num_actions = m_actions.size();
+      for (size_t i = 0; i < num_actions; ++i) {
+        if (m_actions[i].tid == tid)
+          m_signal_handled[i] = true;
+      }
+    }
+  }
+
+  const ResumeAction *GetFirst() const { return m_actions.data(); }
+
+  size_t GetSize() const { return m_actions.size(); }
+
+  void Clear() {
+    m_actions.clear();
+    m_signal_handled.clear();
+  }
+
+protected:
+  std::vector<ResumeAction> m_actions;
+  mutable std::vector<bool> m_signal_handled;
+};
+
+struct ThreadStopInfo {
+  lldb::StopReason reason;
+  union {
+    // eStopReasonSignal
+    struct {
+      uint32_t signo;
+    } signal;
+
+    // eStopReasonException
+    struct {
+      uint64_t type;
+      uint32_t data_count;
+      lldb::addr_t data[8];
+    } exception;
+  } details;
+};
+}
+
+#endif // liblldb_Debug_h_
diff --git a/linux-x64/clang/include/lldb/Host/Editline.h b/linux-x64/clang/include/lldb/Host/Editline.h
new file mode 100644
index 0000000..a942ede
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Editline.h
@@ -0,0 +1,367 @@
+//===-- Editline.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// TODO: wire up window size changes
+
+// If we ever get a private copy of libedit, there are a number of defects that
+// would be nice to fix;
+// a) Sometimes text just disappears while editing.  In an 80-column editor
+// paste the following text, without
+//    the quotes:
+//    "This is a test of the input system missing Hello, World!  Do you
+//    disappear when it gets to a particular length?"
+//    Now press ^A to move to the start and type 3 characters, and you'll see a
+//    good amount of the text will
+//    disappear.  It's still in the buffer, just invisible.
+// b) The prompt printing logic for dealing with ANSI formatting characters is
+// broken, which is why we're
+//    working around it here.
+// c) When resizing the terminal window, if the cursor moves between rows
+// libedit will get confused. d) The incremental search uses escape to cancel
+// input, so it's confused by
+// ANSI sequences starting with escape.
+// e) Emoji support is fairly terrible, presumably it doesn't understand
+// composed characters?
+
+#ifndef liblldb_Editline_h_
+#define liblldb_Editline_h_
+#if defined(__cplusplus)
+
+#if LLDB_EDITLINE_USE_WCHAR
+#include <codecvt>
+#endif
+#include <locale>
+#include <sstream>
+#include <vector>
+
+#include "lldb/Host/ConnectionFileDescriptor.h"
+#include "lldb/lldb-private.h"
+
+#if defined(_WIN32)
+#include "lldb/Host/windows/editlinewin.h"
+#elif !defined(__ANDROID__)
+#include <histedit.h>
+#endif
+
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include "lldb/Host/ConnectionFileDescriptor.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Predicate.h"
+
+namespace lldb_private {
+namespace line_editor {
+
+// type alias's to help manage 8 bit and wide character versions of libedit
+#if LLDB_EDITLINE_USE_WCHAR
+using EditLineStringType = std::wstring;
+using EditLineStringStreamType = std::wstringstream;
+using EditLineCharType = wchar_t;
+#else
+using EditLineStringType = std::string;
+using EditLineStringStreamType = std::stringstream;
+using EditLineCharType = char;
+#endif
+
+// At one point the callback type of el_set getchar callback changed from char
+// to wchar_t. It is not possible to detect differentiate between the two
+// versions exactly, but this is a pretty good approximation and allows us to
+// build against almost any editline version out there.
+#if LLDB_EDITLINE_USE_WCHAR || defined(EL_CLIENTDATA) || LLDB_HAVE_EL_RFUNC_T
+using EditLineGetCharType = wchar_t;
+#else
+using EditLineGetCharType = char;
+#endif
+
+typedef int (*EditlineGetCharCallbackType)(::EditLine *editline,
+                                           EditLineGetCharType *c);
+typedef unsigned char (*EditlineCommandCallbackType)(::EditLine *editline,
+                                                     int ch);
+typedef const char *(*EditlinePromptCallbackType)(::EditLine *editline);
+
+class EditlineHistory;
+
+typedef std::shared_ptr<EditlineHistory> EditlineHistorySP;
+
+typedef bool (*IsInputCompleteCallbackType)(Editline *editline,
+                                            StringList &lines, void *baton);
+
+typedef int (*FixIndentationCallbackType)(Editline *editline,
+                                          const StringList &lines,
+                                          int cursor_position, void *baton);
+
+typedef int (*CompleteCallbackType)(const char *current_line,
+                                    const char *cursor, const char *last_char,
+                                    int skip_first_n_matches, int max_matches,
+                                    StringList &matches,
+                                    StringList &descriptions, void *baton);
+
+/// Status used to decide when and how to start editing another line in
+/// multi-line sessions
+enum class EditorStatus {
+
+  /// The default state proceeds to edit the current line
+  Editing,
+
+  /// Editing complete, returns the complete set of edited lines
+  Complete,
+
+  /// End of input reported
+  EndOfInput,
+
+  /// Editing interrupted
+  Interrupted
+};
+
+/// Established locations that can be easily moved among with MoveCursor
+enum class CursorLocation {
+  /// The start of the first line in a multi-line edit session
+  BlockStart,
+
+  /// The start of the current line in a multi-line edit session
+  EditingPrompt,
+
+  /// The location of the cursor on the current line in a multi-line edit
+  /// session
+  EditingCursor,
+
+  /// The location immediately after the last character in a multi-line edit
+  /// session
+  BlockEnd
+};
+}
+
+using namespace line_editor;
+
+/// Instances of Editline provide an abstraction over libedit's EditLine
+/// facility.  Both
+/// single- and multi-line editing are supported.
+class Editline {
+public:
+  Editline(const char *editor_name, FILE *input_file, FILE *output_file,
+           FILE *error_file, bool color_prompts);
+
+  ~Editline();
+
+  /// Uses the user data storage of EditLine to retrieve an associated instance
+  /// of Editline.
+  static Editline *InstanceFor(::EditLine *editline);
+
+  /// Sets a string to be used as a prompt, or combined with a line number to
+  /// form a prompt.
+  void SetPrompt(const char *prompt);
+
+  /// Sets an alternate string to be used as a prompt for the second line and
+  /// beyond in multi-line
+  /// editing scenarios.
+  void SetContinuationPrompt(const char *continuation_prompt);
+
+  /// Required to update the width of the terminal registered for I/O.  It is
+  /// critical that this
+  /// be correct at all times.
+  void TerminalSizeChanged();
+
+  /// Returns the prompt established by SetPrompt()
+  const char *GetPrompt();
+
+  /// Returns the index of the line currently being edited
+  uint32_t GetCurrentLine();
+
+  /// Interrupt the current edit as if ^C was pressed
+  bool Interrupt();
+
+  /// Cancel this edit and oblitarate all trace of it
+  bool Cancel();
+
+  /// Register a callback for the tab key
+  void SetAutoCompleteCallback(CompleteCallbackType callback, void *baton);
+
+  /// Register a callback for testing whether multi-line input is complete
+  void SetIsInputCompleteCallback(IsInputCompleteCallbackType callback,
+                                  void *baton);
+
+  /// Register a callback for determining the appropriate indentation for a line
+  /// when creating a newline.  An optional set of insertable characters can
+  /// also
+  /// trigger the callback.
+  bool SetFixIndentationCallback(FixIndentationCallbackType callback,
+                                 void *baton, const char *indent_chars);
+
+  /// Prompts for and reads a single line of user input.
+  bool GetLine(std::string &line, bool &interrupted);
+
+  /// Prompts for and reads a multi-line batch of user input.
+  bool GetLines(int first_line_number, StringList &lines, bool &interrupted);
+
+  void PrintAsync(Stream *stream, const char *s, size_t len);
+
+private:
+  /// Sets the lowest line number for multi-line editing sessions.  A value of
+  /// zero suppresses
+  /// line number printing in the prompt.
+  void SetBaseLineNumber(int line_number);
+
+  /// Returns the complete prompt by combining the prompt or continuation prompt
+  /// with line numbers
+  /// as appropriate.  The line index is a zero-based index into the current
+  /// multi-line session.
+  std::string PromptForIndex(int line_index);
+
+  /// Sets the current line index between line edits to allow free movement
+  /// between lines.  Updates
+  /// the prompt to match.
+  void SetCurrentLine(int line_index);
+
+  /// Determines the width of the prompt in characters.  The width is guaranteed
+  /// to be the same for
+  /// all lines of the current multi-line session.
+  int GetPromptWidth();
+
+  /// Returns true if the underlying EditLine session's keybindings are
+  /// Emacs-based, or false if
+  /// they are VI-based.
+  bool IsEmacs();
+
+  /// Returns true if the current EditLine buffer contains nothing but spaces,
+  /// or is empty.
+  bool IsOnlySpaces();
+
+  /// Helper method used by MoveCursor to determine relative line position.
+  int GetLineIndexForLocation(CursorLocation location, int cursor_row);
+
+  /// Move the cursor from one well-established location to another using
+  /// relative line positioning
+  /// and absolute column positioning.
+  void MoveCursor(CursorLocation from, CursorLocation to);
+
+  /// Clear from cursor position to bottom of screen and print input lines
+  /// including prompts, optionally
+  /// starting from a specific line.  Lines are drawn with an extra space at the
+  /// end to reserve room for
+  /// the rightmost cursor position.
+  void DisplayInput(int firstIndex = 0);
+
+  /// Counts the number of rows a given line of content will end up occupying,
+  /// taking into account both
+  /// the preceding prompt and a single trailing space occupied by a cursor when
+  /// at the end of the line.
+  int CountRowsForLine(const EditLineStringType &content);
+
+  /// Save the line currently being edited
+  void SaveEditedLine();
+
+  /// Convert the current input lines into a UTF8 StringList
+  StringList GetInputAsStringList(int line_count = UINT32_MAX);
+
+  /// Replaces the current multi-line session with the next entry from history.
+  /// When the parameter is
+  /// true it will take the next earlier entry from history, when it is false it
+  /// takes the next most
+  /// recent.
+  unsigned char RecallHistory(bool earlier);
+
+  /// Character reading implementation for EditLine that supports our multi-line
+  /// editing trickery.
+  int GetCharacter(EditLineGetCharType *c);
+
+  /// Prompt implementation for EditLine.
+  const char *Prompt();
+
+  /// Line break command used when meta+return is pressed in multi-line mode.
+  unsigned char BreakLineCommand(int ch);
+
+  /// Command used when return is pressed in multi-line mode.
+  unsigned char EndOrAddLineCommand(int ch);
+
+  /// Delete command used when delete is pressed in multi-line mode.
+  unsigned char DeleteNextCharCommand(int ch);
+
+  /// Delete command used when backspace is pressed in multi-line mode.
+  unsigned char DeletePreviousCharCommand(int ch);
+
+  /// Line navigation command used when ^P or up arrow are pressed in multi-line
+  /// mode.
+  unsigned char PreviousLineCommand(int ch);
+
+  /// Line navigation command used when ^N or down arrow are pressed in
+  /// multi-line mode.
+  unsigned char NextLineCommand(int ch);
+
+  /// History navigation command used when Alt + up arrow is pressed in
+  /// multi-line mode.
+  unsigned char PreviousHistoryCommand(int ch);
+
+  /// History navigation command used when Alt + down arrow is pressed in
+  /// multi-line mode.
+  unsigned char NextHistoryCommand(int ch);
+
+  /// Buffer start command used when Esc < is typed in multi-line emacs mode.
+  unsigned char BufferStartCommand(int ch);
+
+  /// Buffer end command used when Esc > is typed in multi-line emacs mode.
+  unsigned char BufferEndCommand(int ch);
+
+  /// Context-sensitive tab insertion or code completion command used when the
+  /// tab key is typed.
+  unsigned char TabCommand(int ch);
+
+  /// Respond to normal character insertion by fixing line indentation
+  unsigned char FixIndentationCommand(int ch);
+
+  /// Revert line command used when moving between lines.
+  unsigned char RevertLineCommand(int ch);
+
+  /// Ensures that the current EditLine instance is properly configured for
+  /// single or multi-line editing.
+  void ConfigureEditor(bool multiline);
+
+  bool CompleteCharacter(char ch, EditLineGetCharType &out);
+
+private:
+#if LLDB_EDITLINE_USE_WCHAR
+  std::wstring_convert<std::codecvt_utf8<wchar_t>> m_utf8conv;
+#endif
+  ::EditLine *m_editline = nullptr;
+  EditlineHistorySP m_history_sp;
+  bool m_in_history = false;
+  std::vector<EditLineStringType> m_live_history_lines;
+  bool m_multiline_enabled = false;
+  std::vector<EditLineStringType> m_input_lines;
+  EditorStatus m_editor_status;
+  bool m_color_prompts = true;
+  int m_terminal_width = 0;
+  int m_base_line_number = 0;
+  unsigned m_current_line_index = 0;
+  int m_current_line_rows = -1;
+  int m_revert_cursor_index = 0;
+  int m_line_number_digits = 3;
+  std::string m_set_prompt;
+  std::string m_set_continuation_prompt;
+  std::string m_current_prompt;
+  bool m_needs_prompt_repaint = false;
+  std::string m_editor_name;
+  FILE *m_input_file;
+  FILE *m_output_file;
+  FILE *m_error_file;
+  ConnectionFileDescriptor m_input_connection;
+  IsInputCompleteCallbackType m_is_input_complete_callback = nullptr;
+  void *m_is_input_complete_callback_baton = nullptr;
+  FixIndentationCallbackType m_fix_indentation_callback = nullptr;
+  void *m_fix_indentation_callback_baton = nullptr;
+  const char *m_fix_indentation_callback_chars = nullptr;
+  CompleteCallbackType m_completion_callback = nullptr;
+  void *m_completion_callback_baton = nullptr;
+
+  std::mutex m_output_mutex;
+};
+}
+
+#endif // #if defined(__cplusplus)
+#endif // liblldb_Editline_h_
diff --git a/linux-x64/clang/include/lldb/Host/File.h b/linux-x64/clang/include/lldb/Host/File.h
new file mode 100644
index 0000000..eb28c4a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/File.h
@@ -0,0 +1,392 @@
+//===-- File.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_File_h_
+#define liblldb_File_h_
+
+#include "lldb/Host/PosixApi.h"
+#include "lldb/Utility/IOObject.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-private.h"
+
+#include <mutex>
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+namespace lldb_private {
+
+/// \class File File.h "lldb/Host/File.h"
+/// A file class.
+///
+/// A file class that divides abstracts the LLDB core from host file
+/// functionality.
+class File : public IOObject {
+public:
+  static int kInvalidDescriptor;
+  static FILE *kInvalidStream;
+
+  // NB this enum is used in the lldb platform gdb-remote packet
+  // vFile:open: and existing values cannot be modified.
+  enum OpenOptions {
+    eOpenOptionRead = (1u << 0),  // Open file for reading
+    eOpenOptionWrite = (1u << 1), // Open file for writing
+    eOpenOptionAppend =
+        (1u << 2), // Don't truncate file when opening, append to end of file
+    eOpenOptionTruncate = (1u << 3),    // Truncate file when opening
+    eOpenOptionNonBlocking = (1u << 4), // File reads
+    eOpenOptionCanCreate = (1u << 5),   // Create file if doesn't already exist
+    eOpenOptionCanCreateNewOnly =
+        (1u << 6), // Can create file only if it doesn't already exist
+    eOpenOptionDontFollowSymlinks = (1u << 7),
+    eOpenOptionCloseOnExec =
+        (1u << 8) // Close the file when executing a new process
+  };
+
+  static mode_t ConvertOpenOptionsForPOSIXOpen(uint32_t open_options);
+
+  File()
+      : IOObject(eFDTypeFile, false), m_descriptor(kInvalidDescriptor),
+        m_stream(kInvalidStream), m_options(0), m_own_stream(false),
+        m_is_interactive(eLazyBoolCalculate),
+        m_is_real_terminal(eLazyBoolCalculate),
+        m_supports_colors(eLazyBoolCalculate) {}
+
+  File(FILE *fh, bool transfer_ownership)
+      : IOObject(eFDTypeFile, false), m_descriptor(kInvalidDescriptor),
+        m_stream(fh), m_options(0), m_own_stream(transfer_ownership),
+        m_is_interactive(eLazyBoolCalculate),
+        m_is_real_terminal(eLazyBoolCalculate),
+        m_supports_colors(eLazyBoolCalculate) {}
+
+  File(int fd, bool transfer_ownership)
+      : IOObject(eFDTypeFile, transfer_ownership), m_descriptor(fd),
+        m_stream(kInvalidStream), m_options(0), m_own_stream(false),
+        m_is_interactive(eLazyBoolCalculate),
+        m_is_real_terminal(eLazyBoolCalculate) {}
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual in case this class is subclassed.
+  ~File() override;
+
+  bool IsValid() const override {
+    return DescriptorIsValid() || StreamIsValid();
+  }
+
+  /// Convert to pointer operator.
+  ///
+  /// This allows code to check a File object to see if it contains anything
+  /// valid using code such as:
+  ///
+  /// \code
+  /// File file(...);
+  /// if (file)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     A pointer to this object if either the directory or filename
+  ///     is valid, nullptr otherwise.
+  operator bool() const { return DescriptorIsValid() || StreamIsValid(); }
+
+  /// Logical NOT operator.
+  ///
+  /// This allows code to check a File object to see if it is invalid using
+  /// code such as:
+  ///
+  /// \code
+  /// File file(...);
+  /// if (!file)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     Returns \b true if the object has an empty directory and
+  ///     filename, \b false otherwise.
+  bool operator!() const { return !DescriptorIsValid() && !StreamIsValid(); }
+
+  /// Get the file spec for this file.
+  ///
+  /// \return
+  ///     A reference to the file specification object.
+  Status GetFileSpec(FileSpec &file_spec) const;
+
+  Status Close() override;
+
+  void Clear();
+
+  int GetDescriptor() const;
+
+  WaitableHandle GetWaitableHandle() override;
+
+  void SetDescriptor(int fd, bool transfer_ownership);
+
+  FILE *GetStream();
+
+  void SetStream(FILE *fh, bool transfer_ownership);
+
+  /// Read bytes from a file from the current file position.
+  ///
+  /// NOTE: This function is NOT thread safe. Use the read function
+  /// that takes an "off_t &offset" to ensure correct operation in multi-
+  /// threaded environments.
+  ///
+  /// \param[in] buf
+  ///     A buffer where to put the bytes that are read.
+  ///
+  /// \param[in,out] num_bytes
+  ///     The number of bytes to read form the current file position
+  ///     which gets modified with the number of bytes that were read.
+  ///
+  /// \return
+  ///     An error object that indicates success or the reason for
+  ///     failure.
+  Status Read(void *buf, size_t &num_bytes) override;
+
+  /// Write bytes to a file at the current file position.
+  ///
+  /// NOTE: This function is NOT thread safe. Use the write function
+  /// that takes an "off_t &offset" to ensure correct operation in multi-
+  /// threaded environments.
+  ///
+  /// \param[in] buf
+  ///     A buffer where to put the bytes that are read.
+  ///
+  /// \param[in,out] num_bytes
+  ///     The number of bytes to write to the current file position
+  ///     which gets modified with the number of bytes that were
+  ///     written.
+  ///
+  /// \return
+  ///     An error object that indicates success or the reason for
+  ///     failure.
+  Status Write(const void *buf, size_t &num_bytes) override;
+
+  /// Seek to an offset relative to the beginning of the file.
+  ///
+  /// NOTE: This function is NOT thread safe, other threads that
+  /// access this object might also change the current file position. For
+  /// thread safe reads and writes see the following functions: @see
+  /// File::Read (void *, size_t, off_t &) \see File::Write (const void *,
+  /// size_t, off_t &)
+  ///
+  /// \param[in] offset
+  ///     The offset to seek to within the file relative to the
+  ///     beginning of the file.
+  ///
+  /// \param[in] error_ptr
+  ///     A pointer to a lldb_private::Status object that will be
+  ///     filled in if non-nullptr.
+  ///
+  /// \return
+  ///     The resulting seek offset, or -1 on error.
+  off_t SeekFromStart(off_t offset, Status *error_ptr = nullptr);
+
+  /// Seek to an offset relative to the current file position.
+  ///
+  /// NOTE: This function is NOT thread safe, other threads that
+  /// access this object might also change the current file position. For
+  /// thread safe reads and writes see the following functions: @see
+  /// File::Read (void *, size_t, off_t &) \see File::Write (const void *,
+  /// size_t, off_t &)
+  ///
+  /// \param[in] offset
+  ///     The offset to seek to within the file relative to the
+  ///     current file position.
+  ///
+  /// \param[in] error_ptr
+  ///     A pointer to a lldb_private::Status object that will be
+  ///     filled in if non-nullptr.
+  ///
+  /// \return
+  ///     The resulting seek offset, or -1 on error.
+  off_t SeekFromCurrent(off_t offset, Status *error_ptr = nullptr);
+
+  /// Seek to an offset relative to the end of the file.
+  ///
+  /// NOTE: This function is NOT thread safe, other threads that
+  /// access this object might also change the current file position. For
+  /// thread safe reads and writes see the following functions: @see
+  /// File::Read (void *, size_t, off_t &) \see File::Write (const void *,
+  /// size_t, off_t &)
+  ///
+  /// \param[in,out] offset
+  ///     The offset to seek to within the file relative to the
+  ///     end of the file which gets filled in with the resulting
+  ///     absolute file offset.
+  ///
+  /// \param[in] error_ptr
+  ///     A pointer to a lldb_private::Status object that will be
+  ///     filled in if non-nullptr.
+  ///
+  /// \return
+  ///     The resulting seek offset, or -1 on error.
+  off_t SeekFromEnd(off_t offset, Status *error_ptr = nullptr);
+
+  /// Read bytes from a file from the specified file offset.
+  ///
+  /// NOTE: This function is thread safe in that clients manager their
+  /// own file position markers and reads on other threads won't mess up the
+  /// current read.
+  ///
+  /// \param[in] dst
+  ///     A buffer where to put the bytes that are read.
+  ///
+  /// \param[in,out] num_bytes
+  ///     The number of bytes to read form the current file position
+  ///     which gets modified with the number of bytes that were read.
+  ///
+  /// \param[in,out] offset
+  ///     The offset within the file from which to read \a num_bytes
+  ///     bytes. This offset gets incremented by the number of bytes
+  ///     that were read.
+  ///
+  /// \return
+  ///     An error object that indicates success or the reason for
+  ///     failure.
+  Status Read(void *dst, size_t &num_bytes, off_t &offset);
+
+  /// Read bytes from a file from the specified file offset.
+  ///
+  /// NOTE: This function is thread safe in that clients manager their
+  /// own file position markers and reads on other threads won't mess up the
+  /// current read.
+  ///
+  /// \param[in,out] num_bytes
+  ///     The number of bytes to read form the current file position
+  ///     which gets modified with the number of bytes that were read.
+  ///
+  /// \param[in,out] offset
+  ///     The offset within the file from which to read \a num_bytes
+  ///     bytes. This offset gets incremented by the number of bytes
+  ///     that were read.
+  ///
+  /// \param[in] null_terminate
+  ///     Ensure that the data that is read is terminated with a NULL
+  ///     character so that the data can be used as a C string.
+  ///
+  /// \param[out] data_buffer_sp
+  ///     A data buffer to create and fill in that will contain any
+  ///     data that is read from the file. This buffer will be reset
+  ///     if an error occurs.
+  ///
+  /// \return
+  ///     An error object that indicates success or the reason for
+  ///     failure.
+  Status Read(size_t &num_bytes, off_t &offset, bool null_terminate,
+              lldb::DataBufferSP &data_buffer_sp);
+
+  /// Write bytes to a file at the specified file offset.
+  ///
+  /// NOTE: This function is thread safe in that clients manager their
+  /// own file position markers, though clients will need to implement their
+  /// own locking externally to avoid multiple people writing to the file at
+  /// the same time.
+  ///
+  /// \param[in] src
+  ///     A buffer containing the bytes to write.
+  ///
+  /// \param[in,out] num_bytes
+  ///     The number of bytes to write to the file at offset \a offset.
+  ///     \a num_bytes gets modified with the number of bytes that
+  ///     were read.
+  ///
+  /// \param[in,out] offset
+  ///     The offset within the file at which to write \a num_bytes
+  ///     bytes. This offset gets incremented by the number of bytes
+  ///     that were written.
+  ///
+  /// \return
+  ///     An error object that indicates success or the reason for
+  ///     failure.
+  Status Write(const void *src, size_t &num_bytes, off_t &offset);
+
+  /// Flush the current stream
+  ///
+  /// \return
+  ///     An error object that indicates success or the reason for
+  ///     failure.
+  Status Flush();
+
+  /// Sync to disk.
+  ///
+  /// \return
+  ///     An error object that indicates success or the reason for
+  ///     failure.
+  Status Sync();
+
+  /// Get the permissions for a this file.
+  ///
+  /// \return
+  ///     Bits logical OR'ed together from the permission bits defined
+  ///     in lldb_private::File::Permissions.
+  uint32_t GetPermissions(Status &error) const;
+
+  /// Return true if this file is interactive.
+  ///
+  /// \return
+  ///     True if this file is a terminal (tty or pty), false
+  ///     otherwise.
+  bool GetIsInteractive();
+
+  /// Return true if this file from a real terminal.
+  ///
+  /// Just knowing a file is a interactive isn't enough, we also need to know
+  /// if the terminal has a width and height so we can do cursor movement and
+  /// other terminal manipulations by sending escape sequences.
+  ///
+  /// \return
+  ///     True if this file is a terminal (tty, not a pty) that has
+  ///     a non-zero width and height, false otherwise.
+  bool GetIsRealTerminal();
+
+  bool GetIsTerminalWithColors();
+
+  /// Output printf formatted output to the stream.
+  ///
+  /// Print some formatted output to the stream.
+  ///
+  /// \param[in] format
+  ///     A printf style format string.
+  ///
+  /// \param[in] ...
+  ///     Variable arguments that are needed for the printf style
+  ///     format string \a format.
+  size_t Printf(const char *format, ...) __attribute__((format(printf, 2, 3)));
+
+  size_t PrintfVarArg(const char *format, va_list args);
+
+  void SetOptions(uint32_t options) { m_options = options; }
+
+  static bool DescriptorIsValid(int descriptor) { return descriptor >= 0; };
+
+protected:
+  bool DescriptorIsValid() const { return DescriptorIsValid(m_descriptor); }
+
+  bool StreamIsValid() const { return m_stream != kInvalidStream; }
+
+  void CalculateInteractiveAndTerminal();
+
+  // Member variables
+  int m_descriptor;
+  FILE *m_stream;
+  uint32_t m_options;
+  bool m_own_stream;
+  LazyBool m_is_interactive;
+  LazyBool m_is_real_terminal;
+  LazyBool m_supports_colors;
+  std::mutex offset_access_mutex;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(File);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_File_h_
diff --git a/linux-x64/clang/include/lldb/Host/FileAction.h b/linux-x64/clang/include/lldb/Host/FileAction.h
new file mode 100644
index 0000000..4d333bb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/FileAction.h
@@ -0,0 +1,58 @@
+//===-- FileAction.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_HOST_FILEACTION_H
+#define LLDB_HOST_FILEACTION_H
+
+#include "lldb/Utility/FileSpec.h"
+#include <string>
+
+namespace lldb_private {
+
+class FileAction {
+public:
+  enum Action {
+    eFileActionNone,
+    eFileActionClose,
+    eFileActionDuplicate,
+    eFileActionOpen
+  };
+
+  FileAction();
+
+  void Clear();
+
+  bool Close(int fd);
+
+  bool Duplicate(int fd, int dup_fd);
+
+  bool Open(int fd, const FileSpec &file_spec, bool read, bool write);
+
+  int GetFD() const { return m_fd; }
+
+  Action GetAction() const { return m_action; }
+
+  int GetActionArgument() const { return m_arg; }
+
+  llvm::StringRef GetPath() const;
+
+  const FileSpec &GetFileSpec() const;
+
+  void Dump(Stream &stream) const;
+
+protected:
+  Action m_action; // The action for this file
+  int m_fd;        // An existing file descriptor
+  int m_arg; // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate
+  FileSpec
+      m_file_spec; // A file spec to use for opening after fork or posix_spawn
+};
+
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/FileCache.h b/linux-x64/clang/include/lldb/Host/FileCache.h
new file mode 100644
index 0000000..0c1ef19
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/FileCache.h
@@ -0,0 +1,46 @@
+//===-- FileCache.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef liblldb_Host_FileCache_h
+#define liblldb_Host_FileCache_h
+
+#include <map>
+#include <stdint.h>
+
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+
+namespace lldb_private {
+class FileCache {
+private:
+  FileCache() {}
+
+  typedef std::map<lldb::user_id_t, lldb::FileSP> FDToFileMap;
+
+public:
+  static FileCache &GetInstance();
+
+  lldb::user_id_t OpenFile(const FileSpec &file_spec, uint32_t flags,
+                           uint32_t mode, Status &error);
+  bool CloseFile(lldb::user_id_t fd, Status &error);
+
+  uint64_t WriteFile(lldb::user_id_t fd, uint64_t offset, const void *src,
+                     uint64_t src_len, Status &error);
+  uint64_t ReadFile(lldb::user_id_t fd, uint64_t offset, void *dst,
+                    uint64_t dst_len, Status &error);
+
+private:
+  static FileCache *m_instance;
+
+  FDToFileMap m_cache;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/FileSystem.h b/linux-x64/clang/include/lldb/Host/FileSystem.h
new file mode 100644
index 0000000..865b09b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/FileSystem.h
@@ -0,0 +1,196 @@
+//===-- FileSystem.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_FileSystem_h
+#define liblldb_Host_FileSystem_h
+
+#include "lldb/Host/File.h"
+#include "lldb/Utility/DataBufferLLVM.h"
+#include "lldb/Utility/FileCollector.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+
+#include "llvm/ADT/Optional.h"
+#include "llvm/Support/Chrono.h"
+#include "llvm/Support/VirtualFileSystem.h"
+
+#include "lldb/lldb-types.h"
+
+#include <stdint.h>
+#include <stdio.h>
+#include <sys/stat.h>
+
+namespace lldb_private {
+class FileSystem {
+public:
+  static const char *DEV_NULL;
+  static const char *PATH_CONVERSION_ERROR;
+
+  FileSystem()
+      : m_fs(llvm::vfs::getRealFileSystem()), m_collector(nullptr),
+        m_mapped(false) {}
+  FileSystem(FileCollector &collector)
+      : m_fs(llvm::vfs::getRealFileSystem()), m_collector(&collector),
+        m_mapped(false) {}
+  FileSystem(llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> fs,
+             bool mapped = false)
+      : m_fs(fs), m_collector(nullptr), m_mapped(mapped) {}
+
+  FileSystem(const FileSystem &fs) = delete;
+  FileSystem &operator=(const FileSystem &fs) = delete;
+
+  static FileSystem &Instance();
+
+  static void Initialize();
+  static void Initialize(FileCollector &collector);
+  static llvm::Error Initialize(const FileSpec &mapping);
+  static void Initialize(llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> fs);
+  static void Terminate();
+
+  Status Symlink(const FileSpec &src, const FileSpec &dst);
+  Status Readlink(const FileSpec &src, FileSpec &dst);
+
+  Status ResolveSymbolicLink(const FileSpec &src, FileSpec &dst);
+
+  /// Wraps ::fopen in a platform-independent way.
+  FILE *Fopen(const char *path, const char *mode);
+
+  /// Wraps ::open in a platform-independent way.
+  int Open(const char *path, int flags, int mode);
+
+  Status Open(File &File, const FileSpec &file_spec, uint32_t options,
+              uint32_t permissions = lldb::eFilePermissionsFileDefault,
+              bool should_close_fd = true);
+
+  /// Get a directory iterator.
+  /// \{
+  llvm::vfs::directory_iterator DirBegin(const FileSpec &file_spec,
+                                         std::error_code &ec);
+  llvm::vfs::directory_iterator DirBegin(const llvm::Twine &dir,
+                                         std::error_code &ec);
+  /// \}
+
+  /// Returns the Status object for the given file.
+  /// \{
+  llvm::ErrorOr<llvm::vfs::Status> GetStatus(const FileSpec &file_spec) const;
+  llvm::ErrorOr<llvm::vfs::Status> GetStatus(const llvm::Twine &path) const;
+  /// \}
+
+  /// Returns the modification time of the given file.
+  /// \{
+  llvm::sys::TimePoint<> GetModificationTime(const FileSpec &file_spec) const;
+  llvm::sys::TimePoint<> GetModificationTime(const llvm::Twine &path) const;
+  /// \}
+
+  /// Returns the on-disk size of the given file in bytes.
+  /// \{
+  uint64_t GetByteSize(const FileSpec &file_spec) const;
+  uint64_t GetByteSize(const llvm::Twine &path) const;
+  /// \}
+
+  /// Return the current permissions of the given file.
+  ///
+  /// Returns a bitmask for the current permissions of the file (zero or more
+  /// of the permission bits defined in File::Permissions).
+  /// \{
+  uint32_t GetPermissions(const FileSpec &file_spec) const;
+  uint32_t GetPermissions(const llvm::Twine &path) const;
+  uint32_t GetPermissions(const FileSpec &file_spec, std::error_code &ec) const;
+  uint32_t GetPermissions(const llvm::Twine &path, std::error_code &ec) const;
+  /// \}
+
+  /// Returns whether the given file exists.
+  /// \{
+  bool Exists(const FileSpec &file_spec) const;
+  bool Exists(const llvm::Twine &path) const;
+  /// \}
+
+  /// Returns whether the given file is readable.
+  /// \{
+  bool Readable(const FileSpec &file_spec) const;
+  bool Readable(const llvm::Twine &path) const;
+  /// \}
+
+  /// Returns whether the given path is a directory.
+  /// \{
+  bool IsDirectory(const FileSpec &file_spec) const;
+  bool IsDirectory(const llvm::Twine &path) const;
+  /// \}
+
+  /// Returns whether the given path is local to the file system.
+  /// \{
+  bool IsLocal(const FileSpec &file_spec) const;
+  bool IsLocal(const llvm::Twine &path) const;
+  /// \}
+
+  /// Make the given file path absolute.
+  /// \{
+  std::error_code MakeAbsolute(llvm::SmallVectorImpl<char> &path) const;
+  std::error_code MakeAbsolute(FileSpec &file_spec) const;
+  /// \}
+
+  /// Resolve path to make it canonical.
+  /// \{
+  void Resolve(llvm::SmallVectorImpl<char> &path);
+  void Resolve(FileSpec &file_spec);
+  /// \}
+
+  //// Create memory buffer from path.
+  /// \{
+  std::shared_ptr<DataBufferLLVM> CreateDataBuffer(const llvm::Twine &path,
+                                                   uint64_t size = 0,
+                                                   uint64_t offset = 0);
+  std::shared_ptr<DataBufferLLVM> CreateDataBuffer(const FileSpec &file_spec,
+                                                   uint64_t size = 0,
+                                                   uint64_t offset = 0);
+  /// \}
+
+  /// Call into the Host to see if it can help find the file.
+  bool ResolveExecutableLocation(FileSpec &file_spec);
+
+  enum EnumerateDirectoryResult {
+    /// Enumerate next entry in the current directory.
+    eEnumerateDirectoryResultNext,
+    /// Recurse into the current entry if it is a directory or symlink, or next
+    /// if not.
+    eEnumerateDirectoryResultEnter,
+    /// Stop directory enumerations at any level.
+    eEnumerateDirectoryResultQuit
+  };
+
+  typedef EnumerateDirectoryResult (*EnumerateDirectoryCallbackType)(
+      void *baton, llvm::sys::fs::file_type file_type, llvm::StringRef);
+
+  typedef std::function<EnumerateDirectoryResult(
+      llvm::sys::fs::file_type file_type, llvm::StringRef)>
+      DirectoryCallback;
+
+  void EnumerateDirectory(llvm::Twine path, bool find_directories,
+                          bool find_files, bool find_other,
+                          EnumerateDirectoryCallbackType callback,
+                          void *callback_baton);
+
+  std::error_code GetRealPath(const llvm::Twine &path,
+                              llvm::SmallVectorImpl<char> &output) const;
+
+  llvm::ErrorOr<std::string> GetExternalPath(const llvm::Twine &path);
+  llvm::ErrorOr<std::string> GetExternalPath(const FileSpec &file_spec);
+
+  llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> GetVirtualFileSystem() {
+    return m_fs;
+  }
+
+private:
+  static llvm::Optional<FileSystem> &InstanceImpl();
+  llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> m_fs;
+  FileCollector *m_collector;
+  bool m_mapped;
+};
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/Host.h b/linux-x64/clang/include/lldb/Host/Host.h
new file mode 100644
index 0000000..884c5cf
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Host.h
@@ -0,0 +1,248 @@
+//===-- Host.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_HOST_HOST_H
+#define LLDB_HOST_HOST_H
+
+#include "lldb/Host/File.h"
+#include "lldb/Host/HostThread.h"
+#include "lldb/Utility/Environment.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Timeout.h"
+#include "lldb/lldb-private-forward.h"
+#include "lldb/lldb-private.h"
+#include <cerrno>
+#include <map>
+#include <stdarg.h>
+#include <string>
+#include <type_traits>
+
+namespace lldb_private {
+
+class FileAction;
+class ProcessLaunchInfo;
+class ProcessInstanceInfo;
+class ProcessInstanceInfoList;
+class ProcessInstanceInfoMatch;
+
+// Exit Type for inferior processes
+struct WaitStatus {
+  enum Type : uint8_t {
+    Exit,   // The status represents the return code from normal
+            // program exit (i.e. WIFEXITED() was true)
+    Signal, // The status represents the signal number that caused
+            // the program to exit (i.e. WIFSIGNALED() was true)
+    Stop,   // The status represents the signal number that caused the
+            // program to stop (i.e. WIFSTOPPED() was true)
+  };
+
+  Type type;
+  uint8_t status;
+
+  WaitStatus(Type type, uint8_t status) : type(type), status(status) {}
+
+  static WaitStatus Decode(int wstatus);
+};
+
+inline bool operator==(WaitStatus a, WaitStatus b) {
+  return a.type == b.type && a.status == b.status;
+}
+
+inline bool operator!=(WaitStatus a, WaitStatus b) { return !(a == b); }
+
+/// \class Host Host.h "lldb/Host/Host.h"
+/// A class that provides host computer information.
+///
+/// Host is a class that answers information about the host operating system.
+class Host {
+public:
+  typedef std::function<bool(
+      lldb::pid_t pid, bool exited,
+      int signal,  // Zero for no signal
+      int status)> // Exit value of process if signal is zero
+      MonitorChildProcessCallback;
+
+  /// Start monitoring a child process.
+  ///
+  /// Allows easy monitoring of child processes. \a callback will be called
+  /// when the child process exits or if it gets a signal. The callback will
+  /// only be called with signals if \a monitor_signals is \b true. \a
+  /// callback will usually be called from another thread so the callback
+  /// function must be thread safe.
+  ///
+  /// When the callback gets called, the return value indicates if monitoring
+  /// should stop. If \b true is returned from \a callback the information
+  /// will be removed. If \b false is returned then monitoring will continue.
+  /// If the child process exits, the monitoring will automatically stop after
+  /// the callback returned regardless of the callback return value.
+  ///
+  /// \param[in] callback
+  ///     A function callback to call when a child receives a signal
+  ///     (if \a monitor_signals is true) or a child exits.
+  ///
+  /// \param[in] pid
+  ///     The process ID of a child process to monitor, -1 for all
+  ///     processes.
+  ///
+  /// \param[in] monitor_signals
+  ///     If \b true the callback will get called when the child
+  ///     process gets a signal. If \b false, the callback will only
+  ///     get called if the child process exits.
+  ///
+  /// \return
+  ///     A thread handle that can be used to cancel the thread that
+  ///     was spawned to monitor \a pid.
+  ///
+  /// \see static void Host::StopMonitoringChildProcess (uint32_t)
+  static llvm::Expected<HostThread>
+  StartMonitoringChildProcess(const MonitorChildProcessCallback &callback,
+                              lldb::pid_t pid, bool monitor_signals);
+
+  enum SystemLogType { eSystemLogWarning, eSystemLogError };
+
+  static void SystemLog(SystemLogType type, const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  static void SystemLog(SystemLogType type, const char *format, va_list args);
+
+  /// Get the process ID for the calling process.
+  ///
+  /// \return
+  ///     The process ID for the current process.
+  static lldb::pid_t GetCurrentProcessID();
+
+  static void Kill(lldb::pid_t pid, int signo);
+
+  /// Get the thread token (the one returned by ThreadCreate when the thread
+  /// was created) for the calling thread in the current process.
+  ///
+  /// \return
+  ///     The thread token for the calling thread in the current process.
+  static lldb::thread_t GetCurrentThread();
+
+  static const char *GetSignalAsCString(int signo);
+
+  /// Given an address in the current process (the process that is running the
+  /// LLDB code), return the name of the module that it comes from. This can
+  /// be useful when you need to know the path to the shared library that your
+  /// code is running in for loading resources that are relative to your
+  /// binary.
+  ///
+  /// \param[in] host_addr
+  ///     The pointer to some code in the current process.
+  ///
+  /// \return
+  ///     \b A file spec with the module that contains \a host_addr,
+  ///     which may be invalid if \a host_addr doesn't fall into
+  ///     any valid module address range.
+  static FileSpec GetModuleFileSpecForHostAddress(const void *host_addr);
+
+  /// If you have an executable that is in a bundle and want to get back to
+  /// the bundle directory from the path itself, this function will change a
+  /// path to a file within a bundle to the bundle directory itself.
+  ///
+  /// \param[in] file
+  ///     A file spec that might point to a file in a bundle.
+  ///
+  /// \param[out] bundle_directory
+  ///     An object will be filled in with the bundle directory for
+  ///     the bundle when \b true is returned. Otherwise \a file is
+  ///     left untouched and \b false is returned.
+  ///
+  /// \return
+  ///     \b true if \a file was resolved in \a bundle_directory,
+  ///     \b false otherwise.
+  static bool GetBundleDirectory(const FileSpec &file,
+                                 FileSpec &bundle_directory);
+
+  /// When executable files may live within a directory, where the directory
+  /// represents an executable bundle (like the MacOSX app bundles), then
+  /// locate the executable within the containing bundle.
+  ///
+  /// \param[in,out] file
+  ///     A file spec that currently points to the bundle that will
+  ///     be filled in with the executable path within the bundle
+  ///     if \b true is returned. Otherwise \a file is left untouched.
+  ///
+  /// \return
+  ///     \b true if \a file was resolved, \b false if this function
+  ///     was not able to resolve the path.
+  static bool ResolveExecutableInBundle(FileSpec &file);
+
+  static uint32_t FindProcesses(const ProcessInstanceInfoMatch &match_info,
+                                ProcessInstanceInfoList &proc_infos);
+
+  typedef std::map<lldb::pid_t, bool> TidMap;
+  typedef std::pair<lldb::pid_t, bool> TidPair;
+  static bool FindProcessThreads(const lldb::pid_t pid, TidMap &tids_to_attach);
+
+  static bool GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &proc_info);
+
+  /// Launch the process specified in launch_info. The monitoring callback in
+  /// launch_info must be set, and it will be called when the process
+  /// terminates.
+  static Status LaunchProcess(ProcessLaunchInfo &launch_info);
+
+  /// Perform expansion of the command-line for this launch info This can
+  /// potentially involve wildcard expansion
+  /// environment variable replacement, and whatever other
+  /// argument magic the platform defines as part of its typical
+  /// user experience
+  static Status ShellExpandArguments(ProcessLaunchInfo &launch_info);
+
+  /// Run a shell command.
+  /// \arg command  shouldn't be NULL
+  /// \arg working_dir Pass empty FileSpec to use the current working directory
+  /// \arg status_ptr  Pass NULL if you don't want the process exit status
+  /// \arg signo_ptr   Pass NULL if you don't want the signal that caused the
+  ///                  process to exit
+  /// \arg command_output  Pass NULL if you don't want the command output
+  /// \arg hide_stderr if this is false, redirect stderr to stdout
+  /// TODO: Convert this function to take a StringRef.
+  static Status RunShellCommand(const char *command,
+                                const FileSpec &working_dir, int *status_ptr,
+                                int *signo_ptr, std::string *command_output,
+                                const Timeout<std::micro> &timeout,
+                                bool run_in_default_shell = true,
+                                bool hide_stderr = false);
+
+  /// Run a shell command.
+  /// \arg working_dir Pass empty FileSpec to use the current working directory
+  /// \arg status_ptr  Pass NULL if you don't want the process exit status
+  /// \arg signo_ptr   Pass NULL if you don't want the signal that caused the
+  ///                  process to exit
+  /// \arg command_output  Pass NULL if you don't want the command output
+  /// \arg hide_stderr if this is false, redirect stderr to stdout
+  static Status RunShellCommand(const Args &args, const FileSpec &working_dir,
+                                int *status_ptr, int *signo_ptr,
+                                std::string *command_output,
+                                const Timeout<std::micro> &timeout,
+                                bool run_in_default_shell = true,
+                                bool hide_stderr = false);
+
+  static bool OpenFileInExternalEditor(const FileSpec &file_spec,
+                                       uint32_t line_no);
+
+  static Environment GetEnvironment();
+
+  static std::unique_ptr<Connection>
+  CreateDefaultConnection(llvm::StringRef url);
+};
+
+} // namespace lldb_private
+
+namespace llvm {
+template <> struct format_provider<lldb_private::WaitStatus> {
+  /// Options = "" gives a human readable description of the status Options =
+  /// "g" gives a gdb-remote protocol status (e.g., X09)
+  static void format(const lldb_private::WaitStatus &WS, raw_ostream &OS,
+                     llvm::StringRef Options);
+};
+} // namespace llvm
+
+#endif // LLDB_HOST_HOST_H
diff --git a/linux-x64/clang/include/lldb/Host/HostGetOpt.h b/linux-x64/clang/include/lldb/Host/HostGetOpt.h
new file mode 100644
index 0000000..dedeb2e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostGetOpt.h
@@ -0,0 +1,23 @@
+//===-- HostGetOpt.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#pragma once
+
+#if !defined(_MSC_VER) && !defined(__NetBSD__)
+
+#ifdef _WIN32
+#define _BSD_SOURCE // Required so that getopt.h defines optreset
+#endif
+
+#include <getopt.h>
+#include <unistd.h>
+
+#else
+
+#include <lldb/Host/common/GetOptInc.h>
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostInfo.h b/linux-x64/clang/include/lldb/Host/HostInfo.h
new file mode 100644
index 0000000..196127d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostInfo.h
@@ -0,0 +1,69 @@
+//===-- HostInfo.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostInfo_h_
+#define lldb_Host_HostInfo_h_
+
+/// \class HostInfo HostInfo.h "lldb/Host/HostInfo.h"
+/// A class that provides host computer information.
+///
+/// HostInfo is a class that answers information about the host operating
+/// system.  Note that HostInfo is NOT intended to be used to manipulate or
+/// control the operating system.
+///
+/// HostInfo is implemented in an OS-specific class (for example
+/// HostInfoWindows) in a separate file, and then typedefed to HostInfo here.
+/// Users of the class reference it as HostInfo::method().
+///
+/// Not all hosts provide the same functionality.  It is important that
+/// methods only be implemented at the lowest level at which they make sense.
+/// It should be up to the clients of the class to ensure that they not
+/// attempt to call a method which doesn't make sense for a particular
+/// platform.  For example, when implementing a method that only makes sense
+/// on a posix-compliant system, implement it on HostInfoPosix, and not on
+/// HostInfoBase with a default implementation.  This way, users of HostInfo
+/// are required to think about the implications of calling a particular
+/// method and if used in a context where the method doesn't make sense, will
+/// generate a compiler error.
+///
+
+#if defined(_WIN32)
+#include "lldb/Host/windows/HostInfoWindows.h"
+#define HOST_INFO_TYPE HostInfoWindows
+#elif defined(__linux__)
+#if defined(__ANDROID__)
+#include "lldb/Host/android/HostInfoAndroid.h"
+#define HOST_INFO_TYPE HostInfoAndroid
+#else
+#include "lldb/Host/linux/HostInfoLinux.h"
+#define HOST_INFO_TYPE HostInfoLinux
+#endif
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#include "lldb/Host/freebsd/HostInfoFreeBSD.h"
+#define HOST_INFO_TYPE HostInfoFreeBSD
+#elif defined(__NetBSD__)
+#include "lldb/Host/netbsd/HostInfoNetBSD.h"
+#define HOST_INFO_TYPE HostInfoNetBSD
+#elif defined(__OpenBSD__)
+#include "lldb/Host/openbsd/HostInfoOpenBSD.h"
+#define HOST_INFO_TYPE HostInfoOpenBSD
+#elif defined(__APPLE__)
+#include "lldb/Host/macosx/HostInfoMacOSX.h"
+#define HOST_INFO_TYPE HostInfoMacOSX
+#else
+#include "lldb/Host/posix/HostInfoPosix.h"
+#define HOST_INFO_TYPE HostInfoPosix
+#endif
+
+namespace lldb_private {
+typedef HOST_INFO_TYPE HostInfo;
+}
+
+#undef HOST_INFO_TYPE
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostInfoBase.h b/linux-x64/clang/include/lldb/Host/HostInfoBase.h
new file mode 100644
index 0000000..6f66889
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostInfoBase.h
@@ -0,0 +1,114 @@
+//===-- HostInfoBase.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostInfoBase_h_
+#define lldb_Host_HostInfoBase_h_
+
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/UserIDResolver.h"
+#include "lldb/lldb-enumerations.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <stdint.h>
+
+#include <string>
+
+namespace lldb_private {
+
+class FileSpec;
+
+class HostInfoBase {
+private:
+  // Static class, unconstructable.
+  HostInfoBase() {}
+  ~HostInfoBase() {}
+
+public:
+  static void Initialize();
+  static void Terminate();
+
+  /// Gets the host target triple as a const string.
+  ///
+  /// \return
+  ///     A const string object containing the host target triple.
+  static llvm::StringRef GetTargetTriple();
+
+  /// Gets the host architecture.
+  ///
+  /// \return
+  ///     A const architecture object that represents the host
+  ///     architecture.
+  enum ArchitectureKind {
+    eArchKindDefault, // The overall default architecture that applications will
+                      // run on this host
+    eArchKind32, // If this host supports 32 bit programs, return the default 32
+                 // bit arch
+    eArchKind64  // If this host supports 64 bit programs, return the default 64
+                 // bit arch
+  };
+
+  static const ArchSpec &
+  GetArchitecture(ArchitectureKind arch_kind = eArchKindDefault);
+
+  static llvm::Optional<ArchitectureKind> ParseArchitectureKind(llvm::StringRef kind);
+
+  /// Returns the directory containing the lldb shared library. Only the
+  /// directory member of the FileSpec is filled in.
+  static FileSpec GetShlibDir();
+
+  /// Returns the directory containing the support executables (debugserver,
+  /// ...). Only the directory member of the FileSpec is filled in.
+  static FileSpec GetSupportExeDir();
+
+  /// Returns the directory containing the lldb headers. Only the directory
+  /// member of the FileSpec is filled in.
+  static FileSpec GetHeaderDir();
+
+  /// Returns the directory containing the system plugins. Only the directory
+  /// member of the FileSpec is filled in.
+  static FileSpec GetSystemPluginDir();
+
+  /// Returns the directory containing the user plugins. Only the directory
+  /// member of the FileSpec is filled in.
+  static FileSpec GetUserPluginDir();
+
+  /// Returns the proces temporary directory. This directory will be cleaned up
+  /// when this process exits. Only the directory member of the FileSpec is
+  /// filled in.
+  static FileSpec GetProcessTempDir();
+
+  /// Returns the global temporary directory. This directory will **not** be
+  /// cleaned up when this process exits. Only the directory member of the
+  /// FileSpec is filled in.
+  static FileSpec GetGlobalTempDir();
+
+  /// If the triple does not specify the vendor, os, and environment parts, we
+  /// "augment" these using information from the host and return the resulting
+  /// ArchSpec object.
+  static ArchSpec GetAugmentedArchSpec(llvm::StringRef triple);
+
+  static bool ComputePathRelativeToLibrary(FileSpec &file_spec,
+                                           llvm::StringRef dir);
+
+protected:
+  static bool ComputeSharedLibraryDirectory(FileSpec &file_spec);
+  static bool ComputeSupportExeDirectory(FileSpec &file_spec);
+  static bool ComputeProcessTempFileDirectory(FileSpec &file_spec);
+  static bool ComputeGlobalTempFileDirectory(FileSpec &file_spec);
+  static bool ComputeTempFileBaseDirectory(FileSpec &file_spec);
+  static bool ComputeHeaderDirectory(FileSpec &file_spec);
+  static bool ComputeSystemPluginsDirectory(FileSpec &file_spec);
+  static bool ComputeUserPluginsDirectory(FileSpec &file_spec);
+
+  static void ComputeHostArchitectureSupport(ArchSpec &arch_32,
+                                             ArchSpec &arch_64);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostNativeProcess.h b/linux-x64/clang/include/lldb/Host/HostNativeProcess.h
new file mode 100644
index 0000000..c86a2ae
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostNativeProcess.h
@@ -0,0 +1,24 @@
+//===-- HostNativeProcess.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostNativeProcess_h_
+#define lldb_Host_HostNativeProcess_h_
+
+#if defined(_WIN32)
+#include "lldb/Host/windows/HostProcessWindows.h"
+namespace lldb_private {
+typedef HostProcessWindows HostNativeProcess;
+}
+#else
+#include "lldb/Host/posix/HostProcessPosix.h"
+namespace lldb_private {
+typedef HostProcessPosix HostNativeProcess;
+}
+#endif
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostNativeProcessBase.h b/linux-x64/clang/include/lldb/Host/HostNativeProcessBase.h
new file mode 100644
index 0000000..aaa517d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostNativeProcessBase.h
@@ -0,0 +1,47 @@
+//===-- HostNativeProcessBase.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostNativeProcessBase_h_
+#define lldb_Host_HostNativeProcessBase_h_
+
+#include "lldb/Host/HostProcess.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+
+class HostThread;
+
+class HostNativeProcessBase {
+  DISALLOW_COPY_AND_ASSIGN(HostNativeProcessBase);
+
+public:
+  HostNativeProcessBase() : m_process(LLDB_INVALID_PROCESS) {}
+  explicit HostNativeProcessBase(lldb::process_t process)
+      : m_process(process) {}
+  virtual ~HostNativeProcessBase() {}
+
+  virtual Status Terminate() = 0;
+  virtual Status GetMainModule(FileSpec &file_spec) const = 0;
+
+  virtual lldb::pid_t GetProcessId() const = 0;
+  virtual bool IsRunning() const = 0;
+
+  lldb::process_t GetSystemHandle() const { return m_process; }
+
+  virtual llvm::Expected<HostThread>
+  StartMonitoring(const Host::MonitorChildProcessCallback &callback,
+                  bool monitor_signals) = 0;
+
+protected:
+  lldb::process_t m_process;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostNativeThread.h b/linux-x64/clang/include/lldb/Host/HostNativeThread.h
new file mode 100644
index 0000000..8bf6584
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostNativeThread.h
@@ -0,0 +1,22 @@
+//===-- HostNativeThread.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostNativeThread_h_
+#define lldb_Host_HostNativeThread_h_
+
+#include "HostNativeThreadForward.h"
+
+#if defined(_WIN32)
+#include "lldb/Host/windows/HostThreadWindows.h"
+#elif defined(__APPLE__)
+#include "lldb/Host/macosx/HostThreadMacOSX.h"
+#else
+#include "lldb/Host/posix/HostThreadPosix.h"
+#endif
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostNativeThreadBase.h b/linux-x64/clang/include/lldb/Host/HostNativeThreadBase.h
new file mode 100644
index 0000000..a196f0b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostNativeThreadBase.h
@@ -0,0 +1,52 @@
+//===-- HostNativeThreadBase.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostNativeThreadBase_h_
+#define lldb_Host_HostNativeThreadBase_h_
+
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+
+#if defined(_WIN32)
+#define THREAD_ROUTINE __stdcall
+#else
+#define THREAD_ROUTINE
+#endif
+
+class HostNativeThreadBase {
+  friend class ThreadLauncher;
+  DISALLOW_COPY_AND_ASSIGN(HostNativeThreadBase);
+
+public:
+  HostNativeThreadBase();
+  explicit HostNativeThreadBase(lldb::thread_t thread);
+  virtual ~HostNativeThreadBase() {}
+
+  virtual Status Join(lldb::thread_result_t *result) = 0;
+  virtual Status Cancel() = 0;
+  virtual bool IsJoinable() const;
+  virtual void Reset();
+  virtual bool EqualsThread(lldb::thread_t thread) const;
+  lldb::thread_t Release();
+
+  lldb::thread_t GetSystemHandle() const;
+  lldb::thread_result_t GetResult() const;
+
+protected:
+  static lldb::thread_result_t THREAD_ROUTINE
+  ThreadCreateTrampoline(lldb::thread_arg_t arg);
+
+  lldb::thread_t m_thread;
+  lldb::thread_result_t m_result;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostNativeThreadForward.h b/linux-x64/clang/include/lldb/Host/HostNativeThreadForward.h
new file mode 100644
index 0000000..261d3c7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostNativeThreadForward.h
@@ -0,0 +1,25 @@
+//===-- HostNativeThreadForward.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostNativeThreadForward_h_
+#define lldb_Host_HostNativeThreadForward_h_
+
+namespace lldb_private {
+#if defined(_WIN32)
+class HostThreadWindows;
+typedef HostThreadWindows HostNativeThread;
+#elif defined(__APPLE__)
+class HostThreadMacOSX;
+typedef HostThreadMacOSX HostNativeThread;
+#else
+class HostThreadPosix;
+typedef HostThreadPosix HostNativeThread;
+#endif
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostProcess.h b/linux-x64/clang/include/lldb/Host/HostProcess.h
new file mode 100644
index 0000000..d48ff1f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostProcess.h
@@ -0,0 +1,58 @@
+//===-- HostProcess.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostProcess_h_
+#define lldb_Host_HostProcess_h_
+
+#include "lldb/Host/Host.h"
+#include "lldb/lldb-types.h"
+
+/// \class HostInfo HostInfo.h "lldb/Host/HostProcess.h"
+/// A class that represents a running process on the host machine.
+///
+/// HostProcess allows querying and manipulation of processes running on the
+/// host machine.  It is not intended to be represent a process which is being
+/// debugged, although the native debug engine of a platform may likely back
+/// inferior processes by a HostProcess.
+///
+/// HostProcess is implemented using static polymorphism so that on any given
+/// platform, an instance of HostProcess will always be able to bind
+/// statically to the concrete Process implementation for that platform.  See
+/// HostInfo for more details.
+///
+
+namespace lldb_private {
+
+class HostNativeProcessBase;
+class HostThread;
+
+class HostProcess {
+public:
+  HostProcess();
+  HostProcess(lldb::process_t process);
+  ~HostProcess();
+
+  Status Terminate();
+  Status GetMainModule(FileSpec &file_spec) const;
+
+  lldb::pid_t GetProcessId() const;
+  bool IsRunning() const;
+
+  llvm::Expected<HostThread>
+  StartMonitoring(const Host::MonitorChildProcessCallback &callback,
+                  bool monitor_signals);
+
+  HostNativeProcessBase &GetNativeProcess();
+  const HostNativeProcessBase &GetNativeProcess() const;
+
+private:
+  std::shared_ptr<HostNativeProcessBase> m_native_process;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/HostThread.h b/linux-x64/clang/include/lldb/Host/HostThread.h
new file mode 100644
index 0000000..7bf2a1d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/HostThread.h
@@ -0,0 +1,51 @@
+//===-- HostThread.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostThread_h_
+#define lldb_Host_HostThread_h_
+
+#include "lldb/Host/HostNativeThreadForward.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-types.h"
+
+#include <memory>
+
+namespace lldb_private {
+
+class HostNativeThreadBase;
+
+/// \class HostInfo HostInfo.h "lldb/Host/HostThread.h"
+/// A class that represents a thread running inside of a process on the
+///        local machine.
+///
+/// HostThread allows querying and manipulation of threads running on the host
+/// machine.
+///
+class HostThread {
+public:
+  HostThread();
+  HostThread(lldb::thread_t thread);
+
+  Status Join(lldb::thread_result_t *result);
+  Status Cancel();
+  void Reset();
+  lldb::thread_t Release();
+
+  bool IsJoinable() const;
+  HostNativeThread &GetNativeThread();
+  const HostNativeThread &GetNativeThread() const;
+  lldb::thread_result_t GetResult() const;
+
+  bool EqualsThread(lldb::thread_t thread) const;
+
+private:
+  std::shared_ptr<HostNativeThreadBase> m_native_thread;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/LockFile.h b/linux-x64/clang/include/lldb/Host/LockFile.h
new file mode 100644
index 0000000..2a1cd3d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/LockFile.h
@@ -0,0 +1,24 @@
+//===-- LockFile.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_LockFile_h_
+#define liblldb_Host_LockFile_h_
+
+#if defined(_WIN32)
+#include "lldb/Host/windows/LockFileWindows.h"
+namespace lldb_private {
+typedef LockFileWindows LockFile;
+}
+#else
+#include "lldb/Host/posix/LockFilePosix.h"
+namespace lldb_private {
+typedef LockFilePosix LockFile;
+}
+#endif
+
+#endif // liblldb_Host_LockFile_h_
diff --git a/linux-x64/clang/include/lldb/Host/LockFileBase.h b/linux-x64/clang/include/lldb/Host/LockFileBase.h
new file mode 100644
index 0000000..be9e258
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/LockFileBase.h
@@ -0,0 +1,56 @@
+//===-- LockFileBase.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_LockFileBase_h_
+#define liblldb_Host_LockFileBase_h_
+
+#include "lldb/Utility/Status.h"
+
+#include <functional>
+
+namespace lldb_private {
+
+class LockFileBase {
+public:
+  virtual ~LockFileBase() = default;
+
+  bool IsLocked() const;
+
+  Status WriteLock(const uint64_t start, const uint64_t len);
+  Status TryWriteLock(const uint64_t start, const uint64_t len);
+
+  Status ReadLock(const uint64_t start, const uint64_t len);
+  Status TryReadLock(const uint64_t start, const uint64_t len);
+
+  Status Unlock();
+
+protected:
+  using Locker = std::function<Status(const uint64_t, const uint64_t)>;
+
+  LockFileBase(int fd);
+
+  virtual bool IsValidFile() const;
+
+  virtual Status DoWriteLock(const uint64_t start, const uint64_t len) = 0;
+  virtual Status DoTryWriteLock(const uint64_t start, const uint64_t len) = 0;
+
+  virtual Status DoReadLock(const uint64_t start, const uint64_t len) = 0;
+  virtual Status DoTryReadLock(const uint64_t start, const uint64_t len) = 0;
+
+  virtual Status DoUnlock() = 0;
+
+  Status DoLock(const Locker &locker, const uint64_t start, const uint64_t len);
+
+  int m_fd; // not owned.
+  bool m_locked;
+  uint64_t m_start;
+  uint64_t m_len;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/MainLoop.h b/linux-x64/clang/include/lldb/Host/MainLoop.h
new file mode 100644
index 0000000..d59aa28
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/MainLoop.h
@@ -0,0 +1,111 @@
+//===-- MainLoop.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_MainLoop_h_
+#define lldb_Host_MainLoop_h_
+
+#include "lldb/Host/Config.h"
+#include "lldb/Host/MainLoopBase.h"
+#include "llvm/ADT/DenseMap.h"
+#include <csignal>
+
+#if !HAVE_PPOLL && !HAVE_SYS_EVENT_H && !defined(__ANDROID__)
+#define SIGNAL_POLLING_UNSUPPORTED 1
+#endif
+
+namespace lldb_private {
+
+// Implementation of the MainLoopBase class. It can monitor file descriptors
+// for readability using ppoll, kqueue, poll or WSAPoll. On Windows it only
+// supports polling sockets, and will not work on generic file handles or
+// pipes. On systems without kqueue or ppoll handling singnals is not
+// supported. In addition to the common base, this class provides the ability
+// to invoke a given handler when a signal is received.
+//
+// Since this class is primarily intended to be used for single-threaded
+// processing, it does not attempt to perform any internal synchronisation and
+// any concurrent accesses must be protected  externally. However, it is
+// perfectly legitimate to have more than one instance of this class running on
+// separate threads, or even a single thread (with some limitations on signal
+// monitoring).
+// TODO: Add locking if this class is to be used in a multi-threaded context.
+class MainLoop : public MainLoopBase {
+private:
+  class SignalHandle;
+
+public:
+  typedef std::unique_ptr<SignalHandle> SignalHandleUP;
+
+  MainLoop();
+  ~MainLoop() override;
+
+  ReadHandleUP RegisterReadObject(const lldb::IOObjectSP &object_sp,
+                                  const Callback &callback,
+                                  Status &error) override;
+
+  // Listening for signals from multiple MainLoop instances is perfectly safe
+  // as long as they don't try to listen for the same signal. The callback
+  // function is invoked when the control returns to the Run() function, not
+  // when the hander is executed. This mean that you can treat the callback as
+  // a normal function and perform things which would not be safe in a signal
+  // handler. However, since the callback is not invoked synchronously, you
+  // cannot use this mechanism to handle SIGSEGV and the like.
+  SignalHandleUP RegisterSignal(int signo, const Callback &callback,
+                                Status &error);
+
+  Status Run() override;
+
+  // This should only be performed from a callback. Do not attempt to terminate
+  // the processing from another thread.
+  // TODO: Add synchronization if we want to be terminated from another thread.
+  void RequestTermination() override { m_terminate_request = true; }
+
+protected:
+  void UnregisterReadObject(IOObject::WaitableHandle handle) override;
+
+  void UnregisterSignal(int signo);
+
+private:
+  void ProcessReadObject(IOObject::WaitableHandle handle);
+  void ProcessSignal(int signo);
+
+  class SignalHandle {
+  public:
+    ~SignalHandle() { m_mainloop.UnregisterSignal(m_signo); }
+
+  private:
+    SignalHandle(MainLoop &mainloop, int signo)
+        : m_mainloop(mainloop), m_signo(signo) {}
+
+    MainLoop &m_mainloop;
+    int m_signo;
+
+    friend class MainLoop;
+    DISALLOW_COPY_AND_ASSIGN(SignalHandle);
+  };
+
+  struct SignalInfo {
+    Callback callback;
+#if HAVE_SIGACTION
+    struct sigaction old_action;
+#endif
+    bool was_blocked : 1;
+  };
+  class RunImpl;
+
+  llvm::DenseMap<IOObject::WaitableHandle, Callback> m_read_fds;
+  llvm::DenseMap<int, SignalInfo> m_signals;
+#if HAVE_SYS_EVENT_H
+  int m_kqueue;
+#endif
+  bool m_terminate_request : 1;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_Host_MainLoop_h_
diff --git a/linux-x64/clang/include/lldb/Host/MainLoopBase.h b/linux-x64/clang/include/lldb/Host/MainLoopBase.h
new file mode 100644
index 0000000..3fee2b2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/MainLoopBase.h
@@ -0,0 +1,87 @@
+//===-- MainLoopBase.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_posix_MainLoopBase_h_
+#define lldb_Host_posix_MainLoopBase_h_
+
+#include "lldb/Utility/IOObject.h"
+#include "lldb/Utility/Status.h"
+#include "llvm/Support/ErrorHandling.h"
+#include <functional>
+
+namespace lldb_private {
+
+// The purpose of this class is to enable multiplexed processing of data from
+// different sources without resorting to multi-threading. Clients can register
+// IOObjects, which will be monitored for readability, and when they become
+// ready, the specified callback will be invoked. Monitoring for writability is
+// not supported, but can be easily added if needed.
+//
+// The RegisterReadObject function return a handle, which controls the duration
+// of the monitoring. When this handle is destroyed, the callback is
+// deregistered.
+//
+// This class simply defines the interface common for all platforms, actual
+// implementations are platform-specific.
+class MainLoopBase {
+private:
+  class ReadHandle;
+
+public:
+  MainLoopBase() {}
+  virtual ~MainLoopBase() {}
+
+  typedef std::unique_ptr<ReadHandle> ReadHandleUP;
+
+  typedef std::function<void(MainLoopBase &)> Callback;
+
+  virtual ReadHandleUP RegisterReadObject(const lldb::IOObjectSP &object_sp,
+                                          const Callback &callback,
+                                          Status &error) {
+    llvm_unreachable("Not implemented");
+  }
+
+  // Waits for registered events and invoke the proper callbacks. Returns when
+  // all callbacks deregister themselves or when someone requests termination.
+  virtual Status Run() { llvm_unreachable("Not implemented"); }
+
+  // Requests the exit of the Run() function.
+  virtual void RequestTermination() { llvm_unreachable("Not implemented"); }
+
+protected:
+  ReadHandleUP CreateReadHandle(const lldb::IOObjectSP &object_sp) {
+    return ReadHandleUP(new ReadHandle(*this, object_sp->GetWaitableHandle()));
+  }
+
+  virtual void UnregisterReadObject(IOObject::WaitableHandle handle) {
+    llvm_unreachable("Not implemented");
+  }
+
+private:
+  class ReadHandle {
+  public:
+    ~ReadHandle() { m_mainloop.UnregisterReadObject(m_handle); }
+
+  private:
+    ReadHandle(MainLoopBase &mainloop, IOObject::WaitableHandle handle)
+        : m_mainloop(mainloop), m_handle(handle) {}
+
+    MainLoopBase &m_mainloop;
+    IOObject::WaitableHandle m_handle;
+
+    friend class MainLoopBase;
+    DISALLOW_COPY_AND_ASSIGN(ReadHandle);
+  };
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(MainLoopBase);
+};
+
+} // namespace lldb_private
+
+#endif // lldb_Host_posix_MainLoopBase_h_
diff --git a/linux-x64/clang/include/lldb/Host/MonitoringProcessLauncher.h b/linux-x64/clang/include/lldb/Host/MonitoringProcessLauncher.h
new file mode 100644
index 0000000..59111a0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/MonitoringProcessLauncher.h
@@ -0,0 +1,34 @@
+//===-- MonitoringProcessLauncher.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_MonitoringProcessLauncher_h_
+#define lldb_Host_MonitoringProcessLauncher_h_
+
+#include <memory>
+#include "lldb/Host/ProcessLauncher.h"
+
+namespace lldb_private {
+
+class MonitoringProcessLauncher : public ProcessLauncher {
+public:
+  explicit MonitoringProcessLauncher(
+      std::unique_ptr<ProcessLauncher> delegate_launcher);
+
+  /// Launch the process specified in launch_info. The monitoring callback in
+  /// launch_info must be set, and it will be called when the process
+  /// terminates.
+  HostProcess LaunchProcess(const ProcessLaunchInfo &launch_info,
+                            Status &error) override;
+
+private:
+  std::unique_ptr<ProcessLauncher> m_delegate_launcher;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_Host_MonitoringProcessLauncher_h_
diff --git a/linux-x64/clang/include/lldb/Host/OptionParser.h b/linux-x64/clang/include/lldb/Host/OptionParser.h
new file mode 100644
index 0000000..ca05946
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/OptionParser.h
@@ -0,0 +1,50 @@
+//===-- OptionParser.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionParser_h_
+#define liblldb_OptionParser_h_
+
+#include <mutex>
+#include <string>
+
+#include "llvm/ADT/StringRef.h"
+
+struct option;
+
+namespace lldb_private {
+
+struct OptionDefinition;
+
+struct Option {
+  // The definition of the option that this refers to.
+  const OptionDefinition *definition;
+  // if not NULL, set *flag to val when option found
+  int *flag;
+  // if flag not NULL, value to set *flag to; else return value
+  int val;
+};
+
+class OptionParser {
+public:
+  enum OptionArgument { eNoArgument = 0, eRequiredArgument, eOptionalArgument };
+
+  static void Prepare(std::unique_lock<std::mutex> &lock);
+
+  static void EnableError(bool error);
+
+  static int Parse(int argc, char *const argv[], llvm::StringRef optstring,
+                   const Option *longopts, int *longindex);
+
+  static char *GetOptionArgument();
+  static int GetOptionIndex();
+  static int GetOptionErrorCause();
+  static std::string GetShortOptionString(struct option *long_options);
+};
+}
+
+#endif // liblldb_OptionParser_h_
diff --git a/linux-x64/clang/include/lldb/Host/Pipe.h b/linux-x64/clang/include/lldb/Host/Pipe.h
new file mode 100644
index 0000000..ea75342
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Pipe.h
@@ -0,0 +1,24 @@
+//===-- Pipe.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_Pipe_h_
+#define liblldb_Host_Pipe_h_
+
+#if defined(_WIN32)
+#include "lldb/Host/windows/PipeWindows.h"
+namespace lldb_private {
+typedef PipeWindows Pipe;
+}
+#else
+#include "lldb/Host/posix/PipePosix.h"
+namespace lldb_private {
+typedef PipePosix Pipe;
+}
+#endif
+
+#endif // liblldb_Host_Pipe_h_
diff --git a/linux-x64/clang/include/lldb/Host/PipeBase.h b/linux-x64/clang/include/lldb/Host/PipeBase.h
new file mode 100644
index 0000000..1aa4db3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/PipeBase.h
@@ -0,0 +1,67 @@
+//===-- PipeBase.h -----------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_PipeBase_h_
+#define liblldb_Host_PipeBase_h_
+
+#include <chrono>
+#include <string>
+
+#include "lldb/Utility/Status.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+
+namespace lldb_private {
+class PipeBase {
+public:
+  virtual ~PipeBase();
+
+  virtual Status CreateNew(bool child_process_inherit) = 0;
+  virtual Status CreateNew(llvm::StringRef name,
+                           bool child_process_inherit) = 0;
+  virtual Status CreateWithUniqueName(llvm::StringRef prefix,
+                                      bool child_process_inherit,
+                                      llvm::SmallVectorImpl<char> &name) = 0;
+
+  virtual Status OpenAsReader(llvm::StringRef name,
+                              bool child_process_inherit) = 0;
+
+  Status OpenAsWriter(llvm::StringRef name, bool child_process_inherit);
+  virtual Status
+  OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit,
+                          const std::chrono::microseconds &timeout) = 0;
+
+  virtual bool CanRead() const = 0;
+  virtual bool CanWrite() const = 0;
+
+  virtual lldb::pipe_t GetReadPipe() const = 0;
+  virtual lldb::pipe_t GetWritePipe() const = 0;
+
+  virtual int GetReadFileDescriptor() const = 0;
+  virtual int GetWriteFileDescriptor() const = 0;
+  virtual int ReleaseReadFileDescriptor() = 0;
+  virtual int ReleaseWriteFileDescriptor() = 0;
+  virtual void CloseReadFileDescriptor() = 0;
+  virtual void CloseWriteFileDescriptor() = 0;
+
+  // Close both descriptors
+  virtual void Close() = 0;
+
+  // Delete named pipe.
+  virtual Status Delete(llvm::StringRef name) = 0;
+
+  virtual Status Write(const void *buf, size_t size, size_t &bytes_written) = 0;
+  virtual Status ReadWithTimeout(void *buf, size_t size,
+                                 const std::chrono::microseconds &timeout,
+                                 size_t &bytes_read) = 0;
+  Status Read(void *buf, size_t size, size_t &bytes_read);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/PosixApi.h b/linux-x64/clang/include/lldb/Host/PosixApi.h
new file mode 100644
index 0000000..04ca3a8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/PosixApi.h
@@ -0,0 +1,23 @@
+//===-- PosixApi.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_PosixApi_h
+#define liblldb_Host_PosixApi_h
+
+// This file defines platform specific functions, macros, and types necessary
+// to provide a minimum level of compatibility across all platforms to rely on
+// various posix api functionality.
+
+#if defined(_WIN32)
+#include "lldb/Host/windows/PosixApi.h"
+#else
+#include <unistd.h>
+#include <csignal>
+#endif
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/ProcessLaunchInfo.h b/linux-x64/clang/include/lldb/Host/ProcessLaunchInfo.h
new file mode 100644
index 0000000..d068aa6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/ProcessLaunchInfo.h
@@ -0,0 +1,168 @@
+//===-- ProcessLaunchInfo.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ProcessLaunch_Info_h
+#define liblldb_ProcessLaunch_Info_h
+
+// C++ Headers
+#include <string>
+
+// LLDB Headers
+#include "lldb/Utility/Flags.h"
+
+#include "lldb/Host/FileAction.h"
+#include "lldb/Host/Host.h"
+#include "lldb/Host/PseudoTerminal.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/ProcessInfo.h"
+
+namespace lldb_private {
+
+// ProcessLaunchInfo
+//
+// Describes any information that is required to launch a process.
+
+class ProcessLaunchInfo : public ProcessInfo {
+public:
+  ProcessLaunchInfo();
+
+  ProcessLaunchInfo(const FileSpec &stdin_file_spec,
+                    const FileSpec &stdout_file_spec,
+                    const FileSpec &stderr_file_spec,
+                    const FileSpec &working_dir, uint32_t launch_flags);
+
+  void AppendFileAction(const FileAction &info) {
+    m_file_actions.push_back(info);
+  }
+
+  bool AppendCloseFileAction(int fd);
+
+  bool AppendDuplicateFileAction(int fd, int dup_fd);
+
+  bool AppendOpenFileAction(int fd, const FileSpec &file_spec, bool read,
+                            bool write);
+
+  bool AppendSuppressFileAction(int fd, bool read, bool write);
+
+  // Redirect stdin/stdout/stderr to a pty, if no action for the respective file
+  // descriptor is specified. (So if stdin and stdout already have file actions,
+  // but stderr doesn't, then only stderr will be redirected to a pty.)
+  llvm::Error SetUpPtyRedirection();
+
+  size_t GetNumFileActions() const { return m_file_actions.size(); }
+
+  const FileAction *GetFileActionAtIndex(size_t idx) const;
+
+  const FileAction *GetFileActionForFD(int fd) const;
+
+  Flags &GetFlags() { return m_flags; }
+
+  const Flags &GetFlags() const { return m_flags; }
+
+  const FileSpec &GetWorkingDirectory() const;
+
+  void SetWorkingDirectory(const FileSpec &working_dir);
+
+  const char *GetProcessPluginName() const;
+
+  void SetProcessPluginName(llvm::StringRef plugin);
+
+  const FileSpec &GetShell() const;
+
+  void SetShell(const FileSpec &shell);
+
+  uint32_t GetResumeCount() const { return m_resume_count; }
+
+  void SetResumeCount(uint32_t c) { m_resume_count = c; }
+
+  bool GetLaunchInSeparateProcessGroup() const {
+    return m_flags.Test(lldb::eLaunchFlagLaunchInSeparateProcessGroup);
+  }
+
+  void SetLaunchInSeparateProcessGroup(bool separate);
+
+  bool GetShellExpandArguments() const {
+    return m_flags.Test(lldb::eLaunchFlagShellExpandArguments);
+  }
+
+  void SetShellExpandArguments(bool expand);
+
+  void Clear();
+
+  bool ConvertArgumentsForLaunchingInShell(Status &error, bool localhost,
+                                           bool will_debug,
+                                           bool first_arg_is_full_shell_command,
+                                           int32_t num_resumes);
+
+  void
+  SetMonitorProcessCallback(const Host::MonitorChildProcessCallback &callback,
+                            bool monitor_signals);
+
+  Host::MonitorChildProcessCallback GetMonitorProcessCallback() const {
+    return m_monitor_callback;
+  }
+
+  /// A Monitor callback which does not take any action on process events. Use
+  /// this if you don't need to take any particular action when the process
+  /// terminates, but you still need to reap it.
+  static bool NoOpMonitorCallback(lldb::pid_t pid, bool exited, int signal,
+                                  int status);
+
+  bool GetMonitorSignals() const { return m_monitor_signals; }
+
+  // If the LaunchInfo has a monitor callback, then arrange to monitor the
+  // process. Return true if the LaunchInfo has taken care of monitoring the
+  // process, and false if the caller might want to monitor the process
+  // themselves.
+
+  bool MonitorProcess() const;
+
+  PseudoTerminal &GetPTY() { return *m_pty; }
+
+  // Get and set the actual listener that will be used for the process events
+  lldb::ListenerSP GetListener() const { return m_listener_sp; }
+
+  void SetListener(const lldb::ListenerSP &listener_sp) {
+    m_listener_sp = listener_sp;
+  }
+
+  lldb::ListenerSP GetHijackListener() const { return m_hijack_listener_sp; }
+
+  void SetHijackListener(const lldb::ListenerSP &listener_sp) {
+    m_hijack_listener_sp = listener_sp;
+  }
+
+  void SetLaunchEventData(const char *data) { m_event_data.assign(data); }
+
+  const char *GetLaunchEventData() const { return m_event_data.c_str(); }
+
+  void SetDetachOnError(bool enable);
+
+  bool GetDetachOnError() const {
+    return m_flags.Test(lldb::eLaunchFlagDetachOnError);
+  }
+
+protected:
+  FileSpec m_working_dir;
+  std::string m_plugin_name;
+  FileSpec m_shell;
+  Flags m_flags; // Bitwise OR of bits from lldb::LaunchFlags
+  std::vector<FileAction> m_file_actions; // File actions for any other files
+  std::shared_ptr<PseudoTerminal> m_pty;
+  uint32_t m_resume_count; // How many times do we resume after launching
+  Host::MonitorChildProcessCallback m_monitor_callback;
+  void *m_monitor_callback_baton;
+  bool m_monitor_signals;
+  std::string m_event_data; // A string passed to the plugin launch, having no
+                            // meaning to the upper levels of lldb.
+  lldb::ListenerSP m_listener_sp;
+  lldb::ListenerSP m_hijack_listener_sp;
+};
+}
+
+#endif // liblldb_ProcessLaunch_Info_h
diff --git a/linux-x64/clang/include/lldb/Host/ProcessLauncher.h b/linux-x64/clang/include/lldb/Host/ProcessLauncher.h
new file mode 100644
index 0000000..a5b6a6c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/ProcessLauncher.h
@@ -0,0 +1,26 @@
+//===-- ProcessLauncher.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_ProcessLauncher_h_
+#define lldb_Host_ProcessLauncher_h_
+
+namespace lldb_private {
+
+class ProcessLaunchInfo;
+class Status;
+class HostProcess;
+
+class ProcessLauncher {
+public:
+  virtual ~ProcessLauncher() {}
+  virtual HostProcess LaunchProcess(const ProcessLaunchInfo &launch_info,
+                                    Status &error) = 0;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/ProcessRunLock.h b/linux-x64/clang/include/lldb/Host/ProcessRunLock.h
new file mode 100644
index 0000000..4927fbb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/ProcessRunLock.h
@@ -0,0 +1,83 @@
+//===-- ProcessRunLock.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ProcessRunLock_h_
+#define liblldb_ProcessRunLock_h_
+
+#include <stdint.h>
+#include <time.h>
+
+#include "lldb/lldb-defines.h"
+
+/// Enumerations for broadcasting.
+namespace lldb_private {
+
+/// \class ProcessRunLock ProcessRunLock.h "lldb/Host/ProcessRunLock.h"
+/// A class used to prevent the process from starting while other
+/// threads are accessing its data, and prevent access to its data while it is
+/// running.
+
+class ProcessRunLock {
+public:
+  ProcessRunLock();
+  ~ProcessRunLock();
+
+  bool ReadTryLock();
+  bool ReadUnlock();
+  bool SetRunning();
+  bool TrySetRunning();
+  bool SetStopped();
+
+  class ProcessRunLocker {
+  public:
+    ProcessRunLocker() : m_lock(nullptr) {}
+
+    ~ProcessRunLocker() { Unlock(); }
+
+    // Try to lock the read lock, but only do so if there are no writers.
+    bool TryLock(ProcessRunLock *lock) {
+      if (m_lock) {
+        if (m_lock == lock)
+          return true; // We already have this lock locked
+        else
+          Unlock();
+      }
+      if (lock) {
+        if (lock->ReadTryLock()) {
+          m_lock = lock;
+          return true;
+        }
+      }
+      return false;
+    }
+
+  protected:
+    void Unlock() {
+      if (m_lock) {
+        m_lock->ReadUnlock();
+        m_lock = nullptr;
+      }
+    }
+
+    ProcessRunLock *m_lock;
+
+  private:
+    DISALLOW_COPY_AND_ASSIGN(ProcessRunLocker);
+  };
+
+protected:
+  lldb::rwlock_t m_rwlock;
+  bool m_running;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ProcessRunLock);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ProcessRunLock_h_
diff --git a/linux-x64/clang/include/lldb/Host/PseudoTerminal.h b/linux-x64/clang/include/lldb/Host/PseudoTerminal.h
new file mode 100644
index 0000000..8b27890
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/PseudoTerminal.h
@@ -0,0 +1,217 @@
+//===-- PseudoTerminal.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_HOST_PSEUDOTERMINAL_H
+#define LLDB_HOST_PSEUDOTERMINAL_H
+
+#include <fcntl.h>
+#include <string>
+
+#include "lldb/lldb-defines.h"
+
+namespace lldb_private {
+
+/// \class PseudoTerminal PseudoTerminal.h "lldb/Host/PseudoTerminal.h"
+/// A pseudo terminal helper class.
+///
+/// The pseudo terminal class abstracts the use of pseudo terminals on the
+/// host system.
+class PseudoTerminal {
+public:
+  enum {
+    invalid_fd = -1 ///< Invalid file descriptor value
+  };
+
+  /// Default constructor
+  ///
+  /// Constructs this object with invalid master and slave file descriptors.
+  PseudoTerminal();
+
+  /// Destructor
+  ///
+  /// The destructor will close the master and slave file descriptors if they
+  /// are valid and ownership has not been released using one of: @li
+  /// PseudoTerminal::ReleaseMasterFileDescriptor() @li
+  /// PseudoTerminal::ReleaseSaveFileDescriptor()
+  ~PseudoTerminal();
+
+  /// Close the master file descriptor if it is valid.
+  void CloseMasterFileDescriptor();
+
+  /// Close the slave file descriptor if it is valid.
+  void CloseSlaveFileDescriptor();
+
+  /// Fork a child process that uses pseudo terminals for its stdio.
+  ///
+  /// In the parent process, a call to this function results in a pid being
+  /// returned. If the pid is valid, the master file descriptor can be used
+  /// for read/write access to stdio of the child process.
+  ///
+  /// In the child process the stdin/stdout/stderr will already be routed to
+  /// the slave pseudo terminal and the master file descriptor will be closed
+  /// as it is no longer needed by the child process.
+  ///
+  /// This class will close the file descriptors for the master/slave when the
+  /// destructor is called. The file handles can be released using either: @li
+  /// PseudoTerminal::ReleaseMasterFileDescriptor() @li
+  /// PseudoTerminal::ReleaseSaveFileDescriptor()
+  ///
+  /// \param[out] error
+  ///     An pointer to an error that can describe any errors that
+  ///     occur. This can be NULL if no error status is desired.
+  ///
+  /// \return
+  ///     \li \b Parent process: a child process ID that is greater
+  ///         than zero, or -1 if the fork fails.
+  ///     \li \b Child process: zero.
+  lldb::pid_t Fork(char *error_str, size_t error_len);
+
+  /// The master file descriptor accessor.
+  ///
+  /// This object retains ownership of the master file descriptor when this
+  /// accessor is used. Users can call the member function
+  /// PseudoTerminal::ReleaseMasterFileDescriptor() if this object should
+  /// release ownership of the slave file descriptor.
+  ///
+  /// \return
+  ///     The master file descriptor, or PseudoTerminal::invalid_fd
+  ///     if the master file  descriptor is not currently valid.
+  ///
+  /// \see PseudoTerminal::ReleaseMasterFileDescriptor()
+  int GetMasterFileDescriptor() const;
+
+  /// The slave file descriptor accessor.
+  ///
+  /// This object retains ownership of the slave file descriptor when this
+  /// accessor is used. Users can call the member function
+  /// PseudoTerminal::ReleaseSlaveFileDescriptor() if this object should
+  /// release ownership of the slave file descriptor.
+  ///
+  /// \return
+  ///     The slave file descriptor, or PseudoTerminal::invalid_fd
+  ///     if the slave file descriptor is not currently valid.
+  ///
+  /// \see PseudoTerminal::ReleaseSlaveFileDescriptor()
+  int GetSlaveFileDescriptor() const;
+
+  /// Get the name of the slave pseudo terminal.
+  ///
+  /// A master pseudo terminal should already be valid prior to
+  /// calling this function.
+  ///
+  /// \param[out] error
+  ///     An pointer to an error that can describe any errors that
+  ///     occur. This can be NULL if no error status is desired.
+  ///
+  /// \return
+  ///     The name of the slave pseudo terminal as a NULL terminated
+  ///     C. This string that comes from static memory, so a copy of
+  ///     the string should be made as subsequent calls can change
+  ///     this value. NULL is returned if this object doesn't have
+  ///     a valid master pseudo terminal opened or if the call to
+  ///     \c ptsname() fails.
+  ///
+  /// \see PseudoTerminal::OpenFirstAvailableMaster()
+  const char *GetSlaveName(char *error_str, size_t error_len) const;
+
+  /// Open the first available pseudo terminal.
+  ///
+  /// Opens the first available pseudo terminal with \a oflag as the
+  /// permissions. The opened master file descriptor is stored in this object
+  /// and can be accessed by calling the
+  /// PseudoTerminal::GetMasterFileDescriptor() accessor. Clients can call the
+  /// PseudoTerminal::ReleaseMasterFileDescriptor() accessor function if they
+  /// wish to use the master file descriptor beyond the lifespan of this
+  /// object.
+  ///
+  /// If this object still has a valid master file descriptor when its
+  /// destructor is called, it will close it.
+  ///
+  /// \param[in] oflag
+  ///     Flags to use when calling \c posix_openpt(\a oflag).
+  ///     A value of "O_RDWR|O_NOCTTY" is suggested.
+  ///
+  /// \param[out] error
+  ///     An pointer to an error that can describe any errors that
+  ///     occur. This can be NULL if no error status is desired.
+  ///
+  /// \return
+  ///     \li \b true when the master files descriptor is
+  ///         successfully opened.
+  ///     \li \b false if anything goes wrong.
+  ///
+  /// \see PseudoTerminal::GetMasterFileDescriptor() @see
+  /// PseudoTerminal::ReleaseMasterFileDescriptor()
+  bool OpenFirstAvailableMaster(int oflag, char *error_str, size_t error_len);
+
+  /// Open the slave for the current master pseudo terminal.
+  ///
+  /// A master pseudo terminal should already be valid prior to
+  /// calling this function. The opened slave file descriptor is stored in
+  /// this object and can be accessed by calling the
+  /// PseudoTerminal::GetSlaveFileDescriptor() accessor. Clients can call the
+  /// PseudoTerminal::ReleaseSlaveFileDescriptor() accessor function if they
+  /// wish to use the slave file descriptor beyond the lifespan of this
+  /// object.
+  ///
+  /// If this object still has a valid slave file descriptor when its
+  /// destructor is called, it will close it.
+  ///
+  /// \param[in] oflag
+  ///     Flags to use when calling \c open(\a oflag).
+  ///
+  /// \param[out] error
+  ///     An pointer to an error that can describe any errors that
+  ///     occur. This can be NULL if no error status is desired.
+  ///
+  /// \return
+  ///     \li \b true when the master files descriptor is
+  ///         successfully opened.
+  ///     \li \b false if anything goes wrong.
+  ///
+  /// \see PseudoTerminal::OpenFirstAvailableMaster() @see
+  /// PseudoTerminal::GetSlaveFileDescriptor() @see
+  /// PseudoTerminal::ReleaseSlaveFileDescriptor()
+  bool OpenSlave(int oflag, char *error_str, size_t error_len);
+
+  /// Release the master file descriptor.
+  ///
+  /// Releases ownership of the master pseudo terminal file descriptor without
+  /// closing it. The destructor for this class will close the master file
+  /// descriptor if the ownership isn't released using this call and the
+  /// master file descriptor has been opened.
+  ///
+  /// \return
+  ///     The master file descriptor, or PseudoTerminal::invalid_fd
+  ///     if the mast file descriptor is not currently valid.
+  int ReleaseMasterFileDescriptor();
+
+  /// Release the slave file descriptor.
+  ///
+  /// Release ownership of the slave pseudo terminal file descriptor without
+  /// closing it. The destructor for this class will close the slave file
+  /// descriptor if the ownership isn't released using this call and the slave
+  /// file descriptor has been opened.
+  ///
+  /// \return
+  ///     The slave file descriptor, or PseudoTerminal::invalid_fd
+  ///     if the slave file descriptor is not currently valid.
+  int ReleaseSlaveFileDescriptor();
+
+protected:
+  // Member variables
+  int m_master_fd; ///< The file descriptor for the master.
+  int m_slave_fd;  ///< The file descriptor for the slave.
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(PseudoTerminal);
+};
+
+} // namespace lldb_private
+
+#endif // #ifndef liblldb_PseudoTerminal_h_
diff --git a/linux-x64/clang/include/lldb/Host/SafeMachO.h b/linux-x64/clang/include/lldb/Host/SafeMachO.h
new file mode 100644
index 0000000..ec9887e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/SafeMachO.h
@@ -0,0 +1,115 @@
+//===-- SafeMachO.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef liblldb_SafeMachO_h_
+#define liblldb_SafeMachO_h_
+
+// This header file is required to work around collisions between the defines
+// in mach/machine.h, and enum members of the same name in llvm's MachO.h.  If
+// you want to use llvm/Support/MachO.h, use this file instead. The caveats
+// are: 1) You can only use the MachO.h enums, you can't use the defines.  That
+// won't make a difference since the values
+//    are the same.
+// 2) If you need any header file that relies on mach/machine.h, you must
+// include that first. 3) This isn't a total solution, it doesn't undef every
+// define that MachO.h has borrowed from various system headers,
+//    only the ones that come from mach/machine.h because that is the one we
+//    ended up pulling in from various places.
+//
+
+#undef CPU_ARCH_MASK
+#undef CPU_ARCH_ABI64
+
+#undef CPU_TYPE_ANY
+#undef CPU_TYPE_X86
+#undef CPU_TYPE_I386
+#undef CPU_TYPE_X86_64
+#undef CPU_TYPE_MC98000
+#undef CPU_TYPE_ARM
+#undef CPU_TYPE_ARM64
+#undef CPU_TYPE_SPARC
+#undef CPU_TYPE_POWERPC
+#undef CPU_TYPE_POWERPC64
+
+#undef CPU_SUB_TYPE_MASK
+#undef CPU_SUB_TYPE_LIB64
+
+#undef CPU_SUBTYPE_MULTIPLE
+
+#undef CPU_SUBTYPE_I386_ALL
+#undef CPU_SUBTYPE_386
+#undef CPU_SUBTYPE_486
+#undef CPU_SUBTYPE_486SX
+#undef CPU_SUBTYPE_586
+#undef CPU_SUBTYPE_PENT
+#undef CPU_SUBTYPE_PENTPRO
+#undef CPU_SUBTYPE_PENTII_M3
+#undef CPU_SUBTYPE_PENTII_M5
+#undef CPU_SUBTYPE_CELERON
+#undef CPU_SUBTYPE_CELERON_MOBILE
+#undef CPU_SUBTYPE_PENTIUM_3
+#undef CPU_SUBTYPE_PENTIUM_3_M
+#undef CPU_SUBTYPE_PENTIUM_3_XEON
+#undef CPU_SUBTYPE_PENTIUM_M
+#undef CPU_SUBTYPE_PENTIUM_4
+#undef CPU_SUBTYPE_PENTIUM_4_M
+#undef CPU_SUBTYPE_ITANIUM
+#undef CPU_SUBTYPE_ITANIUM_2
+#undef CPU_SUBTYPE_XEON
+#undef CPU_SUBTYPE_XEON_MP
+
+#undef CPU_SUBTYPE_X86_ALL
+#undef CPU_SUBTYPE_X86_64_ALL
+#undef CPU_SUBTYPE_X86_ARCH1
+#undef CPU_SUBTYPE_X86_64_H
+
+#undef CPU_SUBTYPE_INTEL
+#undef CPU_SUBTYPE_INTEL_FAMILY
+#undef CPU_SUBTYPE_INTEL_FAMILY_MAX
+#undef CPU_SUBTYPE_INTEL_MODEL
+#undef CPU_SUBTYPE_INTEL_MODEL_ALL
+
+#undef CPU_SUBTYPE_ARM
+#undef CPU_SUBTYPE_ARM_ALL
+#undef CPU_SUBTYPE_ARM_V4T
+#undef CPU_SUBTYPE_ARM_V6
+#undef CPU_SUBTYPE_ARM_V5
+#undef CPU_SUBTYPE_ARM_V5TEJ
+#undef CPU_SUBTYPE_ARM_XSCALE
+#undef CPU_SUBTYPE_ARM_V7
+
+#undef CPU_SUBTYPE_ARM_V7S
+#undef CPU_SUBTYPE_ARM_V7K
+#undef CPU_SUBTYPE_ARM_V6M
+#undef CPU_SUBTYPE_ARM_V7M
+#undef CPU_SUBTYPE_ARM_V7EM
+
+#undef CPU_SUBTYPE_ARM64_ALL
+
+#undef CPU_SUBTYPE_SPARC_ALL
+
+#undef CPU_SUBTYPE_POWERPC
+#undef CPU_SUBTYPE_POWERPC_ALL
+#undef CPU_SUBTYPE_POWERPC_601
+#undef CPU_SUBTYPE_POWERPC_602
+#undef CPU_SUBTYPE_POWERPC_603
+#undef CPU_SUBTYPE_POWERPC_603e
+#undef CPU_SUBTYPE_POWERPC_603ev
+#undef CPU_SUBTYPE_POWERPC_604
+#undef CPU_SUBTYPE_POWERPC_604e
+#undef CPU_SUBTYPE_POWERPC_620
+#undef CPU_SUBTYPE_POWERPC_750
+#undef CPU_SUBTYPE_POWERPC_7400
+#undef CPU_SUBTYPE_POWERPC_7450
+#undef CPU_SUBTYPE_POWERPC_970
+
+#undef CPU_SUBTYPE_MC980000_ALL
+#undef CPU_SUBTYPE_MC98601
+
+#include "llvm/BinaryFormat/MachO.h"
+
+#endif // liblldb_SafeMachO_h_
diff --git a/linux-x64/clang/include/lldb/Host/Socket.h b/linux-x64/clang/include/lldb/Host/Socket.h
new file mode 100644
index 0000000..6f96bd7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Socket.h
@@ -0,0 +1,129 @@
+//===-- Socket.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_Socket_h_
+#define liblldb_Host_Socket_h_
+
+#include <memory>
+#include <string>
+
+#include "lldb/lldb-private.h"
+
+#include "lldb/Host/SocketAddress.h"
+#include "lldb/Utility/IOObject.h"
+#include "lldb/Utility/Predicate.h"
+#include "lldb/Utility/Status.h"
+
+#ifdef _WIN32
+#include "lldb/Host/windows/windows.h"
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#endif
+
+namespace llvm {
+class StringRef;
+}
+
+namespace lldb_private {
+
+#if defined(_MSC_VER)
+typedef SOCKET NativeSocket;
+#else
+typedef int NativeSocket;
+#endif
+
+class Socket : public IOObject {
+public:
+  enum SocketProtocol {
+    ProtocolTcp,
+    ProtocolUdp,
+    ProtocolUnixDomain,
+    ProtocolUnixAbstract
+  };
+
+  static const NativeSocket kInvalidSocketValue;
+
+  ~Socket() override;
+
+  static llvm::Error Initialize();
+  static void Terminate();
+
+  static std::unique_ptr<Socket> Create(const SocketProtocol protocol,
+                                        bool child_processes_inherit,
+                                        Status &error);
+
+  virtual Status Connect(llvm::StringRef name) = 0;
+  virtual Status Listen(llvm::StringRef name, int backlog) = 0;
+  virtual Status Accept(Socket *&socket) = 0;
+
+  // Initialize a Tcp Socket object in listening mode.  listen and accept are
+  // implemented separately because the caller may wish to manipulate or query
+  // the socket after it is initialized, but before entering a blocking accept.
+  static Status TcpListen(llvm::StringRef host_and_port,
+                          bool child_processes_inherit, Socket *&socket,
+                          Predicate<uint16_t> *predicate, int backlog = 5);
+  static Status TcpConnect(llvm::StringRef host_and_port,
+                           bool child_processes_inherit, Socket *&socket);
+  static Status UdpConnect(llvm::StringRef host_and_port,
+                           bool child_processes_inherit, Socket *&socket);
+  static Status UnixDomainConnect(llvm::StringRef host_and_port,
+                                  bool child_processes_inherit,
+                                  Socket *&socket);
+  static Status UnixDomainAccept(llvm::StringRef host_and_port,
+                                 bool child_processes_inherit, Socket *&socket);
+  static Status UnixAbstractConnect(llvm::StringRef host_and_port,
+                                    bool child_processes_inherit,
+                                    Socket *&socket);
+  static Status UnixAbstractAccept(llvm::StringRef host_and_port,
+                                   bool child_processes_inherit,
+                                   Socket *&socket);
+
+  int GetOption(int level, int option_name, int &option_value);
+  int SetOption(int level, int option_name, int option_value);
+
+  NativeSocket GetNativeSocket() const { return m_socket; }
+  SocketProtocol GetSocketProtocol() const { return m_protocol; }
+
+  Status Read(void *buf, size_t &num_bytes) override;
+  Status Write(const void *buf, size_t &num_bytes) override;
+
+  virtual Status PreDisconnect();
+  Status Close() override;
+
+  bool IsValid() const override { return m_socket != kInvalidSocketValue; }
+  WaitableHandle GetWaitableHandle() override;
+
+  static bool DecodeHostAndPort(llvm::StringRef host_and_port,
+                                std::string &host_str, std::string &port_str,
+                                int32_t &port, Status *error_ptr);
+
+  // If this Socket is connected then return the URI used to connect.
+  virtual std::string GetRemoteConnectionURI() const { return ""; };
+
+protected:
+  Socket(SocketProtocol protocol, bool should_close,
+         bool m_child_process_inherit);
+
+  virtual size_t Send(const void *buf, const size_t num_bytes);
+
+  static void SetLastError(Status &error);
+  static NativeSocket CreateSocket(const int domain, const int type,
+                                   const int protocol,
+                                   bool child_processes_inherit, Status &error);
+  static NativeSocket AcceptSocket(NativeSocket sockfd, struct sockaddr *addr,
+                                   socklen_t *addrlen,
+                                   bool child_processes_inherit, Status &error);
+
+  SocketProtocol m_protocol;
+  NativeSocket m_socket;
+  bool m_child_processes_inherit;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Host_Socket_h_
diff --git a/linux-x64/clang/include/lldb/Host/SocketAddress.h b/linux-x64/clang/include/lldb/Host/SocketAddress.h
new file mode 100644
index 0000000..620827f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/SocketAddress.h
@@ -0,0 +1,190 @@
+//===-- SocketAddress.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SocketAddress_h_
+#define liblldb_SocketAddress_h_
+
+#include <stdint.h>
+
+#ifdef _WIN32
+#include "lldb/Host/windows/windows.h"
+#include <winsock2.h>
+#include <ws2tcpip.h>
+typedef ADDRESS_FAMILY sa_family_t;
+#else
+#include <netdb.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#endif
+
+#if defined(__FreeBSD__)
+#include <sys/types.h>
+#endif
+
+#include <string>
+#include <vector>
+
+namespace lldb_private {
+
+class SocketAddress {
+public:
+  // Static method to get all address information for a host and/or service
+  static std::vector<SocketAddress>
+  GetAddressInfo(const char *hostname, const char *servname, int ai_family,
+                 int ai_socktype, int ai_protocol, int ai_flags = 0);
+
+  // Constructors and Destructors
+  SocketAddress();
+  SocketAddress(const struct addrinfo *addr_info);
+  SocketAddress(const struct sockaddr &s);
+  SocketAddress(const struct sockaddr_in &s);
+  SocketAddress(const struct sockaddr_in6 &s);
+  SocketAddress(const struct sockaddr_storage &s);
+  ~SocketAddress();
+
+  // Operators
+  const SocketAddress &operator=(const SocketAddress &rhs);
+
+  const SocketAddress &operator=(const struct addrinfo *addr_info);
+
+  const SocketAddress &operator=(const struct sockaddr &s);
+
+  const SocketAddress &operator=(const struct sockaddr_in &s);
+
+  const SocketAddress &operator=(const struct sockaddr_in6 &s);
+
+  const SocketAddress &operator=(const struct sockaddr_storage &s);
+
+  bool operator==(const SocketAddress &rhs) const;
+  bool operator!=(const SocketAddress &rhs) const;
+
+  // Clear the contents of this socket address
+  void Clear();
+
+  // Get the length for the current socket address family
+  socklen_t GetLength() const;
+
+  // Get the max length for the largest socket address supported.
+  static socklen_t GetMaxLength();
+
+  // Get the socket address family
+  sa_family_t GetFamily() const;
+
+  // Set the socket address family
+  void SetFamily(sa_family_t family);
+
+  // Get the address
+  std::string GetIPAddress() const;
+
+  // Get the port if the socket address for the family has a port
+  uint16_t GetPort() const;
+
+  // Set the port if the socket address for the family has a port. The family
+  // must be set correctly prior to calling this function.
+  bool SetPort(uint16_t port);
+
+  // Set the socket address according to the first match from a call to
+  // getaddrinfo() (or equivalent functions for systems that don't have
+  // getaddrinfo(). If "addr_info_ptr" is not NULL, it will get filled in with
+  // the match that was used to populate this socket address.
+  bool
+  getaddrinfo(const char *host,    // Hostname ("foo.bar.com" or "foo" or IP
+                                   // address string ("123.234.12.1" or
+                                   // "2001:0db8:85a3:0000:0000:8a2e:0370:7334")
+              const char *service, // Protocol name ("tcp", "http", etc) or a
+                                   // raw port number string ("81")
+              int ai_family = PF_UNSPEC, int ai_socktype = 0,
+              int ai_protocol = 0, int ai_flags = 0);
+
+  // Quick way to set the SocketAddress to localhost given the family. Returns
+  // true if successful, false if "family" doesn't support localhost or if
+  // "family" is not supported by this class.
+  bool SetToLocalhost(sa_family_t family, uint16_t port);
+
+  bool SetToAnyAddress(sa_family_t family, uint16_t port);
+
+  // Returns true if there is a valid socket address in this object.
+  bool IsValid() const;
+
+  // Returns true if the socket is INADDR_ANY
+  bool IsAnyAddr() const;
+
+  // Returns true if the socket is INADDR_LOOPBACK
+  bool IsLocalhost() const;
+
+  // Direct access to all of the sockaddr structures
+  struct sockaddr &sockaddr() {
+    return m_socket_addr.sa;
+  }
+
+  const struct sockaddr &sockaddr() const { return m_socket_addr.sa; }
+
+  struct sockaddr_in &sockaddr_in() {
+    return m_socket_addr.sa_ipv4;
+  }
+
+  const struct sockaddr_in &sockaddr_in() const {
+    return m_socket_addr.sa_ipv4;
+  }
+
+  struct sockaddr_in6 &sockaddr_in6() {
+    return m_socket_addr.sa_ipv6;
+  }
+
+  const struct sockaddr_in6 &sockaddr_in6() const {
+    return m_socket_addr.sa_ipv6;
+  }
+
+  struct sockaddr_storage &sockaddr_storage() {
+    return m_socket_addr.sa_storage;
+  }
+
+  const struct sockaddr_storage &sockaddr_storage() const {
+    return m_socket_addr.sa_storage;
+  }
+
+  // Conversion operators to allow getting the contents of this class as a
+  // pointer to the appropriate structure. This allows an instance of this
+  // class to be used in calls that take one of the sockaddr structure variants
+  // without having to manually use the correct accessor function.
+
+  operator struct sockaddr *() { return &m_socket_addr.sa; }
+
+  operator const struct sockaddr *() const { return &m_socket_addr.sa; }
+
+  operator struct sockaddr_in *() { return &m_socket_addr.sa_ipv4; }
+
+  operator const struct sockaddr_in *() const { return &m_socket_addr.sa_ipv4; }
+
+  operator struct sockaddr_in6 *() { return &m_socket_addr.sa_ipv6; }
+
+  operator const struct sockaddr_in6 *() const {
+    return &m_socket_addr.sa_ipv6;
+  }
+
+  operator const struct sockaddr_storage *() const {
+    return &m_socket_addr.sa_storage;
+  }
+
+  operator struct sockaddr_storage *() { return &m_socket_addr.sa_storage; }
+
+protected:
+  typedef union sockaddr_tag {
+    struct sockaddr sa;
+    struct sockaddr_in sa_ipv4;
+    struct sockaddr_in6 sa_ipv6;
+    struct sockaddr_storage sa_storage;
+  } sockaddr_t;
+
+  // Classes that inherit from SocketAddress can see and modify these
+  sockaddr_t m_socket_addr;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SocketAddress_h_
diff --git a/linux-x64/clang/include/lldb/Host/StringConvert.h b/linux-x64/clang/include/lldb/Host/StringConvert.h
new file mode 100644
index 0000000..4b2c690
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/StringConvert.h
@@ -0,0 +1,40 @@
+//===-- StringConvert.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StringConvert_h_
+#define liblldb_StringConvert_h_
+
+#include <stdint.h>
+
+
+
+namespace lldb_private {
+
+namespace StringConvert {
+
+/// \namespace StringConvert StringConvert.h "lldb/Host/StringConvert.h"
+/// Utility classes for converting strings into Integers
+
+int32_t ToSInt32(const char *s, int32_t fail_value = 0, int base = 0,
+                 bool *success_ptr = nullptr);
+
+uint32_t ToUInt32(const char *s, uint32_t fail_value = 0, int base = 0,
+                  bool *success_ptr = nullptr);
+
+int64_t ToSInt64(const char *s, int64_t fail_value = 0, int base = 0,
+                 bool *success_ptr = nullptr);
+
+uint64_t ToUInt64(const char *s, uint64_t fail_value = 0, int base = 0,
+                  bool *success_ptr = nullptr);
+
+double ToDouble(const char *s, double fail_value = 0.0,
+                bool *success_ptr = nullptr);
+} // namespace StringConvert
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/TaskPool.h b/linux-x64/clang/include/lldb/Host/TaskPool.h
new file mode 100644
index 0000000..49805ce
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/TaskPool.h
@@ -0,0 +1,92 @@
+//===--------------------- TaskPool.h ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_TaskPool_h_
+#define utility_TaskPool_h_
+
+#include "llvm/ADT/STLExtras.h"
+#include <functional>
+#include <future>
+#include <list>
+#include <memory>
+#include <mutex>
+#include <type_traits>
+
+namespace lldb_private {
+
+// Global TaskPool class for running tasks in parallel on a set of worker
+// thread created the first time the task pool is used. The TaskPool provide no
+// guarantee about the order the task will be run and about what tasks will run
+// in parallel. None of the task added to the task pool should block on
+// something (mutex, future, condition variable) what will be set only by the
+// completion of an other task on the task pool as they may run on the same
+// thread sequentally.
+class TaskPool {
+public:
+  // Add a new task to the task pool and return a std::future belonging to the
+  // newly created task. The caller of this function has to wait on the future
+  // for this task to complete.
+  template <typename F, typename... Args>
+  static std::future<typename std::result_of<F(Args...)>::type>
+  AddTask(F &&f, Args &&... args);
+
+  // Run all of the specified tasks on the task pool and wait until all of them
+  // are finished before returning. This method is intended to be used for
+  // small number tasks where listing them as function arguments is acceptable.
+  // For running large number of tasks you should use AddTask for each task and
+  // then call wait() on each returned future.
+  template <typename... T> static void RunTasks(T &&... tasks);
+
+private:
+  TaskPool() = delete;
+
+  template <typename... T> struct RunTaskImpl;
+
+  static void AddTaskImpl(std::function<void()> &&task_fn);
+};
+
+template <typename F, typename... Args>
+std::future<typename std::result_of<F(Args...)>::type>
+TaskPool::AddTask(F &&f, Args &&... args) {
+  auto task_sp = std::make_shared<
+      std::packaged_task<typename std::result_of<F(Args...)>::type()>>(
+      std::bind(std::forward<F>(f), std::forward<Args>(args)...));
+
+  AddTaskImpl([task_sp]() { (*task_sp)(); });
+
+  return task_sp->get_future();
+}
+
+template <typename... T> void TaskPool::RunTasks(T &&... tasks) {
+  RunTaskImpl<T...>::Run(std::forward<T>(tasks)...);
+}
+
+template <typename Head, typename... Tail>
+struct TaskPool::RunTaskImpl<Head, Tail...> {
+  static void Run(Head &&h, Tail &&... t) {
+    auto f = AddTask(std::forward<Head>(h));
+    RunTaskImpl<Tail...>::Run(std::forward<Tail>(t)...);
+    f.wait();
+  }
+};
+
+template <> struct TaskPool::RunTaskImpl<> {
+  static void Run() {}
+};
+
+// Run 'func' on every value from begin .. end-1.  Each worker will grab
+// 'batch_size' numbers at a time to work on, so for very fast functions, batch
+// should be large enough to avoid too much cache line contention.
+void TaskMapOverInt(size_t begin, size_t end,
+                    const llvm::function_ref<void(size_t)> &func);
+
+unsigned GetHardwareConcurrencyHint();
+
+} // namespace lldb_private
+
+#endif // #ifndef utility_TaskPool_h_
diff --git a/linux-x64/clang/include/lldb/Host/Terminal.h b/linux-x64/clang/include/lldb/Host/Terminal.h
new file mode 100644
index 0000000..e5e96ee
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Terminal.h
@@ -0,0 +1,182 @@
+//===-- Terminal.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Terminal_h_
+#define liblldb_Terminal_h_
+#if defined(__cplusplus)
+
+#include "lldb/Host/Config.h"
+#include "lldb/lldb-private.h"
+
+struct termios;
+
+namespace lldb_private {
+
+class Terminal {
+public:
+  Terminal(int fd = -1) : m_fd(fd) {}
+
+  ~Terminal() {}
+
+  bool IsATerminal() const;
+
+  int GetFileDescriptor() const { return m_fd; }
+
+  void SetFileDescriptor(int fd) { m_fd = fd; }
+
+  bool FileDescriptorIsValid() const { return m_fd != -1; }
+
+  void Clear() { m_fd = -1; }
+
+  bool SetEcho(bool enabled);
+
+  bool SetCanonical(bool enabled);
+
+protected:
+  int m_fd; // This may or may not be a terminal file descriptor
+};
+
+/// \class State Terminal.h "lldb/Host/Terminal.h"
+/// A terminal state saving/restoring class.
+///
+/// This class can be used to remember the terminal state for a file
+/// descriptor and later restore that state as it originally was.
+class TerminalState {
+public:
+  /// Default constructor
+  TerminalState();
+
+  /// Destructor
+  ~TerminalState();
+
+  /// Save the TTY state for \a fd.
+  ///
+  /// Save the current state of the TTY for the file descriptor "fd" and if
+  /// "save_process_group" is true, attempt to save the process group info for
+  /// the TTY.
+  ///
+  /// \param[in] fd
+  ///     The file descriptor to save the state of.
+  ///
+  /// \param[in] save_process_group
+  ///     If \b true, save the process group settings, else do not
+  ///     save the process group settings for a TTY.
+  ///
+  /// \return
+  ///     Returns \b true if \a fd describes a TTY and if the state
+  ///     was able to be saved, \b false otherwise.
+  bool Save(int fd, bool save_process_group);
+
+  /// Restore the TTY state to the cached state.
+  ///
+  /// Restore the state of the TTY using the cached values from a previous
+  /// call to TerminalState::Save(int,bool).
+  ///
+  /// \return
+  ///     Returns \b true if the TTY state was successfully restored,
+  ///     \b false otherwise.
+  bool Restore() const;
+
+  /// Test for valid cached TTY state information.
+  ///
+  /// \return
+  ///     Returns \b true if this object has valid saved TTY state
+  ///     settings that can be used to restore a previous state,
+  ///     \b false otherwise.
+  bool IsValid() const;
+
+  void Clear();
+
+protected:
+  /// Test if tflags is valid.
+  ///
+  /// \return
+  ///     Returns \b true if \a m_tflags is valid and can be restored,
+  ///     \b false otherwise.
+  bool TFlagsIsValid() const;
+
+  /// Test if ttystate is valid.
+  ///
+  /// \return
+  ///     Returns \b true if \a m_ttystate is valid and can be
+  ///     restored, \b false otherwise.
+  bool TTYStateIsValid() const;
+
+  /// Test if the process group information is valid.
+  ///
+  /// \return
+  ///     Returns \b true if \a m_process_group is valid and can be
+  ///     restored, \b false otherwise.
+  bool ProcessGroupIsValid() const;
+
+  // Member variables
+  Terminal m_tty; ///< A terminal
+  int m_tflags;   ///< Cached tflags information.
+#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
+  std::unique_ptr<struct termios>
+      m_termios_up; ///< Cached terminal state information.
+#endif
+  lldb::pid_t m_process_group; ///< Cached process group information.
+};
+
+/// \class TerminalStateSwitcher Terminal.h "lldb/Host/Terminal.h"
+/// A TTY state switching class.
+///
+/// This class can be used to remember 2 TTY states for a given file
+/// descriptor and switch between the two states.
+class TerminalStateSwitcher {
+public:
+  /// Constructor
+  TerminalStateSwitcher();
+
+  /// Destructor
+  ~TerminalStateSwitcher();
+
+  /// Get the number of possible states to save.
+  ///
+  /// \return
+  ///     The number of states that this TTY switcher object contains.
+  uint32_t GetNumberOfStates() const;
+
+  /// Restore the TTY state for state at index \a idx.
+  ///
+  /// \return
+  ///     Returns \b true if the TTY state was successfully restored,
+  ///     \b false otherwise.
+  bool Restore(uint32_t idx) const;
+
+  /// Save the TTY state information for the state at index \a idx. The TTY
+  /// state is saved for the file descriptor \a fd and the process group
+  /// information will also be saved if requested by \a save_process_group.
+  ///
+  /// \param[in] idx
+  ///     The index into the state array where the state should be
+  ///     saved.
+  ///
+  /// \param[in] fd
+  ///     The file descriptor for which to save the settings.
+  ///
+  /// \param[in] save_process_group
+  ///     If \b true, save the process group information for the TTY.
+  ///
+  /// \return
+  ///     Returns \b true if the save was successful, \b false
+  ///     otherwise.
+  bool Save(uint32_t idx, int fd, bool save_process_group);
+
+protected:
+  // Member variables
+  mutable uint32_t m_currentState; ///< The currently active TTY state index.
+  TerminalState
+      m_ttystates[2]; ///< The array of TTY states that holds saved TTY info.
+};
+
+} // namespace lldb_private
+
+#endif // #if defined(__cplusplus)
+#endif // #ifndef liblldb_Terminal_h_
diff --git a/linux-x64/clang/include/lldb/Host/ThreadLauncher.h b/linux-x64/clang/include/lldb/Host/ThreadLauncher.h
new file mode 100644
index 0000000..e45ffa9
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/ThreadLauncher.h
@@ -0,0 +1,42 @@
+//===-- ThreadLauncher.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_ThreadLauncher_h_
+#define lldb_Host_ThreadLauncher_h_
+
+#include "lldb/Host/HostThread.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+
+namespace lldb_private {
+
+class ThreadLauncher {
+public:
+  static llvm::Expected<HostThread>
+  LaunchThread(llvm::StringRef name, lldb::thread_func_t thread_function,
+               lldb::thread_arg_t thread_arg,
+               size_t min_stack_byte_size = 0); // Minimum stack size in bytes,
+                                                // set stack size to zero for
+                                                // default platform thread stack
+                                                // size
+
+  struct HostThreadCreateInfo {
+    std::string thread_name;
+    lldb::thread_func_t thread_fptr;
+    lldb::thread_arg_t thread_arg;
+
+    HostThreadCreateInfo(const char *name, lldb::thread_func_t fptr,
+                         lldb::thread_arg_t arg)
+        : thread_name(name ? name : ""), thread_fptr(fptr), thread_arg(arg) {}
+  };
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/Time.h b/linux-x64/clang/include/lldb/Host/Time.h
new file mode 100644
index 0000000..b27eb08
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/Time.h
@@ -0,0 +1,25 @@
+//===-- Time.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Include system time headers, adding missing functions as necessary
+
+#ifndef liblldb_Host_Time_h_
+#define liblldb_Host_Time_h_
+
+#ifdef __ANDROID__
+#include <android/api-level.h>
+#endif
+
+#if defined(__ANDROID_API__) && __ANDROID_API__ < 21
+#include <time64.h>
+extern time_t timegm(struct tm *t);
+#else
+#include <time.h>
+#endif
+
+#endif // liblldb_Host_Time_h_
diff --git a/linux-x64/clang/include/lldb/Host/XML.h b/linux-x64/clang/include/lldb/Host/XML.h
new file mode 100644
index 0000000..625cf43
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/XML.h
@@ -0,0 +1,180 @@
+//===-- XML.h ---------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_XML_h_
+#define liblldb_XML_h_
+
+#if defined(LIBXML2_DEFINED)
+#include <libxml/xmlreader.h>
+#endif
+
+#include <functional>
+#include <string>
+#include <vector>
+
+#include "llvm/ADT/StringRef.h"
+
+#include "lldb/Utility/StreamString.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+#if defined(LIBXML2_DEFINED)
+typedef xmlNodePtr XMLNodeImpl;
+typedef xmlDocPtr XMLDocumentImpl;
+#else
+typedef void *XMLNodeImpl;
+typedef void *XMLDocumentImpl;
+#endif
+
+class XMLNode;
+
+typedef std::vector<std::string> NamePath;
+typedef std::function<bool(const XMLNode &node)> NodeCallback;
+typedef std::function<bool(const llvm::StringRef &name,
+                           const llvm::StringRef &value)>
+    AttributeCallback;
+
+class XMLNode {
+public:
+  XMLNode();
+
+  XMLNode(XMLNodeImpl node);
+
+  ~XMLNode();
+
+  explicit operator bool() const { return IsValid(); }
+
+  void Clear();
+
+  bool IsValid() const;
+
+  bool IsElement() const;
+
+  llvm::StringRef GetName() const;
+
+  bool GetElementText(std::string &text) const;
+
+  bool GetElementTextAsUnsigned(uint64_t &value, uint64_t fail_value = 0,
+                                int base = 0) const;
+
+  bool GetElementTextAsFloat(double &value, double fail_value = 0.0) const;
+
+  bool NameIs(const char *name) const;
+
+  XMLNode GetParent() const;
+
+  XMLNode GetSibling() const;
+
+  XMLNode GetChild() const;
+
+  llvm::StringRef GetAttributeValue(const char *name,
+                                    const char *fail_value = nullptr) const;
+
+  bool GetAttributeValueAsUnsigned(const char *name, uint64_t &value,
+                                   uint64_t fail_value = 0, int base = 0) const;
+
+  XMLNode FindFirstChildElementWithName(const char *name) const;
+
+  XMLNode GetElementForPath(const NamePath &path);
+
+  // Iterate through all sibling nodes of any type
+  void ForEachSiblingNode(NodeCallback const &callback) const;
+
+  // Iterate through only the sibling nodes that are elements
+  void ForEachSiblingElement(NodeCallback const &callback) const;
+
+  // Iterate through only the sibling nodes that are elements and whose name
+  // matches \a name.
+  void ForEachSiblingElementWithName(const char *name,
+                                     NodeCallback const &callback) const;
+
+  void ForEachChildNode(NodeCallback const &callback) const;
+
+  void ForEachChildElement(NodeCallback const &callback) const;
+
+  void ForEachChildElementWithName(const char *name,
+                                   NodeCallback const &callback) const;
+
+  void ForEachAttribute(AttributeCallback const &callback) const;
+
+protected:
+  XMLNodeImpl m_node;
+};
+
+class XMLDocument {
+public:
+  XMLDocument();
+
+  ~XMLDocument();
+
+  explicit operator bool() const { return IsValid(); }
+
+  bool IsValid() const;
+
+  void Clear();
+
+  bool ParseFile(const char *path);
+
+  bool ParseMemory(const char *xml, size_t xml_length,
+                   const char *url = "untitled.xml");
+
+  // If \a name is nullptr, just get the root element node, else only return a
+  // value XMLNode if the name of the root element matches \a name.
+  XMLNode GetRootElement(const char *required_name = nullptr);
+
+  llvm::StringRef GetErrors() const;
+
+  static void ErrorCallback(void *ctx, const char *format, ...);
+
+  static bool XMLEnabled();
+
+protected:
+  XMLDocumentImpl m_document;
+  StreamString m_errors;
+};
+
+class ApplePropertyList {
+public:
+  ApplePropertyList();
+
+  ApplePropertyList(const char *path);
+
+  ~ApplePropertyList();
+
+  bool ParseFile(const char *path);
+
+  llvm::StringRef GetErrors() const;
+
+  explicit operator bool() const { return IsValid(); }
+
+  bool IsValid() const;
+
+  XMLNode GetValueNode(const char *key) const;
+
+  bool GetValueAsString(const char *key, std::string &value) const;
+
+  StructuredData::ObjectSP GetStructuredData();
+
+protected:
+  // Using a node returned from GetValueNode() extract its value as a string
+  // (if possible). Array and dictionary nodes will return false as they have
+  // no string value. Boolean nodes will return true and \a value will be
+  // "true" or "false" as the string value comes from the element name itself.
+  // All other nodes will return the text content of the XMLNode.
+  static bool ExtractStringFromValueNode(const XMLNode &node,
+                                         std::string &value);
+
+  XMLDocument m_xml_doc;
+  XMLNode m_dict_node;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_XML_h_
diff --git a/linux-x64/clang/include/lldb/Host/android/HostInfoAndroid.h b/linux-x64/clang/include/lldb/Host/android/HostInfoAndroid.h
new file mode 100644
index 0000000..c764121
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/android/HostInfoAndroid.h
@@ -0,0 +1,32 @@
+//===-- HostInfoAndroid.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_android_HostInfoAndroid_h_
+#define lldb_Host_android_HostInfoAndroid_h_
+
+#include "lldb/Host/linux/HostInfoLinux.h"
+
+namespace lldb_private {
+
+class HostInfoAndroid : public HostInfoLinux {
+  friend class HostInfoBase;
+
+public:
+  static FileSpec GetDefaultShell();
+  static FileSpec ResolveLibraryPath(const std::string &path,
+                                     const ArchSpec &arch);
+
+protected:
+  static void ComputeHostArchitectureSupport(ArchSpec &arch_32,
+                                             ArchSpec &arch_64);
+  static bool ComputeTempFileBaseDirectory(FileSpec &file_spec);
+};
+
+} // end of namespace lldb_private
+
+#endif // #ifndef lldb_Host_android_HostInfoAndroid_h_
diff --git a/linux-x64/clang/include/lldb/Host/common/GetOptInc.h b/linux-x64/clang/include/lldb/Host/common/GetOptInc.h
new file mode 100644
index 0000000..c69f722
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/GetOptInc.h
@@ -0,0 +1,52 @@
+#pragma once
+
+#include "lldb/lldb-defines.h"
+
+#if defined(_MSC_VER)
+#define REPLACE_GETOPT
+#define REPLACE_GETOPT_LONG
+#endif
+#if defined(_MSC_VER) || defined(__NetBSD__)
+#define REPLACE_GETOPT_LONG_ONLY
+#endif
+
+#if defined(REPLACE_GETOPT)
+// from getopt.h
+#define no_argument 0
+#define required_argument 1
+#define optional_argument 2
+
+// option structure
+struct option {
+  const char *name;
+  // has_arg can't be an enum because some compilers complain about type
+  // mismatches in all the code that assumes it is an int.
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+int getopt(int argc, char *const argv[], const char *optstring);
+
+// from getopt.h
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+
+// defined in unistd.h
+extern int optreset;
+#else
+#include <getopt.h>
+#include <unistd.h>
+#endif
+
+#if defined(REPLACE_GETOPT_LONG)
+int getopt_long(int argc, char *const *argv, const char *optstring,
+                const struct option *longopts, int *longindex);
+#endif
+
+#if defined(REPLACE_GETOPT_LONG_ONLY)
+int getopt_long_only(int argc, char *const *argv, const char *optstring,
+                     const struct option *longopts, int *longindex);
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/common/NativeBreakpointList.h b/linux-x64/clang/include/lldb/Host/common/NativeBreakpointList.h
new file mode 100644
index 0000000..c2725b2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/NativeBreakpointList.h
@@ -0,0 +1,26 @@
+//===-- NativeBreakpointList.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_NativeBreakpointList_h_
+#define liblldb_NativeBreakpointList_h_
+
+#include "lldb/lldb-private-forward.h"
+#include "lldb/lldb-types.h"
+#include <map>
+
+namespace lldb_private {
+
+struct HardwareBreakpoint {
+  lldb::addr_t m_addr;
+  size_t m_size;
+};
+
+using HardwareBreakpointMap = std::map<lldb::addr_t, HardwareBreakpoint>;
+}
+
+#endif // ifndef liblldb_NativeBreakpointList_h_
diff --git a/linux-x64/clang/include/lldb/Host/common/NativeProcessProtocol.h b/linux-x64/clang/include/lldb/Host/common/NativeProcessProtocol.h
new file mode 100644
index 0000000..f05b8d0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/NativeProcessProtocol.h
@@ -0,0 +1,437 @@
+//===-- NativeProcessProtocol.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_NativeProcessProtocol_h_
+#define liblldb_NativeProcessProtocol_h_
+
+#include "NativeBreakpointList.h"
+#include "NativeThreadProtocol.h"
+#include "NativeWatchpointList.h"
+#include "lldb/Host/Host.h"
+#include "lldb/Host/MainLoop.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/TraceOptions.h"
+#include "lldb/lldb-private-forward.h"
+#include "lldb/lldb-types.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/DenseSet.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include <mutex>
+#include <unordered_map>
+#include <vector>
+
+namespace lldb_private {
+class MemoryRegionInfo;
+class ResumeActionList;
+
+// NativeProcessProtocol
+class NativeProcessProtocol {
+public:
+  virtual ~NativeProcessProtocol() {}
+
+  virtual Status Resume(const ResumeActionList &resume_actions) = 0;
+
+  virtual Status Halt() = 0;
+
+  virtual Status Detach() = 0;
+
+  /// Sends a process a UNIX signal \a signal.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status Signal(int signo) = 0;
+
+  /// Tells a process to interrupt all operations as if by a Ctrl-C.
+  ///
+  /// The default implementation will send a local host's equivalent of
+  /// a SIGSTOP to the process via the NativeProcessProtocol::Signal()
+  /// operation.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status Interrupt();
+
+  virtual Status Kill() = 0;
+
+  // Tells a process not to stop the inferior on given signals and just
+  // reinject them back.
+  virtual Status IgnoreSignals(llvm::ArrayRef<int> signals);
+
+  // Memory and memory region functions
+
+  virtual Status GetMemoryRegionInfo(lldb::addr_t load_addr,
+                                     MemoryRegionInfo &range_info);
+
+  virtual Status ReadMemory(lldb::addr_t addr, void *buf, size_t size,
+                            size_t &bytes_read) = 0;
+
+  Status ReadMemoryWithoutTrap(lldb::addr_t addr, void *buf, size_t size,
+                               size_t &bytes_read);
+
+  virtual Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size,
+                             size_t &bytes_written) = 0;
+
+  virtual Status AllocateMemory(size_t size, uint32_t permissions,
+                                lldb::addr_t &addr) = 0;
+
+  virtual Status DeallocateMemory(lldb::addr_t addr) = 0;
+
+  virtual lldb::addr_t GetSharedLibraryInfoAddress() = 0;
+
+  virtual bool IsAlive() const;
+
+  virtual size_t UpdateThreads() = 0;
+
+  virtual const ArchSpec &GetArchitecture() const = 0;
+
+  // Breakpoint functions
+  virtual Status SetBreakpoint(lldb::addr_t addr, uint32_t size,
+                               bool hardware) = 0;
+
+  virtual Status RemoveBreakpoint(lldb::addr_t addr, bool hardware = false);
+
+  // Hardware Breakpoint functions
+  virtual const HardwareBreakpointMap &GetHardwareBreakpointMap() const;
+
+  virtual Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size);
+
+  virtual Status RemoveHardwareBreakpoint(lldb::addr_t addr);
+
+  // Watchpoint functions
+  virtual const NativeWatchpointList::WatchpointMap &GetWatchpointMap() const;
+
+  virtual llvm::Optional<std::pair<uint32_t, uint32_t>>
+  GetHardwareDebugSupportInfo() const;
+
+  virtual Status SetWatchpoint(lldb::addr_t addr, size_t size,
+                               uint32_t watch_flags, bool hardware);
+
+  virtual Status RemoveWatchpoint(lldb::addr_t addr);
+
+  // Accessors
+  lldb::pid_t GetID() const { return m_pid; }
+
+  lldb::StateType GetState() const;
+
+  bool IsRunning() const {
+    return m_state == lldb::eStateRunning || IsStepping();
+  }
+
+  bool IsStepping() const { return m_state == lldb::eStateStepping; }
+
+  bool CanResume() const { return m_state == lldb::eStateStopped; }
+
+  lldb::ByteOrder GetByteOrder() const {
+    return GetArchitecture().GetByteOrder();
+  }
+
+  uint32_t GetAddressByteSize() const {
+    return GetArchitecture().GetAddressByteSize();
+  }
+
+  virtual llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
+  GetAuxvData() const = 0;
+
+  // Exit Status
+  virtual llvm::Optional<WaitStatus> GetExitStatus();
+
+  virtual bool SetExitStatus(WaitStatus status, bool bNotifyStateChange);
+
+  // Access to threads
+  NativeThreadProtocol *GetThreadAtIndex(uint32_t idx);
+
+  NativeThreadProtocol *GetThreadByID(lldb::tid_t tid);
+
+  void SetCurrentThreadID(lldb::tid_t tid) { m_current_thread_id = tid; }
+
+  lldb::tid_t GetCurrentThreadID() { return m_current_thread_id; }
+
+  NativeThreadProtocol *GetCurrentThread() {
+    return GetThreadByID(m_current_thread_id);
+  }
+
+  // Access to inferior stdio
+  virtual int GetTerminalFileDescriptor() { return m_terminal_fd; }
+
+  // Stop id interface
+
+  uint32_t GetStopID() const;
+
+  // Callbacks for low-level process state changes
+  class NativeDelegate {
+  public:
+    virtual ~NativeDelegate() {}
+
+    virtual void InitializeDelegate(NativeProcessProtocol *process) = 0;
+
+    virtual void ProcessStateChanged(NativeProcessProtocol *process,
+                                     lldb::StateType state) = 0;
+
+    virtual void DidExec(NativeProcessProtocol *process) = 0;
+  };
+
+  /// Register a native delegate.
+  ///
+  /// Clients can register nofication callbacks by passing in a
+  /// NativeDelegate impl and passing it into this function.
+  ///
+  /// Note: it is required that the lifetime of the
+  /// native_delegate outlive the NativeProcessProtocol.
+  ///
+  /// \param[in] native_delegate
+  ///     A NativeDelegate impl to be called when certain events
+  ///     happen within the NativeProcessProtocol or related threads.
+  ///
+  /// \return
+  ///     true if the delegate was registered successfully;
+  ///     false if the delegate was already registered.
+  ///
+  /// \see NativeProcessProtocol::NativeDelegate.
+  bool RegisterNativeDelegate(NativeDelegate &native_delegate);
+
+  /// Unregister a native delegate previously registered.
+  ///
+  /// \param[in] native_delegate
+  ///     A NativeDelegate impl previously registered with this process.
+  ///
+  /// \return Returns \b true if the NativeDelegate was
+  /// successfully removed from the process, \b false otherwise.
+  ///
+  /// \see NativeProcessProtocol::NativeDelegate
+  bool UnregisterNativeDelegate(NativeDelegate &native_delegate);
+
+  virtual Status GetLoadedModuleFileSpec(const char *module_path,
+                                         FileSpec &file_spec) = 0;
+
+  virtual Status GetFileLoadAddress(const llvm::StringRef &file_name,
+                                    lldb::addr_t &load_addr) = 0;
+
+  class Factory {
+  public:
+    virtual ~Factory();
+    /// Launch a process for debugging.
+    ///
+    /// \param[in] launch_info
+    ///     Information required to launch the process.
+    ///
+    /// \param[in] native_delegate
+    ///     The delegate that will receive messages regarding the
+    ///     inferior.  Must outlive the NativeProcessProtocol
+    ///     instance.
+    ///
+    /// \param[in] mainloop
+    ///     The mainloop instance with which the process can register
+    ///     callbacks. Must outlive the NativeProcessProtocol
+    ///     instance.
+    ///
+    /// \return
+    ///     A NativeProcessProtocol shared pointer if the operation succeeded or
+    ///     an error object if it failed.
+    virtual llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
+    Launch(ProcessLaunchInfo &launch_info, NativeDelegate &native_delegate,
+           MainLoop &mainloop) const = 0;
+
+    /// Attach to an existing process.
+    ///
+    /// \param[in] pid
+    ///     pid of the process locatable
+    ///
+    /// \param[in] native_delegate
+    ///     The delegate that will receive messages regarding the
+    ///     inferior.  Must outlive the NativeProcessProtocol
+    ///     instance.
+    ///
+    /// \param[in] mainloop
+    ///     The mainloop instance with which the process can register
+    ///     callbacks. Must outlive the NativeProcessProtocol
+    ///     instance.
+    ///
+    /// \return
+    ///     A NativeProcessProtocol shared pointer if the operation succeeded or
+    ///     an error object if it failed.
+    virtual llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
+    Attach(lldb::pid_t pid, NativeDelegate &native_delegate,
+           MainLoop &mainloop) const = 0;
+  };
+
+  /// StartTracing API for starting a tracing instance with the
+  /// TraceOptions on a specific thread or process.
+  ///
+  /// \param[in] config
+  ///     The configuration to use when starting tracing.
+  ///
+  /// \param[out] error
+  ///     Status indicates what went wrong.
+  ///
+  /// \return
+  ///     The API returns a user_id which can be used to get trace
+  ///     data, trace configuration or stopping the trace instance.
+  ///     The user_id is a key to identify and operate with a tracing
+  ///     instance. It may refer to the complete process or a single
+  ///     thread.
+  virtual lldb::user_id_t StartTrace(const TraceOptions &config,
+                                     Status &error) {
+    error.SetErrorString("Not implemented");
+    return LLDB_INVALID_UID;
+  }
+
+  /// StopTracing API as the name suggests stops a tracing instance.
+  ///
+  /// \param[in] traceid
+  ///     The user id of the trace intended to be stopped. Now a
+  ///     user_id may map to multiple threads in which case this API
+  ///     could be used to stop the tracing for a specific thread by
+  ///     supplying its thread id.
+  ///
+  /// \param[in] thread
+  ///     Thread is needed when the complete process is being traced
+  ///     and the user wishes to stop tracing on a particular thread.
+  ///
+  /// \return
+  ///     Status indicating what went wrong.
+  virtual Status StopTrace(lldb::user_id_t traceid,
+                           lldb::tid_t thread = LLDB_INVALID_THREAD_ID) {
+    return Status("Not implemented");
+  }
+
+  /// This API provides the trace data collected in the form of raw
+  /// data.
+  ///
+  /// \param[in] traceid thread
+  ///     The traceid and thread provide the context for the trace
+  ///     instance.
+  ///
+  /// \param[in] buffer
+  ///     The buffer provides the destination buffer where the trace
+  ///     data would be read to. The buffer should be truncated to the
+  ///     filled length by this function.
+  ///
+  /// \param[in] offset
+  ///     There is possibility to read partially the trace data from
+  ///     a specified offset where in such cases the buffer provided
+  ///     may be smaller than the internal trace collection container.
+  ///
+  /// \return
+  ///     The size of the data actually read.
+  virtual Status GetData(lldb::user_id_t traceid, lldb::tid_t thread,
+                         llvm::MutableArrayRef<uint8_t> &buffer,
+                         size_t offset = 0) {
+    return Status("Not implemented");
+  }
+
+  /// Similar API as above except it aims to provide any extra data
+  /// useful for decoding the actual trace data.
+  virtual Status GetMetaData(lldb::user_id_t traceid, lldb::tid_t thread,
+                             llvm::MutableArrayRef<uint8_t> &buffer,
+                             size_t offset = 0) {
+    return Status("Not implemented");
+  }
+
+  /// API to query the TraceOptions for a given user id
+  ///
+  /// \param[in] traceid
+  ///     The user id of the tracing instance.
+  ///
+  /// \param[in] config
+  ///     The thread id of the tracing instance, in case configuration
+  ///     for a specific thread is needed should be specified in the
+  ///     config.
+  ///
+  /// \param[out] error
+  ///     Status indicates what went wrong.
+  ///
+  /// \param[out] config
+  ///     The actual configuration being used for tracing.
+  virtual Status GetTraceConfig(lldb::user_id_t traceid, TraceOptions &config) {
+    return Status("Not implemented");
+  }
+
+protected:
+  struct SoftwareBreakpoint {
+    uint32_t ref_count;
+    llvm::SmallVector<uint8_t, 4> saved_opcodes;
+    llvm::ArrayRef<uint8_t> breakpoint_opcodes;
+  };
+
+  std::unordered_map<lldb::addr_t, SoftwareBreakpoint> m_software_breakpoints;
+  lldb::pid_t m_pid;
+
+  std::vector<std::unique_ptr<NativeThreadProtocol>> m_threads;
+  lldb::tid_t m_current_thread_id = LLDB_INVALID_THREAD_ID;
+  mutable std::recursive_mutex m_threads_mutex;
+
+  lldb::StateType m_state = lldb::eStateInvalid;
+  mutable std::recursive_mutex m_state_mutex;
+
+  llvm::Optional<WaitStatus> m_exit_status;
+
+  std::recursive_mutex m_delegates_mutex;
+  std::vector<NativeDelegate *> m_delegates;
+  NativeWatchpointList m_watchpoint_list;
+  HardwareBreakpointMap m_hw_breakpoints_map;
+  int m_terminal_fd;
+  uint32_t m_stop_id = 0;
+
+  // Set of signal numbers that LLDB directly injects back to inferior without
+  // stopping it.
+  llvm::DenseSet<int> m_signals_to_ignore;
+
+  // lldb_private::Host calls should be used to launch a process for debugging,
+  // and then the process should be attached to. When attaching to a process
+  // lldb_private::Host calls should be used to locate the process to attach
+  // to, and then this function should be called.
+  NativeProcessProtocol(lldb::pid_t pid, int terminal_fd,
+                        NativeDelegate &delegate);
+
+  // interface for state handling
+  void SetState(lldb::StateType state, bool notify_delegates = true);
+
+  // Derived classes need not implement this.  It can be used as a hook to
+  // clear internal caches that should be invalidated when stop ids change.
+  //
+  // Note this function is called with the state mutex obtained by the caller.
+  virtual void DoStopIDBumped(uint32_t newBumpId);
+
+  // interface for software breakpoints
+
+  Status SetSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint);
+  Status RemoveSoftwareBreakpoint(lldb::addr_t addr);
+
+  virtual llvm::Expected<llvm::ArrayRef<uint8_t>>
+  GetSoftwareBreakpointTrapOpcode(size_t size_hint);
+
+  /// Return the offset of the PC relative to the software breakpoint that was hit. If an
+  /// architecture (e.g. arm) reports breakpoint hits before incrementing the PC, this offset
+  /// will be 0. If an architecture (e.g. intel) reports breakpoints hits after incrementing the
+  /// PC, this offset will be the size of the breakpoint opcode.
+  virtual size_t GetSoftwareBreakpointPCOffset();
+
+  // Adjust the thread's PC after hitting a software breakpoint. On
+  // architectures where the PC points after the breakpoint instruction, this
+  // resets it to point to the breakpoint itself.
+  void FixupBreakpointPCAsNeeded(NativeThreadProtocol &thread);
+
+  /// Notify the delegate that an exec occurred.
+  ///
+  /// Provide a mechanism for a delegate to clear out any exec-
+  /// sensitive data.
+  void NotifyDidExec();
+
+  NativeThreadProtocol *GetThreadByIDUnlocked(lldb::tid_t tid);
+
+private:
+  void SynchronouslyNotifyProcessStateChanged(lldb::StateType state);
+  llvm::Expected<SoftwareBreakpoint>
+  EnableSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint);
+};
+} // namespace lldb_private
+
+#endif // #ifndef liblldb_NativeProcessProtocol_h_
diff --git a/linux-x64/clang/include/lldb/Host/common/NativeRegisterContext.h b/linux-x64/clang/include/lldb/Host/common/NativeRegisterContext.h
new file mode 100644
index 0000000..6bba8f2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/NativeRegisterContext.h
@@ -0,0 +1,178 @@
+//===-- NativeRegisterContext.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_NativeRegisterContext_h_
+#define liblldb_NativeRegisterContext_h_
+
+#include "lldb/Host/common/NativeWatchpointList.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class NativeThreadProtocol;
+
+class NativeRegisterContext
+    : public std::enable_shared_from_this<NativeRegisterContext> {
+public:
+  // Constructors and Destructors
+  NativeRegisterContext(NativeThreadProtocol &thread);
+
+  virtual ~NativeRegisterContext();
+
+  // void
+  // InvalidateIfNeeded (bool force);
+
+  // Subclasses must override these functions
+  // virtual void
+  // InvalidateAllRegisters () = 0;
+
+  virtual uint32_t GetRegisterCount() const = 0;
+
+  virtual uint32_t GetUserRegisterCount() const = 0;
+
+  virtual const RegisterInfo *GetRegisterInfoAtIndex(uint32_t reg) const = 0;
+
+  const char *GetRegisterSetNameForRegisterAtIndex(uint32_t reg_index) const;
+
+  virtual uint32_t GetRegisterSetCount() const = 0;
+
+  virtual const RegisterSet *GetRegisterSet(uint32_t set_index) const = 0;
+
+  virtual Status ReadRegister(const RegisterInfo *reg_info,
+                              RegisterValue &reg_value) = 0;
+
+  virtual Status WriteRegister(const RegisterInfo *reg_info,
+                               const RegisterValue &reg_value) = 0;
+
+  virtual Status ReadAllRegisterValues(lldb::DataBufferSP &data_sp) = 0;
+
+  virtual Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) = 0;
+
+  uint32_t ConvertRegisterKindToRegisterNumber(uint32_t kind,
+                                               uint32_t num) const;
+
+  // Subclasses can override these functions if desired
+  virtual uint32_t NumSupportedHardwareBreakpoints();
+
+  virtual uint32_t SetHardwareBreakpoint(lldb::addr_t addr, size_t size);
+
+  virtual bool ClearHardwareBreakpoint(uint32_t hw_idx);
+
+  virtual Status ClearAllHardwareBreakpoints();
+
+  virtual Status GetHardwareBreakHitIndex(uint32_t &bp_index,
+                                          lldb::addr_t trap_addr);
+
+  virtual uint32_t NumSupportedHardwareWatchpoints();
+
+  virtual uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size,
+                                         uint32_t watch_flags);
+
+  virtual bool ClearHardwareWatchpoint(uint32_t hw_index);
+
+  virtual Status ClearAllHardwareWatchpoints();
+
+  virtual Status IsWatchpointHit(uint32_t wp_index, bool &is_hit);
+
+  virtual Status GetWatchpointHitIndex(uint32_t &wp_index,
+                                       lldb::addr_t trap_addr);
+
+  virtual Status IsWatchpointVacant(uint32_t wp_index, bool &is_vacant);
+
+  virtual lldb::addr_t GetWatchpointAddress(uint32_t wp_index);
+
+  // MIPS Linux kernel returns a masked address (last 3bits are masked)
+  // when a HW watchpoint is hit. However user may not have set a watchpoint on
+  // this address. This function emulates the instruction at PC and finds the
+  // base address used in the load/store instruction. This gives the exact
+  // address used to read/write the variable being watched. For example: 'n' is
+  // at 0x120010d00 and 'm' is 0x120010d04. When a watchpoint is set at 'm',
+  // then watch exception is generated even when 'n' is read/written. This
+  // function returns address of 'n' so that client can check whether a
+  // watchpoint is set on this address or not.
+  virtual lldb::addr_t GetWatchpointHitAddress(uint32_t wp_index);
+
+  virtual bool HardwareSingleStep(bool enable);
+
+  virtual Status
+  ReadRegisterValueFromMemory(const lldb_private::RegisterInfo *reg_info,
+                              lldb::addr_t src_addr, size_t src_len,
+                              RegisterValue &reg_value);
+
+  virtual Status
+  WriteRegisterValueToMemory(const lldb_private::RegisterInfo *reg_info,
+                             lldb::addr_t dst_addr, size_t dst_len,
+                             const RegisterValue &reg_value);
+
+  // Subclasses should not override these
+  virtual lldb::tid_t GetThreadID() const;
+
+  virtual NativeThreadProtocol &GetThread() { return m_thread; }
+
+  const RegisterInfo *GetRegisterInfoByName(llvm::StringRef reg_name,
+                                            uint32_t start_idx = 0);
+
+  const RegisterInfo *GetRegisterInfo(uint32_t reg_kind, uint32_t reg_num);
+
+  lldb::addr_t GetPC(lldb::addr_t fail_value = LLDB_INVALID_ADDRESS);
+
+  virtual lldb::addr_t
+  GetPCfromBreakpointLocation(lldb::addr_t fail_value = LLDB_INVALID_ADDRESS);
+
+  Status SetPC(lldb::addr_t pc);
+
+  lldb::addr_t GetSP(lldb::addr_t fail_value = LLDB_INVALID_ADDRESS);
+
+  Status SetSP(lldb::addr_t sp);
+
+  lldb::addr_t GetFP(lldb::addr_t fail_value = LLDB_INVALID_ADDRESS);
+
+  Status SetFP(lldb::addr_t fp);
+
+  const char *GetRegisterName(uint32_t reg);
+
+  lldb::addr_t GetReturnAddress(lldb::addr_t fail_value = LLDB_INVALID_ADDRESS);
+
+  lldb::addr_t GetFlags(lldb::addr_t fail_value = 0);
+
+  lldb::addr_t ReadRegisterAsUnsigned(uint32_t reg, lldb::addr_t fail_value);
+
+  lldb::addr_t ReadRegisterAsUnsigned(const RegisterInfo *reg_info,
+                                      lldb::addr_t fail_value);
+
+  Status WriteRegisterFromUnsigned(uint32_t reg, uint64_t uval);
+
+  Status WriteRegisterFromUnsigned(const RegisterInfo *reg_info, uint64_t uval);
+
+  // uint32_t
+  // GetStopID () const
+  // {
+  //     return m_stop_id;
+  // }
+
+  // void
+  // SetStopID (uint32_t stop_id)
+  // {
+  //     m_stop_id = stop_id;
+  // }
+
+protected:
+  // Classes that inherit from RegisterContext can see and modify these
+  NativeThreadProtocol
+      &m_thread; // The thread that this register context belongs to.
+  // uint32_t m_stop_id;             // The stop ID that any data in this
+  // context is valid for
+
+private:
+  // For RegisterContext only
+  DISALLOW_COPY_AND_ASSIGN(NativeRegisterContext);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_NativeRegisterContext_h_
diff --git a/linux-x64/clang/include/lldb/Host/common/NativeThreadProtocol.h b/linux-x64/clang/include/lldb/Host/common/NativeThreadProtocol.h
new file mode 100644
index 0000000..36ae679
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/NativeThreadProtocol.h
@@ -0,0 +1,56 @@
+//===-- NativeThreadProtocol.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_NativeThreadProtocol_h_
+#define liblldb_NativeThreadProtocol_h_
+
+#include <memory>
+
+#include "lldb/Host/Debug.h"
+#include "lldb/lldb-private-forward.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+// NativeThreadProtocol
+class NativeThreadProtocol {
+public:
+  NativeThreadProtocol(NativeProcessProtocol &process, lldb::tid_t tid);
+
+  virtual ~NativeThreadProtocol() {}
+
+  virtual std::string GetName() = 0;
+
+  virtual lldb::StateType GetState() = 0;
+
+  virtual NativeRegisterContext &GetRegisterContext() = 0;
+
+  virtual bool GetStopReason(ThreadStopInfo &stop_info,
+                             std::string &description) = 0;
+
+  lldb::tid_t GetID() const { return m_tid; }
+
+  NativeProcessProtocol &GetProcess() { return m_process; }
+
+  // Thread-specific watchpoints
+  virtual Status SetWatchpoint(lldb::addr_t addr, size_t size,
+                               uint32_t watch_flags, bool hardware) = 0;
+
+  virtual Status RemoveWatchpoint(lldb::addr_t addr) = 0;
+
+  // Thread-specific Hardware Breakpoint routines
+  virtual Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size) = 0;
+
+  virtual Status RemoveHardwareBreakpoint(lldb::addr_t addr) = 0;
+
+protected:
+  NativeProcessProtocol &m_process;
+  lldb::tid_t m_tid;
+};
+}
+
+#endif // #ifndef liblldb_NativeThreadProtocol_h_
diff --git a/linux-x64/clang/include/lldb/Host/common/NativeWatchpointList.h b/linux-x64/clang/include/lldb/Host/common/NativeWatchpointList.h
new file mode 100644
index 0000000..c83ba1e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/NativeWatchpointList.h
@@ -0,0 +1,41 @@
+//===-- NativeWatchpointList.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_NativeWatchpointList_h_
+#define liblldb_NativeWatchpointList_h_
+
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-private-forward.h"
+
+#include <map>
+
+namespace lldb_private {
+struct NativeWatchpoint {
+  lldb::addr_t m_addr;
+  size_t m_size;
+  uint32_t m_watch_flags;
+  bool m_hardware;
+};
+
+class NativeWatchpointList {
+public:
+  Status Add(lldb::addr_t addr, size_t size, uint32_t watch_flags,
+             bool hardware);
+
+  Status Remove(lldb::addr_t addr);
+
+  using WatchpointMap = std::map<lldb::addr_t, NativeWatchpoint>;
+
+  const WatchpointMap &GetWatchpointMap() const;
+
+private:
+  WatchpointMap m_watchpoints;
+};
+}
+
+#endif // ifndef liblldb_NativeWatchpointList_h_
diff --git a/linux-x64/clang/include/lldb/Host/common/TCPSocket.h b/linux-x64/clang/include/lldb/Host/common/TCPSocket.h
new file mode 100644
index 0000000..faf3bb6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/TCPSocket.h
@@ -0,0 +1,60 @@
+//===-- TCPSocket.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_TCPSocket_h_
+#define liblldb_TCPSocket_h_
+
+#include "lldb/Host/Socket.h"
+#include "lldb/Host/SocketAddress.h"
+#include <map>
+
+namespace lldb_private {
+class TCPSocket : public Socket {
+public:
+  TCPSocket(bool should_close, bool child_processes_inherit);
+  TCPSocket(NativeSocket socket, bool should_close,
+            bool child_processes_inherit);
+  ~TCPSocket() override;
+
+  // returns port number or 0 if error
+  uint16_t GetLocalPortNumber() const;
+
+  // returns ip address string or empty string if error
+  std::string GetLocalIPAddress() const;
+
+  // must be connected
+  // returns port number or 0 if error
+  uint16_t GetRemotePortNumber() const;
+
+  // must be connected
+  // returns ip address string or empty string if error
+  std::string GetRemoteIPAddress() const;
+
+  int SetOptionNoDelay();
+  int SetOptionReuseAddress();
+
+  Status Connect(llvm::StringRef name) override;
+  Status Listen(llvm::StringRef name, int backlog) override;
+  Status Accept(Socket *&conn_socket) override;
+
+  Status CreateSocket(int domain);
+
+  bool IsValid() const override;
+
+  std::string GetRemoteConnectionURI() const override;
+
+private:
+  TCPSocket(NativeSocket socket, const TCPSocket &listen_socket);
+
+  void CloseListenSockets();
+
+  std::map<int, SocketAddress> m_listen_sockets;
+};
+}
+
+#endif // ifndef liblldb_TCPSocket_h_
diff --git a/linux-x64/clang/include/lldb/Host/common/UDPSocket.h b/linux-x64/clang/include/lldb/Host/common/UDPSocket.h
new file mode 100644
index 0000000..b7b6db6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/common/UDPSocket.h
@@ -0,0 +1,36 @@
+//===-- UDPSocket.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UDPSocket_h_
+#define liblldb_UDPSocket_h_
+
+#include "lldb/Host/Socket.h"
+
+namespace lldb_private {
+class UDPSocket : public Socket {
+public:
+  UDPSocket(bool should_close, bool child_processes_inherit);
+
+  static Status Connect(llvm::StringRef name, bool child_processes_inherit,
+                        Socket *&socket);
+
+  std::string GetRemoteConnectionURI() const override;
+
+private:
+  UDPSocket(NativeSocket socket);
+
+  size_t Send(const void *buf, const size_t num_bytes) override;
+  Status Connect(llvm::StringRef name) override;
+  Status Listen(llvm::StringRef name, int backlog) override;
+  Status Accept(Socket *&socket) override;
+
+  SocketAddress m_sockaddr;
+};
+}
+
+#endif // ifndef liblldb_UDPSocket_h_
diff --git a/linux-x64/clang/include/lldb/Host/freebsd/HostInfoFreeBSD.h b/linux-x64/clang/include/lldb/Host/freebsd/HostInfoFreeBSD.h
new file mode 100644
index 0000000..56f20bb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/freebsd/HostInfoFreeBSD.h
@@ -0,0 +1,27 @@
+//===-- HostInfoFreeBSD.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_freebsd_HostInfoFreeBSD_h_
+#define lldb_Host_freebsd_HostInfoFreeBSD_h_
+
+#include "lldb/Host/posix/HostInfoPosix.h"
+#include "lldb/Utility/FileSpec.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+class HostInfoFreeBSD : public HostInfoPosix {
+public:
+  static llvm::VersionTuple GetOSVersion();
+  static bool GetOSBuildString(std::string &s);
+  static bool GetOSKernelDescription(std::string &s);
+  static FileSpec GetProgramFileSpec();
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/linux/AbstractSocket.h b/linux-x64/clang/include/lldb/Host/linux/AbstractSocket.h
new file mode 100644
index 0000000..78a567a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/linux/AbstractSocket.h
@@ -0,0 +1,25 @@
+//===-- AbstractSocket.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_AbstractSocket_h_
+#define liblldb_AbstractSocket_h_
+
+#include "lldb/Host/posix/DomainSocket.h"
+
+namespace lldb_private {
+class AbstractSocket : public DomainSocket {
+public:
+  AbstractSocket(bool child_processes_inherit);
+
+protected:
+  size_t GetNameOffset() const override;
+  void DeleteSocketFile(llvm::StringRef name) override;
+};
+}
+
+#endif // ifndef liblldb_AbstractSocket_h_
diff --git a/linux-x64/clang/include/lldb/Host/linux/HostInfoLinux.h b/linux-x64/clang/include/lldb/Host/linux/HostInfoLinux.h
new file mode 100644
index 0000000..b1c7f9c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/linux/HostInfoLinux.h
@@ -0,0 +1,47 @@
+//===-- HostInfoLinux.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_linux_HostInfoLinux_h_
+#define lldb_Host_linux_HostInfoLinux_h_
+
+#include "lldb/Host/posix/HostInfoPosix.h"
+#include "lldb/Utility/FileSpec.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/VersionTuple.h"
+
+#include <string>
+
+namespace lldb_private {
+
+class HostInfoLinux : public HostInfoPosix {
+  friend class HostInfoBase;
+
+private:
+  // Static class, unconstructable.
+  HostInfoLinux();
+  ~HostInfoLinux();
+
+public:
+  static void Initialize();
+
+  static llvm::VersionTuple GetOSVersion();
+  static bool GetOSBuildString(std::string &s);
+  static bool GetOSKernelDescription(std::string &s);
+  static llvm::StringRef GetDistributionId();
+  static FileSpec GetProgramFileSpec();
+
+protected:
+  static bool ComputeSupportExeDirectory(FileSpec &file_spec);
+  static bool ComputeSystemPluginsDirectory(FileSpec &file_spec);
+  static bool ComputeUserPluginsDirectory(FileSpec &file_spec);
+  static void ComputeHostArchitectureSupport(ArchSpec &arch_32,
+                                             ArchSpec &arch_64);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/linux/Ptrace.h b/linux-x64/clang/include/lldb/Host/linux/Ptrace.h
new file mode 100644
index 0000000..c54b75f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/linux/Ptrace.h
@@ -0,0 +1,56 @@
+//===-- Ptrace.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// This file defines ptrace functions & structures
+
+#ifndef liblldb_Host_linux_Ptrace_h_
+#define liblldb_Host_linux_Ptrace_h_
+
+#include <sys/ptrace.h>
+
+#ifndef __GLIBC__
+typedef int __ptrace_request;
+#endif
+
+#define DEBUG_PTRACE_MAXBYTES 20
+
+// Support ptrace extensions even when compiled without required kernel support
+#ifndef PTRACE_GETREGS
+#define PTRACE_GETREGS 12
+#endif
+#ifndef PTRACE_SETREGS
+#define PTRACE_SETREGS 13
+#endif
+#ifndef PTRACE_GETFPREGS
+#define PTRACE_GETFPREGS 14
+#endif
+#ifndef PTRACE_SETFPREGS
+#define PTRACE_SETFPREGS 15
+#endif
+#ifndef PTRACE_GETREGSET
+#define PTRACE_GETREGSET 0x4204
+#endif
+#ifndef PTRACE_SETREGSET
+#define PTRACE_SETREGSET 0x4205
+#endif
+#ifndef PTRACE_GET_THREAD_AREA
+#define PTRACE_GET_THREAD_AREA 25
+#endif
+#ifndef PTRACE_ARCH_PRCTL
+#define PTRACE_ARCH_PRCTL 30
+#endif
+#ifndef ARCH_GET_FS
+#define ARCH_SET_GS 0x1001
+#define ARCH_SET_FS 0x1002
+#define ARCH_GET_FS 0x1003
+#define ARCH_GET_GS 0x1004
+#endif
+
+#define LLDB_PTRACE_NT_ARM_TLS 0x401 // ARM TLS register
+
+#endif // liblldb_Host_linux_Ptrace_h_
diff --git a/linux-x64/clang/include/lldb/Host/linux/Support.h b/linux-x64/clang/include/lldb/Host/linux/Support.h
new file mode 100644
index 0000000..d1eb7f8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/linux/Support.h
@@ -0,0 +1,29 @@
+//===-- Support.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_HOST_LINUX_SUPPORT_H
+#define LLDB_HOST_LINUX_SUPPORT_H
+
+#include "llvm/Support/ErrorOr.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include <memory>
+
+namespace lldb_private {
+
+llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
+getProcFile(::pid_t pid, ::pid_t tid, const llvm::Twine &file);
+
+llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
+getProcFile(::pid_t pid, const llvm::Twine &file);
+
+llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
+getProcFile(const llvm::Twine &file);
+
+} // namespace lldb_private
+
+#endif // #ifndef LLDB_HOST_LINUX_SUPPORT_H
diff --git a/linux-x64/clang/include/lldb/Host/linux/Uio.h b/linux-x64/clang/include/lldb/Host/linux/Uio.h
new file mode 100644
index 0000000..460bd6c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/linux/Uio.h
@@ -0,0 +1,23 @@
+//===-- Uio.h ---------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_linux_Uio_h_
+#define liblldb_Host_linux_Uio_h_
+
+#include "lldb/Host/Config.h"
+#include <sys/uio.h>
+
+// We shall provide our own implementation of process_vm_readv if it is not
+// present
+#if !HAVE_PROCESS_VM_READV
+ssize_t process_vm_readv(::pid_t pid, const struct iovec *local_iov,
+                         unsigned long liovcnt, const struct iovec *remote_iov,
+                         unsigned long riovcnt, unsigned long flags);
+#endif
+
+#endif // liblldb_Host_linux_Uio_h_
diff --git a/linux-x64/clang/include/lldb/Host/macosx/HostInfoMacOSX.h b/linux-x64/clang/include/lldb/Host/macosx/HostInfoMacOSX.h
new file mode 100644
index 0000000..d49e27a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/macosx/HostInfoMacOSX.h
@@ -0,0 +1,44 @@
+//===-- HostInfoMacOSX.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_macosx_HostInfoMacOSX_h_
+#define lldb_Host_macosx_HostInfoMacOSX_h_
+
+#include "lldb/Host/posix/HostInfoPosix.h"
+#include "lldb/Utility/FileSpec.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+class ArchSpec;
+
+class HostInfoMacOSX : public HostInfoPosix {
+  friend class HostInfoBase;
+
+private:
+  // Static class, unconstructable.
+  HostInfoMacOSX() = delete;
+  ~HostInfoMacOSX() = delete;
+
+public:
+  static llvm::VersionTuple GetOSVersion();
+  static bool GetOSBuildString(std::string &s);
+  static bool GetOSKernelDescription(std::string &s);
+  static FileSpec GetProgramFileSpec();
+
+protected:
+  static bool ComputeSupportExeDirectory(FileSpec &file_spec);
+  static void ComputeHostArchitectureSupport(ArchSpec &arch_32,
+                                             ArchSpec &arch_64);
+  static bool ComputeHeaderDirectory(FileSpec &file_spec);
+  static bool ComputeSystemPluginsDirectory(FileSpec &file_spec);
+  static bool ComputeUserPluginsDirectory(FileSpec &file_spec);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/macosx/HostThreadMacOSX.h b/linux-x64/clang/include/lldb/Host/macosx/HostThreadMacOSX.h
new file mode 100644
index 0000000..4247de6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/macosx/HostThreadMacOSX.h
@@ -0,0 +1,28 @@
+//===-- HostThreadMacOSX.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_macosx_HostThreadMacOSX_h_
+#define lldb_Host_macosx_HostThreadMacOSX_h_
+
+#include "lldb/Host/posix/HostThreadPosix.h"
+
+namespace lldb_private {
+
+class HostThreadMacOSX : public HostThreadPosix {
+  friend class ThreadLauncher;
+
+public:
+  HostThreadMacOSX();
+  HostThreadMacOSX(lldb::thread_t thread);
+
+protected:
+  static lldb::thread_result_t ThreadCreateTrampoline(lldb::thread_arg_t arg);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/netbsd/HostInfoNetBSD.h b/linux-x64/clang/include/lldb/Host/netbsd/HostInfoNetBSD.h
new file mode 100644
index 0000000..f9ad66e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/netbsd/HostInfoNetBSD.h
@@ -0,0 +1,27 @@
+//===-- HostInfoNetBSD.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_netbsd_HostInfoNetBSD_h_
+#define lldb_Host_netbsd_HostInfoNetBSD_h_
+
+#include "lldb/Host/posix/HostInfoPosix.h"
+#include "lldb/Utility/FileSpec.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+class HostInfoNetBSD : public HostInfoPosix {
+public:
+  static llvm::VersionTuple GetOSVersion();
+  static bool GetOSBuildString(std::string &s);
+  static bool GetOSKernelDescription(std::string &s);
+  static FileSpec GetProgramFileSpec();
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/openbsd/HostInfoOpenBSD.h b/linux-x64/clang/include/lldb/Host/openbsd/HostInfoOpenBSD.h
new file mode 100644
index 0000000..7ec1d5f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/openbsd/HostInfoOpenBSD.h
@@ -0,0 +1,27 @@
+//===-- HostInfoOpenBSD.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_openbsd_HostInfoOpenBSD_h_
+#define lldb_Host_openbsd_HostInfoOpenBSD_h_
+
+#include "lldb/Host/posix/HostInfoPosix.h"
+#include "lldb/Utility/FileSpec.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+class HostInfoOpenBSD : public HostInfoPosix {
+public:
+  static llvm::VersionTuple GetOSVersion();
+  static bool GetOSBuildString(std::string &s);
+  static bool GetOSKernelDescription(std::string &s);
+  static FileSpec GetProgramFileSpec();
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/posix/ConnectionFileDescriptorPosix.h b/linux-x64/clang/include/lldb/Host/posix/ConnectionFileDescriptorPosix.h
new file mode 100644
index 0000000..b25fc47
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/ConnectionFileDescriptorPosix.h
@@ -0,0 +1,124 @@
+//===-- ConnectionFileDescriptorPosix.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_posix_ConnectionFileDescriptorPosix_h_
+#define liblldb_Host_posix_ConnectionFileDescriptorPosix_h_
+
+#include <atomic>
+#include <memory>
+#include <mutex>
+
+#include "lldb/lldb-forward.h"
+
+#include "lldb/Host/Pipe.h"
+#include "lldb/Utility/Connection.h"
+#include "lldb/Utility/IOObject.h"
+#include "lldb/Utility/Predicate.h"
+
+namespace lldb_private {
+
+class Status;
+class Socket;
+class SocketAddress;
+
+class ConnectionFileDescriptor : public Connection {
+public:
+  static const char *LISTEN_SCHEME;
+  static const char *ACCEPT_SCHEME;
+  static const char *UNIX_ACCEPT_SCHEME;
+  static const char *CONNECT_SCHEME;
+  static const char *TCP_CONNECT_SCHEME;
+  static const char *UDP_SCHEME;
+  static const char *UNIX_CONNECT_SCHEME;
+  static const char *UNIX_ABSTRACT_CONNECT_SCHEME;
+  static const char *FD_SCHEME;
+  static const char *FILE_SCHEME;
+
+  ConnectionFileDescriptor(bool child_processes_inherit = false);
+
+  ConnectionFileDescriptor(int fd, bool owns_fd);
+
+  ConnectionFileDescriptor(Socket *socket);
+
+  ~ConnectionFileDescriptor() override;
+
+  bool IsConnected() const override;
+
+  lldb::ConnectionStatus Connect(llvm::StringRef s, Status *error_ptr) override;
+
+  lldb::ConnectionStatus Disconnect(Status *error_ptr) override;
+
+  size_t Read(void *dst, size_t dst_len, const Timeout<std::micro> &timeout,
+              lldb::ConnectionStatus &status, Status *error_ptr) override;
+
+  size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status,
+               Status *error_ptr) override;
+
+  std::string GetURI() override;
+
+  lldb::ConnectionStatus BytesAvailable(const Timeout<std::micro> &timeout,
+                                        Status *error_ptr);
+
+  bool InterruptRead() override;
+
+  lldb::IOObjectSP GetReadObject() override { return m_read_sp; }
+
+  uint16_t GetListeningPort(const Timeout<std::micro> &timeout);
+
+  bool GetChildProcessesInherit() const;
+  void SetChildProcessesInherit(bool child_processes_inherit);
+
+protected:
+  void OpenCommandPipe();
+
+  void CloseCommandPipe();
+
+  lldb::ConnectionStatus SocketListenAndAccept(llvm::StringRef host_and_port,
+                                               Status *error_ptr);
+
+  lldb::ConnectionStatus ConnectTCP(llvm::StringRef host_and_port,
+                                    Status *error_ptr);
+
+  lldb::ConnectionStatus ConnectUDP(llvm::StringRef args, Status *error_ptr);
+
+  lldb::ConnectionStatus NamedSocketConnect(llvm::StringRef socket_name,
+                                            Status *error_ptr);
+
+  lldb::ConnectionStatus NamedSocketAccept(llvm::StringRef socket_name,
+                                           Status *error_ptr);
+
+  lldb::ConnectionStatus UnixAbstractSocketConnect(llvm::StringRef socket_name,
+                                                   Status *error_ptr);
+
+  lldb::IOObjectSP m_read_sp;
+  lldb::IOObjectSP m_write_sp;
+
+  Predicate<uint16_t>
+      m_port_predicate; // Used when binding to port zero to wait for the thread
+                        // that creates the socket, binds and listens to
+                        // resolve the port number.
+
+  Pipe m_pipe;
+  std::recursive_mutex m_mutex;
+  std::atomic<bool> m_shutting_down; // This marks that we are shutting down so
+                                     // if we get woken up from
+  // BytesAvailable to disconnect, we won't try to read again.
+  bool m_waiting_for_accept;
+  bool m_child_processes_inherit;
+
+  std::string m_uri;
+
+private:
+  void InitializeSocket(Socket *socket);
+
+  DISALLOW_COPY_AND_ASSIGN(ConnectionFileDescriptor);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ConnectionFileDescriptor_h_
diff --git a/linux-x64/clang/include/lldb/Host/posix/DomainSocket.h b/linux-x64/clang/include/lldb/Host/posix/DomainSocket.h
new file mode 100644
index 0000000..e407ce1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/DomainSocket.h
@@ -0,0 +1,37 @@
+//===-- DomainSocket.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DomainSocket_h_
+#define liblldb_DomainSocket_h_
+
+#include "lldb/Host/Socket.h"
+
+namespace lldb_private {
+class DomainSocket : public Socket {
+public:
+  DomainSocket(bool should_close, bool child_processes_inherit);
+
+  Status Connect(llvm::StringRef name) override;
+  Status Listen(llvm::StringRef name, int backlog) override;
+  Status Accept(Socket *&socket) override;
+
+  std::string GetRemoteConnectionURI() const override;
+
+protected:
+  DomainSocket(SocketProtocol protocol, bool child_processes_inherit);
+
+  virtual size_t GetNameOffset() const;
+  virtual void DeleteSocketFile(llvm::StringRef name);
+  std::string GetSocketName() const;
+
+private:
+  DomainSocket(NativeSocket socket, const DomainSocket &listen_socket);
+};
+}
+
+#endif // ifndef liblldb_DomainSocket_h_
diff --git a/linux-x64/clang/include/lldb/Host/posix/Fcntl.h b/linux-x64/clang/include/lldb/Host/posix/Fcntl.h
new file mode 100644
index 0000000..31cc293
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/Fcntl.h
@@ -0,0 +1,24 @@
+//===-- Fcntl.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// This file defines fcntl functions & structures
+
+#ifndef liblldb_Host_posix_Fcntl_h_
+#define liblldb_Host_posix_Fcntl_h_
+
+#ifdef __ANDROID__
+#include <android/api-level.h>
+#endif
+
+#include <fcntl.h>
+
+#if defined(__ANDROID_API__) && __ANDROID_API__ < 21
+#define F_DUPFD_CLOEXEC (F_LINUX_SPECIFIC_BASE + 6)
+#endif
+
+#endif // liblldb_Host_posix_Fcntl_h_
diff --git a/linux-x64/clang/include/lldb/Host/posix/HostInfoPosix.h b/linux-x64/clang/include/lldb/Host/posix/HostInfoPosix.h
new file mode 100644
index 0000000..2691013
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/HostInfoPosix.h
@@ -0,0 +1,43 @@
+//===-- HostInfoPosix.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_posix_HostInfoPosix_h_
+#define lldb_Host_posix_HostInfoPosix_h_
+
+#include "lldb/Host/HostInfoBase.h"
+#include "lldb/Utility/FileSpec.h"
+
+namespace lldb_private {
+
+class UserIDResolver;
+
+class HostInfoPosix : public HostInfoBase {
+  friend class HostInfoBase;
+
+public:
+  static size_t GetPageSize();
+  static bool GetHostname(std::string &s);
+
+  static uint32_t GetUserID();
+  static uint32_t GetGroupID();
+  static uint32_t GetEffectiveUserID();
+  static uint32_t GetEffectiveGroupID();
+
+  static FileSpec GetDefaultShell();
+
+  static bool GetEnvironmentVar(const std::string &var_name, std::string &var);
+
+  static UserIDResolver &GetUserIDResolver();
+
+protected:
+  static bool ComputeSupportExeDirectory(FileSpec &file_spec);
+  static bool ComputeHeaderDirectory(FileSpec &file_spec);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/posix/HostProcessPosix.h b/linux-x64/clang/include/lldb/Host/posix/HostProcessPosix.h
new file mode 100644
index 0000000..a313358
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/HostProcessPosix.h
@@ -0,0 +1,42 @@
+//===-- HostProcessPosix.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostProcesPosix_h_
+#define lldb_Host_HostProcesPosix_h_
+
+#include "lldb/Host/HostNativeProcessBase.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+
+class FileSpec;
+
+class HostProcessPosix : public HostNativeProcessBase {
+public:
+  HostProcessPosix();
+  HostProcessPosix(lldb::process_t process);
+  ~HostProcessPosix() override;
+
+  virtual Status Signal(int signo) const;
+  static Status Signal(lldb::process_t process, int signo);
+
+  Status Terminate() override;
+  Status GetMainModule(FileSpec &file_spec) const override;
+
+  lldb::pid_t GetProcessId() const override;
+  bool IsRunning() const override;
+
+  llvm::Expected<HostThread>
+  StartMonitoring(const Host::MonitorChildProcessCallback &callback,
+                  bool monitor_signals) override;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_Host_HostProcesPosix_h_
diff --git a/linux-x64/clang/include/lldb/Host/posix/HostThreadPosix.h b/linux-x64/clang/include/lldb/Host/posix/HostThreadPosix.h
new file mode 100644
index 0000000..54012e1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/HostThreadPosix.h
@@ -0,0 +1,32 @@
+//===-- HostThreadPosix.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_posix_HostThreadPosix_h_
+#define lldb_Host_posix_HostThreadPosix_h_
+
+#include "lldb/Host/HostNativeThreadBase.h"
+
+namespace lldb_private {
+
+class HostThreadPosix : public HostNativeThreadBase {
+  DISALLOW_COPY_AND_ASSIGN(HostThreadPosix);
+
+public:
+  HostThreadPosix();
+  HostThreadPosix(lldb::thread_t thread);
+  ~HostThreadPosix() override;
+
+  Status Join(lldb::thread_result_t *result) override;
+  Status Cancel() override;
+
+  Status Detach();
+};
+
+} // namespace lldb_private
+
+#endif // lldb_Host_posix_HostThreadPosix_h_
diff --git a/linux-x64/clang/include/lldb/Host/posix/LockFilePosix.h b/linux-x64/clang/include/lldb/Host/posix/LockFilePosix.h
new file mode 100644
index 0000000..63333bf
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/LockFilePosix.h
@@ -0,0 +1,35 @@
+//===-- LockFilePosix.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_posix_LockFilePosix_h_
+#define liblldb_Host_posix_LockFilePosix_h_
+
+#include "lldb/Host/LockFileBase.h"
+
+namespace lldb_private {
+
+class LockFilePosix : public LockFileBase {
+public:
+  explicit LockFilePosix(int fd);
+  ~LockFilePosix() override;
+
+protected:
+  Status DoWriteLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoTryWriteLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoReadLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoTryReadLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoUnlock() override;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Host_posix_LockFilePosix_h_
diff --git a/linux-x64/clang/include/lldb/Host/posix/PipePosix.h b/linux-x64/clang/include/lldb/Host/posix/PipePosix.h
new file mode 100644
index 0000000..df341f2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/PipePosix.h
@@ -0,0 +1,80 @@
+//===-- PipePosix.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_posix_PipePosix_h_
+#define liblldb_Host_posix_PipePosix_h_
+#if defined(__cplusplus)
+
+#include "lldb/Host/PipeBase.h"
+
+namespace lldb_private {
+
+/// \class PipePosix PipePosix.h "lldb/Host/posix/PipePosix.h"
+/// A posix-based implementation of Pipe, a class that abtracts
+///        unix style pipes.
+///
+/// A class that abstracts the LLDB core from host pipe functionality.
+class PipePosix : public PipeBase {
+public:
+  static int kInvalidDescriptor;
+
+  PipePosix();
+  PipePosix(lldb::pipe_t read, lldb::pipe_t write);
+  PipePosix(const PipePosix &) = delete;
+  PipePosix(PipePosix &&pipe_posix);
+  PipePosix &operator=(const PipePosix &) = delete;
+  PipePosix &operator=(PipePosix &&pipe_posix);
+
+  ~PipePosix() override;
+
+  Status CreateNew(bool child_process_inherit) override;
+  Status CreateNew(llvm::StringRef name, bool child_process_inherit) override;
+  Status CreateWithUniqueName(llvm::StringRef prefix,
+                              bool child_process_inherit,
+                              llvm::SmallVectorImpl<char> &name) override;
+  Status OpenAsReader(llvm::StringRef name,
+                      bool child_process_inherit) override;
+  Status
+  OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit,
+                          const std::chrono::microseconds &timeout) override;
+
+  bool CanRead() const override;
+  bool CanWrite() const override;
+
+  lldb::pipe_t GetReadPipe() const override {
+    return lldb::pipe_t(GetReadFileDescriptor());
+  }
+  lldb::pipe_t GetWritePipe() const override {
+    return lldb::pipe_t(GetWriteFileDescriptor());
+  }
+
+  int GetReadFileDescriptor() const override;
+  int GetWriteFileDescriptor() const override;
+  int ReleaseReadFileDescriptor() override;
+  int ReleaseWriteFileDescriptor() override;
+  void CloseReadFileDescriptor() override;
+  void CloseWriteFileDescriptor() override;
+
+  // Close both descriptors
+  void Close() override;
+
+  Status Delete(llvm::StringRef name) override;
+
+  Status Write(const void *buf, size_t size, size_t &bytes_written) override;
+  Status ReadWithTimeout(void *buf, size_t size,
+                         const std::chrono::microseconds &timeout,
+                         size_t &bytes_read) override;
+
+private:
+  int m_fds[2];
+};
+
+} // namespace lldb_private
+
+#endif // #if defined(__cplusplus)
+#endif // liblldb_Host_posix_PipePosix_h_
diff --git a/linux-x64/clang/include/lldb/Host/posix/ProcessLauncherPosixFork.h b/linux-x64/clang/include/lldb/Host/posix/ProcessLauncherPosixFork.h
new file mode 100644
index 0000000..15e2d6d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/posix/ProcessLauncherPosixFork.h
@@ -0,0 +1,24 @@
+//===-- ProcessLauncherPosixFork.h ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_posix_ProcessLauncherPosixFork_h_
+#define lldb_Host_posix_ProcessLauncherPosixFork_h_
+
+#include "lldb/Host/ProcessLauncher.h"
+
+namespace lldb_private {
+
+class ProcessLauncherPosixFork : public ProcessLauncher {
+public:
+  HostProcess LaunchProcess(const ProcessLaunchInfo &launch_info,
+                            Status &error) override;
+};
+
+} // end of namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/AutoHandle.h b/linux-x64/clang/include/lldb/Host/windows/AutoHandle.h
new file mode 100644
index 0000000..5c0de89
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/AutoHandle.h
@@ -0,0 +1,36 @@
+//===-- AutoHandle.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_Host_windows_AutoHandle_h_
+#define LLDB_lldb_Host_windows_AutoHandle_h_
+
+#include "lldb/Host/windows/windows.h"
+
+namespace lldb_private {
+
+class AutoHandle {
+public:
+  AutoHandle(HANDLE handle, HANDLE invalid_value = INVALID_HANDLE_VALUE)
+      : m_handle(handle), m_invalid_value(invalid_value) {}
+
+  ~AutoHandle() {
+    if (m_handle != m_invalid_value)
+      ::CloseHandle(m_handle);
+  }
+
+  bool IsValid() const { return m_handle != m_invalid_value; }
+
+  HANDLE get() const { return m_handle; }
+
+private:
+  HANDLE m_handle;
+  HANDLE m_invalid_value;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/ConnectionGenericFileWindows.h b/linux-x64/clang/include/lldb/Host/windows/ConnectionGenericFileWindows.h
new file mode 100644
index 0000000..8856708
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/ConnectionGenericFileWindows.h
@@ -0,0 +1,63 @@
+//===-- ConnectionGenericFileWindows.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_windows_ConnectionGenericFileWindows_h_
+#define liblldb_Host_windows_ConnectionGenericFileWindows_h_
+
+#include "lldb/Host/windows/windows.h"
+#include "lldb/Utility/Connection.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+
+class Status;
+
+class ConnectionGenericFile : public lldb_private::Connection {
+public:
+  ConnectionGenericFile();
+
+  ConnectionGenericFile(lldb::file_t file, bool owns_file);
+
+  ~ConnectionGenericFile() override;
+
+  bool IsConnected() const override;
+
+  lldb::ConnectionStatus Connect(llvm::StringRef s, Status *error_ptr) override;
+
+  lldb::ConnectionStatus Disconnect(Status *error_ptr) override;
+
+  size_t Read(void *dst, size_t dst_len, const Timeout<std::micro> &timeout,
+              lldb::ConnectionStatus &status, Status *error_ptr) override;
+
+  size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status,
+               Status *error_ptr) override;
+
+  std::string GetURI() override;
+
+  bool InterruptRead() override;
+
+protected:
+  OVERLAPPED m_overlapped;
+  HANDLE m_file;
+  HANDLE m_event_handles[2];
+  bool m_owns_file;
+  LARGE_INTEGER m_file_position;
+
+  enum { kBytesAvailableEvent, kInterruptEvent };
+
+private:
+  void InitializeEventHandles();
+  void IncrementFilePointer(DWORD amount);
+
+  std::string m_uri;
+
+  DISALLOW_COPY_AND_ASSIGN(ConnectionGenericFile);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/HostInfoWindows.h b/linux-x64/clang/include/lldb/Host/windows/HostInfoWindows.h
new file mode 100644
index 0000000..209d9da
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/HostInfoWindows.h
@@ -0,0 +1,48 @@
+//===-- HostInfoWindows.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_windows_HostInfoWindows_h_
+#define lldb_Host_windows_HostInfoWindows_h_
+
+#include "lldb/Host/HostInfoBase.h"
+#include "lldb/Utility/FileSpec.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+class UserIDResolver;
+
+class HostInfoWindows : public HostInfoBase {
+  friend class HostInfoBase;
+
+private:
+  // Static class, unconstructable.
+  HostInfoWindows();
+  ~HostInfoWindows();
+
+public:
+  static void Initialize();
+  static void Terminate();
+
+  static size_t GetPageSize();
+  static UserIDResolver &GetUserIDResolver();
+
+  static llvm::VersionTuple GetOSVersion();
+  static bool GetOSBuildString(std::string &s);
+  static bool GetOSKernelDescription(std::string &s);
+  static bool GetHostname(std::string &s);
+  static FileSpec GetProgramFileSpec();
+  static FileSpec GetDefaultShell();
+
+  static bool GetEnvironmentVar(const std::string &var_name, std::string &var);
+
+private:
+  static FileSpec m_program_filespec;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/HostProcessWindows.h b/linux-x64/clang/include/lldb/Host/windows/HostProcessWindows.h
new file mode 100644
index 0000000..925d565
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/HostProcessWindows.h
@@ -0,0 +1,46 @@
+//===-- HostProcessWindows.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_HostProcessWindows_h_
+#define lldb_Host_HostProcessWindows_h_
+
+#include "lldb/Host/HostNativeProcessBase.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+
+class FileSpec;
+
+class HostProcessWindows : public HostNativeProcessBase {
+public:
+  HostProcessWindows();
+  explicit HostProcessWindows(lldb::process_t process);
+  ~HostProcessWindows();
+
+  void SetOwnsHandle(bool owns);
+
+  Status Terminate() override;
+  Status GetMainModule(FileSpec &file_spec) const override;
+
+  lldb::pid_t GetProcessId() const override;
+  bool IsRunning() const override;
+
+  virtual llvm::Expected<HostThread>
+  StartMonitoring(const Host::MonitorChildProcessCallback &callback,
+                  bool monitor_signals) override;
+
+private:
+  static lldb::thread_result_t MonitorThread(void *thread_arg);
+
+  void Close();
+
+  bool m_owns_handle;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/HostThreadWindows.h b/linux-x64/clang/include/lldb/Host/windows/HostThreadWindows.h
new file mode 100644
index 0000000..be3f7fe
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/HostThreadWindows.h
@@ -0,0 +1,40 @@
+//===-- HostThreadWindows.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_windows_HostThreadWindows_h_
+#define lldb_Host_windows_HostThreadWindows_h_
+
+#include "lldb/Host/HostNativeThreadBase.h"
+
+#include "llvm/ADT/SmallString.h"
+
+namespace lldb_private {
+
+class HostThreadWindows : public HostNativeThreadBase {
+  DISALLOW_COPY_AND_ASSIGN(HostThreadWindows);
+
+public:
+  HostThreadWindows();
+  HostThreadWindows(lldb::thread_t thread);
+  virtual ~HostThreadWindows();
+
+  void SetOwnsHandle(bool owns);
+
+  virtual Status Join(lldb::thread_result_t *result);
+  virtual Status Cancel();
+  virtual void Reset();
+  virtual bool EqualsThread(lldb::thread_t thread) const;
+
+  lldb::tid_t GetThreadId() const;
+
+private:
+  bool m_owns_handle;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/LockFileWindows.h b/linux-x64/clang/include/lldb/Host/windows/LockFileWindows.h
new file mode 100644
index 0000000..0312d14
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/LockFileWindows.h
@@ -0,0 +1,41 @@
+//===-- LockFileWindows.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_posix_LockFileWindows_h_
+#define liblldb_Host_posix_LockFileWindows_h_
+
+#include "lldb/Host/LockFileBase.h"
+#include "lldb/Host/windows/windows.h"
+
+namespace lldb_private {
+
+class LockFileWindows : public LockFileBase {
+public:
+  explicit LockFileWindows(int fd);
+  ~LockFileWindows();
+
+protected:
+  Status DoWriteLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoTryWriteLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoReadLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoTryReadLock(const uint64_t start, const uint64_t len) override;
+
+  Status DoUnlock() override;
+
+  bool IsValidFile() const override;
+
+private:
+  HANDLE m_file;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Host_posix_LockFileWindows_h_
diff --git a/linux-x64/clang/include/lldb/Host/windows/PipeWindows.h b/linux-x64/clang/include/lldb/Host/windows/PipeWindows.h
new file mode 100644
index 0000000..4b5be28
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/PipeWindows.h
@@ -0,0 +1,89 @@
+//===-- PipeWindows.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_windows_PipeWindows_h_
+#define liblldb_Host_windows_PipeWindows_h_
+
+#include "lldb/Host/PipeBase.h"
+#include "lldb/Host/windows/windows.h"
+
+namespace lldb_private {
+
+/// \class Pipe PipeWindows.h "lldb/Host/windows/PipeWindows.h"
+/// A windows-based implementation of Pipe, a class that abtracts
+///        unix style pipes.
+///
+/// A class that abstracts the LLDB core from host pipe functionality.
+class PipeWindows : public PipeBase {
+public:
+  static const int kInvalidDescriptor = -1;
+
+public:
+  PipeWindows();
+  PipeWindows(lldb::pipe_t read, lldb::pipe_t write);
+  ~PipeWindows() override;
+
+  // Create an unnamed pipe.
+  Status CreateNew(bool child_process_inherit) override;
+
+  // Create a named pipe.
+  Status CreateNewNamed(bool child_process_inherit);
+  Status CreateNew(llvm::StringRef name, bool child_process_inherit) override;
+  Status CreateWithUniqueName(llvm::StringRef prefix,
+                              bool child_process_inherit,
+                              llvm::SmallVectorImpl<char> &name) override;
+  Status OpenAsReader(llvm::StringRef name,
+                      bool child_process_inherit) override;
+  Status
+  OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit,
+                          const std::chrono::microseconds &timeout) override;
+
+  bool CanRead() const override;
+  bool CanWrite() const override;
+
+  lldb::pipe_t GetReadPipe() const override { return lldb::pipe_t(m_read); }
+  lldb::pipe_t GetWritePipe() const override { return lldb::pipe_t(m_write); }
+
+  int GetReadFileDescriptor() const override;
+  int GetWriteFileDescriptor() const override;
+  int ReleaseReadFileDescriptor() override;
+  int ReleaseWriteFileDescriptor() override;
+  void CloseReadFileDescriptor() override;
+  void CloseWriteFileDescriptor() override;
+
+  void Close() override;
+
+  Status Delete(llvm::StringRef name) override;
+
+  Status Write(const void *buf, size_t size, size_t &bytes_written) override;
+  Status ReadWithTimeout(void *buf, size_t size,
+                         const std::chrono::microseconds &timeout,
+                         size_t &bytes_read) override;
+
+  // PipeWindows specific methods.  These allow access to the underlying OS
+  // handle.
+  HANDLE GetReadNativeHandle();
+  HANDLE GetWriteNativeHandle();
+
+private:
+  Status OpenNamedPipe(llvm::StringRef name, bool child_process_inherit,
+                       bool is_read);
+
+  HANDLE m_read;
+  HANDLE m_write;
+
+  int m_read_fd;
+  int m_write_fd;
+
+  OVERLAPPED m_read_overlapped;
+  OVERLAPPED m_write_overlapped;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Host_posix_PipePosix_h_
diff --git a/linux-x64/clang/include/lldb/Host/windows/PosixApi.h b/linux-x64/clang/include/lldb/Host/windows/PosixApi.h
new file mode 100644
index 0000000..6a6ed3e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/PosixApi.h
@@ -0,0 +1,117 @@
+//===-- windows/PosixApi.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_windows_PosixApi_h
+#define liblldb_Host_windows_PosixApi_h
+
+#include "lldb/Host/Config.h"
+#include "llvm/Support/Compiler.h"
+#if !defined(_WIN32)
+#error "windows/PosixApi.h being #included on non Windows system!"
+#endif
+
+// va_start, va_end, etc macros.
+#include <stdarg.h>
+
+// time_t, timespec, etc.
+#include <time.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 32768
+#endif
+
+#define O_NOCTTY 0
+#define O_NONBLOCK 0
+#define SIGTRAP 5
+#define SIGKILL 9
+#define SIGSTOP 20
+
+#if defined(_MSC_VER)
+#define S_IRUSR S_IREAD  /* read, user */
+#define S_IWUSR S_IWRITE /* write, user */
+#define S_IXUSR 0        /* execute, user */
+#endif
+#define S_IRGRP 0 /* read, group */
+#define S_IWGRP 0 /* write, group */
+#define S_IXGRP 0 /* execute, group */
+#define S_IROTH 0 /* read, others */
+#define S_IWOTH 0 /* write, others */
+#define S_IXOTH 0 /* execute, others */
+#define S_IRWXU 0
+#define S_IRWXG 0
+#define S_IRWXO 0
+
+#if HAVE_SYS_TYPES_H
+// pyconfig.h typedefs this.  We require python headers to be included before
+// any LLDB headers, but there's no way to prevent python's pid_t definition
+// from leaking, so this is the best option.
+#ifndef NO_PID_T
+#include <sys/types.h>
+#endif
+#endif // HAVE_SYS_TYPES_H
+
+#ifdef _MSC_VER
+
+// PRIxxx format macros for printf()
+#include <inttypes.h>
+
+// open(), close(), creat(), etc.
+#include <io.h>
+
+typedef unsigned short mode_t;
+
+// pyconfig.h typedefs this.  We require python headers to be included before
+// any LLDB headers, but there's no way to prevent python's pid_t definition
+// from leaking, so this is the best option.
+#ifndef NO_PID_T
+typedef uint32_t pid_t;
+#endif
+
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+
+#define S_IFDIR _S_IFDIR
+
+#ifndef S_ISDIR
+#define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR)
+#endif
+
+#endif // _MSC_VER
+
+// Various useful posix functions that are not present in Windows.  We provide
+// custom implementations.
+int vasprintf(char **ret, const char *fmt, va_list ap);
+char *strcasestr(const char *s, const char *find);
+char *realpath(const char *name, char *resolved);
+
+#ifdef _MSC_VER
+
+char *basename(char *path);
+char *dirname(char *path);
+
+int strcasecmp(const char *s1, const char *s2);
+int strncasecmp(const char *s1, const char *s2, size_t n);
+
+#endif // _MSC_VER
+
+// empty functions
+inline int posix_openpt(int flag) { LLVM_BUILTIN_UNREACHABLE; }
+
+inline int strerror_r(int errnum, char *buf, size_t buflen) {
+  LLVM_BUILTIN_UNREACHABLE;
+}
+
+inline int unlockpt(int fd) { LLVM_BUILTIN_UNREACHABLE; }
+inline int grantpt(int fd) { LLVM_BUILTIN_UNREACHABLE; }
+inline char *ptsname(int fd) { LLVM_BUILTIN_UNREACHABLE; }
+
+inline pid_t fork(void) { LLVM_BUILTIN_UNREACHABLE; }
+inline pid_t setsid(void) { LLVM_BUILTIN_UNREACHABLE; }
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/ProcessLauncherWindows.h b/linux-x64/clang/include/lldb/Host/windows/ProcessLauncherWindows.h
new file mode 100644
index 0000000..e765f1e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/ProcessLauncherWindows.h
@@ -0,0 +1,29 @@
+//===-- ProcessLauncherWindows.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_windows_ProcessLauncherWindows_h_
+#define lldb_Host_windows_ProcessLauncherWindows_h_
+
+#include "lldb/Host/ProcessLauncher.h"
+#include "lldb/Host/windows/windows.h"
+
+namespace lldb_private {
+
+class ProcessLaunchInfo;
+
+class ProcessLauncherWindows : public ProcessLauncher {
+public:
+  virtual HostProcess LaunchProcess(const ProcessLaunchInfo &launch_info,
+                                    Status &error);
+
+protected:
+  HANDLE GetStdioHandle(const ProcessLaunchInfo &launch_info, int fd);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Host/windows/editlinewin.h b/linux-x64/clang/include/lldb/Host/windows/editlinewin.h
new file mode 100644
index 0000000..7575f67
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/editlinewin.h
@@ -0,0 +1,115 @@
+//===-- editlinewin.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#pragma once
+
+#include <stdio.h>
+
+// EditLine editor function return codes.
+// For user-defined function interface
+#define CC_NORM 0
+#define CC_NEWLINE 1
+#define CC_EOF 2
+#define CC_ARGHACK 3
+#define CC_REFRESH 4
+#define CC_CURSOR 5
+#define CC_ERROR 6
+#define CC_FATAL 7
+#define CC_REDISPLAY 8
+#define CC_REFRESH_BEEP 9
+
+// el_set/el_get parameters
+#define EL_PROMPT 0      // , el_pfunc_t
+#define EL_TERMINAL 1    // , const char *
+#define EL_EDITOR 2      // , const char *
+#define EL_SIGNAL 3      // , int);
+#define EL_BIND 4        // , const char *, ..., NULL
+#define EL_TELLTC 5      // , const char *, ..., NULL
+#define EL_SETTC 6       // , const char *, ..., NULL
+#define EL_ECHOTC 7      // , const char *, ..., NULL
+#define EL_SETTY 8       // , const char *, ..., NULL
+#define EL_ADDFN 9       // , const char *, const char *, el_func_t
+#define EL_HIST 10       // , hist_fun_t, const char *
+#define EL_EDITMODE 11   // , int
+#define EL_RPROMPT 12    // , el_pfunc_t
+#define EL_GETCFN 13     // , el_rfunc_t
+#define EL_CLIENTDATA 14 // , void *
+#define EL_UNBUFFERED 15 // , int
+#define EL_PREP_TERM 16  // , int
+#define EL_GETTC 17      // , const char *, ..., NULL
+#define EL_GETFP 18      // , int, FILE **
+#define EL_SETFP 19      // , int, FILE *
+#define EL_REFRESH 20    // , void
+#define EL_PROMPT_ESC 21 // , prompt_func, Char);              set/get
+
+#define EL_BUILTIN_GETCFN (NULL)
+
+// history defines
+#define H_FUNC 0        // , UTSL
+#define H_SETSIZE 1     // , const int
+#define H_GETSIZE 2     // , void
+#define H_FIRST 3       // , void
+#define H_LAST 4        // , void
+#define H_PREV 5        // , void
+#define H_NEXT 6        // , void
+#define H_CURR 8        // , const int
+#define H_SET 7         // , int
+#define H_ADD 9         // , const char *
+#define H_ENTER 10      // , const char *
+#define H_APPEND 11     // , const char *
+#define H_END 12        // , void
+#define H_NEXT_STR 13   // , const char *
+#define H_PREV_STR 14   // , const char *
+#define H_NEXT_EVENT 15 // , const int
+#define H_PREV_EVENT 16 // , const int
+#define H_LOAD 17       // , const char *
+#define H_SAVE 18       // , const char *
+#define H_CLEAR 19      // , void
+#define H_SETUNIQUE 20  // , int
+#define H_GETUNIQUE 21  // , void
+#define H_DEL 22        // , int
+
+struct EditLine {};
+
+struct LineInfo {
+  const char *buffer;
+  const char *cursor;
+  const char *lastchar;
+};
+
+struct History {};
+
+struct HistEvent {
+  int num;
+  const char *str;
+};
+
+extern "C" {
+// edit line API
+EditLine *el_init(const char *, FILE *, FILE *, FILE *);
+const char *el_gets(EditLine *, int *);
+int el_set(EditLine *, int, ...);
+
+void el_end(EditLine *);
+void el_reset(EditLine *);
+int el_getc(EditLine *, char *);
+void el_push(EditLine *, const char *);
+void el_beep(EditLine *);
+int el_parse(EditLine *, int, const char **);
+int el_get(EditLine *, int, ...);
+int el_source(EditLine *, const char *);
+void el_resize(EditLine *);
+const LineInfo *el_line(EditLine *);
+int el_insertstr(EditLine *, const char *);
+void el_deletestr(EditLine *, int);
+
+// history API
+History *history_init(void);
+void history_end(History *);
+int history(History *, HistEvent *, int, ...);
+};
diff --git a/linux-x64/clang/include/lldb/Host/windows/windows.h b/linux-x64/clang/include/lldb/Host/windows/windows.h
new file mode 100644
index 0000000..11594c6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Host/windows/windows.h
@@ -0,0 +1,31 @@
+//===-- windows.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_windows_h_
+#define LLDB_lldb_windows_h_
+
+#define NTDDI_VERSION NTDDI_VISTA
+#undef _WIN32_WINNT // undef a previous definition to avoid warning
+#define _WIN32_WINNT _WIN32_WINNT_VISTA
+#define WIN32_LEAN_AND_MEAN
+#define NOGDI
+#undef NOMINMAX // undef a previous definition to avoid warning
+#define NOMINMAX
+#include <windows.h>
+#undef GetUserName
+#undef LoadImage
+#undef CreateProcess
+#undef Yield
+#undef far
+#undef near
+#undef FAR
+#undef NEAR
+#define FAR
+#define NEAR
+
+#endif // LLDB_lldb_windows_h_
diff --git a/linux-x64/clang/include/lldb/Initialization/SystemInitializer.h b/linux-x64/clang/include/lldb/Initialization/SystemInitializer.h
new file mode 100644
index 0000000..e616ad1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Initialization/SystemInitializer.h
@@ -0,0 +1,28 @@
+//===-- SystemInitializer.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_INITIALIZATION_SYSTEM_INITIALIZER_H
+#define LLDB_INITIALIZATION_SYSTEM_INITIALIZER_H
+
+#include "llvm/Support/Error.h"
+
+#include <string>
+
+namespace lldb_private {
+
+class SystemInitializer {
+public:
+  SystemInitializer();
+  virtual ~SystemInitializer();
+
+  virtual llvm::Error Initialize() = 0;
+  virtual void Terminate() = 0;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Initialization/SystemInitializerCommon.h b/linux-x64/clang/include/lldb/Initialization/SystemInitializerCommon.h
new file mode 100644
index 0000000..ad7e58e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Initialization/SystemInitializerCommon.h
@@ -0,0 +1,34 @@
+//===-- SystemInitializerCommon.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_INITIALIZATION_SYSTEM_INITIALIZER_COMMON_H
+#define LLDB_INITIALIZATION_SYSTEM_INITIALIZER_COMMON_H
+
+#include "SystemInitializer.h"
+
+namespace lldb_private {
+/// Initializes common lldb functionality.
+///
+/// This class is responsible for initializing a subset of lldb
+/// useful to both debug servers and debug clients.  Debug servers
+/// do not use all of LLDB and desire small binary sizes, so this
+/// functionality is separate.  This class is used by constructing
+/// an instance of SystemLifetimeManager with this class passed to
+/// the constructor.
+class SystemInitializerCommon : public SystemInitializer {
+public:
+  SystemInitializerCommon();
+  ~SystemInitializerCommon() override;
+
+  llvm::Error Initialize() override;
+  void Terminate() override;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_INITIALIZATION_SYSTEM_INITIALIZER_COMMON_H
diff --git a/linux-x64/clang/include/lldb/Initialization/SystemLifetimeManager.h b/linux-x64/clang/include/lldb/Initialization/SystemLifetimeManager.h
new file mode 100644
index 0000000..2e99b86
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Initialization/SystemLifetimeManager.h
@@ -0,0 +1,41 @@
+//===-- SystemLifetimeManager.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_INITIALIZATION_SYSTEM_LIFETIME_MANAGER_H
+#define LLDB_INITIALIZATION_SYSTEM_LIFETIME_MANAGER_H
+
+#include "lldb/Initialization/SystemInitializer.h"
+#include "lldb/lldb-private-types.h"
+#include "llvm/Support/Error.h"
+
+#include <memory>
+#include <mutex>
+
+namespace lldb_private {
+
+class SystemLifetimeManager {
+public:
+  SystemLifetimeManager();
+  ~SystemLifetimeManager();
+
+  llvm::Error Initialize(std::unique_ptr<SystemInitializer> initializer,
+                         LoadPluginCallbackType plugin_callback);
+  void Terminate();
+
+private:
+  std::recursive_mutex m_mutex;
+  std::unique_ptr<SystemInitializer> m_initializer;
+  bool m_initialized;
+
+  // Noncopyable.
+  SystemLifetimeManager(const SystemLifetimeManager &other) = delete;
+  SystemLifetimeManager &operator=(const SystemLifetimeManager &other) = delete;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandAlias.h b/linux-x64/clang/include/lldb/Interpreter/CommandAlias.h
new file mode 100644
index 0000000..c2a7a38
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandAlias.h
@@ -0,0 +1,84 @@
+//===-- CommandAlias.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandAlias_h_
+#define liblldb_CommandAlias_h_
+
+#include <memory>
+
+#include "lldb/Interpreter/CommandObject.h"
+#include "lldb/Utility/Args.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/lldb-forward.h"
+
+namespace lldb_private {
+class CommandAlias : public CommandObject {
+public:
+  typedef std::unique_ptr<CommandAlias> UniquePointer;
+
+  CommandAlias(CommandInterpreter &interpreter, lldb::CommandObjectSP cmd_sp,
+               llvm::StringRef options_args, llvm::StringRef name,
+               llvm::StringRef help = llvm::StringRef(),
+               llvm::StringRef syntax = llvm::StringRef(), uint32_t flags = 0);
+
+  void GetAliasExpansion(StreamString &help_string) const;
+
+  bool IsValid() const { return m_underlying_command_sp && m_option_args_sp; }
+
+  explicit operator bool() const { return IsValid(); }
+
+  bool WantsRawCommandString() override;
+
+  bool WantsCompletion() override;
+
+  int HandleCompletion(CompletionRequest &request) override;
+
+  int HandleArgumentCompletion(
+      CompletionRequest &request,
+      OptionElementVector &opt_element_vector) override;
+
+  Options *GetOptions() override;
+
+  bool IsAlias() override { return true; }
+
+  bool IsDashDashCommand() override;
+
+  llvm::StringRef GetHelp() override;
+
+  llvm::StringRef GetHelpLong() override;
+
+  void SetHelp(llvm::StringRef str) override;
+
+  void SetHelpLong(llvm::StringRef str) override;
+
+  bool Execute(const char *args_string, CommandReturnObject &result) override;
+
+  lldb::CommandObjectSP GetUnderlyingCommand() {
+    return m_underlying_command_sp;
+  }
+  OptionArgVectorSP GetOptionArguments() const { return m_option_args_sp; }
+  const char *GetOptionString() { return m_option_string.c_str(); }
+
+  // this takes an alias - potentially nested (i.e. an alias to an alias) and
+  // expands it all the way to a non-alias command
+  std::pair<lldb::CommandObjectSP, OptionArgVectorSP> Desugar();
+
+protected:
+  bool IsNestedAlias();
+
+private:
+  lldb::CommandObjectSP m_underlying_command_sp;
+  std::string m_option_string;
+  OptionArgVectorSP m_option_args_sp;
+  LazyBool m_is_dashdash_alias;
+  bool m_did_set_help : 1;
+  bool m_did_set_help_long : 1;
+};
+} // namespace lldb_private
+
+#endif // liblldb_CommandAlias_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandCompletions.h b/linux-x64/clang/include/lldb/Interpreter/CommandCompletions.h
new file mode 100644
index 0000000..3d09db5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandCompletions.h
@@ -0,0 +1,203 @@
+//===-- CommandCompletions.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_CommandCompletions_h_
+#define lldb_CommandCompletions_h_
+
+#include <set>
+
+#include "lldb/Core/FileSpecList.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/RegularExpression.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/Twine.h"
+
+namespace lldb_private {
+class TildeExpressionResolver;
+class CommandCompletions {
+public:
+  // This is the command completion callback that is used to complete the
+  // argument of the option it is bound to (in the OptionDefinition table
+  // below).  Return the total number of matches.
+  typedef int (*CompletionCallback)(CommandInterpreter &interpreter,
+                                    CompletionRequest &request,
+                                    // A search filter to limit the search...
+                                    lldb_private::SearchFilter *searcher);
+  enum CommonCompletionTypes {
+    eNoCompletion = 0u,
+    eSourceFileCompletion = (1u << 0),
+    eDiskFileCompletion = (1u << 1),
+    eDiskDirectoryCompletion = (1u << 2),
+    eSymbolCompletion = (1u << 3),
+    eModuleCompletion = (1u << 4),
+    eSettingsNameCompletion = (1u << 5),
+    ePlatformPluginCompletion = (1u << 6),
+    eArchitectureCompletion = (1u << 7),
+    eVariablePathCompletion = (1u << 8),
+    // This item serves two purposes.  It is the last element in the enum, so
+    // you can add custom enums starting from here in your Option class. Also
+    // if you & in this bit the base code will not process the option.
+    eCustomCompletion = (1u << 9)
+  };
+
+  struct CommonCompletionElement {
+    uint32_t type;
+    CompletionCallback callback;
+  };
+
+  static bool InvokeCommonCompletionCallbacks(
+      CommandInterpreter &interpreter, uint32_t completion_mask,
+      lldb_private::CompletionRequest &request, SearchFilter *searcher);
+
+  // These are the generic completer functions:
+  static int DiskFiles(CommandInterpreter &interpreter,
+                       CompletionRequest &request, SearchFilter *searcher);
+
+  static int DiskFiles(const llvm::Twine &partial_file_name,
+                       StringList &matches, TildeExpressionResolver &Resolver);
+
+  static int DiskDirectories(CommandInterpreter &interpreter,
+                             CompletionRequest &request,
+                             SearchFilter *searcher);
+
+  static int DiskDirectories(const llvm::Twine &partial_file_name,
+                             StringList &matches,
+                             TildeExpressionResolver &Resolver);
+
+  static int SourceFiles(CommandInterpreter &interpreter,
+                         CompletionRequest &request, SearchFilter *searcher);
+
+  static int Modules(CommandInterpreter &interpreter,
+                     CompletionRequest &request, SearchFilter *searcher);
+
+  static int Symbols(CommandInterpreter &interpreter,
+                     CompletionRequest &request, SearchFilter *searcher);
+
+  static int SettingsNames(CommandInterpreter &interpreter,
+                           CompletionRequest &request, SearchFilter *searcher);
+
+  static int PlatformPluginNames(CommandInterpreter &interpreter,
+                                 CompletionRequest &request,
+                                 SearchFilter *searcher);
+
+  static int ArchitectureNames(CommandInterpreter &interpreter,
+                               CompletionRequest &request,
+                               SearchFilter *searcher);
+
+  static int VariablePath(CommandInterpreter &interpreter,
+                          CompletionRequest &request, SearchFilter *searcher);
+
+  // The Completer class is a convenient base class for building searchers that
+  // go along with the SearchFilter passed to the standard Completer functions.
+  class Completer : public Searcher {
+  public:
+    Completer(CommandInterpreter &interpreter, CompletionRequest &request);
+
+    ~Completer() override;
+
+    CallbackReturn SearchCallback(SearchFilter &filter, SymbolContext &context,
+                                  Address *addr, bool complete) override = 0;
+
+    lldb::SearchDepth GetDepth() override = 0;
+
+    virtual size_t DoCompletion(SearchFilter *filter) = 0;
+
+  protected:
+    CommandInterpreter &m_interpreter;
+    CompletionRequest &m_request;
+
+  private:
+    DISALLOW_COPY_AND_ASSIGN(Completer);
+  };
+
+  // SourceFileCompleter implements the source file completer
+  class SourceFileCompleter : public Completer {
+  public:
+    SourceFileCompleter(CommandInterpreter &interpreter,
+                        bool include_support_files, CompletionRequest &request);
+
+    lldb::SearchDepth GetDepth() override;
+
+    Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                            SymbolContext &context,
+                                            Address *addr,
+                                            bool complete) override;
+
+    size_t DoCompletion(SearchFilter *filter) override;
+
+  private:
+    bool m_include_support_files;
+    FileSpecList m_matching_files;
+    const char *m_file_name;
+    const char *m_dir_name;
+
+    DISALLOW_COPY_AND_ASSIGN(SourceFileCompleter);
+  };
+
+  // ModuleCompleter implements the module completer
+  class ModuleCompleter : public Completer {
+  public:
+    ModuleCompleter(CommandInterpreter &interpreter,
+                    CompletionRequest &request);
+
+    lldb::SearchDepth GetDepth() override;
+
+    Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                            SymbolContext &context,
+                                            Address *addr,
+                                            bool complete) override;
+
+    size_t DoCompletion(SearchFilter *filter) override;
+
+  private:
+    const char *m_file_name;
+    const char *m_dir_name;
+
+    DISALLOW_COPY_AND_ASSIGN(ModuleCompleter);
+  };
+
+  // SymbolCompleter implements the symbol completer
+  class SymbolCompleter : public Completer {
+  public:
+    SymbolCompleter(CommandInterpreter &interpreter,
+                    CompletionRequest &request);
+
+    lldb::SearchDepth GetDepth() override;
+
+    Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
+                                            SymbolContext &context,
+                                            Address *addr,
+                                            bool complete) override;
+
+    size_t DoCompletion(SearchFilter *filter) override;
+
+  private:
+    //        struct NameCmp {
+    //            bool operator() (const ConstString& lhs, const ConstString&
+    //            rhs) const
+    //            {
+    //                return lhs < rhs;
+    //            }
+    //        };
+
+    RegularExpression m_regex;
+    typedef std::set<ConstString> collection;
+    collection m_match_set;
+
+    DISALLOW_COPY_AND_ASSIGN(SymbolCompleter);
+  };
+
+private:
+  static CommonCompletionElement g_common_completions[];
+};
+
+} // namespace lldb_private
+
+#endif // lldb_CommandCompletions_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandHistory.h b/linux-x64/clang/include/lldb/Interpreter/CommandHistory.h
new file mode 100644
index 0000000..c1386f8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandHistory.h
@@ -0,0 +1,58 @@
+//===-- CommandHistory.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandHistory_h_
+#define liblldb_CommandHistory_h_
+
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include "lldb/Utility/Stream.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class CommandHistory {
+public:
+  CommandHistory();
+
+  ~CommandHistory();
+
+  size_t GetSize() const;
+
+  bool IsEmpty() const;
+
+  llvm::Optional<llvm::StringRef> FindString(llvm::StringRef input_str) const;
+
+  llvm::StringRef GetStringAtIndex(size_t idx) const;
+
+  llvm::StringRef operator[](size_t idx) const;
+
+  llvm::StringRef GetRecentmostString() const;
+
+  void AppendString(llvm::StringRef str, bool reject_if_dupe = true);
+
+  void Clear();
+
+  void Dump(Stream &stream, size_t start_idx = 0,
+            size_t stop_idx = SIZE_MAX) const;
+
+  static const char g_repeat_char = '!';
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(CommandHistory);
+
+  typedef std::vector<std::string> History;
+  mutable std::recursive_mutex m_mutex;
+  History m_history;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CommandHistory_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandInterpreter.h b/linux-x64/clang/include/lldb/Interpreter/CommandInterpreter.h
new file mode 100644
index 0000000..c3dd660
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandInterpreter.h
@@ -0,0 +1,606 @@
+//===-- CommandInterpreter.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandInterpreter_h_
+#define liblldb_CommandInterpreter_h_
+
+#include "lldb/Core/Debugger.h"
+#include "lldb/Core/IOHandler.h"
+#include "lldb/Interpreter/CommandAlias.h"
+#include "lldb/Interpreter/CommandHistory.h"
+#include "lldb/Interpreter/CommandObject.h"
+#include "lldb/Interpreter/ScriptInterpreter.h"
+#include "lldb/Utility/Args.h"
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/Event.h"
+#include "lldb/Utility/Log.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+#include <mutex>
+
+namespace lldb_private {
+
+class CommandInterpreterRunOptions {
+public:
+  /// Construct a CommandInterpreterRunOptions object. This class is used to
+  /// control all the instances where we run multiple commands, e.g.
+  /// HandleCommands, HandleCommandsFromFile, RunCommandInterpreter.
+  ///
+  /// The meanings of the options in this object are:
+  ///
+  /// \param[in] stop_on_continue
+  ///    If \b true, execution will end on the first command that causes the
+  ///    process in the execution context to continue. If \b false, we won't
+  ///    check the execution status.
+  /// \param[in] stop_on_error
+  ///    If \b true, execution will end on the first command that causes an
+  ///    error.
+  /// \param[in] stop_on_crash
+  ///    If \b true, when a command causes the target to run, and the end of the
+  ///    run is a signal or exception, stop executing the commands.
+  /// \param[in] echo_commands
+  ///    If \b true, echo the command before executing it. If \b false, execute
+  ///    silently.
+  /// \param[in] echo_comments
+  ///    If \b true, echo command even if it is a pure comment line. If
+  ///    \b false, print no ouput in this case. This setting has an effect only
+  ///    if \param echo_commands is \b true.
+  /// \param[in] print_results
+  ///    If \b true and the command succeeds, print the results of the command
+  ///    after executing it. If \b false, execute silently.
+  /// \param[in] print_errors
+  ///    If \b true and the command fails, print the results of the command
+  ///    after executing it. If \b false, execute silently.
+  /// \param[in] add_to_history
+  ///    If \b true add the commands to the command history. If \b false, don't
+  ///    add them.
+  CommandInterpreterRunOptions(LazyBool stop_on_continue,
+                               LazyBool stop_on_error, LazyBool stop_on_crash,
+                               LazyBool echo_commands, LazyBool echo_comments,
+                               LazyBool print_results, LazyBool print_errors,
+                               LazyBool add_to_history)
+      : m_stop_on_continue(stop_on_continue), m_stop_on_error(stop_on_error),
+        m_stop_on_crash(stop_on_crash), m_echo_commands(echo_commands),
+        m_echo_comment_commands(echo_comments), m_print_results(print_results),
+        m_print_errors(print_errors), m_add_to_history(add_to_history) {}
+
+  CommandInterpreterRunOptions()
+      : m_stop_on_continue(eLazyBoolCalculate),
+        m_stop_on_error(eLazyBoolCalculate),
+        m_stop_on_crash(eLazyBoolCalculate),
+        m_echo_commands(eLazyBoolCalculate),
+        m_echo_comment_commands(eLazyBoolCalculate),
+        m_print_results(eLazyBoolCalculate), m_print_errors(eLazyBoolCalculate),
+        m_add_to_history(eLazyBoolCalculate) {}
+
+  void SetSilent(bool silent) {
+    LazyBool value = silent ? eLazyBoolNo : eLazyBoolYes;
+
+    m_print_results = value;
+    m_print_errors = value;
+    m_echo_commands = value;
+    m_echo_comment_commands = value;
+    m_add_to_history = value;
+  }
+  // These return the default behaviors if the behavior is not
+  // eLazyBoolCalculate. But I've also left the ivars public since for
+  // different ways of running the interpreter you might want to force
+  // different defaults...  In that case, just grab the LazyBool ivars directly
+  // and do what you want with eLazyBoolCalculate.
+  bool GetStopOnContinue() const { return DefaultToNo(m_stop_on_continue); }
+
+  void SetStopOnContinue(bool stop_on_continue) {
+    m_stop_on_continue = stop_on_continue ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetStopOnError() const { return DefaultToNo(m_stop_on_error); }
+
+  void SetStopOnError(bool stop_on_error) {
+    m_stop_on_error = stop_on_error ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetStopOnCrash() const { return DefaultToNo(m_stop_on_crash); }
+
+  void SetStopOnCrash(bool stop_on_crash) {
+    m_stop_on_crash = stop_on_crash ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetEchoCommands() const { return DefaultToYes(m_echo_commands); }
+
+  void SetEchoCommands(bool echo_commands) {
+    m_echo_commands = echo_commands ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetEchoCommentCommands() const {
+    return DefaultToYes(m_echo_comment_commands);
+  }
+
+  void SetEchoCommentCommands(bool echo_comments) {
+    m_echo_comment_commands = echo_comments ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetPrintResults() const { return DefaultToYes(m_print_results); }
+
+  void SetPrintResults(bool print_results) {
+    m_print_results = print_results ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetPrintErrors() const { return DefaultToYes(m_print_errors); }
+
+  void SetPrintErrors(bool print_errors) {
+    m_print_errors = print_errors ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetAddToHistory() const { return DefaultToYes(m_add_to_history); }
+
+  void SetAddToHistory(bool add_to_history) {
+    m_add_to_history = add_to_history ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  LazyBool m_stop_on_continue;
+  LazyBool m_stop_on_error;
+  LazyBool m_stop_on_crash;
+  LazyBool m_echo_commands;
+  LazyBool m_echo_comment_commands;
+  LazyBool m_print_results;
+  LazyBool m_print_errors;
+  LazyBool m_add_to_history;
+
+private:
+  static bool DefaultToYes(LazyBool flag) {
+    switch (flag) {
+    case eLazyBoolNo:
+      return false;
+    default:
+      return true;
+    }
+  }
+
+  static bool DefaultToNo(LazyBool flag) {
+    switch (flag) {
+    case eLazyBoolYes:
+      return true;
+    default:
+      return false;
+    }
+  }
+};
+
+class CommandInterpreter : public Broadcaster,
+                           public Properties,
+                           public IOHandlerDelegate {
+public:
+  enum {
+    eBroadcastBitThreadShouldExit = (1 << 0),
+    eBroadcastBitResetPrompt = (1 << 1),
+    eBroadcastBitQuitCommandReceived = (1 << 2), // User entered quit
+    eBroadcastBitAsynchronousOutputData = (1 << 3),
+    eBroadcastBitAsynchronousErrorData = (1 << 4)
+  };
+
+  enum ChildrenTruncatedWarningStatus // tristate boolean to manage children
+                                      // truncation warning
+  { eNoTruncation = 0,                // never truncated
+    eUnwarnedTruncation = 1,          // truncated but did not notify
+    eWarnedTruncation = 2             // truncated and notified
+  };
+
+  enum CommandTypes {
+    eCommandTypesBuiltin = 0x0001, // native commands such as "frame"
+    eCommandTypesUserDef = 0x0002, // scripted commands
+    eCommandTypesAliases = 0x0004, // aliases such as "po"
+    eCommandTypesHidden = 0x0008,  // commands prefixed with an underscore
+    eCommandTypesAllThem = 0xFFFF  // all commands
+  };
+
+  CommandInterpreter(Debugger &debugger, bool synchronous_execution);
+
+  ~CommandInterpreter() override;
+
+  // These two functions fill out the Broadcaster interface:
+
+  static ConstString &GetStaticBroadcasterClass();
+
+  ConstString &GetBroadcasterClass() const override {
+    return GetStaticBroadcasterClass();
+  }
+
+  void SourceInitFileCwd(CommandReturnObject &result);
+  void SourceInitFileHome(CommandReturnObject &result);
+
+  bool AddCommand(llvm::StringRef name, const lldb::CommandObjectSP &cmd_sp,
+                  bool can_replace);
+
+  bool AddUserCommand(llvm::StringRef name, const lldb::CommandObjectSP &cmd_sp,
+                      bool can_replace);
+
+  lldb::CommandObjectSP GetCommandSPExact(llvm::StringRef cmd,
+                                          bool include_aliases) const;
+
+  CommandObject *GetCommandObject(llvm::StringRef cmd,
+                                  StringList *matches = nullptr,
+                                  StringList *descriptions = nullptr) const;
+
+  bool CommandExists(llvm::StringRef cmd) const;
+
+  bool AliasExists(llvm::StringRef cmd) const;
+
+  bool UserCommandExists(llvm::StringRef cmd) const;
+
+  CommandAlias *AddAlias(llvm::StringRef alias_name,
+                         lldb::CommandObjectSP &command_obj_sp,
+                         llvm::StringRef args_string = llvm::StringRef());
+
+  // Remove a command if it is removable (python or regex command)
+  bool RemoveCommand(llvm::StringRef cmd);
+
+  bool RemoveAlias(llvm::StringRef alias_name);
+
+  bool GetAliasFullName(llvm::StringRef cmd, std::string &full_name) const;
+
+  bool RemoveUser(llvm::StringRef alias_name);
+
+  void RemoveAllUser() { m_user_dict.clear(); }
+
+  const CommandAlias *GetAlias(llvm::StringRef alias_name) const;
+
+  CommandObject *BuildAliasResult(llvm::StringRef alias_name,
+                                  std::string &raw_input_string,
+                                  std::string &alias_result,
+                                  CommandReturnObject &result);
+
+  bool HandleCommand(const char *command_line, LazyBool add_to_history,
+                     CommandReturnObject &result,
+                     ExecutionContext *override_context = nullptr,
+                     bool repeat_on_empty_command = true,
+                     bool no_context_switching = false);
+
+  bool WasInterrupted() const;
+
+  /// Execute a list of commands in sequence.
+  ///
+  /// \param[in] commands
+  ///    The list of commands to execute.
+  /// \param[in,out] context
+  ///    The execution context in which to run the commands. Can be nullptr in
+  ///    which case the default
+  ///    context will be used.
+  /// \param[in] options
+  ///    This object holds the options used to control when to stop, whether to
+  ///    execute commands,
+  ///    etc.
+  /// \param[out] result
+  ///    This is marked as succeeding with no output if all commands execute
+  ///    safely,
+  ///    and failed with some explanation if we aborted executing the commands
+  ///    at some point.
+  void HandleCommands(const StringList &commands, ExecutionContext *context,
+                      CommandInterpreterRunOptions &options,
+                      CommandReturnObject &result);
+
+  /// Execute a list of commands from a file.
+  ///
+  /// \param[in] file
+  ///    The file from which to read in commands.
+  /// \param[in,out] context
+  ///    The execution context in which to run the commands. Can be nullptr in
+  ///    which case the default
+  ///    context will be used.
+  /// \param[in] options
+  ///    This object holds the options used to control when to stop, whether to
+  ///    execute commands,
+  ///    etc.
+  /// \param[out] result
+  ///    This is marked as succeeding with no output if all commands execute
+  ///    safely,
+  ///    and failed with some explanation if we aborted executing the commands
+  ///    at some point.
+  void HandleCommandsFromFile(FileSpec &file, ExecutionContext *context,
+                              CommandInterpreterRunOptions &options,
+                              CommandReturnObject &result);
+
+  CommandObject *GetCommandObjectForCommand(llvm::StringRef &command_line);
+
+  // This handles command line completion.  You are given a pointer to the
+  // command string buffer, to the current cursor, and to the end of the string
+  // (in case it is not NULL terminated). You also passed in an StringList
+  // object to fill with the returns. The first element of the array will be
+  // filled with the string that you would need to insert at the cursor point
+  // to complete the cursor point to the longest common matching prefix. If you
+  // want to limit the number of elements returned, set max_return_elements to
+  // the number of elements you want returned.  Otherwise set
+  // max_return_elements to -1. If you want to start some way into the match
+  // list, then set match_start_point to the desired start point. Returns: -1
+  // if the completion character should be inserted -2 if the entire command
+  // line should be deleted and replaced with matches.GetStringAtIndex(0)
+  // INT_MAX if the number of matches is > max_return_elements, but it is
+  // expensive to compute. Otherwise, returns the number of matches.
+  //
+  // FIXME: Only max_return_elements == -1 is supported at present.
+  int HandleCompletion(const char *current_line, const char *cursor,
+                       const char *last_char, int match_start_point,
+                       int max_return_elements, StringList &matches,
+                       StringList &descriptions);
+
+  // This version just returns matches, and doesn't compute the substring.  It
+  // is here so the Help command can call it for the first argument. It uses
+  // a CompletionRequest for simplicity reasons.
+  int HandleCompletionMatches(CompletionRequest &request);
+
+  int GetCommandNamesMatchingPartialString(const char *cmd_cstr,
+                                           bool include_aliases,
+                                           StringList &matches,
+                                           StringList &descriptions);
+
+  void GetHelp(CommandReturnObject &result,
+               uint32_t types = eCommandTypesAllThem);
+
+  void GetAliasHelp(const char *alias_name, StreamString &help_string);
+
+  void OutputFormattedHelpText(Stream &strm, llvm::StringRef prefix,
+                               llvm::StringRef help_text);
+
+  void OutputFormattedHelpText(Stream &stream, llvm::StringRef command_word,
+                               llvm::StringRef separator,
+                               llvm::StringRef help_text, size_t max_word_len);
+
+  // this mimics OutputFormattedHelpText but it does perform a much simpler
+  // formatting, basically ensuring line alignment. This is only good if you
+  // have some complicated layout for your help text and want as little help as
+  // reasonable in properly displaying it. Most of the times, you simply want
+  // to type some text and have it printed in a reasonable way on screen. If
+  // so, use OutputFormattedHelpText
+  void OutputHelpText(Stream &stream, llvm::StringRef command_word,
+                      llvm::StringRef separator, llvm::StringRef help_text,
+                      uint32_t max_word_len);
+
+  Debugger &GetDebugger() { return m_debugger; }
+
+  ExecutionContext GetExecutionContext() {
+    const bool thread_and_frame_only_if_stopped = true;
+    return m_exe_ctx_ref.Lock(thread_and_frame_only_if_stopped);
+  }
+
+  void UpdateExecutionContext(ExecutionContext *override_context);
+
+  lldb::PlatformSP GetPlatform(bool prefer_target_platform);
+
+  const char *ProcessEmbeddedScriptCommands(const char *arg);
+
+  void UpdatePrompt(llvm::StringRef prompt);
+
+  bool Confirm(llvm::StringRef message, bool default_answer);
+
+  void LoadCommandDictionary();
+
+  void Initialize();
+
+  void Clear();
+
+  bool HasCommands() const;
+
+  bool HasAliases() const;
+
+  bool HasUserCommands() const;
+
+  bool HasAliasOptions() const;
+
+  void BuildAliasCommandArgs(CommandObject *alias_cmd_obj,
+                             const char *alias_name, Args &cmd_args,
+                             std::string &raw_input_string,
+                             CommandReturnObject &result);
+
+  int GetOptionArgumentPosition(const char *in_string);
+
+  void SkipLLDBInitFiles(bool skip_lldbinit_files) {
+    m_skip_lldbinit_files = skip_lldbinit_files;
+  }
+
+  void SkipAppInitFiles(bool skip_app_init_files) {
+    m_skip_app_init_files = skip_app_init_files;
+  }
+
+  bool GetSynchronous();
+
+  void FindCommandsForApropos(llvm::StringRef word, StringList &commands_found,
+                              StringList &commands_help,
+                              bool search_builtin_commands,
+                              bool search_user_commands,
+                              bool search_alias_commands);
+
+  bool GetBatchCommandMode() { return m_batch_command_mode; }
+
+  bool SetBatchCommandMode(bool value) {
+    const bool old_value = m_batch_command_mode;
+    m_batch_command_mode = value;
+    return old_value;
+  }
+
+  void ChildrenTruncated() {
+    if (m_truncation_warning == eNoTruncation)
+      m_truncation_warning = eUnwarnedTruncation;
+  }
+
+  bool TruncationWarningNecessary() {
+    return (m_truncation_warning == eUnwarnedTruncation);
+  }
+
+  void TruncationWarningGiven() { m_truncation_warning = eWarnedTruncation; }
+
+  const char *TruncationWarningText() {
+    return "*** Some of your variables have more members than the debugger "
+           "will show by default. To show all of them, you can either use the "
+           "--show-all-children option to %s or raise the limit by changing "
+           "the target.max-children-count setting.\n";
+  }
+
+  CommandHistory &GetCommandHistory() { return m_command_history; }
+
+  bool IsActive();
+
+  void RunCommandInterpreter(bool auto_handle_events, bool spawn_thread,
+                             CommandInterpreterRunOptions &options);
+  void GetLLDBCommandsFromIOHandler(const char *prompt,
+                                    IOHandlerDelegate &delegate,
+                                    bool asynchronously, void *baton);
+
+  void GetPythonCommandsFromIOHandler(const char *prompt,
+                                      IOHandlerDelegate &delegate,
+                                      bool asynchronously, void *baton);
+
+  const char *GetCommandPrefix();
+
+  // Properties
+  bool GetExpandRegexAliases() const;
+
+  bool GetPromptOnQuit() const;
+
+  void SetPromptOnQuit(bool b);
+
+  bool GetEchoCommands() const;
+  void SetEchoCommands(bool b);
+
+  bool GetEchoCommentCommands() const;
+  void SetEchoCommentCommands(bool b);
+
+  /// Specify if the command interpreter should allow that the user can
+  /// specify a custom exit code when calling 'quit'.
+  void AllowExitCodeOnQuit(bool allow);
+
+  /// Sets the exit code for the quit command.
+  /// \param[in] exit_code
+  ///     The exit code that the driver should return on exit.
+  /// \return True if the exit code was successfully set; false if the
+  ///         interpreter doesn't allow custom exit codes.
+  /// \see AllowExitCodeOnQuit
+  LLVM_NODISCARD bool SetQuitExitCode(int exit_code);
+
+  /// Returns the exit code that the user has specified when running the
+  /// 'quit' command.
+  /// \param[out] exited
+  ///     Set to true if the user has called quit with a custom exit code.
+  int GetQuitExitCode(bool &exited) const;
+
+  void ResolveCommand(const char *command_line, CommandReturnObject &result);
+
+  bool GetStopCmdSourceOnError() const;
+
+  uint32_t GetNumErrors() const { return m_num_errors; }
+
+  bool GetQuitRequested() const { return m_quit_requested; }
+
+  lldb::IOHandlerSP
+  GetIOHandler(bool force_create = false,
+               CommandInterpreterRunOptions *options = nullptr);
+
+  bool GetStoppedForCrash() const { return m_stopped_for_crash; }
+
+  bool GetSpaceReplPrompts() const;
+
+protected:
+  friend class Debugger;
+
+  // IOHandlerDelegate functions
+  void IOHandlerInputComplete(IOHandler &io_handler,
+                              std::string &line) override;
+
+  ConstString IOHandlerGetControlSequence(char ch) override {
+    if (ch == 'd')
+      return ConstString("quit\n");
+    return ConstString();
+  }
+
+  bool IOHandlerInterrupt(IOHandler &io_handler) override;
+
+  size_t GetProcessOutput();
+
+  void SetSynchronous(bool value);
+
+  lldb::CommandObjectSP GetCommandSP(llvm::StringRef cmd,
+                                     bool include_aliases = true,
+                                     bool exact = true,
+                                     StringList *matches = nullptr,
+                                     StringList *descriptions = nullptr) const;
+
+private:
+  Status PreprocessCommand(std::string &command);
+
+  void SourceInitFile(FileSpec file, CommandReturnObject &result);
+
+  // Completely resolves aliases and abbreviations, returning a pointer to the
+  // final command object and updating command_line to the fully substituted
+  // and translated command.
+  CommandObject *ResolveCommandImpl(std::string &command_line,
+                                    CommandReturnObject &result);
+
+  void FindCommandsForApropos(llvm::StringRef word, StringList &commands_found,
+                              StringList &commands_help,
+                              CommandObject::CommandMap &command_map);
+
+  // An interruptible wrapper around the stream output
+  void PrintCommandOutput(Stream &stream, llvm::StringRef str);
+
+  bool EchoCommandNonInteractive(llvm::StringRef line,
+                                 const Flags &io_handler_flags) const;
+
+  // A very simple state machine which models the command handling transitions
+  enum class CommandHandlingState {
+    eIdle,
+    eInProgress,
+    eInterrupted,
+  };
+
+  std::atomic<CommandHandlingState> m_command_state{
+      CommandHandlingState::eIdle};
+
+  int m_iohandler_nesting_level = 0;
+
+  void StartHandlingCommand();
+  void FinishHandlingCommand();
+  bool InterruptCommand();
+
+  Debugger &m_debugger; // The debugger session that this interpreter is
+                        // associated with
+  ExecutionContextRef m_exe_ctx_ref; // The current execution context to use
+                                     // when handling commands
+  bool m_synchronous_execution;
+  bool m_skip_lldbinit_files;
+  bool m_skip_app_init_files;
+  CommandObject::CommandMap m_command_dict; // Stores basic built-in commands
+                                            // (they cannot be deleted, removed
+                                            // or overwritten).
+  CommandObject::CommandMap
+      m_alias_dict; // Stores user aliases/abbreviations for commands
+  CommandObject::CommandMap m_user_dict; // Stores user-defined commands
+  CommandHistory m_command_history;
+  std::string m_repeat_command; // Stores the command that will be executed for
+                                // an empty command string.
+  lldb::IOHandlerSP m_command_io_handler_sp;
+  char m_comment_char;
+  bool m_batch_command_mode;
+  ChildrenTruncatedWarningStatus m_truncation_warning; // Whether we truncated
+                                                       // children and whether
+                                                       // the user has been told
+  uint32_t m_command_source_depth;
+  std::vector<uint32_t> m_command_source_flags;
+  uint32_t m_num_errors;
+  bool m_quit_requested;
+  bool m_stopped_for_crash;
+
+  // The exit code the user has requested when calling the 'quit' command.
+  // No value means the user hasn't set a custom exit code so far.
+  llvm::Optional<int> m_quit_exit_code;
+  // If the driver is accepts custom exit codes for the 'quit' command.
+  bool m_allow_exit_code = false;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CommandInterpreter_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandObject.h b/linux-x64/clang/include/lldb/Interpreter/CommandObject.h
new file mode 100644
index 0000000..31f7f12
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandObject.h
@@ -0,0 +1,431 @@
+//===-- CommandObject.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandObject_h_
+#define liblldb_CommandObject_h_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "lldb/Utility/Flags.h"
+
+#include "lldb/Interpreter/CommandCompletions.h"
+#include "lldb/Interpreter/Options.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Utility/Args.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// This function really deals with CommandObjectLists, but we didn't make a
+// CommandObjectList class, so I'm sticking it here.  But we really should have
+// such a class.  Anyway, it looks up the commands in the map that match the
+// partial string cmd_str, inserts the matches into matches, and returns the
+// number added.
+
+template <typename ValueType>
+int AddNamesMatchingPartialString(
+    const std::map<std::string, ValueType> &in_map, llvm::StringRef cmd_str,
+    StringList &matches, StringList *descriptions = nullptr) {
+  int number_added = 0;
+
+  const bool add_all = cmd_str.empty();
+
+  for (auto iter = in_map.begin(), end = in_map.end(); iter != end; iter++) {
+    if (add_all || (iter->first.find(cmd_str, 0) == 0)) {
+      ++number_added;
+      matches.AppendString(iter->first.c_str());
+      if (descriptions)
+        descriptions->AppendString(iter->second->GetHelp());
+    }
+  }
+
+  return number_added;
+}
+
+template <typename ValueType>
+size_t FindLongestCommandWord(std::map<std::string, ValueType> &dict) {
+  auto end = dict.end();
+  size_t max_len = 0;
+
+  for (auto pos = dict.begin(); pos != end; ++pos) {
+    size_t len = pos->first.size();
+    if (max_len < len)
+      max_len = len;
+  }
+  return max_len;
+}
+
+class CommandObject {
+public:
+  typedef llvm::StringRef(ArgumentHelpCallbackFunction)();
+
+  struct ArgumentHelpCallback {
+    ArgumentHelpCallbackFunction *help_callback;
+    bool self_formatting;
+
+    llvm::StringRef operator()() const { return (*help_callback)(); }
+
+    explicit operator bool() const { return (help_callback != nullptr); }
+  };
+
+  struct ArgumentTableEntry // Entries in the main argument information table
+  {
+    lldb::CommandArgumentType arg_type;
+    const char *arg_name;
+    CommandCompletions::CommonCompletionTypes completion_type;
+    ArgumentHelpCallback help_function;
+    const char *help_text;
+  };
+
+  struct CommandArgumentData // Used to build individual command argument lists
+  {
+    lldb::CommandArgumentType arg_type;
+    ArgumentRepetitionType arg_repetition;
+    uint32_t arg_opt_set_association; // This arg might be associated only with
+                                      // some particular option set(s).
+    CommandArgumentData()
+        : arg_type(lldb::eArgTypeNone), arg_repetition(eArgRepeatPlain),
+          arg_opt_set_association(LLDB_OPT_SET_ALL) // By default, the arg
+                                                    // associates to all option
+                                                    // sets.
+    {}
+  };
+
+  typedef std::vector<CommandArgumentData>
+      CommandArgumentEntry; // Used to build individual command argument lists
+
+  static ArgumentTableEntry g_arguments_data
+      [lldb::eArgTypeLastArg]; // Main argument information table
+
+  typedef std::map<std::string, lldb::CommandObjectSP> CommandMap;
+
+  CommandObject(CommandInterpreter &interpreter, llvm::StringRef name,
+    llvm::StringRef help = "", llvm::StringRef syntax = "",
+                uint32_t flags = 0);
+
+  virtual ~CommandObject();
+
+  static const char *
+  GetArgumentTypeAsCString(const lldb::CommandArgumentType arg_type);
+
+  static const char *
+  GetArgumentDescriptionAsCString(const lldb::CommandArgumentType arg_type);
+
+  CommandInterpreter &GetCommandInterpreter() { return m_interpreter; }
+  Debugger &GetDebugger();
+
+  virtual llvm::StringRef GetHelp();
+
+  virtual llvm::StringRef GetHelpLong();
+
+  virtual llvm::StringRef GetSyntax();
+
+  llvm::StringRef GetCommandName() const;
+
+  virtual void SetHelp(llvm::StringRef str);
+
+  virtual void SetHelpLong(llvm::StringRef str);
+
+  void SetSyntax(llvm::StringRef str);
+
+  // override this to return true if you want to enable the user to delete the
+  // Command object from the Command dictionary (aliases have their own
+  // deletion scheme, so they do not need to care about this)
+  virtual bool IsRemovable() const { return false; }
+
+  virtual bool IsMultiwordObject() { return false; }
+
+  virtual CommandObjectMultiword *GetAsMultiwordCommand() { return nullptr; }
+
+  virtual bool IsAlias() { return false; }
+
+  // override this to return true if your command is somehow a "dash-dash" form
+  // of some other command (e.g. po is expr -O --); this is a powerful hint to
+  // the help system that one cannot pass options to this command
+  virtual bool IsDashDashCommand() { return false; }
+
+  virtual lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
+                                                StringList *matches = nullptr) {
+    return lldb::CommandObjectSP();
+  }
+
+  virtual CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
+                                             StringList *matches = nullptr) {
+    return nullptr;
+  }
+
+  virtual void AproposAllSubCommands(llvm::StringRef prefix,
+                                     llvm::StringRef search_word,
+                                     StringList &commands_found,
+                                     StringList &commands_help) {}
+
+  void FormatLongHelpText(Stream &output_strm, llvm::StringRef long_help);
+
+  void GenerateHelpText(CommandReturnObject &result);
+
+  virtual void GenerateHelpText(Stream &result);
+
+  // this is needed in order to allow the SBCommand class to transparently try
+  // and load subcommands - it will fail on anything but a multiword command,
+  // but it avoids us doing type checkings and casts
+  virtual bool LoadSubCommand(llvm::StringRef cmd_name,
+                              const lldb::CommandObjectSP &command_obj) {
+    return false;
+  }
+
+  virtual bool WantsRawCommandString() = 0;
+
+  // By default, WantsCompletion = !WantsRawCommandString. Subclasses who want
+  // raw command string but desire, for example, argument completion should
+  // override this method to return true.
+  virtual bool WantsCompletion() { return !WantsRawCommandString(); }
+
+  virtual Options *GetOptions();
+
+  static const ArgumentTableEntry *GetArgumentTable();
+
+  static lldb::CommandArgumentType LookupArgumentName(llvm::StringRef arg_name);
+
+  static const ArgumentTableEntry *
+  FindArgumentDataByType(lldb::CommandArgumentType arg_type);
+
+  int GetNumArgumentEntries();
+
+  CommandArgumentEntry *GetArgumentEntryAtIndex(int idx);
+
+  static void GetArgumentHelp(Stream &str, lldb::CommandArgumentType arg_type,
+                              CommandInterpreter &interpreter);
+
+  static const char *GetArgumentName(lldb::CommandArgumentType arg_type);
+
+  // Generates a nicely formatted command args string for help command output.
+  // By default, all possible args are taken into account, for example, '<expr
+  // | variable-name>'.  This can be refined by passing a second arg specifying
+  // which option set(s) we are interested, which could then, for example,
+  // produce either '<expr>' or '<variable-name>'.
+  void GetFormattedCommandArguments(Stream &str,
+                                    uint32_t opt_set_mask = LLDB_OPT_SET_ALL);
+
+  bool IsPairType(ArgumentRepetitionType arg_repeat_type);
+
+  bool ParseOptions(Args &args, CommandReturnObject &result);
+
+  void SetCommandName(llvm::StringRef name);
+
+  /// This default version handles calling option argument completions and then
+  /// calls HandleArgumentCompletion if the cursor is on an argument, not an
+  /// option. Don't override this method, override HandleArgumentCompletion
+  /// instead unless you have special reasons.
+  ///
+  /// \param[in/out] request
+  ///    The completion request that needs to be answered.
+  ///
+  /// FIXME: This is the wrong return value, since we also need to make a
+  /// distinction between
+  /// total number of matches, and the window the user wants returned.
+  ///
+  /// \return
+  ///     \btrue if we were in an option, \bfalse otherwise.
+  virtual int HandleCompletion(CompletionRequest &request);
+
+  /// The input array contains a parsed version of the line.  The insertion
+  /// point is given by cursor_index (the index in input of the word containing
+  /// the cursor) and cursor_char_position (the position of the cursor in that
+  /// word.)
+  /// We've constructed the map of options and their arguments as well if that
+  /// is helpful for the completion.
+  ///
+  /// \param[in/out] request
+  ///    The completion request that needs to be answered.
+  ///
+  /// FIXME: This is the wrong return value, since we also need to make a
+  /// distinction between
+  /// total number of matches, and the window the user wants returned.
+  ///
+  /// \return
+  ///     The number of completions.
+  virtual int
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) {
+    return 0;
+  }
+
+  bool HelpTextContainsWord(llvm::StringRef search_word,
+                            bool search_short_help = true,
+                            bool search_long_help = true,
+                            bool search_syntax = true,
+                            bool search_options = true);
+
+  /// The flags accessor.
+  ///
+  /// \return
+  ///     A reference to the Flags member variable.
+  Flags &GetFlags() { return m_flags; }
+
+  /// The flags const accessor.
+  ///
+  /// \return
+  ///     A const reference to the Flags member variable.
+  const Flags &GetFlags() const { return m_flags; }
+
+  /// Get the command that appropriate for a "repeat" of the current command.
+  ///
+  /// \param[in] current_command_line
+  ///    The complete current command line.
+  ///
+  /// \return
+  ///     nullptr if there is no special repeat command - it will use the
+  ///     current command line.
+  ///     Otherwise a pointer to the command to be repeated.
+  ///     If the returned string is the empty string, the command won't be
+  ///     repeated.
+  virtual const char *GetRepeatCommand(Args &current_command_args,
+                                       uint32_t index) {
+    return nullptr;
+  }
+
+  bool HasOverrideCallback() const {
+    return m_command_override_callback ||
+           m_deprecated_command_override_callback;
+  }
+
+  void SetOverrideCallback(lldb::CommandOverrideCallback callback,
+                           void *baton) {
+    m_deprecated_command_override_callback = callback;
+    m_command_override_baton = baton;
+  }
+
+  void SetOverrideCallback(lldb::CommandOverrideCallbackWithResult callback,
+                           void *baton) {
+    m_command_override_callback = callback;
+    m_command_override_baton = baton;
+  }
+
+  bool InvokeOverrideCallback(const char **argv, CommandReturnObject &result) {
+    if (m_command_override_callback)
+      return m_command_override_callback(m_command_override_baton, argv,
+                                         result);
+    else if (m_deprecated_command_override_callback)
+      return m_deprecated_command_override_callback(m_command_override_baton,
+                                                    argv);
+    else
+      return false;
+  }
+
+  virtual bool Execute(const char *args_string,
+                       CommandReturnObject &result) = 0;
+
+protected:
+  bool ParseOptionsAndNotify(Args &args, CommandReturnObject &result,
+                             OptionGroupOptions &group_options,
+                             ExecutionContext &exe_ctx);
+
+  virtual const char *GetInvalidTargetDescription() {
+    return "invalid target, create a target using the 'target create' command";
+  }
+
+  virtual const char *GetInvalidProcessDescription() {
+    return "invalid process";
+  }
+
+  virtual const char *GetInvalidThreadDescription() { return "invalid thread"; }
+
+  virtual const char *GetInvalidFrameDescription() { return "invalid frame"; }
+
+  virtual const char *GetInvalidRegContextDescription() {
+    return "invalid frame, no registers";
+  }
+
+  // This is for use in the command interpreter, when you either want the
+  // selected target, or if no target is present you want to prime the dummy
+  // target with entities that will be copied over to new targets.
+  Target *GetSelectedOrDummyTarget(bool prefer_dummy = false);
+  Target *GetDummyTarget();
+
+  // If a command needs to use the "current" thread, use this call. Command
+  // objects will have an ExecutionContext to use, and that may or may not have
+  // a thread in it.  If it does, you should use that by default, if not, then
+  // use the ExecutionContext's target's selected thread, etc... This call
+  // insulates you from the details of this calculation.
+  Thread *GetDefaultThread();
+
+  /// Check the command to make sure anything required by this
+  /// command is available.
+  ///
+  /// \param[out] result
+  ///     A command result object, if it is not okay to run the command
+  ///     this will be filled in with a suitable error.
+  ///
+  /// \return
+  ///     \b true if it is okay to run this command, \b false otherwise.
+  bool CheckRequirements(CommandReturnObject &result);
+
+  void Cleanup();
+
+  CommandInterpreter &m_interpreter;
+  ExecutionContext m_exe_ctx;
+  std::unique_lock<std::recursive_mutex> m_api_locker;
+  std::string m_cmd_name;
+  std::string m_cmd_help_short;
+  std::string m_cmd_help_long;
+  std::string m_cmd_syntax;
+  Flags m_flags;
+  std::vector<CommandArgumentEntry> m_arguments;
+  lldb::CommandOverrideCallback m_deprecated_command_override_callback;
+  lldb::CommandOverrideCallbackWithResult m_command_override_callback;
+  void *m_command_override_baton;
+
+  // Helper function to populate IDs or ID ranges as the command argument data
+  // to the specified command argument entry.
+  static void AddIDsArgumentData(CommandArgumentEntry &arg,
+                                 lldb::CommandArgumentType ID,
+                                 lldb::CommandArgumentType IDRange);
+};
+
+class CommandObjectParsed : public CommandObject {
+public:
+  CommandObjectParsed(CommandInterpreter &interpreter, const char *name,
+                      const char *help = nullptr, const char *syntax = nullptr,
+                      uint32_t flags = 0)
+      : CommandObject(interpreter, name, help, syntax, flags) {}
+
+  ~CommandObjectParsed() override = default;
+
+  bool Execute(const char *args_string, CommandReturnObject &result) override;
+
+protected:
+  virtual bool DoExecute(Args &command, CommandReturnObject &result) = 0;
+
+  bool WantsRawCommandString() override { return false; }
+};
+
+class CommandObjectRaw : public CommandObject {
+public:
+  CommandObjectRaw(CommandInterpreter &interpreter, llvm::StringRef name,
+    llvm::StringRef help = "", llvm::StringRef syntax = "",
+                   uint32_t flags = 0)
+      : CommandObject(interpreter, name, help, syntax, flags) {}
+
+  ~CommandObjectRaw() override = default;
+
+  bool Execute(const char *args_string, CommandReturnObject &result) override;
+
+protected:
+  virtual bool DoExecute(llvm::StringRef command,
+                         CommandReturnObject &result) = 0;
+
+  bool WantsRawCommandString() override { return true; }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CommandObject_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandObjectMultiword.h b/linux-x64/clang/include/lldb/Interpreter/CommandObjectMultiword.h
new file mode 100644
index 0000000..660e9d4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandObjectMultiword.h
@@ -0,0 +1,134 @@
+//===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandObjectMultiword_h_
+#define liblldb_CommandObjectMultiword_h_
+
+#include "lldb/Interpreter/CommandObject.h"
+#include "lldb/Utility/CompletionRequest.h"
+
+namespace lldb_private {
+
+// CommandObjectMultiword
+
+class CommandObjectMultiword : public CommandObject {
+  // These two want to iterate over the subcommand dictionary.
+  friend class CommandInterpreter;
+  friend class CommandObjectSyntax;
+
+public:
+  CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
+                         const char *help = nullptr,
+                         const char *syntax = nullptr, uint32_t flags = 0);
+
+  ~CommandObjectMultiword() override;
+
+  bool IsMultiwordObject() override { return true; }
+
+  CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
+
+  bool LoadSubCommand(llvm::StringRef cmd_name,
+                      const lldb::CommandObjectSP &command_obj) override;
+
+  void GenerateHelpText(Stream &output_stream) override;
+
+  lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
+                                        StringList *matches = nullptr) override;
+
+  CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
+                                     StringList *matches = nullptr) override;
+
+  void AproposAllSubCommands(llvm::StringRef prefix,
+                             llvm::StringRef search_word,
+                             StringList &commands_found,
+                             StringList &commands_help) override;
+
+  bool WantsRawCommandString() override { return false; }
+
+  int HandleCompletion(CompletionRequest &request) override;
+
+  const char *GetRepeatCommand(Args &current_command_args,
+                               uint32_t index) override;
+
+  bool Execute(const char *args_string, CommandReturnObject &result) override;
+
+  bool IsRemovable() const override { return m_can_be_removed; }
+
+  void SetRemovable(bool removable) { m_can_be_removed = removable; }
+
+protected:
+  CommandObject::CommandMap &GetSubcommandDictionary() {
+    return m_subcommand_dict;
+  }
+
+  CommandObject::CommandMap m_subcommand_dict;
+  bool m_can_be_removed;
+};
+
+class CommandObjectProxy : public CommandObject {
+public:
+  CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
+                     const char *help = nullptr, const char *syntax = nullptr,
+                     uint32_t flags = 0);
+
+  ~CommandObjectProxy() override;
+
+  // Subclasses must provide a command object that will be transparently used
+  // for this object.
+  virtual CommandObject *GetProxyCommandObject() = 0;
+
+  llvm::StringRef GetHelpLong() override;
+
+  bool IsRemovable() const override;
+
+  bool IsMultiwordObject() override;
+
+  CommandObjectMultiword *GetAsMultiwordCommand() override;
+
+  void GenerateHelpText(Stream &result) override;
+
+  lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
+                                        StringList *matches = nullptr) override;
+
+  CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
+                                     StringList *matches = nullptr) override;
+
+  void AproposAllSubCommands(llvm::StringRef prefix,
+                             llvm::StringRef search_word,
+                             StringList &commands_found,
+                             StringList &commands_help) override;
+
+  bool LoadSubCommand(llvm::StringRef cmd_name,
+                      const lldb::CommandObjectSP &command_obj) override;
+
+  bool WantsRawCommandString() override;
+
+  bool WantsCompletion() override;
+
+  Options *GetOptions() override;
+
+  int HandleCompletion(CompletionRequest &request) override;
+
+  int HandleArgumentCompletion(
+      CompletionRequest &request,
+      OptionElementVector &opt_element_vector) override;
+
+  const char *GetRepeatCommand(Args &current_command_args,
+                               uint32_t index) override;
+
+  bool Execute(const char *args_string, CommandReturnObject &result) override;
+
+protected:
+  // These two want to iterate over the subcommand dictionary.
+  friend class CommandInterpreter;
+  friend class CommandObjectSyntax;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CommandObjectMultiword_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandObjectRegexCommand.h b/linux-x64/clang/include/lldb/Interpreter/CommandObjectRegexCommand.h
new file mode 100644
index 0000000..7f06e26
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandObjectRegexCommand.h
@@ -0,0 +1,59 @@
+//===-- CommandObjectRegexCommand.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandObjectRegexCommand_h_
+#define liblldb_CommandObjectRegexCommand_h_
+
+#include <list>
+
+#include "lldb/Interpreter/CommandObject.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/RegularExpression.h"
+
+namespace lldb_private {
+
+// CommandObjectRegexCommand
+
+class CommandObjectRegexCommand : public CommandObjectRaw {
+public:
+  CommandObjectRegexCommand(CommandInterpreter &interpreter, llvm::StringRef name,
+    llvm::StringRef help, llvm::StringRef syntax,
+                            uint32_t max_matches, uint32_t completion_type_mask,
+                            bool is_removable);
+
+  ~CommandObjectRegexCommand() override;
+
+  bool IsRemovable() const override { return m_is_removable; }
+
+  bool AddRegexCommand(const char *re_cstr, const char *command_cstr);
+
+  bool HasRegexEntries() const { return !m_entries.empty(); }
+
+  int HandleCompletion(CompletionRequest &request) override;
+
+protected:
+  bool DoExecute(llvm::StringRef command, CommandReturnObject &result) override;
+
+  struct Entry {
+    RegularExpression regex;
+    std::string command;
+  };
+
+  typedef std::list<Entry> EntryCollection;
+  const uint32_t m_max_matches;
+  const uint32_t m_completion_type_mask;
+  EntryCollection m_entries;
+  bool m_is_removable;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(CommandObjectRegexCommand);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CommandObjectRegexCommand_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandOptionValidators.h b/linux-x64/clang/include/lldb/Interpreter/CommandOptionValidators.h
new file mode 100644
index 0000000..5483c15
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandOptionValidators.h
@@ -0,0 +1,28 @@
+//===-- CommandOptionValidators.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandOptionValidators_h_
+#define liblldb_CommandOptionValidators_h_
+
+#include "lldb/lldb-private-types.h"
+
+namespace lldb_private {
+
+class Platform;
+class ExecutionContext;
+
+class PosixPlatformCommandOptionValidator : public OptionValidator {
+  bool IsValid(Platform &platform,
+               const ExecutionContext &target) const override;
+  const char *ShortConditionString() const override;
+  const char *LongConditionString() const override;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CommandOptionValidators_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/CommandReturnObject.h b/linux-x64/clang/include/lldb/Interpreter/CommandReturnObject.h
new file mode 100644
index 0000000..a5f6126
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/CommandReturnObject.h
@@ -0,0 +1,177 @@
+//===-- CommandReturnObject.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandReturnObject_h_
+#define liblldb_CommandReturnObject_h_
+
+#include "lldb/Core/STLUtils.h"
+#include "lldb/Core/StreamFile.h"
+#include "lldb/Utility/StreamString.h"
+#include "lldb/Utility/StreamTee.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FormatVariadic.h"
+
+#include <memory>
+
+namespace lldb_private {
+
+class CommandReturnObject {
+public:
+  CommandReturnObject();
+
+  ~CommandReturnObject();
+
+  llvm::StringRef GetOutputData() {
+    lldb::StreamSP stream_sp(m_out_stream.GetStreamAtIndex(eStreamStringIndex));
+    if (stream_sp)
+      return static_pointer_cast<StreamString>(stream_sp)->GetString();
+    return llvm::StringRef();
+  }
+
+  llvm::StringRef GetErrorData() {
+    lldb::StreamSP stream_sp(m_err_stream.GetStreamAtIndex(eStreamStringIndex));
+    if (stream_sp)
+      return static_pointer_cast<StreamString>(stream_sp)->GetString();
+    return llvm::StringRef();
+  }
+
+  Stream &GetOutputStream() {
+    // Make sure we at least have our normal string stream output stream
+    lldb::StreamSP stream_sp(m_out_stream.GetStreamAtIndex(eStreamStringIndex));
+    if (!stream_sp) {
+      stream_sp.reset(new StreamString());
+      m_out_stream.SetStreamAtIndex(eStreamStringIndex, stream_sp);
+    }
+    return m_out_stream;
+  }
+
+  Stream &GetErrorStream() {
+    // Make sure we at least have our normal string stream output stream
+    lldb::StreamSP stream_sp(m_err_stream.GetStreamAtIndex(eStreamStringIndex));
+    if (!stream_sp) {
+      stream_sp.reset(new StreamString());
+      m_err_stream.SetStreamAtIndex(eStreamStringIndex, stream_sp);
+    }
+    return m_err_stream;
+  }
+
+  void SetImmediateOutputFile(FILE *fh, bool transfer_fh_ownership = false) {
+    lldb::StreamSP stream_sp(new StreamFile(fh, transfer_fh_ownership));
+    m_out_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
+  }
+
+  void SetImmediateErrorFile(FILE *fh, bool transfer_fh_ownership = false) {
+    lldb::StreamSP stream_sp(new StreamFile(fh, transfer_fh_ownership));
+    m_err_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
+  }
+
+  void SetImmediateOutputStream(const lldb::StreamSP &stream_sp) {
+    m_out_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
+  }
+
+  void SetImmediateErrorStream(const lldb::StreamSP &stream_sp) {
+    m_err_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp);
+  }
+
+  lldb::StreamSP GetImmediateOutputStream() {
+    return m_out_stream.GetStreamAtIndex(eImmediateStreamIndex);
+  }
+
+  lldb::StreamSP GetImmediateErrorStream() {
+    return m_err_stream.GetStreamAtIndex(eImmediateStreamIndex);
+  }
+
+  void Clear();
+
+  void AppendMessage(llvm::StringRef in_string);
+
+  void AppendMessageWithFormat(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  void AppendRawWarning(llvm::StringRef in_string);
+
+  void AppendWarning(llvm::StringRef in_string);
+
+  void AppendWarningWithFormat(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  void AppendError(llvm::StringRef in_string);
+
+  void AppendRawError(llvm::StringRef in_string);
+
+  void AppendErrorWithFormat(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  template <typename... Args>
+  void AppendMessageWithFormatv(const char *format, Args &&... args) {
+    AppendMessage(llvm::formatv(format, std::forward<Args>(args)...).str());
+  }
+
+  template <typename... Args>
+  void AppendWarningWithFormatv(const char *format, Args &&... args) {
+    AppendWarning(llvm::formatv(format, std::forward<Args>(args)...).str());
+  }
+
+  template <typename... Args>
+  void AppendErrorWithFormatv(const char *format, Args &&... args) {
+    AppendError(llvm::formatv(format, std::forward<Args>(args)...).str());
+  }
+
+  void SetError(const Status &error, const char *fallback_error_cstr = nullptr);
+
+  void SetError(llvm::StringRef error_cstr);
+
+  lldb::ReturnStatus GetStatus();
+
+  void SetStatus(lldb::ReturnStatus status);
+
+  bool Succeeded();
+
+  bool HasResult();
+
+  bool GetDidChangeProcessState();
+
+  void SetDidChangeProcessState(bool b);
+
+  bool GetInteractive() const;
+
+  void SetInteractive(bool b);
+
+  bool GetAbnormalStopWasExpected() const {
+    return m_abnormal_stop_was_expected;
+  }
+
+  void SetAbnormalStopWasExpected(bool signal_was_expected) {
+    m_abnormal_stop_was_expected = signal_was_expected;
+  }
+
+private:
+  enum { eStreamStringIndex = 0, eImmediateStreamIndex = 1 };
+
+  StreamTee m_out_stream;
+  StreamTee m_err_stream;
+
+  lldb::ReturnStatus m_status;
+  bool m_did_change_process_state;
+  bool m_interactive; // If true, then the input handle from the debugger will
+                      // be hooked up
+  bool m_abnormal_stop_was_expected; // This is to support
+                                     // eHandleCommandFlagStopOnCrash vrs.
+                                     // attach.
+  // The attach command often ends up with the process stopped due to a signal.
+  // Normally that would mean stop on crash should halt batch execution, but we
+  // obviously don't want that for attach.  Using this flag, the attach command
+  // (and anything else for which this is relevant) can say that the signal is
+  // expected, and batch command execution can continue.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CommandReturnObject_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionArgParser.h b/linux-x64/clang/include/lldb/Interpreter/OptionArgParser.h
new file mode 100644
index 0000000..ce901b0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionArgParser.h
@@ -0,0 +1,42 @@
+//===-- OptionArgParser.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_INTERPRETER_OPTIONARGPARSER_H
+#define LLDB_INTERPRETER_OPTIONARGPARSER_H
+
+#include "lldb/lldb-private-types.h"
+
+namespace lldb_private {
+
+struct OptionArgParser {
+  static lldb::addr_t ToAddress(const ExecutionContext *exe_ctx,
+                                llvm::StringRef s, lldb::addr_t fail_value,
+                                Status *error);
+
+  static bool ToBoolean(llvm::StringRef s, bool fail_value, bool *success_ptr);
+
+  static char ToChar(llvm::StringRef s, char fail_value, bool *success_ptr);
+
+  static int64_t ToOptionEnum(llvm::StringRef s,
+                              const OptionEnumValues &enum_values,
+                              int32_t fail_value, Status &error);
+
+  static lldb::ScriptLanguage ToScriptLanguage(llvm::StringRef s,
+                                               lldb::ScriptLanguage fail_value,
+                                               bool *success_ptr);
+
+  // TODO: Use StringRef
+  static Status ToFormat(const char *s, lldb::Format &format,
+                         size_t *byte_size_ptr); // If non-NULL, then a
+                                                 // byte size can precede
+                                                 // the format character
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_INTERPRETER_OPTIONARGPARSER_H
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupArchitecture.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupArchitecture.h
new file mode 100644
index 0000000..4b7f9fe
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupArchitecture.h
@@ -0,0 +1,45 @@
+//===-- OptionGroupArchitecture.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupArchitecture_h_
+#define liblldb_OptionGroupArchitecture_h_
+
+#include "lldb/Interpreter/Options.h"
+#include "lldb/Utility/ArchSpec.h"
+
+namespace lldb_private {
+
+// OptionGroupArchitecture
+
+class OptionGroupArchitecture : public OptionGroup {
+public:
+  OptionGroupArchitecture();
+
+  ~OptionGroupArchitecture() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  bool GetArchitecture(Platform *platform, ArchSpec &arch);
+
+  bool ArchitectureWasSpecified() const { return !m_arch_str.empty(); }
+
+  llvm::StringRef GetArchitectureName() const { return m_arch_str; }
+
+protected:
+  std::string m_arch_str; // Save the arch triple in case a platform is
+                          // specified after the architecture
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupArchitecture_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupBoolean.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupBoolean.h
new file mode 100644
index 0000000..7749045
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupBoolean.h
@@ -0,0 +1,51 @@
+//===-- OptionGroupBoolean.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupBoolean_h_
+#define liblldb_OptionGroupBoolean_h_
+
+#include "lldb/Interpreter/OptionValueBoolean.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+// OptionGroupBoolean
+
+class OptionGroupBoolean : public OptionGroup {
+public:
+  // When 'no_argument_toggle_default' is true, then setting the option value
+  // does NOT require an argument, it sets the boolean value to the inverse of
+  // the default value
+  OptionGroupBoolean(uint32_t usage_mask, bool required,
+                     const char *long_option, int short_option,
+                     const char *usage_text, bool default_value,
+                     bool no_argument_toggle_default);
+
+  ~OptionGroupBoolean() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+    return llvm::ArrayRef<OptionDefinition>(&m_option_definition, 1);
+  }
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  OptionValueBoolean &GetOptionValue() { return m_value; }
+
+  const OptionValueBoolean &GetOptionValue() const { return m_value; }
+
+protected:
+  OptionValueBoolean m_value;
+  OptionDefinition m_option_definition;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupBoolean_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupFile.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupFile.h
new file mode 100644
index 0000000..cce3714
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupFile.h
@@ -0,0 +1,81 @@
+//===-- OptionGroupFile.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupFile_h_
+#define liblldb_OptionGroupFile_h_
+
+#include "lldb/Interpreter/OptionValueFileSpec.h"
+#include "lldb/Interpreter/OptionValueFileSpecList.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+
+// OptionGroupFile
+
+class OptionGroupFile : public OptionGroup {
+public:
+  OptionGroupFile(uint32_t usage_mask, bool required, const char *long_option,
+                  int short_option, uint32_t completion_type,
+                  lldb::CommandArgumentType argument_type,
+                  const char *usage_text);
+
+  ~OptionGroupFile() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+    return llvm::ArrayRef<OptionDefinition>(&m_option_definition, 1);
+  }
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  OptionValueFileSpec &GetOptionValue() { return m_file; }
+
+  const OptionValueFileSpec &GetOptionValue() const { return m_file; }
+
+protected:
+  OptionValueFileSpec m_file;
+  OptionDefinition m_option_definition;
+};
+
+// OptionGroupFileList
+
+class OptionGroupFileList : public OptionGroup {
+public:
+  OptionGroupFileList(uint32_t usage_mask, bool required,
+                      const char *long_option, int short_option,
+                      uint32_t completion_type,
+                      lldb::CommandArgumentType argument_type,
+                      const char *usage_text);
+
+  ~OptionGroupFileList() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+    return llvm::ArrayRef<OptionDefinition>(&m_option_definition, 1);
+  }
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  OptionValueFileSpecList &GetOptionValue() { return m_file_list; }
+
+  const OptionValueFileSpecList &GetOptionValue() const { return m_file_list; }
+
+protected:
+  OptionValueFileSpecList m_file_list;
+  OptionDefinition m_option_definition;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupFile_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupFormat.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupFormat.h
new file mode 100644
index 0000000..1b5020a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupFormat.h
@@ -0,0 +1,81 @@
+//===-- OptionGroupFormat.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupFormat_h_
+#define liblldb_OptionGroupFormat_h_
+
+#include "lldb/Interpreter/OptionValueFormat.h"
+#include "lldb/Interpreter/OptionValueSInt64.h"
+#include "lldb/Interpreter/OptionValueUInt64.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+
+// OptionGroupFormat
+
+class OptionGroupFormat : public OptionGroup {
+public:
+  static const uint32_t OPTION_GROUP_FORMAT = LLDB_OPT_SET_1;
+  static const uint32_t OPTION_GROUP_GDB_FMT = LLDB_OPT_SET_2;
+  static const uint32_t OPTION_GROUP_SIZE = LLDB_OPT_SET_3;
+  static const uint32_t OPTION_GROUP_COUNT = LLDB_OPT_SET_4;
+
+  OptionGroupFormat(
+      lldb::Format default_format,
+      uint64_t default_byte_size =
+          UINT64_MAX, // Pass UINT64_MAX to disable the "--size" option
+      uint64_t default_count =
+          UINT64_MAX); // Pass UINT64_MAX to disable the "--count" option
+
+  ~OptionGroupFormat() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  lldb::Format GetFormat() const { return m_format.GetCurrentValue(); }
+
+  OptionValueFormat &GetFormatValue() { return m_format; }
+
+  const OptionValueFormat &GetFormatValue() const { return m_format; }
+
+  OptionValueUInt64 &GetByteSizeValue() { return m_byte_size; }
+
+  const OptionValueUInt64 &GetByteSizeValue() const { return m_byte_size; }
+
+  OptionValueUInt64 &GetCountValue() { return m_count; }
+
+  const OptionValueUInt64 &GetCountValue() const { return m_count; }
+
+  bool HasGDBFormat() const { return m_has_gdb_format; }
+
+  bool AnyOptionWasSet() const {
+    return m_format.OptionWasSet() || m_byte_size.OptionWasSet() ||
+           m_count.OptionWasSet();
+  }
+
+protected:
+  bool ParserGDBFormatLetter(ExecutionContext *execution_context,
+                             char format_letter, lldb::Format &format,
+                             uint32_t &byte_size);
+
+  OptionValueFormat m_format;
+  OptionValueUInt64 m_byte_size;
+  OptionValueUInt64 m_count;
+  char m_prev_gdb_format;
+  char m_prev_gdb_size;
+  bool m_has_gdb_format;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupFormat_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupOutputFile.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupOutputFile.h
new file mode 100644
index 0000000..82d68b7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupOutputFile.h
@@ -0,0 +1,48 @@
+//===-- OptionGroupOutputFile.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupOutputFile_h_
+#define liblldb_OptionGroupOutputFile_h_
+
+#include "lldb/Interpreter/OptionValueBoolean.h"
+#include "lldb/Interpreter/OptionValueFileSpec.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+// OptionGroupOutputFile
+
+class OptionGroupOutputFile : public OptionGroup {
+public:
+  OptionGroupOutputFile();
+
+  ~OptionGroupOutputFile() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  const OptionValueFileSpec &GetFile() { return m_file; }
+
+  const OptionValueBoolean &GetAppend() { return m_append; }
+
+  bool AnyOptionWasSet() const {
+    return m_file.OptionWasSet() || m_append.OptionWasSet();
+  }
+
+protected:
+  OptionValueFileSpec m_file;
+  OptionValueBoolean m_append;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupOutputFile_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupPlatform.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupPlatform.h
new file mode 100644
index 0000000..ea5a3f3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupPlatform.h
@@ -0,0 +1,73 @@
+//===-- OptionGroupPlatform.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupPlatform_h_
+#define liblldb_OptionGroupPlatform_h_
+
+#include "lldb/Interpreter/Options.h"
+#include "lldb/Utility/ConstString.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+// PlatformOptionGroup
+//
+// Make platform options available to any commands that need the settings.
+class OptionGroupPlatform : public OptionGroup {
+public:
+  OptionGroupPlatform(bool include_platform_option)
+      : OptionGroup(), m_platform_name(), m_sdk_sysroot(),
+        m_include_platform_option(include_platform_option) {}
+
+  ~OptionGroupPlatform() override = default;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  lldb::PlatformSP CreatePlatformWithOptions(CommandInterpreter &interpreter,
+                                             const ArchSpec &arch,
+                                             bool make_selected, Status &error,
+                                             ArchSpec &platform_arch) const;
+
+  bool PlatformWasSpecified() const { return !m_platform_name.empty(); }
+
+  void SetPlatformName(const char *platform_name) {
+    if (platform_name && platform_name[0])
+      m_platform_name.assign(platform_name);
+    else
+      m_platform_name.clear();
+  }
+
+  ConstString GetSDKRootDirectory() const { return m_sdk_sysroot; }
+
+  void SetSDKRootDirectory(ConstString sdk_root_directory) {
+    m_sdk_sysroot = sdk_root_directory;
+  }
+
+  ConstString GetSDKBuild() const { return m_sdk_build; }
+
+  void SetSDKBuild(ConstString sdk_build) { m_sdk_build = sdk_build; }
+
+  bool PlatformMatches(const lldb::PlatformSP &platform_sp) const;
+
+protected:
+  std::string m_platform_name;
+  ConstString m_sdk_sysroot;
+  ConstString m_sdk_build;
+  llvm::VersionTuple m_os_version;
+  bool m_include_platform_option;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupPlatform_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupString.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupString.h
new file mode 100644
index 0000000..ce10589
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupString.h
@@ -0,0 +1,48 @@
+//===-- OptionGroupString.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupString_h_
+#define liblldb_OptionGroupString_h_
+
+#include "lldb/Interpreter/OptionValueString.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+// OptionGroupString
+
+class OptionGroupString : public OptionGroup {
+public:
+  OptionGroupString(uint32_t usage_mask, bool required, const char *long_option,
+                    int short_option, uint32_t completion_type,
+                    lldb::CommandArgumentType argument_type,
+                    const char *usage_text, const char *default_value);
+
+  ~OptionGroupString() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+    return llvm::ArrayRef<OptionDefinition>(&m_option_definition, 1);
+  }
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  OptionValueString &GetOptionValue() { return m_value; }
+
+  const OptionValueString &GetOptionValue() const { return m_value; }
+
+protected:
+  OptionValueString m_value;
+  OptionDefinition m_option_definition;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupString_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupUInt64.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupUInt64.h
new file mode 100644
index 0000000..12f08a3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupUInt64.h
@@ -0,0 +1,49 @@
+//===-- OptionGroupUInt64.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupUInt64_h_
+#define liblldb_OptionGroupUInt64_h_
+
+#include "lldb/Interpreter/OptionValueUInt64.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+
+// OptionGroupUInt64
+
+class OptionGroupUInt64 : public OptionGroup {
+public:
+  OptionGroupUInt64(uint32_t usage_mask, bool required, const char *long_option,
+                    int short_option, uint32_t completion_type,
+                    lldb::CommandArgumentType argument_type,
+                    const char *usage_text, uint64_t default_value);
+
+  ~OptionGroupUInt64() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+    return llvm::ArrayRef<OptionDefinition>(&m_option_definition, 1);
+  }
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  OptionValueUInt64 &GetOptionValue() { return m_value; }
+
+  const OptionValueUInt64 &GetOptionValue() const { return m_value; }
+
+protected:
+  OptionValueUInt64 m_value;
+  OptionDefinition m_option_definition;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupUInt64_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupUUID.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupUUID.h
new file mode 100644
index 0000000..22fc3a1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupUUID.h
@@ -0,0 +1,41 @@
+//===-- OptionGroupUUID.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupUUID_h_
+#define liblldb_OptionGroupUUID_h_
+
+#include "lldb/Interpreter/OptionValueUUID.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+
+// OptionGroupUUID
+
+class OptionGroupUUID : public OptionGroup {
+public:
+  OptionGroupUUID();
+
+  ~OptionGroupUUID() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  const OptionValueUUID &GetOptionValue() const { return m_uuid; }
+
+protected:
+  OptionValueUUID m_uuid;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupUUID_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h
new file mode 100644
index 0000000..5a1bbc9
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h
@@ -0,0 +1,58 @@
+//===-- OptionGroupValueObjectDisplay.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupValueObjectDisplay_h_
+#define liblldb_OptionGroupValueObjectDisplay_h_
+
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+
+// OptionGroupValueObjectDisplay
+
+class OptionGroupValueObjectDisplay : public OptionGroup {
+public:
+  OptionGroupValueObjectDisplay();
+
+  ~OptionGroupValueObjectDisplay() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  bool AnyOptionWasSet() const {
+    return show_types || no_summary_depth != 0 || show_location ||
+           flat_output || use_objc || max_depth != UINT32_MAX ||
+           ptr_depth != 0 || !use_synth || be_raw || ignore_cap ||
+           run_validator;
+  }
+
+  DumpValueObjectOptions GetAsDumpOptions(
+      LanguageRuntimeDescriptionDisplayVerbosity lang_descr_verbosity =
+          eLanguageRuntimeDescriptionDisplayVerbosityFull,
+      lldb::Format format = lldb::eFormatDefault,
+      lldb::TypeSummaryImplSP summary_sp = lldb::TypeSummaryImplSP());
+
+  bool show_types : 1, show_location : 1, flat_output : 1, use_objc : 1,
+      use_synth : 1, be_raw : 1, ignore_cap : 1, run_validator : 1;
+
+  uint32_t no_summary_depth;
+  uint32_t max_depth;
+  uint32_t ptr_depth;
+  uint32_t elem_count;
+  lldb::DynamicValueType use_dynamic;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupValueObjectDisplay_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupVariable.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupVariable.h
new file mode 100644
index 0000000..0c042f4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupVariable.h
@@ -0,0 +1,49 @@
+//===-- OptionGroupVariable.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupVariable_h_
+#define liblldb_OptionGroupVariable_h_
+
+#include "lldb/Interpreter/OptionValueString.h"
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+
+// OptionGroupVariable
+
+class OptionGroupVariable : public OptionGroup {
+public:
+  OptionGroupVariable(bool show_frame_options);
+
+  ~OptionGroupVariable() override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  bool include_frame_options : 1,
+      show_args : 1,    // Frame option only (include_frame_options == true)
+      show_recognized_args : 1,  // Frame option only (include_frame_options ==
+                                 // true)
+      show_locals : 1,  // Frame option only (include_frame_options == true)
+      show_globals : 1, // Frame option only (include_frame_options == true)
+      use_regex : 1, show_scope : 1, show_decl : 1;
+  OptionValueString summary;        // the name of a named summary
+  OptionValueString summary_string; // a summary string
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(OptionGroupVariable);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupVariable_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionGroupWatchpoint.h b/linux-x64/clang/include/lldb/Interpreter/OptionGroupWatchpoint.h
new file mode 100644
index 0000000..3729c00
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionGroupWatchpoint.h
@@ -0,0 +1,54 @@
+//===-- OptionGroupWatchpoint.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionGroupWatchpoint_h_
+#define liblldb_OptionGroupWatchpoint_h_
+
+#include "lldb/Interpreter/Options.h"
+
+namespace lldb_private {
+
+// OptionGroupWatchpoint
+
+class OptionGroupWatchpoint : public OptionGroup {
+public:
+  OptionGroupWatchpoint();
+
+  ~OptionGroupWatchpoint() override;
+
+  static bool IsWatchSizeSupported(uint32_t watch_size);
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                        ExecutionContext *execution_context) override;
+  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  // Note:
+  // eWatchRead == LLDB_WATCH_TYPE_READ; and
+  // eWatchWrite == LLDB_WATCH_TYPE_WRITE
+  enum WatchType {
+    eWatchInvalid = 0,
+    eWatchRead,
+    eWatchWrite,
+    eWatchReadWrite
+  };
+
+  WatchType watch_type;
+  uint32_t watch_size;
+  bool watch_type_specified;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(OptionGroupWatchpoint);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionGroupWatchpoint_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValue.h b/linux-x64/clang/include/lldb/Interpreter/OptionValue.h
new file mode 100644
index 0000000..0b85bc1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValue.h
@@ -0,0 +1,337 @@
+//===-- OptionValue.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValue_h_
+#define liblldb_OptionValue_h_
+
+#include "lldb/Core/FormatEntity.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-private-interfaces.h"
+
+namespace lldb_private {
+
+// OptionValue
+class OptionValue {
+public:
+  enum Type {
+    eTypeInvalid = 0,
+    eTypeArch,
+    eTypeArgs,
+    eTypeArray,
+    eTypeBoolean,
+    eTypeChar,
+    eTypeDictionary,
+    eTypeEnum,
+    eTypeFileSpec,
+    eTypeFileSpecList,
+    eTypeFormat,
+    eTypeLanguage,
+    eTypePathMap,
+    eTypeProperties,
+    eTypeRegex,
+    eTypeSInt64,
+    eTypeString,
+    eTypeUInt64,
+    eTypeUUID,
+    eTypeFormatEntity
+  };
+
+  enum {
+    eDumpOptionName = (1u << 0),
+    eDumpOptionType = (1u << 1),
+    eDumpOptionValue = (1u << 2),
+    eDumpOptionDescription = (1u << 3),
+    eDumpOptionRaw = (1u << 4),
+    eDumpOptionCommand = (1u << 5),
+    eDumpGroupValue = (eDumpOptionName | eDumpOptionType | eDumpOptionValue),
+    eDumpGroupHelp =
+        (eDumpOptionName | eDumpOptionType | eDumpOptionDescription),
+    eDumpGroupExport = (eDumpOptionCommand | eDumpOptionName | eDumpOptionValue)
+  };
+
+  OptionValue()
+      : m_callback(nullptr), m_baton(nullptr), m_value_was_set(false) {}
+
+  OptionValue(const OptionValue &rhs)
+      : m_callback(rhs.m_callback), m_baton(rhs.m_baton),
+        m_value_was_set(rhs.m_value_was_set) {}
+
+  virtual ~OptionValue() = default;
+
+  // Subclasses should override these functions
+  virtual Type GetType() const = 0;
+
+  // If this value is always hidden, the avoid showing any info on this value,
+  // just show the info for the child values.
+  virtual bool ValueIsTransparent() const {
+    return GetType() == eTypeProperties;
+  }
+
+  virtual const char *GetTypeAsCString() const {
+    return GetBuiltinTypeAsCString(GetType());
+  }
+
+  static const char *GetBuiltinTypeAsCString(Type t);
+
+  virtual void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                         uint32_t dump_mask) = 0;
+
+  virtual Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign);
+
+  virtual bool Clear() = 0;
+
+  virtual lldb::OptionValueSP DeepCopy() const = 0;
+
+  virtual size_t AutoComplete(CommandInterpreter &interpreter,
+                              CompletionRequest &request);
+
+  // Subclasses can override these functions
+  virtual lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx,
+                                          llvm::StringRef name,
+                                          bool will_modify,
+                                          Status &error) const {
+    error.SetErrorStringWithFormat("'%s' is not a value subvalue", name.str().c_str());
+    return lldb::OptionValueSP();
+  }
+
+  virtual Status SetSubValue(const ExecutionContext *exe_ctx,
+                             VarSetOperationType op, llvm::StringRef name,
+                             llvm::StringRef value);
+
+  virtual bool IsAggregateValue() const { return false; }
+
+  virtual ConstString GetName() const { return ConstString(); }
+
+  virtual bool DumpQualifiedName(Stream &strm) const;
+
+  // Subclasses should NOT override these functions as they use the above
+  // functions to implement functionality
+  uint32_t GetTypeAsMask() { return 1u << GetType(); }
+
+  static uint32_t ConvertTypeToMask(OptionValue::Type type) {
+    return 1u << type;
+  }
+
+  static OptionValue::Type ConvertTypeMaskToType(uint32_t type_mask) {
+    // If only one bit is set, then return an appropriate enumeration
+    switch (type_mask) {
+    case 1u << eTypeArch:
+      return eTypeArch;
+    case 1u << eTypeArgs:
+      return eTypeArgs;
+    case 1u << eTypeArray:
+      return eTypeArray;
+    case 1u << eTypeBoolean:
+      return eTypeBoolean;
+    case 1u << eTypeChar:
+      return eTypeChar;
+    case 1u << eTypeDictionary:
+      return eTypeDictionary;
+    case 1u << eTypeEnum:
+      return eTypeEnum;
+    case 1u << eTypeFileSpec:
+      return eTypeFileSpec;
+    case 1u << eTypeFileSpecList:
+      return eTypeFileSpecList;
+    case 1u << eTypeFormat:
+      return eTypeFormat;
+    case 1u << eTypeLanguage:
+      return eTypeLanguage;
+    case 1u << eTypePathMap:
+      return eTypePathMap;
+    case 1u << eTypeProperties:
+      return eTypeProperties;
+    case 1u << eTypeRegex:
+      return eTypeRegex;
+    case 1u << eTypeSInt64:
+      return eTypeSInt64;
+    case 1u << eTypeString:
+      return eTypeString;
+    case 1u << eTypeUInt64:
+      return eTypeUInt64;
+    case 1u << eTypeUUID:
+      return eTypeUUID;
+    }
+    // Else return invalid
+    return eTypeInvalid;
+  }
+
+  static lldb::OptionValueSP
+  CreateValueFromCStringForTypeMask(const char *value_cstr, uint32_t type_mask,
+                                    Status &error);
+
+  // Get this value as a uint64_t value if it is encoded as a boolean, uint64_t
+  // or int64_t. Other types will cause "fail_value" to be returned
+  uint64_t GetUInt64Value(uint64_t fail_value, bool *success_ptr);
+
+  OptionValueArch *GetAsArch();
+
+  const OptionValueArch *GetAsArch() const;
+
+  OptionValueArray *GetAsArray();
+
+  const OptionValueArray *GetAsArray() const;
+
+  OptionValueArgs *GetAsArgs();
+
+  const OptionValueArgs *GetAsArgs() const;
+
+  OptionValueBoolean *GetAsBoolean();
+
+  OptionValueChar *GetAsChar();
+
+  const OptionValueBoolean *GetAsBoolean() const;
+
+  const OptionValueChar *GetAsChar() const;
+
+  OptionValueDictionary *GetAsDictionary();
+
+  const OptionValueDictionary *GetAsDictionary() const;
+
+  OptionValueEnumeration *GetAsEnumeration();
+
+  const OptionValueEnumeration *GetAsEnumeration() const;
+
+  OptionValueFileSpec *GetAsFileSpec();
+
+  const OptionValueFileSpec *GetAsFileSpec() const;
+
+  OptionValueFileSpecList *GetAsFileSpecList();
+
+  const OptionValueFileSpecList *GetAsFileSpecList() const;
+
+  OptionValueFormat *GetAsFormat();
+
+  const OptionValueFormat *GetAsFormat() const;
+
+  OptionValueLanguage *GetAsLanguage();
+
+  const OptionValueLanguage *GetAsLanguage() const;
+
+  OptionValuePathMappings *GetAsPathMappings();
+
+  const OptionValuePathMappings *GetAsPathMappings() const;
+
+  OptionValueProperties *GetAsProperties();
+
+  const OptionValueProperties *GetAsProperties() const;
+
+  OptionValueRegex *GetAsRegex();
+
+  const OptionValueRegex *GetAsRegex() const;
+
+  OptionValueSInt64 *GetAsSInt64();
+
+  const OptionValueSInt64 *GetAsSInt64() const;
+
+  OptionValueString *GetAsString();
+
+  const OptionValueString *GetAsString() const;
+
+  OptionValueUInt64 *GetAsUInt64();
+
+  const OptionValueUInt64 *GetAsUInt64() const;
+
+  OptionValueUUID *GetAsUUID();
+
+  const OptionValueUUID *GetAsUUID() const;
+
+  OptionValueFormatEntity *GetAsFormatEntity();
+
+  const OptionValueFormatEntity *GetAsFormatEntity() const;
+
+  bool GetBooleanValue(bool fail_value = false) const;
+
+  bool SetBooleanValue(bool new_value);
+
+  char GetCharValue(char fail_value) const;
+
+  char SetCharValue(char new_value);
+
+  int64_t GetEnumerationValue(int64_t fail_value = -1) const;
+
+  bool SetEnumerationValue(int64_t value);
+
+  FileSpec GetFileSpecValue() const;
+
+  bool SetFileSpecValue(const FileSpec &file_spec);
+
+  FileSpecList GetFileSpecListValue() const;
+
+  lldb::Format
+  GetFormatValue(lldb::Format fail_value = lldb::eFormatDefault) const;
+
+  bool SetFormatValue(lldb::Format new_value);
+
+  lldb::LanguageType GetLanguageValue(
+      lldb::LanguageType fail_value = lldb::eLanguageTypeUnknown) const;
+
+  bool SetLanguageValue(lldb::LanguageType new_language);
+
+  const FormatEntity::Entry *GetFormatEntity() const;
+
+  const RegularExpression *GetRegexValue() const;
+
+  int64_t GetSInt64Value(int64_t fail_value = 0) const;
+
+  bool SetSInt64Value(int64_t new_value);
+
+  llvm::StringRef GetStringValue(llvm::StringRef fail_value) const;
+  llvm::StringRef GetStringValue() const { return GetStringValue(llvm::StringRef()); }
+
+  bool SetStringValue(llvm::StringRef new_value);
+
+  uint64_t GetUInt64Value(uint64_t fail_value = 0) const;
+
+  bool SetUInt64Value(uint64_t new_value);
+
+  UUID GetUUIDValue() const;
+
+  bool SetUUIDValue(const UUID &uuid);
+
+  bool OptionWasSet() const { return m_value_was_set; }
+
+  void SetOptionWasSet() { m_value_was_set = true; }
+
+  void SetParent(const lldb::OptionValueSP &parent_sp) {
+    m_parent_wp = parent_sp;
+  }
+
+  void SetValueChangedCallback(OptionValueChangedCallback callback,
+                               void *baton) {
+    assert(m_callback == nullptr);
+    m_callback = callback;
+    m_baton = baton;
+  }
+
+  void NotifyValueChanged() {
+    if (m_callback)
+      m_callback(m_baton, this);
+  }
+
+protected:
+  lldb::OptionValueWP m_parent_wp;
+  OptionValueChangedCallback m_callback;
+  void *m_baton;
+  bool m_value_was_set; // This can be used to see if a value has been set
+                        // by a call to SetValueFromCString(). It is often
+                        // handy to know if an option value was set from the
+                        // command line or as a setting, versus if we just have
+                        // the default value that was already populated in the
+                        // option value.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValue_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueArch.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueArch.h
new file mode 100644
index 0000000..f8f4068
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueArch.h
@@ -0,0 +1,84 @@
+//===-- OptionValueArch.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueArch_h_
+#define liblldb_OptionValueArch_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/CompletionRequest.h"
+
+namespace lldb_private {
+
+class OptionValueArch : public OptionValue {
+public:
+  OptionValueArch() : OptionValue(), m_current_value(), m_default_value() {}
+
+  OptionValueArch(const char *triple)
+      : OptionValue(), m_current_value(triple), m_default_value() {
+    m_default_value = m_current_value;
+  }
+
+  OptionValueArch(const ArchSpec &value)
+      : OptionValue(), m_current_value(value), m_default_value(value) {}
+
+  OptionValueArch(const ArchSpec &current_value, const ArchSpec &default_value)
+      : OptionValue(), m_current_value(current_value),
+        m_default_value(default_value) {}
+
+  ~OptionValueArch() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeArch; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  size_t AutoComplete(CommandInterpreter &interpreter,
+                      lldb_private::CompletionRequest &request) override;
+
+  // Subclass specific functions
+
+  ArchSpec &GetCurrentValue() { return m_current_value; }
+
+  const ArchSpec &GetCurrentValue() const { return m_current_value; }
+
+  const ArchSpec &GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(const ArchSpec &value, bool set_value_was_set) {
+    m_current_value = value;
+    if (set_value_was_set)
+      m_value_was_set = true;
+  }
+
+  void SetDefaultValue(const ArchSpec &value) { m_default_value = value; }
+
+protected:
+  ArchSpec m_current_value;
+  ArchSpec m_default_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueArch_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueArgs.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueArgs.h
new file mode 100644
index 0000000..0254b9a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueArgs.h
@@ -0,0 +1,31 @@
+//===-- OptionValueArgs.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueArgs_h_
+#define liblldb_OptionValueArgs_h_
+
+#include "lldb/Interpreter/OptionValueArray.h"
+
+namespace lldb_private {
+
+class OptionValueArgs : public OptionValueArray {
+public:
+  OptionValueArgs()
+      : OptionValueArray(
+            OptionValue::ConvertTypeToMask(OptionValue::eTypeString)) {}
+
+  ~OptionValueArgs() override {}
+
+  size_t GetArgs(Args &args);
+
+  Type GetType() const override { return eTypeArgs; }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueArgs_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueArray.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueArray.h
new file mode 100644
index 0000000..10f3bf5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueArray.h
@@ -0,0 +1,128 @@
+//===-- OptionValueArray.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueArray_h_
+#define liblldb_OptionValueArray_h_
+
+#include <vector>
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueArray : public OptionValue {
+public:
+  OptionValueArray(uint32_t type_mask = UINT32_MAX, bool raw_value_dump = false)
+      : m_type_mask(type_mask), m_values(), m_raw_value_dump(raw_value_dump) {}
+
+  ~OptionValueArray() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeArray; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_values.clear();
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  bool IsAggregateValue() const override { return true; }
+
+  lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx,
+                                  llvm::StringRef name, bool will_modify,
+                                  Status &error) const override;
+
+  // Subclass specific functions
+
+  size_t GetSize() const { return m_values.size(); }
+
+  lldb::OptionValueSP operator[](size_t idx) const {
+    lldb::OptionValueSP value_sp;
+    if (idx < m_values.size())
+      value_sp = m_values[idx];
+    return value_sp;
+  }
+
+  lldb::OptionValueSP GetValueAtIndex(size_t idx) const {
+    lldb::OptionValueSP value_sp;
+    if (idx < m_values.size())
+      value_sp = m_values[idx];
+    return value_sp;
+  }
+
+  bool AppendValue(const lldb::OptionValueSP &value_sp) {
+    // Make sure the value_sp object is allowed to contain values of the type
+    // passed in...
+    if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
+      m_values.push_back(value_sp);
+      return true;
+    }
+    return false;
+  }
+
+  bool InsertValue(size_t idx, const lldb::OptionValueSP &value_sp) {
+    // Make sure the value_sp object is allowed to contain values of the type
+    // passed in...
+    if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
+      if (idx < m_values.size())
+        m_values.insert(m_values.begin() + idx, value_sp);
+      else
+        m_values.push_back(value_sp);
+      return true;
+    }
+    return false;
+  }
+
+  bool ReplaceValue(size_t idx, const lldb::OptionValueSP &value_sp) {
+    // Make sure the value_sp object is allowed to contain values of the type
+    // passed in...
+    if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
+      if (idx < m_values.size()) {
+        m_values[idx] = value_sp;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  bool DeleteValue(size_t idx) {
+    if (idx < m_values.size()) {
+      m_values.erase(m_values.begin() + idx);
+      return true;
+    }
+    return false;
+  }
+
+  size_t GetArgs(Args &args) const;
+
+  Status SetArgs(const Args &args, VarSetOperationType op);
+
+protected:
+  typedef std::vector<lldb::OptionValueSP> collection;
+
+  uint32_t m_type_mask;
+  collection m_values;
+  bool m_raw_value_dump;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueArray_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueBoolean.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueBoolean.h
new file mode 100644
index 0000000..2fc97d4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueBoolean.h
@@ -0,0 +1,88 @@
+//===-- OptionValueBoolean.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueBoolean_h_
+#define liblldb_OptionValueBoolean_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueBoolean : public OptionValue {
+public:
+  OptionValueBoolean(bool value)
+      : OptionValue(), m_current_value(value), m_default_value(value) {}
+  OptionValueBoolean(bool current_value, bool default_value)
+      : OptionValue(), m_current_value(current_value),
+        m_default_value(default_value) {}
+
+  ~OptionValueBoolean() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeBoolean; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  size_t AutoComplete(CommandInterpreter &interpreter,
+                      CompletionRequest &request) override;
+
+  // Subclass specific functions
+
+  /// Convert to bool operator.
+  ///
+  /// This allows code to check a OptionValueBoolean in conditions.
+  ///
+  /// \code
+  /// OptionValueBoolean bool_value(...);
+  /// if (bool_value)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     /b True this object contains a valid namespace decl, \b
+  ///     false otherwise.
+  explicit operator bool() const { return m_current_value; }
+
+  const bool &operator=(bool b) {
+    m_current_value = b;
+    return m_current_value;
+  }
+
+  bool GetCurrentValue() const { return m_current_value; }
+
+  bool GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(bool value) { m_current_value = value; }
+
+  void SetDefaultValue(bool value) { m_default_value = value; }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+protected:
+  bool m_current_value;
+  bool m_default_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueBoolean_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueChar.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueChar.h
new file mode 100644
index 0000000..d866136
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueChar.h
@@ -0,0 +1,71 @@
+//===-- OptionValueChar.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueChar_h_
+#define liblldb_OptionValueChar_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueChar : public OptionValue {
+public:
+  OptionValueChar(char value)
+      : OptionValue(), m_current_value(value), m_default_value(value) {}
+
+  OptionValueChar(char current_value, char default_value)
+      : OptionValue(), m_current_value(current_value),
+        m_default_value(default_value) {}
+
+  ~OptionValueChar() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeChar; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  // Subclass specific functions
+
+  const char &operator=(char c) {
+    m_current_value = c;
+    return m_current_value;
+  }
+
+  char GetCurrentValue() const { return m_current_value; }
+
+  char GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(char value) { m_current_value = value; }
+
+  void SetDefaultValue(char value) { m_default_value = value; }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+protected:
+  char m_current_value;
+  char m_default_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueChar_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueDictionary.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueDictionary.h
new file mode 100644
index 0000000..8785d38
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueDictionary.h
@@ -0,0 +1,84 @@
+//===-- OptionValueDictionary.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueDictionary_h_
+#define liblldb_OptionValueDictionary_h_
+
+#include <map>
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueDictionary : public OptionValue {
+public:
+  OptionValueDictionary(uint32_t type_mask = UINT32_MAX,
+                        bool raw_value_dump = true)
+      : OptionValue(), m_type_mask(type_mask), m_values(),
+        m_raw_value_dump(raw_value_dump) {}
+
+  ~OptionValueDictionary() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeDictionary; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+
+  bool Clear() override {
+    m_values.clear();
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  bool IsAggregateValue() const override { return true; }
+
+  bool IsHomogenous() const {
+    return ConvertTypeMaskToType(m_type_mask) != eTypeInvalid;
+  }
+
+  // Subclass specific functions
+
+  size_t GetNumValues() const { return m_values.size(); }
+
+  lldb::OptionValueSP GetValueForKey(ConstString key) const;
+
+  lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx,
+                                  llvm::StringRef name, bool will_modify,
+                                  Status &error) const override;
+
+  Status SetSubValue(const ExecutionContext *exe_ctx, VarSetOperationType op,
+                     llvm::StringRef name, llvm::StringRef value) override;
+
+  bool SetValueForKey(ConstString key,
+                      const lldb::OptionValueSP &value_sp,
+                      bool can_replace = true);
+
+  bool DeleteValueForKey(ConstString key);
+
+  size_t GetArgs(Args &args) const;
+
+  Status SetArgs(const Args &args, VarSetOperationType op);
+
+protected:
+  typedef std::map<ConstString, lldb::OptionValueSP> collection;
+  uint32_t m_type_mask;
+  collection m_values;
+  bool m_raw_value_dump;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueDictionary_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueEnumeration.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueEnumeration.h
new file mode 100644
index 0000000..71f3ab5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueEnumeration.h
@@ -0,0 +1,86 @@
+//===-- OptionValueEnumeration.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueEnumeration_h_
+#define liblldb_OptionValueEnumeration_h_
+
+#include "lldb/Core/UniqueCStringMap.h"
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/Utility/StreamString.h"
+#include "lldb/lldb-private-types.h"
+
+namespace lldb_private {
+
+class OptionValueEnumeration : public OptionValue {
+public:
+  typedef int64_t enum_type;
+  struct EnumeratorInfo {
+    enum_type value;
+    const char *description;
+  };
+  typedef UniqueCStringMap<EnumeratorInfo> EnumerationMap;
+  typedef EnumerationMap::Entry EnumerationMapEntry;
+
+  OptionValueEnumeration(const OptionEnumValues &enumerators, enum_type value);
+
+  ~OptionValueEnumeration() override;
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeEnum; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  size_t AutoComplete(CommandInterpreter &interpreter,
+                      CompletionRequest &request) override;
+
+  // Subclass specific functions
+
+  enum_type operator=(enum_type value) {
+    m_current_value = value;
+    return m_current_value;
+  }
+
+  enum_type GetCurrentValue() const { return m_current_value; }
+
+  enum_type GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(enum_type value) { m_current_value = value; }
+
+  void SetDefaultValue(enum_type value) { m_default_value = value; }
+
+protected:
+  void SetEnumerations(const OptionEnumValues &enumerators);
+
+  enum_type m_current_value;
+  enum_type m_default_value;
+  EnumerationMap m_enumerations;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueEnumeration_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueFileSpec.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueFileSpec.h
new file mode 100644
index 0000000..aa1022a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueFileSpec.h
@@ -0,0 +1,89 @@
+//===-- OptionValueFileSpec.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueFileSpec_h_
+#define liblldb_OptionValueFileSpec_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+
+#include "lldb/Utility/FileSpec.h"
+#include "llvm/Support/Chrono.h"
+
+namespace lldb_private {
+
+class OptionValueFileSpec : public OptionValue {
+public:
+  OptionValueFileSpec(bool resolve = true);
+
+  OptionValueFileSpec(const FileSpec &value, bool resolve = true);
+
+  OptionValueFileSpec(const FileSpec &current_value,
+                      const FileSpec &default_value, bool resolve = true);
+
+  ~OptionValueFileSpec() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeFileSpec; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    m_data_sp.reset();
+    m_data_mod_time = llvm::sys::TimePoint<>();
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  size_t AutoComplete(CommandInterpreter &interpreter,
+                      CompletionRequest &request) override;
+
+  // Subclass specific functions
+
+  FileSpec &GetCurrentValue() { return m_current_value; }
+
+  const FileSpec &GetCurrentValue() const { return m_current_value; }
+
+  const FileSpec &GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(const FileSpec &value, bool set_value_was_set) {
+    m_current_value = value;
+    if (set_value_was_set)
+      m_value_was_set = true;
+    m_data_sp.reset();
+  }
+
+  void SetDefaultValue(const FileSpec &value) { m_default_value = value; }
+
+  const lldb::DataBufferSP &GetFileContents();
+
+  void SetCompletionMask(uint32_t mask) { m_completion_mask = mask; }
+
+protected:
+  FileSpec m_current_value;
+  FileSpec m_default_value;
+  lldb::DataBufferSP m_data_sp;
+  llvm::sys::TimePoint<> m_data_mod_time;
+  uint32_t m_completion_mask;
+  bool m_resolve;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueFileSpec_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueFileSpecList.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueFileSpecList.h
new file mode 100644
index 0000000..5607437
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueFileSpecList.h
@@ -0,0 +1,77 @@
+//===-- OptionValueFileSpecList.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueFileSpecList_h_
+#define liblldb_OptionValueFileSpecList_h_
+
+#include <mutex>
+
+#include "lldb/Core/FileSpecList.h"
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueFileSpecList : public OptionValue {
+public:
+  OptionValueFileSpecList() : OptionValue(), m_current_value() {}
+
+  OptionValueFileSpecList(const FileSpecList &current_value)
+      : OptionValue(), m_current_value(current_value) {}
+
+  ~OptionValueFileSpecList() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeFileSpecList; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    std::lock_guard<std::recursive_mutex> lock(m_mutex);
+    m_current_value.Clear();
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  bool IsAggregateValue() const override { return true; }
+
+  // Subclass specific functions
+
+  FileSpecList GetCurrentValue() const {
+    std::lock_guard<std::recursive_mutex> lock(m_mutex);
+    return m_current_value;
+  }
+
+  void SetCurrentValue(const FileSpecList &value) {
+    std::lock_guard<std::recursive_mutex> lock(m_mutex);
+    m_current_value = value;
+  }
+
+  void AppendCurrentValue(const FileSpec &value) {
+    std::lock_guard<std::recursive_mutex> lock(m_mutex);
+    m_current_value.Append(value);
+  }
+
+protected:
+  mutable std::recursive_mutex m_mutex;
+  FileSpecList m_current_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueFileSpecList_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueFormat.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueFormat.h
new file mode 100644
index 0000000..020f4ae
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueFormat.h
@@ -0,0 +1,66 @@
+//===-- OptionValueFormat.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueFormat_h_
+#define liblldb_OptionValueFormat_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueFormat : public OptionValue {
+public:
+  OptionValueFormat(lldb::Format value)
+      : OptionValue(), m_current_value(value), m_default_value(value) {}
+
+  OptionValueFormat(lldb::Format current_value, lldb::Format default_value)
+      : OptionValue(), m_current_value(current_value),
+        m_default_value(default_value) {}
+
+  ~OptionValueFormat() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeFormat; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  // Subclass specific functions
+
+  lldb::Format GetCurrentValue() const { return m_current_value; }
+
+  lldb::Format GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(lldb::Format value) { m_current_value = value; }
+
+  void SetDefaultValue(lldb::Format value) { m_default_value = value; }
+
+protected:
+  lldb::Format m_current_value;
+  lldb::Format m_default_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueFormat_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueFormatEntity.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueFormatEntity.h
new file mode 100644
index 0000000..b05be95
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueFormatEntity.h
@@ -0,0 +1,67 @@
+//===-- OptionValueFormatEntity.h --------------------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueFormatEntity_h_
+#define liblldb_OptionValueFormatEntity_h_
+
+#include "lldb/Core/FormatEntity.h"
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueFormatEntity : public OptionValue {
+public:
+  OptionValueFormatEntity(const char *default_format);
+
+  ~OptionValueFormatEntity() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeFormatEntity; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override;
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  size_t AutoComplete(CommandInterpreter &interpreter,
+                      CompletionRequest &request) override;
+
+  // Subclass specific functions
+
+  FormatEntity::Entry &GetCurrentValue() { return m_current_entry; }
+
+  const FormatEntity::Entry &GetCurrentValue() const { return m_current_entry; }
+
+  void SetCurrentValue(const FormatEntity::Entry &value) {
+    m_current_entry = value;
+  }
+
+  FormatEntity::Entry &GetDefaultValue() { return m_default_entry; }
+
+  const FormatEntity::Entry &GetDefaultValue() const { return m_default_entry; }
+
+protected:
+  std::string m_current_format;
+  std::string m_default_format;
+  FormatEntity::Entry m_current_entry;
+  FormatEntity::Entry m_default_entry;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueFormatEntity_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueLanguage.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueLanguage.h
new file mode 100644
index 0000000..505dc89
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueLanguage.h
@@ -0,0 +1,69 @@
+//===-- OptionValueLanguage.h -------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueLanguage_h_
+#define liblldb_OptionValueLanguage_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/lldb-enumerations.h"
+
+namespace lldb_private {
+
+class OptionValueLanguage : public OptionValue {
+public:
+  OptionValueLanguage(lldb::LanguageType value)
+      : OptionValue(), m_current_value(value), m_default_value(value) {}
+
+  OptionValueLanguage(lldb::LanguageType current_value,
+                      lldb::LanguageType default_value)
+      : OptionValue(), m_current_value(current_value),
+        m_default_value(default_value) {}
+
+  ~OptionValueLanguage() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeLanguage; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  // Subclass specific functions
+
+  lldb::LanguageType GetCurrentValue() const { return m_current_value; }
+
+  lldb::LanguageType GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(lldb::LanguageType value) { m_current_value = value; }
+
+  void SetDefaultValue(lldb::LanguageType value) { m_default_value = value; }
+
+protected:
+  lldb::LanguageType m_current_value;
+  lldb::LanguageType m_default_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueLanguage_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValuePathMappings.h b/linux-x64/clang/include/lldb/Interpreter/OptionValuePathMappings.h
new file mode 100644
index 0000000..35c2af4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValuePathMappings.h
@@ -0,0 +1,61 @@
+//===-- OptionValuePathMappings.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValuePathMappings_h_
+#define liblldb_OptionValuePathMappings_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Target/PathMappingList.h"
+
+namespace lldb_private {
+
+class OptionValuePathMappings : public OptionValue {
+public:
+  OptionValuePathMappings(bool notify_changes)
+      : OptionValue(), m_path_mappings(), m_notify_changes(notify_changes) {}
+
+  ~OptionValuePathMappings() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypePathMap; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_path_mappings.Clear(m_notify_changes);
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  bool IsAggregateValue() const override { return true; }
+
+  // Subclass specific functions
+
+  PathMappingList &GetCurrentValue() { return m_path_mappings; }
+
+  const PathMappingList &GetCurrentValue() const { return m_path_mappings; }
+
+protected:
+  PathMappingList m_path_mappings;
+  bool m_notify_changes;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValuePathMappings_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueProperties.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueProperties.h
new file mode 100644
index 0000000..bea2b3c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueProperties.h
@@ -0,0 +1,222 @@
+//===-- OptionValueProperties.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueProperties_h_
+#define liblldb_OptionValueProperties_h_
+
+#include <vector>
+
+#include "lldb/Core/FormatEntity.h"
+#include "lldb/Core/UniqueCStringMap.h"
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Interpreter/Property.h"
+#include "lldb/Utility/ConstString.h"
+
+namespace lldb_private {
+
+class OptionValueProperties
+    : public OptionValue,
+      public std::enable_shared_from_this<OptionValueProperties> {
+public:
+  OptionValueProperties()
+      : OptionValue(), m_name(), m_properties(), m_name_to_index() {}
+
+  OptionValueProperties(ConstString name);
+
+  OptionValueProperties(const OptionValueProperties &global_properties);
+
+  ~OptionValueProperties() override = default;
+
+  Type GetType() const override { return eTypeProperties; }
+
+  bool Clear() override;
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  ConstString GetName() const override { return m_name; }
+
+  virtual Status DumpPropertyValue(const ExecutionContext *exe_ctx,
+                                   Stream &strm, llvm::StringRef property_path,
+                                   uint32_t dump_mask);
+
+  virtual void DumpAllDescriptions(CommandInterpreter &interpreter,
+                                   Stream &strm) const;
+
+  void Apropos(llvm::StringRef keyword,
+               std::vector<const Property *> &matching_properties) const;
+
+  void Initialize(const PropertyDefinitions &setting_definitions);
+
+  //    bool
+  //    GetQualifiedName (Stream &strm);
+
+  // Subclass specific functions
+
+  virtual size_t GetNumProperties() const;
+
+  // Get the index of a property given its exact name in this property
+  // collection, "name" can't be a path to a property path that refers to a
+  // property within a property
+  virtual uint32_t GetPropertyIndex(ConstString name) const;
+
+  // Get a property by exact name exists in this property collection, name can
+  // not be a path to a property path that refers to a property within a
+  // property
+  virtual const Property *GetProperty(const ExecutionContext *exe_ctx,
+                                      bool will_modify,
+                                      ConstString name) const;
+
+  virtual const Property *GetPropertyAtIndex(const ExecutionContext *exe_ctx,
+                                             bool will_modify,
+                                             uint32_t idx) const;
+
+  // Property can be be a property path like
+  // "target.process.extra-startup-command"
+  virtual const Property *GetPropertyAtPath(const ExecutionContext *exe_ctx,
+                                            bool will_modify,
+    llvm::StringRef property_path) const;
+
+  virtual lldb::OptionValueSP
+  GetPropertyValueAtIndex(const ExecutionContext *exe_ctx, bool will_modify,
+                          uint32_t idx) const;
+
+  virtual lldb::OptionValueSP GetValueForKey(const ExecutionContext *exe_ctx,
+                                             ConstString key,
+                                             bool value_will_be_modified) const;
+
+  lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx,
+                                  llvm::StringRef name,
+                                  bool value_will_be_modified,
+                                  Status &error) const override;
+
+  Status SetSubValue(const ExecutionContext *exe_ctx, VarSetOperationType op,
+                     llvm::StringRef path, llvm::StringRef value) override;
+
+  virtual bool PredicateMatches(const ExecutionContext *exe_ctx,
+    llvm::StringRef predicate) const {
+    return false;
+  }
+
+  OptionValueArch *
+  GetPropertyAtIndexAsOptionValueArch(const ExecutionContext *exe_ctx,
+                                      uint32_t idx) const;
+
+  OptionValueLanguage *
+  GetPropertyAtIndexAsOptionValueLanguage(const ExecutionContext *exe_ctx,
+                                          uint32_t idx) const;
+
+  bool GetPropertyAtIndexAsArgs(const ExecutionContext *exe_ctx, uint32_t idx,
+                                Args &args) const;
+
+  bool SetPropertyAtIndexFromArgs(const ExecutionContext *exe_ctx, uint32_t idx,
+                                  const Args &args);
+
+  bool GetPropertyAtIndexAsBoolean(const ExecutionContext *exe_ctx,
+                                   uint32_t idx, bool fail_value) const;
+
+  bool SetPropertyAtIndexAsBoolean(const ExecutionContext *exe_ctx,
+                                   uint32_t idx, bool new_value);
+
+  OptionValueDictionary *
+  GetPropertyAtIndexAsOptionValueDictionary(const ExecutionContext *exe_ctx,
+                                            uint32_t idx) const;
+
+  int64_t GetPropertyAtIndexAsEnumeration(const ExecutionContext *exe_ctx,
+                                          uint32_t idx,
+                                          int64_t fail_value) const;
+
+  bool SetPropertyAtIndexAsEnumeration(const ExecutionContext *exe_ctx,
+                                       uint32_t idx, int64_t new_value);
+
+  const FormatEntity::Entry *
+  GetPropertyAtIndexAsFormatEntity(const ExecutionContext *exe_ctx,
+                                   uint32_t idx);
+
+  const RegularExpression *
+  GetPropertyAtIndexAsOptionValueRegex(const ExecutionContext *exe_ctx,
+                                       uint32_t idx) const;
+
+  OptionValueSInt64 *
+  GetPropertyAtIndexAsOptionValueSInt64(const ExecutionContext *exe_ctx,
+                                        uint32_t idx) const;
+
+  int64_t GetPropertyAtIndexAsSInt64(const ExecutionContext *exe_ctx,
+                                     uint32_t idx, int64_t fail_value) const;
+
+  bool SetPropertyAtIndexAsSInt64(const ExecutionContext *exe_ctx, uint32_t idx,
+                                  int64_t new_value);
+
+  uint64_t GetPropertyAtIndexAsUInt64(const ExecutionContext *exe_ctx,
+                                      uint32_t idx, uint64_t fail_value) const;
+
+  bool SetPropertyAtIndexAsUInt64(const ExecutionContext *exe_ctx, uint32_t idx,
+                                  uint64_t new_value);
+
+  llvm::StringRef GetPropertyAtIndexAsString(const ExecutionContext *exe_ctx,
+                                         uint32_t idx,
+                                         llvm::StringRef fail_value) const;
+
+  bool SetPropertyAtIndexAsString(const ExecutionContext *exe_ctx, uint32_t idx,
+                                  llvm::StringRef new_value);
+
+  OptionValueString *
+  GetPropertyAtIndexAsOptionValueString(const ExecutionContext *exe_ctx,
+                                        bool will_modify, uint32_t idx) const;
+
+  OptionValueFileSpec *
+  GetPropertyAtIndexAsOptionValueFileSpec(const ExecutionContext *exe_ctx,
+                                          bool will_modify, uint32_t idx) const;
+
+  FileSpec GetPropertyAtIndexAsFileSpec(const ExecutionContext *exe_ctx,
+                                        uint32_t idx) const;
+
+  bool SetPropertyAtIndexAsFileSpec(const ExecutionContext *exe_ctx,
+                                    uint32_t idx, const FileSpec &file_spec);
+
+  OptionValuePathMappings *GetPropertyAtIndexAsOptionValuePathMappings(
+      const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
+
+  OptionValueFileSpecList *GetPropertyAtIndexAsOptionValueFileSpecList(
+      const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
+
+  void AppendProperty(ConstString name, ConstString desc,
+                      bool is_global, const lldb::OptionValueSP &value_sp);
+
+  lldb::OptionValuePropertiesSP GetSubProperty(const ExecutionContext *exe_ctx,
+                                               ConstString name);
+
+  void SetValueChangedCallback(uint32_t property_idx,
+                               OptionValueChangedCallback callback,
+                               void *baton);
+
+protected:
+  Property *ProtectedGetPropertyAtIndex(uint32_t idx) {
+    return ((idx < m_properties.size()) ? &m_properties[idx] : nullptr);
+  }
+
+  const Property *ProtectedGetPropertyAtIndex(uint32_t idx) const {
+    return ((idx < m_properties.size()) ? &m_properties[idx] : nullptr);
+  }
+
+  typedef UniqueCStringMap<size_t> NameToIndex;
+
+  ConstString m_name;
+  std::vector<Property> m_properties;
+  NameToIndex m_name_to_index;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueProperties_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueRegex.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueRegex.h
new file mode 100644
index 0000000..f5b2557
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueRegex.h
@@ -0,0 +1,66 @@
+//===-- OptionValueRegex.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueRegex_h_
+#define liblldb_OptionValueRegex_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Utility/RegularExpression.h"
+
+namespace lldb_private {
+
+class OptionValueRegex : public OptionValue {
+public:
+  OptionValueRegex(const char *value = nullptr)
+      : OptionValue(), m_regex(llvm::StringRef::withNullAsEmpty(value)) {}
+
+  ~OptionValueRegex() override = default;
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeRegex; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_regex.Clear();
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  // Subclass specific functions
+  const RegularExpression *GetCurrentValue() const {
+    return (m_regex.IsValid() ? &m_regex : nullptr);
+  }
+
+  void SetCurrentValue(const char *value) {
+    if (value && value[0])
+      m_regex.Compile(llvm::StringRef(value));
+    else
+      m_regex.Clear();
+  }
+
+  bool IsValid() const { return m_regex.IsValid(); }
+
+protected:
+  RegularExpression m_regex;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueRegex_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueSInt64.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueSInt64.h
new file mode 100644
index 0000000..c2e8ff4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueSInt64.h
@@ -0,0 +1,105 @@
+//===-- OptionValueSInt64.h --------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueSInt64_h_
+#define liblldb_OptionValueSInt64_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueSInt64 : public OptionValue {
+public:
+  OptionValueSInt64()
+      : OptionValue(), m_current_value(0), m_default_value(0),
+        m_min_value(INT64_MIN), m_max_value(INT64_MAX) {}
+
+  OptionValueSInt64(int64_t value)
+      : OptionValue(), m_current_value(value), m_default_value(value),
+        m_min_value(INT64_MIN), m_max_value(INT64_MAX) {}
+
+  OptionValueSInt64(int64_t current_value, int64_t default_value)
+      : OptionValue(), m_current_value(current_value),
+        m_default_value(default_value), m_min_value(INT64_MIN),
+        m_max_value(INT64_MAX) {}
+
+  OptionValueSInt64(const OptionValueSInt64 &rhs)
+      : OptionValue(rhs), m_current_value(rhs.m_current_value),
+        m_default_value(rhs.m_default_value), m_min_value(rhs.m_min_value),
+        m_max_value(rhs.m_max_value) {}
+
+  ~OptionValueSInt64() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeSInt64; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  // Subclass specific functions
+
+  const int64_t &operator=(int64_t value) {
+    m_current_value = value;
+    return m_current_value;
+  }
+
+  int64_t GetCurrentValue() const { return m_current_value; }
+
+  int64_t GetDefaultValue() const { return m_default_value; }
+
+  bool SetCurrentValue(int64_t value) {
+    if (value >= m_min_value && value <= m_max_value) {
+      m_current_value = value;
+      return true;
+    }
+    return false;
+  }
+
+  bool SetDefaultValue(int64_t value) {
+    if (value >= m_min_value && value <= m_max_value) {
+      m_default_value = value;
+      return true;
+    }
+    return false;
+  }
+
+  void SetMinimumValue(int64_t v) { m_min_value = v; }
+
+  int64_t GetMinimumValue() const { return m_min_value; }
+
+  void SetMaximumValue(int64_t v) { m_max_value = v; }
+
+  int64_t GetMaximumValue() const { return m_max_value; }
+
+protected:
+  int64_t m_current_value;
+  int64_t m_default_value;
+  int64_t m_min_value;
+  int64_t m_max_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueSInt64_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueString.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueString.h
new file mode 100644
index 0000000..d9e76d8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueString.h
@@ -0,0 +1,139 @@
+//===-- OptionValueString.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueString_h_
+#define liblldb_OptionValueString_h_
+
+#include <string>
+
+#include "lldb/Utility/Flags.h"
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueString : public OptionValue {
+public:
+  typedef Status (*ValidatorCallback)(const char *string, void *baton);
+
+  enum Options { eOptionEncodeCharacterEscapeSequences = (1u << 0) };
+
+  OptionValueString()
+      : OptionValue(), m_current_value(), m_default_value(), m_options(),
+        m_validator(), m_validator_baton() {}
+
+  OptionValueString(ValidatorCallback validator, void *baton = nullptr)
+      : OptionValue(), m_current_value(), m_default_value(), m_options(),
+        m_validator(validator), m_validator_baton(baton) {}
+
+  OptionValueString(const char *value)
+      : OptionValue(), m_current_value(), m_default_value(), m_options(),
+        m_validator(), m_validator_baton() {
+    if (value && value[0]) {
+      m_current_value.assign(value);
+      m_default_value.assign(value);
+    }
+  }
+
+  OptionValueString(const char *current_value, const char *default_value)
+      : OptionValue(), m_current_value(), m_default_value(), m_options(),
+        m_validator(), m_validator_baton() {
+    if (current_value && current_value[0])
+      m_current_value.assign(current_value);
+    if (default_value && default_value[0])
+      m_default_value.assign(default_value);
+  }
+
+  OptionValueString(const char *value, ValidatorCallback validator,
+                    void *baton = nullptr)
+      : OptionValue(), m_current_value(), m_default_value(), m_options(),
+        m_validator(validator), m_validator_baton(baton) {
+    if (value && value[0]) {
+      m_current_value.assign(value);
+      m_default_value.assign(value);
+    }
+  }
+
+  OptionValueString(const char *current_value, const char *default_value,
+                    ValidatorCallback validator, void *baton = nullptr)
+      : OptionValue(), m_current_value(), m_default_value(), m_options(),
+        m_validator(validator), m_validator_baton(baton) {
+    if (current_value && current_value[0])
+      m_current_value.assign(current_value);
+    if (default_value && default_value[0])
+      m_default_value.assign(default_value);
+  }
+
+  ~OptionValueString() override = default;
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeString; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  // Subclass specific functions
+
+  Flags &GetOptions() { return m_options; }
+
+  const Flags &GetOptions() const { return m_options; }
+
+  const char *operator=(const char *value) {
+    SetCurrentValue(llvm::StringRef::withNullAsEmpty(value));
+    return m_current_value.c_str();
+  }
+
+  const char *GetCurrentValue() const { return m_current_value.c_str(); }
+  llvm::StringRef GetCurrentValueAsRef() const { return m_current_value; }
+
+  const char *GetDefaultValue() const { return m_default_value.c_str(); }
+  llvm::StringRef GetDefaultValueAsRef() const { return m_default_value; }
+
+  Status SetCurrentValue(const char *) = delete;
+  Status SetCurrentValue(llvm::StringRef value);
+
+  Status AppendToCurrentValue(const char *value);
+
+  void SetDefaultValue(const char *value) {
+    if (value && value[0])
+      m_default_value.assign(value);
+    else
+      m_default_value.clear();
+  }
+
+  bool IsCurrentValueEmpty() const { return m_current_value.empty(); }
+
+  bool IsDefaultValueEmpty() const { return m_default_value.empty(); }
+
+protected:
+  std::string m_current_value;
+  std::string m_default_value;
+  Flags m_options;
+  ValidatorCallback m_validator;
+  void *m_validator_baton;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueString_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueUInt64.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueUInt64.h
new file mode 100644
index 0000000..5978cdb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueUInt64.h
@@ -0,0 +1,82 @@
+//===-- OptionValueUInt64.h --------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueUInt64_h_
+#define liblldb_OptionValueUInt64_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueUInt64 : public OptionValue {
+public:
+  OptionValueUInt64() : OptionValue(), m_current_value(0), m_default_value(0) {}
+
+  OptionValueUInt64(uint64_t value)
+      : OptionValue(), m_current_value(value), m_default_value(value) {}
+
+  OptionValueUInt64(uint64_t current_value, uint64_t default_value)
+      : OptionValue(), m_current_value(current_value),
+        m_default_value(default_value) {}
+
+  ~OptionValueUInt64() override {}
+
+  // Decode a uint64_t from "value_cstr" return a OptionValueUInt64 object
+  // inside of a lldb::OptionValueSP object if all goes well. If the string
+  // isn't a uint64_t value or any other error occurs, return an empty
+  // lldb::OptionValueSP and fill error in with the correct stuff.
+  static lldb::OptionValueSP Create(const char *, Status &) = delete;
+  static lldb::OptionValueSP Create(llvm::StringRef value_str, Status &error);
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeUInt64; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_current_value = m_default_value;
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  // Subclass specific functions
+
+  const uint64_t &operator=(uint64_t value) {
+    m_current_value = value;
+    return m_current_value;
+  }
+
+  operator uint64_t() const { return m_current_value; }
+
+  uint64_t GetCurrentValue() const { return m_current_value; }
+
+  uint64_t GetDefaultValue() const { return m_default_value; }
+
+  void SetCurrentValue(uint64_t value) { m_current_value = value; }
+
+  void SetDefaultValue(uint64_t value) { m_default_value = value; }
+
+protected:
+  uint64_t m_current_value;
+  uint64_t m_default_value;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueUInt64_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValueUUID.h b/linux-x64/clang/include/lldb/Interpreter/OptionValueUUID.h
new file mode 100644
index 0000000..7273e35
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValueUUID.h
@@ -0,0 +1,64 @@
+//===-- OptionValueUUID.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValueUUID_h_
+#define liblldb_OptionValueUUID_h_
+
+#include "lldb/Utility/UUID.h"
+#include "lldb/Interpreter/OptionValue.h"
+
+namespace lldb_private {
+
+class OptionValueUUID : public OptionValue {
+public:
+  OptionValueUUID() : OptionValue(), m_uuid() {}
+
+  OptionValueUUID(const UUID &uuid) : OptionValue(), m_uuid(uuid) {}
+
+  ~OptionValueUUID() override {}
+
+  // Virtual subclass pure virtual overrides
+
+  OptionValue::Type GetType() const override { return eTypeUUID; }
+
+  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
+                 uint32_t dump_mask) override;
+
+  Status
+  SetValueFromString(llvm::StringRef value,
+                     VarSetOperationType op = eVarSetOperationAssign) override;
+  Status
+  SetValueFromString(const char *,
+                     VarSetOperationType = eVarSetOperationAssign) = delete;
+
+  bool Clear() override {
+    m_uuid.Clear();
+    m_value_was_set = false;
+    return true;
+  }
+
+  lldb::OptionValueSP DeepCopy() const override;
+
+  // Subclass specific functions
+
+  UUID &GetCurrentValue() { return m_uuid; }
+
+  const UUID &GetCurrentValue() const { return m_uuid; }
+
+  void SetCurrentValue(const UUID &value) { m_uuid = value; }
+
+  size_t AutoComplete(CommandInterpreter &interpreter,
+                      CompletionRequest &request) override;
+
+protected:
+  UUID m_uuid;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OptionValueUUID_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/OptionValues.h b/linux-x64/clang/include/lldb/Interpreter/OptionValues.h
new file mode 100644
index 0000000..d90b286
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/OptionValues.h
@@ -0,0 +1,33 @@
+//===-- OptionValues.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OptionValues_h_
+#define liblldb_OptionValues_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Interpreter/OptionValueArch.h"
+#include "lldb/Interpreter/OptionValueArgs.h"
+#include "lldb/Interpreter/OptionValueArray.h"
+#include "lldb/Interpreter/OptionValueBoolean.h"
+#include "lldb/Interpreter/OptionValueChar.h"
+#include "lldb/Interpreter/OptionValueDictionary.h"
+#include "lldb/Interpreter/OptionValueEnumeration.h"
+#include "lldb/Interpreter/OptionValueFileSpec.h"
+#include "lldb/Interpreter/OptionValueFileSpecList.h"
+#include "lldb/Interpreter/OptionValueFormat.h"
+#include "lldb/Interpreter/OptionValueFormatEntity.h"
+#include "lldb/Interpreter/OptionValueLanguage.h"
+#include "lldb/Interpreter/OptionValuePathMappings.h"
+#include "lldb/Interpreter/OptionValueProperties.h"
+#include "lldb/Interpreter/OptionValueRegex.h"
+#include "lldb/Interpreter/OptionValueSInt64.h"
+#include "lldb/Interpreter/OptionValueString.h"
+#include "lldb/Interpreter/OptionValueUInt64.h"
+#include "lldb/Interpreter/OptionValueUUID.h"
+
+#endif // liblldb_OptionValues_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/Options.h b/linux-x64/clang/include/lldb/Interpreter/Options.h
new file mode 100644
index 0000000..a008d51
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/Options.h
@@ -0,0 +1,338 @@
+//===-- Options.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Options_h_
+#define liblldb_Options_h_
+
+#include <set>
+#include <vector>
+
+#include "lldb/Utility/Args.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+
+namespace lldb_private {
+
+struct Option;
+
+typedef std::vector<std::tuple<std::string, int, std::string>> OptionArgVector;
+typedef std::shared_ptr<OptionArgVector> OptionArgVectorSP;
+
+struct OptionArgElement {
+  enum { eUnrecognizedArg = -1, eBareDash = -2, eBareDoubleDash = -3 };
+
+  OptionArgElement(int defs_index, int pos, int arg_pos)
+      : opt_defs_index(defs_index), opt_pos(pos), opt_arg_pos(arg_pos) {}
+
+  int opt_defs_index;
+  int opt_pos;
+  int opt_arg_pos;
+};
+
+typedef std::vector<OptionArgElement> OptionElementVector;
+
+static inline bool isprint8(int ch) {
+  if (ch & 0xffffff00u)
+    return false;
+  return isprint(ch);
+}
+
+/// \class Options Options.h "lldb/Interpreter/Options.h"
+/// A command line option parsing protocol class.
+///
+/// Options is designed to be subclassed to contain all needed options for a
+/// given command. The options can be parsed by calling the Parse function.
+///
+/// The options are specified using the format defined for the libc options
+/// parsing function getopt_long_only: \code
+///     #include <getopt.h>
+///     int getopt_long_only(int argc, char * const *argv, const char
+///     *optstring, const struct option *longopts, int *longindex);
+/// \endcode
+///
+class Options {
+public:
+  Options();
+
+  virtual ~Options();
+
+  void BuildGetoptTable();
+
+  void BuildValidOptionSets();
+
+  uint32_t NumCommandOptions();
+
+  /// Get the option definitions to use when parsing Args options.
+  ///
+  /// \see Args::ParseOptions (Options&)
+  /// \see man getopt_long_only
+  Option *GetLongOptions();
+
+  // This gets passed the short option as an integer...
+  void OptionSeen(int short_option);
+
+  bool VerifyOptions(CommandReturnObject &result);
+
+  // Verify that the options given are in the options table and can be used
+  // together, but there may be some required options that are missing (used to
+  // verify options that get folded into command aliases).
+  bool VerifyPartialOptions(CommandReturnObject &result);
+
+  void OutputFormattedUsageText(Stream &strm,
+                                const OptionDefinition &option_def,
+                                uint32_t output_max_columns);
+
+  void GenerateOptionUsage(Stream &strm, CommandObject *cmd,
+                           uint32_t screen_width);
+
+  bool SupportsLongOption(const char *long_option);
+
+  // The following two pure virtual functions must be defined by every class
+  // that inherits from this class.
+
+  virtual llvm::ArrayRef<OptionDefinition> GetDefinitions() {
+    return llvm::ArrayRef<OptionDefinition>();
+  }
+
+  // Call this prior to parsing any options. This call will call the subclass
+  // OptionParsingStarting() and will avoid the need for all
+  // OptionParsingStarting() function instances from having to call the
+  // Option::OptionParsingStarting() like they did before. This was error prone
+  // and subclasses shouldn't have to do it.
+  void NotifyOptionParsingStarting(ExecutionContext *execution_context);
+
+  /// Parse the provided arguments.
+  ///
+  /// The parsed options are set via calls to SetOptionValue. In case of a
+  /// successful parse, the function returns a copy of the input arguments
+  /// with the parsed options removed. Otherwise, it returns an error.
+  ///
+  /// param[in] platform_sp
+  ///   The platform used for option validation.  This is necessary
+  ///   because an empty execution_context is not enough to get us
+  ///   to a reasonable platform.  If the platform isn't given,
+  ///   we'll try to get it from the execution context.  If we can't
+  ///   get it from the execution context, we'll skip validation.
+  ///
+  /// param[in] require_validation
+  ///   When true, it will fail option parsing if validation could
+  ///   not occur due to not having a platform.
+  llvm::Expected<Args> Parse(const Args &args,
+                             ExecutionContext *execution_context,
+                             lldb::PlatformSP platform_sp,
+                             bool require_validation);
+
+  llvm::Expected<Args> ParseAlias(const Args &args,
+                                  OptionArgVector *option_arg_vector,
+                                  std::string &input_line);
+
+  OptionElementVector ParseForCompletion(const Args &args,
+                                         uint32_t cursor_index);
+
+  Status NotifyOptionParsingFinished(ExecutionContext *execution_context);
+
+  /// Set the value of an option.
+  ///
+  /// \param[in] option_idx
+  ///     The index into the "struct option" array that was returned
+  ///     by Options::GetLongOptions().
+  ///
+  /// \param[in] option_arg
+  ///     The argument value for the option that the user entered, or
+  ///     nullptr if there is no argument for the current option.
+  ///
+  /// \param[in] execution_context
+  ///     The execution context to use for evaluating the option.
+  ///     May be nullptr if the option is to be evaluated outside any
+  ///     particular context.
+  ///
+  /// \see Args::ParseOptions (Options&)
+  /// \see man getopt_long_only
+  virtual Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
+                                ExecutionContext *execution_context) = 0;
+
+  /// Handles the generic bits of figuring out whether we are in an option,
+  /// and if so completing it.
+  ///
+  /// \param[in/out] request
+  ///    The completion request that we need to act upon.
+  ///
+  /// \param[in] interpreter
+  ///     The interpreter that's doing the completing.
+  ///
+  /// FIXME: This is the wrong return value, since we also need to
+  /// make a distinction between total number of matches, and the window the
+  /// user wants returned.
+  ///
+  /// \return
+  ///     \btrue if we were in an option, \bfalse otherwise.
+  bool HandleOptionCompletion(lldb_private::CompletionRequest &request,
+                              OptionElementVector &option_map,
+                              CommandInterpreter &interpreter);
+
+  /// Handles the generic bits of figuring out whether we are in an option,
+  /// and if so completing it.
+  ///
+  /// \param[in/out] request
+  ///    The completion request that we need to act upon.
+  ///
+  /// \param[in] interpreter
+  ///    The command interpreter doing the completion.
+  ///
+  /// FIXME: This is the wrong return value, since we also need to
+  /// make a distinction between total number of matches, and the window the
+  /// user wants returned.
+  ///
+  /// \return
+  ///     \btrue if we were in an option, \bfalse otherwise.
+  virtual bool
+  HandleOptionArgumentCompletion(lldb_private::CompletionRequest &request,
+                                 OptionElementVector &opt_element_vector,
+                                 int opt_element_index,
+                                 CommandInterpreter &interpreter);
+
+protected:
+  // This is a set of options expressed as indexes into the options table for
+  // this Option.
+  typedef std::set<int> OptionSet;
+  typedef std::vector<OptionSet> OptionSetVector;
+
+  std::vector<Option> m_getopt_table;
+  OptionSet m_seen_options;
+  OptionSetVector m_required_options;
+  OptionSetVector m_optional_options;
+
+  OptionSetVector &GetRequiredOptions() {
+    BuildValidOptionSets();
+    return m_required_options;
+  }
+
+  OptionSetVector &GetOptionalOptions() {
+    BuildValidOptionSets();
+    return m_optional_options;
+  }
+
+  bool IsASubset(const OptionSet &set_a, const OptionSet &set_b);
+
+  size_t OptionsSetDiff(const OptionSet &set_a, const OptionSet &set_b,
+                        OptionSet &diffs);
+
+  void OptionsSetUnion(const OptionSet &set_a, const OptionSet &set_b,
+                       OptionSet &union_set);
+
+  // Subclasses must reset their option values prior to starting a new option
+  // parse. Each subclass must override this function and revert all option
+  // settings to default values.
+  virtual void OptionParsingStarting(ExecutionContext *execution_context) = 0;
+
+  virtual Status OptionParsingFinished(ExecutionContext *execution_context) {
+    // If subclasses need to know when the options are done being parsed they
+    // can implement this function to do extra checking
+    Status error;
+    return error;
+  }
+};
+
+class OptionGroup {
+public:
+  OptionGroup() = default;
+
+  virtual ~OptionGroup() = default;
+
+  virtual llvm::ArrayRef<OptionDefinition> GetDefinitions() = 0;
+
+  virtual Status SetOptionValue(uint32_t option_idx,
+                                llvm::StringRef option_value,
+                                ExecutionContext *execution_context) = 0;
+
+  virtual void OptionParsingStarting(ExecutionContext *execution_context) = 0;
+
+  virtual Status OptionParsingFinished(ExecutionContext *execution_context) {
+    // If subclasses need to know when the options are done being parsed they
+    // can implement this function to do extra checking
+    Status error;
+    return error;
+  }
+};
+
+class OptionGroupOptions : public Options {
+public:
+  OptionGroupOptions()
+      : Options(), m_option_defs(), m_option_infos(), m_did_finalize(false) {}
+
+  ~OptionGroupOptions() override = default;
+
+  /// Append options from a OptionGroup class.
+  ///
+  /// Append all options from \a group using the exact same option groups that
+  /// each option is defined with.
+  ///
+  /// \param[in] group
+  ///     A group of options to take option values from and copy their
+  ///     definitions into this class.
+  void Append(OptionGroup *group);
+
+  /// Append options from a OptionGroup class.
+  ///
+  /// Append options from \a group that have a usage mask that has any bits in
+  /// "src_mask" set. After the option definition is copied into the options
+  /// definitions in this class, set the usage_mask to "dst_mask".
+  ///
+  /// \param[in] group
+  ///     A group of options to take option values from and copy their
+  ///     definitions into this class.
+  ///
+  /// \param[in] src_mask
+  ///     When copying options from \a group, you might only want some of
+  ///     the options to be appended to this group. This mask allows you
+  ///     to control which options from \a group get added. It also allows
+  ///     you to specify the same options from \a group multiple times
+  ///     for different option sets.
+  ///
+  /// \param[in] dst_mask
+  ///     Set the usage mask for any copied options to \a dst_mask after
+  ///     copying the option definition.
+  void Append(OptionGroup *group, uint32_t src_mask, uint32_t dst_mask);
+
+  void Finalize();
+
+  bool DidFinalize() { return m_did_finalize; }
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
+                        ExecutionContext *execution_context) override;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  Status OptionParsingFinished(ExecutionContext *execution_context) override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+    assert(m_did_finalize);
+    return m_option_defs;
+  }
+
+  const OptionGroup *GetGroupWithOption(char short_opt);
+
+  struct OptionInfo {
+    OptionInfo(OptionGroup *g, uint32_t i) : option_group(g), option_index(i) {}
+    OptionGroup *option_group; // The group that this option came from
+    uint32_t option_index;     // The original option index from the OptionGroup
+  };
+  typedef std::vector<OptionInfo> OptionInfos;
+
+  std::vector<OptionDefinition> m_option_defs;
+  OptionInfos m_option_infos;
+  bool m_did_finalize;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Options_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/Property.h b/linux-x64/clang/include/lldb/Interpreter/Property.h
new file mode 100644
index 0000000..797aee4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/Property.h
@@ -0,0 +1,79 @@
+//===-- Property.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Property_h_
+#define liblldb_Property_h_
+
+#include "lldb/Interpreter/OptionValue.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Flags.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-private-types.h"
+
+#include <string>
+
+namespace lldb_private {
+
+// A structure that can be used to create a global table for all properties.
+// Property class instances can be constructed using one of these.
+struct PropertyDefinition {
+  const char *name;
+  OptionValue::Type type;
+  bool global; // false == this setting is a global setting by default
+  uintptr_t default_uint_value;
+  const char *default_cstr_value;
+  OptionEnumValues enum_values;
+  const char *description;
+};
+
+using PropertyDefinitions = llvm::ArrayRef<PropertyDefinition>;
+
+class Property {
+public:
+  Property(const PropertyDefinition &definition);
+
+  Property(ConstString name, ConstString desc, bool is_global,
+           const lldb::OptionValueSP &value_sp);
+
+  llvm::StringRef GetName() const { return m_name.GetStringRef(); }
+  llvm::StringRef GetDescription() const {
+    return m_description.GetStringRef();
+  }
+
+  const lldb::OptionValueSP &GetValue() const { return m_value_sp; }
+
+  void SetOptionValue(const lldb::OptionValueSP &value_sp) {
+    m_value_sp = value_sp;
+  }
+
+  bool IsValid() const { return (bool)m_value_sp; }
+
+  bool IsGlobal() const { return m_is_global; }
+
+  void Dump(const ExecutionContext *exe_ctx, Stream &strm,
+            uint32_t dump_mask) const;
+
+  bool DumpQualifiedName(Stream &strm) const;
+
+  void DumpDescription(CommandInterpreter &interpreter, Stream &strm,
+                       uint32_t output_width,
+                       bool display_qualified_name) const;
+
+  void SetValueChangedCallback(OptionValueChangedCallback callback,
+                               void *baton);
+
+protected:
+  ConstString m_name;
+  ConstString m_description;
+  lldb::OptionValueSP m_value_sp;
+  bool m_is_global;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Property_h_
diff --git a/linux-x64/clang/include/lldb/Interpreter/ScriptInterpreter.h b/linux-x64/clang/include/lldb/Interpreter/ScriptInterpreter.h
new file mode 100644
index 0000000..c8fa390
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Interpreter/ScriptInterpreter.h
@@ -0,0 +1,477 @@
+//===-- ScriptInterpreter.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ScriptInterpreter_h_
+#define liblldb_ScriptInterpreter_h_
+
+#include "lldb/lldb-private.h"
+
+#include "lldb/Breakpoint/BreakpointOptions.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/StructuredData.h"
+
+#include "lldb/Host/PseudoTerminal.h"
+
+namespace lldb_private {
+
+class ScriptInterpreterLocker {
+public:
+  ScriptInterpreterLocker() = default;
+
+  virtual ~ScriptInterpreterLocker() = default;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ScriptInterpreterLocker);
+};
+
+class ScriptInterpreter : public PluginInterface {
+public:
+  enum ScriptReturnType {
+    eScriptReturnTypeCharPtr,
+    eScriptReturnTypeBool,
+    eScriptReturnTypeShortInt,
+    eScriptReturnTypeShortIntUnsigned,
+    eScriptReturnTypeInt,
+    eScriptReturnTypeIntUnsigned,
+    eScriptReturnTypeLongInt,
+    eScriptReturnTypeLongIntUnsigned,
+    eScriptReturnTypeLongLong,
+    eScriptReturnTypeLongLongUnsigned,
+    eScriptReturnTypeFloat,
+    eScriptReturnTypeDouble,
+    eScriptReturnTypeChar,
+    eScriptReturnTypeCharStrOrNone,
+    eScriptReturnTypeOpaqueObject
+  };
+
+  ScriptInterpreter(Debugger &debugger, lldb::ScriptLanguage script_lang);
+
+  ~ScriptInterpreter() override;
+
+  struct ExecuteScriptOptions {
+  public:
+    ExecuteScriptOptions()
+        : m_enable_io(true), m_set_lldb_globals(true), m_maskout_errors(true) {}
+
+    bool GetEnableIO() const { return m_enable_io; }
+
+    bool GetSetLLDBGlobals() const { return m_set_lldb_globals; }
+
+    bool GetMaskoutErrors() const { return m_maskout_errors; }
+
+    ExecuteScriptOptions &SetEnableIO(bool enable) {
+      m_enable_io = enable;
+      return *this;
+    }
+
+    ExecuteScriptOptions &SetSetLLDBGlobals(bool set) {
+      m_set_lldb_globals = set;
+      return *this;
+    }
+
+    ExecuteScriptOptions &SetMaskoutErrors(bool maskout) {
+      m_maskout_errors = maskout;
+      return *this;
+    }
+
+  private:
+    bool m_enable_io;
+    bool m_set_lldb_globals;
+    bool m_maskout_errors;
+  };
+
+  virtual bool Interrupt() { return false; }
+
+  virtual bool ExecuteOneLine(
+      llvm::StringRef command, CommandReturnObject *result,
+      const ExecuteScriptOptions &options = ExecuteScriptOptions()) = 0;
+
+  virtual void ExecuteInterpreterLoop() = 0;
+
+  virtual bool ExecuteOneLineWithReturn(
+      llvm::StringRef in_string, ScriptReturnType return_type, void *ret_value,
+      const ExecuteScriptOptions &options = ExecuteScriptOptions()) {
+    return true;
+  }
+
+  virtual Status ExecuteMultipleLines(
+      const char *in_string,
+      const ExecuteScriptOptions &options = ExecuteScriptOptions()) {
+    Status error;
+    error.SetErrorString("not implemented");
+    return error;
+  }
+
+  virtual Status
+  ExportFunctionDefinitionToInterpreter(StringList &function_def) {
+    Status error;
+    error.SetErrorString("not implemented");
+    return error;
+  }
+
+  virtual Status GenerateBreakpointCommandCallbackData(StringList &input,
+                                                       std::string &output) {
+    Status error;
+    error.SetErrorString("not implemented");
+    return error;
+  }
+
+  virtual bool GenerateWatchpointCommandCallbackData(StringList &input,
+                                                     std::string &output) {
+    return false;
+  }
+
+  virtual bool GenerateTypeScriptFunction(const char *oneliner,
+                                          std::string &output,
+                                          const void *name_token = nullptr) {
+    return false;
+  }
+
+  virtual bool GenerateTypeScriptFunction(StringList &input,
+                                          std::string &output,
+                                          const void *name_token = nullptr) {
+    return false;
+  }
+
+  virtual bool GenerateScriptAliasFunction(StringList &input,
+                                           std::string &output) {
+    return false;
+  }
+
+  virtual bool GenerateTypeSynthClass(StringList &input, std::string &output,
+                                      const void *name_token = nullptr) {
+    return false;
+  }
+
+  virtual bool GenerateTypeSynthClass(const char *oneliner, std::string &output,
+                                      const void *name_token = nullptr) {
+    return false;
+  }
+
+  virtual StructuredData::ObjectSP
+  CreateSyntheticScriptedProvider(const char *class_name,
+                                  lldb::ValueObjectSP valobj) {
+    return StructuredData::ObjectSP();
+  }
+
+  virtual StructuredData::GenericSP
+  CreateScriptCommandObject(const char *class_name) {
+    return StructuredData::GenericSP();
+  }
+
+  virtual StructuredData::GenericSP
+  CreateFrameRecognizer(const char *class_name) {
+    return StructuredData::GenericSP();
+  }
+
+  virtual lldb::ValueObjectListSP GetRecognizedArguments(
+      const StructuredData::ObjectSP &implementor,
+      lldb::StackFrameSP frame_sp) {
+    return lldb::ValueObjectListSP();
+  }
+
+  virtual StructuredData::GenericSP
+  OSPlugin_CreatePluginObject(const char *class_name,
+                              lldb::ProcessSP process_sp) {
+    return StructuredData::GenericSP();
+  }
+
+  virtual StructuredData::DictionarySP
+  OSPlugin_RegisterInfo(StructuredData::ObjectSP os_plugin_object_sp) {
+    return StructuredData::DictionarySP();
+  }
+
+  virtual StructuredData::ArraySP
+  OSPlugin_ThreadsInfo(StructuredData::ObjectSP os_plugin_object_sp) {
+    return StructuredData::ArraySP();
+  }
+
+  virtual StructuredData::StringSP
+  OSPlugin_RegisterContextData(StructuredData::ObjectSP os_plugin_object_sp,
+                               lldb::tid_t thread_id) {
+    return StructuredData::StringSP();
+  }
+
+  virtual StructuredData::DictionarySP
+  OSPlugin_CreateThread(StructuredData::ObjectSP os_plugin_object_sp,
+                        lldb::tid_t tid, lldb::addr_t context) {
+    return StructuredData::DictionarySP();
+  }
+
+  virtual StructuredData::ObjectSP
+  CreateScriptedThreadPlan(const char *class_name,
+                           lldb::ThreadPlanSP thread_plan_sp) {
+    return StructuredData::ObjectSP();
+  }
+
+  virtual bool
+  ScriptedThreadPlanExplainsStop(StructuredData::ObjectSP implementor_sp,
+                                 Event *event, bool &script_error) {
+    script_error = true;
+    return true;
+  }
+
+  virtual bool
+  ScriptedThreadPlanShouldStop(StructuredData::ObjectSP implementor_sp,
+                               Event *event, bool &script_error) {
+    script_error = true;
+    return true;
+  }
+
+  virtual bool
+  ScriptedThreadPlanIsStale(StructuredData::ObjectSP implementor_sp,
+                            bool &script_error) {
+    script_error = true;
+    return true;
+  }
+
+  virtual lldb::StateType
+  ScriptedThreadPlanGetRunState(StructuredData::ObjectSP implementor_sp,
+                                bool &script_error) {
+    script_error = true;
+    return lldb::eStateStepping;
+  }
+
+  virtual StructuredData::GenericSP
+  CreateScriptedBreakpointResolver(const char *class_name,
+                                   StructuredDataImpl *args_data,
+                                   lldb::BreakpointSP &bkpt_sp) {
+    return StructuredData::GenericSP();
+  }
+
+  virtual bool
+  ScriptedBreakpointResolverSearchCallback(StructuredData::GenericSP implementor_sp,
+                                           SymbolContext *sym_ctx)
+  {
+    return false;
+  }
+
+  virtual lldb::SearchDepth
+  ScriptedBreakpointResolverSearchDepth(StructuredData::GenericSP implementor_sp)
+  {
+    return lldb::eSearchDepthModule;
+  }
+
+  virtual StructuredData::ObjectSP
+  LoadPluginModule(const FileSpec &file_spec, lldb_private::Status &error) {
+    return StructuredData::ObjectSP();
+  }
+
+  virtual StructuredData::DictionarySP
+  GetDynamicSettings(StructuredData::ObjectSP plugin_module_sp, Target *target,
+                     const char *setting_name, lldb_private::Status &error) {
+    return StructuredData::DictionarySP();
+  }
+
+  virtual Status GenerateFunction(const char *signature,
+                                  const StringList &input) {
+    Status error;
+    error.SetErrorString("unimplemented");
+    return error;
+  }
+
+  virtual void CollectDataForBreakpointCommandCallback(
+      std::vector<BreakpointOptions *> &options, CommandReturnObject &result);
+
+  virtual void
+  CollectDataForWatchpointCommandCallback(WatchpointOptions *wp_options,
+                                          CommandReturnObject &result);
+
+  /// Set the specified text as the callback for the breakpoint.
+  Status
+  SetBreakpointCommandCallback(std::vector<BreakpointOptions *> &bp_options_vec,
+                               const char *callback_text);
+
+  virtual Status SetBreakpointCommandCallback(BreakpointOptions *bp_options,
+                                              const char *callback_text) {
+    Status error;
+    error.SetErrorString("unimplemented");
+    return error;
+  }
+
+  /// This one is for deserialization:
+  virtual Status SetBreakpointCommandCallback(
+      BreakpointOptions *bp_options,
+      std::unique_ptr<BreakpointOptions::CommandData> &data_up) {
+    Status error;
+    error.SetErrorString("unimplemented");
+    return error;
+  }
+
+  void SetBreakpointCommandCallbackFunction(
+      std::vector<BreakpointOptions *> &bp_options_vec,
+      const char *function_name);
+
+  /// Set a one-liner as the callback for the breakpoint.
+  virtual void
+  SetBreakpointCommandCallbackFunction(BreakpointOptions *bp_options,
+                                       const char *function_name) {}
+
+  /// Set a one-liner as the callback for the watchpoint.
+  virtual void SetWatchpointCommandCallback(WatchpointOptions *wp_options,
+                                            const char *oneliner) {}
+
+  virtual bool GetScriptedSummary(const char *function_name,
+                                  lldb::ValueObjectSP valobj,
+                                  StructuredData::ObjectSP &callee_wrapper_sp,
+                                  const TypeSummaryOptions &options,
+                                  std::string &retval) {
+    return false;
+  }
+
+  virtual void Clear() {
+    // Clean up any ref counts to SBObjects that might be in global variables
+  }
+
+  virtual size_t
+  CalculateNumChildren(const StructuredData::ObjectSP &implementor,
+                       uint32_t max) {
+    return 0;
+  }
+
+  virtual lldb::ValueObjectSP
+  GetChildAtIndex(const StructuredData::ObjectSP &implementor, uint32_t idx) {
+    return lldb::ValueObjectSP();
+  }
+
+  virtual int
+  GetIndexOfChildWithName(const StructuredData::ObjectSP &implementor,
+                          const char *child_name) {
+    return UINT32_MAX;
+  }
+
+  virtual bool
+  UpdateSynthProviderInstance(const StructuredData::ObjectSP &implementor) {
+    return false;
+  }
+
+  virtual bool MightHaveChildrenSynthProviderInstance(
+      const StructuredData::ObjectSP &implementor) {
+    return true;
+  }
+
+  virtual lldb::ValueObjectSP
+  GetSyntheticValue(const StructuredData::ObjectSP &implementor) {
+    return nullptr;
+  }
+
+  virtual ConstString
+  GetSyntheticTypeName(const StructuredData::ObjectSP &implementor) {
+    return ConstString();
+  }
+
+  virtual bool
+  RunScriptBasedCommand(const char *impl_function, llvm::StringRef args,
+                        ScriptedCommandSynchronicity synchronicity,
+                        lldb_private::CommandReturnObject &cmd_retobj,
+                        Status &error,
+                        const lldb_private::ExecutionContext &exe_ctx) {
+    return false;
+  }
+
+  virtual bool RunScriptBasedCommand(
+      StructuredData::GenericSP impl_obj_sp, llvm::StringRef args,
+      ScriptedCommandSynchronicity synchronicity,
+      lldb_private::CommandReturnObject &cmd_retobj, Status &error,
+      const lldb_private::ExecutionContext &exe_ctx) {
+    return false;
+  }
+
+  virtual bool RunScriptFormatKeyword(const char *impl_function,
+                                      Process *process, std::string &output,
+                                      Status &error) {
+    error.SetErrorString("unimplemented");
+    return false;
+  }
+
+  virtual bool RunScriptFormatKeyword(const char *impl_function, Thread *thread,
+                                      std::string &output, Status &error) {
+    error.SetErrorString("unimplemented");
+    return false;
+  }
+
+  virtual bool RunScriptFormatKeyword(const char *impl_function, Target *target,
+                                      std::string &output, Status &error) {
+    error.SetErrorString("unimplemented");
+    return false;
+  }
+
+  virtual bool RunScriptFormatKeyword(const char *impl_function,
+                                      StackFrame *frame, std::string &output,
+                                      Status &error) {
+    error.SetErrorString("unimplemented");
+    return false;
+  }
+
+  virtual bool RunScriptFormatKeyword(const char *impl_function,
+                                      ValueObject *value, std::string &output,
+                                      Status &error) {
+    error.SetErrorString("unimplemented");
+    return false;
+  }
+
+  virtual bool GetDocumentationForItem(const char *item, std::string &dest) {
+    dest.clear();
+    return false;
+  }
+
+  virtual bool
+  GetShortHelpForCommandObject(StructuredData::GenericSP cmd_obj_sp,
+                               std::string &dest) {
+    dest.clear();
+    return false;
+  }
+
+  virtual uint32_t
+  GetFlagsForCommandObject(StructuredData::GenericSP cmd_obj_sp) {
+    return 0;
+  }
+
+  virtual bool GetLongHelpForCommandObject(StructuredData::GenericSP cmd_obj_sp,
+                                           std::string &dest) {
+    dest.clear();
+    return false;
+  }
+
+  virtual bool CheckObjectExists(const char *name) { return false; }
+
+  virtual bool
+  LoadScriptingModule(const char *filename, bool can_reload, bool init_session,
+                      lldb_private::Status &error,
+                      StructuredData::ObjectSP *module_sp = nullptr) {
+    error.SetErrorString("loading unimplemented");
+    return false;
+  }
+
+  virtual bool IsReservedWord(const char *word) { return false; }
+
+  virtual std::unique_ptr<ScriptInterpreterLocker> AcquireInterpreterLock();
+
+  const char *GetScriptInterpreterPtyName();
+
+  int GetMasterFileDescriptor();
+
+  static std::string LanguageToString(lldb::ScriptLanguage language);
+
+  static lldb::ScriptLanguage StringToLanguage(const llvm::StringRef &string);
+
+  virtual void ResetOutputFileHandle(FILE *new_fh) {} // By default, do nothing.
+
+  lldb::ScriptLanguage GetLanguage() { return m_script_lang; }
+
+protected:
+  Debugger &m_debugger;
+  lldb::ScriptLanguage m_script_lang;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ScriptInterpreter_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/ArmUnwindInfo.h b/linux-x64/clang/include/lldb/Symbol/ArmUnwindInfo.h
new file mode 100644
index 0000000..a74b444
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ArmUnwindInfo.h
@@ -0,0 +1,68 @@
+//===-- ArmUnwindInfo.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ArmUnwindInfo_h_
+#define liblldb_ArmUnwindInfo_h_
+
+#include "lldb/Symbol/ObjectFile.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/lldb-private.h"
+#include <vector>
+
+/*
+ * Unwind information reader and parser for the ARM exception handling ABI
+ *
+ * Implemented based on:
+ *     Exception Handling ABI for the ARM Architecture
+ *     Document number: ARM IHI 0038A (current through ABI r2.09)
+ *     Date of Issue: 25th January 2007, reissued 30th November 2012
+ *     http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf
+ */
+
+namespace lldb_private {
+
+class ArmUnwindInfo {
+public:
+  ArmUnwindInfo(ObjectFile &objfile, lldb::SectionSP &arm_exidx,
+                lldb::SectionSP &arm_extab);
+
+  ~ArmUnwindInfo();
+
+  bool GetUnwindPlan(Target &target, const Address &addr,
+                     UnwindPlan &unwind_plan);
+
+private:
+  struct ArmExidxEntry {
+    ArmExidxEntry(uint32_t f, lldb::addr_t a, uint32_t d);
+
+    bool operator<(const ArmExidxEntry &other) const;
+
+    uint32_t file_address;
+    lldb::addr_t address;
+    uint32_t data;
+  };
+
+  const uint8_t *GetExceptionHandlingTableEntry(const Address &addr);
+
+  uint8_t GetByteAtOffset(const uint32_t *data, uint16_t offset) const;
+
+  uint64_t GetULEB128(const uint32_t *data, uint16_t &offset,
+                      uint16_t max_offset) const;
+
+  const lldb::ByteOrder m_byte_order;
+  lldb::SectionSP m_arm_exidx_sp; // .ARM.exidx section
+  lldb::SectionSP m_arm_extab_sp; // .ARM.extab section
+  DataExtractor m_arm_exidx_data; // .ARM.exidx section data
+  DataExtractor m_arm_extab_data; // .ARM.extab section data
+  std::vector<ArmExidxEntry> m_exidx_entries;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ArmUnwindInfo_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/Block.h b/linux-x64/clang/include/lldb/Symbol/Block.h
new file mode 100644
index 0000000..36d0944
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/Block.h
@@ -0,0 +1,404 @@
+//===-- Block.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Block_h_
+#define liblldb_Block_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/LineEntry.h"
+#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Symbol/SymbolContextScope.h"
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+#include <vector>
+
+namespace lldb_private {
+
+/// \class Block Block.h "lldb/Symbol/Block.h"
+/// A class that describes a single lexical block.
+///
+/// A Function object owns a BlockList object which owns one or more
+/// Block objects. The BlockList object contains a section offset address
+/// range, and Block objects contain one or more ranges which are offsets into
+/// that range. Blocks are can have discontiguous ranges within the BlockList
+/// address range, and each block can contain child blocks each with their own
+/// sets of ranges.
+///
+/// Each block has a variable list that represents local, argument, and static
+/// variables that are scoped to the block.
+///
+/// Inlined functions are represented by attaching a InlineFunctionInfo shared
+/// pointer object to a block. Inlined functions are represented as named
+/// blocks.
+class Block : public UserID, public SymbolContextScope {
+public:
+  typedef RangeArray<uint32_t, uint32_t, 1> RangeList;
+  typedef RangeList::Entry Range;
+
+  /// Construct with a User ID \a uid, \a depth.
+  ///
+  /// Initialize this block with the specified UID \a uid. The \a depth in the
+  /// \a block_list is used to represent the parent, sibling, and child block
+  /// information and also allows for partial parsing at the block level.
+  ///
+  /// \param[in] uid
+  ///     The UID for a given block. This value is given by the
+  ///     SymbolFile plug-in and can be any value that helps the
+  ///     SymbolFile plug-in to match this block back to the debug
+  ///     information data that it parses for further or more in
+  ///     depth parsing. Common values would be the index into a
+  ///     table, or an offset into the debug information.
+  ///
+  /// \param[in] depth
+  ///     The integer depth of this block in the block list hierarchy.
+  ///
+  /// \param[in] block_list
+  ///     The block list that this object belongs to.
+  ///
+  /// \see BlockList
+  Block(lldb::user_id_t uid);
+
+  /// Destructor.
+  ~Block() override;
+
+  /// Add a child to this object.
+  ///
+  /// \param[in] child_block_sp
+  ///     A shared pointer to a child block that will get added to
+  ///     this block.
+  void AddChild(const lldb::BlockSP &child_block_sp);
+
+  /// Add a new offset range to this block.
+  ///
+  /// \param[in] start_offset
+  ///     An offset into this Function's address range that
+  ///     describes the start address of a range for this block.
+  ///
+  /// \param[in] end_offset
+  ///     An offset into this Function's address range that
+  ///     describes the end address of a range for this block.
+  void AddRange(const Range &range);
+
+  void FinalizeRanges();
+
+  /// \copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
+  ///
+  /// \see SymbolContextScope
+  void CalculateSymbolContext(SymbolContext *sc) override;
+
+  lldb::ModuleSP CalculateSymbolContextModule() override;
+
+  CompileUnit *CalculateSymbolContextCompileUnit() override;
+
+  Function *CalculateSymbolContextFunction() override;
+
+  Block *CalculateSymbolContextBlock() override;
+
+  /// Check if an offset is in one of the block offset ranges.
+  ///
+  /// \param[in] range_offset
+  ///     An offset into the Function's address range.
+  ///
+  /// \return
+  ///     Returns \b true if \a range_offset falls in one of this
+  ///     block's ranges, \b false otherwise.
+  bool Contains(lldb::addr_t range_offset) const;
+
+  /// Check if a offset range is in one of the block offset ranges.
+  ///
+  /// \param[in] range
+  ///     An offset range into the Function's address range.
+  ///
+  /// \return
+  ///     Returns \b true if \a range falls in one of this
+  ///     block's ranges, \b false otherwise.
+  bool Contains(const Range &range) const;
+
+  /// Check if this object contains "block" as a child block at any depth.
+  ///
+  /// \param[in] block
+  ///     A potential child block.
+  ///
+  /// \return
+  ///     Returns \b true if \a block is a child of this block, \b
+  ///     false otherwise.
+  bool Contains(const Block *block) const;
+
+  /// Dump the block contents.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] base_addr
+  ///     The resolved start address of the Function's address
+  ///     range. This should be resolved as the file or load address
+  ///     prior to passing the value into this function for dumping.
+  ///
+  /// \param[in] depth
+  ///     Limit the number of levels deep that this function should
+  ///     print as this block can contain child blocks. Specify
+  ///     INT_MAX to dump all child blocks.
+  ///
+  /// \param[in] show_context
+  ///     If \b true, variables will dump their context information.
+  void Dump(Stream *s, lldb::addr_t base_addr, int32_t depth,
+            bool show_context) const;
+
+  /// \copydoc SymbolContextScope::DumpSymbolContext(Stream*)
+  ///
+  /// \see SymbolContextScope
+  void DumpSymbolContext(Stream *s) override;
+
+  void DumpAddressRanges(Stream *s, lldb::addr_t base_addr);
+
+  void GetDescription(Stream *s, Function *function,
+                      lldb::DescriptionLevel level, Target *target) const;
+
+  /// Get the parent block.
+  ///
+  /// \return
+  ///     The parent block pointer, or nullptr if this block has no
+  ///     parent.
+  Block *GetParent() const;
+
+  /// Get the inlined block that contains this block.
+  ///
+  /// \return
+  ///     If this block contains inlined function info, it will return
+  ///     this block, else parent blocks will be searched to see if
+  ///     any contain this block. nullptr will be returned if this block
+  ///     nor any parent blocks are inlined function blocks.
+  Block *GetContainingInlinedBlock();
+
+  /// Get the inlined parent block for this block.
+  ///
+  /// \return
+  ///     The parent block pointer, or nullptr if this block has no
+  ///     parent.
+  Block *GetInlinedParent();
+
+  //------------------------------------------------------------------
+  /// Get the inlined block at the given call site that contains this block.
+  ///
+  /// @param[in] find_call_site
+  ///     a declaration with the file and line of the call site to find.
+  ///
+  /// @return
+  ///     If this block contains inlined function info and is at the call
+  ///     site given by the file and line at the given \b declaration, then
+  ///     it will return this block, otherwise the parent blocks will be
+  ///     searched to see if any is at the call site. nullptr will be returned
+  ///     if no block is found at the call site.
+  //------------------------------------------------------------------
+  Block *
+  GetContainingInlinedBlockWithCallSite(const Declaration &find_call_site);
+
+  /// Get the sibling block for this block.
+  ///
+  /// \return
+  ///     The sibling block pointer, or nullptr if this block has no
+  ///     sibling.
+  Block *GetSibling() const;
+
+  /// Get the first child block.
+  ///
+  /// \return
+  ///     The first child block pointer, or nullptr if this block has no
+  ///     children.
+  Block *GetFirstChild() const {
+    return (m_children.empty() ? nullptr : m_children.front().get());
+  }
+
+  /// Get the variable list for this block only.
+  ///
+  /// \param[in] can_create
+  ///     If \b true, the variables can be parsed if they already
+  ///     haven't been, else the current state of the block will be
+  ///     returned.
+  ///
+  /// \return
+  ///     A variable list shared pointer that contains all variables
+  ///     for this block.
+  lldb::VariableListSP GetBlockVariableList(bool can_create);
+
+  /// Get the variable list for this block and optionally all child blocks if
+  /// \a get_child_variables is \b true.
+  ///
+  /// \param[in] get_child_variables
+  ///     If \b true, all variables from all child blocks will be
+  ///     added to the variable list.
+  ///
+  /// \param[in] can_create
+  ///     If \b true, the variables can be parsed if they already
+  ///     haven't been, else the current state of the block will be
+  ///     returned. Passing \b true for this parameter can be used
+  ///     to see the current state of what has been parsed up to this
+  ///     point.
+  ///
+  /// \param[in] add_inline_child_block_variables
+  ///     If this is \b false, no child variables of child blocks
+  ///     that are inlined functions will be gotten. If \b true then
+  ///     all child variables will be added regardless of whether they
+  ///     come from inlined functions or not.
+  ///
+  /// \return
+  ///     A variable list shared pointer that contains all variables
+  ///     for this block.
+  uint32_t AppendBlockVariables(bool can_create, bool get_child_block_variables,
+                                bool stop_if_child_block_is_inlined_function,
+                                const std::function<bool(Variable *)> &filter,
+                                VariableList *variable_list);
+
+  /// Appends the variables from this block, and optionally from all parent
+  /// blocks, to \a variable_list.
+  ///
+  /// \param[in] can_create
+  ///     If \b true, the variables can be parsed if they already
+  ///     haven't been, else the current state of the block will be
+  ///     returned. Passing \b true for this parameter can be used
+  ///     to see the current state of what has been parsed up to this
+  ///     point.
+  ///
+  /// \param[in] get_parent_variables
+  ///     If \b true, all variables from all parent blocks will be
+  ///     added to the variable list.
+  ///
+  /// \param[in] stop_if_block_is_inlined_function
+  ///     If \b true, all variables from all parent blocks will be
+  ///     added to the variable list until there are no parent blocks
+  ///     or the parent block has inlined function info.
+  ///
+  /// \param[in,out] variable_list
+  ///     All variables in this block, and optionally all parent
+  ///     blocks will be added to this list.
+  ///
+  /// \return
+  ///     The number of variable that were appended to \a
+  ///     variable_list.
+  uint32_t AppendVariables(bool can_create, bool get_parent_variables,
+                           bool stop_if_block_is_inlined_function,
+                           const std::function<bool(Variable *)> &filter,
+                           VariableList *variable_list);
+
+  /// Get const accessor for any inlined function information.
+  ///
+  /// \return
+  ///     A const pointer to any inlined function information, or nullptr
+  ///     if this is a regular block.
+  const InlineFunctionInfo *GetInlinedFunctionInfo() const {
+    return m_inlineInfoSP.get();
+  }
+
+  /// Get the symbol file which contains debug info for this block's
+  /// symbol context module.
+  ///
+  /// \return A pointer to the symbol file or nullptr.
+  SymbolFile *GetSymbolFile();
+
+  CompilerDeclContext GetDeclContext();
+
+  /// Get the memory cost of this object.
+  ///
+  /// Returns the cost of this object plus any owned objects from the ranges,
+  /// variables, and inline function information.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  size_t MemorySize() const;
+
+  /// Set accessor for any inlined function information.
+  ///
+  /// \param[in] name
+  ///     The method name for the inlined function. This value should
+  ///     not be nullptr.
+  ///
+  /// \param[in] mangled
+  ///     The mangled method name for the inlined function. This can
+  ///     be nullptr if there is no mangled name for an inlined function
+  ///     or if the name is the same as \a name.
+  ///
+  /// \param[in] decl_ptr
+  ///     A optional pointer to declaration information for the
+  ///     inlined function information. This value can be nullptr to
+  ///     indicate that no declaration information is available.
+  ///
+  /// \param[in] call_decl_ptr
+  ///     Optional calling location declaration information that
+  ///     describes from where this inlined function was called.
+  void SetInlinedFunctionInfo(const char *name, const char *mangled,
+                              const Declaration *decl_ptr,
+                              const Declaration *call_decl_ptr);
+
+  void SetParentScope(SymbolContextScope *parent_scope) {
+    m_parent_scope = parent_scope;
+  }
+
+  /// Set accessor for the variable list.
+  ///
+  /// Called by the SymbolFile plug-ins after they have parsed the variable
+  /// lists and are ready to hand ownership of the list over to this object.
+  ///
+  /// \param[in] variable_list_sp
+  ///     A shared pointer to a VariableList.
+  void SetVariableList(lldb::VariableListSP &variable_list_sp) {
+    m_variable_list_sp = variable_list_sp;
+  }
+
+  bool BlockInfoHasBeenParsed() const { return m_parsed_block_info; }
+
+  void SetBlockInfoHasBeenParsed(bool b, bool set_children);
+
+  Block *FindBlockByID(lldb::user_id_t block_id);
+
+  size_t GetNumRanges() const { return m_ranges.GetSize(); }
+
+  bool GetRangeContainingOffset(const lldb::addr_t offset, Range &range);
+
+  bool GetRangeContainingAddress(const Address &addr, AddressRange &range);
+
+  bool GetRangeContainingLoadAddress(lldb::addr_t load_addr, Target &target,
+                                     AddressRange &range);
+
+  uint32_t GetRangeIndexContainingAddress(const Address &addr);
+
+  // Since blocks might have multiple discontiguous address ranges, we need to
+  // be able to get at any of the address ranges in a block.
+  bool GetRangeAtIndex(uint32_t range_idx, AddressRange &range);
+
+  bool GetStartAddress(Address &addr);
+
+  void SetDidParseVariables(bool b, bool set_children);
+
+protected:
+  typedef std::vector<lldb::BlockSP> collection;
+  // Member variables.
+  SymbolContextScope *m_parent_scope;
+  collection m_children;
+  RangeList m_ranges;
+  lldb::InlineFunctionInfoSP m_inlineInfoSP; ///< Inlined function information.
+  lldb::VariableListSP m_variable_list_sp; ///< The variable list for all local,
+                                           ///static and parameter variables
+                                           ///scoped to this block.
+  bool m_parsed_block_info : 1, ///< Set to true if this block and it's children
+                                ///have all been parsed
+      m_parsed_block_variables : 1, m_parsed_child_blocks : 1;
+
+  // A parent of child blocks can be asked to find a sibling block given
+  // one of its child blocks
+  Block *GetSiblingForChild(const Block *child_block) const;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(Block);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Block_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/ClangASTContext.h b/linux-x64/clang/include/lldb/Symbol/ClangASTContext.h
new file mode 100644
index 0000000..dda9f43
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ClangASTContext.h
@@ -0,0 +1,1057 @@
+//===-- ClangASTContext.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ClangASTContext_h_
+#define liblldb_ClangASTContext_h_
+
+#include <stdint.h>
+
+#include <functional>
+#include <initializer_list>
+#include <map>
+#include <memory>
+#include <set>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/ExternalASTMerger.h"
+#include "clang/AST/TemplateBase.h"
+#include "llvm/ADT/APSInt.h"
+#include "llvm/ADT/SmallVector.h"
+
+#include "Plugins/ExpressionParser/Clang/ClangPersistentVariables.h"
+#include "lldb/Core/ClangForward.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/TypeSystem.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-enumerations.h"
+
+class DWARFASTParserClang;
+class PDBASTParser;
+
+namespace lldb_private {
+
+class Declaration;
+
+class ClangASTContext : public TypeSystem {
+public:
+  typedef void (*CompleteTagDeclCallback)(void *baton, clang::TagDecl *);
+  typedef void (*CompleteObjCInterfaceDeclCallback)(void *baton,
+                                                    clang::ObjCInterfaceDecl *);
+
+  // llvm casting support
+  static bool classof(const TypeSystem *ts) {
+    return ts->getKind() == TypeSystem::eKindClang;
+  }
+
+  // Constructors and Destructors
+  ClangASTContext(const char *triple = nullptr);
+
+  ~ClangASTContext() override;
+
+  void Finalize() override;
+
+  // PluginInterface functions
+  ConstString GetPluginName() override;
+
+  uint32_t GetPluginVersion() override;
+
+  static ConstString GetPluginNameStatic();
+
+  static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
+                                           Module *module, Target *target);
+
+  static void EnumerateSupportedLanguages(
+      std::set<lldb::LanguageType> &languages_for_types,
+      std::set<lldb::LanguageType> &languages_for_expressions);
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static ClangASTContext *GetASTContext(clang::ASTContext *ast_ctx);
+
+  clang::ASTContext *getASTContext();
+
+  void setASTContext(clang::ASTContext *ast_ctx);
+
+  clang::Builtin::Context *getBuiltinContext();
+
+  clang::IdentifierTable *getIdentifierTable();
+
+  clang::LangOptions *getLanguageOptions();
+
+  clang::SelectorTable *getSelectorTable();
+
+  clang::FileManager *getFileManager();
+
+  clang::SourceManager *getSourceManager();
+
+  clang::DiagnosticsEngine *getDiagnosticsEngine();
+
+  clang::DiagnosticConsumer *getDiagnosticConsumer();
+
+  clang::MangleContext *getMangleContext();
+
+  std::shared_ptr<clang::TargetOptions> &getTargetOptions();
+
+  clang::TargetInfo *getTargetInfo();
+
+  void setSema(clang::Sema *s);
+  clang::Sema *getSema() { return m_sema; }
+
+  void Clear();
+
+  const char *GetTargetTriple();
+
+  void SetTargetTriple(const char *target_triple);
+
+  void SetArchitecture(const ArchSpec &arch);
+
+  bool HasExternalSource();
+
+  void SetExternalSource(
+      llvm::IntrusiveRefCntPtr<clang::ExternalASTSource> &ast_source_up);
+
+  void RemoveExternalSource();
+
+  bool GetCompleteDecl(clang::Decl *decl) {
+    return ClangASTContext::GetCompleteDecl(getASTContext(), decl);
+  }
+
+  static void DumpDeclHiearchy(clang::Decl *decl);
+
+  static void DumpDeclContextHiearchy(clang::DeclContext *decl_ctx);
+
+  static bool DeclsAreEquivalent(clang::Decl *lhs_decl, clang::Decl *rhs_decl);
+
+  static bool GetCompleteDecl(clang::ASTContext *ast, clang::Decl *decl);
+
+  void SetMetadataAsUserID(const void *object, lldb::user_id_t user_id);
+
+  void SetMetadata(const void *object, ClangASTMetadata &meta_data) {
+    SetMetadata(getASTContext(), object, meta_data);
+  }
+
+  static void SetMetadata(clang::ASTContext *ast, const void *object,
+                          ClangASTMetadata &meta_data);
+
+  ClangASTMetadata *GetMetadata(const void *object) {
+    return GetMetadata(getASTContext(), object);
+  }
+
+  static ClangASTMetadata *GetMetadata(clang::ASTContext *ast,
+                                       const void *object);
+
+  // Basic Types
+  CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
+                                                   size_t bit_size) override;
+
+  static CompilerType GetBuiltinTypeForEncodingAndBitSize(
+      clang::ASTContext *ast, lldb::Encoding encoding, uint32_t bit_size);
+
+  CompilerType GetBasicType(lldb::BasicType type);
+
+  static CompilerType GetBasicType(clang::ASTContext *ast,
+                                   lldb::BasicType type);
+
+  static CompilerType GetBasicType(clang::ASTContext *ast,
+                                   ConstString name);
+
+  static lldb::BasicType GetBasicTypeEnumeration(ConstString name);
+
+  CompilerType GetBuiltinTypeForDWARFEncodingAndBitSize(const char *type_name,
+                                                        uint32_t dw_ate,
+                                                        uint32_t bit_size);
+
+  CompilerType GetCStringType(bool is_const);
+
+  static CompilerType GetUnknownAnyType(clang::ASTContext *ast);
+
+  CompilerType GetUnknownAnyType() {
+    return ClangASTContext::GetUnknownAnyType(getASTContext());
+  }
+
+  static clang::DeclContext *GetDeclContextForType(clang::QualType type);
+
+  static clang::DeclContext *GetDeclContextForType(const CompilerType &type);
+
+  uint32_t GetPointerByteSize() override;
+
+  static clang::DeclContext *GetTranslationUnitDecl(clang::ASTContext *ast);
+
+  clang::DeclContext *GetTranslationUnitDecl() {
+    return GetTranslationUnitDecl(getASTContext());
+  }
+
+  static clang::Decl *CopyDecl(clang::ASTContext *dest_context,
+                               clang::ASTContext *source_context,
+                               clang::Decl *source_decl);
+
+  static bool AreTypesSame(CompilerType type1, CompilerType type2,
+                           bool ignore_qualifiers = false);
+
+  static CompilerType GetTypeForDecl(clang::NamedDecl *decl);
+
+  static CompilerType GetTypeForDecl(clang::TagDecl *decl);
+
+  static CompilerType GetTypeForDecl(clang::ObjCInterfaceDecl *objc_decl);
+
+  template <typename RecordDeclType>
+  CompilerType
+  GetTypeForIdentifier(ConstString type_name,
+                       clang::DeclContext *decl_context = nullptr) {
+    CompilerType compiler_type;
+
+    if (type_name.GetLength()) {
+      clang::ASTContext *ast = getASTContext();
+      if (ast) {
+        if (!decl_context)
+          decl_context = ast->getTranslationUnitDecl();
+
+        clang::IdentifierInfo &myIdent =
+            ast->Idents.get(type_name.GetCString());
+        clang::DeclarationName myName =
+            ast->DeclarationNames.getIdentifier(&myIdent);
+
+        clang::DeclContext::lookup_result result =
+            decl_context->lookup(myName);
+
+        if (!result.empty()) {
+          clang::NamedDecl *named_decl = result[0];
+          if (const RecordDeclType *record_decl =
+                  llvm::dyn_cast<RecordDeclType>(named_decl))
+            compiler_type.SetCompilerType(
+                ast, clang::QualType(record_decl->getTypeForDecl(), 0));
+        }
+      }
+    }
+
+    return compiler_type;
+  }
+
+  CompilerType CreateStructForIdentifier(
+      ConstString type_name,
+      const std::initializer_list<std::pair<const char *, CompilerType>>
+          &type_fields,
+      bool packed = false);
+
+  CompilerType GetOrCreateStructForIdentifier(
+      ConstString type_name,
+      const std::initializer_list<std::pair<const char *, CompilerType>>
+          &type_fields,
+      bool packed = false);
+
+  static bool IsOperator(const char *name,
+                         clang::OverloadedOperatorKind &op_kind);
+
+  // Structure, Unions, Classes
+
+  static clang::AccessSpecifier
+  ConvertAccessTypeToAccessSpecifier(lldb::AccessType access);
+
+  static clang::AccessSpecifier
+  UnifyAccessSpecifiers(clang::AccessSpecifier lhs, clang::AccessSpecifier rhs);
+
+  static uint32_t GetNumBaseClasses(const clang::CXXRecordDecl *cxx_record_decl,
+                                    bool omit_empty_base_classes);
+
+  CompilerType CreateRecordType(clang::DeclContext *decl_ctx,
+                                lldb::AccessType access_type, const char *name,
+                                int kind, lldb::LanguageType language,
+                                ClangASTMetadata *metadata = nullptr);
+
+  class TemplateParameterInfos {
+  public:
+    bool IsValid() const {
+      if (args.empty())
+        return false;
+      return args.size() == names.size() &&
+        ((bool)pack_name == (bool)packed_args) &&
+        (!packed_args || !packed_args->packed_args);
+    }
+
+    llvm::SmallVector<const char *, 2> names;
+    llvm::SmallVector<clang::TemplateArgument, 2> args;
+    
+    const char * pack_name = nullptr;
+    std::unique_ptr<TemplateParameterInfos> packed_args;
+  };
+
+  clang::FunctionTemplateDecl *
+  CreateFunctionTemplateDecl(clang::DeclContext *decl_ctx,
+                             clang::FunctionDecl *func_decl, const char *name,
+                             const TemplateParameterInfos &infos);
+
+  void CreateFunctionTemplateSpecializationInfo(
+      clang::FunctionDecl *func_decl, clang::FunctionTemplateDecl *Template,
+      const TemplateParameterInfos &infos);
+
+  clang::ClassTemplateDecl *
+  CreateClassTemplateDecl(clang::DeclContext *decl_ctx,
+                          lldb::AccessType access_type, const char *class_name,
+                          int kind, const TemplateParameterInfos &infos);
+
+  clang::TemplateTemplateParmDecl *
+  CreateTemplateTemplateParmDecl(const char *template_name);
+
+  clang::ClassTemplateSpecializationDecl *CreateClassTemplateSpecializationDecl(
+      clang::DeclContext *decl_ctx,
+      clang::ClassTemplateDecl *class_template_decl, int kind,
+      const TemplateParameterInfos &infos);
+
+  CompilerType
+  CreateClassTemplateSpecializationType(clang::ClassTemplateSpecializationDecl *
+                                            class_template_specialization_decl);
+
+  static clang::DeclContext *
+  GetAsDeclContext(clang::CXXMethodDecl *cxx_method_decl);
+
+  static clang::DeclContext *
+  GetAsDeclContext(clang::ObjCMethodDecl *objc_method_decl);
+
+  static bool CheckOverloadedOperatorKindParameterCount(
+      bool is_method, clang::OverloadedOperatorKind op_kind,
+      uint32_t num_params);
+
+  bool FieldIsBitfield(clang::FieldDecl *field, uint32_t &bitfield_bit_size);
+
+  static bool FieldIsBitfield(clang::ASTContext *ast, clang::FieldDecl *field,
+                              uint32_t &bitfield_bit_size);
+
+  static bool RecordHasFields(const clang::RecordDecl *record_decl);
+
+  CompilerType CreateObjCClass(const char *name, clang::DeclContext *decl_ctx,
+                               bool isForwardDecl, bool isInternal,
+                               ClangASTMetadata *metadata = nullptr);
+
+  bool SetTagTypeKind(clang::QualType type, int kind) const;
+
+  bool SetDefaultAccessForRecordFields(clang::RecordDecl *record_decl,
+                                       int default_accessibility,
+                                       int *assigned_accessibilities,
+                                       size_t num_assigned_accessibilities);
+
+  // Returns a mask containing bits from the ClangASTContext::eTypeXXX
+  // enumerations
+
+  // Namespace Declarations
+
+  clang::NamespaceDecl *
+  GetUniqueNamespaceDeclaration(const char *name, clang::DeclContext *decl_ctx,
+                                bool is_inline = false);
+
+  static clang::NamespaceDecl *
+  GetUniqueNamespaceDeclaration(clang::ASTContext *ast, const char *name,
+                                clang::DeclContext *decl_ctx,
+                                bool is_inline = false);
+
+  // Function Types
+
+  clang::FunctionDecl *
+  CreateFunctionDeclaration(clang::DeclContext *decl_ctx, const char *name,
+                            const CompilerType &function_Type, int storage,
+                            bool is_inline);
+
+  static CompilerType CreateFunctionType(clang::ASTContext *ast,
+                                         const CompilerType &result_type,
+                                         const CompilerType *args,
+                                         unsigned num_args, bool is_variadic,
+                                         unsigned type_quals,
+                                         clang::CallingConv cc);
+
+  static CompilerType CreateFunctionType(clang::ASTContext *ast,
+                                         const CompilerType &result_type,
+                                         const CompilerType *args,
+                                         unsigned num_args, bool is_variadic,
+                                         unsigned type_quals) {
+    return ClangASTContext::CreateFunctionType(
+        ast, result_type, args, num_args, is_variadic, type_quals, clang::CC_C);
+  }
+
+  CompilerType CreateFunctionType(const CompilerType &result_type,
+                                  const CompilerType *args, unsigned num_args,
+                                  bool is_variadic, unsigned type_quals) {
+    return ClangASTContext::CreateFunctionType(
+        getASTContext(), result_type, args, num_args, is_variadic, type_quals);
+  }
+
+  CompilerType CreateFunctionType(const CompilerType &result_type,
+                                  const CompilerType *args, unsigned num_args,
+                                  bool is_variadic, unsigned type_quals,
+                                  clang::CallingConv cc) {
+    return ClangASTContext::CreateFunctionType(getASTContext(), result_type,
+                                               args, num_args, is_variadic,
+                                               type_quals, cc);
+  }
+
+  clang::ParmVarDecl *CreateParameterDeclaration(clang::DeclContext *decl_ctx,
+                                                 const char *name,
+                                                 const CompilerType &param_type,
+                                                 int storage);
+
+  void SetFunctionParameters(clang::FunctionDecl *function_decl,
+                             clang::ParmVarDecl **params, unsigned num_params);
+
+  CompilerType CreateBlockPointerType(const CompilerType &function_type);
+
+  // Array Types
+
+  CompilerType CreateArrayType(const CompilerType &element_type,
+                               size_t element_count, bool is_vector);
+
+  // Enumeration Types
+  CompilerType CreateEnumerationType(const char *name,
+                                     clang::DeclContext *decl_ctx,
+                                     const Declaration &decl,
+                                     const CompilerType &integer_qual_type,
+                                     bool is_scoped);
+
+  // Integer type functions
+
+  static CompilerType GetIntTypeFromBitSize(clang::ASTContext *ast,
+                                            size_t bit_size, bool is_signed);
+
+  CompilerType GetPointerSizedIntType(bool is_signed) {
+    return GetPointerSizedIntType(getASTContext(), is_signed);
+  }
+
+  static CompilerType GetPointerSizedIntType(clang::ASTContext *ast,
+                                             bool is_signed);
+
+  // Floating point functions
+
+  static CompilerType GetFloatTypeFromBitSize(clang::ASTContext *ast,
+                                              size_t bit_size);
+
+  // TypeSystem methods
+  DWARFASTParser *GetDWARFParser() override;
+  PDBASTParser *GetPDBParser() override;
+
+  // ClangASTContext callbacks for external source lookups.
+  static void CompleteTagDecl(void *baton, clang::TagDecl *);
+
+  static void CompleteObjCInterfaceDecl(void *baton,
+                                        clang::ObjCInterfaceDecl *);
+
+  static bool LayoutRecordType(
+      void *baton, const clang::RecordDecl *record_decl, uint64_t &size,
+      uint64_t &alignment,
+      llvm::DenseMap<const clang::FieldDecl *, uint64_t> &field_offsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &base_offsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &vbase_offsets);
+
+  // CompilerDecl override functions
+  ConstString DeclGetName(void *opaque_decl) override;
+
+  ConstString DeclGetMangledName(void *opaque_decl) override;
+
+  CompilerDeclContext DeclGetDeclContext(void *opaque_decl) override;
+
+  CompilerType DeclGetFunctionReturnType(void *opaque_decl) override;
+
+  size_t DeclGetFunctionNumArguments(void *opaque_decl) override;
+
+  CompilerType DeclGetFunctionArgumentType(void *opaque_decl,
+                                           size_t arg_idx) override;
+
+  // CompilerDeclContext override functions
+
+  std::vector<CompilerDecl>
+  DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name,
+                            const bool ignore_using_decls) override;
+
+  bool DeclContextIsStructUnionOrClass(void *opaque_decl_ctx) override;
+
+  ConstString DeclContextGetName(void *opaque_decl_ctx) override;
+
+  ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override;
+
+  bool DeclContextIsClassMethod(void *opaque_decl_ctx,
+                                lldb::LanguageType *language_ptr,
+                                bool *is_instance_method_ptr,
+                                ConstString *language_object_name_ptr) override;
+
+  bool DeclContextIsContainedInLookup(void *opaque_decl_ctx,
+                                      void *other_opaque_decl_ctx) override;
+
+  // Clang specific clang::DeclContext functions
+
+  static clang::DeclContext *
+  DeclContextGetAsDeclContext(const CompilerDeclContext &dc);
+
+  static clang::ObjCMethodDecl *
+  DeclContextGetAsObjCMethodDecl(const CompilerDeclContext &dc);
+
+  static clang::CXXMethodDecl *
+  DeclContextGetAsCXXMethodDecl(const CompilerDeclContext &dc);
+
+  static clang::FunctionDecl *
+  DeclContextGetAsFunctionDecl(const CompilerDeclContext &dc);
+
+  static clang::NamespaceDecl *
+  DeclContextGetAsNamespaceDecl(const CompilerDeclContext &dc);
+
+  static ClangASTMetadata *DeclContextGetMetaData(const CompilerDeclContext &dc,
+                                                  const void *object);
+
+  static clang::ASTContext *
+  DeclContextGetClangASTContext(const CompilerDeclContext &dc);
+
+  // Tests
+
+  bool IsArrayType(lldb::opaque_compiler_type_t type,
+                   CompilerType *element_type, uint64_t *size,
+                   bool *is_incomplete) override;
+
+  bool IsVectorType(lldb::opaque_compiler_type_t type,
+                    CompilerType *element_type, uint64_t *size) override;
+
+  bool IsAggregateType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsAnonymousType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsBeingDefined(lldb::opaque_compiler_type_t type) override;
+
+  bool IsCharType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsCompleteType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsConst(lldb::opaque_compiler_type_t type) override;
+
+  bool IsCStringType(lldb::opaque_compiler_type_t type,
+                     uint32_t &length) override;
+
+  static bool IsCXXClassType(const CompilerType &type);
+
+  bool IsDefined(lldb::opaque_compiler_type_t type) override;
+
+  bool IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count,
+                           bool &is_complex) override;
+
+  bool IsFunctionType(lldb::opaque_compiler_type_t type,
+                      bool *is_variadic_ptr) override;
+
+  uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type,
+                                  CompilerType *base_type_ptr) override;
+
+  size_t
+  GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type,
+                                          const size_t index) override;
+
+  bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsBlockPointerType(lldb::opaque_compiler_type_t type,
+                          CompilerType *function_pointer_type_ptr) override;
+
+  bool IsIntegerType(lldb::opaque_compiler_type_t type,
+                     bool &is_signed) override;
+
+  bool IsEnumerationType(lldb::opaque_compiler_type_t type,
+                         bool &is_signed) override;
+
+  static bool IsObjCClassType(const CompilerType &type);
+
+  static bool IsObjCClassTypeAndHasIVars(const CompilerType &type,
+                                         bool check_superclass);
+
+  static bool IsObjCObjectOrInterfaceType(const CompilerType &type);
+
+  static bool IsObjCObjectPointerType(const CompilerType &type,
+                                      CompilerType *target_type = nullptr);
+
+  bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override;
+
+  static bool IsClassType(lldb::opaque_compiler_type_t type);
+
+  static bool IsEnumType(lldb::opaque_compiler_type_t type);
+
+  bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type,
+                             CompilerType *target_type, // Can pass nullptr
+                             bool check_cplusplus, bool check_objc) override;
+
+  bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsPointerType(lldb::opaque_compiler_type_t type,
+                     CompilerType *pointee_type) override;
+
+  bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type,
+                                CompilerType *pointee_type) override;
+
+  bool IsReferenceType(lldb::opaque_compiler_type_t type,
+                       CompilerType *pointee_type, bool *is_rvalue) override;
+
+  bool IsScalarType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsTypedefType(lldb::opaque_compiler_type_t type) override;
+
+  bool IsVoidType(lldb::opaque_compiler_type_t type) override;
+
+  bool CanPassInRegisters(const CompilerType &type) override;
+
+  bool SupportsLanguage(lldb::LanguageType language) override;
+
+  static bool GetCXXClassName(const CompilerType &type,
+                              std::string &class_name);
+
+  static bool GetObjCClassName(const CompilerType &type,
+                               std::string &class_name);
+
+  // Type Completion
+
+  bool GetCompleteType(lldb::opaque_compiler_type_t type) override;
+
+  // Accessors
+
+  ConstString GetTypeName(lldb::opaque_compiler_type_t type) override;
+
+  uint32_t GetTypeInfo(lldb::opaque_compiler_type_t type,
+                       CompilerType *pointee_or_element_compiler_type) override;
+
+  lldb::LanguageType
+  GetMinimumLanguage(lldb::opaque_compiler_type_t type) override;
+
+  lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override;
+
+  unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override;
+
+  // Creating related types
+
+  // Using the current type, create a new typedef to that type using
+  // "typedef_name" as the name and "decl_ctx" as the decl context.
+  static CompilerType
+  CreateTypedefType(const CompilerType &type, const char *typedef_name,
+                    const CompilerDeclContext &compiler_decl_ctx);
+
+  CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type,
+                                   uint64_t *stride) override;
+
+  CompilerType GetArrayType(lldb::opaque_compiler_type_t type,
+                            uint64_t size) override;
+
+  CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType
+  GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override;
+
+  // Returns -1 if this isn't a function of if the function doesn't have a
+  // prototype Returns a value >= 0 if there is a prototype.
+  int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
+                                              size_t idx) override;
+
+  CompilerType
+  GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;
+
+  size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;
+
+  TypeMemberFunctionImpl
+  GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type,
+                           size_t idx) override;
+
+  CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType
+  GetLValueReferenceType(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType
+  GetRValueReferenceType(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType AddConstModifier(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType AddVolatileModifier(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType AddRestrictModifier(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType CreateTypedef(lldb::opaque_compiler_type_t type,
+                             const char *name,
+                             const CompilerDeclContext &decl_ctx) override;
+
+  // If the current object represents a typedef type, get the underlying type
+  CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override;
+
+  // Create related types using the current type's AST
+  CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override;
+
+  // Exploring the type
+
+  llvm::Optional<uint64_t> GetByteSize(lldb::opaque_compiler_type_t type,
+                       ExecutionContextScope *exe_scope) {
+    if (llvm::Optional<uint64_t> bit_size = GetBitSize(type, exe_scope))
+      return (*bit_size + 7) / 8;
+    return llvm::None;
+  }
+
+  llvm::Optional<uint64_t>
+  GetBitSize(lldb::opaque_compiler_type_t type,
+             ExecutionContextScope *exe_scope) override;
+
+  lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
+                             uint64_t &count) override;
+
+  lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
+
+  size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;
+
+  uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
+                          bool omit_empty_base_classes,
+                          const ExecutionContext *exe_ctx) override;
+
+  CompilerType GetBuiltinTypeByName(ConstString name) override;
+
+  lldb::BasicType
+  GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override;
+
+  static lldb::BasicType
+  GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type,
+                          ConstString name);
+
+  void ForEachEnumerator(
+      lldb::opaque_compiler_type_t type,
+      std::function<bool(const CompilerType &integer_type,
+                         ConstString name,
+                         const llvm::APSInt &value)> const &callback) override;
+
+  uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx,
+                               std::string &name, uint64_t *bit_offset_ptr,
+                               uint32_t *bitfield_bit_size_ptr,
+                               bool *is_bitfield_ptr) override;
+
+  uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override;
+
+  uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override;
+
+  CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type,
+                                         size_t idx,
+                                         uint32_t *bit_offset_ptr) override;
+
+  CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type,
+                                          size_t idx,
+                                          uint32_t *bit_offset_ptr) override;
+
+  static uint32_t GetNumPointeeChildren(clang::QualType type);
+
+  CompilerType GetChildCompilerTypeAtIndex(
+      lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,
+      bool transparent_pointers, bool omit_empty_base_classes,
+      bool ignore_array_bounds, std::string &child_name,
+      uint32_t &child_byte_size, int32_t &child_byte_offset,
+      uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
+      bool &child_is_base_class, bool &child_is_deref_of_parent,
+      ValueObject *valobj, uint64_t &language_flags) override;
+
+  // Lookup a child given a name. This function will match base class names and
+  // member member names in "clang_type" only, not descendants.
+  uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
+                                   const char *name,
+                                   bool omit_empty_base_classes) override;
+
+  // Lookup a child member given a name. This function will match member names
+  // only and will descend into "clang_type" children in search for the first
+  // member in this class, or any base class that matches "name".
+  // TODO: Return all matches for a given name by returning a
+  // vector<vector<uint32_t>>
+  // so we catch all names that match a given child name, not just the first.
+  size_t
+  GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type,
+                                const char *name, bool omit_empty_base_classes,
+                                std::vector<uint32_t> &child_indexes) override;
+
+  size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type) override;
+
+  lldb::TemplateArgumentKind
+  GetTemplateArgumentKind(lldb::opaque_compiler_type_t type,
+                          size_t idx) override;
+  CompilerType GetTypeTemplateArgument(lldb::opaque_compiler_type_t type,
+                                       size_t idx) override;
+  llvm::Optional<CompilerType::IntegralTemplateArgument>
+  GetIntegralTemplateArgument(lldb::opaque_compiler_type_t type,
+                              size_t idx) override;
+
+  CompilerType GetTypeForFormatters(void *type) override;
+
+#define LLDB_INVALID_DECL_LEVEL UINT32_MAX
+  // LLDB_INVALID_DECL_LEVEL is returned by CountDeclLevels if child_decl_ctx
+  // could not be found in decl_ctx.
+  uint32_t CountDeclLevels(clang::DeclContext *frame_decl_ctx,
+                           clang::DeclContext *child_decl_ctx,
+                           ConstString *child_name = nullptr,
+                           CompilerType *child_type = nullptr);
+
+  // Modifying RecordType
+  static clang::FieldDecl *AddFieldToRecordType(const CompilerType &type,
+                                                llvm::StringRef name,
+                                                const CompilerType &field_type,
+                                                lldb::AccessType access,
+                                                uint32_t bitfield_bit_size);
+
+  static void BuildIndirectFields(const CompilerType &type);
+
+  static void SetIsPacked(const CompilerType &type);
+
+  static clang::VarDecl *AddVariableToRecordType(const CompilerType &type,
+                                                 llvm::StringRef name,
+                                                 const CompilerType &var_type,
+                                                 lldb::AccessType access);
+
+  clang::CXXMethodDecl *
+  AddMethodToCXXRecordType(lldb::opaque_compiler_type_t type, const char *name,
+                           const char *mangled_name,
+                           const CompilerType &method_type,
+                           lldb::AccessType access, bool is_virtual,
+                           bool is_static, bool is_inline, bool is_explicit,
+                           bool is_attr_used, bool is_artificial);
+
+  void AddMethodOverridesForCXXRecordType(lldb::opaque_compiler_type_t type);
+
+  // C++ Base Classes
+  std::unique_ptr<clang::CXXBaseSpecifier>
+  CreateBaseClassSpecifier(lldb::opaque_compiler_type_t type,
+                           lldb::AccessType access, bool is_virtual,
+                           bool base_of_class);
+
+  bool TransferBaseClasses(
+      lldb::opaque_compiler_type_t type,
+      std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> bases);
+
+  static bool SetObjCSuperClass(const CompilerType &type,
+                                const CompilerType &superclass_compiler_type);
+
+  static bool AddObjCClassProperty(const CompilerType &type,
+                                   const char *property_name,
+                                   const CompilerType &property_compiler_type,
+                                   clang::ObjCIvarDecl *ivar_decl,
+                                   const char *property_setter_name,
+                                   const char *property_getter_name,
+                                   uint32_t property_attributes,
+                                   ClangASTMetadata *metadata);
+
+  static clang::ObjCMethodDecl *AddMethodToObjCObjectType(
+      const CompilerType &type,
+      const char *name, // the full symbol name as seen in the symbol table
+                        // (lldb::opaque_compiler_type_t type, "-[NString
+                        // stringWithCString:]")
+      const CompilerType &method_compiler_type, lldb::AccessType access,
+      bool is_artificial, bool is_variadic);
+
+  static bool SetHasExternalStorage(lldb::opaque_compiler_type_t type,
+                                    bool has_extern);
+
+  static bool GetHasExternalStorage(const CompilerType &type);
+  // Tag Declarations
+  static bool StartTagDeclarationDefinition(const CompilerType &type);
+
+  static bool CompleteTagDeclarationDefinition(const CompilerType &type);
+
+  // Modifying Enumeration types
+  clang::EnumConstantDecl *AddEnumerationValueToEnumerationType(
+      const CompilerType &enum_type, const Declaration &decl, const char *name,
+      int64_t enum_value, uint32_t enum_value_bit_size);
+  clang::EnumConstantDecl *AddEnumerationValueToEnumerationType(
+      const CompilerType &enum_type, const Declaration &decl, const char *name,
+      const llvm::APSInt &value);
+
+  CompilerType GetEnumerationIntegerType(lldb::opaque_compiler_type_t type);
+
+  // Pointers & References
+
+  // Call this function using the class type when you want to make a member
+  // pointer type to pointee_type.
+  static CompilerType CreateMemberPointerType(const CompilerType &type,
+                                              const CompilerType &pointee_type);
+
+  // Converts "s" to a floating point value and place resulting floating point
+  // bytes in the "dst" buffer.
+  size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
+                                   const char *s, uint8_t *dst,
+                                   size_t dst_size) override;
+
+  // Dumping types
+#ifndef NDEBUG
+  /// Convenience LLVM-style dump method for use in the debugger only.
+  /// In contrast to the other \p Dump() methods this directly invokes
+  /// \p clang::QualType::dump().
+  LLVM_DUMP_METHOD void dump(lldb::opaque_compiler_type_t type) const override;
+#endif
+
+  void Dump(Stream &s);
+
+  void DumpValue(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
+                 Stream *s, lldb::Format format, const DataExtractor &data,
+                 lldb::offset_t data_offset, size_t data_byte_size,
+                 uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
+                 bool show_types, bool show_summary, bool verbose,
+                 uint32_t depth) override;
+
+  bool DumpTypeValue(lldb::opaque_compiler_type_t type, Stream *s,
+                     lldb::Format format, const DataExtractor &data,
+                     lldb::offset_t data_offset, size_t data_byte_size,
+                     uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
+                     ExecutionContextScope *exe_scope) override;
+
+  void DumpSummary(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
+                   Stream *s, const DataExtractor &data,
+                   lldb::offset_t data_offset, size_t data_byte_size) override;
+
+  void DumpTypeDescription(
+      lldb::opaque_compiler_type_t type) override; // Dump to stdout
+
+  void DumpTypeDescription(lldb::opaque_compiler_type_t type,
+                           Stream *s) override;
+
+  static void DumpTypeName(const CompilerType &type);
+
+  static clang::EnumDecl *GetAsEnumDecl(const CompilerType &type);
+
+  static clang::RecordDecl *GetAsRecordDecl(const CompilerType &type);
+
+  static clang::TagDecl *GetAsTagDecl(const CompilerType &type);
+
+  static clang::TypedefNameDecl *GetAsTypedefDecl(const CompilerType &type);
+
+  clang::CXXRecordDecl *GetAsCXXRecordDecl(lldb::opaque_compiler_type_t type);
+
+  static clang::ObjCInterfaceDecl *
+  GetAsObjCInterfaceDecl(const CompilerType &type);
+
+  clang::ClassTemplateDecl *ParseClassTemplateDecl(
+      clang::DeclContext *decl_ctx, lldb::AccessType access_type,
+      const char *parent_name, int tag_decl_kind,
+      const ClangASTContext::TemplateParameterInfos &template_param_infos);
+
+  clang::BlockDecl *CreateBlockDeclaration(clang::DeclContext *ctx);
+
+  clang::UsingDirectiveDecl *
+  CreateUsingDirectiveDeclaration(clang::DeclContext *decl_ctx,
+                                  clang::NamespaceDecl *ns_decl);
+
+  clang::UsingDecl *CreateUsingDeclaration(clang::DeclContext *current_decl_ctx,
+                                           clang::NamedDecl *target);
+
+  clang::VarDecl *CreateVariableDeclaration(clang::DeclContext *decl_context,
+                                            const char *name,
+                                            clang::QualType type);
+
+  static lldb::opaque_compiler_type_t
+  GetOpaqueCompilerType(clang::ASTContext *ast, lldb::BasicType basic_type);
+
+  static clang::QualType GetQualType(lldb::opaque_compiler_type_t type) {
+    if (type)
+      return clang::QualType::getFromOpaquePtr(type);
+    return clang::QualType();
+  }
+
+  static clang::QualType
+  GetCanonicalQualType(lldb::opaque_compiler_type_t type) {
+    if (type)
+      return clang::QualType::getFromOpaquePtr(type).getCanonicalType();
+    return clang::QualType();
+  }
+
+  clang::DeclarationName
+  GetDeclarationName(const char *name, const CompilerType &function_clang_type);
+  
+  virtual const clang::ExternalASTMerger::OriginMap &GetOriginMap() {
+    return m_origins;
+  }
+protected:
+  const clang::ClassTemplateSpecializationDecl *
+  GetAsTemplateSpecialization(lldb::opaque_compiler_type_t type);
+
+  // Classes that inherit from ClangASTContext can see and modify these
+  // clang-format off
+    std::string                                     m_target_triple;
+    std::unique_ptr<clang::ASTContext>              m_ast_up;
+    std::unique_ptr<clang::LangOptions>             m_language_options_up;
+    std::unique_ptr<clang::FileManager>             m_file_manager_up;
+    std::unique_ptr<clang::FileSystemOptions>       m_file_system_options_up;
+    std::unique_ptr<clang::SourceManager>           m_source_manager_up;
+    std::unique_ptr<clang::DiagnosticsEngine>       m_diagnostics_engine_up;
+    std::unique_ptr<clang::DiagnosticConsumer>      m_diagnostic_consumer_up;
+    std::shared_ptr<clang::TargetOptions>           m_target_options_rp;
+    std::unique_ptr<clang::TargetInfo>              m_target_info_up;
+    std::unique_ptr<clang::IdentifierTable>         m_identifier_table_up;
+    std::unique_ptr<clang::SelectorTable>           m_selector_table_up;
+    std::unique_ptr<clang::Builtin::Context>        m_builtins_up;
+    std::unique_ptr<DWARFASTParserClang>            m_dwarf_ast_parser_up;
+    std::unique_ptr<PDBASTParser>                   m_pdb_ast_parser_up;
+    std::unique_ptr<ClangASTSource>                 m_scratch_ast_source_up;
+    std::unique_ptr<clang::MangleContext>           m_mangle_ctx_up;
+    CompleteTagDeclCallback                         m_callback_tag_decl;
+    CompleteObjCInterfaceDeclCallback               m_callback_objc_decl;
+    void *                                          m_callback_baton;
+    clang::ExternalASTMerger::OriginMap             m_origins;
+    uint32_t                                        m_pointer_byte_size;
+    bool                                            m_ast_owned;
+    bool                                            m_can_evaluate_expressions;
+    /// The sema associated that is currently used to build this ASTContext.
+    /// May be null if we are already done parsing this ASTContext or the
+    /// ASTContext wasn't created by parsing source code.
+    clang::Sema *                                   m_sema = nullptr;
+  // clang-format on
+private:
+  // For ClangASTContext only
+  ClangASTContext(const ClangASTContext &);
+  const ClangASTContext &operator=(const ClangASTContext &);
+};
+
+class ClangASTContextForExpressions : public ClangASTContext {
+public:
+  ClangASTContextForExpressions(Target &target);
+
+  ~ClangASTContextForExpressions() override = default;
+
+  UserExpression *
+  GetUserExpression(llvm::StringRef expr, llvm::StringRef prefix,
+                    lldb::LanguageType language,
+                    Expression::ResultType desired_type,
+                    const EvaluateExpressionOptions &options,
+                    ValueObject *ctx_obj) override;
+
+  FunctionCaller *GetFunctionCaller(const CompilerType &return_type,
+                                    const Address &function_address,
+                                    const ValueList &arg_value_list,
+                                    const char *name) override;
+
+  UtilityFunction *GetUtilityFunction(const char *text,
+                                      const char *name) override;
+
+  PersistentExpressionState *GetPersistentExpressionState() override;
+  
+  clang::ExternalASTMerger &GetMergerUnchecked();
+  
+  const clang::ExternalASTMerger::OriginMap &GetOriginMap() override {
+    return GetMergerUnchecked().GetOrigins();
+  }
+private:
+  lldb::TargetWP m_target_wp;
+  lldb::ClangPersistentVariablesUP m_persistent_variables; ///< These are the
+                                                           ///persistent
+                                                           ///variables
+                                                           ///associated with
+                                                           ///this process for
+                                                           ///the expression
+                                                           ///parser.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ClangASTContext_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/ClangASTImporter.h b/linux-x64/clang/include/lldb/Symbol/ClangASTImporter.h
new file mode 100644
index 0000000..353b123
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ClangASTImporter.h
@@ -0,0 +1,401 @@
+//===-- ClangASTImporter.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ClangASTImporter_h_
+#define liblldb_ClangASTImporter_h_
+
+#include <map>
+#include <memory>
+#include <set>
+#include <vector>
+
+#include "clang/AST/ASTImporter.h"
+#include "clang/AST/CharUnits.h"
+#include "clang/AST/Decl.h"
+#include "clang/AST/DeclCXX.h"
+#include "clang/Basic/FileManager.h"
+#include "clang/Basic/FileSystemOptions.h"
+
+#include "lldb/Host/FileSystem.h"
+#include "lldb/Symbol/CompilerDeclContext.h"
+#include "lldb/Symbol/CxxModuleHandler.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/DenseMap.h"
+
+namespace lldb_private {
+
+class ClangASTMetrics {
+public:
+  static void DumpCounters(Log *log);
+  static void ClearLocalCounters() { local_counters = {0, 0, 0, 0, 0, 0}; }
+
+  static void RegisterVisibleQuery() {
+    ++global_counters.m_visible_query_count;
+    ++local_counters.m_visible_query_count;
+  }
+
+  static void RegisterLexicalQuery() {
+    ++global_counters.m_lexical_query_count;
+    ++local_counters.m_lexical_query_count;
+  }
+
+  static void RegisterLLDBImport() {
+    ++global_counters.m_lldb_import_count;
+    ++local_counters.m_lldb_import_count;
+  }
+
+  static void RegisterClangImport() {
+    ++global_counters.m_clang_import_count;
+    ++local_counters.m_clang_import_count;
+  }
+
+  static void RegisterDeclCompletion() {
+    ++global_counters.m_decls_completed_count;
+    ++local_counters.m_decls_completed_count;
+  }
+
+  static void RegisterRecordLayout() {
+    ++global_counters.m_record_layout_count;
+    ++local_counters.m_record_layout_count;
+  }
+
+private:
+  struct Counters {
+    uint64_t m_visible_query_count;
+    uint64_t m_lexical_query_count;
+    uint64_t m_lldb_import_count;
+    uint64_t m_clang_import_count;
+    uint64_t m_decls_completed_count;
+    uint64_t m_record_layout_count;
+  };
+
+  static Counters global_counters;
+  static Counters local_counters;
+
+  static void DumpCounters(Log *log, Counters &counters);
+};
+
+class ClangASTImporter {
+public:
+  struct LayoutInfo {
+    LayoutInfo()
+        : bit_size(0), alignment(0), field_offsets(), base_offsets(),
+          vbase_offsets() {}
+    uint64_t bit_size;
+    uint64_t alignment;
+    llvm::DenseMap<const clang::FieldDecl *, uint64_t> field_offsets;
+    llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits> base_offsets;
+    llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+        vbase_offsets;
+  };
+
+  ClangASTImporter()
+      : m_file_manager(clang::FileSystemOptions(),
+                       FileSystem::Instance().GetVirtualFileSystem()) {}
+
+  clang::QualType CopyType(clang::ASTContext *dst_ctx,
+                           clang::ASTContext *src_ctx, clang::QualType type);
+
+  lldb::opaque_compiler_type_t CopyType(clang::ASTContext *dst_ctx,
+                                        clang::ASTContext *src_ctx,
+                                        lldb::opaque_compiler_type_t type);
+
+  CompilerType CopyType(ClangASTContext &dst, const CompilerType &src_type);
+
+  clang::Decl *CopyDecl(clang::ASTContext *dst_ctx, clang::ASTContext *src_ctx,
+                        clang::Decl *decl);
+
+  lldb::opaque_compiler_type_t DeportType(clang::ASTContext *dst_ctx,
+                                          clang::ASTContext *src_ctx,
+                                          lldb::opaque_compiler_type_t type);
+
+  clang::Decl *DeportDecl(clang::ASTContext *dst_ctx,
+                          clang::ASTContext *src_ctx, clang::Decl *decl);
+
+  void InsertRecordDecl(clang::RecordDecl *decl, const LayoutInfo &layout);
+
+  bool LayoutRecordType(
+      const clang::RecordDecl *record_decl, uint64_t &bit_size,
+      uint64_t &alignment,
+      llvm::DenseMap<const clang::FieldDecl *, uint64_t> &field_offsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &base_offsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &vbase_offsets);
+
+  bool CanImport(const CompilerType &type);
+
+  bool Import(const CompilerType &type);
+
+  bool CompleteType(const CompilerType &compiler_type);
+
+  void CompleteDecl(clang::Decl *decl);
+
+  bool CompleteTagDecl(clang::TagDecl *decl);
+
+  bool CompleteTagDeclWithOrigin(clang::TagDecl *decl, clang::TagDecl *origin);
+
+  bool CompleteObjCInterfaceDecl(clang::ObjCInterfaceDecl *interface_decl);
+
+  bool CompleteAndFetchChildren(clang::QualType type);
+
+  bool RequireCompleteType(clang::QualType type);
+
+  bool ResolveDeclOrigin(const clang::Decl *decl, clang::Decl **original_decl,
+                         clang::ASTContext **original_ctx) {
+    DeclOrigin origin = GetDeclOrigin(decl);
+
+    if (original_decl)
+      *original_decl = origin.decl;
+
+    if (original_ctx)
+      *original_ctx = origin.ctx;
+
+    return origin.Valid();
+  }
+
+  void SetDeclOrigin(const clang::Decl *decl, clang::Decl *original_decl);
+
+  ClangASTMetadata *GetDeclMetadata(const clang::Decl *decl);
+
+  //
+  // Namespace maps
+  //
+
+  typedef std::vector<std::pair<lldb::ModuleSP, CompilerDeclContext>>
+      NamespaceMap;
+  typedef std::shared_ptr<NamespaceMap> NamespaceMapSP;
+
+  void RegisterNamespaceMap(const clang::NamespaceDecl *decl,
+                            NamespaceMapSP &namespace_map);
+
+  NamespaceMapSP GetNamespaceMap(const clang::NamespaceDecl *decl);
+
+  void BuildNamespaceMap(const clang::NamespaceDecl *decl);
+
+  //
+  // Completers for maps
+  //
+
+  class MapCompleter {
+  public:
+    virtual ~MapCompleter();
+
+    virtual void CompleteNamespaceMap(NamespaceMapSP &namespace_map,
+                                      ConstString name,
+                                      NamespaceMapSP &parent_map) const = 0;
+  };
+
+  void InstallMapCompleter(clang::ASTContext *dst_ctx,
+                           MapCompleter &completer) {
+    ASTContextMetadataSP context_md;
+    ContextMetadataMap::iterator context_md_iter = m_metadata_map.find(dst_ctx);
+
+    if (context_md_iter == m_metadata_map.end()) {
+      context_md = ASTContextMetadataSP(new ASTContextMetadata(dst_ctx));
+      m_metadata_map[dst_ctx] = context_md;
+    } else {
+      context_md = context_md_iter->second;
+    }
+
+    context_md->m_map_completer = &completer;
+  }
+
+  void ForgetDestination(clang::ASTContext *dst_ctx);
+  void ForgetSource(clang::ASTContext *dst_ctx, clang::ASTContext *src_ctx);
+
+private:
+  struct DeclOrigin {
+    DeclOrigin() : ctx(nullptr), decl(nullptr) {}
+
+    DeclOrigin(clang::ASTContext *_ctx, clang::Decl *_decl)
+        : ctx(_ctx), decl(_decl) {}
+
+    DeclOrigin(const DeclOrigin &rhs) {
+      ctx = rhs.ctx;
+      decl = rhs.decl;
+    }
+
+    void operator=(const DeclOrigin &rhs) {
+      ctx = rhs.ctx;
+      decl = rhs.decl;
+    }
+
+    bool Valid() { return (ctx != nullptr || decl != nullptr); }
+
+    clang::ASTContext *ctx;
+    clang::Decl *decl;
+  };
+
+  typedef std::map<const clang::Decl *, DeclOrigin> OriginMap;
+
+  /// ASTImporter that intercepts and records the import process of the
+  /// underlying ASTImporter.
+  ///
+  /// This class updates the map from declarations to their original
+  /// declarations and can record and complete declarations that have been
+  /// imported in a certain interval.
+  ///
+  /// When intercepting a declaration import, the ASTImporterDelegate uses the
+  /// CxxModuleHandler to replace any missing or malformed declarations with
+  /// their counterpart from a C++ module.
+  class ASTImporterDelegate : public clang::ASTImporter {
+  public:
+    ASTImporterDelegate(ClangASTImporter &master, clang::ASTContext *target_ctx,
+                        clang::ASTContext *source_ctx)
+        : clang::ASTImporter(*target_ctx, master.m_file_manager, *source_ctx,
+                             master.m_file_manager, true /*minimal*/),
+          m_decls_to_deport(nullptr), m_decls_already_deported(nullptr),
+          m_master(master), m_source_ctx(source_ctx) {}
+
+    /// Scope guard that attaches a CxxModuleHandler to an ASTImporterDelegate
+    /// and deattaches it at the end of the scope. Supports being used multiple
+    /// times on the same ASTImporterDelegate instance in nested scopes.
+    class CxxModuleScope {
+      /// The handler we attach to the ASTImporterDelegate.
+      CxxModuleHandler m_handler;
+      /// The ASTImporterDelegate we are supposed to attach the handler to.
+      ASTImporterDelegate &m_delegate;
+      /// True iff we attached the handler to the ASTImporterDelegate.
+      bool m_valid = false;
+
+    public:
+      CxxModuleScope(ASTImporterDelegate &delegate, clang::ASTContext *dst_ctx)
+          : m_delegate(delegate) {
+        // If the delegate doesn't have a CxxModuleHandler yet, create one
+        // and attach it.
+        if (!delegate.m_std_handler) {
+          m_handler = CxxModuleHandler(delegate, dst_ctx);
+          m_valid = true;
+          delegate.m_std_handler = &m_handler;
+        }
+      }
+      ~CxxModuleScope() {
+        if (m_valid) {
+          // Make sure no one messed with the handler we placed.
+          assert(m_delegate.m_std_handler == &m_handler);
+          m_delegate.m_std_handler = nullptr;
+        }
+      }
+    };
+
+  protected:
+    llvm::Expected<clang::Decl *> ImportImpl(clang::Decl *From) override;
+
+  public:
+    // A call to "InitDeportWorkQueues" puts the delegate into deport mode.
+    // In deport mode, every copied Decl that could require completion is
+    // recorded and placed into the decls_to_deport set.
+    //
+    // A call to "ExecuteDeportWorkQueues" completes all the Decls that
+    // are in decls_to_deport, adding any Decls it sees along the way that it
+    // hasn't already deported.  It proceeds until decls_to_deport is empty.
+    //
+    // These calls must be paired.  Leaving a delegate in deport mode or trying
+    // to start deport delegate with a new pair of queues will result in an
+    // assertion failure.
+
+    void
+    InitDeportWorkQueues(std::set<clang::NamedDecl *> *decls_to_deport,
+                         std::set<clang::NamedDecl *> *decls_already_deported);
+    void ExecuteDeportWorkQueues();
+
+    void ImportDefinitionTo(clang::Decl *to, clang::Decl *from);
+
+    void Imported(clang::Decl *from, clang::Decl *to) override;
+
+    clang::Decl *GetOriginalDecl(clang::Decl *To) override;
+
+    /// Decls we should ignore when mapping decls back to their original
+    /// ASTContext. Used by the CxxModuleHandler to mark declarations that
+    /// were created from the 'std' C++ module to prevent that the Importer
+    /// tries to sync them with the broken equivalent in the debug info AST.
+    std::set<clang::Decl *> m_decls_to_ignore;
+    std::set<clang::NamedDecl *> *m_decls_to_deport;
+    std::set<clang::NamedDecl *> *m_decls_already_deported;
+    ClangASTImporter &m_master;
+    clang::ASTContext *m_source_ctx;
+    CxxModuleHandler *m_std_handler = nullptr;
+  };
+
+  typedef std::shared_ptr<ASTImporterDelegate> ImporterDelegateSP;
+  typedef std::map<clang::ASTContext *, ImporterDelegateSP> DelegateMap;
+  typedef std::map<const clang::NamespaceDecl *, NamespaceMapSP>
+      NamespaceMetaMap;
+
+  struct ASTContextMetadata {
+    ASTContextMetadata(clang::ASTContext *dst_ctx)
+        : m_dst_ctx(dst_ctx), m_delegates(), m_origins(), m_namespace_maps(),
+          m_map_completer(nullptr) {}
+
+    clang::ASTContext *m_dst_ctx;
+    DelegateMap m_delegates;
+    OriginMap m_origins;
+
+    NamespaceMetaMap m_namespace_maps;
+    MapCompleter *m_map_completer;
+  };
+
+  typedef std::shared_ptr<ASTContextMetadata> ASTContextMetadataSP;
+  typedef std::map<const clang::ASTContext *, ASTContextMetadataSP>
+      ContextMetadataMap;
+
+  ContextMetadataMap m_metadata_map;
+
+  ASTContextMetadataSP GetContextMetadata(clang::ASTContext *dst_ctx) {
+    ContextMetadataMap::iterator context_md_iter = m_metadata_map.find(dst_ctx);
+
+    if (context_md_iter == m_metadata_map.end()) {
+      ASTContextMetadataSP context_md =
+          ASTContextMetadataSP(new ASTContextMetadata(dst_ctx));
+      m_metadata_map[dst_ctx] = context_md;
+      return context_md;
+    } else {
+      return context_md_iter->second;
+    }
+  }
+
+  ASTContextMetadataSP MaybeGetContextMetadata(clang::ASTContext *dst_ctx) {
+    ContextMetadataMap::iterator context_md_iter = m_metadata_map.find(dst_ctx);
+
+    if (context_md_iter != m_metadata_map.end())
+      return context_md_iter->second;
+    else
+      return ASTContextMetadataSP();
+  }
+
+  ImporterDelegateSP GetDelegate(clang::ASTContext *dst_ctx,
+                                 clang::ASTContext *src_ctx) {
+    ASTContextMetadataSP context_md = GetContextMetadata(dst_ctx);
+
+    DelegateMap &delegates = context_md->m_delegates;
+    DelegateMap::iterator delegate_iter = delegates.find(src_ctx);
+
+    if (delegate_iter == delegates.end()) {
+      ImporterDelegateSP delegate =
+          ImporterDelegateSP(new ASTImporterDelegate(*this, dst_ctx, src_ctx));
+      delegates[src_ctx] = delegate;
+      return delegate;
+    } else {
+      return delegate_iter->second;
+    }
+  }
+
+  DeclOrigin GetDeclOrigin(const clang::Decl *decl);
+
+  clang::FileManager m_file_manager;
+  typedef llvm::DenseMap<const clang::RecordDecl *, LayoutInfo>
+      RecordDeclToLayoutMap;
+
+  RecordDeclToLayoutMap m_record_decl_to_layout_map;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ClangASTImporter_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/ClangExternalASTSourceCallbacks.h b/linux-x64/clang/include/lldb/Symbol/ClangExternalASTSourceCallbacks.h
new file mode 100644
index 0000000..a2d4f81
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ClangExternalASTSourceCallbacks.h
@@ -0,0 +1,138 @@
+//===-- ClangExternalASTSourceCallbacks.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ClangExternalASTSourceCallbacks_h_
+#define liblldb_ClangExternalASTSourceCallbacks_h_
+
+#include <stdint.h>
+
+#include "clang/AST/CharUnits.h"
+#include "llvm/ADT/DenseMap.h"
+
+#include "lldb/Core/ClangForward.h"
+#include "lldb/Symbol/ClangExternalASTSourceCommon.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/lldb-enumerations.h"
+
+namespace lldb_private {
+
+class ClangExternalASTSourceCallbacks : public ClangExternalASTSourceCommon {
+public:
+  typedef void (*CompleteTagDeclCallback)(void *baton, clang::TagDecl *);
+  typedef void (*CompleteObjCInterfaceDeclCallback)(void *baton,
+                                                    clang::ObjCInterfaceDecl *);
+  typedef void (*FindExternalVisibleDeclsByNameCallback)(
+      void *baton, const clang::DeclContext *DC, clang::DeclarationName Name,
+      llvm::SmallVectorImpl<clang::NamedDecl *> *results);
+  typedef bool (*LayoutRecordTypeCallback)(
+      void *baton, const clang::RecordDecl *Record, uint64_t &Size,
+      uint64_t &Alignment,
+      llvm::DenseMap<const clang::FieldDecl *, uint64_t> &FieldOffsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &BaseOffsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &VirtualBaseOffsets);
+
+  ClangExternalASTSourceCallbacks(
+      CompleteTagDeclCallback tag_decl_callback,
+      CompleteObjCInterfaceDeclCallback objc_decl_callback,
+      FindExternalVisibleDeclsByNameCallback find_by_name_callback,
+      LayoutRecordTypeCallback layout_record_type_callback,
+      void *callback_baton)
+      : m_callback_tag_decl(tag_decl_callback),
+        m_callback_objc_decl(objc_decl_callback),
+        m_callback_find_by_name(find_by_name_callback),
+        m_callback_layout_record_type(layout_record_type_callback),
+        m_callback_baton(callback_baton) {}
+
+  // clang::ExternalASTSource
+
+  clang::Decl *GetExternalDecl(uint32_t ID) override {
+    // This method only needs to be implemented if the AST source ever passes
+    // back decl sets as VisibleDeclaration objects.
+    return nullptr;
+  }
+
+  clang::Stmt *GetExternalDeclStmt(uint64_t Offset) override {
+    // This operation is meant to be used via a LazyOffsetPtr.  It only needs
+    // to be implemented if the AST source uses methods like
+    // FunctionDecl::setLazyBody when building decls.
+    return nullptr;
+  }
+
+  clang::Selector GetExternalSelector(uint32_t ID) override {
+    // This operation only needs to be implemented if the AST source returns
+    // non-zero for GetNumKnownSelectors().
+    return clang::Selector();
+  }
+
+  uint32_t GetNumExternalSelectors() override { return 0; }
+
+  clang::CXXBaseSpecifier *
+  GetExternalCXXBaseSpecifiers(uint64_t Offset) override {
+    return nullptr;
+  }
+
+  virtual void MaterializeVisibleDecls(const clang::DeclContext *decl_ctx) {}
+
+  void FindExternalLexicalDecls(
+      const clang::DeclContext *DC,
+      llvm::function_ref<bool(clang::Decl::Kind)> IsKindWeWant,
+      llvm::SmallVectorImpl<clang::Decl *> &Result) override;
+
+  bool
+  FindExternalVisibleDeclsByName(const clang::DeclContext *decl_ctx,
+                                 clang::DeclarationName decl_name) override;
+
+  void CompleteType(clang::TagDecl *tag_decl) override;
+
+  void CompleteType(clang::ObjCInterfaceDecl *objc_decl) override;
+
+  bool layoutRecordType(
+      const clang::RecordDecl *Record, uint64_t &Size, uint64_t &Alignment,
+      llvm::DenseMap<const clang::FieldDecl *, uint64_t> &FieldOffsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &BaseOffsets,
+      llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
+          &VirtualBaseOffsets) override;
+
+  void SetExternalSourceCallbacks(
+      CompleteTagDeclCallback tag_decl_callback,
+      CompleteObjCInterfaceDeclCallback objc_decl_callback,
+      FindExternalVisibleDeclsByNameCallback find_by_name_callback,
+      LayoutRecordTypeCallback layout_record_type_callback,
+      void *callback_baton) {
+    m_callback_tag_decl = tag_decl_callback;
+    m_callback_objc_decl = objc_decl_callback;
+    m_callback_find_by_name = find_by_name_callback;
+    m_callback_layout_record_type = layout_record_type_callback;
+    m_callback_baton = callback_baton;
+  }
+
+  void RemoveExternalSourceCallbacks(void *callback_baton) {
+    if (callback_baton == m_callback_baton) {
+      m_callback_tag_decl = nullptr;
+      m_callback_objc_decl = nullptr;
+      m_callback_find_by_name = nullptr;
+      m_callback_layout_record_type = nullptr;
+    }
+  }
+
+protected:
+  // Classes that inherit from ClangExternalASTSourceCallbacks can see and
+  // modify these
+  CompleteTagDeclCallback m_callback_tag_decl;
+  CompleteObjCInterfaceDeclCallback m_callback_objc_decl;
+  FindExternalVisibleDeclsByNameCallback m_callback_find_by_name;
+  LayoutRecordTypeCallback m_callback_layout_record_type;
+  void *m_callback_baton;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ClangExternalASTSourceCallbacks_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/ClangExternalASTSourceCommon.h b/linux-x64/clang/include/lldb/Symbol/ClangExternalASTSourceCommon.h
new file mode 100644
index 0000000..8e69f6d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ClangExternalASTSourceCommon.h
@@ -0,0 +1,143 @@
+//===-- ClangExternalASTSourceCommon.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ClangExternalASTSourceCommon_h
+#define liblldb_ClangExternalASTSourceCommon_h
+
+// Clang headers like to use NDEBUG inside of them to enable/disable debug
+// related features using "#ifndef NDEBUG" preprocessor blocks to do one thing
+// or another. This is bad because it means that if clang was built in release
+// mode, it assumes that you are building in release mode which is not always
+// the case. You can end up with functions that are defined as empty in header
+// files when NDEBUG is not defined, and this can cause link errors with the
+// clang .a files that you have since you might be missing functions in the .a
+// file. So we have to define NDEBUG when including clang headers to avoid any
+// mismatches. This is covered by rdar://problem/8691220
+
+#if !defined(NDEBUG) && !defined(LLVM_NDEBUG_OFF)
+#define LLDB_DEFINED_NDEBUG_FOR_CLANG
+#define NDEBUG
+// Need to include assert.h so it is as clang would expect it to be (disabled)
+#include <assert.h>
+#endif
+
+#ifdef LLDB_DEFINED_NDEBUG_FOR_CLANG
+#undef NDEBUG
+#undef LLDB_DEFINED_NDEBUG_FOR_CLANG
+// Need to re-include assert.h so it is as _we_ would expect it to be (enabled)
+#include <assert.h>
+#endif
+
+#include "clang/AST/ExternalASTSource.h"
+
+#include "lldb/Core/dwarf.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+
+namespace lldb_private {
+
+class ClangASTMetadata {
+public:
+  ClangASTMetadata()
+      : m_user_id(0), m_union_is_user_id(false), m_union_is_isa_ptr(false),
+        m_has_object_ptr(false), m_is_self(false), m_is_dynamic_cxx(true) {}
+
+  bool GetIsDynamicCXXType() const { return m_is_dynamic_cxx; }
+
+  void SetIsDynamicCXXType(bool b) { m_is_dynamic_cxx = b; }
+
+  void SetUserID(lldb::user_id_t user_id) {
+    m_user_id = user_id;
+    m_union_is_user_id = true;
+    m_union_is_isa_ptr = false;
+  }
+
+  lldb::user_id_t GetUserID() const {
+    if (m_union_is_user_id)
+      return m_user_id;
+    else
+      return LLDB_INVALID_UID;
+  }
+
+  void SetISAPtr(uint64_t isa_ptr) {
+    m_isa_ptr = isa_ptr;
+    m_union_is_user_id = false;
+    m_union_is_isa_ptr = true;
+  }
+
+  uint64_t GetISAPtr() const {
+    if (m_union_is_isa_ptr)
+      return m_isa_ptr;
+    else
+      return 0;
+  }
+
+  void SetObjectPtrName(const char *name) {
+    m_has_object_ptr = true;
+    if (strcmp(name, "self") == 0)
+      m_is_self = true;
+    else if (strcmp(name, "this") == 0)
+      m_is_self = false;
+    else
+      m_has_object_ptr = false;
+  }
+
+  lldb::LanguageType GetObjectPtrLanguage() const {
+    if (m_has_object_ptr) {
+      if (m_is_self)
+        return lldb::eLanguageTypeObjC;
+      else
+        return lldb::eLanguageTypeC_plus_plus;
+    }
+    return lldb::eLanguageTypeUnknown;
+  }
+
+  const char *GetObjectPtrName() const {
+    if (m_has_object_ptr) {
+      if (m_is_self)
+        return "self";
+      else
+        return "this";
+    } else
+      return nullptr;
+  }
+
+  bool HasObjectPtr() const { return m_has_object_ptr; }
+
+  void Dump(Stream *s);
+
+private:
+  union {
+    lldb::user_id_t m_user_id;
+    uint64_t m_isa_ptr;
+  };
+
+  bool m_union_is_user_id : 1, m_union_is_isa_ptr : 1, m_has_object_ptr : 1,
+      m_is_self : 1, m_is_dynamic_cxx : 1;
+};
+
+class ClangExternalASTSourceCommon : public clang::ExternalASTSource {
+public:
+  ClangExternalASTSourceCommon();
+  ~ClangExternalASTSourceCommon() override;
+
+  ClangASTMetadata *GetMetadata(const void *object);
+  void SetMetadata(const void *object, ClangASTMetadata &metadata);
+  bool HasMetadata(const void *object);
+
+  static ClangExternalASTSourceCommon *Lookup(clang::ExternalASTSource *source);
+
+private:
+  typedef llvm::DenseMap<const void *, ClangASTMetadata> MetadataMap;
+
+  MetadataMap m_metadata;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ClangExternalASTSourceCommon_h
diff --git a/linux-x64/clang/include/lldb/Symbol/ClangUtil.h b/linux-x64/clang/include/lldb/Symbol/ClangUtil.h
new file mode 100644
index 0000000..d610603
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ClangUtil.h
@@ -0,0 +1,36 @@
+//===-- ClangUtil.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+// A collection of helper methods and data structures for manipulating clang
+// types and decls.
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SYMBOL_CLANGUTIL_H
+#define LLDB_SYMBOL_CLANGUTIL_H
+
+#include "clang/AST/Type.h"
+
+#include "lldb/Symbol/CompilerType.h"
+
+namespace clang {
+class TagDecl;
+}
+
+namespace lldb_private {
+struct ClangUtil {
+  static bool IsClangType(const CompilerType &ct);
+
+  static clang::QualType GetQualType(const CompilerType &ct);
+
+  static clang::QualType GetCanonicalQualType(const CompilerType &ct);
+
+  static CompilerType RemoveFastQualifiers(const CompilerType &ct);
+
+  static clang::TagDecl *GetAsTagDecl(const CompilerType &type);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Symbol/CompactUnwindInfo.h b/linux-x64/clang/include/lldb/Symbol/CompactUnwindInfo.h
new file mode 100644
index 0000000..2646661
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/CompactUnwindInfo.h
@@ -0,0 +1,167 @@
+//===-- CompactUnwindInfo.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CompactUnwindInfo_h_
+#define liblldb_CompactUnwindInfo_h_
+
+#include "lldb/Symbol/ObjectFile.h"
+#include "lldb/Symbol/UnwindPlan.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/lldb-private.h"
+#include <mutex>
+#include <vector>
+
+namespace lldb_private {
+
+// Compact Unwind info is an unwind format used on Darwin.  The unwind
+// instructions for typical compiler-generated functions can be expressed in a
+// 32-bit encoding. The format includes a two-level index so the unwind
+// information for a function can be found by two binary searches in the
+// section.  It can represent both stack frames that use a frame-pointer
+// register and frameless functions, on i386/x86_64 for instance.  When a
+// function is too complex to be represented in the compact unwind format, it
+// calls out to eh_frame unwind instructions.
+
+// On Mac OS X / iOS, a function will have either a compact unwind
+// representation or an eh_frame representation.  If lldb is going to benefit
+// from the compiler's description about saved register locations, it must be
+// able to read both sources of information.
+
+class CompactUnwindInfo {
+public:
+  CompactUnwindInfo(ObjectFile &objfile, lldb::SectionSP &section);
+
+  ~CompactUnwindInfo();
+
+  bool GetUnwindPlan(Target &target, Address addr, UnwindPlan &unwind_plan);
+
+  bool IsValid(const lldb::ProcessSP &process_sp);
+
+private:
+  // The top level index entries of the compact unwind info
+  //   (internal representation of struct
+  //   unwind_info_section_header_index_entry)
+  // There are relatively few of these (one per 500/1000 functions, depending
+  // on format) so creating them on first scan will not be too costly.
+  struct UnwindIndex {
+    uint32_t function_offset; // The offset of the first function covered by
+                              // this index
+    uint32_t second_level; // The offset (inside unwind_info sect) to the second
+                           // level page for this index
+    // (either UNWIND_SECOND_LEVEL_REGULAR or UNWIND_SECOND_LEVEL_COMPRESSED)
+    uint32_t lsda_array_start; // The offset (inside unwind_info sect) LSDA
+                               // array for this index
+    uint32_t lsda_array_end; // The offset to the LSDA array for the NEXT index
+    bool sentinal_entry; // There is an empty index at the end which provides
+                         // the upper bound of
+    // function addresses that are described
+
+    UnwindIndex()
+        : function_offset(0), second_level(0), lsda_array_start(0),
+          lsda_array_end(0), sentinal_entry(false) {}
+
+    bool operator<(const CompactUnwindInfo::UnwindIndex &rhs) const {
+      return function_offset < rhs.function_offset;
+    }
+
+    bool operator==(const CompactUnwindInfo::UnwindIndex &rhs) const {
+      return function_offset == rhs.function_offset;
+    }
+  };
+
+  // An internal object used to store the information we retrieve about a
+  // function -- the encoding bits and possibly the LSDA/personality function.
+  struct FunctionInfo {
+    uint32_t encoding;    // compact encoding 32-bit value for this function
+    Address lsda_address; // the address of the LSDA data for this function
+    Address personality_ptr_address; // the address where the personality
+                                     // routine addr can be found
+
+    uint32_t valid_range_offset_start; // first offset that this encoding is
+                                       // valid for (start of the function)
+    uint32_t
+        valid_range_offset_end; // the offset of the start of the next function
+    FunctionInfo()
+        : encoding(0), lsda_address(), personality_ptr_address(),
+          valid_range_offset_start(0), valid_range_offset_end(0) {}
+  };
+
+  struct UnwindHeader {
+    uint32_t version;
+    uint32_t common_encodings_array_offset;
+    uint32_t common_encodings_array_count;
+    uint32_t personality_array_offset;
+    uint32_t personality_array_count;
+
+    UnwindHeader()
+        : common_encodings_array_offset(0), common_encodings_array_count(0),
+          personality_array_offset(0), personality_array_count(0) {}
+  };
+
+  void ScanIndex(const lldb::ProcessSP &process_sp);
+
+  bool GetCompactUnwindInfoForFunction(Target &target, Address address,
+                                       FunctionInfo &unwind_info);
+
+  lldb::offset_t
+  BinarySearchRegularSecondPage(uint32_t entry_page_offset,
+                                uint32_t entry_count, uint32_t function_offset,
+                                uint32_t *entry_func_start_offset,
+                                uint32_t *entry_func_end_offset);
+
+  uint32_t BinarySearchCompressedSecondPage(uint32_t entry_page_offset,
+                                            uint32_t entry_count,
+                                            uint32_t function_offset_to_find,
+                                            uint32_t function_offset_base,
+                                            uint32_t *entry_func_start_offset,
+                                            uint32_t *entry_func_end_offset);
+
+  uint32_t GetLSDAForFunctionOffset(uint32_t lsda_offset, uint32_t lsda_count,
+                                    uint32_t function_offset);
+
+  bool CreateUnwindPlan_x86_64(Target &target, FunctionInfo &function_info,
+                               UnwindPlan &unwind_plan,
+                               Address pc_or_function_start);
+
+  bool CreateUnwindPlan_i386(Target &target, FunctionInfo &function_info,
+                             UnwindPlan &unwind_plan,
+                             Address pc_or_function_start);
+
+  bool CreateUnwindPlan_arm64(Target &target, FunctionInfo &function_info,
+                              UnwindPlan &unwind_plan,
+                              Address pc_or_function_start);
+
+  bool CreateUnwindPlan_armv7(Target &target, FunctionInfo &function_info,
+                              UnwindPlan &unwind_plan,
+                              Address pc_or_function_start);
+
+  ObjectFile &m_objfile;
+  lldb::SectionSP m_section_sp;
+  lldb::DataBufferSP m_section_contents_if_encrypted; // if the binary is
+                                                      // encrypted, read the
+                                                      // sect contents
+  // out of live memory and cache them here
+  std::mutex m_mutex;
+  std::vector<UnwindIndex> m_indexes;
+
+  LazyBool m_indexes_computed; // eLazyBoolYes once we've tried to parse the
+                               // unwind info
+  // eLazyBoolNo means we cannot parse the unwind info & should not retry
+  // eLazyBoolCalculate means we haven't tried to parse it yet
+
+  DataExtractor m_unwindinfo_data;
+  bool m_unwindinfo_data_computed; // true once we've mapped in the unwindinfo
+                                   // data
+
+  UnwindHeader m_unwind_header;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CompactUnwindInfo_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/CompileUnit.h b/linux-x64/clang/include/lldb/Symbol/CompileUnit.h
new file mode 100644
index 0000000..c3ba2e2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/CompileUnit.h
@@ -0,0 +1,422 @@
+//===-- CompileUnit.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CompUnit_h_
+#define liblldb_CompUnit_h_
+
+#include "lldb/Core/FileSpecList.h"
+#include "lldb/Core/ModuleChild.h"
+#include "lldb/Symbol/DebugMacros.h"
+#include "lldb/Symbol/Function.h"
+#include "lldb/Symbol/SourceModule.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-enumerations.h"
+
+#include "llvm/ADT/DenseMap.h"
+
+namespace lldb_private {
+/// \class CompileUnit CompileUnit.h "lldb/Symbol/CompileUnit.h"
+/// A class that describes a compilation unit.
+///
+/// A representation of a compilation unit, or compiled source file.
+/// The UserID of the compile unit is specified by the SymbolFile plug-in and
+/// can have any value as long as the value is unique within the Module that
+/// owns this compile units.
+///
+/// Each compile unit has a list of functions, global and static variables,
+/// support file list (include files and inlined source files), and a line
+/// table.
+class CompileUnit : public std::enable_shared_from_this<CompileUnit>,
+                    public ModuleChild,
+                    public FileSpec,
+                    public UserID,
+                    public SymbolContextScope {
+public:
+  /// Construct with a module, path, UID and language.
+  ///
+  /// Initialize the compile unit given the owning \a module, a path to
+  /// convert into a FileSpec, the SymbolFile plug-in supplied \a uid, and the
+  /// source language type.
+  ///
+  /// \param[in] module
+  ///     The parent module that owns this compile unit. This value
+  ///     must be a valid pointer value.
+  ///
+  /// \param[in] user_data
+  ///     User data where the SymbolFile parser can store data.
+  ///
+  /// \param[in] pathname
+  ///     The path to the source file for this compile unit.
+  ///
+  /// \param[in] uid
+  ///     The user ID of the compile unit. This value is supplied by
+  ///     the SymbolFile plug-in and should be a value that allows
+  ///     the SymbolFile plug-in to easily locate and parse additional
+  ///     information for the compile unit.
+  ///
+  /// \param[in] language
+  ///     A language enumeration type that describes the main language
+  ///     of this compile unit.
+  ///
+  /// \param[in] is_optimized
+  ///     A value that can initialized with eLazyBoolYes, eLazyBoolNo
+  ///     or eLazyBoolCalculate. If set to eLazyBoolCalculate, then
+  ///     an extra call into SymbolVendor will be made to calculate if
+  ///     the compile unit is optimized will be made when
+  ///     CompileUnit::GetIsOptimized() is called.
+  ///
+  /// \see lldb::LanguageType
+  CompileUnit(const lldb::ModuleSP &module_sp, void *user_data,
+              const char *pathname, lldb::user_id_t uid,
+              lldb::LanguageType language, lldb_private::LazyBool is_optimized);
+
+  /// Construct with a module, file spec, UID and language.
+  ///
+  /// Initialize the compile unit given the owning \a module, a path to
+  /// convert into a FileSpec, the SymbolFile plug-in supplied \a uid, and the
+  /// source language type.
+  ///
+  /// \param[in] module
+  ///     The parent module that owns this compile unit. This value
+  ///     must be a valid pointer value.
+  ///
+  /// \param[in] user_data
+  ///     User data where the SymbolFile parser can store data.
+  ///
+  /// \param[in] file_spec
+  ///     The file specification for the source file of this compile
+  ///     unit.
+  ///
+  /// \param[in] uid
+  ///     The user ID of the compile unit. This value is supplied by
+  ///     the SymbolFile plug-in and should be a value that allows
+  ///     the plug-in to easily locate and parse
+  ///     additional information for the compile unit.
+  ///
+  /// \param[in] language
+  ///     A language enumeration type that describes the main language
+  ///     of this compile unit.
+  ///
+  /// \param[in] is_optimized
+  ///     A value that can initialized with eLazyBoolYes, eLazyBoolNo
+  ///     or eLazyBoolCalculate. If set to eLazyBoolCalculate, then
+  ///     an extra call into SymbolVendor will be made to calculate if
+  ///     the compile unit is optimized will be made when
+  ///     CompileUnit::GetIsOptimized() is called.
+  ///
+  /// \see lldb::LanguageType
+  CompileUnit(const lldb::ModuleSP &module_sp, void *user_data,
+              const FileSpec &file_spec, lldb::user_id_t uid,
+              lldb::LanguageType language, lldb_private::LazyBool is_optimized);
+
+  /// Destructor
+  ~CompileUnit() override;
+
+  /// Add a function to this compile unit.
+  ///
+  /// Typically called by the SymbolFile plug-ins as they partially parse the
+  /// debug information.
+  ///
+  /// \param[in] function_sp
+  ///     A shared pointer to the Function object.
+  void AddFunction(lldb::FunctionSP &function_sp);
+
+  /// \copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
+  ///
+  /// \see SymbolContextScope
+  void CalculateSymbolContext(SymbolContext *sc) override;
+
+  lldb::ModuleSP CalculateSymbolContextModule() override;
+
+  CompileUnit *CalculateSymbolContextCompileUnit() override;
+
+  /// \copydoc SymbolContextScope::DumpSymbolContext(Stream*)
+  ///
+  /// \see SymbolContextScope
+  void DumpSymbolContext(Stream *s) override;
+
+  lldb::LanguageType GetLanguage();
+
+  void SetLanguage(lldb::LanguageType language) {
+    m_flags.Set(flagsParsedLanguage);
+    m_language = language;
+  }
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+  /// Apply a lambda to each function in this compile unit.
+  ///
+  /// This provides raw access to the function shared pointer list and will not
+  /// cause the SymbolFile plug-in to parse any unparsed functions.
+  ///
+  /// \note Prefer using FindFunctionByUID over this if possible.
+  ///
+  /// \param[in] lambda
+  ///     The lambda that should be applied to every function. The lambda can
+  ///     return true if the iteration should be aborted earlier.
+  void ForeachFunction(
+      llvm::function_ref<bool(const lldb::FunctionSP &)> lambda) const;
+
+  /// Dump the compile unit contents to the stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] show_context
+  ///     If \b true, variables will dump their symbol context
+  ///     information.
+  void Dump(Stream *s, bool show_context) const;
+
+  /// Find the line entry by line and optional inlined file spec.
+  ///
+  /// Finds the first line entry that has an index greater than \a start_idx
+  /// that matches \a line. If \a file_spec_ptr is NULL, then the search
+  /// matches line entries whose file matches the file for the compile unit.
+  /// If \a file_spec_ptr is not NULL, line entries must match the specified
+  /// file spec (for inlined line table entries).
+  ///
+  /// Multiple calls to this function can find all entries that match a given
+  /// file and line by starting with \a start_idx equal to zero, and calling
+  /// this function back with the return value + 1.
+  ///
+  /// \param[in] start_idx
+  ///     The zero based index at which to start looking for matches.
+  ///
+  /// \param[in] line
+  ///     The line number to search for.
+  ///
+  /// \param[in] file_spec_ptr
+  ///     If non-NULL search for entries that match this file spec,
+  ///     else if NULL, search for line entries that match the compile
+  ///     unit file.
+  ///
+  /// \param[in] exact
+  ///     If \btrue match only if there is a line table entry for this line
+  ///     number.
+  ///     If \bfalse, find the line table entry equal to or after this line
+  ///     number.
+  ///
+  /// \param[out] line_entry
+  ///     If non-NULL, a copy of the line entry that was found.
+  ///
+  /// \return
+  ///     The zero based index of a matching line entry, or UINT32_MAX
+  ///     if no matching line entry is found.
+  uint32_t FindLineEntry(uint32_t start_idx, uint32_t line,
+                         const FileSpec *file_spec_ptr, bool exact,
+                         LineEntry *line_entry);
+
+  /// Get the line table for the compile unit.
+  ///
+  /// Called by clients and the SymbolFile plug-in. The SymbolFile plug-ins
+  /// use this function to determine if the line table has be parsed yet.
+  /// Clients use this function to get the line table from a compile unit.
+  ///
+  /// \return
+  ///     The line table object pointer, or NULL if this line table
+  ///     hasn't been parsed yet.
+  LineTable *GetLineTable();
+
+  DebugMacros *GetDebugMacros();
+
+  /// Get the compile unit's support file list.
+  ///
+  /// The support file list is used by the line table, and any objects that
+  /// have valid Declaration objects.
+  ///
+  /// \return
+  ///     A support file list object.
+  const FileSpecList &GetSupportFiles();
+
+  /// Get the compile unit's imported module list.
+  ///
+  /// This reports all the imports that the compile unit made, including the
+  /// current module.
+  ///
+  /// \return
+  ///     A list of imported modules.
+  const std::vector<SourceModule> &GetImportedModules();
+
+  /// Get the SymbolFile plug-in user data.
+  ///
+  /// SymbolFile plug-ins can store user data to internal state or objects to
+  /// quickly allow them to parse more information for a given object.
+  ///
+  /// \return
+  ///     The user data stored with the CompileUnit when it was
+  ///     constructed.
+  void *GetUserData() const;
+
+  /// Get the variable list for a compile unit.
+  ///
+  /// Called by clients to get the variable list for a compile unit. The
+  /// variable list will contain all global and static variables that were
+  /// defined at the compile unit level.
+  ///
+  /// \param[in] can_create
+  ///     If \b true, the variable list will be parsed on demand. If
+  ///     \b false, the current variable list will be returned even
+  ///     if it contains a NULL VariableList object (typically
+  ///     called by dumping routines that want to display only what
+  ///     has currently been parsed).
+  ///
+  /// \return
+  ///     A shared pointer to a variable list, that can contain NULL
+  ///     VariableList pointer if there are no global or static
+  ///     variables.
+  lldb::VariableListSP GetVariableList(bool can_create);
+
+  /// Finds a function by user ID.
+  ///
+  /// Typically used by SymbolFile plug-ins when partially parsing the debug
+  /// information to see if the function has been parsed yet.
+  ///
+  /// \param[in] uid
+  ///     The user ID of the function to find. This value is supplied
+  ///     by the SymbolFile plug-in and should be a value that
+  ///     allows the plug-in to easily locate and parse additional
+  ///     information in the function.
+  ///
+  /// \return
+  ///     A shared pointer to the function object that might contain
+  ///     a NULL Function pointer.
+  lldb::FunctionSP FindFunctionByUID(lldb::user_id_t uid);
+
+  /// Set the line table for the compile unit.
+  ///
+  /// Called by the SymbolFile plug-in when if first parses the line table and
+  /// hands ownership of the line table to this object. The compile unit owns
+  /// the line table object and will delete the object when it is deleted.
+  ///
+  /// \param[in] line_table
+  ///     A line table object pointer that this object now owns.
+  void SetLineTable(LineTable *line_table);
+
+  void SetDebugMacros(const DebugMacrosSP &debug_macros);
+
+  /// Set accessor for the variable list.
+  ///
+  /// Called by the SymbolFile plug-ins after they have parsed the variable
+  /// lists and are ready to hand ownership of the list over to this object.
+  ///
+  /// \param[in] variable_list_sp
+  ///     A shared pointer to a VariableList.
+  void SetVariableList(lldb::VariableListSP &variable_list_sp);
+
+  /// Resolve symbol contexts by file and line.
+  ///
+  /// Given a file in \a file_spec, and a line number, find all instances and
+  /// append them to the supplied symbol context list \a sc_list.
+  ///
+  /// \param[in] file_spec
+  ///     A file specification. If \a file_spec contains no directory
+  ///     information, only the basename will be used when matching
+  ///     contexts. If the directory in \a file_spec is valid, a
+  ///     complete file specification match will be performed.
+  ///
+  /// \param[in] line
+  ///     The line number to match against the compile unit's line
+  ///     tables.
+  ///
+  /// \param[in] check_inlines
+  ///     If \b true this function will also match any inline
+  ///     file and line matches. If \b false, the compile unit's
+  ///     file specification must match \a file_spec for any matches
+  ///     to be returned.
+  ///
+  /// \param[in] exact
+  ///     If true, only resolve the context if \a line exists in the line table.
+  ///     If false, resolve the context to the closest line greater than \a line
+  ///     in the line table.
+  ///
+  /// \param[in] resolve_scope
+  ///     For each matching line entry, this bitfield indicates what
+  ///     values within each SymbolContext that gets added to \a
+  ///     sc_list will be resolved. See the SymbolContext::Scope
+  ///     enumeration for a list of all available bits that can be
+  ///     resolved. Only SymbolContext entries that can be resolved
+  ///     using a LineEntry base address will be able to be resolved.
+  ///
+  /// \param[out] sc_list
+  ///     A SymbolContext list class that will get any matching
+  ///     entries appended to.
+  ///
+  /// \return
+  ///     The number of new matches that were added to \a sc_list.
+  ///
+  /// \see enum SymbolContext::Scope
+  uint32_t ResolveSymbolContext(const FileSpec &file_spec, uint32_t line,
+                                bool check_inlines, bool exact,
+                                lldb::SymbolContextItem resolve_scope,
+                                SymbolContextList &sc_list);
+
+  /// Get whether compiler optimizations were enabled for this compile unit
+  ///
+  /// "optimized" means that the debug experience may be difficult for the
+  /// user to understand.  Variables may not be available when the developer
+  /// would expect them, stepping through the source lines in the function may
+  /// appear strange, etc.
+  ///
+  /// \return
+  ///     Returns 'true' if this compile unit was compiled with
+  ///     optimization.  'false' indicates that either the optimization
+  ///     is unknown, or this compile unit was built without optimization.
+  bool GetIsOptimized();
+
+  /// Returns the number of functions in this compile unit
+  size_t GetNumFunctions() const { return m_functions_by_uid.size(); }
+
+protected:
+  /// User data for the SymbolFile parser to store information into.
+  void *m_user_data;
+  /// The programming language enumeration value.
+  lldb::LanguageType m_language;
+  /// Compile unit flags that help with partial parsing.
+  Flags m_flags;
+  /// Maps UIDs to functions.
+  llvm::DenseMap<lldb::user_id_t, lldb::FunctionSP> m_functions_by_uid;
+  /// All modules, including the current module, imported by this
+  /// compile unit.
+  std::vector<SourceModule> m_imported_modules;
+  /// Files associated with this compile unit's line table and
+  /// declarations.
+  FileSpecList m_support_files;
+  /// Line table that will get parsed on demand.
+  std::unique_ptr<LineTable> m_line_table_up;
+  /// Debug macros that will get parsed on demand.
+  DebugMacrosSP m_debug_macros_sp;
+  /// Global and static variable list that will get parsed on demand.
+  lldb::VariableListSP m_variables;
+  /// eLazyBoolYes if this compile unit was compiled with
+  /// optimization.
+  lldb_private::LazyBool m_is_optimized;
+
+private:
+  enum {
+    flagsParsedAllFunctions =
+        (1u << 0), ///< Have we already parsed all our functions
+    flagsParsedVariables =
+        (1u << 1), ///< Have we already parsed globals and statics?
+    flagsParsedSupportFiles = (1u << 2), ///< Have we already parsed the support
+                                         ///files for this compile unit?
+    flagsParsedLineTable =
+        (1u << 3),                   ///< Have we parsed the line table already?
+    flagsParsedLanguage = (1u << 4), ///< Have we parsed the language already?
+    flagsParsedImportedModules =
+        (1u << 5), ///< Have we parsed the imported modules already?
+    flagsParsedDebugMacros =
+        (1u << 6) ///< Have we parsed the debug macros already?
+  };
+
+  DISALLOW_COPY_AND_ASSIGN(CompileUnit);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CompUnit_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/CompilerDecl.h b/linux-x64/clang/include/lldb/Symbol/CompilerDecl.h
new file mode 100644
index 0000000..4817ec4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/CompilerDecl.h
@@ -0,0 +1,87 @@
+//===-- CompilerDecl.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CompilerDecl_h_
+#define liblldb_CompilerDecl_h_
+
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class CompilerDecl {
+public:
+  // Constructors and Destructors
+  CompilerDecl() : m_type_system(nullptr), m_opaque_decl(nullptr) {}
+
+  CompilerDecl(TypeSystem *type_system, void *decl)
+      : m_type_system(type_system), m_opaque_decl(decl) {}
+
+  ~CompilerDecl() {}
+
+  // Tests
+
+  explicit operator bool() const { return IsValid(); }
+
+  bool operator<(const CompilerDecl &rhs) const {
+    if (m_type_system == rhs.m_type_system)
+      return m_opaque_decl < rhs.m_opaque_decl;
+    return m_type_system < rhs.m_type_system;
+  }
+
+  bool IsValid() const {
+    return m_type_system != nullptr && m_opaque_decl != nullptr;
+  }
+
+  bool IsClang() const;
+
+  // Accessors
+
+  TypeSystem *GetTypeSystem() const { return m_type_system; }
+
+  void *GetOpaqueDecl() const { return m_opaque_decl; }
+
+  void SetDecl(TypeSystem *type_system, void *decl) {
+    m_type_system = type_system;
+    m_opaque_decl = decl;
+  }
+
+  void Clear() {
+    m_type_system = nullptr;
+    m_opaque_decl = nullptr;
+  }
+
+  ConstString GetName() const;
+
+  ConstString GetMangledName() const;
+
+  CompilerDeclContext GetDeclContext() const;
+
+  // If this decl represents a function, return the return type
+  CompilerType GetFunctionReturnType() const;
+
+  // If this decl represents a function, return the number of arguments for the
+  // function
+  size_t GetNumFunctionArguments() const;
+
+  // If this decl represents a function, return the argument type given a zero
+  // based argument index
+  CompilerType GetFunctionArgumentType(size_t arg_idx) const;
+
+private:
+  TypeSystem *m_type_system;
+  void *m_opaque_decl;
+};
+
+bool operator==(const CompilerDecl &lhs, const CompilerDecl &rhs);
+bool operator!=(const CompilerDecl &lhs, const CompilerDecl &rhs);
+
+} // namespace lldb_private
+
+#endif // #ifndef liblldb_CompilerDecl_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/CompilerDeclContext.h b/linux-x64/clang/include/lldb/Symbol/CompilerDeclContext.h
new file mode 100644
index 0000000..e7958c0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/CompilerDeclContext.h
@@ -0,0 +1,117 @@
+//===-- CompilerDeclContext.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CompilerDeclContext_h_
+#define liblldb_CompilerDeclContext_h_
+
+#include <vector>
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class CompilerDeclContext {
+public:
+  // Constructors and Destructors
+  CompilerDeclContext() : m_type_system(nullptr), m_opaque_decl_ctx(nullptr) {}
+
+  CompilerDeclContext(TypeSystem *type_system, void *decl_ctx)
+      : m_type_system(type_system), m_opaque_decl_ctx(decl_ctx) {}
+
+  ~CompilerDeclContext() {}
+
+  // Tests
+
+  explicit operator bool() const { return IsValid(); }
+
+  bool operator<(const CompilerDeclContext &rhs) const {
+    if (m_type_system == rhs.m_type_system)
+      return m_opaque_decl_ctx < rhs.m_opaque_decl_ctx;
+    return m_type_system < rhs.m_type_system;
+  }
+
+  bool IsValid() const {
+    return m_type_system != nullptr && m_opaque_decl_ctx != nullptr;
+  }
+
+  bool IsClang() const;
+
+  std::vector<CompilerDecl> FindDeclByName(ConstString name,
+                                           const bool ignore_using_decls);
+
+  /// Checks if this decl context represents a method of a class.
+  ///
+  /// \param[out] language_ptr
+  ///     If non NULL and \b true is returned from this function,
+  ///     this will indicate if the language that respresents the method.
+  ///
+  /// \param[out] is_instance_method_ptr
+  ///     If non NULL and \b true is returned from this function,
+  ///     this will indicate if the method is an instance function (true)
+  ///     or a class method (false indicating the function is static, or
+  ///     doesn't require an instance of the class to be called).
+  ///
+  /// \param[out] language_object_name_ptr
+  ///     If non NULL and \b true is returned from this function,
+  ///     this will indicate if implicit object name for the language
+  ///     like "this" for C++, and "self" for Objective C.
+  ///
+  /// \return
+  ///     Returns true if this is a decl context that represents a method
+  ///     in a struct, union or class.
+  bool IsClassMethod(lldb::LanguageType *language_ptr,
+                     bool *is_instance_method_ptr,
+                     ConstString *language_object_name_ptr);
+
+  /// Check if the given other decl context is contained in the lookup
+  /// of this decl context (for example because the other context is a nested
+  /// inline namespace).
+  ///
+  /// @param[in] other
+  ///     The other decl context for which we should check if it is contained
+  ///     in the lookoup of this context.
+  ///
+  /// @return
+  ///     Returns true iff the other decl context is contained in the lookup
+  ///     of this decl context.
+  bool IsContainedInLookup(CompilerDeclContext other) const;
+
+  // Accessors
+
+  TypeSystem *GetTypeSystem() const { return m_type_system; }
+
+  void *GetOpaqueDeclContext() const { return m_opaque_decl_ctx; }
+
+  void SetDeclContext(TypeSystem *type_system, void *decl_ctx) {
+    m_type_system = type_system;
+    m_opaque_decl_ctx = decl_ctx;
+  }
+
+  void Clear() {
+    m_type_system = nullptr;
+    m_opaque_decl_ctx = nullptr;
+  }
+
+  ConstString GetName() const;
+
+  ConstString GetScopeQualifiedName() const;
+
+  bool IsStructUnionOrClass() const;
+
+private:
+  TypeSystem *m_type_system;
+  void *m_opaque_decl_ctx;
+};
+
+bool operator==(const CompilerDeclContext &lhs, const CompilerDeclContext &rhs);
+bool operator!=(const CompilerDeclContext &lhs, const CompilerDeclContext &rhs);
+
+} // namespace lldb_private
+
+#endif // #ifndef liblldb_CompilerDeclContext_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/CompilerType.h b/linux-x64/clang/include/lldb/Symbol/CompilerType.h
new file mode 100644
index 0000000..98d9165
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/CompilerType.h
@@ -0,0 +1,404 @@
+//===-- CompilerType.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CompilerType_h_
+#define liblldb_CompilerType_h_
+
+#include <functional>
+#include <string>
+#include <vector>
+
+#include "lldb/Core/ClangForward.h"
+#include "lldb/lldb-private.h"
+#include "llvm/ADT/APSInt.h"
+
+namespace lldb_private {
+
+class DataExtractor;
+
+// A class that can carry around a clang ASTContext and a opaque clang
+// QualType. A clang::QualType can be easily reconstructed from an opaque clang
+// type and often the ASTContext is needed when doing various type related
+// tasks, so this class allows both items to travel in a single very
+// lightweight class that can be used. There are many static equivalents of the
+// member functions that allow the ASTContext and the opaque clang QualType to
+// be specified for ease of use and to avoid code duplication.
+class CompilerType {
+public:
+  // Constructors and Destructors
+  CompilerType(TypeSystem *type_system, lldb::opaque_compiler_type_t type);
+  CompilerType(clang::ASTContext *ast_context, clang::QualType qual_type);
+
+  CompilerType(const CompilerType &rhs)
+      : m_type(rhs.m_type), m_type_system(rhs.m_type_system) {}
+
+  CompilerType() : m_type(nullptr), m_type_system(nullptr) {}
+
+  ~CompilerType();
+
+  // Operators
+
+  const CompilerType &operator=(const CompilerType &rhs) {
+    m_type = rhs.m_type;
+    m_type_system = rhs.m_type_system;
+    return *this;
+  }
+
+  // Tests
+
+  explicit operator bool() const {
+    return m_type != nullptr && m_type_system != nullptr;
+  }
+
+  bool operator<(const CompilerType &rhs) const {
+    if (m_type_system == rhs.m_type_system)
+      return m_type < rhs.m_type;
+    return m_type_system < rhs.m_type_system;
+  }
+
+  bool IsValid() const { return m_type != nullptr && m_type_system != nullptr; }
+
+  bool IsArrayType(CompilerType *element_type, uint64_t *size,
+                   bool *is_incomplete) const;
+
+  bool IsVectorType(CompilerType *element_type, uint64_t *size) const;
+
+  bool IsArrayOfScalarType() const;
+
+  bool IsAggregateType() const;
+
+  bool IsAnonymousType() const;
+
+  bool IsBeingDefined() const;
+
+  bool IsCharType() const;
+
+  bool IsCompleteType() const;
+
+  bool IsConst() const;
+
+  bool IsCStringType(uint32_t &length) const;
+
+  bool IsDefined() const;
+
+  bool IsFloatingPointType(uint32_t &count, bool &is_complex) const;
+
+  bool IsFunctionType(bool *is_variadic_ptr = nullptr) const;
+
+  uint32_t IsHomogeneousAggregate(CompilerType *base_type_ptr) const;
+
+  size_t GetNumberOfFunctionArguments() const;
+
+  CompilerType GetFunctionArgumentAtIndex(const size_t index) const;
+
+  bool IsVariadicFunctionType() const;
+
+  bool IsFunctionPointerType() const;
+
+  bool IsBlockPointerType(CompilerType *function_pointer_type_ptr) const;
+
+  bool IsIntegerType(bool &is_signed) const;
+
+  bool IsEnumerationType(bool &is_signed) const;
+
+  bool IsIntegerOrEnumerationType(bool &is_signed) const;
+
+  bool IsPolymorphicClass() const;
+
+  bool
+  IsPossibleCPlusPlusDynamicType(CompilerType *target_type = nullptr) const {
+    return IsPossibleDynamicType(target_type, true, false);
+  }
+
+  bool IsPossibleDynamicType(CompilerType *target_type, // Can pass nullptr
+                             bool check_cplusplus, bool check_objc) const;
+
+  bool IsPointerToScalarType() const;
+
+  bool IsRuntimeGeneratedType() const;
+
+  bool IsPointerType(CompilerType *pointee_type = nullptr) const;
+
+  bool IsPointerOrReferenceType(CompilerType *pointee_type = nullptr) const;
+
+  bool IsReferenceType(CompilerType *pointee_type = nullptr,
+                       bool *is_rvalue = nullptr) const;
+
+  bool ShouldTreatScalarValueAsAddress() const;
+
+  bool IsScalarType() const;
+
+  bool IsTypedefType() const;
+
+  bool IsVoidType() const;
+
+  // Type Completion
+
+  bool GetCompleteType() const;
+
+  // AST related queries
+
+  size_t GetPointerByteSize() const;
+
+  // Accessors
+
+  TypeSystem *GetTypeSystem() const { return m_type_system; }
+
+  ConstString GetConstQualifiedTypeName() const;
+
+  ConstString GetConstTypeName() const;
+
+  ConstString GetTypeName() const;
+
+  ConstString GetDisplayTypeName() const;
+
+  uint32_t
+  GetTypeInfo(CompilerType *pointee_or_element_compiler_type = nullptr) const;
+
+  lldb::LanguageType GetMinimumLanguage();
+
+  lldb::opaque_compiler_type_t GetOpaqueQualType() const { return m_type; }
+
+  lldb::TypeClass GetTypeClass() const;
+
+  void SetCompilerType(TypeSystem *type_system,
+                       lldb::opaque_compiler_type_t type);
+
+  void SetCompilerType(clang::ASTContext *ast, clang::QualType qual_type);
+
+  unsigned GetTypeQualifiers() const;
+
+  // Creating related types
+
+  CompilerType GetArrayElementType(uint64_t *stride = nullptr) const;
+
+  CompilerType GetArrayType(uint64_t size) const;
+
+  CompilerType GetCanonicalType() const;
+
+  CompilerType GetFullyUnqualifiedType() const;
+
+  // Returns -1 if this isn't a function of if the function doesn't have a
+  // prototype Returns a value >= 0 if there is a prototype.
+  int GetFunctionArgumentCount() const;
+
+  CompilerType GetFunctionArgumentTypeAtIndex(size_t idx) const;
+
+  CompilerType GetFunctionReturnType() const;
+
+  size_t GetNumMemberFunctions() const;
+
+  TypeMemberFunctionImpl GetMemberFunctionAtIndex(size_t idx);
+
+  // If this type is a reference to a type (L value or R value reference),
+  // return a new type with the reference removed, else return the current type
+  // itself.
+  CompilerType GetNonReferenceType() const;
+
+  // If this type is a pointer type, return the type that the pointer points
+  // to, else return an invalid type.
+  CompilerType GetPointeeType() const;
+
+  // Return a new CompilerType that is a pointer to this type
+  CompilerType GetPointerType() const;
+
+  // Return a new CompilerType that is a L value reference to this type if this
+  // type is valid and the type system supports L value references, else return
+  // an invalid type.
+  CompilerType GetLValueReferenceType() const;
+
+  // Return a new CompilerType that is a R value reference to this type if this
+  // type is valid and the type system supports R value references, else return
+  // an invalid type.
+  CompilerType GetRValueReferenceType() const;
+
+  // Return a new CompilerType adds a const modifier to this type if this type
+  // is valid and the type system supports const modifiers, else return an
+  // invalid type.
+  CompilerType AddConstModifier() const;
+
+  // Return a new CompilerType adds a volatile modifier to this type if this
+  // type is valid and the type system supports volatile modifiers, else return
+  // an invalid type.
+  CompilerType AddVolatileModifier() const;
+
+  // Return a new CompilerType adds a restrict modifier to this type if this
+  // type is valid and the type system supports restrict modifiers, else return
+  // an invalid type.
+  CompilerType AddRestrictModifier() const;
+
+  // Create a typedef to this type using "name" as the name of the typedef this
+  // type is valid and the type system supports typedefs, else return an
+  // invalid type.
+  CompilerType CreateTypedef(const char *name,
+                             const CompilerDeclContext &decl_ctx) const;
+
+  // If the current object represents a typedef type, get the underlying type
+  CompilerType GetTypedefedType() const;
+
+  // Create related types using the current type's AST
+  CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) const;
+
+  // Exploring the type
+
+  struct IntegralTemplateArgument;
+
+  /// Return the size of the type in bytes.
+  llvm::Optional<uint64_t> GetByteSize(ExecutionContextScope *exe_scope) const;
+  /// Return the size of the type in bits.
+  llvm::Optional<uint64_t> GetBitSize(ExecutionContextScope *exe_scope) const;
+
+  lldb::Encoding GetEncoding(uint64_t &count) const;
+
+  lldb::Format GetFormat() const;
+
+  size_t GetTypeBitAlign() const;
+
+  uint32_t GetNumChildren(bool omit_empty_base_classes,
+                          const ExecutionContext *exe_ctx) const;
+
+  lldb::BasicType GetBasicTypeEnumeration() const;
+
+  static lldb::BasicType GetBasicTypeEnumeration(ConstString name);
+
+  // If this type is an enumeration, iterate through all of its enumerators
+  // using a callback. If the callback returns true, keep iterating, else abort
+  // the iteration.
+  void ForEachEnumerator(
+      std::function<bool(const CompilerType &integer_type,
+                         ConstString name,
+                         const llvm::APSInt &value)> const &callback) const;
+
+  uint32_t GetNumFields() const;
+
+  CompilerType GetFieldAtIndex(size_t idx, std::string &name,
+                               uint64_t *bit_offset_ptr,
+                               uint32_t *bitfield_bit_size_ptr,
+                               bool *is_bitfield_ptr) const;
+
+  uint32_t GetNumDirectBaseClasses() const;
+
+  uint32_t GetNumVirtualBaseClasses() const;
+
+  CompilerType GetDirectBaseClassAtIndex(size_t idx,
+                                         uint32_t *bit_offset_ptr) const;
+
+  CompilerType GetVirtualBaseClassAtIndex(size_t idx,
+                                          uint32_t *bit_offset_ptr) const;
+
+  uint32_t GetIndexOfFieldWithName(const char *name,
+                                   CompilerType *field_compiler_type = nullptr,
+                                   uint64_t *bit_offset_ptr = nullptr,
+                                   uint32_t *bitfield_bit_size_ptr = nullptr,
+                                   bool *is_bitfield_ptr = nullptr) const;
+
+  CompilerType GetChildCompilerTypeAtIndex(
+      ExecutionContext *exe_ctx, size_t idx, bool transparent_pointers,
+      bool omit_empty_base_classes, bool ignore_array_bounds,
+      std::string &child_name, uint32_t &child_byte_size,
+      int32_t &child_byte_offset, uint32_t &child_bitfield_bit_size,
+      uint32_t &child_bitfield_bit_offset, bool &child_is_base_class,
+      bool &child_is_deref_of_parent, ValueObject *valobj,
+      uint64_t &language_flags) const;
+
+  // Lookup a child given a name. This function will match base class names and
+  // member member names in "clang_type" only, not descendants.
+  uint32_t GetIndexOfChildWithName(const char *name,
+                                   bool omit_empty_base_classes) const;
+
+  // Lookup a child member given a name. This function will match member names
+  // only and will descend into "clang_type" children in search for the first
+  // member in this class, or any base class that matches "name".
+  // TODO: Return all matches for a given name by returning a
+  // vector<vector<uint32_t>>
+  // so we catch all names that match a given child name, not just the first.
+  size_t
+  GetIndexOfChildMemberWithName(const char *name, bool omit_empty_base_classes,
+                                std::vector<uint32_t> &child_indexes) const;
+
+  size_t GetNumTemplateArguments() const;
+
+  lldb::TemplateArgumentKind GetTemplateArgumentKind(size_t idx) const;
+  CompilerType GetTypeTemplateArgument(size_t idx) const;
+
+  // Returns the value of the template argument and its type.
+  llvm::Optional<IntegralTemplateArgument>
+  GetIntegralTemplateArgument(size_t idx) const;
+
+  CompilerType GetTypeForFormatters() const;
+
+  LazyBool ShouldPrintAsOneLiner(ValueObject *valobj) const;
+
+  bool IsMeaninglessWithoutDynamicResolution() const;
+
+  // Pointers & References
+
+  // Converts "s" to a floating point value and place resulting floating point
+  // bytes in the "dst" buffer.
+  size_t ConvertStringToFloatValue(const char *s, uint8_t *dst,
+                                   size_t dst_size) const;
+
+  // Dumping types
+
+#ifndef NDEBUG
+  /// Convenience LLVM-style dump method for use in the debugger only.
+  /// Don't call this function from actual code.
+  LLVM_DUMP_METHOD void dump() const;
+#endif
+
+  void DumpValue(ExecutionContext *exe_ctx, Stream *s, lldb::Format format,
+                 const DataExtractor &data, lldb::offset_t data_offset,
+                 size_t data_byte_size, uint32_t bitfield_bit_size,
+                 uint32_t bitfield_bit_offset, bool show_types,
+                 bool show_summary, bool verbose, uint32_t depth);
+
+  bool DumpTypeValue(Stream *s, lldb::Format format, const DataExtractor &data,
+                     lldb::offset_t data_offset, size_t data_byte_size,
+                     uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
+                     ExecutionContextScope *exe_scope);
+
+  void DumpSummary(ExecutionContext *exe_ctx, Stream *s,
+                   const DataExtractor &data, lldb::offset_t data_offset,
+                   size_t data_byte_size);
+
+  void DumpTypeDescription() const; // Dump to stdout
+
+  void DumpTypeDescription(Stream *s) const;
+
+  bool GetValueAsScalar(const DataExtractor &data, lldb::offset_t data_offset,
+                        size_t data_byte_size, Scalar &value) const;
+
+  bool SetValueFromScalar(const Scalar &value, Stream &strm);
+
+  bool ReadFromMemory(ExecutionContext *exe_ctx, lldb::addr_t addr,
+                      AddressType address_type, DataExtractor &data);
+
+  bool WriteToMemory(ExecutionContext *exe_ctx, lldb::addr_t addr,
+                     AddressType address_type, StreamString &new_value);
+
+  void Clear() {
+    m_type = nullptr;
+    m_type_system = nullptr;
+  }
+
+private:
+  lldb::opaque_compiler_type_t m_type;
+  TypeSystem *m_type_system;
+};
+
+bool operator==(const CompilerType &lhs, const CompilerType &rhs);
+bool operator!=(const CompilerType &lhs, const CompilerType &rhs);
+
+struct CompilerType::IntegralTemplateArgument {
+  llvm::APSInt value;
+  CompilerType type;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CompilerType_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/CxxModuleHandler.h b/linux-x64/clang/include/lldb/Symbol/CxxModuleHandler.h
new file mode 100644
index 0000000..f4aef36
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/CxxModuleHandler.h
@@ -0,0 +1,65 @@
+//===-- CxxModuleHandler.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CxxModuleHandler_h_
+#define liblldb_CxxModuleHandler_h_
+
+#include "clang/AST/ASTImporter.h"
+#include "clang/Sema/Sema.h"
+#include "llvm/ADT/StringSet.h"
+
+namespace lldb_private {
+
+/// Handles importing decls into an ASTContext with an attached C++ module.
+///
+/// This class searches a C++ module (which must be attached to the target
+/// ASTContext) for an equivalent decl to the one that should be imported.
+/// If the decl that is found in the module is a suitable replacement
+/// for the decl that should be imported, the module decl will be treated as
+/// the result of the import process.
+///
+/// If the Decl that should be imported is a template specialization
+/// that doesn't exist yet in the target ASTContext (e.g. `std::vector<int>`),
+/// then this class tries to create the template specialization in the target
+/// ASTContext. This is only possible if the CxxModuleHandler can determine
+/// that instantiating this template is safe to do, e.g. because the target
+/// decl is a container class from the STL.
+class CxxModuleHandler {
+  /// The ASTImporter that should be used to import any Decls which aren't
+  /// directly handled by this class itself.
+  clang::ASTImporter *m_importer = nullptr;
+
+  /// The Sema instance of the target ASTContext.
+  clang::Sema *m_sema = nullptr;
+
+  /// List of template names this class currently supports. These are the
+  /// template names inside the 'std' namespace such as 'vector' or 'list'.
+  llvm::StringSet<> m_supported_templates;
+
+  /// Tries to manually instantiate the given foreign template in the target
+  /// context (designated by m_sema).
+  llvm::Optional<clang::Decl *> tryInstantiateStdTemplate(clang::Decl *d);
+
+public:
+  CxxModuleHandler() = default;
+  CxxModuleHandler(clang::ASTImporter &importer, clang::ASTContext *target);
+
+  /// Attempts to import the given decl into the target ASTContext by
+  /// deserializing it from the 'std' module. This function returns a Decl if a
+  /// Decl has been deserialized from the 'std' module. Otherwise this function
+  /// returns nothing.
+  llvm::Optional<clang::Decl *> Import(clang::Decl *d);
+
+  /// Returns true iff this instance is capable of importing any declarations
+  /// in the target ASTContext.
+  bool isValid() const { return m_sema != nullptr; }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CxxModuleHandler_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/DWARFCallFrameInfo.h b/linux-x64/clang/include/lldb/Symbol/DWARFCallFrameInfo.h
new file mode 100644
index 0000000..104075f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/DWARFCallFrameInfo.h
@@ -0,0 +1,169 @@
+//===-- DWARFCallFrameInfo.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DWARFCallFrameInfo_h_
+#define liblldb_DWARFCallFrameInfo_h_
+
+#include <map>
+#include <mutex>
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Core/dwarf.h"
+#include "lldb/Symbol/ObjectFile.h"
+#include "lldb/Symbol/UnwindPlan.h"
+#include "lldb/Utility/Flags.h"
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/Utility/VMRange.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// DWARFCallFrameInfo is a class which can read eh_frame and DWARF Call Frame
+// Information FDEs.  It stores little information internally. Only two APIs
+// are exported - one to find the high/low pc values of a function given a text
+// address via the information in the eh_frame / debug_frame, and one to
+// generate an UnwindPlan based on the FDE in the eh_frame / debug_frame
+// section.
+
+class DWARFCallFrameInfo {
+public:
+  enum Type { EH, DWARF };
+
+  DWARFCallFrameInfo(ObjectFile &objfile, lldb::SectionSP &section, Type type);
+
+  ~DWARFCallFrameInfo() = default;
+
+  // Locate an AddressRange that includes the provided Address in this object's
+  // eh_frame/debug_info Returns true if a range is found to cover that
+  // address.
+  bool GetAddressRange(Address addr, AddressRange &range);
+
+  /// Return an UnwindPlan based on the call frame information encoded in the
+  /// FDE of this DWARFCallFrameInfo section. The returned plan will be valid
+  /// (at least) for the given address.
+  bool GetUnwindPlan(const Address &addr, UnwindPlan &unwind_plan);
+
+  /// Return an UnwindPlan based on the call frame information encoded in the
+  /// FDE of this DWARFCallFrameInfo section. The returned plan will be valid
+  /// (at least) for some address in the given range.
+  bool GetUnwindPlan(const AddressRange &range, UnwindPlan &unwind_plan);
+
+  typedef RangeVector<lldb::addr_t, uint32_t> FunctionAddressAndSizeVector;
+
+  // Build a vector of file address and size for all functions in this Module
+  // based on the eh_frame FDE entries.
+  //
+  // The eh_frame information can be a useful source of file address and size
+  // of the functions in a Module.  Often a binary's non-exported symbols are
+  // stripped before shipping so lldb won't know the start addr / size of many
+  // functions in the Module.  But the eh_frame can help to give the addresses
+  // of these stripped symbols, at least.
+  //
+  // \param[out] function_info
+  //      A vector provided by the caller is filled out.  May be empty if no
+  //      FDEs/no eh_frame
+  //      is present in this Module.
+
+  void
+  GetFunctionAddressAndSizeVector(FunctionAddressAndSizeVector &function_info);
+
+  void ForEachFDEEntries(
+      const std::function<bool(lldb::addr_t, uint32_t, dw_offset_t)> &callback);
+
+private:
+  enum { CFI_AUG_MAX_SIZE = 8, CFI_HEADER_SIZE = 8 };
+  enum CFIVersion {
+    CFI_VERSION1 = 1, // DWARF v.2
+    CFI_VERSION3 = 3, // DWARF v.3
+    CFI_VERSION4 = 4  // DWARF v.4, v.5
+  };
+
+  struct CIE {
+    dw_offset_t cie_offset;
+    uint8_t version;
+    char augmentation[CFI_AUG_MAX_SIZE]; // This is typically empty or very
+                                         // short.
+    uint8_t address_size = sizeof(uint32_t); // The size of a target address.
+    uint8_t segment_size = 0;                // The size of a segment selector.
+
+    uint32_t code_align;
+    int32_t data_align;
+    uint32_t return_addr_reg_num;
+    dw_offset_t inst_offset; // offset of CIE instructions in mCFIData
+    uint32_t inst_length;    // length of CIE instructions in mCFIData
+    uint8_t ptr_encoding;
+    uint8_t lsda_addr_encoding;   // The encoding of the LSDA address in the FDE
+                                  // augmentation data
+    lldb::addr_t personality_loc; // (file) address of the pointer to the
+                                  // personality routine
+    lldb_private::UnwindPlan::Row initial_row;
+
+    CIE(dw_offset_t offset)
+        : cie_offset(offset), version(-1), code_align(0), data_align(0),
+          return_addr_reg_num(LLDB_INVALID_REGNUM), inst_offset(0),
+          inst_length(0), ptr_encoding(0), lsda_addr_encoding(DW_EH_PE_omit),
+          personality_loc(LLDB_INVALID_ADDRESS), initial_row() {}
+  };
+
+  typedef std::shared_ptr<CIE> CIESP;
+
+  typedef std::map<dw_offset_t, CIESP> cie_map_t;
+
+  // Start address (file address), size, offset of FDE location used for
+  // finding an FDE for a given File address; the start address field is an
+  // offset into an individual Module.
+  typedef RangeDataVector<lldb::addr_t, uint32_t, dw_offset_t> FDEEntryMap;
+
+  bool IsEHFrame() const;
+
+  llvm::Optional<FDEEntryMap::Entry>
+  GetFirstFDEEntryInRange(const AddressRange &range);
+
+  void GetFDEIndex();
+
+  bool FDEToUnwindPlan(uint32_t offset, Address startaddr,
+                       UnwindPlan &unwind_plan);
+
+  const CIE *GetCIE(dw_offset_t cie_offset);
+
+  void GetCFIData();
+
+  // Applies the specified DWARF opcode to the given row. This function handle
+  // the commands operates only on a single row (these are the ones what can
+  // appear both in
+  // CIE and in FDE).
+  // Returns true if the opcode is handled and false otherwise.
+  bool HandleCommonDwarfOpcode(uint8_t primary_opcode, uint8_t extended_opcode,
+                               int32_t data_align, lldb::offset_t &offset,
+                               UnwindPlan::Row &row);
+
+  ObjectFile &m_objfile;
+  lldb::SectionSP m_section_sp;
+  Flags m_flags = 0;
+  cie_map_t m_cie_map;
+
+  DataExtractor m_cfi_data;
+  bool m_cfi_data_initialized = false; // only copy the section into the DE once
+
+  FDEEntryMap m_fde_index;
+  bool m_fde_index_initialized = false; // only scan the section for FDEs once
+  std::mutex m_fde_index_mutex; // and isolate the thread that does it
+
+  Type m_type;
+
+  CIESP
+  ParseCIE(const uint32_t cie_offset);
+
+  lldb::RegisterKind GetRegisterKind() const {
+    return m_type == EH ? lldb::eRegisterKindEHFrame : lldb::eRegisterKindDWARF;
+  }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_DWARFCallFrameInfo_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/DebugMacros.h b/linux-x64/clang/include/lldb/Symbol/DebugMacros.h
new file mode 100644
index 0000000..d364299
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/DebugMacros.h
@@ -0,0 +1,97 @@
+//===-- DebugMacros.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DebugMacros_h_
+#define liblldb_DebugMacros_h_
+
+#include <memory>
+#include <vector>
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class CompileUnit;
+class DebugMacros;
+typedef std::shared_ptr<DebugMacros> DebugMacrosSP;
+
+class DebugMacroEntry {
+public:
+  enum EntryType { INVALID, DEFINE, UNDEF, START_FILE, END_FILE, INDIRECT };
+
+public:
+  static DebugMacroEntry CreateDefineEntry(uint32_t line, const char *str);
+
+  static DebugMacroEntry CreateUndefEntry(uint32_t line, const char *str);
+
+  static DebugMacroEntry CreateStartFileEntry(uint32_t line,
+                                              uint32_t debug_line_file_idx);
+
+  static DebugMacroEntry CreateEndFileEntry();
+
+  static DebugMacroEntry
+  CreateIndirectEntry(const DebugMacrosSP &debug_macros_sp);
+
+  DebugMacroEntry() : m_type(INVALID) {}
+
+  ~DebugMacroEntry() = default;
+
+  EntryType GetType() const { return m_type; }
+
+  uint64_t GetLineNumber() const { return m_line; }
+
+  ConstString GetMacroString() const { return m_str; }
+
+  const FileSpec &GetFileSpec(CompileUnit *comp_unit) const;
+
+  DebugMacros *GetIndirectDebugMacros() const {
+    return m_debug_macros_sp.get();
+  }
+
+private:
+  DebugMacroEntry(EntryType type, uint32_t line, uint32_t debug_line_file_idx,
+                  const char *str);
+
+  DebugMacroEntry(EntryType type, const DebugMacrosSP &debug_macros_sp);
+
+  EntryType m_type : 3;
+  uint32_t m_line : 29;
+  uint32_t m_debug_line_file_idx;
+  ConstString m_str;
+  DebugMacrosSP m_debug_macros_sp;
+};
+
+class DebugMacros {
+public:
+  DebugMacros() = default;
+
+  ~DebugMacros() = default;
+
+  void AddMacroEntry(const DebugMacroEntry &entry) {
+    m_macro_entries.push_back(entry);
+  }
+
+  size_t GetNumMacroEntries() const { return m_macro_entries.size(); }
+
+  DebugMacroEntry GetMacroEntryAtIndex(const size_t index) const {
+    if (index < m_macro_entries.size())
+      return m_macro_entries[index];
+    else
+      return DebugMacroEntry();
+  }
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(DebugMacros);
+
+  std::vector<DebugMacroEntry> m_macro_entries;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_DebugMacros_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/DeclVendor.h b/linux-x64/clang/include/lldb/Symbol/DeclVendor.h
new file mode 100644
index 0000000..9c10fe1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/DeclVendor.h
@@ -0,0 +1,77 @@
+//===-- DeclVendor.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DeclVendor_h_
+#define liblldb_DeclVendor_h_
+
+#include "lldb/Core/ClangForward.h"
+#include "lldb/lldb-defines.h"
+
+#include "clang/AST/ExternalASTMerger.h"
+
+#include <vector>
+
+namespace lldb_private {
+
+// The Decl vendor class is intended as a generic interface to search for named
+// declarations that are not necessarily backed by a specific symbol file.
+class DeclVendor {
+public:
+  // Constructors and Destructors
+  DeclVendor() {}
+
+  virtual ~DeclVendor() {}
+
+  /// Look up the set of Decls that the DeclVendor currently knows about
+  /// matching a given name.
+  ///
+  /// \param[in] name
+  ///     The name to look for.
+  ///
+  /// \param[in] append
+  ///     If true, FindDecls will clear "decls" when it starts.
+  ///
+  /// \param[in] max_matches
+  ///     The maximum number of Decls to return.  UINT32_MAX means "as
+  ///     many as possible."
+  ///
+  /// \return
+  ///     The number of Decls added to decls; will not exceed
+  ///     max_matches.
+  virtual uint32_t FindDecls(ConstString name, bool append,
+                             uint32_t max_matches,
+                             std::vector<clang::NamedDecl *> &decls) = 0;
+
+  /// Look up the types that the DeclVendor currently knows about matching a
+  /// given name.
+  ///
+  /// \param[in] name
+  ///     The name to look for.
+  ///
+  /// \param[in] max_matches
+  //      The maximum number of matches. UINT32_MAX means "as many as possible".
+  ///
+  /// \return
+  ///     The vector of CompilerTypes that was found.
+  std::vector<CompilerType> FindTypes(ConstString name, uint32_t max_matches);
+
+  /// Interface for ExternalASTMerger.  Returns an ImporterSource 
+  /// allowing type completion.
+  ///
+  /// \return
+  ///     An ImporterSource for this DeclVendor.
+  virtual clang::ExternalASTMerger::ImporterSource GetImporterSource() = 0;
+
+private:
+  // For DeclVendor only
+  DISALLOW_COPY_AND_ASSIGN(DeclVendor);
+};
+
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Symbol/Declaration.h b/linux-x64/clang/include/lldb/Symbol/Declaration.h
new file mode 100644
index 0000000..63798f8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/Declaration.h
@@ -0,0 +1,215 @@
+//===-- Declaration.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Declaration_h_
+#define liblldb_Declaration_h_
+
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class Declaration Declaration.h "lldb/Symbol/Declaration.h"
+/// A class that describes the declaration location of a
+///        lldb object.
+///
+/// The declarations include the file specification, line number, and the
+/// column info and can help track where functions, blocks, inlined functions,
+/// types, variables, any many other debug core objects were declared.
+class Declaration {
+public:
+  /// Default constructor.
+  Declaration()
+      : m_file(), m_line(0)
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+        ,
+        m_column(0)
+#endif
+  {
+  }
+
+  /// Construct with file specification, and optional line and column.
+  ///
+  /// \param[in] file_spec
+  ///     The file specification that describes where this was
+  ///     declared.
+  ///
+  /// \param[in] line
+  ///     The line number that describes where this was declared. Set
+  ///     to zero if there is no line number information.
+  ///
+  /// \param[in] column
+  ///     The column number that describes where this was declared.
+  ///     Set to zero if there is no column number information.
+  Declaration(const FileSpec &file_spec, uint32_t line = 0, uint32_t column = 0)
+      : m_file(file_spec), m_line(line)
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+        ,
+        m_column(column)
+#endif
+  {
+  }
+
+  /// Construct with a reference to another Declaration object.
+  Declaration(const Declaration &rhs)
+      : m_file(rhs.m_file), m_line(rhs.m_line)
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+        ,
+        m_column(rhs.m_column)
+#endif
+  {
+  }
+
+  /// Construct with a pointer to another Declaration object.
+  Declaration(const Declaration *decl_ptr)
+      : m_file(), m_line(0)
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+        ,
+        m_column(0)
+#endif
+  {
+    if (decl_ptr)
+      *this = *decl_ptr;
+  }
+
+  /// Clear the object's state.
+  ///
+  /// Sets the file specification to be empty, and the line and column to
+  /// zero.
+  void Clear() {
+    m_file.Clear();
+    m_line = 0;
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+    m_column = 0;
+#endif
+  }
+
+  /// Compare two declaration objects.
+  ///
+  /// Compares the two file specifications from \a lhs and \a rhs. If the file
+  /// specifications are equal, then continue to compare the line number and
+  /// column numbers respectively.
+  ///
+  /// \param[in] lhs
+  ///     The Left Hand Side const Declaration object reference.
+  ///
+  /// \param[in] rhs
+  ///     The Right Hand Side const Declaration object reference.
+  ///
+  /// \return
+  ///     \li -1 if lhs < rhs
+  ///     \li 0 if lhs == rhs
+  ///     \li 1 if lhs > rhs
+  static int Compare(const Declaration &lhs, const Declaration &rhs);
+
+  /// Checks if this object has the same file and line as another declaration
+  /// object.
+  ///
+  /// \param[in] declaration
+  ///     The const Declaration object to compare with.
+  ///
+  /// \return
+  ///     Returns \b true if \b declaration is at the same file and
+  ///     line, \b false otherwise.
+  bool FileAndLineEqual(const Declaration &declaration) const;
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s, bool show_fullpaths) const;
+
+  bool DumpStopContext(Stream *s, bool show_fullpaths) const;
+  /// Get accessor for the declaration column number.
+  ///
+  /// \return
+  ///     Non-zero indicates a valid column number, zero indicates no
+  ///     column information is available.
+  uint32_t GetColumn() const {
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+    return m_column;
+#else
+    return 0;
+#endif
+  }
+
+  /// Get accessor for file specification.
+  ///
+  /// \return
+  ///     A reference to the file specification object.
+  FileSpec &GetFile() { return m_file; }
+
+  /// Get const accessor for file specification.
+  ///
+  /// \return
+  ///     A const reference to the file specification object.
+  const FileSpec &GetFile() const { return m_file; }
+
+  /// Get accessor for the declaration line number.
+  ///
+  /// \return
+  ///     Non-zero indicates a valid line number, zero indicates no
+  ///     line information is available.
+  uint32_t GetLine() const { return m_line; }
+
+  bool IsValid() const { return m_file && m_line != 0; }
+
+  /// Get the memory cost of this object.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///     The returned value does not include the bytes for any
+  ///     shared string values.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  size_t MemorySize() const;
+
+  /// Set accessor for the declaration column number.
+  ///
+  /// \param[in] column
+  ///     Non-zero indicates a valid column number, zero indicates no
+  ///     column information is available.
+  void SetColumn(uint32_t column) {
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+    m_column = col;
+#endif
+  }
+
+  /// Set accessor for the declaration file specification.
+  ///
+  /// \param[in] file_spec
+  ///     The new declaration file specification.
+  void SetFile(const FileSpec &file_spec) { m_file = file_spec; }
+
+  /// Set accessor for the declaration line number.
+  ///
+  /// \param[in] line
+  ///     Non-zero indicates a valid line number, zero indicates no
+  ///     line information is available.
+  void SetLine(uint32_t line) { m_line = line; }
+
+protected:
+  /// Member variables.
+  FileSpec m_file; ///< The file specification that points to the
+                   ///< source file where the declaration occurred.
+  uint32_t m_line; ///< Non-zero values indicates a valid line number,
+                   ///< zero indicates no line number information is available.
+#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
+  uint32_t m_column; ///< Non-zero values indicates a valid column number,
+                     ///< zero indicates no column information is available.
+#endif
+};
+
+bool operator==(const Declaration &lhs, const Declaration &rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_Declaration_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/FuncUnwinders.h b/linux-x64/clang/include/lldb/Symbol/FuncUnwinders.h
new file mode 100644
index 0000000..cc767d4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/FuncUnwinders.h
@@ -0,0 +1,149 @@
+#ifndef liblldb_FuncUnwinders_h
+#define liblldb_FuncUnwinders_h
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/lldb-private-enumerations.h"
+#include <mutex>
+#include <vector>
+
+namespace lldb_private {
+
+class UnwindTable;
+
+class FuncUnwinders {
+public:
+  // FuncUnwinders objects are used to track UnwindPlans for a function (named
+  // or not - really just an address range)
+
+  // We'll record four different UnwindPlans for each address range:
+  //
+  //   1. Unwinding from a call site (a valid exception throw location)
+  //      This is often sourced from the eh_frame exception handling info
+  //   2. Unwinding from a non-call site (any location in the function)
+  //      This is often done by analyzing the function prologue assembly
+  //      language instructions
+  //   3. A fast unwind method for this function which only retrieves a
+  //      limited set of registers necessary to walk the stack
+  //   4. An architectural default unwind plan when none of the above are
+  //      available for some reason.
+
+  // Additionally, FuncUnwinds object can be asked where the prologue
+  // instructions are finished for migrating breakpoints past the stack frame
+  // setup instructions when we don't have line table information.
+
+  FuncUnwinders(lldb_private::UnwindTable &unwind_table, AddressRange range);
+
+  ~FuncUnwinders();
+
+  lldb::UnwindPlanSP GetUnwindPlanAtCallSite(Target &target, Thread &thread);
+
+  lldb::UnwindPlanSP GetUnwindPlanAtNonCallSite(Target &target,
+                                                lldb_private::Thread &thread);
+
+  lldb::UnwindPlanSP GetUnwindPlanFastUnwind(Target &target,
+                                             lldb_private::Thread &thread);
+
+  lldb::UnwindPlanSP
+  GetUnwindPlanArchitectureDefault(lldb_private::Thread &thread);
+
+  lldb::UnwindPlanSP
+  GetUnwindPlanArchitectureDefaultAtFunctionEntry(lldb_private::Thread &thread);
+
+  Address &GetFirstNonPrologueInsn(Target &target);
+
+  const Address &GetFunctionStartAddress() const;
+
+  bool ContainsAddress(const Address &addr) const {
+    return m_range.ContainsFileAddress(addr);
+  }
+
+  // A function may have a Language Specific Data Area specified -- a block of
+  // data in
+  // the object file which is used in the processing of an exception throw /
+  // catch. If any of the UnwindPlans have the address of the LSDA region for
+  // this function, this will return it.
+  Address GetLSDAAddress(Target &target);
+
+  // A function may have a Personality Routine associated with it -- used in the
+  // processing of throwing an exception.  If any of the UnwindPlans have the
+  // address of the personality routine, this will return it.  Read the target-
+  // pointer at this address to get the personality function address.
+  Address GetPersonalityRoutinePtrAddress(Target &target);
+
+  // The following methods to retrieve specific unwind plans should rarely be
+  // used. Instead, clients should ask for the *behavior* they are looking for,
+  // using one of the above UnwindPlan retrieval methods.
+
+  lldb::UnwindPlanSP GetAssemblyUnwindPlan(Target &target, Thread &thread);
+
+  lldb::UnwindPlanSP GetEHFrameUnwindPlan(Target &target);
+
+  lldb::UnwindPlanSP GetEHFrameAugmentedUnwindPlan(Target &target,
+                                                   Thread &thread);
+
+  lldb::UnwindPlanSP GetDebugFrameUnwindPlan(Target &target);
+
+  lldb::UnwindPlanSP GetDebugFrameAugmentedUnwindPlan(Target &target,
+                                                      Thread &thread);
+
+  lldb::UnwindPlanSP GetCompactUnwindUnwindPlan(Target &target);
+
+  lldb::UnwindPlanSP GetArmUnwindUnwindPlan(Target &target);
+
+  lldb::UnwindPlanSP GetSymbolFileUnwindPlan(Thread &thread);
+
+  lldb::UnwindPlanSP GetArchDefaultUnwindPlan(Thread &thread);
+
+  lldb::UnwindPlanSP GetArchDefaultAtFuncEntryUnwindPlan(Thread &thread);
+
+private:
+  lldb::UnwindAssemblySP GetUnwindAssemblyProfiler(Target &target);
+
+  // Do a simplistic comparison for the register restore rule for getting the
+  // caller's pc value on two UnwindPlans -- returns LazyBoolYes if they have
+  // the same unwind rule for the pc, LazyBoolNo if they do not have the same
+  // unwind rule for the pc, and LazyBoolCalculate if it was unable to
+  // determine this for some reason.
+  lldb_private::LazyBool CompareUnwindPlansForIdenticalInitialPCLocation(
+      Thread &thread, const lldb::UnwindPlanSP &a, const lldb::UnwindPlanSP &b);
+
+  UnwindTable &m_unwind_table;
+  AddressRange m_range;
+
+  std::recursive_mutex m_mutex;
+
+  lldb::UnwindPlanSP m_unwind_plan_assembly_sp;
+  lldb::UnwindPlanSP m_unwind_plan_eh_frame_sp;
+  lldb::UnwindPlanSP m_unwind_plan_debug_frame_sp;
+
+  // augmented by assembly inspection so it's valid everywhere
+  lldb::UnwindPlanSP m_unwind_plan_eh_frame_augmented_sp;
+  lldb::UnwindPlanSP m_unwind_plan_debug_frame_augmented_sp;
+
+  std::vector<lldb::UnwindPlanSP> m_unwind_plan_compact_unwind;
+  lldb::UnwindPlanSP m_unwind_plan_arm_unwind_sp;
+  lldb::UnwindPlanSP m_unwind_plan_symbol_file_sp;
+  lldb::UnwindPlanSP m_unwind_plan_fast_sp;
+  lldb::UnwindPlanSP m_unwind_plan_arch_default_sp;
+  lldb::UnwindPlanSP m_unwind_plan_arch_default_at_func_entry_sp;
+
+  // Fetching the UnwindPlans can be expensive - if we've already attempted to
+  // get one & failed, don't try again.
+  bool m_tried_unwind_plan_assembly : 1, m_tried_unwind_plan_eh_frame : 1,
+      m_tried_unwind_plan_debug_frame : 1,
+      m_tried_unwind_plan_eh_frame_augmented : 1,
+      m_tried_unwind_plan_debug_frame_augmented : 1,
+      m_tried_unwind_plan_compact_unwind : 1,
+      m_tried_unwind_plan_arm_unwind : 1, m_tried_unwind_plan_symbol_file : 1,
+      m_tried_unwind_fast : 1, m_tried_unwind_arch_default : 1,
+      m_tried_unwind_arch_default_at_func_entry : 1;
+
+  Address m_first_non_prologue_insn;
+
+  DISALLOW_COPY_AND_ASSIGN(FuncUnwinders);
+
+}; // class FuncUnwinders
+
+} // namespace lldb_private
+
+#endif // liblldb_FuncUnwinders_h
diff --git a/linux-x64/clang/include/lldb/Symbol/Function.h b/linux-x64/clang/include/lldb/Symbol/Function.h
new file mode 100644
index 0000000..f68a167
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/Function.h
@@ -0,0 +1,576 @@
+//===-- Function.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Function_h_
+#define liblldb_Function_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Core/Mangled.h"
+#include "lldb/Expression/DWARFExpression.h"
+#include "lldb/Symbol/Block.h"
+#include "lldb/Symbol/Declaration.h"
+#include "lldb/Utility/UserID.h"
+#include "llvm/ADT/ArrayRef.h"
+
+namespace lldb_private {
+
+/// \class FunctionInfo Function.h "lldb/Symbol/Function.h"
+/// A class that contains generic function information.
+///
+/// This provides generic function information that gets reused between inline
+/// functions and function types.
+class FunctionInfo {
+public:
+  /// Construct with the function method name and optional declaration
+  /// information.
+  ///
+  /// \param[in] name
+  ///     A C string name for the method name for this function. This
+  ///     value should not be the mangled named, but the simple method
+  ///     name.
+  ///
+  /// \param[in] decl_ptr
+  ///     Optional declaration information that describes where the
+  ///     function was declared. This can be NULL.
+  FunctionInfo(const char *name, const Declaration *decl_ptr);
+
+  /// Construct with the function method name and optional declaration
+  /// information.
+  ///
+  /// \param[in] name
+  ///     A name for the method name for this function. This value
+  ///     should not be the mangled named, but the simple method name.
+  ///
+  /// \param[in] decl_ptr
+  ///     Optional declaration information that describes where the
+  ///     function was declared. This can be NULL.
+  FunctionInfo(ConstString name, const Declaration *decl_ptr);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since classes inherit from this class.
+  virtual ~FunctionInfo();
+
+  /// Compare two function information objects.
+  ///
+  /// First compares the method names, and if equal, then compares the
+  /// declaration information.
+  ///
+  /// \param[in] lhs
+  ///     The Left Hand Side const FunctionInfo object reference.
+  ///
+  /// \param[in] rhs
+  ///     The Right Hand Side const FunctionInfo object reference.
+  ///
+  /// \return
+  ///     \li -1 if lhs < rhs
+  ///     \li 0 if lhs == rhs
+  ///     \li 1 if lhs > rhs
+  static int Compare(const FunctionInfo &lhs, const FunctionInfo &rhs);
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s, bool show_fullpaths) const;
+
+  /// Get accessor for the declaration information.
+  ///
+  /// \return
+  ///     A reference to the declaration object.
+  Declaration &GetDeclaration();
+
+  /// Get const accessor for the declaration information.
+  ///
+  /// \return
+  ///     A const reference to the declaration object.
+  const Declaration &GetDeclaration() const;
+
+  /// Get accessor for the method name.
+  ///
+  /// \return
+  ///     A const reference to the method name object.
+  ConstString GetName() const;
+
+  /// Get the memory cost of this object.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///     The returned value does not include the bytes for any
+  ///     shared string values.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  virtual size_t MemorySize() const;
+
+protected:
+  // Member variables.
+  ConstString m_name;        ///< Function method name (not a mangled name).
+  Declaration m_declaration; ///< Information describing where this function
+                             ///information was defined.
+};
+
+/// \class InlineFunctionInfo Function.h "lldb/Symbol/Function.h"
+/// A class that describes information for an inlined function.
+class InlineFunctionInfo : public FunctionInfo {
+public:
+  /// Construct with the function method name, mangled name, and optional
+  /// declaration information.
+  ///
+  /// \param[in] name
+  ///     A C string name for the method name for this function. This
+  ///     value should not be the mangled named, but the simple method
+  ///     name.
+  ///
+  /// \param[in] mangled
+  ///     A C string name for the mangled name for this function. This
+  ///     value can be NULL if there is no mangled information.
+  ///
+  /// \param[in] decl_ptr
+  ///     Optional declaration information that describes where the
+  ///     function was declared. This can be NULL.
+  ///
+  /// \param[in] call_decl_ptr
+  ///     Optional calling location declaration information that
+  ///     describes from where this inlined function was called.
+  InlineFunctionInfo(const char *name, const char *mangled,
+                     const Declaration *decl_ptr,
+                     const Declaration *call_decl_ptr);
+
+  /// Construct with the function method name, mangled name, and optional
+  /// declaration information.
+  ///
+  /// \param[in] name
+  ///     A name for the method name for this function. This value
+  ///     should not be the mangled named, but the simple method name.
+  ///
+  /// \param[in] mangled
+  ///     A name for the mangled name for this function. This value
+  ///     can be empty if there is no mangled information.
+  ///
+  /// \param[in] decl_ptr
+  ///     Optional declaration information that describes where the
+  ///     function was declared. This can be NULL.
+  ///
+  /// \param[in] call_decl_ptr
+  ///     Optional calling location declaration information that
+  ///     describes from where this inlined function was called.
+  InlineFunctionInfo(ConstString name, const Mangled &mangled,
+                     const Declaration *decl_ptr,
+                     const Declaration *call_decl_ptr);
+
+  /// Destructor.
+  ~InlineFunctionInfo() override;
+
+  /// Compare two inlined function information objects.
+  ///
+  /// First compares the FunctionInfo objects, and if equal, compares the
+  /// mangled names.
+  ///
+  /// \param[in] lhs
+  ///     The Left Hand Side const InlineFunctionInfo object
+  ///     reference.
+  ///
+  /// \param[in] rhs
+  ///     The Right Hand Side const InlineFunctionInfo object
+  ///     reference.
+  ///
+  /// \return
+  ///     \li -1 if lhs < rhs
+  ///     \li 0 if lhs == rhs
+  ///     \li 1 if lhs > rhs
+  int Compare(const InlineFunctionInfo &lhs, const InlineFunctionInfo &rhs);
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s, bool show_fullpaths) const;
+
+  void DumpStopContext(Stream *s, lldb::LanguageType language) const;
+
+  ConstString GetName(lldb::LanguageType language) const;
+
+  ConstString GetDisplayName(lldb::LanguageType language) const;
+
+  /// Get accessor for the call site declaration information.
+  ///
+  /// \return
+  ///     A reference to the declaration object.
+  Declaration &GetCallSite();
+
+  /// Get const accessor for the call site declaration information.
+  ///
+  /// \return
+  ///     A const reference to the declaration object.
+  const Declaration &GetCallSite() const;
+
+  /// Get accessor for the mangled name object.
+  ///
+  /// \return
+  ///     A reference to the mangled name object.
+  Mangled &GetMangled();
+
+  /// Get const accessor for the mangled name object.
+  ///
+  /// \return
+  ///     A const reference to the mangled name object.
+  const Mangled &GetMangled() const;
+
+  /// Get the memory cost of this object.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///     The returned value does not include the bytes for any
+  ///     shared string values.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  size_t MemorySize() const override;
+
+private:
+  // Member variables.
+  Mangled m_mangled; ///< Mangled inlined function name (can be empty if there
+                     ///is no mangled information).
+  Declaration m_call_decl;
+};
+
+class Function;
+
+/// \class CallEdge Function.h "lldb/Symbol/Function.h"
+///
+/// Represent a call made within a Function. This can be used to find a path
+/// in the call graph between two functions.
+class CallEdge {
+public:
+  /// Construct a call edge using a symbol name to identify the calling
+  /// function, and a return PC within the calling function to identify a
+  /// specific call site.
+  ///
+  /// TODO: A symbol name may not be globally unique. To disambiguate ODR
+  /// conflicts, it's necessary to determine the \c Target a call edge is
+  /// associated with before resolving it.
+  CallEdge(const char *symbol_name, lldb::addr_t return_pc);
+
+  CallEdge(CallEdge &&) = default;
+  CallEdge &operator=(CallEdge &&) = default;
+
+  /// Get the callee's definition.
+  ///
+  /// Note that this might lazily invoke the DWARF parser.
+  Function *GetCallee(ModuleList &images);
+
+  /// Get the load PC address of the instruction which executes after the call
+  /// returns. Returns LLDB_INVALID_ADDRESS iff this is a tail call. \p caller
+  /// is the Function containing this call, and \p target is the Target which
+  /// made the call.
+  lldb::addr_t GetReturnPCAddress(Function &caller, Target &target) const;
+
+  /// Like \ref GetReturnPCAddress, but returns an unslid function-local PC
+  /// offset.
+  lldb::addr_t GetUnresolvedReturnPCAddress() const { return return_pc; }
+
+private:
+  void ParseSymbolFileAndResolve(ModuleList &images);
+
+  /// Either the callee's mangled name or its definition, discriminated by
+  /// \ref resolved.
+  union {
+    const char *symbol_name;
+    Function *def;
+  } lazy_callee;
+
+  /// An invalid address if this is a tail call. Otherwise, the function-local
+  /// PC offset. Adding this PC offset to the function's base load address
+  /// gives the return PC for the call.
+  lldb::addr_t return_pc;
+
+  /// Whether or not an attempt was made to find the callee's definition.
+  bool resolved;
+
+  DISALLOW_COPY_AND_ASSIGN(CallEdge);
+};
+
+/// \class Function Function.h "lldb/Symbol/Function.h"
+/// A class that describes a function.
+///
+/// Functions belong to CompileUnit objects (Function::m_comp_unit), have
+/// unique user IDs (Function::UserID), know how to reconstruct their symbol
+/// context (Function::SymbolContextScope), have a specific function type
+/// (Function::m_type_uid), have a simple method name (FunctionInfo::m_name),
+/// be declared at a specific location (FunctionInfo::m_declaration), possibly
+/// have mangled names (Function::m_mangled), an optional return type
+/// (Function::m_type), and contains lexical blocks (Function::m_blocks).
+///
+/// The function information is split into a few pieces:
+///     \li The concrete instance information
+///     \li The abstract information
+///
+/// The abstract information is found in the function type (Type) that
+/// describes a function information, return type and parameter types.
+///
+/// The concrete information is the address range information and specific
+/// locations for an instance of this function.
+class Function : public UserID, public SymbolContextScope {
+public:
+  /// Construct with a compile unit, function UID, function type UID, optional
+  /// mangled name, function type, and a section offset based address range.
+  ///
+  /// \param[in] comp_unit
+  ///     The compile unit to which this function belongs.
+  ///
+  /// \param[in] func_uid
+  ///     The UID for this function. This value is provided by the
+  ///     SymbolFile plug-in and can be any value that allows
+  ///     the plug-in to quickly find and parse more detailed
+  ///     information when and if more information is needed.
+  ///
+  /// \param[in] func_type_uid
+  ///     The type UID for the function Type to allow for lazy type
+  ///     parsing from the debug information.
+  ///
+  /// \param[in] mangled
+  ///     The optional mangled name for this function. If empty, there
+  ///     is no mangled information.
+  ///
+  /// \param[in] func_type
+  ///     The optional function type. If NULL, the function type will
+  ///     be parsed on demand when accessed using the
+  ///     Function::GetType() function by asking the SymbolFile
+  ///     plug-in to get the type for \a func_type_uid.
+  ///
+  /// \param[in] range
+  ///     The section offset based address for this function.
+  Function(CompileUnit *comp_unit, lldb::user_id_t func_uid,
+           lldb::user_id_t func_type_uid, const Mangled &mangled,
+           Type *func_type, const AddressRange &range);
+
+  /// Destructor.
+  ~Function() override;
+
+  /// \copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
+  ///
+  /// \see SymbolContextScope
+  void CalculateSymbolContext(SymbolContext *sc) override;
+
+  lldb::ModuleSP CalculateSymbolContextModule() override;
+
+  CompileUnit *CalculateSymbolContextCompileUnit() override;
+
+  Function *CalculateSymbolContextFunction() override;
+
+  const AddressRange &GetAddressRange() { return m_range; }
+
+  lldb::LanguageType GetLanguage() const;
+  /// Find the file and line number of the source location of the start of the
+  /// function.  This will use the declaration if present and fall back on the
+  /// line table if that fails.  So there may NOT be a line table entry for
+  /// this source file/line combo.
+  ///
+  /// \param[out] source_file
+  ///     The source file.
+  ///
+  /// \param[out] line_no
+  ///     The line number.
+  void GetStartLineSourceInfo(FileSpec &source_file, uint32_t &line_no);
+
+  /// Find the file and line number of the source location of the end of the
+  /// function.
+  ///
+  ///
+  /// \param[out] source_file
+  ///     The source file.
+  ///
+  /// \param[out] line_no
+  ///     The line number.
+  void GetEndLineSourceInfo(FileSpec &source_file, uint32_t &line_no);
+
+  /// Get the outgoing call edges from this function, sorted by their return
+  /// PC addresses (in increasing order).
+  llvm::MutableArrayRef<CallEdge> GetCallEdges();
+
+  /// Get the outgoing tail-calling edges from this function. If none exist,
+  /// return None.
+  llvm::MutableArrayRef<CallEdge> GetTailCallingEdges();
+
+  /// Get accessor for the block list.
+  ///
+  /// \return
+  ///     The block list object that describes all lexical blocks
+  ///     in the function.
+  ///
+  /// \see BlockList
+  Block &GetBlock(bool can_create);
+
+  /// Get accessor for the compile unit that owns this function.
+  ///
+  /// \return
+  ///     A compile unit object pointer.
+  CompileUnit *GetCompileUnit();
+
+  /// Get const accessor for the compile unit that owns this function.
+  ///
+  /// \return
+  ///     A const compile unit object pointer.
+  const CompileUnit *GetCompileUnit() const;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level, Target *target);
+
+  /// Get accessor for the frame base location.
+  ///
+  /// \return
+  ///     A location expression that describes the function frame
+  ///     base.
+  DWARFExpression &GetFrameBaseExpression() { return m_frame_base; }
+
+  /// Get const accessor for the frame base location.
+  ///
+  /// \return
+  ///     A const compile unit object pointer.
+  const DWARFExpression &GetFrameBaseExpression() const { return m_frame_base; }
+
+  ConstString GetName() const;
+
+  ConstString GetNameNoArguments() const;
+
+  ConstString GetDisplayName() const;
+
+  const Mangled &GetMangled() const { return m_mangled; }
+
+  /// Get the DeclContext for this function, if available.
+  ///
+  /// \return
+  ///     The DeclContext, or NULL if none exists.
+  CompilerDeclContext GetDeclContext();
+
+  /// Get accessor for the type that describes the function return value type,
+  /// and parameter types.
+  ///
+  /// \return
+  ///     A type object pointer.
+  Type *GetType();
+
+  /// Get const accessor for the type that describes the function return value
+  /// type, and parameter types.
+  ///
+  /// \return
+  ///     A const type object pointer.
+  const Type *GetType() const;
+
+  CompilerType GetCompilerType();
+
+  /// Get the size of the prologue instructions for this function.  The
+  /// "prologue" instructions include any instructions given line number 0
+  /// immediately following the prologue end.
+  ///
+  /// \return
+  ///     The size of the prologue.
+  uint32_t GetPrologueByteSize();
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] show_context
+  ///     If \b true, variables will dump their symbol context
+  ///     information.
+  void Dump(Stream *s, bool show_context) const;
+
+  /// \copydoc SymbolContextScope::DumpSymbolContext(Stream*)
+  ///
+  /// \see SymbolContextScope
+  void DumpSymbolContext(Stream *s) override;
+
+  /// Get the memory cost of this object.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///     The returned value does not include the bytes for any
+  ///     shared string values.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  size_t MemorySize() const;
+
+  /// Get whether compiler optimizations were enabled for this function
+  ///
+  /// The debug information may provide information about whether this
+  /// function was compiled with optimization or not.  In this case,
+  /// "optimized" means that the debug experience may be difficult for the
+  /// user to understand.  Variables may not be available when the developer
+  /// would expect them, stepping through the source lines in the function may
+  /// appear strange, etc.
+  ///
+  /// \return
+  ///     Returns 'true' if this function was compiled with
+  ///     optimization.  'false' indicates that either the optimization
+  ///     is unknown, or this function was built without optimization.
+  bool GetIsOptimized();
+
+  /// Get whether this function represents a 'top-level' function
+  ///
+  /// The concept of a top-level function is language-specific, mostly meant
+  /// to represent the notion of scripting-style code that has global
+  /// visibility of the variables/symbols/functions/... defined within the
+  /// containing file/module
+  ///
+  /// If stopped in a top-level function, LLDB will expose global variables
+  /// as-if locals in the 'frame variable' command
+  ///
+  /// \return
+  ///     Returns 'true' if this function is a top-level function,
+  ///     'false' otherwise.
+  bool IsTopLevelFunction();
+
+  lldb::DisassemblerSP GetInstructions(const ExecutionContext &exe_ctx,
+                                       const char *flavor,
+                                       bool prefer_file_cache);
+
+  bool GetDisassembly(const ExecutionContext &exe_ctx, const char *flavor,
+                      bool prefer_file_cache, Stream &strm);
+
+protected:
+  enum {
+    flagsCalculatedPrologueSize =
+        (1 << 0) ///< Have we already tried to calculate the prologue size?
+  };
+
+  // Member variables.
+  CompileUnit *m_comp_unit; ///< The compile unit that owns this function.
+  lldb::user_id_t
+      m_type_uid; ///< The user ID of for the prototype Type for this function.
+  Type *m_type; ///< The function prototype type for this function that include
+                ///the function info (FunctionInfo), return type and parameters.
+  Mangled m_mangled; ///< The mangled function name if any, if empty, there is
+                     ///no mangled information.
+  Block m_block;     ///< All lexical blocks contained in this function.
+  AddressRange m_range; ///< The function address range that covers the widest
+                        ///range needed to contain all blocks
+  DWARFExpression m_frame_base; ///< The frame base expression for variables
+                                ///that are relative to the frame pointer.
+  Flags m_flags;
+  uint32_t
+      m_prologue_byte_size; ///< Compute the prologue size once and cache it
+
+  bool m_call_edges_resolved = false; ///< Whether call site info has been
+                                      ///  parsed.
+  std::vector<CallEdge> m_call_edges; ///< Outgoing call edges.
+private:
+  DISALLOW_COPY_AND_ASSIGN(Function);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Function_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/LineEntry.h b/linux-x64/clang/include/lldb/Symbol/LineEntry.h
new file mode 100644
index 0000000..fe97a78
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/LineEntry.h
@@ -0,0 +1,187 @@
+//===-- LineEntry.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_LineEntry_h_
+#define liblldb_LineEntry_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class LineEntry LineEntry.h "lldb/Symbol/LineEntry.h"
+/// A line table entry class.
+struct LineEntry {
+  /// Default constructor.
+  ///
+  /// Initialize all member variables to invalid values.
+  LineEntry();
+
+  LineEntry(const lldb::SectionSP &section_sp, lldb::addr_t section_offset,
+            lldb::addr_t byte_size, const FileSpec &file, uint32_t _line,
+            uint16_t _column, bool _is_start_of_statement,
+            bool _is_start_of_basic_block, bool _is_prologue_end,
+            bool _is_epilogue_begin, bool _is_terminal_entry);
+
+  /// Clear the object's state.
+  ///
+  /// Clears all member variables to invalid values.
+  void Clear();
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] comp_unit
+  ///     The compile unit object that contains the support file
+  ///     list so the line entry can dump the file name (since this
+  ///     object contains a file index into the support file list).
+  ///
+  /// \param[in] show_file
+  ///     If \b true, display the filename with the line entry which
+  ///     requires that the compile unit object \a comp_unit be a
+  ///     valid pointer.
+  ///
+  /// \param[in] style
+  ///     The display style for the section offset address.
+  ///
+  /// \return
+  ///     Returns \b true if the address was able to be displayed
+  ///     using \a style. File and load addresses may be unresolved
+  ///     and it may not be possible to display a valid address value.
+  ///     Returns \b false if the address was not able to be properly
+  ///     dumped.
+  ///
+  /// \see Address::DumpStyle
+  bool Dump(Stream *s, Target *target, bool show_file, Address::DumpStyle style,
+            Address::DumpStyle fallback_style, bool show_range) const;
+
+  bool GetDescription(Stream *s, lldb::DescriptionLevel level, CompileUnit *cu,
+                      Target *target, bool show_address_only) const;
+
+  /// Dumps information specific to a process that stops at this line entry to
+  /// the supplied stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] comp_unit
+  ///     The compile unit object that contains the support file
+  ///     list so the line entry can dump the file name (since this
+  ///     object contains a file index into the support file list).
+  ///
+  /// \return
+  ///     Returns \b true if the file and line were properly dumped,
+  ///     \b false otherwise.
+  bool DumpStopContext(Stream *s, bool show_fullpaths) const;
+
+  /// Check if a line entry object is valid.
+  ///
+  /// \return
+  ///     Returns \b true if the line entry contains a valid section
+  ///     offset address, file index, and line number, \b false
+  ///     otherwise.
+  bool IsValid() const;
+
+  /// Compare two LineEntry objects.
+  ///
+  /// \param[in] lhs
+  ///     The Left Hand Side const LineEntry object reference.
+  ///
+  /// \param[in] rhs
+  ///     The Right Hand Side const LineEntry object reference.
+  ///
+  /// \return
+  ///     \li -1 if lhs < rhs
+  ///     \li 0 if lhs == rhs
+  ///     \li 1 if lhs > rhs
+  static int Compare(const LineEntry &lhs, const LineEntry &rhs);
+
+  /// Give the range for this LineEntry + any additional LineEntries for this
+  /// same source line that are contiguous.
+  ///
+  /// A compiler may emit multiple line entries for a single source line,
+  /// e.g. to indicate subexpressions at different columns.  This method will
+  /// get the AddressRange for all of the LineEntries for this source line
+  /// that are contiguous.
+  //
+  /// Line entries with a line number of 0 are treated specially - these are
+  /// compiler-generated line table entries that the user did not write in
+  /// their source code, and we want to skip past in the debugger. If this
+  /// LineEntry is for line 32, and the following LineEntry is for line 0, we
+  /// will extend the range to include the AddressRange of the line 0
+  /// LineEntry (and it will include the range of the following LineEntries
+  /// that match either 32 or 0.)
+  ///
+  /// When \b include_inlined_functions is \b true inlined functions with
+  /// a call site at this LineEntry will also be included in the complete
+  /// range.
+  ///
+  /// If the initial LineEntry this method is called on is a line #0, only the
+  /// range of contiuous LineEntries with line #0 will be included in the
+  /// complete range.
+  ///
+  /// @param[in] include_inlined_functions
+  ///     Whether to include inlined functions at the same line or not.
+  ///
+  /// \return
+  ///     The contiguous AddressRange for this source line.
+  AddressRange
+  GetSameLineContiguousAddressRange(bool include_inlined_functions) const;
+
+  /// Apply file mappings from target.source-map to the LineEntry's file.
+  ///
+  /// \param[in] target_sp
+  ///     Shared pointer to the target this LineEntry belongs to.
+
+  void ApplyFileMappings(lldb::TargetSP target_sp);
+
+  // Member variables.
+  AddressRange range; ///< The section offset address range for this line entry.
+  FileSpec file; ///< The source file, possibly mapped by the target.source-map
+                 ///setting
+  FileSpec original_file; ///< The original source file, from debug info.
+  uint32_t line; ///< The source line number, or zero if there is no line number
+                 ///information.
+  uint16_t column; ///< The column number of the source line, or zero if there
+                   ///is no column information.
+  uint16_t is_start_of_statement : 1, ///< Indicates this entry is the beginning
+                                      ///of a statement.
+      is_start_of_basic_block : 1, ///< Indicates this entry is the beginning of
+                                   ///a basic block.
+      is_prologue_end : 1,   ///< Indicates this entry is one (of possibly many)
+                             ///where execution should be suspended for an entry
+                             ///breakpoint of a function.
+      is_epilogue_begin : 1, ///< Indicates this entry is one (of possibly many)
+                             ///where execution should be suspended for an exit
+                             ///breakpoint of a function.
+      is_terminal_entry : 1; ///< Indicates this entry is that of the first byte
+                             ///after the end of a sequence of target machine
+                             ///instructions.
+};
+
+/// Less than operator.
+///
+/// \param[in] lhs
+///     The Left Hand Side const LineEntry object reference.
+///
+/// \param[in] rhs
+///     The Right Hand Side const LineEntry object reference.
+///
+/// \return
+///     Returns \b true if lhs < rhs, false otherwise.
+bool operator<(const LineEntry &lhs, const LineEntry &rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_LineEntry_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/LineTable.h b/linux-x64/clang/include/lldb/Symbol/LineTable.h
new file mode 100644
index 0000000..d24cc35
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/LineTable.h
@@ -0,0 +1,346 @@
+//===-- LineTable.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_LineTable_h_
+#define liblldb_LineTable_h_
+
+#include "lldb/Core/ModuleChild.h"
+#include "lldb/Core/Section.h"
+#include "lldb/Symbol/LineEntry.h"
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/lldb-private.h"
+#include <vector>
+
+namespace lldb_private {
+
+/// \class LineSequence LineTable.h "lldb/Symbol/LineTable.h" An abstract base
+/// class used during symbol table creation.
+class LineSequence {
+public:
+  LineSequence();
+
+  virtual ~LineSequence() = default;
+
+  virtual void Clear() = 0;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(LineSequence);
+};
+
+/// \class LineTable LineTable.h "lldb/Symbol/LineTable.h"
+/// A line table class.
+class LineTable {
+public:
+  /// Construct with compile unit.
+  ///
+  /// \param[in] comp_unit
+  ///     The compile unit to which this line table belongs.
+  LineTable(CompileUnit *comp_unit);
+
+  /// Destructor.
+  ~LineTable();
+
+  /// Adds a new line entry to this line table.
+  ///
+  /// All line entries are maintained in file address order.
+  ///
+  /// \param[in] line_entry
+  ///     A const reference to a new line_entry to add to this line
+  ///     table.
+  ///
+  /// \see Address::DumpStyle
+  //  void
+  //  AddLineEntry (const LineEntry& line_entry);
+
+  // Called when you can't guarantee the addresses are in increasing order
+  void InsertLineEntry(lldb::addr_t file_addr, uint32_t line, uint16_t column,
+                       uint16_t file_idx, bool is_start_of_statement,
+                       bool is_start_of_basic_block, bool is_prologue_end,
+                       bool is_epilogue_begin, bool is_terminal_entry);
+
+  // Used to instantiate the LineSequence helper class
+  LineSequence *CreateLineSequenceContainer();
+
+  // Append an entry to a caller-provided collection that will later be
+  // inserted in this line table.
+  void AppendLineEntryToSequence(LineSequence *sequence, lldb::addr_t file_addr,
+                                 uint32_t line, uint16_t column,
+                                 uint16_t file_idx, bool is_start_of_statement,
+                                 bool is_start_of_basic_block,
+                                 bool is_prologue_end, bool is_epilogue_begin,
+                                 bool is_terminal_entry);
+
+  // Insert a sequence of entries into this line table.
+  void InsertSequence(LineSequence *sequence);
+
+  /// Dump all line entries in this line table to the stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] style
+  ///     The display style for the address.
+  ///
+  /// \see Address::DumpStyle
+  void Dump(Stream *s, Target *target, Address::DumpStyle style,
+            Address::DumpStyle fallback_style, bool show_line_ranges);
+
+  void GetDescription(Stream *s, Target *target, lldb::DescriptionLevel level);
+
+  /// Find a line entry that contains the section offset address \a so_addr.
+  ///
+  /// \param[in] so_addr
+  ///     A section offset address object containing the address we
+  ///     are searching for.
+  ///
+  /// \param[out] line_entry
+  ///     A copy of the line entry that was found if \b true is
+  ///     returned, otherwise \a entry is left unmodified.
+  ///
+  /// \param[out] index_ptr
+  ///     A pointer to a 32 bit integer that will get the actual line
+  ///     entry index if it is not nullptr.
+  ///
+  /// \return
+  ///     Returns \b true if \a so_addr is contained in a line entry
+  ///     in this line table, \b false otherwise.
+  bool FindLineEntryByAddress(const Address &so_addr, LineEntry &line_entry,
+                              uint32_t *index_ptr = nullptr);
+
+  /// Find a line entry index that has a matching file index and source line
+  /// number.
+  ///
+  /// Finds the next line entry that has a matching \a file_idx and source
+  /// line number \a line starting at the \a start_idx entries into the line
+  /// entry collection.
+  ///
+  /// \param[in] start_idx
+  ///     The number of entries to skip when starting the search.
+  ///
+  /// \param[out] file_idx
+  ///     The file index to search for that should be found prior
+  ///     to calling this function using the following functions:
+  ///     CompileUnit::GetSupportFiles()
+  ///     FileSpecList::FindFileIndex (uint32_t, const FileSpec &) const
+  ///
+  /// \param[in] line
+  ///     The source line to match.
+  ///
+  /// \param[in] exact
+  ///     If true, match only if you find a line entry exactly matching \a line.
+  ///     If false, return the closest line entry greater than \a line.
+  ///
+  /// \param[out] line_entry
+  ///     A reference to a line entry object that will get a copy of
+  ///     the line entry if \b true is returned, otherwise \a
+  ///     line_entry is left untouched.
+  ///
+  /// \return
+  ///     Returns \b true if a matching line entry is found in this
+  ///     line table, \b false otherwise.
+  ///
+  /// \see CompileUnit::GetSupportFiles()
+  /// \see FileSpecList::FindFileIndex (uint32_t, const FileSpec &) const
+  uint32_t FindLineEntryIndexByFileIndex(uint32_t start_idx, uint32_t file_idx,
+                                         uint32_t line, bool exact,
+                                         LineEntry *line_entry_ptr);
+
+  uint32_t FindLineEntryIndexByFileIndex(
+      uint32_t start_idx, const std::vector<uint32_t> &file_indexes,
+      uint32_t line, bool exact, LineEntry *line_entry_ptr);
+
+  size_t FineLineEntriesForFileIndex(uint32_t file_idx, bool append,
+                                     SymbolContextList &sc_list);
+
+  /// Get the line entry from the line table at index \a idx.
+  ///
+  /// \param[in] idx
+  ///     An index into the line table entry collection.
+  ///
+  /// \return
+  ///     A valid line entry if \a idx is a valid index, or an invalid
+  ///     line entry if \a idx is not valid.
+  ///
+  /// \see LineTable::GetSize()
+  /// \see LineEntry::IsValid() const
+  bool GetLineEntryAtIndex(uint32_t idx, LineEntry &line_entry);
+
+  /// Gets the size of the line table in number of line table entries.
+  ///
+  /// \return
+  ///     The number of line table entries in this line table.
+  uint32_t GetSize() const;
+
+  typedef lldb_private::RangeArray<lldb::addr_t, lldb::addr_t, 32>
+      FileAddressRanges;
+
+  /// Gets all contiguous file address ranges for the entire line table.
+  ///
+  /// \param[out] file_ranges
+  ///     A collection of file address ranges that will be filled in
+  ///     by this function.
+  ///
+  /// \param[out] append
+  ///     If \b true, then append to \a file_ranges, otherwise clear
+  ///     \a file_ranges prior to adding any ranges.
+  ///
+  /// \return
+  ///     The number of address ranges added to \a file_ranges
+  size_t GetContiguousFileAddressRanges(FileAddressRanges &file_ranges,
+                                        bool append);
+
+  /// Given a file range link map, relink the current line table and return a
+  /// fixed up line table.
+  ///
+  /// \param[out] file_range_map
+  ///     A collection of file ranges that maps to new file ranges
+  ///     that will be used when linking the line table.
+  ///
+  /// \return
+  ///     A new line table if at least one line table entry was able
+  ///     to be mapped.
+  typedef RangeDataVector<lldb::addr_t, lldb::addr_t, lldb::addr_t>
+      FileRangeMap;
+
+  LineTable *LinkLineTable(const FileRangeMap &file_range_map);
+
+protected:
+  struct Entry {
+    Entry()
+        : file_addr(LLDB_INVALID_ADDRESS), line(0),
+          is_start_of_statement(false), is_start_of_basic_block(false),
+          is_prologue_end(false), is_epilogue_begin(false),
+          is_terminal_entry(false), column(0), file_idx(0) {}
+
+    Entry(lldb::addr_t _file_addr, uint32_t _line, uint16_t _column,
+          uint16_t _file_idx, bool _is_start_of_statement,
+          bool _is_start_of_basic_block, bool _is_prologue_end,
+          bool _is_epilogue_begin, bool _is_terminal_entry)
+        : file_addr(_file_addr), line(_line),
+          is_start_of_statement(_is_start_of_statement),
+          is_start_of_basic_block(_is_start_of_basic_block),
+          is_prologue_end(_is_prologue_end),
+          is_epilogue_begin(_is_epilogue_begin),
+          is_terminal_entry(_is_terminal_entry), column(_column),
+          file_idx(_file_idx) {}
+
+    int bsearch_compare(const void *key, const void *arrmem);
+
+    void Clear() {
+      file_addr = LLDB_INVALID_ADDRESS;
+      line = 0;
+      column = 0;
+      file_idx = 0;
+      is_start_of_statement = false;
+      is_start_of_basic_block = false;
+      is_prologue_end = false;
+      is_epilogue_begin = false;
+      is_terminal_entry = false;
+    }
+
+    static int Compare(const Entry &lhs, const Entry &rhs) {
+// Compare the sections before calling
+#define SCALAR_COMPARE(a, b)                                                   \
+  if (a < b)                                                                   \
+    return -1;                                                                 \
+  if (a > b)                                                                   \
+  return +1
+      SCALAR_COMPARE(lhs.file_addr, rhs.file_addr);
+      SCALAR_COMPARE(lhs.line, rhs.line);
+      SCALAR_COMPARE(lhs.column, rhs.column);
+      SCALAR_COMPARE(lhs.is_start_of_statement, rhs.is_start_of_statement);
+      SCALAR_COMPARE(lhs.is_start_of_basic_block, rhs.is_start_of_basic_block);
+      // rhs and lhs reversed on purpose below.
+      SCALAR_COMPARE(rhs.is_prologue_end, lhs.is_prologue_end);
+      SCALAR_COMPARE(lhs.is_epilogue_begin, rhs.is_epilogue_begin);
+      // rhs and lhs reversed on purpose below.
+      SCALAR_COMPARE(rhs.is_terminal_entry, lhs.is_terminal_entry);
+      SCALAR_COMPARE(lhs.file_idx, rhs.file_idx);
+#undef SCALAR_COMPARE
+      return 0;
+    }
+
+    class LessThanBinaryPredicate {
+    public:
+      LessThanBinaryPredicate(LineTable *line_table);
+      bool operator()(const LineTable::Entry &, const LineTable::Entry &) const;
+
+    protected:
+      LineTable *m_line_table;
+    };
+
+    static bool EntryAddressLessThan(const Entry &lhs, const Entry &rhs) {
+      return lhs.file_addr < rhs.file_addr;
+    }
+
+    // Member variables.
+    /// The file address for this line entry.
+    lldb::addr_t file_addr;
+    /// The source line number, or zero if there is no line number
+    /// information.
+    uint32_t line : 27;
+    /// Indicates this entry is the beginning of a statement.
+    uint32_t is_start_of_statement : 1;
+    /// Indicates this entry is the beginning of a basic block.
+    uint32_t is_start_of_basic_block : 1;
+    /// Indicates this entry is one (of possibly many) where execution
+    /// should be suspended for an entry breakpoint of a function.
+    uint32_t is_prologue_end : 1;
+    /// Indicates this entry is one (of possibly many) where execution
+    /// should be suspended for an exit breakpoint of a function.
+    uint32_t is_epilogue_begin : 1;
+    /// Indicates this entry is that of the first byte after the end
+    /// of a sequence of target machine instructions.
+    uint32_t is_terminal_entry : 1;
+    /// The column number of the source line, or zero if there is no
+    /// column information.
+    uint16_t column;
+    /// The file index into CompileUnit's file table, or zero if there
+    /// is no file information.
+    uint16_t file_idx;
+  };
+
+  struct EntrySearchInfo {
+    LineTable *line_table;
+    lldb_private::Section *a_section;
+    Entry *a_entry;
+  };
+
+  // Types
+  typedef std::vector<lldb_private::Section *>
+      section_collection; ///< The collection type for the sections.
+  typedef std::vector<Entry>
+      entry_collection; ///< The collection type for the line entries.
+  // Member variables.
+  CompileUnit
+      *m_comp_unit; ///< The compile unit that this line table belongs to.
+  entry_collection
+      m_entries; ///< The collection of line entries in this line table.
+
+  // Helper class
+  class LineSequenceImpl : public LineSequence {
+  public:
+    LineSequenceImpl() = default;
+
+    ~LineSequenceImpl() override = default;
+
+    void Clear() override;
+
+    entry_collection
+        m_entries; ///< The collection of line entries in this sequence.
+  };
+
+  bool ConvertEntryAtIndexToLineEntry(uint32_t idx, LineEntry &line_entry);
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(LineTable);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_LineTable_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/LocateSymbolFile.h b/linux-x64/clang/include/lldb/Symbol/LocateSymbolFile.h
new file mode 100644
index 0000000..0ff834d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/LocateSymbolFile.h
@@ -0,0 +1,58 @@
+//===-- LocateSymbolFile.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Symbols_h_
+#define liblldb_Symbols_h_
+
+#include <stdint.h>
+
+#include "lldb/Core/FileSpecList.h"
+#include "lldb/Utility/FileSpec.h"
+
+namespace lldb_private {
+
+class ArchSpec;
+class ModuleSpec;
+class UUID;
+
+class Symbols {
+public:
+  // Locate the executable file given a module specification.
+  //
+  // Locating the file should happen only on the local computer or using the
+  // current computers global settings.
+  static ModuleSpec LocateExecutableObjectFile(const ModuleSpec &module_spec);
+
+  // Locate the symbol file given a module specification.
+  //
+  // Locating the file should happen only on the local computer or using the
+  // current computers global settings.
+  static FileSpec
+  LocateExecutableSymbolFile(const ModuleSpec &module_spec,
+                             const FileSpecList &default_search_paths);
+
+  static FileSpec FindSymbolFileInBundle(const FileSpec &dsym_bundle_fspec,
+                                         const lldb_private::UUID *uuid,
+                                         const ArchSpec *arch);
+
+  // Locate the object and symbol file given a module specification.
+  //
+  // Locating the file can try to download the file from a corporate build
+  // repository, or using any other means necessary to locate both the
+  // unstripped object file and the debug symbols. The force_lookup argument
+  // controls whether the external program is called unconditionally to find
+  // the symbol file, or if the user's settings are checked to see if they've
+  // enabled the external program before calling.
+  //
+  static bool DownloadObjectAndSymbolFile(ModuleSpec &module_spec,
+                                          bool force_lookup = true);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Symbols_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/ObjectContainer.h b/linux-x64/clang/include/lldb/Symbol/ObjectContainer.h
new file mode 100644
index 0000000..9310fdc
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ObjectContainer.h
@@ -0,0 +1,175 @@
+//===-- ObjectContainer.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ObjectContainer_h_
+#define liblldb_ObjectContainer_h_
+
+#include "lldb/Core/ModuleChild.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/Endian.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class ObjectContainer ObjectContainer.h "lldb/Symbol/ObjectContainer.h"
+/// A plug-in interface definition class for object containers.
+///
+/// Object containers contain object files from one or more architectures, and
+/// also can contain one or more named objects.
+///
+/// Typical object containers are static libraries (.a files) that contain
+/// multiple named object files, and universal files that contain multiple
+/// architectures.
+class ObjectContainer : public PluginInterface, public ModuleChild {
+public:
+  /// Construct with a parent module, offset, and header data.
+  ///
+  /// Object files belong to modules and a valid module must be supplied upon
+  /// construction. The at an offset within a file for objects that contain
+  /// more than one architecture or object.
+  ObjectContainer(const lldb::ModuleSP &module_sp, const FileSpec *file,
+                  lldb::offset_t file_offset, lldb::offset_t length,
+                  lldb::DataBufferSP &data_sp, lldb::offset_t data_offset)
+      : ModuleChild(module_sp),
+        m_file(), // This file can be different than the module's file spec
+        m_offset(file_offset), m_length(length), m_data() {
+    if (file)
+      m_file = *file;
+    if (data_sp)
+      m_data.SetData(data_sp, data_offset, length);
+  }
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class is designed to be inherited
+  /// from by the plug-in instance.
+  ~ObjectContainer() override = default;
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the current contents of this object to the
+  /// supplied stream \a s. The dumping should include the section list if it
+  /// has been parsed, and the symbol table if it has been parsed.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  virtual void Dump(Stream *s) const = 0;
+
+  /// Gets the architecture given an index.
+  ///
+  /// Copies the architecture specification for index \a idx.
+  ///
+  /// \param[in] idx
+  ///     The architecture index to extract.
+  ///
+  /// \param[out] arch
+  ///     A architecture object that will be filled in if \a idx is a
+  ///     architecture valid index.
+  ///
+  /// \return
+  ///     Returns \b true if \a idx is valid and \a arch has been
+  ///     filled in, \b false otherwise.
+  ///
+  /// \see ObjectContainer::GetNumArchitectures() const
+  virtual bool GetArchitectureAtIndex(uint32_t idx, ArchSpec &arch) const {
+    return false;
+  }
+
+  /// Returns the offset into a file at which this object resides.
+  ///
+  /// Some files contain many object files, and this function allows access to
+  /// an object's offset within the file.
+  ///
+  /// \return
+  ///     The offset in bytes into the file. Defaults to zero for
+  ///     simple object files that a represented by an entire file.
+  virtual lldb::addr_t GetOffset() const { return m_offset; }
+
+  virtual lldb::addr_t GetByteSize() const { return m_length; }
+
+  /// Get the number of objects within this object file (archives).
+  ///
+  /// \return
+  ///     Zero for object files that are not archives, or the number
+  ///     of objects contained in the archive.
+  virtual size_t GetNumObjects() const { return 0; }
+
+  /// Get the number of architectures in this object file.
+  ///
+  /// The default implementation returns 1 as for object files that contain a
+  /// single architecture. ObjectContainer instances that contain more than
+  /// one architecture should override this function and return an appropriate
+  /// value.
+  ///
+  /// \return
+  ///     The number of architectures contained in this object file.
+  virtual size_t GetNumArchitectures() const { return 0; }
+
+  /// Attempts to parse the object header.
+  ///
+  /// This function is used as a test to see if a given plug-in instance can
+  /// parse the header data already contained in ObjectContainer::m_data. If
+  /// an object file parser does not recognize that magic bytes in a header,
+  /// false should be returned and the next plug-in can attempt to parse an
+  /// object file.
+  ///
+  /// \return
+  ///     Returns \b true if the header was parsed successfully, \b
+  ///     false otherwise.
+  virtual bool ParseHeader() = 0;
+
+  /// Selects an architecture in an object file.
+  ///
+  /// Object files that contain a single architecture should verify that the
+  /// specified \a arch matches the architecture in in object file and return
+  /// \b true or \b false accordingly.
+  ///
+  /// Object files that contain more than one architecture should attempt to
+  /// select that architecture, and if successful, clear out any previous
+  /// state from any previously selected architecture and prepare to return
+  /// information for the new architecture.
+  ///
+  /// \return
+  ///     Returns a pointer to the object file of the requested \a
+  ///     arch and optional \a name. Returns nullptr of no such object
+  ///     file exists in the container.
+  virtual lldb::ObjectFileSP GetObjectFile(const FileSpec *file) = 0;
+
+  virtual bool ObjectAtIndexIsContainer(uint32_t object_idx) { return false; }
+
+  virtual ObjectFile *GetObjectFileAtIndex(uint32_t object_idx) {
+    return nullptr;
+  }
+
+  virtual ObjectContainer *GetObjectContainerAtIndex(uint32_t object_idx) {
+    return nullptr;
+  }
+
+  virtual const char *GetObjectNameAtIndex(uint32_t object_idx) const {
+    return nullptr;
+  }
+
+protected:
+  // Member variables.
+  FileSpec m_file; ///< The file that represents this container objects (which
+                   ///can be different from the module's file).
+  lldb::addr_t
+      m_offset; ///< The offset in bytes into the file, or the address in memory
+  lldb::addr_t m_length; ///< The size in bytes if known (can be zero).
+  DataExtractor
+      m_data; ///< The data for this object file so things can be parsed lazily.
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ObjectContainer);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ObjectContainer_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/ObjectFile.h b/linux-x64/clang/include/lldb/Symbol/ObjectFile.h
new file mode 100644
index 0000000..84683e3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/ObjectFile.h
@@ -0,0 +1,713 @@
+//===-- ObjectFile.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ObjectFile_h_
+#define liblldb_ObjectFile_h_
+
+#include "lldb/Core/FileSpecList.h"
+#include "lldb/Core/ModuleChild.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Symbol/Symtab.h"
+#include "lldb/Symbol/UnwindTable.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/Endian.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/UUID.h"
+#include "lldb/lldb-private.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+class ObjectFileJITDelegate {
+public:
+  ObjectFileJITDelegate() {}
+
+  virtual ~ObjectFileJITDelegate() {}
+
+  virtual lldb::ByteOrder GetByteOrder() const = 0;
+
+  virtual uint32_t GetAddressByteSize() const = 0;
+
+  virtual void PopulateSymtab(lldb_private::ObjectFile *obj_file,
+                              lldb_private::Symtab &symtab) = 0;
+
+  virtual void PopulateSectionList(lldb_private::ObjectFile *obj_file,
+                                   lldb_private::SectionList &section_list) = 0;
+
+  virtual ArchSpec GetArchitecture() = 0;
+};
+
+/// \class ObjectFile ObjectFile.h "lldb/Symbol/ObjectFile.h"
+/// A plug-in interface definition class for object file parsers.
+///
+/// Object files belong to Module objects and know how to extract information
+/// from executable, shared library, and object (.o) files used by operating
+/// system runtime. The symbol table and section list for an object file.
+///
+/// Object files can be represented by the entire file, or by part of a file.
+/// An example of a partial file ObjectFile is one that contains information
+/// for one of multiple architectures in the same file.
+///
+/// Once an architecture is selected the object file information can be
+/// extracted from this abstract class.
+class ObjectFile : public std::enable_shared_from_this<ObjectFile>,
+                   public PluginInterface,
+                   public ModuleChild {
+  friend class lldb_private::Module;
+
+public:
+  enum Type {
+    eTypeInvalid = 0,
+    eTypeCoreFile,      /// A core file that has a checkpoint of a program's
+                        /// execution state
+    eTypeExecutable,    /// A normal executable
+    eTypeDebugInfo,     /// An object file that contains only debug information
+    eTypeDynamicLinker, /// The platform's dynamic linker executable
+    eTypeObjectFile,    /// An intermediate object file
+    eTypeSharedLibrary, /// A shared library that can be used during execution
+    eTypeStubLibrary, /// A library that can be linked against but not used for
+                      /// execution
+    eTypeJIT, /// JIT code that has symbols, sections and possibly debug info
+    eTypeUnknown
+  };
+
+  enum Strata {
+    eStrataInvalid = 0,
+    eStrataUnknown,
+    eStrataUser,
+    eStrataKernel,
+    eStrataRawImage,
+    eStrataJIT
+  };
+
+  struct LoadableData {
+    lldb::addr_t Dest;
+    llvm::ArrayRef<uint8_t> Contents;
+  };
+
+  /// Construct with a parent module, offset, and header data.
+  ///
+  /// Object files belong to modules and a valid module must be supplied upon
+  /// construction. The at an offset within a file for objects that contain
+  /// more than one architecture or object.
+  ObjectFile(const lldb::ModuleSP &module_sp, const FileSpec *file_spec_ptr,
+             lldb::offset_t file_offset, lldb::offset_t length,
+             const lldb::DataBufferSP &data_sp, lldb::offset_t data_offset);
+
+  ObjectFile(const lldb::ModuleSP &module_sp, const lldb::ProcessSP &process_sp,
+             lldb::addr_t header_addr, lldb::DataBufferSP &data_sp);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class is designed to be inherited
+  /// from by the plug-in instance.
+  ~ObjectFile() override;
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the current contents of this object to the
+  /// supplied stream \a s. The dumping should include the section list if it
+  /// has been parsed, and the symbol table if it has been parsed.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  virtual void Dump(Stream *s) = 0;
+
+  /// Find a ObjectFile plug-in that can parse \a file_spec.
+  ///
+  /// Scans all loaded plug-in interfaces that implement versions of the
+  /// ObjectFile plug-in interface and returns the first instance that can
+  /// parse the file.
+  ///
+  /// \param[in] module
+  ///     The parent module that owns this object file.
+  ///
+  /// \param[in] file_spec
+  ///     A file specification that indicates which file to use as the
+  ///     object file.
+  ///
+  /// \param[in] file_offset
+  ///     The offset into the file at which to start parsing the
+  ///     object. This is for files that contain multiple
+  ///     architectures or objects.
+  ///
+  /// \param[in] file_size
+  ///     The size of the current object file if it can be determined
+  ///     or if it is known. This can be zero.
+  ///
+  /// \see ObjectFile::ParseHeader()
+  static lldb::ObjectFileSP
+  FindPlugin(const lldb::ModuleSP &module_sp, const FileSpec *file_spec,
+             lldb::offset_t file_offset, lldb::offset_t file_size,
+             lldb::DataBufferSP &data_sp, lldb::offset_t &data_offset);
+
+  /// Find a ObjectFile plug-in that can parse a file in memory.
+  ///
+  /// Scans all loaded plug-in interfaces that implement versions of the
+  /// ObjectFile plug-in interface and returns the first instance that can
+  /// parse the file.
+  ///
+  /// \param[in] module
+  ///     The parent module that owns this object file.
+  ///
+  /// \param[in] process_sp
+  ///     A shared pointer to the process whose memory space contains
+  ///     an object file. This will be stored as a std::weak_ptr.
+  ///
+  /// \param[in] header_addr
+  ///     The address of the header for the object file in memory.
+  static lldb::ObjectFileSP FindPlugin(const lldb::ModuleSP &module_sp,
+                                       const lldb::ProcessSP &process_sp,
+                                       lldb::addr_t header_addr,
+                                       lldb::DataBufferSP &file_data_sp);
+
+  static size_t GetModuleSpecifications(const FileSpec &file,
+                                        lldb::offset_t file_offset,
+                                        lldb::offset_t file_size,
+                                        ModuleSpecList &specs);
+
+  static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,
+                                        lldb::DataBufferSP &data_sp,
+                                        lldb::offset_t data_offset,
+                                        lldb::offset_t file_offset,
+                                        lldb::offset_t file_size,
+                                        lldb_private::ModuleSpecList &specs);
+  /// Split a path into a file path with object name.
+  ///
+  /// For paths like "/tmp/foo.a(bar.o)" we often need to split a path up into
+  /// the actual path name and into the object name so we can make a valid
+  /// object file from it.
+  ///
+  /// \param[in] path_with_object
+  ///     A path that might contain an archive path with a .o file
+  ///     specified in parens in the basename of the path.
+  ///
+  /// \param[out] archive_file
+  ///     If \b true is returned, \a file_spec will be filled in with
+  ///     the path to the archive.
+  ///
+  /// \param[out] archive_object
+  ///     If \b true is returned, \a object will be filled in with
+  ///     the name of the object inside the archive.
+  ///
+  /// \return
+  ///     \b true if the path matches the pattern of archive + object
+  ///     and \a archive_file and \a archive_object are modified,
+  ///     \b false otherwise and \a archive_file and \a archive_object
+  ///     are guaranteed to be remain unchanged.
+  static bool SplitArchivePathWithObject(
+      const char *path_with_object, lldb_private::FileSpec &archive_file,
+      lldb_private::ConstString &archive_object, bool must_exist);
+
+  /// Gets the address size in bytes for the current object file.
+  ///
+  /// \return
+  ///     The size of an address in bytes for the currently selected
+  ///     architecture (and object for archives). Returns zero if no
+  ///     architecture or object has been selected.
+  virtual uint32_t GetAddressByteSize() const = 0;
+
+  /// Get the address type given a file address in an object file.
+  ///
+  /// Many binary file formats know what kinds This is primarily for ARM
+  /// binaries, though it can be applied to any executable file format that
+  /// supports different opcode types within the same binary. ARM binaries
+  /// support having both ARM and Thumb within the same executable container.
+  /// We need to be able to get \return
+  ///     The size of an address in bytes for the currently selected
+  ///     architecture (and object for archives). Returns zero if no
+  ///     architecture or object has been selected.
+  virtual AddressClass GetAddressClass(lldb::addr_t file_addr);
+
+  /// Extract the dependent modules from an object file.
+  ///
+  /// If an object file has information about which other images it depends on
+  /// (such as shared libraries), this function will provide the list. Since
+  /// many executables or shared libraries may depend on the same files,
+  /// FileSpecList::AppendIfUnique(const FileSpec &) should be used to make
+  /// sure any files that are added are not already in the list.
+  ///
+  /// \param[out] file_list
+  ///     A list of file specification objects that gets dependent
+  ///     files appended to.
+  ///
+  /// \return
+  ///     The number of new files that were appended to \a file_list.
+  ///
+  /// \see FileSpecList::AppendIfUnique(const FileSpec &)
+  virtual uint32_t GetDependentModules(FileSpecList &file_list) = 0;
+
+  /// Tells whether this object file is capable of being the main executable
+  /// for a process.
+  ///
+  /// \return
+  ///     \b true if it is, \b false otherwise.
+  virtual bool IsExecutable() const = 0;
+
+  /// Returns the offset into a file at which this object resides.
+  ///
+  /// Some files contain many object files, and this function allows access to
+  /// an object's offset within the file.
+  ///
+  /// \return
+  ///     The offset in bytes into the file. Defaults to zero for
+  ///     simple object files that a represented by an entire file.
+  virtual lldb::addr_t GetFileOffset() const { return m_file_offset; }
+
+  virtual lldb::addr_t GetByteSize() const { return m_length; }
+
+  /// Get accessor to the object file specification.
+  ///
+  /// \return
+  ///     The file specification object pointer if there is one, or
+  ///     NULL if this object is only from memory.
+  virtual FileSpec &GetFileSpec() { return m_file; }
+
+  /// Get const accessor to the object file specification.
+  ///
+  /// \return
+  ///     The const file specification object pointer if there is one,
+  ///     or NULL if this object is only from memory.
+  virtual const FileSpec &GetFileSpec() const { return m_file; }
+
+  /// Get the ArchSpec for this object file.
+  ///
+  /// \return
+  ///     The ArchSpec of this object file. In case of error, an invalid
+  ///     ArchSpec object is returned.
+  virtual ArchSpec GetArchitecture() = 0;
+
+  /// Gets the section list for the currently selected architecture (and
+  /// object for archives).
+  ///
+  /// Section list parsing can be deferred by ObjectFile instances until this
+  /// accessor is called the first time.
+  ///
+  /// \return
+  ///     The list of sections contained in this object file.
+  virtual SectionList *GetSectionList(bool update_module_section_list = true);
+
+  virtual void CreateSections(SectionList &unified_section_list) = 0;
+
+  /// Notify the ObjectFile that the file addresses in the Sections for this
+  /// module have been changed.
+  virtual void SectionFileAddressesChanged() {}
+
+  /// Gets the symbol table for the currently selected architecture (and
+  /// object for archives).
+  ///
+  /// Symbol table parsing can be deferred by ObjectFile instances until this
+  /// accessor is called the first time.
+  ///
+  /// \return
+  ///     The symbol table for this object file.
+  virtual Symtab *GetSymtab() = 0;
+
+  /// Perform relocations on the section if necessary.
+  ///
+  virtual void RelocateSection(lldb_private::Section *section);
+
+  /// Appends a Symbol for the specified so_addr to the symbol table.
+  ///
+  /// If verify_unique is false, the symbol table is not searched to determine
+  /// if a Symbol found at this address has already been added to the symbol
+  /// table.  When verify_unique is true, this method resolves the Symbol as
+  /// the first match in the SymbolTable and appends a Symbol only if
+  /// required/found.
+  ///
+  /// \return
+  ///     The resolved symbol or nullptr.  Returns nullptr if a
+  ///     a Symbol could not be found for the specified so_addr.
+  virtual Symbol *ResolveSymbolForAddress(const Address &so_addr,
+                                          bool verify_unique) {
+    // Typically overridden to lazily add stripped symbols recoverable from the
+    // exception handling unwind information (i.e. without parsing the entire
+    // eh_frame section.
+    //
+    // The availability of LC_FUNCTION_STARTS allows ObjectFileMachO to
+    // efficiently add stripped symbols when the symbol table is first
+    // constructed.  Poorer cousins are PECoff and ELF.
+    return nullptr;
+  }
+
+  /// Detect if this object file has been stripped of local symbols.
+  /// Detect if this object file has been stripped of local symbols.
+  ///
+  /// \return
+  ///     Return \b true if the object file has been stripped of local
+  ///     symbols.
+  virtual bool IsStripped() = 0;
+
+  /// Frees the symbol table.
+  ///
+  /// This function should only be used when an object file is
+  ///
+  /// \param[in] flags
+  ///     eSymtabFromUnifiedSectionList: Whether to clear symbol table
+  ///     for unified module section list, or object file.
+  ///
+  /// \return
+  ///     The symbol table for this object file.
+  virtual void ClearSymtab();
+
+  /// Gets the UUID for this object file.
+  ///
+  /// If the object file format contains a UUID, the value should be returned.
+  /// Else ObjectFile instances should return the MD5 checksum of all of the
+  /// bytes for the object file (or memory for memory based object files).
+  ///
+  /// \return
+  ///     The object file's UUID. In case of an error, an empty UUID is
+  ///     returned.
+  virtual UUID GetUUID() = 0;
+
+  /// Gets the symbol file spec list for this object file.
+  ///
+  /// If the object file format contains a debug symbol file link, the values
+  /// will be returned in the FileSpecList.
+  ///
+  /// \return
+  ///     Returns filespeclist.
+  virtual lldb_private::FileSpecList GetDebugSymbolFilePaths() {
+    return FileSpecList();
+  }
+
+  /// Gets the file spec list of libraries re-exported by this object file.
+  ///
+  /// If the object file format has the notion of one library re-exporting the
+  /// symbols from another, the re-exported libraries will be returned in the
+  /// FileSpecList.
+  ///
+  /// \return
+  ///     Returns filespeclist.
+  virtual lldb_private::FileSpecList GetReExportedLibraries() {
+    return FileSpecList();
+  }
+
+  /// Sets the load address for an entire module, assuming a rigid slide of
+  /// sections, if possible in the implementation.
+  ///
+  /// \return
+  ///     Returns true iff any section's load address changed.
+  virtual bool SetLoadAddress(Target &target, lldb::addr_t value,
+                              bool value_is_offset) {
+    return false;
+  }
+
+  /// Gets whether endian swapping should occur when extracting data from this
+  /// object file.
+  ///
+  /// \return
+  ///     Returns \b true if endian swapping is needed, \b false
+  ///     otherwise.
+  virtual lldb::ByteOrder GetByteOrder() const = 0;
+
+  /// Attempts to parse the object header.
+  ///
+  /// This function is used as a test to see if a given plug-in instance can
+  /// parse the header data already contained in ObjectFile::m_data. If an
+  /// object file parser does not recognize that magic bytes in a header,
+  /// false should be returned and the next plug-in can attempt to parse an
+  /// object file.
+  ///
+  /// \return
+  ///     Returns \b true if the header was parsed successfully, \b
+  ///     false otherwise.
+  virtual bool ParseHeader() = 0;
+
+  /// Returns if the function bounds for symbols in this symbol file are
+  /// likely accurate.
+  ///
+  /// The unwinder can emulate the instructions of functions to understand
+  /// prologue/epilogue code sequences, where registers are spilled on the
+  /// stack, etc.  This feature relies on having the correct start addresses
+  /// of all functions.  If the ObjectFile has a way to tell that symbols have
+  /// been stripped and there's no way to reconstruct start addresses (e.g.
+  /// LC_FUNCTION_STARTS on Mach-O, or eh_frame unwind info), the ObjectFile
+  /// should indicate that assembly emulation should not be used for this
+  /// module.
+  ///
+  /// It is uncommon for this to return false.  An ObjectFile needs to be sure
+  /// that symbol start addresses are unavailable before false is returned.
+  /// If it is unclear, this should return true.
+  ///
+  /// \return
+  ///     Returns true if assembly emulation should be used for this
+  ///     module.
+  ///     Only returns false if the ObjectFile is sure that symbol
+  ///     addresses are insufficient for accurate assembly emulation.
+  virtual bool AllowAssemblyEmulationUnwindPlans() { return true; }
+
+  /// Similar to Process::GetImageInfoAddress().
+  ///
+  /// Some platforms embed auxiliary structures useful to debuggers in the
+  /// address space of the inferior process.  This method returns the address
+  /// of such a structure if the information can be resolved via entries in
+  /// the object file.  ELF, for example, provides a means to hook into the
+  /// runtime linker so that a debugger may monitor the loading and unloading
+  /// of shared libraries.
+  ///
+  /// \return
+  ///     The address of any auxiliary tables, or an invalid address if this
+  ///     object file format does not support or contain such information.
+  virtual lldb_private::Address GetImageInfoAddress(Target *target) {
+    return Address();
+  }
+
+  /// Returns the address of the Entry Point in this object file - if the
+  /// object file doesn't have an entry point (because it is not an executable
+  /// file) then an invalid address is returned.
+  ///
+  /// \return
+  ///     Returns the entry address for this module.
+  virtual lldb_private::Address GetEntryPointAddress() { return Address(); }
+
+  /// Returns base address of this object file.
+  ///
+  /// This also sometimes referred to as the "preferred load address" or the
+  /// "image base address". Addresses within object files are often expressed
+  /// relative to this base. If this address corresponds to a specific section
+  /// (usually the first byte of the first section) then the returned address
+  /// will have this section set. Otherwise, the address will just have the
+  /// offset member filled in, indicating that this represents a file address.
+  virtual lldb_private::Address GetBaseAddress() {
+    return Address(m_memory_addr);
+  }
+
+  virtual uint32_t GetNumThreadContexts() { return 0; }
+
+  /// Some object files may have an identifier string embedded in them, e.g.
+  /// in a Mach-O core file using the LC_IDENT load command (which  is
+  /// obsolete, but can still be found in some old files)
+  ///
+  /// \return
+  ///     Returns the identifier string if one exists, else an empty
+  ///     string.
+  virtual std::string GetIdentifierString () { 
+      return std::string(); 
+  }
+
+  /// When the ObjectFile is a core file, lldb needs to locate the "binary" in
+  /// the core file.  lldb can iterate over the pages looking for a valid
+  /// binary, but some core files may have metadata  describing where the main
+  /// binary is exactly which removes ambiguity when there are multiple
+  /// binaries present in the captured memory pages.
+  ///
+  /// \param[out] address
+  ///   If the address of the binary is specified, this will be set.
+  ///   This is an address is the virtual address space of the core file
+  ///   memory segments; it is not an offset into the object file.
+  ///   If no address is available, will be set to LLDB_INVALID_ADDRESS.
+  ///
+  /// \param[out] uuid
+  ///   If the uuid of the binary is specified, this will be set.
+  ///   If no UUID is available, will be cleared.
+  ///
+  /// \return
+  ///   Returns true if either address or uuid has been set.
+  virtual bool GetCorefileMainBinaryInfo (lldb::addr_t &address, UUID &uuid) {
+      address = LLDB_INVALID_ADDRESS;
+      uuid.Clear();
+      return false;
+  }
+
+  virtual lldb::RegisterContextSP
+  GetThreadContextAtIndex(uint32_t idx, lldb_private::Thread &thread) {
+    return lldb::RegisterContextSP();
+  }
+
+  /// The object file should be able to calculate its type by looking at its
+  /// file header and possibly the sections or other data in the object file.
+  /// The file type is used in the debugger to help select the correct plug-
+  /// ins for the job at hand, so this is important to get right. If any
+  /// eTypeXXX definitions do not match up with the type of file you are
+  /// loading, please feel free to add a new enumeration value.
+  ///
+  /// \return
+  ///     The calculated file type for the current object file.
+  virtual Type CalculateType() = 0;
+
+  /// In cases where the type can't be calculated (elf files), this routine
+  /// allows someone to explicitly set it. As an example, SymbolVendorELF uses
+  /// this routine to set eTypeDebugInfo when loading debug link files.
+  virtual void SetType(Type type) { m_type = type; }
+
+  /// The object file should be able to calculate the strata of the object
+  /// file.
+  ///
+  /// Many object files for platforms might be for either user space debugging
+  /// or for kernel debugging. If your object file subclass can figure this
+  /// out, it will help with debugger plug-in selection when it comes time to
+  /// debug.
+  ///
+  /// \return
+  ///     The calculated object file strata for the current object
+  ///     file.
+  virtual Strata CalculateStrata() = 0;
+
+  /// Get the object file version numbers.
+  ///
+  /// Many object files have a set of version numbers that describe the
+  /// version of the executable or shared library. Typically there are major,
+  /// minor and build, but there may be more. This function will extract the
+  /// versions from object files if they are available.
+  ///
+  /// \return
+  ///     This function returns extracted version numbers as a
+  ///     llvm::VersionTuple. In case of error an empty VersionTuple is
+  ///     returned.
+  virtual llvm::VersionTuple GetVersion() { return llvm::VersionTuple(); }
+
+  /// Get the minimum OS version this object file can run on.
+  ///
+  /// Some object files have information that specifies the minimum OS version
+  /// that they can be used on.
+  ///
+  /// \return
+  ///     This function returns extracted version numbers as a
+  ///     llvm::VersionTuple. In case of error an empty VersionTuple is
+  ///     returned.
+  virtual llvm::VersionTuple GetMinimumOSVersion() {
+    return llvm::VersionTuple();
+  }
+
+  /// Get the SDK OS version this object file was built with.
+  ///
+  /// \return
+  ///     This function returns extracted version numbers as a
+  ///     llvm::VersionTuple. In case of error an empty VersionTuple is
+  ///     returned.
+  virtual llvm::VersionTuple GetSDKVersion() { return llvm::VersionTuple(); }
+
+  /// Return true if this file is a dynamic link editor (dyld)
+  ///
+  /// Often times dyld has symbols that mirror symbols in libc and other
+  /// shared libraries (like "malloc" and "free") and the user does _not_ want
+  /// to stop in these shared libraries by default. We can ask the ObjectFile
+  /// if it is such a file and should be avoided for things like settings
+  /// breakpoints and doing function lookups for expressions.
+  virtual bool GetIsDynamicLinkEditor() { return false; }
+
+  // Member Functions
+  Type GetType() {
+    if (m_type == eTypeInvalid)
+      m_type = CalculateType();
+    return m_type;
+  }
+
+  Strata GetStrata() {
+    if (m_strata == eStrataInvalid)
+      m_strata = CalculateStrata();
+    return m_strata;
+  }
+
+  // When an object file is in memory, subclasses should try and lock the
+  // process weak pointer. If the process weak pointer produces a valid
+  // ProcessSP, then subclasses can call this function to read memory.
+  static lldb::DataBufferSP ReadMemory(const lldb::ProcessSP &process_sp,
+                                       lldb::addr_t addr, size_t byte_size);
+
+  // This function returns raw file contents. Do not use it if you want
+  // transparent decompression of section contents.
+  size_t GetData(lldb::offset_t offset, size_t length,
+                 DataExtractor &data) const;
+
+  // This function returns raw file contents. Do not use it if you want
+  // transparent decompression of section contents.
+  size_t CopyData(lldb::offset_t offset, size_t length, void *dst) const;
+
+  // This function will transparently decompress section data if the section if
+  // compressed.
+  virtual size_t ReadSectionData(Section *section,
+                                 lldb::offset_t section_offset, void *dst,
+                                 size_t dst_len);
+
+  // This function will transparently decompress section data if the section if
+  // compressed. Note that for compressed section the resulting data size may
+  // be larger than what Section::GetFileSize reports.
+  virtual size_t ReadSectionData(Section *section,
+                                 DataExtractor &section_data);
+
+  bool IsInMemory() const { return m_memory_addr != LLDB_INVALID_ADDRESS; }
+
+  // Strip linker annotations (such as @@VERSION) from symbol names.
+  virtual llvm::StringRef
+  StripLinkerSymbolAnnotations(llvm::StringRef symbol_name) const {
+    return symbol_name;
+  }
+
+  static lldb::SymbolType GetSymbolTypeFromName(
+      llvm::StringRef name,
+      lldb::SymbolType symbol_type_hint = lldb::eSymbolTypeUndefined);
+
+  /// Loads this objfile to memory.
+  ///
+  /// Loads the bits needed to create an executable image to the memory. It is
+  /// useful with bare-metal targets where target does not have the ability to
+  /// start a process itself.
+  ///
+  /// \param[in] target
+  ///     Target where to load.
+  ///
+  /// \return
+  virtual std::vector<LoadableData> GetLoadableData(Target &target);
+
+protected:
+  // Member variables.
+  FileSpec m_file;
+  Type m_type;
+  Strata m_strata;
+  lldb::addr_t m_file_offset; ///< The offset in bytes into the file, or the
+                              ///address in memory
+  lldb::addr_t m_length; ///< The length of this object file if it is known (can
+                         ///be zero if length is unknown or can't be
+                         ///determined).
+  DataExtractor
+      m_data; ///< The data for this object file so things can be parsed lazily.
+  lldb::ProcessWP m_process_wp;
+  const lldb::addr_t m_memory_addr;
+  std::unique_ptr<lldb_private::SectionList> m_sections_up;
+  std::unique_ptr<lldb_private::Symtab> m_symtab_up;
+  uint32_t m_synthetic_symbol_idx;
+
+  /// Sets the architecture for a module.  At present the architecture can
+  /// only be set if it is invalid.  It is not allowed to switch from one
+  /// concrete architecture to another.
+  ///
+  /// \param[in] new_arch
+  ///     The architecture this module will be set to.
+  ///
+  /// \return
+  ///     Returns \b true if the architecture was changed, \b
+  ///     false otherwise.
+  bool SetModulesArchitecture(const ArchSpec &new_arch);
+
+  ConstString GetNextSyntheticSymbolName();
+
+  static lldb::DataBufferSP MapFileData(const FileSpec &file, uint64_t Size,
+                                        uint64_t Offset);
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ObjectFile);
+};
+
+} // namespace lldb_private
+
+namespace llvm {
+template <> struct format_provider<lldb_private::ObjectFile::Type> {
+  static void format(const lldb_private::ObjectFile::Type &type,
+                     raw_ostream &OS, StringRef Style);
+};
+
+template <> struct format_provider<lldb_private::ObjectFile::Strata> {
+  static void format(const lldb_private::ObjectFile::Strata &strata,
+                     raw_ostream &OS, StringRef Style);
+};
+} // namespace llvm
+
+#endif // liblldb_ObjectFile_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/PostfixExpression.h b/linux-x64/clang/include/lldb/Symbol/PostfixExpression.h
new file mode 100644
index 0000000..e3a8587
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/PostfixExpression.h
@@ -0,0 +1,226 @@
+//===-- PostfixExpression.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file implements support for postfix expressions found in several symbol
+//  file formats, and their conversion to DWARF.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SYMBOL_POSTFIXEXPRESSION_H
+#define LLDB_SYMBOL_POSTFIXEXPRESSION_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/Casting.h"
+
+namespace lldb_private {
+
+class Stream;
+
+namespace postfix {
+
+/// The base class for all nodes in the parsed postfix tree.
+class Node {
+public:
+  enum Kind {
+    BinaryOp,
+    InitialValue,
+    Integer,
+    Register,
+    Symbol,
+    UnaryOp,
+  };
+
+protected:
+  Node(Kind kind) : m_kind(kind) {}
+
+public:
+  Kind GetKind() const { return m_kind; }
+
+private:
+  Kind m_kind;
+};
+
+/// A node representing a binary expression.
+class BinaryOpNode : public Node {
+public:
+  enum OpType {
+    Align, // alignDown(a, b)
+    Minus, // a - b
+    Plus,  // a + b
+  };
+
+  BinaryOpNode(OpType op_type, Node &left, Node &right)
+      : Node(BinaryOp), m_op_type(op_type), m_left(&left), m_right(&right) {}
+
+  OpType GetOpType() const { return m_op_type; }
+
+  const Node *Left() const { return m_left; }
+  Node *&Left() { return m_left; }
+
+  const Node *Right() const { return m_right; }
+  Node *&Right() { return m_right; }
+
+  static bool classof(const Node *node) { return node->GetKind() == BinaryOp; }
+
+private:
+  OpType m_op_type;
+  Node *m_left;
+  Node *m_right;
+};
+
+/// A node representing the canonical frame address.
+class InitialValueNode: public Node {
+public:
+  InitialValueNode() : Node(InitialValue) {}
+
+  static bool classof(const Node *node) {
+    return node->GetKind() == InitialValue;
+  }
+};
+
+/// A node representing an integer literal.
+class IntegerNode : public Node {
+public:
+  IntegerNode(int64_t value) : Node(Integer), m_value(value) {}
+
+  int64_t GetValue() const { return m_value; }
+
+  static bool classof(const Node *node) { return node->GetKind() == Integer; }
+
+private:
+  int64_t m_value;
+};
+
+/// A node representing the value of a register with the given register number.
+/// The register kind (RegisterKind enum) used for the specifying the register
+/// number is implicit and assumed to be the same for all Register nodes in a
+/// given tree.
+class RegisterNode : public Node {
+public:
+  RegisterNode(uint32_t reg_num) : Node(Register), m_reg_num(reg_num) {}
+
+  uint32_t GetRegNum() const { return m_reg_num; }
+
+  static bool classof(const Node *node) { return node->GetKind() == Register; }
+
+private:
+  uint32_t m_reg_num;
+};
+
+/// A node representing a symbolic reference to a named entity. This may be a
+/// register, which hasn't yet been resolved to a RegisterNode.
+class SymbolNode : public Node {
+public:
+  SymbolNode(llvm::StringRef name) : Node(Symbol), m_name(name) {}
+
+  llvm::StringRef GetName() const { return m_name; }
+
+  static bool classof(const Node *node) { return node->GetKind() == Symbol; }
+
+private:
+  llvm::StringRef m_name;
+};
+
+/// A node representing a unary operation.
+class UnaryOpNode : public Node {
+public:
+  enum OpType {
+    Deref, // *a
+  };
+
+  UnaryOpNode(OpType op_type, Node &operand)
+      : Node(UnaryOp), m_op_type(op_type), m_operand(&operand) {}
+
+  OpType GetOpType() const { return m_op_type; }
+
+  const Node *Operand() const { return m_operand; }
+  Node *&Operand() { return m_operand; }
+
+  static bool classof(const Node *node) { return node->GetKind() == UnaryOp; }
+
+private:
+  OpType m_op_type;
+  Node *m_operand;
+};
+
+/// A template class implementing a visitor pattern, but with a couple of
+/// twists:
+/// - It uses type switch instead of virtual double dispatch. This allows the
+//    node classes to be vtable-free and trivially destructible.
+/// - The Visit functions get an extra Node *& parameter, which refers to the
+///   child pointer of the parent of the node we are currently visiting. This
+///   allows mutating algorithms, which replace the currently visited node with
+///   a different one.
+/// - The class is templatized on the return type of the Visit functions, which
+///   means it's possible to return values from them.
+template <typename ResultT = void> class Visitor {
+protected:
+  virtual ~Visitor() = default;
+
+  virtual ResultT Visit(BinaryOpNode &binary, Node *&ref) = 0;
+  virtual ResultT Visit(InitialValueNode &val, Node *&ref) = 0;
+  virtual ResultT Visit(IntegerNode &integer, Node *&) = 0;
+  virtual ResultT Visit(RegisterNode &reg, Node *&) = 0;
+  virtual ResultT Visit(SymbolNode &symbol, Node *&ref) = 0;
+  virtual ResultT Visit(UnaryOpNode &unary, Node *&ref) = 0;
+
+  /// Invoke the correct Visit function based on the dynamic type of the given
+  /// node.
+  ResultT Dispatch(Node *&node) {
+    switch (node->GetKind()) {
+    case Node::BinaryOp:
+      return Visit(llvm::cast<BinaryOpNode>(*node), node);
+    case Node::InitialValue:
+      return Visit(llvm::cast<InitialValueNode>(*node), node);
+    case Node::Integer:
+      return Visit(llvm::cast<IntegerNode>(*node), node);
+    case Node::Register:
+      return Visit(llvm::cast<RegisterNode>(*node), node);
+    case Node::Symbol:
+      return Visit(llvm::cast<SymbolNode>(*node), node);
+    case Node::UnaryOp:
+      return Visit(llvm::cast<UnaryOpNode>(*node), node);
+    }
+    llvm_unreachable("Fully covered switch!");
+  }
+};
+
+/// A utility function for "resolving" SymbolNodes. It traverses a tree and
+/// calls the callback function for all SymbolNodes it encountered. The
+/// replacement function should return the node it wished to replace the current
+/// SymbolNode with (this can also be the original node), or nullptr in case of
+/// an error. The nodes returned by the callback are inspected and replaced
+/// recursively, *except* for the case when the function returns the exact same
+/// node as the input one. It returns true if all SymbolNodes were replaced
+/// successfully.
+bool ResolveSymbols(Node *&node,
+                    llvm::function_ref<Node *(SymbolNode &symbol)> replacer);
+
+template <typename T, typename... Args>
+inline T *MakeNode(llvm::BumpPtrAllocator &alloc, Args &&... args) {
+  static_assert(std::is_trivially_destructible<T>::value,
+                "This object will not be destroyed!");
+  return new (alloc.Allocate<T>()) T(std::forward<Args>(args)...);
+}
+
+/// Parse the given postfix expression. The parsed nodes are placed into the
+/// provided allocator.
+Node *Parse(llvm::StringRef expr, llvm::BumpPtrAllocator &alloc);
+
+/// Serialize the given expression tree as DWARF. The result is written into the
+/// given stream. The AST should not contain any SymbolNodes. If the expression
+/// contains InitialValueNodes, the generated expression will assume that their
+/// value will be provided as the top value of the initial evaluation stack (as
+/// is the case with the CFA value in register eh_unwind rules).
+void ToDWARF(Node &node, Stream &stream);
+
+} // namespace postfix
+} // namespace lldb_private
+
+#endif // LLDB_SYMBOL_POSTFIXEXPRESSION_H
diff --git a/linux-x64/clang/include/lldb/Symbol/SourceModule.h b/linux-x64/clang/include/lldb/Symbol/SourceModule.h
new file mode 100644
index 0000000..b12ff01
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/SourceModule.h
@@ -0,0 +1,27 @@
+//===-- SourceModule.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SourceModule_h_
+#define liblldb_SourceModule_h_
+
+#include "lldb/Utility/ConstString.h"
+#include <vector>
+
+namespace lldb_private {
+
+/// Information needed to import a source-language module.
+struct SourceModule {
+  /// Something like "Module.Submodule".
+  std::vector<ConstString> path;
+  ConstString search_path;
+  ConstString sysroot;
+};
+
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Symbol/Symbol.h b/linux-x64/clang/include/lldb/Symbol/Symbol.h
new file mode 100644
index 0000000..1cbc2f5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/Symbol.h
@@ -0,0 +1,269 @@
+//===-- Symbol.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Symbol_h_
+#define liblldb_Symbol_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Core/Mangled.h"
+#include "lldb/Symbol/SymbolContextScope.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class Symbol : public SymbolContextScope {
+public:
+  // ObjectFile readers can classify their symbol table entries and searches
+  // can be made on specific types where the symbol values will have
+  // drastically different meanings and sorting requirements.
+  Symbol();
+
+  Symbol(uint32_t symID, const char *name, bool name_is_mangled,
+         lldb::SymbolType type, bool external, bool is_debug,
+         bool is_trampoline, bool is_artificial,
+         const lldb::SectionSP &section_sp, lldb::addr_t value,
+         lldb::addr_t size, bool size_is_valid,
+         bool contains_linker_annotations, uint32_t flags);
+
+  Symbol(uint32_t symID, const Mangled &mangled, lldb::SymbolType type,
+         bool external, bool is_debug, bool is_trampoline, bool is_artificial,
+         const AddressRange &range, bool size_is_valid,
+         bool contains_linker_annotations, uint32_t flags);
+
+  Symbol(const Symbol &rhs);
+
+  const Symbol &operator=(const Symbol &rhs);
+
+  void Clear();
+
+  bool Compare(ConstString name, lldb::SymbolType type) const;
+
+  void Dump(Stream *s, Target *target, uint32_t index) const;
+
+  bool ValueIsAddress() const;
+
+  // The GetAddressRef() accessor functions should only be called if you
+  // previously call ValueIsAddress() otherwise you might get an reference to
+  // an Address object that contains an constant integer value in
+  // m_addr_range.m_base_addr.m_offset which could be incorrectly used to
+  // represent an absolute address since it has no section.
+  Address &GetAddressRef() { return m_addr_range.GetBaseAddress(); }
+
+  const Address &GetAddressRef() const { return m_addr_range.GetBaseAddress(); }
+
+  // Makes sure the symbol's value is an address and returns the file address.
+  // Returns LLDB_INVALID_ADDRESS if the symbol's value isn't an address.
+  lldb::addr_t GetFileAddress() const;
+
+  // Makes sure the symbol's value is an address and gets the load address
+  // using \a target if it is. Returns LLDB_INVALID_ADDRESS if the symbol's
+  // value isn't an address or if the section isn't loaded in \a target.
+  lldb::addr_t GetLoadAddress(Target *target) const;
+
+  // Access the address value. Do NOT hand out the AddressRange as an object as
+  // the byte size of the address range may not be filled in and it should be
+  // accessed via GetByteSize().
+  Address GetAddress() const {
+    // Make sure the our value is an address before we hand a copy out. We use
+    // the Address inside m_addr_range to contain the value for symbols that
+    // are not address based symbols so we are using it for more than just
+    // addresses. For example undefined symbols on MacOSX have a nlist.n_value
+    // of 0 (zero) and this will get placed into
+    // m_addr_range.m_base_addr.m_offset and it will have no section. So in the
+    // GetAddress() accessor, we need to hand out an invalid address if the
+    // symbol's value isn't an address.
+    if (ValueIsAddress())
+      return m_addr_range.GetBaseAddress();
+    else
+      return Address();
+  }
+
+  // When a symbol's value isn't an address, we need to access the raw value.
+  // This function will ensure this symbol's value isn't an address and return
+  // the integer value if this checks out, otherwise it will return
+  // "fail_value" if the symbol is an address value.
+  uint64_t GetIntegerValue(uint64_t fail_value = 0) const {
+    if (ValueIsAddress()) {
+      // This symbol's value is an address. Use Symbol::GetAddress() to get the
+      // address.
+      return fail_value;
+    } else {
+      // The value is stored in the base address' offset
+      return m_addr_range.GetBaseAddress().GetOffset();
+    }
+  }
+
+  lldb::addr_t ResolveCallableAddress(Target &target) const;
+
+  ConstString GetName() const;
+
+  ConstString GetNameNoArguments() const;
+
+  ConstString GetDisplayName() const;
+
+  uint32_t GetID() const { return m_uid; }
+
+  lldb::LanguageType GetLanguage() const {
+    // TODO: See if there is a way to determine the language for a symbol
+    // somehow, for now just return our best guess
+    return m_mangled.GuessLanguage();
+  }
+
+  void SetID(uint32_t uid) { m_uid = uid; }
+
+  Mangled &GetMangled() { return m_mangled; }
+
+  const Mangled &GetMangled() const { return m_mangled; }
+
+  ConstString GetReExportedSymbolName() const;
+
+  FileSpec GetReExportedSymbolSharedLibrary() const;
+
+  void SetReExportedSymbolName(ConstString name);
+
+  bool SetReExportedSymbolSharedLibrary(const FileSpec &fspec);
+
+  Symbol *ResolveReExportedSymbol(Target &target) const;
+
+  uint32_t GetSiblingIndex() const;
+
+  lldb::SymbolType GetType() const { return (lldb::SymbolType)m_type; }
+
+  void SetType(lldb::SymbolType type) { m_type = (lldb::SymbolType)type; }
+
+  const char *GetTypeAsString() const;
+
+  uint32_t GetFlags() const { return m_flags; }
+
+  void SetFlags(uint32_t flags) { m_flags = flags; }
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level,
+                      Target *target) const;
+
+  bool IsSynthetic() const { return m_is_synthetic; }
+
+  void SetIsSynthetic(bool b) { m_is_synthetic = b; }
+
+  bool GetSizeIsSynthesized() const { return m_size_is_synthesized; }
+
+  void SetSizeIsSynthesized(bool b) { m_size_is_synthesized = b; }
+
+  bool IsDebug() const { return m_is_debug; }
+
+  void SetDebug(bool b) { m_is_debug = b; }
+
+  bool IsExternal() const { return m_is_external; }
+
+  void SetExternal(bool b) { m_is_external = b; }
+
+  bool IsTrampoline() const;
+
+  bool IsIndirect() const;
+  
+  bool IsWeak() const { return m_is_weak; }
+  
+  void SetIsWeak (bool b) { m_is_weak = b; }
+
+  bool GetByteSizeIsValid() const { return m_size_is_valid; }
+
+  lldb::addr_t GetByteSize() const;
+
+  void SetByteSize(lldb::addr_t size) {
+    m_size_is_valid = size > 0;
+    m_addr_range.SetByteSize(size);
+  }
+
+  bool GetSizeIsSibling() const { return m_size_is_sibling; }
+
+  void SetSizeIsSibling(bool b) { m_size_is_sibling = b; }
+
+  // If m_type is "Code" or "Function" then this will return the prologue size
+  // in bytes, else it will return zero.
+  uint32_t GetPrologueByteSize();
+
+  bool GetDemangledNameIsSynthesized() const {
+    return m_demangled_is_synthesized;
+  }
+
+  void SetDemangledNameIsSynthesized(bool b) { m_demangled_is_synthesized = b; }
+
+  bool ContainsLinkerAnnotations() const {
+    return m_contains_linker_annotations;
+  }
+  void SetContainsLinkerAnnotations(bool b) {
+    m_contains_linker_annotations = b;
+  }
+  /// \copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
+  ///
+  /// \see SymbolContextScope
+  void CalculateSymbolContext(SymbolContext *sc) override;
+
+  lldb::ModuleSP CalculateSymbolContextModule() override;
+
+  Symbol *CalculateSymbolContextSymbol() override;
+
+  /// \copydoc SymbolContextScope::DumpSymbolContext(Stream*)
+  ///
+  /// \see SymbolContextScope
+  void DumpSymbolContext(Stream *s) override;
+
+  lldb::DisassemblerSP GetInstructions(const ExecutionContext &exe_ctx,
+                                       const char *flavor,
+                                       bool prefer_file_cache);
+
+  bool GetDisassembly(const ExecutionContext &exe_ctx, const char *flavor,
+                      bool prefer_file_cache, Stream &strm);
+
+  bool ContainsFileAddress(lldb::addr_t file_addr) const;
+
+protected:
+  // This is the internal guts of ResolveReExportedSymbol, it assumes
+  // reexport_name is not null, and that module_spec is valid.  We track the
+  // modules we've already seen to make sure we don't get caught in a cycle.
+
+  Symbol *ResolveReExportedSymbolInModuleSpec(
+      Target &target, ConstString &reexport_name,
+      lldb_private::ModuleSpec &module_spec,
+      lldb_private::ModuleList &seen_modules) const;
+
+  uint32_t m_uid;       // User ID (usually the original symbol table index)
+  uint16_t m_type_data; // data specific to m_type
+  uint16_t m_type_data_resolved : 1, // True if the data in m_type_data has
+                                     // already been calculated
+      m_is_synthetic : 1, // non-zero if this symbol is not actually in the
+                          // symbol table, but synthesized from other info in
+                          // the object file.
+      m_is_debug : 1,     // non-zero if this symbol is debug information in a
+                          // symbol
+      m_is_external : 1,  // non-zero if this symbol is globally visible
+      m_size_is_sibling : 1,     // m_size contains the index of this symbol's
+                                 // sibling
+      m_size_is_synthesized : 1, // non-zero if this symbol's size was
+                                 // calculated using a delta between this
+                                 // symbol and the next
+      m_size_is_valid : 1,
+      m_demangled_is_synthesized : 1, // The demangled name was created should
+                                      // not be used for expressions or other
+                                      // lookups
+      m_contains_linker_annotations : 1, // The symbol name contains linker
+                                         // annotations, which are optional when
+                                         // doing name lookups
+      m_is_weak : 1,
+      m_type : 6;            // Values from the lldb::SymbolType enum.
+  Mangled m_mangled;         // uniqued symbol name/mangled name pair
+  AddressRange m_addr_range; // Contains the value, or the section offset
+                             // address when the value is an address in a
+                             // section, and the size (if any)
+  uint32_t m_flags; // A copy of the flags from the original symbol table, the
+                    // ObjectFile plug-in can interpret these
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Symbol_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/SymbolContext.h b/linux-x64/clang/include/lldb/Symbol/SymbolContext.h
new file mode 100644
index 0000000..55a3454
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/SymbolContext.h
@@ -0,0 +1,501 @@
+//===-- SymbolContext.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SymbolContext_h_
+#define liblldb_SymbolContext_h_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/Mangled.h"
+#include "lldb/Symbol/LineEntry.h"
+#include "lldb/Utility/Iterable.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class SymbolContextScope;
+
+/// \class SymbolContext SymbolContext.h "lldb/Symbol/SymbolContext.h" Defines
+/// a symbol context baton that can be handed other debug core functions.
+///
+/// Many debugger functions require a context when doing lookups. This class
+/// provides a common structure that can be used as the result of a query that
+/// can contain a single result. Examples of such queries include
+///     \li Looking up a load address.
+class SymbolContext {
+public:
+  /// Default constructor.
+  ///
+  /// Initialize all pointer members to nullptr and all struct members to
+  /// their default state.
+  SymbolContext();
+
+  /// Construct with an object that knows how to reconstruct its symbol
+  /// context.
+  ///
+  /// \param[in] sc_scope
+  ///     A symbol context scope object that knows how to reconstruct
+  ///     it's context.
+  explicit SymbolContext(SymbolContextScope *sc_scope);
+
+  /// Construct with module, and optional compile unit, function, block, line
+  /// table, line entry and symbol.
+  ///
+  /// Initialize all pointer to the specified values.
+  ///
+  /// \param[in] module
+  ///     A Module pointer to the module for this context.
+  ///
+  /// \param[in] comp_unit
+  ///     A CompileUnit pointer to the compile unit for this context.
+  ///
+  /// \param[in] function
+  ///     A Function pointer to the function for this context.
+  ///
+  /// \param[in] block
+  ///     A Block pointer to the deepest block for this context.
+  ///
+  /// \param[in] line_entry
+  ///     A LineEntry pointer to the line entry for this context.
+  ///
+  /// \param[in] symbol
+  ///     A Symbol pointer to the symbol for this context.
+  explicit SymbolContext(const lldb::TargetSP &target_sp,
+                         const lldb::ModuleSP &module_sp,
+                         CompileUnit *comp_unit = nullptr,
+                         Function *function = nullptr, Block *block = nullptr,
+                         LineEntry *line_entry = nullptr,
+                         Symbol *symbol = nullptr);
+
+  // This version sets the target to a NULL TargetSP if you don't know it.
+  explicit SymbolContext(const lldb::ModuleSP &module_sp,
+                         CompileUnit *comp_unit = nullptr,
+                         Function *function = nullptr, Block *block = nullptr,
+                         LineEntry *line_entry = nullptr,
+                         Symbol *symbol = nullptr);
+
+  ~SymbolContext();
+
+  /// Assignment operator.
+  ///
+  /// Copies the address value from another SymbolContext object \a rhs into
+  /// \a this object.
+  ///
+  /// \param[in] rhs
+  ///     A const SymbolContext object reference to copy.
+  ///
+  /// \return
+  ///     A const SymbolContext object reference to \a this.
+  const SymbolContext &operator=(const SymbolContext &rhs);
+
+  /// Clear the object's state.
+  ///
+  /// Resets all pointer members to nullptr, and clears any class objects to
+  /// their default state.
+  void Clear(bool clear_target);
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the supplied stream
+  /// \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s, Target *target) const;
+
+  /// Dump the stop context in this object to a Stream.
+  ///
+  /// Dump the best description of this object to the stream. The information
+  /// displayed depends on the amount and quality of the information in this
+  /// context. If a module, function, file and line number are available, they
+  /// will be dumped. If only a module and function or symbol name with offset
+  /// is available, that will be output. Else just the address at which the
+  /// target was stopped will be displayed.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  ///
+  /// \param[in] so_addr
+  ///     The resolved section offset address.
+  ///
+  /// \param[in] show_fullpaths
+  ///     When printing file paths (with the Module), whether the
+  ///     base name of the Module should be printed or the full path.
+  ///
+  /// \param[in] show_module
+  ///     Whether the module name should be printed followed by a
+  ///     grave accent "`" character.
+  ///
+  /// \param[in] show_inlined_frames
+  ///     If a given pc is in inlined function(s), whether the inlined
+  ///     functions should be printed on separate lines in addition to
+  ///     the concrete function containing the pc.
+  ///
+  /// \param[in] show_function_arguments
+  ///     If false, this method will try to elide the function argument
+  ///     types when printing the function name.  This may be ambiguous
+  ///     for languages that have function overloading - but it may
+  ///     make the "function name" too long to include all the argument
+  ///     types.
+  ///
+  /// \param[in] show_function_name
+  ///     Normally this should be true - the function/symbol name should
+  ///     be printed.  In disassembly formatting, where we want a format
+  ///     like "<*+36>", this should be false and "*" will be printed
+  ///     instead.
+  bool DumpStopContext(Stream *s, ExecutionContextScope *exe_scope,
+                       const Address &so_addr, bool show_fullpaths,
+                       bool show_module, bool show_inlined_frames,
+                       bool show_function_arguments,
+                       bool show_function_name) const;
+
+  /// Get the address range contained within a symbol context.
+  ///
+  /// Address range priority is as follows:
+  ///     - line_entry address range if line_entry is valid and
+  ///     eSymbolContextLineEntry is set in \a scope
+  ///     - block address range if block is not nullptr and eSymbolContextBlock
+  ///     is set in \a scope
+  ///     - function address range if function is not nullptr and
+  ///     eSymbolContextFunction is set in \a scope
+  ///     - symbol address range if symbol is not nullptr and
+  ///     eSymbolContextSymbol is set in \a scope
+  ///
+  /// \param[in] scope
+  ///     A mask of symbol context bits telling this function which
+  ///     address ranges it can use when trying to extract one from
+  ///     the valid (non-nullptr) symbol context classes.
+  ///
+  /// \param[in] range_idx
+  ///     The address range index to grab. Since many functions and
+  ///     blocks are not always contiguous, they may have more than
+  ///     one address range.
+  ///
+  /// \param[in] use_inline_block_range
+  ///     If \a scope has the eSymbolContextBlock bit set, and there
+  ///     is a valid block in the symbol context, return the block
+  ///     address range for the containing inline function block, not
+  ///     the deepest most block. This allows us to extract information
+  ///     for the address range of the inlined function block, not
+  ///     the deepest lexical block.
+  ///
+  /// \param[out] range
+  ///     An address range object that will be filled in if \b true
+  ///     is returned.
+  ///
+  /// \return
+  ///     \b True if this symbol context contains items that describe
+  ///     an address range, \b false otherwise.
+  bool GetAddressRange(uint32_t scope, uint32_t range_idx,
+                       bool use_inline_block_range, AddressRange &range) const;
+
+  bool GetAddressRangeFromHereToEndLine(uint32_t end_line, AddressRange &range,
+                                        Status &error);
+
+  /// Find the best global data symbol visible from this context.
+  ///
+  /// Symbol priority is:
+  ///     - extern symbol in the current module if there is one
+  ///     - non-extern symbol in the current module if there is one
+  ///     - extern symbol in the target
+  ///     - non-extern symbol in the target
+  /// It is an error if the highest-priority result is ambiguous.
+  ///
+  /// \param[in] name
+  ///     The name of the symbol to search for.
+  ///
+  /// \param[out] error
+  ///     An error that will be populated with a message if there was an
+  ///     ambiguous result.  The error will not be populated if no result
+  ///     was found.
+  ///
+  /// \return
+  ///     The symbol that was found, or \b nullptr if none was found.
+  const Symbol *FindBestGlobalDataSymbol(ConstString name, Status &error);
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level,
+                      Target *target) const;
+
+  uint32_t GetResolvedMask() const;
+
+  lldb::LanguageType GetLanguage() const;
+
+  /// Find a block that defines the function represented by this symbol
+  /// context.
+  ///
+  /// If this symbol context points to a block that is an inlined function, or
+  /// is contained within an inlined function, the block that defines the
+  /// inlined function is returned.
+  ///
+  /// If this symbol context has no block in it, or the block is not itself an
+  /// inlined function block or contained within one, we return the top level
+  /// function block.
+  ///
+  /// This is a handy function to call when you want to get the block whose
+  /// variable list will include the arguments for the function that is
+  /// represented by this symbol context (whether the function is an inline
+  /// function or not).
+  ///
+  /// \return
+  ///     The block object pointer that defines the function that is
+  ///     represented by this symbol context object, nullptr otherwise.
+  Block *GetFunctionBlock();
+
+  /// If this symbol context represents a function that is a method, return
+  /// true and provide information about the method.
+  ///
+  /// \param[out] language
+  ///     If \b true is returned, the language for the method.
+  ///
+  /// \param[out] is_instance_method
+  ///     If \b true is returned, \b true if this is a instance method,
+  ///     \b false if this is a static/class function.
+  ///
+  /// \param[out] language_object_name
+  ///     If \b true is returned, the name of the artificial variable
+  ///     for the language ("this" for C++, "self" for ObjC).
+  ///
+  /// \return
+  ///     \b True if this symbol context represents a function that
+  ///     is a method of a class, \b false otherwise.
+  bool GetFunctionMethodInfo(lldb::LanguageType &language,
+                             bool &is_instance_method,
+                             ConstString &language_object_name);
+
+  /// Sorts the types in TypeMap according to SymbolContext to TypeList
+  ///
+  void SortTypeList(TypeMap &type_map, TypeList &type_list) const;
+
+  /// Find a name of the innermost function for the symbol context.
+  ///
+  /// For instance, if the symbol context contains an inlined block, it will
+  /// return the inlined function name.
+  ///
+  /// \param[in] prefer_mangled
+  ///    if \btrue, then the mangled name will be returned if there
+  ///    is one.  Otherwise the unmangled name will be returned if it
+  ///    is available.
+  ///
+  /// \return
+  ///     The name of the function represented by this symbol context.
+  ConstString GetFunctionName(
+      Mangled::NamePreference preference = Mangled::ePreferDemangled) const;
+
+  /// Get the line entry that corresponds to the function.
+  ///
+  /// If the symbol context contains an inlined block, the line entry for the
+  /// start address of the inlined function will be returned, otherwise the
+  /// line entry for the start address of the function will be returned. This
+  /// can be used after doing a Module::FindFunctions(...) or
+  /// ModuleList::FindFunctions(...) call in order to get the correct line
+  /// table information for the symbol context. it will return the inlined
+  /// function name.
+  ///
+  /// \param[in] prefer_mangled
+  ///    if \btrue, then the mangled name will be returned if there
+  ///    is one.  Otherwise the unmangled name will be returned if it
+  ///    is available.
+  ///
+  /// \return
+  ///     The name of the function represented by this symbol context.
+  LineEntry GetFunctionStartLineEntry() const;
+
+  /// Find the block containing the inlined block that contains this block.
+  ///
+  /// For instance, if the symbol context contains an inlined block, it will
+  /// return the inlined function name.
+  ///
+  /// \param[in] curr_frame_pc
+  ///    The address within the block of this object.
+  ///
+  /// \param[out] next_frame_sc
+  ///     A new symbol context that does what the title says it does.
+  ///
+  /// \param[out] next_frame_addr
+  ///     This is what you should report as the PC in \a next_frame_sc.
+  ///
+  /// \return
+  ///     \b true if this SymbolContext specifies a block contained in an
+  ///     inlined block.  If this returns \b true, \a next_frame_sc and
+  ///     \a next_frame_addr will be filled in correctly.
+  bool GetParentOfInlinedScope(const Address &curr_frame_pc,
+                               SymbolContext &next_frame_sc,
+                               Address &inlined_frame_addr) const;
+
+  // Member variables
+  lldb::TargetSP target_sp; ///< The Target for a given query
+  lldb::ModuleSP module_sp; ///< The Module for a given query
+  CompileUnit *comp_unit;   ///< The CompileUnit for a given query
+  Function *function;       ///< The Function for a given query
+  Block *block;             ///< The Block for a given query
+  LineEntry line_entry;     ///< The LineEntry for a given query
+  Symbol *symbol;           ///< The Symbol for a given query
+  Variable *variable;       ///< The global variable matching the given query
+};
+
+class SymbolContextSpecifier {
+public:
+  enum SpecificationType {
+    eNothingSpecified = 0,
+    eModuleSpecified = 1 << 0,
+    eFileSpecified = 1 << 1,
+    eLineStartSpecified = 1 << 2,
+    eLineEndSpecified = 1 << 3,
+    eFunctionSpecified = 1 << 4,
+    eClassOrNamespaceSpecified = 1 << 5,
+    eAddressRangeSpecified = 1 << 6
+  };
+
+  // This one produces a specifier that matches everything...
+  SymbolContextSpecifier(const lldb::TargetSP &target_sp);
+
+  ~SymbolContextSpecifier();
+
+  bool AddSpecification(const char *spec_string, SpecificationType type);
+
+  bool AddLineSpecification(uint32_t line_no, SpecificationType type);
+
+  void Clear();
+
+  bool SymbolContextMatches(SymbolContext &sc);
+
+  bool AddressMatches(lldb::addr_t addr);
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+private:
+  lldb::TargetSP m_target_sp;
+  std::string m_module_spec;
+  lldb::ModuleSP m_module_sp;
+  std::unique_ptr<FileSpec> m_file_spec_up;
+  size_t m_start_line;
+  size_t m_end_line;
+  std::string m_function_spec;
+  std::string m_class_name;
+  std::unique_ptr<AddressRange> m_address_range_up;
+  uint32_t m_type; // Or'ed bits from SpecificationType
+};
+
+/// \class SymbolContextList SymbolContext.h "lldb/Symbol/SymbolContext.h"
+/// Defines a list of symbol context objects.
+///
+/// This class provides a common structure that can be used to contain the
+/// result of a query that can contain a multiple results. Examples of such
+/// queries include:
+///     \li Looking up a function by name.
+///     \li Finding all addresses for a specified file and line number.
+class SymbolContextList {
+public:
+  /// Default constructor.
+  ///
+  /// Initialize with an empty list.
+  SymbolContextList();
+
+  /// Destructor.
+  ~SymbolContextList();
+
+  /// Append a new symbol context to the list.
+  ///
+  /// \param[in] sc
+  ///     A symbol context to append to the list.
+  void Append(const SymbolContext &sc);
+
+  void Append(const SymbolContextList &sc_list);
+
+  bool AppendIfUnique(const SymbolContext &sc, bool merge_symbol_into_function);
+
+  uint32_t AppendIfUnique(const SymbolContextList &sc_list,
+                          bool merge_symbol_into_function);
+
+  /// Clear the object's state.
+  ///
+  /// Clears the symbol context list.
+  void Clear();
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of each symbol context in the list to
+  /// the supplied stream \a s.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s, Target *target) const;
+
+  /// Get accessor for a symbol context at index \a idx.
+  ///
+  /// Dump a description of the contents of each symbol context in the list to
+  /// the supplied stream \a s.
+  ///
+  /// \param[in] idx
+  ///     The zero based index into the symbol context list.
+  ///
+  /// \param[out] sc
+  ///     A reference to the symbol context to fill in.
+  ///
+  /// \return
+  ///     Returns \b true if \a idx was a valid index into this
+  ///     symbol context list and \a sc was filled in, \b false
+  ///     otherwise.
+  bool GetContextAtIndex(size_t idx, SymbolContext &sc) const;
+
+  /// Direct reference accessor for a symbol context at index \a idx.
+  ///
+  /// The index \a idx must be a valid index, no error checking will be done
+  /// to ensure that it is valid.
+  ///
+  /// \param[in] idx
+  ///     The zero based index into the symbol context list.
+  ///
+  /// \return
+  ///     A const reference to the symbol context to fill in.
+  SymbolContext &operator[](size_t idx) { return m_symbol_contexts[idx]; }
+
+  const SymbolContext &operator[](size_t idx) const {
+    return m_symbol_contexts[idx];
+  }
+
+  bool RemoveContextAtIndex(size_t idx);
+
+  /// Get accessor for a symbol context list size.
+  ///
+  /// \return
+  ///     Returns the number of symbol context objects in the list.
+  uint32_t GetSize() const;
+
+  uint32_t NumLineEntriesWithLine(uint32_t line) const;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level,
+                      Target *target) const;
+
+protected:
+  typedef std::vector<SymbolContext>
+      collection; ///< The collection type for the list.
+
+  // Member variables.
+  collection m_symbol_contexts; ///< The list of symbol contexts.
+
+public:
+  typedef AdaptedIterable<collection, SymbolContext, vector_adapter>
+      SymbolContextIterable;
+  SymbolContextIterable SymbolContexts() {
+    return SymbolContextIterable(m_symbol_contexts);
+  }
+};
+
+bool operator==(const SymbolContext &lhs, const SymbolContext &rhs);
+bool operator!=(const SymbolContext &lhs, const SymbolContext &rhs);
+
+bool operator==(const SymbolContextList &lhs, const SymbolContextList &rhs);
+bool operator!=(const SymbolContextList &lhs, const SymbolContextList &rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_SymbolContext_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/SymbolContextScope.h b/linux-x64/clang/include/lldb/Symbol/SymbolContextScope.h
new file mode 100644
index 0000000..a626302
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/SymbolContextScope.h
@@ -0,0 +1,103 @@
+//===-- SymbolContextScope.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SymbolContextScope_h_
+#define liblldb_SymbolContextScope_h_
+
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class SymbolContextScope SymbolContextScope.h
+/// "lldb/Symbol/SymbolContextScope.h" Inherit from this if your object is
+/// part of a symbol context
+///        and can reconstruct its symbol context.
+///
+/// Many objects that are part of a symbol context that have pointers back to
+/// parent objects that own them. Any members of a symbol context that, once
+/// they are built, will not go away, can inherit from this pure virtual class
+/// and can then reconstruct their symbol context without having to keep a
+/// complete SymbolContext object in the object.
+///
+/// Examples of these objects include:
+///     \li Module
+///     \li CompileUnit
+///     \li Function
+///     \li Block
+///     \li Symbol
+///
+/// Other objects can store a "SymbolContextScope *" using any pointers to one
+/// of the above objects. This allows clients to hold onto a pointer that
+/// uniquely will identify a symbol context. Those clients can then always
+/// reconstruct the symbol context using the pointer, or use it to uniquely
+/// identify a symbol context for an object.
+///
+/// Example objects include that currently use "SymbolContextScope *" objects
+/// include:
+///     \li Variable objects that can reconstruct where they are scoped
+///         by making sure the SymbolContextScope * comes from the scope
+///         in which the variable was declared. If a variable is a global,
+///         the appropriate CompileUnit * will be used when creating the
+///         variable. A static function variables, can the Block scope
+///         in which the variable is defined. Function arguments can use
+///         the Function object as their scope. The SymbolFile parsers
+///         will set these correctly as the variables are parsed.
+///     \li Type objects that know exactly in which scope they
+///         originated much like the variables above.
+///     \li StackID objects that are able to know that if the CFA
+///         (stack pointer at the beginning of a function) and the
+///         start PC for the function/symbol and the SymbolContextScope
+///         pointer (a unique pointer that identifies a symbol context
+///         location) match within the same thread, that the stack
+///         frame is the same as the previous stack frame.
+///
+/// Objects that adhere to this protocol can reconstruct enough of a symbol
+/// context to allow functions that take a symbol context to be called. Lists
+/// can also be created using a SymbolContextScope* and and object pairs that
+/// allow large collections of objects to be passed around with minimal
+/// overhead.
+class SymbolContextScope {
+public:
+  virtual ~SymbolContextScope() = default;
+
+  /// Reconstruct the object's symbol context into \a sc.
+  ///
+  /// The object should fill in as much of the SymbolContext as it can so
+  /// function calls that require a symbol context can be made for the given
+  /// object.
+  ///
+  /// \param[out] sc
+  ///     A symbol context object pointer that gets filled in.
+  virtual void CalculateSymbolContext(SymbolContext *sc) = 0;
+
+  virtual lldb::ModuleSP CalculateSymbolContextModule() {
+    return lldb::ModuleSP();
+  }
+
+  virtual CompileUnit *CalculateSymbolContextCompileUnit() { return nullptr; }
+
+  virtual Function *CalculateSymbolContextFunction() { return nullptr; }
+
+  virtual Block *CalculateSymbolContextBlock() { return nullptr; }
+
+  virtual Symbol *CalculateSymbolContextSymbol() { return nullptr; }
+
+  /// Dump the object's symbol context to the stream \a s.
+  ///
+  /// The object should dump its symbol context to the stream \a s. This
+  /// function is widely used in the DumpDebug and verbose output for lldb
+  /// objects.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object's symbol context.
+  virtual void DumpSymbolContext(Stream *s) = 0;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SymbolContextScope_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/SymbolFile.h b/linux-x64/clang/include/lldb/Symbol/SymbolFile.h
new file mode 100644
index 0000000..dbb723e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/SymbolFile.h
@@ -0,0 +1,253 @@
+//===-- SymbolFile.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SymbolFile_h_
+#define liblldb_SymbolFile_h_
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Symbol/CompilerDecl.h"
+#include "lldb/Symbol/CompilerDeclContext.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/Function.h"
+#include "lldb/Symbol/SourceModule.h"
+#include "lldb/Symbol/Type.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/DenseSet.h"
+
+#include <mutex>
+
+#if defined(LLDB_CONFIGURATION_DEBUG)
+#define ASSERT_MODULE_LOCK(expr) (expr->AssertModuleLock())
+#else
+#define ASSERT_MODULE_LOCK(expr) ((void)0)
+#endif
+
+namespace lldb_private {
+
+class SymbolFile : public PluginInterface {
+public:
+  // Symbol file ability bits.
+  //
+  // Each symbol file can claim to support one or more symbol file abilities.
+  // These get returned from SymbolFile::GetAbilities(). These help us to
+  // determine which plug-in will be best to load the debug information found
+  // in files.
+  enum Abilities {
+    CompileUnits = (1u << 0),
+    LineTables = (1u << 1),
+    Functions = (1u << 2),
+    Blocks = (1u << 3),
+    GlobalVariables = (1u << 4),
+    LocalVariables = (1u << 5),
+    VariableTypes = (1u << 6),
+    kAllAbilities = ((1u << 7) - 1u)
+  };
+
+  static SymbolFile *FindPlugin(ObjectFile *obj_file);
+
+  // Constructors and Destructors
+  SymbolFile(ObjectFile *obj_file)
+      : m_obj_file(obj_file), m_abilities(0), m_calculated_abilities(false) {}
+
+  ~SymbolFile() override {}
+
+  /// Get a mask of what this symbol file supports for the object file
+  /// that it was constructed with.
+  ///
+  /// Each symbol file gets to respond with a mask of abilities that
+  /// it supports for each object file. This happens when we are
+  /// trying to figure out which symbol file plug-in will get used
+  /// for a given object file. The plug-in that responds with the
+  /// best mix of "SymbolFile::Abilities" bits set, will get chosen to
+  /// be the symbol file parser. This allows each plug-in to check for
+  /// sections that contain data a symbol file plug-in would need. For
+  /// example the DWARF plug-in requires DWARF sections in a file that
+  /// contain debug information. If the DWARF plug-in doesn't find
+  /// these sections, it won't respond with many ability bits set, and
+  /// we will probably fall back to the symbol table SymbolFile plug-in
+  /// which uses any information in the symbol table. Also, plug-ins
+  /// might check for some specific symbols in a symbol table in the
+  /// case where the symbol table contains debug information (STABS
+  /// and COFF). Not a lot of work should happen in these functions
+  /// as the plug-in might not get selected due to another plug-in
+  /// having more abilities. Any initialization work should be saved
+  /// for "void SymbolFile::InitializeObject()" which will get called
+  /// on the SymbolFile object with the best set of abilities.
+  ///
+  /// \return
+  ///     A uint32_t mask containing bits from the SymbolFile::Abilities
+  ///     enumeration. Any bits that are set represent an ability that
+  ///     this symbol plug-in can parse from the object file.
+  uint32_t GetAbilities() {
+    if (!m_calculated_abilities) {
+      m_abilities = CalculateAbilities();
+      m_calculated_abilities = true;
+    }
+
+    return m_abilities;
+  }
+
+  virtual uint32_t CalculateAbilities() = 0;
+
+  /// Symbols file subclasses should override this to return the Module that
+  /// owns the TypeSystem that this symbol file modifies type information in.
+  virtual std::recursive_mutex &GetModuleMutex() const;
+
+  /// Initialize the SymbolFile object.
+  ///
+  /// The SymbolFile object with the best set of abilities (detected
+  /// in "uint32_t SymbolFile::GetAbilities()) will have this function
+  /// called if it is chosen to parse an object file. More complete
+  /// initialization can happen in this function which will get called
+  /// prior to any other functions in the SymbolFile protocol.
+  virtual void InitializeObject() {}
+
+  // Compile Unit function calls
+  // Approach 1 - iterator
+  virtual uint32_t GetNumCompileUnits() = 0;
+  virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) = 0;
+
+  virtual lldb::LanguageType ParseLanguage(CompileUnit &comp_unit) = 0;
+  virtual size_t ParseFunctions(CompileUnit &comp_unit) = 0;
+  virtual bool ParseLineTable(CompileUnit &comp_unit) = 0;
+  virtual bool ParseDebugMacros(CompileUnit &comp_unit) = 0;
+  virtual bool ParseSupportFiles(CompileUnit &comp_unit,
+                                 FileSpecList &support_files) = 0;
+  virtual size_t ParseTypes(CompileUnit &comp_unit) = 0;
+  virtual bool ParseIsOptimized(CompileUnit &comp_unit) { return false; }
+
+  virtual bool
+  ParseImportedModules(const SymbolContext &sc,
+                       std::vector<SourceModule> &imported_modules) = 0;
+  virtual size_t ParseBlocksRecursive(Function &func) = 0;
+  virtual size_t ParseVariablesForContext(const SymbolContext &sc) = 0;
+  virtual Type *ResolveTypeUID(lldb::user_id_t type_uid) = 0;
+
+
+  /// The characteristics of an array type.
+  struct ArrayInfo {
+    int64_t first_index = 0;
+    llvm::SmallVector<uint64_t, 1> element_orders;
+    uint32_t byte_stride = 0;
+    uint32_t bit_stride = 0;
+  };
+  /// If \c type_uid points to an array type, return its characteristics.
+  /// To support variable-length array types, this function takes an
+  /// optional \p ExtecutionContext. If \c exe_ctx is non-null, the
+  /// dynamic characteristics for that context are returned.
+  virtual llvm::Optional<ArrayInfo>
+  GetDynamicArrayInfoForUID(lldb::user_id_t type_uid,
+                            const lldb_private::ExecutionContext *exe_ctx) = 0;
+
+  virtual bool CompleteType(CompilerType &compiler_type) = 0;
+  virtual void ParseDeclsForContext(CompilerDeclContext decl_ctx) {}
+  virtual CompilerDecl GetDeclForUID(lldb::user_id_t uid) {
+    return CompilerDecl();
+  }
+  virtual CompilerDeclContext GetDeclContextForUID(lldb::user_id_t uid) {
+    return CompilerDeclContext();
+  }
+  virtual CompilerDeclContext GetDeclContextContainingUID(lldb::user_id_t uid) {
+    return CompilerDeclContext();
+  }
+  virtual uint32_t ResolveSymbolContext(const Address &so_addr,
+                                        lldb::SymbolContextItem resolve_scope,
+                                        SymbolContext &sc) = 0;
+  virtual uint32_t ResolveSymbolContext(const FileSpec &file_spec,
+                                        uint32_t line, bool check_inlines,
+                                        lldb::SymbolContextItem resolve_scope,
+                                        SymbolContextList &sc_list);
+
+  virtual void DumpClangAST(Stream &s) {}
+  virtual uint32_t
+  FindGlobalVariables(ConstString name,
+                      const CompilerDeclContext *parent_decl_ctx,
+                      uint32_t max_matches, VariableList &variables);
+  virtual uint32_t FindGlobalVariables(const RegularExpression &regex,
+                                       uint32_t max_matches,
+                                       VariableList &variables);
+  virtual uint32_t FindFunctions(ConstString name,
+                                 const CompilerDeclContext *parent_decl_ctx,
+                                 lldb::FunctionNameType name_type_mask,
+                                 bool include_inlines, bool append,
+                                 SymbolContextList &sc_list);
+  virtual uint32_t FindFunctions(const RegularExpression &regex,
+                                 bool include_inlines, bool append,
+                                 SymbolContextList &sc_list);
+  virtual uint32_t
+  FindTypes(ConstString name, const CompilerDeclContext *parent_decl_ctx,
+            bool append, uint32_t max_matches,
+            llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files,
+            TypeMap &types);
+  virtual size_t FindTypes(const std::vector<CompilerContext> &context,
+                           bool append, TypeMap &types);
+
+  virtual void
+  GetMangledNamesForFunction(const std::string &scope_qualified_name,
+                             std::vector<ConstString> &mangled_names);
+  //  virtual uint32_t        FindTypes (const SymbolContext& sc, const
+  //  RegularExpression& regex, bool append, uint32_t max_matches, TypeList&
+  //  types) = 0;
+  virtual TypeList *GetTypeList();
+  virtual size_t GetTypes(lldb_private::SymbolContextScope *sc_scope,
+                          lldb::TypeClass type_mask,
+                          lldb_private::TypeList &type_list) = 0;
+
+  virtual void PreloadSymbols();
+
+  virtual lldb_private::TypeSystem *
+  GetTypeSystemForLanguage(lldb::LanguageType language);
+
+  virtual CompilerDeclContext
+  FindNamespace(ConstString name,
+                const CompilerDeclContext *parent_decl_ctx) {
+    return CompilerDeclContext();
+  }
+
+  ObjectFile *GetObjectFile() { return m_obj_file; }
+  const ObjectFile *GetObjectFile() const { return m_obj_file; }
+
+  virtual std::vector<CallEdge> ParseCallEdgesInFunction(UserID func_id) {
+    return {};
+  }
+
+  virtual void AddSymbols(Symtab &symtab) {}
+
+  /// Notify the SymbolFile that the file addresses in the Sections
+  /// for this module have been changed.
+  virtual void SectionFileAddressesChanged() {}
+
+  struct RegisterInfoResolver {
+    virtual ~RegisterInfoResolver(); // anchor
+
+    virtual const RegisterInfo *ResolveName(llvm::StringRef name) const = 0;
+    virtual const RegisterInfo *ResolveNumber(lldb::RegisterKind kind,
+                                              uint32_t number) const = 0;
+  };
+  virtual lldb::UnwindPlanSP
+  GetUnwindPlan(const Address &address, const RegisterInfoResolver &resolver) {
+    return nullptr;
+  }
+
+  virtual void Dump(Stream &s) {}
+
+protected:
+  void AssertModuleLock();
+
+  ObjectFile *m_obj_file; // The object file that symbols can be extracted from.
+  uint32_t m_abilities;
+  bool m_calculated_abilities;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SymbolFile);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SymbolFile_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/SymbolVendor.h b/linux-x64/clang/include/lldb/Symbol/SymbolVendor.h
new file mode 100644
index 0000000..c4015ff
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/SymbolVendor.h
@@ -0,0 +1,168 @@
+//===-- SymbolVendor.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SymbolVendor_h_
+#define liblldb_SymbolVendor_h_
+
+#include <vector>
+
+#include "lldb/Core/ModuleChild.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Symbol/SourceModule.h"
+#include "lldb/Symbol/TypeList.h"
+#include "lldb/Symbol/TypeMap.h"
+#include "lldb/lldb-private.h"
+#include "llvm/ADT/DenseSet.h"
+
+namespace lldb_private {
+
+// The symbol vendor class is designed to abstract the process of searching for
+// debug information for a given module. Platforms can subclass this class and
+// provide extra ways to find debug information. Examples would be a subclass
+// that would allow for locating a stand alone debug file, parsing debug maps,
+// or runtime data in the object files. A symbol vendor can use multiple
+// sources (SymbolFile objects) to provide the information and only parse as
+// deep as needed in order to provide the information that is requested.
+class SymbolVendor : public ModuleChild, public PluginInterface {
+public:
+  static SymbolVendor *FindPlugin(const lldb::ModuleSP &module_sp,
+                                  Stream *feedback_strm);
+
+  // Constructors and Destructors
+  SymbolVendor(const lldb::ModuleSP &module_sp);
+
+  ~SymbolVendor() override;
+
+  void AddSymbolFileRepresentation(const lldb::ObjectFileSP &objfile_sp);
+
+  virtual void Dump(Stream *s);
+
+  virtual lldb::LanguageType ParseLanguage(CompileUnit &comp_unit);
+
+  virtual size_t ParseFunctions(CompileUnit &comp_unit);
+
+  virtual bool ParseLineTable(CompileUnit &comp_unit);
+
+  virtual bool ParseDebugMacros(CompileUnit &comp_unit);
+
+  virtual bool ParseSupportFiles(CompileUnit &comp_unit,
+                                 FileSpecList &support_files);
+
+  virtual bool ParseIsOptimized(CompileUnit &comp_unit);
+
+  virtual size_t ParseTypes(CompileUnit &comp_unit);
+
+  virtual bool
+  ParseImportedModules(const SymbolContext &sc,
+                       std::vector<SourceModule> &imported_modules);
+
+  virtual size_t ParseBlocksRecursive(Function &func);
+
+  virtual size_t ParseVariablesForContext(const SymbolContext &sc);
+
+  virtual Type *ResolveTypeUID(lldb::user_id_t type_uid);
+
+  virtual uint32_t ResolveSymbolContext(const Address &so_addr,
+                                        lldb::SymbolContextItem resolve_scope,
+                                        SymbolContext &sc);
+
+  virtual uint32_t ResolveSymbolContext(const FileSpec &file_spec,
+                                        uint32_t line, bool check_inlines,
+                                        lldb::SymbolContextItem resolve_scope,
+                                        SymbolContextList &sc_list);
+
+  virtual size_t FindGlobalVariables(ConstString name,
+                                     const CompilerDeclContext *parent_decl_ctx,
+                                     size_t max_matches,
+                                     VariableList &variables);
+
+  virtual size_t FindGlobalVariables(const RegularExpression &regex,
+                                     size_t max_matches,
+                                     VariableList &variables);
+
+  virtual size_t FindFunctions(ConstString name,
+                               const CompilerDeclContext *parent_decl_ctx,
+                               lldb::FunctionNameType name_type_mask,
+                               bool include_inlines, bool append,
+                               SymbolContextList &sc_list);
+
+  virtual size_t FindFunctions(const RegularExpression &regex,
+                               bool include_inlines, bool append,
+                               SymbolContextList &sc_list);
+
+  virtual size_t
+  FindTypes(ConstString name, const CompilerDeclContext *parent_decl_ctx,
+            bool append, size_t max_matches,
+            llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files,
+            TypeMap &types);
+
+  virtual size_t FindTypes(const std::vector<CompilerContext> &context,
+                           bool append, TypeMap &types);
+
+  virtual CompilerDeclContext
+  FindNamespace(ConstString name,
+                const CompilerDeclContext *parent_decl_ctx);
+
+  virtual size_t GetNumCompileUnits();
+
+  virtual bool SetCompileUnitAtIndex(size_t cu_idx,
+                                     const lldb::CompUnitSP &cu_sp);
+
+  virtual lldb::CompUnitSP GetCompileUnitAtIndex(size_t idx);
+
+  TypeList &GetTypeList() { return m_type_list; }
+
+  const TypeList &GetTypeList() const { return m_type_list; }
+
+  virtual size_t GetTypes(SymbolContextScope *sc_scope,
+                          lldb::TypeClass type_mask, TypeList &type_list);
+
+  SymbolFile *GetSymbolFile() { return m_sym_file_up.get(); }
+
+  FileSpec GetMainFileSpec() const;
+
+  // Get module unified section list symbol table.
+  virtual Symtab *GetSymtab();
+
+  // Clear module unified section list symbol table.
+  virtual void ClearSymtab();
+
+  /// Notify the SymbolVendor that the file addresses in the Sections
+  /// for this module have been changed.
+  virtual void SectionFileAddressesChanged();
+
+  // PluginInterface protocol
+  ConstString GetPluginName() override;
+
+  uint32_t GetPluginVersion() override;
+
+protected:
+  // Classes that inherit from SymbolVendor can see and modify these
+  typedef std::vector<lldb::CompUnitSP> CompileUnits;
+  typedef CompileUnits::iterator CompileUnitIter;
+  typedef CompileUnits::const_iterator CompileUnitConstIter;
+
+  TypeList m_type_list; // Uniqued types for all parsers owned by this module
+  CompileUnits m_compile_units;    // The current compile units
+  lldb::ObjectFileSP m_objfile_sp; // Keep a reference to the object file in
+                                   // case it isn't the same as the module
+                                   // object file (debug symbols in a separate
+                                   // file)
+  std::unique_ptr<SymbolFile> m_sym_file_up; // A single symbol file. Subclasses
+                                             // can add more of these if needed.
+  Symtab *m_symtab; // Save a symtab once to not pass it through `AddSymbols` of
+                    // the symbol file each time when it is needed
+
+private:
+  // For SymbolVendor only
+  DISALLOW_COPY_AND_ASSIGN(SymbolVendor);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SymbolVendor_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/Symtab.h b/linux-x64/clang/include/lldb/Symbol/Symtab.h
new file mode 100644
index 0000000..868edcd
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/Symtab.h
@@ -0,0 +1,206 @@
+//===-- Symtab.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Symtab_h_
+#define liblldb_Symtab_h_
+
+#include "lldb/Core/UniqueCStringMap.h"
+#include "lldb/Symbol/Symbol.h"
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/lldb-private.h"
+#include <mutex>
+#include <vector>
+
+namespace lldb_private {
+
+class Symtab {
+public:
+  typedef std::vector<uint32_t> IndexCollection;
+  typedef UniqueCStringMap<uint32_t> NameToIndexMap;
+
+  enum Debug {
+    eDebugNo,  // Not a debug symbol
+    eDebugYes, // A debug symbol
+    eDebugAny
+  };
+
+  enum Visibility { eVisibilityAny, eVisibilityExtern, eVisibilityPrivate };
+
+  Symtab(ObjectFile *objfile);
+  ~Symtab();
+
+  void PreloadSymbols();
+  void Reserve(size_t count);
+  Symbol *Resize(size_t count);
+  uint32_t AddSymbol(const Symbol &symbol);
+  size_t GetNumSymbols() const;
+  void SectionFileAddressesChanged();
+  void Dump(Stream *s, Target *target, SortOrder sort_type);
+  void Dump(Stream *s, Target *target, std::vector<uint32_t> &indexes) const;
+  uint32_t GetIndexForSymbol(const Symbol *symbol) const;
+  std::recursive_mutex &GetMutex() { return m_mutex; }
+  Symbol *FindSymbolByID(lldb::user_id_t uid) const;
+  Symbol *SymbolAtIndex(size_t idx);
+  const Symbol *SymbolAtIndex(size_t idx) const;
+  Symbol *FindSymbolWithType(lldb::SymbolType symbol_type,
+                             Debug symbol_debug_type,
+                             Visibility symbol_visibility, uint32_t &start_idx);
+  /// Get the parent symbol for the given symbol.
+  ///
+  /// Many symbols in symbol tables are scoped by other symbols that
+  /// contain one or more symbol. This function will look for such a
+  /// containing symbol and return it if there is one.
+  const Symbol *GetParent(Symbol *symbol) const;
+  uint32_t AppendSymbolIndexesWithType(lldb::SymbolType symbol_type,
+                                       std::vector<uint32_t> &indexes,
+                                       uint32_t start_idx = 0,
+                                       uint32_t end_index = UINT32_MAX) const;
+  uint32_t AppendSymbolIndexesWithTypeAndFlagsValue(
+      lldb::SymbolType symbol_type, uint32_t flags_value,
+      std::vector<uint32_t> &indexes, uint32_t start_idx = 0,
+      uint32_t end_index = UINT32_MAX) const;
+  uint32_t AppendSymbolIndexesWithType(lldb::SymbolType symbol_type,
+                                       Debug symbol_debug_type,
+                                       Visibility symbol_visibility,
+                                       std::vector<uint32_t> &matches,
+                                       uint32_t start_idx = 0,
+                                       uint32_t end_index = UINT32_MAX) const;
+  uint32_t AppendSymbolIndexesWithName(ConstString symbol_name,
+                                       std::vector<uint32_t> &matches);
+  uint32_t AppendSymbolIndexesWithName(ConstString symbol_name,
+                                       Debug symbol_debug_type,
+                                       Visibility symbol_visibility,
+                                       std::vector<uint32_t> &matches);
+  uint32_t AppendSymbolIndexesWithNameAndType(ConstString symbol_name,
+                                              lldb::SymbolType symbol_type,
+                                              std::vector<uint32_t> &matches);
+  uint32_t AppendSymbolIndexesWithNameAndType(ConstString symbol_name,
+                                              lldb::SymbolType symbol_type,
+                                              Debug symbol_debug_type,
+                                              Visibility symbol_visibility,
+                                              std::vector<uint32_t> &matches);
+  uint32_t
+  AppendSymbolIndexesMatchingRegExAndType(const RegularExpression &regex,
+                                          lldb::SymbolType symbol_type,
+                                          std::vector<uint32_t> &indexes);
+  uint32_t AppendSymbolIndexesMatchingRegExAndType(
+      const RegularExpression &regex, lldb::SymbolType symbol_type,
+      Debug symbol_debug_type, Visibility symbol_visibility,
+      std::vector<uint32_t> &indexes);
+  size_t FindAllSymbolsWithNameAndType(ConstString name,
+                                       lldb::SymbolType symbol_type,
+                                       std::vector<uint32_t> &symbol_indexes);
+  size_t FindAllSymbolsWithNameAndType(ConstString name,
+                                       lldb::SymbolType symbol_type,
+                                       Debug symbol_debug_type,
+                                       Visibility symbol_visibility,
+                                       std::vector<uint32_t> &symbol_indexes);
+  size_t FindAllSymbolsMatchingRexExAndType(
+      const RegularExpression &regex, lldb::SymbolType symbol_type,
+      Debug symbol_debug_type, Visibility symbol_visibility,
+      std::vector<uint32_t> &symbol_indexes);
+  Symbol *FindFirstSymbolWithNameAndType(ConstString name,
+                                         lldb::SymbolType symbol_type,
+                                         Debug symbol_debug_type,
+                                         Visibility symbol_visibility);
+  Symbol *FindSymbolAtFileAddress(lldb::addr_t file_addr);
+  Symbol *FindSymbolContainingFileAddress(lldb::addr_t file_addr);
+  void ForEachSymbolContainingFileAddress(
+      lldb::addr_t file_addr, std::function<bool(Symbol *)> const &callback);
+  size_t FindFunctionSymbols(ConstString name, uint32_t name_type_mask,
+                             SymbolContextList &sc_list);
+  void CalculateSymbolSizes();
+
+  void SortSymbolIndexesByValue(std::vector<uint32_t> &indexes,
+                                bool remove_duplicates) const;
+
+  static void DumpSymbolHeader(Stream *s);
+
+  void Finalize() {
+    // Shrink to fit the symbols so we don't waste memory
+    if (m_symbols.capacity() > m_symbols.size()) {
+      collection new_symbols(m_symbols.begin(), m_symbols.end());
+      m_symbols.swap(new_symbols);
+    }
+  }
+
+  void AppendSymbolNamesToMap(const IndexCollection &indexes,
+                              bool add_demangled, bool add_mangled,
+                              NameToIndexMap &name_to_index_map) const;
+
+  ObjectFile *GetObjectFile() { return m_objfile; }
+
+protected:
+  typedef std::vector<Symbol> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+  typedef RangeDataVector<lldb::addr_t, lldb::addr_t, uint32_t>
+      FileRangeToIndexMap;
+  void InitNameIndexes();
+  void InitAddressIndexes();
+
+  ObjectFile *m_objfile;
+  collection m_symbols;
+  FileRangeToIndexMap m_file_addr_to_index;
+  UniqueCStringMap<uint32_t> m_name_to_index;
+  UniqueCStringMap<uint32_t> m_basename_to_index;
+  UniqueCStringMap<uint32_t> m_method_to_index;
+  UniqueCStringMap<uint32_t> m_selector_to_index;
+  mutable std::recursive_mutex
+      m_mutex; // Provide thread safety for this symbol table
+  bool m_file_addr_to_index_computed : 1, m_name_indexes_computed : 1;
+
+private:
+  bool CheckSymbolAtIndex(size_t idx, Debug symbol_debug_type,
+                          Visibility symbol_visibility) const {
+    switch (symbol_debug_type) {
+    case eDebugNo:
+      if (m_symbols[idx].IsDebug())
+        return false;
+      break;
+
+    case eDebugYes:
+      if (!m_symbols[idx].IsDebug())
+        return false;
+      break;
+
+    case eDebugAny:
+      break;
+    }
+
+    switch (symbol_visibility) {
+    case eVisibilityAny:
+      return true;
+
+    case eVisibilityExtern:
+      return m_symbols[idx].IsExternal();
+
+    case eVisibilityPrivate:
+      return !m_symbols[idx].IsExternal();
+    }
+    return false;
+  }
+
+  void SymbolIndicesToSymbolContextList(std::vector<uint32_t> &symbol_indexes,
+                                        SymbolContextList &sc_list);
+
+  void RegisterMangledNameEntry(
+      uint32_t value, std::set<const char *> &class_contexts,
+      std::vector<std::pair<NameToIndexMap::Entry, const char *>> &backlog,
+      RichManglingContext &rmc);
+
+  void RegisterBacklogEntry(const NameToIndexMap::Entry &entry,
+                            const char *decl_context,
+                            const std::set<const char *> &class_contexts);
+
+  DISALLOW_COPY_AND_ASSIGN(Symtab);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Symtab_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/TaggedASTType.h b/linux-x64/clang/include/lldb/Symbol/TaggedASTType.h
new file mode 100644
index 0000000..043a913
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/TaggedASTType.h
@@ -0,0 +1,43 @@
+//===-- TaggedASTType.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_TaggedASTType_h_
+#define liblldb_TaggedASTType_h_
+
+#include "lldb/Symbol/CompilerType.h"
+
+namespace lldb_private {
+
+// For cases in which there are multiple classes of types that are not
+// interchangeable, to allow static type checking.
+template <unsigned int C> class TaggedASTType : public CompilerType {
+public:
+  TaggedASTType(const CompilerType &compiler_type)
+      : CompilerType(compiler_type) {}
+
+  TaggedASTType(lldb::opaque_compiler_type_t type, TypeSystem *type_system)
+      : CompilerType(type_system, type) {}
+
+  TaggedASTType(const TaggedASTType<C> &tw) : CompilerType(tw) {}
+
+  TaggedASTType() : CompilerType() {}
+
+  virtual ~TaggedASTType() {}
+
+  TaggedASTType<C> &operator=(const TaggedASTType<C> &tw) {
+    CompilerType::operator=(tw);
+    return *this;
+  }
+};
+
+// Commonly-used tagged types, so code using them is interoperable
+typedef TaggedASTType<0> TypeFromParser;
+typedef TaggedASTType<1> TypeFromUser;
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Symbol/Type.h b/linux-x64/clang/include/lldb/Symbol/Type.h
new file mode 100644
index 0000000..efc9bf0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/Type.h
@@ -0,0 +1,522 @@
+//===-- Type.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Type_h_
+#define liblldb_Type_h_
+
+#include "lldb/Core/ClangForward.h"
+#include "lldb/Symbol/CompilerDecl.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/Declaration.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/APSInt.h"
+
+#include <set>
+
+namespace lldb_private {
+// CompilerContext allows an array of these items to be passed to perform
+// detailed lookups in SymbolVendor and SymbolFile functions.
+struct CompilerContext {
+  CompilerContext(CompilerContextKind t, ConstString n)
+      : type(t), name(n) {}
+
+  bool operator==(const CompilerContext &rhs) const {
+    return type == rhs.type && name == rhs.name;
+  }
+
+  void Dump() const;
+
+  CompilerContextKind type;
+  ConstString name;
+};
+
+class SymbolFileType : public std::enable_shared_from_this<SymbolFileType>,
+                       public UserID {
+public:
+  SymbolFileType(SymbolFile &symbol_file, lldb::user_id_t uid)
+      : UserID(uid), m_symbol_file(symbol_file) {}
+
+  SymbolFileType(SymbolFile &symbol_file, const lldb::TypeSP &type_sp);
+
+  ~SymbolFileType() {}
+
+  Type *operator->() { return GetType(); }
+
+  Type *GetType();
+
+protected:
+  SymbolFile &m_symbol_file;
+  lldb::TypeSP m_type_sp;
+};
+
+class Type : public std::enable_shared_from_this<Type>, public UserID {
+public:
+  enum EncodingDataType {
+    eEncodingInvalid,
+    eEncodingIsUID,      ///< This type is the type whose UID is m_encoding_uid
+    eEncodingIsConstUID, ///< This type is the type whose UID is m_encoding_uid
+                         /// with the const qualifier added
+    eEncodingIsRestrictUID, ///< This type is the type whose UID is
+                            /// m_encoding_uid with the restrict qualifier added
+    eEncodingIsVolatileUID, ///< This type is the type whose UID is
+                            /// m_encoding_uid with the volatile qualifier added
+    eEncodingIsTypedefUID,  ///< This type is pointer to a type whose UID is
+                            /// m_encoding_uid
+    eEncodingIsPointerUID,  ///< This type is pointer to a type whose UID is
+                            /// m_encoding_uid
+    eEncodingIsLValueReferenceUID, ///< This type is L value reference to a type
+                                   /// whose UID is m_encoding_uid
+    eEncodingIsRValueReferenceUID, ///< This type is R value reference to a type
+                                   /// whose UID is m_encoding_uid
+    eEncodingIsSyntheticUID
+  };
+
+  // We must force the underlying type of the enum to be unsigned here.  Not
+  // all compilers behave the same with regards to the default underlying type
+  // of an enum, but because this enum is used in an enum bitfield and integer
+  // comparisons are done with the value we need to guarantee that it's always
+  // unsigned so that, for example, eResolveStateFull doesn't compare less than
+  // eResolveStateUnresolved when used in a 2-bit bitfield.
+  typedef enum ResolveStateTag : unsigned {
+    eResolveStateUnresolved = 0,
+    eResolveStateForward = 1,
+    eResolveStateLayout = 2,
+    eResolveStateFull = 3
+  } ResolveState;
+
+  Type(lldb::user_id_t uid, SymbolFile *symbol_file, ConstString name,
+       llvm::Optional<uint64_t> byte_size, SymbolContextScope *context,
+       lldb::user_id_t encoding_uid, EncodingDataType encoding_uid_type,
+       const Declaration &decl, const CompilerType &compiler_qual_type,
+       ResolveState compiler_type_resolve_state);
+
+  // This makes an invalid type.  Used for functions that return a Type when
+  // they get an error.
+  Type();
+
+  void Dump(Stream *s, bool show_context);
+
+  void DumpTypeName(Stream *s);
+
+  // Since Type instances only keep a "SymbolFile *" internally, other classes
+  // like TypeImpl need make sure the module is still around before playing
+  // with
+  // Type instances. They can store a weak pointer to the Module;
+  lldb::ModuleSP GetModule();
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level, bool show_name);
+
+  SymbolFile *GetSymbolFile() { return m_symbol_file; }
+  const SymbolFile *GetSymbolFile() const { return m_symbol_file; }
+
+  TypeList *GetTypeList();
+
+  ConstString GetName();
+
+  llvm::Optional<uint64_t> GetByteSize();
+
+  uint32_t GetNumChildren(bool omit_empty_base_classes);
+
+  bool IsAggregateType();
+
+  bool IsValidType() { return m_encoding_uid_type != eEncodingInvalid; }
+
+  bool IsTypedef() { return m_encoding_uid_type == eEncodingIsTypedefUID; }
+
+  lldb::TypeSP GetTypedefType();
+
+  ConstString GetName() const { return m_name; }
+
+  ConstString GetQualifiedName();
+
+  void DumpValue(ExecutionContext *exe_ctx, Stream *s,
+                 const DataExtractor &data, uint32_t data_offset,
+                 bool show_type, bool show_summary, bool verbose,
+                 lldb::Format format = lldb::eFormatDefault);
+
+  bool DumpValueInMemory(ExecutionContext *exe_ctx, Stream *s,
+                         lldb::addr_t address, AddressType address_type,
+                         bool show_types, bool show_summary, bool verbose);
+
+  bool ReadFromMemory(ExecutionContext *exe_ctx, lldb::addr_t address,
+                      AddressType address_type, DataExtractor &data);
+
+  bool WriteToMemory(ExecutionContext *exe_ctx, lldb::addr_t address,
+                     AddressType address_type, DataExtractor &data);
+
+  bool GetIsDeclaration() const;
+
+  void SetIsDeclaration(bool b);
+
+  bool GetIsExternal() const;
+
+  void SetIsExternal(bool b);
+
+  lldb::Format GetFormat();
+
+  lldb::Encoding GetEncoding(uint64_t &count);
+
+  SymbolContextScope *GetSymbolContextScope() { return m_context; }
+  const SymbolContextScope *GetSymbolContextScope() const { return m_context; }
+  void SetSymbolContextScope(SymbolContextScope *context) {
+    m_context = context;
+  }
+
+  const lldb_private::Declaration &GetDeclaration() const;
+
+  // Get the clang type, and resolve definitions for any
+  // class/struct/union/enum types completely.
+  CompilerType GetFullCompilerType();
+
+  // Get the clang type, and resolve definitions enough so that the type could
+  // have layout performed. This allows ptrs and refs to
+  // class/struct/union/enum types remain forward declarations.
+  CompilerType GetLayoutCompilerType();
+
+  // Get the clang type and leave class/struct/union/enum types as forward
+  // declarations if they haven't already been fully defined.
+  CompilerType GetForwardCompilerType();
+
+  static int Compare(const Type &a, const Type &b);
+
+  // From a fully qualified typename, split the type into the type basename and
+  // the remaining type scope (namespaces/classes).
+  static bool GetTypeScopeAndBasename(const llvm::StringRef& name,
+                                      llvm::StringRef &scope,
+                                      llvm::StringRef &basename,
+                                      lldb::TypeClass &type_class);
+  void SetEncodingType(Type *encoding_type) { m_encoding_type = encoding_type; }
+
+  uint32_t GetEncodingMask();
+
+  bool IsCompleteObjCClass() { return m_flags.is_complete_objc_class; }
+
+  void SetIsCompleteObjCClass(bool is_complete_objc_class) {
+    m_flags.is_complete_objc_class = is_complete_objc_class;
+  }
+
+protected:
+  ConstString m_name;
+  SymbolFile *m_symbol_file;
+  SymbolContextScope
+      *m_context; // The symbol context in which this type is defined
+  Type *m_encoding_type;
+  lldb::user_id_t m_encoding_uid;
+  EncodingDataType m_encoding_uid_type;
+  uint64_t m_byte_size : 63;
+  uint64_t m_byte_size_has_value : 1;
+  Declaration m_decl;
+  CompilerType m_compiler_type;
+
+  struct Flags {
+#ifdef __GNUC__
+    // using unsigned type here to work around a very noisy gcc warning
+    unsigned compiler_type_resolve_state : 2;
+#else
+    ResolveState compiler_type_resolve_state : 2;
+#endif
+    bool is_complete_objc_class : 1;
+  } m_flags;
+
+  Type *GetEncodingType();
+
+  bool ResolveClangType(ResolveState compiler_type_resolve_state);
+};
+
+// the two classes here are used by the public API as a backend to the SBType
+// and SBTypeList classes
+
+class TypeImpl {
+public:
+  TypeImpl() = default;
+
+  ~TypeImpl() {}
+
+  TypeImpl(const lldb::TypeSP &type_sp);
+
+  TypeImpl(const CompilerType &compiler_type);
+
+  TypeImpl(const lldb::TypeSP &type_sp, const CompilerType &dynamic);
+
+  TypeImpl(const CompilerType &compiler_type, const CompilerType &dynamic);
+
+  void SetType(const lldb::TypeSP &type_sp);
+
+  void SetType(const CompilerType &compiler_type);
+
+  void SetType(const lldb::TypeSP &type_sp, const CompilerType &dynamic);
+
+  void SetType(const CompilerType &compiler_type, const CompilerType &dynamic);
+
+  bool operator==(const TypeImpl &rhs) const;
+
+  bool operator!=(const TypeImpl &rhs) const;
+
+  bool IsValid() const;
+
+  explicit operator bool() const;
+
+  void Clear();
+
+  ConstString GetName() const;
+
+  ConstString GetDisplayTypeName() const;
+
+  TypeImpl GetPointerType() const;
+
+  TypeImpl GetPointeeType() const;
+
+  TypeImpl GetReferenceType() const;
+
+  TypeImpl GetTypedefedType() const;
+
+  TypeImpl GetDereferencedType() const;
+
+  TypeImpl GetUnqualifiedType() const;
+
+  TypeImpl GetCanonicalType() const;
+
+  CompilerType GetCompilerType(bool prefer_dynamic);
+
+  TypeSystem *GetTypeSystem(bool prefer_dynamic);
+
+  bool GetDescription(lldb_private::Stream &strm,
+                      lldb::DescriptionLevel description_level);
+
+private:
+  bool CheckModule(lldb::ModuleSP &module_sp) const;
+
+  lldb::ModuleWP m_module_wp;
+  CompilerType m_static_type;
+  CompilerType m_dynamic_type;
+};
+
+class TypeListImpl {
+public:
+  TypeListImpl() : m_content() {}
+
+  void Append(const lldb::TypeImplSP &type) { m_content.push_back(type); }
+
+  class AppendVisitor {
+  public:
+    AppendVisitor(TypeListImpl &type_list) : m_type_list(type_list) {}
+
+    void operator()(const lldb::TypeImplSP &type) { m_type_list.Append(type); }
+
+  private:
+    TypeListImpl &m_type_list;
+  };
+
+  void Append(const lldb_private::TypeList &type_list);
+
+  lldb::TypeImplSP GetTypeAtIndex(size_t idx) {
+    lldb::TypeImplSP type_sp;
+    if (idx < GetSize())
+      type_sp = m_content[idx];
+    return type_sp;
+  }
+
+  size_t GetSize() { return m_content.size(); }
+
+private:
+  std::vector<lldb::TypeImplSP> m_content;
+};
+
+class TypeMemberImpl {
+public:
+  TypeMemberImpl()
+      : m_type_impl_sp(), m_bit_offset(0), m_name(), m_bitfield_bit_size(0),
+        m_is_bitfield(false)
+
+  {}
+
+  TypeMemberImpl(const lldb::TypeImplSP &type_impl_sp, uint64_t bit_offset,
+                 ConstString name, uint32_t bitfield_bit_size = 0,
+                 bool is_bitfield = false)
+      : m_type_impl_sp(type_impl_sp), m_bit_offset(bit_offset), m_name(name),
+        m_bitfield_bit_size(bitfield_bit_size), m_is_bitfield(is_bitfield) {}
+
+  TypeMemberImpl(const lldb::TypeImplSP &type_impl_sp, uint64_t bit_offset)
+      : m_type_impl_sp(type_impl_sp), m_bit_offset(bit_offset), m_name(),
+        m_bitfield_bit_size(0), m_is_bitfield(false) {
+    if (m_type_impl_sp)
+      m_name = m_type_impl_sp->GetName();
+  }
+
+  const lldb::TypeImplSP &GetTypeImpl() { return m_type_impl_sp; }
+
+  ConstString GetName() const { return m_name; }
+
+  uint64_t GetBitOffset() const { return m_bit_offset; }
+
+  uint32_t GetBitfieldBitSize() const { return m_bitfield_bit_size; }
+
+  void SetBitfieldBitSize(uint32_t bitfield_bit_size) {
+    m_bitfield_bit_size = bitfield_bit_size;
+  }
+
+  bool GetIsBitfield() const { return m_is_bitfield; }
+
+  void SetIsBitfield(bool is_bitfield) { m_is_bitfield = is_bitfield; }
+
+protected:
+  lldb::TypeImplSP m_type_impl_sp;
+  uint64_t m_bit_offset;
+  ConstString m_name;
+  uint32_t m_bitfield_bit_size; // Bit size for bitfield members only
+  bool m_is_bitfield;
+};
+
+///
+/// Sometimes you can find the name of the type corresponding to an object, but
+/// we don't have debug
+/// information for it.  If that is the case, you can return one of these
+/// objects, and then if it
+/// has a full type, you can use that, but if not at least you can print the
+/// name for informational
+/// purposes.
+///
+
+class TypeAndOrName {
+public:
+  TypeAndOrName() = default;
+  TypeAndOrName(lldb::TypeSP &type_sp);
+  TypeAndOrName(const CompilerType &compiler_type);
+  TypeAndOrName(const char *type_str);
+  TypeAndOrName(ConstString &type_const_string);
+
+  bool operator==(const TypeAndOrName &other) const;
+
+  bool operator!=(const TypeAndOrName &other) const;
+
+  ConstString GetName() const;
+
+  CompilerType GetCompilerType() const { return m_compiler_type; }
+
+  void SetName(ConstString type_name);
+
+  void SetName(const char *type_name_cstr);
+
+  void SetTypeSP(lldb::TypeSP type_sp);
+
+  void SetCompilerType(CompilerType compiler_type);
+
+  bool IsEmpty() const;
+
+  bool HasName() const;
+
+  bool HasCompilerType() const;
+
+  bool HasType() const { return HasCompilerType(); }
+
+  void Clear();
+
+  explicit operator bool() { return !IsEmpty(); }
+
+private:
+  CompilerType m_compiler_type;
+  ConstString m_type_name;
+};
+
+class TypeMemberFunctionImpl {
+public:
+  TypeMemberFunctionImpl()
+      : m_type(), m_decl(), m_name(), m_kind(lldb::eMemberFunctionKindUnknown) {
+  }
+
+  TypeMemberFunctionImpl(const CompilerType &type, const CompilerDecl &decl,
+                         const std::string &name,
+                         const lldb::MemberFunctionKind &kind)
+      : m_type(type), m_decl(decl), m_name(name), m_kind(kind) {}
+
+  bool IsValid();
+
+  ConstString GetName() const;
+
+  ConstString GetMangledName() const;
+
+  CompilerType GetType() const;
+
+  CompilerType GetReturnType() const;
+
+  size_t GetNumArguments() const;
+
+  CompilerType GetArgumentAtIndex(size_t idx) const;
+
+  lldb::MemberFunctionKind GetKind() const;
+
+  bool GetDescription(Stream &stream);
+
+protected:
+  std::string GetPrintableTypeName();
+
+private:
+  CompilerType m_type;
+  CompilerDecl m_decl;
+  ConstString m_name;
+  lldb::MemberFunctionKind m_kind;
+};
+
+class TypeEnumMemberImpl {
+public:
+  TypeEnumMemberImpl()
+      : m_integer_type_sp(), m_name("<invalid>"), m_value(), m_valid(false) {}
+
+  TypeEnumMemberImpl(const lldb::TypeImplSP &integer_type_sp,
+                     ConstString name, const llvm::APSInt &value);
+
+  TypeEnumMemberImpl(const TypeEnumMemberImpl &rhs) = default;
+
+  TypeEnumMemberImpl &operator=(const TypeEnumMemberImpl &rhs);
+
+  bool IsValid() { return m_valid; }
+
+  ConstString GetName() const { return m_name; }
+
+  const lldb::TypeImplSP &GetIntegerType() const { return m_integer_type_sp; }
+
+  uint64_t GetValueAsUnsigned() const { return m_value.getZExtValue(); }
+
+  int64_t GetValueAsSigned() const { return m_value.getSExtValue(); }
+
+protected:
+  lldb::TypeImplSP m_integer_type_sp;
+  ConstString m_name;
+  llvm::APSInt m_value;
+  bool m_valid;
+};
+
+class TypeEnumMemberListImpl {
+public:
+  TypeEnumMemberListImpl() : m_content() {}
+
+  void Append(const lldb::TypeEnumMemberImplSP &type) {
+    m_content.push_back(type);
+  }
+
+  void Append(const lldb_private::TypeEnumMemberListImpl &type_list);
+
+  lldb::TypeEnumMemberImplSP GetTypeEnumMemberAtIndex(size_t idx) {
+    lldb::TypeEnumMemberImplSP enum_member;
+    if (idx < GetSize())
+      enum_member = m_content[idx];
+    return enum_member;
+  }
+
+  size_t GetSize() { return m_content.size(); }
+
+private:
+  std::vector<lldb::TypeEnumMemberImplSP> m_content;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Type_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/TypeList.h b/linux-x64/clang/include/lldb/Symbol/TypeList.h
new file mode 100644
index 0000000..982f673
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/TypeList.h
@@ -0,0 +1,72 @@
+//===-- TypeList.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_TypeList_h_
+#define liblldb_TypeList_h_
+
+#include "lldb/Symbol/Type.h"
+#include "lldb/Utility/Iterable.h"
+#include "lldb/lldb-private.h"
+#include <functional>
+#include <vector>
+
+namespace lldb_private {
+
+class TypeList {
+public:
+  // Constructors and Destructors
+  TypeList();
+
+  virtual ~TypeList();
+
+  void Clear();
+
+  void Dump(Stream *s, bool show_context);
+
+  //    lldb::TypeSP
+  //    FindType(lldb::user_id_t uid);
+
+  TypeList FindTypes(ConstString name);
+
+  void Insert(const lldb::TypeSP &type);
+
+  uint32_t GetSize() const;
+
+  lldb::TypeSP GetTypeAtIndex(uint32_t idx);
+
+  typedef std::vector<lldb::TypeSP> collection;
+  typedef AdaptedIterable<collection, lldb::TypeSP, vector_adapter>
+      TypeIterable;
+
+  TypeIterable Types() { return TypeIterable(m_types); }
+
+  void ForEach(
+      std::function<bool(const lldb::TypeSP &type_sp)> const &callback) const;
+
+  void ForEach(std::function<bool(lldb::TypeSP &type_sp)> const &callback);
+
+  void RemoveMismatchedTypes(const char *qualified_typename, bool exact_match);
+
+  void RemoveMismatchedTypes(const std::string &type_scope,
+                             const std::string &type_basename,
+                             lldb::TypeClass type_class, bool exact_match);
+
+  void RemoveMismatchedTypes(lldb::TypeClass type_class);
+
+private:
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  collection m_types;
+
+  DISALLOW_COPY_AND_ASSIGN(TypeList);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_TypeList_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/TypeMap.h b/linux-x64/clang/include/lldb/Symbol/TypeMap.h
new file mode 100644
index 0000000..e7d2b25
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/TypeMap.h
@@ -0,0 +1,74 @@
+//===-- TypeMap.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_TypeMap_h_
+#define liblldb_TypeMap_h_
+
+#include "lldb/Symbol/Type.h"
+#include "lldb/Utility/Iterable.h"
+#include "lldb/lldb-private.h"
+#include <functional>
+#include <map>
+
+namespace lldb_private {
+
+class TypeMap {
+public:
+  // Constructors and Destructors
+  TypeMap();
+
+  virtual ~TypeMap();
+
+  void Clear();
+
+  void Dump(Stream *s, bool show_context);
+
+  TypeMap FindTypes(ConstString name);
+
+  void Insert(const lldb::TypeSP &type);
+
+  bool Empty() const;
+
+  bool InsertUnique(const lldb::TypeSP &type);
+
+  uint32_t GetSize() const;
+
+  lldb::TypeSP GetTypeAtIndex(uint32_t idx);
+
+  typedef std::multimap<lldb::user_id_t, lldb::TypeSP> collection;
+  typedef AdaptedIterable<collection, lldb::TypeSP, map_adapter> TypeIterable;
+
+  TypeIterable Types() { return TypeIterable(m_types); }
+
+  void ForEach(
+      std::function<bool(const lldb::TypeSP &type_sp)> const &callback) const;
+
+  void ForEach(std::function<bool(lldb::TypeSP &type_sp)> const &callback);
+
+  bool Remove(const lldb::TypeSP &type_sp);
+
+  void RemoveMismatchedTypes(const char *qualified_typename, bool exact_match);
+
+  void RemoveMismatchedTypes(const std::string &type_scope,
+                             const std::string &type_basename,
+                             lldb::TypeClass type_class, bool exact_match);
+
+  void RemoveMismatchedTypes(lldb::TypeClass type_class);
+
+private:
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  collection m_types;
+
+  DISALLOW_COPY_AND_ASSIGN(TypeMap);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_TypeMap_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/TypeSystem.h b/linux-x64/clang/include/lldb/Symbol/TypeSystem.h
new file mode 100644
index 0000000..4bef2a4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/TypeSystem.h
@@ -0,0 +1,515 @@
+//===-- TypeSystem.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_TypeSystem_h_
+#define liblldb_TypeSystem_h_
+
+#include <functional>
+#include <map>
+#include <mutex>
+#include <string>
+
+#include "llvm/ADT/APSInt.h"
+#include "llvm/Support/Casting.h"
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Expression/Expression.h"
+#include "lldb/Symbol/CompilerDecl.h"
+#include "lldb/Symbol/CompilerDeclContext.h"
+#include "lldb/lldb-private.h"
+
+class DWARFDIE;
+class DWARFASTParser;
+class PDBASTParser;
+
+namespace lldb_private {
+
+// Interface for representing the Type Systems in different languages.
+class TypeSystem : public PluginInterface {
+public:
+  // Intrusive type system that allows us to use llvm casting.
+  //
+  // To add a new type system:
+  //
+  // 1 - Add a new enumeration for llvm casting below for your TypeSystem
+  //     subclass, here we will use eKindFoo
+  //
+  // 2 - Your TypeSystem subclass will inherit from TypeSystem and needs
+  //     to implement a static classof() function that returns your
+  //     enumeration:
+  //
+  //    class Foo : public lldb_private::TypeSystem
+  //    {
+  //        static bool classof(const TypeSystem *ts)
+  //        {
+  //            return ts->getKind() == TypeSystem::eKindFoo;
+  //        }
+  //    };
+  //
+  // 3 - Contruct your TypeSystem subclass with the enumeration from below
+  //
+  //    Foo() :
+  //        TypeSystem(TypeSystem::eKindFoo),
+  //        ...
+  //    {
+  //    }
+  //
+  // Then you can use the llvm casting on any "TypeSystem *" to get an instance
+  // of your subclass.
+  enum LLVMCastKind {
+    eKindClang,
+    eKindSwift,
+    eKindOCaml,
+    kNumKinds
+  };
+
+  // Constructors and Destructors
+  TypeSystem(LLVMCastKind kind);
+
+  ~TypeSystem() override;
+
+  LLVMCastKind getKind() const { return m_kind; }
+
+  static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
+                                           Module *module);
+
+  static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
+                                           Target *target);
+
+  // Free up any resources associated with this TypeSystem.  Done before
+  // removing all the TypeSystems from the TypeSystemMap.
+  virtual void Finalize() {}
+
+  virtual DWARFASTParser *GetDWARFParser() { return nullptr; }
+  virtual PDBASTParser *GetPDBParser() { return nullptr; }
+
+  virtual SymbolFile *GetSymbolFile() const { return m_sym_file; }
+
+  // Returns true if the symbol file changed during the set accessor.
+  virtual void SetSymbolFile(SymbolFile *sym_file) { m_sym_file = sym_file; }
+
+  // CompilerDecl functions
+  virtual ConstString DeclGetName(void *opaque_decl) = 0;
+
+  virtual ConstString DeclGetMangledName(void *opaque_decl);
+
+  virtual CompilerDeclContext DeclGetDeclContext(void *opaque_decl);
+
+  virtual CompilerType DeclGetFunctionReturnType(void *opaque_decl);
+
+  virtual size_t DeclGetFunctionNumArguments(void *opaque_decl);
+
+  virtual CompilerType DeclGetFunctionArgumentType(void *opaque_decl,
+                                                   size_t arg_idx);
+
+  // CompilerDeclContext functions
+
+  virtual std::vector<CompilerDecl>
+  DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name,
+                            const bool ignore_imported_decls);
+
+  virtual bool DeclContextIsStructUnionOrClass(void *opaque_decl_ctx) = 0;
+
+  virtual ConstString DeclContextGetName(void *opaque_decl_ctx) = 0;
+
+  virtual ConstString
+  DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) = 0;
+
+  virtual bool DeclContextIsClassMethod(
+      void *opaque_decl_ctx, lldb::LanguageType *language_ptr,
+      bool *is_instance_method_ptr, ConstString *language_object_name_ptr) = 0;
+
+  virtual bool DeclContextIsContainedInLookup(void *opaque_decl_ctx,
+                                              void *other_opaque_decl_ctx) = 0;
+
+  // Tests
+
+  virtual bool IsArrayType(lldb::opaque_compiler_type_t type,
+                           CompilerType *element_type, uint64_t *size,
+                           bool *is_incomplete) = 0;
+
+  virtual bool IsAggregateType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsAnonymousType(lldb::opaque_compiler_type_t type);
+
+  virtual bool IsCharType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsCompleteType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsDefined(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsFloatingPointType(lldb::opaque_compiler_type_t type,
+                                   uint32_t &count, bool &is_complex) = 0;
+
+  virtual bool IsFunctionType(lldb::opaque_compiler_type_t type,
+                              bool *is_variadic_ptr) = 0;
+
+  virtual size_t
+  GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType
+  GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type,
+                             const size_t index) = 0;
+
+  virtual bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsBlockPointerType(lldb::opaque_compiler_type_t type,
+                                  CompilerType *function_pointer_type_ptr) = 0;
+
+  virtual bool IsIntegerType(lldb::opaque_compiler_type_t type,
+                             bool &is_signed) = 0;
+
+  virtual bool IsEnumerationType(lldb::opaque_compiler_type_t type,
+                                 bool &is_signed) {
+    is_signed = false;
+    return false;
+  }
+
+  virtual bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type,
+                                     CompilerType *target_type, // Can pass NULL
+                                     bool check_cplusplus, bool check_objc) = 0;
+
+  virtual bool IsPointerType(lldb::opaque_compiler_type_t type,
+                             CompilerType *pointee_type) = 0;
+
+  virtual bool IsScalarType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsVoidType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool CanPassInRegisters(const CompilerType &type) = 0;
+
+  // TypeSystems can support more than one language
+  virtual bool SupportsLanguage(lldb::LanguageType language) = 0;
+
+  // Type Completion
+
+  virtual bool GetCompleteType(lldb::opaque_compiler_type_t type) = 0;
+
+  // AST related queries
+
+  virtual uint32_t GetPointerByteSize() = 0;
+
+  // Accessors
+
+  virtual ConstString GetTypeName(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual uint32_t
+  GetTypeInfo(lldb::opaque_compiler_type_t type,
+              CompilerType *pointee_or_element_compiler_type) = 0;
+
+  virtual lldb::LanguageType
+  GetMinimumLanguage(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) = 0;
+
+  // Creating related types
+
+  virtual CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type,
+                                           uint64_t *stride) = 0;
+
+  virtual CompilerType GetArrayType(lldb::opaque_compiler_type_t type,
+                                    uint64_t size);
+
+  virtual CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) = 0;
+
+  // Returns -1 if this isn't a function of if the function doesn't have a
+  // prototype Returns a value >= 0 if there is a prototype.
+  virtual int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType
+  GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
+                                 size_t idx) = 0;
+
+  virtual CompilerType
+  GetFunctionReturnType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual TypeMemberFunctionImpl
+  GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, size_t idx) = 0;
+
+  virtual CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType GetPointerType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType
+  GetLValueReferenceType(lldb::opaque_compiler_type_t type);
+
+  virtual CompilerType
+  GetRValueReferenceType(lldb::opaque_compiler_type_t type);
+
+  virtual CompilerType AddConstModifier(lldb::opaque_compiler_type_t type);
+
+  virtual CompilerType AddVolatileModifier(lldb::opaque_compiler_type_t type);
+
+  virtual CompilerType AddRestrictModifier(lldb::opaque_compiler_type_t type);
+
+  virtual CompilerType CreateTypedef(lldb::opaque_compiler_type_t type,
+                                     const char *name,
+                                     const CompilerDeclContext &decl_ctx);
+
+  // Exploring the type
+
+  virtual llvm::Optional<uint64_t>
+  GetBitSize(lldb::opaque_compiler_type_t type,
+             ExecutionContextScope *exe_scope) = 0;
+
+  virtual lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
+                                     uint64_t &count) = 0;
+
+  virtual lldb::Format GetFormat(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
+                                  bool omit_empty_base_classes,
+                                  const ExecutionContext *exe_ctx) = 0;
+
+  virtual CompilerType GetBuiltinTypeByName(ConstString name);
+
+  virtual lldb::BasicType
+  GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual void ForEachEnumerator(
+      lldb::opaque_compiler_type_t type,
+      std::function<bool(const CompilerType &integer_type,
+                         ConstString name,
+                         const llvm::APSInt &value)> const &callback) {}
+
+  virtual uint32_t GetNumFields(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType GetFieldAtIndex(lldb::opaque_compiler_type_t type,
+                                       size_t idx, std::string &name,
+                                       uint64_t *bit_offset_ptr,
+                                       uint32_t *bitfield_bit_size_ptr,
+                                       bool *is_bitfield_ptr) = 0;
+
+  virtual uint32_t
+  GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual uint32_t
+  GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType
+  GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx,
+                            uint32_t *bit_offset_ptr) = 0;
+
+  virtual CompilerType
+  GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx,
+                             uint32_t *bit_offset_ptr) = 0;
+
+  virtual CompilerType GetChildCompilerTypeAtIndex(
+      lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,
+      bool transparent_pointers, bool omit_empty_base_classes,
+      bool ignore_array_bounds, std::string &child_name,
+      uint32_t &child_byte_size, int32_t &child_byte_offset,
+      uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
+      bool &child_is_base_class, bool &child_is_deref_of_parent,
+      ValueObject *valobj, uint64_t &language_flags) = 0;
+
+  // Lookup a child given a name. This function will match base class names and
+  // member member names in "clang_type" only, not descendants.
+  virtual uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
+                                           const char *name,
+                                           bool omit_empty_base_classes) = 0;
+
+  // Lookup a child member given a name. This function will match member names
+  // only and will descend into "clang_type" children in search for the first
+  // member in this class, or any base class that matches "name".
+  // TODO: Return all matches for a given name by returning a
+  // vector<vector<uint32_t>>
+  // so we catch all names that match a given child name, not just the first.
+  virtual size_t
+  GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type,
+                                const char *name, bool omit_empty_base_classes,
+                                std::vector<uint32_t> &child_indexes) = 0;
+
+  virtual size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type);
+
+  virtual lldb::TemplateArgumentKind
+  GetTemplateArgumentKind(lldb::opaque_compiler_type_t type, size_t idx);
+  virtual CompilerType GetTypeTemplateArgument(lldb::opaque_compiler_type_t type,
+                                           size_t idx);
+  virtual llvm::Optional<CompilerType::IntegralTemplateArgument>
+  GetIntegralTemplateArgument(lldb::opaque_compiler_type_t type, size_t idx);
+
+  // Dumping types
+
+#ifndef NDEBUG
+  /// Convenience LLVM-style dump method for use in the debugger only.
+  LLVM_DUMP_METHOD virtual void
+  dump(lldb::opaque_compiler_type_t type) const = 0;
+#endif
+  
+  virtual void DumpValue(lldb::opaque_compiler_type_t type,
+                         ExecutionContext *exe_ctx, Stream *s,
+                         lldb::Format format, const DataExtractor &data,
+                         lldb::offset_t data_offset, size_t data_byte_size,
+                         uint32_t bitfield_bit_size,
+                         uint32_t bitfield_bit_offset, bool show_types,
+                         bool show_summary, bool verbose, uint32_t depth) = 0;
+
+  virtual bool DumpTypeValue(lldb::opaque_compiler_type_t type, Stream *s,
+                             lldb::Format format, const DataExtractor &data,
+                             lldb::offset_t data_offset, size_t data_byte_size,
+                             uint32_t bitfield_bit_size,
+                             uint32_t bitfield_bit_offset,
+                             ExecutionContextScope *exe_scope) = 0;
+
+  virtual void
+  DumpTypeDescription(lldb::opaque_compiler_type_t type) = 0; // Dump to stdout
+
+  virtual void DumpTypeDescription(lldb::opaque_compiler_type_t type,
+                                   Stream *s) = 0;
+
+  // TODO: These methods appear unused. Should they be removed?
+
+  virtual bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual void DumpSummary(lldb::opaque_compiler_type_t type,
+                           ExecutionContext *exe_ctx, Stream *s,
+                           const DataExtractor &data,
+                           lldb::offset_t data_offset,
+                           size_t data_byte_size) = 0;
+
+  // Converts "s" to a floating point value and place resulting floating point
+  // bytes in the "dst" buffer.
+  virtual size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
+                                           const char *s, uint8_t *dst,
+                                           size_t dst_size) = 0;
+
+  // TODO: Determine if these methods should move to ClangASTContext.
+
+  virtual bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type,
+                                        CompilerType *pointee_type) = 0;
+
+  virtual unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsCStringType(lldb::opaque_compiler_type_t type,
+                             uint32_t &length) = 0;
+
+  virtual size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) = 0;
+
+  virtual CompilerType
+  GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
+                                      size_t bit_size) = 0;
+
+  virtual bool IsBeingDefined(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsConst(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type,
+                                          CompilerType *base_type_ptr) = 0;
+
+  virtual bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsTypedefType(lldb::opaque_compiler_type_t type) = 0;
+
+  // If the current object represents a typedef type, get the underlying type
+  virtual CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsVectorType(lldb::opaque_compiler_type_t type,
+                            CompilerType *element_type, uint64_t *size) = 0;
+
+  virtual CompilerType
+  GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual CompilerType
+  GetNonReferenceType(lldb::opaque_compiler_type_t type) = 0;
+
+  virtual bool IsReferenceType(lldb::opaque_compiler_type_t type,
+                               CompilerType *pointee_type, bool *is_rvalue) = 0;
+
+  virtual bool
+  ShouldTreatScalarValueAsAddress(lldb::opaque_compiler_type_t type) {
+    return IsPointerOrReferenceType(type, nullptr);
+  }
+
+  virtual UserExpression *
+  GetUserExpression(llvm::StringRef expr, llvm::StringRef prefix,
+                    lldb::LanguageType language,
+                    Expression::ResultType desired_type,
+                    const EvaluateExpressionOptions &options,
+                    ValueObject *ctx_obj) {
+    return nullptr;
+  }
+
+  virtual FunctionCaller *GetFunctionCaller(const CompilerType &return_type,
+                                            const Address &function_address,
+                                            const ValueList &arg_value_list,
+                                            const char *name) {
+    return nullptr;
+  }
+
+  virtual UtilityFunction *GetUtilityFunction(const char *text,
+                                              const char *name) {
+    return nullptr;
+  }
+
+  virtual PersistentExpressionState *GetPersistentExpressionState() {
+    return nullptr;
+  }
+
+  virtual CompilerType GetTypeForFormatters(void *type);
+
+  virtual LazyBool ShouldPrintAsOneLiner(void *type, ValueObject *valobj);
+
+  // Type systems can have types that are placeholder types, which are meant to
+  // indicate the presence of a type, but offer no actual information about
+  // said types, and leave the burden of actually figuring type information out
+  // to dynamic type resolution. For instance a language with a generics
+  // system, can use placeholder types to indicate "type argument goes here",
+  // without promising uniqueness of the placeholder, nor attaching any
+  // actually idenfiable information to said placeholder. This API allows type
+  // systems to tell LLDB when such a type has been encountered In response,
+  // the debugger can react by not using this type as a cache entry in any
+  // type-specific way For instance, LLDB will currently not cache any
+  // formatters that are discovered on such a type as attributable to the
+  // meaningless type itself, instead preferring to use the dynamic type
+  virtual bool IsMeaninglessWithoutDynamicResolution(void *type);
+
+protected:
+  const LLVMCastKind m_kind; // Support for llvm casting
+  SymbolFile *m_sym_file;
+};
+
+class TypeSystemMap {
+public:
+  TypeSystemMap();
+  ~TypeSystemMap();
+
+  // Clear calls Finalize on all the TypeSystems managed by this map, and then
+  // empties the map.
+  void Clear();
+
+  // Iterate through all of the type systems that are created. Return true from
+  // callback to keep iterating, false to stop iterating.
+  void ForEach(std::function<bool(TypeSystem *)> const &callback);
+
+  TypeSystem *GetTypeSystemForLanguage(lldb::LanguageType language,
+                                       Module *module, bool can_create);
+
+  TypeSystem *GetTypeSystemForLanguage(lldb::LanguageType language,
+                                       Target *target, bool can_create);
+
+protected:
+  // This function does not take the map mutex, and should only be called from
+  // functions that do take the mutex.
+  void AddToMap(lldb::LanguageType language,
+                lldb::TypeSystemSP const &type_system_sp);
+
+  typedef std::map<lldb::LanguageType, lldb::TypeSystemSP> collection;
+  mutable std::mutex m_mutex; ///< A mutex to keep this object happy in
+                              ///multi-threaded environments.
+  collection m_map;
+  bool m_clear_in_progress;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_TypeSystem_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/UnwindPlan.h b/linux-x64/clang/include/lldb/Symbol/UnwindPlan.h
new file mode 100644
index 0000000..2b49aca
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/UnwindPlan.h
@@ -0,0 +1,516 @@
+//===-- UnwindPlan.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UnwindPlan_h
+#define liblldb_UnwindPlan_h
+
+#include <map>
+#include <memory>
+#include <vector>
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Stream.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// The UnwindPlan object specifies how to unwind out of a function - where this
+// function saves the caller's register values before modifying them (for non-
+// volatile aka saved registers) and how to find this frame's Canonical Frame
+// Address (CFA) or Aligned Frame Address (AFA).
+
+// CFA is a DWARF's Canonical Frame Address.
+// Most commonly, registers are saved on the stack, offset some bytes from the
+// Canonical Frame Address, or CFA, which is the starting address of this
+// function's stack frame (the CFA is same as the eh_frame's CFA, whatever that
+// may be on a given architecture). The CFA address for the stack frame does
+// not change during the lifetime of the function.
+
+// AFA is an artificially introduced Aligned Frame Address.
+// It is used only for stack frames with realignment (e.g. when some of the
+// locals has an alignment requirement higher than the stack alignment right
+// after the function call). It is used to access register values saved on the
+// stack after the realignment (and so they are inaccessible through the CFA).
+// AFA usually equals the stack pointer value right after the realignment.
+
+// Internally, the UnwindPlan is structured as a vector of register locations
+// organized by code address in the function, showing which registers have been
+// saved at that point and where they are saved. It can be thought of as the
+// expanded table form of the DWARF CFI encoded information.
+
+// Other unwind information sources will be converted into UnwindPlans before
+// being added to a FuncUnwinders object.  The unwind source may be an eh_frame
+// FDE, a DWARF debug_frame FDE, or assembly language based prologue analysis.
+// The UnwindPlan is the canonical form of this information that the unwinder
+// code will use when walking the stack.
+
+class UnwindPlan {
+public:
+  class Row {
+  public:
+    class RegisterLocation {
+    public:
+      enum RestoreType {
+        unspecified,       // not specified, we may be able to assume this
+                           // is the same register. gcc doesn't specify all
+                           // initial values so we really don't know...
+        undefined,         // reg is not available, e.g. volatile reg
+        same,              // reg is unchanged
+        atCFAPlusOffset,   // reg = deref(CFA + offset)
+        isCFAPlusOffset,   // reg = CFA + offset
+        atAFAPlusOffset,   // reg = deref(AFA + offset)
+        isAFAPlusOffset,   // reg = AFA + offset
+        inOtherRegister,   // reg = other reg
+        atDWARFExpression, // reg = deref(eval(dwarf_expr))
+        isDWARFExpression  // reg = eval(dwarf_expr)
+      };
+
+      RegisterLocation() : m_type(unspecified), m_location() {}
+
+      bool operator==(const RegisterLocation &rhs) const;
+
+      bool operator!=(const RegisterLocation &rhs) const {
+        return !(*this == rhs);
+      }
+
+      void SetUnspecified() { m_type = unspecified; }
+
+      void SetUndefined() { m_type = undefined; }
+
+      void SetSame() { m_type = same; }
+
+      bool IsSame() const { return m_type == same; }
+
+      bool IsUnspecified() const { return m_type == unspecified; }
+
+      bool IsUndefined() const { return m_type == undefined; }
+
+      bool IsCFAPlusOffset() const { return m_type == isCFAPlusOffset; }
+
+      bool IsAtCFAPlusOffset() const { return m_type == atCFAPlusOffset; }
+
+      bool IsAFAPlusOffset() const { return m_type == isAFAPlusOffset; }
+
+      bool IsAtAFAPlusOffset() const { return m_type == atAFAPlusOffset; }
+
+      bool IsInOtherRegister() const { return m_type == inOtherRegister; }
+
+      bool IsAtDWARFExpression() const { return m_type == atDWARFExpression; }
+
+      bool IsDWARFExpression() const { return m_type == isDWARFExpression; }
+
+      void SetAtCFAPlusOffset(int32_t offset) {
+        m_type = atCFAPlusOffset;
+        m_location.offset = offset;
+      }
+
+      void SetIsCFAPlusOffset(int32_t offset) {
+        m_type = isCFAPlusOffset;
+        m_location.offset = offset;
+      }
+
+      void SetAtAFAPlusOffset(int32_t offset) {
+        m_type = atAFAPlusOffset;
+        m_location.offset = offset;
+      }
+
+      void SetIsAFAPlusOffset(int32_t offset) {
+        m_type = isAFAPlusOffset;
+        m_location.offset = offset;
+      }
+
+      void SetInRegister(uint32_t reg_num) {
+        m_type = inOtherRegister;
+        m_location.reg_num = reg_num;
+      }
+
+      uint32_t GetRegisterNumber() const {
+        if (m_type == inOtherRegister)
+          return m_location.reg_num;
+        return LLDB_INVALID_REGNUM;
+      }
+
+      RestoreType GetLocationType() const { return m_type; }
+
+      int32_t GetOffset() const {
+        switch(m_type)
+        {
+        case atCFAPlusOffset:
+        case isCFAPlusOffset:
+        case atAFAPlusOffset:
+        case isAFAPlusOffset:
+          return m_location.offset;
+        default:
+          return 0;
+        }
+      }
+
+      void GetDWARFExpr(const uint8_t **opcodes, uint16_t &len) const {
+        if (m_type == atDWARFExpression || m_type == isDWARFExpression) {
+          *opcodes = m_location.expr.opcodes;
+          len = m_location.expr.length;
+        } else {
+          *opcodes = nullptr;
+          len = 0;
+        }
+      }
+
+      void SetAtDWARFExpression(const uint8_t *opcodes, uint32_t len);
+
+      void SetIsDWARFExpression(const uint8_t *opcodes, uint32_t len);
+
+      const uint8_t *GetDWARFExpressionBytes() {
+        if (m_type == atDWARFExpression || m_type == isDWARFExpression)
+          return m_location.expr.opcodes;
+        return nullptr;
+      }
+
+      int GetDWARFExpressionLength() {
+        if (m_type == atDWARFExpression || m_type == isDWARFExpression)
+          return m_location.expr.length;
+        return 0;
+      }
+
+      void Dump(Stream &s, const UnwindPlan *unwind_plan,
+                const UnwindPlan::Row *row, Thread *thread, bool verbose) const;
+
+    private:
+      RestoreType m_type; // How do we locate this register?
+      union {
+        // For m_type == atCFAPlusOffset or m_type == isCFAPlusOffset
+        int32_t offset;
+        // For m_type == inOtherRegister
+        uint32_t reg_num; // The register number
+        // For m_type == atDWARFExpression or m_type == isDWARFExpression
+        struct {
+          const uint8_t *opcodes;
+          uint16_t length;
+        } expr;
+      } m_location;
+    };
+
+    class FAValue {
+    public:
+      enum ValueType {
+        unspecified,            // not specified
+        isRegisterPlusOffset,   // FA = register + offset
+        isRegisterDereferenced, // FA = [reg]
+        isDWARFExpression       // FA = eval(dwarf_expr)
+      };
+
+      FAValue() : m_type(unspecified), m_value() {}
+
+      bool operator==(const FAValue &rhs) const;
+
+      bool operator!=(const FAValue &rhs) const { return !(*this == rhs); }
+
+      void SetUnspecified() { m_type = unspecified; }
+
+      bool IsUnspecified() const { return m_type == unspecified; }
+
+      bool IsRegisterPlusOffset() const {
+        return m_type == isRegisterPlusOffset;
+      }
+
+      void SetIsRegisterPlusOffset(uint32_t reg_num, int32_t offset) {
+        m_type = isRegisterPlusOffset;
+        m_value.reg.reg_num = reg_num;
+        m_value.reg.offset = offset;
+      }
+
+      bool IsRegisterDereferenced() const {
+        return m_type == isRegisterDereferenced;
+      }
+
+      void SetIsRegisterDereferenced(uint32_t reg_num) {
+        m_type = isRegisterDereferenced;
+        m_value.reg.reg_num = reg_num;
+      }
+
+      bool IsDWARFExpression() const { return m_type == isDWARFExpression; }
+
+      void SetIsDWARFExpression(const uint8_t *opcodes, uint32_t len) {
+        m_type = isDWARFExpression;
+        m_value.expr.opcodes = opcodes;
+        m_value.expr.length = len;
+      }
+
+      uint32_t GetRegisterNumber() const {
+        if (m_type == isRegisterDereferenced || m_type == isRegisterPlusOffset)
+          return m_value.reg.reg_num;
+        return LLDB_INVALID_REGNUM;
+      }
+
+      ValueType GetValueType() const { return m_type; }
+
+      int32_t GetOffset() const {
+        if (m_type == isRegisterPlusOffset)
+          return m_value.reg.offset;
+        return 0;
+      }
+
+      void IncOffset(int32_t delta) {
+        if (m_type == isRegisterPlusOffset)
+          m_value.reg.offset += delta;
+      }
+
+      void SetOffset(int32_t offset) {
+        if (m_type == isRegisterPlusOffset)
+          m_value.reg.offset = offset;
+      }
+
+      void GetDWARFExpr(const uint8_t **opcodes, uint16_t &len) const {
+        if (m_type == isDWARFExpression) {
+          *opcodes = m_value.expr.opcodes;
+          len = m_value.expr.length;
+        } else {
+          *opcodes = nullptr;
+          len = 0;
+        }
+      }
+
+      const uint8_t *GetDWARFExpressionBytes() {
+        if (m_type == isDWARFExpression)
+          return m_value.expr.opcodes;
+        return nullptr;
+      }
+
+      int GetDWARFExpressionLength() {
+        if (m_type == isDWARFExpression)
+          return m_value.expr.length;
+        return 0;
+      }
+
+      void Dump(Stream &s, const UnwindPlan *unwind_plan, Thread *thread) const;
+
+    private:
+      ValueType m_type; // How do we compute CFA value?
+      union {
+        struct {
+          // For m_type == isRegisterPlusOffset or m_type ==
+          // isRegisterDereferenced
+          uint32_t reg_num; // The register number
+          // For m_type == isRegisterPlusOffset
+          int32_t offset;
+        } reg;
+        // For m_type == isDWARFExpression
+        struct {
+          const uint8_t *opcodes;
+          uint16_t length;
+        } expr;
+      } m_value;
+    }; // class FAValue
+
+  public:
+    Row();
+
+    Row(const UnwindPlan::Row &rhs) = default;
+
+    bool operator==(const Row &rhs) const;
+
+    bool GetRegisterInfo(uint32_t reg_num,
+                         RegisterLocation &register_location) const;
+
+    void SetRegisterInfo(uint32_t reg_num,
+                         const RegisterLocation register_location);
+
+    void RemoveRegisterInfo(uint32_t reg_num);
+
+    lldb::addr_t GetOffset() const { return m_offset; }
+
+    void SetOffset(lldb::addr_t offset) { m_offset = offset; }
+
+    void SlideOffset(lldb::addr_t offset) { m_offset += offset; }
+
+    FAValue &GetCFAValue() { return m_cfa_value; }
+
+    FAValue &GetAFAValue() { return m_afa_value; }
+
+    bool SetRegisterLocationToAtCFAPlusOffset(uint32_t reg_num, int32_t offset,
+                                              bool can_replace);
+
+    bool SetRegisterLocationToIsCFAPlusOffset(uint32_t reg_num, int32_t offset,
+                                              bool can_replace);
+
+    bool SetRegisterLocationToUndefined(uint32_t reg_num, bool can_replace,
+                                        bool can_replace_only_if_unspecified);
+
+    bool SetRegisterLocationToUnspecified(uint32_t reg_num, bool can_replace);
+
+    bool SetRegisterLocationToRegister(uint32_t reg_num, uint32_t other_reg_num,
+                                       bool can_replace);
+
+    bool SetRegisterLocationToSame(uint32_t reg_num, bool must_replace);
+
+    void Clear();
+
+    void Dump(Stream &s, const UnwindPlan *unwind_plan, Thread *thread,
+              lldb::addr_t base_addr) const;
+
+  protected:
+    typedef std::map<uint32_t, RegisterLocation> collection;
+    lldb::addr_t m_offset; // Offset into the function for this row
+
+    FAValue m_cfa_value;
+    FAValue m_afa_value;
+    collection m_register_locations;
+  }; // class Row
+
+public:
+  typedef std::shared_ptr<Row> RowSP;
+
+  UnwindPlan(lldb::RegisterKind reg_kind)
+      : m_row_list(), m_plan_valid_address_range(), m_register_kind(reg_kind),
+        m_return_addr_register(LLDB_INVALID_REGNUM), m_source_name(),
+        m_plan_is_sourced_from_compiler(eLazyBoolCalculate),
+        m_plan_is_valid_at_all_instruction_locations(eLazyBoolCalculate),
+        m_lsda_address(), m_personality_func_addr() {}
+
+  // Performs a deep copy of the plan, including all the rows (expensive).
+  UnwindPlan(const UnwindPlan &rhs)
+      : m_plan_valid_address_range(rhs.m_plan_valid_address_range),
+        m_register_kind(rhs.m_register_kind),
+        m_return_addr_register(rhs.m_return_addr_register),
+        m_source_name(rhs.m_source_name),
+        m_plan_is_sourced_from_compiler(rhs.m_plan_is_sourced_from_compiler),
+        m_plan_is_valid_at_all_instruction_locations(
+            rhs.m_plan_is_valid_at_all_instruction_locations),
+        m_lsda_address(rhs.m_lsda_address),
+        m_personality_func_addr(rhs.m_personality_func_addr) {
+    m_row_list.reserve(rhs.m_row_list.size());
+    for (const RowSP &row_sp : rhs.m_row_list)
+      m_row_list.emplace_back(new Row(*row_sp));
+  }
+
+  ~UnwindPlan() = default;
+
+  void Dump(Stream &s, Thread *thread, lldb::addr_t base_addr) const;
+
+  void AppendRow(const RowSP &row_sp);
+
+  void InsertRow(const RowSP &row_sp, bool replace_existing = false);
+
+  // Returns a pointer to the best row for the given offset into the function's
+  // instructions. If offset is -1 it indicates that the function start is
+  // unknown - the final row in the UnwindPlan is returned. In practice, the
+  // UnwindPlan for a function with no known start address will be the
+  // architectural default UnwindPlan which will only have one row.
+  UnwindPlan::RowSP GetRowForFunctionOffset(int offset) const;
+
+  lldb::RegisterKind GetRegisterKind() const { return m_register_kind; }
+
+  void SetRegisterKind(lldb::RegisterKind kind) { m_register_kind = kind; }
+
+  void SetReturnAddressRegister(uint32_t regnum) {
+    m_return_addr_register = regnum;
+  }
+
+  uint32_t GetReturnAddressRegister(void) { return m_return_addr_register; }
+
+  uint32_t GetInitialCFARegister() const {
+    if (m_row_list.empty())
+      return LLDB_INVALID_REGNUM;
+    return m_row_list.front()->GetCFAValue().GetRegisterNumber();
+  }
+
+  // This UnwindPlan may not be valid at every address of the function span.
+  // For instance, a FastUnwindPlan will not be valid at the prologue setup
+  // instructions - only in the body of the function.
+  void SetPlanValidAddressRange(const AddressRange &range);
+
+  const AddressRange &GetAddressRange() const {
+    return m_plan_valid_address_range;
+  }
+
+  bool PlanValidAtAddress(Address addr);
+
+  bool IsValidRowIndex(uint32_t idx) const;
+
+  const UnwindPlan::RowSP GetRowAtIndex(uint32_t idx) const;
+
+  const UnwindPlan::RowSP GetLastRow() const;
+
+  lldb_private::ConstString GetSourceName() const;
+
+  void SetSourceName(const char *);
+
+  // Was this UnwindPlan emitted by a compiler?
+  lldb_private::LazyBool GetSourcedFromCompiler() const {
+    return m_plan_is_sourced_from_compiler;
+  }
+
+  // Was this UnwindPlan emitted by a compiler?
+  void SetSourcedFromCompiler(lldb_private::LazyBool from_compiler) {
+    m_plan_is_sourced_from_compiler = from_compiler;
+  }
+
+  // Is this UnwindPlan valid at all instructions?  If not, then it is assumed
+  // valid at call sites, e.g. for exception handling.
+  lldb_private::LazyBool GetUnwindPlanValidAtAllInstructions() const {
+    return m_plan_is_valid_at_all_instruction_locations;
+  }
+
+  // Is this UnwindPlan valid at all instructions?  If not, then it is assumed
+  // valid at call sites, e.g. for exception handling.
+  void SetUnwindPlanValidAtAllInstructions(
+      lldb_private::LazyBool valid_at_all_insn) {
+    m_plan_is_valid_at_all_instruction_locations = valid_at_all_insn;
+  }
+
+  int GetRowCount() const;
+
+  void Clear() {
+    m_row_list.clear();
+    m_plan_valid_address_range.Clear();
+    m_register_kind = lldb::eRegisterKindDWARF;
+    m_source_name.Clear();
+    m_plan_is_sourced_from_compiler = eLazyBoolCalculate;
+    m_plan_is_valid_at_all_instruction_locations = eLazyBoolCalculate;
+    m_lsda_address.Clear();
+    m_personality_func_addr.Clear();
+  }
+
+  const RegisterInfo *GetRegisterInfo(Thread *thread, uint32_t reg_num) const;
+
+  Address GetLSDAAddress() const { return m_lsda_address; }
+
+  void SetLSDAAddress(Address lsda_addr) { m_lsda_address = lsda_addr; }
+
+  Address GetPersonalityFunctionPtr() const { return m_personality_func_addr; }
+
+  void SetPersonalityFunctionPtr(Address presonality_func_ptr) {
+    m_personality_func_addr = presonality_func_ptr;
+  }
+
+private:
+  typedef std::vector<RowSP> collection;
+  collection m_row_list;
+  AddressRange m_plan_valid_address_range;
+  lldb::RegisterKind m_register_kind; // The RegisterKind these register numbers
+                                      // are in terms of - will need to be
+  // translated to lldb native reg nums at unwind time
+  uint32_t m_return_addr_register; // The register that has the return address
+                                   // for the caller frame
+                                   // e.g. the lr on arm
+  lldb_private::ConstString
+      m_source_name; // for logging, where this UnwindPlan originated from
+  lldb_private::LazyBool m_plan_is_sourced_from_compiler;
+  lldb_private::LazyBool m_plan_is_valid_at_all_instruction_locations;
+
+  Address m_lsda_address; // Where the language specific data area exists in the
+                          // module - used
+                          // in exception handling.
+  Address m_personality_func_addr; // The address of a pointer to the
+                                   // personality function - used in
+                                   // exception handling.
+};                                 // class UnwindPlan
+
+} // namespace lldb_private
+
+#endif // liblldb_UnwindPlan_h
diff --git a/linux-x64/clang/include/lldb/Symbol/UnwindTable.h b/linux-x64/clang/include/lldb/Symbol/UnwindTable.h
new file mode 100644
index 0000000..b4d7f06
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/UnwindTable.h
@@ -0,0 +1,84 @@
+//===-- UnwindTable.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UnwindTable_h
+#define liblldb_UnwindTable_h
+
+#include <map>
+#include <mutex>
+
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// A class which holds all the FuncUnwinders objects for a given ObjectFile.
+// The UnwindTable is populated with FuncUnwinders objects lazily during the
+// debug session.
+
+class UnwindTable {
+public:
+  /// Create an Unwind table using the data in the given module.
+  explicit UnwindTable(Module &module);
+
+  ~UnwindTable();
+
+  lldb_private::DWARFCallFrameInfo *GetEHFrameInfo();
+  lldb_private::DWARFCallFrameInfo *GetDebugFrameInfo();
+
+  lldb_private::CompactUnwindInfo *GetCompactUnwindInfo();
+
+  ArmUnwindInfo *GetArmUnwindInfo();
+  SymbolFile *GetSymbolFile();
+
+  lldb::FuncUnwindersSP GetFuncUnwindersContainingAddress(const Address &addr,
+                                                          SymbolContext &sc);
+
+  bool GetAllowAssemblyEmulationUnwindPlans();
+
+  // Normally when we create a new FuncUnwinders object we track it in this
+  // UnwindTable so it can be reused later.  But for the target modules show-
+  // unwind we want to create brand new UnwindPlans for the function of
+  // interest - so ignore any existing FuncUnwinders for that function and
+  // don't add this new one to our UnwindTable. This FuncUnwinders object does
+  // have a reference to the UnwindTable but the lifetime of this uncached
+  // FuncUnwinders is expected to be short so in practice this will not be a
+  // problem.
+  lldb::FuncUnwindersSP
+  GetUncachedFuncUnwindersContainingAddress(const Address &addr,
+                                            SymbolContext &sc);
+
+  ArchSpec GetArchitecture();
+
+private:
+  void Dump(Stream &s);
+
+  void Initialize();
+  llvm::Optional<AddressRange> GetAddressRange(const Address &addr,
+                                               SymbolContext &sc);
+
+  typedef std::map<lldb::addr_t, lldb::FuncUnwindersSP> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  Module &m_module;
+  collection m_unwinds;
+
+  bool m_initialized; // delay some initialization until ObjectFile is set up
+  std::mutex m_mutex;
+
+  std::unique_ptr<DWARFCallFrameInfo> m_eh_frame_up;
+  std::unique_ptr<DWARFCallFrameInfo> m_debug_frame_up;
+  std::unique_ptr<CompactUnwindInfo> m_compact_unwind_up;
+  std::unique_ptr<ArmUnwindInfo> m_arm_unwind_up;
+
+  DISALLOW_COPY_AND_ASSIGN(UnwindTable);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_UnwindTable_h
diff --git a/linux-x64/clang/include/lldb/Symbol/Variable.h b/linux-x64/clang/include/lldb/Symbol/Variable.h
new file mode 100644
index 0000000..12daecf
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/Variable.h
@@ -0,0 +1,137 @@
+//===-- Variable.h -----------------------------------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Variable_h_
+#define liblldb_Variable_h_
+
+#include "lldb/Core/Mangled.h"
+#include "lldb/Expression/DWARFExpression.h"
+#include "lldb/Symbol/Declaration.h"
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-private.h"
+#include <memory>
+#include <vector>
+
+namespace lldb_private {
+
+class Variable : public UserID, public std::enable_shared_from_this<Variable> {
+public:
+  typedef RangeVector<lldb::addr_t, lldb::addr_t> RangeList;
+
+  // Constructors and Destructors
+  Variable(lldb::user_id_t uid, const char *name,
+           const char
+               *mangled, // The mangled or fully qualified name of the variable.
+           const lldb::SymbolFileTypeSP &symfile_type_sp,
+           lldb::ValueType scope, SymbolContextScope *owner_scope,
+           const RangeList &scope_range, Declaration *decl,
+           const DWARFExpression &location, bool external, bool artificial,
+           bool static_member = false);
+
+  virtual ~Variable();
+
+  void Dump(Stream *s, bool show_context) const;
+
+  bool DumpDeclaration(Stream *s, bool show_fullpaths, bool show_module);
+
+  const Declaration &GetDeclaration() const { return m_declaration; }
+
+  ConstString GetName() const;
+
+  ConstString GetUnqualifiedName() const;
+
+  SymbolContextScope *GetSymbolContextScope() const { return m_owner_scope; }
+
+  // Since a variable can have a basename "i" and also a mangled named
+  // "_ZN12_GLOBAL__N_11iE" and a demangled mangled name "(anonymous
+  // namespace)::i", this function will allow a generic match function that can
+  // be called by commands and expression parsers to make sure we match
+  // anything we come across.
+  bool NameMatches(ConstString name) const;
+
+  bool NameMatches(const RegularExpression &regex) const;
+
+  Type *GetType();
+
+  lldb::LanguageType GetLanguage() const;
+
+  lldb::ValueType GetScope() const { return m_scope; }
+
+  bool IsExternal() const { return m_external; }
+
+  bool IsArtificial() const { return m_artificial; }
+
+  bool IsStaticMember() const { return m_static_member; }
+
+  DWARFExpression &LocationExpression() { return m_location; }
+
+  const DWARFExpression &LocationExpression() const { return m_location; }
+
+  bool DumpLocationForAddress(Stream *s, const Address &address);
+
+  size_t MemorySize() const;
+
+  void CalculateSymbolContext(SymbolContext *sc);
+
+  bool IsInScope(StackFrame *frame);
+
+  bool LocationIsValidForFrame(StackFrame *frame);
+
+  bool LocationIsValidForAddress(const Address &address);
+
+  bool GetLocationIsConstantValueData() const { return m_loc_is_const_data; }
+
+  void SetLocationIsConstantValueData(bool b) { m_loc_is_const_data = b; }
+
+  typedef size_t (*GetVariableCallback)(void *baton, const char *name,
+                                        VariableList &var_list);
+
+  static Status GetValuesForVariableExpressionPath(
+      llvm::StringRef variable_expr_path, ExecutionContextScope *scope,
+      GetVariableCallback callback, void *baton, VariableList &variable_list,
+      ValueObjectList &valobj_list);
+
+  static size_t AutoComplete(const ExecutionContext &exe_ctx,
+                             CompletionRequest &request);
+
+  CompilerDeclContext GetDeclContext();
+
+  CompilerDecl GetDecl();
+
+protected:
+  ConstString m_name; // The basename of the variable (no namespaces)
+  Mangled m_mangled;  // The mangled name of the variable
+  lldb::SymbolFileTypeSP m_symfile_type_sp; // The type pointer of the variable
+                                            // (int, struct, class, etc)
+  lldb::ValueType m_scope;                  // global, parameter, local
+  SymbolContextScope
+      *m_owner_scope; // The symbol file scope that this variable was defined in
+  RangeList m_scope_range; // The list of ranges inside the owner's scope where
+                           // this variable is valid
+  Declaration m_declaration;  // Declaration location for this item.
+  DWARFExpression m_location; // The location of this variable that can be fed
+                              // to DWARFExpression::Evaluate()
+  uint8_t m_external : 1,     // Visible outside the containing compile unit?
+      m_artificial : 1, // Non-zero if the variable is not explicitly declared
+                        // in source
+      m_loc_is_const_data : 1, // The m_location expression contains the
+                               // constant variable value data, not a DWARF
+                               // location
+      m_static_member : 1; // Non-zero if variable is static member of a class
+                           // or struct.
+private:
+  Variable(const Variable &rhs) = delete;
+  Variable &operator=(const Variable &rhs) = delete;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Variable_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/VariableList.h b/linux-x64/clang/include/lldb/Symbol/VariableList.h
new file mode 100644
index 0000000..54d2758
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/VariableList.h
@@ -0,0 +1,82 @@
+//===-- VariableList.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_VariableList_h_
+#define liblldb_VariableList_h_
+
+#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Symbol/Variable.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class VariableList {
+public:
+  // Constructors and Destructors
+  //  VariableList(const SymbolContext &symbol_context);
+  VariableList();
+  virtual ~VariableList();
+
+  void AddVariable(const lldb::VariableSP &var_sp);
+
+  bool AddVariableIfUnique(const lldb::VariableSP &var_sp);
+
+  void AddVariables(VariableList *variable_list);
+
+  void Clear();
+
+  void Dump(Stream *s, bool show_context) const;
+
+  lldb::VariableSP GetVariableAtIndex(size_t idx) const;
+
+  lldb::VariableSP RemoveVariableAtIndex(size_t idx);
+
+  lldb::VariableSP FindVariable(ConstString name,
+                                bool include_static_members = true);
+
+  lldb::VariableSP FindVariable(ConstString name,
+                                lldb::ValueType value_type,
+                                bool include_static_members = true);
+
+  uint32_t FindVariableIndex(const lldb::VariableSP &var_sp);
+
+  size_t AppendVariablesIfUnique(VariableList &var_list);
+
+  // Returns the actual number of unique variables that were added to the list.
+  // "total_matches" will get updated with the actually number of matches that
+  // were found regardless of whether they were unique or not to allow for
+  // error conditions when nothing is found, versus conditions where any
+  // variables that match "regex" were already in "var_list".
+  size_t AppendVariablesIfUnique(const RegularExpression &regex,
+                                 VariableList &var_list, size_t &total_matches);
+
+  size_t AppendVariablesWithScope(lldb::ValueType type, VariableList &var_list,
+                                  bool if_unique = true);
+
+  uint32_t FindIndexForVariable(Variable *variable);
+
+  size_t MemorySize() const;
+
+  size_t GetSize() const;
+  bool Empty() const { return m_variables.empty(); }
+
+protected:
+  typedef std::vector<lldb::VariableSP> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  collection m_variables;
+
+private:
+  // For VariableList only
+  DISALLOW_COPY_AND_ASSIGN(VariableList);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_VariableList_h_
diff --git a/linux-x64/clang/include/lldb/Symbol/VerifyDecl.h b/linux-x64/clang/include/lldb/Symbol/VerifyDecl.h
new file mode 100644
index 0000000..f412b94
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Symbol/VerifyDecl.h
@@ -0,0 +1,18 @@
+//===-- VerifyDecl.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_VariableList_h_
+#define lldb_VariableList_h_
+
+#include "lldb/Core/ClangForward.h"
+
+namespace lldb_private {
+void VerifyDecl(clang::Decl *decl);
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Target/ABI.h b/linux-x64/clang/include/lldb/Target/ABI.h
new file mode 100644
index 0000000..f254839
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ABI.h
@@ -0,0 +1,153 @@
+//===-- ABI.h ---------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ABI_h_
+#define liblldb_ABI_h_
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Symbol/UnwindPlan.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+
+// forward define the llvm::Type class
+namespace llvm {
+class Type;
+}
+
+namespace lldb_private {
+
+class ABI : public PluginInterface {
+public:
+  struct CallArgument {
+    enum eType {
+      HostPointer = 0, /* pointer to host data */
+      TargetValue,     /* value is on the target or literal */
+    };
+    eType type;  /* value of eType */
+    size_t size; /* size in bytes of this argument */
+
+    lldb::addr_t value;                 /* literal value */
+    std::unique_ptr<uint8_t[]> data_up; /* host data pointer */
+  };
+
+  ~ABI() override;
+
+  virtual size_t GetRedZoneSize() const = 0;
+
+  virtual bool PrepareTrivialCall(lldb_private::Thread &thread, lldb::addr_t sp,
+                                  lldb::addr_t functionAddress,
+                                  lldb::addr_t returnAddress,
+                                  llvm::ArrayRef<lldb::addr_t> args) const = 0;
+
+  // Prepare trivial call used from ThreadPlanFunctionCallUsingABI
+  // AD:
+  //  . Because i don't want to change other ABI's this is not declared pure
+  //  virtual.
+  //    The dummy implementation will simply fail.  Only HexagonABI will
+  //    currently
+  //    use this method.
+  //  . Two PrepareTrivialCall's is not good design so perhaps this should be
+  //  combined.
+  //
+  virtual bool PrepareTrivialCall(lldb_private::Thread &thread, lldb::addr_t sp,
+                                  lldb::addr_t functionAddress,
+                                  lldb::addr_t returnAddress,
+                                  llvm::Type &prototype,
+                                  llvm::ArrayRef<CallArgument> args) const;
+
+  virtual bool GetArgumentValues(Thread &thread, ValueList &values) const = 0;
+
+  lldb::ValueObjectSP GetReturnValueObject(Thread &thread, CompilerType &type,
+                                           bool persistent = true) const;
+
+  // specialized to work with llvm IR types
+  lldb::ValueObjectSP GetReturnValueObject(Thread &thread, llvm::Type &type,
+                                           bool persistent = true) const;
+
+  // Set the Return value object in the current frame as though a function with
+  virtual Status SetReturnValueObject(lldb::StackFrameSP &frame_sp,
+                                      lldb::ValueObjectSP &new_value) = 0;
+
+protected:
+  // This is the method the ABI will call to actually calculate the return
+  // value. Don't put it in a persistent value object, that will be done by the
+  // ABI::GetReturnValueObject.
+  virtual lldb::ValueObjectSP
+  GetReturnValueObjectImpl(Thread &thread, CompilerType &ast_type) const = 0;
+
+  // specialized to work with llvm IR types
+  virtual lldb::ValueObjectSP
+  GetReturnValueObjectImpl(Thread &thread, llvm::Type &ir_type) const;
+
+  /// Request to get a Process shared pointer.
+  ///
+  /// This ABI object may not have been created with a Process object,
+  /// or the Process object may no longer be alive.  Be sure to handle
+  /// the case where the shared pointer returned does not have an
+  /// object inside it.
+  lldb::ProcessSP GetProcessSP() const { return m_process_wp.lock(); }
+
+public:
+  virtual bool CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) = 0;
+
+  virtual bool CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) = 0;
+
+  virtual bool RegisterIsVolatile(const RegisterInfo *reg_info) = 0;
+
+  virtual bool
+  GetFallbackRegisterLocation(const RegisterInfo *reg_info,
+                              UnwindPlan::Row::RegisterLocation &unwind_regloc);
+
+  // Should take a look at a call frame address (CFA) which is just the stack
+  // pointer value upon entry to a function. ABIs usually impose alignment
+  // restrictions (4, 8 or 16 byte aligned), and zero is usually not allowed.
+  // This function should return true if "cfa" is valid call frame address for
+  // the ABI, and false otherwise. This is used by the generic stack frame
+  // unwinding code to help determine when a stack ends.
+  virtual bool CallFrameAddressIsValid(lldb::addr_t cfa) = 0;
+
+  // Validates a possible PC value and returns true if an opcode can be at
+  // "pc".
+  virtual bool CodeAddressIsValid(lldb::addr_t pc) = 0;
+
+  virtual lldb::addr_t FixCodeAddress(lldb::addr_t pc) {
+    // Some targets might use bits in a code address to indicate a mode switch.
+    // ARM uses bit zero to signify a code address is thumb, so any ARM ABI
+    // plug-ins would strip those bits.
+    return pc;
+  }
+
+  virtual const RegisterInfo *GetRegisterInfoArray(uint32_t &count) = 0;
+
+  bool GetRegisterInfoByName(ConstString name, RegisterInfo &info);
+
+  bool GetRegisterInfoByKind(lldb::RegisterKind reg_kind, uint32_t reg_num,
+                             RegisterInfo &info);
+
+  virtual bool GetPointerReturnRegister(const char *&name) { return false; }
+
+  static lldb::ABISP FindPlugin(lldb::ProcessSP process_sp, const ArchSpec &arch);
+
+protected:
+  // Classes that inherit from ABI can see and modify these
+  ABI(lldb::ProcessSP process_sp) {
+    if (process_sp.get())
+        m_process_wp = process_sp;
+  }
+
+  lldb::ProcessWP m_process_wp;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ABI);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ABI_h_
diff --git a/linux-x64/clang/include/lldb/Target/CPPLanguageRuntime.h b/linux-x64/clang/include/lldb/Target/CPPLanguageRuntime.h
new file mode 100644
index 0000000..2852636
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/CPPLanguageRuntime.h
@@ -0,0 +1,90 @@
+//===-- CPPLanguageRuntime.h
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CPPLanguageRuntime_h_
+#define liblldb_CPPLanguageRuntime_h_
+
+#include <vector>
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Target/LanguageRuntime.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class CPPLanguageRuntime : public LanguageRuntime {
+public:
+  enum class LibCppStdFunctionCallableCase {
+    Lambda = 0,
+    CallableObject,
+    FreeOrMemberFunction,
+    Invalid
+  };
+
+  struct LibCppStdFunctionCallableInfo {
+    Symbol callable_symbol;
+    Address callable_address;
+    LineEntry callable_line_entry;
+    lldb::addr_t member__f_pointer_value = 0u;
+    LibCppStdFunctionCallableCase callable_case =
+        LibCppStdFunctionCallableCase::Invalid;
+  };
+
+  LibCppStdFunctionCallableInfo
+  FindLibCppStdFunctionCallableInfo(lldb::ValueObjectSP &valobj_sp);
+
+  ~CPPLanguageRuntime() override;
+
+  static char ID;
+
+  bool isA(const void *ClassID) const override {
+    return ClassID == &ID || LanguageRuntime::isA(ClassID);
+  }
+
+  static bool classof(const LanguageRuntime *runtime) {
+    return runtime->isA(&ID);
+  }
+
+  lldb::LanguageType GetLanguageType() const override {
+    return lldb::eLanguageTypeC_plus_plus;
+  }
+
+  static CPPLanguageRuntime *Get(Process &process) {
+    return llvm::cast_or_null<CPPLanguageRuntime>(
+        process.GetLanguageRuntime(lldb::eLanguageTypeC_plus_plus));
+  }
+
+  bool GetObjectDescription(Stream &str, ValueObject &object) override;
+
+  bool GetObjectDescription(Stream &str, Value &value,
+                            ExecutionContextScope *exe_scope) override;
+
+  /// Obtain a ThreadPlan to get us into C++ constructs such as std::function.
+  ///
+  /// \param[in] thread
+  ///     Curent thrad of execution.
+  ///
+  /// \param[in] stop_others
+  ///     True if other threads should pause during execution.
+  ///
+  /// \return
+  ///      A ThreadPlan Shared pointer
+  lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread,
+                                                  bool stop_others) override;
+
+  bool IsWhitelistedRuntimeValue(ConstString name) override;
+protected:
+  // Classes that inherit from CPPLanguageRuntime can see and modify these
+  CPPLanguageRuntime(Process *process);
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(CPPLanguageRuntime);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CPPLanguageRuntime_h_
diff --git a/linux-x64/clang/include/lldb/Target/DynamicLoader.h b/linux-x64/clang/include/lldb/Target/DynamicLoader.h
new file mode 100644
index 0000000..2bf3f32
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/DynamicLoader.h
@@ -0,0 +1,322 @@
+//===-- DynamicLoader.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DynamicLoader_h_
+#define liblldb_DynamicLoader_h_
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/UUID.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+namespace lldb_private {
+class ModuleList;
+class Process;
+class SectionList;
+class Symbol;
+class SymbolContext;
+class SymbolContextList;
+class Thread;
+}
+
+namespace lldb_private {
+
+/// \class DynamicLoader DynamicLoader.h "lldb/Target/DynamicLoader.h"
+/// A plug-in interface definition class for dynamic loaders.
+///
+/// Dynamic loader plug-ins track image (shared library) loading and
+/// unloading. The class is initialized given a live process that is halted at
+/// its entry point or just after attaching.
+///
+/// Dynamic loader plug-ins can track the process by registering callbacks
+/// using the: Process::RegisterNotificationCallbacks (const Notifications&)
+/// function.
+///
+/// Breakpoints can also be set in the process which can register functions
+/// that get called using: Process::BreakpointSetCallback (lldb::user_id_t,
+/// BreakpointHitCallback, void *). These breakpoint callbacks return a
+/// boolean value that indicates if the process should continue or halt and
+/// should return the global setting for this using:
+/// DynamicLoader::StopWhenImagesChange() const.
+class DynamicLoader : public PluginInterface {
+public:
+  /// Find a dynamic loader plugin for a given process.
+  ///
+  /// Scans the installed DynamicLoader plug-ins and tries to find an instance
+  /// that can be used to track image changes in \a process.
+  ///
+  /// \param[in] process
+  ///     The process for which to try and locate a dynamic loader
+  ///     plug-in instance.
+  ///
+  /// \param[in] plugin_name
+  ///     An optional name of a specific dynamic loader plug-in that
+  ///     should be used. If NULL, pick the best plug-in.
+  static DynamicLoader *FindPlugin(Process *process, const char *plugin_name);
+
+  /// Construct with a process.
+  DynamicLoader(Process *process);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class is designed to be inherited
+  /// from by the plug-in instance.
+  ~DynamicLoader() override;
+
+  /// Called after attaching a process.
+  ///
+  /// Allow DynamicLoader plug-ins to execute some code after attaching to a
+  /// process.
+  virtual void DidAttach() = 0;
+
+  /// Called after launching a process.
+  ///
+  /// Allow DynamicLoader plug-ins to execute some code after the process has
+  /// stopped for the first time on launch.
+  virtual void DidLaunch() = 0;
+
+  /// Helper function that can be used to detect when a process has called
+  /// exec and is now a new and different process. This can be called when
+  /// necessary to try and detect the exec. The process might be able to
+  /// answer this question, but sometimes it might not be able and the dynamic
+  /// loader often knows what the program entry point is. So the process and
+  /// the dynamic loader can work together to detect this.
+  virtual bool ProcessDidExec() { return false; }
+  /// Get whether the process should stop when images change.
+  ///
+  /// When images (executables and shared libraries) get loaded or unloaded,
+  /// often debug sessions will want to try and resolve or unresolve
+  /// breakpoints that are set in these images. Any breakpoints set by
+  /// DynamicLoader plug-in instances should return this value to ensure
+  /// consistent debug session behaviour.
+  ///
+  /// \return
+  ///     Returns \b true if the process should stop when images
+  ///     change, \b false if the process should resume.
+  bool GetStopWhenImagesChange() const;
+
+  /// Set whether the process should stop when images change.
+  ///
+  /// When images (executables and shared libraries) get loaded or unloaded,
+  /// often debug sessions will want to try and resolve or unresolve
+  /// breakpoints that are set in these images. The default is set so that the
+  /// process stops when images change, but this can be overridden using this
+  /// function callback.
+  ///
+  /// \param[in] stop
+  ///     Boolean value that indicates whether the process should stop
+  ///     when images change.
+  void SetStopWhenImagesChange(bool stop);
+
+  /// Provides a plan to step through the dynamic loader trampoline for the
+  /// current state of \a thread.
+  ///
+  ///
+  /// \param[in] stop_others
+  ///     Whether the plan should be set to stop other threads.
+  ///
+  /// \return
+  ///    A pointer to the plan (caller owned) or NULL if we are not at such
+  ///    a trampoline.
+  virtual lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread,
+                                                          bool stop_others) = 0;
+
+  /// Some dynamic loaders provide features where there are a group of symbols
+  /// "equivalent to" a given symbol one of which will be chosen when the
+  /// symbol is bound.  If you want to set a breakpoint on one of these
+  /// symbols, you really need to set it on all the equivalent symbols.
+  ///
+  ///
+  /// \param[in] original_symbol
+  ///     The symbol for which we are finding equivalences.
+  ///
+  /// \param[in] module_list
+  ///     The set of modules in which to search.
+  ///
+  /// \param[out] equivalent_symbols
+  ///     The equivalent symbol list - any equivalent symbols found are appended
+  ///     to this list.
+  ///
+  /// \return
+  ///    Number of equivalent symbols found.
+  virtual size_t FindEquivalentSymbols(Symbol *original_symbol,
+                                       ModuleList &module_list,
+                                       SymbolContextList &equivalent_symbols) {
+    return 0;
+  }
+
+  /// Ask if it is ok to try and load or unload an shared library (image).
+  ///
+  /// The dynamic loader often knows when it would be ok to try and load or
+  /// unload a shared library. This function call allows the dynamic loader
+  /// plug-ins to check any current dyld state to make sure it is an ok time
+  /// to load a shared library.
+  ///
+  /// \return
+  ///     \b true if it is currently ok to try and load a shared
+  ///     library into the process, \b false otherwise.
+  virtual Status CanLoadImage() = 0;
+
+  /// Ask if the eh_frame information for the given SymbolContext should be
+  /// relied on even when it's the first frame in a stack unwind.
+  ///
+  /// The CFI instructions from the eh_frame section are normally only valid
+  /// at call sites -- places where a program could throw an exception and
+  /// need to unwind out.  But some Modules may be known to the system as
+  /// having reliable eh_frame information at all call sites.  This would be
+  /// the case if the Module's contents are largely hand-written assembly with
+  /// hand-written eh_frame information. Normally when unwinding from a
+  /// function at the beginning of a stack unwind lldb will examine the
+  /// assembly instructions to understand how the stack frame is set up and
+  /// where saved registers are stored. But with hand-written assembly this is
+  /// not reliable enough -- we need to consult those function's hand-written
+  /// eh_frame information.
+  ///
+  /// \return
+  ///     \b True if the symbol context should use eh_frame instructions
+  ///     unconditionally when unwinding from this frame.  Else \b false,
+  ///     the normal lldb unwind behavior of only using eh_frame when the
+  ///     function appears in the middle of the stack.
+  virtual bool AlwaysRelyOnEHUnwindInfo(SymbolContext &sym_ctx) {
+    return false;
+  }
+
+  /// Retrieves the per-module TLS block for a given thread.
+  ///
+  /// \param[in] module
+  ///     The module to query TLS data for.
+  ///
+  /// \param[in] thread
+  ///     The specific thread to query TLS data for.
+  ///
+  /// \return
+  ///     If the given thread has TLS data allocated for the
+  ///     module, the address of the TLS block. Otherwise
+  ///     LLDB_INVALID_ADDRESS is returned.
+  virtual lldb::addr_t GetThreadLocalData(const lldb::ModuleSP module,
+                                          const lldb::ThreadSP thread,
+                                          lldb::addr_t tls_file_addr) {
+    return LLDB_INVALID_ADDRESS;
+  }
+
+  /// Locates or creates a module given by \p file and updates/loads the
+  /// resulting module at the virtual base address \p base_addr.
+  virtual lldb::ModuleSP LoadModuleAtAddress(const lldb_private::FileSpec &file,
+                                             lldb::addr_t link_map_addr,
+                                             lldb::addr_t base_addr,
+                                             bool base_addr_is_offset);
+
+  /// Get information about the shared cache for a process, if possible.
+  ///
+  /// On some systems (e.g. Darwin based systems), a set of libraries that are
+  /// common to most processes may be put in a single region of memory and
+  /// mapped into every process, this is called the shared cache, as a
+  /// performance optimization.
+  ///
+  /// Many targets will not have the concept of a shared cache.
+  ///
+  /// Depending on how the DynamicLoader gathers information about the shared
+  /// cache, it may be able to only return basic information - like the UUID
+  /// of the cache - or it may be able to return additional information about
+  /// the cache.
+  ///
+  /// \param[out] base_address
+  ///     The base address (load address) of the shared cache.
+  ///     LLDB_INVALID_ADDRESS if it cannot be determined.
+  ///
+  /// \param[out] uuid
+  ///     The UUID of the shared cache, if it can be determined.
+  ///     If the UUID cannot be fetched, IsValid() will be false.
+  ///
+  /// \param[out] using_shared_cache
+  ///     If this process is using a shared cache.
+  ///     If unknown, eLazyBoolCalculate is returned.
+  ///
+  /// \param[out] private_shared_cache
+  ///     A LazyBool indicating whether this process is using a
+  ///     private shared cache.
+  ///     If this information cannot be fetched, eLazyBoolCalculate.
+  ///
+  /// \return
+  ///     Returns false if this DynamicLoader cannot gather information
+  ///     about the shared cache / has no concept of a shared cache.
+  virtual bool GetSharedCacheInformation(lldb::addr_t &base_address, UUID &uuid,
+                                         LazyBool &using_shared_cache,
+                                         LazyBool &private_shared_cache) {
+    base_address = LLDB_INVALID_ADDRESS;
+    uuid.Clear();
+    using_shared_cache = eLazyBoolCalculate;
+    private_shared_cache = eLazyBoolCalculate;
+    return false;
+  }
+
+protected:
+  // Utility methods for derived classes
+
+  /// Checks to see if the target module has changed, updates the target
+  /// accordingly and returns the target executable module.
+  lldb::ModuleSP GetTargetExecutable();
+
+  /// Updates the load address of every allocatable section in \p module.
+  ///
+  /// \param module The module to traverse.
+  ///
+  /// \param link_map_addr The virtual address of the link map for the @p
+  /// module.
+  ///
+  /// \param base_addr The virtual base address \p module is loaded at.
+  virtual void UpdateLoadedSections(lldb::ModuleSP module,
+                                    lldb::addr_t link_map_addr,
+                                    lldb::addr_t base_addr,
+                                    bool base_addr_is_offset);
+
+  // Utility method so base classes can share implementation of
+  // UpdateLoadedSections
+  void UpdateLoadedSectionsCommon(lldb::ModuleSP module, lldb::addr_t base_addr,
+                                  bool base_addr_is_offset);
+
+  /// Removes the loaded sections from the target in \p module.
+  ///
+  /// \param module The module to traverse.
+  virtual void UnloadSections(const lldb::ModuleSP module);
+
+  // Utility method so base classes can share implementation of UnloadSections
+  void UnloadSectionsCommon(const lldb::ModuleSP module);
+
+  const lldb_private::SectionList *
+  GetSectionListFromModule(const lldb::ModuleSP module) const;
+
+  // Read an unsigned int of the given size from memory at the given addr.
+  // Return -1 if the read fails, otherwise return the result as an int64_t.
+  int64_t ReadUnsignedIntWithSizeInBytes(lldb::addr_t addr, int size_in_bytes);
+
+  // Read a pointer from memory at the given addr. Return LLDB_INVALID_ADDRESS
+  // if the read fails.
+  lldb::addr_t ReadPointer(lldb::addr_t addr);
+  
+  // Calls into the Process protected method LoadOperatingSystemPlugin:
+  void LoadOperatingSystemPlugin(bool flush);
+
+
+  // Member variables.
+  Process
+      *m_process; ///< The process that this dynamic loader plug-in is tracking.
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(DynamicLoader);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_DynamicLoader_h_
diff --git a/linux-x64/clang/include/lldb/Target/ExecutionContext.h b/linux-x64/clang/include/lldb/Target/ExecutionContext.h
new file mode 100644
index 0000000..0819357
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ExecutionContext.h
@@ -0,0 +1,568 @@
+//===-- ExecutionContext.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ExecutionContext_h_
+#define liblldb_ExecutionContext_h_
+
+#include <mutex>
+
+#include "lldb/Target/StackID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+//===----------------------------------------------------------------------===//
+/// Execution context objects refer to objects in the execution of the program
+/// that is being debugged. The consist of one or more of the following
+/// objects: target, process, thread, and frame. Many objects in the debugger
+/// need to track different executions contexts. For example, a local function
+/// variable might have an execution context that refers to a stack frame. A
+/// global or static variable might refer to a target since a stack frame
+/// isn't required in order to evaluate a global or static variable (a process
+/// isn't necessarily needed for a global variable since we might be able to
+/// read the variable value from a data section in one of the object files in
+/// a target). There are two types of objects that hold onto execution
+/// contexts: ExecutionContextRef and ExecutionContext. Both of these objects
+/// are described below.
+///
+/// Not all objects in an ExecutionContext objects will be valid. If you want
+/// to refer strongly (ExecutionContext) or weakly (ExecutionContextRef) to a
+/// process, then only the process and target references will be valid. For
+/// threads, only the thread, process and target references will be filled in.
+/// For frames, all of the objects will be filled in.
+///
+/// These classes are designed to be used as baton objects that get passed to
+/// a wide variety of functions that require execution contexts.
+//===----------------------------------------------------------------------===//
+
+/// \class ExecutionContextRef ExecutionContext.h
+/// "lldb/Target/ExecutionContext.h"
+/// A class that holds a weak reference to an execution context.
+///
+/// ExecutionContextRef objects are designed to hold onto an execution context
+/// that might change over time. For example, if an object wants to refer to a
+/// stack frame, it should hold onto an ExecutionContextRef to a frame object.
+/// The backing object that represents the stack frame might change over time
+/// and instances of this object can track the logical object that refers to a
+/// frame even if it does change.
+///
+/// These objects also don't keep execution objects around longer than they
+/// should since they use weak pointers. For example if an object refers to a
+/// stack frame and a stack frame is no longer in a thread, then a
+/// ExecutionContextRef object that refers to that frame will not be able to
+/// get a shared pointer to those objects since they are no longer around.
+///
+/// ExecutionContextRef objects can also be used as objects in classes that
+/// want to track a "previous execution context". Since the weak references to
+/// the execution objects (target, process, thread and frame) don't keep these
+/// objects around, they are safe to keep around.
+///
+/// The general rule of thumb is all long lived objects that want to refer to
+/// execution contexts should use ExecutionContextRef objects. The
+/// ExecutionContext class is used to temporarily get shared pointers to any
+/// execution context objects that are still around so they are guaranteed to
+/// exist during a function that requires the objects. ExecutionContext
+/// objects should NOT be used for long term storage since they will keep
+/// objects alive with extra shared pointer references to these  objects.
+class ExecutionContextRef {
+public:
+  /// Default Constructor.
+  ExecutionContextRef();
+
+  /// Copy Constructor.
+  ExecutionContextRef(const ExecutionContextRef &rhs);
+
+  /// Construct using an ExecutionContext object that might be nullptr.
+  ///
+  /// If \a exe_ctx_ptr is valid, then make weak references to any valid
+  /// objects in the ExecutionContext, otherwise no weak references to any
+  /// execution context objects will be made.
+  ExecutionContextRef(const ExecutionContext *exe_ctx_ptr);
+
+  /// Construct using an ExecutionContext object.
+  ///
+  /// Make weak references to any valid objects in the ExecutionContext.
+  ExecutionContextRef(const ExecutionContext &exe_ctx);
+
+  /// Construct using the target and all the selected items inside of it (the
+  /// process and its selected thread, and the thread's selected frame). If
+  /// there is no selected thread, default to the first thread If there is no
+  /// selected frame, default to the first frame.
+  ExecutionContextRef(Target *target, bool adopt_selected);
+
+  /// Construct using an execution context scope.
+  ///
+  /// If the ExecutionContextScope object is valid and refers to a frame, make
+  /// weak references too the frame, thread, process and target. If the
+  /// ExecutionContextScope object is valid and refers to a thread, make weak
+  /// references too the thread, process and target. If the
+  /// ExecutionContextScope object is valid and refers to a process, make weak
+  /// references too the process and target. If the ExecutionContextScope
+  /// object is valid and refers to a target, make weak references too the
+  /// target.
+  ExecutionContextRef(ExecutionContextScope *exe_scope);
+
+  /// Construct using an execution context scope.
+  ///
+  /// If the ExecutionContextScope object refers to a frame, make weak
+  /// references too the frame, thread, process and target. If the
+  /// ExecutionContextScope object refers to a thread, make weak references
+  /// too the thread, process and target. If the ExecutionContextScope object
+  /// refers to a process, make weak references too the process and target. If
+  /// the ExecutionContextScope object refers to a target, make weak
+  /// references too the target.
+  ExecutionContextRef(ExecutionContextScope &exe_scope);
+
+  ~ExecutionContextRef();
+
+  /// Assignment operator
+  ///
+  /// Copy all weak references in \a rhs.
+  ExecutionContextRef &operator=(const ExecutionContextRef &rhs);
+
+  /// Assignment operator from a ExecutionContext
+  ///
+  /// Make weak references to any strongly referenced objects in \a exe_ctx.
+  ExecutionContextRef &operator=(const ExecutionContext &exe_ctx);
+
+  /// Clear the object's state.
+  ///
+  /// Sets the process and thread to nullptr, and the frame index to an
+  /// invalid value.
+  void Clear();
+
+  /// Set accessor that creates a weak reference to the target referenced in
+  /// \a target_sp.
+  ///
+  /// If \a target_sp is valid this object will create a weak reference to
+  /// that object, otherwise any previous target weak reference contained in
+  /// this object will be reset.
+  ///
+  /// Only the weak reference to the target will be updated, no other weak
+  /// references will be modified. If you want this execution context to make
+  /// a weak reference to the target's process, use the
+  /// ExecutionContextRef::SetContext() functions.
+  ///
+  /// \see ExecutionContextRef::SetContext(const lldb::TargetSP &, bool)
+  void SetTargetSP(const lldb::TargetSP &target_sp);
+
+  /// Set accessor that creates a weak reference to the process referenced in
+  /// \a process_sp.
+  ///
+  /// If \a process_sp is valid this object will create a weak reference to
+  /// that object, otherwise any previous process weak reference contained in
+  /// this object will be reset.
+  ///
+  /// Only the weak reference to the process will be updated, no other weak
+  /// references will be modified. If you want this execution context to make
+  /// a weak reference to the target, use the
+  /// ExecutionContextRef::SetContext() functions.
+  ///
+  /// \see ExecutionContextRef::SetContext(const lldb::ProcessSP &)
+  void SetProcessSP(const lldb::ProcessSP &process_sp);
+
+  /// Set accessor that creates a weak reference to the thread referenced in
+  /// \a thread_sp.
+  ///
+  /// If \a thread_sp is valid this object will create a weak reference to
+  /// that object, otherwise any previous thread weak reference contained in
+  /// this object will be reset.
+  ///
+  /// Only the weak reference to the thread will be updated, no other weak
+  /// references will be modified. If you want this execution context to make
+  /// a weak reference to the thread's process and target, use the
+  /// ExecutionContextRef::SetContext() functions.
+  ///
+  /// \see ExecutionContextRef::SetContext(const lldb::ThreadSP &)
+  void SetThreadSP(const lldb::ThreadSP &thread_sp);
+
+  /// Set accessor that creates a weak reference to the frame referenced in \a
+  /// frame_sp.
+  ///
+  /// If \a frame_sp is valid this object will create a weak reference to that
+  /// object, otherwise any previous frame weak reference contained in this
+  /// object will be reset.
+  ///
+  /// Only the weak reference to the frame will be updated, no other weak
+  /// references will be modified. If you want this execution context to make
+  /// a weak reference to the frame's thread, process and target, use the
+  /// ExecutionContextRef::SetContext() functions.
+  ///
+  /// \see ExecutionContextRef::SetContext(const lldb::StackFrameSP &)
+  void SetFrameSP(const lldb::StackFrameSP &frame_sp);
+
+  void SetTargetPtr(Target *target, bool adopt_selected);
+
+  void SetProcessPtr(Process *process);
+
+  void SetThreadPtr(Thread *thread);
+
+  void SetFramePtr(StackFrame *frame);
+
+  /// Get accessor that creates a strong reference from the weak target
+  /// reference contained in this object.
+  ///
+  /// \returns
+  ///     A shared pointer to a target that is not guaranteed to be valid.
+  lldb::TargetSP GetTargetSP() const;
+
+  /// Get accessor that creates a strong reference from the weak process
+  /// reference contained in this object.
+  ///
+  /// \returns
+  ///     A shared pointer to a process that is not guaranteed to be valid.
+  lldb::ProcessSP GetProcessSP() const;
+
+  /// Get accessor that creates a strong reference from the weak thread
+  /// reference contained in this object.
+  ///
+  /// \returns
+  ///     A shared pointer to a thread that is not guaranteed to be valid.
+  lldb::ThreadSP GetThreadSP() const;
+
+  /// Get accessor that creates a strong reference from the weak frame
+  /// reference contained in this object.
+  ///
+  /// \returns
+  ///     A shared pointer to a frame that is not guaranteed to be valid.
+  lldb::StackFrameSP GetFrameSP() const;
+
+  /// Create an ExecutionContext object from this object.
+  ///
+  /// Create strong references to any execution context objects that are still
+  /// valid. Any of the returned shared pointers in the ExecutionContext
+  /// objects is not guaranteed to be valid. \returns
+  ///     An execution context object that has strong references to
+  ///     any valid weak references in this object.
+  ExecutionContext Lock(bool thread_and_frame_only_if_stopped) const;
+
+  /// Returns true if this object has a weak reference to a thread. The return
+  /// value is only an indication of whether this object has a weak reference
+  /// and does not indicate whether the weak reference is valid or not.
+  bool HasThreadRef() const { return m_tid != LLDB_INVALID_THREAD_ID; }
+
+  /// Returns true if this object has a weak reference to a frame. The return
+  /// value is only an indication of whether this object has a weak reference
+  /// and does not indicate whether the weak reference is valid or not.
+  bool HasFrameRef() const { return m_stack_id.IsValid(); }
+
+  void ClearThread() {
+    m_thread_wp.reset();
+    m_tid = LLDB_INVALID_THREAD_ID;
+  }
+
+  void ClearFrame() { m_stack_id.Clear(); }
+
+protected:
+  // Member variables
+  lldb::TargetWP m_target_wp;         ///< A weak reference to a target
+  lldb::ProcessWP m_process_wp;       ///< A weak reference to a process
+  mutable lldb::ThreadWP m_thread_wp; ///< A weak reference to a thread
+  lldb::tid_t m_tid;  ///< The thread ID that this object refers to in case the
+                      ///backing object changes
+  StackID m_stack_id; ///< The stack ID that this object refers to in case the
+                      ///backing object changes
+};
+
+/// \class ExecutionContext ExecutionContext.h
+/// "lldb/Target/ExecutionContext.h"
+/// A class that contains an execution context.
+///
+/// This baton object can be passed into any function that requires a context
+/// that specifies a target, process, thread and frame. These objects are
+/// designed to be used for short term execution context object storage while
+/// a function might be trying to evaluate something that requires a thread or
+/// frame. ExecutionContextRef objects can be used to initialize one of these
+/// objects to turn the weak execution context object references to the
+/// target, process, thread and frame into strong references (shared pointers)
+/// so that functions can guarantee that these objects won't go away in the
+/// middle of a function.
+///
+/// ExecutionContext objects should be used as short lived objects (typically
+/// on the stack) in order to lock down an execution context for local use and
+/// for passing down to other functions that also require specific contexts.
+/// They should NOT be used for long term storage, for long term storage use
+/// ExecutionContextRef objects.
+class ExecutionContext {
+public:
+  /// Default Constructor.
+  ExecutionContext();
+
+  // Copy constructor
+  ExecutionContext(const ExecutionContext &rhs);
+
+  // Adopt the target and optionally its current context.
+  ExecutionContext(Target *t, bool fill_current_process_thread_frame = true);
+
+  // Create execution contexts from shared pointers
+  ExecutionContext(const lldb::TargetSP &target_sp, bool get_process);
+  ExecutionContext(const lldb::ProcessSP &process_sp);
+  ExecutionContext(const lldb::ThreadSP &thread_sp);
+  ExecutionContext(const lldb::StackFrameSP &frame_sp);
+
+  // Create execution contexts from weak pointers
+  ExecutionContext(const lldb::TargetWP &target_wp, bool get_process);
+  ExecutionContext(const lldb::ProcessWP &process_wp);
+  ExecutionContext(const lldb::ThreadWP &thread_wp);
+  ExecutionContext(const lldb::StackFrameWP &frame_wp);
+  ExecutionContext(const ExecutionContextRef &exe_ctx_ref);
+  ExecutionContext(const ExecutionContextRef *exe_ctx_ref,
+                   bool thread_and_frame_only_if_stopped = false);
+
+  // These two variants take in a locker, and grab the target, lock the API
+  // mutex into locker, then fill in the rest of the shared pointers.
+  ExecutionContext(const ExecutionContextRef &exe_ctx_ref,
+                   std::unique_lock<std::recursive_mutex> &locker);
+  ExecutionContext(const ExecutionContextRef *exe_ctx_ref,
+                   std::unique_lock<std::recursive_mutex> &locker);
+  // Create execution contexts from execution context scopes
+  ExecutionContext(ExecutionContextScope *exe_scope);
+  ExecutionContext(ExecutionContextScope &exe_scope);
+
+  /// Construct with process, thread, and frame index.
+  ///
+  /// Initialize with process \a p, thread \a t, and frame index \a f.
+  ///
+  /// \param[in] process
+  ///     The process for this execution context.
+  ///
+  /// \param[in] thread
+  ///     The thread for this execution context.
+  ///
+  /// \param[in] frame
+  ///     The frame index for this execution context.
+  ExecutionContext(Process *process, Thread *thread = nullptr,
+                   StackFrame *frame = nullptr);
+
+  ~ExecutionContext();
+
+  ExecutionContext &operator=(const ExecutionContext &rhs);
+
+  bool operator==(const ExecutionContext &rhs) const;
+
+  bool operator!=(const ExecutionContext &rhs) const;
+
+  /// Clear the object's state.
+  ///
+  /// Sets the process and thread to nullptr, and the frame index to an
+  /// invalid value.
+  void Clear();
+
+  RegisterContext *GetRegisterContext() const;
+
+  ExecutionContextScope *GetBestExecutionContextScope() const;
+
+  uint32_t GetAddressByteSize() const;
+
+  lldb::ByteOrder GetByteOrder() const;
+
+  /// Returns a pointer to the target object.
+  ///
+  /// The returned pointer might be nullptr. Calling HasTargetScope(),
+  /// HasProcessScope(), HasThreadScope(), or HasFrameScope() can help to pre-
+  /// validate this pointer so that this accessor can freely be used without
+  /// having to check for nullptr each time.
+  ///
+  /// \see ExecutionContext::HasTargetScope() const @see
+  /// ExecutionContext::HasProcessScope() const @see
+  /// ExecutionContext::HasThreadScope() const @see
+  /// ExecutionContext::HasFrameScope() const
+  Target *GetTargetPtr() const;
+
+  /// Returns a pointer to the process object.
+  ///
+  /// The returned pointer might be nullptr. Calling HasProcessScope(),
+  /// HasThreadScope(), or HasFrameScope()  can help to pre-validate this
+  /// pointer so that this accessor can freely be used without having to check
+  /// for nullptr each time.
+  ///
+  /// \see ExecutionContext::HasProcessScope() const @see
+  /// ExecutionContext::HasThreadScope() const @see
+  /// ExecutionContext::HasFrameScope() const
+  Process *GetProcessPtr() const;
+
+  /// Returns a pointer to the thread object.
+  ///
+  /// The returned pointer might be nullptr. Calling HasThreadScope() or
+  /// HasFrameScope() can help to pre-validate this pointer so that this
+  /// accessor can freely be used without having to check for nullptr each
+  /// time.
+  ///
+  /// \see ExecutionContext::HasThreadScope() const @see
+  /// ExecutionContext::HasFrameScope() const
+  Thread *GetThreadPtr() const { return m_thread_sp.get(); }
+
+  /// Returns a pointer to the frame object.
+  ///
+  /// The returned pointer might be nullptr. Calling HasFrameScope(), can help
+  /// to pre-validate this pointer so that this accessor can freely be used
+  /// without having to check for nullptr each time.
+  ///
+  /// \see ExecutionContext::HasFrameScope() const
+  StackFrame *GetFramePtr() const { return m_frame_sp.get(); }
+
+  /// Returns a reference to the target object.
+  ///
+  /// Clients should call HasTargetScope(), HasProcessScope(),
+  /// HasThreadScope(), or HasFrameScope() prior to calling this function to
+  /// ensure that this ExecutionContext object contains a valid target.
+  ///
+  /// \see ExecutionContext::HasTargetScope() const @see
+  /// ExecutionContext::HasProcessScope() const @see
+  /// ExecutionContext::HasThreadScope() const @see
+  /// ExecutionContext::HasFrameScope() const
+  Target &GetTargetRef() const;
+
+  /// Returns a reference to the process object.
+  ///
+  /// Clients should call HasProcessScope(), HasThreadScope(), or
+  /// HasFrameScope() prior to calling this  function to ensure that this
+  /// ExecutionContext object contains a valid target.
+  ///
+  /// \see ExecutionContext::HasProcessScope() const @see
+  /// ExecutionContext::HasThreadScope() const @see
+  /// ExecutionContext::HasFrameScope() const
+  Process &GetProcessRef() const;
+
+  /// Returns a reference to the thread object.
+  ///
+  /// Clients should call HasThreadScope(), or  HasFrameScope() prior to
+  /// calling this  function to ensure that  this ExecutionContext object
+  /// contains a valid target.
+  ///
+  /// \see ExecutionContext::HasThreadScope() const @see
+  /// ExecutionContext::HasFrameScope() const
+  Thread &GetThreadRef() const;
+
+  /// Returns a reference to the thread object.
+  ///
+  /// Clients should call HasFrameScope() prior to calling this function to
+  /// ensure that  this ExecutionContext object contains a valid target.
+  ///
+  /// \see ExecutionContext::HasFrameScope() const
+  StackFrame &GetFrameRef() const;
+
+  /// Get accessor to get the target shared pointer.
+  ///
+  /// The returned shared pointer is not guaranteed to be valid.
+  const lldb::TargetSP &GetTargetSP() const { return m_target_sp; }
+
+  /// Get accessor to get the process shared pointer.
+  ///
+  /// The returned shared pointer is not guaranteed to be valid.
+  const lldb::ProcessSP &GetProcessSP() const { return m_process_sp; }
+
+  /// Get accessor to get the thread shared pointer.
+  ///
+  /// The returned shared pointer is not guaranteed to be valid.
+  const lldb::ThreadSP &GetThreadSP() const { return m_thread_sp; }
+
+  /// Get accessor to get the frame shared pointer.
+  ///
+  /// The returned shared pointer is not guaranteed to be valid.
+  const lldb::StackFrameSP &GetFrameSP() const { return m_frame_sp; }
+
+  /// Set accessor to set only the target shared pointer.
+  void SetTargetSP(const lldb::TargetSP &target_sp);
+
+  /// Set accessor to set only the process shared pointer.
+  void SetProcessSP(const lldb::ProcessSP &process_sp);
+
+  /// Set accessor to set only the thread shared pointer.
+  void SetThreadSP(const lldb::ThreadSP &thread_sp);
+
+  /// Set accessor to set only the frame shared pointer.
+  void SetFrameSP(const lldb::StackFrameSP &frame_sp);
+
+  /// Set accessor to set only the target shared pointer from a target
+  /// pointer.
+  void SetTargetPtr(Target *target);
+
+  /// Set accessor to set only the process shared pointer from a process
+  /// pointer.
+  void SetProcessPtr(Process *process);
+
+  /// Set accessor to set only the thread shared pointer from a thread
+  /// pointer.
+  void SetThreadPtr(Thread *thread);
+
+  /// Set accessor to set only the frame shared pointer from a frame pointer.
+  void SetFramePtr(StackFrame *frame);
+
+  // Set the execution context using a target shared pointer.
+  //
+  // If "target_sp" is valid, sets the target context to match and if
+  // "get_process" is true, sets the process shared pointer if the target
+  // currently has a process.
+  void SetContext(const lldb::TargetSP &target_sp, bool get_process);
+
+  // Set the execution context using a process shared pointer.
+  //
+  // If "process_sp" is valid, then set the process and target in this context.
+  // Thread and frame contexts will be cleared. If "process_sp" is not valid,
+  // all shared pointers are reset.
+  void SetContext(const lldb::ProcessSP &process_sp);
+
+  // Set the execution context using a thread shared pointer.
+  //
+  // If "thread_sp" is valid, then set the thread, process and target in this
+  // context. The frame context will be cleared. If "thread_sp" is not valid,
+  // all shared pointers are reset.
+  void SetContext(const lldb::ThreadSP &thread_sp);
+
+  // Set the execution context using a frame shared pointer.
+  //
+  // If "frame_sp" is valid, then set the frame, thread, process and target in
+  // this context If "frame_sp" is not valid, all shared pointers are reset.
+  void SetContext(const lldb::StackFrameSP &frame_sp);
+
+  /// Returns true the ExecutionContext object contains a valid target.
+  ///
+  /// This function can be called after initializing an ExecutionContext
+  /// object, and if it returns true, calls to GetTargetPtr() and
+  /// GetTargetRef() do not need to be checked for validity.
+  bool HasTargetScope() const;
+
+  /// Returns true the ExecutionContext object contains a valid target and
+  /// process.
+  ///
+  /// This function can be called after initializing an ExecutionContext
+  /// object, and if it returns true, calls to GetTargetPtr() and
+  /// GetTargetRef(), GetProcessPtr(), and GetProcessRef(), do not need to be
+  /// checked for validity.
+  bool HasProcessScope() const;
+
+  /// Returns true the ExecutionContext object contains a valid target,
+  /// process, and thread.
+  ///
+  /// This function can be called after initializing an ExecutionContext
+  /// object, and if it returns true, calls to GetTargetPtr(), GetTargetRef(),
+  /// GetProcessPtr(), GetProcessRef(), GetThreadPtr(), and GetThreadRef() do
+  /// not need to be checked for validity.
+  bool HasThreadScope() const;
+
+  /// Returns true the ExecutionContext object contains a valid target,
+  /// process, thread and frame.
+  ///
+  /// This function can be called after initializing an ExecutionContext
+  /// object, and if it returns true, calls to GetTargetPtr(), GetTargetRef(),
+  /// GetProcessPtr(), GetProcessRef(), GetThreadPtr(), GetThreadRef(),
+  /// GetFramePtr(), and GetFrameRef() do not need to be checked for validity.
+  bool HasFrameScope() const;
+
+protected:
+  // Member variables
+  lldb::TargetSP m_target_sp; ///< The target that owns the process/thread/frame
+  lldb::ProcessSP m_process_sp;  ///< The process that owns the thread/frame
+  lldb::ThreadSP m_thread_sp;    ///< The thread that owns the frame
+  lldb::StackFrameSP m_frame_sp; ///< The stack frame in thread.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ExecutionContext_h_
diff --git a/linux-x64/clang/include/lldb/Target/ExecutionContextScope.h b/linux-x64/clang/include/lldb/Target/ExecutionContextScope.h
new file mode 100644
index 0000000..0121ce6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ExecutionContextScope.h
@@ -0,0 +1,58 @@
+//===-- ExecutionContextScope.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ExecutionContextScope_h_
+#define liblldb_ExecutionContextScope_h_
+
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// @class ExecutionContextScope ExecutionContextScope.h
+/// "lldb/Target/ExecutionContextScope.h" Inherit from this if your object can
+/// reconstruct its
+///        execution context.
+///
+/// Many objects that have pointers back to parent execution context objects
+/// can inherit from this pure virtual class can reconstruct their execution
+/// context without having to keep a complete ExecutionContext object in the
+/// object state. Examples of these objects include: Process, Thread,
+/// RegisterContext and StackFrame.
+///
+/// Objects can contain a valid pointer to an instance of this so they can
+/// reconstruct the execution context.
+///
+/// Objects that adhere to this protocol can reconstruct enough of a execution
+/// context to allow functions that take a execution contexts to be called.
+class ExecutionContextScope {
+public:
+  virtual ~ExecutionContextScope() {}
+
+  virtual lldb::TargetSP CalculateTarget() = 0;
+
+  virtual lldb::ProcessSP CalculateProcess() = 0;
+
+  virtual lldb::ThreadSP CalculateThread() = 0;
+
+  virtual lldb::StackFrameSP CalculateStackFrame() = 0;
+
+  /// Reconstruct the object's execution context into \a sc.
+  ///
+  /// The object should fill in as much of the ExecutionContextScope as it can
+  /// so function calls that require a execution context can be made for the
+  /// given object.
+  ///
+  /// \param[out] exe_ctx
+  ///     A reference to an execution context object that gets filled
+  ///     in.
+  virtual void CalculateExecutionContext(ExecutionContext &exe_ctx) = 0;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ExecutionContextScope_h_
diff --git a/linux-x64/clang/include/lldb/Target/InstrumentationRuntime.h b/linux-x64/clang/include/lldb/Target/InstrumentationRuntime.h
new file mode 100644
index 0000000..4cee76d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/InstrumentationRuntime.h
@@ -0,0 +1,95 @@
+//===-- InstrumentationRuntime.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_InstrumentationRuntime_h_
+#define liblldb_InstrumentationRuntime_h_
+
+#include <map>
+#include <vector>
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+
+typedef std::map<lldb::InstrumentationRuntimeType,
+                 lldb::InstrumentationRuntimeSP>
+    InstrumentationRuntimeCollection;
+
+class InstrumentationRuntime
+    : public std::enable_shared_from_this<InstrumentationRuntime>,
+      public PluginInterface {
+  /// The instrumented process.
+  lldb::ProcessWP m_process_wp;
+
+  /// The module containing the instrumentation runtime.
+  lldb::ModuleSP m_runtime_module;
+
+  /// The breakpoint in the instrumentation runtime.
+  lldb::user_id_t m_breakpoint_id;
+
+  /// Indicates whether or not breakpoints have been registered in the
+  /// instrumentation runtime.
+  bool m_is_active;
+
+protected:
+  InstrumentationRuntime(const lldb::ProcessSP &process_sp)
+      : m_process_wp(), m_runtime_module(), m_breakpoint_id(0),
+        m_is_active(false) {
+    if (process_sp)
+      m_process_wp = process_sp;
+  }
+
+  lldb::ProcessSP GetProcessSP() { return m_process_wp.lock(); }
+
+  lldb::ModuleSP GetRuntimeModuleSP() { return m_runtime_module; }
+
+  void SetRuntimeModuleSP(lldb::ModuleSP module_sp) {
+    m_runtime_module = module_sp;
+  }
+
+  lldb::user_id_t GetBreakpointID() const { return m_breakpoint_id; }
+
+  void SetBreakpointID(lldb::user_id_t ID) { m_breakpoint_id = ID; }
+
+  void SetActive(bool IsActive) { m_is_active = IsActive; }
+
+  /// Return a regular expression which can be used to identify a valid version
+  /// of the runtime library.
+  virtual const RegularExpression &GetPatternForRuntimeLibrary() = 0;
+
+  /// Check whether \p module_sp corresponds to a valid runtime library.
+  virtual bool CheckIfRuntimeIsValid(const lldb::ModuleSP module_sp) = 0;
+
+  /// Register a breakpoint in the runtime library and perform any other
+  /// necessary initialization. The runtime library
+  /// is guaranteed to be loaded.
+  virtual void Activate() = 0;
+
+public:
+  static void ModulesDidLoad(lldb_private::ModuleList &module_list,
+                             Process *process,
+                             InstrumentationRuntimeCollection &runtimes);
+
+  /// Look for the instrumentation runtime in \p module_list. Register and
+  /// activate the runtime if this hasn't already
+  /// been done.
+  void ModulesDidLoad(lldb_private::ModuleList &module_list);
+
+  bool IsActive() const { return m_is_active; }
+
+  virtual lldb::ThreadCollectionSP
+  GetBacktracesFromExtendedStopInfo(StructuredData::ObjectSP info);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_InstrumentationRuntime_h_
diff --git a/linux-x64/clang/include/lldb/Target/InstrumentationRuntimeStopInfo.h b/linux-x64/clang/include/lldb/Target/InstrumentationRuntimeStopInfo.h
new file mode 100644
index 0000000..6c2a8ad
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/InstrumentationRuntimeStopInfo.h
@@ -0,0 +1,42 @@
+//===-- InstrumentationRuntimeStopInfo.h ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_InstrumentationRuntimeStopInfo_h_
+#define liblldb_InstrumentationRuntimeStopInfo_h_
+
+#include <string>
+
+#include "lldb/Target/StopInfo.h"
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+
+class InstrumentationRuntimeStopInfo : public StopInfo {
+public:
+  ~InstrumentationRuntimeStopInfo() override {}
+
+  lldb::StopReason GetStopReason() const override {
+    return lldb::eStopReasonInstrumentation;
+  }
+
+  const char *GetDescription() override;
+
+  bool DoShouldNotify(Event *event_ptr) override { return true; }
+
+  static lldb::StopInfoSP CreateStopReasonWithInstrumentationData(
+      Thread &thread, std::string description,
+      StructuredData::ObjectSP additional_data);
+
+private:
+  InstrumentationRuntimeStopInfo(Thread &thread, std::string description,
+                                 StructuredData::ObjectSP additional_data);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_InstrumentationRuntimeStopInfo_h_
diff --git a/linux-x64/clang/include/lldb/Target/JITLoader.h b/linux-x64/clang/include/lldb/Target/JITLoader.h
new file mode 100644
index 0000000..1bafd82
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/JITLoader.h
@@ -0,0 +1,68 @@
+//===-- JITLoader.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_JITLoader_h_
+#define liblldb_JITLoader_h_
+
+#include <vector>
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Target/JITLoaderList.h"
+
+namespace lldb_private {
+
+/// \class JITLoader JITLoader.h "lldb/Target/JITLoader.h"
+/// A plug-in interface definition class for JIT loaders.
+///
+/// Plugins of this kind listen for code generated at runtime in the target.
+/// They are very similar to dynamic loader, with the difference that they do
+/// not have information about the target's dyld and that there may be
+/// multiple JITLoader plugins per process, while there is at most one
+/// DynamicLoader.
+class JITLoader : public PluginInterface {
+public:
+  /// Find a JIT loader plugin for a given process.
+  ///
+  /// Scans the installed DynamicLoader plug-ins and tries to find all
+  /// applicable instances for the current process.
+  ///
+  /// \param[in] process
+  ///     The process for which to try and locate a JIT loader
+  ///     plug-in instance.
+  ///
+  static void LoadPlugins(Process *process, lldb_private::JITLoaderList &list);
+
+  /// Construct with a process.
+  JITLoader(Process *process);
+
+  ~JITLoader() override;
+
+  /// Called after attaching a process.
+  ///
+  /// Allow JITLoader plug-ins to execute some code after attaching to a
+  /// process.
+  virtual void DidAttach() = 0;
+
+  /// Called after launching a process.
+  ///
+  /// Allow JITLoader plug-ins to execute some code after the process has
+  /// stopped for the first time on launch.
+  virtual void DidLaunch() = 0;
+
+  /// Called after a new shared object has been loaded so that it can be
+  /// probed for JIT entry point hooks.
+  virtual void ModulesDidLoad(lldb_private::ModuleList &module_list) = 0;
+
+protected:
+  // Member variables.
+  Process *m_process;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_JITLoader_h_
diff --git a/linux-x64/clang/include/lldb/Target/JITLoaderList.h b/linux-x64/clang/include/lldb/Target/JITLoaderList.h
new file mode 100644
index 0000000..4cc3a9e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/JITLoaderList.h
@@ -0,0 +1,48 @@
+//===-- JITLoaderList.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_JITLoaderList_h_
+#define liblldb_JITLoaderList_h_
+
+#include <mutex>
+#include <vector>
+
+#include "lldb/lldb-forward.h"
+
+namespace lldb_private {
+
+/// \class JITLoaderList JITLoaderList.h "lldb/Target/JITLoaderList.h"
+///
+/// Class used by the Process to hold a list of its JITLoaders.
+class JITLoaderList {
+public:
+  JITLoaderList();
+  ~JITLoaderList();
+
+  void Append(const lldb::JITLoaderSP &jit_loader_sp);
+
+  void Remove(const lldb::JITLoaderSP &jit_loader_sp);
+
+  size_t GetSize() const;
+
+  lldb::JITLoaderSP GetLoaderAtIndex(size_t idx);
+
+  void DidLaunch();
+
+  void DidAttach();
+
+  void ModulesDidLoad(ModuleList &module_list);
+
+private:
+  std::vector<lldb::JITLoaderSP> m_jit_loaders_vec;
+  std::recursive_mutex m_jit_loaders_mutex;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_JITLoaderList_h_
diff --git a/linux-x64/clang/include/lldb/Target/Language.h b/linux-x64/clang/include/lldb/Target/Language.h
new file mode 100644
index 0000000..6ea6029
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Language.h
@@ -0,0 +1,287 @@
+//===-- Language.h ---------------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Language_h_
+#define liblldb_Language_h_
+
+#include <functional>
+#include <memory>
+#include <set>
+#include <vector>
+
+#include "lldb/Core/Highlighter.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/DataFormatters/DumpValueObjectOptions.h"
+#include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/StringPrinter.h"
+#include "lldb/lldb-private.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class Language : public PluginInterface {
+public:
+  class TypeScavenger {
+  public:
+    class Result {
+    public:
+      virtual bool IsValid() = 0;
+
+      virtual bool DumpToStream(Stream &stream,
+                                bool print_help_if_available) = 0;
+
+      virtual ~Result() = default;
+    };
+
+    typedef std::set<std::unique_ptr<Result>> ResultSet;
+
+    virtual ~TypeScavenger() = default;
+
+    size_t Find(ExecutionContextScope *exe_scope, const char *key,
+                ResultSet &results, bool append = true);
+
+  protected:
+    TypeScavenger() = default;
+
+    virtual bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
+                           ResultSet &results) = 0;
+  };
+
+  class ImageListTypeScavenger : public TypeScavenger {
+    class Result : public Language::TypeScavenger::Result {
+    public:
+      Result(CompilerType type)
+          : Language::TypeScavenger::Result(), m_compiler_type(type) {}
+
+      bool IsValid() override { return m_compiler_type.IsValid(); }
+
+      bool DumpToStream(Stream &stream, bool print_help_if_available) override {
+        if (IsValid()) {
+          m_compiler_type.DumpTypeDescription(&stream);
+          stream.EOL();
+          return true;
+        }
+        return false;
+      }
+
+      ~Result() override = default;
+
+    private:
+      CompilerType m_compiler_type;
+    };
+
+  protected:
+    ImageListTypeScavenger() = default;
+
+    ~ImageListTypeScavenger() override = default;
+
+    // is this type something we should accept? it's usually going to be a
+    // filter by language + maybe some sugar tweaking
+    // returning an empty type means rejecting this candidate entirely;
+    // any other result will be accepted as a valid match
+    virtual CompilerType AdjustForInclusion(CompilerType &candidate) = 0;
+
+    bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
+                   ResultSet &results) override;
+  };
+
+  template <typename... ScavengerTypes>
+  class EitherTypeScavenger : public TypeScavenger {
+  public:
+    EitherTypeScavenger() : TypeScavenger(), m_scavengers() {
+      for (std::shared_ptr<TypeScavenger> scavenger : { std::shared_ptr<TypeScavenger>(new ScavengerTypes())... }) {
+        if (scavenger)
+          m_scavengers.push_back(scavenger);
+      }
+    }
+  protected:
+    bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
+                   ResultSet &results) override {
+      const bool append = false;
+      for (auto& scavenger : m_scavengers) {
+        if (scavenger && scavenger->Find(exe_scope, key, results, append))
+          return true;
+      }
+      return false;
+    }
+  private:
+    std::vector<std::shared_ptr<TypeScavenger>> m_scavengers;
+  };
+
+  template <typename... ScavengerTypes>
+  class UnionTypeScavenger : public TypeScavenger {
+  public:
+    UnionTypeScavenger() : TypeScavenger(), m_scavengers() {
+      for (std::shared_ptr<TypeScavenger> scavenger : { std::shared_ptr<TypeScavenger>(new ScavengerTypes())... }) {
+        if (scavenger)
+          m_scavengers.push_back(scavenger);
+      }
+    }
+  protected:
+    bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
+                   ResultSet &results) override {
+      const bool append = true;
+      bool success = false;
+      for (auto& scavenger : m_scavengers) {
+        if (scavenger)
+          success = scavenger->Find(exe_scope, key, results, append) || success;
+      }
+      return success;
+    }
+  private:
+    std::vector<std::shared_ptr<TypeScavenger>> m_scavengers;
+  };
+
+  enum class FunctionNameRepresentation {
+    eName,
+    eNameWithArgs,
+    eNameWithNoArgs
+  };
+
+  ~Language() override;
+
+  static Language *FindPlugin(lldb::LanguageType language);
+
+  /// Returns the Language associated with the given file path or a nullptr
+  /// if there is no known language.
+  static Language *FindPlugin(llvm::StringRef file_path);
+
+  static Language *FindPlugin(lldb::LanguageType language,
+                              llvm::StringRef file_path);
+
+  // return false from callback to stop iterating
+  static void ForEach(std::function<bool(Language *)> callback);
+
+  virtual lldb::LanguageType GetLanguageType() const = 0;
+
+  virtual bool IsTopLevelFunction(Function &function);
+
+  virtual bool IsSourceFile(llvm::StringRef file_path) const = 0;
+
+  virtual const Highlighter *GetHighlighter() const { return nullptr; }
+
+  virtual lldb::TypeCategoryImplSP GetFormatters();
+
+  virtual HardcodedFormatters::HardcodedFormatFinder GetHardcodedFormats();
+
+  virtual HardcodedFormatters::HardcodedSummaryFinder GetHardcodedSummaries();
+
+  virtual HardcodedFormatters::HardcodedSyntheticFinder
+  GetHardcodedSynthetics();
+
+  virtual HardcodedFormatters::HardcodedValidatorFinder
+  GetHardcodedValidators();
+
+  virtual std::vector<ConstString>
+  GetPossibleFormattersMatches(ValueObject &valobj,
+                               lldb::DynamicValueType use_dynamic);
+
+  virtual lldb_private::formatters::StringPrinter::EscapingHelper
+      GetStringPrinterEscapingHelper(
+          lldb_private::formatters::StringPrinter::GetPrintableElementType);
+
+  virtual std::unique_ptr<TypeScavenger> GetTypeScavenger();
+
+  virtual const char *GetLanguageSpecificTypeLookupHelp();
+
+  // If a language can have more than one possible name for a method, this
+  // function can be used to enumerate them. This is useful when doing name
+  // lookups.
+  virtual std::vector<ConstString>
+  GetMethodNameVariants(ConstString method_name) const {
+    return std::vector<ConstString>();
+  };
+
+  // if an individual data formatter can apply to several types and cross a
+  // language boundary it makes sense for individual languages to want to
+  // customize the printing of values of that type by appending proper
+  // prefix/suffix information in language-specific ways
+  virtual bool GetFormatterPrefixSuffix(ValueObject &valobj,
+                                        ConstString type_hint,
+                                        std::string &prefix,
+                                        std::string &suffix);
+
+  // if a language has a custom format for printing variable declarations that
+  // it wants LLDB to honor it should return an appropriate closure here
+  virtual DumpValueObjectOptions::DeclPrintingHelper GetDeclPrintingHelper();
+
+  virtual LazyBool IsLogicalTrue(ValueObject &valobj, Status &error);
+
+  // for a ValueObject of some "reference type", if the value points to the
+  // nil/null object, this method returns true
+  virtual bool IsNilReference(ValueObject &valobj);
+
+  // for a ValueObject of some "reference type", if the language provides a
+  // technique to decide whether the reference has ever been assigned to some
+  // object, this method will return true if such detection is possible, and if
+  // the reference has never been assigned
+  virtual bool IsUninitializedReference(ValueObject &valobj);
+
+  virtual bool GetFunctionDisplayName(const SymbolContext *sc,
+                                      const ExecutionContext *exe_ctx,
+                                      FunctionNameRepresentation representation,
+                                      Stream &s);
+
+  virtual void GetExceptionResolverDescription(bool catch_on, bool throw_on,
+                                               Stream &s);
+
+  static void GetDefaultExceptionResolverDescription(bool catch_on,
+                                                     bool throw_on, Stream &s);
+
+  // These are accessors for general information about the Languages lldb knows
+  // about:
+
+  static lldb::LanguageType
+  GetLanguageTypeFromString(const char *string) = delete;
+  static lldb::LanguageType GetLanguageTypeFromString(llvm::StringRef string);
+
+  static const char *GetNameForLanguageType(lldb::LanguageType language);
+
+  static void PrintAllLanguages(Stream &s, const char *prefix,
+                                const char *suffix);
+
+  // return false from callback to stop iterating
+  static void ForAllLanguages(std::function<bool(lldb::LanguageType)> callback);
+
+  static bool LanguageIsCPlusPlus(lldb::LanguageType language);
+
+  static bool LanguageIsObjC(lldb::LanguageType language);
+
+  static bool LanguageIsC(lldb::LanguageType language);
+
+  /// Equivalent to \c LanguageIsC||LanguageIsObjC||LanguageIsCPlusPlus.
+  static bool LanguageIsCFamily(lldb::LanguageType language);
+
+  static bool LanguageIsPascal(lldb::LanguageType language);
+
+  // return the primary language, so if LanguageIsC(l), return eLanguageTypeC,
+  // etc.
+  static lldb::LanguageType GetPrimaryLanguage(lldb::LanguageType language);
+
+  static std::set<lldb::LanguageType> GetSupportedLanguages();
+
+  static void GetLanguagesSupportingTypeSystems(
+      std::set<lldb::LanguageType> &languages,
+      std::set<lldb::LanguageType> &languages_for_expressions);
+
+  static void
+  GetLanguagesSupportingREPLs(std::set<lldb::LanguageType> &languages);
+
+protected:
+  // Classes that inherit from Language can see and modify these
+
+  Language();
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(Language);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Language_h_
diff --git a/linux-x64/clang/include/lldb/Target/LanguageRuntime.h b/linux-x64/clang/include/lldb/Target/LanguageRuntime.h
new file mode 100644
index 0000000..3521f46
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/LanguageRuntime.h
@@ -0,0 +1,197 @@
+//===-- LanguageRuntime.h ---------------------------------------------------*-
+// C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_LanguageRuntime_h_
+#define liblldb_LanguageRuntime_h_
+
+#include "lldb/Breakpoint/BreakpointResolver.h"
+#include "lldb/Breakpoint/BreakpointResolverName.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/Value.h"
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Expression/LLVMUserExpression.h"
+#include "lldb/Symbol/DeclVendor.h"
+#include "lldb/Target/ExecutionContextScope.h"
+#include "lldb/lldb-private.h"
+#include "lldb/lldb-public.h"
+
+#include "clang/Basic/TargetOptions.h"
+
+namespace lldb_private {
+
+class ExceptionSearchFilter : public SearchFilter {
+public:
+  ExceptionSearchFilter(const lldb::TargetSP &target_sp,
+                        lldb::LanguageType language,
+                        bool update_module_list = true);
+
+  ~ExceptionSearchFilter() override = default;
+
+  bool ModulePasses(const lldb::ModuleSP &module_sp) override;
+
+  bool ModulePasses(const FileSpec &spec) override;
+
+  void Search(Searcher &searcher) override;
+
+  void GetDescription(Stream *s) override;
+
+  static SearchFilter *
+  CreateFromStructuredData(Target &target,
+                           const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData() override;
+
+protected:
+  lldb::LanguageType m_language;
+  LanguageRuntime *m_language_runtime;
+  lldb::SearchFilterSP m_filter_sp;
+
+  lldb::SearchFilterSP DoCopyForBreakpoint(Breakpoint &breakpoint) override;
+
+  void UpdateModuleListIfNeeded();
+};
+
+class LanguageRuntime : public PluginInterface {
+public:
+  ~LanguageRuntime() override;
+
+  static LanguageRuntime *FindPlugin(Process *process,
+                                     lldb::LanguageType language);
+
+  static void InitializeCommands(CommandObject *parent);
+
+  virtual lldb::LanguageType GetLanguageType() const = 0;
+
+  virtual bool GetObjectDescription(Stream &str, ValueObject &object) = 0;
+
+  virtual bool GetObjectDescription(Stream &str, Value &value,
+                                    ExecutionContextScope *exe_scope) = 0;
+
+  // this call should return true if it could set the name and/or the type
+  virtual bool GetDynamicTypeAndAddress(ValueObject &in_value,
+                                        lldb::DynamicValueType use_dynamic,
+                                        TypeAndOrName &class_type_or_name,
+                                        Address &address,
+                                        Value::ValueType &value_type) = 0;
+
+  // This call should return a CompilerType given a generic type name and an
+  // ExecutionContextScope in which one can actually fetch any specialization
+  // information required.
+  virtual CompilerType GetConcreteType(ExecutionContextScope *exe_scope,
+                                       ConstString abstract_type_name) {
+    return CompilerType();
+  }
+
+  // This should be a fast test to determine whether it is likely that this
+  // value would have a dynamic type.
+  virtual bool CouldHaveDynamicValue(ValueObject &in_value) = 0;
+
+  // The contract for GetDynamicTypeAndAddress() is to return a "bare-bones"
+  // dynamic type For instance, given a Base* pointer,
+  // GetDynamicTypeAndAddress() will return the type of Derived, not Derived*.
+  // The job of this API is to correct this misalignment between the static
+  // type and the discovered dynamic type
+  virtual TypeAndOrName FixUpDynamicType(const TypeAndOrName &type_and_or_name,
+                                         ValueObject &static_value) = 0;
+
+  virtual void SetExceptionBreakpoints() {}
+
+  virtual void ClearExceptionBreakpoints() {}
+
+  virtual bool ExceptionBreakpointsAreSet() { return false; }
+
+  virtual bool ExceptionBreakpointsExplainStop(lldb::StopInfoSP stop_reason) {
+    return false;
+  }
+
+  static lldb::BreakpointSP
+  CreateExceptionBreakpoint(Target &target, lldb::LanguageType language,
+                            bool catch_bp, bool throw_bp,
+                            bool is_internal = false);
+
+  static lldb::BreakpointPreconditionSP
+  GetExceptionPrecondition(lldb::LanguageType language, bool throw_bp);
+
+  virtual lldb::ValueObjectSP GetExceptionObjectForThread(
+      lldb::ThreadSP thread_sp) {
+    return lldb::ValueObjectSP();
+  }
+
+  virtual lldb::ThreadSP GetBacktraceThreadFromException(
+      lldb::ValueObjectSP thread_sp) {
+    return lldb::ThreadSP();
+  }
+
+  Process *GetProcess() { return m_process; }
+
+  Target &GetTargetRef() { return m_process->GetTarget(); }
+
+  virtual DeclVendor *GetDeclVendor() { return nullptr; }
+
+  virtual lldb::BreakpointResolverSP
+  CreateExceptionResolver(Breakpoint *bkpt, bool catch_bp, bool throw_bp) = 0;
+
+  virtual lldb::SearchFilterSP CreateExceptionSearchFilter() {
+    return m_process->GetTarget().GetSearchFilterForModule(nullptr);
+  }
+
+  virtual bool GetTypeBitSize(const CompilerType &compiler_type,
+                              uint64_t &size) {
+    return false;
+  }
+
+  virtual void SymbolsDidLoad(const ModuleList &module_list) { return; }
+
+  virtual lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread,
+                                                          bool stop_others) = 0;
+
+  /// Identify whether a name is a runtime value that should not be hidden by
+  /// from the user interface.
+  virtual bool IsWhitelistedRuntimeValue(ConstString name) { return false; }
+
+  virtual void ModulesDidLoad(const ModuleList &module_list) {}
+
+  // Called by the Clang expression evaluation engine to allow runtimes to
+  // alter the set of target options provided to the compiler. If the options
+  // prototype is modified, runtimes must return true, false otherwise.
+  virtual bool GetOverrideExprOptions(clang::TargetOptions &prototype) {
+    return false;
+  }
+
+  // Called by ClangExpressionParser::PrepareForExecution to query for any
+  // custom LLVM IR passes that need to be run before an expression is
+  // assembled and run.
+  virtual bool GetIRPasses(LLVMUserExpression::IRPasses &custom_passes) {
+    return false;
+  }
+
+  // Given the name of a runtime symbol (e.g. in Objective-C, an ivar offset
+  // symbol), try to determine from the runtime what the value of that symbol
+  // would be. Useful when the underlying binary is stripped.
+  virtual lldb::addr_t LookupRuntimeSymbol(ConstString name) {
+    return LLDB_INVALID_ADDRESS;
+  }
+
+  virtual bool isA(const void *ClassID) const { return ClassID == &ID; }
+  static char ID;
+
+protected:
+  // Classes that inherit from LanguageRuntime can see and modify these
+
+  LanguageRuntime(Process *process);
+  Process *m_process;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(LanguageRuntime);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_LanguageRuntime_h_
diff --git a/linux-x64/clang/include/lldb/Target/Memory.h b/linux-x64/clang/include/lldb/Target/Memory.h
new file mode 100644
index 0000000..e62b8ef
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Memory.h
@@ -0,0 +1,143 @@
+//===-- Memory.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Memory_h_
+#define liblldb_Memory_h_
+
+#include "lldb/Utility/RangeMap.h"
+#include "lldb/lldb-private.h"
+#include <map>
+#include <mutex>
+#include <vector>
+
+namespace lldb_private {
+// A class to track memory that was read from a live process between
+// runs.
+class MemoryCache {
+public:
+  // Constructors and Destructors
+  MemoryCache(Process &process);
+
+  ~MemoryCache();
+
+  void Clear(bool clear_invalid_ranges = false);
+
+  void Flush(lldb::addr_t addr, size_t size);
+
+  size_t Read(lldb::addr_t addr, void *dst, size_t dst_len, Status &error);
+
+  uint32_t GetMemoryCacheLineSize() const { return m_L2_cache_line_byte_size; }
+
+  void AddInvalidRange(lldb::addr_t base_addr, lldb::addr_t byte_size);
+
+  bool RemoveInvalidRange(lldb::addr_t base_addr, lldb::addr_t byte_size);
+
+  // Allow external sources to populate data into the L1 memory cache
+  void AddL1CacheData(lldb::addr_t addr, const void *src, size_t src_len);
+
+  void AddL1CacheData(lldb::addr_t addr,
+                      const lldb::DataBufferSP &data_buffer_sp);
+
+protected:
+  typedef std::map<lldb::addr_t, lldb::DataBufferSP> BlockMap;
+  typedef RangeArray<lldb::addr_t, lldb::addr_t, 4> InvalidRanges;
+  typedef Range<lldb::addr_t, lldb::addr_t> AddrRange;
+  // Classes that inherit from MemoryCache can see and modify these
+  std::recursive_mutex m_mutex;
+  BlockMap m_L1_cache; // A first level memory cache whose chunk sizes vary that
+                       // will be used only if the memory read fits entirely in
+                       // a chunk
+  BlockMap m_L2_cache; // A memory cache of fixed size chinks
+                       // (m_L2_cache_line_byte_size bytes in size each)
+  InvalidRanges m_invalid_ranges;
+  Process &m_process;
+  uint32_t m_L2_cache_line_byte_size;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(MemoryCache);
+};
+
+    
+
+class AllocatedBlock {
+public:
+  AllocatedBlock(lldb::addr_t addr, uint32_t byte_size, uint32_t permissions,
+                 uint32_t chunk_size);
+
+  ~AllocatedBlock();
+
+  lldb::addr_t ReserveBlock(uint32_t size);
+
+  bool FreeBlock(lldb::addr_t addr);
+
+  lldb::addr_t GetBaseAddress() const { return m_range.GetRangeBase(); }
+
+  uint32_t GetByteSize() const { return m_range.GetByteSize(); }
+
+  uint32_t GetPermissions() const { return m_permissions; }
+
+  uint32_t GetChunkSize() const { return m_chunk_size; }
+
+  bool Contains(lldb::addr_t addr) const {
+    return m_range.Contains(addr);
+  }
+
+protected:
+  uint32_t TotalChunks() const { return GetByteSize() / GetChunkSize(); }
+
+  uint32_t CalculateChunksNeededForSize(uint32_t size) const {
+    return (size + m_chunk_size - 1) / m_chunk_size;
+  }
+  // Base address of this block of memory 4GB of chunk should be enough.
+  Range<lldb::addr_t, uint32_t> m_range;
+  // Permissions for this memory (logical OR of lldb::Permissions bits)
+  const uint32_t m_permissions;
+  // The size of chunks that the memory at m_addr is divied up into.
+  const uint32_t m_chunk_size;
+  // A sorted list of free address ranges.
+  RangeVector<lldb::addr_t, uint32_t> m_free_blocks;
+  // A sorted list of reserved address.
+  RangeVector<lldb::addr_t, uint32_t> m_reserved_blocks;
+};
+
+// A class that can track allocated memory and give out allocated memory
+// without us having to make an allocate/deallocate call every time we need
+// some memory in a process that is being debugged.
+class AllocatedMemoryCache {
+public:
+  // Constructors and Destructors
+  AllocatedMemoryCache(Process &process);
+
+  ~AllocatedMemoryCache();
+
+  void Clear();
+
+  lldb::addr_t AllocateMemory(size_t byte_size, uint32_t permissions,
+                              Status &error);
+
+  bool DeallocateMemory(lldb::addr_t ptr);
+
+protected:
+  typedef std::shared_ptr<AllocatedBlock> AllocatedBlockSP;
+
+  AllocatedBlockSP AllocatePage(uint32_t byte_size, uint32_t permissions,
+                                uint32_t chunk_size, Status &error);
+
+  // Classes that inherit from MemoryCache can see and modify these
+  Process &m_process;
+  std::recursive_mutex m_mutex;
+  typedef std::multimap<uint32_t, AllocatedBlockSP> PermissionsToBlockMap;
+  PermissionsToBlockMap m_memory_map;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(AllocatedMemoryCache);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Memory_h_
diff --git a/linux-x64/clang/include/lldb/Target/MemoryHistory.h b/linux-x64/clang/include/lldb/Target/MemoryHistory.h
new file mode 100644
index 0000000..501751c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/MemoryHistory.h
@@ -0,0 +1,33 @@
+//===-- MemoryHistory.h ---------------------------------------------------*-
+//C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_MemoryHistory_h_
+#define liblldb_MemoryHistory_h_
+
+#include <vector>
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/lldb-private.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+
+typedef std::vector<lldb::ThreadSP> HistoryThreads;
+
+class MemoryHistory : public std::enable_shared_from_this<MemoryHistory>,
+                      public PluginInterface {
+public:
+  static lldb::MemoryHistorySP FindPlugin(const lldb::ProcessSP process);
+
+  virtual HistoryThreads GetHistoryThreads(lldb::addr_t address) = 0;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_MemoryHistory_h_
diff --git a/linux-x64/clang/include/lldb/Target/MemoryRegionInfo.h b/linux-x64/clang/include/lldb/Target/MemoryRegionInfo.h
new file mode 100644
index 0000000..5cab2ef
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/MemoryRegionInfo.h
@@ -0,0 +1,148 @@
+//===-- MemoryRegionInfo.h ---------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_MemoryRegionInfo_h
+#define lldb_MemoryRegionInfo_h
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/RangeMap.h"
+#include "llvm/Support/FormatProviders.h"
+
+namespace lldb_private {
+class MemoryRegionInfo {
+public:
+  typedef Range<lldb::addr_t, lldb::addr_t> RangeType;
+
+  enum OptionalBool { eDontKnow = -1, eNo = 0, eYes = 1 };
+
+  MemoryRegionInfo()
+      : m_range(), m_read(eDontKnow), m_write(eDontKnow), m_execute(eDontKnow),
+        m_mapped(eDontKnow), m_flash(eDontKnow), m_blocksize(0) {}
+
+  ~MemoryRegionInfo() {}
+
+  RangeType &GetRange() { return m_range; }
+
+  void Clear() {
+    m_range.Clear();
+    m_read = m_write = m_execute = eDontKnow;
+  }
+
+  const RangeType &GetRange() const { return m_range; }
+
+  OptionalBool GetReadable() const { return m_read; }
+
+  OptionalBool GetWritable() const { return m_write; }
+
+  OptionalBool GetExecutable() const { return m_execute; }
+
+  OptionalBool GetMapped() const { return m_mapped; }
+
+  ConstString GetName() const { return m_name; }
+
+  void SetReadable(OptionalBool val) { m_read = val; }
+
+  void SetWritable(OptionalBool val) { m_write = val; }
+
+  void SetExecutable(OptionalBool val) { m_execute = val; }
+
+  void SetMapped(OptionalBool val) { m_mapped = val; }
+
+  void SetName(const char *name) { m_name = ConstString(name); }
+
+  OptionalBool GetFlash() const { return m_flash; }
+
+  void SetFlash(OptionalBool val) { m_flash = val; }
+
+  lldb::offset_t GetBlocksize() const { return m_blocksize; }
+
+  void SetBlocksize(lldb::offset_t blocksize) { m_blocksize = blocksize; }
+
+  // Get permissions as a uint32_t that is a mask of one or more bits from the
+  // lldb::Permissions
+  uint32_t GetLLDBPermissions() const {
+    uint32_t permissions = 0;
+    if (m_read)
+      permissions |= lldb::ePermissionsReadable;
+    if (m_write)
+      permissions |= lldb::ePermissionsWritable;
+    if (m_execute)
+      permissions |= lldb::ePermissionsExecutable;
+    return permissions;
+  }
+
+  // Set permissions from a uint32_t that contains one or more bits from the
+  // lldb::Permissions
+  void SetLLDBPermissions(uint32_t permissions) {
+    m_read = (permissions & lldb::ePermissionsReadable) ? eYes : eNo;
+    m_write = (permissions & lldb::ePermissionsWritable) ? eYes : eNo;
+    m_execute = (permissions & lldb::ePermissionsExecutable) ? eYes : eNo;
+  }
+
+  bool operator==(const MemoryRegionInfo &rhs) const {
+    return m_range == rhs.m_range && m_read == rhs.m_read &&
+           m_write == rhs.m_write && m_execute == rhs.m_execute &&
+           m_mapped == rhs.m_mapped;
+  }
+
+  bool operator!=(const MemoryRegionInfo &rhs) const { return !(*this == rhs); }
+
+protected:
+  RangeType m_range;
+  OptionalBool m_read;
+  OptionalBool m_write;
+  OptionalBool m_execute;
+  OptionalBool m_mapped;
+  ConstString m_name;
+  OptionalBool m_flash;
+  lldb::offset_t m_blocksize;
+};
+  
+inline bool operator<(const MemoryRegionInfo &lhs,
+                      const MemoryRegionInfo &rhs) {
+  return lhs.GetRange() < rhs.GetRange();
+}
+
+inline bool operator<(const MemoryRegionInfo &lhs, lldb::addr_t rhs) {
+  return lhs.GetRange().GetRangeBase() < rhs;
+}
+
+inline bool operator<(lldb::addr_t lhs, const MemoryRegionInfo &rhs) {
+  return lhs < rhs.GetRange().GetRangeBase();
+}
+
+// Forward-declarable wrapper.
+class MemoryRegionInfos : public std::vector<lldb_private::MemoryRegionInfo> {
+public:
+  using std::vector<lldb_private::MemoryRegionInfo>::vector;
+};
+
+}
+
+namespace llvm {
+template <>
+struct format_provider<lldb_private::MemoryRegionInfo::OptionalBool> {
+  static void format(const lldb_private::MemoryRegionInfo::OptionalBool &B,
+                     raw_ostream &OS, StringRef Options) {
+    switch(B) {
+    case lldb_private::MemoryRegionInfo::eNo:
+      OS << "no";
+      return;
+    case lldb_private::MemoryRegionInfo::eYes:
+      OS << "yes";
+      return;
+    case lldb_private::MemoryRegionInfo::eDontKnow:
+      OS << "don't know";
+      return;
+    }
+  }
+};
+}
+
+#endif // #ifndef lldb_MemoryRegionInfo_h
diff --git a/linux-x64/clang/include/lldb/Target/ModuleCache.h b/linux-x64/clang/include/lldb/Target/ModuleCache.h
new file mode 100644
index 0000000..1196169
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ModuleCache.h
@@ -0,0 +1,74 @@
+//===-- ModuleCache.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_TARGET_MODULECACHE_H
+#define LLDB_TARGET_MODULECACHE_H
+
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include "lldb/Host/File.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Status.h"
+
+#include <functional>
+#include <string>
+#include <unordered_map>
+
+namespace lldb_private {
+
+class Module;
+class UUID;
+
+/// \class ModuleCache ModuleCache.h "lldb/Target/ModuleCache.h"
+/// A module cache class.
+///
+/// Caches locally modules that are downloaded from remote targets. Each
+/// cached module maintains 2 views:
+///  - UUID view:
+///  /${CACHE_ROOT}/${PLATFORM_NAME}/.cache/${UUID}/${MODULE_FILENAME}
+///  - Sysroot view:
+///  /${CACHE_ROOT}/${PLATFORM_NAME}/${HOSTNAME}/${MODULE_FULL_FILEPATH}
+///
+/// UUID views stores a real module file, whereas Sysroot view holds a symbolic
+/// link to UUID-view file.
+///
+/// Example:
+/// UUID view   :
+/// /tmp/lldb/remote-
+/// linux/.cache/30C94DC6-6A1F-E951-80C3-D68D2B89E576-D5AE213C/libc.so.6
+/// Sysroot view: /tmp/lldb/remote-linux/ubuntu/lib/x86_64-linux-gnu/libc.so.6
+
+class ModuleCache {
+public:
+  using ModuleDownloader =
+      std::function<Status(const ModuleSpec &, const FileSpec &)>;
+  using SymfileDownloader =
+      std::function<Status(const lldb::ModuleSP &, const FileSpec &)>;
+
+  Status GetAndPut(const FileSpec &root_dir_spec, const char *hostname,
+                   const ModuleSpec &module_spec,
+                   const ModuleDownloader &module_downloader,
+                   const SymfileDownloader &symfile_downloader,
+                   lldb::ModuleSP &cached_module_sp, bool *did_create_ptr);
+
+private:
+  Status Put(const FileSpec &root_dir_spec, const char *hostname,
+             const ModuleSpec &module_spec, const FileSpec &tmp_file,
+             const FileSpec &target_file);
+
+  Status Get(const FileSpec &root_dir_spec, const char *hostname,
+             const ModuleSpec &module_spec, lldb::ModuleSP &cached_module_sp,
+             bool *did_create_ptr);
+
+  std::unordered_map<std::string, lldb::ModuleWP> m_loaded_modules;
+};
+
+} // namespace lldb_private
+
+#endif // utility_ModuleCache_h_
diff --git a/linux-x64/clang/include/lldb/Target/ObjCLanguageRuntime.h b/linux-x64/clang/include/lldb/Target/ObjCLanguageRuntime.h
new file mode 100644
index 0000000..1fc8744
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ObjCLanguageRuntime.h
@@ -0,0 +1,427 @@
+//===-- ObjCLanguageRuntime.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ObjCLanguageRuntime_h_
+#define liblldb_ObjCLanguageRuntime_h_
+
+#include <functional>
+#include <map>
+#include <memory>
+#include <unordered_set>
+
+#include "llvm/Support/Casting.h"
+
+#include "lldb/Breakpoint/BreakpointPrecondition.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/ThreadSafeDenseMap.h"
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Symbol/Type.h"
+#include "lldb/Target/LanguageRuntime.h"
+#include "lldb/lldb-private.h"
+
+class CommandObjectObjC_ClassTable_Dump;
+
+namespace lldb_private {
+
+class UtilityFunction;
+
+class ObjCLanguageRuntime : public LanguageRuntime {
+public:
+  enum class ObjCRuntimeVersions {
+    eObjC_VersionUnknown = 0,
+    eAppleObjC_V1 = 1,
+    eAppleObjC_V2 = 2
+  };
+
+  typedef lldb::addr_t ObjCISA;
+
+  class ClassDescriptor;
+  typedef std::shared_ptr<ClassDescriptor> ClassDescriptorSP;
+
+  // the information that we want to support retrieving from an ObjC class this
+  // needs to be pure virtual since there are at least 2 different
+  // implementations of the runtime, and more might come
+  class ClassDescriptor {
+  public:
+    ClassDescriptor()
+        : m_is_kvo(eLazyBoolCalculate), m_is_cf(eLazyBoolCalculate),
+          m_type_wp() {}
+
+    virtual ~ClassDescriptor() = default;
+
+    virtual ConstString GetClassName() = 0;
+
+    virtual ClassDescriptorSP GetSuperclass() = 0;
+
+    virtual ClassDescriptorSP GetMetaclass() const = 0;
+
+    // virtual if any implementation has some other version-specific rules but
+    // for the known v1/v2 this is all that needs to be done
+    virtual bool IsKVO() {
+      if (m_is_kvo == eLazyBoolCalculate) {
+        const char *class_name = GetClassName().AsCString();
+        if (class_name && *class_name)
+          m_is_kvo =
+              (LazyBool)(strstr(class_name, "NSKVONotifying_") == class_name);
+      }
+      return (m_is_kvo == eLazyBoolYes);
+    }
+
+    // virtual if any implementation has some other version-specific rules but
+    // for the known v1/v2 this is all that needs to be done
+    virtual bool IsCFType() {
+      if (m_is_cf == eLazyBoolCalculate) {
+        const char *class_name = GetClassName().AsCString();
+        if (class_name && *class_name)
+          m_is_cf = (LazyBool)(strcmp(class_name, "__NSCFType") == 0 ||
+                               strcmp(class_name, "NSCFType") == 0);
+      }
+      return (m_is_cf == eLazyBoolYes);
+    }
+
+    virtual bool IsValid() = 0;
+
+    virtual bool GetTaggedPointerInfo(uint64_t *info_bits = nullptr,
+                                      uint64_t *value_bits = nullptr,
+                                      uint64_t *payload = nullptr) = 0;
+
+    virtual uint64_t GetInstanceSize() = 0;
+
+    // use to implement version-specific additional constraints on pointers
+    virtual bool CheckPointer(lldb::addr_t value, uint32_t ptr_size) const {
+      return true;
+    }
+
+    virtual ObjCISA GetISA() = 0;
+
+    // This should return true iff the interface could be completed
+    virtual bool
+    Describe(std::function<void(ObjCISA)> const &superclass_func,
+             std::function<bool(const char *, const char *)> const
+                 &instance_method_func,
+             std::function<bool(const char *, const char *)> const
+                 &class_method_func,
+             std::function<bool(const char *, const char *, lldb::addr_t,
+                                uint64_t)> const &ivar_func) const {
+      return false;
+    }
+
+    lldb::TypeSP GetType() { return m_type_wp.lock(); }
+
+    void SetType(const lldb::TypeSP &type_sp) { m_type_wp = type_sp; }
+
+    struct iVarDescriptor {
+      ConstString m_name;
+      CompilerType m_type;
+      uint64_t m_size;
+      int32_t m_offset;
+    };
+
+    virtual size_t GetNumIVars() { return 0; }
+
+    virtual iVarDescriptor GetIVarAtIndex(size_t idx) {
+      return iVarDescriptor();
+    }
+
+  protected:
+    bool IsPointerValid(lldb::addr_t value, uint32_t ptr_size,
+                        bool allow_NULLs = false, bool allow_tagged = false,
+                        bool check_version_specific = false) const;
+
+  private:
+    LazyBool m_is_kvo;
+    LazyBool m_is_cf;
+    lldb::TypeWP m_type_wp;
+  };
+
+  class EncodingToType {
+  public:
+    virtual ~EncodingToType();
+
+    virtual CompilerType RealizeType(ClangASTContext &ast_ctx, const char *name,
+                                     bool for_expression);
+    virtual CompilerType RealizeType(const char *name, bool for_expression);
+
+    virtual CompilerType RealizeType(clang::ASTContext &ast_ctx,
+                                     const char *name, bool for_expression) = 0;
+
+  protected:
+    std::unique_ptr<ClangASTContext> m_scratch_ast_ctx_up;
+  };
+
+  class ObjCExceptionPrecondition : public BreakpointPrecondition {
+  public:
+    ObjCExceptionPrecondition();
+
+    ~ObjCExceptionPrecondition() override = default;
+
+    bool EvaluatePrecondition(StoppointCallbackContext &context) override;
+    void GetDescription(Stream &stream, lldb::DescriptionLevel level) override;
+    Status ConfigurePrecondition(Args &args) override;
+
+  protected:
+    void AddClassName(const char *class_name);
+
+  private:
+    std::unordered_set<std::string> m_class_names;
+  };
+
+  static lldb::BreakpointPreconditionSP
+  GetBreakpointExceptionPrecondition(lldb::LanguageType language,
+                                     bool throw_bp);
+
+  class TaggedPointerVendor {
+  public:
+    virtual ~TaggedPointerVendor() = default;
+
+    virtual bool IsPossibleTaggedPointer(lldb::addr_t ptr) = 0;
+
+    virtual ObjCLanguageRuntime::ClassDescriptorSP
+    GetClassDescriptor(lldb::addr_t ptr) = 0;
+
+  protected:
+    TaggedPointerVendor() = default;
+
+  private:
+    DISALLOW_COPY_AND_ASSIGN(TaggedPointerVendor);
+  };
+
+  ~ObjCLanguageRuntime() override;
+
+  static char ID;
+
+  bool isA(const void *ClassID) const override {
+    return ClassID == &ID || LanguageRuntime::isA(ClassID);
+  }
+
+  static bool classof(const LanguageRuntime *runtime) {
+    return runtime->isA(&ID);
+  }
+
+  static ObjCLanguageRuntime *Get(Process &process) {
+    return llvm::cast_or_null<ObjCLanguageRuntime>(
+        process.GetLanguageRuntime(lldb::eLanguageTypeObjC));
+  }
+
+  virtual TaggedPointerVendor *GetTaggedPointerVendor() { return nullptr; }
+
+  typedef std::shared_ptr<EncodingToType> EncodingToTypeSP;
+
+  virtual EncodingToTypeSP GetEncodingToType();
+
+  virtual ClassDescriptorSP GetClassDescriptor(ValueObject &in_value);
+
+  ClassDescriptorSP GetNonKVOClassDescriptor(ValueObject &in_value);
+
+  virtual ClassDescriptorSP
+  GetClassDescriptorFromClassName(ConstString class_name);
+
+  virtual ClassDescriptorSP GetClassDescriptorFromISA(ObjCISA isa);
+
+  ClassDescriptorSP GetNonKVOClassDescriptor(ObjCISA isa);
+
+  lldb::LanguageType GetLanguageType() const override {
+    return lldb::eLanguageTypeObjC;
+  }
+
+  virtual bool IsModuleObjCLibrary(const lldb::ModuleSP &module_sp) = 0;
+
+  virtual bool ReadObjCLibrary(const lldb::ModuleSP &module_sp) = 0;
+
+  virtual bool HasReadObjCLibrary() = 0;
+
+  lldb::addr_t LookupInMethodCache(lldb::addr_t class_addr, lldb::addr_t sel);
+
+  void AddToMethodCache(lldb::addr_t class_addr, lldb::addr_t sel,
+                        lldb::addr_t impl_addr);
+
+  TypeAndOrName LookupInClassNameCache(lldb::addr_t class_addr);
+
+  void AddToClassNameCache(lldb::addr_t class_addr, const char *name,
+                           lldb::TypeSP type_sp);
+
+  void AddToClassNameCache(lldb::addr_t class_addr,
+                           const TypeAndOrName &class_or_type_name);
+
+  lldb::TypeSP LookupInCompleteClassCache(ConstString &name);
+
+  virtual UtilityFunction *CreateObjectChecker(const char *) = 0;
+
+  virtual ObjCRuntimeVersions GetRuntimeVersion() const {
+    return ObjCRuntimeVersions::eObjC_VersionUnknown;
+  }
+
+  bool IsValidISA(ObjCISA isa) {
+    UpdateISAToDescriptorMap();
+    return m_isa_to_descriptor.count(isa) > 0;
+  }
+
+  virtual void UpdateISAToDescriptorMapIfNeeded() = 0;
+
+  void UpdateISAToDescriptorMap() {
+    if (m_process && m_process->GetStopID() != m_isa_to_descriptor_stop_id) {
+      UpdateISAToDescriptorMapIfNeeded();
+    }
+  }
+
+  virtual ObjCISA GetISA(ConstString name);
+
+  virtual ConstString GetActualTypeName(ObjCISA isa);
+
+  virtual ObjCISA GetParentClass(ObjCISA isa);
+
+  // Finds the byte offset of the child_type ivar in parent_type.  If it can't
+  // find the offset, returns LLDB_INVALID_IVAR_OFFSET.
+
+  virtual size_t GetByteOffsetForIvar(CompilerType &parent_qual_type,
+                                      const char *ivar_name);
+
+  bool HasNewLiteralsAndIndexing() {
+    if (m_has_new_literals_and_indexing == eLazyBoolCalculate) {
+      if (CalculateHasNewLiteralsAndIndexing())
+        m_has_new_literals_and_indexing = eLazyBoolYes;
+      else
+        m_has_new_literals_and_indexing = eLazyBoolNo;
+    }
+
+    return (m_has_new_literals_and_indexing == eLazyBoolYes);
+  }
+
+  void SymbolsDidLoad(const ModuleList &module_list) override {
+    m_negative_complete_class_cache.clear();
+  }
+
+  bool GetTypeBitSize(const CompilerType &compiler_type,
+                      uint64_t &size) override;
+
+  /// Check whether the name is "self" or "_cmd" and should show up in
+  /// "frame variable".
+  bool IsWhitelistedRuntimeValue(ConstString name) override;
+
+protected:
+  // Classes that inherit from ObjCLanguageRuntime can see and modify these
+  ObjCLanguageRuntime(Process *process);
+
+  virtual bool CalculateHasNewLiteralsAndIndexing() { return false; }
+
+  bool ISAIsCached(ObjCISA isa) const {
+    return m_isa_to_descriptor.find(isa) != m_isa_to_descriptor.end();
+  }
+
+  bool AddClass(ObjCISA isa, const ClassDescriptorSP &descriptor_sp) {
+    if (isa != 0) {
+      m_isa_to_descriptor[isa] = descriptor_sp;
+      return true;
+    }
+    return false;
+  }
+
+  bool AddClass(ObjCISA isa, const ClassDescriptorSP &descriptor_sp,
+                const char *class_name);
+
+  bool AddClass(ObjCISA isa, const ClassDescriptorSP &descriptor_sp,
+                uint32_t class_name_hash) {
+    if (isa != 0) {
+      m_isa_to_descriptor[isa] = descriptor_sp;
+      m_hash_to_isa_map.insert(std::make_pair(class_name_hash, isa));
+      return true;
+    }
+    return false;
+  }
+
+private:
+  // We keep a map of <Class,Selector>->Implementation so we don't have to call
+  // the resolver function over and over.
+
+  // FIXME: We need to watch for the loading of Protocols, and flush the cache
+  // for any
+  // class that we see so changed.
+
+  struct ClassAndSel {
+    ClassAndSel() {
+      sel_addr = LLDB_INVALID_ADDRESS;
+      class_addr = LLDB_INVALID_ADDRESS;
+    }
+
+    ClassAndSel(lldb::addr_t in_sel_addr, lldb::addr_t in_class_addr)
+        : class_addr(in_class_addr), sel_addr(in_sel_addr) {}
+
+    bool operator==(const ClassAndSel &rhs) {
+      if (class_addr == rhs.class_addr && sel_addr == rhs.sel_addr)
+        return true;
+      else
+        return false;
+    }
+
+    bool operator<(const ClassAndSel &rhs) const {
+      if (class_addr < rhs.class_addr)
+        return true;
+      else if (class_addr > rhs.class_addr)
+        return false;
+      else {
+        if (sel_addr < rhs.sel_addr)
+          return true;
+        else
+          return false;
+      }
+    }
+
+    lldb::addr_t class_addr;
+    lldb::addr_t sel_addr;
+  };
+
+  typedef std::map<ClassAndSel, lldb::addr_t> MsgImplMap;
+  typedef std::map<ObjCISA, ClassDescriptorSP> ISAToDescriptorMap;
+  typedef std::multimap<uint32_t, ObjCISA> HashToISAMap;
+  typedef ISAToDescriptorMap::iterator ISAToDescriptorIterator;
+  typedef HashToISAMap::iterator HashToISAIterator;
+  typedef ThreadSafeDenseMap<void *, uint64_t> TypeSizeCache;
+
+  MsgImplMap m_impl_cache;
+  LazyBool m_has_new_literals_and_indexing;
+  ISAToDescriptorMap m_isa_to_descriptor;
+  HashToISAMap m_hash_to_isa_map;
+  TypeSizeCache m_type_size_cache;
+
+protected:
+  uint32_t m_isa_to_descriptor_stop_id;
+
+  typedef std::map<ConstString, lldb::TypeWP> CompleteClassMap;
+  CompleteClassMap m_complete_class_cache;
+
+  struct ConstStringSetHelpers {
+    size_t operator()(ConstString arg) const // for hashing
+    {
+      return (size_t)arg.GetCString();
+    }
+    bool operator()(ConstString arg1,
+                    ConstString arg2) const // for equality
+    {
+      return arg1.operator==(arg2);
+    }
+  };
+  typedef std::unordered_set<ConstString, ConstStringSetHelpers,
+                             ConstStringSetHelpers>
+      CompleteClassSet;
+  CompleteClassSet m_negative_complete_class_cache;
+
+  ISAToDescriptorIterator GetDescriptorIterator(ConstString name);
+
+  friend class ::CommandObjectObjC_ClassTable_Dump;
+
+  std::pair<ISAToDescriptorIterator, ISAToDescriptorIterator>
+  GetDescriptorIteratorPair(bool update_if_needed = true);
+
+  void ReadObjCLibraryIfNeeded(const ModuleList &module_list);
+
+  DISALLOW_COPY_AND_ASSIGN(ObjCLanguageRuntime);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ObjCLanguageRuntime_h_
diff --git a/linux-x64/clang/include/lldb/Target/OperatingSystem.h b/linux-x64/clang/include/lldb/Target/OperatingSystem.h
new file mode 100644
index 0000000..c75d1ca
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/OperatingSystem.h
@@ -0,0 +1,78 @@
+//===-- OperatingSystem.h ----------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_OperatingSystem_h_
+#define liblldb_OperatingSystem_h_
+
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+/// \class OperatingSystem OperatingSystem.h "lldb/Target/OperatingSystem.h"
+/// A plug-in interface definition class for halted OS helpers.
+///
+/// Halted OS plug-ins can be used by any process to locate and create
+/// OS objects, like threads, during the lifetime of a debug session.
+/// This is commonly used when attaching to an operating system that is
+/// halted, such as when debugging over JTAG or connecting to low level kernel
+/// debug services.
+
+class OperatingSystem : public PluginInterface {
+public:
+  /// Find a halted OS plugin for a given process.
+  ///
+  /// Scans the installed OperatingSystem plug-ins and tries to find an
+  /// instance that matches the current target triple and executable.
+  ///
+  /// \param[in] process
+  ///     The process for which to try and locate a halted OS
+  ///     plug-in instance.
+  ///
+  /// \param[in] plugin_name
+  ///     An optional name of a specific halted OS plug-in that
+  ///     should be used. If NULL, pick the best plug-in.
+  static OperatingSystem *FindPlugin(Process *process, const char *plugin_name);
+
+  // Class Methods
+  OperatingSystem(Process *process);
+
+  ~OperatingSystem() override;
+
+  // Plug-in Methods
+  virtual bool UpdateThreadList(ThreadList &old_thread_list,
+                                ThreadList &real_thread_list,
+                                ThreadList &new_thread_list) = 0;
+
+  virtual void ThreadWasSelected(Thread *thread) = 0;
+
+  virtual lldb::RegisterContextSP
+  CreateRegisterContextForThread(Thread *thread,
+                                 lldb::addr_t reg_data_addr) = 0;
+
+  virtual lldb::StopInfoSP CreateThreadStopReason(Thread *thread) = 0;
+
+  virtual lldb::ThreadSP CreateThread(lldb::tid_t tid, lldb::addr_t context) {
+    return lldb::ThreadSP();
+  }
+
+  virtual bool IsOperatingSystemPluginThread(const lldb::ThreadSP &thread_sp);
+
+protected:
+  // Member variables.
+  Process
+      *m_process; ///< The process that this dynamic loader plug-in is tracking.
+private:
+  DISALLOW_COPY_AND_ASSIGN(OperatingSystem);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_OperatingSystem_h_
diff --git a/linux-x64/clang/include/lldb/Target/PathMappingList.h b/linux-x64/clang/include/lldb/Target/PathMappingList.h
new file mode 100644
index 0000000..d175966
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/PathMappingList.h
@@ -0,0 +1,128 @@
+//===-- PathMappingList.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_PathMappingList_h_
+#define liblldb_PathMappingList_h_
+
+#include <map>
+#include <vector>
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Status.h"
+
+namespace lldb_private {
+
+class PathMappingList {
+public:
+  typedef void (*ChangedCallback)(const PathMappingList &path_list,
+                                  void *baton);
+
+  // Constructors and Destructors
+  PathMappingList();
+
+  PathMappingList(ChangedCallback callback, void *callback_baton);
+
+  PathMappingList(const PathMappingList &rhs);
+
+  ~PathMappingList();
+
+  const PathMappingList &operator=(const PathMappingList &rhs);
+
+  void Append(ConstString path, ConstString replacement,
+              bool notify);
+
+  void Append(const PathMappingList &rhs, bool notify);
+
+  void Clear(bool notify);
+
+  // By default, dump all pairs.
+  void Dump(Stream *s, int pair_index = -1);
+
+  bool IsEmpty() const { return m_pairs.empty(); }
+
+  size_t GetSize() const { return m_pairs.size(); }
+
+  bool GetPathsAtIndex(uint32_t idx, ConstString &path,
+                       ConstString &new_path) const;
+
+  void Insert(ConstString path, ConstString replacement,
+              uint32_t insert_idx, bool notify);
+
+  bool Remove(size_t index, bool notify);
+
+  bool Remove(ConstString path, bool notify);
+
+  bool Replace(ConstString path, ConstString replacement,
+               bool notify);
+
+  bool Replace(ConstString path, ConstString replacement,
+               uint32_t index, bool notify);
+  bool RemapPath(ConstString path, ConstString &new_path) const;
+
+  /// Remaps a source file given \a path into \a new_path.
+  ///
+  /// Remaps \a path if any source remappings match. This function
+  /// does NOT stat the file system so it can be used in tight loops
+  /// where debug info is being parsed.
+  ///
+  /// \param[in] path
+  ///     The original source file path to try and remap.
+  ///
+  /// \param[out] new_path
+  ///     The newly remapped filespec that is may or may not exist.
+  ///
+  /// \return
+  ///     /b true if \a path was successfully located and \a new_path
+  ///     is filled in with a new source path, \b false otherwise.
+  bool RemapPath(llvm::StringRef path, std::string &new_path) const;
+  bool RemapPath(const char *, std::string &) const = delete;
+
+  bool ReverseRemapPath(const FileSpec &file, FileSpec &fixed) const;
+
+  /// Finds a source file given a file spec using the path remappings.
+  ///
+  /// Tries to resolve \a orig_spec by checking the path remappings.
+  /// It makes sure the file exists by checking with the file system,
+  /// so this call can be expensive if the remappings are on a network
+  /// or are even on the local file system, so use this function
+  /// sparingly (not in a tight debug info parsing loop).
+  ///
+  /// \param[in] orig_spec
+  ///     The original source file path to try and remap.
+  ///
+  /// \param[out] new_spec
+  ///     The newly remapped filespec that is guaranteed to exist.
+  ///
+  /// \return
+  ///     /b true if \a orig_spec was successfully located and
+  ///     \a new_spec is filled in with an existing file spec,
+  ///     \b false otherwise.
+  bool FindFile(const FileSpec &orig_spec, FileSpec &new_spec) const;
+
+  uint32_t FindIndexForPath(ConstString path) const;
+
+  uint32_t GetModificationID() const { return m_mod_id; }
+
+protected:
+  typedef std::pair<ConstString, ConstString> pair;
+  typedef std::vector<pair> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  iterator FindIteratorForPath(ConstString path);
+
+  const_iterator FindIteratorForPath(ConstString path) const;
+
+  collection m_pairs;
+  ChangedCallback m_callback;
+  void *m_callback_baton;
+  uint32_t m_mod_id; // Incremented anytime anything is added or removed.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_PathMappingList_h_
diff --git a/linux-x64/clang/include/lldb/Target/Platform.h b/linux-x64/clang/include/lldb/Target/Platform.h
new file mode 100644
index 0000000..3ba58c0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Platform.h
@@ -0,0 +1,1063 @@
+//===-- Platform.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Platform_h_
+#define liblldb_Platform_h_
+
+#include <functional>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/UserSettingsController.h"
+#include "lldb/Interpreter/Options.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Timeout.h"
+#include "lldb/Utility/UserIDResolver.h"
+#include "lldb/lldb-private-forward.h"
+#include "lldb/lldb-public.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+class ProcessInstanceInfo;
+class ProcessInstanceInfoList;
+class ProcessInstanceInfoMatch;
+
+class ModuleCache;
+enum MmapFlags { eMmapFlagsPrivate = 1, eMmapFlagsAnon = 2 };
+
+class PlatformProperties : public Properties {
+public:
+  PlatformProperties();
+
+  static ConstString GetSettingName();
+
+  bool GetUseModuleCache() const;
+  bool SetUseModuleCache(bool use_module_cache);
+
+  FileSpec GetModuleCacheDirectory() const;
+  bool SetModuleCacheDirectory(const FileSpec &dir_spec);
+};
+
+typedef std::shared_ptr<PlatformProperties> PlatformPropertiesSP;
+typedef llvm::SmallVector<lldb::addr_t, 6> MmapArgList;
+
+/// \class Platform Platform.h "lldb/Target/Platform.h"
+/// A plug-in interface definition class for debug platform that
+/// includes many platform abilities such as:
+///     \li getting platform information such as supported architectures,
+///         supported binary file formats and more
+///     \li launching new processes
+///     \li attaching to existing processes
+///     \li download/upload files
+///     \li execute shell commands
+///     \li listing and getting info for existing processes
+///     \li attaching and possibly debugging the platform's kernel
+class Platform : public PluginInterface {
+public:
+  /// Default Constructor
+  Platform(bool is_host_platform);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class is designed to be inherited
+  /// from by the plug-in instance.
+  ~Platform() override;
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static const PlatformPropertiesSP &GetGlobalPlatformProperties();
+
+  /// Get the native host platform plug-in.
+  ///
+  /// There should only be one of these for each host that LLDB runs upon that
+  /// should be statically compiled in and registered using preprocessor
+  /// macros or other similar build mechanisms in a
+  /// PlatformSubclass::Initialize() function.
+  ///
+  /// This platform will be used as the default platform when launching or
+  /// attaching to processes unless another platform is specified.
+  static lldb::PlatformSP GetHostPlatform();
+
+  static lldb::PlatformSP
+  GetPlatformForArchitecture(const ArchSpec &arch, ArchSpec *platform_arch_ptr);
+
+  static const char *GetHostPlatformName();
+
+  static void SetHostPlatform(const lldb::PlatformSP &platform_sp);
+
+  // Find an existing platform plug-in by name
+  static lldb::PlatformSP Find(ConstString name);
+
+  static lldb::PlatformSP Create(ConstString name, Status &error);
+
+  static lldb::PlatformSP Create(const ArchSpec &arch,
+                                 ArchSpec *platform_arch_ptr, Status &error);
+
+  /// Augments the triple either with information from platform or the host
+  /// system (if platform is null).
+  static ArchSpec GetAugmentedArchSpec(Platform *platform,
+                                       llvm::StringRef triple);
+
+  /// Find a platform plugin for a given process.
+  ///
+  /// Scans the installed Platform plug-ins and tries to find an instance that
+  /// can be used for \a process
+  ///
+  /// \param[in] process
+  ///     The process for which to try and locate a platform
+  ///     plug-in instance.
+  ///
+  /// \param[in] plugin_name
+  ///     An optional name of a specific platform plug-in that
+  ///     should be used. If nullptr, pick the best plug-in.
+  //        static lldb::PlatformSP
+  //        FindPlugin (Process *process, ConstString plugin_name);
+
+  /// Set the target's executable based off of the existing architecture
+  /// information in \a target given a path to an executable \a exe_file.
+  ///
+  /// Each platform knows the architectures that it supports and can select
+  /// the correct architecture slice within \a exe_file by inspecting the
+  /// architecture in \a target. If the target had an architecture specified,
+  /// then in can try and obey that request and optionally fail if the
+  /// architecture doesn't match up. If no architecture is specified, the
+  /// platform should select the default architecture from \a exe_file. Any
+  /// application bundles or executable wrappers can also be inspected for the
+  /// actual application binary within the bundle that should be used.
+  ///
+  /// \return
+  ///     Returns \b true if this Platform plug-in was able to find
+  ///     a suitable executable, \b false otherwise.
+  virtual Status ResolveExecutable(const ModuleSpec &module_spec,
+                                   lldb::ModuleSP &module_sp,
+                                   const FileSpecList *module_search_paths_ptr);
+
+  /// Find a symbol file given a symbol file module specification.
+  ///
+  /// Each platform might have tricks to find symbol files for an executable
+  /// given information in a symbol file ModuleSpec. Some platforms might also
+  /// support symbol files that are bundles and know how to extract the right
+  /// symbol file given a bundle.
+  ///
+  /// \param[in] target
+  ///     The target in which we are trying to resolve the symbol file.
+  ///     The target has a list of modules that we might be able to
+  ///     use in order to help find the right symbol file. If the
+  ///     "m_file" or "m_platform_file" entries in the \a sym_spec
+  ///     are filled in, then we might be able to locate a module in
+  ///     the target, extract its UUID and locate a symbol file.
+  ///     If just the "m_uuid" is specified, then we might be able
+  ///     to find the module in the target that matches that UUID
+  ///     and pair the symbol file along with it. If just "m_symbol_file"
+  ///     is specified, we can use a variety of tricks to locate the
+  ///     symbols in an SDK, PDK, or other development kit location.
+  ///
+  /// \param[in] sym_spec
+  ///     A module spec that describes some information about the
+  ///     symbol file we are trying to resolve. The ModuleSpec might
+  ///     contain the following:
+  ///     m_file - A full or partial path to an executable from the
+  ///              target (might be empty).
+  ///     m_platform_file - Another executable hint that contains
+  ///                       the path to the file as known on the
+  ///                       local/remote platform.
+  ///     m_symbol_file - A full or partial path to a symbol file
+  ///                     or symbol bundle that should be used when
+  ///                     trying to resolve the symbol file.
+  ///     m_arch - The architecture we are looking for when resolving
+  ///              the symbol file.
+  ///     m_uuid - The UUID of the executable and symbol file. This
+  ///              can often be used to match up an executable with
+  ///              a symbol file, or resolve an symbol file in a
+  ///              symbol file bundle.
+  ///
+  /// \param[out] sym_file
+  ///     The resolved symbol file spec if the returned error
+  ///     indicates success.
+  ///
+  /// \return
+  ///     Returns an error that describes success or failure.
+  virtual Status ResolveSymbolFile(Target &target, const ModuleSpec &sym_spec,
+                                   FileSpec &sym_file);
+
+  /// Resolves the FileSpec to a (possibly) remote path. Remote platforms must
+  /// override this to resolve to a path on the remote side.
+  virtual bool ResolveRemotePath(const FileSpec &platform_path,
+                                 FileSpec &resolved_platform_path);
+
+  /// Get the OS version from a connected platform.
+  ///
+  /// Some platforms might not be connected to a remote platform, but can
+  /// figure out the OS version for a process. This is common for simulator
+  /// platforms that will run native programs on the current host, but the
+  /// simulator might be simulating a different OS. The \a process parameter
+  /// might be specified to help to determine the OS version.
+  virtual llvm::VersionTuple GetOSVersion(Process *process = nullptr);
+
+  bool SetOSVersion(llvm::VersionTuple os_version);
+
+  bool GetOSBuildString(std::string &s);
+
+  bool GetOSKernelDescription(std::string &s);
+
+  // Returns the name of the platform
+  ConstString GetName();
+
+  virtual const char *GetHostname();
+
+  virtual ConstString GetFullNameForDylib(ConstString basename);
+
+  virtual const char *GetDescription() = 0;
+
+  /// Report the current status for this platform.
+  ///
+  /// The returned string usually involves returning the OS version (if
+  /// available), and any SDK directory that might be being used for local
+  /// file caching, and if connected a quick blurb about what this platform is
+  /// connected to.
+  virtual void GetStatus(Stream &strm);
+
+  // Subclasses must be able to fetch the current OS version
+  //
+  // Remote classes must be connected for this to succeed. Local subclasses
+  // don't need to override this function as it will just call the
+  // HostInfo::GetOSVersion().
+  virtual bool GetRemoteOSVersion() { return false; }
+
+  virtual bool GetRemoteOSBuildString(std::string &s) {
+    s.clear();
+    return false;
+  }
+
+  virtual bool GetRemoteOSKernelDescription(std::string &s) {
+    s.clear();
+    return false;
+  }
+
+  // Remote Platform subclasses need to override this function
+  virtual ArchSpec GetRemoteSystemArchitecture() {
+    return ArchSpec(); // Return an invalid architecture
+  }
+
+  virtual FileSpec GetRemoteWorkingDirectory() { return m_working_dir; }
+
+  virtual bool SetRemoteWorkingDirectory(const FileSpec &working_dir);
+
+  /// Retrieve the system include directories on this platform for the
+  /// given language.
+  ///
+  /// \param[in] lang
+  ///     The language for which the include directories should be queried.
+  ///
+  /// \param[out] directories
+  ///     The include directories for this system.
+  virtual std::vector<std::string>
+  GetSystemIncludeDirectories(lldb::LanguageType lang) {
+    return {};
+  }
+
+  virtual UserIDResolver &GetUserIDResolver() = 0;
+
+  /// Locate a file for a platform.
+  ///
+  /// The default implementation of this function will return the same file
+  /// patch in \a local_file as was in \a platform_file.
+  ///
+  /// \param[in] platform_file
+  ///     The platform file path to locate and cache locally.
+  ///
+  /// \param[in] uuid_ptr
+  ///     If we know the exact UUID of the file we are looking for, it
+  ///     can be specified. If it is not specified, we might now know
+  ///     the exact file. The UUID is usually some sort of MD5 checksum
+  ///     for the file and is sometimes known by dynamic linkers/loaders.
+  ///     If the UUID is known, it is best to supply it to platform
+  ///     file queries to ensure we are finding the correct file, not
+  ///     just a file at the correct path.
+  ///
+  /// \param[out] local_file
+  ///     A locally cached version of the platform file. For platforms
+  ///     that describe the current host computer, this will just be
+  ///     the same file. For remote platforms, this file might come from
+  ///     and SDK directory, or might need to be sync'ed over to the
+  ///     current machine for efficient debugging access.
+  ///
+  /// \return
+  ///     An error object.
+  virtual Status GetFileWithUUID(const FileSpec &platform_file,
+                                 const UUID *uuid_ptr, FileSpec &local_file);
+
+  // Locate the scripting resource given a module specification.
+  //
+  // Locating the file should happen only on the local computer or using the
+  // current computers global settings.
+  virtual FileSpecList
+  LocateExecutableScriptingResources(Target *target, Module &module,
+                                     Stream *feedback_stream);
+
+  virtual Status GetSharedModule(const ModuleSpec &module_spec,
+                                 Process *process, lldb::ModuleSP &module_sp,
+                                 const FileSpecList *module_search_paths_ptr,
+                                 lldb::ModuleSP *old_module_sp_ptr,
+                                 bool *did_create_ptr);
+
+  virtual bool GetModuleSpec(const FileSpec &module_file_spec,
+                             const ArchSpec &arch, ModuleSpec &module_spec);
+
+  virtual Status ConnectRemote(Args &args);
+
+  virtual Status DisconnectRemote();
+
+  /// Get the platform's supported architectures in the order in which they
+  /// should be searched.
+  ///
+  /// \param[in] idx
+  ///     A zero based architecture index
+  ///
+  /// \param[out] arch
+  ///     A copy of the architecture at index if the return value is
+  ///     \b true.
+  ///
+  /// \return
+  ///     \b true if \a arch was filled in and is valid, \b false
+  ///     otherwise.
+  virtual bool GetSupportedArchitectureAtIndex(uint32_t idx,
+                                               ArchSpec &arch) = 0;
+
+  virtual size_t GetSoftwareBreakpointTrapOpcode(Target &target,
+                                                 BreakpointSite *bp_site);
+
+  /// Launch a new process on a platform, not necessarily for debugging, it
+  /// could be just for running the process.
+  virtual Status LaunchProcess(ProcessLaunchInfo &launch_info);
+
+  /// Perform expansion of the command-line for this launch info This can
+  /// potentially involve wildcard expansion
+  /// environment variable replacement, and whatever other
+  /// argument magic the platform defines as part of its typical
+  /// user experience
+  virtual Status ShellExpandArguments(ProcessLaunchInfo &launch_info);
+
+  /// Kill process on a platform.
+  virtual Status KillProcess(const lldb::pid_t pid);
+
+  /// Lets a platform answer if it is compatible with a given architecture and
+  /// the target triple contained within.
+  virtual bool IsCompatibleArchitecture(const ArchSpec &arch,
+                                        bool exact_arch_match,
+                                        ArchSpec *compatible_arch_ptr);
+
+  /// Not all platforms will support debugging a process by spawning somehow
+  /// halted for a debugger (specified using the "eLaunchFlagDebug" launch
+  /// flag) and then attaching. If your platform doesn't support this,
+  /// override this function and return false.
+  virtual bool CanDebugProcess() { return true; }
+
+  /// Subclasses do not need to implement this function as it uses the
+  /// Platform::LaunchProcess() followed by Platform::Attach (). Remote
+  /// platforms will want to subclass this function in order to be able to
+  /// intercept STDIO and possibly launch a separate process that will debug
+  /// the debuggee.
+  virtual lldb::ProcessSP
+  DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger,
+               Target *target, // Can be nullptr, if nullptr create a new
+                               // target, else use existing one
+               Status &error);
+
+  virtual lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url,
+                                         llvm::StringRef plugin_name,
+                                         lldb_private::Debugger &debugger,
+                                         lldb_private::Target *target,
+                                         lldb_private::Status &error);
+
+  /// Attach to an existing process using a process ID.
+  ///
+  /// Each platform subclass needs to implement this function and attempt to
+  /// attach to the process with the process ID of \a pid. The platform
+  /// subclass should return an appropriate ProcessSP subclass that is
+  /// attached to the process, or an empty shared pointer with an appropriate
+  /// error.
+  ///
+  /// \param[in] pid
+  ///     The process ID that we should attempt to attach to.
+  ///
+  /// \return
+  ///     An appropriate ProcessSP containing a valid shared pointer
+  ///     to the default Process subclass for the platform that is
+  ///     attached to the process, or an empty shared pointer with an
+  ///     appropriate error fill into the \a error object.
+  virtual lldb::ProcessSP Attach(ProcessAttachInfo &attach_info,
+                                 Debugger &debugger,
+                                 Target *target, // Can be nullptr, if nullptr
+                                                 // create a new target, else
+                                                 // use existing one
+                                 Status &error) = 0;
+
+  /// Attach to an existing process by process name.
+  ///
+  /// This function is not meant to be overridden by Process subclasses. It
+  /// will first call Process::WillAttach (const char *) and if that returns
+  /// \b true, Process::DoAttach (const char *) will be called to actually do
+  /// the attach. If DoAttach returns \b true, then Process::DidAttach() will
+  /// be called.
+  ///
+  /// \param[in] process_name
+  ///     A process name to match against the current process list.
+  ///
+  /// \return
+  ///     Returns \a pid if attaching was successful, or
+  ///     LLDB_INVALID_PROCESS_ID if attaching fails.
+  //        virtual lldb::ProcessSP
+  //        Attach (const char *process_name,
+  //                bool wait_for_launch,
+  //                Status &error) = 0;
+
+  // The base class Platform will take care of the host platform. Subclasses
+  // will need to fill in the remote case.
+  virtual uint32_t FindProcesses(const ProcessInstanceInfoMatch &match_info,
+                                 ProcessInstanceInfoList &proc_infos);
+
+  virtual bool GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &proc_info);
+
+  // Set a breakpoint on all functions that can end up creating a thread for
+  // this platform. This is needed when running expressions and also for
+  // process control.
+  virtual lldb::BreakpointSP SetThreadCreationBreakpoint(Target &target);
+
+  // Given a target, find the local SDK directory if one exists on the current
+  // host.
+  virtual lldb_private::ConstString
+  GetSDKDirectory(lldb_private::Target &target) {
+    return lldb_private::ConstString();
+  }
+
+  const std::string &GetRemoteURL() const { return m_remote_url; }
+
+  bool IsHost() const {
+    return m_is_host; // Is this the default host platform?
+  }
+
+  bool IsRemote() const { return !m_is_host; }
+
+  virtual bool IsConnected() const {
+    // Remote subclasses should override this function
+    return IsHost();
+  }
+
+  const ArchSpec &GetSystemArchitecture();
+
+  void SetSystemArchitecture(const ArchSpec &arch) {
+    m_system_arch = arch;
+    if (IsHost())
+      m_os_version_set_while_connected = m_system_arch.IsValid();
+  }
+
+  /// If the triple contains not specify the vendor, os, and environment
+  /// parts, we "augment" these using information from the platform and return
+  /// the resulting ArchSpec object.
+  ArchSpec GetAugmentedArchSpec(llvm::StringRef triple);
+
+  // Used for column widths
+  size_t GetMaxUserIDNameLength() const { return m_max_uid_name_len; }
+
+  // Used for column widths
+  size_t GetMaxGroupIDNameLength() const { return m_max_gid_name_len; }
+
+  ConstString GetSDKRootDirectory() const { return m_sdk_sysroot; }
+
+  void SetSDKRootDirectory(ConstString dir) { m_sdk_sysroot = dir; }
+
+  ConstString GetSDKBuild() const { return m_sdk_build; }
+
+  void SetSDKBuild(ConstString sdk_build) { m_sdk_build = sdk_build; }
+
+  // Override this to return true if your platform supports Clang modules. You
+  // may also need to override AddClangModuleCompilationOptions to pass the
+  // right Clang flags for your platform.
+  virtual bool SupportsModules() { return false; }
+
+  // Appends the platform-specific options required to find the modules for the
+  // current platform.
+  virtual void
+  AddClangModuleCompilationOptions(Target *target,
+                                   std::vector<std::string> &options);
+
+  FileSpec GetWorkingDirectory();
+
+  bool SetWorkingDirectory(const FileSpec &working_dir);
+
+  // There may be modules that we don't want to find by default for operations
+  // like "setting breakpoint by name". The platform will return "true" from
+  // this call if the passed in module happens to be one of these.
+
+  virtual bool
+  ModuleIsExcludedForUnconstrainedSearches(Target &target,
+                                           const lldb::ModuleSP &module_sp) {
+    return false;
+  }
+
+  virtual Status MakeDirectory(const FileSpec &file_spec, uint32_t permissions);
+
+  virtual Status GetFilePermissions(const FileSpec &file_spec,
+                                    uint32_t &file_permissions);
+
+  virtual Status SetFilePermissions(const FileSpec &file_spec,
+                                    uint32_t file_permissions);
+
+  virtual lldb::user_id_t OpenFile(const FileSpec &file_spec, uint32_t flags,
+                                   uint32_t mode, Status &error) {
+    return UINT64_MAX;
+  }
+
+  virtual bool CloseFile(lldb::user_id_t fd, Status &error) { return false; }
+
+  virtual lldb::user_id_t GetFileSize(const FileSpec &file_spec) {
+    return UINT64_MAX;
+  }
+
+  virtual uint64_t ReadFile(lldb::user_id_t fd, uint64_t offset, void *dst,
+                            uint64_t dst_len, Status &error) {
+    error.SetErrorStringWithFormat(
+        "Platform::ReadFile() is not supported in the %s platform",
+        GetName().GetCString());
+    return -1;
+  }
+
+  virtual uint64_t WriteFile(lldb::user_id_t fd, uint64_t offset,
+                             const void *src, uint64_t src_len, Status &error) {
+    error.SetErrorStringWithFormat(
+        "Platform::WriteFile() is not supported in the %s platform",
+        GetName().GetCString());
+    return -1;
+  }
+
+  virtual Status GetFile(const FileSpec &source, const FileSpec &destination);
+
+  virtual Status PutFile(const FileSpec &source, const FileSpec &destination,
+                         uint32_t uid = UINT32_MAX, uint32_t gid = UINT32_MAX);
+
+  virtual Status
+  CreateSymlink(const FileSpec &src,  // The name of the link is in src
+                const FileSpec &dst); // The symlink points to dst
+
+  /// Install a file or directory to the remote system.
+  ///
+  /// Install is similar to Platform::PutFile(), but it differs in that if an
+  /// application/framework/shared library is installed on a remote platform
+  /// and the remote platform requires something to be done to register the
+  /// application/framework/shared library, then this extra registration can
+  /// be done.
+  ///
+  /// \param[in] src
+  ///     The source file/directory to install on the remote system.
+  ///
+  /// \param[in] dst
+  ///     The destination file/directory where \a src will be installed.
+  ///     If \a dst has no filename specified, then its filename will
+  ///     be set from \a src. It \a dst has no directory specified, it
+  ///     will use the platform working directory. If \a dst has a
+  ///     directory specified, but the directory path is relative, the
+  ///     platform working directory will be prepended to the relative
+  ///     directory.
+  ///
+  /// \return
+  ///     An error object that describes anything that went wrong.
+  virtual Status Install(const FileSpec &src, const FileSpec &dst);
+
+  virtual Environment GetEnvironment();
+
+  virtual bool GetFileExists(const lldb_private::FileSpec &file_spec);
+
+  virtual Status Unlink(const FileSpec &file_spec);
+
+  virtual MmapArgList GetMmapArgumentList(const ArchSpec &arch,
+                                          lldb::addr_t addr,
+                                          lldb::addr_t length,
+                                          unsigned prot, unsigned flags,
+                                          lldb::addr_t fd, lldb::addr_t offset);
+
+  virtual bool GetSupportsRSync() { return m_supports_rsync; }
+
+  virtual void SetSupportsRSync(bool flag) { m_supports_rsync = flag; }
+
+  virtual const char *GetRSyncOpts() { return m_rsync_opts.c_str(); }
+
+  virtual void SetRSyncOpts(const char *opts) { m_rsync_opts.assign(opts); }
+
+  virtual const char *GetRSyncPrefix() { return m_rsync_prefix.c_str(); }
+
+  virtual void SetRSyncPrefix(const char *prefix) {
+    m_rsync_prefix.assign(prefix);
+  }
+
+  virtual bool GetSupportsSSH() { return m_supports_ssh; }
+
+  virtual void SetSupportsSSH(bool flag) { m_supports_ssh = flag; }
+
+  virtual const char *GetSSHOpts() { return m_ssh_opts.c_str(); }
+
+  virtual void SetSSHOpts(const char *opts) { m_ssh_opts.assign(opts); }
+
+  virtual bool GetIgnoresRemoteHostname() { return m_ignores_remote_hostname; }
+
+  virtual void SetIgnoresRemoteHostname(bool flag) {
+    m_ignores_remote_hostname = flag;
+  }
+
+  virtual lldb_private::OptionGroupOptions *
+  GetConnectionOptions(CommandInterpreter &interpreter) {
+    return nullptr;
+  }
+
+  virtual lldb_private::Status RunShellCommand(
+      const char *command,         // Shouldn't be nullptr
+      const FileSpec &working_dir, // Pass empty FileSpec to use the current
+                                   // working directory
+      int *status_ptr, // Pass nullptr if you don't want the process exit status
+      int *signo_ptr,  // Pass nullptr if you don't want the signal that caused
+                       // the process to exit
+      std::string
+          *command_output, // Pass nullptr if you don't want the command output
+      const Timeout<std::micro> &timeout);
+
+  virtual void SetLocalCacheDirectory(const char *local);
+
+  virtual const char *GetLocalCacheDirectory();
+
+  virtual std::string GetPlatformSpecificConnectionInformation() { return ""; }
+
+  virtual bool CalculateMD5(const FileSpec &file_spec, uint64_t &low,
+                            uint64_t &high);
+
+  virtual int32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) {
+    return 1;
+  }
+
+  virtual const lldb::UnixSignalsSP &GetRemoteUnixSignals();
+
+  lldb::UnixSignalsSP GetUnixSignals();
+
+  /// Locate a queue name given a thread's qaddr
+  ///
+  /// On a system using libdispatch ("Grand Central Dispatch") style queues, a
+  /// thread may be associated with a GCD queue or not, and a queue may be
+  /// associated with multiple threads. The process/thread must provide a way
+  /// to find the "dispatch_qaddr" for each thread, and from that
+  /// dispatch_qaddr this Platform method will locate the queue name and
+  /// provide that.
+  ///
+  /// \param[in] process
+  ///     A process is required for reading memory.
+  ///
+  /// \param[in] dispatch_qaddr
+  ///     The dispatch_qaddr for this thread.
+  ///
+  /// \return
+  ///     The name of the queue, if there is one.  An empty string
+  ///     means that this thread is not associated with a dispatch
+  ///     queue.
+  virtual std::string
+  GetQueueNameForThreadQAddress(Process *process, lldb::addr_t dispatch_qaddr) {
+    return "";
+  }
+
+  /// Locate a queue ID given a thread's qaddr
+  ///
+  /// On a system using libdispatch ("Grand Central Dispatch") style queues, a
+  /// thread may be associated with a GCD queue or not, and a queue may be
+  /// associated with multiple threads. The process/thread must provide a way
+  /// to find the "dispatch_qaddr" for each thread, and from that
+  /// dispatch_qaddr this Platform method will locate the queue ID and provide
+  /// that.
+  ///
+  /// \param[in] process
+  ///     A process is required for reading memory.
+  ///
+  /// \param[in] dispatch_qaddr
+  ///     The dispatch_qaddr for this thread.
+  ///
+  /// \return
+  ///     The queue_id for this thread, if this thread is associated
+  ///     with a dispatch queue.  Else LLDB_INVALID_QUEUE_ID is returned.
+  virtual lldb::queue_id_t
+  GetQueueIDForThreadQAddress(Process *process, lldb::addr_t dispatch_qaddr) {
+    return LLDB_INVALID_QUEUE_ID;
+  }
+
+  /// Provide a list of trap handler function names for this platform
+  ///
+  /// The unwinder needs to treat trap handlers specially -- the stack frame
+  /// may not be aligned correctly for a trap handler (the kernel often won't
+  /// perturb the stack pointer, or won't re-align it properly, in the process
+  /// of calling the handler) and the frame above the handler needs to be
+  /// treated by the unwinder's "frame 0" rules instead of its "middle of the
+  /// stack frame" rules.
+  ///
+  /// In a user process debugging scenario, the list of trap handlers is
+  /// typically just "_sigtramp".
+  ///
+  /// The Platform base class provides the m_trap_handlers ivar but it does
+  /// not populate it.  Subclasses should add the names of the asynchronous
+  /// signal handler routines as needed.  For most Unix platforms, add
+  /// _sigtramp.
+  ///
+  /// \return
+  ///     A list of symbol names.  The list may be empty.
+  virtual const std::vector<ConstString> &GetTrapHandlerSymbolNames();
+
+  /// Find a support executable that may not live within in the standard
+  /// locations related to LLDB.
+  ///
+  /// Executable might exist within the Platform SDK directories, or in
+  /// standard tool directories within the current IDE that is running LLDB.
+  ///
+  /// \param[in] basename
+  ///     The basename of the executable to locate in the current
+  ///     platform.
+  ///
+  /// \return
+  ///     A FileSpec pointing to the executable on disk, or an invalid
+  ///     FileSpec if the executable cannot be found.
+  virtual FileSpec LocateExecutable(const char *basename) { return FileSpec(); }
+
+  /// Allow the platform to set preferred memory cache line size. If non-zero
+  /// (and the user has not set cache line size explicitly), this value will
+  /// be used as the cache line size for memory reads.
+  virtual uint32_t GetDefaultMemoryCacheLineSize() { return 0; }
+
+  /// Load a shared library into this process.
+  ///
+  /// Try and load a shared library into the current process. This call might
+  /// fail in the dynamic loader plug-in says it isn't safe to try and load
+  /// shared libraries at the moment.
+  ///
+  /// \param[in] process
+  ///     The process to load the image.
+  ///
+  /// \param[in] local_file
+  ///     The file spec that points to the shared library that you want
+  ///     to load if the library is located on the host. The library will
+  ///     be copied over to the location specified by remote_file or into
+  ///     the current working directory with the same filename if the
+  ///     remote_file isn't specified.
+  ///
+  /// \param[in] remote_file
+  ///     If local_file is specified then the location where the library
+  ///     should be copied over from the host. If local_file isn't
+  ///     specified, then the path for the shared library on the target
+  ///     what you want to load.
+  ///
+  /// \param[out] error
+  ///     An error object that gets filled in with any errors that
+  ///     might occur when trying to load the shared library.
+  ///
+  /// \return
+  ///     A token that represents the shared library that can be
+  ///     later used to unload the shared library. A value of
+  ///     LLDB_INVALID_IMAGE_TOKEN will be returned if the shared
+  ///     library can't be opened.
+  uint32_t LoadImage(lldb_private::Process *process,
+                     const lldb_private::FileSpec &local_file,
+                     const lldb_private::FileSpec &remote_file,
+                     lldb_private::Status &error);
+
+  /// Load a shared library specified by base name into this process,
+  /// looking by hand along a set of paths.
+  ///
+  /// \param[in] process
+  ///     The process to load the image.
+  ///
+  /// \param[in] library_name
+  ///     The name of the library to look for.  If library_name is an
+  ///     absolute path, the basename will be extracted and searched for
+  ///     along the paths.  This emulates the behavior of the loader when
+  ///     given an install name and a set (e.g. DYLD_LIBRARY_PATH provided) of
+  ///     alternate paths.
+  ///
+  /// \param[in] path_list
+  ///     The list of paths to use to search for the library.  First
+  ///     match wins.
+  ///
+  /// \param[out] error
+  ///     An error object that gets filled in with any errors that
+  ///     might occur when trying to load the shared library.
+  ///
+  /// \param[out] loaded_path
+  ///      If non-null, the path to the dylib that was successfully loaded
+  ///      is stored in this path.
+  /// 
+  /// \return
+  ///     A token that represents the shared library which can be
+  ///     passed to UnloadImage. A value of
+  ///     LLDB_INVALID_IMAGE_TOKEN will be returned if the shared
+  ///     library can't be opened.
+  uint32_t LoadImageUsingPaths(lldb_private::Process *process,
+                               const lldb_private::FileSpec &library_name,
+                               const std::vector<std::string> &paths,
+                               lldb_private::Status &error,
+                               lldb_private::FileSpec *loaded_path);
+
+  virtual uint32_t DoLoadImage(lldb_private::Process *process,
+                               const lldb_private::FileSpec &remote_file,
+                               const std::vector<std::string> *paths,
+                               lldb_private::Status &error,
+                               lldb_private::FileSpec *loaded_path = nullptr);
+
+  virtual Status UnloadImage(lldb_private::Process *process,
+                             uint32_t image_token);
+
+  /// Connect to all processes waiting for a debugger to attach
+  ///
+  /// If the platform have a list of processes waiting for a debugger to
+  /// connect to them then connect to all of these pending processes.
+  ///
+  /// \param[in] debugger
+  ///     The debugger used for the connect.
+  ///
+  /// \param[out] error
+  ///     If an error occurred during the connect then this object will
+  ///     contain the error message.
+  ///
+  /// \return
+  ///     The number of processes we are successfully connected to.
+  virtual size_t ConnectToWaitingProcesses(lldb_private::Debugger &debugger,
+                                           lldb_private::Status &error);
+
+protected:
+  bool m_is_host;
+  // Set to true when we are able to actually set the OS version while being
+  // connected. For remote platforms, we might set the version ahead of time
+  // before we actually connect and this version might change when we actually
+  // connect to a remote platform. For the host platform this will be set to
+  // the once we call HostInfo::GetOSVersion().
+  bool m_os_version_set_while_connected;
+  bool m_system_arch_set_while_connected;
+  ConstString
+      m_sdk_sysroot; // the root location of where the SDK files are all located
+  ConstString m_sdk_build;
+  FileSpec m_working_dir; // The working directory which is used when installing
+                          // modules that have no install path set
+  std::string m_remote_url;
+  std::string m_name;
+  llvm::VersionTuple m_os_version;
+  ArchSpec
+      m_system_arch; // The architecture of the kernel or the remote platform
+  typedef std::map<uint32_t, ConstString> IDToNameMap;
+  // Mutex for modifying Platform data structures that should only be used for
+  // non-reentrant code
+  std::mutex m_mutex;
+  size_t m_max_uid_name_len;
+  size_t m_max_gid_name_len;
+  bool m_supports_rsync;
+  std::string m_rsync_opts;
+  std::string m_rsync_prefix;
+  bool m_supports_ssh;
+  std::string m_ssh_opts;
+  bool m_ignores_remote_hostname;
+  std::string m_local_cache_directory;
+  std::vector<ConstString> m_trap_handlers;
+  bool m_calculated_trap_handlers;
+  const std::unique_ptr<ModuleCache> m_module_cache;
+
+  /// Ask the Platform subclass to fill in the list of trap handler names
+  ///
+  /// For most Unix user process environments, this will be a single function
+  /// name, _sigtramp.  More specialized environments may have additional
+  /// handler names.  The unwinder code needs to know when a trap handler is
+  /// on the stack because the unwind rules for the frame that caused the trap
+  /// are different.
+  ///
+  /// The base class Platform ivar m_trap_handlers should be updated by the
+  /// Platform subclass when this method is called.  If there are no
+  /// predefined trap handlers, this method may be a no-op.
+  virtual void CalculateTrapHandlerSymbolNames() = 0;
+
+  Status GetCachedExecutable(ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
+                             const FileSpecList *module_search_paths_ptr,
+                             Platform &remote_platform);
+
+  virtual Status DownloadModuleSlice(const FileSpec &src_file_spec,
+                                     const uint64_t src_offset,
+                                     const uint64_t src_size,
+                                     const FileSpec &dst_file_spec);
+
+  virtual Status DownloadSymbolFile(const lldb::ModuleSP &module_sp,
+                                    const FileSpec &dst_file_spec);
+
+  virtual const char *GetCacheHostname();
+
+private:
+  typedef std::function<Status(const ModuleSpec &)> ModuleResolver;
+
+  Status GetRemoteSharedModule(const ModuleSpec &module_spec, Process *process,
+                               lldb::ModuleSP &module_sp,
+                               const ModuleResolver &module_resolver,
+                               bool *did_create_ptr);
+
+  bool GetCachedSharedModule(const ModuleSpec &module_spec,
+                             lldb::ModuleSP &module_sp, bool *did_create_ptr);
+
+  Status LoadCachedExecutable(const ModuleSpec &module_spec,
+                              lldb::ModuleSP &module_sp,
+                              const FileSpecList *module_search_paths_ptr,
+                              Platform &remote_platform);
+
+  FileSpec GetModuleCacheRoot();
+
+  DISALLOW_COPY_AND_ASSIGN(Platform);
+};
+
+class PlatformList {
+public:
+  PlatformList() : m_mutex(), m_platforms(), m_selected_platform_sp() {}
+
+  ~PlatformList() = default;
+
+  void Append(const lldb::PlatformSP &platform_sp, bool set_selected) {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    m_platforms.push_back(platform_sp);
+    if (set_selected)
+      m_selected_platform_sp = m_platforms.back();
+  }
+
+  size_t GetSize() {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    return m_platforms.size();
+  }
+
+  lldb::PlatformSP GetAtIndex(uint32_t idx) {
+    lldb::PlatformSP platform_sp;
+    {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      if (idx < m_platforms.size())
+        platform_sp = m_platforms[idx];
+    }
+    return platform_sp;
+  }
+
+  /// Select the active platform.
+  ///
+  /// In order to debug remotely, other platform's can be remotely connected
+  /// to and set as the selected platform for any subsequent debugging. This
+  /// allows connection to remote targets and allows the ability to discover
+  /// process info, launch and attach to remote processes.
+  lldb::PlatformSP GetSelectedPlatform() {
+    std::lock_guard<std::recursive_mutex> guard(m_mutex);
+    if (!m_selected_platform_sp && !m_platforms.empty())
+      m_selected_platform_sp = m_platforms.front();
+
+    return m_selected_platform_sp;
+  }
+
+  void SetSelectedPlatform(const lldb::PlatformSP &platform_sp) {
+    if (platform_sp) {
+      std::lock_guard<std::recursive_mutex> guard(m_mutex);
+      const size_t num_platforms = m_platforms.size();
+      for (size_t idx = 0; idx < num_platforms; ++idx) {
+        if (m_platforms[idx].get() == platform_sp.get()) {
+          m_selected_platform_sp = m_platforms[idx];
+          return;
+        }
+      }
+      m_platforms.push_back(platform_sp);
+      m_selected_platform_sp = m_platforms.back();
+    }
+  }
+
+protected:
+  typedef std::vector<lldb::PlatformSP> collection;
+  mutable std::recursive_mutex m_mutex;
+  collection m_platforms;
+  lldb::PlatformSP m_selected_platform_sp;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(PlatformList);
+};
+
+class OptionGroupPlatformRSync : public lldb_private::OptionGroup {
+public:
+  OptionGroupPlatformRSync() = default;
+
+  ~OptionGroupPlatformRSync() override = default;
+
+  lldb_private::Status
+  SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                 ExecutionContext *execution_context) override;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  // Instance variables to hold the values for command options.
+
+  bool m_rsync;
+  std::string m_rsync_opts;
+  std::string m_rsync_prefix;
+  bool m_ignores_remote_hostname;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(OptionGroupPlatformRSync);
+};
+
+class OptionGroupPlatformSSH : public lldb_private::OptionGroup {
+public:
+  OptionGroupPlatformSSH() = default;
+
+  ~OptionGroupPlatformSSH() override = default;
+
+  lldb_private::Status
+  SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                 ExecutionContext *execution_context) override;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  // Instance variables to hold the values for command options.
+
+  bool m_ssh;
+  std::string m_ssh_opts;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(OptionGroupPlatformSSH);
+};
+
+class OptionGroupPlatformCaching : public lldb_private::OptionGroup {
+public:
+  OptionGroupPlatformCaching() = default;
+
+  ~OptionGroupPlatformCaching() override = default;
+
+  lldb_private::Status
+  SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
+                 ExecutionContext *execution_context) override;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override;
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  // Instance variables to hold the values for command options.
+
+  std::string m_cache_dir;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(OptionGroupPlatformCaching);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Platform_h_
diff --git a/linux-x64/clang/include/lldb/Target/Process.h b/linux-x64/clang/include/lldb/Target/Process.h
new file mode 100644
index 0000000..f85069e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Process.h
@@ -0,0 +1,2858 @@
+//===-- Process.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Process_h_
+#define liblldb_Process_h_
+
+#include "lldb/Host/Config.h"
+
+#include <limits.h>
+
+#include <chrono>
+#include <list>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+#include "lldb/Breakpoint/BreakpointSiteList.h"
+#include "lldb/Core/Communication.h"
+#include "lldb/Core/LoadedModuleInfoList.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/ThreadSafeValue.h"
+#include "lldb/Core/UserSettingsController.h"
+#include "lldb/Host/HostThread.h"
+#include "lldb/Host/ProcessLaunchInfo.h"
+#include "lldb/Host/ProcessRunLock.h"
+#include "lldb/Interpreter/Options.h"
+#include "lldb/Symbol/ObjectFile.h"
+#include "lldb/Target/ExecutionContextScope.h"
+#include "lldb/Target/InstrumentationRuntime.h"
+#include "lldb/Target/Memory.h"
+#include "lldb/Target/QueueList.h"
+#include "lldb/Target/ThreadList.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/Event.h"
+#include "lldb/Utility/Listener.h"
+#include "lldb/Utility/NameMatches.h"
+#include "lldb/Utility/ProcessInfo.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/Utility/TraceOptions.h"
+#include "lldb/Utility/UserIDResolver.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace lldb_private {
+
+template <typename B, typename S> struct Range;
+
+// ProcessProperties
+class ProcessProperties : public Properties {
+public:
+  // Pass nullptr for "process" if the ProcessProperties are to be the global
+  // copy
+  ProcessProperties(lldb_private::Process *process);
+
+  ~ProcessProperties() override;
+
+  bool GetDisableMemoryCache() const;
+  uint64_t GetMemoryCacheLineSize() const;
+  Args GetExtraStartupCommands() const;
+  void SetExtraStartupCommands(const Args &args);
+  FileSpec GetPythonOSPluginPath() const;
+  void SetPythonOSPluginPath(const FileSpec &file);
+  bool GetIgnoreBreakpointsInExpressions() const;
+  void SetIgnoreBreakpointsInExpressions(bool ignore);
+  bool GetUnwindOnErrorInExpressions() const;
+  void SetUnwindOnErrorInExpressions(bool ignore);
+  bool GetStopOnSharedLibraryEvents() const;
+  void SetStopOnSharedLibraryEvents(bool stop);
+  bool GetDetachKeepsStopped() const;
+  void SetDetachKeepsStopped(bool keep_stopped);
+  bool GetWarningsOptimization() const;
+  bool GetStopOnExec() const;
+  std::chrono::seconds GetUtilityExpressionTimeout() const;
+
+protected:
+  static void OptionValueChangedCallback(void *baton,
+                                         OptionValue *option_value);
+
+  Process *m_process; // Can be nullptr for global ProcessProperties
+};
+
+typedef std::shared_ptr<ProcessProperties> ProcessPropertiesSP;
+
+// ProcessAttachInfo
+//
+// Describes any information that is required to attach to a process.
+
+class ProcessAttachInfo : public ProcessInstanceInfo {
+public:
+  ProcessAttachInfo()
+      : ProcessInstanceInfo(), m_listener_sp(), m_hijack_listener_sp(),
+        m_plugin_name(), m_resume_count(0), m_wait_for_launch(false),
+        m_ignore_existing(true), m_continue_once_attached(false),
+        m_detach_on_error(true), m_async(false) {}
+
+  ProcessAttachInfo(const ProcessLaunchInfo &launch_info)
+      : ProcessInstanceInfo(), m_listener_sp(), m_hijack_listener_sp(),
+        m_plugin_name(), m_resume_count(0), m_wait_for_launch(false),
+        m_ignore_existing(true), m_continue_once_attached(false),
+        m_detach_on_error(true), m_async(false) {
+    ProcessInfo::operator=(launch_info);
+    SetProcessPluginName(launch_info.GetProcessPluginName());
+    SetResumeCount(launch_info.GetResumeCount());
+    SetListener(launch_info.GetListener());
+    SetHijackListener(launch_info.GetHijackListener());
+    m_detach_on_error = launch_info.GetDetachOnError();
+  }
+
+  bool GetWaitForLaunch() const { return m_wait_for_launch; }
+
+  void SetWaitForLaunch(bool b) { m_wait_for_launch = b; }
+
+  bool GetAsync() const { return m_async; }
+
+  void SetAsync(bool b) { m_async = b; }
+
+  bool GetIgnoreExisting() const { return m_ignore_existing; }
+
+  void SetIgnoreExisting(bool b) { m_ignore_existing = b; }
+
+  bool GetContinueOnceAttached() const { return m_continue_once_attached; }
+
+  void SetContinueOnceAttached(bool b) { m_continue_once_attached = b; }
+
+  uint32_t GetResumeCount() const { return m_resume_count; }
+
+  void SetResumeCount(uint32_t c) { m_resume_count = c; }
+
+  const char *GetProcessPluginName() const {
+    return (m_plugin_name.empty() ? nullptr : m_plugin_name.c_str());
+  }
+
+  void SetProcessPluginName(llvm::StringRef plugin) { m_plugin_name = plugin; }
+
+  void Clear() {
+    ProcessInstanceInfo::Clear();
+    m_plugin_name.clear();
+    m_resume_count = 0;
+    m_wait_for_launch = false;
+    m_ignore_existing = true;
+    m_continue_once_attached = false;
+  }
+
+  bool ProcessInfoSpecified() const {
+    if (GetExecutableFile())
+      return true;
+    if (GetProcessID() != LLDB_INVALID_PROCESS_ID)
+      return true;
+    if (GetParentProcessID() != LLDB_INVALID_PROCESS_ID)
+      return true;
+    return false;
+  }
+
+  lldb::ListenerSP GetHijackListener() const { return m_hijack_listener_sp; }
+
+  void SetHijackListener(const lldb::ListenerSP &listener_sp) {
+    m_hijack_listener_sp = listener_sp;
+  }
+
+  bool GetDetachOnError() const { return m_detach_on_error; }
+
+  void SetDetachOnError(bool enable) { m_detach_on_error = enable; }
+
+  // Get and set the actual listener that will be used for the process events
+  lldb::ListenerSP GetListener() const { return m_listener_sp; }
+
+  void SetListener(const lldb::ListenerSP &listener_sp) {
+    m_listener_sp = listener_sp;
+  }
+
+  lldb::ListenerSP GetListenerForProcess(Debugger &debugger);
+
+protected:
+  lldb::ListenerSP m_listener_sp;
+  lldb::ListenerSP m_hijack_listener_sp;
+  std::string m_plugin_name;
+  uint32_t m_resume_count; // How many times do we resume after launching
+  bool m_wait_for_launch;
+  bool m_ignore_existing;
+  bool m_continue_once_attached; // Supports the use-case scenario of
+                                 // immediately continuing the process once
+                                 // attached.
+  bool m_detach_on_error; // If we are debugging remotely, instruct the stub to
+                          // detach rather than killing the target on error.
+  bool m_async; // Use an async attach where we start the attach and return
+                // immediately (used by GUI programs with --waitfor so they can
+                // call SBProcess::Stop() to cancel attach)
+};
+
+class ProcessLaunchCommandOptions : public Options {
+public:
+  ProcessLaunchCommandOptions() : Options() {
+    // Keep default values of all options in one place: OptionParsingStarting
+    // ()
+    OptionParsingStarting(nullptr);
+  }
+
+  ~ProcessLaunchCommandOptions() override = default;
+
+  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
+                        ExecutionContext *execution_context) override;
+
+  void OptionParsingStarting(ExecutionContext *execution_context) override {
+    launch_info.Clear();
+    disable_aslr = eLazyBoolCalculate;
+  }
+
+  llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
+
+  // Instance variables to hold the values for command options.
+
+  ProcessLaunchInfo launch_info;
+  lldb_private::LazyBool disable_aslr;
+};
+
+// This class tracks the Modification state of the process.  Things that can
+// currently modify the program are running the program (which will up the
+// StopID) and writing memory (which will up the MemoryID.)
+// FIXME: Should we also include modification of register states?
+
+class ProcessModID {
+  friend bool operator==(const ProcessModID &lhs, const ProcessModID &rhs);
+
+public:
+  ProcessModID()
+      : m_stop_id(0), m_last_natural_stop_id(0), m_resume_id(0), m_memory_id(0),
+        m_last_user_expression_resume(0), m_running_user_expression(false),
+        m_running_utility_function(0) {}
+
+  ProcessModID(const ProcessModID &rhs)
+      : m_stop_id(rhs.m_stop_id), m_memory_id(rhs.m_memory_id) {}
+
+  const ProcessModID &operator=(const ProcessModID &rhs) {
+    if (this != &rhs) {
+      m_stop_id = rhs.m_stop_id;
+      m_memory_id = rhs.m_memory_id;
+    }
+    return *this;
+  }
+
+  ~ProcessModID() = default;
+
+  void BumpStopID() {
+    m_stop_id++;
+    if (!IsLastResumeForUserExpression())
+      m_last_natural_stop_id++;
+  }
+
+  void BumpMemoryID() { m_memory_id++; }
+
+  void BumpResumeID() {
+    m_resume_id++;
+    if (m_running_user_expression > 0)
+      m_last_user_expression_resume = m_resume_id;
+  }
+
+  bool IsRunningUtilityFunction() const {
+    return m_running_utility_function > 0;
+  }
+
+  uint32_t GetStopID() const { return m_stop_id; }
+  uint32_t GetLastNaturalStopID() const { return m_last_natural_stop_id; }
+  uint32_t GetMemoryID() const { return m_memory_id; }
+  uint32_t GetResumeID() const { return m_resume_id; }
+  uint32_t GetLastUserExpressionResumeID() const {
+    return m_last_user_expression_resume;
+  }
+
+  bool MemoryIDEqual(const ProcessModID &compare) const {
+    return m_memory_id == compare.m_memory_id;
+  }
+
+  bool StopIDEqual(const ProcessModID &compare) const {
+    return m_stop_id == compare.m_stop_id;
+  }
+
+  void SetInvalid() { m_stop_id = UINT32_MAX; }
+
+  bool IsValid() const { return m_stop_id != UINT32_MAX; }
+
+  bool IsLastResumeForUserExpression() const {
+    // If we haven't yet resumed the target, then it can't be for a user
+    // expression...
+    if (m_resume_id == 0)
+      return false;
+
+    return m_resume_id == m_last_user_expression_resume;
+  }
+
+  void SetRunningUserExpression(bool on) {
+    if (on)
+      m_running_user_expression++;
+    else
+      m_running_user_expression--;
+  }
+
+  void SetRunningUtilityFunction(bool on) {
+    if (on)
+      m_running_utility_function++;
+    else {
+      assert(m_running_utility_function > 0 &&
+             "Called SetRunningUtilityFunction(false) without calling "
+             "SetRunningUtilityFunction(true) before?");
+      m_running_utility_function--;
+    }
+  }
+
+  void SetStopEventForLastNaturalStopID(lldb::EventSP event_sp) {
+    m_last_natural_stop_event = event_sp;
+  }
+
+  lldb::EventSP GetStopEventForStopID(uint32_t stop_id) const {
+    if (stop_id == m_last_natural_stop_id)
+      return m_last_natural_stop_event;
+    return lldb::EventSP();
+  }
+
+private:
+  uint32_t m_stop_id;
+  uint32_t m_last_natural_stop_id;
+  uint32_t m_resume_id;
+  uint32_t m_memory_id;
+  uint32_t m_last_user_expression_resume;
+  uint32_t m_running_user_expression;
+  uint32_t m_running_utility_function;
+  lldb::EventSP m_last_natural_stop_event;
+};
+
+inline bool operator==(const ProcessModID &lhs, const ProcessModID &rhs) {
+  if (lhs.StopIDEqual(rhs) && lhs.MemoryIDEqual(rhs))
+    return true;
+  else
+    return false;
+}
+
+inline bool operator!=(const ProcessModID &lhs, const ProcessModID &rhs) {
+  return (!lhs.StopIDEqual(rhs) || !lhs.MemoryIDEqual(rhs));
+}
+
+/// \class Process Process.h "lldb/Target/Process.h"
+/// A plug-in interface definition class for debugging a process.
+class Process : public std::enable_shared_from_this<Process>,
+                public ProcessProperties,
+                public UserID,
+                public Broadcaster,
+                public ExecutionContextScope,
+                public PluginInterface {
+  friend class FunctionCaller; // For WaitForStateChangeEventsPrivate
+  friend class Debugger; // For PopProcessIOHandler and ProcessIOHandlerIsActive
+  friend class DynamicLoader; // For LoadOperatingSystemPlugin
+  friend class ProcessEventData;
+  friend class StopInfo;
+  friend class Target;
+  friend class ThreadList;
+
+public:
+  /// Broadcaster event bits definitions.
+  enum {
+    eBroadcastBitStateChanged = (1 << 0),
+    eBroadcastBitInterrupt = (1 << 1),
+    eBroadcastBitSTDOUT = (1 << 2),
+    eBroadcastBitSTDERR = (1 << 3),
+    eBroadcastBitProfileData = (1 << 4),
+    eBroadcastBitStructuredData = (1 << 5),
+  };
+
+  enum {
+    eBroadcastInternalStateControlStop = (1 << 0),
+    eBroadcastInternalStateControlPause = (1 << 1),
+    eBroadcastInternalStateControlResume = (1 << 2)
+  };
+
+  /// Process warning types.
+  enum Warnings { eWarningsOptimization = 1 };
+
+  typedef Range<lldb::addr_t, lldb::addr_t> LoadRange;
+  // We use a read/write lock to allow on or more clients to access the process
+  // state while the process is stopped (reader). We lock the write lock to
+  // control access to the process while it is running (readers, or clients
+  // that want the process stopped can block waiting for the process to stop,
+  // or just try to lock it to see if they can immediately access the stopped
+  // process. If the try read lock fails, then the process is running.
+  typedef ProcessRunLock::ProcessRunLocker StopLocker;
+
+  // These two functions fill out the Broadcaster interface:
+
+  static ConstString &GetStaticBroadcasterClass();
+
+  ConstString &GetBroadcasterClass() const override {
+    return GetStaticBroadcasterClass();
+  }
+
+/// A notification structure that can be used by clients to listen
+/// for changes in a process's lifetime.
+///
+/// \see RegisterNotificationCallbacks (const Notifications&) @see
+/// UnregisterNotificationCallbacks (const Notifications&)
+  typedef struct {
+    void *baton;
+    void (*initialize)(void *baton, Process *process);
+    void (*process_state_changed)(void *baton, Process *process,
+                                  lldb::StateType state);
+  } Notifications;
+
+  class ProcessEventData : public EventData {
+    friend class Process;
+
+  public:
+    ProcessEventData();
+    ProcessEventData(const lldb::ProcessSP &process, lldb::StateType state);
+
+    ~ProcessEventData() override;
+
+    static ConstString GetFlavorString();
+
+    ConstString GetFlavor() const override;
+
+    lldb::ProcessSP GetProcessSP() const { return m_process_wp.lock(); }
+
+    lldb::StateType GetState() const { return m_state; }
+    bool GetRestarted() const { return m_restarted; }
+
+    size_t GetNumRestartedReasons() { return m_restarted_reasons.size(); }
+
+    const char *GetRestartedReasonAtIndex(size_t idx) {
+      return ((idx < m_restarted_reasons.size())
+                  ? m_restarted_reasons[idx].c_str()
+                  : nullptr);
+    }
+
+    bool GetInterrupted() const { return m_interrupted; }
+
+    void Dump(Stream *s) const override;
+
+    void DoOnRemoval(Event *event_ptr) override;
+
+    static const Process::ProcessEventData *
+    GetEventDataFromEvent(const Event *event_ptr);
+
+    static lldb::ProcessSP GetProcessFromEvent(const Event *event_ptr);
+
+    static lldb::StateType GetStateFromEvent(const Event *event_ptr);
+
+    static bool GetRestartedFromEvent(const Event *event_ptr);
+
+    static size_t GetNumRestartedReasons(const Event *event_ptr);
+
+    static const char *GetRestartedReasonAtIndex(const Event *event_ptr,
+                                                 size_t idx);
+
+    static void AddRestartedReason(Event *event_ptr, const char *reason);
+
+    static void SetRestartedInEvent(Event *event_ptr, bool new_value);
+
+    static bool GetInterruptedFromEvent(const Event *event_ptr);
+
+    static void SetInterruptedInEvent(Event *event_ptr, bool new_value);
+
+    static bool SetUpdateStateOnRemoval(Event *event_ptr);
+
+  private:
+    void SetUpdateStateOnRemoval() { m_update_state++; }
+
+    void SetRestarted(bool new_value) { m_restarted = new_value; }
+
+    void SetInterrupted(bool new_value) { m_interrupted = new_value; }
+
+    void AddRestartedReason(const char *reason) {
+      m_restarted_reasons.push_back(reason);
+    }
+
+    lldb::ProcessWP m_process_wp;
+    lldb::StateType m_state;
+    std::vector<std::string> m_restarted_reasons;
+    bool m_restarted; // For "eStateStopped" events, this is true if the target
+                      // was automatically restarted.
+    int m_update_state;
+    bool m_interrupted;
+
+    DISALLOW_COPY_AND_ASSIGN(ProcessEventData);
+  };
+
+  /// Construct with a shared pointer to a target, and the Process listener.
+  /// Uses the Host UnixSignalsSP by default.
+  Process(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp);
+
+  /// Construct with a shared pointer to a target, the Process listener, and
+  /// the appropriate UnixSignalsSP for the process.
+  Process(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,
+          const lldb::UnixSignalsSP &unix_signals_sp);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class is designed to be inherited
+  /// from by the plug-in instance.
+  ~Process() override;
+
+  static void SettingsInitialize();
+
+  static void SettingsTerminate();
+
+  static const ProcessPropertiesSP &GetGlobalProperties();
+
+  /// Find a Process plug-in that can debug \a module using the currently
+  /// selected architecture.
+  ///
+  /// Scans all loaded plug-in interfaces that implement versions of the
+  /// Process plug-in interface and returns the first instance that can debug
+  /// the file.
+  ///
+  /// \param[in] module_sp
+  ///     The module shared pointer that this process will debug.
+  ///
+  /// \param[in] plugin_name
+  ///     If nullptr, select the best plug-in for the binary. If non-nullptr
+  ///     then look for a plugin whose PluginInfo's name matches
+  ///     this string.
+  ///
+  /// \see Process::CanDebug ()
+  static lldb::ProcessSP FindPlugin(lldb::TargetSP target_sp,
+                                    llvm::StringRef plugin_name,
+                                    lldb::ListenerSP listener_sp,
+                                    const FileSpec *crash_file_path);
+
+  /// Static function that can be used with the \b host function
+  /// Host::StartMonitoringChildProcess ().
+  ///
+  /// This function can be used by lldb_private::Process subclasses when they
+  /// want to watch for a local process and have its exit status automatically
+  /// set when the host child process exits. Subclasses should call
+  /// Host::StartMonitoringChildProcess () with:
+  ///     callback = Process::SetHostProcessExitStatus
+  ///     pid = Process::GetID()
+  ///     monitor_signals = false
+  static bool
+  SetProcessExitStatus(lldb::pid_t pid, // The process ID we want to monitor
+                       bool exited,
+                       int signo,   // Zero for no signal
+                       int status); // Exit value of process if signal is zero
+
+  lldb::ByteOrder GetByteOrder() const;
+
+  uint32_t GetAddressByteSize() const;
+
+  uint32_t GetUniqueID() const { return m_process_unique_id; }
+
+  /// Check if a plug-in instance can debug the file in \a module.
+  ///
+  /// Each plug-in is given a chance to say whether it can debug the file in
+  /// \a module. If the Process plug-in instance can debug a file on the
+  /// current system, it should return \b true.
+  ///
+  /// \return
+  ///     Returns \b true if this Process plug-in instance can
+  ///     debug the executable, \b false otherwise.
+  virtual bool CanDebug(lldb::TargetSP target,
+                        bool plugin_specified_by_name) = 0;
+
+  /// This object is about to be destroyed, do any necessary cleanup.
+  ///
+  /// Subclasses that override this method should always call this superclass
+  /// method.
+  virtual void Finalize();
+
+  /// Return whether this object is valid (i.e. has not been finalized.)
+  ///
+  /// \return
+  ///     Returns \b true if this Process has not been finalized
+  ///     and \b false otherwise.
+  bool IsValid() const { return !m_finalize_called; }
+
+  /// Return a multi-word command object that can be used to expose plug-in
+  /// specific commands.
+  ///
+  /// This object will be used to resolve plug-in commands and can be
+  /// triggered by a call to:
+  ///
+  ///     (lldb) process command <args>
+  ///
+  /// \return
+  ///     A CommandObject which can be one of the concrete subclasses
+  ///     of CommandObject like CommandObjectRaw, CommandObjectParsed,
+  ///     or CommandObjectMultiword.
+  virtual CommandObject *GetPluginCommandObject() { return nullptr; }
+
+  /// Launch a new process.
+  ///
+  /// Launch a new process by spawning a new process using the target object's
+  /// executable module's file as the file to launch.
+  ///
+  /// This function is not meant to be overridden by Process subclasses. It
+  /// will first call Process::WillLaunch (Module *) and if that returns \b
+  /// true, Process::DoLaunch (Module*, char const *[],char const *[],const
+  /// char *,const char *, const char *) will be called to actually do the
+  /// launching. If DoLaunch returns \b true, then Process::DidLaunch() will
+  /// be called.
+  ///
+  /// \param[in] launch_info
+  ///     Details regarding the environment, STDIN/STDOUT/STDERR
+  ///     redirection, working path, etc. related to the requested launch.
+  ///
+  /// \return
+  ///     An error object. Call GetID() to get the process ID if
+  ///     the error object is success.
+  virtual Status Launch(ProcessLaunchInfo &launch_info);
+
+  virtual Status LoadCore();
+
+  virtual Status DoLoadCore() {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support loading core files.",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  // FUTURE WORK: GetLoadImageUtilityFunction are the first use we've
+  // had of having other plugins cache data in the Process.  This is handy for
+  // long-living plugins - like the Platform - which manage interactions whose
+  // lifetime is governed by the Process lifetime.  If we find we need to do
+  // this more often, we should construct a general solution to the problem.
+  // The consensus suggestion was that we have a token based registry in the
+  // Process. Some undecided questions are  (1) who manages the tokens.  It's
+  // probably best that you add the element  and get back a token that
+  // represents it.  That will avoid collisions.  But there may be some utility
+  // in the registerer controlling the token? (2) whether the thing added
+  // should be simply owned by Process, and just go away when it does (3)
+  // whether the registree should be notified of the Process' demise.
+  //
+  // We are postponing designing this till we have at least a second use case.
+  /// Get the cached UtilityFunction that assists in loading binary images
+  /// into the process.
+  ///
+  /// \param[in] platform
+  ///     The platform fetching the UtilityFunction.
+  /// \param[in] factory
+  ///     A function that will be called only once per-process in a
+  ///     thread-safe way to create the UtilityFunction if it has not
+  ///     been initialized yet.
+  ///
+  /// \return
+  ///     The cached utility function or null if the platform is not the
+  ///     same as the target's platform.
+  UtilityFunction *GetLoadImageUtilityFunction(
+      Platform *platform,
+      llvm::function_ref<std::unique_ptr<UtilityFunction>()> factory);
+
+  /// Get the dynamic loader plug-in for this process.
+  ///
+  /// The default action is to let the DynamicLoader plug-ins check the main
+  /// executable and the DynamicLoader will select itself automatically.
+  /// Subclasses can override this if inspecting the executable is not
+  /// desired, or if Process subclasses can only use a specific DynamicLoader
+  /// plug-in.
+  virtual DynamicLoader *GetDynamicLoader();
+
+  // Returns AUXV structure found in many ELF-based environments.
+  //
+  // The default action is to return an empty data buffer.
+  //
+  // \return
+  //    A data extractor containing the contents of the AUXV data.
+  virtual DataExtractor GetAuxvData();
+
+  /// Sometimes processes know how to retrieve and load shared libraries. This
+  /// is normally done by DynamicLoader plug-ins, but sometimes the connection
+  /// to the process allows retrieving this information. The dynamic loader
+  /// plug-ins can use this function if they can't determine the current
+  /// shared library load state.
+  ///
+  /// \return
+  ///    The number of shared libraries that were loaded
+  virtual size_t LoadModules() { return 0; }
+
+  virtual size_t LoadModules(LoadedModuleInfoList &) { return 0; }
+
+protected:
+  virtual JITLoaderList &GetJITLoaders();
+
+public:
+  /// Get the system runtime plug-in for this process.
+  ///
+  /// \return
+  ///   Returns a pointer to the SystemRuntime plugin for this Process
+  ///   if one is available.  Else returns nullptr.
+  virtual SystemRuntime *GetSystemRuntime();
+
+  /// Attach to an existing process using the process attach info.
+  ///
+  /// This function is not meant to be overridden by Process subclasses. It
+  /// will first call WillAttach (lldb::pid_t) or WillAttach (const char *),
+  /// and if that returns \b true, DoAttach (lldb::pid_t) or DoAttach (const
+  /// char *) will be called to actually do the attach. If DoAttach returns \b
+  /// true, then Process::DidAttach() will be called.
+  ///
+  /// \param[in] pid
+  ///     The process ID that we should attempt to attach to.
+  ///
+  /// \return
+  ///     Returns \a pid if attaching was successful, or
+  ///     LLDB_INVALID_PROCESS_ID if attaching fails.
+  virtual Status Attach(ProcessAttachInfo &attach_info);
+
+  /// Attach to a remote system via a URL
+  ///
+  /// \param[in] strm
+  ///     A stream where output intended for the user
+  ///     (if the driver has a way to display that) generated during
+  ///     the connection.  This may be nullptr if no output is needed.A
+  ///
+  /// \param[in] remote_url
+  ///     The URL format that we are connecting to.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status ConnectRemote(Stream *strm, llvm::StringRef remote_url);
+
+  bool GetShouldDetach() const { return m_should_detach; }
+
+  void SetShouldDetach(bool b) { m_should_detach = b; }
+
+  /// Get the image information address for the current process.
+  ///
+  /// Some runtimes have system functions that can help dynamic loaders locate
+  /// the dynamic loader information needed to observe shared libraries being
+  /// loaded or unloaded. This function is in the Process interface (as
+  /// opposed to the DynamicLoader interface) to ensure that remote debugging
+  /// can take advantage of this functionality.
+  ///
+  /// \return
+  ///     The address of the dynamic loader information, or
+  ///     LLDB_INVALID_ADDRESS if this is not supported by this
+  ///     interface.
+  virtual lldb::addr_t GetImageInfoAddress();
+
+  /// Called when the process is about to broadcast a public stop.
+  ///
+  /// There are public and private stops. Private stops are when the process
+  /// is doing things like stepping and the client doesn't need to know about
+  /// starts and stop that implement a thread plan. Single stepping over a
+  /// source line in code might end up being implemented by one or more
+  /// process starts and stops. Public stops are when clients will be notified
+  /// that the process is stopped. These events typically trigger UI updates
+  /// (thread stack frames to be displayed, variables to be displayed, and
+  /// more). This function can be overriden and allows process subclasses to
+  /// do something before the eBroadcastBitStateChanged event is sent to
+  /// public clients.
+  virtual void WillPublicStop() {}
+
+/// Register for process and thread notifications.
+///
+/// Clients can register notification callbacks by filling out a
+/// Process::Notifications structure and calling this function.
+///
+/// \param[in] callbacks
+///     A structure that contains the notification baton and
+///     callback functions.
+///
+/// \see Process::Notifications
+  void RegisterNotificationCallbacks(const Process::Notifications &callbacks);
+
+/// Unregister for process and thread notifications.
+///
+/// Clients can unregister notification callbacks by passing a copy of the
+/// original baton and callbacks in \a callbacks.
+///
+/// \param[in] callbacks
+///     A structure that contains the notification baton and
+///     callback functions.
+///
+/// \return
+///     Returns \b true if the notification callbacks were
+///     successfully removed from the process, \b false otherwise.
+///
+/// \see Process::Notifications
+  bool UnregisterNotificationCallbacks(const Process::Notifications &callbacks);
+
+  //==================================================================
+  // Built in Process Control functions
+  //==================================================================
+  /// Resumes all of a process's threads as configured using the Thread run
+  /// control functions.
+  ///
+  /// Threads for a process should be updated with one of the run control
+  /// actions (resume, step, or suspend) that they should take when the
+  /// process is resumed. If no run control action is given to a thread it
+  /// will be resumed by default.
+  ///
+  /// This function is not meant to be overridden by Process subclasses. This
+  /// function will take care of disabling any breakpoints that threads may be
+  /// stopped at, single stepping, and re-enabling breakpoints, and enabling
+  /// the basic flow control that the plug-in instances need not worry about.
+  ///
+  /// N.B. This function also sets the Write side of the Run Lock, which is
+  /// unset when the corresponding stop event is pulled off the Public Event
+  /// Queue.  If you need to resume the process without setting the Run Lock,
+  /// use PrivateResume (though you should only do that from inside the
+  /// Process class.
+  ///
+  /// \return
+  ///     Returns an error object.
+  ///
+  /// \see Thread:Resume()
+  /// \see Thread:Step()
+  /// \see Thread:Suspend()
+  Status Resume();
+
+  Status ResumeSynchronous(Stream *stream);
+
+  /// Halts a running process.
+  ///
+  /// This function is not meant to be overridden by Process subclasses. If
+  /// the process is successfully halted, a eStateStopped process event with
+  /// GetInterrupted will be broadcast.  If false, we will halt the process
+  /// with no events generated by the halt.
+  ///
+  /// \param[in] clear_thread_plans
+  ///     If true, when the process stops, clear all thread plans.
+  ///
+  /// \param[in] use_run_lock
+  ///     Whether to release the run lock after the stop.
+  ///
+  /// \return
+  ///     Returns an error object.  If the error is empty, the process is
+  ///     halted.
+  ///     otherwise the halt has failed.
+  Status Halt(bool clear_thread_plans = false, bool use_run_lock = true);
+
+  /// Detaches from a running or stopped process.
+  ///
+  /// This function is not meant to be overridden by Process subclasses.
+  ///
+  /// \param[in] keep_stopped
+  ///     If true, don't resume the process on detach.
+  ///
+  /// \return
+  ///     Returns an error object.
+  Status Detach(bool keep_stopped);
+
+  /// Kills the process and shuts down all threads that were spawned to track
+  /// and monitor the process.
+  ///
+  /// This function is not meant to be overridden by Process subclasses.
+  ///
+  /// \param[in] force_kill
+  ///     Whether lldb should force a kill (instead of a detach) from
+  ///     the inferior process.  Normally if lldb launched a binary and
+  ///     Destory is called, lldb kills it.  If lldb attached to a
+  ///     running process and Destory is called, lldb detaches.  If
+  ///     this behavior needs to be over-ridden, this is the bool that
+  ///     can be used.
+  ///
+  /// \return
+  ///     Returns an error object.
+  Status Destroy(bool force_kill);
+
+  /// Sends a process a UNIX signal \a signal.
+  ///
+  /// This function is not meant to be overridden by Process subclasses.
+  ///
+  /// \return
+  ///     Returns an error object.
+  Status Signal(int signal);
+
+  void SetUnixSignals(lldb::UnixSignalsSP &&signals_sp);
+
+  const lldb::UnixSignalsSP &GetUnixSignals();
+
+  //==================================================================
+  // Plug-in Process Control Overrides
+  //==================================================================
+
+  /// Called before attaching to a process.
+  ///
+  /// Allow Process plug-ins to execute some code before attaching a process.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status WillAttachToProcessWithID(lldb::pid_t pid) { return Status(); }
+
+  /// Called before attaching to a process.
+  ///
+  /// Allow Process plug-ins to execute some code before attaching a process.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status WillAttachToProcessWithName(const char *process_name,
+                                             bool wait_for_launch) {
+    return Status();
+  }
+
+  /// Attach to a remote system via a URL
+  ///
+  /// \param[in] strm
+  ///     A stream where output intended for the user
+  ///     (if the driver has a way to display that) generated during
+  ///     the connection.  This may be nullptr if no output is needed.A
+  ///
+  /// \param[in] remote_url
+  ///     The URL format that we are connecting to.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status DoConnectRemote(Stream *strm, llvm::StringRef remote_url) {
+    Status error;
+    error.SetErrorString("remote connections are not supported");
+    return error;
+  }
+
+  /// Attach to an existing process using a process ID.
+  ///
+  /// \param[in] pid
+  ///     The process ID that we should attempt to attach to.
+  ///
+  /// \param[in] attach_info
+  ///     Information on how to do the attach. For example, GetUserID()
+  ///     will return the uid to attach as.
+  ///
+  /// \return
+  ///     Returns a successful Status attaching was successful, or
+  ///     an appropriate (possibly platform-specific) error code if
+  ///     attaching fails.
+  /// hanming : need flag
+  virtual Status DoAttachToProcessWithID(lldb::pid_t pid,
+                                         const ProcessAttachInfo &attach_info) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support attaching to a process by pid",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  /// Attach to an existing process using a partial process name.
+  ///
+  /// \param[in] process_name
+  ///     The name of the process to attach to.
+  ///
+  /// \param[in] attach_info
+  ///     Information on how to do the attach. For example, GetUserID()
+  ///     will return the uid to attach as.
+  ///
+  /// \return
+  ///     Returns a successful Status attaching was successful, or
+  ///     an appropriate (possibly platform-specific) error code if
+  ///     attaching fails.
+  virtual Status
+  DoAttachToProcessWithName(const char *process_name,
+                            const ProcessAttachInfo &attach_info) {
+    Status error;
+    error.SetErrorString("attach by name is not supported");
+    return error;
+  }
+
+  /// Called after attaching a process.
+  ///
+  /// \param[in] process_arch
+  ///     If you can figure out the process architecture after attach, fill it
+  ///     in here.
+  ///
+  /// Allow Process plug-ins to execute some code after attaching to a
+  /// process.
+  virtual void DidAttach(ArchSpec &process_arch) { process_arch.Clear(); }
+
+  /// Called after a process re-execs itself.
+  ///
+  /// Allow Process plug-ins to execute some code after a process has exec'ed
+  /// itself. Subclasses typically should override DoDidExec() as the
+  /// lldb_private::Process class needs to remove its dynamic loader, runtime,
+  /// ABI and other plug-ins, as well as unload all shared libraries.
+  virtual void DidExec();
+
+  /// Subclasses of Process should implement this function if they need to do
+  /// anything after a process exec's itself.
+  virtual void DoDidExec() {}
+
+  /// Called before launching to a process.
+  ///
+  /// Allow Process plug-ins to execute some code before launching a process.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status WillLaunch(Module *module) { return Status(); }
+
+  /// Launch a new process.
+  ///
+  /// Launch a new process by spawning a new process using \a exe_module's
+  /// file as the file to launch. Launch details are provided in \a
+  /// launch_info.
+  ///
+  /// \param[in] exe_module
+  ///     The module from which to extract the file specification and
+  ///     launch.
+  ///
+  /// \param[in] launch_info
+  ///     Details (e.g. arguments, stdio redirection, etc.) for the
+  ///     requested launch.
+  ///
+  /// \return
+  ///     An Status instance indicating success or failure of the
+  ///     operation.
+  virtual Status DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support launching processes",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  /// Called after launching a process.
+  ///
+  /// Allow Process plug-ins to execute some code after launching a process.
+  virtual void DidLaunch() {}
+
+  /// Called before resuming to a process.
+  ///
+  /// Allow Process plug-ins to execute some code before resuming a process.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status WillResume() { return Status(); }
+
+  /// Resumes all of a process's threads as configured using the Thread run
+  /// control functions.
+  ///
+  /// Threads for a process should be updated with one of the run control
+  /// actions (resume, step, or suspend) that they should take when the
+  /// process is resumed. If no run control action is given to a thread it
+  /// will be resumed by default.
+  ///
+  /// \return
+  ///     Returns \b true if the process successfully resumes using
+  ///     the thread run control actions, \b false otherwise.
+  ///
+  /// \see Thread:Resume()
+  /// \see Thread:Step()
+  /// \see Thread:Suspend()
+  virtual Status DoResume() {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support resuming processes",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  /// Called after resuming a process.
+  ///
+  /// Allow Process plug-ins to execute some code after resuming a process.
+  virtual void DidResume() {}
+
+  /// Called before halting to a process.
+  ///
+  /// Allow Process plug-ins to execute some code before halting a process.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status WillHalt() { return Status(); }
+
+  /// Halts a running process.
+  ///
+  /// DoHalt must produce one and only one stop StateChanged event if it
+  /// actually stops the process.  If the stop happens through some natural
+  /// event (for instance a SIGSTOP), then forwarding that event will do.
+  /// Otherwise, you must generate the event manually. This function is called
+  /// from the context of the private state thread.
+  ///
+  /// \param[out] caused_stop
+  ///     If true, then this Halt caused the stop, otherwise, the
+  ///     process was already stopped.
+  ///
+  /// \return
+  ///     Returns \b true if the process successfully halts, \b false
+  ///     otherwise.
+  virtual Status DoHalt(bool &caused_stop) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support halting processes",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  /// Called after halting a process.
+  ///
+  /// Allow Process plug-ins to execute some code after halting a process.
+  virtual void DidHalt() {}
+
+  /// Called before detaching from a process.
+  ///
+  /// Allow Process plug-ins to execute some code before detaching from a
+  /// process.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status WillDetach() { return Status(); }
+
+  /// Detaches from a running or stopped process.
+  ///
+  /// \return
+  ///     Returns \b true if the process successfully detaches, \b
+  ///     false otherwise.
+  virtual Status DoDetach(bool keep_stopped) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support detaching from processes",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  /// Called after detaching from a process.
+  ///
+  /// Allow Process plug-ins to execute some code after detaching from a
+  /// process.
+  virtual void DidDetach() {}
+
+  virtual bool DetachRequiresHalt() { return false; }
+
+  /// Called before sending a signal to a process.
+  ///
+  /// Allow Process plug-ins to execute some code before sending a signal to a
+  /// process.
+  ///
+  /// \return
+  ///     Returns no error if it is safe to proceed with a call to
+  ///     Process::DoSignal(int), otherwise an error describing what
+  ///     prevents the signal from being sent.
+  virtual Status WillSignal() { return Status(); }
+
+  /// Sends a process a UNIX signal \a signal.
+  ///
+  /// \return
+  ///     Returns an error object.
+  virtual Status DoSignal(int signal) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support sending signals to processes",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  virtual Status WillDestroy() { return Status(); }
+
+  virtual Status DoDestroy() = 0;
+
+  virtual void DidDestroy() {}
+
+  virtual bool DestroyRequiresHalt() { return true; }
+
+  /// Called after sending a signal to a process.
+  ///
+  /// Allow Process plug-ins to execute some code after sending a signal to a
+  /// process.
+  virtual void DidSignal() {}
+
+  /// Currently called as part of ShouldStop.
+  /// FIXME: Should really happen when the target stops before the
+  /// event is taken from the queue...
+  ///
+  /// This callback is called as the event
+  /// is about to be queued up to allow Process plug-ins to execute some code
+  /// prior to clients being notified that a process was stopped. Common
+  /// operations include updating the thread list, invalidating any thread
+  /// state (registers, stack, etc) prior to letting the notification go out.
+  ///
+  virtual void RefreshStateAfterStop() = 0;
+
+  /// Sometimes the connection to a process can detect the host OS version
+  /// that the process is running on. The current platform should be checked
+  /// first in case the platform is connected, but clients can fall back onto
+  /// this function if the platform fails to identify the host OS version. The
+  /// platform should be checked first in case you are running a simulator
+  /// platform that might itself be running natively, but have different
+  /// heuristics for figuring out which OS is is emulating.
+  ///
+  /// \return
+  ///     Returns the version tuple of the host OS. In case of failure an empty
+  ///     VersionTuple is returner.
+  virtual llvm::VersionTuple GetHostOSVersion() { return llvm::VersionTuple(); }
+
+  /// Get the target object pointer for this module.
+  ///
+  /// \return
+  ///     A Target object pointer to the target that owns this
+  ///     module.
+  Target &GetTarget() { return *m_target_wp.lock(); }
+
+  /// Get the const target object pointer for this module.
+  ///
+  /// \return
+  ///     A const Target object pointer to the target that owns this
+  ///     module.
+  const Target &GetTarget() const { return *m_target_wp.lock(); }
+
+  /// Flush all data in the process.
+  ///
+  /// Flush the memory caches, all threads, and any other cached data in the
+  /// process.
+  ///
+  /// This function can be called after a world changing event like adding a
+  /// new symbol file, or after the process makes a large context switch (from
+  /// boot ROM to booted into an OS).
+  void Flush();
+
+  /// Get accessor for the current process state.
+  ///
+  /// \return
+  ///     The current state of the process.
+  ///
+  /// \see lldb::StateType
+  lldb::StateType GetState();
+
+  lldb::ExpressionResults
+  RunThreadPlan(ExecutionContext &exe_ctx, lldb::ThreadPlanSP &thread_plan_sp,
+                const EvaluateExpressionOptions &options,
+                DiagnosticManager &diagnostic_manager);
+
+  static const char *ExecutionResultAsCString(lldb::ExpressionResults result);
+
+  void GetStatus(Stream &ostrm);
+
+  size_t GetThreadStatus(Stream &ostrm, bool only_threads_with_stop_reason,
+                         uint32_t start_frame, uint32_t num_frames,
+                         uint32_t num_frames_with_source,
+                         bool stop_format);
+
+  void SendAsyncInterrupt();
+
+  // Notify this process class that modules got loaded.
+  //
+  // If subclasses override this method, they must call this version before
+  // doing anything in the subclass version of the function.
+  virtual void ModulesDidLoad(ModuleList &module_list);
+
+  /// Retrieve the list of shared libraries that are loaded for this process
+  /// This method is used on pre-macOS 10.12, pre-iOS 10, pre-tvOS 10, pre-
+  /// watchOS 3 systems.  The following two methods are for newer versions of
+  /// those OSes.
+  ///
+  /// For certain platforms, the time it takes for the DynamicLoader plugin to
+  /// read all of the shared libraries out of memory over a slow communication
+  /// channel may be too long.  In that instance, the gdb-remote stub may be
+  /// able to retrieve the necessary information about the solibs out of
+  /// memory and return a concise summary sufficient for the DynamicLoader
+  /// plugin.
+  ///
+  /// \param [in] image_list_address
+  ///     The address where the table of shared libraries is stored in memory,
+  ///     if that is appropriate for this platform.  Else this may be
+  ///     passed as LLDB_INVALID_ADDRESS.
+  ///
+  /// \param [in] image_count
+  ///     The number of shared libraries that are present in this process, if
+  ///     that is appropriate for this platofrm  Else this may be passed as
+  ///     LLDB_INVALID_ADDRESS.
+  ///
+  /// \return
+  ///     A StructureDataSP object which, if non-empty, will contain the
+  ///     information the DynamicLoader needs to get the initial scan of
+  ///     solibs resolved.
+  virtual lldb_private::StructuredData::ObjectSP
+  GetLoadedDynamicLibrariesInfos(lldb::addr_t image_list_address,
+                                 lldb::addr_t image_count) {
+    return StructuredData::ObjectSP();
+  }
+
+  // On macOS 10.12, tvOS 10, iOS 10, watchOS 3 and newer, debugserver can
+  // return the full list of loaded shared libraries without needing any input.
+  virtual lldb_private::StructuredData::ObjectSP
+  GetLoadedDynamicLibrariesInfos() {
+    return StructuredData::ObjectSP();
+  }
+
+  // On macOS 10.12, tvOS 10, iOS 10, watchOS 3 and newer, debugserver can
+  // return information about binaries given their load addresses.
+  virtual lldb_private::StructuredData::ObjectSP GetLoadedDynamicLibrariesInfos(
+      const std::vector<lldb::addr_t> &load_addresses) {
+    return StructuredData::ObjectSP();
+  }
+
+  // Get information about the library shared cache, if that exists
+  //
+  // On macOS 10.12, tvOS 10, iOS 10, watchOS 3 and newer, debugserver can
+  // return information about the library shared cache (a set of standard
+  // libraries that are loaded at the same location for all processes on a
+  // system) in use.
+  virtual lldb_private::StructuredData::ObjectSP GetSharedCacheInfo() {
+    return StructuredData::ObjectSP();
+  }
+
+  /// Print a user-visible warning about a module being built with
+  /// optimization
+  ///
+  /// Prints a async warning message to the user one time per Module where a
+  /// function is found that was compiled with optimization, per Process.
+  ///
+  /// \param [in] sc
+  ///     A SymbolContext with eSymbolContextFunction and eSymbolContextModule
+  ///     pre-computed.
+  void PrintWarningOptimization(const SymbolContext &sc);
+
+  virtual bool GetProcessInfo(ProcessInstanceInfo &info);
+
+public:
+  /// Get the exit status for a process.
+  ///
+  /// \return
+  ///     The process's return code, or -1 if the current process
+  ///     state is not eStateExited.
+  int GetExitStatus();
+
+  /// Get a textual description of what the process exited.
+  ///
+  /// \return
+  ///     The textual description of why the process exited, or nullptr
+  ///     if there is no description available.
+  const char *GetExitDescription();
+
+  virtual void DidExit() {}
+
+  /// Get the Modification ID of the process.
+  ///
+  /// \return
+  ///     The modification ID of the process.
+  ProcessModID GetModID() const { return m_mod_id; }
+
+  const ProcessModID &GetModIDRef() const { return m_mod_id; }
+
+  uint32_t GetStopID() const { return m_mod_id.GetStopID(); }
+
+  uint32_t GetResumeID() const { return m_mod_id.GetResumeID(); }
+
+  uint32_t GetLastUserExpressionResumeID() const {
+    return m_mod_id.GetLastUserExpressionResumeID();
+  }
+
+  uint32_t GetLastNaturalStopID() const {
+    return m_mod_id.GetLastNaturalStopID();
+  }
+
+  lldb::EventSP GetStopEventForStopID(uint32_t stop_id) const {
+    return m_mod_id.GetStopEventForStopID(stop_id);
+  }
+
+  /// Set accessor for the process exit status (return code).
+  ///
+  /// Sometimes a child exits and the exit can be detected by global functions
+  /// (signal handler for SIGCHLD for example). This accessor allows the exit
+  /// status to be set from an external source.
+  ///
+  /// Setting this will cause a eStateExited event to be posted to the process
+  /// event queue.
+  ///
+  /// \param[in] exit_status
+  ///     The value for the process's return code.
+  ///
+  /// \see lldb::StateType
+  virtual bool SetExitStatus(int exit_status, const char *cstr);
+
+  /// Check if a process is still alive.
+  ///
+  /// \return
+  ///     Returns \b true if the process is still valid, \b false
+  ///     otherwise.
+  virtual bool IsAlive();
+
+  /// Before lldb detaches from a process, it warns the user that they are
+  /// about to lose their debug session. In some cases, this warning doesn't
+  /// need to be emitted -- for instance, with core file debugging where the
+  /// user can reconstruct the "state" by simply re-running the debugger on
+  /// the core file.
+  ///
+  /// \return
+  //      true if the user should be warned about detaching from this process.
+  virtual bool WarnBeforeDetach() const { return true; }
+
+  /// Actually do the reading of memory from a process.
+  ///
+  /// Subclasses must override this function and can return fewer bytes than
+  /// requested when memory requests are too large. This class will break up
+  /// the memory requests and keep advancing the arguments along as needed.
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual load address that indicates where to start reading
+  ///     memory from.
+  ///
+  /// \param[in] size
+  ///     The number of bytes to read.
+  ///
+  /// \param[out] buf
+  ///     A byte buffer that is at least \a size bytes long that
+  ///     will receive the memory bytes.
+  ///
+  /// \param[out] error
+  ///     An error that indicates the success or failure of this
+  ///     operation. If error indicates success (error.Success()),
+  ///     then the value returned can be trusted, otherwise zero
+  ///     will be returned.
+  ///
+  /// \return
+  ///     The number of bytes that were actually read into \a buf.
+  ///     Zero is returned in the case of an error.
+  virtual size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size,
+                              Status &error) = 0;
+
+  /// Read of memory from a process.
+  ///
+  /// This function will read memory from the current process's address space
+  /// and remove any traps that may have been inserted into the memory.
+  ///
+  /// This function is not meant to be overridden by Process subclasses, the
+  /// subclasses should implement Process::DoReadMemory (lldb::addr_t, size_t,
+  /// void *).
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual load address that indicates where to start reading
+  ///     memory from.
+  ///
+  /// \param[out] buf
+  ///     A byte buffer that is at least \a size bytes long that
+  ///     will receive the memory bytes.
+  ///
+  /// \param[in] size
+  ///     The number of bytes to read.
+  ///
+  /// \param[out] error
+  ///     An error that indicates the success or failure of this
+  ///     operation. If error indicates success (error.Success()),
+  ///     then the value returned can be trusted, otherwise zero
+  ///     will be returned.
+  ///
+  /// \return
+  ///     The number of bytes that were actually read into \a buf. If
+  ///     the returned number is greater than zero, yet less than \a
+  ///     size, then this function will get called again with \a
+  ///     vm_addr, \a buf, and \a size updated appropriately. Zero is
+  ///     returned in the case of an error.
+  virtual size_t ReadMemory(lldb::addr_t vm_addr, void *buf, size_t size,
+                            Status &error);
+
+  /// Read of memory from a process.
+  ///
+  /// This function has the same semantics of ReadMemory except that it
+  /// bypasses caching.
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual load address that indicates where to start reading
+  ///     memory from.
+  ///
+  /// \param[out] buf
+  ///     A byte buffer that is at least \a size bytes long that
+  ///     will receive the memory bytes.
+  ///
+  /// \param[in] size
+  ///     The number of bytes to read.
+  ///
+  /// \param[out] error
+  ///     An error that indicates the success or failure of this
+  ///     operation. If error indicates success (error.Success()),
+  ///     then the value returned can be trusted, otherwise zero
+  ///     will be returned.
+  ///
+  /// \return
+  ///     The number of bytes that were actually read into \a buf. If
+  ///     the returned number is greater than zero, yet less than \a
+  ///     size, then this function will get called again with \a
+  ///     vm_addr, \a buf, and \a size updated appropriately. Zero is
+  ///     returned in the case of an error.
+  size_t ReadMemoryFromInferior(lldb::addr_t vm_addr, void *buf, size_t size,
+                                Status &error);
+
+  /// Read a NULL terminated string from memory
+  ///
+  /// This function will read a cache page at a time until a NULL string
+  /// terminator is found. It will stop reading if an aligned sequence of NULL
+  /// termination \a type_width bytes is not found before reading \a
+  /// cstr_max_len bytes.  The results are always guaranteed to be NULL
+  /// terminated, and that no more than (max_bytes - type_width) bytes will be
+  /// read.
+  ///
+  /// \param[in] vm_addr
+  ///     The virtual load address to start the memory read.
+  ///
+  /// \param[in] str
+  ///     A character buffer containing at least max_bytes.
+  ///
+  /// \param[in] max_bytes
+  ///     The maximum number of bytes to read.
+  ///
+  /// \param[in] error
+  ///     The error status of the read operation.
+  ///
+  /// \param[in] type_width
+  ///     The size of the null terminator (1 to 4 bytes per
+  ///     character).  Defaults to 1.
+  ///
+  /// \return
+  ///     The error status or the number of bytes prior to the null terminator.
+  size_t ReadStringFromMemory(lldb::addr_t vm_addr, char *str, size_t max_bytes,
+                              Status &error, size_t type_width = 1);
+
+  /// Read a NULL terminated C string from memory
+  ///
+  /// This function will read a cache page at a time until the NULL
+  /// C string terminator is found. It will stop reading if the NULL
+  /// termination byte isn't found before reading \a cstr_max_len bytes, and
+  /// the results are always guaranteed to be NULL terminated (at most
+  /// cstr_max_len - 1 bytes will be read).
+  size_t ReadCStringFromMemory(lldb::addr_t vm_addr, char *cstr,
+                               size_t cstr_max_len, Status &error);
+
+  size_t ReadCStringFromMemory(lldb::addr_t vm_addr, std::string &out_str,
+                               Status &error);
+
+  /// Reads an unsigned integer of the specified byte size from process
+  /// memory.
+  ///
+  /// \param[in] load_addr
+  ///     A load address of the integer to read.
+  ///
+  /// \param[in] byte_size
+  ///     The size in byte of the integer to read.
+  ///
+  /// \param[in] fail_value
+  ///     The value to return if we fail to read an integer.
+  ///
+  /// \param[out] error
+  ///     An error that indicates the success or failure of this
+  ///     operation. If error indicates success (error.Success()),
+  ///     then the value returned can be trusted, otherwise zero
+  ///     will be returned.
+  ///
+  /// \return
+  ///     The unsigned integer that was read from the process memory
+  ///     space. If the integer was smaller than a uint64_t, any
+  ///     unused upper bytes will be zero filled. If the process
+  ///     byte order differs from the host byte order, the integer
+  ///     value will be appropriately byte swapped into host byte
+  ///     order.
+  uint64_t ReadUnsignedIntegerFromMemory(lldb::addr_t load_addr,
+                                         size_t byte_size, uint64_t fail_value,
+                                         Status &error);
+
+  int64_t ReadSignedIntegerFromMemory(lldb::addr_t load_addr, size_t byte_size,
+                                      int64_t fail_value, Status &error);
+
+  lldb::addr_t ReadPointerFromMemory(lldb::addr_t vm_addr, Status &error);
+
+  bool WritePointerToMemory(lldb::addr_t vm_addr, lldb::addr_t ptr_value,
+                            Status &error);
+
+  /// Actually do the writing of memory to a process.
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual load address that indicates where to start writing
+  ///     memory to.
+  ///
+  /// \param[in] buf
+  ///     A byte buffer that is at least \a size bytes long that
+  ///     contains the data to write.
+  ///
+  /// \param[in] size
+  ///     The number of bytes to write.
+  ///
+  /// \param[out] error
+  ///     An error value in case the memory write fails.
+  ///
+  /// \return
+  ///     The number of bytes that were actually written.
+  virtual size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf,
+                               size_t size, Status &error) {
+    error.SetErrorStringWithFormat(
+        "error: %s does not support writing to processes",
+        GetPluginName().GetCString());
+    return 0;
+  }
+
+  /// Write all or part of a scalar value to memory.
+  ///
+  /// The value contained in \a scalar will be swapped to match the byte order
+  /// of the process that is being debugged. If \a size is less than the size
+  /// of scalar, the least significant \a size bytes from scalar will be
+  /// written. If \a size is larger than the byte size of scalar, then the
+  /// extra space will be padded with zeros and the scalar value will be
+  /// placed in the least significant bytes in memory.
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual load address that indicates where to start writing
+  ///     memory to.
+  ///
+  /// \param[in] scalar
+  ///     The scalar to write to the debugged process.
+  ///
+  /// \param[in] size
+  ///     This value can be smaller or larger than the scalar value
+  ///     itself. If \a size is smaller than the size of \a scalar,
+  ///     the least significant bytes in \a scalar will be used. If
+  ///     \a size is larger than the byte size of \a scalar, then
+  ///     the extra space will be padded with zeros. If \a size is
+  ///     set to UINT32_MAX, then the size of \a scalar will be used.
+  ///
+  /// \param[out] error
+  ///     An error value in case the memory write fails.
+  ///
+  /// \return
+  ///     The number of bytes that were actually written.
+  size_t WriteScalarToMemory(lldb::addr_t vm_addr, const Scalar &scalar,
+                             size_t size, Status &error);
+
+  size_t ReadScalarIntegerFromMemory(lldb::addr_t addr, uint32_t byte_size,
+                                     bool is_signed, Scalar &scalar,
+                                     Status &error);
+
+  /// Write memory to a process.
+  ///
+  /// This function will write memory to the current process's address space
+  /// and maintain any traps that might be present due to software
+  /// breakpoints.
+  ///
+  /// This function is not meant to be overridden by Process subclasses, the
+  /// subclasses should implement Process::DoWriteMemory (lldb::addr_t,
+  /// size_t, void *).
+  ///
+  /// \param[in] vm_addr
+  ///     A virtual load address that indicates where to start writing
+  ///     memory to.
+  ///
+  /// \param[in] buf
+  ///     A byte buffer that is at least \a size bytes long that
+  ///     contains the data to write.
+  ///
+  /// \param[in] size
+  ///     The number of bytes to write.
+  ///
+  /// \return
+  ///     The number of bytes that were actually written.
+  // TODO: change this to take an ArrayRef<uint8_t>
+  size_t WriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,
+                     Status &error);
+
+  /// Actually allocate memory in the process.
+  ///
+  /// This function will allocate memory in the process's address space.  This
+  /// can't rely on the generic function calling mechanism, since that
+  /// requires this function.
+  ///
+  /// \param[in] size
+  ///     The size of the allocation requested.
+  ///
+  /// \return
+  ///     The address of the allocated buffer in the process, or
+  ///     LLDB_INVALID_ADDRESS if the allocation failed.
+
+  virtual lldb::addr_t DoAllocateMemory(size_t size, uint32_t permissions,
+                                        Status &error) {
+    error.SetErrorStringWithFormat(
+        "error: %s does not support allocating in the debug process",
+        GetPluginName().GetCString());
+    return LLDB_INVALID_ADDRESS;
+  }
+
+  virtual Status WriteObjectFile(std::vector<ObjectFile::LoadableData> entries);
+
+  /// The public interface to allocating memory in the process.
+  ///
+  /// This function will allocate memory in the process's address space.  This
+  /// can't rely on the generic function calling mechanism, since that
+  /// requires this function.
+  ///
+  /// \param[in] size
+  ///     The size of the allocation requested.
+  ///
+  /// \param[in] permissions
+  ///     Or together any of the lldb::Permissions bits.  The permissions on
+  ///     a given memory allocation can't be changed after allocation.  Note
+  ///     that a block that isn't set writable can still be written on from
+  ///     lldb,
+  ///     just not by the process itself.
+  ///
+  /// \param[in,out] error
+  ///     An error object to fill in if things go wrong.
+  /// \return
+  ///     The address of the allocated buffer in the process, or
+  ///     LLDB_INVALID_ADDRESS if the allocation failed.
+  lldb::addr_t AllocateMemory(size_t size, uint32_t permissions, Status &error);
+
+  /// The public interface to allocating memory in the process, this also
+  /// clears the allocated memory.
+  ///
+  /// This function will allocate memory in the process's address space.  This
+  /// can't rely on the generic function calling mechanism, since that
+  /// requires this function.
+  ///
+  /// \param[in] size
+  ///     The size of the allocation requested.
+  ///
+  /// \param[in] permissions
+  ///     Or together any of the lldb::Permissions bits.  The permissions on
+  ///     a given memory allocation can't be changed after allocation.  Note
+  ///     that a block that isn't set writable can still be written on from
+  ///     lldb,
+  ///     just not by the process itself.
+  ///
+  /// \param[in/out] error
+  ///     An error object to fill in if things go wrong.
+  /// \return
+  ///     The address of the allocated buffer in the process, or
+  ///     LLDB_INVALID_ADDRESS if the allocation failed.
+
+  lldb::addr_t CallocateMemory(size_t size, uint32_t permissions,
+                               Status &error);
+
+  /// Resolve dynamically loaded indirect functions.
+  ///
+  /// \param[in] address
+  ///     The load address of the indirect function to resolve.
+  ///
+  /// \param[out] error
+  ///     An error value in case the resolve fails.
+  ///
+  /// \return
+  ///     The address of the resolved function.
+  ///     LLDB_INVALID_ADDRESS if the resolution failed.
+  virtual lldb::addr_t ResolveIndirectFunction(const Address *address,
+                                               Status &error);
+
+  /// Locate the memory region that contains load_addr.
+  ///
+  /// If load_addr is within the address space the process has mapped
+  /// range_info will be filled in with the start and end of that range as
+  /// well as the permissions for that range and range_info.GetMapped will
+  /// return true.
+  ///
+  /// If load_addr is outside any mapped region then range_info will have its
+  /// start address set to load_addr and the end of the range will indicate
+  /// the start of the next mapped range or be set to LLDB_INVALID_ADDRESS if
+  /// there are no valid mapped ranges between load_addr and the end of the
+  /// process address space.
+  ///
+  /// GetMemoryRegionInfo will only return an error if it is unimplemented for
+  /// the current process.
+  ///
+  /// \param[in] load_addr
+  ///     The load address to query the range_info for.
+  ///
+  /// \param[out] range_info
+  ///     An range_info value containing the details of the range.
+  ///
+  /// \return
+  ///     An error value.
+  virtual Status GetMemoryRegionInfo(lldb::addr_t load_addr,
+                                     MemoryRegionInfo &range_info) {
+    Status error;
+    error.SetErrorString("Process::GetMemoryRegionInfo() not supported");
+    return error;
+  }
+
+  /// Obtain all the mapped memory regions within this process.
+  ///
+  /// \param[out] region_list
+  ///     A vector to contain MemoryRegionInfo objects for all mapped
+  ///     ranges.
+  ///
+  /// \return
+  ///     An error value.
+  virtual Status
+  GetMemoryRegions(lldb_private::MemoryRegionInfos &region_list);
+
+  virtual Status GetWatchpointSupportInfo(uint32_t &num) {
+    Status error;
+    num = 0;
+    error.SetErrorString("Process::GetWatchpointSupportInfo() not supported");
+    return error;
+  }
+
+  virtual Status GetWatchpointSupportInfo(uint32_t &num, bool &after) {
+    Status error;
+    num = 0;
+    after = true;
+    error.SetErrorString("Process::GetWatchpointSupportInfo() not supported");
+    return error;
+  }
+
+  lldb::ModuleSP ReadModuleFromMemory(const FileSpec &file_spec,
+                                      lldb::addr_t header_addr,
+                                      size_t size_to_read = 512);
+
+  /// Attempt to get the attributes for a region of memory in the process.
+  ///
+  /// It may be possible for the remote debug server to inspect attributes for
+  /// a region of memory in the process, such as whether there is a valid page
+  /// of memory at a given address or whether that page is
+  /// readable/writable/executable by the process.
+  ///
+  /// \param[in] load_addr
+  ///     The address of interest in the process.
+  ///
+  /// \param[out] permissions
+  ///     If this call returns successfully, this bitmask will have
+  ///     its Permissions bits set to indicate whether the region is
+  ///     readable/writable/executable.  If this call fails, the
+  ///     bitmask values are undefined.
+  ///
+  /// \return
+  ///     Returns true if it was able to determine the attributes of the
+  ///     memory region.  False if not.
+  virtual bool GetLoadAddressPermissions(lldb::addr_t load_addr,
+                                         uint32_t &permissions);
+
+  /// Determines whether executing JIT-compiled code in this process is
+  /// possible.
+  ///
+  /// \return
+  ///     True if execution of JIT code is possible; false otherwise.
+  bool CanJIT();
+
+  /// Sets whether executing JIT-compiled code in this process is possible.
+  ///
+  /// \param[in] can_jit
+  ///     True if execution of JIT code is possible; false otherwise.
+  void SetCanJIT(bool can_jit);
+
+  /// Determines whether executing function calls using the interpreter is
+  /// possible for this process.
+  ///
+  /// \return
+  ///     True if possible; false otherwise.
+  bool CanInterpretFunctionCalls() { return m_can_interpret_function_calls; }
+
+  /// Sets whether executing function calls using the interpreter is possible
+  /// for this process.
+  ///
+  /// \param[in] can_interpret_function_calls
+  ///     True if possible; false otherwise.
+  void SetCanInterpretFunctionCalls(bool can_interpret_function_calls) {
+    m_can_interpret_function_calls = can_interpret_function_calls;
+  }
+
+  /// Sets whether executing code in this process is possible. This could be
+  /// either through JIT or interpreting.
+  ///
+  /// \param[in] can_run_code
+  ///     True if execution of code is possible; false otherwise.
+  void SetCanRunCode(bool can_run_code);
+
+  /// Actually deallocate memory in the process.
+  ///
+  /// This function will deallocate memory in the process's address space that
+  /// was allocated with AllocateMemory.
+  ///
+  /// \param[in] ptr
+  ///     A return value from AllocateMemory, pointing to the memory you
+  ///     want to deallocate.
+  ///
+  /// \return
+  ///     \btrue if the memory was deallocated, \bfalse otherwise.
+  virtual Status DoDeallocateMemory(lldb::addr_t ptr) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support deallocating in the debug process",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  /// The public interface to deallocating memory in the process.
+  ///
+  /// This function will deallocate memory in the process's address space that
+  /// was allocated with AllocateMemory.
+  ///
+  /// \param[in] ptr
+  ///     A return value from AllocateMemory, pointing to the memory you
+  ///     want to deallocate.
+  ///
+  /// \return
+  ///     \btrue if the memory was deallocated, \bfalse otherwise.
+  Status DeallocateMemory(lldb::addr_t ptr);
+
+  /// Get any available STDOUT.
+  ///
+  /// Calling this method is a valid operation only if all of the following
+  /// conditions are true: 1) The process was launched, and not attached to.
+  /// 2) The process was not launched with eLaunchFlagDisableSTDIO. 3) The
+  /// process was launched without supplying a valid file path
+  ///    for STDOUT.
+  ///
+  /// Note that the implementation will probably need to start a read thread
+  /// in the background to make sure that the pipe is drained and the STDOUT
+  /// buffered appropriately, to prevent the process from deadlocking trying
+  /// to write to a full buffer.
+  ///
+  /// Events will be queued indicating that there is STDOUT available that can
+  /// be retrieved using this function.
+  ///
+  /// \param[out] buf
+  ///     A buffer that will receive any STDOUT bytes that are
+  ///     currently available.
+  ///
+  /// \param[in] buf_size
+  ///     The size in bytes for the buffer \a buf.
+  ///
+  /// \return
+  ///     The number of bytes written into \a buf. If this value is
+  ///     equal to \a buf_size, another call to this function should
+  ///     be made to retrieve more STDOUT data.
+  virtual size_t GetSTDOUT(char *buf, size_t buf_size, Status &error);
+
+  /// Get any available STDERR.
+  ///
+  /// Calling this method is a valid operation only if all of the following
+  /// conditions are true: 1) The process was launched, and not attached to.
+  /// 2) The process was not launched with eLaunchFlagDisableSTDIO. 3) The
+  /// process was launched without supplying a valid file path
+  ///    for STDERR.
+  ///
+  /// Note that the implementation will probably need to start a read thread
+  /// in the background to make sure that the pipe is drained and the STDERR
+  /// buffered appropriately, to prevent the process from deadlocking trying
+  /// to write to a full buffer.
+  ///
+  /// Events will be queued indicating that there is STDERR available that can
+  /// be retrieved using this function.
+  ///
+  /// \param[in] buf
+  ///     A buffer that will receive any STDERR bytes that are
+  ///     currently available.
+  ///
+  /// \param[out] buf_size
+  ///     The size in bytes for the buffer \a buf.
+  ///
+  /// \return
+  ///     The number of bytes written into \a buf. If this value is
+  ///     equal to \a buf_size, another call to this function should
+  ///     be made to retrieve more STDERR data.
+  virtual size_t GetSTDERR(char *buf, size_t buf_size, Status &error);
+
+  /// Puts data into this process's STDIN.
+  ///
+  /// Calling this method is a valid operation only if all of the following
+  /// conditions are true: 1) The process was launched, and not attached to.
+  /// 2) The process was not launched with eLaunchFlagDisableSTDIO. 3) The
+  /// process was launched without supplying a valid file path
+  ///    for STDIN.
+  ///
+  /// \param[in] buf
+  ///     A buffer that contains the data to write to the process's STDIN.
+  ///
+  /// \param[in] buf_size
+  ///     The size in bytes for the buffer \a buf.
+  ///
+  /// \return
+  ///     The number of bytes written into \a buf. If this value is
+  ///     less than \a buf_size, another call to this function should
+  ///     be made to write the rest of the data.
+  virtual size_t PutSTDIN(const char *buf, size_t buf_size, Status &error) {
+    error.SetErrorString("stdin unsupported");
+    return 0;
+  }
+
+  /// Get any available profile data.
+  ///
+  /// \param[out] buf
+  ///     A buffer that will receive any profile data bytes that are
+  ///     currently available.
+  ///
+  /// \param[out] buf_size
+  ///     The size in bytes for the buffer \a buf.
+  ///
+  /// \return
+  ///     The number of bytes written into \a buf. If this value is
+  ///     equal to \a buf_size, another call to this function should
+  ///     be made to retrieve more profile data.
+  virtual size_t GetAsyncProfileData(char *buf, size_t buf_size, Status &error);
+
+  // Process Breakpoints
+  size_t GetSoftwareBreakpointTrapOpcode(BreakpointSite *bp_site);
+
+  virtual Status EnableBreakpointSite(BreakpointSite *bp_site) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support enabling breakpoints",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  virtual Status DisableBreakpointSite(BreakpointSite *bp_site) {
+    Status error;
+    error.SetErrorStringWithFormat(
+        "error: %s does not support disabling breakpoints",
+        GetPluginName().GetCString());
+    return error;
+  }
+
+  // This is implemented completely using the lldb::Process API. Subclasses
+  // don't need to implement this function unless the standard flow of read
+  // existing opcode, write breakpoint opcode, verify breakpoint opcode doesn't
+  // work for a specific process plug-in.
+  virtual Status EnableSoftwareBreakpoint(BreakpointSite *bp_site);
+
+  // This is implemented completely using the lldb::Process API. Subclasses
+  // don't need to implement this function unless the standard flow of
+  // restoring original opcode in memory and verifying the restored opcode
+  // doesn't work for a specific process plug-in.
+  virtual Status DisableSoftwareBreakpoint(BreakpointSite *bp_site);
+
+  BreakpointSiteList &GetBreakpointSiteList();
+
+  const BreakpointSiteList &GetBreakpointSiteList() const;
+
+  void DisableAllBreakpointSites();
+
+  Status ClearBreakpointSiteByID(lldb::user_id_t break_id);
+
+  lldb::break_id_t CreateBreakpointSite(const lldb::BreakpointLocationSP &owner,
+                                        bool use_hardware);
+
+  Status DisableBreakpointSiteByID(lldb::user_id_t break_id);
+
+  Status EnableBreakpointSiteByID(lldb::user_id_t break_id);
+
+  // BreakpointLocations use RemoveOwnerFromBreakpointSite to remove themselves
+  // from the owner's list of this breakpoint sites.
+  void RemoveOwnerFromBreakpointSite(lldb::user_id_t owner_id,
+                                     lldb::user_id_t owner_loc_id,
+                                     lldb::BreakpointSiteSP &bp_site_sp);
+
+  // Process Watchpoints (optional)
+  virtual Status EnableWatchpoint(Watchpoint *wp, bool notify = true);
+
+  virtual Status DisableWatchpoint(Watchpoint *wp, bool notify = true);
+
+  // Thread Queries
+  virtual bool UpdateThreadList(ThreadList &old_thread_list,
+                                ThreadList &new_thread_list) = 0;
+
+  void UpdateThreadListIfNeeded();
+
+  ThreadList &GetThreadList() { return m_thread_list; }
+
+  // When ExtendedBacktraces are requested, the HistoryThreads that are created
+  // need an owner -- they're saved here in the Process.  The threads in this
+  // list are not iterated over - driver programs need to request the extended
+  // backtrace calls starting from a root concrete thread one by one.
+  ThreadList &GetExtendedThreadList() { return m_extended_thread_list; }
+
+  ThreadList::ThreadIterable Threads() { return m_thread_list.Threads(); }
+
+  uint32_t GetNextThreadIndexID(uint64_t thread_id);
+
+  lldb::ThreadSP CreateOSPluginThread(lldb::tid_t tid, lldb::addr_t context);
+
+  // Returns true if an index id has been assigned to a thread.
+  bool HasAssignedIndexIDToThread(uint64_t sb_thread_id);
+
+  // Given a thread_id, it will assign a more reasonable index id for display
+  // to the user. If the thread_id has previously been assigned, the same index
+  // id will be used.
+  uint32_t AssignIndexIDToThread(uint64_t thread_id);
+
+  // Queue Queries
+
+  void UpdateQueueListIfNeeded();
+
+  QueueList &GetQueueList() {
+    UpdateQueueListIfNeeded();
+    return m_queue_list;
+  }
+
+  QueueList::QueueIterable Queues() {
+    UpdateQueueListIfNeeded();
+    return m_queue_list.Queues();
+  }
+
+  // Event Handling
+  lldb::StateType GetNextEvent(lldb::EventSP &event_sp);
+
+  // Returns the process state when it is stopped. If specified, event_sp_ptr
+  // is set to the event which triggered the stop. If wait_always = false, and
+  // the process is already stopped, this function returns immediately. If the
+  // process is hijacked and use_run_lock is true (the default), then this
+  // function releases the run lock after the stop. Setting use_run_lock to
+  // false will avoid this behavior.
+  lldb::StateType
+  WaitForProcessToStop(const Timeout<std::micro> &timeout,
+                       lldb::EventSP *event_sp_ptr = nullptr,
+                       bool wait_always = true,
+                       lldb::ListenerSP hijack_listener = lldb::ListenerSP(),
+                       Stream *stream = nullptr, bool use_run_lock = true);
+
+  uint32_t GetIOHandlerID() const { return m_iohandler_sync.GetValue(); }
+
+  /// Waits for the process state to be running within a given msec timeout.
+  ///
+  /// The main purpose of this is to implement an interlock waiting for
+  /// HandlePrivateEvent to push an IOHandler.
+  ///
+  /// \param[in] timeout
+  ///     The maximum time length to wait for the process to transition to the
+  ///     eStateRunning state.
+  void SyncIOHandler(uint32_t iohandler_id, const Timeout<std::micro> &timeout);
+
+  lldb::StateType GetStateChangedEvents(
+      lldb::EventSP &event_sp, const Timeout<std::micro> &timeout,
+      lldb::ListenerSP
+          hijack_listener); // Pass an empty ListenerSP to use builtin listener
+
+  /// Centralize the code that handles and prints descriptions for process
+  /// state changes.
+  ///
+  /// \param[in] event_sp
+  ///     The process state changed event
+  ///
+  /// \param[in] stream
+  ///     The output stream to get the state change description
+  ///
+  /// \param[in,out] pop_process_io_handler
+  ///     If this value comes in set to \b true, then pop the Process IOHandler
+  ///     if needed.
+  ///     Else this variable will be set to \b true or \b false to indicate if
+  ///     the process
+  ///     needs to have its process IOHandler popped.
+  ///
+  /// \return
+  ///     \b true if the event describes a process state changed event, \b false
+  ///     otherwise.
+  static bool HandleProcessStateChangedEvent(const lldb::EventSP &event_sp,
+                                             Stream *stream,
+                                             bool &pop_process_io_handler);
+
+  Event *PeekAtStateChangedEvents();
+
+  class ProcessEventHijacker {
+  public:
+    ProcessEventHijacker(Process &process, lldb::ListenerSP listener_sp)
+        : m_process(process) {
+      m_process.HijackProcessEvents(listener_sp);
+    }
+
+    ~ProcessEventHijacker() { m_process.RestoreProcessEvents(); }
+
+  private:
+    Process &m_process;
+  };
+
+  friend class ProcessEventHijacker;
+  friend class ProcessProperties;
+  /// If you need to ensure that you and only you will hear about some public
+  /// event, then make a new listener, set to listen to process events, and
+  /// then call this with that listener.  Then you will have to wait on that
+  /// listener explicitly for events (rather than using the GetNextEvent &
+  /// WaitFor* calls above.  Be sure to call RestoreProcessEvents when you are
+  /// done.
+  ///
+  /// \param[in] listener
+  ///     This is the new listener to whom all process events will be delivered.
+  ///
+  /// \return
+  ///     Returns \b true if the new listener could be installed,
+  ///     \b false otherwise.
+  bool HijackProcessEvents(lldb::ListenerSP listener_sp);
+
+  /// Restores the process event broadcasting to its normal state.
+  ///
+  void RestoreProcessEvents();
+
+  bool StateChangedIsHijackedForSynchronousResume();
+
+  bool StateChangedIsExternallyHijacked();
+
+  const lldb::ABISP &GetABI();
+
+  OperatingSystem *GetOperatingSystem() { return m_os_up.get(); }
+
+  std::vector<LanguageRuntime *>
+  GetLanguageRuntimes(bool retry_if_null = true);
+
+  LanguageRuntime *GetLanguageRuntime(lldb::LanguageType language,
+                                      bool retry_if_null = true);
+
+  bool IsPossibleDynamicValue(ValueObject &in_value);
+
+  bool IsRunning() const;
+
+  DynamicCheckerFunctions *GetDynamicCheckers() {
+    return m_dynamic_checkers_up.get();
+  }
+
+  void SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers);
+
+  /// Call this to set the lldb in the mode where it breaks on new thread
+  /// creations, and then auto-restarts.  This is useful when you are trying
+  /// to run only one thread, but either that thread or the kernel is creating
+  /// new threads in the process.  If you stop when the thread is created, you
+  /// can immediately suspend it, and keep executing only the one thread you
+  /// intend.
+  ///
+  /// \return
+  ///     Returns \b true if we were able to start up the notification
+  ///     \b false otherwise.
+  virtual bool StartNoticingNewThreads() { return true; }
+
+  /// Call this to turn off the stop & notice new threads mode.
+  ///
+  /// \return
+  ///     Returns \b true if we were able to start up the notification
+  ///     \b false otherwise.
+  virtual bool StopNoticingNewThreads() { return true; }
+
+  void SetRunningUserExpression(bool on);
+  void SetRunningUtilityFunction(bool on);
+
+  // lldb::ExecutionContextScope pure virtual functions
+  lldb::TargetSP CalculateTarget() override;
+
+  lldb::ProcessSP CalculateProcess() override { return shared_from_this(); }
+
+  lldb::ThreadSP CalculateThread() override { return lldb::ThreadSP(); }
+
+  lldb::StackFrameSP CalculateStackFrame() override {
+    return lldb::StackFrameSP();
+  }
+
+  void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
+
+  void SetSTDIOFileDescriptor(int file_descriptor);
+
+  // Add a permanent region of memory that should never be read or written to.
+  // This can be used to ensure that memory reads or writes to certain areas of
+  // memory never end up being sent to the DoReadMemory or DoWriteMemory
+  // functions which can improve performance.
+  void AddInvalidMemoryRegion(const LoadRange &region);
+
+  // Remove a permanent region of memory that should never be read or written
+  // to that was previously added with AddInvalidMemoryRegion.
+  bool RemoveInvalidMemoryRange(const LoadRange &region);
+
+  // If the setup code of a thread plan needs to do work that might involve
+  // calling a function in the target, it should not do that work directly in
+  // one of the thread plan functions (DidPush/WillResume) because such work
+  // needs to be handled carefully.  Instead, put that work in a
+  // PreResumeAction callback, and register it with the process.  It will get
+  // done before the actual "DoResume" gets called.
+
+  typedef bool(PreResumeActionCallback)(void *);
+
+  void AddPreResumeAction(PreResumeActionCallback callback, void *baton);
+
+  bool RunPreResumeActions();
+
+  void ClearPreResumeActions();
+
+  void ClearPreResumeAction(PreResumeActionCallback callback, void *baton);
+
+  ProcessRunLock &GetRunLock();
+
+  virtual Status SendEventData(const char *data) {
+    Status return_error("Sending an event is not supported for this process.");
+    return return_error;
+  }
+
+  lldb::ThreadCollectionSP GetHistoryThreads(lldb::addr_t addr);
+
+  lldb::InstrumentationRuntimeSP
+  GetInstrumentationRuntime(lldb::InstrumentationRuntimeType type);
+
+  /// Try to fetch the module specification for a module with the given file
+  /// name and architecture. Process sub-classes have to override this method
+  /// if they support platforms where the Platform object can't get the module
+  /// spec for all module.
+  ///
+  /// \param[in] module_file_spec
+  ///     The file name of the module to get specification for.
+  ///
+  /// \param[in] arch
+  ///     The architecture of the module to get specification for.
+  ///
+  /// \param[out] module_spec
+  ///     The fetched module specification if the return value is
+  ///     \b true, unchanged otherwise.
+  ///
+  /// \return
+  ///     Returns \b true if the module spec fetched successfully,
+  ///     \b false otherwise.
+  virtual bool GetModuleSpec(const FileSpec &module_file_spec,
+                             const ArchSpec &arch, ModuleSpec &module_spec);
+
+  virtual void PrefetchModuleSpecs(llvm::ArrayRef<FileSpec> module_file_specs,
+                                   const llvm::Triple &triple) {}
+
+  /// Try to find the load address of a file.
+  /// The load address is defined as the address of the first memory region
+  /// what contains data mapped from the specified file.
+  ///
+  /// \param[in] file
+  ///     The name of the file whose load address we are looking for
+  ///
+  /// \param[out] is_loaded
+  ///     \b True if the file is loaded into the memory and false
+  ///     otherwise.
+  ///
+  /// \param[out] load_addr
+  ///     The load address of the file if it is loaded into the
+  ///     processes address space, LLDB_INVALID_ADDRESS otherwise.
+  virtual Status GetFileLoadAddress(const FileSpec &file, bool &is_loaded,
+                                    lldb::addr_t &load_addr) {
+    return Status("Not supported");
+  }
+
+  size_t AddImageToken(lldb::addr_t image_ptr);
+
+  lldb::addr_t GetImagePtrFromToken(size_t token) const;
+
+  void ResetImageToken(size_t token);
+
+  /// Find the next branch instruction to set a breakpoint on
+  ///
+  /// When instruction stepping through a source line, instead of stepping
+  /// through each instruction, we can put a breakpoint on the next branch
+  /// instruction (within the range of instructions we are stepping through)
+  /// and continue the process to there, yielding significant performance
+  /// benefits over instruction stepping.
+  ///
+  /// \param[in] default_stop_addr
+  ///     The address of the instruction where lldb would put a
+  ///     breakpoint normally.
+  ///
+  /// \param[in] range_bounds
+  ///     The range which the breakpoint must be contained within.
+  ///     Typically a source line.
+  ///
+  /// \return
+  ///     The address of the next branch instruction, or the end of
+  ///     the range provided in range_bounds.  If there are any
+  ///     problems with the disassembly or getting the instructions,
+  ///     the original default_stop_addr will be returned.
+  Address AdvanceAddressToNextBranchInstruction(Address default_stop_addr,
+                                                AddressRange range_bounds);
+
+  /// Configure asynchronous structured data feature.
+  ///
+  /// Each Process type that supports using an asynchronous StructuredData
+  /// feature should implement this to enable/disable/configure the feature.
+  /// The default implementation here will always return an error indiciating
+  /// the feature is unsupported.
+  ///
+  /// StructuredDataPlugin implementations will call this to configure a
+  /// feature that has been reported as being supported.
+  ///
+  /// \param[in] type_name
+  ///     The StructuredData type name as previously discovered by
+  ///     the Process-derived instance.
+  ///
+  /// \param[in] config
+  ///     Configuration data for the feature being enabled.  This config
+  ///     data, which may be null, will be passed along to the feature
+  ///     to process.  The feature will dictate whether this is a dictionary,
+  ///     an array or some other object.  If the feature needs to be
+  ///     set up properly before it can be enabled, then the config should
+  ///     also take an enable/disable flag.
+  ///
+  /// \return
+  ///     Returns the result of attempting to configure the feature.
+  virtual Status
+  ConfigureStructuredData(ConstString type_name,
+                          const StructuredData::ObjectSP &config_sp);
+
+  /// Broadcasts the given structured data object from the given plugin.
+  ///
+  /// StructuredDataPlugin instances can use this to optionally broadcast any
+  /// of their data if they want to make it available for clients.  The data
+  /// will come in on the structured data event bit
+  /// (eBroadcastBitStructuredData).
+  ///
+  /// \param[in] object_sp
+  ///     The structured data object to broadcast.
+  ///
+  /// \param[in] plugin_sp
+  ///     The plugin that will be reported in the event's plugin
+  ///     parameter.
+  void BroadcastStructuredData(const StructuredData::ObjectSP &object_sp,
+                               const lldb::StructuredDataPluginSP &plugin_sp);
+
+  /// Returns the StructuredDataPlugin associated with a given type name, if
+  /// there is one.
+  ///
+  /// There will only be a plugin for a given StructuredDataType if the
+  /// debugged process monitor claims that the feature is supported. This is
+  /// one way to tell whether a feature is available.
+  ///
+  /// \return
+  ///     The plugin if one is available for the specified feature;
+  ///     otherwise, returns an empty shared pointer.
+  lldb::StructuredDataPluginSP
+  GetStructuredDataPlugin(ConstString type_name) const;
+
+  /// Starts tracing with the configuration provided in options. To enable
+  /// tracing on the complete process the thread_id in the options should be
+  /// set to LLDB_INVALID_THREAD_ID. The API returns a user_id which is needed
+  /// by other API's that manipulate the trace instance. The handling of
+  /// erroneous or unsupported configuration is left to the trace technology
+  /// implementations in the server, as they could be returned as an error, or
+  /// rounded to a valid configuration to start tracing. In the later case the
+  /// GetTraceConfig should supply the actual used trace configuration.
+  virtual lldb::user_id_t StartTrace(const TraceOptions &options,
+                                     Status &error) {
+    error.SetErrorString("Not implemented");
+    return LLDB_INVALID_UID;
+  }
+
+  /// Stops the tracing instance leading to deletion of the trace data. The
+  /// tracing instance is identified by the user_id which is obtained when
+  /// tracing was started from the StartTrace. In case tracing of the complete
+  /// process needs to be stopped the thread_id should be set to
+  /// LLDB_INVALID_THREAD_ID. In the other case that tracing on an individual
+  /// thread needs to be stopped a thread_id can be supplied.
+  virtual Status StopTrace(lldb::user_id_t uid, lldb::tid_t thread_id) {
+    return Status("Not implemented");
+  }
+
+  /// Provides the trace data as raw bytes. A buffer needs to be supplied to
+  /// copy the trace data. The exact behavior of this API may vary across
+  /// trace technology, as some may support partial reading of the trace data
+  /// from a specified offset while some may not. The thread_id should be used
+  /// to select a particular thread for trace extraction.
+  virtual Status GetData(lldb::user_id_t uid, lldb::tid_t thread_id,
+                         llvm::MutableArrayRef<uint8_t> &buffer,
+                         size_t offset = 0) {
+    return Status("Not implemented");
+  }
+
+  /// Similar API as above except for obtaining meta data
+  virtual Status GetMetaData(lldb::user_id_t uid, lldb::tid_t thread_id,
+                             llvm::MutableArrayRef<uint8_t> &buffer,
+                             size_t offset = 0) {
+    return Status("Not implemented");
+  }
+
+  /// API to obtain the trace configuration used by a trace instance.
+  /// Configurations that may be specific to some trace technology should be
+  /// stored in the custom parameters. The options are transported to the
+  /// server, which shall interpret accordingly. The thread_id can be
+  /// specified in the options to obtain the configuration used by a specific
+  /// thread. The thread_id specified should also match the uid otherwise an
+  /// error will be returned.
+  virtual Status GetTraceConfig(lldb::user_id_t uid, TraceOptions &options) {
+    return Status("Not implemented");
+  }
+
+protected:
+  void SetState(lldb::EventSP &event_sp);
+
+  lldb::StateType GetPrivateState();
+
+  /// The "private" side of resuming a process.  This doesn't alter the state
+  /// of m_run_lock, but just causes the process to resume.
+  ///
+  /// \return
+  ///     An Status object describing the success or failure of the resume.
+  Status PrivateResume();
+
+  // Called internally
+  void CompleteAttach();
+
+  /// Print a user-visible warning one time per Process
+  ///
+  /// A facility for printing a warning to the user once per repeat_key.
+  ///
+  /// warning_type is from the Process::Warnings enums. repeat_key is a
+  /// pointer value that will be used to ensure that the warning message is
+  /// not printed multiple times.  For instance, with a warning about a
+  /// function being optimized, you can pass the CompileUnit pointer to have
+  /// the warning issued for only the first function in a CU, or the Function
+  /// pointer to have it issued once for every function, or a Module pointer
+  /// to have it issued once per Module.
+  ///
+  /// Classes outside Process should call a specific PrintWarning method so
+  /// that the warning strings are all centralized in Process, instead of
+  /// calling PrintWarning() directly.
+  ///
+  /// \param [in] warning_type
+  ///     One of the types defined in Process::Warnings.
+  ///
+  /// \param [in] repeat_key
+  ///     A pointer value used to ensure that the warning is only printed once.
+  ///     May be nullptr, indicating that the warning is printed unconditionally
+  ///     every time.
+  ///
+  /// \param [in] fmt
+  ///     printf style format string
+  void PrintWarning(uint64_t warning_type, const void *repeat_key,
+                    const char *fmt, ...) __attribute__((format(printf, 4, 5)));
+
+  // NextEventAction provides a way to register an action on the next event
+  // that is delivered to this process.  There is currently only one next event
+  // action allowed in the process at one time.  If a new "NextEventAction" is
+  // added while one is already present, the old action will be discarded (with
+  // HandleBeingUnshipped called after it is discarded.)
+  //
+  // If you want to resume the process as a result of a resume action, call
+  // RequestResume, don't call Resume directly.
+  class NextEventAction {
+  public:
+    enum EventActionResult {
+      eEventActionSuccess,
+      eEventActionRetry,
+      eEventActionExit
+    };
+
+    NextEventAction(Process *process) : m_process(process) {}
+
+    virtual ~NextEventAction() = default;
+
+    virtual EventActionResult PerformAction(lldb::EventSP &event_sp) = 0;
+    virtual void HandleBeingUnshipped() {}
+    virtual EventActionResult HandleBeingInterrupted() = 0;
+    virtual const char *GetExitString() = 0;
+    void RequestResume() { m_process->m_resume_requested = true; }
+
+  protected:
+    Process *m_process;
+  };
+
+  void SetNextEventAction(Process::NextEventAction *next_event_action) {
+    if (m_next_event_action_up.get())
+      m_next_event_action_up->HandleBeingUnshipped();
+
+    m_next_event_action_up.reset(next_event_action);
+  }
+
+  // This is the completer for Attaching:
+  class AttachCompletionHandler : public NextEventAction {
+  public:
+    AttachCompletionHandler(Process *process, uint32_t exec_count);
+
+    ~AttachCompletionHandler() override = default;
+
+    EventActionResult PerformAction(lldb::EventSP &event_sp) override;
+    EventActionResult HandleBeingInterrupted() override;
+    const char *GetExitString() override;
+
+  private:
+    uint32_t m_exec_count;
+    std::string m_exit_string;
+  };
+
+  bool PrivateStateThreadIsValid() const {
+    lldb::StateType state = m_private_state.GetValue();
+    return state != lldb::eStateInvalid && state != lldb::eStateDetached &&
+           state != lldb::eStateExited && m_private_state_thread.IsJoinable();
+  }
+
+  void ForceNextEventDelivery() { m_force_next_event_delivery = true; }
+
+  /// Loads any plugins associated with asynchronous structured data and maps
+  /// the relevant supported type name to the plugin.
+  ///
+  /// Processes can receive asynchronous structured data from the process
+  /// monitor.  This method will load and map any structured data plugins that
+  /// support the given set of supported type names. Later, if any of these
+  /// features are enabled, the process monitor is free to generate
+  /// asynchronous structured data.  The data must come in as a single \b
+  /// StructuredData::Dictionary.  That dictionary must have a string field
+  /// named 'type', with a value that equals the relevant type name string
+  /// (one of the values in \b supported_type_names).
+  ///
+  /// \param[in] supported_type_names
+  ///     An array of zero or more type names.  Each must be unique.
+  ///     For each entry in the list, a StructuredDataPlugin will be
+  ///     searched for that supports the structured data type name.
+  void MapSupportedStructuredDataPlugins(
+      const StructuredData::Array &supported_type_names);
+
+  /// Route the incoming structured data dictionary to the right plugin.
+  ///
+  /// The incoming structured data must be a dictionary, and it must have a
+  /// key named 'type' that stores a string value.  The string value must be
+  /// the name of the structured data feature that knows how to handle it.
+  ///
+  /// \param[in] object_sp
+  ///     When non-null and pointing to a dictionary, the 'type'
+  ///     key's string value is used to look up the plugin that
+  ///     was registered for that structured data type.  It then
+  ///     calls the following method on the StructuredDataPlugin
+  ///     instance:
+  ///
+  ///     virtual void
+  ///     HandleArrivalOfStructuredData(Process &process,
+  ///                                   ConstString type_name,
+  ///                                   const StructuredData::ObjectSP
+  ///                                   &object_sp)
+  ///
+  /// \return
+  ///     True if the structured data was routed to a plugin; otherwise,
+  ///     false.
+  bool RouteAsyncStructuredData(const StructuredData::ObjectSP object_sp);
+
+  // Type definitions
+  typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP>
+      LanguageRuntimeCollection;
+  typedef std::unordered_set<const void *> WarningsPointerSet;
+  typedef std::map<uint64_t, WarningsPointerSet> WarningsCollection;
+
+  struct PreResumeCallbackAndBaton {
+    bool (*callback)(void *);
+    void *baton;
+    PreResumeCallbackAndBaton(PreResumeActionCallback in_callback,
+                              void *in_baton)
+        : callback(in_callback), baton(in_baton) {}
+    bool operator== (const PreResumeCallbackAndBaton &rhs) {
+      return callback == rhs.callback && baton == rhs.baton;
+    }
+  };
+
+  using StructuredDataPluginMap =
+      std::map<ConstString, lldb::StructuredDataPluginSP>;
+
+  // Member variables
+  std::weak_ptr<Target> m_target_wp; ///< The target that owns this process.
+  ThreadSafeValue<lldb::StateType> m_public_state;
+  ThreadSafeValue<lldb::StateType>
+      m_private_state;                     // The actual state of our process
+  Broadcaster m_private_state_broadcaster; // This broadcaster feeds state
+                                           // changed events into the private
+                                           // state thread's listener.
+  Broadcaster m_private_state_control_broadcaster; // This is the control
+                                                   // broadcaster, used to
+                                                   // pause, resume & stop the
+                                                   // private state thread.
+  lldb::ListenerSP m_private_state_listener_sp; // This is the listener for the
+                                                // private state thread.
+  HostThread m_private_state_thread; ///< Thread ID for the thread that watches
+                                     ///internal state events
+  ProcessModID m_mod_id; ///< Tracks the state of the process over stops and
+                         ///other alterations.
+  uint32_t m_process_unique_id; ///< Each lldb_private::Process class that is
+                                ///created gets a unique integer ID that
+                                ///increments with each new instance
+  uint32_t m_thread_index_id;   ///< Each thread is created with a 1 based index
+                                ///that won't get re-used.
+  std::map<uint64_t, uint32_t> m_thread_id_to_index_id_map;
+  int m_exit_status; ///< The exit status of the process, or -1 if not set.
+  std::string m_exit_string; ///< A textual description of why a process exited.
+  std::mutex m_exit_status_mutex; ///< Mutex so m_exit_status m_exit_string can
+                                  ///be safely accessed from multiple threads
+  std::recursive_mutex m_thread_mutex;
+  ThreadList m_thread_list_real; ///< The threads for this process as are known
+                                 ///to the protocol we are debugging with
+  ThreadList m_thread_list; ///< The threads for this process as the user will
+                            ///see them. This is usually the same as
+  ///< m_thread_list_real, but might be different if there is an OS plug-in
+  ///creating memory threads
+  ThreadList m_extended_thread_list; ///< Owner for extended threads that may be
+                                     ///generated, cleared on natural stops
+  uint32_t m_extended_thread_stop_id; ///< The natural stop id when
+                                      ///extended_thread_list was last updated
+  QueueList
+      m_queue_list; ///< The list of libdispatch queues at a given stop point
+  uint32_t m_queue_list_stop_id; ///< The natural stop id when queue list was
+                                 ///last fetched
+  std::vector<Notifications> m_notifications; ///< The list of notifications
+                                              ///that this process can deliver.
+  std::vector<lldb::addr_t> m_image_tokens;
+  lldb::ListenerSP m_listener_sp; ///< Shared pointer to the listener used for
+                                  ///public events.  Can not be empty.
+  BreakpointSiteList m_breakpoint_site_list; ///< This is the list of breakpoint
+                                             ///locations we intend to insert in
+                                             ///the target.
+  lldb::DynamicLoaderUP m_dyld_up;
+  lldb::JITLoaderListUP m_jit_loaders_up;
+  lldb::DynamicCheckerFunctionsUP m_dynamic_checkers_up; ///< The functions used
+                                                         /// by the expression
+                                                         /// parser to validate
+                                                         /// data that
+                                                         /// expressions use.
+  lldb::OperatingSystemUP m_os_up;
+  lldb::SystemRuntimeUP m_system_runtime_up;
+  lldb::UnixSignalsSP
+      m_unix_signals_sp; /// This is the current signal set for this process.
+  lldb::ABISP m_abi_sp;
+  lldb::IOHandlerSP m_process_input_reader;
+  Communication m_stdio_communication;
+  std::recursive_mutex m_stdio_communication_mutex;
+  bool m_stdin_forward; /// Remember if stdin must be forwarded to remote debug
+                        /// server
+  std::string m_stdout_data;
+  std::string m_stderr_data;
+  std::recursive_mutex m_profile_data_comm_mutex;
+  std::vector<std::string> m_profile_data;
+  Predicate<uint32_t> m_iohandler_sync;
+  MemoryCache m_memory_cache;
+  AllocatedMemoryCache m_allocated_memory_cache;
+  bool m_should_detach; /// Should we detach if the process object goes away
+                        /// with an explicit call to Kill or Detach?
+  LanguageRuntimeCollection m_language_runtimes;
+  std::recursive_mutex m_language_runtimes_mutex;
+  InstrumentationRuntimeCollection m_instrumentation_runtimes;
+  std::unique_ptr<NextEventAction> m_next_event_action_up;
+  std::vector<PreResumeCallbackAndBaton> m_pre_resume_actions;
+  ProcessRunLock m_public_run_lock;
+  ProcessRunLock m_private_run_lock;
+  bool m_currently_handling_do_on_removals;
+  bool m_resume_requested; // If m_currently_handling_event or
+                           // m_currently_handling_do_on_removals are true,
+                           // Resume will only request a resume, using this
+                           // flag to check.
+  bool m_finalizing; // This is set at the beginning of Process::Finalize() to
+                     // stop functions from looking up or creating things
+                     // during a finalize call
+  bool m_finalize_called; // This is set at the end of Process::Finalize()
+  bool m_clear_thread_plans_on_stop;
+  bool m_force_next_event_delivery;
+  lldb::StateType m_last_broadcast_state; /// This helps with the Public event
+                                          /// coalescing in
+                                          /// ShouldBroadcastEvent.
+  std::map<lldb::addr_t, lldb::addr_t> m_resolved_indirect_addresses;
+  bool m_destroy_in_process;
+  bool m_can_interpret_function_calls;  // Some targets, e.g the OSX kernel,
+                                        // don't support the ability to modify
+                                        // the stack.
+  WarningsCollection m_warnings_issued; // A set of object pointers which have
+                                        // already had warnings printed
+  std::mutex m_run_thread_plan_lock;
+  StructuredDataPluginMap m_structured_data_plugin_map;
+
+  enum { eCanJITDontKnow = 0, eCanJITYes, eCanJITNo } m_can_jit;
+  
+  std::unique_ptr<UtilityFunction> m_dlopen_utility_func_up;
+  std::once_flag m_dlopen_utility_func_flag_once;
+
+  size_t RemoveBreakpointOpcodesFromBuffer(lldb::addr_t addr, size_t size,
+                                           uint8_t *buf) const;
+
+  void SynchronouslyNotifyStateChanged(lldb::StateType state);
+
+  void SetPublicState(lldb::StateType new_state, bool restarted);
+
+  void SetPrivateState(lldb::StateType state);
+
+  bool StartPrivateStateThread(bool is_secondary_thread = false);
+
+  void StopPrivateStateThread();
+
+  void PausePrivateStateThread();
+
+  void ResumePrivateStateThread();
+
+private:
+  struct PrivateStateThreadArgs {
+    PrivateStateThreadArgs(Process *p, bool s)
+        : process(p), is_secondary_thread(s){};
+    Process *process;
+    bool is_secondary_thread;
+  };
+
+  // arg is a pointer to a new'ed PrivateStateThreadArgs structure.
+  // PrivateStateThread will free it for you.
+  static lldb::thread_result_t PrivateStateThread(void *arg);
+
+  // The starts up the private state thread that will watch for events from the
+  // debugee. Pass true for is_secondary_thread in the case where you have to
+  // temporarily spin up a secondary state thread to handle events from a hand-
+  // called function on the primary private state thread.
+
+  lldb::thread_result_t RunPrivateStateThread(bool is_secondary_thread);
+
+protected:
+  void HandlePrivateEvent(lldb::EventSP &event_sp);
+
+  Status HaltPrivate();
+
+  lldb::StateType WaitForProcessStopPrivate(lldb::EventSP &event_sp,
+                                            const Timeout<std::micro> &timeout);
+
+  // This waits for both the state change broadcaster, and the control
+  // broadcaster. If control_only, it only waits for the control broadcaster.
+
+  bool GetEventsPrivate(lldb::EventSP &event_sp,
+                        const Timeout<std::micro> &timeout, bool control_only);
+
+  lldb::StateType
+  GetStateChangedEventsPrivate(lldb::EventSP &event_sp,
+                               const Timeout<std::micro> &timeout);
+
+  size_t WriteMemoryPrivate(lldb::addr_t addr, const void *buf, size_t size,
+                            Status &error);
+
+  void AppendSTDOUT(const char *s, size_t len);
+
+  void AppendSTDERR(const char *s, size_t len);
+
+  void BroadcastAsyncProfileData(const std::string &one_profile_data);
+
+  static void STDIOReadThreadBytesReceived(void *baton, const void *src,
+                                           size_t src_len);
+
+  bool PushProcessIOHandler();
+
+  bool PopProcessIOHandler();
+
+  bool ProcessIOHandlerIsActive();
+
+  bool ProcessIOHandlerExists() const {
+    return static_cast<bool>(m_process_input_reader);
+  }
+
+  Status StopForDestroyOrDetach(lldb::EventSP &exit_event_sp);
+
+  virtual Status UpdateAutomaticSignalFiltering();
+
+  void LoadOperatingSystemPlugin(bool flush);
+
+private:
+  /// This is the part of the event handling that for a process event. It
+  /// decides what to do with the event and returns true if the event needs to
+  /// be propagated to the user, and false otherwise. If the event is not
+  /// propagated, this call will most likely set the target to executing
+  /// again. There is only one place where this call should be called,
+  /// HandlePrivateEvent. Don't call it from anywhere else...
+  ///
+  /// \param[in] event_ptr
+  ///     This is the event we are handling.
+  ///
+  /// \return
+  ///     Returns \b true if the event should be reported to the
+  ///     user, \b false otherwise.
+  bool ShouldBroadcastEvent(Event *event_ptr);
+
+  void ControlPrivateStateThread(uint32_t signal);
+
+  DISALLOW_COPY_AND_ASSIGN(Process);
+};
+
+/// RAII guard that should be aquired when an utility function is called within
+/// a given process.
+class UtilityFunctionScope {
+  Process *m_process;
+
+public:
+  UtilityFunctionScope(Process *p) : m_process(p) {
+    if (m_process)
+      m_process->SetRunningUtilityFunction(true);
+  }
+  ~UtilityFunctionScope() {
+    if (m_process)
+      m_process->SetRunningUtilityFunction(false);
+  }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Process_h_
diff --git a/linux-x64/clang/include/lldb/Target/ProcessStructReader.h b/linux-x64/clang/include/lldb/Target/ProcessStructReader.h
new file mode 100644
index 0000000..ade29c0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ProcessStructReader.h
@@ -0,0 +1,104 @@
+//===---------------------ProcessStructReader.h ------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_TARGET_PROCESSSTRUCTREADER_H
+#define LLDB_TARGET_PROCESSSTRUCTREADER_H
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-types.h"
+
+#include "lldb/Symbol/CompilerType.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/DataBufferHeap.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/Status.h"
+
+#include <initializer_list>
+#include <map>
+#include <string>
+
+namespace lldb_private {
+class ProcessStructReader {
+protected:
+  struct FieldImpl {
+    CompilerType type;
+    size_t offset;
+    size_t size;
+  };
+
+  std::map<ConstString, FieldImpl> m_fields;
+  DataExtractor m_data;
+  lldb::ByteOrder m_byte_order;
+  size_t m_addr_byte_size;
+
+public:
+  ProcessStructReader(Process *process, lldb::addr_t base_addr,
+                      CompilerType struct_type) {
+    if (!process)
+      return;
+    if (base_addr == 0 || base_addr == LLDB_INVALID_ADDRESS)
+      return;
+    m_byte_order = process->GetByteOrder();
+    m_addr_byte_size = process->GetAddressByteSize();
+
+    for (size_t idx = 0; idx < struct_type.GetNumFields(); idx++) {
+      std::string name;
+      uint64_t bit_offset;
+      uint32_t bitfield_bit_size;
+      bool is_bitfield;
+      CompilerType field_type = struct_type.GetFieldAtIndex(
+          idx, name, &bit_offset, &bitfield_bit_size, &is_bitfield);
+      // no support for bitfields in here (yet)
+      if (is_bitfield)
+        return;
+      auto size = field_type.GetByteSize(nullptr);
+      // no support for things larger than a uint64_t (yet)
+      if (!size || *size > 8)
+        return;
+      ConstString const_name = ConstString(name.c_str());
+      size_t byte_index = static_cast<size_t>(bit_offset / 8);
+      m_fields[const_name] =
+          FieldImpl{field_type, byte_index, static_cast<size_t>(*size)};
+    }
+    auto total_size = struct_type.GetByteSize(nullptr);
+    if (!total_size)
+      return;
+    lldb::DataBufferSP buffer_sp(new DataBufferHeap(*total_size, 0));
+    Status error;
+    process->ReadMemoryFromInferior(base_addr, buffer_sp->GetBytes(),
+                                    *total_size, error);
+    if (error.Fail())
+      return;
+    m_data = DataExtractor(buffer_sp, m_byte_order, m_addr_byte_size);
+  }
+
+  template <typename RetType>
+  RetType GetField(ConstString name, RetType fail_value = RetType()) {
+    auto iter = m_fields.find(name), end = m_fields.end();
+    if (iter == end)
+      return fail_value;
+    auto size = iter->second.size;
+    if (sizeof(RetType) < size)
+      return fail_value;
+    lldb::offset_t offset = iter->second.offset;
+    if (offset + size > m_data.GetByteSize())
+      return fail_value;
+    return (RetType)(m_data.GetMaxU64(&offset, size));
+  }
+
+  size_t GetOffsetOf(ConstString name, size_t fail_value = SIZE_MAX) {
+    auto iter = m_fields.find(name), end = m_fields.end();
+    if (iter == end)
+      return fail_value;
+    return iter->second.offset;
+  }
+};
+}
+
+#endif // utility_ProcessStructReader_h_
diff --git a/linux-x64/clang/include/lldb/Target/Queue.h b/linux-x64/clang/include/lldb/Target/Queue.h
new file mode 100644
index 0000000..01e8994
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Queue.h
@@ -0,0 +1,155 @@
+//===-- Queue.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Queue_h_
+#define liblldb_Queue_h_
+
+#include <string>
+#include <vector>
+
+#include "lldb/Target/QueueItem.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// Queue:
+// This class represents a libdispatch aka Grand Central Dispatch queue in the
+// process.
+//
+// A program using libdispatch will create queues, put work items
+// (functions, blocks) on the queues.  The system will create / reassign
+// pthreads to execute the work items for the queues.  A serial queue will be
+// associated with a single thread (or possibly no thread, if it is not doing
+// any work).  A concurrent queue may be associated with multiple threads.
+
+class Queue : public std::enable_shared_from_this<Queue> {
+public:
+  Queue(lldb::ProcessSP process_sp, lldb::queue_id_t queue_id,
+        const char *queue_name);
+
+  ~Queue();
+
+  /// Get the QueueID for this Queue
+  ///
+  /// A 64-bit ID number that uniquely identifies a queue at this particular
+  /// stop_id.  Currently the libdispatch serialnum is used for the QueueID;
+  /// it is a number that starts at 1 for each process and increments with
+  /// each queue.  A serialnum is not reused for a different queue in the
+  /// lifetime of that process execution.
+  ///
+  /// \return
+  ///     The QueueID for this Queue.
+  lldb::queue_id_t GetID();
+
+  /// Get the name of this Queue
+  ///
+  /// \return
+  ///     The name of the queue, if one is available.
+  ///     A NULL pointer is returned if none is available.
+  const char *GetName();
+
+  /// Get the IndexID for this Queue
+  ///
+  /// This is currently the same as GetID().  If it changes in the future,
+  /// it will be  a small integer value (starting with 1) assigned to
+  /// each queue that is seen during a Process lifetime.
+  ///
+  /// Both the GetID and GetIndexID are being retained for Queues to
+  /// maintain similar API to the Thread class, and allow for the
+  /// possibility of GetID changing to a different source in the future.
+  ///
+  /// \return
+  ///     The IndexID for this queue.
+  uint32_t GetIndexID();
+
+  /// Return the threads currently associated with this queue
+  ///
+  /// Zero, one, or many threads may be executing code for a queue at
+  /// a given point in time.  This call returns the list of threads
+  /// that are currently executing work for this queue.
+  ///
+  /// \return
+  ///     The threads currently performing work for this queue
+  std::vector<lldb::ThreadSP> GetThreads();
+
+  /// Return the items that are currently enqueued
+  ///
+  /// "Enqueued" means that the item has been added to the queue to
+  /// be done, but has not yet been done.  When the item is going to
+  /// be processed it is "dequeued".
+  ///
+  /// \return
+  ///     The vector of enqueued items for this queue
+  const std::vector<lldb::QueueItemSP> &GetPendingItems();
+
+  lldb::ProcessSP GetProcess() const { return m_process_wp.lock(); }
+
+  /// Get the number of work items that this queue is currently running
+  ///
+  /// \return
+  ///     The number of work items currently executing.  For a serial
+  ///     queue, this will be 0 or 1.  For a concurrent queue, this
+  ///     may be any number.
+  uint32_t GetNumRunningWorkItems() const;
+
+  /// Get the number of work items enqueued on this queue
+  ///
+  /// \return
+  ///     The number of work items currently enqueued, waiting to
+  ///     execute.
+  uint32_t GetNumPendingWorkItems() const;
+
+  /// Get the dispatch_queue_t structure address for this Queue
+  ///
+  /// Get the address in the inferior process' memory of this Queue's
+  /// dispatch_queue_t structure.
+  ///
+  /// \return
+  ///     The address of the dispatch_queue_t structure, if known.
+  ///     LLDB_INVALID_ADDRESS will be returned if it is unavailable.
+  lldb::addr_t GetLibdispatchQueueAddress() const;
+
+  void SetNumRunningWorkItems(uint32_t count);
+
+  void SetNumPendingWorkItems(uint32_t count);
+
+  void SetLibdispatchQueueAddress(lldb::addr_t dispatch_queue_t_addr);
+
+  void PushPendingQueueItem(lldb::QueueItemSP item) {
+    m_pending_items.push_back(item);
+  }
+
+  /// Return the kind (serial, concurrent) of this queue
+  ///
+  /// \return
+  //      Whether this is a serial or a concurrent queue
+  lldb::QueueKind GetKind();
+
+  void SetKind(lldb::QueueKind kind);
+
+private:
+  // For Queue only
+
+  lldb::ProcessWP m_process_wp;
+  lldb::queue_id_t m_queue_id;
+  std::string m_queue_name;
+  uint32_t m_running_work_items_count;
+  uint32_t m_pending_work_items_count;
+  std::vector<lldb::QueueItemSP> m_pending_items;
+  lldb::addr_t m_dispatch_queue_t_addr; // address of libdispatch
+                                        // dispatch_queue_t for this Queue
+  lldb::QueueKind m_kind;
+
+  DISALLOW_COPY_AND_ASSIGN(Queue);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Queue_h_
diff --git a/linux-x64/clang/include/lldb/Target/QueueItem.h b/linux-x64/clang/include/lldb/Target/QueueItem.h
new file mode 100644
index 0000000..dfae3b8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/QueueItem.h
@@ -0,0 +1,167 @@
+//===-- QueueItem.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_QueueItem_h_
+#define liblldb_QueueItem_h_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
+
+#include "lldb/Core/Address.h"
+#include "lldb/Utility/ConstString.h"
+
+namespace lldb_private {
+
+// QueueItem:
+// This class represents a work item enqueued on a libdispatch aka Grand
+// Central Dispatch (GCD) queue.  Most often, this will be a function or block.
+// "enqueued" here means that the work item has been added to a queue but it
+// has not yet started executing.  When it is "dequeued", execution of the item
+// begins.
+
+class QueueItem : public std::enable_shared_from_this<QueueItem> {
+public:
+  QueueItem(lldb::QueueSP queue_sp, lldb::ProcessSP process_sp,
+            lldb::addr_t item_ref, lldb_private::Address address);
+
+  ~QueueItem();
+
+  /// Get the kind of work item this is
+  ///
+  /// \return
+  ///     The type of work item that this QueueItem object
+  ///     represents.  eQueueItemKindUnknown may be returned.
+  lldb::QueueItemKind GetKind();
+
+  /// Set the type of work item this is
+  ///
+  /// \param [in] item_kind
+  ///     Set the kind of this work item object.
+  void SetKind(lldb::QueueItemKind item_kind);
+
+  /// Get the code address that will be executed when this work item
+  /// is executed.
+  ///
+  /// \return
+  ///     The address that will be invoked when this work item is
+  ///     executed.  Not all types of QueueItems will have an
+  ///     address associated with them; check that the returned
+  ///     Address is valid, or check that the WorkItemKind is a
+  ///     kind that involves an address, such as eQueueItemKindFunction
+  ///     or eQueueItemKindBlock.
+  lldb_private::Address &GetAddress();
+
+  /// Set the work item address for this object
+  ///
+  /// \param [in] addr
+  ///     The address that will be invoked when this work item
+  ///     is executed.
+  void SetAddress(lldb_private::Address addr);
+
+  /// Check if this QueueItem object is valid
+  ///
+  /// If the weak pointer to the parent Queue cannot be revivified,
+  /// it is invalid.
+  ///
+  /// \return
+  ///     True if this object is valid.
+  bool IsValid() { return m_queue_wp.lock() != nullptr; }
+
+  /// Get an extended backtrace thread for this queue item, if available
+  ///
+  /// If the backtrace/thread information was collected when this item
+  /// was enqueued, this call will provide it.
+  ///
+  /// \param [in] type
+  ///     The type of extended backtrace being requested, e.g. "libdispatch"
+  ///     or "pthread".
+  ///
+  /// \return
+  ///     A thread shared pointer which will have a reference to an extended
+  ///     thread if one was available.
+  lldb::ThreadSP GetExtendedBacktraceThread(ConstString type);
+
+  void SetItemThatEnqueuedThis(lldb::addr_t address_of_item) {
+    m_item_that_enqueued_this_ref = address_of_item;
+  }
+
+  lldb::addr_t GetItemThatEnqueuedThis();
+
+  void SetEnqueueingThreadID(lldb::tid_t tid) { m_enqueueing_thread_id = tid; }
+
+  lldb::tid_t GetEnqueueingThreadID();
+
+  void SetEnqueueingQueueID(lldb::queue_id_t qid) {
+    m_enqueueing_queue_id = qid;
+  }
+
+  lldb::queue_id_t GetEnqueueingQueueID();
+
+  void SetTargetQueueID(lldb::queue_id_t qid) { m_target_queue_id = qid; }
+
+  void SetStopID(uint32_t stop_id) { m_stop_id = stop_id; }
+
+  uint32_t GetStopID();
+
+  void SetEnqueueingBacktrace(std::vector<lldb::addr_t> backtrace) {
+    m_backtrace = backtrace;
+  }
+
+  std::vector<lldb::addr_t> &GetEnqueueingBacktrace();
+
+  void SetThreadLabel(std::string thread_name) { m_thread_label = thread_name; }
+
+  std::string GetThreadLabel();
+
+  void SetQueueLabel(std::string queue_name) { m_queue_label = queue_name; }
+
+  std::string GetQueueLabel();
+
+  void SetTargetQueueLabel(std::string queue_name) {
+    m_target_queue_label = queue_name;
+  }
+
+  lldb::ProcessSP GetProcessSP();
+
+protected:
+  void FetchEntireItem();
+
+  lldb::QueueWP m_queue_wp;
+  lldb::ProcessWP m_process_wp;
+
+  lldb::addr_t m_item_ref; // the token we can be used to fetch more information
+                           // about this queue item
+  lldb_private::Address m_address;
+  bool m_have_fetched_entire_item;
+
+  lldb::QueueItemKind m_kind;
+  lldb::addr_t m_item_that_enqueued_this_ref; // a handle that we can pass into
+                                              // libBacktraceRecording
+  // to get the QueueItem that enqueued this item
+  lldb::tid_t m_enqueueing_thread_id; // thread that enqueued this item
+  lldb::queue_id_t
+      m_enqueueing_queue_id; // Queue that enqueued this item, if it was a queue
+  lldb::queue_id_t m_target_queue_id;
+  uint32_t m_stop_id; // indicates when this backtrace was recorded in time
+  std::vector<lldb::addr_t> m_backtrace;
+  std::string m_thread_label;
+  std::string m_queue_label;
+  std::string m_target_queue_label;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(QueueItem);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_QueueItem_h_
diff --git a/linux-x64/clang/include/lldb/Target/QueueList.h b/linux-x64/clang/include/lldb/Target/QueueList.h
new file mode 100644
index 0000000..761107e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/QueueList.h
@@ -0,0 +1,110 @@
+//===-- QueueList.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_QueueList_h_
+#define liblldb_QueueList_h_
+
+#include <mutex>
+#include <vector>
+
+#include "lldb/Utility/Iterable.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// QueueList:
+// This is the container for libdispatch aka Grand Central Dispatch Queue
+// objects.
+//
+// Each Process will have a QueueList.  When the process execution is paused,
+// the QueueList may be populated with Queues by the SystemRuntime.
+
+class QueueList {
+  friend class Process;
+
+public:
+  QueueList(Process *process);
+
+  ~QueueList();
+
+  /// Get the number of libdispatch queues that are available
+  ///
+  /// \return
+  ///     The number of queues that are stored in the QueueList.
+  uint32_t GetSize();
+
+  /// Get the Queue at a given index number
+  ///
+  /// \param [in] idx
+  ///     The index number (0-based) of the queue.
+  /// \return
+  ///     The Queue at that index number.
+  lldb::QueueSP GetQueueAtIndex(uint32_t idx);
+
+  typedef std::vector<lldb::QueueSP> collection;
+  typedef LockingAdaptedIterable<collection, lldb::QueueSP, vector_adapter,
+                                 std::mutex>
+      QueueIterable;
+
+  /// Iterate over the list of queues
+  ///
+  /// \return
+  ///     An Iterable object which can be used to loop over the queues
+  ///     that exist.
+  QueueIterable Queues() { return QueueIterable(m_queues, m_mutex); }
+
+  /// Clear out the list of queues from the QueueList
+  void Clear();
+
+  /// Add a Queue to the QueueList
+  ///
+  /// \param [in] queue
+  ///     Used by the SystemRuntime to populate the QueueList
+  void AddQueue(lldb::QueueSP queue);
+
+  /// Find a queue in the QueueList by QueueID
+  ///
+  /// \param [in] qid
+  ///     The QueueID (same as returned by Thread::GetQueueID()) to find.
+  ///
+  /// \return
+  ///     A QueueSP to the queue requested, if it is present in the QueueList.
+  ///     An empty QueueSP will be returned if this queue was not found.
+  lldb::QueueSP FindQueueByID(lldb::queue_id_t qid);
+
+  /// Find a queue in the QueueList by IndexID
+  ///
+  /// \param [in] index_id
+  ///     Find a queue by IndexID.  This is an integer associated with each
+  ///     unique queue seen during a debug session and will not be reused
+  ///     for a different queue.  Unlike the QueueID, a 64-bit value, this
+  ///     will tend to be an integral value like 1 or 7.
+  ///
+  /// \return
+  ///     A QueueSP to the queue requested, if it is present in the QueueList.
+  ///     An empty QueueSP will be returned if this queue was not found.
+  lldb::QueueSP FindQueueByIndexID(uint32_t index_id);
+
+  std::mutex &GetMutex();
+
+protected:
+  // Classes that inherit from Process can see and modify these
+  Process *m_process; ///< The process that manages this queue list.
+  uint32_t
+      m_stop_id; ///< The process stop ID that this queue list is valid for.
+  collection m_queues; ///< The queues for this process.
+  std::mutex m_mutex;
+
+private:
+  QueueList() = delete;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_QueueList_h_
diff --git a/linux-x64/clang/include/lldb/Target/RegisterCheckpoint.h b/linux-x64/clang/include/lldb/Target/RegisterCheckpoint.h
new file mode 100644
index 0000000..4f9654f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/RegisterCheckpoint.h
@@ -0,0 +1,53 @@
+//===-- RegisterCheckpoint.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_RegisterCheckpoint_h_
+#define liblldb_RegisterCheckpoint_h_
+
+#include "lldb/Target/StackID.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// Inherit from UserID in case pushing/popping all register values can be done
+// using a 64 bit integer that holds a baton/cookie instead of actually having
+// to read all register values into a buffer
+class RegisterCheckpoint : public UserID {
+public:
+  enum class Reason {
+    // An expression is about to be run on the thread if the protocol that
+    // talks to the debuggee supports checkpointing the registers using a
+    // push/pop then the UserID base class in the RegisterCheckpoint can be
+    // used to store the baton/cookie that refers to the remote saved state.
+    eExpression,
+    // The register checkpoint wants the raw register bytes, so they must be
+    // read into m_data_sp, or the save/restore checkpoint should fail.
+    eDataBackup
+  };
+
+  RegisterCheckpoint(Reason reason)
+      : UserID(0), m_data_sp(), m_reason(reason) {}
+
+  ~RegisterCheckpoint() {}
+
+  lldb::DataBufferSP &GetData() { return m_data_sp; }
+
+  const lldb::DataBufferSP &GetData() const { return m_data_sp; }
+
+protected:
+  lldb::DataBufferSP m_data_sp;
+  Reason m_reason;
+
+  // Make RegisterCheckpointSP if you wish to share the data in this class.
+  DISALLOW_COPY_AND_ASSIGN(RegisterCheckpoint);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_RegisterCheckpoint_h_
diff --git a/linux-x64/clang/include/lldb/Target/RegisterContext.h b/linux-x64/clang/include/lldb/Target/RegisterContext.h
new file mode 100644
index 0000000..d6212dd
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/RegisterContext.h
@@ -0,0 +1,209 @@
+//===-- RegisterContext.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_RegisterContext_h_
+#define liblldb_RegisterContext_h_
+
+#include "lldb/Target/ExecutionContextScope.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class RegisterContext : public std::enable_shared_from_this<RegisterContext>,
+                        public ExecutionContextScope {
+public:
+  // Constructors and Destructors
+  RegisterContext(Thread &thread, uint32_t concrete_frame_idx);
+
+  ~RegisterContext() override;
+
+  void InvalidateIfNeeded(bool force);
+
+  // Subclasses must override these functions
+  virtual void InvalidateAllRegisters() = 0;
+
+  virtual size_t GetRegisterCount() = 0;
+
+  virtual const RegisterInfo *GetRegisterInfoAtIndex(size_t reg) = 0;
+
+  // Detect the register size dynamically.
+  uint32_t UpdateDynamicRegisterSize(const lldb_private::ArchSpec &arch,
+                                     RegisterInfo *reg_info);
+
+  virtual size_t GetRegisterSetCount() = 0;
+
+  virtual const RegisterSet *GetRegisterSet(size_t reg_set) = 0;
+
+  virtual bool ReadRegister(const RegisterInfo *reg_info,
+                            RegisterValue &reg_value) = 0;
+
+  virtual bool WriteRegister(const RegisterInfo *reg_info,
+                             const RegisterValue &reg_value) = 0;
+
+  virtual bool ReadAllRegisterValues(lldb::DataBufferSP &data_sp) {
+    return false;
+  }
+
+  virtual bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) {
+    return false;
+  }
+
+  // These two functions are used to implement "push" and "pop" of register
+  // states.  They are used primarily for expression evaluation, where we need
+  // to push a new state (storing the old one in data_sp) and then restoring
+  // the original state by passing the data_sp we got from ReadAllRegisters to
+  // WriteAllRegisterValues. ReadAllRegisters will do what is necessary to
+  // return a coherent set of register values for this thread, which may mean
+  // e.g. interrupting a thread that is sitting in a kernel trap.  That is a
+  // somewhat disruptive operation, so these API's should only be used when
+  // this behavior is needed.
+
+  virtual bool
+  ReadAllRegisterValues(lldb_private::RegisterCheckpoint &reg_checkpoint);
+
+  virtual bool WriteAllRegisterValues(
+      const lldb_private::RegisterCheckpoint &reg_checkpoint);
+
+  bool CopyFromRegisterContext(lldb::RegisterContextSP context);
+
+  /// Convert from a given register numbering scheme to the lldb register
+  /// numbering scheme
+  ///
+  /// There may be multiple ways to enumerate the registers for a given
+  /// architecture.  ABI references will specify one to be used with
+  /// DWARF, the register numberings from process plugin, there may
+  /// be a variation used for eh_frame unwind instructions (e.g. on Darwin),
+  /// and so on.  Register 5 by itself is meaningless - RegisterKind
+  /// enumeration tells you what context that number should be translated as.
+  ///
+  /// Inside lldb, register numbers are in the eRegisterKindLLDB scheme;
+  /// arguments which take a register number should take one in that
+  /// scheme.
+  ///
+  /// eRegisterKindGeneric is a special numbering scheme which gives us
+  /// constant values for the pc, frame register, stack register, etc., for
+  /// use within lldb.  They may not be defined for all architectures but
+  /// it allows generic code to translate these common registers into the
+  /// lldb numbering scheme.
+  ///
+  /// This method translates a given register kind + register number into
+  /// the eRegisterKindLLDB register numbering.
+  ///
+  /// \param [in] kind
+  ///     The register numbering scheme (RegisterKind) that the following
+  ///     register number is in.
+  ///
+  /// \param [in] num
+  ///     A register number in the 'kind' register numbering scheme.
+  ///
+  /// \return
+  ///     The equivalent register number in the eRegisterKindLLDB
+  ///     numbering scheme, if possible, else LLDB_INVALID_REGNUM.
+  virtual uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind,
+                                                       uint32_t num) = 0;
+
+  // Subclasses can override these functions if desired
+  virtual uint32_t NumSupportedHardwareBreakpoints();
+
+  virtual uint32_t SetHardwareBreakpoint(lldb::addr_t addr, size_t size);
+
+  virtual bool ClearHardwareBreakpoint(uint32_t hw_idx);
+
+  virtual uint32_t NumSupportedHardwareWatchpoints();
+
+  virtual uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size,
+                                         bool read, bool write);
+
+  virtual bool ClearHardwareWatchpoint(uint32_t hw_index);
+
+  virtual bool HardwareSingleStep(bool enable);
+
+  virtual Status
+  ReadRegisterValueFromMemory(const lldb_private::RegisterInfo *reg_info,
+                              lldb::addr_t src_addr, uint32_t src_len,
+                              RegisterValue &reg_value);
+
+  virtual Status
+  WriteRegisterValueToMemory(const lldb_private::RegisterInfo *reg_info,
+                             lldb::addr_t dst_addr, uint32_t dst_len,
+                             const RegisterValue &reg_value);
+
+  // Subclasses should not override these
+  virtual lldb::tid_t GetThreadID() const;
+
+  virtual Thread &GetThread() { return m_thread; }
+
+  const RegisterInfo *GetRegisterInfoByName(llvm::StringRef reg_name,
+                                            uint32_t start_idx = 0);
+
+  const RegisterInfo *GetRegisterInfo(lldb::RegisterKind reg_kind,
+                                      uint32_t reg_num);
+
+  uint64_t GetPC(uint64_t fail_value = LLDB_INVALID_ADDRESS);
+
+  bool SetPC(uint64_t pc);
+
+  bool SetPC(Address addr);
+
+  uint64_t GetSP(uint64_t fail_value = LLDB_INVALID_ADDRESS);
+
+  bool SetSP(uint64_t sp);
+
+  uint64_t GetFP(uint64_t fail_value = LLDB_INVALID_ADDRESS);
+
+  bool SetFP(uint64_t fp);
+
+  const char *GetRegisterName(uint32_t reg);
+
+  uint64_t GetReturnAddress(uint64_t fail_value = LLDB_INVALID_ADDRESS);
+
+  uint64_t GetFlags(uint64_t fail_value = 0);
+
+  uint64_t ReadRegisterAsUnsigned(uint32_t reg, uint64_t fail_value);
+
+  uint64_t ReadRegisterAsUnsigned(const RegisterInfo *reg_info,
+                                  uint64_t fail_value);
+
+  bool WriteRegisterFromUnsigned(uint32_t reg, uint64_t uval);
+
+  bool WriteRegisterFromUnsigned(const RegisterInfo *reg_info, uint64_t uval);
+
+  bool ConvertBetweenRegisterKinds(lldb::RegisterKind source_rk,
+                                   uint32_t source_regnum,
+                                   lldb::RegisterKind target_rk,
+                                   uint32_t &target_regnum);
+
+  // lldb::ExecutionContextScope pure virtual functions
+  lldb::TargetSP CalculateTarget() override;
+
+  lldb::ProcessSP CalculateProcess() override;
+
+  lldb::ThreadSP CalculateThread() override;
+
+  lldb::StackFrameSP CalculateStackFrame() override;
+
+  void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
+
+  uint32_t GetStopID() const { return m_stop_id; }
+
+  void SetStopID(uint32_t stop_id) { m_stop_id = stop_id; }
+
+protected:
+  // Classes that inherit from RegisterContext can see and modify these
+  Thread &m_thread; // The thread that this register context belongs to.
+  uint32_t m_concrete_frame_idx; // The concrete frame index for this register
+                                 // context
+  uint32_t m_stop_id; // The stop ID that any data in this context is valid for
+private:
+  // For RegisterContext only
+  DISALLOW_COPY_AND_ASSIGN(RegisterContext);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_RegisterContext_h_
diff --git a/linux-x64/clang/include/lldb/Target/RegisterNumber.h b/linux-x64/clang/include/lldb/Target/RegisterNumber.h
new file mode 100644
index 0000000..0bef0c1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/RegisterNumber.h
@@ -0,0 +1,59 @@
+//===-- RegisterNumber.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_TARGET_REGISTERNUMBER_H
+#define LLDB_TARGET_REGISTERNUMBER_H
+
+#include "lldb/lldb-private.h"
+#include <map>
+
+/// A class to represent register numbers, and able to convert between
+/// different register numbering schemes that may be used in a single
+/// debug session.
+
+class RegisterNumber {
+public:
+  RegisterNumber(lldb_private::Thread &thread, lldb::RegisterKind kind,
+                 uint32_t num);
+
+  // This constructor plus the init() method below allow for the placeholder
+  // creation of an invalid object initially, possibly to be filled in.  It
+  // would be more consistent to have three Set* methods to set the three data
+  // that the object needs.
+  RegisterNumber();
+
+  void init(lldb_private::Thread &thread, lldb::RegisterKind kind,
+            uint32_t num);
+
+  const RegisterNumber &operator=(const RegisterNumber &rhs);
+
+  bool operator==(RegisterNumber &rhs);
+
+  bool operator!=(RegisterNumber &rhs);
+
+  bool IsValid() const;
+
+  uint32_t GetAsKind(lldb::RegisterKind kind);
+
+  uint32_t GetRegisterNumber() const;
+
+  lldb::RegisterKind GetRegisterKind() const;
+
+  const char *GetName();
+
+private:
+  typedef std::map<lldb::RegisterKind, uint32_t> Collection;
+
+  lldb::RegisterContextSP m_reg_ctx_sp;
+  uint32_t m_regnum;
+  lldb::RegisterKind m_kind;
+  Collection m_kind_regnum_map;
+  const char *m_name;
+};
+
+#endif // liblldb_RegisterNumber_h
diff --git a/linux-x64/clang/include/lldb/Target/RemoteAwarePlatform.h b/linux-x64/clang/include/lldb/Target/RemoteAwarePlatform.h
new file mode 100644
index 0000000..524332f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/RemoteAwarePlatform.h
@@ -0,0 +1,97 @@
+//===-- RemoteAwarePlatform.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_TARGET_REMOTEAWAREPLATFORM_H
+#define LLDB_TARGET_REMOTEAWAREPLATFORM_H
+
+#include "lldb/Target/Platform.h"
+
+namespace lldb_private {
+
+/// A base class for platforms which automatically want to be able to forward
+/// operations to a remote platform instance (such as PlatformRemoteGDBServer).
+class RemoteAwarePlatform : public Platform {
+public:
+  using Platform::Platform;
+
+  bool GetModuleSpec(const FileSpec &module_file_spec, const ArchSpec &arch,
+                     ModuleSpec &module_spec) override;
+
+  lldb::user_id_t OpenFile(const FileSpec &file_spec, uint32_t flags,
+                           uint32_t mode, Status &error) override;
+
+  bool CloseFile(lldb::user_id_t fd, Status &error) override;
+
+  uint64_t ReadFile(lldb::user_id_t fd, uint64_t offset, void *dst,
+                    uint64_t dst_len, Status &error) override;
+
+  uint64_t WriteFile(lldb::user_id_t fd, uint64_t offset, const void *src,
+                     uint64_t src_len, Status &error) override;
+
+  lldb::user_id_t GetFileSize(const FileSpec &file_spec) override;
+
+  Status CreateSymlink(const FileSpec &src, const FileSpec &dst) override;
+
+  bool GetFileExists(const FileSpec &file_spec) override;
+
+  Status Unlink(const FileSpec &file_spec) override;
+
+  FileSpec GetRemoteWorkingDirectory() override;
+
+  bool SetRemoteWorkingDirectory(const FileSpec &working_dir) override;
+
+  Status MakeDirectory(const FileSpec &file_spec, uint32_t mode) override;
+
+  Status GetFilePermissions(const FileSpec &file_spec,
+                            uint32_t &file_permissions) override;
+
+  Status SetFilePermissions(const FileSpec &file_spec,
+                            uint32_t file_permissions) override;
+
+  bool CalculateMD5(const FileSpec &file_spec, uint64_t &low,
+                    uint64_t &high) override;
+
+  Status GetFileWithUUID(const FileSpec &platform_file, const UUID *uuid,
+                         FileSpec &local_file) override;
+
+  bool GetRemoteOSVersion() override;
+  bool GetRemoteOSBuildString(std::string &s) override;
+  bool GetRemoteOSKernelDescription(std::string &s) override;
+  ArchSpec GetRemoteSystemArchitecture() override;
+
+  Status RunShellCommand(const char *command, const FileSpec &working_dir,
+                         int *status_ptr, int *signo_ptr,
+                         std::string *command_output,
+                         const Timeout<std::micro> &timeout) override;
+
+  const char *GetHostname() override;
+  UserIDResolver &GetUserIDResolver() override;
+  lldb_private::Environment GetEnvironment() override;
+
+  bool IsConnected() const override;
+
+  bool GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &proc_info) override;
+  uint32_t FindProcesses(const ProcessInstanceInfoMatch &match_info,
+                         ProcessInstanceInfoList &process_infos) override;
+
+  lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url,
+                                 llvm::StringRef plugin_name,
+                                 Debugger &debugger, Target *target,
+                                 Status &error) override;
+
+  Status LaunchProcess(ProcessLaunchInfo &launch_info) override;
+
+  Status KillProcess(const lldb::pid_t pid) override;
+
+protected:
+  lldb::PlatformSP m_remote_platform_sp;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_TARGET_REMOTEAWAREPLATFORM_H
diff --git a/linux-x64/clang/include/lldb/Target/SectionLoadHistory.h b/linux-x64/clang/include/lldb/Target/SectionLoadHistory.h
new file mode 100644
index 0000000..71b5d0c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/SectionLoadHistory.h
@@ -0,0 +1,83 @@
+//===-- SectionLoadHistory.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SectionLoadHistory_h_
+#define liblldb_SectionLoadHistory_h_
+
+#include <map>
+#include <mutex>
+
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class SectionLoadHistory {
+public:
+  enum : unsigned {
+    // Pass eStopIDNow to any function that takes a stop ID to get the current
+    // value.
+    eStopIDNow = UINT32_MAX
+  };
+  // Constructors and Destructors
+  SectionLoadHistory() : m_stop_id_to_section_load_list(), m_mutex() {}
+
+  ~SectionLoadHistory() {
+    // Call clear since this takes a lock and clears the section load list in
+    // case another thread is currently using this section load list
+    Clear();
+  }
+
+  SectionLoadList &GetCurrentSectionLoadList();
+
+  bool IsEmpty() const;
+
+  void Clear();
+
+  uint32_t GetLastStopID() const;
+
+  // Get the section load address given a process stop ID
+  lldb::addr_t GetSectionLoadAddress(uint32_t stop_id,
+                                     const lldb::SectionSP &section_sp);
+
+  bool ResolveLoadAddress(uint32_t stop_id, lldb::addr_t load_addr,
+                          Address &so_addr);
+
+  bool SetSectionLoadAddress(uint32_t stop_id,
+                             const lldb::SectionSP &section_sp,
+                             lldb::addr_t load_addr,
+                             bool warn_multiple = false);
+
+  // The old load address should be specified when unloading to ensure we get
+  // the correct instance of the section as a shared library could be loaded at
+  // more than one location.
+  bool SetSectionUnloaded(uint32_t stop_id, const lldb::SectionSP &section_sp,
+                          lldb::addr_t load_addr);
+
+  // Unload all instances of a section. This function can be used on systems
+  // that don't support multiple copies of the same shared library to be loaded
+  // at the same time.
+  size_t SetSectionUnloaded(uint32_t stop_id,
+                            const lldb::SectionSP &section_sp);
+
+  void Dump(Stream &s, Target *target);
+
+protected:
+  SectionLoadList *GetSectionLoadListForStopID(uint32_t stop_id,
+                                               bool read_only);
+
+  typedef std::map<uint32_t, lldb::SectionLoadListSP> StopIDToSectionLoadList;
+  StopIDToSectionLoadList m_stop_id_to_section_load_list;
+  mutable std::recursive_mutex m_mutex;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SectionLoadHistory);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SectionLoadHistory_h_
diff --git a/linux-x64/clang/include/lldb/Target/SectionLoadList.h b/linux-x64/clang/include/lldb/Target/SectionLoadList.h
new file mode 100644
index 0000000..caefa00
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/SectionLoadList.h
@@ -0,0 +1,73 @@
+//===-- SectionLoadList.h -----------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SectionLoadList_h_
+#define liblldb_SectionLoadList_h_
+
+#include <map>
+#include <mutex>
+
+#include "llvm/ADT/DenseMap.h"
+#include "lldb/Core/Section.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class SectionLoadList {
+public:
+  // Constructors and Destructors
+  SectionLoadList() : m_addr_to_sect(), m_sect_to_addr(), m_mutex() {}
+
+  SectionLoadList(const SectionLoadList &rhs);
+
+  ~SectionLoadList() {
+    // Call clear since this takes a lock and clears the section load list in
+    // case another thread is currently using this section load list
+    Clear();
+  }
+
+  void operator=(const SectionLoadList &rhs);
+
+  bool IsEmpty() const;
+
+  void Clear();
+
+  lldb::addr_t GetSectionLoadAddress(const lldb::SectionSP &section_sp) const;
+
+  bool ResolveLoadAddress(lldb::addr_t load_addr, Address &so_addr,
+                          bool allow_section_end = false) const;
+
+  bool SetSectionLoadAddress(const lldb::SectionSP &section_sp,
+                             lldb::addr_t load_addr,
+                             bool warn_multiple = false);
+
+  // The old load address should be specified when unloading to ensure we get
+  // the correct instance of the section as a shared library could be loaded at
+  // more than one location.
+  bool SetSectionUnloaded(const lldb::SectionSP &section_sp,
+                          lldb::addr_t load_addr);
+
+  // Unload all instances of a section. This function can be used on systems
+  // that don't support multiple copies of the same shared library to be loaded
+  // at the same time.
+  size_t SetSectionUnloaded(const lldb::SectionSP &section_sp);
+
+  void Dump(Stream &s, Target *target);
+
+protected:
+  typedef std::map<lldb::addr_t, lldb::SectionSP> addr_to_sect_collection;
+  typedef llvm::DenseMap<const Section *, lldb::addr_t> sect_to_addr_collection;
+  addr_to_sect_collection m_addr_to_sect;
+  sect_to_addr_collection m_sect_to_addr;
+  mutable std::recursive_mutex m_mutex;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SectionLoadList_h_
diff --git a/linux-x64/clang/include/lldb/Target/StackFrame.h b/linux-x64/clang/include/lldb/Target/StackFrame.h
new file mode 100644
index 0000000..4e6e79b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/StackFrame.h
@@ -0,0 +1,527 @@
+//===-- StackFrame.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StackFrame_h_
+#define liblldb_StackFrame_h_
+
+#include <memory>
+#include <mutex>
+
+#include "lldb/Utility/Flags.h"
+
+#include "lldb/Core/ValueObjectList.h"
+#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Target/ExecutionContextScope.h"
+#include "lldb/Target/StackID.h"
+#include "lldb/Utility/Scalar.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/StreamString.h"
+#include "lldb/Utility/UserID.h"
+
+namespace lldb_private {
+
+/// \class StackFrame StackFrame.h "lldb/Target/StackFrame.h"
+///
+/// This base class provides an interface to stack frames.
+///
+/// StackFrames may have a Canonical Frame Address (CFA) or not.
+/// A frame may have a plain pc value or it may  indicate a specific point in
+/// the debug session so the correct section load list is used for
+/// symbolication.
+///
+/// Local variables may be available, or not.  A register context may be
+/// available, or not.
+
+class StackFrame : public ExecutionContextScope,
+                   public std::enable_shared_from_this<StackFrame> {
+public:
+  enum ExpressionPathOption {
+    eExpressionPathOptionCheckPtrVsMember = (1u << 0),
+    eExpressionPathOptionsNoFragileObjcIvar = (1u << 1),
+    eExpressionPathOptionsNoSyntheticChildren = (1u << 2),
+    eExpressionPathOptionsNoSyntheticArrayRange = (1u << 3),
+    eExpressionPathOptionsAllowDirectIVarAccess = (1u << 4),
+    eExpressionPathOptionsInspectAnonymousUnions = (1u << 5)
+  };
+
+  enum class Kind {
+    /// A regular stack frame with access to registers and local variables.
+    Regular,
+
+    /// A historical stack frame -- possibly without CFA or registers or
+    /// local variables.
+    History,
+
+    /// An artificial stack frame (e.g. a synthesized result of inferring
+    /// missing tail call frames from a backtrace) with limited support for
+    /// local variables.
+    Artificial
+  };
+
+  /// Construct a StackFrame object without supplying a RegisterContextSP.
+  ///
+  /// This is the one constructor that doesn't take a RegisterContext
+  /// parameter.  This ctor may be called when creating a history StackFrame;
+  /// these are used if we've collected a stack trace of pc addresses at some
+  /// point in the past.  We may only have pc values. We may have a CFA,
+  /// or more likely, we won't.
+  ///
+  /// \param [in] thread_sp
+  ///   The Thread that this frame belongs to.
+  ///
+  /// \param [in] frame_idx
+  ///   This StackFrame's frame index number in the Thread.  If inlined stack
+  ///   frames are being created, this may differ from the concrete_frame_idx
+  ///   which is the frame index without any inlined stack frames.
+  ///
+  /// \param [in] concrete_frame_idx
+  ///   The StackFrame's frame index number in the Thread without any inlined
+  ///   stack frames being included in the index.
+  ///
+  /// \param [in] cfa
+  ///   The Canonical Frame Address (this terminology from DWARF) for this
+  ///   stack frame.  The CFA for a stack frame does not change over the
+  ///   span of the stack frame's existence.  It is often the value of the
+  ///   caller's stack pointer before the call instruction into this frame's
+  ///   function.  It is usually not the same as the frame pointer register's
+  ///   value.
+  ///
+  /// \param [in] cfa_is_valid
+  ///   A history stack frame may not have a CFA value collected.  We want to
+  ///   distinguish between "no CFA available" and a CFA of
+  ///   LLDB_INVALID_ADDRESS.
+  ///
+  /// \param [in] pc
+  ///   The current pc value of this stack frame.
+  ///
+  /// \param [in] frame_kind
+  ///
+  /// \param [in] sc_ptr
+  ///   Optionally seed the StackFrame with the SymbolContext information that
+  ///   has
+  ///   already been discovered.
+  StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
+             lldb::user_id_t concrete_frame_idx, lldb::addr_t cfa,
+             bool cfa_is_valid, lldb::addr_t pc, Kind frame_kind,
+             const SymbolContext *sc_ptr);
+
+  StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
+             lldb::user_id_t concrete_frame_idx,
+             const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa,
+             lldb::addr_t pc, const SymbolContext *sc_ptr);
+
+  StackFrame(const lldb::ThreadSP &thread_sp, lldb::user_id_t frame_idx,
+             lldb::user_id_t concrete_frame_idx,
+             const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa,
+             const Address &pc, const SymbolContext *sc_ptr);
+
+  ~StackFrame() override;
+
+  lldb::ThreadSP GetThread() const { return m_thread_wp.lock(); }
+
+  StackID &GetStackID();
+
+  /// Get an Address for the current pc value in this StackFrame.
+  ///
+  /// May not be the same as the actual PC value for inlined stack frames.
+  ///
+  /// \return
+  ///   The Address object set to the current PC value.
+  const Address &GetFrameCodeAddress();
+
+  /// Change the pc value for a given thread.
+  ///
+  /// Change the current pc value for the frame on this thread.
+  ///
+  /// \param[in] pc
+  ///     The load address that the pc will be set to.
+  ///
+  /// \return
+  ///     true if the pc was changed.  false if this failed -- possibly
+  ///     because this frame is not a live StackFrame.
+  bool ChangePC(lldb::addr_t pc);
+
+  /// Provide a SymbolContext for this StackFrame's current pc value.
+  ///
+  /// The StackFrame maintains this SymbolContext and adds additional
+  /// information to it on an as-needed basis.  This helps to avoid different
+  /// functions looking up symbolic information for a given pc value multiple
+  /// times.
+  ///
+  /// \params [in] resolve_scope
+  ///   Flags from the SymbolContextItem enumerated type which specify what
+  ///   type of symbol context is needed by this caller.
+  ///
+  /// \return
+  ///   A SymbolContext reference which includes the types of information
+  ///   requested by resolve_scope, if they are available.
+  const SymbolContext &GetSymbolContext(lldb::SymbolContextItem resolve_scope);
+
+  /// Return the Canonical Frame Address (DWARF term) for this frame.
+  ///
+  /// The CFA is typically the value of the stack pointer register before the
+  /// call invocation is made.  It will not change during the lifetime of a
+  /// stack frame.  It is often not the same thing as the frame pointer
+  /// register value.
+  ///
+  /// Live StackFrames will always have a CFA but other types of frames may
+  /// not be able to supply one.
+  ///
+  /// \param [out] value
+  ///   The address of the CFA for this frame, if available.
+  ///
+  /// \param [out] error_ptr
+  ///   If there is an error determining the CFA address, this may contain a
+  ///   string explaining the failure.
+  ///
+  /// \return
+  ///   Returns true if the CFA value was successfully set in value.  Some
+  ///   frames may be unable to provide this value; they will return false.
+  bool GetFrameBaseValue(Scalar &value, Status *error_ptr);
+
+  /// Get the DWARFExpression corresponding to the Canonical Frame Address.
+  ///
+  /// Often a register (bp), but sometimes a register + offset.
+  ///
+  /// \param [out] error_ptr
+  ///   If there is an error determining the CFA address, this may contain a
+  ///   string explaining the failure.
+  ///
+  /// \return
+  ///   Returns the corresponding DWARF expression, or NULL.
+  DWARFExpression *GetFrameBaseExpression(Status *error_ptr);
+
+  /// Get the current lexical scope block for this StackFrame, if possible.
+  ///
+  /// If debug information is available for this stack frame, return a pointer
+  /// to the innermost lexical Block that the frame is currently executing.
+  ///
+  /// \return
+  ///   A pointer to the current Block.  nullptr is returned if this can
+  ///   not be provided.
+  Block *GetFrameBlock();
+
+  /// Get the RegisterContext for this frame, if possible.
+  ///
+  /// Returns a shared pointer to the RegisterContext for this stack frame.
+  /// Only a live StackFrame object will be able to return a RegisterContext -
+  /// callers must be prepared for an empty shared pointer being returned.
+  ///
+  /// Even a live StackFrame RegisterContext may not be able to provide all
+  /// registers.  Only the currently executing frame (frame 0) can reliably
+  /// provide every register in the register context.
+  ///
+  /// \return
+  ///   The RegisterContext shared point for this frame.
+  lldb::RegisterContextSP GetRegisterContext();
+
+  const lldb::RegisterContextSP &GetRegisterContextSP() const {
+    return m_reg_context_sp;
+  }
+
+  /// Retrieve the list of variables that are in scope at this StackFrame's
+  /// pc.
+  ///
+  /// A frame that is not live may return an empty VariableList for a given
+  /// pc value even though variables would be available at this point if it
+  /// were a live stack frame.
+  ///
+  /// \param[in] get_file_globals
+  ///     Whether to also retrieve compilation-unit scoped variables
+  ///     that are visible to the entire compilation unit (e.g. file
+  ///     static in C, globals that are homed in this CU).
+  ///
+  /// \return
+  ///     A pointer to a list of variables.
+  VariableList *GetVariableList(bool get_file_globals);
+
+  /// Retrieve the list of variables that are in scope at this StackFrame's
+  /// pc.
+  ///
+  /// A frame that is not live may return an empty VariableListSP for a
+  /// given pc value even though variables would be available at this point if
+  /// it were a live stack frame.
+  ///
+  /// \param[in] get_file_globals
+  ///     Whether to also retrieve compilation-unit scoped variables
+  ///     that are visible to the entire compilation unit (e.g. file
+  ///     static in C, globals that are homed in this CU).
+  ///
+  /// \return
+  ///     A pointer to a list of variables.
+  lldb::VariableListSP
+  GetInScopeVariableList(bool get_file_globals,
+                         bool must_have_valid_location = false);
+
+  /// Create a ValueObject for a variable name / pathname, possibly including
+  /// simple dereference/child selection syntax.
+  ///
+  /// \param[in] var_expr
+  ///     The string specifying a variable to base the VariableObject off
+  ///     of.
+  ///
+  /// \param[in] use_dynamic
+  ///     Whether the correct dynamic type of an object pointer should be
+  ///     determined before creating the object, or if the static type is
+  ///     sufficient.  One of the DynamicValueType enumerated values.
+  ///
+  /// \param[in] options
+  ///     An unsigned integer of flags, values from
+  ///     StackFrame::ExpressionPathOption
+  ///     enum.
+  /// \param[in] var_sp
+  ///     A VariableSP that will be set to the variable described in the
+  ///     var_expr path.
+  ///
+  /// \param[in] error
+  ///     Record any errors encountered while evaluating var_expr.
+  ///
+  /// \return
+  ///     A shared pointer to the ValueObject described by var_expr.
+  lldb::ValueObjectSP GetValueForVariableExpressionPath(
+      llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic,
+      uint32_t options, lldb::VariableSP &var_sp, Status &error);
+
+  /// Determine whether this StackFrame has debug information available or not
+  ///
+  /// \return
+  //    true if debug information is available for this frame (function,
+  //    compilation unit, block, etc.)
+  bool HasDebugInformation();
+
+  /// Return the disassembly for the instructions of this StackFrame's
+  /// function as a single C string.
+  ///
+  /// \return
+  //    C string with the assembly instructions for this function.
+  const char *Disassemble();
+
+  /// Print a description for this frame using the frame-format formatter
+  /// settings.
+  ///
+  /// \param [in] strm
+  ///   The Stream to print the description to.
+  ///
+  /// \param [in] show_unique
+  ///   Whether to print the function arguments or not for backtrace unique.
+  ///
+  /// \param [in] frame_marker
+  ///   Optional string that will be prepended to the frame output description.
+  void DumpUsingSettingsFormat(Stream *strm, bool show_unique = false,
+                               const char *frame_marker = nullptr);
+
+  /// Print a description for this frame using a default format.
+  ///
+  /// \param [in] strm
+  ///   The Stream to print the description to.
+  ///
+  /// \param [in] show_frame_index
+  ///   Whether to print the frame number or not.
+  ///
+  /// \param [in] show_fullpaths
+  ///   Whether to print the full source paths or just the file base name.
+  void Dump(Stream *strm, bool show_frame_index, bool show_fullpaths);
+
+  /// Print a description of this stack frame and/or the source
+  /// context/assembly for this stack frame.
+  ///
+  /// \param[in] strm
+  ///   The Stream to send the output to.
+  ///
+  /// \param[in] show_frame_info
+  ///   If true, print the frame info by calling DumpUsingSettingsFormat().
+  ///
+  /// \param[in] show_source
+  ///   If true, print source or disassembly as per the user's settings.
+  ///
+  /// \param[in] show_unique
+  ///   If true, print using backtrace unique style, without function
+  ///            arguments as per the user's settings.
+  ///
+  /// \param[in] frame_marker
+  ///   Passed to DumpUsingSettingsFormat() for the frame info printing.
+  ///
+  /// \return
+  ///   Returns true if successful.
+  bool GetStatus(Stream &strm, bool show_frame_info, bool show_source,
+                 bool show_unique = false, const char *frame_marker = nullptr);
+
+  /// Query whether this frame is a concrete frame on the call stack, or if it
+  /// is an inlined frame derived from the debug information and presented by
+  /// the debugger.
+  ///
+  /// \return
+  ///   true if this is an inlined frame.
+  bool IsInlined();
+
+  /// Query whether this frame is part of a historical backtrace.
+  bool IsHistorical() const;
+
+  /// Query whether this frame is artificial (e.g a synthesized result of
+  /// inferring missing tail call frames from a backtrace). Artificial frames
+  /// may have limited support for inspecting variables.
+  bool IsArtificial() const;
+
+  /// Query this frame to find what frame it is in this Thread's
+  /// StackFrameList.
+  ///
+  /// \return
+  ///   StackFrame index 0 indicates the currently-executing function.  Inline
+  ///   frames are included in this frame index count.
+  uint32_t GetFrameIndex() const;
+
+  /// Set this frame's synthetic frame index.
+  void SetFrameIndex(uint32_t index) { m_frame_index = index; }
+
+  /// Query this frame to find what frame it is in this Thread's
+  /// StackFrameList, not counting inlined frames.
+  ///
+  /// \return
+  ///   StackFrame index 0 indicates the currently-executing function.  Inline
+  ///   frames are not included in this frame index count; their concrete
+  ///   frame index will be the same as the concrete frame that they are
+  ///   derived from.
+  uint32_t GetConcreteFrameIndex() const { return m_concrete_frame_index; }
+
+  /// Create a ValueObject for a given Variable in this StackFrame.
+  ///
+  /// \params [in] variable_sp
+  ///   The Variable to base this ValueObject on
+  ///
+  /// \params [in] use_dynamic
+  ///     Whether the correct dynamic type of the variable should be
+  ///     determined before creating the ValueObject, or if the static type
+  ///     is sufficient.  One of the DynamicValueType enumerated values.
+  ///
+  /// \return
+  //    A ValueObject for this variable.
+  lldb::ValueObjectSP
+  GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp,
+                                 lldb::DynamicValueType use_dynamic);
+
+  /// Add an arbitrary Variable object (e.g. one that specifics a global or
+  /// static) to a StackFrame's list of ValueObjects.
+  ///
+  /// \params [in] variable_sp
+  ///   The Variable to base this ValueObject on
+  ///
+  /// \params [in] use_dynamic
+  ///     Whether the correct dynamic type of the variable should be
+  ///     determined before creating the ValueObject, or if the static type
+  ///     is sufficient.  One of the DynamicValueType enumerated values.
+  ///
+  /// \return
+  //    A ValueObject for this variable.
+  lldb::ValueObjectSP TrackGlobalVariable(const lldb::VariableSP &variable_sp,
+                                          lldb::DynamicValueType use_dynamic);
+
+  /// Query this frame to determine what the default language should be when
+  /// parsing expressions given the execution context.
+  ///
+  /// \return
+  ///   The language of the frame if known, else lldb::eLanguageTypeUnknown.
+  lldb::LanguageType GetLanguage();
+
+  // similar to GetLanguage(), but is allowed to take a potentially incorrect
+  // guess if exact information is not available
+  lldb::LanguageType GuessLanguage();
+
+  /// Attempt to econstruct the ValueObject for a given raw address touched by
+  /// the current instruction.  The ExpressionPath should indicate how to get
+  /// to this value using "frame variable."
+  ///
+  /// \params [in] addr
+  ///   The raw address.
+  ///
+  /// \return
+  ///   The ValueObject if found.  If valid, it has a valid ExpressionPath.
+  lldb::ValueObjectSP GuessValueForAddress(lldb::addr_t addr);
+
+  /// Attempt to reconstruct the ValueObject for the address contained in a
+  /// given register plus an offset.  The ExpressionPath should indicate how
+  /// to get to this value using "frame variable."
+  ///
+  /// \params [in] reg
+  ///   The name of the register.
+  ///
+  /// \params [in] offset
+  ///   The offset from the register.  Particularly important for sp...
+  ///
+  /// \return
+  ///   The ValueObject if found.  If valid, it has a valid ExpressionPath.
+  lldb::ValueObjectSP GuessValueForRegisterAndOffset(ConstString reg,
+                                                     int64_t offset);
+
+  /// Attempt to reconstruct the ValueObject for a variable with a given \a name
+  /// from within the current StackFrame, within the current block. The search
+  /// for the variable starts in the deepest block corresponding to the current
+  /// PC in the stack frame and traverse through all parent blocks stopping at
+  /// inlined function boundaries.
+  ///
+  /// \params [in] name
+  ///   The name of the variable.
+  ///
+  /// \return
+  ///   The ValueObject if found.
+  lldb::ValueObjectSP FindVariable(ConstString name);
+
+  // lldb::ExecutionContextScope pure virtual functions
+  lldb::TargetSP CalculateTarget() override;
+
+  lldb::ProcessSP CalculateProcess() override;
+
+  lldb::ThreadSP CalculateThread() override;
+
+  lldb::StackFrameSP CalculateStackFrame() override;
+
+  void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
+
+  lldb::RecognizedStackFrameSP GetRecognizedFrame();
+
+protected:
+  friend class StackFrameList;
+
+  void SetSymbolContextScope(SymbolContextScope *symbol_scope);
+
+  void UpdateCurrentFrameFromPreviousFrame(StackFrame &prev_frame);
+
+  void UpdatePreviousFrameFromCurrentFrame(StackFrame &curr_frame);
+
+  bool HasCachedData() const;
+
+private:
+  // For StackFrame only
+  lldb::ThreadWP m_thread_wp;
+  uint32_t m_frame_index;
+  uint32_t m_concrete_frame_index;
+  lldb::RegisterContextSP m_reg_context_sp;
+  StackID m_id;
+  Address m_frame_code_addr; // The frame code address (might not be the same as
+                             // the actual PC for inlined frames) as a
+                             // section/offset address
+  SymbolContext m_sc;
+  Flags m_flags;
+  Scalar m_frame_base;
+  Status m_frame_base_error;
+  bool m_cfa_is_valid; // Does this frame have a CFA?  Different from CFA ==
+                       // LLDB_INVALID_ADDRESS
+  Kind m_stack_frame_kind;
+  lldb::VariableListSP m_variable_list_sp;
+  ValueObjectList m_variable_list_value_objects; // Value objects for each
+                                                 // variable in
+                                                 // m_variable_list_sp
+  lldb::RecognizedStackFrameSP m_recognized_frame_sp;
+  StreamString m_disassembly;
+  std::recursive_mutex m_mutex;
+
+  DISALLOW_COPY_AND_ASSIGN(StackFrame);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StackFrame_h_
diff --git a/linux-x64/clang/include/lldb/Target/StackFrameList.h b/linux-x64/clang/include/lldb/Target/StackFrameList.h
new file mode 100644
index 0000000..5eb7919
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/StackFrameList.h
@@ -0,0 +1,163 @@
+//===-- StackFrameList.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StackFrameList_h_
+#define liblldb_StackFrameList_h_
+
+#include <memory>
+#include <mutex>
+#include <vector>
+
+#include "lldb/Target/StackFrame.h"
+
+namespace lldb_private {
+
+class StackFrameList {
+public:
+  // Constructors and Destructors
+  StackFrameList(Thread &thread, const lldb::StackFrameListSP &prev_frames_sp,
+                 bool show_inline_frames);
+
+  ~StackFrameList();
+
+  /// Get the number of visible frames. Frames may be created if \p can_create
+  /// is true. Synthetic (inline) frames expanded from the concrete frame #0
+  /// (aka invisible frames) are not included in this count.
+  uint32_t GetNumFrames(bool can_create = true);
+
+  /// Get the frame at index \p idx. Invisible frames cannot be indexed.
+  lldb::StackFrameSP GetFrameAtIndex(uint32_t idx);
+
+  /// Get the first concrete frame with index greater than or equal to \p idx.
+  /// Unlike \ref GetFrameAtIndex, this cannot return a synthetic frame.
+  lldb::StackFrameSP GetFrameWithConcreteFrameIndex(uint32_t unwind_idx);
+
+  /// Retrieve the stack frame with the given ID \p stack_id.
+  lldb::StackFrameSP GetFrameWithStackID(const StackID &stack_id);
+
+  /// Mark a stack frame as the currently selected frame and return its index.
+  uint32_t SetSelectedFrame(lldb_private::StackFrame *frame);
+
+  /// Get the currently selected frame index.
+  uint32_t GetSelectedFrameIndex() const;
+
+  /// Mark a stack frame as the currently selected frame using the frame index
+  /// \p idx. Like \ref GetFrameAtIndex, invisible frames cannot be selected.
+  bool SetSelectedFrameByIndex(uint32_t idx);
+
+  /// If the current inline depth (i.e the number of invisible frames) is valid,
+  /// subtract it from \p idx. Otherwise simply return \p idx.
+  uint32_t GetVisibleStackFrameIndex(uint32_t idx) {
+    if (m_current_inlined_depth < UINT32_MAX)
+      return idx - m_current_inlined_depth;
+    else
+      return idx;
+  }
+
+  /// Calculate and set the current inline depth. This may be used to update
+  /// the StackFrameList's set of inline frames when execution stops, e.g when
+  /// a breakpoint is hit.
+  void CalculateCurrentInlinedDepth();
+
+  /// If the currently selected frame comes from the currently selected thread,
+  /// point the default file and line of the thread's target to the location
+  /// specified by the frame.
+  void SetDefaultFileAndLineToSelectedFrame();
+
+  /// Clear the cache of frames.
+  void Clear();
+
+  void Dump(Stream *s);
+
+  /// If \p stack_frame_ptr is contained in this StackFrameList, return its
+  /// wrapping shared pointer.
+  lldb::StackFrameSP
+  GetStackFrameSPForStackFramePtr(StackFrame *stack_frame_ptr);
+
+  size_t GetStatus(Stream &strm, uint32_t first_frame, uint32_t num_frames,
+                   bool show_frame_info, uint32_t num_frames_with_source,
+                   bool show_unique = false,
+                   const char *frame_marker = nullptr);
+
+protected:
+  friend class Thread;
+
+  bool SetFrameAtIndex(uint32_t idx, lldb::StackFrameSP &frame_sp);
+
+  static void Merge(std::unique_ptr<StackFrameList> &curr_up,
+                    lldb::StackFrameListSP &prev_sp);
+
+  void GetFramesUpTo(uint32_t end_idx);
+
+  void GetOnlyConcreteFramesUpTo(uint32_t end_idx, Unwind *unwinder);
+
+  void SynthesizeTailCallFrames(StackFrame &next_frame);
+
+  bool GetAllFramesFetched() { return m_concrete_frames_fetched == UINT32_MAX; }
+
+  void SetAllFramesFetched() { m_concrete_frames_fetched = UINT32_MAX; }
+
+  bool DecrementCurrentInlinedDepth();
+
+  void ResetCurrentInlinedDepth();
+
+  uint32_t GetCurrentInlinedDepth();
+
+  void SetCurrentInlinedDepth(uint32_t new_depth);
+
+  typedef std::vector<lldb::StackFrameSP> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  /// The thread this frame list describes.
+  Thread &m_thread;
+
+  /// The old stack frame list.
+  // TODO: The old stack frame list is used to fill in missing frame info
+  // heuristically when it's otherwise unavailable (say, because the unwinder
+  // fails). We should have stronger checks to make sure that this is a valid
+  // source of information.
+  lldb::StackFrameListSP m_prev_frames_sp;
+
+  /// A mutex for this frame list.
+  // TODO: This mutex may not always be held when required. In particular, uses
+  // of the StackFrameList APIs in lldb_private::Thread look suspect. Consider
+  // passing around a lock_guard reference to enforce proper locking.
+  mutable std::recursive_mutex m_mutex;
+
+  /// A cache of frames. This may need to be updated when the program counter
+  /// changes.
+  collection m_frames;
+
+  /// The currently selected frame.
+  uint32_t m_selected_frame_idx;
+
+  /// The number of concrete frames fetched while filling the frame list. This
+  /// is only used when synthetic frames are enabled.
+  uint32_t m_concrete_frames_fetched;
+
+  /// The number of synthetic function activations (invisible frames) expanded
+  /// from the concrete frame #0 activation.
+  // TODO: Use an optional instead of UINT32_MAX to denote invalid values.
+  uint32_t m_current_inlined_depth;
+
+  /// The program counter value at the currently selected synthetic activation.
+  /// This is only valid if m_current_inlined_depth is valid.
+  // TODO: Use an optional instead of UINT32_MAX to denote invalid values.
+  lldb::addr_t m_current_inlined_pc;
+
+  /// Whether or not to show synthetic (inline) frames. Immutable.
+  const bool m_show_inlined_frames;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(StackFrameList);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StackFrameList_h_
diff --git a/linux-x64/clang/include/lldb/Target/StackFrameRecognizer.h b/linux-x64/clang/include/lldb/Target/StackFrameRecognizer.h
new file mode 100644
index 0000000..2021ac5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/StackFrameRecognizer.h
@@ -0,0 +1,161 @@
+//===-- StackFrameRecognizer.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StackFrameRecognizer_h_
+#define liblldb_StackFrameRecognizer_h_
+
+#include "lldb/Core/ValueObject.h"
+#include "lldb/Core/ValueObjectList.h"
+#include "lldb/Symbol/VariableList.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-private-forward.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+/// \class RecognizedStackFrame
+///
+/// This class provides extra information about a stack frame that was
+/// provided by a specific stack frame recognizer. Right now, this class only
+/// holds recognized arguments (via GetRecognizedArguments).
+
+class RecognizedStackFrame
+    : public std::enable_shared_from_this<RecognizedStackFrame> {
+public:
+  virtual lldb::ValueObjectListSP GetRecognizedArguments() {
+    return m_arguments;
+  }
+  virtual lldb::ValueObjectSP GetExceptionObject() {
+    return lldb::ValueObjectSP();
+  }
+  virtual ~RecognizedStackFrame(){};
+
+protected:
+  lldb::ValueObjectListSP m_arguments;
+};
+
+/// \class StackFrameRecognizer
+///
+/// A base class for frame recognizers. Subclasses (actual frame recognizers)
+/// should implement RecognizeFrame to provide a RecognizedStackFrame for a
+/// given stack frame.
+
+class StackFrameRecognizer
+    : public std::enable_shared_from_this<StackFrameRecognizer> {
+public:
+  virtual lldb::RecognizedStackFrameSP RecognizeFrame(
+      lldb::StackFrameSP frame) {
+    return lldb::RecognizedStackFrameSP();
+  };
+  virtual std::string GetName() {
+    return "";
+  }
+
+  virtual ~StackFrameRecognizer(){};
+};
+
+/// \class ScriptedStackFrameRecognizer
+///
+/// Python implementation for frame recognizers. An instance of this class
+/// tracks a particular Python classobject, which will be asked to recognize
+/// stack frames.
+
+class ScriptedStackFrameRecognizer : public StackFrameRecognizer {
+  lldb_private::ScriptInterpreter *m_interpreter;
+  lldb_private::StructuredData::ObjectSP m_python_object_sp;
+  std::string m_python_class;
+
+public:
+  ScriptedStackFrameRecognizer(lldb_private::ScriptInterpreter *interpreter,
+                               const char *pclass);
+  ~ScriptedStackFrameRecognizer() override {}
+
+  std::string GetName() override {
+    return GetPythonClassName();
+  }
+
+  const char *GetPythonClassName() { return m_python_class.c_str(); }
+
+  lldb::RecognizedStackFrameSP RecognizeFrame(
+      lldb::StackFrameSP frame) override;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ScriptedStackFrameRecognizer);
+};
+
+/// \class StackFrameRecognizerManager
+///
+/// Static class that provides a registry of known stack frame recognizers.
+/// Has static methods to add, enumerate, remove, query and invoke recognizers.
+
+class StackFrameRecognizerManager {
+public:
+  static void AddRecognizer(lldb::StackFrameRecognizerSP recognizer,
+                            ConstString module,
+                            ConstString symbol,
+                            bool first_instruction_only = true);
+
+  static void AddRecognizer(lldb::StackFrameRecognizerSP recognizer,
+                            lldb::RegularExpressionSP module,
+                            lldb::RegularExpressionSP symbol,
+                            bool first_instruction_only = true);
+
+  static void ForEach(
+      std::function<void(uint32_t recognizer_id, std::string recognizer_name,
+                         std::string module, std::string symbol,
+                         bool regexp)> const &callback);
+
+  static bool RemoveRecognizerWithID(uint32_t recognizer_id);
+
+  static void RemoveAllRecognizers();
+
+  static lldb::StackFrameRecognizerSP GetRecognizerForFrame(
+      lldb::StackFrameSP frame);
+
+  static lldb::RecognizedStackFrameSP RecognizeFrame(lldb::StackFrameSP frame);
+};
+
+/// \class ValueObjectRecognizerSynthesizedValue
+///
+/// ValueObject subclass that presents the passed ValueObject as a recognized
+/// value with the specified ValueType. Frame recognizers should return
+/// instances of this class as the returned objects in GetRecognizedArguments().
+
+class ValueObjectRecognizerSynthesizedValue : public ValueObject {
+ public:
+  static lldb::ValueObjectSP Create(ValueObject &parent, lldb::ValueType type) {
+    return (new ValueObjectRecognizerSynthesizedValue(parent, type))->GetSP();
+  }
+  ValueObjectRecognizerSynthesizedValue(ValueObject &parent,
+                                        lldb::ValueType type)
+      : ValueObject(parent), m_type(type) {
+    SetName(parent.GetName());
+  }
+
+  uint64_t GetByteSize() override { return m_parent->GetByteSize(); }
+  lldb::ValueType GetValueType() const override { return m_type; }
+  bool UpdateValue() override {
+    if (!m_parent->UpdateValueIfNeeded()) return false;
+    m_value = m_parent->GetValue();
+    return true;
+  }
+  size_t CalculateNumChildren(uint32_t max = UINT32_MAX) override {
+    return m_parent->GetNumChildren(max);
+  }
+  CompilerType GetCompilerTypeImpl() override {
+    return m_parent->GetCompilerType();
+  }
+  bool IsSynthetic() override { return true; }
+
+ private:
+  lldb::ValueType m_type;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StackFrameRecognizer_h_
diff --git a/linux-x64/clang/include/lldb/Target/StackID.h b/linux-x64/clang/include/lldb/Target/StackID.h
new file mode 100644
index 0000000..a649a4f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/StackID.h
@@ -0,0 +1,99 @@
+//===-- StackID.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StackID_h_
+#define liblldb_StackID_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class StackID {
+public:
+  // Constructors and Destructors
+  StackID()
+      : m_pc(LLDB_INVALID_ADDRESS), m_cfa(LLDB_INVALID_ADDRESS),
+        m_symbol_scope(nullptr) {}
+
+  explicit StackID(lldb::addr_t pc, lldb::addr_t cfa,
+                   SymbolContextScope *symbol_scope)
+      : m_pc(pc), m_cfa(cfa), m_symbol_scope(symbol_scope) {}
+
+  StackID(const StackID &rhs)
+      : m_pc(rhs.m_pc), m_cfa(rhs.m_cfa), m_symbol_scope(rhs.m_symbol_scope) {}
+
+  ~StackID() = default;
+
+  lldb::addr_t GetPC() const { return m_pc; }
+
+  lldb::addr_t GetCallFrameAddress() const { return m_cfa; }
+
+  SymbolContextScope *GetSymbolContextScope() const { return m_symbol_scope; }
+
+  void SetSymbolContextScope(SymbolContextScope *symbol_scope) {
+    m_symbol_scope = symbol_scope;
+  }
+
+  void Clear() {
+    m_pc = LLDB_INVALID_ADDRESS;
+    m_cfa = LLDB_INVALID_ADDRESS;
+    m_symbol_scope = nullptr;
+  }
+
+  bool IsValid() const {
+    return m_pc != LLDB_INVALID_ADDRESS || m_cfa != LLDB_INVALID_ADDRESS;
+  }
+
+  void Dump(Stream *s);
+
+  // Operators
+  const StackID &operator=(const StackID &rhs) {
+    if (this != &rhs) {
+      m_pc = rhs.m_pc;
+      m_cfa = rhs.m_cfa;
+      m_symbol_scope = rhs.m_symbol_scope;
+    }
+    return *this;
+  }
+
+protected:
+  friend class StackFrame;
+
+  void SetPC(lldb::addr_t pc) { m_pc = pc; }
+
+  void SetCFA(lldb::addr_t cfa) { m_cfa = cfa; }
+
+  lldb::addr_t
+      m_pc; // The pc value for the function/symbol for this frame. This will
+  // only get used if the symbol scope is nullptr (the code where we are
+  // stopped is not represented by any function or symbol in any shared
+  // library).
+  lldb::addr_t m_cfa; // The call frame address (stack pointer) value
+                      // at the beginning of the function that uniquely
+                      // identifies this frame (along with m_symbol_scope
+                      // below)
+  SymbolContextScope *
+      m_symbol_scope; // If nullptr, there is no block or symbol for this frame.
+                      // If not nullptr, this will either be the scope for the
+                      // lexical block for the frame, or the scope for the
+                      // symbol. Symbol context scopes are always be unique
+                      // pointers since the are part of the Block and Symbol
+                      // objects and can easily be used to tell if a stack ID
+                      // is the same as another.
+};
+
+bool operator==(const StackID &lhs, const StackID &rhs);
+bool operator!=(const StackID &lhs, const StackID &rhs);
+
+// frame_id_1 < frame_id_2 means "frame_id_1 is YOUNGER than frame_id_2"
+bool operator<(const StackID &lhs, const StackID &rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_StackID_h_
diff --git a/linux-x64/clang/include/lldb/Target/StopInfo.h b/linux-x64/clang/include/lldb/Target/StopInfo.h
new file mode 100644
index 0000000..59033b1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/StopInfo.h
@@ -0,0 +1,188 @@
+//===-- StopInfo.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StopInfo_h_
+#define liblldb_StopInfo_h_
+
+#include <string>
+
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+class StopInfo {
+  friend class Process::ProcessEventData;
+  friend class ThreadPlanBase;
+
+public:
+  // Constructors and Destructors
+  StopInfo(Thread &thread, uint64_t value);
+
+  virtual ~StopInfo() {}
+
+  bool IsValid() const;
+
+  void SetThread(const lldb::ThreadSP &thread_sp) { m_thread_wp = thread_sp; }
+
+  lldb::ThreadSP GetThread() const { return m_thread_wp.lock(); }
+
+  // The value of the StopInfo depends on the StopReason. StopReason
+  // Meaning ----------------------------------------------
+  // eStopReasonBreakpoint       BreakpointSiteID eStopReasonSignal
+  // Signal number eStopReasonWatchpoint       WatchpointLocationID
+  // eStopReasonPlanComplete     No significance
+
+  uint64_t GetValue() const { return m_value; }
+
+  virtual lldb::StopReason GetStopReason() const = 0;
+
+  // ShouldStopSynchronous will get called before any thread plans are
+  // consulted, and if it says we should resume the target, then we will just
+  // immediately resume.  This should not run any code in or resume the target.
+
+  virtual bool ShouldStopSynchronous(Event *event_ptr) { return true; }
+
+  void OverrideShouldNotify(bool override_value) {
+    m_override_should_notify = override_value ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  // If should stop returns false, check if we should notify of this event
+  virtual bool ShouldNotify(Event *event_ptr) {
+    if (m_override_should_notify == eLazyBoolCalculate)
+      return DoShouldNotify(event_ptr);
+    else
+      return m_override_should_notify == eLazyBoolYes;
+  }
+
+  virtual void WillResume(lldb::StateType resume_state) {
+    // By default, don't do anything
+  }
+
+  virtual const char *GetDescription() { return m_description.c_str(); }
+
+  virtual void SetDescription(const char *desc_cstr) {
+    if (desc_cstr && desc_cstr[0])
+      m_description.assign(desc_cstr);
+    else
+      m_description.clear();
+  }
+
+  virtual bool IsValidForOperatingSystemThread(Thread &thread) { return true; }
+
+  // Sometimes the thread plan logic will know that it wants a given stop to
+  // stop or not, regardless of what the ordinary logic for that StopInfo would
+  // dictate.  The main example of this is the ThreadPlanCallFunction, which
+  // for instance knows - based on how that particular expression was executed
+  // - whether it wants all breakpoints to auto-continue or not. Use
+  // OverrideShouldStop on the StopInfo to implement this.
+
+  void OverrideShouldStop(bool override_value) {
+    m_override_should_stop = override_value ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  bool GetOverrideShouldStop() {
+    return m_override_should_stop != eLazyBoolCalculate;
+  }
+
+  bool GetOverriddenShouldStopValue() {
+    return m_override_should_stop == eLazyBoolYes;
+  }
+
+  StructuredData::ObjectSP GetExtendedInfo() { return m_extended_info; }
+
+  static lldb::StopInfoSP
+  CreateStopReasonWithBreakpointSiteID(Thread &thread,
+                                       lldb::break_id_t break_id);
+
+  // This creates a StopInfo for the thread where the should_stop is already
+  // set, and won't be recalculated.
+  static lldb::StopInfoSP CreateStopReasonWithBreakpointSiteID(
+      Thread &thread, lldb::break_id_t break_id, bool should_stop);
+
+  static lldb::StopInfoSP CreateStopReasonWithWatchpointID(
+      Thread &thread, lldb::break_id_t watch_id,
+      lldb::addr_t watch_hit_addr = LLDB_INVALID_ADDRESS);
+
+  static lldb::StopInfoSP
+  CreateStopReasonWithSignal(Thread &thread, int signo,
+                             const char *description = nullptr);
+
+  static lldb::StopInfoSP CreateStopReasonToTrace(Thread &thread);
+
+  static lldb::StopInfoSP
+  CreateStopReasonWithPlan(lldb::ThreadPlanSP &plan,
+                           lldb::ValueObjectSP return_valobj_sp,
+                           lldb::ExpressionVariableSP expression_variable_sp);
+
+  static lldb::StopInfoSP
+  CreateStopReasonWithException(Thread &thread, const char *description);
+
+  static lldb::StopInfoSP CreateStopReasonWithExec(Thread &thread);
+
+  static lldb::ValueObjectSP
+  GetReturnValueObject(lldb::StopInfoSP &stop_info_sp);
+
+  static lldb::ExpressionVariableSP
+  GetExpressionVariable(lldb::StopInfoSP &stop_info_sp);
+
+  static lldb::ValueObjectSP
+  GetCrashingDereference(lldb::StopInfoSP &stop_info_sp,
+                         lldb::addr_t *crashing_address = nullptr);
+
+protected:
+  // Perform any action that is associated with this stop.  This is done as the
+  // Event is removed from the event queue.  ProcessEventData::DoOnRemoval does
+  // the job.
+
+  virtual void PerformAction(Event *event_ptr) {}
+
+  virtual bool DoShouldNotify(Event *event_ptr) { return false; }
+
+  // Stop the thread by default. Subclasses can override this to allow the
+  // thread to continue if desired.  The ShouldStop method should not do
+  // anything that might run code.  If you need to run code when deciding
+  // whether to stop at this StopInfo, that must be done in the PerformAction.
+  // The PerformAction will always get called before the ShouldStop.  This is
+  // done by the ProcessEventData::DoOnRemoval, though the ThreadPlanBase needs
+  // to consult this later on.
+  virtual bool ShouldStop(Event *event_ptr) { return true; }
+
+  // Classes that inherit from StackID can see and modify these
+  lldb::ThreadWP m_thread_wp; // The thread corresponding to the stop reason.
+  uint32_t m_stop_id;   // The process stop ID for which this stop info is valid
+  uint32_t m_resume_id; // This is the resume ID when we made this stop ID.
+  uint64_t m_value; // A generic value that can be used for things pertaining to
+                    // this stop info
+  std::string m_description; // A textual description describing this stop.
+  LazyBool m_override_should_notify;
+  LazyBool m_override_should_stop;
+
+  StructuredData::ObjectSP
+      m_extended_info; // The extended info for this stop info
+
+  // This determines whether the target has run since this stop info. N.B.
+  // running to evaluate a user expression does not count.
+  bool HasTargetRunSinceMe();
+
+  // MakeStopInfoValid is necessary to allow saved stop infos to resurrect
+  // themselves as valid. It should only be used by
+  // Thread::RestoreThreadStateFromCheckpoint and to make sure the one-step
+  // needed for before-the-fact watchpoints does not prevent us from stopping
+  void MakeStopInfoValid();
+
+private:
+  friend class Thread;
+
+  DISALLOW_COPY_AND_ASSIGN(StopInfo);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StopInfo_h_
diff --git a/linux-x64/clang/include/lldb/Target/StructuredDataPlugin.h b/linux-x64/clang/include/lldb/Target/StructuredDataPlugin.h
new file mode 100644
index 0000000..b20bdb3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/StructuredDataPlugin.h
@@ -0,0 +1,169 @@
+//===-- StructuredDataPlugin.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef StructuredDataPlugin_h
+#define StructuredDataPlugin_h
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+
+class CommandObjectMultiword;
+
+/// Plugin that supports process-related structured data sent asynchronously
+/// from the debug monitor (e.g. debugserver, lldb-server, etc.)
+///
+/// This plugin type is activated by a Process-derived instance when that
+/// instance detects that a given structured data feature is available.
+///
+/// StructuredDataPlugin instances are inherently tied to a process.  The
+/// main functionality they support is the ability to consume asynchronously-
+/// delivered structured data from the process monitor, and do something
+/// reasonable with it.  Something reasonable can include broadcasting a
+/// StructuredData event, which other parts of the system can then do with
+/// as they please.  An IDE could use this facility to retrieve CPU usage,
+/// memory usage, and other run-time aspects of the process.  That data
+/// can then be displayed meaningfully to the user through the IDE.
+
+/// For command-line LLDB, the Debugger instance listens for the structured
+/// data events raised by the plugin, and give the plugin both the output
+/// and error streams such that the plugin can display something about the
+/// event, at a time when the debugger ensures it is safe to write to the
+/// output or error streams.
+
+class StructuredDataPlugin
+    : public PluginInterface,
+      public std::enable_shared_from_this<StructuredDataPlugin> {
+public:
+  ~StructuredDataPlugin() override;
+
+  lldb::ProcessSP GetProcess() const;
+
+  // Public instance API
+
+  /// Return whether this plugin supports the given StructuredData feature.
+  ///
+  /// When Process is informed of a list of process-monitor-supported
+  /// structured data features, Process will go through the list of plugins,
+  /// one at a time, and have the first plugin that supports a given feature
+  /// be the plugin instantiated to handle that feature.  There is a 1-1
+  /// correspondence between a Process instance and a StructuredDataPlugin
+  /// mapped to that process.  A plugin can support handling multiple
+  /// features, and if that happens, there is a single plugin instance
+  /// created covering all of the mapped features for a given process.
+  ///
+  /// \param[in] type_name
+  ///     The name of the feature tag supported by a process.
+  ///     e.g. "darwin-log".
+  ///
+  /// \return
+  ///     true if the plugin supports the feature; otherwise, false.
+  virtual bool SupportsStructuredDataType(ConstString type_name) = 0;
+
+  /// Handle the arrival of asynchronous structured data from the process.
+  ///
+  /// When asynchronous structured data arrives from the process monitor,
+  /// it is immediately delivered to the plugin mapped for that feature
+  /// if one exists.  The structured data that arrives from a process
+  /// monitor must be a dictionary, and it must have a string field named
+  /// "type" that must contain the StructuredData feature name set as the
+  /// value.  This is the manner in which the data is routed to the proper
+  /// plugin instance.
+  ///
+  /// \param[in] process
+  ///     The process instance that just received the structured data.
+  ///     This will always be the same process for a given instance of
+  ///     a plugin.
+  ///
+  /// \param[in] type_name
+  ///     The name of the feature tag for the asynchronous structured data.
+  ///     Note this data will also be present in the \b object_sp dictionary
+  ///     under the string value with key "type".
+  ///
+  /// \param[in] object_sp
+  ///     A shared pointer to the structured data that arrived.  This must
+  ///     be a dictionary.  The only key required is the aforementioned
+  ///     key named "type" that must be a string value containing the
+  ///     structured data type name.
+  virtual void
+  HandleArrivalOfStructuredData(Process &process, ConstString type_name,
+                                const StructuredData::ObjectSP &object_sp) = 0;
+
+  /// Get a human-readable description of the contents of the data.
+  ///
+  /// In command-line LLDB, this method will be called by the Debugger
+  /// instance for each structured data event generated, and the output
+  /// will be printed to the LLDB console.  If nothing is added to the stream,
+  /// nothing will be printed; otherwise, a newline will be added to the end
+  /// when displayed.
+  ///
+  /// \param[in] object_sp
+  ///     A shared pointer to the structured data to format.
+  ///
+  /// \param[in] stream
+  ///     The stream where the structured data should be pretty printed.
+  ///
+  /// \return
+  ///     The error if formatting the object contents failed; otherwise,
+  ///     success.
+  virtual Status GetDescription(const StructuredData::ObjectSP &object_sp,
+                                lldb_private::Stream &stream) = 0;
+
+  /// Returns whether the plugin's features are enabled.
+  ///
+  /// This is a convenience method for plugins that can enable or disable
+  /// their functionality.  It allows retrieval of this state without
+  /// requiring a cast.
+  ///
+  /// \param[in] type_name
+  ///     The name of the feature tag for the asynchronous structured data.
+  ///     This is needed for plugins that support more than one feature.
+  virtual bool GetEnabled(ConstString type_name) const;
+
+  /// Allow the plugin to do work related to modules that loaded in the
+  /// the corresponding process.
+  ///
+  /// This method defaults to doing nothing.  Plugins can override it
+  /// if they have any behavior they want to enable/modify based on loaded
+  /// modules.
+  ///
+  /// \param[in] process
+  ///     The process that just was notified of modules having been loaded.
+  ///     This will always be the same process for a given instance of
+  ///     a plugin.
+  ///
+  /// \param[in] module_list
+  ///     The list of modules that the process registered as having just
+  ///     loaded.  See \b Process::ModulesDidLoad(...).
+  virtual void ModulesDidLoad(Process &process, ModuleList &module_list);
+
+protected:
+  // Derived-class API
+  StructuredDataPlugin(const lldb::ProcessWP &process_wp);
+
+  /// Derived classes must call this before attempting to hook up commands
+  /// to the 'plugin structured-data' tree.
+  ///
+  /// This ensures the relevant command and options hook points for all
+  /// StructuredDataPlugin derived classes are available for this debugger.
+  /// If this has already happened, this call is a no-op.
+  ///
+  /// \param[in] debugger
+  ///     The Debugger instance for which we're creating the required shared
+  ///     components for the StructuredDataPlugin derived classes.
+  static void InitializeBasePluginForDebugger(Debugger &debugger);
+
+private:
+  lldb::ProcessWP m_process_wp;
+
+  DISALLOW_COPY_AND_ASSIGN(StructuredDataPlugin);
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Target/SystemRuntime.h b/linux-x64/clang/include/lldb/Target/SystemRuntime.h
new file mode 100644
index 0000000..b45f882
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/SystemRuntime.h
@@ -0,0 +1,308 @@
+//===-- SystemRuntime.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SystemRuntime_h_
+#define liblldb_SystemRuntime_h_
+
+#include <vector>
+
+#include "lldb/Core/ModuleList.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Target/QueueItem.h"
+#include "lldb/Target/QueueList.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-private.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+/// \class SystemRuntime SystemRuntime.h "lldb/Target/SystemRuntime.h"
+/// A plug-in interface definition class for system runtimes.
+///
+/// The system runtime plugins can collect information from the system
+/// libraries during a Process' lifetime and provide information about how
+/// objects/threads were originated.
+///
+/// For instance, a system runtime plugin use a breakpoint when threads are
+/// created to record the backtrace of where that thread was created. Later,
+/// when backtracing the created thread, it could extend the backtrace to show
+/// where it was originally created from.
+///
+/// The plugin will insert its own breakpoint when Created and start
+/// collecting information.  Later when it comes time to augment a Thread, it
+/// can be asked to provide that information.
+///
+
+class SystemRuntime : public PluginInterface {
+public:
+  /// Find a system runtime plugin for a given process.
+  ///
+  /// Scans the installed SystemRuntime plugins and tries to find an instance
+  /// that can be used to track image changes in \a process.
+  ///
+  /// \param[in] process
+  ///     The process for which to try and locate a system runtime
+  ///     plugin instance.
+  static SystemRuntime *FindPlugin(Process *process);
+
+  /// Construct with a process.
+  SystemRuntime(lldb_private::Process *process);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class is designed to be inherited
+  /// by the plug-in instance.
+  ~SystemRuntime() override;
+
+  /// Called after attaching to a process.
+  ///
+  /// Allow the SystemRuntime plugin to execute some code after attaching to a
+  /// process.
+  virtual void DidAttach();
+
+  /// Called after launching a process.
+  ///
+  /// Allow the SystemRuntime plugin to execute some code after launching a
+  /// process.
+  virtual void DidLaunch();
+
+  /// Called when modules have been loaded in the process.
+  ///
+  /// Allow the SystemRuntime plugin to enable logging features in the system
+  /// runtime libraries.
+  virtual void ModulesDidLoad(lldb_private::ModuleList &module_list);
+
+  /// Called before detaching from a process.
+  ///
+  /// This will give a SystemRuntime plugin a chance to free any resources in
+  /// the inferior process before we detach.
+  virtual void Detach();
+
+  /// Return a list of thread origin extended backtraces that may be
+  /// available.
+  ///
+  /// A System Runtime may be able to provide a backtrace of when this
+  /// thread was originally created.  Furthermore, it may be able to provide
+  /// that extended backtrace for different styles of creation. On a system
+  /// with both pthreads and libdispatch, aka Grand Central Dispatch, queues,
+  /// the system runtime may be able to provide the pthread creation of the
+  /// thread and it may also be able to provide the backtrace of when this GCD
+  /// queue work block was enqueued. The caller may request these different
+  /// origins by name.
+  ///
+  /// The names will be provided in the order that they are most likely to be
+  /// requested.  For instance, a most natural order may be to request the GCD
+  /// libdispatch queue origin.  If there is none, then request the pthread
+  /// origin.
+  ///
+  /// \return
+  ///   A vector of ConstStrings with names like "pthread" or "libdispatch".
+  ///   An empty vector may be returned if no thread origin extended
+  ///   backtrace capabilities are available.
+  virtual const std::vector<ConstString> &GetExtendedBacktraceTypes();
+
+  /// Return a Thread which shows the origin of this thread's creation.
+  ///
+  /// This likely returns a HistoryThread which shows how thread was
+  /// originally created (e.g. "pthread" type), or how the work that is
+  /// currently executing on it was originally enqueued (e.g. "libdispatch"
+  /// type).
+  ///
+  /// There may be a chain of thread-origins; it may be informative to the end
+  /// user to query the returned ThreadSP for its origins as well.
+  ///
+  /// \param [in] thread
+  ///   The thread to examine.
+  ///
+  /// \param [in] type
+  ///   The type of thread origin being requested.  The types supported
+  ///   are returned from SystemRuntime::GetExtendedBacktraceTypes.
+  ///
+  /// \return
+  ///   A ThreadSP which will have a StackList of frames.  This Thread will
+  ///   not appear in the Process' list of current threads.  Normal thread
+  ///   operations like stepping will not be available.  This is a historical
+  ///   view thread and may be only useful for showing a backtrace.
+  ///
+  ///   An empty ThreadSP will be returned if no thread origin is available.
+  virtual lldb::ThreadSP GetExtendedBacktraceThread(lldb::ThreadSP thread,
+                                                    ConstString type);
+
+  /// Get the extended backtrace thread for a QueueItem
+  ///
+  /// A QueueItem represents a function/block that will be executed on
+  /// a libdispatch queue in the future, or it represents a function/block
+  /// that is currently executing on a thread.
+  ///
+  /// This method will report a thread backtrace of the function that enqueued
+  /// it originally, if possible.
+  ///
+  /// \param [in] queue_item_sp
+  ///     The QueueItem that we are getting an extended backtrace for.
+  ///
+  /// \param [in] type
+  ///     The type of extended backtrace to fetch.  The types supported
+  ///     are returned from SystemRuntime::GetExtendedBacktraceTypes.
+  ///
+  /// \return
+  ///     If an extended backtrace is available, it is returned.  Else
+  ///     an empty ThreadSP is returned.
+  virtual lldb::ThreadSP
+  GetExtendedBacktraceForQueueItem(lldb::QueueItemSP queue_item_sp,
+                                   ConstString type) {
+    return lldb::ThreadSP();
+  }
+
+  /// Populate the Process' QueueList with libdispatch / GCD queues that
+  /// exist.
+  ///
+  /// When process execution is paused, the SystemRuntime may be called to
+  /// fill in the list of Queues that currently exist.
+  ///
+  /// \param [out] queue_list
+  ///     This QueueList will be cleared, and any queues that currently exist
+  ///     will be added.  An empty QueueList will be returned if no queues
+  ///     exist or if this Systemruntime does not support libdispatch queues.
+  virtual void PopulateQueueList(lldb_private::QueueList &queue_list) {}
+
+  /// Get the queue name for a thread given a thread's dispatch_qaddr.
+  ///
+  /// On systems using libdispatch queues, a thread may be associated with a
+  /// queue. There will be a call to get the thread's dispatch_qaddr.  At the
+  /// dispatch_qaddr we will find the address of this thread's
+  /// dispatch_queue_t structure. Given the address of the dispatch_queue_t
+  /// structure for a thread, get the queue name and return it.
+  ///
+  /// \param [in] dispatch_qaddr
+  ///     The address of the dispatch_qaddr pointer for this thread.
+  ///
+  /// \return
+  ///     The string of this queue's name.  An empty string is returned if the
+  ///     name could not be found.
+  virtual std::string
+  GetQueueNameFromThreadQAddress(lldb::addr_t dispatch_qaddr) {
+    return "";
+  }
+
+  /// Get the QueueID for the libdispatch queue given the thread's
+  /// dispatch_qaddr.
+  ///
+  /// On systems using libdispatch queues, a thread may be associated with a
+  /// queue. There will be a call to get the thread's dispatch_qaddr.  At the
+  /// dispatch_qaddr we will find the address of this thread's
+  /// dispatch_queue_t structure. Given the address of the dispatch_queue_t
+  /// structure for a thread, get the queue ID and return it.
+  ///
+  /// \param [in] dispatch_qaddr
+  ///     The address of the dispatch_qaddr pointer for this thread.
+  ///
+  /// \return
+  ///     The queue ID, or if it could not be retrieved, LLDB_INVALID_QUEUE_ID.
+  virtual lldb::queue_id_t
+  GetQueueIDFromThreadQAddress(lldb::addr_t dispatch_qaddr) {
+    return LLDB_INVALID_QUEUE_ID;
+  }
+
+  /// Get the libdispatch_queue_t address for the queue given the thread's
+  /// dispatch_qaddr.
+  ///
+  /// On systems using libdispatch queues, a thread may be associated with a
+  /// queue. There will be a call to get the thread's dispatch_qaddr. Given
+  /// the thread's dispatch_qaddr, find the libdispatch_queue_t address and
+  /// return it.
+  ///
+  /// \param [in] dispatch_qaddr
+  ///     The address of the dispatch_qaddr pointer for this thread.
+  ///
+  /// \return
+  ///     The libdispatch_queue_t address, or LLDB_INVALID_ADDRESS if
+  ///     unavailable/not found.
+  virtual lldb::addr_t
+  GetLibdispatchQueueAddressFromThreadQAddress(lldb::addr_t dispatch_qaddr) {
+    return LLDB_INVALID_ADDRESS;
+  }
+
+  /// Retrieve the Queue kind for the queue at a thread's dispatch_qaddr.
+  ///
+  /// Retrieve the Queue kind - either eQueueKindSerial or
+  /// eQueueKindConcurrent, indicating that this queue processes work items
+  /// serially or concurrently.
+  ///
+  /// \return
+  ///     The Queue kind, if it could be read, else eQueueKindUnknown.
+  virtual lldb::QueueKind GetQueueKind(lldb::addr_t dispatch_qaddr) {
+    return lldb::eQueueKindUnknown;
+  }
+
+  /// Get the pending work items for a libdispatch Queue
+  ///
+  /// If this system/process is using libdispatch and the runtime can do so,
+  /// retrieve the list of pending work items for the specified Queue and add
+  /// it to the Queue.
+  ///
+  /// \param [in] queue
+  ///     The queue of interest.
+  virtual void PopulatePendingItemsForQueue(lldb_private::Queue *queue) {}
+
+  /// Complete the fields in a QueueItem
+  ///
+  /// PopulatePendingItemsForQueue() may not fill in all of the QueueItem
+  /// details; when the remaining fields are needed, they will be fetched by
+  /// call this method.
+  ///
+  /// \param [in] queue_item
+  ///   The QueueItem that we will be completing.
+  ///
+  /// \param [in] item_ref
+  ///     The item_ref token that is needed to retrieve the rest of the
+  ///     information about the QueueItem.
+  virtual void CompleteQueueItem(lldb_private::QueueItem *queue_item,
+                                 lldb::addr_t item_ref) {}
+
+  /// Add key-value pairs to the StructuredData dictionary object with
+  /// information debugserver  may need when constructing the
+  /// jThreadExtendedInfo packet.
+  ///
+  /// \param [out] dict
+  ///     Dictionary to which key-value pairs should be added; they will
+  ///     be sent to the remote gdb server stub as arguments in the
+  ///     jThreadExtendedInfo request.
+  virtual void AddThreadExtendedInfoPacketHints(
+      lldb_private::StructuredData::ObjectSP dict) {}
+
+  /// Determine whether it is safe to run an expression on a given thread
+  ///
+  /// If a system must not run functions on a thread in some particular state,
+  /// this method gives a way for it to flag that the expression should not be
+  /// run.
+  ///
+  /// \param [in] thread_sp
+  ///     The thread we want to run the expression on.
+  ///
+  /// \return
+  ///     True will be returned if there are no known problems with running an
+  ///     expression on this thread.  False means that the inferior function
+  ///     call should not be made on this thread.
+  virtual bool SafeToCallFunctionsOnThisThread(lldb::ThreadSP thread_sp) {
+    return true;
+  }
+
+protected:
+  // Member variables.
+  Process *m_process;
+
+  std::vector<ConstString> m_types;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(SystemRuntime);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SystemRuntime_h_
diff --git a/linux-x64/clang/include/lldb/Target/Target.h b/linux-x64/clang/include/lldb/Target/Target.h
new file mode 100644
index 0000000..875a8b1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Target.h
@@ -0,0 +1,1359 @@
+//===-- Target.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Target_h_
+#define liblldb_Target_h_
+
+#include <list>
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "lldb/Breakpoint/BreakpointList.h"
+#include "lldb/Breakpoint/BreakpointName.h"
+#include "lldb/Breakpoint/WatchpointList.h"
+#include "lldb/Core/Architecture.h"
+#include "lldb/Core/Disassembler.h"
+#include "lldb/Core/ModuleList.h"
+#include "lldb/Core/UserSettingsController.h"
+#include "lldb/Expression/Expression.h"
+#include "lldb/Host/ProcessLaunchInfo.h"
+#include "lldb/Symbol/TypeSystem.h"
+#include "lldb/Target/ExecutionContextScope.h"
+#include "lldb/Target/PathMappingList.h"
+#include "lldb/Target/SectionLoadHistory.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/LLDBAssert.h"
+#include "lldb/Utility/Timeout.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+OptionEnumValues GetDynamicValueTypes();
+
+enum InlineStrategy {
+  eInlineBreakpointsNever = 0,
+  eInlineBreakpointsHeaders,
+  eInlineBreakpointsAlways
+};
+
+enum LoadScriptFromSymFile {
+  eLoadScriptFromSymFileTrue,
+  eLoadScriptFromSymFileFalse,
+  eLoadScriptFromSymFileWarn
+};
+
+enum LoadCWDlldbinitFile {
+  eLoadCWDlldbinitTrue,
+  eLoadCWDlldbinitFalse,
+  eLoadCWDlldbinitWarn
+};
+
+enum LoadDependentFiles {
+  eLoadDependentsDefault,
+  eLoadDependentsYes,
+  eLoadDependentsNo,
+};
+
+// TargetProperties
+class TargetExperimentalProperties : public Properties {
+public:
+  TargetExperimentalProperties();
+};
+
+class TargetProperties : public Properties {
+public:
+  TargetProperties(Target *target);
+
+  ~TargetProperties() override;
+
+  ArchSpec GetDefaultArchitecture() const;
+
+  void SetDefaultArchitecture(const ArchSpec &arch);
+
+  bool GetMoveToNearestCode() const;
+
+  lldb::DynamicValueType GetPreferDynamicValue() const;
+
+  bool SetPreferDynamicValue(lldb::DynamicValueType d);
+
+  bool GetPreloadSymbols() const;
+
+  void SetPreloadSymbols(bool b);
+
+  bool GetDisableASLR() const;
+
+  void SetDisableASLR(bool b);
+
+  bool GetDetachOnError() const;
+
+  void SetDetachOnError(bool b);
+
+  bool GetDisableSTDIO() const;
+
+  void SetDisableSTDIO(bool b);
+
+  const char *GetDisassemblyFlavor() const;
+
+  InlineStrategy GetInlineStrategy() const;
+
+  llvm::StringRef GetArg0() const;
+
+  void SetArg0(llvm::StringRef arg);
+
+  bool GetRunArguments(Args &args) const;
+
+  void SetRunArguments(const Args &args);
+
+  Environment GetEnvironment() const;
+  void SetEnvironment(Environment env);
+
+  bool GetSkipPrologue() const;
+
+  PathMappingList &GetSourcePathMap() const;
+
+  FileSpecList GetExecutableSearchPaths();
+
+  void AppendExecutableSearchPaths(const FileSpec&);
+
+  FileSpecList GetDebugFileSearchPaths();
+
+  FileSpecList GetClangModuleSearchPaths();
+
+  bool GetEnableAutoImportClangModules() const;
+
+  bool GetEnableImportStdModule() const;
+
+  bool GetEnableAutoApplyFixIts() const;
+
+  bool GetEnableNotifyAboutFixIts() const;
+
+  bool GetEnableSaveObjects() const;
+
+  bool GetEnableSyntheticValue() const;
+
+  uint32_t GetMaximumNumberOfChildrenToDisplay() const;
+
+  uint32_t GetMaximumSizeOfStringSummary() const;
+
+  uint32_t GetMaximumMemReadSize() const;
+
+  FileSpec GetStandardInputPath() const;
+  FileSpec GetStandardErrorPath() const;
+  FileSpec GetStandardOutputPath() const;
+
+  void SetStandardInputPath(llvm::StringRef path);
+  void SetStandardOutputPath(llvm::StringRef path);
+  void SetStandardErrorPath(llvm::StringRef path);
+
+  void SetStandardInputPath(const char *path) = delete;
+  void SetStandardOutputPath(const char *path) = delete;
+  void SetStandardErrorPath(const char *path) = delete;
+
+  bool GetBreakpointsConsultPlatformAvoidList();
+
+  lldb::LanguageType GetLanguage() const;
+
+  llvm::StringRef GetExpressionPrefixContents();
+
+  bool GetUseHexImmediates() const;
+
+  bool GetUseFastStepping() const;
+
+  bool GetDisplayExpressionsInCrashlogs() const;
+
+  LoadScriptFromSymFile GetLoadScriptFromSymbolFile() const;
+
+  LoadCWDlldbinitFile GetLoadCWDlldbinitFile() const;
+
+  Disassembler::HexImmediateStyle GetHexImmediateStyle() const;
+
+  MemoryModuleLoadLevel GetMemoryModuleLoadLevel() const;
+
+  bool GetUserSpecifiedTrapHandlerNames(Args &args) const;
+
+  void SetUserSpecifiedTrapHandlerNames(const Args &args);
+
+  bool GetNonStopModeEnabled() const;
+
+  void SetNonStopModeEnabled(bool b);
+
+  bool GetDisplayRuntimeSupportValues() const;
+
+  void SetDisplayRuntimeSupportValues(bool b);
+
+  bool GetDisplayRecognizedArguments() const;
+
+  void SetDisplayRecognizedArguments(bool b);
+
+  const ProcessLaunchInfo &GetProcessLaunchInfo();
+
+  void SetProcessLaunchInfo(const ProcessLaunchInfo &launch_info);
+
+  bool GetInjectLocalVariables(ExecutionContext *exe_ctx) const;
+
+  void SetInjectLocalVariables(ExecutionContext *exe_ctx, bool b);
+
+  bool GetUseModernTypeLookup() const;
+
+  void SetRequireHardwareBreakpoints(bool b);
+
+  bool GetRequireHardwareBreakpoints() const;
+
+private:
+  // Callbacks for m_launch_info.
+  static void Arg0ValueChangedCallback(void *target_property_ptr,
+                                       OptionValue *);
+  static void RunArgsValueChangedCallback(void *target_property_ptr,
+                                          OptionValue *);
+  static void EnvVarsValueChangedCallback(void *target_property_ptr,
+                                          OptionValue *);
+  static void InheritEnvValueChangedCallback(void *target_property_ptr,
+                                             OptionValue *);
+  static void InputPathValueChangedCallback(void *target_property_ptr,
+                                            OptionValue *);
+  static void OutputPathValueChangedCallback(void *target_property_ptr,
+                                             OptionValue *);
+  static void ErrorPathValueChangedCallback(void *target_property_ptr,
+                                            OptionValue *);
+  static void DetachOnErrorValueChangedCallback(void *target_property_ptr,
+                                                OptionValue *);
+  static void DisableASLRValueChangedCallback(void *target_property_ptr,
+                                              OptionValue *);
+  static void DisableSTDIOValueChangedCallback(void *target_property_ptr,
+                                               OptionValue *);
+
+  // Member variables.
+  ProcessLaunchInfo m_launch_info;
+  std::unique_ptr<TargetExperimentalProperties> m_experimental_properties_up;
+};
+
+class EvaluateExpressionOptions {
+public:
+// MSVC has a bug here that reports C4268: 'const' static/global data
+// initialized with compiler generated default constructor fills the object
+// with zeros. Confirmed that MSVC is *not* zero-initializing, it's just a
+// bogus warning.
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4268)
+#endif
+  static constexpr std::chrono::milliseconds default_timeout{500};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+  static constexpr ExecutionPolicy default_execution_policy =
+      eExecutionPolicyOnlyWhenNeeded;
+
+  EvaluateExpressionOptions() = default;
+
+  ExecutionPolicy GetExecutionPolicy() const { return m_execution_policy; }
+
+  void SetExecutionPolicy(ExecutionPolicy policy = eExecutionPolicyAlways) {
+    m_execution_policy = policy;
+  }
+
+  lldb::LanguageType GetLanguage() const { return m_language; }
+
+  void SetLanguage(lldb::LanguageType language) { m_language = language; }
+
+  bool DoesCoerceToId() const { return m_coerce_to_id; }
+
+  const char *GetPrefix() const {
+    return (m_prefix.empty() ? nullptr : m_prefix.c_str());
+  }
+
+  void SetPrefix(const char *prefix) {
+    if (prefix && prefix[0])
+      m_prefix = prefix;
+    else
+      m_prefix.clear();
+  }
+
+  void SetCoerceToId(bool coerce = true) { m_coerce_to_id = coerce; }
+
+  bool DoesUnwindOnError() const { return m_unwind_on_error; }
+
+  void SetUnwindOnError(bool unwind = false) { m_unwind_on_error = unwind; }
+
+  bool DoesIgnoreBreakpoints() const { return m_ignore_breakpoints; }
+
+  void SetIgnoreBreakpoints(bool ignore = false) {
+    m_ignore_breakpoints = ignore;
+  }
+
+  bool DoesKeepInMemory() const { return m_keep_in_memory; }
+
+  void SetKeepInMemory(bool keep = true) { m_keep_in_memory = keep; }
+
+  lldb::DynamicValueType GetUseDynamic() const { return m_use_dynamic; }
+
+  void
+  SetUseDynamic(lldb::DynamicValueType dynamic = lldb::eDynamicCanRunTarget) {
+    m_use_dynamic = dynamic;
+  }
+
+  const Timeout<std::micro> &GetTimeout() const { return m_timeout; }
+
+  void SetTimeout(const Timeout<std::micro> &timeout) { m_timeout = timeout; }
+
+  const Timeout<std::micro> &GetOneThreadTimeout() const {
+    return m_one_thread_timeout;
+  }
+
+  void SetOneThreadTimeout(const Timeout<std::micro> &timeout) {
+    m_one_thread_timeout = timeout;
+  }
+
+  bool GetTryAllThreads() const { return m_try_others; }
+
+  void SetTryAllThreads(bool try_others = true) { m_try_others = try_others; }
+
+  bool GetStopOthers() const { return m_stop_others; }
+
+  void SetStopOthers(bool stop_others = true) { m_stop_others = stop_others; }
+
+  bool GetDebug() const { return m_debug; }
+
+  void SetDebug(bool b) {
+    m_debug = b;
+    if (m_debug)
+      m_generate_debug_info = true;
+  }
+
+  bool GetGenerateDebugInfo() const { return m_generate_debug_info; }
+
+  void SetGenerateDebugInfo(bool b) { m_generate_debug_info = b; }
+
+  bool GetColorizeErrors() const { return m_ansi_color_errors; }
+
+  void SetColorizeErrors(bool b) { m_ansi_color_errors = b; }
+
+  bool GetTrapExceptions() const { return m_trap_exceptions; }
+
+  void SetTrapExceptions(bool b) { m_trap_exceptions = b; }
+
+  bool GetREPLEnabled() const { return m_repl; }
+
+  void SetREPLEnabled(bool b) { m_repl = b; }
+
+  void SetCancelCallback(lldb::ExpressionCancelCallback callback, void *baton) {
+    m_cancel_callback_baton = baton;
+    m_cancel_callback = callback;
+  }
+
+  bool InvokeCancelCallback(lldb::ExpressionEvaluationPhase phase) const {
+    return ((m_cancel_callback != nullptr)
+                ? m_cancel_callback(phase, m_cancel_callback_baton)
+                : false);
+  }
+
+  // Allows the expression contents to be remapped to point to the specified
+  // file and line using #line directives.
+  void SetPoundLine(const char *path, uint32_t line) const {
+    if (path && path[0]) {
+      m_pound_line_file = path;
+      m_pound_line_line = line;
+    } else {
+      m_pound_line_file.clear();
+      m_pound_line_line = 0;
+    }
+  }
+
+  const char *GetPoundLineFilePath() const {
+    return (m_pound_line_file.empty() ? nullptr : m_pound_line_file.c_str());
+  }
+
+  uint32_t GetPoundLineLine() const { return m_pound_line_line; }
+
+  void SetResultIsInternal(bool b) { m_result_is_internal = b; }
+
+  bool GetResultIsInternal() const { return m_result_is_internal; }
+
+  void SetAutoApplyFixIts(bool b) { m_auto_apply_fixits = b; }
+
+  bool GetAutoApplyFixIts() const { return m_auto_apply_fixits; }
+
+  bool IsForUtilityExpr() const { return m_running_utility_expression; }
+
+  void SetIsForUtilityExpr(bool b) { m_running_utility_expression = b; }
+
+private:
+  ExecutionPolicy m_execution_policy = default_execution_policy;
+  lldb::LanguageType m_language = lldb::eLanguageTypeUnknown;
+  std::string m_prefix;
+  bool m_coerce_to_id = false;
+  bool m_unwind_on_error = true;
+  bool m_ignore_breakpoints = false;
+  bool m_keep_in_memory = false;
+  bool m_try_others = true;
+  bool m_stop_others = true;
+  bool m_debug = false;
+  bool m_trap_exceptions = true;
+  bool m_repl = false;
+  bool m_generate_debug_info = false;
+  bool m_ansi_color_errors = false;
+  bool m_result_is_internal = false;
+  bool m_auto_apply_fixits = true;
+  /// True if the executed code should be treated as utility code that is only
+  /// used by LLDB internally.
+  bool m_running_utility_expression = false;
+
+  lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues;
+  Timeout<std::micro> m_timeout = default_timeout;
+  Timeout<std::micro> m_one_thread_timeout = llvm::None;
+  lldb::ExpressionCancelCallback m_cancel_callback = nullptr;
+  void *m_cancel_callback_baton = nullptr;
+  // If m_pound_line_file is not empty and m_pound_line_line is non-zero, use
+  // #line %u "%s" before the expression content to remap where the source
+  // originates
+  mutable std::string m_pound_line_file;
+  mutable uint32_t m_pound_line_line;
+};
+
+// Target
+class Target : public std::enable_shared_from_this<Target>,
+               public TargetProperties,
+               public Broadcaster,
+               public ExecutionContextScope,
+               public ModuleList::Notifier {
+public:
+  friend class TargetList;
+
+  /// Broadcaster event bits definitions.
+  enum {
+    eBroadcastBitBreakpointChanged = (1 << 0),
+    eBroadcastBitModulesLoaded = (1 << 1),
+    eBroadcastBitModulesUnloaded = (1 << 2),
+    eBroadcastBitWatchpointChanged = (1 << 3),
+    eBroadcastBitSymbolsLoaded = (1 << 4)
+  };
+
+  // These two functions fill out the Broadcaster interface:
+
+  static ConstString &GetStaticBroadcasterClass();
+
+  ConstString &GetBroadcasterClass() const override {
+    return GetStaticBroadcasterClass();
+  }
+
+  // This event data class is for use by the TargetList to broadcast new target
+  // notifications.
+  class TargetEventData : public EventData {
+  public:
+    TargetEventData(const lldb::TargetSP &target_sp);
+
+    TargetEventData(const lldb::TargetSP &target_sp,
+                    const ModuleList &module_list);
+
+    ~TargetEventData() override;
+
+    static ConstString GetFlavorString();
+
+    ConstString GetFlavor() const override {
+      return TargetEventData::GetFlavorString();
+    }
+
+    void Dump(Stream *s) const override;
+
+    static const TargetEventData *GetEventDataFromEvent(const Event *event_ptr);
+
+    static lldb::TargetSP GetTargetFromEvent(const Event *event_ptr);
+
+    static ModuleList GetModuleListFromEvent(const Event *event_ptr);
+
+    const lldb::TargetSP &GetTarget() const { return m_target_sp; }
+
+    const ModuleList &GetModuleList() const { return m_module_list; }
+
+  private:
+    lldb::TargetSP m_target_sp;
+    ModuleList m_module_list;
+
+    DISALLOW_COPY_AND_ASSIGN(TargetEventData);
+  };
+
+  ~Target() override;
+
+  static void SettingsInitialize();
+
+  static void SettingsTerminate();
+
+  static FileSpecList GetDefaultExecutableSearchPaths();
+
+  static FileSpecList GetDefaultDebugFileSearchPaths();
+
+  static FileSpecList GetDefaultClangModuleSearchPaths();
+
+  static ArchSpec GetDefaultArchitecture();
+
+  static void SetDefaultArchitecture(const ArchSpec &arch);
+
+  /// Find a binary on the system and return its Module, 
+  /// or return an existing Module that is already in the Target.
+  ///
+  /// Given a ModuleSpec, find a binary satisifying that specification,
+  /// or identify a matching Module already present in the Target,
+  /// and return a shared pointer to it.
+  ///
+  /// \param[in] module_spec
+  ///     The criteria that must be matched for the binary being loaded.
+  ///     e.g. UUID, architecture, file path.
+  ///
+  /// \param[in] notify
+  ///     If notify is true, and the Module is new to this Target, 
+  ///     Target::ModulesDidLoad will be called.  
+  ///     If notify is false, it is assumed that the caller is adding 
+  ///     multiple Modules and will call ModulesDidLoad with the 
+  ///     full list at the end.
+  ///     ModulesDidLoad must be called when a Module/Modules have
+  ///     been added to the target, one way or the other.
+  ///
+  /// \param[out] error_ptr
+  ///     Optional argument, pointing to a Status object to fill in 
+  ///     with any results / messages while attempting to find/load
+  ///     this binary.  Many callers will be internal functions that
+  ///     will handle / summarize the failures in a custom way and
+  ///     don't use these messages.
+  ///
+  /// \return 
+  ///     An empty ModuleSP will be returned if no matching file
+  ///     was found.  If error_ptr was non-nullptr, an error message
+  ///     will likely be provided.
+  lldb::ModuleSP GetOrCreateModule(const ModuleSpec &module_spec,
+                                   bool notify,
+                                   Status *error_ptr = nullptr);
+
+  // Settings accessors
+
+  static const lldb::TargetPropertiesSP &GetGlobalProperties();
+
+  std::recursive_mutex &GetAPIMutex() { return m_mutex; }
+
+  void DeleteCurrentProcess();
+
+  void CleanupProcess();
+
+  /// Dump a description of this object to a Stream.
+  ///
+  /// Dump a description of the contents of this object to the
+  /// supplied stream \a s. The dumped content will be only what has
+  /// been loaded or parsed up to this point at which this function
+  /// is called, so this is a good way to see what has been parsed
+  /// in a target.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s, lldb::DescriptionLevel description_level);
+
+  // If listener_sp is null, the listener of the owning Debugger object will be
+  // used.
+  const lldb::ProcessSP &CreateProcess(lldb::ListenerSP listener_sp,
+                                       llvm::StringRef plugin_name,
+                                       const FileSpec *crash_file);
+
+  const lldb::ProcessSP &GetProcessSP() const;
+
+  bool IsValid() { return m_valid; }
+
+  void Destroy();
+
+  Status Launch(ProcessLaunchInfo &launch_info,
+                Stream *stream); // Optional stream to receive first stop info
+
+  Status Attach(ProcessAttachInfo &attach_info,
+                Stream *stream); // Optional stream to receive first stop info
+
+  // This part handles the breakpoints.
+
+  BreakpointList &GetBreakpointList(bool internal = false);
+
+  const BreakpointList &GetBreakpointList(bool internal = false) const;
+
+  lldb::BreakpointSP GetLastCreatedBreakpoint() {
+    return m_last_created_breakpoint;
+  }
+
+  lldb::BreakpointSP GetBreakpointByID(lldb::break_id_t break_id);
+
+  // Use this to create a file and line breakpoint to a given module or all
+  // module it is nullptr
+  lldb::BreakpointSP CreateBreakpoint(const FileSpecList *containingModules,
+                                      const FileSpec &file, uint32_t line_no,
+                                      uint32_t column, lldb::addr_t offset,
+                                      LazyBool check_inlines,
+                                      LazyBool skip_prologue, bool internal,
+                                      bool request_hardware,
+                                      LazyBool move_to_nearest_code);
+
+  // Use this to create breakpoint that matches regex against the source lines
+  // in files given in source_file_list: If function_names is non-empty, also
+  // filter by function after the matches are made.
+  lldb::BreakpointSP CreateSourceRegexBreakpoint(
+      const FileSpecList *containingModules,
+      const FileSpecList *source_file_list,
+      const std::unordered_set<std::string> &function_names,
+      RegularExpression &source_regex, bool internal, bool request_hardware,
+      LazyBool move_to_nearest_code);
+
+  // Use this to create a breakpoint from a load address
+  lldb::BreakpointSP CreateBreakpoint(lldb::addr_t load_addr, bool internal,
+                                      bool request_hardware);
+
+  // Use this to create a breakpoint from a load address and a module file spec
+  lldb::BreakpointSP CreateAddressInModuleBreakpoint(lldb::addr_t file_addr,
+                                                     bool internal,
+                                                     const FileSpec *file_spec,
+                                                     bool request_hardware);
+
+  // Use this to create Address breakpoints:
+  lldb::BreakpointSP CreateBreakpoint(const Address &addr, bool internal,
+                                      bool request_hardware);
+
+  // Use this to create a function breakpoint by regexp in
+  // containingModule/containingSourceFiles, or all modules if it is nullptr
+  // When "skip_prologue is set to eLazyBoolCalculate, we use the current
+  // target setting, else we use the values passed in
+  lldb::BreakpointSP CreateFuncRegexBreakpoint(
+      const FileSpecList *containingModules,
+      const FileSpecList *containingSourceFiles, RegularExpression &func_regexp,
+      lldb::LanguageType requested_language, LazyBool skip_prologue,
+      bool internal, bool request_hardware);
+
+  // Use this to create a function breakpoint by name in containingModule, or
+  // all modules if it is nullptr When "skip_prologue is set to
+  // eLazyBoolCalculate, we use the current target setting, else we use the
+  // values passed in. func_name_type_mask is or'ed values from the
+  // FunctionNameType enum.
+  lldb::BreakpointSP CreateBreakpoint(
+      const FileSpecList *containingModules,
+      const FileSpecList *containingSourceFiles, const char *func_name,
+      lldb::FunctionNameType func_name_type_mask, lldb::LanguageType language,
+      lldb::addr_t offset, LazyBool skip_prologue, bool internal,
+      bool request_hardware);
+
+  lldb::BreakpointSP
+  CreateExceptionBreakpoint(enum lldb::LanguageType language, bool catch_bp,
+                            bool throw_bp, bool internal,
+                            Args *additional_args = nullptr,
+                            Status *additional_args_error = nullptr);
+
+  lldb::BreakpointSP
+  CreateScriptedBreakpoint(const llvm::StringRef class_name,
+                           const FileSpecList *containingModules,
+                           const FileSpecList *containingSourceFiles,
+                           bool internal,
+                           bool request_hardware,
+                           StructuredData::ObjectSP extra_args_sp,
+                           Status *creation_error = nullptr);
+
+  // This is the same as the func_name breakpoint except that you can specify a
+  // vector of names.  This is cheaper than a regular expression breakpoint in
+  // the case where you just want to set a breakpoint on a set of names you
+  // already know. func_name_type_mask is or'ed values from the
+  // FunctionNameType enum.
+  lldb::BreakpointSP CreateBreakpoint(
+      const FileSpecList *containingModules,
+      const FileSpecList *containingSourceFiles, const char *func_names[],
+      size_t num_names, lldb::FunctionNameType func_name_type_mask,
+      lldb::LanguageType language, lldb::addr_t offset, LazyBool skip_prologue,
+      bool internal, bool request_hardware);
+
+  lldb::BreakpointSP
+  CreateBreakpoint(const FileSpecList *containingModules,
+                   const FileSpecList *containingSourceFiles,
+                   const std::vector<std::string> &func_names,
+                   lldb::FunctionNameType func_name_type_mask,
+                   lldb::LanguageType language, lldb::addr_t m_offset,
+                   LazyBool skip_prologue, bool internal,
+                   bool request_hardware);
+
+  // Use this to create a general breakpoint:
+  lldb::BreakpointSP CreateBreakpoint(lldb::SearchFilterSP &filter_sp,
+                                      lldb::BreakpointResolverSP &resolver_sp,
+                                      bool internal, bool request_hardware,
+                                      bool resolve_indirect_symbols);
+
+  // Use this to create a watchpoint:
+  lldb::WatchpointSP CreateWatchpoint(lldb::addr_t addr, size_t size,
+                                      const CompilerType *type, uint32_t kind,
+                                      Status &error);
+
+  lldb::WatchpointSP GetLastCreatedWatchpoint() {
+    return m_last_created_watchpoint;
+  }
+
+  WatchpointList &GetWatchpointList() { return m_watchpoint_list; }
+  
+  // Manages breakpoint names:
+  void AddNameToBreakpoint(BreakpointID &id, const char *name, Status &error);
+  
+  void AddNameToBreakpoint(lldb::BreakpointSP &bp_sp, const char *name, 
+                           Status &error);
+  
+  void RemoveNameFromBreakpoint(lldb::BreakpointSP &bp_sp, 
+                                ConstString name);
+  
+  BreakpointName *FindBreakpointName(ConstString name, bool can_create, 
+                                     Status &error);
+                                     
+  void DeleteBreakpointName(ConstString name);
+  
+  void ConfigureBreakpointName(BreakpointName &bp_name,
+                               const BreakpointOptions &options,
+                               const BreakpointName::Permissions &permissions);
+ void ApplyNameToBreakpoints(BreakpointName &bp_name);
+  
+  // This takes ownership of the name obj passed in.
+  void AddBreakpointName(BreakpointName *bp_name);
+  
+  void GetBreakpointNames(std::vector<std::string> &names);
+                               
+  //This call removes ALL breakpoints regardless of permission.
+  void RemoveAllBreakpoints(bool internal_also = false);
+  
+  // This removes all the breakpoints, but obeys the ePermDelete on them.
+  void RemoveAllowedBreakpoints();
+
+  void DisableAllBreakpoints(bool internal_also = false);
+  
+  void DisableAllowedBreakpoints();
+
+  void EnableAllBreakpoints(bool internal_also = false);
+  
+  void EnableAllowedBreakpoints();
+
+  bool DisableBreakpointByID(lldb::break_id_t break_id);
+
+  bool EnableBreakpointByID(lldb::break_id_t break_id);
+
+  bool RemoveBreakpointByID(lldb::break_id_t break_id);
+
+  // The flag 'end_to_end', default to true, signifies that the operation is
+  // performed end to end, for both the debugger and the debuggee.
+
+  bool RemoveAllWatchpoints(bool end_to_end = true);
+
+  bool DisableAllWatchpoints(bool end_to_end = true);
+
+  bool EnableAllWatchpoints(bool end_to_end = true);
+
+  bool ClearAllWatchpointHitCounts();
+
+  bool ClearAllWatchpointHistoricValues();
+
+  bool IgnoreAllWatchpoints(uint32_t ignore_count);
+
+  bool DisableWatchpointByID(lldb::watch_id_t watch_id);
+
+  bool EnableWatchpointByID(lldb::watch_id_t watch_id);
+
+  bool RemoveWatchpointByID(lldb::watch_id_t watch_id);
+
+  bool IgnoreWatchpointByID(lldb::watch_id_t watch_id, uint32_t ignore_count);
+
+  Status SerializeBreakpointsToFile(const FileSpec &file,
+                                    const BreakpointIDList &bp_ids,
+                                    bool append);
+
+  Status CreateBreakpointsFromFile(const FileSpec &file,
+                                   BreakpointIDList &new_bps);
+
+  Status CreateBreakpointsFromFile(const FileSpec &file,
+                                   std::vector<std::string> &names,
+                                   BreakpointIDList &new_bps);
+
+  /// Get \a load_addr as a callable code load address for this target
+  ///
+  /// Take \a load_addr and potentially add any address bits that are
+  /// needed to make the address callable. For ARM this can set bit
+  /// zero (if it already isn't) if \a load_addr is a thumb function.
+  /// If \a addr_class is set to AddressClass::eInvalid, then the address
+  /// adjustment will always happen. If it is set to an address class
+  /// that doesn't have code in it, LLDB_INVALID_ADDRESS will be
+  /// returned.
+  lldb::addr_t GetCallableLoadAddress(
+      lldb::addr_t load_addr,
+      AddressClass addr_class = AddressClass::eInvalid) const;
+
+  /// Get \a load_addr as an opcode for this target.
+  ///
+  /// Take \a load_addr and potentially strip any address bits that are
+  /// needed to make the address point to an opcode. For ARM this can
+  /// clear bit zero (if it already isn't) if \a load_addr is a
+  /// thumb function and load_addr is in code.
+  /// If \a addr_class is set to AddressClass::eInvalid, then the address
+  /// adjustment will always happen. If it is set to an address class
+  /// that doesn't have code in it, LLDB_INVALID_ADDRESS will be
+  /// returned.
+  lldb::addr_t
+  GetOpcodeLoadAddress(lldb::addr_t load_addr,
+                       AddressClass addr_class = AddressClass::eInvalid) const;
+
+  // Get load_addr as breakable load address for this target. Take a addr and
+  // check if for any reason there is a better address than this to put a
+  // breakpoint on. If there is then return that address. For MIPS, if
+  // instruction at addr is a delay slot instruction then this method will find
+  // the address of its previous instruction and return that address.
+  lldb::addr_t GetBreakableLoadAddress(lldb::addr_t addr);
+
+  void ModulesDidLoad(ModuleList &module_list);
+
+  void ModulesDidUnload(ModuleList &module_list, bool delete_locations);
+
+  void SymbolsDidLoad(ModuleList &module_list);
+
+  void ClearModules(bool delete_locations);
+
+  /// Called as the last function in Process::DidExec().
+  ///
+  /// Process::DidExec() will clear a lot of state in the process,
+  /// then try to reload a dynamic loader plugin to discover what
+  /// binaries are currently available and then this function should
+  /// be called to allow the target to do any cleanup after everything
+  /// has been figured out. It can remove breakpoints that no longer
+  /// make sense as the exec might have changed the target
+  /// architecture, and unloaded some modules that might get deleted.
+  void DidExec();
+
+  /// Gets the module for the main executable.
+  ///
+  /// Each process has a notion of a main executable that is the file
+  /// that will be executed or attached to. Executable files can have
+  /// dependent modules that are discovered from the object files, or
+  /// discovered at runtime as things are dynamically loaded.
+  ///
+  /// \return
+  ///     The shared pointer to the executable module which can
+  ///     contains a nullptr Module object if no executable has been
+  ///     set.
+  ///
+  /// \see DynamicLoader
+  /// \see ObjectFile::GetDependentModules (FileSpecList&)
+  /// \see Process::SetExecutableModule(lldb::ModuleSP&)
+  lldb::ModuleSP GetExecutableModule();
+
+  Module *GetExecutableModulePointer();
+
+  /// Set the main executable module.
+  ///
+  /// Each process has a notion of a main executable that is the file
+  /// that will be executed or attached to. Executable files can have
+  /// dependent modules that are discovered from the object files, or
+  /// discovered at runtime as things are dynamically loaded.
+  ///
+  /// Setting the executable causes any of the current dependent
+  /// image information to be cleared and replaced with the static
+  /// dependent image information found by calling
+  /// ObjectFile::GetDependentModules (FileSpecList&) on the main
+  /// executable and any modules on which it depends. Calling
+  /// Process::GetImages() will return the newly found images that
+  /// were obtained from all of the object files.
+  ///
+  /// \param[in] module_sp
+  ///     A shared pointer reference to the module that will become
+  ///     the main executable for this process.
+  ///
+  /// \param[in] load_dependent_files
+  ///     If \b true then ask the object files to track down any
+  ///     known dependent files.
+  ///
+  /// \see ObjectFile::GetDependentModules (FileSpecList&)
+  /// \see Process::GetImages()
+  void SetExecutableModule(
+      lldb::ModuleSP &module_sp,
+      LoadDependentFiles load_dependent_files = eLoadDependentsDefault);
+
+  bool LoadScriptingResources(std::list<Status> &errors,
+                              Stream *feedback_stream = nullptr,
+                              bool continue_on_error = true) {
+    return m_images.LoadScriptingResourcesInTarget(
+        this, errors, feedback_stream, continue_on_error);
+  }
+
+  /// Get accessor for the images for this process.
+  ///
+  /// Each process has a notion of a main executable that is the file
+  /// that will be executed or attached to. Executable files can have
+  /// dependent modules that are discovered from the object files, or
+  /// discovered at runtime as things are dynamically loaded. After
+  /// a main executable has been set, the images will contain a list
+  /// of all the files that the executable depends upon as far as the
+  /// object files know. These images will usually contain valid file
+  /// virtual addresses only. When the process is launched or attached
+  /// to, the DynamicLoader plug-in will discover where these images
+  /// were loaded in memory and will resolve the load virtual
+  /// addresses is each image, and also in images that are loaded by
+  /// code.
+  ///
+  /// \return
+  ///     A list of Module objects in a module list.
+  const ModuleList &GetImages() const { return m_images; }
+
+  ModuleList &GetImages() { return m_images; }
+
+  /// Return whether this FileSpec corresponds to a module that should be
+  /// considered for general searches.
+  ///
+  /// This API will be consulted by the SearchFilterForUnconstrainedSearches
+  /// and any module that returns \b true will not be searched.  Note the
+  /// SearchFilterForUnconstrainedSearches is the search filter that
+  /// gets used in the CreateBreakpoint calls when no modules is provided.
+  ///
+  /// The target call at present just consults the Platform's call of the
+  /// same name.
+  ///
+  /// \param[in] module_sp
+  ///     A shared pointer reference to the module that checked.
+  ///
+  /// \return \b true if the module should be excluded, \b false otherwise.
+  bool ModuleIsExcludedForUnconstrainedSearches(const FileSpec &module_spec);
+
+  /// Return whether this module should be considered for general searches.
+  ///
+  /// This API will be consulted by the SearchFilterForUnconstrainedSearches
+  /// and any module that returns \b true will not be searched.  Note the
+  /// SearchFilterForUnconstrainedSearches is the search filter that
+  /// gets used in the CreateBreakpoint calls when no modules is provided.
+  ///
+  /// The target call at present just consults the Platform's call of the
+  /// same name.
+  ///
+  /// FIXME: When we get time we should add a way for the user to set modules
+  /// that they
+  /// don't want searched, in addition to or instead of the platform ones.
+  ///
+  /// \param[in] module_sp
+  ///     A shared pointer reference to the module that checked.
+  ///
+  /// \return \b true if the module should be excluded, \b false otherwise.
+  bool
+  ModuleIsExcludedForUnconstrainedSearches(const lldb::ModuleSP &module_sp);
+
+  const ArchSpec &GetArchitecture() const { return m_arch.GetSpec(); }
+
+  /// Set the architecture for this target.
+  ///
+  /// If the current target has no Images read in, then this just sets the
+  /// architecture, which will be used to select the architecture of the
+  /// ExecutableModule when that is set. If the current target has an
+  /// ExecutableModule, then calling SetArchitecture with a different
+  /// architecture from the currently selected one will reset the
+  /// ExecutableModule to that slice of the file backing the ExecutableModule.
+  /// If the file backing the ExecutableModule does not contain a fork of this
+  /// architecture, then this code will return false, and the architecture
+  /// won't be changed. If the input arch_spec is the same as the already set
+  /// architecture, this is a no-op.
+  ///
+  /// \param[in] arch_spec
+  ///     The new architecture.
+  ///
+  /// \param[in] set_platform
+  ///     If \b true, then the platform will be adjusted if the currently
+  ///     selected platform is not compatible with the archicture being set.
+  ///     If \b false, then just the architecture will be set even if the
+  ///     currently selected platform isn't compatible (in case it might be
+  ///     manually set following this function call).
+  ///
+  /// \return
+  ///     \b true if the architecture was successfully set, \bfalse otherwise.
+  bool SetArchitecture(const ArchSpec &arch_spec, bool set_platform = false);
+
+  bool MergeArchitecture(const ArchSpec &arch_spec);
+
+  Architecture *GetArchitecturePlugin() const { return m_arch.GetPlugin(); }
+
+  Debugger &GetDebugger() { return m_debugger; }
+
+  size_t ReadMemoryFromFileCache(const Address &addr, void *dst, size_t dst_len,
+                                 Status &error);
+
+  // Reading memory through the target allows us to skip going to the process
+  // for reading memory if possible and it allows us to try and read from any
+  // constant sections in our object files on disk. If you always want live
+  // program memory, read straight from the process. If you possibly want to
+  // read from const sections in object files, read from the target. This
+  // version of ReadMemory will try and read memory from the process if the
+  // process is alive. The order is:
+  // 1 - if (prefer_file_cache == true) then read from object file cache
+  // 2 - if there is a valid process, try and read from its memory
+  // 3 - if (prefer_file_cache == false) then read from object file cache
+  size_t ReadMemory(const Address &addr, bool prefer_file_cache, void *dst,
+                    size_t dst_len, Status &error,
+                    lldb::addr_t *load_addr_ptr = nullptr);
+
+  size_t ReadCStringFromMemory(const Address &addr, std::string &out_str,
+                               Status &error);
+
+  size_t ReadCStringFromMemory(const Address &addr, char *dst,
+                               size_t dst_max_len, Status &result_error);
+
+  size_t ReadScalarIntegerFromMemory(const Address &addr,
+                                     bool prefer_file_cache, uint32_t byte_size,
+                                     bool is_signed, Scalar &scalar,
+                                     Status &error);
+
+  uint64_t ReadUnsignedIntegerFromMemory(const Address &addr,
+                                         bool prefer_file_cache,
+                                         size_t integer_byte_size,
+                                         uint64_t fail_value, Status &error);
+
+  bool ReadPointerFromMemory(const Address &addr, bool prefer_file_cache,
+                             Status &error, Address &pointer_addr);
+
+  SectionLoadList &GetSectionLoadList() {
+    return m_section_load_history.GetCurrentSectionLoadList();
+  }
+
+  static Target *GetTargetFromContexts(const ExecutionContext *exe_ctx_ptr,
+                                       const SymbolContext *sc_ptr);
+
+  // lldb::ExecutionContextScope pure virtual functions
+  lldb::TargetSP CalculateTarget() override;
+
+  lldb::ProcessSP CalculateProcess() override;
+
+  lldb::ThreadSP CalculateThread() override;
+
+  lldb::StackFrameSP CalculateStackFrame() override;
+
+  void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
+
+  PathMappingList &GetImageSearchPathList();
+
+  TypeSystem *GetScratchTypeSystemForLanguage(Status *error,
+                                              lldb::LanguageType language,
+                                              bool create_on_demand = true);
+
+  PersistentExpressionState *
+  GetPersistentExpressionStateForLanguage(lldb::LanguageType language);
+
+  // Creates a UserExpression for the given language, the rest of the
+  // parameters have the same meaning as for the UserExpression constructor.
+  // Returns a new-ed object which the caller owns.
+
+  UserExpression *GetUserExpressionForLanguage(
+      llvm::StringRef expr, llvm::StringRef prefix, lldb::LanguageType language,
+      Expression::ResultType desired_type,
+      const EvaluateExpressionOptions &options,
+      ValueObject *ctx_obj, Status &error);
+
+  // Creates a FunctionCaller for the given language, the rest of the
+  // parameters have the same meaning as for the FunctionCaller constructor.
+  // Since a FunctionCaller can't be
+  // IR Interpreted, it makes no sense to call this with an
+  // ExecutionContextScope that lacks
+  // a Process.
+  // Returns a new-ed object which the caller owns.
+
+  FunctionCaller *GetFunctionCallerForLanguage(lldb::LanguageType language,
+                                               const CompilerType &return_type,
+                                               const Address &function_address,
+                                               const ValueList &arg_value_list,
+                                               const char *name, Status &error);
+
+  // Creates a UtilityFunction for the given language, the rest of the
+  // parameters have the same meaning as for the UtilityFunction constructor.
+  // Returns a new-ed object which the caller owns.
+
+  UtilityFunction *GetUtilityFunctionForLanguage(const char *expr,
+                                                 lldb::LanguageType language,
+                                                 const char *name,
+                                                 Status &error);
+
+  ClangASTContext *GetScratchClangASTContext(bool create_on_demand = true);
+
+  lldb::ClangASTImporterSP GetClangASTImporter();
+
+  // Install any files through the platform that need be to installed prior to
+  // launching or attaching.
+  Status Install(ProcessLaunchInfo *launch_info);
+
+  bool ResolveFileAddress(lldb::addr_t load_addr, Address &so_addr);
+
+  bool ResolveLoadAddress(lldb::addr_t load_addr, Address &so_addr,
+                          uint32_t stop_id = SectionLoadHistory::eStopIDNow);
+
+  bool SetSectionLoadAddress(const lldb::SectionSP &section,
+                             lldb::addr_t load_addr,
+                             bool warn_multiple = false);
+
+  size_t UnloadModuleSections(const lldb::ModuleSP &module_sp);
+
+  size_t UnloadModuleSections(const ModuleList &module_list);
+
+  bool SetSectionUnloaded(const lldb::SectionSP &section_sp);
+
+  bool SetSectionUnloaded(const lldb::SectionSP &section_sp,
+                          lldb::addr_t load_addr);
+
+  void ClearAllLoadedSections();
+
+  // Since expressions results can persist beyond the lifetime of a process,
+  // and the const expression results are available after a process is gone, we
+  // provide a way for expressions to be evaluated from the Target itself. If
+  // an expression is going to be run, then it should have a frame filled in in
+  // the execution context.
+  lldb::ExpressionResults EvaluateExpression(
+      llvm::StringRef expression, ExecutionContextScope *exe_scope,
+      lldb::ValueObjectSP &result_valobj_sp,
+      const EvaluateExpressionOptions &options = EvaluateExpressionOptions(),
+      std::string *fixed_expression = nullptr,
+      ValueObject *ctx_obj = nullptr);
+
+  lldb::ExpressionVariableSP GetPersistentVariable(ConstString name);
+
+  /// Return the next available number for numbered persistent variables.
+  unsigned GetNextPersistentVariableIndex() {
+    return m_next_persistent_variable_index++;
+  }
+
+  lldb::addr_t GetPersistentSymbol(ConstString name);
+
+  // Target Stop Hooks
+  class StopHook : public UserID {
+  public:
+    StopHook(const StopHook &rhs);
+
+    ~StopHook();
+
+    StringList *GetCommandPointer() { return &m_commands; }
+
+    const StringList &GetCommands() { return m_commands; }
+
+    lldb::TargetSP &GetTarget() { return m_target_sp; }
+
+    void SetCommands(StringList &in_commands) { m_commands = in_commands; }
+
+    // Set the specifier.  The stop hook will own the specifier, and is
+    // responsible for deleting it when we're done.
+    void SetSpecifier(SymbolContextSpecifier *specifier);
+
+    SymbolContextSpecifier *GetSpecifier() { return m_specifier_sp.get(); }
+
+    // Set the Thread Specifier.  The stop hook will own the thread specifier,
+    // and is responsible for deleting it when we're done.
+    void SetThreadSpecifier(ThreadSpec *specifier);
+
+    ThreadSpec *GetThreadSpecifier() { return m_thread_spec_up.get(); }
+
+    bool IsActive() { return m_active; }
+
+    void SetIsActive(bool is_active) { m_active = is_active; }
+
+    void SetAutoContinue(bool auto_continue) {m_auto_continue = auto_continue;}
+
+    bool GetAutoContinue() const { return m_auto_continue; }
+
+    void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+  private:
+    lldb::TargetSP m_target_sp;
+    StringList m_commands;
+    lldb::SymbolContextSpecifierSP m_specifier_sp;
+    std::unique_ptr<ThreadSpec> m_thread_spec_up;
+    bool m_active = true;
+    bool m_auto_continue = false;
+
+    // Use CreateStopHook to make a new empty stop hook. The GetCommandPointer
+    // and fill it with commands, and SetSpecifier to set the specifier shared
+    // pointer (can be null, that will match anything.)
+    StopHook(lldb::TargetSP target_sp, lldb::user_id_t uid);
+    friend class Target;
+  };
+  typedef std::shared_ptr<StopHook> StopHookSP;
+
+  // Add an empty stop hook to the Target's stop hook list, and returns a
+  // shared pointer to it in new_hook. Returns the id of the new hook.
+  StopHookSP CreateStopHook();
+
+  void RunStopHooks();
+
+  size_t GetStopHookSize();
+
+  bool SetSuppresStopHooks(bool suppress) {
+    bool old_value = m_suppress_stop_hooks;
+    m_suppress_stop_hooks = suppress;
+    return old_value;
+  }
+
+  bool GetSuppressStopHooks() { return m_suppress_stop_hooks; }
+
+  bool RemoveStopHookByID(lldb::user_id_t uid);
+
+  void RemoveAllStopHooks();
+
+  StopHookSP GetStopHookByID(lldb::user_id_t uid);
+
+  bool SetStopHookActiveStateByID(lldb::user_id_t uid, bool active_state);
+
+  void SetAllStopHooksActiveState(bool active_state);
+
+  size_t GetNumStopHooks() const { return m_stop_hooks.size(); }
+
+  StopHookSP GetStopHookAtIndex(size_t index) {
+    if (index >= GetNumStopHooks())
+      return StopHookSP();
+    StopHookCollection::iterator pos = m_stop_hooks.begin();
+
+    while (index > 0) {
+      pos++;
+      index--;
+    }
+    return (*pos).second;
+  }
+
+  lldb::PlatformSP GetPlatform() { return m_platform_sp; }
+
+  void SetPlatform(const lldb::PlatformSP &platform_sp) {
+    m_platform_sp = platform_sp;
+  }
+
+  SourceManager &GetSourceManager();
+
+  ClangModulesDeclVendor *GetClangModulesDeclVendor();
+
+  // Methods.
+  lldb::SearchFilterSP
+  GetSearchFilterForModule(const FileSpec *containingModule);
+
+  lldb::SearchFilterSP
+  GetSearchFilterForModuleList(const FileSpecList *containingModuleList);
+
+  lldb::SearchFilterSP
+  GetSearchFilterForModuleAndCUList(const FileSpecList *containingModules,
+                                    const FileSpecList *containingSourceFiles);
+
+  lldb::REPLSP GetREPL(Status &err, lldb::LanguageType language,
+                       const char *repl_options, bool can_create);
+
+  void SetREPL(lldb::LanguageType language, lldb::REPLSP repl_sp);
+
+protected:
+  /// Implementing of ModuleList::Notifier.
+
+  void NotifyModuleAdded(const ModuleList &module_list,
+                         const lldb::ModuleSP &module_sp) override;
+
+  void NotifyModuleRemoved(const ModuleList &module_list,
+                         const lldb::ModuleSP &module_sp) override;
+
+  void NotifyModuleUpdated(const ModuleList &module_list,
+                           const lldb::ModuleSP &old_module_sp,
+                           const lldb::ModuleSP &new_module_sp) override;
+
+  void NotifyWillClearList(const ModuleList &module_list) override;
+
+  void NotifyModulesRemoved(lldb_private::ModuleList &module_list) override;
+
+  class Arch {
+  public:
+    explicit Arch(const ArchSpec &spec);
+    const Arch &operator=(const ArchSpec &spec);
+
+    const ArchSpec &GetSpec() const { return m_spec; }
+    Architecture *GetPlugin() const { return m_plugin_up.get(); }
+
+  private:
+    ArchSpec m_spec;
+    std::unique_ptr<Architecture> m_plugin_up;
+  };
+  // Member variables.
+  Debugger &m_debugger;
+  lldb::PlatformSP m_platform_sp; ///< The platform for this target.
+  std::recursive_mutex m_mutex; ///< An API mutex that is used by the lldb::SB*
+                                /// classes make the SB interface thread safe
+  Arch m_arch;
+  ModuleList m_images; ///< The list of images for this process (shared
+                       /// libraries and anything dynamically loaded).
+  SectionLoadHistory m_section_load_history;
+  BreakpointList m_breakpoint_list;
+  BreakpointList m_internal_breakpoint_list;
+  using BreakpointNameList = std::map<ConstString, BreakpointName *>;
+  BreakpointNameList m_breakpoint_names;
+  
+  lldb::BreakpointSP m_last_created_breakpoint;
+  WatchpointList m_watchpoint_list;
+  lldb::WatchpointSP m_last_created_watchpoint;
+  // We want to tightly control the process destruction process so we can
+  // correctly tear down everything that we need to, so the only class that
+  // knows about the process lifespan is this target class.
+  lldb::ProcessSP m_process_sp;
+  lldb::SearchFilterSP m_search_filter_sp;
+  PathMappingList m_image_search_paths;
+  TypeSystemMap m_scratch_type_system_map;
+
+  typedef std::map<lldb::LanguageType, lldb::REPLSP> REPLMap;
+  REPLMap m_repl_map;
+
+  lldb::ClangASTImporterSP m_ast_importer_sp;
+  lldb::ClangModulesDeclVendorUP m_clang_modules_decl_vendor_up;
+
+  lldb::SourceManagerUP m_source_manager_up;
+
+  typedef std::map<lldb::user_id_t, StopHookSP> StopHookCollection;
+  StopHookCollection m_stop_hooks;
+  lldb::user_id_t m_stop_hook_next_id;
+  bool m_valid;
+  bool m_suppress_stop_hooks;
+  bool m_is_dummy_target;
+  unsigned m_next_persistent_variable_index = 0;
+
+  static void ImageSearchPathsChanged(const PathMappingList &path_list,
+                                      void *baton);
+
+  // Utilities for `statistics` command.
+private:
+  std::vector<uint32_t> m_stats_storage;
+  bool m_collecting_stats = false;
+
+public:
+  void SetCollectingStats(bool v) { m_collecting_stats = v; }
+
+  bool GetCollectingStats() { return m_collecting_stats; }
+
+  void IncrementStats(lldb_private::StatisticKind key) {
+    if (!GetCollectingStats())
+      return;
+    lldbassert(key < lldb_private::StatisticKind::StatisticMax &&
+               "invalid statistics!");
+    m_stats_storage[key] += 1;
+  }
+
+  std::vector<uint32_t> GetStatistics() { return m_stats_storage; }
+
+private:
+  /// Construct with optional file and arch.
+  ///
+  /// This member is private. Clients must use
+  /// TargetList::CreateTarget(const FileSpec*, const ArchSpec*)
+  /// so all targets can be tracked from the central target list.
+  ///
+  /// \see TargetList::CreateTarget(const FileSpec*, const ArchSpec*)
+  Target(Debugger &debugger, const ArchSpec &target_arch,
+         const lldb::PlatformSP &platform_sp, bool is_dummy_target);
+
+  // Helper function.
+  bool ProcessIsValid();
+
+  // Copy breakpoints, stop hooks and so forth from the dummy target:
+  void PrimeFromDummyTarget(Target *dummy_target);
+
+  void AddBreakpoint(lldb::BreakpointSP breakpoint_sp, bool internal);
+
+  void FinalizeFileActions(ProcessLaunchInfo &info);
+
+  DISALLOW_COPY_AND_ASSIGN(Target);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Target_h_
diff --git a/linux-x64/clang/include/lldb/Target/TargetList.h b/linux-x64/clang/include/lldb/Target/TargetList.h
new file mode 100644
index 0000000..ece0705
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/TargetList.h
@@ -0,0 +1,214 @@
+//===-- TargetList.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_TargetList_h_
+#define liblldb_TargetList_h_
+
+#include <mutex>
+#include <vector>
+
+#include "lldb/Target/Target.h"
+#include "lldb/Utility/Broadcaster.h"
+
+namespace lldb_private {
+
+class TargetList : public Broadcaster {
+private:
+  friend class Debugger;
+
+  /// Constructor
+  ///
+  /// The constructor for the target list is private. Clients can
+  /// get ahold of of the one and only target list through the
+  /// lldb_private::Debugger::GetSharedInstance().GetTargetList().
+  ///
+  /// \see static TargetList& lldb_private::Debugger::GetTargetList().
+  TargetList(Debugger &debugger);
+
+public:
+  /// Broadcaster event bits definitions.
+  enum { eBroadcastBitInterrupt = (1 << 0) };
+
+  // These two functions fill out the Broadcaster interface:
+
+  static ConstString &GetStaticBroadcasterClass();
+
+  ConstString &GetBroadcasterClass() const override {
+    return GetStaticBroadcasterClass();
+  }
+
+  ~TargetList() override;
+
+  /// Create a new Target.
+  ///
+  /// Clients must use this function to create a Target. This allows
+  /// a global list of targets to be maintained in a central location
+  /// so signal handlers and other global functions can use it to
+  /// locate an appropriate target to deliver asynchronous information
+  /// to.
+  ///
+  /// \param[in] debugger
+  ///     The debugger to associate this target with
+  ///
+  /// \param[in] file_spec
+  ///     The main executable file for a debug target. This value
+  ///     can be nullptr and the file can be set later using:
+  ///     Target::SetExecutableModule (ModuleSP&)
+  ///
+  /// \param[in] triple_cstr
+  ///     A target triple string to be used for the target. This can
+  ///     be nullptr if the triple is not known or when attaching to a
+  ///     process.
+  ///
+  /// \param[in] get_dependent_modules
+  ///     Track down the dependent modules for an executable and
+  ///     load those into the module list.
+  ///
+  /// \param[in] platform_options
+  ///     A pointer to the platform options to use when creating this
+  ///     target. If this value is nullptr, then the currently selected
+  ///     platform will be used.
+  ///
+  /// \param[out] target_sp
+  ///     A shared pointer to a target that will be filled in if
+  ///     this call is successful.
+  ///
+  /// \return
+  ///     An error object that indicates success or failure
+  Status CreateTarget(Debugger &debugger, llvm::StringRef user_exe_path,
+                      llvm::StringRef triple_str,
+                      LoadDependentFiles get_dependent_modules,
+                      const OptionGroupPlatform *platform_options,
+                      lldb::TargetSP &target_sp);
+
+  /// Create a new Target.
+  ///
+  /// Same as the function above, but used when you already know the
+  /// platform you will be using
+  Status CreateTarget(Debugger &debugger, llvm::StringRef user_exe_path,
+                      const ArchSpec &arch,
+                      LoadDependentFiles get_dependent_modules,
+                      lldb::PlatformSP &platform_sp, lldb::TargetSP &target_sp);
+
+  /// Delete a Target object from the list.
+  ///
+  /// When clients are done with the Target objects, this function
+  /// should be called to release the memory associated with a target
+  /// object.
+  ///
+  /// \param[in] target_sp
+  ///     The shared pointer to a target.
+  ///
+  /// \return
+  ///     Returns \b true if the target was successfully removed from
+  ///     from this target list, \b false otherwise. The client will
+  ///     be left with the last remaining shared pointer to the target
+  ///     in \a target_sp which can then be properly released.
+  bool DeleteTarget(lldb::TargetSP &target_sp);
+
+  int GetNumTargets() const;
+
+  lldb::TargetSP GetTargetAtIndex(uint32_t index) const;
+
+  uint32_t GetIndexOfTarget(lldb::TargetSP target_sp) const;
+
+  /// Find the target that contains has an executable whose path
+  /// matches \a exe_file_spec, and whose architecture matches
+  /// \a arch_ptr if arch_ptr is not nullptr.
+  ///
+  /// \param[in] exe_file_spec
+  ///     A file spec containing a basename, or a full path (directory
+  ///     and basename). If \a exe_file_spec contains only a filename
+  ///     (empty GetDirectory() value) then matching will be done
+  ///     solely based on the filenames and directories won't be
+  ///     compared. If \a exe_file_spec contains a filename and a
+  ///     directory, then both must match.
+  ///
+  /// \param[in] exe_arch_ptr
+  ///     If not nullptr then the architecture also needs to match, else
+  ///     the architectures will be compared.
+  ///
+  /// \return
+  ///     A shared pointer to a target object. The returned shared
+  ///     pointer will contain nullptr if no target objects have a
+  ///     executable whose full or partial path matches
+  ///     with a matching process ID.
+  lldb::TargetSP FindTargetWithExecutableAndArchitecture(
+      const FileSpec &exe_file_spec,
+      const ArchSpec *exe_arch_ptr = nullptr) const;
+
+  /// Find the target that contains a process with process ID \a
+  /// pid.
+  ///
+  /// \param[in] pid
+  ///     The process ID to search our target list for.
+  ///
+  /// \return
+  ///     A shared pointer to a target object. The returned shared
+  ///     pointer will contain nullptr if no target objects own a process
+  ///     with a matching process ID.
+  lldb::TargetSP FindTargetWithProcessID(lldb::pid_t pid) const;
+
+  lldb::TargetSP FindTargetWithProcess(lldb_private::Process *process) const;
+
+  lldb::TargetSP GetTargetSP(Target *target) const;
+
+  /// Send an async interrupt to one or all processes.
+  ///
+  /// Find the target that contains the process with process ID \a
+  /// pid and send a LLDB_EVENT_ASYNC_INTERRUPT event to the process's
+  /// event queue.
+  ///
+  /// \param[in] pid
+  ///     The process ID to search our target list for, if \a pid is
+  ///     LLDB_INVALID_PROCESS_ID, then the interrupt will be sent to
+  ///     all processes.
+  ///
+  /// \return
+  ///     The number of async interrupts sent.
+  uint32_t SendAsyncInterrupt(lldb::pid_t pid = LLDB_INVALID_PROCESS_ID);
+
+  uint32_t SignalIfRunning(lldb::pid_t pid, int signo);
+
+  uint32_t SetSelectedTarget(Target *target);
+
+  lldb::TargetSP GetSelectedTarget();
+
+protected:
+  typedef std::vector<lldb::TargetSP> collection;
+  // Member variables.
+  collection m_target_list;
+  lldb::TargetSP m_dummy_target_sp;
+  mutable std::recursive_mutex m_target_list_mutex;
+  uint32_t m_selected_target_idx;
+
+private:
+  lldb::TargetSP GetDummyTarget(lldb_private::Debugger &debugger);
+
+  Status CreateDummyTarget(Debugger &debugger,
+                           llvm::StringRef specified_arch_name,
+                           lldb::TargetSP &target_sp);
+
+  Status CreateTargetInternal(Debugger &debugger, llvm::StringRef user_exe_path,
+                              llvm::StringRef triple_str,
+                              LoadDependentFiles load_dependent_files,
+                              const OptionGroupPlatform *platform_options,
+                              lldb::TargetSP &target_sp, bool is_dummy_target);
+
+  Status CreateTargetInternal(Debugger &debugger, llvm::StringRef user_exe_path,
+                              const ArchSpec &arch,
+                              LoadDependentFiles get_dependent_modules,
+                              lldb::PlatformSP &platform_sp,
+                              lldb::TargetSP &target_sp, bool is_dummy_target);
+
+  DISALLOW_COPY_AND_ASSIGN(TargetList);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_TargetList_h_
diff --git a/linux-x64/clang/include/lldb/Target/Thread.h b/linux-x64/clang/include/lldb/Target/Thread.h
new file mode 100644
index 0000000..7aeaece
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Thread.h
@@ -0,0 +1,1268 @@
+//===-- Thread.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Thread_h_
+#define liblldb_Thread_h_
+
+#include <memory>
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include "lldb/Core/UserSettingsController.h"
+#include "lldb/Target/ExecutionContextScope.h"
+#include "lldb/Target/RegisterCheckpoint.h"
+#include "lldb/Target/StackFrameList.h"
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/Event.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+#define LLDB_THREAD_MAX_STOP_EXC_DATA 8
+
+namespace lldb_private {
+
+class ThreadProperties : public Properties {
+public:
+  ThreadProperties(bool is_global);
+
+  ~ThreadProperties() override;
+
+  /// The regular expression returned determines symbols that this
+  /// thread won't stop in during "step-in" operations.
+  ///
+  /// \return
+  ///    A pointer to a regular expression to compare against symbols,
+  ///    or nullptr if all symbols are allowed.
+  ///
+  const RegularExpression *GetSymbolsToAvoidRegexp();
+
+  FileSpecList GetLibrariesToAvoid() const;
+
+  bool GetTraceEnabledState() const;
+
+  bool GetStepInAvoidsNoDebug() const;
+
+  bool GetStepOutAvoidsNoDebug() const;
+
+  uint64_t GetMaxBacktraceDepth() const;
+};
+
+typedef std::shared_ptr<ThreadProperties> ThreadPropertiesSP;
+
+class Thread : public std::enable_shared_from_this<Thread>,
+               public ThreadProperties,
+               public UserID,
+               public ExecutionContextScope,
+               public Broadcaster {
+public:
+  /// Broadcaster event bits definitions.
+  enum {
+    eBroadcastBitStackChanged = (1 << 0),
+    eBroadcastBitThreadSuspended = (1 << 1),
+    eBroadcastBitThreadResumed = (1 << 2),
+    eBroadcastBitSelectedFrameChanged = (1 << 3),
+    eBroadcastBitThreadSelected = (1 << 4)
+  };
+
+  static ConstString &GetStaticBroadcasterClass();
+
+  ConstString &GetBroadcasterClass() const override {
+    return GetStaticBroadcasterClass();
+  }
+
+  class ThreadEventData : public EventData {
+  public:
+    ThreadEventData(const lldb::ThreadSP thread_sp);
+
+    ThreadEventData(const lldb::ThreadSP thread_sp, const StackID &stack_id);
+
+    ThreadEventData();
+
+    ~ThreadEventData() override;
+
+    static ConstString GetFlavorString();
+
+    ConstString GetFlavor() const override {
+      return ThreadEventData::GetFlavorString();
+    }
+
+    void Dump(Stream *s) const override;
+
+    static const ThreadEventData *GetEventDataFromEvent(const Event *event_ptr);
+
+    static lldb::ThreadSP GetThreadFromEvent(const Event *event_ptr);
+
+    static StackID GetStackIDFromEvent(const Event *event_ptr);
+
+    static lldb::StackFrameSP GetStackFrameFromEvent(const Event *event_ptr);
+
+    lldb::ThreadSP GetThread() const { return m_thread_sp; }
+
+    StackID GetStackID() const { return m_stack_id; }
+
+  private:
+    lldb::ThreadSP m_thread_sp;
+    StackID m_stack_id;
+
+    DISALLOW_COPY_AND_ASSIGN(ThreadEventData);
+  };
+
+  struct ThreadStateCheckpoint {
+    uint32_t orig_stop_id; // Dunno if I need this yet but it is an interesting
+                           // bit of data.
+    lldb::StopInfoSP stop_info_sp; // You have to restore the stop info or you
+                                   // might continue with the wrong signals.
+    std::vector<lldb::ThreadPlanSP> m_completed_plan_stack;
+    lldb::RegisterCheckpointSP
+        register_backup_sp; // You need to restore the registers, of course...
+    uint32_t current_inlined_depth;
+    lldb::addr_t current_inlined_pc;
+  };
+
+  /// Constructor
+  ///
+  /// \param [in] process
+  ///
+  /// \param [in] tid
+  ///
+  /// \param [in] use_invalid_index_id
+  ///     Optional parameter, defaults to false.  The only subclass that
+  ///     is likely to set use_invalid_index_id == true is the HistoryThread
+  ///     class.  In that case, the Thread we are constructing represents
+  ///     a thread from earlier in the program execution.  We may have the
+  ///     tid of the original thread that they represent but we don't want
+  ///     to reuse the IndexID of that thread, or create a new one.  If a
+  ///     client wants to know the original thread's IndexID, they should use
+  ///     Thread::GetExtendedBacktraceOriginatingIndexID().
+  Thread(Process &process, lldb::tid_t tid, bool use_invalid_index_id = false);
+
+  ~Thread() override;
+
+  static void SettingsInitialize();
+
+  static void SettingsTerminate();
+
+  static const ThreadPropertiesSP &GetGlobalProperties();
+
+  lldb::ProcessSP GetProcess() const { return m_process_wp.lock(); }
+
+  int GetResumeSignal() const { return m_resume_signal; }
+
+  void SetResumeSignal(int signal) { m_resume_signal = signal; }
+
+  lldb::StateType GetState() const;
+
+  void SetState(lldb::StateType state);
+
+  /// Sets the USER resume state for this thread.  If you set a thread to
+  /// suspended with
+  /// this API, it won't take part in any of the arbitration for ShouldResume,
+  /// and will stay
+  /// suspended even when other threads do get to run.
+  ///
+  /// N.B. This is not the state that is used internally by thread plans to
+  /// implement
+  /// staying on one thread while stepping over a breakpoint, etc.  The is the
+  /// TemporaryResume state, and if you are implementing some bit of strategy in
+  /// the stepping
+  /// machinery you should be using that state and not the user resume state.
+  ///
+  /// If you are just preparing all threads to run, you should not override the
+  /// threads that are
+  /// marked as suspended by the debugger.  In that case, pass override_suspend
+  /// = false.  If you want
+  /// to force the thread to run (e.g. the "thread continue" command, or are
+  /// resetting the state
+  /// (e.g. in SBThread::Resume()), then pass true to override_suspend.
+  /// \return
+  ///    The User resume state for this thread.
+  void SetResumeState(lldb::StateType state, bool override_suspend = false) {
+    if (m_resume_state == lldb::eStateSuspended && !override_suspend)
+      return;
+    m_resume_state = state;
+  }
+
+  /// Gets the USER resume state for this thread.  This is not the same as what
+  /// this thread is going to do for any particular step, however if this thread
+  /// returns eStateSuspended, then the process control logic will never allow
+  /// this
+  /// thread to run.
+  ///
+  /// \return
+  ///    The User resume state for this thread.
+  lldb::StateType GetResumeState() const { return m_resume_state; }
+
+  // This function is called on all the threads before "ShouldResume" and
+  // "WillResume" in case a thread needs to change its state before the
+  // ThreadList polls all the threads to figure out which ones actually will
+  // get to run and how.
+  void SetupForResume();
+
+  // Do not override this function, it is for thread plan logic only
+  bool ShouldResume(lldb::StateType resume_state);
+
+  // Override this to do platform specific tasks before resume.
+  virtual void WillResume(lldb::StateType resume_state) {}
+
+  // This clears generic thread state after a resume.  If you subclass this, be
+  // sure to call it.
+  virtual void DidResume();
+
+  // This notifies the thread when a private stop occurs.
+  virtual void DidStop();
+
+  virtual void RefreshStateAfterStop() = 0;
+
+  void WillStop();
+
+  bool ShouldStop(Event *event_ptr);
+
+  Vote ShouldReportStop(Event *event_ptr);
+
+  Vote ShouldReportRun(Event *event_ptr);
+
+  void Flush();
+
+  // Return whether this thread matches the specification in ThreadSpec.  This
+  // is a virtual method because at some point we may extend the thread spec
+  // with a platform specific dictionary of attributes, which then only the
+  // platform specific Thread implementation would know how to match.  For now,
+  // this just calls through to the ThreadSpec's ThreadPassesBasicTests method.
+  virtual bool MatchesSpec(const ThreadSpec *spec);
+
+  lldb::StopInfoSP GetStopInfo();
+
+  lldb::StopReason GetStopReason();
+
+  bool StopInfoIsUpToDate() const;
+
+  // This sets the stop reason to a "blank" stop reason, so you can call
+  // functions on the thread without having the called function run with
+  // whatever stop reason you stopped with.
+  void SetStopInfoToNothing();
+
+  bool ThreadStoppedForAReason();
+
+  static const char *RunModeAsCString(lldb::RunMode mode);
+
+  static const char *StopReasonAsCString(lldb::StopReason reason);
+
+  virtual const char *GetInfo() { return nullptr; }
+
+  /// Retrieve a dictionary of information about this thread
+  ///
+  /// On Mac OS X systems there may be voucher information.
+  /// The top level dictionary returned will have an "activity" key and the
+  /// value of the activity is a dictionary.  Keys in that dictionary will
+  /// be "name" and "id", among others.
+  /// There may also be "trace_messages" (an array) with each entry in that
+  /// array
+  /// being a dictionary (keys include "message" with the text of the trace
+  /// message).
+  StructuredData::ObjectSP GetExtendedInfo() {
+    if (!m_extended_info_fetched) {
+      m_extended_info = FetchThreadExtendedInfo();
+      m_extended_info_fetched = true;
+    }
+    return m_extended_info;
+  }
+
+  virtual const char *GetName() { return nullptr; }
+
+  virtual void SetName(const char *name) {}
+
+  /// Whether this thread can be associated with a libdispatch queue
+  ///
+  /// The Thread may know if it is associated with a libdispatch queue,
+  /// it may know definitively that it is NOT associated with a libdispatch
+  /// queue, or it may be unknown whether it is associated with a libdispatch
+  /// queue.
+  ///
+  /// \return
+  ///     eLazyBoolNo if this thread is definitely not associated with a
+  ///     libdispatch queue (e.g. on a non-Darwin system where GCD aka
+  ///     libdispatch is not available).
+  ///
+  ///     eLazyBoolYes this thread is associated with a libdispatch queue.
+  ///
+  ///     eLazyBoolCalculate this thread may be associated with a libdispatch
+  ///     queue but the thread doesn't know one way or the other.
+  virtual lldb_private::LazyBool GetAssociatedWithLibdispatchQueue() {
+    return eLazyBoolNo;
+  }
+
+  virtual void SetAssociatedWithLibdispatchQueue(
+      lldb_private::LazyBool associated_with_libdispatch_queue) {}
+
+  /// Retrieve the Queue ID for the queue currently using this Thread
+  ///
+  /// If this Thread is doing work on behalf of a libdispatch/GCD queue,
+  /// retrieve the QueueID.
+  ///
+  /// This is a unique identifier for the libdispatch/GCD queue in a
+  /// process.  Often starting at 1 for the initial system-created
+  /// queues and incrementing, a QueueID will not be reused for a
+  /// different queue during the lifetime of a process.
+  ///
+  /// \return
+  ///     A QueueID if the Thread subclass implements this, else
+  ///     LLDB_INVALID_QUEUE_ID.
+  virtual lldb::queue_id_t GetQueueID() { return LLDB_INVALID_QUEUE_ID; }
+
+  virtual void SetQueueID(lldb::queue_id_t new_val) {}
+
+  /// Retrieve the Queue name for the queue currently using this Thread
+  ///
+  /// If this Thread is doing work on behalf of a libdispatch/GCD queue,
+  /// retrieve the Queue name.
+  ///
+  /// \return
+  ///     The Queue name, if the Thread subclass implements this, else
+  ///     nullptr.
+  virtual const char *GetQueueName() { return nullptr; }
+
+  virtual void SetQueueName(const char *name) {}
+
+  /// Retrieve the Queue kind for the queue currently using this Thread
+  ///
+  /// If this Thread is doing work on behalf of a libdispatch/GCD queue,
+  /// retrieve the Queue kind - either eQueueKindSerial or
+  /// eQueueKindConcurrent, indicating that this queue processes work
+  /// items serially or concurrently.
+  ///
+  /// \return
+  ///     The Queue kind, if the Thread subclass implements this, else
+  ///     eQueueKindUnknown.
+  virtual lldb::QueueKind GetQueueKind() { return lldb::eQueueKindUnknown; }
+
+  virtual void SetQueueKind(lldb::QueueKind kind) {}
+
+  /// Retrieve the Queue for this thread, if any.
+  ///
+  /// \return
+  ///     A QueueSP for the queue that is currently associated with this
+  ///     thread.
+  ///     An empty shared pointer indicates that this thread is not
+  ///     associated with a queue, or libdispatch queues are not
+  ///     supported on this target.
+  virtual lldb::QueueSP GetQueue() { return lldb::QueueSP(); }
+
+  /// Retrieve the address of the libdispatch_queue_t struct for queue
+  /// currently using this Thread
+  ///
+  /// If this Thread is doing work on behalf of a libdispatch/GCD queue,
+  /// retrieve the address of the libdispatch_queue_t structure describing
+  /// the queue.
+  ///
+  /// This address may be reused for different queues later in the Process
+  /// lifetime and should not be used to identify a queue uniquely.  Use
+  /// the GetQueueID() call for that.
+  ///
+  /// \return
+  ///     The Queue's libdispatch_queue_t address if the Thread subclass
+  ///     implements this, else LLDB_INVALID_ADDRESS.
+  virtual lldb::addr_t GetQueueLibdispatchQueueAddress() {
+    return LLDB_INVALID_ADDRESS;
+  }
+
+  virtual void SetQueueLibdispatchQueueAddress(lldb::addr_t dispatch_queue_t) {}
+
+  /// Whether this Thread already has all the Queue information cached or not
+  ///
+  /// A Thread may be associated with a libdispatch work Queue at a given
+  /// public stop event.  If so, the thread can satisify requests like
+  /// GetQueueLibdispatchQueueAddress, GetQueueKind, GetQueueName, and
+  /// GetQueueID
+  /// either from information from the remote debug stub when it is initially
+  /// created, or it can query the SystemRuntime for that information.
+  ///
+  /// This method allows the SystemRuntime to discover if a thread has this
+  /// information already, instead of calling the thread to get the information
+  /// and having the thread call the SystemRuntime again.
+  virtual bool ThreadHasQueueInformation() const { return false; }
+
+  virtual uint32_t GetStackFrameCount() {
+    return GetStackFrameList()->GetNumFrames();
+  }
+
+  virtual lldb::StackFrameSP GetStackFrameAtIndex(uint32_t idx) {
+    return GetStackFrameList()->GetFrameAtIndex(idx);
+  }
+
+  virtual lldb::StackFrameSP
+  GetFrameWithConcreteFrameIndex(uint32_t unwind_idx);
+
+  bool DecrementCurrentInlinedDepth() {
+    return GetStackFrameList()->DecrementCurrentInlinedDepth();
+  }
+
+  uint32_t GetCurrentInlinedDepth() {
+    return GetStackFrameList()->GetCurrentInlinedDepth();
+  }
+
+  Status ReturnFromFrameWithIndex(uint32_t frame_idx,
+                                  lldb::ValueObjectSP return_value_sp,
+                                  bool broadcast = false);
+
+  Status ReturnFromFrame(lldb::StackFrameSP frame_sp,
+                         lldb::ValueObjectSP return_value_sp,
+                         bool broadcast = false);
+
+  Status JumpToLine(const FileSpec &file, uint32_t line,
+                    bool can_leave_function, std::string *warnings = nullptr);
+
+  virtual lldb::StackFrameSP GetFrameWithStackID(const StackID &stack_id) {
+    if (stack_id.IsValid())
+      return GetStackFrameList()->GetFrameWithStackID(stack_id);
+    return lldb::StackFrameSP();
+  }
+
+  uint32_t GetSelectedFrameIndex() {
+    return GetStackFrameList()->GetSelectedFrameIndex();
+  }
+
+  lldb::StackFrameSP GetSelectedFrame();
+
+  uint32_t SetSelectedFrame(lldb_private::StackFrame *frame,
+                            bool broadcast = false);
+
+  bool SetSelectedFrameByIndex(uint32_t frame_idx, bool broadcast = false);
+
+  bool SetSelectedFrameByIndexNoisily(uint32_t frame_idx,
+                                      Stream &output_stream);
+
+  void SetDefaultFileAndLineToSelectedFrame() {
+    GetStackFrameList()->SetDefaultFileAndLineToSelectedFrame();
+  }
+
+  virtual lldb::RegisterContextSP GetRegisterContext() = 0;
+
+  virtual lldb::RegisterContextSP
+  CreateRegisterContextForFrame(StackFrame *frame) = 0;
+
+  virtual void ClearStackFrames();
+
+  virtual bool SetBackingThread(const lldb::ThreadSP &thread_sp) {
+    return false;
+  }
+
+  virtual lldb::ThreadSP GetBackingThread() const { return lldb::ThreadSP(); }
+
+  virtual void ClearBackingThread() {
+    // Subclasses can use this function if a thread is actually backed by
+    // another thread. This is currently used for the OperatingSystem plug-ins
+    // where they might have a thread that is in memory, yet its registers are
+    // available through the lldb_private::Thread subclass for the current
+    // lldb_private::Process class. Since each time the process stops the
+    // backing threads for memory threads can change, we need a way to clear
+    // the backing thread for all memory threads each time we stop.
+  }
+
+  // If stop_format is true, this will be the form used when we print stop
+  // info. If false, it will be the form we use for thread list and co.
+  void DumpUsingSettingsFormat(Stream &strm, uint32_t frame_idx,
+                               bool stop_format);
+
+  bool GetDescription(Stream &s, lldb::DescriptionLevel level,
+                      bool print_json_thread, bool print_json_stopinfo);
+
+  /// Default implementation for stepping into.
+  ///
+  /// This function is designed to be used by commands where the
+  /// process is publicly stopped.
+  ///
+  /// \param[in] source_step
+  ///     If true and the frame has debug info, then do a source level
+  ///     step in, else do a single instruction step in.
+  ///
+  /// \param[in] step_in_avoids_code_without_debug_info
+  ///     If \a true, then avoid stepping into code that doesn't have
+  ///     debug info, else step into any code regardless of whether it
+  ///     has debug info.
+  ///
+  /// \param[in] step_out_avoids_code_without_debug_info
+  ///     If \a true, then if you step out to code with no debug info, keep
+  ///     stepping out till you get to code with debug info.
+  ///
+  /// \return
+  ///     An error that describes anything that went wrong
+  virtual Status
+  StepIn(bool source_step,
+         LazyBool step_in_avoids_code_without_debug_info = eLazyBoolCalculate,
+         LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
+
+  /// Default implementation for stepping over.
+  ///
+  /// This function is designed to be used by commands where the
+  /// process is publicly stopped.
+  ///
+  /// \param[in] source_step
+  ///     If true and the frame has debug info, then do a source level
+  ///     step over, else do a single instruction step over.
+  ///
+  /// \return
+  ///     An error that describes anything that went wrong
+  virtual Status StepOver(
+      bool source_step,
+      LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
+
+  /// Default implementation for stepping out.
+  ///
+  /// This function is designed to be used by commands where the
+  /// process is publicly stopped.
+  ///
+  /// \return
+  ///     An error that describes anything that went wrong
+  virtual Status StepOut();
+
+  /// Retrieves the per-thread data area.
+  /// Most OSs maintain a per-thread pointer (e.g. the FS register on
+  /// x64), which we return the value of here.
+  ///
+  /// \return
+  ///     LLDB_INVALID_ADDRESS if not supported, otherwise the thread
+  ///     pointer value.
+  virtual lldb::addr_t GetThreadPointer();
+
+  /// Retrieves the per-module TLS block for a thread.
+  ///
+  /// \param[in] module
+  ///     The module to query TLS data for.
+  ///
+  /// \param[in] tls_file_addr
+  ///     The thread local address in module
+  /// \return
+  ///     If the thread has TLS data allocated for the
+  ///     module, the address of the TLS block. Otherwise
+  ///     LLDB_INVALID_ADDRESS is returned.
+  virtual lldb::addr_t GetThreadLocalData(const lldb::ModuleSP module,
+                                          lldb::addr_t tls_file_addr);
+
+  /// Check whether this thread is safe to run functions
+  ///
+  /// The SystemRuntime may know of certain thread states (functions in
+  /// process of execution, for instance) which can make it unsafe for
+  /// functions to be called.
+  ///
+  /// \return
+  ///     True if it is safe to call functions on this thread.
+  ///     False if function calls should be avoided on this thread.
+  virtual bool SafeToCallFunctions();
+
+  // Thread Plan Providers:
+  // This section provides the basic thread plans that the Process control
+  // machinery uses to run the target.  ThreadPlan.h provides more details on
+  // how this mechanism works. The thread provides accessors to a set of plans
+  // that perform basic operations. The idea is that particular Platform
+  // plugins can override these methods to provide the implementation of these
+  // basic operations appropriate to their environment.
+  //
+  // NB: All the QueueThreadPlanXXX providers return Shared Pointers to
+  // Thread plans.  This is useful so that you can modify the plans after
+  // creation in ways specific to that plan type.  Also, it is often necessary
+  // for ThreadPlans that utilize other ThreadPlans to implement their task to
+  // keep a shared pointer to the sub-plan. But besides that, the shared
+  // pointers should only be held onto by entities who live no longer than the
+  // thread containing the ThreadPlan.
+  // FIXME: If this becomes a problem, we can make a version that just returns a
+  // pointer,
+  // which it is clearly unsafe to hold onto, and a shared pointer version, and
+  // only allow ThreadPlan and Co. to use the latter.  That is made more
+  // annoying to do because there's no elegant way to friend a method to all
+  // sub-classes of a given class.
+  //
+
+  /// Queues the base plan for a thread.
+  /// The version returned by Process does some things that are useful,
+  /// like handle breakpoints and signals, so if you return a plugin specific
+  /// one you probably want to call through to the Process one for anything
+  /// your plugin doesn't explicitly handle.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP QueueFundamentalPlan(bool abort_other_plans);
+
+  /// Queues the plan used to step one instruction from the current PC of \a
+  /// thread.
+  ///
+  /// \param[in] step_over
+  ///    \b true if we step over calls to functions, false if we step in.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \param[in] stop_other_threads
+  ///    \b true if we will stop other threads while we single step this one.
+  ///
+  /// \param[out] status
+  ///     A status with an error if queuing failed.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepSingleInstruction(
+      bool step_over, bool abort_other_plans, bool stop_other_threads,
+      Status &status);
+
+  /// Queues the plan used to step through an address range, stepping  over
+  /// function calls.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \param[in] type
+  ///    Type of step to do, only eStepTypeInto and eStepTypeOver are supported
+  ///    by this plan.
+  ///
+  /// \param[in] range
+  ///    The address range to step through.
+  ///
+  /// \param[in] addr_context
+  ///    When dealing with stepping through inlined functions the current PC is
+  ///    not enough information to know
+  ///    what "step" means.  For instance a series of nested inline functions
+  ///    might start at the same address.
+  //     The \a addr_context provides the current symbol context the step
+  ///    is supposed to be out of.
+  //   FIXME: Currently unused.
+  ///
+  /// \param[in] stop_other_threads
+  ///    \b true if we will stop other threads while we single step this one.
+  ///
+  /// \param[out] status
+  ///     A status with an error if queuing failed.
+  ///
+  /// \param[in] step_out_avoids_code_without_debug_info
+  ///    If eLazyBoolYes, if the step over steps out it will continue to step
+  ///    out till it comes to a frame with debug info.
+  ///    If eLazyBoolCalculate, we will consult the default set in the thread.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepOverRange(
+      bool abort_other_plans, const AddressRange &range,
+      const SymbolContext &addr_context, lldb::RunMode stop_other_threads,
+      Status &status,
+      LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
+
+  // Helper function that takes a LineEntry to step, insted of an AddressRange.
+  // This may combine multiple LineEntries of the same source line number to
+  // step over a longer address range in a single operation.
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepOverRange(
+      bool abort_other_plans, const LineEntry &line_entry,
+      const SymbolContext &addr_context, lldb::RunMode stop_other_threads,
+      Status &status,
+      LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
+
+  /// Queues the plan used to step through an address range, stepping into
+  /// functions.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \param[in] type
+  ///    Type of step to do, only eStepTypeInto and eStepTypeOver are supported
+  ///    by this plan.
+  ///
+  /// \param[in] range
+  ///    The address range to step through.
+  ///
+  /// \param[in] addr_context
+  ///    When dealing with stepping through inlined functions the current PC is
+  ///    not enough information to know
+  ///    what "step" means.  For instance a series of nested inline functions
+  ///    might start at the same address.
+  //     The \a addr_context provides the current symbol context the step
+  ///    is supposed to be out of.
+  //   FIXME: Currently unused.
+  ///
+  /// \param[in] step_in_target
+  ///    Name if function we are trying to step into.  We will step out if we
+  ///    don't land in that function.
+  ///
+  /// \param[in] stop_other_threads
+  ///    \b true if we will stop other threads while we single step this one.
+  ///
+  /// \param[out] status
+  ///     A status with an error if queuing failed.
+  ///
+  /// \param[in] step_in_avoids_code_without_debug_info
+  ///    If eLazyBoolYes we will step out if we step into code with no debug
+  ///    info.
+  ///    If eLazyBoolCalculate we will consult the default set in the thread.
+  ///
+  /// \param[in] step_out_avoids_code_without_debug_info
+  ///    If eLazyBoolYes, if the step over steps out it will continue to step
+  ///    out till it comes to a frame with debug info.
+  ///    If eLazyBoolCalculate, it will consult the default set in the thread.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepInRange(
+      bool abort_other_plans, const AddressRange &range,
+      const SymbolContext &addr_context, const char *step_in_target,
+      lldb::RunMode stop_other_threads, Status &status,
+      LazyBool step_in_avoids_code_without_debug_info = eLazyBoolCalculate,
+      LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
+
+  // Helper function that takes a LineEntry to step, insted of an AddressRange.
+  // This may combine multiple LineEntries of the same source line number to
+  // step over a longer address range in a single operation.
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepInRange(
+      bool abort_other_plans, const LineEntry &line_entry,
+      const SymbolContext &addr_context, const char *step_in_target,
+      lldb::RunMode stop_other_threads, Status &status,
+      LazyBool step_in_avoids_code_without_debug_info = eLazyBoolCalculate,
+      LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
+
+  /// Queue the plan used to step out of the function at the current PC of
+  /// \a thread.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \param[in] addr_context
+  ///    When dealing with stepping through inlined functions the current PC is
+  ///    not enough information to know
+  ///    what "step" means.  For instance a series of nested inline functions
+  ///    might start at the same address.
+  //     The \a addr_context provides the current symbol context the step
+  ///    is supposed to be out of.
+  //   FIXME: Currently unused.
+  ///
+  /// \param[in] first_insn
+  ///     \b true if this is the first instruction of a function.
+  ///
+  /// \param[in] stop_other_threads
+  ///    \b true if we will stop other threads while we single step this one.
+  ///
+  /// \param[in] stop_vote
+  /// \param[in] run_vote
+  ///    See standard meanings for the stop & run votes in ThreadPlan.h.
+  ///
+  /// \param[out] status
+  ///     A status with an error if queuing failed.
+  ///
+  /// \param[in] step_out_avoids_code_without_debug_info
+  ///    If eLazyBoolYes, if the step over steps out it will continue to step
+  ///    out till it comes to a frame with debug info.
+  ///    If eLazyBoolCalculate, it will consult the default set in the thread.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepOut(
+      bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
+      bool stop_other_threads, Vote stop_vote, Vote run_vote,
+      uint32_t frame_idx, Status &status,
+      LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
+
+  /// Queue the plan used to step out of the function at the current PC of
+  /// a thread.  This version does not consult the should stop here callback,
+  /// and should only
+  /// be used by other thread plans when they need to retain control of the step
+  /// out.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \param[in] addr_context
+  ///    When dealing with stepping through inlined functions the current PC is
+  ///    not enough information to know
+  ///    what "step" means.  For instance a series of nested inline functions
+  ///    might start at the same address.
+  //     The \a addr_context provides the current symbol context the step
+  ///    is supposed to be out of.
+  //   FIXME: Currently unused.
+  ///
+  /// \param[in] first_insn
+  ///     \b true if this is the first instruction of a function.
+  ///
+  /// \param[in] stop_other_threads
+  ///    \b true if we will stop other threads while we single step this one.
+  ///
+  /// \param[in] stop_vote
+  ///
+  /// \param[in] run_vote
+  ///    See standard meanings for the stop & run votes in ThreadPlan.h.
+  ///
+  /// \param[in] frame_idx
+  ///
+  /// \param[out] status
+  ///     A status with an error if queuing failed.
+  ///
+  /// \param[in] continue_to_next_branch
+  ///    Normally this will enqueue a plan that will put a breakpoint on the
+  ///    return address and continue
+  ///    to there.  If continue_to_next_branch is true, this is an operation not
+  ///    involving the user --
+  ///    e.g. stepping "next" in a source line and we instruction stepped into
+  ///    another function --
+  ///    so instead of putting a breakpoint on the return address, advance the
+  ///    breakpoint to the
+  ///    end of the source line that is doing the call, or until the next flow
+  ///    control instruction.
+  ///    If the return value from the function call is to be retrieved /
+  ///    displayed to the user, you must stop
+  ///    on the return address.  The return value may be stored in volatile
+  ///    registers which are overwritten
+  ///    before the next branch instruction.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepOutNoShouldStop(
+      bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
+      bool stop_other_threads, Vote stop_vote, Vote run_vote,
+      uint32_t frame_idx, Status &status, bool continue_to_next_branch = false);
+
+  /// Gets the plan used to step through the code that steps from a function
+  /// call site at the current PC into the actual function call.
+  ///
+  /// \param[in] return_stack_id
+  ///    The stack id that we will return to (by setting backstop breakpoints on
+  ///    the return
+  ///    address to that frame) if we fail to step through.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \param[in] stop_other_threads
+  ///    \b true if we will stop other threads while we single step this one.
+  ///
+  /// \param[out] status
+  ///     A status with an error if queuing failed.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP
+  QueueThreadPlanForStepThrough(StackID &return_stack_id,
+                                bool abort_other_plans, bool stop_other_threads,
+                                Status &status);
+
+  /// Gets the plan used to continue from the current PC.
+  /// This is a simple plan, mostly useful as a backstop when you are continuing
+  /// for some particular purpose.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \param[in] target_addr
+  ///    The address to which we're running.
+  ///
+  /// \param[in] stop_other_threads
+  ///    \b true if we will stop other threads while we single step this one.
+  ///
+  /// \param[out] status
+  ///     A status with an error if queuing failed.
+  ///
+  /// \return
+  ///     A shared pointer to the newly queued thread plan, or nullptr if the
+  ///     plan could not be queued.
+  virtual lldb::ThreadPlanSP
+  QueueThreadPlanForRunToAddress(bool abort_other_plans, Address &target_addr,
+                                 bool stop_other_threads, Status &status);
+
+  virtual lldb::ThreadPlanSP QueueThreadPlanForStepUntil(
+      bool abort_other_plans, lldb::addr_t *address_list, size_t num_addresses,
+      bool stop_others, uint32_t frame_idx, Status &status);
+
+  virtual lldb::ThreadPlanSP
+  QueueThreadPlanForStepScripted(bool abort_other_plans, const char *class_name,
+                                 bool stop_other_threads, Status &status);
+
+  // Thread Plan accessors:
+
+  /// Gets the plan which will execute next on the plan stack.
+  ///
+  /// \return
+  ///     A pointer to the next executed plan.
+  ThreadPlan *GetCurrentPlan();
+
+  /// Unwinds the thread stack for the innermost expression plan currently
+  /// on the thread plan stack.
+  ///
+  /// \return
+  ///     An error if the thread plan could not be unwound.
+
+  Status UnwindInnermostExpression();
+
+  /// Gets the outer-most plan that was popped off the plan stack in the
+  /// most recent stop.  Useful for printing the stop reason accurately.
+  ///
+  /// \return
+  ///     A pointer to the last completed plan.
+  lldb::ThreadPlanSP GetCompletedPlan();
+
+  /// Gets the outer-most return value from the completed plans
+  ///
+  /// \return
+  ///     A ValueObjectSP, either empty if there is no return value,
+  ///     or containing the return value.
+  lldb::ValueObjectSP GetReturnValueObject();
+
+  /// Gets the outer-most expression variable from the completed plans
+  ///
+  /// \return
+  ///     A ExpressionVariableSP, either empty if there is no
+  ///     plan completed an expression during the current stop
+  ///     or the expression variable that was made for the completed expression.
+  lldb::ExpressionVariableSP GetExpressionVariable();
+
+  ///  Checks whether the given plan is in the completed plans for this
+  ///  stop.
+  ///
+  /// \param[in] plan
+  ///     Pointer to the plan you're checking.
+  ///
+  /// \return
+  ///     Returns true if the input plan is in the completed plan stack,
+  ///     false otherwise.
+  bool IsThreadPlanDone(ThreadPlan *plan);
+
+  ///  Checks whether the given plan is in the discarded plans for this
+  ///  stop.
+  ///
+  /// \param[in] plan
+  ///     Pointer to the plan you're checking.
+  ///
+  /// \return
+  ///     Returns true if the input plan is in the discarded plan stack,
+  ///     false otherwise.
+  bool WasThreadPlanDiscarded(ThreadPlan *plan);
+
+  /// Check if we have completed plan to override breakpoint stop reason
+  ///
+  /// \return
+  ///     Returns true if completed plan stack is not empty
+  ///     false otherwise.
+  bool CompletedPlanOverridesBreakpoint();
+
+  /// Queues a generic thread plan.
+  ///
+  /// \param[in] plan_sp
+  ///    The plan to queue.
+  ///
+  /// \param[in] abort_other_plans
+  ///    \b true if we discard the currently queued plans and replace them with
+  ///    this one.
+  ///    Otherwise this plan will go on the end of the plan stack.
+  ///
+  /// \return
+  ///     A pointer to the last completed plan.
+  Status QueueThreadPlan(lldb::ThreadPlanSP &plan_sp, bool abort_other_plans);
+
+  /// Discards the plans queued on the plan stack of the current thread.  This
+  /// is
+  /// arbitrated by the "Master" ThreadPlans, using the "OkayToDiscard" call.
+  //  But if \a force is true, all thread plans are discarded.
+  void DiscardThreadPlans(bool force);
+
+  /// Discards the plans queued on the plan stack of the current thread up to
+  /// and
+  /// including up_to_plan_sp.
+  //
+  // \param[in] up_to_plan_sp
+  //   Discard all plans up to and including this one.
+  void DiscardThreadPlansUpToPlan(lldb::ThreadPlanSP &up_to_plan_sp);
+
+  void DiscardThreadPlansUpToPlan(ThreadPlan *up_to_plan_ptr);
+
+  /// Discards the plans queued on the plan stack of the current thread up to
+  /// and
+  /// including the plan in that matches \a thread_index counting only
+  /// the non-Private plans.
+  ///
+  /// \param[in] up_to_plan_sp
+  ///   Discard all plans up to and including this user plan given by this
+  ///   index.
+  ///
+  /// \return
+  ///    \b true if there was a thread plan with that user index, \b false
+  ///    otherwise.
+  bool DiscardUserThreadPlansUpToIndex(uint32_t thread_index);
+
+  /// Prints the current plan stack.
+  ///
+  /// \param[in] s
+  ///    The stream to which to dump the plan stack info.
+  ///
+  void DumpThreadPlans(
+      Stream *s,
+      lldb::DescriptionLevel desc_level = lldb::eDescriptionLevelVerbose,
+      bool include_internal = true, bool ignore_boring = false) const;
+
+  virtual bool CheckpointThreadState(ThreadStateCheckpoint &saved_state);
+
+  virtual bool
+  RestoreRegisterStateFromCheckpoint(ThreadStateCheckpoint &saved_state);
+
+  virtual bool
+  RestoreThreadStateFromCheckpoint(ThreadStateCheckpoint &saved_state);
+
+  void EnableTracer(bool value, bool single_step);
+
+  void SetTracer(lldb::ThreadPlanTracerSP &tracer_sp);
+
+  // Get the thread index ID. The index ID that is guaranteed to not be re-used
+  // by a process. They start at 1 and increase with each new thread. This
+  // allows easy command line access by a unique ID that is easier to type than
+  // the actual system thread ID.
+  uint32_t GetIndexID() const;
+
+  // Get the originating thread's index ID.
+  // In the case of an "extended" thread -- a thread which represents the stack
+  // that enqueued/spawned work that is currently executing -- we need to
+  // provide the IndexID of the thread that actually did this work.  We don't
+  // want to just masquerade as that thread's IndexID by using it in our own
+  // IndexID because that way leads to madness - but the driver program which
+  // is iterating over extended threads may ask for the OriginatingThreadID to
+  // display that information to the user.
+  // Normal threads will return the same thing as GetIndexID();
+  virtual uint32_t GetExtendedBacktraceOriginatingIndexID() {
+    return GetIndexID();
+  }
+
+  // The API ID is often the same as the Thread::GetID(), but not in all cases.
+  // Thread::GetID() is the user visible thread ID that clients would want to
+  // see. The API thread ID is the thread ID that is used when sending data
+  // to/from the debugging protocol.
+  virtual lldb::user_id_t GetProtocolID() const { return GetID(); }
+
+  // lldb::ExecutionContextScope pure virtual functions
+  lldb::TargetSP CalculateTarget() override;
+
+  lldb::ProcessSP CalculateProcess() override;
+
+  lldb::ThreadSP CalculateThread() override;
+
+  lldb::StackFrameSP CalculateStackFrame() override;
+
+  void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
+
+  lldb::StackFrameSP
+  GetStackFrameSPForStackFramePtr(StackFrame *stack_frame_ptr);
+
+  size_t GetStatus(Stream &strm, uint32_t start_frame, uint32_t num_frames,
+                   uint32_t num_frames_with_source, bool stop_format,
+                   bool only_stacks = false);
+
+  size_t GetStackFrameStatus(Stream &strm, uint32_t first_frame,
+                             uint32_t num_frames, bool show_frame_info,
+                             uint32_t num_frames_with_source);
+
+  // We need a way to verify that even though we have a thread in a shared
+  // pointer that the object itself is still valid. Currently this won't be the
+  // case if DestroyThread() was called. DestroyThread is called when a thread
+  // has been removed from the Process' thread list.
+  bool IsValid() const { return !m_destroy_called; }
+
+  // Sets and returns a valid stop info based on the process stop ID and the
+  // current thread plan. If the thread stop ID does not match the process'
+  // stop ID, the private stop reason is not set and an invalid StopInfoSP may
+  // be returned.
+  //
+  // NOTE: This function must be called before the current thread plan is
+  // moved to the completed plan stack (in Thread::ShouldStop()).
+  //
+  // NOTE: If subclasses override this function, ensure they do not overwrite
+  // the m_actual_stop_info if it is valid.  The stop info may be a
+  // "checkpointed and restored" stop info, so if it is still around it is
+  // right even if you have not calculated this yourself, or if it disagrees
+  // with what you might have calculated.
+  virtual lldb::StopInfoSP GetPrivateStopInfo();
+
+  // Ask the thread subclass to set its stop info.
+  //
+  // Thread subclasses should call Thread::SetStopInfo(...) with the reason the
+  // thread stopped.
+  //
+  // \return
+  //      True if Thread::SetStopInfo(...) was called, false otherwise.
+  virtual bool CalculateStopInfo() = 0;
+
+  // Gets the temporary resume state for a thread.
+  //
+  // This value gets set in each thread by complex debugger logic in
+  // Thread::ShouldResume() and an appropriate thread resume state will get set
+  // in each thread every time the process is resumed prior to calling
+  // Process::DoResume(). The lldb_private::Process subclass should adhere to
+  // the thread resume state request which will be one of:
+  //
+  //  eStateRunning   - thread will resume when process is resumed
+  //  eStateStepping  - thread should step 1 instruction and stop when process
+  //                    is resumed
+  //  eStateSuspended - thread should not execute any instructions when
+  //                    process is resumed
+  lldb::StateType GetTemporaryResumeState() const {
+    return m_temporary_resume_state;
+  }
+
+  void SetStopInfo(const lldb::StopInfoSP &stop_info_sp);
+
+  void ResetStopInfo();
+
+  void SetShouldReportStop(Vote vote);
+
+  /// Sets the extended backtrace token for this thread
+  ///
+  /// Some Thread subclasses may maintain a token to help with providing
+  /// an extended backtrace.  The SystemRuntime plugin will set/request this.
+  ///
+  /// \param [in] token
+  virtual void SetExtendedBacktraceToken(uint64_t token) {}
+
+  /// Gets the extended backtrace token for this thread
+  ///
+  /// Some Thread subclasses may maintain a token to help with providing
+  /// an extended backtrace.  The SystemRuntime plugin will set/request this.
+  ///
+  /// \return
+  ///     The token needed by the SystemRuntime to create an extended backtrace.
+  ///     LLDB_INVALID_ADDRESS is returned if no token is available.
+  virtual uint64_t GetExtendedBacktraceToken() { return LLDB_INVALID_ADDRESS; }
+
+  lldb::ValueObjectSP GetCurrentException();
+
+  lldb::ThreadSP GetCurrentExceptionBacktrace();
+
+protected:
+  friend class ThreadPlan;
+  friend class ThreadList;
+  friend class ThreadEventData;
+  friend class StackFrameList;
+  friend class StackFrame;
+  friend class OperatingSystem;
+
+  // This is necessary to make sure thread assets get destroyed while the
+  // thread is still in good shape to call virtual thread methods.  This must
+  // be called by classes that derive from Thread in their destructor.
+  virtual void DestroyThread();
+
+  void PushPlan(lldb::ThreadPlanSP &plan_sp);
+
+  void PopPlan();
+
+  void DiscardPlan();
+
+  ThreadPlan *GetPreviousPlan(ThreadPlan *plan);
+
+  typedef std::vector<lldb::ThreadPlanSP> plan_stack;
+
+  virtual lldb_private::Unwind *GetUnwinder();
+
+  // Check to see whether the thread is still at the last breakpoint hit that
+  // stopped it.
+  virtual bool IsStillAtLastBreakpointHit();
+
+  // Some threads are threads that are made up by OperatingSystem plugins that
+  // are threads that exist and are context switched out into memory. The
+  // OperatingSystem plug-in need a ways to know if a thread is "real" or made
+  // up.
+  virtual bool IsOperatingSystemPluginThread() const { return false; }
+
+  // Subclasses that have a way to get an extended info dictionary for this
+  // thread should fill
+  virtual lldb_private::StructuredData::ObjectSP FetchThreadExtendedInfo() {
+    return StructuredData::ObjectSP();
+  }
+
+  lldb::StackFrameListSP GetStackFrameList();
+
+  void SetTemporaryResumeState(lldb::StateType new_state) {
+    m_temporary_resume_state = new_state;
+  }
+
+  void FunctionOptimizationWarning(lldb_private::StackFrame *frame);
+
+  // Classes that inherit from Process can see and modify these
+  lldb::ProcessWP m_process_wp;    ///< The process that owns this thread.
+  lldb::StopInfoSP m_stop_info_sp; ///< The private stop reason for this thread
+  uint32_t m_stop_info_stop_id; // This is the stop id for which the StopInfo is
+                                // valid.  Can use this so you know that
+  // the thread's m_stop_info_sp is current and you don't have to fetch it
+  // again
+  uint32_t m_stop_info_override_stop_id; // The stop ID containing the last time
+                                         // the stop info was checked against
+                                         // the stop info override
+  const uint32_t m_index_id; ///< A unique 1 based index assigned to each thread
+                             ///for easy UI/command line access.
+  lldb::RegisterContextSP m_reg_context_sp; ///< The register context for this
+                                            ///thread's current register state.
+  lldb::StateType m_state;                  ///< The state of our process.
+  mutable std::recursive_mutex
+      m_state_mutex;       ///< Multithreaded protection for m_state.
+  plan_stack m_plan_stack; ///< The stack of plans this thread is executing.
+  plan_stack m_completed_plan_stack; ///< Plans that have been completed by this
+                                     ///stop.  They get deleted when the thread
+                                     ///resumes.
+  plan_stack m_discarded_plan_stack; ///< Plans that have been discarded by this
+                                     ///stop.  They get deleted when the thread
+                                     ///resumes.
+  mutable std::recursive_mutex
+      m_frame_mutex; ///< Multithreaded protection for m_state.
+  lldb::StackFrameListSP m_curr_frames_sp; ///< The stack frames that get lazily
+                                           ///populated after a thread stops.
+  lldb::StackFrameListSP m_prev_frames_sp; ///< The previous stack frames from
+                                           ///the last time this thread stopped.
+  int m_resume_signal; ///< The signal that should be used when continuing this
+                       ///thread.
+  lldb::StateType m_resume_state; ///< This state is used to force a thread to
+                                  ///be suspended from outside the ThreadPlan
+                                  ///logic.
+  lldb::StateType m_temporary_resume_state; ///< This state records what the
+                                            ///thread was told to do by the
+                                            ///thread plan logic for the current
+                                            ///resume.
+  /// It gets set in Thread::ShouldResume.
+  std::unique_ptr<lldb_private::Unwind> m_unwinder_up;
+  bool m_destroy_called; // This is used internally to make sure derived Thread
+                         // classes call DestroyThread.
+  LazyBool m_override_should_notify;
+
+private:
+  bool m_extended_info_fetched; // Have we tried to retrieve the m_extended_info
+                                // for this thread?
+  StructuredData::ObjectSP m_extended_info; // The extended info for this thread
+
+private:
+  bool PlanIsBasePlan(ThreadPlan *plan_ptr);
+
+  void BroadcastSelectedFrameChange(StackID &new_frame_id);
+
+  DISALLOW_COPY_AND_ASSIGN(Thread);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Thread_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadCollection.h b/linux-x64/clang/include/lldb/Target/ThreadCollection.h
new file mode 100644
index 0000000..29ea827
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadCollection.h
@@ -0,0 +1,59 @@
+//===-- ThreadCollection.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadCollection_h_
+#define liblldb_ThreadCollection_h_
+
+#include <mutex>
+#include <vector>
+
+#include "lldb/Utility/Iterable.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class ThreadCollection {
+public:
+  typedef std::vector<lldb::ThreadSP> collection;
+  typedef LockingAdaptedIterable<collection, lldb::ThreadSP, vector_adapter,
+                                 std::recursive_mutex>
+      ThreadIterable;
+
+  ThreadCollection();
+
+  ThreadCollection(collection threads);
+
+  virtual ~ThreadCollection() {}
+
+  uint32_t GetSize();
+
+  void AddThread(const lldb::ThreadSP &thread_sp);
+
+  void AddThreadSortedByIndexID(const lldb::ThreadSP &thread_sp);
+
+  void InsertThread(const lldb::ThreadSP &thread_sp, uint32_t idx);
+
+  // Note that "idx" is not the same as the "thread_index". It is a zero based
+  // index to accessing the current threads, whereas "thread_index" is a unique
+  // index assigned
+  lldb::ThreadSP GetThreadAtIndex(uint32_t idx);
+
+  virtual ThreadIterable Threads() {
+    return ThreadIterable(m_threads, GetMutex());
+  }
+
+  virtual std::recursive_mutex &GetMutex() const { return m_mutex; }
+
+protected:
+  collection m_threads;
+  mutable std::recursive_mutex m_mutex;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadCollection_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadList.h b/linux-x64/clang/include/lldb/Target/ThreadList.h
new file mode 100644
index 0000000..64ddf5a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadList.h
@@ -0,0 +1,159 @@
+//===-- ThreadList.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadList_h_
+#define liblldb_ThreadList_h_
+
+#include <mutex>
+#include <vector>
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadCollection.h"
+#include "lldb/Utility/Iterable.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+// This is a thread list with lots of functionality for use only by the process
+// for which this is the thread list.  A generic container class with iterator
+// functionality is ThreadCollection.
+class ThreadList : public ThreadCollection {
+  friend class Process;
+
+public:
+  ThreadList(Process *process);
+
+  ThreadList(const ThreadList &rhs);
+
+  ~ThreadList() override;
+
+  const ThreadList &operator=(const ThreadList &rhs);
+
+  uint32_t GetSize(bool can_update = true);
+
+  // Return the selected thread if there is one.  Otherwise, return the thread
+  // selected at index 0.
+  lldb::ThreadSP GetSelectedThread();
+
+  // Manage the thread to use for running expressions.  This is usually the
+  // Selected thread, but sometimes (e.g. when evaluating breakpoint conditions
+  // & stop hooks) it isn't.
+  class ExpressionExecutionThreadPusher {
+  public:
+    ExpressionExecutionThreadPusher(ThreadList &thread_list, lldb::tid_t tid)
+        : m_thread_list(&thread_list), m_tid(tid) {
+      m_thread_list->PushExpressionExecutionThread(m_tid);
+    }
+
+    ExpressionExecutionThreadPusher(lldb::ThreadSP thread_sp);
+
+    ~ExpressionExecutionThreadPusher() {
+      if (m_thread_list && m_tid != LLDB_INVALID_THREAD_ID)
+        m_thread_list->PopExpressionExecutionThread(m_tid);
+    }
+
+  private:
+    ThreadList *m_thread_list;
+    lldb::tid_t m_tid;
+  };
+
+  lldb::ThreadSP GetExpressionExecutionThread();
+
+protected:
+  void PushExpressionExecutionThread(lldb::tid_t tid);
+
+  void PopExpressionExecutionThread(lldb::tid_t tid);
+
+public:
+  bool SetSelectedThreadByID(lldb::tid_t tid, bool notify = false);
+
+  bool SetSelectedThreadByIndexID(uint32_t index_id, bool notify = false);
+
+  void Clear();
+
+  void Flush();
+
+  void Destroy();
+
+  // Note that "idx" is not the same as the "thread_index". It is a zero based
+  // index to accessing the current threads, whereas "thread_index" is a unique
+  // index assigned
+  lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update = true);
+
+  lldb::ThreadSP FindThreadByID(lldb::tid_t tid, bool can_update = true);
+
+  lldb::ThreadSP FindThreadByProtocolID(lldb::tid_t tid,
+                                        bool can_update = true);
+
+  lldb::ThreadSP RemoveThreadByID(lldb::tid_t tid, bool can_update = true);
+
+  lldb::ThreadSP RemoveThreadByProtocolID(lldb::tid_t tid,
+                                          bool can_update = true);
+
+  lldb::ThreadSP FindThreadByIndexID(uint32_t index_id, bool can_update = true);
+
+  lldb::ThreadSP GetThreadSPForThreadPtr(Thread *thread_ptr);
+
+  lldb::ThreadSP GetBackingThread(const lldb::ThreadSP &real_thread);
+
+  bool ShouldStop(Event *event_ptr);
+
+  Vote ShouldReportStop(Event *event_ptr);
+
+  Vote ShouldReportRun(Event *event_ptr);
+
+  void RefreshStateAfterStop();
+
+  /// The thread list asks tells all the threads it is about to resume.
+  /// If a thread can "resume" without having to resume the target, it
+  /// will return false for WillResume, and then the process will not be
+  /// restarted.
+  ///
+  /// \return
+  ///    \b true instructs the process to resume normally,
+  ///    \b false means start & stopped events will be generated, but
+  ///    the process will not actually run.  The thread must then return
+  ///    the correct StopInfo when asked.
+  ///
+  bool WillResume();
+
+  void DidResume();
+
+  void DidStop();
+
+  void DiscardThreadPlans();
+
+  uint32_t GetStopID() const;
+
+  void SetStopID(uint32_t stop_id);
+
+  std::recursive_mutex &GetMutex() const override;
+
+  void Update(ThreadList &rhs);
+
+protected:
+  void SetShouldReportStop(Vote vote);
+
+  void NotifySelectedThreadChanged(lldb::tid_t tid);
+
+  // Classes that inherit from Process can see and modify these
+  Process *m_process; ///< The process that manages this thread list.
+  uint32_t
+      m_stop_id; ///< The process stop ID that this thread list is valid for.
+  lldb::tid_t
+      m_selected_tid; ///< For targets that need the notion of a current thread.
+  std::vector<lldb::tid_t> m_expression_tid_stack;
+
+private:
+  ThreadList() = delete;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadList_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlan.h b/linux-x64/clang/include/lldb/Target/ThreadPlan.h
new file mode 100644
index 0000000..ff87ed2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlan.h
@@ -0,0 +1,649 @@
+//===-- ThreadPlan.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlan_h_
+#define liblldb_ThreadPlan_h_
+
+#include <mutex>
+#include <string>
+
+#include "lldb/Target/Process.h"
+#include "lldb/Target/StopInfo.h"
+#include "lldb/Target/Target.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlanTracer.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+//  ThreadPlan:
+//  This is the pure virtual base class for thread plans.
+//
+//  The thread plans provide the "atoms" of behavior that
+//  all the logical process control, either directly from commands or through
+//  more complex composite plans will rely on.
+//
+//  Plan Stack:
+//
+//  The thread maintaining a thread plan stack, and you program the actions of a
+//  particular thread
+//  by pushing plans onto the plan stack.
+//  There is always a "Current" plan, which is the top of the plan stack,
+//  though in some cases
+//  a plan may defer to plans higher in the stack for some piece of information
+//  (let us define that the plan stack grows downwards).
+//
+//  The plan stack is never empty, there is always a Base Plan which persists
+//  through the life
+//  of the running process.
+//
+//
+//  Creating Plans:
+//
+//  The thread plan is generally created and added to the plan stack through the
+//  QueueThreadPlanFor... API
+//  in lldb::Thread.  Those API's will return the plan that performs the named
+//  operation in a manner
+//  appropriate for the current process.  The plans in lldb/source/Target are
+//  generic
+//  implementations, but a Process plugin can override them.
+//
+//  ValidatePlan is then called.  If it returns false, the plan is unshipped.
+//  This is a little
+//  convenience which keeps us from having to error out of the constructor.
+//
+//  Then the plan is added to the plan stack.  When the plan is added to the
+//  plan stack its DidPush
+//  will get called.  This is useful if a plan wants to push any additional
+//  plans as it is constructed,
+//  since you need to make sure you're already on the stack before you push
+//  additional plans.
+//
+//  Completed Plans:
+//
+//  When the target process stops the plans are queried, among other things, for
+//  whether their job is done.
+//  If it is they are moved from the plan stack to the Completed Plan stack in
+//  reverse order from their position
+//  on the plan stack (since multiple plans may be done at a given stop.)  This
+//  is used primarily so that
+//  the lldb::Thread::StopInfo for the thread can be set properly.  If one plan
+//  pushes another to achieve part of
+//  its job, but it doesn't want that sub-plan to be the one that sets the
+//  StopInfo, then call SetPrivate on the
+//  sub-plan when you create it, and the Thread will pass over that plan in
+//  reporting the reason for the stop.
+//
+//  Discarded plans:
+//
+//  Your plan may also get discarded, i.e. moved from the plan stack to the
+//  "discarded plan stack".  This can
+//  happen, for instance, if the plan is calling a function and the function
+//  call crashes and you want
+//  to unwind the attempt to call.  So don't assume that your plan will always
+//  successfully stop.  Which leads to:
+//
+//  Cleaning up after your plans:
+//
+//  When the plan is moved from the plan stack its WillPop method is always
+//  called, no matter why.  Once it is
+//  moved off the plan stack it is done, and won't get a chance to run again.
+//  So you should
+//  undo anything that affects target state in this method.  But be sure to
+//  leave the plan able to correctly
+//  fill the StopInfo, however.
+//  N.B. Don't wait to do clean up target state till the destructor, since that
+//  will usually get called when
+//  the target resumes, and you want to leave the target state correct for new
+//  plans in the time between when
+//  your plan gets unshipped and the next resume.
+//
+//  Thread State Checkpoint:
+//
+//  Note that calling functions on target process (ThreadPlanCallFunction) changes
+//  current thread state. The function can be called either by direct user demand or
+//  internally, for example lldb allocates memory on device to calculate breakpoint
+//  condition expression - on Linux it is performed by calling mmap on device.
+//  ThreadStateCheckpoint saves Thread state (stop info and completed
+//  plan stack) to restore it after completing function call.
+//
+//  Over the lifetime of the plan, various methods of the ThreadPlan are then
+//  called in response to changes of state in
+//  the process we are debugging as follows:
+//
+//  Resuming:
+//
+//  When the target process is about to be restarted, the plan's WillResume
+//  method is called,
+//  giving the plan a chance to prepare for the run.  If WillResume returns
+//  false, then the
+//  process is not restarted.  Be sure to set an appropriate error value in the
+//  Process if
+//  you have to do this.  Note, ThreadPlans actually implement DoWillResume,
+//  WillResume wraps that call.
+//
+//  Next the "StopOthers" method of all the threads are polled, and if one
+//  thread's Current plan
+//  returns "true" then only that thread gets to run.  If more than one returns
+//  "true" the threads that want to run solo
+//  get run one by one round robin fashion.  Otherwise all are let to run.
+//
+//  Note, the way StopOthers is implemented, the base class implementation just
+//  asks the previous plan.  So if your plan
+//  has no opinion about whether it should run stopping others or not, just
+//  don't implement StopOthers, and the parent
+//  will be asked.
+//
+//  Finally, for each thread that is running, it run state is set to the return
+//  of RunState from the
+//  thread's Current plan.
+//
+//  Responding to a stop:
+//
+//  When the target process stops, the plan is called in the following stages:
+//
+//  First the thread asks the Current Plan if it can handle this stop by calling
+//  PlanExplainsStop.
+//  If the Current plan answers "true" then it is asked if the stop should
+//  percolate all the way to the
+//  user by calling the ShouldStop method.  If the current plan doesn't explain
+//  the stop, then we query up
+//  the plan stack for a plan that does explain the stop.  The plan that does
+//  explain the stop then needs to
+//  figure out what to do about the plans below it in the stack.  If the stop is
+//  recoverable, then the plan that
+//  understands it can just do what it needs to set up to restart, and then
+//  continue.
+//  Otherwise, the plan that understood the stop should call DiscardPlanStack to
+//  clean up the stack below it.
+//  Note, plans actually implement DoPlanExplainsStop, the result is cached in
+//  PlanExplainsStop so the DoPlanExplainsStop
+//  itself will only get called once per stop.
+//
+//  Master plans:
+//
+//  In the normal case, when we decide to stop, we will  collapse the plan stack
+//  up to the point of the plan that understood
+//  the stop reason.  However, if a plan wishes to stay on the stack after an
+//  event it didn't directly handle
+//  it can designate itself a "Master" plan by responding true to IsMasterPlan,
+//  and then if it wants not to be
+//  discarded, it can return false to OkayToDiscard, and it and all its dependent
+//  plans will be preserved when
+//  we resume execution.
+//
+//  The other effect of being a master plan is that when the Master plan is done
+//  , if it has set "OkayToDiscard" to false,
+//  then it will be popped & execution will stop and return to the user.
+//  Remember that if OkayToDiscard is false, the
+//  plan will be popped and control will be given to the next plan above it on
+//  the stack  So setting OkayToDiscard to
+//  false means the user will regain control when the MasterPlan is completed.
+//
+//  Between these two controls this allows things like: a MasterPlan/DontDiscard
+//  Step Over to hit a breakpoint, stop and
+//  return control to the user, but then when the user continues, the step out
+//  succeeds.
+//  Even more tricky, when the breakpoint is hit, the user can continue to step
+//  in/step over/etc, and finally when they
+//  continue, they will finish up the Step Over.
+//
+//  FIXME: MasterPlan & OkayToDiscard aren't really orthogonal.  MasterPlan
+//  designation means that this plan controls
+//  it's fate and the fate of plans below it.  OkayToDiscard tells whether the
+//  MasterPlan wants to stay on the stack.  I
+//  originally thought "MasterPlan-ness" would need to be a fixed characteristic
+//  of a ThreadPlan, in which case you needed
+//  the extra control.  But that doesn't seem to be true.  So we should be able
+//  to convert to only MasterPlan status to mean
+//  the current "MasterPlan/DontDiscard".  Then no plans would be MasterPlans by
+//  default, and you would set the ones you
+//  wanted to be "user level" in this way.
+//
+//
+//  Actually Stopping:
+//
+//  If a plan says responds "true" to ShouldStop, then it is asked if it's job
+//  is complete by calling
+//  MischiefManaged.  If that returns true, the plan is popped from the plan
+//  stack and added to the
+//  Completed Plan Stack.  Then the next plan in the stack is asked if it
+//  ShouldStop, and  it returns "true",
+//  it is asked if it is done, and if yes popped, and so on till we reach a plan
+//  that is not done.
+//
+//  Since you often know in the ShouldStop method whether your plan is complete,
+//  as a convenience you can call
+//  SetPlanComplete and the ThreadPlan implementation of MischiefManaged will
+//  return "true", without your having
+//  to redo the calculation when your sub-classes MischiefManaged is called.  If
+//  you call SetPlanComplete, you can
+//  later use IsPlanComplete to determine whether the plan is complete.  This is
+//  only a convenience for sub-classes,
+//  the logic in lldb::Thread will only call MischiefManaged.
+//
+//  One slightly tricky point is you have to be careful using SetPlanComplete in
+//  PlanExplainsStop because you
+//  are not guaranteed that PlanExplainsStop for a plan will get called before
+//  ShouldStop gets called.  If your sub-plan
+//  explained the stop and then popped itself, only your ShouldStop will get
+//  called.
+//
+//  If ShouldStop for any thread returns "true", then the WillStop method of the
+//  Current plan of
+//  all threads will be called, the stop event is placed on the Process's public
+//  broadcaster, and
+//  control returns to the upper layers of the debugger.
+//
+//  Reporting the stop:
+//
+//  When the process stops, the thread is given a StopReason, in the form of a
+//  StopInfo object.  If there is a completed
+//  plan corresponding to the stop, then the "actual" stop reason can be
+//  suppressed, and instead a StopInfoThreadPlan
+//  object will be cons'ed up from the top completed plan in the stack.
+//  However, if the plan doesn't want to be
+//  the stop reason, then it can call SetPlanComplete and pass in "false" for
+//  the "success" parameter.  In that case,
+//  the real stop reason will be used instead.  One exapmle of this is the
+//  "StepRangeStepIn" thread plan.  If it stops
+//  because of a crash or breakpoint hit, it wants to unship itself, because it
+//  isn't so useful to have step in keep going
+//  after a breakpoint hit.  But it can't be the reason for the stop or no-one
+//  would see that they had hit a breakpoint.
+//
+//  Cleaning up the plan stack:
+//
+//  One of the complications of MasterPlans is that you may get past the limits
+//  of a plan without triggering it to clean
+//  itself up.  For instance, if you are doing a MasterPlan StepOver, and hit a
+//  breakpoint in a called function, then
+//  step over enough times to step out of the initial StepOver range, each of
+//  the step overs will explain the stop &
+//  take themselves off the stack, but control would never be returned to the
+//  original StepOver.  Eventually, the user
+//  will continue, and when that continue stops, the old stale StepOver plan
+//  that was left on the stack will get woken
+//  up and notice it is done. But that can leave junk on the stack for a while.
+//  To avoid that, the plans implement a
+//  "IsPlanStale" method, that can check whether it is relevant anymore.  On
+//  stop, after the regular plan negotiation,
+//  the remaining plan stack is consulted and if any plan says it is stale, it
+//  and the plans below it are discarded from
+//  the stack.
+//
+//  Automatically Resuming:
+//
+//  If ShouldStop for all threads returns "false", then the target process will
+//  resume.  This then cycles back to
+//  Resuming above.
+//
+//  Reporting eStateStopped events when the target is restarted:
+//
+//  If a plan decides to auto-continue the target by returning "false" from
+//  ShouldStop, then it will be asked
+//  whether the Stopped event should still be reported.  For instance, if you
+//  hit a breakpoint that is a User set
+//  breakpoint, but the breakpoint callback said to continue the target process,
+//  you might still want to inform
+//  the upper layers of lldb that the stop had happened.
+//  The way this works is every thread gets to vote on whether to report the
+//  stop.  If all votes are eVoteNoOpinion,
+//  then the thread list will decide what to do (at present it will pretty much
+//  always suppress these stopped events.)
+//  If there is an eVoteYes, then the event will be reported regardless of the
+//  other votes.  If there is an eVoteNo
+//  and no eVoteYes's, then the event won't be reported.
+//
+//  One other little detail here, sometimes a plan will push another plan onto
+//  the plan stack to do some part of
+//  the first plan's job, and it would be convenient to tell that plan how it
+//  should respond to ShouldReportStop.
+//  You can do that by setting the stop_vote in the child plan when you create
+//  it.
+//
+//  Suppressing the initial eStateRunning event:
+//
+//  The private process running thread will take care of ensuring that only one
+//  "eStateRunning" event will be
+//  delivered to the public Process broadcaster per public eStateStopped event.
+//  However there are some cases
+//  where the public state of this process is eStateStopped, but a thread plan
+//  needs to restart the target, but
+//  doesn't want the running event to be publicly broadcast.  The obvious
+//  example of this is running functions
+//  by hand as part of expression evaluation.  To suppress the running event
+//  return eVoteNo from ShouldReportStop,
+//  to force a running event to be reported return eVoteYes, in general though
+//  you should return eVoteNoOpinion
+//  which will allow the ThreadList to figure out the right thing to do.
+//  The run_vote argument to the constructor works like stop_vote, and is a way
+//  for a plan to instruct a sub-plan
+//  on how to respond to ShouldReportStop.
+//
+
+class ThreadPlan : public std::enable_shared_from_this<ThreadPlan>,
+                   public UserID {
+public:
+  enum ThreadScope { eAllThreads, eSomeThreads, eThisThread };
+
+  // We use these enums so that we can cast a base thread plan to it's real
+  // type without having to resort to dynamic casting.
+  enum ThreadPlanKind {
+    eKindGeneric,
+    eKindNull,
+    eKindBase,
+    eKindCallFunction,
+    eKindPython,
+    eKindStepInstruction,
+    eKindStepOut,
+    eKindStepOverBreakpoint,
+    eKindStepOverRange,
+    eKindStepInRange,
+    eKindRunToAddress,
+    eKindStepThrough,
+    eKindStepUntil,
+    eKindTestCondition
+
+  };
+
+  // Constructors and Destructors
+  ThreadPlan(ThreadPlanKind kind, const char *name, Thread &thread,
+             Vote stop_vote, Vote run_vote);
+
+  virtual ~ThreadPlan();
+
+  /// Returns the name of this thread plan.
+  ///
+  /// \return
+  ///   A const char * pointer to the thread plan's name.
+  const char *GetName() const { return m_name.c_str(); }
+
+  /// Returns the Thread that is using this thread plan.
+  ///
+  /// \return
+  ///   A  pointer to the thread plan's owning thread.
+  Thread &GetThread() { return m_thread; }
+
+  const Thread &GetThread() const { return m_thread; }
+
+  Target &GetTarget() { return m_thread.GetProcess()->GetTarget(); }
+
+  const Target &GetTarget() const { return m_thread.GetProcess()->GetTarget(); }
+
+  /// Print a description of this thread to the stream \a s.
+  /// \a thread.
+  ///
+  /// \param[in] s
+  ///    The stream to which to print the description.
+  ///
+  /// \param[in] level
+  ///    The level of description desired.  Note that eDescriptionLevelBrief
+  ///    will be used in the stop message printed when the plan is complete.
+  virtual void GetDescription(Stream *s, lldb::DescriptionLevel level) = 0;
+
+  /// Returns whether this plan could be successfully created.
+  ///
+  /// \param[in] error
+  ///    A stream to which to print some reason why the plan could not be
+  ///    created.
+  ///    Can be NULL.
+  ///
+  /// \return
+  ///   \b true if the plan should be queued, \b false otherwise.
+  virtual bool ValidatePlan(Stream *error) = 0;
+
+  bool TracerExplainsStop() {
+    if (!m_tracer_sp)
+      return false;
+    else
+      return m_tracer_sp->TracerExplainsStop();
+  }
+
+  lldb::StateType RunState();
+
+  bool PlanExplainsStop(Event *event_ptr);
+
+  virtual bool ShouldStop(Event *event_ptr) = 0;
+
+  virtual bool ShouldAutoContinue(Event *event_ptr) { return false; }
+
+  // Whether a "stop class" event should be reported to the "outside world".
+  // In general if a thread plan is active, events should not be reported.
+
+  virtual Vote ShouldReportStop(Event *event_ptr);
+
+  virtual Vote ShouldReportRun(Event *event_ptr);
+
+  virtual void SetStopOthers(bool new_value);
+
+  virtual bool StopOthers();
+
+  // This is the wrapper for DoWillResume that does generic ThreadPlan logic,
+  // then calls DoWillResume.
+  bool WillResume(lldb::StateType resume_state, bool current_plan);
+
+  virtual bool WillStop() = 0;
+
+  bool IsMasterPlan() { return m_is_master_plan; }
+
+  bool SetIsMasterPlan(bool value) {
+    bool old_value = m_is_master_plan;
+    m_is_master_plan = value;
+    return old_value;
+  }
+
+  virtual bool OkayToDiscard();
+
+  void SetOkayToDiscard(bool value) { m_okay_to_discard = value; }
+
+  // The base class MischiefManaged does some cleanup - so you have to call it
+  // in your MischiefManaged derived class.
+  virtual bool MischiefManaged();
+
+  virtual void ThreadDestroyed() {
+    // Any cleanup that a plan might want to do in case the thread goes away in
+    // the middle of the plan being queued on a thread can be done here.
+  }
+
+  bool GetPrivate() { return m_plan_private; }
+
+  void SetPrivate(bool input) { m_plan_private = input; }
+
+  virtual void DidPush();
+
+  virtual void WillPop();
+
+  // This pushes a plan onto the plan stack of the current plan's thread.
+  void PushPlan(lldb::ThreadPlanSP &thread_plan_sp) {
+    m_thread.PushPlan(thread_plan_sp);
+  }
+
+  ThreadPlanKind GetKind() const { return m_kind; }
+
+  bool IsPlanComplete();
+
+  void SetPlanComplete(bool success = true);
+
+  virtual bool IsPlanStale() { return false; }
+
+  bool PlanSucceeded() { return m_plan_succeeded; }
+
+  virtual bool IsBasePlan() { return false; }
+
+  lldb::ThreadPlanTracerSP &GetThreadPlanTracer() { return m_tracer_sp; }
+
+  void SetThreadPlanTracer(lldb::ThreadPlanTracerSP new_tracer_sp) {
+    m_tracer_sp = new_tracer_sp;
+  }
+
+  void DoTraceLog() {
+    if (m_tracer_sp && m_tracer_sp->TracingEnabled())
+      m_tracer_sp->Log();
+  }
+
+  // Some thread plans hide away the actual stop info which caused any
+  // particular stop.  For instance the ThreadPlanCallFunction restores the
+  // original stop reason so that stopping and calling a few functions won't
+  // lose the history of the run. This call can be implemented to get you back
+  // to the real stop info.
+  virtual lldb::StopInfoSP GetRealStopInfo() { return m_thread.GetStopInfo(); }
+
+  // If the completion of the thread plan stepped out of a function, the return
+  // value of the function might have been captured by the thread plan
+  // (currently only ThreadPlanStepOut does this.) If so, the ReturnValueObject
+  // can be retrieved from here.
+
+  virtual lldb::ValueObjectSP GetReturnValueObject() {
+    return lldb::ValueObjectSP();
+  }
+
+  // If the thread plan managing the evaluation of a user expression lives
+  // longer than the command that instigated the expression (generally because
+  // the expression evaluation hit a breakpoint, and the user regained control
+  // at that point) a subsequent process control command step/continue/etc.
+  // might complete the expression evaluations.  If so, the result of the
+  // expression evaluation will show up here.
+
+  virtual lldb::ExpressionVariableSP GetExpressionVariable() {
+    return lldb::ExpressionVariableSP();
+  }
+
+  // If a thread plan stores the state before it was run, then you might want
+  // to restore the state when it is done.  This will do that job. This is
+  // mostly useful for artificial plans like CallFunction plans.
+
+  virtual bool RestoreThreadState() {
+    // Nothing to do in general.
+    return true;
+  }
+
+  virtual bool IsVirtualStep() { return false; }
+
+  virtual bool SetIterationCount(size_t count) {
+    if (m_takes_iteration_count) {
+      // Don't tell me to do something 0 times...
+      if (count == 0)
+        return false;
+      m_iteration_count = count;
+    }
+    return m_takes_iteration_count;
+  }
+
+  virtual size_t GetIterationCount() {
+    if (!m_takes_iteration_count)
+      return 0;
+    else
+      return m_iteration_count;
+  }
+
+protected:
+  // Classes that inherit from ThreadPlan can see and modify these
+
+  virtual bool DoWillResume(lldb::StateType resume_state, bool current_plan) {
+    return true;
+  }
+
+  virtual bool DoPlanExplainsStop(Event *event_ptr) = 0;
+
+  // This gets the previous plan to the current plan (for forwarding requests).
+  // This is mostly a formal requirement, it allows us to make the Thread's
+  // GetPreviousPlan protected, but only friend ThreadPlan to thread.
+
+  ThreadPlan *GetPreviousPlan() { return m_thread.GetPreviousPlan(this); }
+
+  // This forwards the private Thread::GetPrivateStopInfo which is generally
+  // what ThreadPlan's need to know.
+
+  lldb::StopInfoSP GetPrivateStopInfo() {
+    return m_thread.GetPrivateStopInfo();
+  }
+
+  void SetStopInfo(lldb::StopInfoSP stop_reason_sp) {
+    m_thread.SetStopInfo(stop_reason_sp);
+  }
+
+  void CachePlanExplainsStop(bool does_explain) {
+    m_cached_plan_explains_stop = does_explain ? eLazyBoolYes : eLazyBoolNo;
+  }
+
+  LazyBool GetCachedPlanExplainsStop() const {
+    return m_cached_plan_explains_stop;
+  }
+
+  virtual lldb::StateType GetPlanRunState() = 0;
+
+  bool IsUsuallyUnexplainedStopReason(lldb::StopReason);
+
+  Status m_status;
+  Thread &m_thread;
+  Vote m_stop_vote;
+  Vote m_run_vote;
+  bool m_takes_iteration_count;
+  bool m_could_not_resolve_hw_bp;
+  int32_t m_iteration_count = 1;
+
+private:
+  // For ThreadPlan only
+  static lldb::user_id_t GetNextID();
+
+  ThreadPlanKind m_kind;
+  std::string m_name;
+  std::recursive_mutex m_plan_complete_mutex;
+  LazyBool m_cached_plan_explains_stop;
+  bool m_plan_complete;
+  bool m_plan_private;
+  bool m_okay_to_discard;
+  bool m_is_master_plan;
+  bool m_plan_succeeded;
+
+  lldb::ThreadPlanTracerSP m_tracer_sp;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlan);
+};
+
+// ThreadPlanNull:
+// Threads are assumed to always have at least one plan on the plan stack. This
+// is put on the plan stack when a thread is destroyed so that if you
+// accidentally access a thread after it is destroyed you won't crash. But
+// asking questions of the ThreadPlanNull is definitely an error.
+
+class ThreadPlanNull : public ThreadPlan {
+public:
+  ThreadPlanNull(Thread &thread);
+  ~ThreadPlanNull() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+  bool ValidatePlan(Stream *error) override;
+
+  bool ShouldStop(Event *event_ptr) override;
+
+  bool MischiefManaged() override;
+
+  bool WillStop() override;
+
+  bool IsBasePlan() override { return true; }
+
+  bool OkayToDiscard() override { return false; }
+
+  const Status &GetStatus() { return m_status; }
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  lldb::StateType GetPlanRunState() override;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanNull);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlan_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanBase.h b/linux-x64/clang/include/lldb/Target/ThreadPlanBase.h
new file mode 100644
index 0000000..bc92a06
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanBase.h
@@ -0,0 +1,55 @@
+//===-- ThreadPlanBase.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanFundamental_h_
+#define liblldb_ThreadPlanFundamental_h_
+
+#include "lldb/Target/Process.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+
+namespace lldb_private {
+
+//  Base thread plans:
+//  This is the generic version of the bottom most plan on the plan stack.  It
+//  should
+//  be able to handle generic breakpoint hitting, and signals and exceptions.
+
+class ThreadPlanBase : public ThreadPlan {
+  friend class Process; // RunThreadPlan manages "stopper" base plans.
+public:
+  ~ThreadPlanBase() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+  bool ValidatePlan(Stream *error) override;
+  bool ShouldStop(Event *event_ptr) override;
+  Vote ShouldReportStop(Event *event_ptr) override;
+  bool StopOthers() override;
+  lldb::StateType GetPlanRunState() override;
+  bool WillStop() override;
+  bool MischiefManaged() override;
+
+  bool OkayToDiscard() override { return false; }
+
+  bool IsBasePlan() override { return true; }
+
+protected:
+  bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+  ThreadPlanBase(Thread &thread);
+
+private:
+  friend lldb::ThreadPlanSP
+  Thread::QueueFundamentalPlan(bool abort_other_plans);
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanBase);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanFundamental_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanCallFunction.h b/linux-x64/clang/include/lldb/Target/ThreadPlanCallFunction.h
new file mode 100644
index 0000000..685160a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanCallFunction.h
@@ -0,0 +1,154 @@
+//===-- ThreadPlanCallFunction.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanCallFunction_h_
+#define liblldb_ThreadPlanCallFunction_h_
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+
+namespace lldb_private {
+
+class ThreadPlanCallFunction : public ThreadPlan {
+  // Create a thread plan to call a function at the address passed in the
+  // "function" argument.  If you plan to call GetReturnValueObject, then pass
+  // in the return type, otherwise just pass in an invalid CompilerType.
+public:
+  ThreadPlanCallFunction(Thread &thread, const Address &function,
+                         const CompilerType &return_type,
+                         llvm::ArrayRef<lldb::addr_t> args,
+                         const EvaluateExpressionOptions &options);
+
+  ThreadPlanCallFunction(Thread &thread, const Address &function,
+                         const EvaluateExpressionOptions &options);
+
+  ~ThreadPlanCallFunction() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+  bool ValidatePlan(Stream *error) override;
+
+  bool ShouldStop(Event *event_ptr) override;
+
+  Vote ShouldReportStop(Event *event_ptr) override;
+
+  bool StopOthers() override;
+
+  lldb::StateType GetPlanRunState() override;
+
+  void DidPush() override;
+
+  bool WillStop() override;
+
+  bool MischiefManaged() override;
+
+  // To get the return value from a function call you must create a
+  // lldb::ValueSP that contains a valid clang type in its context and call
+  // RequestReturnValue. The ValueSP will be stored and when the function is
+  // done executing, the object will check if there is a requested return
+  // value. If there is, the return value will be retrieved using the
+  // ABI::GetReturnValue() for the ABI in the process. Then after the thread
+  // plan is complete, you can call "GetReturnValue()" to retrieve the value
+  // that was extracted.
+
+  lldb::ValueObjectSP GetReturnValueObject() override {
+    return m_return_valobj_sp;
+  }
+
+  // Return the stack pointer that the function received on entry.  Any stack
+  // address below this should be considered invalid after the function has
+  // been cleaned up.
+  lldb::addr_t GetFunctionStackPointer() { return m_function_sp; }
+
+  // Classes that derive from FunctionCaller, and implement their own WillPop
+  // methods should call this so that the thread state gets restored if the
+  // plan gets discarded.
+  void WillPop() override;
+
+  // If the thread plan stops mid-course, this will be the stop reason that
+  // interrupted us. Once DoTakedown is called, this will be the real stop
+  // reason at the end of the function call. If it hasn't been set for one or
+  // the other of these reasons, we'll return the PrivateStopReason. This is
+  // needed because we want the CallFunction thread plans not to show up as the
+  // stop reason. But if something bad goes wrong, it is nice to be able to
+  // tell the user what really happened.
+
+  lldb::StopInfoSP GetRealStopInfo() override {
+    if (m_real_stop_info_sp)
+      return m_real_stop_info_sp;
+    else
+      return GetPrivateStopInfo();
+  }
+
+  lldb::addr_t GetStopAddress() { return m_stop_address; }
+
+  bool RestoreThreadState() override;
+
+  void ThreadDestroyed() override { m_takedown_done = true; }
+
+  void SetStopOthers(bool new_value) override;
+
+protected:
+  void ReportRegisterState(const char *message);
+
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  virtual void SetReturnValue();
+
+  bool ConstructorSetup(Thread &thread, ABI *&abi,
+                        lldb::addr_t &start_load_addr,
+                        lldb::addr_t &function_load_addr);
+
+  virtual void DoTakedown(bool success);
+
+  void SetBreakpoints();
+
+  void ClearBreakpoints();
+
+  bool BreakpointsExplainStop();
+
+  bool m_valid;
+  bool m_stop_other_threads;
+  bool m_unwind_on_error;
+  bool m_ignore_breakpoints;
+  bool m_debug_execution;
+  bool m_trap_exceptions;
+  Address m_function_addr;
+  Address m_start_addr;
+  lldb::addr_t m_function_sp;
+  lldb::ThreadPlanSP m_subplan_sp;
+  LanguageRuntime *m_cxx_language_runtime;
+  LanguageRuntime *m_objc_language_runtime;
+  Thread::ThreadStateCheckpoint m_stored_thread_state;
+  lldb::StopInfoSP
+      m_real_stop_info_sp; // In general we want to hide call function
+                           // thread plans, but for reporting purposes, it's
+                           // nice to know the real stop reason. This gets set
+                           // in DoTakedown.
+  StreamString m_constructor_errors;
+  lldb::ValueObjectSP m_return_valobj_sp; // If this contains a valid pointer,
+                                          // use the ABI to extract values when
+                                          // complete
+  bool m_takedown_done; // We want to ensure we only do the takedown once.  This
+                        // ensures that.
+  bool m_should_clear_objc_exception_bp;
+  bool m_should_clear_cxx_exception_bp;
+  lldb::addr_t m_stop_address; // This is the address we stopped at.  Also set
+                               // in DoTakedown;
+
+private:
+  CompilerType m_return_type;
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanCallFunction);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanCallFunction_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanCallFunctionUsingABI.h b/linux-x64/clang/include/lldb/Target/ThreadPlanCallFunctionUsingABI.h
new file mode 100644
index 0000000..c21e4d3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanCallFunctionUsingABI.h
@@ -0,0 +1,52 @@
+//===-- ThreadPlanCallFunctionUsingABI.h --------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanCallFunctionUsingABI_h_
+#define liblldb_ThreadPlanCallFunctionUsingABI_h_
+
+#include "lldb/Target/ABI.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlanCallFunction.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/IR/DerivedTypes.h"
+
+namespace lldb_private {
+
+class ThreadPlanCallFunctionUsingABI : public ThreadPlanCallFunction {
+  // Create a thread plan to call a function at the address passed in the
+  // "function" argument, this function is executed using register manipulation
+  // instead of JIT. Class derives from ThreadPlanCallFunction and differs by
+  // calling a alternative
+  // ABI interface ABI::PrepareTrivialCall() which provides more detailed
+  // information.
+public:
+  ThreadPlanCallFunctionUsingABI(Thread &thread,
+                                 const Address &function_address,
+                                 llvm::Type &function_prototype,
+                                 llvm::Type &return_type,
+                                 llvm::ArrayRef<ABI::CallArgument> args,
+                                 const EvaluateExpressionOptions &options);
+
+  ~ThreadPlanCallFunctionUsingABI() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+protected:
+  void SetReturnValue() override;
+
+private:
+  llvm::Type &m_return_type;
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanCallFunctionUsingABI);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanCallFunctionUsingABI_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanCallOnFunctionExit.h b/linux-x64/clang/include/lldb/Target/ThreadPlanCallOnFunctionExit.h
new file mode 100644
index 0000000..ad3ee6e
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanCallOnFunctionExit.h
@@ -0,0 +1,53 @@
+//===-- ThreadPlanCallOnFunctionExit.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef ThreadPlanCallOnFunctionExit_h
+#define ThreadPlanCallOnFunctionExit_h
+
+#include "lldb/Target/ThreadPlan.h"
+
+#include <functional>
+
+namespace lldb_private {
+
+// =============================================================================
+/// This thread plan calls a function object when the current function exits.
+// =============================================================================
+
+class ThreadPlanCallOnFunctionExit : public ThreadPlan {
+public:
+  /// Definition for the callback made when the currently executing thread
+  /// finishes executing its function.
+  using Callback = std::function<void()>;
+
+  ThreadPlanCallOnFunctionExit(Thread &thread, const Callback &callback);
+
+  void DidPush() override;
+
+  // ThreadPlan API
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+  bool ValidatePlan(Stream *error) override;
+
+  bool ShouldStop(Event *event_ptr) override;
+
+  bool WillStop() override;
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  lldb::StateType GetPlanRunState() override;
+
+private:
+  Callback m_callback;
+  lldb::ThreadPlanSP m_step_out_threadplan_sp;
+};
+}
+
+#endif /* ThreadPlanCallOnFunctionExit_h */
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanCallUserExpression.h b/linux-x64/clang/include/lldb/Target/ThreadPlanCallUserExpression.h
new file mode 100644
index 0000000..6372155
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanCallUserExpression.h
@@ -0,0 +1,64 @@
+//===-- ThreadPlanCallUserExpression.h --------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanCallUserExpression_h_
+#define liblldb_ThreadPlanCallUserExpression_h_
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+#include "lldb/Target/ThreadPlanCallFunction.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+
+namespace lldb_private {
+
+class ThreadPlanCallUserExpression : public ThreadPlanCallFunction {
+public:
+  ThreadPlanCallUserExpression(Thread &thread, Address &function,
+                               llvm::ArrayRef<lldb::addr_t> args,
+                               const EvaluateExpressionOptions &options,
+                               lldb::UserExpressionSP &user_expression_sp);
+
+  ~ThreadPlanCallUserExpression() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+  void DidPush() override;
+
+  void WillPop() override;
+
+  lldb::StopInfoSP GetRealStopInfo() override;
+
+  bool MischiefManaged() override;
+
+  void TransferExpressionOwnership() { m_manage_materialization = true; }
+
+  lldb::ExpressionVariableSP GetExpressionVariable() override {
+    return m_result_var_sp;
+  }
+
+protected:
+  void DoTakedown(bool success) override;
+private:
+  lldb::UserExpressionSP
+      m_user_expression_sp; // This is currently just used to ensure the
+                            // User expression the initiated this ThreadPlan
+                            // lives as long as the thread plan does.
+  bool m_manage_materialization = false;
+  lldb::ExpressionVariableSP
+      m_result_var_sp; // If we are left to manage the materialization,
+                       // then stuff the result expression variable here.
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanCallUserExpression);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanCallUserExpression_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanPython.h b/linux-x64/clang/include/lldb/Target/ThreadPlanPython.h
new file mode 100644
index 0000000..3825bf6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanPython.h
@@ -0,0 +1,66 @@
+//===-- ThreadPlanPython.h --------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlan_Python_h_
+#define liblldb_ThreadPlan_Python_h_
+
+#include <string>
+
+#include "lldb/Target/Process.h"
+#include "lldb/Target/StopInfo.h"
+#include "lldb/Target/Target.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+#include "lldb/Target/ThreadPlanTracer.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/Utility/UserID.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+//  ThreadPlanPython:
+//
+
+class ThreadPlanPython : public ThreadPlan {
+public:
+  ThreadPlanPython(Thread &thread, const char *class_name);
+  ~ThreadPlanPython() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+  bool ValidatePlan(Stream *error) override;
+
+  bool ShouldStop(Event *event_ptr) override;
+
+  bool MischiefManaged() override;
+
+  bool WillStop() override;
+
+  bool StopOthers() override;
+
+  void DidPush() override;
+
+  bool IsPlanStale() override;
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  lldb::StateType GetPlanRunState() override;
+
+private:
+  std::string m_class_name;
+  StructuredData::ObjectSP m_implementation_sp;
+  bool m_did_push;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanPython);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlan_Python_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanRunToAddress.h b/linux-x64/clang/include/lldb/Target/ThreadPlanRunToAddress.h
new file mode 100644
index 0000000..d82a9fa
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanRunToAddress.h
@@ -0,0 +1,67 @@
+//===-- ThreadPlanRunToAddress.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanRunToAddress_h_
+#define liblldb_ThreadPlanRunToAddress_h_
+
+#include <vector>
+
+#include "lldb/Target/ThreadPlan.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class ThreadPlanRunToAddress : public ThreadPlan {
+public:
+  ThreadPlanRunToAddress(Thread &thread, Address &address, bool stop_others);
+
+  ThreadPlanRunToAddress(Thread &thread, lldb::addr_t address,
+                         bool stop_others);
+
+  ThreadPlanRunToAddress(Thread &thread,
+                         const std::vector<lldb::addr_t> &addresses,
+                         bool stop_others);
+
+  ~ThreadPlanRunToAddress() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+  bool ValidatePlan(Stream *error) override;
+
+  bool ShouldStop(Event *event_ptr) override;
+
+  bool StopOthers() override;
+
+  void SetStopOthers(bool new_value) override;
+
+  lldb::StateType GetPlanRunState() override;
+
+  bool WillStop() override;
+
+  bool MischiefManaged() override;
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  void SetInitialBreakpoints();
+  bool AtOurAddress();
+
+private:
+  bool m_stop_others;
+  std::vector<lldb::addr_t>
+      m_addresses; // This is the address we are going to run to.
+                   // TODO: Would it be useful to have multiple addresses?
+  std::vector<lldb::break_id_t> m_break_ids; // This is the breakpoint we are
+                                             // using to stop us at m_address.
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanRunToAddress);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanRunToAddress_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanShouldStopHere.h b/linux-x64/clang/include/lldb/Target/ThreadPlanShouldStopHere.h
new file mode 100644
index 0000000..dfcbbb3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanShouldStopHere.h
@@ -0,0 +1,138 @@
+//===-- ThreadPlanShouldStopHere.h ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanShouldStopHere_h_
+#define liblldb_ThreadPlanShouldStopHere_h_
+
+#include "lldb/Target/ThreadPlan.h"
+
+namespace lldb_private {
+
+// This is an interface that ThreadPlans can adopt to allow flexible
+// modifications of the behavior when a thread plan comes to a place where it
+// would ordinarily stop.  If such modification makes sense for your plan,
+// inherit from this class, and when you would be about to stop (in your
+// ShouldStop method), call InvokeShouldStopHereCallback, passing in the frame
+// comparison between where the step operation started and where you arrived.
+// If it returns true, then QueueStepOutFromHere will queue the plan to execute
+// instead of stopping.
+//
+// The classic example of the use of this is ThreadPlanStepInRange not stopping
+// in frames that have no debug information.
+//
+// This class also defines a set of flags to control general aspects of this
+// "ShouldStop" behavior.
+// A class implementing this protocol needs to define a default set of flags,
+// and can provide access to
+// changing that default flag set if it wishes.
+
+class ThreadPlanShouldStopHere {
+public:
+  struct ThreadPlanShouldStopHereCallbacks {
+    ThreadPlanShouldStopHereCallbacks() {
+      should_stop_here_callback = nullptr;
+      step_from_here_callback = nullptr;
+    }
+
+    ThreadPlanShouldStopHereCallbacks(
+        ThreadPlanShouldStopHereCallback should_stop,
+        ThreadPlanStepFromHereCallback step_from_here) {
+      should_stop_here_callback = should_stop;
+      step_from_here_callback = step_from_here;
+    }
+
+    void Clear() {
+      should_stop_here_callback = nullptr;
+      step_from_here_callback = nullptr;
+    }
+
+    ThreadPlanShouldStopHereCallback should_stop_here_callback;
+    ThreadPlanStepFromHereCallback step_from_here_callback;
+  };
+
+  enum {
+    eNone = 0,
+    eAvoidInlines = (1 << 0),
+    eStepInAvoidNoDebug = (1 << 1),
+    eStepOutAvoidNoDebug = (1 << 2)
+  };
+
+  // Constructors and Destructors
+  ThreadPlanShouldStopHere(ThreadPlan *owner);
+
+  ThreadPlanShouldStopHere(ThreadPlan *owner,
+                           const ThreadPlanShouldStopHereCallbacks *callbacks,
+                           void *baton = nullptr);
+  virtual ~ThreadPlanShouldStopHere();
+
+  // Set the ShouldStopHere callbacks.  Pass in null to clear them and have no
+  // special behavior (though you can also call ClearShouldStopHereCallbacks
+  // for that purpose.  If you pass in a valid pointer, it will adopt the non-
+  // null fields, and any null fields will be set to the default values.
+
+  void
+  SetShouldStopHereCallbacks(const ThreadPlanShouldStopHereCallbacks *callbacks,
+                             void *baton) {
+    if (callbacks) {
+      m_callbacks = *callbacks;
+      if (!m_callbacks.should_stop_here_callback)
+        m_callbacks.should_stop_here_callback =
+            ThreadPlanShouldStopHere::DefaultShouldStopHereCallback;
+      if (!m_callbacks.step_from_here_callback)
+        m_callbacks.step_from_here_callback =
+            ThreadPlanShouldStopHere::DefaultStepFromHereCallback;
+    } else {
+      ClearShouldStopHereCallbacks();
+    }
+    m_baton = baton;
+  }
+
+  void ClearShouldStopHereCallbacks() { m_callbacks.Clear(); }
+
+  bool InvokeShouldStopHereCallback(lldb::FrameComparison operation,
+                                    Status &status);
+
+  lldb::ThreadPlanSP
+  CheckShouldStopHereAndQueueStepOut(lldb::FrameComparison operation,
+                                     Status &status);
+
+  lldb_private::Flags &GetFlags() { return m_flags; }
+
+  const lldb_private::Flags &GetFlags() const { return m_flags; }
+
+protected:
+  static bool DefaultShouldStopHereCallback(ThreadPlan *current_plan,
+                                            Flags &flags,
+                                            lldb::FrameComparison operation,
+                                            Status &status, void *baton);
+
+  static lldb::ThreadPlanSP
+  DefaultStepFromHereCallback(ThreadPlan *current_plan, Flags &flags,
+                              lldb::FrameComparison operation, Status &status,
+                              void *baton);
+
+  virtual lldb::ThreadPlanSP
+  QueueStepOutFromHerePlan(Flags &flags, lldb::FrameComparison operation,
+                           Status &status);
+
+  // Implement this, and call it in the plan's constructor to set the default
+  // flags.
+  virtual void SetFlagsToDefault() = 0;
+
+  ThreadPlanShouldStopHereCallbacks m_callbacks;
+  void *m_baton;
+  ThreadPlan *m_owner;
+  lldb_private::Flags m_flags;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanShouldStopHere);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanShouldStopHere_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepInRange.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepInRange.h
new file mode 100644
index 0000000..a120c98
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepInRange.h
@@ -0,0 +1,107 @@
+//===-- ThreadPlanStepInRange.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepInRange_h_
+#define liblldb_ThreadPlanStepInRange_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Target/StackID.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlanShouldStopHere.h"
+#include "lldb/Target/ThreadPlanStepRange.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepInRange : public ThreadPlanStepRange,
+                              public ThreadPlanShouldStopHere {
+public:
+  ThreadPlanStepInRange(Thread &thread, const AddressRange &range,
+                        const SymbolContext &addr_context,
+                        lldb::RunMode stop_others,
+                        LazyBool step_in_avoids_code_without_debug_info,
+                        LazyBool step_out_avoids_code_without_debug_info);
+
+  ThreadPlanStepInRange(Thread &thread, const AddressRange &range,
+                        const SymbolContext &addr_context,
+                        const char *step_into_function_name,
+                        lldb::RunMode stop_others,
+                        LazyBool step_in_avoids_code_without_debug_info,
+                        LazyBool step_out_avoids_code_without_debug_info);
+
+  ~ThreadPlanStepInRange() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+
+  bool ShouldStop(Event *event_ptr) override;
+
+  void SetAvoidRegexp(const char *name);
+
+  void SetStepInTarget(const char *target) {
+    m_step_into_target.SetCString(target);
+  }
+
+  static void SetDefaultFlagValue(uint32_t new_value);
+
+  bool IsVirtualStep() override;
+
+protected:
+  static bool DefaultShouldStopHereCallback(ThreadPlan *current_plan,
+                                            Flags &flags,
+                                            lldb::FrameComparison operation,
+                                            Status &status, void *baton);
+
+  bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
+
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  void SetFlagsToDefault() override {
+    GetFlags().Set(ThreadPlanStepInRange::s_default_flag_values);
+  }
+
+  void SetCallbacks() {
+    ThreadPlanShouldStopHere::ThreadPlanShouldStopHereCallbacks callbacks(
+        ThreadPlanStepInRange::DefaultShouldStopHereCallback, nullptr);
+    SetShouldStopHereCallbacks(&callbacks, nullptr);
+  }
+
+  bool FrameMatchesAvoidCriteria();
+
+private:
+  friend lldb::ThreadPlanSP Thread::QueueThreadPlanForStepOverRange(
+      bool abort_other_plans, const AddressRange &range,
+      const SymbolContext &addr_context, lldb::RunMode stop_others,
+      Status &status, LazyBool avoid_code_without_debug_info);
+  friend lldb::ThreadPlanSP Thread::QueueThreadPlanForStepInRange(
+      bool abort_other_plans, const AddressRange &range,
+      const SymbolContext &addr_context, const char *step_in_target,
+      lldb::RunMode stop_others, Status &status,
+      LazyBool step_in_avoids_code_without_debug_info,
+      LazyBool step_out_avoids_code_without_debug_info);
+
+  void SetupAvoidNoDebug(LazyBool step_in_avoids_code_without_debug_info,
+                         LazyBool step_out_avoids_code_without_debug_info);
+  // Need an appropriate marker for the current stack so we can tell step out
+  // from step in.
+
+  static uint32_t s_default_flag_values; // These are the default flag values
+                                         // for the ThreadPlanStepThrough.
+  lldb::ThreadPlanSP m_sub_plan_sp;      // Keep track of the last plan we were
+                                    // running.  If it fails, we should stop.
+  std::unique_ptr<RegularExpression> m_avoid_regexp_up;
+  bool m_step_past_prologue; // FIXME: For now hard-coded to true, we could put
+                             // a switch in for this if there's
+                             // demand for that.
+  bool m_virtual_step; // true if we've just done a "virtual step", i.e. just
+                       // moved the inline stack depth.
+  ConstString m_step_into_target;
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepInRange);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepInRange_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepInstruction.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepInstruction.h
new file mode 100644
index 0000000..127de41
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepInstruction.h
@@ -0,0 +1,57 @@
+//===-- ThreadPlanStepInstruction.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepInstruction_h_
+#define liblldb_ThreadPlanStepInstruction_h_
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepInstruction : public ThreadPlan {
+public:
+  ThreadPlanStepInstruction(Thread &thread, bool step_over, bool stop_others,
+                            Vote stop_vote, Vote run_vote);
+
+  ~ThreadPlanStepInstruction() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+  bool ValidatePlan(Stream *error) override;
+  bool ShouldStop(Event *event_ptr) override;
+  bool StopOthers() override;
+  lldb::StateType GetPlanRunState() override;
+  bool WillStop() override;
+  bool MischiefManaged() override;
+  bool IsPlanStale() override;
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  void SetUpState();
+
+private:
+  friend lldb::ThreadPlanSP Thread::QueueThreadPlanForStepSingleInstruction(
+      bool step_over, bool abort_other_plans, bool stop_other_threads,
+      Status &status);
+
+  lldb::addr_t m_instruction_addr;
+  bool m_stop_other_threads;
+  bool m_step_over;
+  // These two are used only for the step over case.
+  bool m_start_has_symbol;
+  StackID m_stack_id;
+  StackID m_parent_frame_id;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepInstruction);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepInstruction_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepOut.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepOut.h
new file mode 100644
index 0000000..00984db
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepOut.h
@@ -0,0 +1,92 @@
+//===-- ThreadPlanStepOut.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepOut_h_
+#define liblldb_ThreadPlanStepOut_h_
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+#include "lldb/Target/ThreadPlanShouldStopHere.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepOut : public ThreadPlan, public ThreadPlanShouldStopHere {
+public:
+  ThreadPlanStepOut(Thread &thread, SymbolContext *addr_context,
+                    bool first_insn, bool stop_others, Vote stop_vote,
+                    Vote run_vote, uint32_t frame_idx,
+                    LazyBool step_out_avoids_code_without_debug_info,
+                    bool continue_to_next_branch = false,
+                    bool gather_return_value = true);
+
+  ~ThreadPlanStepOut() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+  bool ValidatePlan(Stream *error) override;
+  bool ShouldStop(Event *event_ptr) override;
+  bool StopOthers() override;
+  lldb::StateType GetPlanRunState() override;
+  bool WillStop() override;
+  bool MischiefManaged() override;
+  void DidPush() override;
+  bool IsPlanStale() override;
+
+  lldb::ValueObjectSP GetReturnValueObject() override {
+    return m_return_valobj_sp;
+  }
+
+protected:
+  void SetFlagsToDefault() override {
+    GetFlags().Set(ThreadPlanStepOut::s_default_flag_values);
+  }
+
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+  bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
+  bool QueueInlinedStepPlan(bool queue_now);
+
+private:
+  static uint32_t s_default_flag_values; // These are the default flag values
+                                         // for the ThreadPlanStepThrough.
+
+  lldb::addr_t m_step_from_insn;
+  StackID m_step_out_to_id;
+  StackID m_immediate_step_from_id;
+  lldb::break_id_t m_return_bp_id;
+  lldb::addr_t m_return_addr;
+  bool m_stop_others;
+  lldb::ThreadPlanSP m_step_out_to_inline_plan_sp; // This plan implements step
+                                                   // out to the real function
+                                                   // containing
+  // an inlined frame so we can then step out of that.
+  lldb::ThreadPlanSP m_step_through_inline_plan_sp; // This plan then steps past
+                                                    // the inlined frame(s).
+  lldb::ThreadPlanSP m_step_out_further_plan_sp; // This plan keeps stepping out
+                                                 // if ShouldStopHere told us
+                                                 // to.
+  Function *m_immediate_step_from_function;
+  std::vector<lldb::StackFrameSP> m_stepped_past_frames;
+  lldb::ValueObjectSP m_return_valobj_sp;
+  bool m_calculate_return_value;
+
+  friend lldb::ThreadPlanSP Thread::QueueThreadPlanForStepOut(
+      bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
+      bool stop_others, Vote stop_vote, Vote run_vote, uint32_t frame_idx,
+      Status &status, LazyBool step_out_avoids_code_without_debug_info);
+
+  void SetupAvoidNoDebug(LazyBool step_out_avoids_code_without_debug_info);
+  // Need an appropriate marker for the current stack so we can tell step out
+  // from step in.
+
+  void CalculateReturnValue();
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepOut);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepOut_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepOverBreakpoint.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepOverBreakpoint.h
new file mode 100644
index 0000000..7df7049
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepOverBreakpoint.h
@@ -0,0 +1,55 @@
+//===-- ThreadPlanStepOverBreakpoint.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepOverBreakpoint_h_
+#define liblldb_ThreadPlanStepOverBreakpoint_h_
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepOverBreakpoint : public ThreadPlan {
+public:
+  ThreadPlanStepOverBreakpoint(Thread &thread);
+
+  ~ThreadPlanStepOverBreakpoint() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+  bool ValidatePlan(Stream *error) override;
+  bool ShouldStop(Event *event_ptr) override;
+  bool StopOthers() override;
+  lldb::StateType GetPlanRunState() override;
+  bool WillStop() override;
+  void WillPop() override;
+  bool MischiefManaged() override;
+  void ThreadDestroyed() override;
+  void SetAutoContinue(bool do_it);
+  bool ShouldAutoContinue(Event *event_ptr) override;
+  bool IsPlanStale() override;
+
+  lldb::addr_t GetBreakpointLoadAddress() const { return m_breakpoint_addr; }
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+  bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
+
+  void ReenableBreakpointSite();
+
+private:
+  lldb::addr_t m_breakpoint_addr;
+  lldb::user_id_t m_breakpoint_site_id;
+  bool m_auto_continue;
+  bool m_reenabled_breakpoint_site;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepOverBreakpoint);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepOverBreakpoint_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepOverRange.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepOverRange.h
new file mode 100644
index 0000000..30763e3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepOverRange.h
@@ -0,0 +1,53 @@
+//===-- ThreadPlanStepOverRange.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepOverRange_h_
+#define liblldb_ThreadPlanStepOverRange_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Target/StackID.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlanStepRange.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepOverRange : public ThreadPlanStepRange,
+                                ThreadPlanShouldStopHere {
+public:
+  ThreadPlanStepOverRange(Thread &thread, const AddressRange &range,
+                          const SymbolContext &addr_context,
+                          lldb::RunMode stop_others,
+                          LazyBool step_out_avoids_no_debug);
+
+  ~ThreadPlanStepOverRange() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+  bool ShouldStop(Event *event_ptr) override;
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+  bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
+
+  void SetFlagsToDefault() override {
+    GetFlags().Set(ThreadPlanStepOverRange::s_default_flag_values);
+  }
+
+private:
+  static uint32_t s_default_flag_values;
+
+  void SetupAvoidNoDebug(LazyBool step_out_avoids_code_without_debug_info);
+  bool IsEquivalentContext(const SymbolContext &context);
+
+  bool m_first_resume;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepOverRange);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepOverRange_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepRange.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepRange.h
new file mode 100644
index 0000000..93d54ad
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepRange.h
@@ -0,0 +1,88 @@
+//===-- ThreadPlanStepRange.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepRange_h_
+#define liblldb_ThreadPlanStepRange_h_
+
+#include "lldb/Core/AddressRange.h"
+#include "lldb/Target/StackID.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+#include "lldb/Target/ThreadPlanShouldStopHere.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepRange : public ThreadPlan {
+public:
+  ThreadPlanStepRange(ThreadPlanKind kind, const char *name, Thread &thread,
+                      const AddressRange &range,
+                      const SymbolContext &addr_context,
+                      lldb::RunMode stop_others,
+                      bool given_ranges_only = false);
+
+  ~ThreadPlanStepRange() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override = 0;
+  bool ValidatePlan(Stream *error) override;
+  bool ShouldStop(Event *event_ptr) override = 0;
+  Vote ShouldReportStop(Event *event_ptr) override;
+  bool StopOthers() override;
+  lldb::StateType GetPlanRunState() override;
+  bool WillStop() override;
+  bool MischiefManaged() override;
+  void DidPush() override;
+  bool IsPlanStale() override;
+
+  void AddRange(const AddressRange &new_range);
+
+protected:
+  bool InRange();
+  lldb::FrameComparison CompareCurrentFrameToStartFrame();
+  bool InSymbol();
+  void DumpRanges(Stream *s);
+
+  Disassembler *GetDisassembler();
+
+  InstructionList *GetInstructionsForAddress(lldb::addr_t addr,
+                                             size_t &range_index,
+                                             size_t &insn_offset);
+
+  // Pushes a plan to proceed through the next section of instructions in the
+  // range - usually just a RunToAddress plan to run to the next branch.
+  // Returns true if it pushed such a plan.  If there was no available 'quick
+  // run' plan, then just single step.
+  bool SetNextBranchBreakpoint();
+
+  void ClearNextBranchBreakpoint();
+
+  bool NextRangeBreakpointExplainsStop(lldb::StopInfoSP stop_info_sp);
+
+  SymbolContext m_addr_context;
+  std::vector<AddressRange> m_address_ranges;
+  lldb::RunMode m_stop_others;
+  StackID m_stack_id; // Use the stack ID so we can tell step out from step in.
+  StackID m_parent_stack_id; // Use the parent stack ID so we can identify tail
+                             // calls and the like.
+  bool m_no_more_plans;   // Need this one so we can tell if we stepped into a
+                          // call,
+                          // but can't continue, in which case we are done.
+  bool m_first_run_event; // We want to broadcast only one running event, our
+                          // first.
+  lldb::BreakpointSP m_next_branch_bp_sp;
+  bool m_use_fast_step;
+  bool m_given_ranges_only;
+
+private:
+  std::vector<lldb::DisassemblerSP> m_instruction_ranges;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepRange);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepRange_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepThrough.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepThrough.h
new file mode 100644
index 0000000..0d06212
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepThrough.h
@@ -0,0 +1,61 @@
+//===-- ThreadPlanStepThrough.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepThrough_h_
+#define liblldb_ThreadPlanStepThrough_h_
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepThrough : public ThreadPlan {
+public:
+  ~ThreadPlanStepThrough() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+  bool ValidatePlan(Stream *error) override;
+  bool ShouldStop(Event *event_ptr) override;
+  bool StopOthers() override;
+  lldb::StateType GetPlanRunState() override;
+  bool WillStop() override;
+  bool MischiefManaged() override;
+  void DidPush() override;
+
+protected:
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+  bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
+
+  ThreadPlanStepThrough(Thread &thread, StackID &return_stack_id,
+                        bool stop_others);
+
+  void LookForPlanToStepThroughFromCurrentPC();
+
+  bool HitOurBackstopBreakpoint();
+
+private:
+  friend lldb::ThreadPlanSP
+  Thread::QueueThreadPlanForStepThrough(StackID &return_stack_id,
+                                        bool abort_other_plans,
+                                        bool stop_others, Status &status);
+
+  void ClearBackstopBreakpoint();
+
+  lldb::ThreadPlanSP m_sub_plan_sp;
+  lldb::addr_t m_start_address;
+  lldb::break_id_t m_backstop_bkpt_id;
+  lldb::addr_t m_backstop_addr;
+  StackID m_return_stack_id;
+  bool m_stop_others;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepThrough);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepThrough_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanStepUntil.h b/linux-x64/clang/include/lldb/Target/ThreadPlanStepUntil.h
new file mode 100644
index 0000000..9a5934a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanStepUntil.h
@@ -0,0 +1,67 @@
+//===-- ThreadPlanStepUntil.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanStepUntil_h_
+#define liblldb_ThreadPlanStepUntil_h_
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadPlan.h"
+
+namespace lldb_private {
+
+class ThreadPlanStepUntil : public ThreadPlan {
+public:
+  ~ThreadPlanStepUntil() override;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
+  bool ValidatePlan(Stream *error) override;
+  bool ShouldStop(Event *event_ptr) override;
+  bool StopOthers() override;
+  lldb::StateType GetPlanRunState() override;
+  bool WillStop() override;
+  bool MischiefManaged() override;
+
+protected:
+  bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
+  bool DoPlanExplainsStop(Event *event_ptr) override;
+
+  ThreadPlanStepUntil(Thread &thread, lldb::addr_t *address_list,
+                      size_t num_addresses, bool stop_others,
+                      uint32_t frame_idx = 0);
+
+  void AnalyzeStop();
+
+private:
+  StackID m_stack_id;
+  lldb::addr_t m_step_from_insn;
+  lldb::break_id_t m_return_bp_id;
+  lldb::addr_t m_return_addr;
+  bool m_stepped_out;
+  bool m_should_stop;
+  bool m_ran_analyze;
+  bool m_explains_stop;
+
+  typedef std::map<lldb::addr_t, lldb::break_id_t> until_collection;
+  until_collection m_until_points;
+  bool m_stop_others;
+
+  void Clear();
+
+  friend lldb::ThreadPlanSP Thread::QueueThreadPlanForStepUntil(
+      bool abort_other_plans, lldb::addr_t *address_list, size_t num_addresses,
+      bool stop_others, uint32_t frame_idx, Status &status);
+
+  // Need an appropriate marker for the current stack so we can tell step out
+  // from step in.
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadPlanStepUntil);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanStepUntil_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadPlanTracer.h b/linux-x64/clang/include/lldb/Target/ThreadPlanTracer.h
new file mode 100644
index 0000000..80b0807
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadPlanTracer.h
@@ -0,0 +1,99 @@
+//===-- ThreadPlanTracer.h --------------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadPlanTracer_h_
+#define liblldb_ThreadPlanTracer_h_
+
+#include "lldb/Symbol/TaggedASTType.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Utility/RegisterValue.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class ThreadPlanTracer {
+  friend class ThreadPlan;
+
+public:
+  enum ThreadPlanTracerStyle {
+    eLocation = 0,
+    eStateChange,
+    eCheckFrames,
+    ePython
+  };
+
+  ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp);
+  ThreadPlanTracer(Thread &thread);
+
+  virtual ~ThreadPlanTracer() = default;
+
+  virtual void TracingStarted() {}
+
+  virtual void TracingEnded() {}
+
+  bool EnableTracing(bool value) {
+    bool old_value = m_enabled;
+    m_enabled = value;
+    if (old_value == false && value == true)
+      TracingStarted();
+    else if (old_value == true && value == false)
+      TracingEnded();
+
+    return old_value;
+  }
+
+  bool TracingEnabled() { return m_enabled; }
+
+  bool EnableSingleStep(bool value) {
+    bool old_value = m_single_step;
+    m_single_step = value;
+    return old_value;
+  }
+
+  bool SingleStepEnabled() { return m_single_step; }
+
+protected:
+  Thread &m_thread;
+
+  Stream *GetLogStream();
+
+  virtual void Log();
+
+private:
+  bool TracerExplainsStop();
+
+  bool m_single_step;
+  bool m_enabled;
+  lldb::StreamSP m_stream_sp;
+};
+
+class ThreadPlanAssemblyTracer : public ThreadPlanTracer {
+public:
+  ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp);
+  ThreadPlanAssemblyTracer(Thread &thread);
+  ~ThreadPlanAssemblyTracer() override;
+
+  void TracingStarted() override;
+  void TracingEnded() override;
+  void Log() override;
+
+private:
+  Disassembler *GetDisassembler();
+
+  TypeFromUser GetIntPointerType();
+
+  lldb::DisassemblerSP m_disassembler_sp;
+  TypeFromUser m_intptr_type;
+  std::vector<RegisterValue> m_register_values;
+  lldb::DataBufferSP m_buffer_sp;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadPlanTracer_h_
diff --git a/linux-x64/clang/include/lldb/Target/ThreadSpec.h b/linux-x64/clang/include/lldb/Target/ThreadSpec.h
new file mode 100644
index 0000000..05e7dcd
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/ThreadSpec.h
@@ -0,0 +1,129 @@
+//===-- ThreadSpec.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ThreadSpec_h_
+#define liblldb_ThreadSpec_h_
+
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-private.h"
+#include <string>
+
+namespace lldb_private {
+
+// Note: For now the thread spec has only fixed elements -
+//   Thread ID
+//   Thread Index
+//   Thread Name
+//   Thread Queue Name
+//
+//  But if we need more generality, we can hang a key/value map off of this
+//  structure.
+//  That's why the thread matches spec test is done as a virtual method in
+//  Thread::MatchesSpec,
+//  since it is the native thread that would know how to interpret the keys.
+//  I was going to do the Queue Name this way out of sheer orneriness, but that
+//  seems a
+//  sufficiently general concept, so I put it in here on its own.
+
+class ThreadSpec {
+public:
+  ThreadSpec();
+
+  static std::unique_ptr<ThreadSpec>
+  CreateFromStructuredData(const StructuredData::Dictionary &data_dict,
+                           Status &error);
+
+  StructuredData::ObjectSP SerializeToStructuredData();
+
+  static const char *GetSerializationKey() { return "ThreadSpec"; }
+
+  void SetIndex(uint32_t index) { m_index = index; }
+
+  void SetTID(lldb::tid_t tid) { m_tid = tid; }
+
+  void SetName(llvm::StringRef name) { m_name = name; }
+
+  void SetQueueName(llvm::StringRef queue_name) { m_queue_name = queue_name; }
+
+  uint32_t GetIndex() const { return m_index; }
+
+  lldb::tid_t GetTID() const { return m_tid; }
+
+  const char *GetName() const;
+
+  const char *GetQueueName() const;
+
+  bool TIDMatches(lldb::tid_t thread_id) const {
+    if (m_tid == LLDB_INVALID_THREAD_ID || thread_id == LLDB_INVALID_THREAD_ID)
+      return true;
+    else
+      return thread_id == m_tid;
+  }
+
+  bool TIDMatches(Thread &thread) const;
+
+  bool IndexMatches(uint32_t index) const {
+    if (m_index == UINT32_MAX || index == UINT32_MAX)
+      return true;
+    else
+      return index == m_index;
+  }
+
+  bool IndexMatches(Thread &thread) const;
+
+  bool NameMatches(const char *name) const {
+    if (m_name.empty())
+      return true;
+    else if (name == nullptr)
+      return false;
+    else
+      return m_name == name;
+  }
+
+  bool NameMatches(Thread &thread) const;
+
+  bool QueueNameMatches(const char *queue_name) const {
+    if (m_queue_name.empty())
+      return true;
+    else if (queue_name == nullptr)
+      return false;
+    else
+      return m_queue_name == queue_name;
+  }
+
+  bool QueueNameMatches(Thread &thread) const;
+
+  bool ThreadPassesBasicTests(Thread &thread) const;
+
+  bool HasSpecification() const;
+
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+private:
+  enum class OptionNames {
+    ThreadIndex = 0,
+    ThreadID,
+    ThreadName,
+    QueueName,
+    LastOptionName
+  };
+  static const char *g_option_names[(size_t)OptionNames::LastOptionName];
+
+  static const char *GetKey(OptionNames enum_value) {
+    return g_option_names[(size_t) enum_value];
+  }
+
+  uint32_t m_index;
+  lldb::tid_t m_tid;
+  std::string m_name;
+  std::string m_queue_name;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ThreadSpec_h_
diff --git a/linux-x64/clang/include/lldb/Target/UnixSignals.h b/linux-x64/clang/include/lldb/Target/UnixSignals.h
new file mode 100644
index 0000000..120ffdd
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/UnixSignals.h
@@ -0,0 +1,129 @@
+//===-- UnixSignals.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_UnixSignals_h_
+#define lldb_UnixSignals_h_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-private.h"
+#include "llvm/ADT/Optional.h"
+
+namespace lldb_private {
+
+class UnixSignals {
+public:
+  static lldb::UnixSignalsSP Create(const ArchSpec &arch);
+  static lldb::UnixSignalsSP CreateForHost();
+
+  // Constructors and Destructors
+  UnixSignals();
+
+  virtual ~UnixSignals();
+
+  const char *GetSignalAsCString(int32_t signo) const;
+
+  bool SignalIsValid(int32_t signo) const;
+
+  int32_t GetSignalNumberFromName(const char *name) const;
+
+  const char *GetSignalInfo(int32_t signo, bool &should_suppress,
+                            bool &should_stop, bool &should_notify) const;
+
+  bool GetShouldSuppress(int32_t signo) const;
+
+  bool SetShouldSuppress(int32_t signo, bool value);
+
+  bool SetShouldSuppress(const char *signal_name, bool value);
+
+  bool GetShouldStop(int32_t signo) const;
+
+  bool SetShouldStop(int32_t signo, bool value);
+  bool SetShouldStop(const char *signal_name, bool value);
+
+  bool GetShouldNotify(int32_t signo) const;
+
+  bool SetShouldNotify(int32_t signo, bool value);
+
+  bool SetShouldNotify(const char *signal_name, bool value);
+
+  // These provide an iterator through the signals available on this system.
+  // Call GetFirstSignalNumber to get the first entry, then iterate on
+  // GetNextSignalNumber till you get back LLDB_INVALID_SIGNAL_NUMBER.
+  int32_t GetFirstSignalNumber() const;
+
+  int32_t GetNextSignalNumber(int32_t current_signal) const;
+
+  int32_t GetNumSignals() const;
+
+  int32_t GetSignalAtIndex(int32_t index) const;
+
+  ConstString GetShortName(ConstString name) const;
+
+  // We assume that the elements of this object are constant once it is
+  // constructed, since a process should never need to add or remove symbols as
+  // it runs.  So don't call these functions anywhere but the constructor of
+  // your subclass of UnixSignals or in your Process Plugin's GetUnixSignals
+  // method before you return the UnixSignal object.
+
+  void AddSignal(int signo, const char *name, bool default_suppress,
+                 bool default_stop, bool default_notify,
+                 const char *description, const char *alias = nullptr);
+
+  void RemoveSignal(int signo);
+
+  // Returns a current version of the data stored in this class. Version gets
+  // incremented each time Set... method is called.
+  uint64_t GetVersion() const;
+
+  // Returns a vector of signals that meet criteria provided in arguments. Each
+  // should_[suppress|stop|notify] flag can be None  - no filtering by this
+  // flag true  - only signals that have it set to true are returned false -
+  // only signals that have it set to true are returned
+  std::vector<int32_t> GetFilteredSignals(llvm::Optional<bool> should_suppress,
+                                          llvm::Optional<bool> should_stop,
+                                          llvm::Optional<bool> should_notify);
+
+protected:
+  // Classes that inherit from UnixSignals can see and modify these
+
+  struct Signal {
+    ConstString m_name;
+    ConstString m_alias;
+    std::string m_description;
+    bool m_suppress : 1, m_stop : 1, m_notify : 1;
+
+    Signal(const char *name, bool default_suppress, bool default_stop,
+           bool default_notify, const char *description, const char *alias);
+
+    ~Signal() {}
+  };
+
+  virtual void Reset();
+
+  typedef std::map<int32_t, Signal> collection;
+
+  collection m_signals;
+
+  // This version gets incremented every time something is changing in this
+  // class, including when we call AddSignal from the constructor. So after the
+  // object is constructed m_version is going to be > 0 if it has at least one
+  // signal registered in it.
+  uint64_t m_version = 0;
+
+  // GDBRemote signals need to be copyable.
+  UnixSignals(const UnixSignals &rhs);
+
+  const UnixSignals &operator=(const UnixSignals &rhs) = delete;
+};
+
+} // Namespace lldb
+#endif // lldb_UnixSignals_h_
diff --git a/linux-x64/clang/include/lldb/Target/Unwind.h b/linux-x64/clang/include/lldb/Target/Unwind.h
new file mode 100644
index 0000000..a648e06
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/Unwind.h
@@ -0,0 +1,83 @@
+//===-- Unwind.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Unwind_h_
+#define liblldb_Unwind_h_
+
+#include <mutex>
+
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class Unwind {
+protected:
+  // Classes that inherit from Unwind can see and modify these
+  Unwind(Thread &thread) : m_thread(thread), m_unwind_mutex() {}
+
+public:
+  virtual ~Unwind() {}
+
+  void Clear() {
+    std::lock_guard<std::recursive_mutex> guard(m_unwind_mutex);
+    DoClear();
+  }
+
+  uint32_t GetFrameCount() {
+    std::lock_guard<std::recursive_mutex> guard(m_unwind_mutex);
+    return DoGetFrameCount();
+  }
+
+  uint32_t GetFramesUpTo(uint32_t end_idx) {
+    lldb::addr_t cfa;
+    lldb::addr_t pc;
+    uint32_t idx;
+
+    for (idx = 0; idx < end_idx; idx++) {
+      if (!DoGetFrameInfoAtIndex(idx, cfa, pc)) {
+        break;
+      }
+    }
+    return idx;
+  }
+
+  bool GetFrameInfoAtIndex(uint32_t frame_idx, lldb::addr_t &cfa,
+                           lldb::addr_t &pc) {
+    std::lock_guard<std::recursive_mutex> guard(m_unwind_mutex);
+    return DoGetFrameInfoAtIndex(frame_idx, cfa, pc);
+  }
+
+  lldb::RegisterContextSP CreateRegisterContextForFrame(StackFrame *frame) {
+    std::lock_guard<std::recursive_mutex> guard(m_unwind_mutex);
+    return DoCreateRegisterContextForFrame(frame);
+  }
+
+  Thread &GetThread() { return m_thread; }
+
+protected:
+  // Classes that inherit from Unwind can see and modify these
+  virtual void DoClear() = 0;
+
+  virtual uint32_t DoGetFrameCount() = 0;
+
+  virtual bool DoGetFrameInfoAtIndex(uint32_t frame_idx, lldb::addr_t &cfa,
+                                     lldb::addr_t &pc) = 0;
+
+  virtual lldb::RegisterContextSP
+  DoCreateRegisterContextForFrame(StackFrame *frame) = 0;
+
+  Thread &m_thread;
+  std::recursive_mutex m_unwind_mutex;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(Unwind);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Unwind_h_
diff --git a/linux-x64/clang/include/lldb/Target/UnwindAssembly.h b/linux-x64/clang/include/lldb/Target/UnwindAssembly.h
new file mode 100644
index 0000000..a70aef6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Target/UnwindAssembly.h
@@ -0,0 +1,53 @@
+//===-- UnwindAssembly.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_UnwindAssembly_h_
+#define utility_UnwindAssembly_h_
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class UnwindAssembly : public std::enable_shared_from_this<UnwindAssembly>,
+                       public PluginInterface {
+public:
+  static lldb::UnwindAssemblySP FindPlugin(const ArchSpec &arch);
+
+  ~UnwindAssembly() override;
+
+  virtual bool
+  GetNonCallSiteUnwindPlanFromAssembly(AddressRange &func, Thread &thread,
+                                       UnwindPlan &unwind_plan) = 0;
+
+  virtual bool AugmentUnwindPlanFromCallSite(AddressRange &func, Thread &thread,
+                                             UnwindPlan &unwind_plan) = 0;
+
+  virtual bool GetFastUnwindPlan(AddressRange &func, Thread &thread,
+                                 UnwindPlan &unwind_plan) = 0;
+
+  // thread may be NULL in which case we only use the Target (e.g. if this is
+  // called pre-process-launch).
+  virtual bool
+  FirstNonPrologueInsn(AddressRange &func,
+                       const lldb_private::ExecutionContext &exe_ctx,
+                       Address &first_non_prologue_insn) = 0;
+
+protected:
+  UnwindAssembly(const ArchSpec &arch);
+  ArchSpec m_arch;
+
+private:
+  UnwindAssembly() = delete;
+  DISALLOW_COPY_AND_ASSIGN(UnwindAssembly);
+};
+
+} // namespace lldb_private
+
+#endif // utility_UnwindAssembly_h_
diff --git a/linux-x64/clang/include/lldb/Utility/AnsiTerminal.h b/linux-x64/clang/include/lldb/Utility/AnsiTerminal.h
new file mode 100644
index 0000000..1473c60
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/AnsiTerminal.h
@@ -0,0 +1,140 @@
+//===---------------------AnsiTerminal.h ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#define ANSI_FG_COLOR_BLACK 30
+#define ANSI_FG_COLOR_RED 31
+#define ANSI_FG_COLOR_GREEN 32
+#define ANSI_FG_COLOR_YELLOW 33
+#define ANSI_FG_COLOR_BLUE 34
+#define ANSI_FG_COLOR_PURPLE 35
+#define ANSI_FG_COLOR_CYAN 36
+#define ANSI_FG_COLOR_WHITE 37
+
+#define ANSI_BG_COLOR_BLACK 40
+#define ANSI_BG_COLOR_RED 41
+#define ANSI_BG_COLOR_GREEN 42
+#define ANSI_BG_COLOR_YELLOW 43
+#define ANSI_BG_COLOR_BLUE 44
+#define ANSI_BG_COLOR_PURPLE 45
+#define ANSI_BG_COLOR_CYAN 46
+#define ANSI_BG_COLOR_WHITE 47
+
+#define ANSI_SPECIAL_FRAMED 51
+#define ANSI_SPECIAL_ENCIRCLED 52
+
+#define ANSI_CTRL_NORMAL 0
+#define ANSI_CTRL_BOLD 1
+#define ANSI_CTRL_FAINT 2
+#define ANSI_CTRL_ITALIC 3
+#define ANSI_CTRL_UNDERLINE 4
+#define ANSI_CTRL_SLOW_BLINK 5
+#define ANSI_CTRL_FAST_BLINK 6
+#define ANSI_CTRL_IMAGE_NEGATIVE 7
+#define ANSI_CTRL_CONCEAL 8
+#define ANSI_CTRL_CROSSED_OUT 9
+
+#define ANSI_ESC_START "\033["
+#define ANSI_ESC_END "m"
+
+#define ANSI_STR(s) #s
+#define ANSI_DEF_STR(s) ANSI_STR(s)
+
+#define ANSI_ESCAPE1(s) ANSI_ESC_START ANSI_DEF_STR(s) ANSI_ESC_END
+
+#define ANSI_1_CTRL(ctrl1) "\033["##ctrl1 ANSI_ESC_END
+#define ANSI_2_CTRL(ctrl1, ctrl2) "\033["##ctrl1 ";"##ctrl2 ANSI_ESC_END
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <string>
+
+namespace lldb_utility {
+
+namespace ansi {
+
+inline std::string FormatAnsiTerminalCodes(llvm::StringRef format,
+                                           bool do_color = true) {
+  // Convert "${ansi.XXX}" tokens to ansi values or clear them if do_color is
+  // false.
+  static const struct {
+    const char *name;
+    const char *value;
+  } g_color_tokens[] = {
+#define _TO_STR2(_val) #_val
+#define _TO_STR(_val) _TO_STR2(_val)
+      {"fg.black}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_BLACK) ANSI_ESC_END},
+      {"fg.red}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_RED) ANSI_ESC_END},
+      {"fg.green}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_GREEN) ANSI_ESC_END},
+      {"fg.yellow}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_YELLOW) ANSI_ESC_END},
+      {"fg.blue}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_BLUE) ANSI_ESC_END},
+      {"fg.purple}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_PURPLE) ANSI_ESC_END},
+      {"fg.cyan}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_CYAN) ANSI_ESC_END},
+      {"fg.white}", ANSI_ESC_START _TO_STR(ANSI_FG_COLOR_WHITE) ANSI_ESC_END},
+      {"bg.black}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_BLACK) ANSI_ESC_END},
+      {"bg.red}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_RED) ANSI_ESC_END},
+      {"bg.green}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_GREEN) ANSI_ESC_END},
+      {"bg.yellow}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_YELLOW) ANSI_ESC_END},
+      {"bg.blue}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_BLUE) ANSI_ESC_END},
+      {"bg.purple}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_PURPLE) ANSI_ESC_END},
+      {"bg.cyan}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_CYAN) ANSI_ESC_END},
+      {"bg.white}", ANSI_ESC_START _TO_STR(ANSI_BG_COLOR_WHITE) ANSI_ESC_END},
+      {"normal}", ANSI_ESC_START _TO_STR(ANSI_CTRL_NORMAL) ANSI_ESC_END},
+      {"bold}", ANSI_ESC_START _TO_STR(ANSI_CTRL_BOLD) ANSI_ESC_END},
+      {"faint}", ANSI_ESC_START _TO_STR(ANSI_CTRL_FAINT) ANSI_ESC_END},
+      {"italic}", ANSI_ESC_START _TO_STR(ANSI_CTRL_ITALIC) ANSI_ESC_END},
+      {"underline}", ANSI_ESC_START _TO_STR(ANSI_CTRL_UNDERLINE) ANSI_ESC_END},
+      {"slow-blink}",
+       ANSI_ESC_START _TO_STR(ANSI_CTRL_SLOW_BLINK) ANSI_ESC_END},
+      {"fast-blink}",
+       ANSI_ESC_START _TO_STR(ANSI_CTRL_FAST_BLINK) ANSI_ESC_END},
+      {"negative}",
+       ANSI_ESC_START _TO_STR(ANSI_CTRL_IMAGE_NEGATIVE) ANSI_ESC_END},
+      {"conceal}", ANSI_ESC_START _TO_STR(ANSI_CTRL_CONCEAL) ANSI_ESC_END},
+      {"crossed-out}",
+       ANSI_ESC_START _TO_STR(ANSI_CTRL_CROSSED_OUT) ANSI_ESC_END},
+#undef _TO_STR
+#undef _TO_STR2
+  };
+  auto codes = llvm::makeArrayRef(g_color_tokens);
+
+  static const char tok_hdr[] = "${ansi.";
+
+  std::string fmt;
+  while (!format.empty()) {
+    llvm::StringRef left, right;
+    std::tie(left, right) = format.split(tok_hdr);
+
+    fmt.append(left);
+
+    if (left == format && right.empty()) {
+      // The header was not found.  Just exit.
+      break;
+    }
+
+    bool found_code = false;
+    for (const auto &code : codes) {
+      if (!right.consume_front(code.name))
+        continue;
+
+      if (do_color)
+        fmt.append(code.value);
+      found_code = true;
+      break;
+    }
+    format = right;
+    // If we haven't found a valid replacement value, we just copy the string
+    // to the result without any modifications.
+    if (!found_code)
+      fmt.append(tok_hdr);
+  }
+  return fmt;
+}
+}
+}
diff --git a/linux-x64/clang/include/lldb/Utility/ArchSpec.h b/linux-x64/clang/include/lldb/Utility/ArchSpec.h
new file mode 100644
index 0000000..7a32556
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/ArchSpec.h
@@ -0,0 +1,542 @@
+//===-- ArchSpec.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_ARCHSPEC_H
+#define LLDB_UTILITY_ARCHSPEC_H
+
+#include "lldb/Utility/CompletionRequest.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/Triple.h"
+#include <cstddef>
+#include <cstdint>
+#include <string>
+
+namespace lldb_private {
+
+/// \class ArchSpec ArchSpec.h "lldb/Utility/ArchSpec.h" An architecture
+/// specification class.
+///
+/// A class designed to be created from a cpu type and subtype, a
+/// string representation, or an llvm::Triple.  Keeping all of the conversions
+/// of strings to architecture enumeration values confined to this class
+/// allows new architecture support to be added easily.
+class ArchSpec {
+public:
+  enum MIPSSubType {
+    eMIPSSubType_unknown,
+    eMIPSSubType_mips32,
+    eMIPSSubType_mips32r2,
+    eMIPSSubType_mips32r6,
+    eMIPSSubType_mips32el,
+    eMIPSSubType_mips32r2el,
+    eMIPSSubType_mips32r6el,
+    eMIPSSubType_mips64,
+    eMIPSSubType_mips64r2,
+    eMIPSSubType_mips64r6,
+    eMIPSSubType_mips64el,
+    eMIPSSubType_mips64r2el,
+    eMIPSSubType_mips64r6el,
+  };
+
+  // Masks for the ases word of an ABI flags structure.
+  enum MIPSASE {
+    eMIPSAse_dsp = 0x00000001,       // DSP ASE
+    eMIPSAse_dspr2 = 0x00000002,     // DSP R2 ASE
+    eMIPSAse_eva = 0x00000004,       // Enhanced VA Scheme
+    eMIPSAse_mcu = 0x00000008,       // MCU (MicroController) ASE
+    eMIPSAse_mdmx = 0x00000010,      // MDMX ASE
+    eMIPSAse_mips3d = 0x00000020,    // MIPS-3D ASE
+    eMIPSAse_mt = 0x00000040,        // MT ASE
+    eMIPSAse_smartmips = 0x00000080, // SmartMIPS ASE
+    eMIPSAse_virt = 0x00000100,      // VZ ASE
+    eMIPSAse_msa = 0x00000200,       // MSA ASE
+    eMIPSAse_mips16 = 0x00000400,    // MIPS16 ASE
+    eMIPSAse_micromips = 0x00000800, // MICROMIPS ASE
+    eMIPSAse_xpa = 0x00001000,       // XPA ASE
+    eMIPSAse_mask = 0x00001fff,
+    eMIPSABI_O32 = 0x00002000,
+    eMIPSABI_N32 = 0x00004000,
+    eMIPSABI_N64 = 0x00008000,
+    eMIPSABI_O64 = 0x00020000,
+    eMIPSABI_EABI32 = 0x00040000,
+    eMIPSABI_EABI64 = 0x00080000,
+    eMIPSABI_mask = 0x000ff000
+  };
+
+  // MIPS Floating point ABI Values
+  enum MIPS_ABI_FP {
+    eMIPS_ABI_FP_ANY = 0x00000000,
+    eMIPS_ABI_FP_DOUBLE = 0x00100000, // hard float / -mdouble-float
+    eMIPS_ABI_FP_SINGLE = 0x00200000, // hard float / -msingle-float
+    eMIPS_ABI_FP_SOFT = 0x00300000,   // soft float
+    eMIPS_ABI_FP_OLD_64 = 0x00400000, // -mips32r2 -mfp64
+    eMIPS_ABI_FP_XX = 0x00500000,     // -mfpxx
+    eMIPS_ABI_FP_64 = 0x00600000,     // -mips32r2 -mfp64
+    eMIPS_ABI_FP_64A = 0x00700000,    // -mips32r2 -mfp64 -mno-odd-spreg
+    eMIPS_ABI_FP_mask = 0x00700000
+  };
+
+  // ARM specific e_flags
+  enum ARMeflags {
+    eARM_abi_soft_float = 0x00000200,
+    eARM_abi_hard_float = 0x00000400
+  };
+
+  enum Core {
+    eCore_arm_generic,
+    eCore_arm_armv4,
+    eCore_arm_armv4t,
+    eCore_arm_armv5,
+    eCore_arm_armv5e,
+    eCore_arm_armv5t,
+    eCore_arm_armv6,
+    eCore_arm_armv6m,
+    eCore_arm_armv7,
+    eCore_arm_armv7f,
+    eCore_arm_armv7s,
+    eCore_arm_armv7k,
+    eCore_arm_armv7m,
+    eCore_arm_armv7em,
+    eCore_arm_xscale,
+
+    eCore_thumb,
+    eCore_thumbv4t,
+    eCore_thumbv5,
+    eCore_thumbv5e,
+    eCore_thumbv6,
+    eCore_thumbv6m,
+    eCore_thumbv7,
+    eCore_thumbv7s,
+    eCore_thumbv7k,
+    eCore_thumbv7f,
+    eCore_thumbv7m,
+    eCore_thumbv7em,
+    eCore_arm_arm64,
+    eCore_arm_armv8,
+    eCore_arm_aarch64,
+
+    eCore_mips32,
+    eCore_mips32r2,
+    eCore_mips32r3,
+    eCore_mips32r5,
+    eCore_mips32r6,
+    eCore_mips32el,
+    eCore_mips32r2el,
+    eCore_mips32r3el,
+    eCore_mips32r5el,
+    eCore_mips32r6el,
+    eCore_mips64,
+    eCore_mips64r2,
+    eCore_mips64r3,
+    eCore_mips64r5,
+    eCore_mips64r6,
+    eCore_mips64el,
+    eCore_mips64r2el,
+    eCore_mips64r3el,
+    eCore_mips64r5el,
+    eCore_mips64r6el,
+
+    eCore_ppc_generic,
+    eCore_ppc_ppc601,
+    eCore_ppc_ppc602,
+    eCore_ppc_ppc603,
+    eCore_ppc_ppc603e,
+    eCore_ppc_ppc603ev,
+    eCore_ppc_ppc604,
+    eCore_ppc_ppc604e,
+    eCore_ppc_ppc620,
+    eCore_ppc_ppc750,
+    eCore_ppc_ppc7400,
+    eCore_ppc_ppc7450,
+    eCore_ppc_ppc970,
+
+    eCore_ppc64le_generic,
+    eCore_ppc64_generic,
+    eCore_ppc64_ppc970_64,
+
+    eCore_s390x_generic,
+
+    eCore_sparc_generic,
+
+    eCore_sparc9_generic,
+
+    eCore_x86_32_i386,
+    eCore_x86_32_i486,
+    eCore_x86_32_i486sx,
+    eCore_x86_32_i686,
+
+    eCore_x86_64_x86_64,
+    eCore_x86_64_x86_64h, // Haswell enabled x86_64
+    eCore_hexagon_generic,
+    eCore_hexagon_hexagonv4,
+    eCore_hexagon_hexagonv5,
+
+    eCore_uknownMach32,
+    eCore_uknownMach64,
+
+    kNumCores,
+
+    kCore_invalid,
+    // The following constants are used for wildcard matching only
+    kCore_any,
+    kCore_arm_any,
+    kCore_ppc_any,
+    kCore_ppc64_any,
+    kCore_x86_32_any,
+    kCore_x86_64_any,
+    kCore_hexagon_any,
+
+    kCore_arm_first = eCore_arm_generic,
+    kCore_arm_last = eCore_arm_xscale,
+
+    kCore_thumb_first = eCore_thumb,
+    kCore_thumb_last = eCore_thumbv7em,
+
+    kCore_ppc_first = eCore_ppc_generic,
+    kCore_ppc_last = eCore_ppc_ppc970,
+
+    kCore_ppc64_first = eCore_ppc64_generic,
+    kCore_ppc64_last = eCore_ppc64_ppc970_64,
+
+    kCore_x86_32_first = eCore_x86_32_i386,
+    kCore_x86_32_last = eCore_x86_32_i686,
+
+    kCore_x86_64_first = eCore_x86_64_x86_64,
+    kCore_x86_64_last = eCore_x86_64_x86_64h,
+
+    kCore_hexagon_first = eCore_hexagon_generic,
+    kCore_hexagon_last = eCore_hexagon_hexagonv5,
+
+    kCore_mips32_first = eCore_mips32,
+    kCore_mips32_last = eCore_mips32r6,
+
+    kCore_mips32el_first = eCore_mips32el,
+    kCore_mips32el_last = eCore_mips32r6el,
+
+    kCore_mips64_first = eCore_mips64,
+    kCore_mips64_last = eCore_mips64r6,
+
+    kCore_mips64el_first = eCore_mips64el,
+    kCore_mips64el_last = eCore_mips64r6el,
+
+    kCore_mips_first = eCore_mips32,
+    kCore_mips_last = eCore_mips64r6el
+
+  };
+
+  /// Default constructor.
+  ///
+  /// Default constructor that initializes the object with invalid cpu type
+  /// and subtype values.
+  ArchSpec();
+
+  /// Constructor over triple.
+  ///
+  /// Constructs an ArchSpec with properties consistent with the given Triple.
+  explicit ArchSpec(const llvm::Triple &triple);
+  explicit ArchSpec(const char *triple_cstr);
+  explicit ArchSpec(llvm::StringRef triple_str);
+  /// Constructor over architecture name.
+  ///
+  /// Constructs an ArchSpec with properties consistent with the given object
+  /// type and architecture name.
+  explicit ArchSpec(ArchitectureType arch_type, uint32_t cpu_type,
+                    uint32_t cpu_subtype);
+
+  /// Destructor.
+  ~ArchSpec();
+
+  /// Assignment operator.
+  ///
+  /// \param[in] rhs another ArchSpec object to copy.
+  ///
+  /// \return A const reference to this object.
+  const ArchSpec &operator=(const ArchSpec &rhs);
+
+  /// Returns true if the OS, vendor and environment fields of the triple are
+  /// unset. The triple is expected to be normalized
+  /// (llvm::Triple::normalize).
+  static bool ContainsOnlyArch(const llvm::Triple &normalized_triple);
+
+  static void ListSupportedArchNames(StringList &list);
+  static size_t AutoComplete(CompletionRequest &request);
+
+  /// Returns a static string representing the current architecture.
+  ///
+  /// \return A static string corresponding to the current
+  ///         architecture.
+  const char *GetArchitectureName() const;
+
+  /// if MIPS architecture return true.
+  ///
+  ///  \return a boolean value.
+  bool IsMIPS() const;
+
+  /// Returns a string representing current architecture as a target CPU for
+  /// tools like compiler, disassembler etc.
+  ///
+  /// \return A string representing target CPU for the current
+  ///         architecture.
+  std::string GetClangTargetCPU() const;
+
+  /// Return a string representing target application ABI.
+  ///
+  /// \return A string representing target application ABI.
+  std::string GetTargetABI() const;
+
+  /// Clears the object state.
+  ///
+  /// Clears the object state back to a default invalid state.
+  void Clear();
+
+  /// Returns the size in bytes of an address of the current architecture.
+  ///
+  /// \return The byte size of an address of the current architecture.
+  uint32_t GetAddressByteSize() const;
+
+  /// Returns a machine family for the current architecture.
+  ///
+  /// \return An LLVM arch type.
+  llvm::Triple::ArchType GetMachine() const;
+
+  /// Returns the distribution id of the architecture.
+  ///
+  /// This will be something like "ubuntu", "fedora", etc. on Linux.
+  ///
+  /// \return A ConstString ref containing the distribution id,
+  ///         potentially empty.
+  ConstString GetDistributionId() const;
+
+  /// Set the distribution id of the architecture.
+  ///
+  /// This will be something like "ubuntu", "fedora", etc. on Linux. This
+  /// should be the same value returned by HostInfo::GetDistributionId ().
+  void SetDistributionId(const char *distribution_id);
+
+  /// Tests if this ArchSpec is valid.
+  ///
+  /// \return True if the current architecture is valid, false
+  ///         otherwise.
+  bool IsValid() const {
+    return m_core >= eCore_arm_generic && m_core < kNumCores;
+  }
+  explicit operator bool() const { return IsValid(); }
+
+  bool TripleVendorWasSpecified() const {
+    return !m_triple.getVendorName().empty();
+  }
+
+  bool TripleOSWasSpecified() const { return !m_triple.getOSName().empty(); }
+
+  bool TripleEnvironmentWasSpecified() const {
+    return m_triple.hasEnvironment();
+  }
+
+  /// Merges fields from another ArchSpec into this ArchSpec.
+  ///
+  /// This will use the supplied ArchSpec to fill in any fields of the triple
+  /// in this ArchSpec which were unspecified.  This can be used to refine a
+  /// generic ArchSpec with a more specific one. For example, if this
+  /// ArchSpec's triple is something like i386-unknown-unknown-unknown, and we
+  /// have a triple which is x64-pc-windows-msvc, then merging that triple
+  /// into this one will result in the triple i386-pc-windows-msvc.
+  ///
+  void MergeFrom(const ArchSpec &other);
+
+  /// Change the architecture object type, CPU type and OS type.
+  ///
+  /// \param[in] arch_type The object type of this ArchSpec.
+  ///
+  /// \param[in] cpu The required CPU type.
+  ///
+  /// \param[in] os The optional OS type
+  /// The default value of 0 was chosen to from the ELF spec value
+  /// ELFOSABI_NONE.  ELF is the only one using this parameter.  If another
+  /// format uses this parameter and 0 does not work, use a value over
+  /// 255 because in the ELF header this is value is only a byte.
+  ///
+  /// \return True if the object, and CPU were successfully set.
+  ///
+  /// As a side effect, the vendor value is usually set to unknown. The
+  /// exceptions are
+  ///   aarch64-apple-ios
+  ///   arm-apple-ios
+  ///   thumb-apple-ios
+  ///   x86-apple-
+  ///   x86_64-apple-
+  ///
+  /// As a side effect, the os value is usually set to unknown The exceptions
+  /// are
+  ///   *-*-aix
+  ///   aarch64-apple-ios
+  ///   arm-apple-ios
+  ///   thumb-apple-ios
+  ///   powerpc-apple-darwin
+  ///   *-*-freebsd
+  ///   *-*-linux
+  ///   *-*-netbsd
+  ///   *-*-openbsd
+  ///   *-*-solaris
+  bool SetArchitecture(ArchitectureType arch_type, uint32_t cpu, uint32_t sub,
+                       uint32_t os = 0);
+
+  /// Returns the byte order for the architecture specification.
+  ///
+  /// \return The endian enumeration for the current endianness of
+  ///     the architecture specification
+  lldb::ByteOrder GetByteOrder() const;
+
+  /// Sets this ArchSpec's byte order.
+  ///
+  /// In the common case there is no need to call this method as the byte
+  /// order can almost always be determined by the architecture. However, many
+  /// CPU's are bi-endian (ARM, Alpha, PowerPC, etc) and the default/assumed
+  /// byte order may be incorrect.
+  void SetByteOrder(lldb::ByteOrder byte_order) { m_byte_order = byte_order; }
+
+  uint32_t GetMinimumOpcodeByteSize() const;
+
+  uint32_t GetMaximumOpcodeByteSize() const;
+
+  Core GetCore() const { return m_core; }
+
+  uint32_t GetMachOCPUType() const;
+
+  uint32_t GetMachOCPUSubType() const;
+
+  /// Architecture data byte width accessor
+  ///
+  /// \return the size in 8-bit (host) bytes of a minimum addressable unit
+  /// from the Architecture's data bus
+  uint32_t GetDataByteSize() const;
+
+  /// Architecture code byte width accessor
+  ///
+  /// \return the size in 8-bit (host) bytes of a minimum addressable unit
+  /// from the Architecture's code bus
+  uint32_t GetCodeByteSize() const;
+
+  /// Architecture triple accessor.
+  ///
+  /// \return A triple describing this ArchSpec.
+  llvm::Triple &GetTriple() { return m_triple; }
+
+  /// Architecture triple accessor.
+  ///
+  /// \return A triple describing this ArchSpec.
+  const llvm::Triple &GetTriple() const { return m_triple; }
+
+  void DumpTriple(Stream &s) const;
+
+  /// Architecture triple setter.
+  ///
+  /// Configures this ArchSpec according to the given triple.  If the triple
+  /// has unknown components in all of the vendor, OS, and the optional
+  /// environment field (i.e. "i386-unknown-unknown") then default values are
+  /// taken from the host.  Architecture and environment components are used
+  /// to further resolve the CPU type and subtype, endian characteristics,
+  /// etc.
+  ///
+  /// \return A triple describing this ArchSpec.
+  bool SetTriple(const llvm::Triple &triple);
+
+  bool SetTriple(llvm::StringRef triple_str);
+
+  /// Returns the default endianness of the architecture.
+  ///
+  /// \return The endian enumeration for the default endianness of
+  ///         the architecture.
+  lldb::ByteOrder GetDefaultEndian() const;
+
+  /// Returns true if 'char' is a signed type by default in the architecture
+  /// false otherwise
+  ///
+  /// \return True if 'char' is a signed type by default on the
+  ///         architecture and false otherwise.
+  bool CharIsSignedByDefault() const;
+
+  /// Compare an ArchSpec to another ArchSpec, requiring an exact cpu type
+  /// match between them. e.g. armv7s is not an exact match with armv7 - this
+  /// would return false
+  ///
+  /// \return true if the two ArchSpecs match.
+  bool IsExactMatch(const ArchSpec &rhs) const;
+
+  /// Compare an ArchSpec to another ArchSpec, requiring a compatible cpu type
+  /// match between them. e.g. armv7s is compatible with armv7 - this method
+  /// would return true
+  ///
+  /// \return true if the two ArchSpecs are compatible
+  bool IsCompatibleMatch(const ArchSpec &rhs) const;
+
+  bool IsFullySpecifiedTriple() const;
+
+  void PiecewiseTripleCompare(const ArchSpec &other, bool &arch_different,
+                              bool &vendor_different, bool &os_different,
+                              bool &os_version_different,
+                              bool &env_different) const;
+
+  /// Detect whether this architecture uses thumb code exclusively
+  ///
+  /// Some embedded ARM chips (e.g. the ARM Cortex M0-7 line) can only execute
+  /// the Thumb instructions, never Arm.  We should normally pick up
+  /// arm/thumbness from their the processor status bits (cpsr/xpsr) or hints
+  /// on each function - but when doing bare-boards low level debugging
+  /// (especially common with these embedded processors), we may not have
+  /// those things easily accessible.
+  ///
+  /// \return true if this is an arm ArchSpec which can only execute Thumb
+  ///         instructions
+  bool IsAlwaysThumbInstructions() const;
+
+  uint32_t GetFlags() const { return m_flags; }
+
+  void SetFlags(uint32_t flags) { m_flags = flags; }
+
+  void SetFlags(std::string elf_abi);
+
+protected:
+  bool IsEqualTo(const ArchSpec &rhs, bool exact_match) const;
+  void UpdateCore();
+
+  llvm::Triple m_triple;
+  Core m_core = kCore_invalid;
+  lldb::ByteOrder m_byte_order = lldb::eByteOrderInvalid;
+
+  // Additional arch flags which we cannot get from triple and core For MIPS
+  // these are application specific extensions like micromips, mips16 etc.
+  uint32_t m_flags = 0;
+
+  ConstString m_distribution_id;
+
+  // Called when m_def or m_entry are changed.  Fills in all remaining members
+  // with default values.
+  void CoreUpdated(bool update_triple);
+};
+
+/// \fn bool operator< (const ArchSpec& lhs, const ArchSpec& rhs) Less than
+/// operator.
+///
+/// Tests two ArchSpec objects to see if \a lhs is less than \a rhs.
+///
+/// \param[in] lhs The Left Hand Side ArchSpec object to compare. \param[in]
+/// rhs The Left Hand Side ArchSpec object to compare.
+///
+/// \return true if \a lhs is less than \a rhs
+bool operator<(const ArchSpec &lhs, const ArchSpec &rhs);
+bool operator==(const ArchSpec &lhs, const ArchSpec &rhs);
+
+bool ParseMachCPUDashSubtypeTriple(llvm::StringRef triple_str, ArchSpec &arch);
+
+} // namespace lldb_private
+
+#endif // #ifndef LLDB_UTILITY_ARCHSPEC_H
diff --git a/linux-x64/clang/include/lldb/Utility/Args.h b/linux-x64/clang/include/lldb/Utility/Args.h
new file mode 100644
index 0000000..6f25849
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Args.h
@@ -0,0 +1,412 @@
+//===-- Args.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_ARGS_H
+#define LLDB_UTILITY_ARGS_H
+
+#include "lldb/Utility/Environment.h"
+#include "lldb/lldb-private-types.h"
+#include "lldb/lldb-types.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace lldb_private {
+
+/// \class Args Args.h "lldb/Utility/Args.h"
+/// A command line argument class.
+///
+/// The Args class is designed to be fed a command line. The command line is
+/// copied into an internal buffer and then split up into arguments. Arguments
+/// are space delimited if there are no quotes (single, double, or backtick
+/// quotes) surrounding the argument. Spaces can be escaped using a \
+/// character to avoid having to surround an argument that contains a space
+/// with quotes.
+class Args {
+public:
+  struct ArgEntry {
+  private:
+    friend class Args;
+    std::unique_ptr<char[]> ptr;
+
+    char *data() { return ptr.get(); }
+
+  public:
+    ArgEntry() = default;
+    ArgEntry(llvm::StringRef str, char quote);
+
+    llvm::StringRef ref;
+    char quote;
+    const char *c_str() const { return ptr.get(); }
+
+    /// Returns true if this argument was quoted in any way.
+    bool IsQuoted() const { return quote != '\0'; }
+  };
+
+  /// Construct with an option command string.
+  ///
+  /// \param[in] command
+  ///     A NULL terminated command that will be copied and split up
+  ///     into arguments.
+  ///
+  /// \see Args::SetCommandString(llvm::StringRef)
+  Args(llvm::StringRef command = llvm::StringRef());
+
+  Args(const Args &rhs);
+  explicit Args(const StringList &list);
+
+  Args &operator=(const Args &rhs);
+
+  /// Destructor.
+  ~Args();
+
+  explicit Args(const Environment &env) : Args() {
+    SetArguments(const_cast<const char **>(env.getEnvp().get()));
+  }
+
+  explicit operator Environment() const { return GetConstArgumentVector(); }
+
+  /// Dump all entries to the stream \a s using label \a label_name.
+  ///
+  /// If label_name is nullptr, the dump operation is skipped.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump all arguments in the argument
+  ///     vector.
+  /// \param[in] label_name
+  ///     The label_name to use as the label printed for each
+  ///     entry of the args like so:
+  ///       {label_name}[{index}]={value}
+  void Dump(Stream &s, const char *label_name = "argv") const;
+
+  /// Sets the command string contained by this object.
+  ///
+  /// The command string will be copied and split up into arguments that can
+  /// be accessed via the accessor functions.
+  ///
+  /// \param[in] command
+  ///     A command StringRef that will be copied and split up
+  ///     into arguments.
+  ///
+  /// \see Args::GetArgumentCount() const
+  /// \see Args::GetArgumentAtIndex (size_t) const @see
+  /// Args::GetArgumentVector () \see Args::Shift () \see Args::Unshift (const
+  /// char *)
+  void SetCommandString(llvm::StringRef command);
+
+  bool GetCommandString(std::string &command) const;
+
+  bool GetQuotedCommandString(std::string &command) const;
+
+  /// Gets the number of arguments left in this command object.
+  ///
+  /// \return
+  ///     The number or arguments in this object.
+  size_t GetArgumentCount() const;
+  bool empty() const { return GetArgumentCount() == 0; }
+
+  /// Gets the NULL terminated C string argument pointer for the argument at
+  /// index \a idx.
+  ///
+  /// \return
+  ///     The NULL terminated C string argument pointer if \a idx is a
+  ///     valid argument index, NULL otherwise.
+  const char *GetArgumentAtIndex(size_t idx) const;
+
+  llvm::ArrayRef<ArgEntry> entries() const { return m_entries; }
+  char GetArgumentQuoteCharAtIndex(size_t idx) const;
+
+  using const_iterator = std::vector<ArgEntry>::const_iterator;
+
+  const_iterator begin() const { return m_entries.begin(); }
+  const_iterator end() const { return m_entries.end(); }
+
+  size_t size() const { return GetArgumentCount(); }
+  const ArgEntry &operator[](size_t n) const { return m_entries[n]; }
+
+  /// Gets the argument vector.
+  ///
+  /// The value returned by this function can be used by any function that
+  /// takes and vector. The return value is just like \a argv in the standard
+  /// C entry point function:
+  ///     \code
+  ///         int main (int argc, const char **argv);
+  ///     \endcode
+  ///
+  /// \return
+  ///     An array of NULL terminated C string argument pointers that
+  ///     also has a terminating NULL C string pointer
+  char **GetArgumentVector();
+
+  /// Gets the argument vector.
+  ///
+  /// The value returned by this function can be used by any function that
+  /// takes and vector. The return value is just like \a argv in the standard
+  /// C entry point function:
+  ///     \code
+  ///         int main (int argc, const char **argv);
+  ///     \endcode
+  ///
+  /// \return
+  ///     An array of NULL terminate C string argument pointers that
+  ///     also has a terminating NULL C string pointer
+  const char **GetConstArgumentVector() const;
+
+  /// Gets the argument as an ArrayRef. Note that the return value does *not*
+  /// have a nullptr const char * at the end, as the size of the list is
+  /// embedded in the ArrayRef object.
+  llvm::ArrayRef<const char *> GetArgumentArrayRef() const {
+    return llvm::makeArrayRef(m_argv).drop_back();
+  }
+
+  /// Appends a new argument to the end of the list argument list.
+  ///
+  /// \param[in] arg_cstr
+  ///     The new argument as a NULL terminated C string.
+  ///
+  /// \param[in] quote_char
+  ///     If the argument was originally quoted, put in the quote char here.
+  void AppendArgument(llvm::StringRef arg_str, char quote_char = '\0');
+
+  void AppendArguments(const Args &rhs);
+
+  void AppendArguments(const char **argv);
+
+  /// Insert the argument value at index \a idx to \a arg_cstr.
+  ///
+  /// \param[in] idx
+  ///     The index of where to insert the argument.
+  ///
+  /// \param[in] arg_cstr
+  ///     The new argument as a NULL terminated C string.
+  ///
+  /// \param[in] quote_char
+  ///     If the argument was originally quoted, put in the quote char here.
+  ///
+  /// \return
+  ///     The NULL terminated C string of the copy of \a arg_cstr.
+  void InsertArgumentAtIndex(size_t idx, llvm::StringRef arg_str,
+                             char quote_char = '\0');
+
+  /// Replaces the argument value at index \a idx to \a arg_cstr if \a idx is
+  /// a valid argument index.
+  ///
+  /// \param[in] idx
+  ///     The index of the argument that will have its value replaced.
+  ///
+  /// \param[in] arg_cstr
+  ///     The new argument as a NULL terminated C string.
+  ///
+  /// \param[in] quote_char
+  ///     If the argument was originally quoted, put in the quote char here.
+  void ReplaceArgumentAtIndex(size_t idx, llvm::StringRef arg_str,
+                              char quote_char = '\0');
+
+  /// Deletes the argument value at index
+  /// if \a idx is a valid argument index.
+  ///
+  /// \param[in] idx
+  ///     The index of the argument that will have its value replaced.
+  ///
+  void DeleteArgumentAtIndex(size_t idx);
+
+  /// Sets the argument vector value, optionally copying all arguments into an
+  /// internal buffer.
+  ///
+  /// Sets the arguments to match those found in \a argv. All argument strings
+  /// will be copied into an internal buffers.
+  //
+  //  FIXME: Handle the quote character somehow.
+  void SetArguments(size_t argc, const char **argv);
+
+  void SetArguments(const char **argv);
+
+  /// Shifts the first argument C string value of the array off the argument
+  /// array.
+  ///
+  /// The string value will be freed, so a copy of the string should be made
+  /// by calling Args::GetArgumentAtIndex (size_t) const first and copying the
+  /// returned value before calling Args::Shift().
+  ///
+  /// \see Args::GetArgumentAtIndex (size_t) const
+  void Shift();
+
+  /// Inserts a class owned copy of \a arg_cstr at the beginning of the
+  /// argument vector.
+  ///
+  /// A copy \a arg_cstr will be made.
+  ///
+  /// \param[in] arg_cstr
+  ///     The argument to push on the front of the argument stack.
+  ///
+  /// \param[in] quote_char
+  ///     If the argument was originally quoted, put in the quote char here.
+  void Unshift(llvm::StringRef arg_str, char quote_char = '\0');
+
+  // Clear the arguments.
+  //
+  // For re-setting or blanking out the list of arguments.
+  void Clear();
+
+  static const char *StripSpaces(std::string &s, bool leading = true,
+                                 bool trailing = true,
+                                 bool return_null_if_empty = true);
+
+  static bool UInt64ValueIsValidForByteSize(uint64_t uval64,
+                                            size_t total_byte_size) {
+    if (total_byte_size > 8)
+      return false;
+
+    if (total_byte_size == 8)
+      return true;
+
+    const uint64_t max = (static_cast<uint64_t>(1)
+                          << static_cast<uint64_t>(total_byte_size * 8)) -
+                         1;
+    return uval64 <= max;
+  }
+
+  static bool SInt64ValueIsValidForByteSize(int64_t sval64,
+                                            size_t total_byte_size) {
+    if (total_byte_size > 8)
+      return false;
+
+    if (total_byte_size == 8)
+      return true;
+
+    const int64_t max = (static_cast<int64_t>(1)
+                         << static_cast<uint64_t>(total_byte_size * 8 - 1)) -
+                        1;
+    const int64_t min = ~(max);
+    return min <= sval64 && sval64 <= max;
+  }
+
+  static lldb::Encoding
+  StringToEncoding(llvm::StringRef s,
+                   lldb::Encoding fail_value = lldb::eEncodingInvalid);
+
+  static uint32_t StringToGenericRegister(llvm::StringRef s);
+
+  static const char *GetShellSafeArgument(const FileSpec &shell,
+                                          const char *unsafe_arg,
+                                          std::string &safe_arg);
+
+  // EncodeEscapeSequences will change the textual representation of common
+  // escape sequences like "\n" (two characters) into a single '\n'. It does
+  // this for all of the supported escaped sequences and for the \0ooo (octal)
+  // and \xXX (hex). The resulting "dst" string will contain the character
+  // versions of all supported escape sequences. The common supported escape
+  // sequences are: "\a", "\b", "\f", "\n", "\r", "\t", "\v", "\'", "\"", "\\".
+
+  static void EncodeEscapeSequences(const char *src, std::string &dst);
+
+  // ExpandEscapeSequences will change a string of possibly non-printable
+  // characters and expand them into text. So '\n' will turn into two
+  // characters like "\n" which is suitable for human reading. When a character
+  // is not printable and isn't one of the common in escape sequences listed in
+  // the help for EncodeEscapeSequences, then it will be encoded as octal.
+  // Printable characters are left alone.
+  static void ExpandEscapedCharacters(const char *src, std::string &dst);
+
+  static std::string EscapeLLDBCommandArgument(const std::string &arg,
+                                               char quote_char);
+
+private:
+  std::vector<ArgEntry> m_entries;
+  std::vector<char *> m_argv;
+};
+
+/// \class OptionsWithRaw Args.h "lldb/Utility/Args.h"
+/// A pair of an option list with a 'raw' string as a suffix.
+///
+/// This class works similar to Args, but handles the case where we have a
+/// trailing string that shouldn't be interpreted as a list of arguments but
+/// preserved as is. It is also only useful for handling command line options
+/// (e.g. '-foo bar -i0') that start with a dash.
+///
+/// The leading option list is optional. If the first non-space character
+/// in the string starts with a dash, and the string contains an argument
+/// that is an unquoted double dash (' -- '), then everything up to the double
+/// dash is parsed as a list of arguments. Everything after the double dash
+/// is interpreted as the raw suffix string. Note that the space behind the
+/// double dash is not part of the raw suffix.
+///
+/// All strings not matching the above format as considered to be just a raw
+/// string without any options.
+///
+/// \see Args
+class OptionsWithRaw {
+public:
+  /// Parse the given string as a list of optional arguments with a raw suffix.
+  ///
+  /// See the class description for a description of the input format.
+  ///
+  /// \param[in] argument_string
+  ///     The string that should be parsed.
+  explicit OptionsWithRaw(llvm::StringRef argument_string);
+
+  /// Returns true if there are any arguments before the raw suffix.
+  bool HasArgs() const { return m_has_args; }
+
+  /// Returns the list of arguments.
+  ///
+  /// You can only call this method if HasArgs returns true.
+  Args &GetArgs() {
+    assert(m_has_args);
+    return m_args;
+  }
+
+  /// Returns the list of arguments.
+  ///
+  /// You can only call this method if HasArgs returns true.
+  const Args &GetArgs() const {
+    assert(m_has_args);
+    return m_args;
+  }
+
+  /// Returns the part of the input string that was used for parsing the
+  /// argument list. This string also includes the double dash that is used
+  /// for separating the argument list from the suffix.
+  ///
+  /// You can only call this method if HasArgs returns true.
+  llvm::StringRef GetArgStringWithDelimiter() const {
+    assert(m_has_args);
+    return m_arg_string_with_delimiter;
+  }
+
+  /// Returns the part of the input string that was used for parsing the
+  /// argument list.
+  ///
+  /// You can only call this method if HasArgs returns true.
+  llvm::StringRef GetArgString() const {
+    assert(m_has_args);
+    return m_arg_string;
+  }
+
+  /// Returns the raw suffix part of the parsed string.
+  const std::string &GetRawPart() const { return m_suffix; }
+
+private:
+  void SetFromString(llvm::StringRef arg_string);
+
+  /// Keeps track if we have parsed and stored any arguments.
+  bool m_has_args = false;
+  Args m_args;
+  llvm::StringRef m_arg_string;
+  llvm::StringRef m_arg_string_with_delimiter;
+
+  // FIXME: This should be a StringRef, but some of the calling code expect a
+  // C string here so only a real std::string is possible.
+  std::string m_suffix;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_ARGS_H
diff --git a/linux-x64/clang/include/lldb/Utility/Baton.h b/linux-x64/clang/include/lldb/Utility/Baton.h
new file mode 100644
index 0000000..4050f2a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Baton.h
@@ -0,0 +1,74 @@
+//===-- Baton.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Baton_h_
+#define lldb_Baton_h_
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-public.h"
+
+#include <memory>
+
+namespace lldb_private {
+class Stream;
+}
+
+namespace lldb_private {
+
+/// \class Baton Baton.h "lldb/Core/Baton.h"
+/// A class designed to wrap callback batons so they can cleanup
+///        any acquired resources
+///
+/// This class is designed to be used by any objects that have a callback
+/// function that takes a baton where the baton might need to
+/// free/delete/close itself.
+///
+/// The default behavior is to not free anything. Subclasses can free any
+/// needed resources in their destructors.
+class Baton {
+public:
+  Baton() {}
+  virtual ~Baton() {}
+
+  virtual void *data() = 0;
+
+  virtual void GetDescription(Stream *s,
+                              lldb::DescriptionLevel level) const = 0;
+};
+
+class UntypedBaton : public Baton {
+public:
+  UntypedBaton(void *Data) : m_data(Data) {}
+  ~UntypedBaton() override {
+    // The default destructor for an untyped baton does NOT attempt to clean up
+    // anything in m_data.
+  }
+
+  void *data() override { return m_data; }
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) const override;
+
+  void *m_data; // Leave baton public for easy access
+};
+
+template <typename T> class TypedBaton : public Baton {
+public:
+  explicit TypedBaton(std::unique_ptr<T> Item) : Item(std::move(Item)) {}
+
+  T *getItem() { return Item.get(); }
+  const T *getItem() const { return Item.get(); }
+
+  void *data() override { return Item.get(); }
+  void GetDescription(Stream *s, lldb::DescriptionLevel level) const override {}
+
+protected:
+  std::unique_ptr<T> Item;
+};
+
+} // namespace lldb_private
+
+#endif // lldb_Baton_h_
diff --git a/linux-x64/clang/include/lldb/Utility/Broadcaster.h b/linux-x64/clang/include/lldb/Utility/Broadcaster.h
new file mode 100644
index 0000000..fe4d1ca
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Broadcaster.h
@@ -0,0 +1,558 @@
+//===-- Broadcaster.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_BROADCASTER_H
+#define LLDB_UTILITY_BROADCASTER_H
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+
+#include "llvm/ADT/SmallVector.h"
+
+#include <cstdint>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <set>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace lldb_private {
+class Broadcaster;
+class EventData;
+class Listener;
+class Stream;
+} // namespace lldb_private
+
+namespace lldb_private {
+
+/// lldb::BroadcastEventSpec
+///
+/// This class is used to specify a kind of event to register for.  The
+/// Debugger maintains a list of BroadcastEventSpec's and when it is made
+class BroadcastEventSpec {
+public:
+  BroadcastEventSpec(ConstString broadcaster_class, uint32_t event_bits)
+      : m_broadcaster_class(broadcaster_class), m_event_bits(event_bits) {}
+
+  ~BroadcastEventSpec() = default;
+
+  ConstString GetBroadcasterClass() const { return m_broadcaster_class; }
+
+  uint32_t GetEventBits() const { return m_event_bits; }
+
+  /// Tell whether this BroadcastEventSpec is contained in in_spec. That is:
+  /// (a) the two spec's share the same broadcaster class (b) the event bits of
+  /// this spec are wholly contained in those of in_spec.
+  bool IsContainedIn(const BroadcastEventSpec &in_spec) const {
+    if (m_broadcaster_class != in_spec.GetBroadcasterClass())
+      return false;
+    uint32_t in_bits = in_spec.GetEventBits();
+    if (in_bits == m_event_bits)
+      return true;
+
+    if ((m_event_bits & in_bits) != 0 && (m_event_bits & ~in_bits) == 0)
+      return true;
+
+    return false;
+  }
+
+  bool operator<(const BroadcastEventSpec &rhs) const;
+  BroadcastEventSpec &operator=(const BroadcastEventSpec &rhs);
+
+private:
+  ConstString m_broadcaster_class;
+  uint32_t m_event_bits;
+};
+
+class BroadcasterManager
+    : public std::enable_shared_from_this<BroadcasterManager> {
+public:
+  friend class Listener;
+
+protected:
+  BroadcasterManager();
+
+public:
+  /// Listeners hold onto weak pointers to their broadcaster managers.  So they
+  /// must be made into shared pointers, which you do with
+  /// MakeBroadcasterManager.
+  static lldb::BroadcasterManagerSP MakeBroadcasterManager();
+
+  ~BroadcasterManager() = default;
+
+  uint32_t RegisterListenerForEvents(const lldb::ListenerSP &listener_sp,
+                                     const BroadcastEventSpec &event_spec);
+
+  bool UnregisterListenerForEvents(const lldb::ListenerSP &listener_sp,
+                                   const BroadcastEventSpec &event_spec);
+
+  lldb::ListenerSP
+  GetListenerForEventSpec(const BroadcastEventSpec &event_spec) const;
+
+  void SignUpListenersForBroadcaster(Broadcaster &broadcaster);
+
+  void RemoveListener(const lldb::ListenerSP &listener_sp);
+
+  void RemoveListener(Listener *listener);
+
+  void Clear();
+
+private:
+  typedef std::pair<BroadcastEventSpec, lldb::ListenerSP> event_listener_key;
+  typedef std::map<BroadcastEventSpec, lldb::ListenerSP> collection;
+  typedef std::set<lldb::ListenerSP> listener_collection;
+  collection m_event_map;
+  listener_collection m_listeners;
+
+  mutable std::recursive_mutex m_manager_mutex;
+
+  // A couple of comparator classes for find_if:
+
+  class BroadcasterClassMatches {
+  public:
+    BroadcasterClassMatches(ConstString broadcaster_class)
+        : m_broadcaster_class(broadcaster_class) {}
+
+    ~BroadcasterClassMatches() = default;
+
+    bool operator()(const event_listener_key &input) const {
+      return (input.first.GetBroadcasterClass() == m_broadcaster_class);
+    }
+
+  private:
+    ConstString m_broadcaster_class;
+  };
+
+  class BroadcastEventSpecMatches {
+  public:
+    BroadcastEventSpecMatches(const BroadcastEventSpec &broadcaster_spec)
+        : m_broadcaster_spec(broadcaster_spec) {}
+
+    ~BroadcastEventSpecMatches() = default;
+
+    bool operator()(const event_listener_key &input) const {
+      return (input.first.IsContainedIn(m_broadcaster_spec));
+    }
+
+  private:
+    BroadcastEventSpec m_broadcaster_spec;
+  };
+
+  class ListenerMatchesAndSharedBits {
+  public:
+    explicit ListenerMatchesAndSharedBits(
+        const BroadcastEventSpec &broadcaster_spec,
+        const lldb::ListenerSP &listener_sp)
+        : m_broadcaster_spec(broadcaster_spec), m_listener_sp(listener_sp) {}
+
+    ~ListenerMatchesAndSharedBits() = default;
+
+    bool operator()(const event_listener_key &input) const {
+      return (input.first.GetBroadcasterClass() ==
+                  m_broadcaster_spec.GetBroadcasterClass() &&
+              (input.first.GetEventBits() &
+               m_broadcaster_spec.GetEventBits()) != 0 &&
+              input.second == m_listener_sp);
+    }
+
+  private:
+    BroadcastEventSpec m_broadcaster_spec;
+    const lldb::ListenerSP m_listener_sp;
+  };
+
+  class ListenerMatches {
+  public:
+    explicit ListenerMatches(const lldb::ListenerSP &in_listener_sp)
+        : m_listener_sp(in_listener_sp) {}
+
+    ~ListenerMatches() = default;
+
+    bool operator()(const event_listener_key &input) const {
+      if (input.second == m_listener_sp)
+        return true;
+
+      return false;
+    }
+
+  private:
+    const lldb::ListenerSP m_listener_sp;
+  };
+
+  class ListenerMatchesPointer {
+  public:
+    ListenerMatchesPointer(const Listener *in_listener)
+        : m_listener(in_listener) {}
+
+    ~ListenerMatchesPointer() = default;
+
+    bool operator()(const event_listener_key &input) const {
+      if (input.second.get() == m_listener)
+        return true;
+
+      return false;
+    }
+
+    bool operator()(const lldb::ListenerSP &input) const {
+      if (input.get() == m_listener)
+        return true;
+
+      return false;
+    }
+
+  private:
+    const Listener *m_listener;
+  };
+};
+
+/// \class Broadcaster Broadcaster.h "lldb/Utility/Broadcaster.h" An event
+/// broadcasting class.
+///
+/// The Broadcaster class is designed to be subclassed by objects that wish to
+/// vend events in a multi-threaded environment. Broadcaster objects can each
+/// vend 32 events. Each event is represented by a bit in a 32 bit value and
+/// these bits can be set:
+///     \see Broadcaster::SetEventBits(uint32_t)
+/// or cleared:
+///     \see Broadcaster::ResetEventBits(uint32_t)
+/// When an event gets set the Broadcaster object will notify the Listener
+/// object that is listening for the event (if there is one).
+///
+/// Subclasses should provide broadcast bit definitions for any events they
+/// vend, typically using an enumeration:
+///     \code
+///         class Foo : public Broadcaster
+///         {
+///         public:
+///         // Broadcaster event bits definitions.
+///         enum
+///         {
+///             eBroadcastBitOne   = (1 << 0),
+///             eBroadcastBitTwo   = (1 << 1),
+///             eBroadcastBitThree = (1 << 2),
+///             ...
+///         };
+///     \endcode
+class Broadcaster {
+  friend class Listener;
+  friend class Event;
+
+public:
+  /// Construct with a broadcaster with a name.
+  ///
+  /// \param[in] name
+  ///     A NULL terminated C string that contains the name of the
+  ///     broadcaster object.
+  Broadcaster(lldb::BroadcasterManagerSP manager_sp, const char *name);
+
+  /// Destructor.
+  ///
+  /// The destructor is virtual since this class gets subclassed.
+  virtual ~Broadcaster();
+
+  void CheckInWithManager();
+
+  /// Broadcast an event which has no associated data.
+  ///
+  /// \param[in] event_type
+  ///     The element from the enum defining this broadcaster's events
+  ///     that is being broadcast.
+  ///
+  /// \param[in] event_data
+  ///     User event data that will be owned by the lldb::Event that
+  ///     is created internally.
+  ///
+  /// \param[in] unique
+  ///     If true, then only add an event of this type if there isn't
+  ///     one already in the queue.
+  ///
+  void BroadcastEvent(lldb::EventSP &event_sp) {
+    m_broadcaster_sp->BroadcastEvent(event_sp);
+  }
+
+  void BroadcastEventIfUnique(lldb::EventSP &event_sp) {
+    m_broadcaster_sp->BroadcastEventIfUnique(event_sp);
+  }
+
+  void BroadcastEvent(uint32_t event_type,
+                      const lldb::EventDataSP &event_data_sp) {
+    m_broadcaster_sp->BroadcastEvent(event_type, event_data_sp);
+  }
+
+  void BroadcastEvent(uint32_t event_type, EventData *event_data = nullptr) {
+    m_broadcaster_sp->BroadcastEvent(event_type, event_data);
+  }
+
+  void BroadcastEventIfUnique(uint32_t event_type,
+                              EventData *event_data = nullptr) {
+    m_broadcaster_sp->BroadcastEventIfUnique(event_type, event_data);
+  }
+
+  void Clear() { m_broadcaster_sp->Clear(); }
+
+  virtual void AddInitialEventsToListener(const lldb::ListenerSP &listener_sp,
+                                          uint32_t requested_events);
+
+  /// Listen for any events specified by \a event_mask.
+  ///
+  /// Only one listener can listen to each event bit in a given Broadcaster.
+  /// Once a listener has acquired an event bit, no other broadcaster will
+  /// have access to it until it is relinquished by the first listener that
+  /// gets it. The actual event bits that get acquired by \a listener may be
+  /// different from what is requested in \a event_mask, and to track this the
+  /// actual event bits that are acquired get returned.
+  ///
+  /// \param[in] listener
+  ///     The Listener object that wants to monitor the events that
+  ///     get broadcast by this object.
+  ///
+  /// \param[in] event_mask
+  ///     A bit mask that indicates which events the listener is
+  ///     asking to monitor.
+  ///
+  /// \return
+  ///     The actual event bits that were acquired by \a listener.
+  uint32_t AddListener(const lldb::ListenerSP &listener_sp,
+                       uint32_t event_mask) {
+    return m_broadcaster_sp->AddListener(listener_sp, event_mask);
+  }
+
+  /// Get the NULL terminated C string name of this Broadcaster object.
+  ///
+  /// \return
+  ///     The NULL terminated C string name of this Broadcaster.
+  ConstString GetBroadcasterName() { return m_broadcaster_name; }
+
+  /// Get the event name(s) for one or more event bits.
+  ///
+  /// \param[in] event_mask
+  ///     A bit mask that indicates which events to get names for.
+  ///
+  /// \return
+  ///     The NULL terminated C string name of this Broadcaster.
+  bool GetEventNames(Stream &s, const uint32_t event_mask,
+                     bool prefix_with_broadcaster_name) const {
+    return m_broadcaster_sp->GetEventNames(s, event_mask,
+                                           prefix_with_broadcaster_name);
+  }
+
+  /// Set the name for an event bit.
+  ///
+  /// \param[in] event_mask
+  ///     A bit mask that indicates which events the listener is
+  ///     asking to monitor.
+  ///
+  /// \return
+  ///     The NULL terminated C string name of this Broadcaster.
+  void SetEventName(uint32_t event_mask, const char *name) {
+    m_broadcaster_sp->SetEventName(event_mask, name);
+  }
+
+  const char *GetEventName(uint32_t event_mask) const {
+    return m_broadcaster_sp->GetEventName(event_mask);
+  }
+
+  bool EventTypeHasListeners(uint32_t event_type) {
+    return m_broadcaster_sp->EventTypeHasListeners(event_type);
+  }
+
+  /// Removes a Listener from this broadcasters list and frees the event bits
+  /// specified by \a event_mask that were previously acquired by \a listener
+  /// (assuming \a listener was listening to this object) for other listener
+  /// objects to use.
+  ///
+  /// \param[in] listener
+  ///     A Listener object that previously called AddListener.
+  ///
+  /// \param[in] event_mask
+  ///     The event bits \a listener wishes to relinquish.
+  ///
+  /// \return
+  ///     \b True if the listener was listening to this broadcaster
+  ///     and was removed, \b false otherwise.
+  ///
+  /// \see uint32_t Broadcaster::AddListener (Listener*, uint32_t)
+  bool RemoveListener(const lldb::ListenerSP &listener_sp,
+                      uint32_t event_mask = UINT32_MAX) {
+    return m_broadcaster_sp->RemoveListener(listener_sp, event_mask);
+  }
+
+  /// Provides a simple mechanism to temporarily redirect events from
+  /// broadcaster.  When you call this function passing in a listener and
+  /// event type mask, all events from the broadcaster matching the mask will
+  /// now go to the hijacking listener. Only one hijack can occur at a time.
+  /// If we need more than this we will have to implement a Listener stack.
+  ///
+  /// \param[in] listener
+  ///     A Listener object.  You do not need to call StartListeningForEvents
+  ///     for this broadcaster (that would fail anyway since the event bits
+  ///     would most likely be taken by the listener(s) you are usurping.
+  ///
+  /// \param[in] event_mask
+  ///     The event bits \a listener wishes to hijack.
+  ///
+  /// \return
+  ///     \b True if the event mask could be hijacked, \b false otherwise.
+  ///
+  /// \see uint32_t Broadcaster::AddListener (Listener*, uint32_t)
+  bool HijackBroadcaster(const lldb::ListenerSP &listener_sp,
+                         uint32_t event_mask = UINT32_MAX) {
+    return m_broadcaster_sp->HijackBroadcaster(listener_sp, event_mask);
+  }
+
+  bool IsHijackedForEvent(uint32_t event_mask) {
+    return m_broadcaster_sp->IsHijackedForEvent(event_mask);
+  }
+
+  /// Restore the state of the Broadcaster from a previous hijack attempt.
+  void RestoreBroadcaster() { m_broadcaster_sp->RestoreBroadcaster(); }
+
+  /// This needs to be filled in if you are going to register the broadcaster
+  /// with the broadcaster manager and do broadcaster class matching.
+  /// FIXME: Probably should make a ManagedBroadcaster subclass with all the
+  /// bits needed to work with the BroadcasterManager, so that it is clearer
+  /// how to add one.
+  virtual ConstString &GetBroadcasterClass() const;
+
+  lldb::BroadcasterManagerSP GetManager();
+
+protected:
+  /// BroadcasterImpl contains the actual Broadcaster implementation.  The
+  /// Broadcaster makes a BroadcasterImpl which lives as long as it does.  The
+  /// Listeners & the Events hold a weak pointer to the BroadcasterImpl, so
+  /// that they can survive if a Broadcaster they were listening to is
+  /// destroyed w/o their being able to unregister from it (which can happen if
+  /// the Broadcasters & Listeners are being destroyed on separate threads
+  /// simultaneously. The Broadcaster itself can't be shared out as a weak
+  /// pointer, because some things that are broadcasters (e.g. the Target and
+  /// the Process) are shared in their own right.
+  ///
+  /// For the most part, the Broadcaster functions dispatch to the
+  /// BroadcasterImpl, and are documented in the public Broadcaster API above.
+  class BroadcasterImpl {
+    friend class Listener;
+    friend class Broadcaster;
+
+  public:
+    BroadcasterImpl(Broadcaster &broadcaster);
+
+    ~BroadcasterImpl() = default;
+
+    void BroadcastEvent(lldb::EventSP &event_sp);
+
+    void BroadcastEventIfUnique(lldb::EventSP &event_sp);
+
+    void BroadcastEvent(uint32_t event_type, EventData *event_data = nullptr);
+
+    void BroadcastEvent(uint32_t event_type,
+                        const lldb::EventDataSP &event_data_sp);
+
+    void BroadcastEventIfUnique(uint32_t event_type,
+                                EventData *event_data = nullptr);
+
+    void Clear();
+
+    uint32_t AddListener(const lldb::ListenerSP &listener_sp,
+                         uint32_t event_mask);
+
+    const char *GetBroadcasterName() const {
+      return m_broadcaster.GetBroadcasterName().AsCString();
+    }
+
+    Broadcaster *GetBroadcaster();
+
+    bool GetEventNames(Stream &s, const uint32_t event_mask,
+                       bool prefix_with_broadcaster_name) const;
+
+    void SetEventName(uint32_t event_mask, const char *name) {
+      m_event_names[event_mask] = name;
+    }
+
+    const char *GetEventName(uint32_t event_mask) const {
+      const auto pos = m_event_names.find(event_mask);
+      if (pos != m_event_names.end())
+        return pos->second.c_str();
+      return nullptr;
+    }
+
+    bool EventTypeHasListeners(uint32_t event_type);
+
+    bool RemoveListener(lldb_private::Listener *listener,
+                        uint32_t event_mask = UINT32_MAX);
+
+    bool RemoveListener(const lldb::ListenerSP &listener_sp,
+                        uint32_t event_mask = UINT32_MAX);
+
+    bool HijackBroadcaster(const lldb::ListenerSP &listener_sp,
+                           uint32_t event_mask = UINT32_MAX);
+
+    bool IsHijackedForEvent(uint32_t event_mask);
+
+    void RestoreBroadcaster();
+
+  protected:
+    void PrivateBroadcastEvent(lldb::EventSP &event_sp, bool unique);
+
+    const char *GetHijackingListenerName();
+
+    typedef llvm::SmallVector<std::pair<lldb::ListenerWP, uint32_t>, 4>
+        collection;
+    typedef std::map<uint32_t, std::string> event_names_map;
+
+    llvm::SmallVector<std::pair<lldb::ListenerSP, uint32_t &>, 4>
+    GetListeners();
+
+    /// The broadcaster that this implements.
+    Broadcaster &m_broadcaster;
+
+    /// Optionally define event names for readability and logging for each
+    /// event bit.
+    event_names_map m_event_names;
+
+    /// A list of Listener / event_mask pairs that are listening to this
+    /// broadcaster.
+    collection m_listeners;
+
+    /// A mutex that protects \a m_listeners.
+    std::recursive_mutex m_listeners_mutex;
+
+    /// A simple mechanism to intercept events from a broadcaster
+    std::vector<lldb::ListenerSP> m_hijacking_listeners;
+
+    /// At some point we may want to have a stack or Listener collections, but
+    /// for now this is just for private hijacking.
+    std::vector<uint32_t> m_hijacking_masks;
+
+  private:
+    DISALLOW_COPY_AND_ASSIGN(BroadcasterImpl);
+  };
+
+  typedef std::shared_ptr<BroadcasterImpl> BroadcasterImplSP;
+  typedef std::weak_ptr<BroadcasterImpl> BroadcasterImplWP;
+
+  BroadcasterImplSP GetBroadcasterImpl() { return m_broadcaster_sp; }
+
+  const char *GetHijackingListenerName() {
+    return m_broadcaster_sp->GetHijackingListenerName();
+  }
+
+private:
+  BroadcasterImplSP m_broadcaster_sp;
+  lldb::BroadcasterManagerSP m_manager_sp;
+
+  /// The name of this broadcaster object.
+  const ConstString m_broadcaster_name;
+
+  DISALLOW_COPY_AND_ASSIGN(Broadcaster);
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_BROADCASTER_H
diff --git a/linux-x64/clang/include/lldb/Utility/CleanUp.h b/linux-x64/clang/include/lldb/Utility/CleanUp.h
new file mode 100644
index 0000000..6cd5f33
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/CleanUp.h
@@ -0,0 +1,42 @@
+//===-- CleanUp.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CleanUp_h_
+#define liblldb_CleanUp_h_
+
+#include "lldb/lldb-public.h"
+#include <functional>
+
+namespace lldb_private {
+
+/// Run a cleanup function on scope exit unless it's explicitly disabled.
+class CleanUp {
+  std::function<void()> Clean;
+
+public:
+  /// Register a cleanup function which applies \p Func to a list of arguments.
+  /// Use caution with arguments which are references: they will be copied.
+  template <typename F, typename... Args>
+  CleanUp(F &&Func, Args &&... args)
+      : Clean(std::bind(std::forward<F>(Func), std::forward<Args>(args)...)) {}
+
+  ~CleanUp() {
+    if (Clean)
+      Clean();
+  }
+
+  /// Disable the cleanup.
+  void disable() { Clean = nullptr; }
+
+  // Prevent cleanups from being run more than once.
+  DISALLOW_COPY_AND_ASSIGN(CleanUp);
+};
+
+} // namespace lldb_private
+
+#endif // #ifndef liblldb_CleanUp_h_
diff --git a/linux-x64/clang/include/lldb/Utility/CompletionRequest.h b/linux-x64/clang/include/lldb/Utility/CompletionRequest.h
new file mode 100644
index 0000000..f5ccb01
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/CompletionRequest.h
@@ -0,0 +1,193 @@
+//===-- CompletionRequest.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_COMPLETIONREQUEST_H
+#define LLDB_UTILITY_COMPLETIONREQUEST_H
+
+#include "lldb/Utility/Args.h"
+#include "lldb/Utility/LLDBAssert.h"
+#include "lldb/Utility/StringList.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/StringSet.h"
+
+namespace lldb_private {
+class CompletionResult {
+  /// A single completion and all associated data.
+  struct Completion {
+    Completion(llvm::StringRef completion, llvm::StringRef description)
+        : m_completion(completion.str()), m_descripton(description.str()) {}
+
+    std::string m_completion;
+    std::string m_descripton;
+
+    /// Generates a string that uniquely identifies this completion result.
+    std::string GetUniqueKey() const;
+  };
+  std::vector<Completion> m_results;
+
+  /// List of added completions so far. Used to filter out duplicates.
+  llvm::StringSet<> m_added_values;
+
+public:
+  void AddResult(llvm::StringRef completion, llvm::StringRef description);
+
+  /// Adds all collected completion matches to the given list.
+  /// The list will be cleared before the results are added. The number of
+  /// results here is guaranteed to be equal to GetNumberOfResults().
+  void GetMatches(StringList &matches) const;
+
+  /// Adds all collected completion descriptions to the given list.
+  /// The list will be cleared before the results are added. The number of
+  /// results here is guaranteed to be equal to GetNumberOfResults().
+  void GetDescriptions(StringList &descriptions) const;
+
+  std::size_t GetNumberOfResults() const { return m_results.size(); }
+};
+
+/// \class CompletionRequest CompletionRequest.h
+///   "lldb/Utility/ArgCompletionRequest.h"
+///
+/// Contains all information necessary to complete an incomplete command
+/// for the user. Will be filled with the generated completions by the different
+/// completions functions.
+///
+class CompletionRequest {
+public:
+  /// Constructs a completion request.
+  ///
+  /// \param [in] command_line
+  ///     The command line the user has typed at this point.
+  ///
+  /// \param [in] raw_cursor_pos
+  ///     The position of the cursor in the command line string. Index 0 means
+  ///     the cursor is at the start of the line. The completion starts from
+  ///     this cursor position.
+  ///
+  /// \param [in] match_start_point
+  /// \param [in] max_return_elements
+  ///     If there is a match that is expensive to compute, these are here to
+  ///     allow you to compute the completions in  batches.  Start the
+  ///     completion from match_start_point, and return match_return_elements
+  ///     elements.
+  ///
+  /// \param [out] result
+  ///     The CompletionResult that will be filled with the results after this
+  ///     request has been handled.
+  CompletionRequest(llvm::StringRef command_line, unsigned raw_cursor_pos,
+                    int match_start_point, int max_return_elements,
+                    CompletionResult &result);
+
+  llvm::StringRef GetRawLine() const { return m_command; }
+
+  unsigned GetRawCursorPos() const { return m_raw_cursor_pos; }
+
+  const Args &GetParsedLine() const { return m_parsed_line; }
+
+  Args &GetParsedLine() { return m_parsed_line; }
+
+  const Args &GetPartialParsedLine() const { return m_partial_parsed_line; }
+
+  void SetCursorIndex(int i) { m_cursor_index = i; }
+  int GetCursorIndex() const { return m_cursor_index; }
+
+  void SetCursorCharPosition(int pos) { m_cursor_char_position = pos; }
+  int GetCursorCharPosition() const { return m_cursor_char_position; }
+
+  int GetMatchStartPoint() const { return m_match_start_point; }
+
+  int GetMaxReturnElements() const { return m_max_return_elements; }
+
+  bool GetWordComplete() { return m_word_complete; }
+
+  void SetWordComplete(bool v) { m_word_complete = v; }
+
+  /// Adds a possible completion string. If the completion was already
+  /// suggested before, it will not be added to the list of results. A copy of
+  /// the suggested completion is stored, so the given string can be free'd
+  /// afterwards.
+  ///
+  /// \param match The suggested completion.
+  /// \param match An optional description of the completion string. The
+  ///     description will be displayed to the user alongside the completion.
+  void AddCompletion(llvm::StringRef completion,
+                     llvm::StringRef description = "") {
+    m_result.AddResult(completion, description);
+  }
+
+  /// Adds multiple possible completion strings.
+  ///
+  /// \param completions The list of completions.
+  ///
+  /// \see AddCompletion
+  void AddCompletions(const StringList &completions) {
+    for (std::size_t i = 0; i < completions.GetSize(); ++i)
+      AddCompletion(completions.GetStringAtIndex(i));
+  }
+
+  /// Adds multiple possible completion strings alongside their descriptions.
+  ///
+  /// The number of completions and descriptions must be identical.
+  ///
+  /// \param completions The list of completions.
+  /// \param completions The list of descriptions.
+  ///
+  /// \see AddCompletion
+  void AddCompletions(const StringList &completions,
+                      const StringList &descriptions) {
+    lldbassert(completions.GetSize() == descriptions.GetSize());
+    for (std::size_t i = 0; i < completions.GetSize(); ++i)
+      AddCompletion(completions.GetStringAtIndex(i),
+                    descriptions.GetStringAtIndex(i));
+  }
+
+  std::size_t GetNumberOfMatches() const {
+    return m_result.GetNumberOfResults();
+  }
+
+  llvm::StringRef GetCursorArgument() const {
+    return GetParsedLine().GetArgumentAtIndex(GetCursorIndex());
+  }
+
+  llvm::StringRef GetCursorArgumentPrefix() const {
+    return GetCursorArgument().substr(0, GetCursorCharPosition());
+  }
+
+private:
+  /// The raw command line we are supposed to complete.
+  llvm::StringRef m_command;
+  /// The cursor position in m_command.
+  unsigned m_raw_cursor_pos;
+  /// The command line parsed as arguments.
+  Args m_parsed_line;
+  /// The command line until the cursor position parsed as arguments.
+  Args m_partial_parsed_line;
+  /// The index of the argument in which the completion cursor is.
+  int m_cursor_index;
+  /// The cursor position in the argument indexed by m_cursor_index.
+  int m_cursor_char_position;
+  /// If there is a match that is expensive
+  /// to compute, these are here to allow you to compute the completions in
+  /// batches.  Start the completion from \amatch_start_point, and return
+  /// \amatch_return_elements elements.
+  // FIXME: These two values are not implemented.
+  int m_match_start_point;
+  int m_max_return_elements;
+  /// \btrue if this is a complete option value (a space will be inserted
+  /// after the completion.)  \bfalse otherwise.
+  bool m_word_complete = false;
+
+  /// The result this request is supposed to fill out.
+  /// We keep this object private to ensure that no backend can in any way
+  /// depend on already calculated completions (which would make debugging and
+  /// testing them much more complicated).
+  CompletionResult &m_result;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_COMPLETIONREQUEST_H
diff --git a/linux-x64/clang/include/lldb/Utility/Connection.h b/linux-x64/clang/include/lldb/Utility/Connection.h
new file mode 100644
index 0000000..77f3ef4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Connection.h
@@ -0,0 +1,183 @@
+//===-- Connection.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Connection_h_
+#define liblldb_Connection_h_
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include <ratio>
+#include <string>
+
+#include <stddef.h>
+
+namespace lldb_private {
+class Status;
+template <typename Ratio> class Timeout;
+}
+
+namespace lldb_private {
+
+/// \class Connection Connection.h "lldb/Utility/Connection.h"
+/// A communication connection class.
+///
+/// A class that implements that actual communication functions for
+/// connecting/disconnecting, reading/writing, and waiting for bytes to become
+/// available from a two way communication connection.
+///
+/// This class is designed to only do very simple communication functions.
+/// Instances can be instantiated and given to a Communication class to
+/// perform communications where clients can listen for broadcasts, and
+/// perform other higher level communications.
+class Connection {
+public:
+  /// Default constructor
+  Connection() = default;
+
+  /// Virtual destructor since this class gets subclassed and handed to a
+  /// Communication object.
+  virtual ~Connection();
+
+  /// Connect using the connect string \a url.
+  ///
+  /// \param[in] url
+  ///     A string that contains all information needed by the
+  ///     subclass to connect to another client.
+  ///
+  /// \param[out] error_ptr
+  ///     A pointer to an error object that should be given an
+  ///     appropriate error value if this method returns false. This
+  ///     value can be NULL if the error value should be ignored.
+  ///
+  /// \return
+  ///     \b True if the connect succeeded, \b false otherwise. The
+  ///     internal error object should be filled in with an
+  ///     appropriate value based on the result of this function.
+  ///
+  /// \see Status& Communication::GetError ();
+  virtual lldb::ConnectionStatus Connect(llvm::StringRef url,
+                                         Status *error_ptr) = 0;
+
+  /// Disconnect the communications connection if one is currently connected.
+  ///
+  /// \param[out] error_ptr
+  ///     A pointer to an error object that should be given an
+  ///     appropriate error value if this method returns false. This
+  ///     value can be NULL if the error value should be ignored.
+  ///
+  /// \return
+  ///     \b True if the disconnect succeeded, \b false otherwise. The
+  ///     internal error object should be filled in with an
+  ///     appropriate value based on the result of this function.
+  ///
+  /// \see Status& Communication::GetError ();
+  virtual lldb::ConnectionStatus Disconnect(Status *error_ptr) = 0;
+
+  /// Check if the connection is valid.
+  ///
+  /// \return
+  ///     \b True if this object is currently connected, \b false
+  ///     otherwise.
+  virtual bool IsConnected() const = 0;
+
+  /// The read function that attempts to read from the connection.
+  ///
+  /// \param[in] dst
+  ///     A destination buffer that must be at least \a dst_len bytes
+  ///     long.
+  ///
+  /// \param[in] dst_len
+  ///     The number of bytes to attempt to read, and also the max
+  ///     number of bytes that can be placed into \a dst.
+  ///
+  /// \param[in] timeout
+  ///     The number of microseconds to wait for the data.
+  ///
+  /// \param[out] status
+  ///     On return, indicates whether the call was successful or terminated
+  ///     due to some error condition.
+  ///
+  /// \param[out] error_ptr
+  ///     A pointer to an error object that should be given an
+  ///     appropriate error value if this method returns zero. This
+  ///     value can be NULL if the error value should be ignored.
+  ///
+  /// \return
+  ///     The number of bytes actually read.
+  ///
+  /// \see size_t Communication::Read (void *, size_t, uint32_t);
+  virtual size_t Read(void *dst, size_t dst_len,
+                      const Timeout<std::micro> &timeout,
+                      lldb::ConnectionStatus &status, Status *error_ptr) = 0;
+
+  /// The actual write function that attempts to write to the communications
+  /// protocol.
+  ///
+  /// Subclasses must override this function.
+  ///
+  /// \param[in] dst
+  ///     A desination buffer that must be at least \a dst_len bytes
+  ///     long.
+  ///
+  /// \param[in] dst_len
+  ///     The number of bytes to attempt to write, and also the
+  ///     number of bytes are currently available in \a dst.
+  ///
+  /// \param[out] error_ptr
+  ///     A pointer to an error object that should be given an
+  ///     appropriate error value if this method returns zero. This
+  ///     value can be NULL if the error value should be ignored.
+  ///
+  /// \return
+  ///     The number of bytes actually Written.
+  virtual size_t Write(const void *dst, size_t dst_len,
+                       lldb::ConnectionStatus &status, Status *error_ptr) = 0;
+
+  /// Returns a URI that describes this connection object
+  ///
+  /// Subclasses may override this function.
+  ///
+  /// \return
+  ///     Returns URI or an empty string if disconnecteds
+  virtual std::string GetURI() = 0;
+
+  /// Interrupts an ongoing Read() operation.
+  ///
+  /// If there is an ongoing read operation in another thread, this operation
+  /// return with status == eConnectionStatusInterrupted. Note that if there
+  /// data waiting to be read and an interrupt request is issued, the Read()
+  /// function will return the data immediately without processing the
+  /// interrupt request (which will remain queued for the next Read()
+  /// operation).
+  ///
+  /// \return
+  ///     Returns true is the interrupt request was successful.
+  virtual bool InterruptRead() = 0;
+
+  /// Returns the underlying IOObject used by the Connection.
+  ///
+  /// The IOObject can be used to wait for data to become available on the
+  /// connection. If the Connection does not use IOObjects (and hence does not
+  /// support waiting) this function should return a null pointer.
+  ///
+  /// \return
+  ///     The underlying IOObject used for reading.
+  virtual lldb::IOObjectSP GetReadObject() { return lldb::IOObjectSP(); }
+
+private:
+  // For Connection only
+  DISALLOW_COPY_AND_ASSIGN(Connection);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Connection_h_
diff --git a/linux-x64/clang/include/lldb/Utility/ConstString.h b/linux-x64/clang/include/lldb/Utility/ConstString.h
new file mode 100644
index 0000000..8576c18
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/ConstString.h
@@ -0,0 +1,464 @@
+//===-- ConstString.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_ConstString_h_
+#define liblldb_ConstString_h_
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FormatVariadic.h"
+
+#include <stddef.h>
+
+namespace lldb_private {
+class Stream;
+}
+namespace llvm {
+class raw_ostream;
+}
+
+namespace lldb_private {
+
+/// \class ConstString ConstString.h "lldb/Utility/ConstString.h"
+/// A uniqued constant string class.
+///
+/// Provides an efficient way to store strings as uniqued strings. After the
+/// strings are uniqued, finding strings that are equal to one another is very
+/// fast as just the pointers need to be compared. It also allows for many
+/// common strings from many different sources to be shared to keep the memory
+/// footprint low.
+///
+/// No reference counting is done on strings that are added to the string
+/// pool, once strings are added they are in the string pool for the life of
+/// the program.
+class ConstString {
+public:
+  /// Default constructor
+  ///
+  /// Initializes the string to an empty string.
+  ConstString() : m_string(nullptr) {}
+
+  /// Copy constructor
+  ///
+  /// Copies the string value in \a rhs into this object.
+  ///
+  /// \param[in] rhs
+  ///     Another string object to copy.
+  ConstString(const ConstString &rhs) : m_string(rhs.m_string) {}
+
+  explicit ConstString(const llvm::StringRef &s);
+
+  /// Construct with C String value
+  ///
+  /// Constructs this object with a C string by looking to see if the
+  /// C string already exists in the global string pool. If it doesn't
+  /// exist, it is added to the string pool.
+  ///
+  /// \param[in] cstr
+  ///     A NULL terminated C string to add to the string pool.
+  explicit ConstString(const char *cstr);
+
+  /// Construct with C String value with max length
+  ///
+  /// Constructs this object with a C string with a length. If \a max_cstr_len
+  /// is greater than the actual length of the string, the string length will
+  /// be truncated. This allows substrings to be created without the need to
+  /// NULL terminate the string as it is passed into this function.
+  ///
+  /// \param[in] cstr
+  ///     A pointer to the first character in the C string. The C
+  ///     string can be NULL terminated in a buffer that contains
+  ///     more characters than the length of the string, or the
+  ///     string can be part of another string and a new substring
+  ///     can be created.
+  ///
+  /// \param[in] max_cstr_len
+  ///     The max length of \a cstr. If the string length of \a cstr
+  ///     is less than \a max_cstr_len, then the string will be
+  ///     truncated. If the string length of \a cstr is greater than
+  ///     \a max_cstr_len, then only max_cstr_len bytes will be used
+  ///     from \a cstr.
+  explicit ConstString(const char *cstr, size_t max_cstr_len);
+
+  /// Destructor
+  ///
+  /// Since constant string values are currently not reference counted, there
+  /// isn't much to do here.
+  ~ConstString() = default;
+
+  /// C string equality binary predicate function object for ConstString
+  /// objects.
+  struct StringIsEqual {
+    /// C equality test.
+    ///
+    /// Two C strings are equal when they are contained in ConstString objects
+    /// when their pointer values are equal to each other.
+    ///
+    /// \return
+    ///     Returns \b true if the C string in \a lhs is equal to
+    ///     the C string value in \a rhs, \b false otherwise.
+    bool operator()(const char *lhs, const char *rhs) const {
+      return lhs == rhs;
+    }
+  };
+
+  /// Convert to bool operator.
+  ///
+  /// This allows code to check a ConstString object to see if it contains a
+  /// valid string using code such as:
+  ///
+  /// \code
+  /// ConstString str(...);
+  /// if (str)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     /b True this object contains a valid non-empty C string, \b
+  ///     false otherwise.
+  explicit operator bool() const { return !IsEmpty(); }
+
+  /// Assignment operator
+  ///
+  /// Assigns the string in this object with the value from \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     Another string object to copy into this object.
+  ///
+  /// \return
+  ///     A const reference to this object.
+  ConstString operator=(ConstString rhs) {
+    m_string = rhs.m_string;
+    return *this;
+  }
+
+  /// Equal to operator
+  ///
+  /// Returns true if this string is equal to the string in \a rhs. This
+  /// operation is very fast as it results in a pointer comparison since all
+  /// strings are in a uniqued in a global string pool.
+  ///
+  /// \param[in] rhs
+  ///     Another string object to compare this object to.
+  ///
+  /// \return
+  ///     \li \b true if this object is equal to \a rhs.
+  ///     \li \b false if this object is not equal to \a rhs.
+  bool operator==(ConstString rhs) const {
+    // We can do a pointer compare to compare these strings since they must
+    // come from the same pool in order to be equal.
+    return m_string == rhs.m_string;
+  }
+
+  /// Equal to operator against a non-ConstString value.
+  ///
+  /// Returns true if this string is equal to the string in \a rhs. This
+  /// overload is usually slower than comparing against a ConstString value.
+  /// However, if the rhs string not already a ConstString and it is impractical
+  /// to turn it into a non-temporary variable, then this overload is faster.
+  ///
+  /// \param[in] rhs
+  ///     Another string object to compare this object to.
+  ///
+  /// \return
+  ///     \li \b true if this object is equal to \a rhs.
+  ///     \li \b false if this object is not equal to \a rhs.
+  bool operator==(const char *rhs) const {
+    // ConstString differentiates between empty strings and nullptr strings, but
+    // StringRef doesn't. Therefore we have to do this check manually now.
+    if (m_string == nullptr && rhs != nullptr)
+      return false;
+    if (m_string != nullptr && rhs == nullptr)
+      return false;
+
+    return GetStringRef() == rhs;
+  }
+
+  /// Not equal to operator
+  ///
+  /// Returns true if this string is not equal to the string in \a rhs. This
+  /// operation is very fast as it results in a pointer comparison since all
+  /// strings are in a uniqued in a global string pool.
+  ///
+  /// \param[in] rhs
+  ///     Another string object to compare this object to.
+  ///
+  /// \return
+  ///     \li \b true if this object is not equal to \a rhs.
+  ///     \li \b false if this object is equal to \a rhs.
+  bool operator!=(ConstString rhs) const {
+    return m_string != rhs.m_string;
+  }
+
+  /// Not equal to operator against a non-ConstString value.
+  ///
+  /// Returns true if this string is not equal to the string in \a rhs. This
+  /// overload is usually slower than comparing against a ConstString value.
+  /// However, if the rhs string not already a ConstString and it is impractical
+  /// to turn it into a non-temporary variable, then this overload is faster.
+  ///
+  /// \param[in] rhs
+  ///     Another string object to compare this object to.
+  ///
+  /// \return
+  ///     \li \b true if this object is not equal to \a rhs.
+  ///     \li \b false if this object is equal to \a rhs.
+  bool operator!=(const char *rhs) const { return !(*this == rhs); }
+
+  bool operator<(ConstString rhs) const;
+
+  /// Get the string value as a C string.
+  ///
+  /// Get the value of the contained string as a NULL terminated C string
+  /// value.
+  ///
+  /// If \a value_if_empty is nullptr, then nullptr will be returned.
+  ///
+  /// \return
+  ///     Returns \a value_if_empty if the string is empty, otherwise
+  ///     the C string value contained in this object.
+  const char *AsCString(const char *value_if_empty = nullptr) const {
+    return (IsEmpty() ? value_if_empty : m_string);
+  }
+
+  /// Get the string value as a llvm::StringRef
+  ///
+  /// \return
+  ///     Returns a new llvm::StringRef object filled in with the
+  ///     needed data.
+  llvm::StringRef GetStringRef() const {
+    return llvm::StringRef(m_string, GetLength());
+  }
+
+  /// Get the string value as a C string.
+  ///
+  /// Get the value of the contained string as a NULL terminated C string
+  /// value. Similar to the ConstString::AsCString() function, yet this
+  /// function will always return nullptr if the string is not valid. So this
+  /// function is a direct accessor to the string pointer value.
+  ///
+  /// \return
+  ///     Returns nullptr the string is invalid, otherwise the C string
+  ///     value contained in this object.
+  const char *GetCString() const { return m_string; }
+
+  /// Get the length in bytes of string value.
+  ///
+  /// The string pool stores the length of the string, so we can avoid calling
+  /// strlen() on the pointer value with this function.
+  ///
+  /// \return
+  ///     Returns the number of bytes that this string occupies in
+  ///     memory, not including the NULL termination byte.
+  size_t GetLength() const;
+
+  /// Clear this object's state.
+  ///
+  /// Clear any contained string and reset the value to the empty string
+  /// value.
+  void Clear() { m_string = nullptr; }
+
+  /// Equal to operator
+  ///
+  /// Returns true if this string is equal to the string in \a rhs. If case
+  /// sensitive equality is tested, this operation is very fast as it results
+  /// in a pointer comparison since all strings are in a uniqued in a global
+  /// string pool.
+  ///
+  /// \param[in] rhs
+  ///     The Left Hand Side const ConstString object reference.
+  ///
+  /// \param[in] rhs
+  ///     The Right Hand Side const ConstString object reference.
+  ///
+  /// \param[in] case_sensitive
+  ///     Case sensitivity. If true, case sensitive equality
+  ///     will be tested, otherwise character case will be ignored
+  ///
+  /// \return
+  ///     \li \b true if this object is equal to \a rhs.
+  ///     \li \b false if this object is not equal to \a rhs.
+  static bool Equals(ConstString lhs, ConstString rhs,
+                     const bool case_sensitive = true);
+
+  /// Compare two string objects.
+  ///
+  /// Compares the C string values contained in \a lhs and \a rhs and returns
+  /// an integer result.
+  ///
+  /// NOTE: only call this function when you want a true string
+  /// comparison. If you want string equality use the, use the == operator as
+  /// it is much more efficient. Also if you want string inequality, use the
+  /// != operator for the same reasons.
+  ///
+  /// \param[in] lhs
+  ///     The Left Hand Side const ConstString object reference.
+  ///
+  /// \param[in] rhs
+  ///     The Right Hand Side const ConstString object reference.
+  ///
+  /// \param[in] case_sensitive
+  ///     Case sensitivity of compare. If true, case sensitive compare
+  ///     will be performed, otherwise character case will be ignored
+  ///
+  /// \return
+  ///     \li -1 if lhs < rhs
+  ///     \li 0 if lhs == rhs
+  ///     \li 1 if lhs > rhs
+  static int Compare(ConstString lhs, ConstString rhs,
+                     const bool case_sensitive = true);
+
+  /// Dump the object description to a stream.
+  ///
+  /// Dump the string value to the stream \a s. If the contained string is
+  /// empty, print \a value_if_empty to the stream instead. If \a
+  /// value_if_empty is nullptr, then nothing will be dumped to the stream.
+  ///
+  /// \param[in] s
+  ///     The stream that will be used to dump the object description.
+  ///
+  /// \param[in] value_if_empty
+  ///     The value to dump if the string is empty. If nullptr, nothing
+  ///     will be output to the stream.
+  void Dump(Stream *s, const char *value_if_empty = nullptr) const;
+
+  /// Dump the object debug description to a stream.
+  ///
+  /// \param[in] s
+  ///     The stream that will be used to dump the object description.
+  void DumpDebug(Stream *s) const;
+
+  /// Test for empty string.
+  ///
+  /// \return
+  ///     \li \b true if the contained string is empty.
+  ///     \li \b false if the contained string is not empty.
+  bool IsEmpty() const { return m_string == nullptr || m_string[0] == '\0'; }
+
+  /// Test for null string.
+  ///
+  /// \return
+  ///     \li \b true if there is no string associated with this instance.
+  ///     \li \b false if there is a string associated with this instance.
+  bool IsNull() const { return m_string == nullptr; }
+
+  /// Set the C string value.
+  ///
+  /// Set the string value in the object by uniquing the \a cstr string value
+  /// in our global string pool.
+  ///
+  /// If the C string already exists in the global string pool, it finds the
+  /// current entry and returns the existing value. If it doesn't exist, it is
+  /// added to the string pool.
+  ///
+  /// \param[in] cstr
+  ///     A NULL terminated C string to add to the string pool.
+  void SetCString(const char *cstr);
+
+  void SetString(const llvm::StringRef &s);
+
+  /// Set the C string value and its mangled counterpart.
+  ///
+  /// Object files and debug symbols often use mangled string to represent the
+  /// linkage name for a symbol, function or global. The string pool can
+  /// efficiently store these values and their counterparts so when we run
+  /// into another instance of a mangled name, we can avoid calling the name
+  /// demangler over and over on the same strings and then trying to unique
+  /// them.
+  ///
+  /// \param[in] demangled
+  ///     The demangled string to correlate with the \a mangled name.
+  ///
+  /// \param[in] mangled
+  ///     The already uniqued mangled ConstString to correlate the
+  ///     soon to be uniqued version of \a demangled.
+  void SetStringWithMangledCounterpart(llvm::StringRef demangled,
+                                       ConstString mangled);
+
+  /// Retrieve the mangled or demangled counterpart for a mangled or demangled
+  /// ConstString.
+  ///
+  /// Object files and debug symbols often use mangled string to represent the
+  /// linkage name for a symbol, function or global. The string pool can
+  /// efficiently store these values and their counterparts so when we run
+  /// into another instance of a mangled name, we can avoid calling the name
+  /// demangler over and over on the same strings and then trying to unique
+  /// them.
+  ///
+  /// \param[in] counterpart
+  ///     A reference to a ConstString object that might get filled in
+  ///     with the demangled/mangled counterpart.
+  ///
+  /// \return
+  ///     /b True if \a counterpart was filled in with the counterpart
+  ///     /b false otherwise.
+  bool GetMangledCounterpart(ConstString &counterpart) const;
+
+  /// Set the C string value with length.
+  ///
+  /// Set the string value in the object by uniquing \a cstr_len bytes
+  /// starting at the \a cstr string value in our global string pool. If trim
+  /// is true, then \a cstr_len indicates a maximum length of the CString and
+  /// if the actual length of the string is less, then it will be trimmed.
+  ///
+  /// If the C string already exists in the global string pool, it finds the
+  /// current entry and returns the existing value. If it doesn't exist, it is
+  /// added to the string pool.
+  ///
+  /// \param[in] cstr
+  ///     A NULL terminated C string to add to the string pool.
+  ///
+  /// \param[in] cstr_len
+  ///     The maximum length of the C string.
+  void SetCStringWithLength(const char *cstr, size_t cstr_len);
+
+  /// Set the C string value with the minimum length between \a fixed_cstr_len
+  /// and the actual length of the C string. This can be used for data
+  /// structures that have a fixed length to store a C string where the string
+  /// might not be NULL terminated if the string takes the entire buffer.
+  void SetTrimmedCStringWithLength(const char *cstr, size_t fixed_cstr_len);
+
+  /// Get the memory cost of this object.
+  ///
+  /// Return the size in bytes that this object takes in memory. This returns
+  /// the size in bytes of this object, which does not include any the shared
+  /// string values it may refer to.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  size_t MemorySize() const { return sizeof(ConstString); }
+
+  /// Get the size in bytes of the current global string pool.
+  ///
+  /// Reports the size in bytes of all shared C string values, containers and
+  /// any other values as a byte size for the entire string pool.
+  ///
+  /// \return
+  ///     The number of bytes that the global string pool occupies
+  ///     in memory.
+  static size_t StaticMemorySize();
+
+protected:
+  // Member variables
+  const char *m_string;
+};
+
+/// Stream the string value \a str to the stream \a s
+Stream &operator<<(Stream &s, ConstString str);
+
+} // namespace lldb_private
+
+namespace llvm {
+template <> struct format_provider<lldb_private::ConstString> {
+  static void format(const lldb_private::ConstString &CS, llvm::raw_ostream &OS,
+                     llvm::StringRef Options);
+};
+}
+
+#endif // liblldb_ConstString_h_
diff --git a/linux-x64/clang/include/lldb/Utility/DataBuffer.h b/linux-x64/clang/include/lldb/Utility/DataBuffer.h
new file mode 100644
index 0000000..5235693
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/DataBuffer.h
@@ -0,0 +1,85 @@
+//===-- DataBuffer.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DataBuffer_h_
+#define liblldb_DataBuffer_h_
+#if defined(__cplusplus)
+
+#include <stdint.h>
+#include <string.h>
+
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/ArrayRef.h"
+
+namespace lldb_private {
+
+/// \class DataBuffer DataBuffer.h "lldb/Core/DataBuffer.h"
+/// A pure virtual protocol class for abstracted data buffers.
+///
+/// DataBuffer is an abstract class that gets packaged into a shared pointer
+/// that can use to implement various ways to store data (on the heap, memory
+/// mapped, cached inferior memory). It gets used by DataExtractor so many
+/// DataExtractor objects can share the same data and sub-ranges of that
+/// shared data, and the last object that contains a reference to the shared
+/// data will free it.
+///
+/// Subclasses can implement as many different constructors or member
+/// functions that allow data to be stored in the object's buffer prior to
+/// handing the shared data to clients that use these buffers.
+///
+/// All subclasses must override all of the pure virtual functions as they are
+/// used by clients to access the data. Having a common interface allows
+/// different ways of storing data, yet using it in one common way.
+///
+/// This class currently expects all data to be available without any extra
+/// calls being made, but we can modify it to optionally get data on demand
+/// with some extra function calls to load the data before it gets accessed.
+class DataBuffer {
+public:
+  /// Destructor
+  ///
+  /// The destructor is virtual as other classes will inherit from this class
+  /// and be downcast to the DataBuffer pure virtual interface. The virtual
+  /// destructor ensures that destructing the base class will destruct the
+  /// class that inherited from it correctly.
+  virtual ~DataBuffer() {}
+
+  /// Get a pointer to the data.
+  ///
+  /// \return
+  ///     A pointer to the bytes owned by this object, or NULL if the
+  ///     object contains no bytes.
+  virtual uint8_t *GetBytes() = 0;
+
+  /// Get a const pointer to the data.
+  ///
+  /// \return
+  ///     A const pointer to the bytes owned by this object, or NULL
+  ///     if the object contains no bytes.
+  virtual const uint8_t *GetBytes() const = 0;
+
+  /// Get the number of bytes in the data buffer.
+  ///
+  /// \return
+  ///     The number of bytes this object currently contains.
+  virtual lldb::offset_t GetByteSize() const = 0;
+
+  llvm::ArrayRef<uint8_t> GetData() const {
+    return llvm::ArrayRef<uint8_t>(GetBytes(), GetByteSize());
+  }
+
+  llvm::MutableArrayRef<uint8_t> GetData() {
+    return llvm::MutableArrayRef<uint8_t>(GetBytes(), GetByteSize());
+  }
+};
+
+} // namespace lldb_private
+
+#endif /// #if defined(__cplusplus)
+#endif /// lldb_DataBuffer_h_
diff --git a/linux-x64/clang/include/lldb/Utility/DataBufferHeap.h b/linux-x64/clang/include/lldb/Utility/DataBufferHeap.h
new file mode 100644
index 0000000..2a64694
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/DataBufferHeap.h
@@ -0,0 +1,112 @@
+//===-- DataBufferHeap.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DataBufferHeap_h_
+#define liblldb_DataBufferHeap_h_
+
+#include "lldb/Utility/DataBuffer.h"
+#include "lldb/lldb-types.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <cstdint>
+#include <vector>
+
+namespace lldb_private {
+
+/// \class DataBufferHeap DataBufferHeap.h "lldb/Core/DataBufferHeap.h"
+/// A subclass of DataBuffer that stores a data buffer on the heap.
+///
+/// This class keeps its data in a heap based buffer that is owned by the
+/// object. This class is best used to store chunks of data that are created
+/// or read from sources that can't intelligently and lazily fault new data
+/// pages in. Large amounts of data that comes from files should probably use
+/// DataBufferLLVM, which can intelligently determine when memory mapping is
+/// optimal.
+class DataBufferHeap : public DataBuffer {
+public:
+  /// Default constructor
+  ///
+  /// Initializes the heap based buffer with no bytes.
+  DataBufferHeap();
+
+  /// Construct with size \a n and fill with \a ch.
+  ///
+  /// Initialize this class with \a n bytes and fills the buffer with \a ch.
+  ///
+  /// \param[in] n
+  ///     The number of bytes that heap based buffer should contain.
+  ///
+  /// \param[in] ch
+  ///     The character to use when filling the buffer initially.
+  DataBufferHeap(lldb::offset_t n, uint8_t ch);
+
+  /// Construct by making a copy of \a src_len bytes from \a src.
+  ///
+  /// \param[in] src
+  ///     A pointer to the data to copy.
+  ///
+  /// \param[in] src_len
+  ///     The number of bytes in \a src to copy.
+  DataBufferHeap(const void *src, lldb::offset_t src_len);
+
+  /// Destructor.
+  ///
+  /// Virtual destructor since this class inherits from a pure virtual base
+  /// class #DataBuffer.
+  ~DataBufferHeap() override;
+
+  /// \copydoc DataBuffer::GetBytes()
+  uint8_t *GetBytes() override;
+
+  /// \copydoc DataBuffer::GetBytes() const
+  const uint8_t *GetBytes() const override;
+
+  /// \copydoc DataBuffer::GetByteSize() const
+  lldb::offset_t GetByteSize() const override;
+
+  /// Set the number of bytes in the data buffer.
+  ///
+  /// Sets the number of bytes that this object should be able to contain.
+  /// This can be used prior to copying data into the buffer. Note that this
+  /// zero-initializes up to \p byte_size bytes.
+  ///
+  /// \param[in] byte_size
+  ///     The new size in bytes that this data buffer should attempt
+  ///     to resize itself to.
+  ///
+  /// \return
+  ///     The size in bytes after that this heap buffer was
+  ///     successfully resized to.
+  lldb::offset_t SetByteSize(lldb::offset_t byte_size);
+
+  /// Makes a copy of the \a src_len bytes in \a src.
+  ///
+  /// Copies the data in \a src into an internal buffer.
+  ///
+  /// \param[in] src
+  ///     A pointer to the data to copy.
+  ///
+  /// \param[in] src_len
+  ///     The number of bytes in \a src to copy.
+  void CopyData(const void *src, lldb::offset_t src_len);
+  void CopyData(llvm::StringRef src) { CopyData(src.data(), src.size()); }
+
+  void AppendData(const void *src, uint64_t src_len);
+
+  void Clear();
+
+private:
+  // This object uses a std::vector<uint8_t> to store its data. This takes care
+  // of free the data when the object is deleted.
+  typedef std::vector<uint8_t> buffer_t; ///< Buffer type
+  buffer_t m_data; ///< The heap based buffer where data is stored
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_DataBufferHeap_h_
diff --git a/linux-x64/clang/include/lldb/Utility/DataBufferLLVM.h b/linux-x64/clang/include/lldb/Utility/DataBufferLLVM.h
new file mode 100644
index 0000000..d4c1107
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/DataBufferLLVM.h
@@ -0,0 +1,46 @@
+//===--- DataBufferLLVM.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_CORE_DATABUFFERLLVM_H
+#define LLDB_CORE_DATABUFFERLLVM_H
+
+#include "lldb/Utility/DataBuffer.h"
+#include "lldb/lldb-types.h"
+
+#include <memory>
+#include <stdint.h>
+
+namespace llvm {
+class WritableMemoryBuffer;
+class Twine;
+}
+
+namespace lldb_private {
+
+class FileSystem;
+class DataBufferLLVM : public DataBuffer {
+public:
+  ~DataBufferLLVM() override;
+
+  uint8_t *GetBytes() override;
+  const uint8_t *GetBytes() const override;
+  lldb::offset_t GetByteSize() const override;
+
+  char *GetChars() { return reinterpret_cast<char *>(GetBytes()); }
+
+private:
+  friend FileSystem;
+  /// Construct a DataBufferLLVM from \p Buffer.  \p Buffer must be a valid
+  /// pointer.
+  explicit DataBufferLLVM(std::unique_ptr<llvm::WritableMemoryBuffer> Buffer);
+
+  std::unique_ptr<llvm::WritableMemoryBuffer> Buffer;
+};
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Utility/DataEncoder.h b/linux-x64/clang/include/lldb/Utility/DataEncoder.h
new file mode 100644
index 0000000..19b7cef
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/DataEncoder.h
@@ -0,0 +1,343 @@
+//===-- DataEncoder.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DataEncoder_h_
+#define liblldb_DataEncoder_h_
+
+#if defined(__cplusplus)
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+
+/// \class DataEncoder DataEncoder.h "lldb/Core/DataEncoder.h" An binary data
+/// encoding class.
+///
+/// DataEncoder is a class that can encode binary data (swapping if needed) to
+/// a data buffer. The data buffer can be caller owned, or can be shared data
+/// that can be shared between multiple DataEncoder or DataEncoder instances.
+///
+/// \see DataBuffer
+class DataEncoder {
+public:
+  /// Default constructor.
+  ///
+  /// Initialize all members to a default empty state.
+  DataEncoder();
+
+  /// Construct with a buffer that is owned by the caller.
+  ///
+  /// This constructor allows us to use data that is owned by the caller. The
+  /// data must stay around as long as this object is valid.
+  ///
+  /// \param[in] data
+  ///     A pointer to caller owned data.
+  ///
+  /// \param[in] data_length
+  ///     The length in bytes of \a data.
+  ///
+  /// \param[in] byte_order
+  ///     A byte order of the data that we are extracting from.
+  ///
+  /// \param[in] addr_size
+  ///     A new address byte size value.
+  DataEncoder(void *data, uint32_t data_length, lldb::ByteOrder byte_order,
+              uint8_t addr_size);
+
+  /// Construct with shared data.
+  ///
+  /// Copies the data shared pointer which adds a reference to the contained
+  /// in \a data_sp. The shared data reference is reference counted to ensure
+  /// the data lives as long as anyone still has a valid shared pointer to the
+  /// data in \a data_sp.
+  ///
+  /// \param[in] data_sp
+  ///     A shared pointer to data.
+  ///
+  /// \param[in] byte_order
+  ///     A byte order of the data that we are extracting from.
+  ///
+  /// \param[in] addr_size
+  ///     A new address byte size value.
+  DataEncoder(const lldb::DataBufferSP &data_sp, lldb::ByteOrder byte_order,
+              uint8_t addr_size);
+
+  /// Destructor
+  ///
+  /// If this object contains a valid shared data reference, the reference
+  /// count on the data will be decremented, and if zero, the data will be
+  /// freed.
+  ~DataEncoder();
+
+  /// Clears the object state.
+  ///
+  /// Clears the object contents back to a default invalid state, and release
+  /// any references to shared data that this object may contain.
+  void Clear();
+
+  /// Get the current address size.
+  ///
+  /// Return the size in bytes of any address values this object will extract.
+  ///
+  /// \return
+  ///     The size in bytes of address values that will be extracted.
+  uint8_t GetAddressByteSize() const { return m_addr_size; }
+
+  /// Get the number of bytes contained in this object.
+  ///
+  /// \return
+  ///     The total number of bytes of data this object refers to.
+  size_t GetByteSize() const { return m_end - m_start; }
+
+  /// Get the data end pointer.
+  ///
+  /// \return
+  ///     Returns a pointer to the next byte contained in this
+  ///     object's data, or NULL of there is no data in this object.
+  uint8_t *GetDataEnd() { return m_end; }
+
+  const uint8_t *GetDataEnd() const { return m_end; }
+
+  /// Get the shared data offset.
+  ///
+  /// Get the offset of the first byte of data in the shared data (if any).
+  ///
+  /// \return
+  ///     If this object contains shared data, this function returns
+  ///     the offset in bytes into that shared data, zero otherwise.
+  size_t GetSharedDataOffset() const;
+
+  /// Get the current byte order value.
+  ///
+  /// \return
+  ///     The current byte order value from this object's internal
+  ///     state.
+  lldb::ByteOrder GetByteOrder() const { return m_byte_order; }
+
+  /// Get the data start pointer.
+  ///
+  /// \return
+  ///     Returns a pointer to the first byte contained in this
+  ///     object's data, or NULL of there is no data in this object.
+  uint8_t *GetDataStart() { return m_start; }
+
+  const uint8_t *GetDataStart() const { return m_start; }
+
+  /// Encode unsigned integer values into the data at \a offset.
+  ///
+  /// \param[in] offset
+  ///     The offset within the contained data at which to put the
+  ///     data.
+  ///
+  /// \param[in] value
+  ///     The value to encode into the data.
+  ///
+  /// \return
+  ///     The next offset in the bytes of this data if the data
+  ///     was successfully encoded, UINT32_MAX if the encoding failed.
+  uint32_t PutU8(uint32_t offset, uint8_t value);
+
+  uint32_t PutU16(uint32_t offset, uint16_t value);
+
+  uint32_t PutU32(uint32_t offset, uint32_t value);
+
+  uint32_t PutU64(uint32_t offset, uint64_t value);
+
+  /// Encode an unsigned integer of size \a byte_size to \a offset.
+  ///
+  /// Encode a single integer value at \a offset and return the offset that
+  /// follows the newly encoded integer when the data is successfully encoded
+  /// into the existing data. There must be enough room in the data, else
+  /// UINT32_MAX will be returned to indicate that encoding failed.
+  ///
+  /// \param[in] offset
+  ///     The offset within the contained data at which to put the
+  ///     encoded integer.
+  ///
+  /// \param[in] byte_size
+  ///     The size in byte of the integer to encode.
+  ///
+  /// \param[in] value
+  ///     The integer value to write. The least significant bytes of
+  ///     the integer value will be written if the size is less than
+  ///     8 bytes.
+  ///
+  /// \return
+  ///     The next offset in the bytes of this data if the integer
+  ///     was successfully encoded, UINT32_MAX if the encoding failed.
+  uint32_t PutMaxU64(uint32_t offset, uint32_t byte_size, uint64_t value);
+
+  /// Encode an arbitrary number of bytes.
+  ///
+  /// \param[in] offset
+  ///     The offset in bytes into the contained data at which to
+  ///     start encoding.
+  ///
+  /// \param[in] src
+  ///     The buffer that contains the bytes to encode.
+  ///
+  /// \param[in] src_len
+  ///     The number of bytes to encode.
+  ///
+  /// \return
+  ///     The next valid offset within data if the put operation
+  ///     was successful, else UINT32_MAX to indicate the put failed.
+  uint32_t PutData(uint32_t offset, const void *src, uint32_t src_len);
+
+  /// Encode an address in the existing buffer at \a offset bytes into the
+  /// buffer.
+  ///
+  /// Encode a single address (honoring the m_addr_size member) to the data
+  /// and return the next offset where subsequent data would go. pointed to by
+  /// \a offset_ptr. The size of the extracted address comes from the \a
+  /// m_addr_size member variable and should be set correctly prior to
+  /// extracting any address values.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The next valid offset within data if the put operation
+  ///     was successful, else UINT32_MAX to indicate the put failed.
+  uint32_t PutAddress(uint32_t offset, lldb::addr_t addr);
+
+  /// Put a C string to \a offset.
+  ///
+  /// Encodes a C string into the existing data including the terminating
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     A pointer to the C string value in the data. If the offset
+  ///     pointed to by \a offset_ptr is out of bounds, or if the
+  ///     offset plus the length of the C string is out of bounds,
+  ///     NULL will be returned.
+  uint32_t PutCString(uint32_t offset_ptr, const char *cstr);
+
+  lldb::DataBufferSP &GetSharedDataBuffer() { return m_data_sp; }
+
+  /// Set the address byte size.
+  ///
+  /// Set the size in bytes that will be used when extracting any address and
+  /// pointer values from data contained in this object.
+  ///
+  /// \param[in] addr_size
+  ///     The size in bytes to use when extracting addresses.
+  void SetAddressByteSize(uint8_t addr_size) { m_addr_size = addr_size; }
+
+  /// Set data with a buffer that is caller owned.
+  ///
+  /// Use data that is owned by the caller when extracting values. The data
+  /// must stay around as long as this object, or any object that copies a
+  /// subset of this object's data, is valid. If \a bytes is NULL, or \a
+  /// length is zero, this object will contain no data.
+  ///
+  /// \param[in] bytes
+  ///     A pointer to caller owned data.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of \a bytes.
+  ///
+  /// \param[in] byte_order
+  ///     A byte order of the data that we are extracting from.
+  ///
+  /// \return
+  ///     The number of bytes that this object now contains.
+  uint32_t SetData(void *bytes, uint32_t length, lldb::ByteOrder byte_order);
+
+  /// Adopt a subset of shared data in \a data_sp.
+  ///
+  /// Copies the data shared pointer which adds a reference to the contained
+  /// in \a data_sp. The shared data reference is reference counted to ensure
+  /// the data lives as long as anyone still has a valid shared pointer to the
+  /// data in \a data_sp. The byte order and address byte size settings remain
+  /// the same. If \a offset is not a valid offset in \a data_sp, then no
+  /// reference to the shared data will be added. If there are not \a length
+  /// bytes available in \a data starting at \a offset, the length will be
+  /// truncated to contains as many bytes as possible.
+  ///
+  /// \param[in] data_sp
+  ///     A shared pointer to data.
+  ///
+  /// \param[in] offset
+  ///     The offset into \a data_sp at which the subset starts.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of the subset of \a data_sp.
+  ///
+  /// \return
+  ///     The number of bytes that this object now contains.
+  uint32_t SetData(const lldb::DataBufferSP &data_sp, uint32_t offset = 0,
+                   uint32_t length = UINT32_MAX);
+
+  /// Set the byte_order value.
+  ///
+  /// Sets the byte order of the data to extract. Extracted values will be
+  /// swapped if necessary when decoding.
+  ///
+  /// \param[in] byte_order
+  ///     The byte order value to use when extracting data.
+  void SetByteOrder(lldb::ByteOrder byte_order) { m_byte_order = byte_order; }
+
+  /// Test the validity of \a offset.
+  ///
+  /// \return
+  ///     \b true if \a offset is a valid offset into the data in this
+  ///     object, \b false otherwise.
+  bool ValidOffset(uint32_t offset) const { return offset < GetByteSize(); }
+
+  /// Test the availability of \a length bytes of data from \a offset.
+  ///
+  /// \return
+  ///     \b true if \a offset is a valid offset and there are \a
+  ///     length bytes available at that offset, \b false otherwise.
+  bool ValidOffsetForDataOfSize(uint32_t offset, uint32_t length) const {
+    return length <= BytesLeft(offset);
+  }
+
+  uint32_t BytesLeft(uint32_t offset) const {
+    const uint32_t size = GetByteSize();
+    if (size > offset)
+      return size - offset;
+    return 0;
+  }
+
+protected:
+  // Member variables
+  uint8_t *m_start; ///< A pointer to the first byte of data.
+  uint8_t *m_end;   ///< A pointer to the byte that is past the end of the data.
+  lldb::ByteOrder
+      m_byte_order;    ///< The byte order of the data we are extracting from.
+  uint8_t m_addr_size; ///< The address size to use when extracting pointers or
+                       /// addresses
+  mutable lldb::DataBufferSP m_data_sp; ///< The shared pointer to data that can
+                                        /// be shared among multiple instances
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(DataEncoder);
+};
+
+} // namespace lldb_private
+
+#endif // #if defined (__cplusplus)
+#endif // #ifndef liblldb_DataEncoder_h_
diff --git a/linux-x64/clang/include/lldb/Utility/DataExtractor.h b/linux-x64/clang/include/lldb/Utility/DataExtractor.h
new file mode 100644
index 0000000..74174b3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/DataExtractor.h
@@ -0,0 +1,1016 @@
+//===-- DataExtractor.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_DATAEXTRACTOR_H
+#define LLDB_UTILITY_DATAEXTRACTOR_H
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+#include "llvm/ADT/ArrayRef.h"
+
+#include <cassert>
+#include <stdint.h>
+#include <string.h>
+
+namespace lldb_private {
+class Log;
+class Stream;
+}
+namespace llvm {
+template <typename T> class SmallVectorImpl;
+}
+
+
+namespace lldb_private {
+
+/// \class DataExtractor DataExtractor.h "lldb/Core/DataExtractor.h" An data
+/// extractor class.
+///
+/// DataExtractor is a class that can extract data (swapping if needed) from a
+/// data buffer. The data buffer can be caller owned, or can be shared data
+/// that can be shared between multiple DataExtractor instances. Multiple
+/// DataExtractor objects can share the same data, yet extract values in
+/// different address sizes and byte order modes. Each object can have a
+/// unique position in the shared data and extract data from different
+/// offsets.
+///
+/// \see DataBuffer
+class DataExtractor {
+public:
+  /// \typedef DataExtractor::Type
+  /// Type enumerations used in the dump routines.
+  enum Type {
+    TypeUInt8,   ///< Format output as unsigned 8 bit integers
+    TypeChar,    ///< Format output as characters
+    TypeUInt16,  ///< Format output as unsigned 16 bit integers
+    TypeUInt32,  ///< Format output as unsigned 32 bit integers
+    TypeUInt64,  ///< Format output as unsigned 64 bit integers
+    TypePointer, ///< Format output as pointers
+    TypeULEB128, ///< Format output as ULEB128 numbers
+    TypeSLEB128  ///< Format output as SLEB128 numbers
+  };
+
+  /// Default constructor.
+  ///
+  /// Initialize all members to a default empty state.
+  DataExtractor();
+
+  /// Construct with a buffer that is owned by the caller.
+  ///
+  /// This constructor allows us to use data that is owned by the caller. The
+  /// data must stay around as long as this object is valid.
+  ///
+  /// \param[in] data
+  ///     A pointer to caller owned data.
+  ///
+  /// \param[in] data_length
+  ///     The length in bytes of \a data.
+  ///
+  /// \param[in] byte_order
+  ///     A byte order of the data that we are extracting from.
+  ///
+  /// \param[in] addr_size
+  ///     A new address byte size value.
+  ///
+  /// \param[in] target_byte_size
+  ///     A size of a target byte in 8-bit host bytes
+  DataExtractor(const void *data, lldb::offset_t data_length,
+                lldb::ByteOrder byte_order, uint32_t addr_size,
+                uint32_t target_byte_size = 1);
+
+  /// Construct with shared data.
+  ///
+  /// Copies the data shared pointer which adds a reference to the contained
+  /// in \a data_sp. The shared data reference is reference counted to ensure
+  /// the data lives as long as anyone still has a valid shared pointer to the
+  /// data in \a data_sp.
+  ///
+  /// \param[in] data_sp
+  ///     A shared pointer to data.
+  ///
+  /// \param[in] byte_order
+  ///     A byte order of the data that we are extracting from.
+  ///
+  /// \param[in] addr_size
+  ///     A new address byte size value.
+  ///
+  /// \param[in] target_byte_size
+  ///     A size of a target byte in 8-bit host bytes
+  DataExtractor(const lldb::DataBufferSP &data_sp, lldb::ByteOrder byte_order,
+                uint32_t addr_size, uint32_t target_byte_size = 1);
+
+  /// Construct with a subset of \a data.
+  ///
+  /// Initialize this object with a subset of the data bytes in \a data. If \a
+  /// data contains shared data, then a reference to the shared data will be
+  /// added to ensure the shared data stays around as long as any objects have
+  /// references to the shared data. The byte order value and the address size
+  /// settings are copied from \a data. If \a offset is not a valid offset in
+  /// \a data, then no reference to the shared data will be added. If there
+  /// are not \a length bytes available in \a data starting at \a offset, the
+  /// length will be truncated to contain as many bytes as possible.
+  ///
+  /// \param[in] data
+  ///     Another DataExtractor object that contains data.
+  ///
+  /// \param[in] offset
+  ///     The offset into \a data at which the subset starts.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of the subset of data.
+  ///
+  /// \param[in] target_byte_size
+  ///     A size of a target byte in 8-bit host bytes
+  DataExtractor(const DataExtractor &data, lldb::offset_t offset,
+                lldb::offset_t length, uint32_t target_byte_size = 1);
+
+  DataExtractor(const DataExtractor &rhs);
+
+  /// Assignment operator.
+  ///
+  /// Copies all data, byte order and address size settings from \a rhs into
+  /// this object. If \a rhs contains shared data, a reference to that shared
+  /// data will be added.
+  ///
+  /// \param[in] rhs
+  ///     Another DataExtractor object to copy.
+  ///
+  /// \return
+  ///     A const reference to this object.
+  const DataExtractor &operator=(const DataExtractor &rhs);
+
+  /// Destructor
+  ///
+  /// If this object contains a valid shared data reference, the reference
+  /// count on the data will be decremented, and if zero, the data will be
+  /// freed.
+  virtual ~DataExtractor();
+
+  uint32_t getTargetByteSize() const { return m_target_byte_size; }
+
+  /// Clears the object state.
+  ///
+  /// Clears the object contents back to a default invalid state, and release
+  /// any references to shared data that this object may contain.
+  void Clear();
+
+  /// Dumps the binary data as \a type objects to stream \a s (or to Log() if
+  /// \a s is nullptr) starting \a offset bytes into the data and stopping
+  /// after dumping \a length bytes. The offset into the data is displayed at
+  /// the beginning of each line and can be offset by base address \a
+  /// base_addr. \a num_per_line objects will be displayed on each line.
+  ///
+  /// \param[in] s
+  ///     The stream to dump the output to. If nullptr the output will
+  ///     be dumped to Log().
+  ///
+  /// \param[in] offset
+  ///     The offset into the data at which to start dumping.
+  ///
+  /// \param[in] length
+  ///     The number of bytes to dump.
+  ///
+  /// \param[in] base_addr
+  ///     The base address that gets added to the offset displayed on
+  ///     each line.
+  ///
+  /// \param[in] num_per_line
+  ///     The number of \a type objects to display on each line.
+  ///
+  /// \param[in] type
+  ///     The type of objects to use when dumping data from this
+  ///     object. See DataExtractor::Type.
+  ///
+  /// \param[in] type_format
+  ///     The optional format to use for the \a type objects. If this
+  ///     is nullptr, the default format for the \a type will be used.
+  ///
+  /// \return
+  ///     The offset at which dumping ended.
+  lldb::offset_t PutToLog(Log *log, lldb::offset_t offset,
+                          lldb::offset_t length, uint64_t base_addr,
+                          uint32_t num_per_line, Type type,
+                          const char *type_format = nullptr) const;
+
+  /// Extract an arbitrary number of bytes in the specified byte order.
+  ///
+  /// Attemps to extract \a length bytes starting at \a offset bytes into this
+  /// data in the requested byte order (\a dst_byte_order) and place the
+  /// results in \a dst. \a dst must be at least \a length bytes long.
+  ///
+  /// \param[in] offset
+  ///     The offset in bytes into the contained data at which to
+  ///     start extracting.
+  ///
+  /// \param[in] length
+  ///     The number of bytes to extract.
+  ///
+  /// \param[in] dst_byte_order
+  ///     A byte order of the data that we want when the value in
+  ///     copied to \a dst.
+  ///
+  /// \param[out] dst
+  ///     The buffer that will receive the extracted value if there
+  ///     are enough bytes available in the current data.
+  ///
+  /// \return
+  ///     The number of bytes that were extracted which will be \a
+  ///     length when the value is successfully extracted, or zero
+  ///     if there aren't enough bytes at the specified offset.
+  size_t ExtractBytes(lldb::offset_t offset, lldb::offset_t length,
+                      lldb::ByteOrder dst_byte_order, void *dst) const;
+
+  /// Extract an address from \a *offset_ptr.
+  ///
+  /// Extract a single address from the data and update the offset pointed to
+  /// by \a offset_ptr. The size of the extracted address comes from the \a
+  /// m_addr_size member variable and should be set correctly prior to
+  /// extracting any address values.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted address value.
+  uint64_t GetAddress(lldb::offset_t *offset_ptr) const;
+
+  uint64_t GetAddress_unchecked(lldb::offset_t *offset_ptr) const;
+
+  /// Get the current address size.
+  ///
+  /// Return the size in bytes of any address values this object will extract.
+  ///
+  /// \return
+  ///     The size in bytes of address values that will be extracted.
+  uint32_t GetAddressByteSize() const { return m_addr_size; }
+
+  /// Get the number of bytes contained in this object.
+  ///
+  /// \return
+  ///     The total number of bytes of data this object refers to.
+  uint64_t GetByteSize() const { return m_end - m_start; }
+
+  /// Extract a C string from \a *offset_ptr.
+  ///
+  /// Returns a pointer to a C String from the data at the offset pointed to
+  /// by \a offset_ptr. A variable length NULL terminated C string will be
+  /// extracted and the \a offset_ptr will be updated with the offset of the
+  /// byte that follows the NULL terminator byte.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     A pointer to the C string value in the data. If the offset
+  ///     pointed to by \a offset_ptr is out of bounds, or if the
+  ///     offset plus the length of the C string is out of bounds,
+  ///     nullptr will be returned.
+  const char *GetCStr(lldb::offset_t *offset_ptr) const;
+
+  /// Extract a C string from \a *offset_ptr with field size \a len.
+  ///
+  /// Returns a pointer to a C String from the data at the offset pointed to
+  /// by \a offset_ptr, with a field length of \a len.
+  /// A NULL terminated C string will be extracted and the \a offset_ptr
+  /// will be updated with the offset of the byte that follows the fixed
+  /// length field.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     A pointer to the C string value in the data. If the offset
+  ///     pointed to by \a offset_ptr is out of bounds, or if the
+  ///     offset plus the length of the field is out of bounds, or if
+  ///     the field does not contain a NULL terminator byte, nullptr will
+  ///     be returned.
+  const char *GetCStr(lldb::offset_t *offset_ptr, lldb::offset_t len) const;
+
+  /// Extract \a length bytes from \a *offset_ptr.
+  ///
+  /// Returns a pointer to a bytes in this object's data at the offset pointed
+  /// to by \a offset_ptr. If \a length is zero or too large, then the offset
+  /// pointed to by \a offset_ptr will not be updated and nullptr will be
+  /// returned.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[in] length
+  ///     The optional length of a string to extract. If the value is
+  ///     zero, a NULL terminated C string will be extracted.
+  ///
+  /// \return
+  ///     A pointer to the bytes in this object's data if the offset
+  ///     and length are valid, or nullptr otherwise.
+  const void *GetData(lldb::offset_t *offset_ptr, lldb::offset_t length) const {
+    const uint8_t *ptr = PeekData(*offset_ptr, length);
+    if (ptr)
+      *offset_ptr += length;
+    return ptr;
+  }
+
+  /// Copy \a length bytes from \a *offset, without swapping bytes.
+  ///
+  /// \param[in] offset
+  ///     The offset into this data from which to start copying
+  ///
+  /// \param[in] length
+  ///     The length of the data to copy from this object
+  ///
+  /// \param[out] dst
+  ///     The buffer to place the output data.
+  ///
+  /// \return
+  ///     Returns the number of bytes that were copied, or zero if
+  ///     anything goes wrong.
+  lldb::offset_t CopyData(lldb::offset_t offset, lldb::offset_t length,
+                          void *dst) const;
+
+  /// Copy \a dst_len bytes from \a *offset_ptr and ensure the copied data is
+  /// treated as a value that can be swapped to match the specified byte
+  /// order.
+  ///
+  /// For values that are larger than the supported integer sizes, this
+  /// function can be used to extract data in a specified byte order. It can
+  /// also be used to copy a smaller integer value from to a larger value. The
+  /// extra bytes left over will be padded correctly according to the byte
+  /// order of this object and the \a dst_byte_order. This can be very handy
+  /// when say copying a partial data value into a register.
+  ///
+  /// \param[in] src_offset
+  ///     The offset into this data from which to start copying an
+  ///     endian entity
+  ///
+  /// \param[in] src_len
+  ///     The length of the endian data to copy from this object
+  ///     into the \a dst object
+  ///
+  /// \param[out] dst
+  ///     The buffer where to place the endian data. The data might
+  ///     need to be byte swapped (and appropriately padded with
+  ///     zeroes if \a src_len != \a dst_len) if \a dst_byte_order
+  ///     does not match the byte order in this object.
+  ///
+  /// \param[in] dst_len
+  ///     The length number of bytes that the endian value will
+  ///     occupy is \a dst.
+  ///
+  /// \param[in] byte_order
+  ///     The byte order that the endian value should be in the \a dst
+  ///     buffer.
+  ///
+  /// \return
+  ///     Returns the number of bytes that were copied, or zero if
+  ///     anything goes wrong.
+  lldb::offset_t CopyByteOrderedData(lldb::offset_t src_offset,
+                                     lldb::offset_t src_len, void *dst,
+                                     lldb::offset_t dst_len,
+                                     lldb::ByteOrder dst_byte_order) const;
+
+  /// Get the data end pointer.
+  ///
+  /// \return
+  ///     Returns a pointer to the next byte contained in this
+  ///     object's data, or nullptr of there is no data in this object.
+  const uint8_t *GetDataEnd() const { return m_end; }
+
+  /// Get the shared data offset.
+  ///
+  /// Get the offset of the first byte of data in the shared data (if any).
+  ///
+  /// \return
+  ///     If this object contains shared data, this function returns
+  ///     the offset in bytes into that shared data, zero otherwise.
+  size_t GetSharedDataOffset() const;
+
+  /// Get the data start pointer.
+  ///
+  /// \return
+  ///     Returns a pointer to the first byte contained in this
+  ///     object's data, or nullptr of there is no data in this object.
+  const uint8_t *GetDataStart() const { return m_start; }
+
+  /// Extract a float from \a *offset_ptr.
+  ///
+  /// Extract a single float value.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The floating value that was extracted, or zero on failure.
+  float GetFloat(lldb::offset_t *offset_ptr) const;
+
+  double GetDouble(lldb::offset_t *offset_ptr) const;
+
+  long double GetLongDouble(lldb::offset_t *offset_ptr) const;
+
+  /// Extract an integer of size \a byte_size from \a *offset_ptr.
+  ///
+  /// Extract a single integer value and update the offset pointed to by \a
+  /// offset_ptr. The size of the extracted integer is specified by the \a
+  /// byte_size argument. \a byte_size must have a value >= 1 and <= 4 since
+  /// the return value is only 32 bits wide.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[in] byte_size
+  ///     The size in byte of the integer to extract.
+  ///
+  /// \return
+  ///     The integer value that was extracted, or zero on failure.
+  uint32_t GetMaxU32(lldb::offset_t *offset_ptr, size_t byte_size) const;
+
+  /// Extract an unsigned integer of size \a byte_size from \a *offset_ptr.
+  ///
+  /// Extract a single unsigned integer value and update the offset pointed to
+  /// by \a offset_ptr. The size of the extracted integer is specified by the
+  /// \a byte_size argument. \a byte_size must have a value greater than or
+  /// equal to one and less than or equal to eight since the return value is
+  /// 64 bits wide.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[in] byte_size
+  ///     The size in byte of the integer to extract.
+  ///
+  /// \return
+  ///     The unsigned integer value that was extracted, or zero on
+  ///     failure.
+  uint64_t GetMaxU64(lldb::offset_t *offset_ptr, size_t byte_size) const;
+
+  uint64_t GetMaxU64_unchecked(lldb::offset_t *offset_ptr,
+                               size_t byte_size) const;
+
+  /// Extract an signed integer of size \a byte_size from \a *offset_ptr.
+  ///
+  /// Extract a single signed integer value (sign extending if required) and
+  /// update the offset pointed to by \a offset_ptr. The size of the extracted
+  /// integer is specified by the \a byte_size argument. \a byte_size must
+  /// have a value greater than or equal to one and less than or equal to
+  /// eight since the return value is 64 bits wide.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[in] byte_size
+  ///     The size in byte of the integer to extract.
+  ///
+  /// \return
+  ///     The sign extended signed integer value that was extracted,
+  ///     or zero on failure.
+  int64_t GetMaxS64(lldb::offset_t *offset_ptr, size_t byte_size) const;
+
+  /// Extract an unsigned integer of size \a byte_size from \a *offset_ptr,
+  /// then extract the bitfield from this value if \a bitfield_bit_size is
+  /// non-zero.
+  ///
+  /// Extract a single unsigned integer value and update the offset pointed to
+  /// by \a offset_ptr. The size of the extracted integer is specified by the
+  /// \a byte_size argument. \a byte_size must have a value greater than or
+  /// equal to one and less than or equal to 8 since the return value is 64
+  /// bits wide.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[in] byte_size
+  ///     The size in byte of the integer to extract.
+  ///
+  /// \param[in] bitfield_bit_size
+  ///     The size in bits of the bitfield value to extract, or zero
+  ///     to just extract the entire integer value.
+  ///
+  /// \param[in] bitfield_bit_offset
+  ///     The bit offset of the bitfield value in the extracted
+  ///     integer.  For little-endian data, this is the offset of
+  ///     the LSB of the bitfield from the LSB of the integer.
+  ///     For big-endian data, this is the offset of the MSB of the
+  ///     bitfield from the MSB of the integer.
+  ///
+  /// \return
+  ///     The unsigned bitfield integer value that was extracted, or
+  ///     zero on failure.
+  uint64_t GetMaxU64Bitfield(lldb::offset_t *offset_ptr, size_t size,
+                             uint32_t bitfield_bit_size,
+                             uint32_t bitfield_bit_offset) const;
+
+  /// Extract an signed integer of size \a byte_size from \a *offset_ptr, then
+  /// extract and signe extend the bitfield from this value if \a
+  /// bitfield_bit_size is non-zero.
+  ///
+  /// Extract a single signed integer value (sign extending if required) and
+  /// update the offset pointed to by \a offset_ptr. The size of the extracted
+  /// integer is specified by the \a byte_size argument. \a byte_size must
+  /// have a value greater than or equal to one and less than or equal to
+  /// eight since the return value is 64 bits wide.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[in] byte_size
+  ///     The size in bytes of the integer to extract.
+  ///
+  /// \param[in] bitfield_bit_size
+  ///     The size in bits of the bitfield value to extract, or zero
+  ///     to just extract the entire integer value.
+  ///
+  /// \param[in] bitfield_bit_offset
+  ///     The bit offset of the bitfield value in the extracted
+  ///     integer.  For little-endian data, this is the offset of
+  ///     the LSB of the bitfield from the LSB of the integer.
+  ///     For big-endian data, this is the offset of the MSB of the
+  ///     bitfield from the MSB of the integer.
+  ///
+  /// \return
+  ///     The signed bitfield integer value that was extracted, or
+  ///     zero on failure.
+  int64_t GetMaxS64Bitfield(lldb::offset_t *offset_ptr, size_t size,
+                            uint32_t bitfield_bit_size,
+                            uint32_t bitfield_bit_offset) const;
+
+  /// Extract an pointer from \a *offset_ptr.
+  ///
+  /// Extract a single pointer from the data and update the offset pointed to
+  /// by \a offset_ptr. The size of the extracted pointer comes from the \a
+  /// m_addr_size member variable and should be set correctly prior to
+  /// extracting any pointer values.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted pointer value as a 64 integer.
+  uint64_t GetPointer(lldb::offset_t *offset_ptr) const;
+
+  /// Get the current byte order value.
+  ///
+  /// \return
+  ///     The current byte order value from this object's internal
+  ///     state.
+  lldb::ByteOrder GetByteOrder() const { return m_byte_order; }
+
+  /// Extract a uint8_t value from \a *offset_ptr.
+  ///
+  /// Extract a single uint8_t from the binary data at the offset pointed to
+  /// by \a offset_ptr, and advance the offset on success.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted uint8_t value.
+  uint8_t GetU8(lldb::offset_t *offset_ptr) const;
+
+  uint8_t GetU8_unchecked(lldb::offset_t *offset_ptr) const {
+    uint8_t val = m_start[*offset_ptr];
+    *offset_ptr += 1;
+    return val;
+  }
+
+  uint16_t GetU16_unchecked(lldb::offset_t *offset_ptr) const;
+
+  uint32_t GetU32_unchecked(lldb::offset_t *offset_ptr) const;
+
+  uint64_t GetU64_unchecked(lldb::offset_t *offset_ptr) const;
+  /// Extract \a count uint8_t values from \a *offset_ptr.
+  ///
+  /// Extract \a count uint8_t values from the binary data at the offset
+  /// pointed to by \a offset_ptr, and advance the offset on success. The
+  /// extracted values are copied into \a dst.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[out] dst
+  ///     A buffer to copy \a count uint8_t values into. \a dst must
+  ///     be large enough to hold all requested data.
+  ///
+  /// \param[in] count
+  ///     The number of uint8_t values to extract.
+  ///
+  /// \return
+  ///     \a dst if all values were properly extracted and copied,
+  ///     nullptr otherwise.
+  void *GetU8(lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
+
+  /// Extract a uint16_t value from \a *offset_ptr.
+  ///
+  /// Extract a single uint16_t from the binary data at the offset pointed to
+  /// by \a offset_ptr, and update the offset on success.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted uint16_t value.
+  uint16_t GetU16(lldb::offset_t *offset_ptr) const;
+
+  /// Extract \a count uint16_t values from \a *offset_ptr.
+  ///
+  /// Extract \a count uint16_t values from the binary data at the offset
+  /// pointed to by \a offset_ptr, and advance the offset on success. The
+  /// extracted values are copied into \a dst.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[out] dst
+  ///     A buffer to copy \a count uint16_t values into. \a dst must
+  ///     be large enough to hold all requested data.
+  ///
+  /// \param[in] count
+  ///     The number of uint16_t values to extract.
+  ///
+  /// \return
+  ///     \a dst if all values were properly extracted and copied,
+  ///     nullptr otherwise.
+  void *GetU16(lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
+
+  /// Extract a uint32_t value from \a *offset_ptr.
+  ///
+  /// Extract a single uint32_t from the binary data at the offset pointed to
+  /// by \a offset_ptr, and update the offset on success.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted uint32_t value.
+  uint32_t GetU32(lldb::offset_t *offset_ptr) const;
+
+  /// Extract \a count uint32_t values from \a *offset_ptr.
+  ///
+  /// Extract \a count uint32_t values from the binary data at the offset
+  /// pointed to by \a offset_ptr, and advance the offset on success. The
+  /// extracted values are copied into \a dst.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[out] dst
+  ///     A buffer to copy \a count uint32_t values into. \a dst must
+  ///     be large enough to hold all requested data.
+  ///
+  /// \param[in] count
+  ///     The number of uint32_t values to extract.
+  ///
+  /// \return
+  ///     \a dst if all values were properly extracted and copied,
+  ///     nullptr otherwise.
+  void *GetU32(lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
+
+  /// Extract a uint64_t value from \a *offset_ptr.
+  ///
+  /// Extract a single uint64_t from the binary data at the offset pointed to
+  /// by \a offset_ptr, and update the offset on success.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted uint64_t value.
+  uint64_t GetU64(lldb::offset_t *offset_ptr) const;
+
+  /// Extract \a count uint64_t values from \a *offset_ptr.
+  ///
+  /// Extract \a count uint64_t values from the binary data at the offset
+  /// pointed to by \a offset_ptr, and advance the offset on success. The
+  /// extracted values are copied into \a dst.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \param[out] dst
+  ///     A buffer to copy \a count uint64_t values into. \a dst must
+  ///     be large enough to hold all requested data.
+  ///
+  /// \param[in] count
+  ///     The number of uint64_t values to extract.
+  ///
+  /// \return
+  ///     \a dst if all values were properly extracted and copied,
+  ///     nullptr otherwise.
+  void *GetU64(lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
+
+  /// Extract a signed LEB128 value from \a *offset_ptr.
+  ///
+  /// Extracts an signed LEB128 number from this object's data starting at the
+  /// offset pointed to by \a offset_ptr. The offset pointed to by \a
+  /// offset_ptr will be updated with the offset of the byte following the
+  /// last extracted byte.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted signed integer value.
+  int64_t GetSLEB128(lldb::offset_t *offset_ptr) const;
+
+  /// Extract a unsigned LEB128 value from \a *offset_ptr.
+  ///
+  /// Extracts an unsigned LEB128 number from this object's data starting at
+  /// the offset pointed to by \a offset_ptr. The offset pointed to by \a
+  /// offset_ptr will be updated with the offset of the byte following the
+  /// last extracted byte.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  ///     The extracted unsigned integer value.
+  uint64_t GetULEB128(lldb::offset_t *offset_ptr) const;
+
+  lldb::DataBufferSP &GetSharedDataBuffer() { return m_data_sp; }
+
+  /// Peek at a C string at \a offset.
+  ///
+  /// Peeks at a string in the contained data. No verification is done to make
+  /// sure the entire string lies within the bounds of this object's data,
+  /// only \a offset is verified to be a valid offset.
+  ///
+  /// \param[in] offset
+  ///     An offset into the data.
+  ///
+  /// \return
+  ///     A non-nullptr C string pointer if \a offset is a valid offset,
+  ///     nullptr otherwise.
+  const char *PeekCStr(lldb::offset_t offset) const;
+
+  /// Peek at a bytes at \a offset.
+  ///
+  /// Returns a pointer to \a length bytes at \a offset as long as there are
+  /// \a length bytes available starting at \a offset.
+  ///
+  /// \return
+  ///     A non-nullptr data pointer if \a offset is a valid offset and
+  ///     there are \a length bytes available at that offset, nullptr
+  ///     otherwise.
+  const uint8_t *PeekData(lldb::offset_t offset, lldb::offset_t length) const {
+    if (ValidOffsetForDataOfSize(offset, length))
+      return m_start + offset;
+    return nullptr;
+  }
+
+  /// Set the address byte size.
+  ///
+  /// Set the size in bytes that will be used when extracting any address and
+  /// pointer values from data contained in this object.
+  ///
+  /// \param[in] addr_size
+  ///     The size in bytes to use when extracting addresses.
+  void SetAddressByteSize(uint32_t addr_size) {
+#ifdef LLDB_CONFIGURATION_DEBUG
+    assert(addr_size == 4 || addr_size == 8);
+#endif
+    m_addr_size = addr_size;
+  }
+
+  /// Set data with a buffer that is caller owned.
+  ///
+  /// Use data that is owned by the caller when extracting values. The data
+  /// must stay around as long as this object, or any object that copies a
+  /// subset of this object's data, is valid. If \a bytes is nullptr, or \a
+  /// length is zero, this object will contain no data.
+  ///
+  /// \param[in] bytes
+  ///     A pointer to caller owned data.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of \a bytes.
+  ///
+  /// \param[in] byte_order
+  ///     A byte order of the data that we are extracting from.
+  ///
+  /// \return
+  ///     The number of bytes that this object now contains.
+  lldb::offset_t SetData(const void *bytes, lldb::offset_t length,
+                         lldb::ByteOrder byte_order);
+
+  /// Adopt a subset of \a data.
+  ///
+  /// Set this object's data to be a subset of the data bytes in \a data. If
+  /// \a data contains shared data, then a reference to the shared data will
+  /// be added to ensure the shared data stays around as long as any objects
+  /// have references to the shared data. The byte order and the address size
+  /// settings are copied from \a data. If \a offset is not a valid offset in
+  /// \a data, then no reference to the shared data will be added. If there
+  /// are not \a length bytes available in \a data starting at \a offset, the
+  /// length will be truncated to contains as many bytes as possible.
+  ///
+  /// \param[in] data
+  ///     Another DataExtractor object that contains data.
+  ///
+  /// \param[in] offset
+  ///     The offset into \a data at which the subset starts.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of the subset of \a data.
+  ///
+  /// \return
+  ///     The number of bytes that this object now contains.
+  lldb::offset_t SetData(const DataExtractor &data, lldb::offset_t offset,
+                         lldb::offset_t length);
+
+  /// Adopt a subset of shared data in \a data_sp.
+  ///
+  /// Copies the data shared pointer which adds a reference to the contained
+  /// in \a data_sp. The shared data reference is reference counted to ensure
+  /// the data lives as long as anyone still has a valid shared pointer to the
+  /// data in \a data_sp. The byte order and address byte size settings remain
+  /// the same. If \a offset is not a valid offset in \a data_sp, then no
+  /// reference to the shared data will be added. If there are not \a length
+  /// bytes available in \a data starting at \a offset, the length will be
+  /// truncated to contains as many bytes as possible.
+  ///
+  /// \param[in] data_sp
+  ///     A shared pointer to data.
+  ///
+  /// \param[in] offset
+  ///     The offset into \a data_sp at which the subset starts.
+  ///
+  /// \param[in] length
+  ///     The length in bytes of the subset of \a data_sp.
+  ///
+  /// \return
+  ///     The number of bytes that this object now contains.
+  lldb::offset_t SetData(const lldb::DataBufferSP &data_sp,
+                         lldb::offset_t offset = 0,
+                         lldb::offset_t length = LLDB_INVALID_OFFSET);
+
+  /// Set the byte_order value.
+  ///
+  /// Sets the byte order of the data to extract. Extracted values will be
+  /// swapped if necessary when decoding.
+  ///
+  /// \param[in] byte_order
+  ///     The byte order value to use when extracting data.
+  void SetByteOrder(lldb::ByteOrder byte_order) { m_byte_order = byte_order; }
+
+  /// Skip an LEB128 number at \a *offset_ptr.
+  ///
+  /// Skips a LEB128 number (signed or unsigned) from this object's data
+  /// starting at the offset pointed to by \a offset_ptr. The offset pointed
+  /// to by \a offset_ptr will be updated with the offset of the byte
+  /// following the last extracted byte.
+  ///
+  /// \param[in,out] offset_ptr
+  ///     A pointer to an offset within the data that will be advanced
+  ///     by the appropriate number of bytes if the value is extracted
+  ///     correctly. If the offset is out of bounds or there are not
+  ///     enough bytes to extract this value, the offset will be left
+  ///     unmodified.
+  ///
+  /// \return
+  //      The number of bytes consumed during the extraction.
+  uint32_t Skip_LEB128(lldb::offset_t *offset_ptr) const;
+
+  /// Test the validity of \a offset.
+  ///
+  /// \return
+  ///     \b true if \a offset is a valid offset into the data in this
+  ///     object, \b false otherwise.
+  bool ValidOffset(lldb::offset_t offset) const {
+    return offset < GetByteSize();
+  }
+
+  /// Test the availability of \a length bytes of data from \a offset.
+  ///
+  /// \return
+  ///     \b true if \a offset is a valid offset and there are \a
+  ///     length bytes available at that offset, \b false otherwise.
+  bool ValidOffsetForDataOfSize(lldb::offset_t offset,
+                                lldb::offset_t length) const {
+    return length <= BytesLeft(offset);
+  }
+
+  size_t Copy(DataExtractor &dest_data) const;
+
+  bool Append(DataExtractor &rhs);
+
+  bool Append(void *bytes, lldb::offset_t length);
+
+  lldb::offset_t BytesLeft(lldb::offset_t offset) const {
+    const lldb::offset_t size = GetByteSize();
+    if (size > offset)
+      return size - offset;
+    return 0;
+  }
+
+  void Checksum(llvm::SmallVectorImpl<uint8_t> &dest, uint64_t max_data = 0);
+
+  llvm::ArrayRef<uint8_t> GetData() const {
+    return {GetDataStart(), size_t(GetByteSize())};
+  }
+
+protected:
+  // Member variables
+  const uint8_t *m_start; ///< A pointer to the first byte of data.
+  const uint8_t
+      *m_end; ///< A pointer to the byte that is past the end of the data.
+  lldb::ByteOrder
+      m_byte_order;     ///< The byte order of the data we are extracting from.
+  uint32_t m_addr_size; ///< The address size to use when extracting pointers or
+                        /// addresses
+  mutable lldb::DataBufferSP m_data_sp; ///< The shared pointer to data that can
+                                        /// be shared among multiple instances
+  const uint32_t m_target_byte_size;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_DataExtractor_h_
diff --git a/linux-x64/clang/include/lldb/Utility/Endian.h b/linux-x64/clang/include/lldb/Utility/Endian.h
new file mode 100644
index 0000000..cead5f8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Endian.h
@@ -0,0 +1,33 @@
+//===-- Endian.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_ENDIAN_H
+#define LLDB_UTILITY_ENDIAN_H
+
+#include "lldb/lldb-enumerations.h"
+
+#include <stdint.h>
+
+namespace lldb_private {
+
+namespace endian {
+
+static union EndianTest {
+  uint32_t num;
+  uint8_t bytes[sizeof(uint32_t)];
+} const endianTest = {0x01020304};
+
+inline lldb::ByteOrder InlHostByteOrder() {
+  return static_cast<lldb::ByteOrder>(endianTest.bytes[0]);
+}
+
+//    ByteOrder const InlHostByteOrder = (ByteOrder)endianTest.bytes[0];
+}
+}
+
+#endif // liblldb_host_endian_h_
diff --git a/linux-x64/clang/include/lldb/Utility/Environment.h b/linux-x64/clang/include/lldb/Utility/Environment.h
new file mode 100644
index 0000000..398b3ba
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Environment.h
@@ -0,0 +1,95 @@
+//===-- Environment.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_ENVIRONMENT_H
+#define LLDB_UTILITY_ENVIRONMENT_H
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/FormatProviders.h"
+
+namespace lldb_private {
+
+class Environment : private llvm::StringMap<std::string> {
+  using Base = llvm::StringMap<std::string>;
+
+public:
+  class Envp {
+  public:
+    Envp(Envp &&RHS) = default;
+    Envp &operator=(Envp &&RHS) = default;
+
+    char *const *get() const { return Data; }
+    operator char *const *() const { return get(); }
+
+  private:
+    explicit Envp(const Environment &Env);
+    char *make_entry(llvm::StringRef Key, llvm::StringRef Value);
+    Envp(const Envp &) = delete;
+    Envp &operator=(const Envp &) = delete;
+    friend class Environment;
+
+    llvm::BumpPtrAllocator Allocator;
+    char **Data;
+  };
+
+  using Base::const_iterator;
+  using Base::iterator;
+  using Base::value_type;
+
+  using Base::begin;
+  using Base::clear;
+  using Base::count;
+  using Base::empty;
+  using Base::end;
+  using Base::erase;
+  using Base::find;
+  using Base::insert;
+  using Base::lookup;
+  using Base::size;
+  using Base::try_emplace;
+  using Base::operator[];
+
+  Environment() : Base() {}
+  Environment(const Environment &RHS) : Base(RHS) {}
+  Environment(Environment &&RHS) : Base(std::move(RHS)) {}
+  Environment(char *const *Env)
+      : Environment(const_cast<const char *const *>(Env)) {}
+  Environment(const char *const *Env);
+
+  Environment &operator=(Environment RHS) {
+    Base::operator=(std::move(RHS));
+    return *this;
+  }
+
+  std::pair<iterator, bool> insert(llvm::StringRef KeyEqValue) {
+    return insert(KeyEqValue.split('='));
+  }
+
+  void insert(const_iterator first, const_iterator last);
+
+  Envp getEnvp() const { return Envp(*this); }
+
+  static std::string compose(const value_type &KeyValue) {
+    return (KeyValue.first() + "=" + KeyValue.second).str();
+  }
+};
+
+} // namespace lldb_private
+
+namespace llvm {
+template <> struct format_provider<lldb_private::Environment> {
+  static void format(const lldb_private::Environment &Env, raw_ostream &Stream,
+                     StringRef Style) {
+    for (const auto &KV : Env)
+      Stream << "env[" << KV.first() << "] = " << KV.second << "\n";
+  }
+};
+} // namespace llvm
+
+#endif // #ifndef LLDB_UTILITY_ENVIRONMENT_H
diff --git a/linux-x64/clang/include/lldb/Utility/Event.h b/linux-x64/clang/include/lldb/Utility/Event.h
new file mode 100644
index 0000000..dd5d080
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Event.h
@@ -0,0 +1,251 @@
+//===-- Event.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_EVENT_H
+#define LLDB_UTILITY_EVENT_H
+
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/Predicate.h"
+#include "lldb/Utility/StructuredData.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include <chrono>
+#include <memory>
+#include <string>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class Event;
+class Stream;
+}
+
+namespace lldb_private {
+
+// lldb::EventData
+class EventData {
+  friend class Event;
+
+public:
+  EventData();
+
+  virtual ~EventData();
+
+  virtual ConstString GetFlavor() const = 0;
+
+  virtual void Dump(Stream *s) const;
+
+private:
+  virtual void DoOnRemoval(Event *event_ptr) {}
+
+  DISALLOW_COPY_AND_ASSIGN(EventData);
+};
+
+// lldb::EventDataBytes
+class EventDataBytes : public EventData {
+public:
+  // Constructors
+  EventDataBytes();
+
+  EventDataBytes(const char *cstr);
+
+  EventDataBytes(llvm::StringRef str);
+
+  EventDataBytes(const void *src, size_t src_len);
+
+  ~EventDataBytes() override;
+
+  // Member functions
+  ConstString GetFlavor() const override;
+
+  void Dump(Stream *s) const override;
+
+  const void *GetBytes() const;
+
+  size_t GetByteSize() const;
+
+  void SetBytes(const void *src, size_t src_len);
+
+  void SwapBytes(std::string &new_bytes);
+
+  void SetBytesFromCString(const char *cstr);
+
+  // Static functions
+  static const EventDataBytes *GetEventDataFromEvent(const Event *event_ptr);
+
+  static const void *GetBytesFromEvent(const Event *event_ptr);
+
+  static size_t GetByteSizeFromEvent(const Event *event_ptr);
+
+  static ConstString GetFlavorString();
+
+private:
+  std::string m_bytes;
+
+  DISALLOW_COPY_AND_ASSIGN(EventDataBytes);
+};
+
+class EventDataReceipt : public EventData {
+public:
+  EventDataReceipt() : EventData(), m_predicate(false) {}
+
+  ~EventDataReceipt() override {}
+
+  static ConstString GetFlavorString() {
+    static ConstString g_flavor("Process::ProcessEventData");
+    return g_flavor;
+  }
+
+  ConstString GetFlavor() const override { return GetFlavorString(); }
+
+  bool WaitForEventReceived(const Timeout<std::micro> &timeout = llvm::None) {
+    return m_predicate.WaitForValueEqualTo(true, timeout);
+  }
+
+private:
+  Predicate<bool> m_predicate;
+
+  void DoOnRemoval(Event *event_ptr) override {
+    m_predicate.SetValue(true, eBroadcastAlways);
+  }
+};
+
+/// This class handles one or more StructuredData::Dictionary entries
+/// that are raised for structured data events.
+
+class EventDataStructuredData : public EventData {
+public:
+  // Constructors
+  EventDataStructuredData();
+
+  EventDataStructuredData(const lldb::ProcessSP &process_sp,
+                          const StructuredData::ObjectSP &object_sp,
+                          const lldb::StructuredDataPluginSP &plugin_sp);
+
+  ~EventDataStructuredData() override;
+
+  // Member functions
+  ConstString GetFlavor() const override;
+
+  void Dump(Stream *s) const override;
+
+  const lldb::ProcessSP &GetProcess() const;
+
+  const StructuredData::ObjectSP &GetObject() const;
+
+  const lldb::StructuredDataPluginSP &GetStructuredDataPlugin() const;
+
+  void SetProcess(const lldb::ProcessSP &process_sp);
+
+  void SetObject(const StructuredData::ObjectSP &object_sp);
+
+  void SetStructuredDataPlugin(const lldb::StructuredDataPluginSP &plugin_sp);
+
+  // Static functions
+  static const EventDataStructuredData *
+  GetEventDataFromEvent(const Event *event_ptr);
+
+  static lldb::ProcessSP GetProcessFromEvent(const Event *event_ptr);
+
+  static StructuredData::ObjectSP GetObjectFromEvent(const Event *event_ptr);
+
+  static lldb::StructuredDataPluginSP
+  GetPluginFromEvent(const Event *event_ptr);
+
+  static ConstString GetFlavorString();
+
+private:
+  lldb::ProcessSP m_process_sp;
+  StructuredData::ObjectSP m_object_sp;
+  lldb::StructuredDataPluginSP m_plugin_sp;
+
+  DISALLOW_COPY_AND_ASSIGN(EventDataStructuredData);
+};
+
+// lldb::Event
+class Event {
+  friend class Listener;
+  friend class EventData;
+  friend class Broadcaster::BroadcasterImpl;
+
+public:
+  Event(Broadcaster *broadcaster, uint32_t event_type,
+        EventData *data = nullptr);
+
+  Event(Broadcaster *broadcaster, uint32_t event_type,
+        const lldb::EventDataSP &event_data_sp);
+
+  Event(uint32_t event_type, EventData *data = nullptr);
+
+  Event(uint32_t event_type, const lldb::EventDataSP &event_data_sp);
+
+  ~Event();
+
+  void Dump(Stream *s) const;
+
+  EventData *GetData() { return m_data_sp.get(); }
+
+  const EventData *GetData() const { return m_data_sp.get(); }
+
+  void SetData(EventData *new_data) { m_data_sp.reset(new_data); }
+
+  uint32_t GetType() const { return m_type; }
+
+  void SetType(uint32_t new_type) { m_type = new_type; }
+
+  Broadcaster *GetBroadcaster() const {
+    Broadcaster::BroadcasterImplSP broadcaster_impl_sp =
+        m_broadcaster_wp.lock();
+    if (broadcaster_impl_sp)
+      return broadcaster_impl_sp->GetBroadcaster();
+    else
+      return nullptr;
+  }
+
+  bool BroadcasterIs(Broadcaster *broadcaster) {
+    Broadcaster::BroadcasterImplSP broadcaster_impl_sp =
+        m_broadcaster_wp.lock();
+    if (broadcaster_impl_sp)
+      return broadcaster_impl_sp->GetBroadcaster() == broadcaster;
+    else
+      return false;
+  }
+
+  void Clear() { m_data_sp.reset(); }
+
+private:
+  // This is only called by Listener when it pops an event off the queue for
+  // the listener.  It calls the Event Data's DoOnRemoval() method, which is
+  // virtual and can be overridden by the specific data classes.
+
+  void DoOnRemoval();
+
+  // Called by Broadcaster::BroadcastEvent prior to letting all the listeners
+  // know about it update the contained broadcaster so that events can be
+  // popped off one queue and re-broadcast to others.
+  void SetBroadcaster(Broadcaster *broadcaster) {
+    m_broadcaster_wp = broadcaster->GetBroadcasterImpl();
+  }
+
+  Broadcaster::BroadcasterImplWP
+      m_broadcaster_wp;        // The broadcaster that sent this event
+  uint32_t m_type;             // The bit describing this event
+  lldb::EventDataSP m_data_sp; // User specific data for this event
+
+  DISALLOW_COPY_AND_ASSIGN(Event);
+  Event() = delete;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_EVENT_H
diff --git a/linux-x64/clang/include/lldb/Utility/FileCollector.h b/linux-x64/clang/include/lldb/Utility/FileCollector.h
new file mode 100644
index 0000000..a892067
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/FileCollector.h
@@ -0,0 +1,77 @@
+//===-- FileCollector.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_FILE_COLLECTOR_H
+#define LLDB_UTILITY_FILE_COLLECTOR_H
+
+#include "lldb/Utility/FileSpec.h"
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringSet.h"
+#include "llvm/ADT/Twine.h"
+#include "llvm/Support/VirtualFileSystem.h"
+
+#include <mutex>
+
+namespace lldb_private {
+
+/// Collects files into a directory and generates a mapping that can be used by
+/// the VFS.
+class FileCollector {
+public:
+  FileCollector(const FileSpec &root, const FileSpec &overlay);
+
+  void AddFile(const llvm::Twine &file);
+  void AddFile(const FileSpec &file) { return AddFile(file.GetPath()); }
+
+  /// Write the yaml mapping (for the VFS) to the given file.
+  std::error_code WriteMapping(const FileSpec &mapping_file);
+
+  /// Copy the files into the root directory.
+  ///
+  /// When stop_on_error is true (the default) we abort as soon as one file
+  /// cannot be copied. This is relatively common, for example when a file was
+  /// removed after it was added to the mapping.
+  std::error_code CopyFiles(bool stop_on_error = true);
+
+protected:
+  void AddFileImpl(llvm::StringRef src_path);
+
+  bool MarkAsSeen(llvm::StringRef path) { return m_seen.insert(path).second; }
+
+  bool GetRealPath(llvm::StringRef src_path,
+                   llvm::SmallVectorImpl<char> &result);
+
+  void AddFileToMapping(llvm::StringRef virtual_path,
+                        llvm::StringRef real_path) {
+    m_vfs_writer.addFileMapping(virtual_path, real_path);
+  }
+
+  /// Synchronizes adding files.
+  std::mutex m_mutex;
+
+  /// The root directory where files are copied.
+  FileSpec m_root;
+
+  /// The root directory where the VFS overlay lives.
+  FileSpec m_overlay_root;
+
+  /// Tracks already seen files so they can be skipped.
+  llvm::StringSet<> m_seen;
+
+  /// The yaml mapping writer.
+  llvm::vfs::YAMLVFSWriter m_vfs_writer;
+
+  /// Caches real_path calls when resolving symlinks.
+  llvm::StringMap<std::string> m_symlink_map;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_FILE_COLLECTOR_H
diff --git a/linux-x64/clang/include/lldb/Utility/FileSpec.h b/linux-x64/clang/include/lldb/Utility/FileSpec.h
new file mode 100644
index 0000000..f0bc5c8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/FileSpec.h
@@ -0,0 +1,457 @@
+//===-- FileSpec.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_FileSpec_h_
+#define liblldb_FileSpec_h_
+
+#include <functional>
+#include <string>
+
+#include "lldb/Utility/ConstString.h"
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/Path.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class Stream;
+}
+namespace llvm {
+class Triple;
+}
+namespace llvm {
+class raw_ostream;
+}
+namespace llvm {
+template <typename T> class SmallVectorImpl;
+}
+
+namespace lldb_private {
+
+/// \class FileSpec FileSpec.h "lldb/Host/FileSpec.h"
+/// A file utility class.
+///
+/// A file specification class that divides paths up into a directory
+/// and basename. These string values of the paths are put into uniqued string
+/// pools for fast comparisons and efficient memory usage.
+///
+/// Another reason the paths are split into the directory and basename is to
+/// allow efficient debugger searching. Often in a debugger the user types in
+/// the basename of the file, for example setting a breakpoint by file and
+/// line, or specifying a module (shared library) to limit the scope in which
+/// to execute a command. The user rarely types in a full path. When the paths
+/// are already split up, it makes it easy for us to compare only the
+/// basenames of a lot of file specifications without having to split up the
+/// file path each time to get to the basename.
+class FileSpec {
+public:
+  using Style = llvm::sys::path::Style;
+
+  FileSpec();
+
+  /// Constructor with path.
+  ///
+  /// Takes a path to a file which can be just a filename, or a full path. If
+  /// \a path is not nullptr or empty, this function will call
+  /// FileSpec::SetFile (const char *path).
+  ///
+  /// \param[in] path
+  ///     The full or partial path to a file.
+  ///
+  /// \param[in] style
+  ///     The style of the path
+  ///
+  /// \see FileSpec::SetFile (const char *path)
+  explicit FileSpec(llvm::StringRef path, Style style = Style::native);
+
+  explicit FileSpec(llvm::StringRef path, const llvm::Triple &Triple);
+
+  /// Copy constructor
+  ///
+  /// Makes a copy of the uniqued directory and filename strings from \a rhs
+  /// if it is not nullptr.
+  ///
+  /// \param[in] rhs
+  ///     A const FileSpec object pointer to copy if non-nullptr.
+  FileSpec(const FileSpec *rhs);
+
+  /// Destructor.
+  ~FileSpec();
+
+  bool DirectoryEquals(const FileSpec &other) const;
+
+  bool FileEquals(const FileSpec &other) const;
+
+  /// Assignment operator.
+  ///
+  /// Makes a copy of the uniqued directory and filename strings from \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     A const FileSpec object reference to assign to this object.
+  ///
+  /// \return
+  ///     A const reference to this object.
+  const FileSpec &operator=(const FileSpec &rhs);
+
+  /// Equal to operator
+  ///
+  /// Tests if this object is equal to \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     A const FileSpec object reference to compare this object
+  ///     to.
+  ///
+  /// \return
+  ///     \b true if this object is equal to \a rhs, \b false
+  ///     otherwise.
+  bool operator==(const FileSpec &rhs) const;
+
+  /// Not equal to operator
+  ///
+  /// Tests if this object is not equal to \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     A const FileSpec object reference to compare this object
+  ///     to.
+  ///
+  /// \return
+  ///     \b true if this object is equal to \a rhs, \b false
+  ///     otherwise.
+  bool operator!=(const FileSpec &rhs) const;
+
+  /// Less than to operator
+  ///
+  /// Tests if this object is less than \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     A const FileSpec object reference to compare this object
+  ///     to.
+  ///
+  /// \return
+  ///     \b true if this object is less than \a rhs, \b false
+  ///     otherwise.
+  bool operator<(const FileSpec &rhs) const;
+
+  /// Convert to pointer operator.
+  ///
+  /// This allows code to check a FileSpec object to see if it contains
+  /// anything valid using code such as:
+  ///
+  /// \code
+  /// FileSpec file_spec(...);
+  /// if (file_spec)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     A pointer to this object if either the directory or filename
+  ///     is valid, nullptr otherwise.
+  explicit operator bool() const;
+
+  /// Logical NOT operator.
+  ///
+  /// This allows code to check a FileSpec object to see if it is invalid
+  /// using code such as:
+  ///
+  /// \code
+  /// FileSpec file_spec(...);
+  /// if (!file_spec)
+  /// { ...
+  /// \endcode
+  ///
+  /// \return
+  ///     Returns \b true if the object has an empty directory and
+  ///     filename, \b false otherwise.
+  bool operator!() const;
+
+  /// Clears the object state.
+  ///
+  /// Clear this object by releasing both the directory and filename string
+  /// values and reverting them to empty strings.
+  void Clear();
+
+  /// Compare two FileSpec objects.
+  ///
+  /// If \a full is true, then both the directory and the filename must match.
+  /// If \a full is false, then the directory names for \a lhs and \a rhs are
+  /// only compared if they are both not empty. This allows a FileSpec object
+  /// to only contain a filename and it can match FileSpec objects that have
+  /// matching filenames with different paths.
+  ///
+  /// \param[in] lhs
+  ///     A const reference to the Left Hand Side object to compare.
+  ///
+  /// \param[in] rhs
+  ///     A const reference to the Right Hand Side object to compare.
+  ///
+  /// \param[in] full
+  ///     If true, then both the directory and filenames will have to
+  ///     match for a compare to return zero (equal to). If false
+  ///     and either directory from \a lhs or \a rhs is empty, then
+  ///     only the filename will be compared, else a full comparison
+  ///     is done.
+  ///
+  /// \return
+  ///     \li -1 if \a lhs is less than \a rhs
+  ///     \li 0 if \a lhs is equal to \a rhs
+  ///     \li 1 if \a lhs is greater than \a rhs
+  static int Compare(const FileSpec &lhs, const FileSpec &rhs, bool full);
+
+  static bool Equal(const FileSpec &a, const FileSpec &b, bool full);
+
+  /// Attempt to guess path style for a given path string. It returns a style,
+  /// if it was able to make a reasonable guess, or None if it wasn't. The guess
+  /// will be correct if the input path was a valid absolute path on the system
+  /// which produced it. On other paths the result of this function is
+  /// unreliable (e.g. "c:\foo.txt" is a valid relative posix path).
+  static llvm::Optional<Style> GuessPathStyle(llvm::StringRef absolute_path);
+
+  /// Case sensitivity of path.
+  ///
+  /// \return
+  ///     \b true if the file path is case sensitive (POSIX), false
+  ///		if case insensitive (Windows).
+  bool IsCaseSensitive() const { return m_style != Style::windows; }
+
+  /// Dump this object to a Stream.
+  ///
+  /// Dump the object to the supplied stream \a s. If the object contains a
+  /// valid directory name, it will be displayed followed by a directory
+  /// delimiter, and the filename.
+  ///
+  /// \param[in] s
+  ///     The stream to which to dump the object description.
+  void Dump(Stream *s) const;
+
+  Style GetPathStyle() const;
+
+  /// Directory string get accessor.
+  ///
+  /// \return
+  ///     A reference to the directory string object.
+  ConstString &GetDirectory();
+
+  /// Directory string const get accessor.
+  ///
+  /// \return
+  ///     A const reference to the directory string object.
+  ConstString GetDirectory() const;
+
+  /// Filename string get accessor.
+  ///
+  /// \return
+  ///     A reference to the filename string object.
+  ConstString &GetFilename();
+
+  /// Filename string const get accessor.
+  ///
+  /// \return
+  ///     A const reference to the filename string object.
+  ConstString GetFilename() const;
+
+  /// Returns true if the filespec represents an implementation source file
+  /// (files with a ".c", ".cpp", ".m", ".mm" (many more) extension).
+  ///
+  /// \return
+  ///     \b true if the filespec represents an implementation source
+  ///     file, \b false otherwise.
+  bool IsSourceImplementationFile() const;
+
+  /// Returns true if the filespec represents a relative path.
+  ///
+  /// \return
+  ///     \b true if the filespec represents a relative path,
+  ///     \b false otherwise.
+  bool IsRelative() const;
+
+  /// Returns true if the filespec represents an absolute path.
+  ///
+  /// \return
+  ///     \b true if the filespec represents an absolute path,
+  ///     \b false otherwise.
+  bool IsAbsolute() const;
+
+  /// Make the FileSpec absolute by treating it relative to \a dir. Absolute
+  /// FileSpecs are never changed by this function.
+  void MakeAbsolute(const FileSpec &dir);
+
+  /// Temporary helper for FileSystem change.
+  void SetPath(llvm::StringRef p) { SetFile(p); }
+
+  /// Extract the full path to the file.
+  ///
+  /// Extract the directory and path into a fixed buffer. This is needed as
+  /// the directory and path are stored in separate string values.
+  ///
+  /// \param[out] path
+  ///     The buffer in which to place the extracted full path.
+  ///
+  /// \param[in] max_path_length
+  ///     The maximum length of \a path.
+  ///
+  /// \return
+  ///     Returns the number of characters that would be needed to
+  ///     properly copy the full path into \a path. If the returned
+  ///     number is less than \a max_path_length, then the path is
+  ///     properly copied and terminated. If the return value is
+  ///     >= \a max_path_length, then the path was truncated (but is
+  ///     still NULL terminated).
+  size_t GetPath(char *path, size_t max_path_length,
+                 bool denormalize = true) const;
+
+  /// Extract the full path to the file.
+  ///
+  /// Extract the directory and path into a std::string, which is returned.
+  ///
+  /// \return
+  ///     Returns a std::string with the directory and filename
+  ///     concatenated.
+  std::string GetPath(bool denormalize = true) const;
+
+  const char *GetCString(bool denormalize = true) const;
+
+  /// Extract the full path to the file.
+  ///
+  /// Extract the directory and path into an llvm::SmallVectorImpl<>
+  ///
+  /// \return
+  ///     Returns a std::string with the directory and filename
+  ///     concatenated.
+  void GetPath(llvm::SmallVectorImpl<char> &path,
+               bool denormalize = true) const;
+
+  /// Extract the extension of the file.
+  ///
+  /// Returns a ConstString that represents the extension of the filename for
+  /// this FileSpec object. If this object does not represent a file, or the
+  /// filename has no extension, ConstString(nullptr) is returned. The dot
+  /// ('.') character is not returned as part of the extension
+  ///
+  /// \return
+  ///     Returns the extension of the file as a ConstString object.
+  ConstString GetFileNameExtension() const;
+
+  /// Return the filename without the extension part
+  ///
+  /// Returns a ConstString that represents the filename of this object
+  /// without the extension part (e.g. for a file named "foo.bar", "foo" is
+  /// returned)
+  ///
+  /// \return
+  ///     Returns the filename without extension
+  ///     as a ConstString object.
+  ConstString GetFileNameStrippingExtension() const;
+
+  /// Get the memory cost of this object.
+  ///
+  /// Return the size in bytes that this object takes in memory. This returns
+  /// the size in bytes of this object, not any shared string values it may
+  /// refer to.
+  ///
+  /// \return
+  ///     The number of bytes that this object occupies in memory.
+  ///
+  /// \see ConstString::StaticMemorySize ()
+  size_t MemorySize() const;
+
+  /// Change the file specified with a new path.
+  ///
+  /// Update the contents of this object with a new path. The path will be
+  /// split up into a directory and filename and stored as uniqued string
+  /// values for quick comparison and efficient memory usage.
+  ///
+  /// \param[in] path
+  ///     A full, partial, or relative path to a file.
+  ///
+  /// \param[in] resolve_path
+  ///     If \b true, then we will try to resolve links the path using
+  ///     the static FileSpec::Resolve.
+  void SetFile(llvm::StringRef path, Style style);
+
+  void SetFile(llvm::StringRef path, const llvm::Triple &Triple);
+
+  bool IsResolved() const { return m_is_resolved; }
+
+  /// Set if the file path has been resolved or not.
+  ///
+  /// If you know a file path is already resolved and avoided passing a \b
+  /// true parameter for any functions that take a "bool resolve_path"
+  /// parameter, you can set the value manually using this call to make sure
+  /// we don't try and resolve it later, or try and resolve a path that has
+  /// already been resolved.
+  ///
+  /// \param[in] is_resolved
+  ///     A boolean value that will replace the current value that
+  ///     indicates if the paths in this object have been resolved.
+  void SetIsResolved(bool is_resolved) { m_is_resolved = is_resolved; }
+
+  FileSpec CopyByAppendingPathComponent(llvm::StringRef component) const;
+  FileSpec CopyByRemovingLastPathComponent() const;
+
+  void PrependPathComponent(llvm::StringRef component);
+  void PrependPathComponent(const FileSpec &new_path);
+
+  void AppendPathComponent(llvm::StringRef component);
+  void AppendPathComponent(const FileSpec &new_path);
+
+  /// Removes the last path component by replacing the current path with its
+  /// parent. When the current path has no parent, this is a no-op.
+  ///
+  /// \return
+  ///     A boolean value indicating whether the path was updated.
+  bool RemoveLastPathComponent();
+
+  ConstString GetLastPathComponent() const;
+
+protected:
+  // Convenience method for setting the file without changing the style.
+  void SetFile(llvm::StringRef path);
+
+  // Member variables
+  ConstString m_directory;            ///< The uniqued directory path
+  ConstString m_filename;             ///< The uniqued filename path
+  mutable bool m_is_resolved = false; ///< True if this path has been resolved.
+  Style m_style; ///< The syntax that this path uses (e.g. Windows / Posix)
+};
+
+/// Dump a FileSpec object to a stream
+Stream &operator<<(Stream &s, const FileSpec &f);
+
+} // namespace lldb_private
+
+namespace llvm {
+
+/// Implementation of format_provider<T> for FileSpec.
+///
+/// The options string of a FileSpec has the grammar:
+///
+///   file_spec_options   :: (empty) | F | D
+///
+///   =======================================================
+///   |  style  |     Meaning          |      Example       |
+///   -------------------------------------------------------
+///   |         |                      |  Input   |  Output |
+///   =======================================================
+///   |    F    | Only print filename  | /foo/bar |   bar   |
+///   |    D    | Only print directory | /foo/bar |  /foo/  |
+///   | (empty) | Print file and dir   |          |         |
+///   =======================================================
+///
+/// Any other value is considered an invalid format string.
+///
+template <> struct format_provider<lldb_private::FileSpec> {
+  static void format(const lldb_private::FileSpec &F, llvm::raw_ostream &Stream,
+                     StringRef Style);
+};
+} // namespace llvm
+
+#endif // liblldb_FileSpec_h_
diff --git a/linux-x64/clang/include/lldb/Utility/Flags.h b/linux-x64/clang/include/lldb/Utility/Flags.h
new file mode 100644
index 0000000..48b14e7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Flags.h
@@ -0,0 +1,156 @@
+//===-- Flags.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_FLAGS_H
+#define LLDB_UTILITY_FLAGS_H
+
+#include <cstddef>
+#include <cstdint>
+
+namespace lldb_private {
+
+/// \class Flags Flags.h "lldb/Utility/Flags.h"
+/// A class to manage flags.
+///
+/// The Flags class managed flag bits and allows testing and modification of
+/// individual or multiple flag bits.
+class Flags {
+public:
+  /// The value type for flags is a 32 bit unsigned integer type.
+  typedef uint32_t ValueType;
+
+  /// Construct with initial flag bit values.
+  ///
+  /// Constructs this object with \a mask as the initial value for all of the
+  /// flags.
+  ///
+  /// \param[in] mask
+  ///     The initial value for all flags.
+  Flags(ValueType flags = 0) : m_flags(flags) {}
+
+  /// Copy constructor.
+  ///
+  /// Construct and copy the flags from \a rhs.
+  ///
+  /// \param[in] rhs
+  ///     A const Flags object reference to copy.
+  Flags(const Flags &rhs) : m_flags(rhs.m_flags) {}
+
+  /// Destructor.
+  ~Flags() {}
+
+  /// Get accessor for all flags.
+  ///
+  /// \return
+  ///     Returns all of the flags as a Flags::ValueType.
+  ValueType Get() const { return m_flags; }
+
+  /// Return the number of flags that can be represented in this object.
+  ///
+  /// \return
+  ///     The maximum number bits in this flag object.
+  size_t GetBitSize() const { return sizeof(ValueType) * 8; }
+
+  /// Set accessor for all flags.
+  ///
+  /// \param[in] flags
+  ///     The bits with which to replace all of the current flags.
+  void Reset(ValueType flags) { m_flags = flags; }
+
+  /// Clear one or more flags.
+  ///
+  /// \param[in] mask
+  ///     A bitfield containing one or more flags.
+  ///
+  /// \return
+  ///     The new flags after clearing all bits from \a mask.
+  ValueType Clear(ValueType mask = ~static_cast<ValueType>(0)) {
+    m_flags &= ~mask;
+    return m_flags;
+  }
+
+  /// Set one or more flags by logical OR'ing \a mask with the current flags.
+  ///
+  /// \param[in] mask
+  ///     A bitfield containing one or more flags.
+  ///
+  /// \return
+  ///     The new flags after setting all bits from \a mask.
+  ValueType Set(ValueType mask) {
+    m_flags |= mask;
+    return m_flags;
+  }
+
+  /// Test if all bits in \a mask are 1 in the current flags
+  ///
+  /// \return
+  ///     \b true if all flags in \a mask are 1, \b false
+  ///     otherwise.
+  bool AllSet(ValueType mask) const { return (m_flags & mask) == mask; }
+
+  /// Test one or more flags.
+  ///
+  /// \return
+  ///     \b true if any flags in \a mask are 1, \b false
+  ///     otherwise.
+  bool AnySet(ValueType mask) const { return (m_flags & mask) != 0; }
+
+  /// Test a single flag bit.
+  ///
+  /// \return
+  ///     \b true if \a bit is set, \b false otherwise.
+  bool Test(ValueType bit) const { return (m_flags & bit) != 0; }
+
+  /// Test if all bits in \a mask are clear.
+  ///
+  /// \return
+  ///     \b true if \b all flags in \a mask are clear, \b false
+  ///     otherwise.
+  bool AllClear(ValueType mask) const { return (m_flags & mask) == 0; }
+
+  bool AnyClear(ValueType mask) const { return (m_flags & mask) != mask; }
+
+  /// Test a single flag bit to see if it is clear (zero).
+  ///
+  /// \return
+  ///     \b true if \a bit is 0, \b false otherwise.
+  bool IsClear(ValueType bit) const { return (m_flags & bit) == 0; }
+
+  /// Get the number of zero bits in \a m_flags.
+  ///
+  /// \return
+  ///     The number of bits that are set to 0 in the current flags.
+  size_t ClearCount() const {
+    size_t count = 0;
+    for (ValueType shift = 0; shift < sizeof(ValueType) * 8; ++shift) {
+      if ((m_flags & (1u << shift)) == 0)
+        ++count;
+    }
+    return count;
+  }
+
+  /// Get the number of one bits in \a m_flags.
+  ///
+  /// \return
+  ///     The number of bits that are set to 1 in the current flags.
+  size_t SetCount() const {
+    size_t count = 0;
+    for (ValueType mask = m_flags; mask; mask >>= 1) {
+      if (mask & 1u)
+        ++count;
+    }
+    return count;
+  }
+
+protected:
+  ValueType m_flags; ///< The flags.
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Flags_h_
diff --git a/linux-x64/clang/include/lldb/Utility/IOObject.h b/linux-x64/clang/include/lldb/Utility/IOObject.h
new file mode 100644
index 0000000..1640200
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/IOObject.h
@@ -0,0 +1,55 @@
+//===-- IOObject.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Host_Common_IOObject_h_
+#define liblldb_Host_Common_IOObject_h_
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class IOObject {
+public:
+  enum FDType {
+    eFDTypeFile,   // Other FD requiring read/write
+    eFDTypeSocket, // Socket requiring send/recv
+  };
+
+  // TODO: On Windows this should be a HANDLE, and wait should use
+  // WaitForMultipleObjects
+  typedef int WaitableHandle;
+  static const WaitableHandle kInvalidHandleValue;
+
+  IOObject(FDType type, bool should_close)
+      : m_fd_type(type), m_should_close_fd(should_close) {}
+  virtual ~IOObject();
+
+  virtual Status Read(void *buf, size_t &num_bytes) = 0;
+  virtual Status Write(const void *buf, size_t &num_bytes) = 0;
+  virtual bool IsValid() const = 0;
+  virtual Status Close() = 0;
+
+  FDType GetFdType() const { return m_fd_type; }
+
+  virtual WaitableHandle GetWaitableHandle() = 0;
+
+protected:
+  FDType m_fd_type;
+  bool m_should_close_fd; // True if this class should close the file descriptor
+                          // when it goes away.
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(IOObject);
+};
+} // namespace lldb_private
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Utility/Iterable.h b/linux-x64/clang/include/lldb/Utility/Iterable.h
new file mode 100644
index 0000000..d9c61aa
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Iterable.h
@@ -0,0 +1,197 @@
+//===-- Iterable.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Iterable_h_
+#define liblldb_Iterable_h_
+
+#include <utility>
+
+
+namespace lldb_private {
+
+template <typename I, typename E> E map_adapter(I &iter) {
+  return iter->second;
+}
+
+template <typename I, typename E> E vector_adapter(I &iter) { return *iter; }
+
+template <typename I, typename E> E list_adapter(I &iter) { return *iter; }
+
+template <typename C, typename E, E (*A)(typename C::const_iterator &)>
+class AdaptedConstIterator {
+public:
+  typedef typename C::const_iterator BackingIterator;
+
+  // Wrapping constructor
+  AdaptedConstIterator(BackingIterator backing_iterator)
+      : m_iter(backing_iterator) {}
+
+  // Default-constructible
+  AdaptedConstIterator() : m_iter() {}
+
+  // Copy-constructible
+  AdaptedConstIterator(const AdaptedConstIterator &rhs) : m_iter(rhs.m_iter) {}
+
+  // Copy-assignable
+  AdaptedConstIterator &operator=(const AdaptedConstIterator &rhs) {
+    m_iter = rhs.m_iter;
+    return *this;
+  }
+
+  // Destructible
+  ~AdaptedConstIterator() = default;
+
+  // Comparable
+  bool operator==(const AdaptedConstIterator &rhs) {
+    return m_iter == rhs.m_iter;
+  }
+
+  bool operator!=(const AdaptedConstIterator &rhs) {
+    return m_iter != rhs.m_iter;
+  }
+
+  // Rvalue dereferenceable
+  E operator*() { return (*A)(m_iter); }
+
+  E operator->() { return (*A)(m_iter); }
+
+  // Offset dereferenceable
+  E operator[](typename BackingIterator::difference_type offset) {
+    return AdaptedConstIterator(m_iter + offset);
+  }
+
+  // Incrementable
+  AdaptedConstIterator &operator++() {
+    m_iter++;
+    return *this;
+  }
+
+  // Decrementable
+  AdaptedConstIterator &operator--() {
+    m_iter--;
+    return *this;
+  }
+
+  // Compound assignment
+  AdaptedConstIterator &
+  operator+=(typename BackingIterator::difference_type offset) {
+    m_iter += offset;
+    return *this;
+  }
+
+  AdaptedConstIterator &
+  operator-=(typename BackingIterator::difference_type offset) {
+    m_iter -= offset;
+    return *this;
+  }
+
+  // Arithmetic
+  AdaptedConstIterator
+  operator+(typename BackingIterator::difference_type offset) {
+    return AdaptedConstIterator(m_iter + offset);
+  }
+
+  AdaptedConstIterator
+  operator-(typename BackingIterator::difference_type offset) {
+    return AdaptedConstIterator(m_iter - offset);
+  }
+
+  // Comparable
+  bool operator<(AdaptedConstIterator &rhs) { return m_iter < rhs.m_iter; }
+
+  bool operator<=(AdaptedConstIterator &rhs) { return m_iter <= rhs.m_iter; }
+
+  bool operator>(AdaptedConstIterator &rhs) { return m_iter > rhs.m_iter; }
+
+  bool operator>=(AdaptedConstIterator &rhs) { return m_iter >= rhs.m_iter; }
+
+  template <typename C1, typename E1, E1 (*A1)(typename C1::const_iterator &)>
+  friend AdaptedConstIterator<C1, E1, A1>
+  operator+(typename C1::const_iterator::difference_type,
+            AdaptedConstIterator<C1, E1, A1> &);
+
+  template <typename C1, typename E1, E1 (*A1)(typename C1::const_iterator &)>
+  friend typename C1::const_iterator::difference_type
+  operator-(AdaptedConstIterator<C1, E1, A1> &,
+            AdaptedConstIterator<C1, E1, A1> &);
+
+  template <typename C1, typename E1, E1 (*A1)(typename C1::const_iterator &)>
+  friend void swap(AdaptedConstIterator<C1, E1, A1> &,
+                   AdaptedConstIterator<C1, E1, A1> &);
+
+private:
+  BackingIterator m_iter;
+};
+
+template <typename C, typename E, E (*A)(typename C::const_iterator &)>
+AdaptedConstIterator<C, E, A> operator+(
+    typename AdaptedConstIterator<C, E, A>::BackingIterator::difference_type
+        offset,
+    AdaptedConstIterator<C, E, A> &rhs) {
+  return rhs.operator+(offset);
+}
+
+template <typename C, typename E, E (*A)(typename C::const_iterator &)>
+typename AdaptedConstIterator<C, E, A>::BackingIterator::difference_type
+operator-(AdaptedConstIterator<C, E, A> &lhs,
+          AdaptedConstIterator<C, E, A> &rhs) {
+  return (lhs.m_iter - rhs.m_iter);
+}
+
+template <typename C, typename E, E (*A)(typename C::const_iterator &)>
+void swap(AdaptedConstIterator<C, E, A> &lhs,
+          AdaptedConstIterator<C, E, A> &rhs) {
+  std::swap(lhs.m_iter, rhs.m_iter);
+}
+
+template <typename C, typename E, E (*A)(typename C::const_iterator &)>
+class AdaptedIterable {
+private:
+  const C &m_container;
+
+public:
+  AdaptedIterable(const C &container) : m_container(container) {}
+
+  AdaptedConstIterator<C, E, A> begin() {
+    return AdaptedConstIterator<C, E, A>(m_container.begin());
+  }
+
+  AdaptedConstIterator<C, E, A> end() {
+    return AdaptedConstIterator<C, E, A>(m_container.end());
+  }
+};
+
+template <typename C, typename E, E (*A)(typename C::const_iterator &),
+          typename MutexType>
+class LockingAdaptedIterable : public AdaptedIterable<C, E, A> {
+public:
+  LockingAdaptedIterable(C &container, MutexType &mutex)
+      : AdaptedIterable<C, E, A>(container), m_mutex(&mutex) {
+    m_mutex->lock();
+  }
+
+  LockingAdaptedIterable(LockingAdaptedIterable &&rhs)
+      : AdaptedIterable<C, E, A>(rhs), m_mutex(rhs.m_mutex) {
+    rhs.m_mutex = nullptr;
+  }
+
+  ~LockingAdaptedIterable() {
+    if (m_mutex)
+      m_mutex->unlock();
+  }
+
+private:
+  MutexType *m_mutex = nullptr;
+
+  LockingAdaptedIterable(const LockingAdaptedIterable &) = delete;
+  LockingAdaptedIterable &operator=(const LockingAdaptedIterable &) = delete;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Iterable_h_
diff --git a/linux-x64/clang/include/lldb/Utility/JSON.h b/linux-x64/clang/include/lldb/Utility/JSON.h
new file mode 100644
index 0000000..172f77a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/JSON.h
@@ -0,0 +1,283 @@
+//===---------------------JSON.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_JSON_h_
+#define utility_JSON_h_
+
+#include "lldb/Utility/StringExtractor.h"
+
+#include <map>
+#include <memory>
+#include <string>
+#include <type_traits>
+#include <vector>
+
+#include <stdint.h>
+
+namespace lldb_private {
+class Stream;
+
+class JSONValue {
+public:
+  virtual void Write(Stream &s) = 0;
+
+  typedef std::shared_ptr<JSONValue> SP;
+
+  enum class Kind { String, Number, True, False, Null, Object, Array };
+
+  JSONValue(Kind k) : m_kind(k) {}
+
+  Kind GetKind() const { return m_kind; }
+
+  virtual ~JSONValue() = default;
+
+private:
+  const Kind m_kind;
+};
+
+class JSONString : public JSONValue {
+public:
+  JSONString();
+  JSONString(const char *s);
+  JSONString(const std::string &s);
+
+  JSONString(const JSONString &s) = delete;
+  JSONString &operator=(const JSONString &s) = delete;
+
+  void Write(Stream &s) override;
+
+  typedef std::shared_ptr<JSONString> SP;
+
+  std::string GetData() { return m_data; }
+
+  static bool classof(const JSONValue *V) {
+    return V->GetKind() == JSONValue::Kind::String;
+  }
+
+  ~JSONString() override = default;
+
+private:
+  static std::string json_string_quote_metachars(const std::string &);
+
+  std::string m_data;
+};
+
+class JSONNumber : public JSONValue {
+public:
+  typedef std::shared_ptr<JSONNumber> SP;
+
+  // We cretae a constructor for all integer and floating point type with using
+  // templates and
+  // SFINAE to avoid having ambiguous overloads because of the implicit type
+  // promotion. If we
+  // would have constructors only with int64_t, uint64_t and double types then
+  // constructing a JSONNumber from an int32_t (or any other similar type)
+  // would fail to compile.
+
+  template <typename T, typename std::enable_if<
+                            std::is_integral<T>::value &&
+                            std::is_unsigned<T>::value>::type * = nullptr>
+  explicit JSONNumber(T u)
+      : JSONValue(JSONValue::Kind::Number), m_data_type(DataType::Unsigned) {
+    m_data.m_unsigned = u;
+  }
+
+  template <typename T,
+            typename std::enable_if<std::is_integral<T>::value &&
+                                    std::is_signed<T>::value>::type * = nullptr>
+  explicit JSONNumber(T s)
+      : JSONValue(JSONValue::Kind::Number), m_data_type(DataType::Signed) {
+    m_data.m_signed = s;
+  }
+
+  template <typename T, typename std::enable_if<
+                            std::is_floating_point<T>::value>::type * = nullptr>
+  explicit JSONNumber(T d)
+      : JSONValue(JSONValue::Kind::Number), m_data_type(DataType::Double) {
+    m_data.m_double = d;
+  }
+
+  ~JSONNumber() override = default;
+
+  JSONNumber(const JSONNumber &s) = delete;
+  JSONNumber &operator=(const JSONNumber &s) = delete;
+
+  void Write(Stream &s) override;
+
+  uint64_t GetAsUnsigned() const;
+
+  int64_t GetAsSigned() const;
+
+  double GetAsDouble() const;
+
+  static bool classof(const JSONValue *V) {
+    return V->GetKind() == JSONValue::Kind::Number;
+  }
+
+private:
+  enum class DataType : uint8_t { Unsigned, Signed, Double } m_data_type;
+
+  union {
+    uint64_t m_unsigned;
+    int64_t m_signed;
+    double m_double;
+  } m_data;
+};
+
+class JSONTrue : public JSONValue {
+public:
+  JSONTrue();
+
+  JSONTrue(const JSONTrue &s) = delete;
+  JSONTrue &operator=(const JSONTrue &s) = delete;
+
+  void Write(Stream &s) override;
+
+  typedef std::shared_ptr<JSONTrue> SP;
+
+  static bool classof(const JSONValue *V) {
+    return V->GetKind() == JSONValue::Kind::True;
+  }
+
+  ~JSONTrue() override = default;
+};
+
+class JSONFalse : public JSONValue {
+public:
+  JSONFalse();
+
+  JSONFalse(const JSONFalse &s) = delete;
+  JSONFalse &operator=(const JSONFalse &s) = delete;
+
+  void Write(Stream &s) override;
+
+  typedef std::shared_ptr<JSONFalse> SP;
+
+  static bool classof(const JSONValue *V) {
+    return V->GetKind() == JSONValue::Kind::False;
+  }
+
+  ~JSONFalse() override = default;
+};
+
+class JSONNull : public JSONValue {
+public:
+  JSONNull();
+
+  JSONNull(const JSONNull &s) = delete;
+  JSONNull &operator=(const JSONNull &s) = delete;
+
+  void Write(Stream &s) override;
+
+  typedef std::shared_ptr<JSONNull> SP;
+
+  static bool classof(const JSONValue *V) {
+    return V->GetKind() == JSONValue::Kind::Null;
+  }
+
+  ~JSONNull() override = default;
+};
+
+class JSONObject : public JSONValue {
+public:
+  JSONObject();
+
+  JSONObject(const JSONObject &s) = delete;
+  JSONObject &operator=(const JSONObject &s) = delete;
+
+  void Write(Stream &s) override;
+
+  typedef std::shared_ptr<JSONObject> SP;
+
+  static bool classof(const JSONValue *V) {
+    return V->GetKind() == JSONValue::Kind::Object;
+  }
+
+  bool SetObject(const std::string &key, JSONValue::SP value);
+
+  JSONValue::SP GetObject(const std::string &key);
+
+  ~JSONObject() override = default;
+
+private:
+  typedef std::map<std::string, JSONValue::SP> Map;
+  typedef Map::iterator Iterator;
+  Map m_elements;
+};
+
+class JSONArray : public JSONValue {
+public:
+  JSONArray();
+
+  JSONArray(const JSONArray &s) = delete;
+  JSONArray &operator=(const JSONArray &s) = delete;
+
+  void Write(Stream &s) override;
+
+  typedef std::shared_ptr<JSONArray> SP;
+
+  static bool classof(const JSONValue *V) {
+    return V->GetKind() == JSONValue::Kind::Array;
+  }
+
+private:
+  typedef std::vector<JSONValue::SP> Vector;
+  typedef Vector::iterator Iterator;
+  typedef Vector::size_type Index;
+  typedef Vector::size_type Size;
+
+public:
+  bool SetObject(Index i, JSONValue::SP value);
+
+  bool AppendObject(JSONValue::SP value);
+
+  JSONValue::SP GetObject(Index i);
+
+  Size GetNumElements();
+
+  ~JSONArray() override = default;
+
+  Vector m_elements;
+};
+
+class JSONParser : public StringExtractor {
+public:
+  enum Token {
+    Invalid,
+    Status,
+    ObjectStart,
+    ObjectEnd,
+    ArrayStart,
+    ArrayEnd,
+    Comma,
+    Colon,
+    String,
+    Integer,
+    Float,
+    True,
+    False,
+    Null,
+    EndOfFile
+  };
+
+  JSONParser(llvm::StringRef data);
+
+  int GetEscapedChar(bool &was_escaped);
+
+  Token GetToken(std::string &value);
+
+  JSONValue::SP ParseJSONValue();
+
+protected:
+  JSONValue::SP ParseJSONObject();
+
+  JSONValue::SP ParseJSONArray();
+};
+} // namespace lldb_private
+
+#endif // utility_JSON_h_
diff --git a/linux-x64/clang/include/lldb/Utility/LLDBAssert.h b/linux-x64/clang/include/lldb/Utility/LLDBAssert.h
new file mode 100644
index 0000000..7008dd8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/LLDBAssert.h
@@ -0,0 +1,25 @@
+//===----------------- LLDBAssert.h ------------------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_LLDBAssert_h_
+#define utility_LLDBAssert_h_
+
+#ifdef LLDB_CONFIGURATION_DEBUG
+#define lldbassert(x) assert(x)
+#else
+#define lldbassert(x)                                                          \
+  lldb_private::lldb_assert(static_cast<bool>(x), #x, __FUNCTION__, __FILE__,  \
+                            __LINE__)
+#endif
+
+namespace lldb_private {
+void lldb_assert(bool expression, const char *expr_text, const char *func,
+                 const char *file, unsigned int line);
+}
+
+#endif // utility_LLDBAssert_h_
diff --git a/linux-x64/clang/include/lldb/Utility/Listener.h b/linux-x64/clang/include/lldb/Utility/Listener.h
new file mode 100644
index 0000000..17fc478
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Listener.h
@@ -0,0 +1,153 @@
+//===-- Listener.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_LISTENER_H
+#define LLDB_UTILITY_LISTENER_H
+
+#include "lldb/Utility/Broadcaster.h"
+#include "lldb/Utility/Timeout.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-forward.h"
+
+#include <condition_variable>
+#include <list>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <ratio>
+#include <string>
+#include <vector>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+class ConstString;
+class Event;
+}
+
+namespace lldb_private {
+
+class Listener : public std::enable_shared_from_this<Listener> {
+public:
+  typedef bool (*HandleBroadcastCallback)(lldb::EventSP &event_sp, void *baton);
+
+  friend class Broadcaster;
+  friend class BroadcasterManager;
+
+  // Constructors and Destructors
+  //
+  // Listeners have to be constructed into shared pointers - at least if you
+  // want them to listen to Broadcasters,
+protected:
+  Listener(const char *name);
+
+public:
+  static lldb::ListenerSP MakeListener(const char *name);
+
+  ~Listener();
+
+  void AddEvent(lldb::EventSP &event);
+
+  void Clear();
+
+  const char *GetName() { return m_name.c_str(); }
+
+  uint32_t
+  StartListeningForEventSpec(const lldb::BroadcasterManagerSP &manager_sp,
+                             const BroadcastEventSpec &event_spec);
+
+  bool StopListeningForEventSpec(const lldb::BroadcasterManagerSP &manager_sp,
+                                 const BroadcastEventSpec &event_spec);
+
+  uint32_t StartListeningForEvents(Broadcaster *broadcaster,
+                                   uint32_t event_mask);
+
+  uint32_t StartListeningForEvents(Broadcaster *broadcaster,
+                                   uint32_t event_mask,
+                                   HandleBroadcastCallback callback,
+                                   void *callback_user_data);
+
+  bool StopListeningForEvents(Broadcaster *broadcaster, uint32_t event_mask);
+
+  Event *PeekAtNextEvent();
+
+  Event *PeekAtNextEventForBroadcaster(Broadcaster *broadcaster);
+
+  Event *PeekAtNextEventForBroadcasterWithType(Broadcaster *broadcaster,
+                                               uint32_t event_type_mask);
+
+  // Returns true if an event was received, false if we timed out.
+  bool GetEvent(lldb::EventSP &event_sp, const Timeout<std::micro> &timeout);
+
+  bool GetEventForBroadcaster(Broadcaster *broadcaster, lldb::EventSP &event_sp,
+                              const Timeout<std::micro> &timeout);
+
+  bool GetEventForBroadcasterWithType(Broadcaster *broadcaster,
+                                      uint32_t event_type_mask,
+                                      lldb::EventSP &event_sp,
+                                      const Timeout<std::micro> &timeout);
+
+  size_t HandleBroadcastEvent(lldb::EventSP &event_sp);
+
+private:
+  // Classes that inherit from Listener can see and modify these
+  struct BroadcasterInfo {
+    BroadcasterInfo(uint32_t mask, HandleBroadcastCallback cb = nullptr,
+                    void *ud = nullptr)
+        : event_mask(mask), callback(cb), callback_user_data(ud) {}
+
+    uint32_t event_mask;
+    HandleBroadcastCallback callback;
+    void *callback_user_data;
+  };
+
+  typedef std::multimap<Broadcaster::BroadcasterImplWP, BroadcasterInfo,
+                        std::owner_less<Broadcaster::BroadcasterImplWP>>
+      broadcaster_collection;
+  typedef std::list<lldb::EventSP> event_collection;
+  typedef std::vector<lldb::BroadcasterManagerWP>
+      broadcaster_manager_collection;
+
+  bool
+  FindNextEventInternal(std::unique_lock<std::mutex> &lock,
+                        Broadcaster *broadcaster, // nullptr for any broadcaster
+                        const ConstString *sources, // nullptr for any event
+                        uint32_t num_sources, uint32_t event_type_mask,
+                        lldb::EventSP &event_sp, bool remove);
+
+  bool GetEventInternal(const Timeout<std::micro> &timeout,
+                        Broadcaster *broadcaster, // nullptr for any broadcaster
+                        const ConstString *sources, // nullptr for any event
+                        uint32_t num_sources, uint32_t event_type_mask,
+                        lldb::EventSP &event_sp);
+
+  std::string m_name;
+  broadcaster_collection m_broadcasters;
+  std::recursive_mutex m_broadcasters_mutex; // Protects m_broadcasters
+  event_collection m_events;
+  std::mutex m_events_mutex; // Protects m_broadcasters and m_events
+  std::condition_variable m_events_condition;
+  broadcaster_manager_collection m_broadcaster_managers;
+
+  void BroadcasterWillDestruct(Broadcaster *);
+
+  void BroadcasterManagerWillDestruct(lldb::BroadcasterManagerSP manager_sp);
+
+  //    broadcaster_collection::iterator
+  //    FindBroadcasterWithMask (Broadcaster *broadcaster,
+  //                             uint32_t event_mask,
+  //                             bool exact);
+
+  // For Listener only
+  DISALLOW_COPY_AND_ASSIGN(Listener);
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_LISTENER_H
diff --git a/linux-x64/clang/include/lldb/Utility/Log.h b/linux-x64/clang/include/lldb/Utility/Log.h
new file mode 100644
index 0000000..949de69
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Log.h
@@ -0,0 +1,236 @@
+//===-- Log.h ---------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_LOG_H
+#define LLDB_UTILITY_LOG_H
+
+#include "lldb/Utility/Flags.h"
+#include "lldb/Utility/Logging.h"
+#include "lldb/lldb-defines.h"
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/RWMutex.h"
+
+#include <atomic>
+#include <cstdarg>
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <type_traits>
+
+namespace llvm {
+class raw_ostream;
+}
+// Logging Options
+#define LLDB_LOG_OPTION_THREADSAFE (1u << 0)
+#define LLDB_LOG_OPTION_VERBOSE (1u << 1)
+#define LLDB_LOG_OPTION_PREPEND_SEQUENCE (1u << 3)
+#define LLDB_LOG_OPTION_PREPEND_TIMESTAMP (1u << 4)
+#define LLDB_LOG_OPTION_PREPEND_PROC_AND_THREAD (1u << 5)
+#define LLDB_LOG_OPTION_PREPEND_THREAD_NAME (1U << 6)
+#define LLDB_LOG_OPTION_BACKTRACE (1U << 7)
+#define LLDB_LOG_OPTION_APPEND (1U << 8)
+#define LLDB_LOG_OPTION_PREPEND_FILE_FUNCTION (1U << 9)
+
+// Logging Functions
+namespace lldb_private {
+
+class Log final {
+public:
+  // Description of a log channel category.
+  struct Category {
+    llvm::StringLiteral name;
+    llvm::StringLiteral description;
+    uint32_t flag;
+  };
+
+  // This class describes a log channel. It also encapsulates the behavior
+  // necessary to enable a log channel in an atomic manner.
+  class Channel {
+    std::atomic<Log *> log_ptr;
+    friend class Log;
+
+  public:
+    const llvm::ArrayRef<Category> categories;
+    const uint32_t default_flags;
+
+    constexpr Channel(llvm::ArrayRef<Log::Category> categories,
+                      uint32_t default_flags)
+        : log_ptr(nullptr), categories(categories),
+          default_flags(default_flags) {}
+
+    // This function is safe to call at any time. If the channel is disabled
+    // after (or concurrently with) this function returning a non-null Log
+    // pointer, it is still safe to attempt to write to the Log object -- the
+    // output will be discarded.
+    Log *GetLogIfAll(uint32_t mask) {
+      Log *log = log_ptr.load(std::memory_order_relaxed);
+      if (log && log->GetMask().AllSet(mask))
+        return log;
+      return nullptr;
+    }
+
+    // This function is safe to call at any time. If the channel is disabled
+    // after (or concurrently with) this function returning a non-null Log
+    // pointer, it is still safe to attempt to write to the Log object -- the
+    // output will be discarded.
+    Log *GetLogIfAny(uint32_t mask) {
+      Log *log = log_ptr.load(std::memory_order_relaxed);
+      if (log && log->GetMask().AnySet(mask))
+        return log;
+      return nullptr;
+    }
+  };
+
+
+  static void Initialize();
+
+  // Static accessors for logging channels
+  static void Register(llvm::StringRef name, Channel &channel);
+  static void Unregister(llvm::StringRef name);
+
+  static bool
+  EnableLogChannel(const std::shared_ptr<llvm::raw_ostream> &log_stream_sp,
+                   uint32_t log_options, llvm::StringRef channel,
+                   llvm::ArrayRef<const char *> categories,
+                   llvm::raw_ostream &error_stream);
+
+  static bool DisableLogChannel(llvm::StringRef channel,
+                                llvm::ArrayRef<const char *> categories,
+                                llvm::raw_ostream &error_stream);
+
+  static bool ListChannelCategories(llvm::StringRef channel,
+                                    llvm::raw_ostream &stream);
+
+  static void DisableAllLogChannels();
+
+  static void ListAllLogChannels(llvm::raw_ostream &stream);
+
+  // Member functions
+  //
+  // These functions are safe to call at any time you have a Log* obtained from
+  // the Channel class. If logging is disabled between you obtaining the Log
+  // object and writing to it, the output will be silently discarded.
+  Log(Channel &channel) : m_channel(channel) {}
+  ~Log() = default;
+
+  void PutCString(const char *cstr);
+  void PutString(llvm::StringRef str);
+
+  template <typename... Args>
+  void Format(llvm::StringRef file, llvm::StringRef function,
+              const char *format, Args &&... args) {
+    Format(file, function, llvm::formatv(format, std::forward<Args>(args)...));
+  }
+
+  template <typename... Args>
+  void FormatError(llvm::Error error, llvm::StringRef file,
+                   llvm::StringRef function, const char *format,
+                   Args &&... args) {
+    Format(file, function,
+           llvm::formatv(format, llvm::toString(std::move(error)),
+                         std::forward<Args>(args)...));
+  }
+
+  void Printf(const char *format, ...) __attribute__((format(printf, 2, 3)));
+
+  void VAPrintf(const char *format, va_list args);
+
+  void Error(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
+
+  void VAError(const char *format, va_list args);
+
+  void Verbose(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
+
+  void Warning(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
+
+  const Flags GetOptions() const;
+
+  const Flags GetMask() const;
+
+  bool GetVerbose() const;
+
+private:
+  Channel &m_channel;
+
+  // The mutex makes sure enable/disable operations are thread-safe. The
+  // options and mask variables are atomic to enable their reading in
+  // Channel::GetLogIfAny without taking the mutex to speed up the fast path.
+  // Their modification however, is still protected by this mutex.
+  llvm::sys::RWMutex m_mutex;
+
+  std::shared_ptr<llvm::raw_ostream> m_stream_sp;
+  std::atomic<uint32_t> m_options{0};
+  std::atomic<uint32_t> m_mask{0};
+
+  void WriteHeader(llvm::raw_ostream &OS, llvm::StringRef file,
+                   llvm::StringRef function);
+  void WriteMessage(const std::string &message);
+
+  void Format(llvm::StringRef file, llvm::StringRef function,
+              const llvm::formatv_object_base &payload);
+
+  std::shared_ptr<llvm::raw_ostream> GetStream() {
+    llvm::sys::ScopedReader lock(m_mutex);
+    return m_stream_sp;
+  }
+
+  void Enable(const std::shared_ptr<llvm::raw_ostream> &stream_sp,
+              uint32_t options, uint32_t flags);
+
+  void Disable(uint32_t flags);
+
+  typedef llvm::StringMap<Log> ChannelMap;
+  static llvm::ManagedStatic<ChannelMap> g_channel_map;
+
+  static void ListCategories(llvm::raw_ostream &stream,
+                             const ChannelMap::value_type &entry);
+  static uint32_t GetFlags(llvm::raw_ostream &stream, const ChannelMap::value_type &entry,
+                           llvm::ArrayRef<const char *> categories);
+
+  static void DisableLoggingChild();
+
+  Log(const Log &) = delete;
+  void operator=(const Log &) = delete;
+};
+
+} // namespace lldb_private
+
+#define LLDB_LOG(log, ...)                                                     \
+  do {                                                                         \
+    ::lldb_private::Log *log_private = (log);                                  \
+    if (log_private)                                                           \
+      log_private->Format(__FILE__, __func__, __VA_ARGS__);                    \
+  } while (0)
+
+#define LLDB_LOGV(log, ...)                                                    \
+  do {                                                                         \
+    ::lldb_private::Log *log_private = (log);                                  \
+    if (log_private && log_private->GetVerbose())                              \
+      log_private->Format(__FILE__, __func__, __VA_ARGS__);                    \
+  } while (0)
+
+// Write message to log, if error is set. In the log message refer to the error
+// with {0}. Error is cleared regardless of whether logging is enabled.
+#define LLDB_LOG_ERROR(log, error, ...)                                        \
+  do {                                                                         \
+    ::lldb_private::Log *log_private = (log);                                  \
+    ::llvm::Error error_private = (error);                                     \
+    if (log_private && error_private) {                                        \
+      log_private->FormatError(::std::move(error_private), __FILE__, __func__, \
+                               __VA_ARGS__);                                   \
+    } else                                                                     \
+      ::llvm::consumeError(::std::move(error_private));                        \
+  } while (0)
+
+#endif // LLDB_UTILITY_LOG_H
diff --git a/linux-x64/clang/include/lldb/Utility/Logging.h b/linux-x64/clang/include/lldb/Utility/Logging.h
new file mode 100644
index 0000000..41086fe
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Logging.h
@@ -0,0 +1,67 @@
+//===-- Logging.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_LOGGING_H
+#define LLDB_UTILITY_LOGGING_H
+
+#include <cstdint>
+
+// Log Bits specific to logging in lldb
+#define LIBLLDB_LOG_PROCESS (1u << 1)
+#define LIBLLDB_LOG_THREAD (1u << 2)
+#define LIBLLDB_LOG_DYNAMIC_LOADER (1u << 3)
+#define LIBLLDB_LOG_EVENTS (1u << 4)
+#define LIBLLDB_LOG_BREAKPOINTS (1u << 5)
+#define LIBLLDB_LOG_WATCHPOINTS (1u << 6)
+#define LIBLLDB_LOG_STEP (1u << 7)
+#define LIBLLDB_LOG_EXPRESSIONS (1u << 8)
+#define LIBLLDB_LOG_TEMPORARY (1u << 9)
+#define LIBLLDB_LOG_STATE (1u << 10)
+#define LIBLLDB_LOG_OBJECT (1u << 11)
+#define LIBLLDB_LOG_COMMUNICATION (1u << 12)
+#define LIBLLDB_LOG_CONNECTION (1u << 13)
+#define LIBLLDB_LOG_HOST (1u << 14)
+#define LIBLLDB_LOG_UNWIND (1u << 15)
+#define LIBLLDB_LOG_API (1u << 16)
+#define LIBLLDB_LOG_SCRIPT (1u << 17)
+#define LIBLLDB_LOG_COMMANDS (1U << 18)
+#define LIBLLDB_LOG_TYPES (1u << 19)
+#define LIBLLDB_LOG_SYMBOLS (1u << 20)
+#define LIBLLDB_LOG_MODULES (1u << 21)
+#define LIBLLDB_LOG_TARGET (1u << 22)
+#define LIBLLDB_LOG_MMAP (1u << 23)
+#define LIBLLDB_LOG_OS (1u << 24)
+#define LIBLLDB_LOG_PLATFORM (1u << 25)
+#define LIBLLDB_LOG_SYSTEM_RUNTIME (1u << 26)
+#define LIBLLDB_LOG_JIT_LOADER (1u << 27)
+#define LIBLLDB_LOG_LANGUAGE (1u << 28)
+#define LIBLLDB_LOG_DATAFORMATTERS (1u << 29)
+#define LIBLLDB_LOG_DEMANGLE (1u << 30)
+#define LIBLLDB_LOG_AST (1u << 31)
+#define LIBLLDB_LOG_ALL (UINT32_MAX)
+#define LIBLLDB_LOG_DEFAULT                                                    \
+  (LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_THREAD | LIBLLDB_LOG_DYNAMIC_LOADER |     \
+   LIBLLDB_LOG_BREAKPOINTS | LIBLLDB_LOG_WATCHPOINTS | LIBLLDB_LOG_STEP |      \
+   LIBLLDB_LOG_STATE | LIBLLDB_LOG_SYMBOLS | LIBLLDB_LOG_TARGET |              \
+   LIBLLDB_LOG_COMMANDS)
+
+namespace lldb_private {
+
+class Log;
+
+void LogIfAnyCategoriesSet(uint32_t mask, const char *format, ...);
+
+Log *GetLogIfAllCategoriesSet(uint32_t mask);
+
+Log *GetLogIfAnyCategoriesSet(uint32_t mask);
+
+void InitializeLldbChannel();
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_LOGGING_H
diff --git a/linux-x64/clang/include/lldb/Utility/NameMatches.h b/linux-x64/clang/include/lldb/Utility/NameMatches.h
new file mode 100644
index 0000000..38900df
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/NameMatches.h
@@ -0,0 +1,28 @@
+//===-- NameMatches.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLDB_UTILITY_NAMEMATCHES_H
+#define LLDB_UTILITY_NAMEMATCHES_H
+
+#include "llvm/ADT/StringRef.h"
+
+namespace lldb_private {
+
+enum class NameMatch {
+  Ignore,
+  Equals,
+  Contains,
+  StartsWith,
+  EndsWith,
+  RegularExpression
+};
+
+bool NameMatches(llvm::StringRef name, NameMatch match_type,
+                 llvm::StringRef match);
+}
+
+#endif
diff --git a/linux-x64/clang/include/lldb/Utility/Predicate.h b/linux-x64/clang/include/lldb/Utility/Predicate.h
new file mode 100644
index 0000000..f1539b5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Predicate.h
@@ -0,0 +1,231 @@
+//===-- Predicate.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Predicate_h_
+#define liblldb_Predicate_h_
+
+#include <stdint.h>
+#include <time.h>
+
+#include <condition_variable>
+#include <mutex>
+
+#include "lldb/Utility/Timeout.h"
+#include "lldb/lldb-defines.h"
+
+//#define DB_PTHREAD_LOG_EVENTS
+
+/// Enumerations for broadcasting.
+namespace lldb_private {
+
+enum PredicateBroadcastType {
+  eBroadcastNever,   ///< No broadcast will be sent when the value is modified.
+  eBroadcastAlways,  ///< Always send a broadcast when the value is modified.
+  eBroadcastOnChange ///< Only broadcast if the value changes when the value is
+                     /// modified.
+};
+
+/// \class Predicate Predicate.h "lldb/Utility/Predicate.h"
+/// A C++ wrapper class for providing threaded access to a value of
+/// type T.
+///
+/// A templatized class that provides multi-threaded access to a value
+/// of type T. Threads can efficiently wait for bits within T to be set
+/// or reset, or wait for T to be set to be equal/not equal to a
+/// specified values.
+template <class T> class Predicate {
+public:
+  /// Default constructor.
+  ///
+  /// Initializes the mutex, condition and value with their default
+  /// constructors.
+  Predicate() : m_value(), m_mutex(), m_condition() {}
+
+  /// Construct with initial T value \a initial_value.
+  ///
+  /// Initializes the mutex and condition with their default
+  /// constructors, and initializes the value with \a initial_value.
+  ///
+  /// \param[in] initial_value
+  ///     The initial value for our T object.
+  Predicate(T initial_value)
+      : m_value(initial_value), m_mutex(), m_condition() {}
+
+  /// Destructor.
+  ///
+  /// Destroy the condition, mutex, and T objects.
+  ~Predicate() = default;
+
+  /// Value get accessor.
+  ///
+  /// Copies the current \a m_value in a thread safe manor and returns
+  /// the copied value.
+  ///
+  /// \return
+  ///     A copy of the current value.
+  T GetValue() const {
+    std::lock_guard<std::mutex> guard(m_mutex);
+    T value = m_value;
+    return value;
+  }
+
+  /// Value set accessor.
+  ///
+  /// Set the contained \a m_value to \a new_value in a thread safe
+  /// way and broadcast if needed.
+  ///
+  /// \param[in] value
+  ///     The new value to set.
+  ///
+  /// \param[in] broadcast_type
+  ///     A value indicating when and if to broadcast. See the
+  ///     PredicateBroadcastType enumeration for details.
+  ///
+  /// \see Predicate::Broadcast()
+  void SetValue(T value, PredicateBroadcastType broadcast_type) {
+    std::lock_guard<std::mutex> guard(m_mutex);
+#ifdef DB_PTHREAD_LOG_EVENTS
+    printf("%s (value = 0x%8.8x, broadcast_type = %i)\n", __FUNCTION__, value,
+           broadcast_type);
+#endif
+    const T old_value = m_value;
+    m_value = value;
+
+    Broadcast(old_value, broadcast_type);
+  }
+
+  /// Wait for Cond(m_value) to be true.
+  ///
+  /// Waits in a thread safe way for Cond(m_value) to be true. If Cond(m_value)
+  /// is already true, this function will return without waiting.
+  ///
+  /// It is possible for the value to be changed between the time the value is
+  /// set and the time the waiting thread wakes up. If the value no longer
+  /// satisfies the condition when the waiting thread wakes up, it will go back
+  /// into a wait state. It may be necessary for the calling code to use
+  /// additional thread synchronization methods to detect transitory states.
+  ///
+  /// \param[in] Cond
+  ///     The condition we want \a m_value satisfy.
+  ///
+  /// \param[in] timeout
+  ///     How long to wait for the condition to hold.
+  ///
+  /// \return
+  ///     \li m_value if Cond(m_value) is true.
+  ///     \li None otherwise (timeout occurred).
+  template <typename C>
+  llvm::Optional<T> WaitFor(C Cond, const Timeout<std::micro> &timeout) {
+    std::unique_lock<std::mutex> lock(m_mutex);
+    auto RealCond = [&] { return Cond(m_value); };
+    if (!timeout) {
+      m_condition.wait(lock, RealCond);
+      return m_value;
+    }
+    if (m_condition.wait_for(lock, *timeout, RealCond))
+      return m_value;
+    return llvm::None;
+  }
+  /// Wait for \a m_value to be equal to \a value.
+  ///
+  /// Waits in a thread safe way for \a m_value to be equal to \a
+  /// value. If \a m_value is already equal to \a value, this
+  /// function will return without waiting.
+  ///
+  /// It is possible for the value to be changed between the time
+  /// the value is set and the time the waiting thread wakes up.
+  /// If the value no longer matches the requested value when the
+  /// waiting thread wakes up, it will go back into a wait state.  It
+  /// may be necessary for the calling code to use additional thread
+  /// synchronization methods to detect transitory states.
+  ///
+  /// \param[in] value
+  ///     The value we want \a m_value to be equal to.
+  ///
+  /// \param[in] timeout
+  ///     How long to wait for the condition to hold.
+  ///
+  /// \return
+  ///     \li \b true if the \a m_value is equal to \a value
+  ///     \li \b false otherwise (timeout occurred)
+  bool WaitForValueEqualTo(T value,
+                           const Timeout<std::micro> &timeout = llvm::None) {
+    return WaitFor([&value](T current) { return value == current; }, timeout) !=
+           llvm::None;
+  }
+
+  /// Wait for \a m_value to not be equal to \a value.
+  ///
+  /// Waits in a thread safe way for \a m_value to not be equal to \a
+  /// value. If \a m_value is already not equal to \a value, this
+  /// function will return without waiting.
+  ///
+  /// It is possible for the value to be changed between the time
+  /// the value is set and the time the waiting thread wakes up.
+  /// If the value is equal to the test value when the waiting thread
+  /// wakes up, it will go back into a wait state.  It may be
+  /// necessary for the calling code to use additional thread
+  /// synchronization methods to detect transitory states.
+  ///
+  /// \param[in] value
+  ///     The value we want \a m_value to not be equal to.
+  ///
+  /// \param[in] timeout
+  ///     How long to wait for the condition to hold.
+  ///
+  /// \return
+  ///     \li m_value if m_value != value
+  ///     \li None otherwise (timeout occurred).
+  llvm::Optional<T>
+  WaitForValueNotEqualTo(T value,
+                         const Timeout<std::micro> &timeout = llvm::None) {
+    return WaitFor([&value](T current) { return value != current; }, timeout);
+  }
+
+protected:
+  // pthread condition and mutex variable to control access and allow blocking
+  // between the main thread and the spotlight index thread.
+  T m_value; ///< The templatized value T that we are protecting access to
+  mutable std::mutex m_mutex; ///< The mutex to use when accessing the data
+  std::condition_variable m_condition; ///< The pthread condition variable to
+                                       /// use for signaling that data available
+                                       /// or changed.
+
+private:
+  /// Broadcast if needed.
+  ///
+  /// Check to see if we need to broadcast to our condition variable
+  /// depending on the \a old_value and on the \a broadcast_type.
+  ///
+  /// If \a broadcast_type is eBroadcastNever, no broadcast will be
+  /// sent.
+  ///
+  /// If \a broadcast_type is eBroadcastAlways, the condition variable
+  /// will always be broadcast.
+  ///
+  /// If \a broadcast_type is eBroadcastOnChange, the condition
+  /// variable be broadcast if the owned value changes.
+  void Broadcast(T old_value, PredicateBroadcastType broadcast_type) {
+    bool broadcast =
+        (broadcast_type == eBroadcastAlways) ||
+        ((broadcast_type == eBroadcastOnChange) && old_value != m_value);
+#ifdef DB_PTHREAD_LOG_EVENTS
+    printf("%s (old_value = 0x%8.8x, broadcast_type = %i) m_value = 0x%8.8x, "
+           "broadcast = %u\n",
+           __FUNCTION__, old_value, broadcast_type, m_value, broadcast);
+#endif
+    if (broadcast)
+      m_condition.notify_all();
+  }
+
+  DISALLOW_COPY_AND_ASSIGN(Predicate);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Predicate_h_
diff --git a/linux-x64/clang/include/lldb/Utility/ProcessInfo.h b/linux-x64/clang/include/lldb/Utility/ProcessInfo.h
new file mode 100644
index 0000000..a25c06c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/ProcessInfo.h
@@ -0,0 +1,245 @@
+//===-- ProcessInfo.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_PROCESSINFO_H
+#define LLDB_UTILITY_PROCESSINFO_H
+
+// LLDB headers
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/Args.h"
+#include "lldb/Utility/Environment.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/NameMatches.h"
+
+#include <vector>
+
+namespace lldb_private {
+
+class UserIDResolver;
+
+// ProcessInfo
+//
+// A base class for information for a process. This can be used to fill
+// out information for a process prior to launching it, or it can be used for
+// an instance of a process and can be filled in with the existing values for
+// that process.
+class ProcessInfo {
+public:
+  ProcessInfo();
+
+  ProcessInfo(const char *name, const ArchSpec &arch, lldb::pid_t pid);
+
+  void Clear();
+
+  const char *GetName() const;
+
+  size_t GetNameLength() const;
+
+  FileSpec &GetExecutableFile() { return m_executable; }
+
+  void SetExecutableFile(const FileSpec &exe_file,
+                         bool add_exe_file_as_first_arg);
+
+  const FileSpec &GetExecutableFile() const { return m_executable; }
+
+  uint32_t GetUserID() const { return m_uid; }
+
+  uint32_t GetGroupID() const { return m_gid; }
+
+  bool UserIDIsValid() const { return m_uid != UINT32_MAX; }
+
+  bool GroupIDIsValid() const { return m_gid != UINT32_MAX; }
+
+  void SetUserID(uint32_t uid) { m_uid = uid; }
+
+  void SetGroupID(uint32_t gid) { m_gid = gid; }
+
+  ArchSpec &GetArchitecture() { return m_arch; }
+
+  const ArchSpec &GetArchitecture() const { return m_arch; }
+
+  void SetArchitecture(const ArchSpec &arch) { m_arch = arch; }
+
+  lldb::pid_t GetProcessID() const { return m_pid; }
+
+  void SetProcessID(lldb::pid_t pid) { m_pid = pid; }
+
+  bool ProcessIDIsValid() const { return m_pid != LLDB_INVALID_PROCESS_ID; }
+
+  void Dump(Stream &s, Platform *platform) const;
+
+  Args &GetArguments() { return m_arguments; }
+
+  const Args &GetArguments() const { return m_arguments; }
+
+  llvm::StringRef GetArg0() const;
+
+  void SetArg0(llvm::StringRef arg);
+
+  void SetArguments(const Args &args, bool first_arg_is_executable);
+
+  void SetArguments(char const **argv, bool first_arg_is_executable);
+
+  Environment &GetEnvironment() { return m_environment; }
+  const Environment &GetEnvironment() const { return m_environment; }
+
+protected:
+  FileSpec m_executable;
+  std::string m_arg0; // argv[0] if supported. If empty, then use m_executable.
+  // Not all process plug-ins support specifying an argv[0] that differs from
+  // the resolved platform executable (which is in m_executable)
+  Args m_arguments; // All program arguments except argv[0]
+  Environment m_environment;
+  uint32_t m_uid;
+  uint32_t m_gid;
+  ArchSpec m_arch;
+  lldb::pid_t m_pid;
+};
+
+// ProcessInstanceInfo
+//
+// Describes an existing process and any discoverable information that pertains
+// to that process.
+class ProcessInstanceInfo : public ProcessInfo {
+public:
+  ProcessInstanceInfo()
+      : ProcessInfo(), m_euid(UINT32_MAX), m_egid(UINT32_MAX),
+        m_parent_pid(LLDB_INVALID_PROCESS_ID) {}
+
+  ProcessInstanceInfo(const char *name, const ArchSpec &arch, lldb::pid_t pid)
+      : ProcessInfo(name, arch, pid), m_euid(UINT32_MAX), m_egid(UINT32_MAX),
+        m_parent_pid(LLDB_INVALID_PROCESS_ID) {}
+
+  void Clear() {
+    ProcessInfo::Clear();
+    m_euid = UINT32_MAX;
+    m_egid = UINT32_MAX;
+    m_parent_pid = LLDB_INVALID_PROCESS_ID;
+  }
+
+  uint32_t GetEffectiveUserID() const { return m_euid; }
+
+  uint32_t GetEffectiveGroupID() const { return m_egid; }
+
+  bool EffectiveUserIDIsValid() const { return m_euid != UINT32_MAX; }
+
+  bool EffectiveGroupIDIsValid() const { return m_egid != UINT32_MAX; }
+
+  void SetEffectiveUserID(uint32_t uid) { m_euid = uid; }
+
+  void SetEffectiveGroupID(uint32_t gid) { m_egid = gid; }
+
+  lldb::pid_t GetParentProcessID() const { return m_parent_pid; }
+
+  void SetParentProcessID(lldb::pid_t pid) { m_parent_pid = pid; }
+
+  bool ParentProcessIDIsValid() const {
+    return m_parent_pid != LLDB_INVALID_PROCESS_ID;
+  }
+
+  void Dump(Stream &s, UserIDResolver &resolver) const;
+
+  static void DumpTableHeader(Stream &s, bool show_args, bool verbose);
+
+  void DumpAsTableRow(Stream &s, UserIDResolver &resolver, bool show_args,
+                      bool verbose) const;
+
+protected:
+  uint32_t m_euid;
+  uint32_t m_egid;
+  lldb::pid_t m_parent_pid;
+};
+
+class ProcessInstanceInfoList {
+public:
+  ProcessInstanceInfoList() = default;
+
+  void Clear() { m_infos.clear(); }
+
+  size_t GetSize() { return m_infos.size(); }
+
+  void Append(const ProcessInstanceInfo &info) { m_infos.push_back(info); }
+
+  const char *GetProcessNameAtIndex(size_t idx) {
+    return ((idx < m_infos.size()) ? m_infos[idx].GetName() : nullptr);
+  }
+
+  size_t GetProcessNameLengthAtIndex(size_t idx) {
+    return ((idx < m_infos.size()) ? m_infos[idx].GetNameLength() : 0);
+  }
+
+  lldb::pid_t GetProcessIDAtIndex(size_t idx) {
+    return ((idx < m_infos.size()) ? m_infos[idx].GetProcessID() : 0);
+  }
+
+  bool GetInfoAtIndex(size_t idx, ProcessInstanceInfo &info) {
+    if (idx < m_infos.size()) {
+      info = m_infos[idx];
+      return true;
+    }
+    return false;
+  }
+
+  // You must ensure "idx" is valid before calling this function
+  const ProcessInstanceInfo &GetProcessInfoAtIndex(size_t idx) const {
+    assert(idx < m_infos.size());
+    return m_infos[idx];
+  }
+
+protected:
+  std::vector<ProcessInstanceInfo> m_infos;
+};
+
+// ProcessInstanceInfoMatch
+//
+// A class to help matching one ProcessInstanceInfo to another.
+
+class ProcessInstanceInfoMatch {
+public:
+  ProcessInstanceInfoMatch()
+      : m_match_info(), m_name_match_type(NameMatch::Ignore),
+        m_match_all_users(false) {}
+
+  ProcessInstanceInfoMatch(const char *process_name,
+                           NameMatch process_name_match_type)
+      : m_match_info(), m_name_match_type(process_name_match_type),
+        m_match_all_users(false) {
+    m_match_info.GetExecutableFile().SetFile(process_name,
+                                             FileSpec::Style::native);
+  }
+
+  ProcessInstanceInfo &GetProcessInfo() { return m_match_info; }
+
+  const ProcessInstanceInfo &GetProcessInfo() const { return m_match_info; }
+
+  bool GetMatchAllUsers() const { return m_match_all_users; }
+
+  void SetMatchAllUsers(bool b) { m_match_all_users = b; }
+
+  NameMatch GetNameMatchType() const { return m_name_match_type; }
+
+  void SetNameMatchType(NameMatch name_match_type) {
+    m_name_match_type = name_match_type;
+  }
+
+  bool NameMatches(const char *process_name) const;
+
+  bool Matches(const ProcessInstanceInfo &proc_info) const;
+
+  bool MatchAllProcesses() const;
+  void Clear();
+
+protected:
+  ProcessInstanceInfo m_match_info;
+  NameMatch m_name_match_type;
+  bool m_match_all_users;
+};
+
+} // namespace lldb_private
+
+#endif // #ifndef LLDB_UTILITY_PROCESSINFO_H
diff --git a/linux-x64/clang/include/lldb/Utility/RangeMap.h b/linux-x64/clang/include/lldb/Utility/RangeMap.h
new file mode 100644
index 0000000..36401f5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/RangeMap.h
@@ -0,0 +1,938 @@
+//===-- RangeMap.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_RANGEMAP_H
+#define LLDB_UTILITY_RANGEMAP_H
+
+#include <algorithm>
+#include <vector>
+
+#include "llvm/ADT/SmallVector.h"
+
+#include "lldb/lldb-private.h"
+
+// Uncomment to make sure all Range objects are sorted when needed
+//#define ASSERT_RANGEMAP_ARE_SORTED
+
+namespace lldb_private {
+
+// Templatized classes for dealing with generic ranges and also collections of
+// ranges, or collections of ranges that have associated data.
+
+// A simple range class where you get to define the type of the range
+// base "B", and the type used for the range byte size "S".
+template <typename B, typename S> struct Range {
+  typedef B BaseType;
+  typedef S SizeType;
+
+  BaseType base;
+  SizeType size;
+
+  Range() : base(0), size(0) {}
+
+  Range(BaseType b, SizeType s) : base(b), size(s) {}
+
+  void Clear(BaseType b = 0) {
+    base = b;
+    size = 0;
+  }
+
+  // Set the start value for the range, and keep the same size
+  BaseType GetRangeBase() const { return base; }
+
+  void SetRangeBase(BaseType b) { base = b; }
+
+  void Slide(BaseType slide) { base += slide; }
+
+  bool Union(const Range &rhs) {
+    if (DoesAdjoinOrIntersect(rhs)) {
+      auto new_end = std::max<BaseType>(GetRangeEnd(), rhs.GetRangeEnd());
+      base = std::min<BaseType>(base, rhs.base);
+      size = new_end - base;
+      return true;
+    }
+    return false;
+  }
+
+  BaseType GetRangeEnd() const { return base + size; }
+
+  void SetRangeEnd(BaseType end) {
+    if (end > base)
+      size = end - base;
+    else
+      size = 0;
+  }
+
+  SizeType GetByteSize() const { return size; }
+
+  void SetByteSize(SizeType s) { size = s; }
+
+  bool IsValid() const { return size > 0; }
+
+  bool Contains(BaseType r) const {
+    return (GetRangeBase() <= r) && (r < GetRangeEnd());
+  }
+
+  bool ContainsEndInclusive(BaseType r) const {
+    return (GetRangeBase() <= r) && (r <= GetRangeEnd());
+  }
+
+  bool Contains(const Range &range) const {
+    return Contains(range.GetRangeBase()) &&
+           ContainsEndInclusive(range.GetRangeEnd());
+  }
+
+  // Returns true if the two ranges adjoing or intersect
+  bool DoesAdjoinOrIntersect(const Range &rhs) const {
+    const BaseType lhs_base = this->GetRangeBase();
+    const BaseType rhs_base = rhs.GetRangeBase();
+    const BaseType lhs_end = this->GetRangeEnd();
+    const BaseType rhs_end = rhs.GetRangeEnd();
+    bool result = (lhs_base <= rhs_end) && (lhs_end >= rhs_base);
+    return result;
+  }
+
+  // Returns true if the two ranges intersect
+  bool DoesIntersect(const Range &rhs) const {
+    const BaseType lhs_base = this->GetRangeBase();
+    const BaseType rhs_base = rhs.GetRangeBase();
+    const BaseType lhs_end = this->GetRangeEnd();
+    const BaseType rhs_end = rhs.GetRangeEnd();
+    bool result = (lhs_base < rhs_end) && (lhs_end > rhs_base);
+    return result;
+  }
+
+  bool operator<(const Range &rhs) const {
+    if (base == rhs.base)
+      return size < rhs.size;
+    return base < rhs.base;
+  }
+
+  bool operator==(const Range &rhs) const {
+    return base == rhs.base && size == rhs.size;
+  }
+
+  bool operator!=(const Range &rhs) const {
+    return base != rhs.base || size != rhs.size;
+  }
+};
+
+// A range array class where you get to define the type of the ranges
+// that the collection contains.
+
+template <typename B, typename S, unsigned N> class RangeArray {
+public:
+  typedef B BaseType;
+  typedef S SizeType;
+  typedef Range<B, S> Entry;
+  typedef llvm::SmallVector<Entry, N> Collection;
+
+  RangeArray() = default;
+
+  ~RangeArray() = default;
+
+  void Append(const Entry &entry) { m_entries.push_back(entry); }
+
+  void Append(B base, S size) { m_entries.emplace_back(base, size); }
+
+  bool RemoveEntrtAtIndex(uint32_t idx) {
+    if (idx < m_entries.size()) {
+      m_entries.erase(m_entries.begin() + idx);
+      return true;
+    }
+    return false;
+  }
+
+  void Sort() {
+    if (m_entries.size() > 1)
+      std::stable_sort(m_entries.begin(), m_entries.end());
+  }
+
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+  bool IsSorted() const {
+    typename Collection::const_iterator pos, end, prev;
+    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
+         prev = pos++) {
+      if (prev != end && *pos < *prev)
+        return false;
+    }
+    return true;
+  }
+#endif
+
+  void CombineConsecutiveRanges() {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    // Can't combine if ranges if we have zero or one range
+    if (m_entries.size() > 1) {
+      // The list should be sorted prior to calling this function
+      typename Collection::iterator pos;
+      typename Collection::iterator end;
+      typename Collection::iterator prev;
+      bool can_combine = false;
+      // First we determine if we can combine any of the Entry objects so we
+      // don't end up allocating and making a new collection for no reason
+      for (pos = m_entries.begin(), end = m_entries.end(), prev = end;
+           pos != end; prev = pos++) {
+        if (prev != end && prev->DoesAdjoinOrIntersect(*pos)) {
+          can_combine = true;
+          break;
+        }
+      }
+
+      // We we can combine at least one entry, then we make a new collection
+      // and populate it accordingly, and then swap it into place.
+      if (can_combine) {
+        Collection minimal_ranges;
+        for (pos = m_entries.begin(), end = m_entries.end(), prev = end;
+             pos != end; prev = pos++) {
+          if (prev != end && prev->DoesAdjoinOrIntersect(*pos))
+            minimal_ranges.back().SetRangeEnd(
+                std::max<BaseType>(prev->GetRangeEnd(), pos->GetRangeEnd()));
+          else
+            minimal_ranges.push_back(*pos);
+        }
+        // Use the swap technique in case our new vector is much smaller. We
+        // must swap when using the STL because std::vector objects never
+        // release or reduce the memory once it has been allocated/reserved.
+        m_entries.swap(minimal_ranges);
+      }
+    }
+  }
+
+  BaseType GetMinRangeBase(BaseType fail_value) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (m_entries.empty())
+      return fail_value;
+    // m_entries must be sorted, so if we aren't empty, we grab the first
+    // range's base
+    return m_entries.front().GetRangeBase();
+  }
+
+  BaseType GetMaxRangeEnd(BaseType fail_value) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (m_entries.empty())
+      return fail_value;
+    // m_entries must be sorted, so if we aren't empty, we grab the last
+    // range's end
+    return m_entries.back().GetRangeEnd();
+  }
+
+  void Slide(BaseType slide) {
+    typename Collection::iterator pos, end;
+    for (pos = m_entries.begin(), end = m_entries.end(); pos != end; ++pos)
+      pos->Slide(slide);
+  }
+
+  void Clear() { m_entries.clear(); }
+
+  bool IsEmpty() const { return m_entries.empty(); }
+
+  size_t GetSize() const { return m_entries.size(); }
+
+  const Entry *GetEntryAtIndex(size_t i) const {
+    return ((i < m_entries.size()) ? &m_entries[i] : nullptr);
+  }
+
+  // Clients must ensure that "i" is a valid index prior to calling this
+  // function
+  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
+
+  Entry *Back() { return (m_entries.empty() ? nullptr : &m_entries.back()); }
+
+  const Entry *Back() const {
+    return (m_entries.empty() ? nullptr : &m_entries.back());
+  }
+
+  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
+    return lhs.GetRangeBase() < rhs.GetRangeBase();
+  }
+
+  uint32_t FindEntryIndexThatContains(B addr) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      Entry entry(addr, 1);
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(begin, end, entry, BaseLessThan);
+
+      if (pos != end && pos->Contains(addr)) {
+        return std::distance(begin, pos);
+      } else if (pos != begin) {
+        --pos;
+        if (pos->Contains(addr))
+          return std::distance(begin, pos);
+      }
+    }
+    return UINT32_MAX;
+  }
+
+  const Entry *FindEntryThatContains(B addr) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      Entry entry(addr, 1);
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(begin, end, entry, BaseLessThan);
+
+      if (pos != end && pos->Contains(addr)) {
+        return &(*pos);
+      } else if (pos != begin) {
+        --pos;
+        if (pos->Contains(addr)) {
+          return &(*pos);
+        }
+      }
+    }
+    return nullptr;
+  }
+
+  const Entry *FindEntryThatContains(const Entry &range) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(begin, end, range, BaseLessThan);
+
+      if (pos != end && pos->Contains(range)) {
+        return &(*pos);
+      } else if (pos != begin) {
+        --pos;
+        if (pos->Contains(range)) {
+          return &(*pos);
+        }
+      }
+    }
+    return nullptr;
+  }
+
+protected:
+  Collection m_entries;
+};
+
+template <typename B, typename S> class RangeVector {
+public:
+  typedef B BaseType;
+  typedef S SizeType;
+  typedef Range<B, S> Entry;
+  typedef std::vector<Entry> Collection;
+
+  RangeVector() = default;
+
+  ~RangeVector() = default;
+
+  void Append(const Entry &entry) { m_entries.push_back(entry); }
+
+  void Append(B base, S size) { m_entries.emplace_back(base, size); }
+
+  // Insert an item into a sorted list and optionally combine it with any
+  // adjacent blocks if requested.
+  void Insert(const Entry &entry, bool combine) {
+    if (m_entries.empty()) {
+      m_entries.push_back(entry);
+      return;
+    }
+    auto begin = m_entries.begin();
+    auto end = m_entries.end();
+    auto pos = std::lower_bound(begin, end, entry);
+    if (combine) {
+      if (pos != end && pos->Union(entry)) {
+        CombinePrevAndNext(pos);
+        return;
+      }
+      if (pos != begin) {
+        auto prev = pos - 1;
+        if (prev->Union(entry)) {
+          CombinePrevAndNext(prev);
+          return;
+        }
+      }
+    }
+    m_entries.insert(pos, entry);
+  }
+
+  bool RemoveEntryAtIndex(uint32_t idx) {
+    if (idx < m_entries.size()) {
+      m_entries.erase(m_entries.begin() + idx);
+      return true;
+    }
+    return false;
+  }
+
+  void Sort() {
+    if (m_entries.size() > 1)
+      std::stable_sort(m_entries.begin(), m_entries.end());
+  }
+
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+  bool IsSorted() const {
+    typename Collection::const_iterator pos, end, prev;
+    // First we determine if we can combine any of the Entry objects so we
+    // don't end up allocating and making a new collection for no reason
+    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
+         prev = pos++) {
+      if (prev != end && *pos < *prev)
+        return false;
+    }
+    return true;
+  }
+#endif
+
+  void CombineConsecutiveRanges() {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    // Can't combine if ranges if we have zero or one range
+    if (m_entries.size() > 1) {
+      // The list should be sorted prior to calling this function
+      typename Collection::iterator pos;
+      typename Collection::iterator end;
+      typename Collection::iterator prev;
+      bool can_combine = false;
+      // First we determine if we can combine any of the Entry objects so we
+      // don't end up allocating and making a new collection for no reason
+      for (pos = m_entries.begin(), end = m_entries.end(), prev = end;
+           pos != end; prev = pos++) {
+        if (prev != end && prev->DoesAdjoinOrIntersect(*pos)) {
+          can_combine = true;
+          break;
+        }
+      }
+
+      // We we can combine at least one entry, then we make a new collection
+      // and populate it accordingly, and then swap it into place.
+      if (can_combine) {
+        Collection minimal_ranges;
+        for (pos = m_entries.begin(), end = m_entries.end(), prev = end;
+             pos != end; prev = pos++) {
+          if (prev != end && prev->DoesAdjoinOrIntersect(*pos))
+            minimal_ranges.back().SetRangeEnd(
+                std::max<BaseType>(prev->GetRangeEnd(), pos->GetRangeEnd()));
+          else
+            minimal_ranges.push_back(*pos);
+        }
+        // Use the swap technique in case our new vector is much smaller. We
+        // must swap when using the STL because std::vector objects never
+        // release or reduce the memory once it has been allocated/reserved.
+        m_entries.swap(minimal_ranges);
+      }
+    }
+  }
+
+  BaseType GetMinRangeBase(BaseType fail_value) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (m_entries.empty())
+      return fail_value;
+    // m_entries must be sorted, so if we aren't empty, we grab the first
+    // range's base
+    return m_entries.front().GetRangeBase();
+  }
+
+  BaseType GetMaxRangeEnd(BaseType fail_value) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (m_entries.empty())
+      return fail_value;
+    // m_entries must be sorted, so if we aren't empty, we grab the last
+    // range's end
+    return m_entries.back().GetRangeEnd();
+  }
+
+  void Slide(BaseType slide) {
+    typename Collection::iterator pos, end;
+    for (pos = m_entries.begin(), end = m_entries.end(); pos != end; ++pos)
+      pos->Slide(slide);
+  }
+
+  void Clear() { m_entries.clear(); }
+
+  void Reserve(typename Collection::size_type size) { m_entries.reserve(size); }
+
+  bool IsEmpty() const { return m_entries.empty(); }
+
+  size_t GetSize() const { return m_entries.size(); }
+
+  const Entry *GetEntryAtIndex(size_t i) const {
+    return ((i < m_entries.size()) ? &m_entries[i] : nullptr);
+  }
+
+  // Clients must ensure that "i" is a valid index prior to calling this
+  // function
+  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
+  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
+
+  Entry *Back() { return (m_entries.empty() ? nullptr : &m_entries.back()); }
+
+  const Entry *Back() const {
+    return (m_entries.empty() ? nullptr : &m_entries.back());
+  }
+
+  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
+    return lhs.GetRangeBase() < rhs.GetRangeBase();
+  }
+
+  uint32_t FindEntryIndexThatContains(B addr) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      Entry entry(addr, 1);
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(begin, end, entry, BaseLessThan);
+
+      if (pos != end && pos->Contains(addr)) {
+        return std::distance(begin, pos);
+      } else if (pos != begin) {
+        --pos;
+        if (pos->Contains(addr))
+          return std::distance(begin, pos);
+      }
+    }
+    return UINT32_MAX;
+  }
+
+  const Entry *FindEntryThatContains(B addr) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      Entry entry(addr, 1);
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(begin, end, entry, BaseLessThan);
+
+      if (pos != end && pos->Contains(addr)) {
+        return &(*pos);
+      } else if (pos != begin) {
+        --pos;
+        if (pos->Contains(addr)) {
+          return &(*pos);
+        }
+      }
+    }
+    return nullptr;
+  }
+
+  const Entry *FindEntryThatContains(const Entry &range) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(begin, end, range, BaseLessThan);
+
+      if (pos != end && pos->Contains(range)) {
+        return &(*pos);
+      } else if (pos != begin) {
+        --pos;
+        if (pos->Contains(range)) {
+          return &(*pos);
+        }
+      }
+    }
+    return nullptr;
+  }
+
+protected:
+  void CombinePrevAndNext(typename Collection::iterator pos) {
+    // Check if the prev or next entries in case they need to be unioned with
+    // the entry pointed to by "pos".
+    if (pos != m_entries.begin()) {
+      auto prev = pos - 1;
+      if (prev->Union(*pos))
+        m_entries.erase(pos);
+      pos = prev;
+    }
+
+    auto end = m_entries.end();
+    if (pos != end) {
+      auto next = pos + 1;
+      if (next != end) {
+        if (pos->Union(*next))
+          m_entries.erase(next);
+      }
+    }
+    return;
+  }
+
+  Collection m_entries;
+};
+
+// A simple range  with data class where you get to define the type of
+// the range base "B", the type used for the range byte size "S", and the type
+// for the associated data "T".
+template <typename B, typename S, typename T>
+struct RangeData : public Range<B, S> {
+  typedef T DataType;
+
+  DataType data;
+
+  RangeData() : Range<B, S>(), data() {}
+
+  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
+
+  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
+
+  bool operator<(const RangeData &rhs) const {
+    if (this->base == rhs.base) {
+      if (this->size == rhs.size)
+        return this->data < rhs.data;
+      else
+        return this->size < rhs.size;
+    }
+    return this->base < rhs.base;
+  }
+
+  bool operator==(const RangeData &rhs) const {
+    return this->GetRangeBase() == rhs.GetRangeBase() &&
+           this->GetByteSize() == rhs.GetByteSize() && this->data == rhs.data;
+  }
+
+  bool operator!=(const RangeData &rhs) const {
+    return this->GetRangeBase() != rhs.GetRangeBase() ||
+           this->GetByteSize() != rhs.GetByteSize() || this->data != rhs.data;
+  }
+};
+
+template <typename B, typename S, typename T, unsigned N = 0>
+class RangeDataVector {
+public:
+  typedef lldb_private::Range<B, S> Range;
+  typedef RangeData<B, S, T> Entry;
+  typedef llvm::SmallVector<Entry, N> Collection;
+
+  RangeDataVector() = default;
+
+  ~RangeDataVector() = default;
+
+  void Append(const Entry &entry) { m_entries.push_back(entry); }
+
+  void Sort() {
+    if (m_entries.size() > 1)
+      std::stable_sort(m_entries.begin(), m_entries.end());
+  }
+
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+  bool IsSorted() const {
+    typename Collection::const_iterator pos, end, prev;
+    // First we determine if we can combine any of the Entry objects so we
+    // don't end up allocating and making a new collection for no reason
+    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
+         prev = pos++) {
+      if (prev != end && *pos < *prev)
+        return false;
+    }
+    return true;
+  }
+#endif
+
+  void CombineConsecutiveEntriesWithEqualData() {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    typename Collection::iterator pos;
+    typename Collection::iterator end;
+    typename Collection::iterator prev;
+    bool can_combine = false;
+    // First we determine if we can combine any of the Entry objects so we
+    // don't end up allocating and making a new collection for no reason
+    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
+         prev = pos++) {
+      if (prev != end && prev->data == pos->data) {
+        can_combine = true;
+        break;
+      }
+    }
+
+    // We we can combine at least one entry, then we make a new collection and
+    // populate it accordingly, and then swap it into place.
+    if (can_combine) {
+      Collection minimal_ranges;
+      for (pos = m_entries.begin(), end = m_entries.end(), prev = end;
+           pos != end; prev = pos++) {
+        if (prev != end && prev->data == pos->data)
+          minimal_ranges.back().SetRangeEnd(pos->GetRangeEnd());
+        else
+          minimal_ranges.push_back(*pos);
+      }
+      // Use the swap technique in case our new vector is much smaller. We must
+      // swap when using the STL because std::vector objects never release or
+      // reduce the memory once it has been allocated/reserved.
+      m_entries.swap(minimal_ranges);
+    }
+  }
+
+  void Clear() { m_entries.clear(); }
+
+  bool IsEmpty() const { return m_entries.empty(); }
+
+  size_t GetSize() const { return m_entries.size(); }
+
+  const Entry *GetEntryAtIndex(size_t i) const {
+    return ((i < m_entries.size()) ? &m_entries[i] : nullptr);
+  }
+
+  Entry *GetMutableEntryAtIndex(size_t i) {
+    return ((i < m_entries.size()) ? &m_entries[i] : nullptr);
+  }
+
+  // Clients must ensure that "i" is a valid index prior to calling this
+  // function
+  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
+  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
+
+  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
+    return lhs.GetRangeBase() < rhs.GetRangeBase();
+  }
+
+  uint32_t FindEntryIndexThatContains(B addr) const {
+    const Entry *entry = FindEntryThatContains(addr);
+    if (entry)
+      return std::distance(m_entries.begin(), entry);
+    return UINT32_MAX;
+  }
+
+  uint32_t FindEntryIndexesThatContain(B addr,
+                                       std::vector<uint32_t> &indexes) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+
+    if (!m_entries.empty()) {
+      for (const auto &entry : m_entries) {
+        if (entry.Contains(addr))
+          indexes.push_back(entry.data);
+      }
+    }
+    return indexes.size();
+  }
+
+  Entry *FindEntryThatContains(B addr) {
+    return const_cast<Entry *>(
+        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
+            addr));
+  }
+
+  const Entry *FindEntryThatContains(B addr) const {
+    return FindEntryThatContains(Entry(addr, 1));
+  }
+
+  const Entry *FindEntryThatContains(const Entry &range) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(begin, end, range, BaseLessThan);
+
+      while (pos != begin && pos[-1].Contains(range))
+        --pos;
+
+      if (pos != end && pos->Contains(range))
+        return &(*pos);
+    }
+    return nullptr;
+  }
+
+  const Entry *FindEntryStartsAt(B addr) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      auto begin = m_entries.begin(), end = m_entries.end();
+      auto pos = std::lower_bound(begin, end, Entry(addr, 1), BaseLessThan);
+      if (pos != end && pos->base == addr)
+        return &(*pos);
+    }
+    return nullptr;
+  }
+
+  // This method will return the entry that contains the given address, or the
+  // entry following that address.  If you give it an address of 0 and the
+  // first entry starts at address 0x100, you will get the entry at 0x100.
+  //
+  // For most uses, FindEntryThatContains is the correct one to use, this is a
+  // less commonly needed behavior.  It was added for core file memory regions,
+  // where we want to present a gap in the memory regions as a distinct region,
+  // so we need to know the start address of the next memory section that
+  // exists.
+  const Entry *FindEntryThatContainsOrFollows(B addr) const {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      typename Collection::const_iterator begin = m_entries.begin();
+      typename Collection::const_iterator end = m_entries.end();
+      typename Collection::const_iterator pos =
+          std::lower_bound(m_entries.begin(), end, addr,
+                           [](const Entry &lhs, B rhs_base) -> bool {
+                             return lhs.GetRangeEnd() <= rhs_base;
+                           });
+
+      while (pos != begin && pos[-1].Contains(addr))
+        --pos;
+
+      if (pos != end)
+        return &(*pos);
+    }
+    return nullptr;
+  }
+
+  Entry *Back() { return (m_entries.empty() ? nullptr : &m_entries.back()); }
+
+  const Entry *Back() const {
+    return (m_entries.empty() ? nullptr : &m_entries.back());
+  }
+
+protected:
+  Collection m_entries;
+};
+
+// A simple range  with data class where you get to define the type of
+// the range base "B", the type used for the range byte size "S", and the type
+// for the associated data "T".
+template <typename B, typename T> struct AddressData {
+  typedef B BaseType;
+  typedef T DataType;
+
+  BaseType addr;
+  DataType data;
+
+  AddressData() : addr(), data() {}
+
+  AddressData(B a, DataType d) : addr(a), data(d) {}
+
+  bool operator<(const AddressData &rhs) const {
+    if (this->addr == rhs.addr)
+      return this->data < rhs.data;
+    return this->addr < rhs.addr;
+  }
+
+  bool operator==(const AddressData &rhs) const {
+    return this->addr == rhs.addr && this->data == rhs.data;
+  }
+
+  bool operator!=(const AddressData &rhs) const {
+    return this->addr != rhs.addr || this->data == rhs.data;
+  }
+};
+
+template <typename B, typename T, unsigned N> class AddressDataArray {
+public:
+  typedef AddressData<B, T> Entry;
+  typedef llvm::SmallVector<Entry, N> Collection;
+
+  AddressDataArray() = default;
+
+  ~AddressDataArray() = default;
+
+  void Append(const Entry &entry) { m_entries.push_back(entry); }
+
+  void Sort() {
+    if (m_entries.size() > 1)
+      std::stable_sort(m_entries.begin(), m_entries.end());
+  }
+
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+  bool IsSorted() const {
+    typename Collection::const_iterator pos, end, prev;
+    // First we determine if we can combine any of the Entry objects so we
+    // don't end up allocating and making a new collection for no reason
+    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
+         prev = pos++) {
+      if (prev != end && *pos < *prev)
+        return false;
+    }
+    return true;
+  }
+#endif
+
+  void Clear() { m_entries.clear(); }
+
+  bool IsEmpty() const { return m_entries.empty(); }
+
+  size_t GetSize() const { return m_entries.size(); }
+
+  const Entry *GetEntryAtIndex(size_t i) const {
+    return ((i < m_entries.size()) ? &m_entries[i] : nullptr);
+  }
+
+  // Clients must ensure that "i" is a valid index prior to calling this
+  // function
+  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
+
+  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
+    return lhs.addr < rhs.addr;
+  }
+
+  Entry *FindEntry(B addr, bool exact_match_only) {
+#ifdef ASSERT_RANGEMAP_ARE_SORTED
+    assert(IsSorted());
+#endif
+    if (!m_entries.empty()) {
+      Entry entry;
+      entry.addr = addr;
+      typename Collection::iterator begin = m_entries.begin();
+      typename Collection::iterator end = m_entries.end();
+      typename Collection::iterator pos =
+          std::lower_bound(begin, end, entry, BaseLessThan);
+
+      while (pos != begin && pos[-1].addr == addr)
+        --pos;
+
+      if (pos != end) {
+        if (pos->addr == addr || !exact_match_only)
+          return &(*pos);
+      }
+    }
+    return nullptr;
+  }
+
+  const Entry *FindNextEntry(const Entry *entry) {
+    if (entry >= &*m_entries.begin() && entry + 1 < &*m_entries.end())
+      return entry + 1;
+    return nullptr;
+  }
+
+  Entry *Back() { return (m_entries.empty() ? nullptr : &m_entries.back()); }
+
+  const Entry *Back() const {
+    return (m_entries.empty() ? nullptr : &m_entries.back());
+  }
+
+protected:
+  Collection m_entries;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_RANGEMAP_H
diff --git a/linux-x64/clang/include/lldb/Utility/RegisterValue.h b/linux-x64/clang/include/lldb/Utility/RegisterValue.h
new file mode 100644
index 0000000..eeb3ce5
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/RegisterValue.h
@@ -0,0 +1,271 @@
+//===-- RegisterValue.h -----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_REGISTERVALUE_H
+#define LLDB_UTILITY_REGISTERVALUE_H
+
+#include "lldb/Utility/Endian.h"
+#include "lldb/Utility/Scalar.h"
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-types.h"
+#include "llvm/ADT/APInt.h"
+#include "llvm/ADT/StringRef.h"
+#include <cstdint>
+#include <cstring>
+
+namespace lldb_private {
+class DataExtractor;
+class Stream;
+struct RegisterInfo;
+
+class RegisterValue {
+public:
+  enum { kMaxRegisterByteSize = 64u };
+
+  enum Type {
+    eTypeInvalid,
+    eTypeUInt8,
+    eTypeUInt16,
+    eTypeUInt32,
+    eTypeUInt64,
+    eTypeUInt128,
+    eTypeFloat,
+    eTypeDouble,
+    eTypeLongDouble,
+    eTypeBytes
+  };
+
+  RegisterValue()
+      : m_type(eTypeInvalid), m_scalar(static_cast<unsigned long>(0)) {}
+
+  explicit RegisterValue(uint8_t inst) : m_type(eTypeUInt8) { m_scalar = inst; }
+
+  explicit RegisterValue(uint16_t inst) : m_type(eTypeUInt16) {
+    m_scalar = inst;
+  }
+
+  explicit RegisterValue(uint32_t inst) : m_type(eTypeUInt32) {
+    m_scalar = inst;
+  }
+
+  explicit RegisterValue(uint64_t inst) : m_type(eTypeUInt64) {
+    m_scalar = inst;
+  }
+
+  explicit RegisterValue(llvm::APInt inst) : m_type(eTypeUInt128) {
+    m_scalar = llvm::APInt(inst);
+  }
+
+  explicit RegisterValue(float value) : m_type(eTypeFloat) { m_scalar = value; }
+
+  explicit RegisterValue(double value) : m_type(eTypeDouble) {
+    m_scalar = value;
+  }
+
+  explicit RegisterValue(long double value) : m_type(eTypeLongDouble) {
+    m_scalar = value;
+  }
+
+  explicit RegisterValue(uint8_t *bytes, size_t length,
+                         lldb::ByteOrder byte_order) {
+    SetBytes(bytes, length, byte_order);
+  }
+
+  RegisterValue::Type GetType() const { return m_type; }
+
+  bool CopyValue(const RegisterValue &rhs);
+
+  void SetType(RegisterValue::Type type) { m_type = type; }
+
+  RegisterValue::Type SetType(const RegisterInfo *reg_info);
+
+  bool GetData(DataExtractor &data) const;
+
+  // Copy the register value from this object into a buffer in "dst" and obey
+  // the "dst_byte_order" when copying the data. Also watch out in case
+  // "dst_len" is longer or shorter than the register value described by
+  // "reg_info" and only copy the least significant bytes of the register
+  // value, or pad the destination with zeroes if the register byte size is
+  // shorter that "dst_len" (all while correctly abiding the "dst_byte_order").
+  // Returns the number of bytes copied into "dst".
+  uint32_t GetAsMemoryData(const RegisterInfo *reg_info, void *dst,
+                           uint32_t dst_len, lldb::ByteOrder dst_byte_order,
+                           Status &error) const;
+
+  uint32_t SetFromMemoryData(const RegisterInfo *reg_info, const void *src,
+                             uint32_t src_len, lldb::ByteOrder src_byte_order,
+                             Status &error);
+
+  bool GetScalarValue(Scalar &scalar) const;
+
+  uint8_t GetAsUInt8(uint8_t fail_value = UINT8_MAX,
+                     bool *success_ptr = nullptr) const {
+    if (m_type == eTypeUInt8) {
+      if (success_ptr)
+        *success_ptr = true;
+      return m_scalar.UChar(fail_value);
+    }
+    if (success_ptr)
+      *success_ptr = true;
+    return fail_value;
+  }
+
+  uint16_t GetAsUInt16(uint16_t fail_value = UINT16_MAX,
+                       bool *success_ptr = nullptr) const;
+
+  uint32_t GetAsUInt32(uint32_t fail_value = UINT32_MAX,
+                       bool *success_ptr = nullptr) const;
+
+  uint64_t GetAsUInt64(uint64_t fail_value = UINT64_MAX,
+                       bool *success_ptr = nullptr) const;
+
+  llvm::APInt GetAsUInt128(const llvm::APInt &fail_value,
+                           bool *success_ptr = nullptr) const;
+
+  float GetAsFloat(float fail_value = 0.0f, bool *success_ptr = nullptr) const;
+
+  double GetAsDouble(double fail_value = 0.0,
+                     bool *success_ptr = nullptr) const;
+
+  long double GetAsLongDouble(long double fail_value = 0.0,
+                              bool *success_ptr = nullptr) const;
+
+  void SetValueToInvalid() { m_type = eTypeInvalid; }
+
+  bool ClearBit(uint32_t bit);
+
+  bool SetBit(uint32_t bit);
+
+  bool operator==(const RegisterValue &rhs) const;
+
+  bool operator!=(const RegisterValue &rhs) const;
+
+  void operator=(uint8_t uint) {
+    m_type = eTypeUInt8;
+    m_scalar = uint;
+  }
+
+  void operator=(uint16_t uint) {
+    m_type = eTypeUInt16;
+    m_scalar = uint;
+  }
+
+  void operator=(uint32_t uint) {
+    m_type = eTypeUInt32;
+    m_scalar = uint;
+  }
+
+  void operator=(uint64_t uint) {
+    m_type = eTypeUInt64;
+    m_scalar = uint;
+  }
+
+  void operator=(llvm::APInt uint) {
+    m_type = eTypeUInt128;
+    m_scalar = llvm::APInt(uint);
+  }
+
+  void operator=(float f) {
+    m_type = eTypeFloat;
+    m_scalar = f;
+  }
+
+  void operator=(double f) {
+    m_type = eTypeDouble;
+    m_scalar = f;
+  }
+
+  void operator=(long double f) {
+    m_type = eTypeLongDouble;
+    m_scalar = f;
+  }
+
+  void SetUInt8(uint8_t uint) {
+    m_type = eTypeUInt8;
+    m_scalar = uint;
+  }
+
+  void SetUInt16(uint16_t uint) {
+    m_type = eTypeUInt16;
+    m_scalar = uint;
+  }
+
+  void SetUInt32(uint32_t uint, Type t = eTypeUInt32) {
+    m_type = t;
+    m_scalar = uint;
+  }
+
+  void SetUInt64(uint64_t uint, Type t = eTypeUInt64) {
+    m_type = t;
+    m_scalar = uint;
+  }
+
+  void SetUInt128(llvm::APInt uint) {
+    m_type = eTypeUInt128;
+    m_scalar = uint;
+  }
+
+  bool SetUInt(uint64_t uint, uint32_t byte_size);
+
+  void SetFloat(float f) {
+    m_type = eTypeFloat;
+    m_scalar = f;
+  }
+
+  void SetDouble(double f) {
+    m_type = eTypeDouble;
+    m_scalar = f;
+  }
+
+  void SetLongDouble(long double f) {
+    m_type = eTypeLongDouble;
+    m_scalar = f;
+  }
+
+  void SetBytes(const void *bytes, size_t length, lldb::ByteOrder byte_order);
+
+  bool SignExtend(uint32_t sign_bitpos);
+
+  Status SetValueFromString(const RegisterInfo *reg_info,
+                            llvm::StringRef value_str);
+  Status SetValueFromString(const RegisterInfo *reg_info,
+                            const char *value_str) = delete;
+
+  Status SetValueFromData(const RegisterInfo *reg_info, DataExtractor &data,
+                          lldb::offset_t offset, bool partial_data_ok);
+
+  const void *GetBytes() const;
+
+  lldb::ByteOrder GetByteOrder() const {
+    if (m_type == eTypeBytes)
+      return buffer.byte_order;
+    return endian::InlHostByteOrder();
+  }
+
+  uint32_t GetByteSize() const;
+
+  static uint32_t GetMaxByteSize() { return kMaxRegisterByteSize; }
+
+  void Clear();
+
+protected:
+  RegisterValue::Type m_type;
+  Scalar m_scalar;
+
+  struct {
+    uint8_t bytes[kMaxRegisterByteSize]; // This must be big enough to hold any
+                                         // register for any supported target.
+    uint8_t length;
+    lldb::ByteOrder byte_order;
+  } buffer;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_REGISTERVALUE_H
diff --git a/linux-x64/clang/include/lldb/Utility/RegularExpression.h b/linux-x64/clang/include/lldb/Utility/RegularExpression.h
new file mode 100644
index 0000000..54f3dd8
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/RegularExpression.h
@@ -0,0 +1,199 @@
+//===-- RegularExpression.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_RegularExpression_h_
+#define liblldb_RegularExpression_h_
+
+#ifdef _WIN32
+#include "../lib/Support/regex_impl.h"
+
+typedef llvm_regmatch_t regmatch_t;
+typedef llvm_regex_t regex_t;
+
+inline int regcomp(llvm_regex_t *a, const char *b, int c) {
+  return llvm_regcomp(a, b, c);
+}
+
+inline size_t regerror(int a, const llvm_regex_t *b, char *c, size_t d) {
+  return llvm_regerror(a, b, c, d);
+}
+
+inline int regexec(const llvm_regex_t *a, const char *b, size_t c,
+                   llvm_regmatch_t d[], int e) {
+  return llvm_regexec(a, b, c, d, e);
+}
+
+inline void regfree(llvm_regex_t *a) { llvm_regfree(a); }
+#else
+#ifdef __ANDROID__
+#include <regex>
+#endif
+#include <regex.h>
+#endif
+
+#include <string>
+#include <vector>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace llvm {
+class StringRef;
+} // namespace llvm
+
+namespace lldb_private {
+
+/// \class RegularExpression RegularExpression.h
+/// "lldb/Utility/RegularExpression.h"
+/// A C++ wrapper class for regex.
+///
+/// This regular expression class wraps the posix regex functions \c
+/// regcomp(), \c regerror(), \c regexec(), and \c regfree() from the header
+/// file in \c /usr/include/regex\.h.
+class RegularExpression {
+public:
+  class Match {
+  public:
+    Match(uint32_t max_matches) : m_matches() {
+      if (max_matches > 0)
+        m_matches.resize(max_matches + 1);
+    }
+
+    void Clear() {
+      const size_t num_matches = m_matches.size();
+      regmatch_t invalid_match = {-1, -1};
+      for (size_t i = 0; i < num_matches; ++i)
+        m_matches[i] = invalid_match;
+    }
+
+    size_t GetSize() const { return m_matches.size(); }
+
+    regmatch_t *GetData() {
+      return (m_matches.empty() ? nullptr : m_matches.data());
+    }
+
+    bool GetMatchAtIndex(llvm::StringRef s, uint32_t idx,
+                         std::string &match_str) const;
+
+    bool GetMatchAtIndex(llvm::StringRef s, uint32_t idx,
+                         llvm::StringRef &match_str) const;
+
+    bool GetMatchSpanningIndices(llvm::StringRef s, uint32_t idx1,
+                                 uint32_t idx2,
+                                 llvm::StringRef &match_str) const;
+
+  protected:
+    std::vector<regmatch_t>
+        m_matches; ///< Where parenthesized subexpressions results are stored
+  };
+
+  /// Default constructor.
+  ///
+  /// The default constructor that initializes the object state such that it
+  /// contains no compiled regular expression.
+  RegularExpression();
+
+  explicit RegularExpression(llvm::StringRef string);
+
+  /// Destructor.
+  ///
+  /// Any previously compiled regular expression contained in this object will
+  /// be freed.
+  ~RegularExpression();
+
+  RegularExpression(const RegularExpression &rhs);
+
+  const RegularExpression &operator=(const RegularExpression &rhs);
+
+  /// Compile a regular expression.
+  ///
+  /// Compile a regular expression using the supplied regular expression text.
+  /// The compiled regular expression lives in this object so that it can be
+  /// readily used for regular expression matches. Execute() can be called
+  /// after the regular expression is compiled. Any previously compiled
+  /// regular expression contained in this object will be freed.
+  ///
+  /// \param[in] re
+  ///     A NULL terminated C string that represents the regular
+  ///     expression to compile.
+  ///
+  /// \return
+  ///     \b true if the regular expression compiles successfully,
+  ///     \b false otherwise.
+  bool Compile(llvm::StringRef string);
+  bool Compile(const char *) = delete;
+
+  /// Executes a regular expression.
+  ///
+  /// Execute a regular expression match using the compiled regular expression
+  /// that is already in this object against the match string \a s. If any
+  /// parens are used for regular expression matches \a match_count should
+  /// indicate the number of regmatch_t values that are present in \a
+  /// match_ptr.
+  ///
+  /// \param[in] string
+  ///     The string to match against the compile regular expression.
+  ///
+  /// \param[in] match
+  ///     A pointer to a RegularExpression::Match structure that was
+  ///     properly initialized with the desired number of maximum
+  ///     matches, or nullptr if no parenthesized matching is needed.
+  ///
+  /// \return
+  ///     \b true if \a string matches the compiled regular
+  ///     expression, \b false otherwise.
+  bool Execute(llvm::StringRef string, Match *match = nullptr) const;
+  bool Execute(const char *, Match * = nullptr) = delete;
+
+  size_t GetErrorAsCString(char *err_str, size_t err_str_max_len) const;
+
+  /// Free the compiled regular expression.
+  ///
+  /// If this object contains a valid compiled regular expression, this
+  /// function will free any resources it was consuming.
+  void Free();
+
+  /// Access the regular expression text.
+  ///
+  /// Returns the text that was used to compile the current regular
+  /// expression.
+  ///
+  /// \return
+  ///     The NULL terminated C string that was used to compile the
+  ///     current regular expression
+  llvm::StringRef GetText() const;
+
+  /// Test if valid.
+  ///
+  /// Test if this object contains a valid regular expression.
+  ///
+  /// \return
+  ///     \b true if the regular expression compiled and is ready
+  ///     for execution, \b false otherwise.
+  bool IsValid() const;
+
+  void Clear() {
+    Free();
+    m_re.clear();
+    m_comp_err = 1;
+  }
+
+  int GetErrorCode() const { return m_comp_err; }
+
+  bool operator<(const RegularExpression &rhs) const;
+
+private:
+  // Member variables
+  std::string m_re; ///< A copy of the original regular expression text
+  int m_comp_err;   ///< Status code for the regular expression compilation
+  regex_t m_preg;   ///< The compiled regular expression
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_RegularExpression_h_
diff --git a/linux-x64/clang/include/lldb/Utility/Reproducer.h b/linux-x64/clang/include/lldb/Utility/Reproducer.h
new file mode 100644
index 0000000..670041d
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Reproducer.h
@@ -0,0 +1,303 @@
+//===-- Reproducer.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_REPRODUCER_H
+#define LLDB_UTILITY_REPRODUCER_H
+
+#include "lldb/Utility/FileCollector.h"
+#include "lldb/Utility/FileSpec.h"
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/YAMLTraits.h"
+
+#include <mutex>
+#include <string>
+#include <vector>
+
+namespace lldb_private {
+namespace repro {
+
+class Reproducer;
+
+enum class ReproducerMode {
+  Capture,
+  Replay,
+  Off,
+};
+
+/// The provider defines an interface for generating files needed for
+/// reproducing.
+///
+/// Different components will implement different providers.
+class ProviderBase {
+public:
+  virtual ~ProviderBase() = default;
+
+  const FileSpec &GetRoot() const { return m_root; }
+
+  /// The Keep method is called when it is decided that we need to keep the
+  /// data in order to provide a reproducer.
+  virtual void Keep(){};
+
+  /// The Discard method is called when it is decided that we do not need to
+  /// keep any information and will not generate a reproducer.
+  virtual void Discard(){};
+
+  // Returns the class ID for this type.
+  static const void *ClassID() { return &ID; }
+
+  // Returns the class ID for the dynamic type of this Provider instance.
+  virtual const void *DynamicClassID() const = 0;
+
+  virtual llvm::StringRef GetName() const = 0;
+  virtual llvm::StringRef GetFile() const = 0;
+
+protected:
+  ProviderBase(const FileSpec &root) : m_root(root) {}
+
+private:
+  /// Every provider knows where to dump its potential files.
+  FileSpec m_root;
+
+  virtual void anchor();
+  static char ID;
+};
+
+template <typename ThisProviderT> class Provider : public ProviderBase {
+public:
+  static const void *ClassID() { return &ThisProviderT::ID; }
+
+  const void *DynamicClassID() const override { return &ThisProviderT::ID; }
+
+  llvm::StringRef GetName() const override { return ThisProviderT::Info::name; }
+  llvm::StringRef GetFile() const override { return ThisProviderT::Info::file; }
+
+protected:
+  using ProviderBase::ProviderBase; // Inherit constructor.
+};
+
+class FileProvider : public Provider<FileProvider> {
+public:
+  struct Info {
+    static const char *name;
+    static const char *file;
+  };
+
+  FileProvider(const FileSpec &directory)
+      : Provider(directory),
+        m_collector(directory.CopyByAppendingPathComponent("root"), directory) {
+  }
+
+  FileCollector &GetFileCollector() { return m_collector; }
+
+  void Keep() override {
+    auto mapping = GetRoot().CopyByAppendingPathComponent(Info::file);
+    // Temporary files that are removed during execution can cause copy errors.
+    if (auto ec = m_collector.CopyFiles(/*stop_on_error=*/false))
+      return;
+    m_collector.WriteMapping(mapping);
+  }
+
+  static char ID;
+
+private:
+  FileCollector m_collector;
+};
+
+/// Provider for the LLDB version number.
+///
+/// When the reproducer is kept, it writes the lldb version to a file named
+/// version.txt in the reproducer root.
+class VersionProvider : public Provider<VersionProvider> {
+public:
+  VersionProvider(const FileSpec &directory) : Provider(directory) {}
+  struct Info {
+    static const char *name;
+    static const char *file;
+  };
+  void SetVersion(std::string version) {
+    assert(m_version.empty());
+    m_version = std::move(version);
+  }
+  void Keep() override;
+  std::string m_version;
+  static char ID;
+};
+
+class DataRecorder {
+public:
+  DataRecorder(const FileSpec &filename, std::error_code &ec)
+      : m_filename(filename.GetFilename().GetStringRef()),
+        m_os(filename.GetPath(), ec, llvm::sys::fs::F_Text), m_record(true) {}
+
+  static llvm::Expected<std::unique_ptr<DataRecorder>>
+  Create(const FileSpec &filename);
+
+  template <typename T> void Record(const T &t, bool newline = false) {
+    if (!m_record)
+      return;
+    m_os << t;
+    if (newline)
+      m_os << '\n';
+    m_os.flush();
+  }
+
+  const FileSpec &GetFilename() { return m_filename; }
+
+  void Stop() {
+    assert(m_record);
+    m_record = false;
+  }
+
+private:
+  FileSpec m_filename;
+  llvm::raw_fd_ostream m_os;
+  bool m_record;
+};
+
+class CommandProvider : public Provider<CommandProvider> {
+public:
+  struct Info {
+    static const char *name;
+    static const char *file;
+  };
+
+  CommandProvider(const FileSpec &directory) : Provider(directory) {}
+
+  DataRecorder *GetNewDataRecorder();
+
+  void Keep() override;
+  void Discard() override;
+
+  static char ID;
+
+private:
+  std::vector<std::unique_ptr<DataRecorder>> m_data_recorders;
+};
+
+/// The generator is responsible for the logic needed to generate a
+/// reproducer. For doing so it relies on providers, who serialize data that
+/// is necessary for reproducing  a failure.
+class Generator final {
+public:
+  Generator(const FileSpec &root);
+  ~Generator();
+
+  /// Method to indicate we want to keep the reproducer. If reproducer
+  /// generation is disabled, this does nothing.
+  void Keep();
+
+  /// Method to indicate we do not want to keep the reproducer. This is
+  /// unaffected by whether or not generation reproduction is enabled, as we
+  /// might need to clean up files already written to disk.
+  void Discard();
+
+  /// Create and register a new provider.
+  template <typename T> T *Create() {
+    std::unique_ptr<ProviderBase> provider = llvm::make_unique<T>(m_root);
+    return static_cast<T *>(Register(std::move(provider)));
+  }
+
+  /// Get an existing provider.
+  template <typename T> T *Get() {
+    auto it = m_providers.find(T::ClassID());
+    if (it == m_providers.end())
+      return nullptr;
+    return static_cast<T *>(it->second.get());
+  }
+
+  /// Get a provider if it exists, otherwise create it.
+  template <typename T> T &GetOrCreate() {
+    auto *provider = Get<T>();
+    if (provider)
+      return *provider;
+    return *Create<T>();
+  }
+
+  const FileSpec &GetRoot() const;
+
+private:
+  friend Reproducer;
+
+  ProviderBase *Register(std::unique_ptr<ProviderBase> provider);
+
+  /// Builds and index with provider info.
+  void AddProvidersToIndex();
+
+  /// Map of provider IDs to provider instances.
+  llvm::DenseMap<const void *, std::unique_ptr<ProviderBase>> m_providers;
+  std::mutex m_providers_mutex;
+
+  /// The reproducer root directory.
+  FileSpec m_root;
+
+  /// Flag to ensure that we never call both keep and discard.
+  bool m_done;
+};
+
+class Loader final {
+public:
+  Loader(const FileSpec &root);
+
+  template <typename T> FileSpec GetFile() {
+    if (!HasFile(T::file))
+      return {};
+
+    return GetRoot().CopyByAppendingPathComponent(T::file);
+  }
+
+  llvm::Error LoadIndex();
+
+  const FileSpec &GetRoot() const { return m_root; }
+
+private:
+  bool HasFile(llvm::StringRef file);
+
+  FileSpec m_root;
+  std::vector<std::string> m_files;
+  bool m_loaded;
+};
+
+/// The reproducer enables clients to obtain access to the Generator and
+/// Loader.
+class Reproducer {
+public:
+  static Reproducer &Instance();
+  static llvm::Error Initialize(ReproducerMode mode,
+                                llvm::Optional<FileSpec> root);
+  static bool Initialized();
+  static void Terminate();
+
+  Reproducer() = default;
+
+  Generator *GetGenerator();
+  Loader *GetLoader();
+
+  const Generator *GetGenerator() const;
+  const Loader *GetLoader() const;
+
+  FileSpec GetReproducerPath() const;
+
+protected:
+  llvm::Error SetCapture(llvm::Optional<FileSpec> root);
+  llvm::Error SetReplay(llvm::Optional<FileSpec> root);
+
+private:
+  static llvm::Optional<Reproducer> &InstanceImpl();
+
+  llvm::Optional<Generator> m_generator;
+  llvm::Optional<Loader> m_loader;
+
+  mutable std::mutex m_mutex;
+};
+
+} // namespace repro
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_REPRODUCER_H
diff --git a/linux-x64/clang/include/lldb/Utility/ReproducerInstrumentation.h b/linux-x64/clang/include/lldb/Utility/ReproducerInstrumentation.h
new file mode 100644
index 0000000..f90ce4b
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/ReproducerInstrumentation.h
@@ -0,0 +1,717 @@
+//===-- ReproducerInstrumentation.h -----------------------------*- C++ -*-===//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_REPRODUCER_INSTRUMENTATION_H
+#define LLDB_UTILITY_REPRODUCER_INSTRUMENTATION_H
+
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/Log.h"
+#include "lldb/Utility/Logging.h"
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/ErrorHandling.h"
+
+#include <iostream>
+#include <map>
+#include <type_traits>
+
+template <typename T,
+          typename std::enable_if<std::is_fundamental<T>::value, int>::type = 0>
+inline void stringify_append(llvm::raw_string_ostream &ss, const T &t) {
+  ss << t;
+}
+
+template <typename T, typename std::enable_if<!std::is_fundamental<T>::value,
+                                              int>::type = 0>
+inline void stringify_append(llvm::raw_string_ostream &ss, const T &t) {
+  ss << &t;
+}
+
+template <typename T>
+inline void stringify_append(llvm::raw_string_ostream &ss, const T *t) {
+  ss << reinterpret_cast<const void *>(t);
+}
+
+template <>
+inline void stringify_append<char>(llvm::raw_string_ostream &ss,
+                                   const char *t) {
+  ss << t;
+}
+
+template <typename Head>
+inline void stringify_helper(llvm::raw_string_ostream &ss, const Head &head) {
+  stringify_append(ss, head);
+}
+
+template <typename Head, typename... Tail>
+inline void stringify_helper(llvm::raw_string_ostream &ss, const Head &head,
+                             const Tail &... tail) {
+  stringify_append(ss, head);
+  ss << ", ";
+  stringify_helper(ss, tail...);
+}
+
+template <typename... Ts> inline std::string stringify_args(const Ts &... ts) {
+  std::string buffer;
+  llvm::raw_string_ostream ss(buffer);
+  stringify_helper(ss, ts...);
+  return ss.str();
+}
+
+// Define LLDB_REPRO_INSTR_TRACE to trace to stderr instead of LLDB's log
+// infrastructure. This is useful when you need to see traces before the logger
+// is initialized or enabled.
+// #define LLDB_REPRO_INSTR_TRACE
+
+#define LLDB_REGISTER_CONSTRUCTOR(Class, Signature)                            \
+  R.Register<Class * Signature>(&construct<Class Signature>::doit, "", #Class, \
+                                #Class, #Signature)
+#define LLDB_REGISTER_METHOD(Result, Class, Method, Signature)                 \
+  R.Register(                                                                  \
+      &invoke<Result(Class::*) Signature>::method<(&Class::Method)>::doit,     \
+      #Result, #Class, #Method, #Signature)
+#define LLDB_REGISTER_METHOD_CONST(Result, Class, Method, Signature)           \
+  R.Register(&invoke<Result(Class::*) Signature const>::method_const<(         \
+                 &Class::Method)>::doit,                                       \
+             #Result, #Class, #Method, #Signature)
+#define LLDB_REGISTER_STATIC_METHOD(Result, Class, Method, Signature)          \
+  R.Register<Result Signature>(                                                \
+      static_cast<Result(*) Signature>(&Class::Method), #Result, #Class,       \
+      #Method, #Signature)
+
+#define LLDB_RECORD_CONSTRUCTOR(Class, Signature, ...)                         \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              \
+                                            stringify_args(__VA_ARGS__));      \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(data.GetSerializer(), data.GetRegistry(),               \
+                       &lldb_private::repro::construct<Class Signature>::doit, \
+                       __VA_ARGS__);                                           \
+    sb_recorder.RecordResult(this);                                            \
+  }
+
+#define LLDB_RECORD_CONSTRUCTOR_NO_ARGS(Class)                                 \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION);             \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(data.GetSerializer(), data.GetRegistry(),               \
+                       &lldb_private::repro::construct<Class()>::doit);        \
+    sb_recorder.RecordResult(this);                                            \
+  }
+
+#define LLDB_RECORD_METHOD(Result, Class, Method, Signature, ...)              \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              \
+                                            stringify_args(__VA_ARGS__));      \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(                                                        \
+        data.GetSerializer(), data.GetRegistry(),                              \
+        &lldb_private::repro::invoke<Result(Class::*) Signature>::method<(     \
+            &Class::Method)>::doit,                                            \
+        this, __VA_ARGS__);                                                    \
+  }
+
+#define LLDB_RECORD_METHOD_CONST(Result, Class, Method, Signature, ...)        \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              \
+                                            stringify_args(__VA_ARGS__));      \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(                                                        \
+        data.GetSerializer(), data.GetRegistry(),                              \
+        &lldb_private::repro::invoke<Result(                                   \
+            Class::*) Signature const>::method_const<(&Class::Method)>::doit,  \
+        this, __VA_ARGS__);                                                    \
+  }
+
+#define LLDB_RECORD_METHOD_NO_ARGS(Result, Class, Method)                      \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION);             \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(data.GetSerializer(), data.GetRegistry(),               \
+                       &lldb_private::repro::invoke<Result (                   \
+                           Class::*)()>::method<(&Class::Method)>::doit,       \
+                       this);                                                  \
+  }
+
+#define LLDB_RECORD_METHOD_CONST_NO_ARGS(Result, Class, Method)                \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION);             \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(                                                        \
+        data.GetSerializer(), data.GetRegistry(),                              \
+        &lldb_private::repro::invoke<Result (                                  \
+            Class::*)() const>::method_const<(&Class::Method)>::doit,          \
+        this);                                                                 \
+  }
+
+#define LLDB_RECORD_STATIC_METHOD(Result, Class, Method, Signature, ...)       \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              \
+                                            stringify_args(__VA_ARGS__));      \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(data.GetSerializer(), data.GetRegistry(),               \
+                       static_cast<Result(*) Signature>(&Class::Method),       \
+                       __VA_ARGS__);                                           \
+  }
+
+#define LLDB_RECORD_STATIC_METHOD_NO_ARGS(Result, Class, Method)               \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION);             \
+  if (lldb_private::repro::InstrumentationData data =                          \
+          LLDB_GET_INSTRUMENTATION_DATA()) {                                   \
+    sb_recorder.Record(data.GetSerializer(), data.GetRegistry(),               \
+                       static_cast<Result (*)()>(&Class::Method));             \
+  }
+
+#define LLDB_RECORD_RESULT(Result) sb_recorder.RecordResult(Result);
+
+/// The LLDB_RECORD_DUMMY macro is special because it doesn't actually record
+/// anything. It's used to track API boundaries when we cannot record for
+/// technical reasons.
+#define LLDB_RECORD_DUMMY(Result, Class, Method, Signature, ...)               \
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              \
+                                            stringify_args(__VA_ARGS__));
+
+namespace lldb_private {
+namespace repro {
+
+/// Mapping between serialized indices and their corresponding objects.
+///
+/// This class is used during replay to map indices back to in-memory objects.
+///
+/// When objects are constructed, they are added to this mapping using
+/// AddObjectForIndex.
+///
+/// When an object is passed to a function, its index is deserialized and
+/// AddObjectForIndex returns the corresponding object. If there is no object
+/// for the given index, a nullptr is returend. The latter is valid when custom
+/// replay code is in place and the actual object is ignored.
+class IndexToObject {
+public:
+  /// Returns an object as a pointer for the given index or nullptr if not
+  /// present in the map.
+  template <typename T> T *GetObjectForIndex(unsigned idx) {
+    assert(idx != 0 && "Cannot get object for sentinel");
+    void *object = GetObjectForIndexImpl(idx);
+    return static_cast<T *>(object);
+  }
+
+  /// Adds a pointer to an object to the mapping for the given index.
+  template <typename T> void AddObjectForIndex(unsigned idx, T *object) {
+    AddObjectForIndexImpl(
+        idx, static_cast<void *>(
+                 const_cast<typename std::remove_const<T>::type *>(object)));
+  }
+
+  /// Adds a reference to an object to the mapping for the given index.
+  template <typename T> void AddObjectForIndex(unsigned idx, T &object) {
+    AddObjectForIndexImpl(
+        idx, static_cast<void *>(
+                 const_cast<typename std::remove_const<T>::type *>(&object)));
+  }
+
+private:
+  /// Helper method that does the actual lookup. The void* result is later cast
+  /// by the caller.
+  void *GetObjectForIndexImpl(unsigned idx);
+
+  /// Helper method that does the actual insertion.
+  void AddObjectForIndexImpl(unsigned idx, void *object);
+
+  /// Keeps a mapping between indices and their corresponding object.
+  llvm::DenseMap<unsigned, void *> m_mapping;
+};
+
+/// We need to differentiate between pointers to fundamental and
+/// non-fundamental types. See the corresponding Deserializer::Read method
+/// for the reason why.
+struct PointerTag {};
+struct ReferenceTag {};
+struct ValueTag {};
+struct FundamentalPointerTag {};
+struct FundamentalReferenceTag {};
+
+/// Return the deserialization tag for the given type T.
+template <class T> struct serializer_tag { typedef ValueTag type; };
+template <class T> struct serializer_tag<T *> {
+  typedef
+      typename std::conditional<std::is_fundamental<T>::value,
+                                FundamentalPointerTag, PointerTag>::type type;
+};
+template <class T> struct serializer_tag<T &> {
+  typedef typename std::conditional<std::is_fundamental<T>::value,
+                                    FundamentalReferenceTag, ReferenceTag>::type
+      type;
+};
+
+/// Deserializes data from a buffer. It is used to deserialize function indices
+/// to replay, their arguments and return values.
+///
+/// Fundamental types and strings are read by value. Objects are read by their
+/// index, which get translated by the IndexToObject mapping maintained in
+/// this class.
+///
+/// Additional bookkeeping with regards to the IndexToObject is required to
+/// deserialize objects. When a constructor is run or an object is returned by
+/// value, we need to capture the object and add it to the index together with
+/// its index. This is the job of HandleReplayResult(Void).
+class Deserializer {
+public:
+  Deserializer(llvm::StringRef buffer) : m_buffer(buffer) {}
+
+  /// Returns true when the buffer has unread data.
+  bool HasData(unsigned size) { return size <= m_buffer.size(); }
+
+  /// Deserialize and interpret value as T.
+  template <typename T> T Deserialize() {
+#ifdef LLDB_REPRO_INSTR_TRACE
+    llvm::errs() << "Deserializing with " << LLVM_PRETTY_FUNCTION << "\n";
+#endif
+    return Read<T>(typename serializer_tag<T>::type());
+  }
+
+  /// Store the returned value in the index-to-object mapping.
+  template <typename T> void HandleReplayResult(const T &t) {
+    unsigned result = Deserialize<unsigned>();
+    if (std::is_fundamental<T>::value)
+      return;
+    // We need to make a copy as the original object might go out of scope.
+    m_index_to_object.AddObjectForIndex(result, new T(t));
+  }
+
+  /// Store the returned value in the index-to-object mapping.
+  template <typename T> void HandleReplayResult(T *t) {
+    unsigned result = Deserialize<unsigned>();
+    if (std::is_fundamental<T>::value)
+      return;
+    m_index_to_object.AddObjectForIndex(result, t);
+  }
+
+  /// All returned types are recorded, even when the function returns a void.
+  /// The latter requires special handling.
+  void HandleReplayResultVoid() {
+    unsigned result = Deserialize<unsigned>();
+    assert(result == 0);
+    (void)result;
+  }
+
+private:
+  template <typename T> T Read(ValueTag) {
+    assert(HasData(sizeof(T)));
+    T t;
+    std::memcpy(reinterpret_cast<char *>(&t), m_buffer.data(), sizeof(T));
+    m_buffer = m_buffer.drop_front(sizeof(T));
+    return t;
+  }
+
+  template <typename T> T Read(PointerTag) {
+    typedef typename std::remove_pointer<T>::type UnderlyingT;
+    return m_index_to_object.template GetObjectForIndex<UnderlyingT>(
+        Deserialize<unsigned>());
+  }
+
+  template <typename T> T Read(ReferenceTag) {
+    typedef typename std::remove_reference<T>::type UnderlyingT;
+    // If this is a reference to a fundamental type we just read its value.
+    return *m_index_to_object.template GetObjectForIndex<UnderlyingT>(
+        Deserialize<unsigned>());
+  }
+
+  /// This method is used to parse references to fundamental types. Because
+  /// they're not recorded in the object table we have serialized their value.
+  /// We read its value, allocate a copy on the heap, and return a pointer to
+  /// the copy.
+  template <typename T> T Read(FundamentalPointerTag) {
+    typedef typename std::remove_pointer<T>::type UnderlyingT;
+    return new UnderlyingT(Deserialize<UnderlyingT>());
+  }
+
+  /// This method is used to parse references to fundamental types. Because
+  /// they're not recorded in the object table we have serialized their value.
+  /// We read its value, allocate a copy on the heap, and return a reference to
+  /// the copy.
+  template <typename T> T Read(FundamentalReferenceTag) {
+    // If this is a reference to a fundamental type we just read its value.
+    typedef typename std::remove_reference<T>::type UnderlyingT;
+    return *(new UnderlyingT(Deserialize<UnderlyingT>()));
+  }
+
+  /// Mapping of indices to objects.
+  IndexToObject m_index_to_object;
+
+  /// Buffer containing the serialized data.
+  llvm::StringRef m_buffer;
+};
+
+/// Partial specialization for C-style strings. We read the string value
+/// instead of treating it as pointer.
+template <> const char *Deserializer::Deserialize<const char *>();
+template <> char *Deserializer::Deserialize<char *>();
+
+/// Helpers to auto-synthesize function replay code. It deserializes the replay
+/// function's arguments one by one and finally calls the corresponding
+/// function.
+template <typename... Remaining> struct DeserializationHelper;
+
+template <typename Head, typename... Tail>
+struct DeserializationHelper<Head, Tail...> {
+  template <typename Result, typename... Deserialized> struct deserialized {
+    static Result doit(Deserializer &deserializer,
+                       Result (*f)(Deserialized..., Head, Tail...),
+                       Deserialized... d) {
+      return DeserializationHelper<Tail...>::
+          template deserialized<Result, Deserialized..., Head>::doit(
+              deserializer, f, d..., deserializer.Deserialize<Head>());
+    }
+  };
+};
+
+template <> struct DeserializationHelper<> {
+  template <typename Result, typename... Deserialized> struct deserialized {
+    static Result doit(Deserializer &deserializer, Result (*f)(Deserialized...),
+                       Deserialized... d) {
+      return f(d...);
+    }
+  };
+};
+
+/// The replayer interface.
+struct Replayer {
+  virtual ~Replayer() {}
+  virtual void operator()(Deserializer &deserializer) const = 0;
+};
+
+/// The default replayer deserializes the arguments and calls the function.
+template <typename Signature> struct DefaultReplayer;
+template <typename Result, typename... Args>
+struct DefaultReplayer<Result(Args...)> : public Replayer {
+  DefaultReplayer(Result (*f)(Args...)) : Replayer(), f(f) {}
+
+  void operator()(Deserializer &deserializer) const override {
+    deserializer.HandleReplayResult(
+        DeserializationHelper<Args...>::template deserialized<Result>::doit(
+            deserializer, f));
+  }
+
+  Result (*f)(Args...);
+};
+
+/// Partial specialization for function returning a void type. It ignores the
+/// (absent) return value.
+template <typename... Args>
+struct DefaultReplayer<void(Args...)> : public Replayer {
+  DefaultReplayer(void (*f)(Args...)) : Replayer(), f(f) {}
+
+  void operator()(Deserializer &deserializer) const override {
+    DeserializationHelper<Args...>::template deserialized<void>::doit(
+        deserializer, f);
+    deserializer.HandleReplayResultVoid();
+  }
+
+  void (*f)(Args...);
+};
+
+/// The registry contains a unique mapping between functions and their ID. The
+/// IDs can be serialized and deserialized to replay a function. Functions need
+/// to be registered with the registry for this to work.
+class Registry {
+private:
+  struct SignatureStr {
+    SignatureStr(llvm::StringRef result = {}, llvm::StringRef scope = {},
+                 llvm::StringRef name = {}, llvm::StringRef args = {})
+        : result(result), scope(scope), name(name), args(args) {}
+
+    std::string ToString() const;
+
+    llvm::StringRef result;
+    llvm::StringRef scope;
+    llvm::StringRef name;
+    llvm::StringRef args;
+  };
+
+public:
+  Registry() = default;
+  virtual ~Registry() = default;
+
+  /// Register a default replayer for a function.
+  template <typename Signature>
+  void Register(Signature *f, llvm::StringRef result = {},
+                llvm::StringRef scope = {}, llvm::StringRef name = {},
+                llvm::StringRef args = {}) {
+    DoRegister(uintptr_t(f), llvm::make_unique<DefaultReplayer<Signature>>(f),
+               SignatureStr(result, scope, name, args));
+  }
+
+  /// Register a replayer that invokes a custom function with the same
+  /// signature as the replayed function.
+  template <typename Signature>
+  void Register(Signature *f, Signature *g, llvm::StringRef result = {},
+                llvm::StringRef scope = {}, llvm::StringRef name = {},
+                llvm::StringRef args = {}) {
+    DoRegister(uintptr_t(f), llvm::make_unique<DefaultReplayer<Signature>>(g),
+               SignatureStr(result, scope, name, args));
+  }
+
+  /// Replay functions from a file.
+  bool Replay(const FileSpec &file);
+
+  /// Replay functions from a buffer.
+  bool Replay(llvm::StringRef buffer);
+
+  /// Returns the ID for a given function address.
+  unsigned GetID(uintptr_t addr);
+
+protected:
+  /// Register the given replayer for a function (and the ID mapping).
+  void DoRegister(uintptr_t RunID, std::unique_ptr<Replayer> replayer,
+                  SignatureStr signature);
+
+private:
+  std::string GetSignature(unsigned id);
+  Replayer *GetReplayer(unsigned id);
+
+  /// Mapping of function addresses to replayers and their ID.
+  std::map<uintptr_t, std::pair<std::unique_ptr<Replayer>, unsigned>>
+      m_replayers;
+
+  /// Mapping of IDs to replayer instances.
+  std::map<unsigned, std::pair<Replayer *, SignatureStr>> m_ids;
+};
+
+/// To be used as the "Runtime ID" of a constructor. It also invokes the
+/// constructor when called.
+template <typename Signature> struct construct;
+template <typename Class, typename... Args> struct construct<Class(Args...)> {
+  static Class *doit(Args... args) { return new Class(args...); }
+};
+
+/// To be used as the "Runtime ID" of a member function. It also invokes the
+/// member function when called.
+template <typename Signature> struct invoke;
+template <typename Result, typename Class, typename... Args>
+struct invoke<Result (Class::*)(Args...)> {
+  template <Result (Class::*m)(Args...)> struct method {
+    static Result doit(Class *c, Args... args) { return (c->*m)(args...); }
+  };
+};
+
+template <typename Result, typename Class, typename... Args>
+struct invoke<Result (Class::*)(Args...) const> {
+  template <Result (Class::*m)(Args...) const> struct method_const {
+    static Result doit(Class *c, Args... args) { return (c->*m)(args...); }
+  };
+};
+
+template <typename Class, typename... Args>
+struct invoke<void (Class::*)(Args...)> {
+  template <void (Class::*m)(Args...)> struct method {
+    static void doit(Class *c, Args... args) { (c->*m)(args...); }
+  };
+};
+
+/// Maps an object to an index for serialization. Indices are unique and
+/// incremented for every new object.
+///
+/// Indices start at 1 in order to differentiate with an invalid index (0) in
+/// the serialized buffer.
+class ObjectToIndex {
+public:
+  template <typename T> unsigned GetIndexForObject(T *t) {
+    return GetIndexForObjectImpl(static_cast<const void *>(t));
+  }
+
+private:
+  unsigned GetIndexForObjectImpl(const void *object);
+
+  llvm::DenseMap<const void *, unsigned> m_mapping;
+};
+
+/// Serializes functions, their arguments and their return type to a stream.
+class Serializer {
+public:
+  Serializer(llvm::raw_ostream &stream = llvm::outs()) : m_stream(stream) {}
+
+  /// Recursively serialize all the given arguments.
+  template <typename Head, typename... Tail>
+  void SerializeAll(const Head &head, const Tail &... tail) {
+    Serialize(head);
+    SerializeAll(tail...);
+  }
+
+  void SerializeAll() {
+    m_stream.flush();
+  }
+
+private:
+  /// Serialize pointers. We need to differentiate between pointers to
+  /// fundamental types (in which case we serialize its value) and pointer to
+  /// objects (in which case we serialize their index).
+  template <typename T> void Serialize(T *t) {
+    if (std::is_fundamental<T>::value) {
+      Serialize(*t);
+    } else {
+      unsigned idx = m_tracker.GetIndexForObject(t);
+      Serialize(idx);
+    }
+  }
+
+  /// Serialize references. We need to differentiate between references to
+  /// fundamental types (in which case we serialize its value) and references
+  /// to objects (in which case we serialize their index).
+  template <typename T> void Serialize(T &t) {
+    if (std::is_fundamental<T>::value) {
+      m_stream.write(reinterpret_cast<const char *>(&t), sizeof(T));
+    } else {
+      unsigned idx = m_tracker.GetIndexForObject(&t);
+      Serialize(idx);
+    }
+  }
+
+  void Serialize(void *v) {
+    // FIXME: Support void*
+    llvm_unreachable("void* is currently unsupported.");
+  }
+
+  void Serialize(const char *t) {
+    m_stream << t;
+    m_stream.write(0x0);
+  }
+
+  /// Serialization stream.
+  llvm::raw_ostream &m_stream;
+
+  /// Mapping of objects to indices.
+  ObjectToIndex m_tracker;
+};
+
+class InstrumentationData {
+public:
+  InstrumentationData() : m_serializer(nullptr), m_registry(nullptr){};
+  InstrumentationData(Serializer &serializer, Registry &registry)
+      : m_serializer(&serializer), m_registry(&registry){};
+
+  Serializer &GetSerializer() { return *m_serializer; }
+  Registry &GetRegistry() { return *m_registry; }
+
+  operator bool() { return m_serializer != nullptr && m_registry != nullptr; }
+
+private:
+  Serializer *m_serializer;
+  Registry *m_registry;
+};
+
+/// RAII object that records function invocations and their return value.
+///
+/// API calls are only captured when the API boundary is crossed. Once we're in
+/// the API layer, and another API function is called, it doesn't need to be
+/// recorded.
+///
+/// When a call is recored, its result is always recorded as well, even if the
+/// function returns a void. For functions that return by value, RecordResult
+/// should be used. Otherwise a sentinel value (0) will be serialized.
+///
+/// Because of the functional overlap between logging and recording API calls,
+/// this class is also used for logging.
+class Recorder {
+public:
+  Recorder(llvm::StringRef pretty_func = {}, std::string &&pretty_args = {});
+  ~Recorder();
+
+  /// Records a single function call.
+  template <typename Result, typename... FArgs, typename... RArgs>
+  void Record(Serializer &serializer, Registry &registry, Result (*f)(FArgs...),
+              const RArgs &... args) {
+    m_serializer = &serializer;
+    if (!ShouldCapture())
+      return;
+
+    unsigned id = registry.GetID(uintptr_t(f));
+
+#ifdef LLDB_REPRO_INSTR_TRACE
+    Log(id);
+#endif
+
+    serializer.SerializeAll(id);
+    serializer.SerializeAll(args...);
+
+    if (std::is_class<typename std::remove_pointer<
+            typename std::remove_reference<Result>::type>::type>::value) {
+      m_result_recorded = false;
+    } else {
+      serializer.SerializeAll(0);
+      m_result_recorded = true;
+    }
+  }
+
+  /// Records a single function call.
+  template <typename... Args>
+  void Record(Serializer &serializer, Registry &registry, void (*f)(Args...),
+              const Args &... args) {
+    m_serializer = &serializer;
+    if (!ShouldCapture())
+      return;
+
+    unsigned id = registry.GetID(uintptr_t(f));
+
+#ifdef LLDB_REPRO_INSTR_TRACE
+    Log(id);
+#endif
+
+    serializer.SerializeAll(id);
+    serializer.SerializeAll(args...);
+
+    // Record result.
+    serializer.SerializeAll(0);
+    m_result_recorded = true;
+  }
+
+  /// Record the result of a function call.
+  template <typename Result> Result RecordResult(Result &&r) {
+    UpdateBoundary();
+    if (m_serializer && ShouldCapture()) {
+      assert(!m_result_recorded);
+      m_serializer->SerializeAll(r);
+      m_result_recorded = true;
+    }
+    return std::forward<Result>(r);
+  }
+
+private:
+  void UpdateBoundary() {
+    if (m_local_boundary)
+      g_global_boundary = false;
+  }
+
+  bool ShouldCapture() { return m_local_boundary; }
+
+#ifdef LLDB_REPRO_INSTR_TRACE
+  void Log(unsigned id) {
+    llvm::errs() << "Recording " << id << ": " << m_pretty_func << " ("
+                 << m_pretty_args << ")\n";
+  }
+#endif
+
+  Serializer *m_serializer;
+
+  /// Pretty function for logging.
+  llvm::StringRef m_pretty_func;
+  std::string m_pretty_args;
+
+  /// Whether this function call was the one crossing the API boundary.
+  bool m_local_boundary;
+
+  /// Whether the return value was recorded explicitly.
+  bool m_result_recorded;
+
+  /// Whether we're currently across the API boundary.
+  static bool g_global_boundary;
+};
+
+} // namespace repro
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_REPRODUCER_INSTRUMENTATION_H
diff --git a/linux-x64/clang/include/lldb/Utility/Scalar.h b/linux-x64/clang/include/lldb/Utility/Scalar.h
new file mode 100644
index 0000000..62ee9f6
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Scalar.h
@@ -0,0 +1,353 @@
+//===-- Scalar.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_SCALAR_H
+#define LLDB_UTILITY_SCALAR_H
+
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-private-types.h"
+#include "lldb/Utility/LLDBAssert.h"
+#include "llvm/ADT/APFloat.h"
+#include "llvm/ADT/APInt.h"
+#include <cstddef>
+#include <cstdint>
+
+namespace lldb_private {
+class DataExtractor;
+class Stream;
+} // namespace lldb_private
+
+#define NUM_OF_WORDS_INT128 2
+#define BITWIDTH_INT128 128
+#define NUM_OF_WORDS_INT256 4
+#define BITWIDTH_INT256 256
+#define NUM_OF_WORDS_INT512 8
+#define BITWIDTH_INT512 512
+
+namespace lldb_private {
+
+// A class designed to hold onto values and their corresponding types.
+// Operators are defined and Scalar objects will correctly promote their types
+// and values before performing these operations. Type promotion currently
+// follows the ANSI C type promotion rules.
+class Scalar {
+public:
+  enum Type {
+    e_void = 0,
+    e_sint,
+    e_uint,
+    e_slong,
+    e_ulong,
+    e_slonglong,
+    e_ulonglong,
+    e_sint128,
+    e_uint128,
+    e_sint256,
+    e_uint256,
+    e_sint512,
+    e_uint512,
+    e_float,
+    e_double,
+    e_long_double
+  };
+
+  // Constructors and Destructors
+  Scalar();
+  Scalar(int v) : m_type(e_sint), m_float(static_cast<float>(0)) {
+    m_integer = llvm::APInt(sizeof(int) * 8, v, true);
+  }
+  Scalar(unsigned int v) : m_type(e_uint), m_float(static_cast<float>(0)) {
+    m_integer = llvm::APInt(sizeof(int) * 8, v);
+  }
+  Scalar(long v) : m_type(e_slong), m_float(static_cast<float>(0)) {
+    m_integer = llvm::APInt(sizeof(long) * 8, v, true);
+  }
+  Scalar(unsigned long v) : m_type(e_ulong), m_float(static_cast<float>(0)) {
+    m_integer = llvm::APInt(sizeof(long) * 8, v);
+  }
+  Scalar(long long v) : m_type(e_slonglong), m_float(static_cast<float>(0)) {
+    m_integer = llvm::APInt(sizeof(long long) * 8, v, true);
+  }
+  Scalar(unsigned long long v)
+      : m_type(e_ulonglong), m_float(static_cast<float>(0)) {
+    m_integer = llvm::APInt(sizeof(long long) * 8, v);
+  }
+  Scalar(float v) : m_type(e_float), m_float(v) { m_float = llvm::APFloat(v); }
+  Scalar(double v) : m_type(e_double), m_float(v) {
+    m_float = llvm::APFloat(v);
+  }
+  Scalar(long double v, bool ieee_quad)
+      : m_type(e_long_double), m_float(static_cast<float>(0)),
+        m_ieee_quad(ieee_quad) {
+    if (ieee_quad)
+      m_float =
+          llvm::APFloat(llvm::APFloat::IEEEquad(),
+                        llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
+                                    (reinterpret_cast<type128 *>(&v))->x));
+    else
+      m_float =
+          llvm::APFloat(llvm::APFloat::x87DoubleExtended(),
+                        llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
+                                    (reinterpret_cast<type128 *>(&v))->x));
+  }
+  Scalar(llvm::APInt v) : m_type(), m_float(static_cast<float>(0)) {
+    m_integer = llvm::APInt(v);
+    switch (m_integer.getBitWidth()) {
+    case 8:
+    case 16:
+    case 32:
+      m_type = e_sint;
+      return;
+    case 64:
+      m_type = e_slonglong;
+      return;
+    case 128:
+      m_type = e_sint128;
+      return;
+    case 256:
+      m_type = e_sint256;
+      return;
+    case 512:
+      m_type = e_sint512;
+      return;
+    }
+    lldbassert(false && "unsupported bitwidth");
+  }
+  // Scalar(const RegisterValue& reg_value);
+  virtual ~Scalar();
+
+  bool SignExtend(uint32_t bit_pos);
+
+  bool ExtractBitfield(uint32_t bit_size, uint32_t bit_offset);
+
+  bool SetBit(uint32_t bit);
+
+  bool ClearBit(uint32_t bit);
+
+  const void *GetBytes() const;
+
+  size_t GetByteSize() const;
+
+  bool GetData(DataExtractor &data, size_t limit_byte_size = UINT32_MAX) const;
+
+  size_t GetAsMemoryData(void *dst, size_t dst_len,
+                         lldb::ByteOrder dst_byte_order, Status &error) const;
+
+  bool IsZero() const;
+
+  void Clear() {
+    m_type = e_void;
+    m_integer.clearAllBits();
+  }
+
+  const char *GetTypeAsCString() const;
+
+  void GetValue(Stream *s, bool show_type) const;
+
+  bool IsValid() const {
+    return (m_type >= e_sint) && (m_type <= e_long_double);
+  }
+
+  bool Promote(Scalar::Type type);
+
+  bool MakeSigned();
+
+  bool MakeUnsigned();
+
+  static const char *GetValueTypeAsCString(Scalar::Type value_type);
+
+  static Scalar::Type
+  GetValueTypeForSignedIntegerWithByteSize(size_t byte_size);
+
+  static Scalar::Type
+  GetValueTypeForUnsignedIntegerWithByteSize(size_t byte_size);
+
+  static Scalar::Type GetValueTypeForFloatWithByteSize(size_t byte_size);
+
+  // All operators can benefits from the implicit conversions that will happen
+  // automagically by the compiler, so no temporary objects will need to be
+  // created. As a result, we currently don't need a variety of overloaded set
+  // value accessors.
+  Scalar &operator=(const int i);
+  Scalar &operator=(unsigned int v);
+  Scalar &operator=(long v);
+  Scalar &operator=(unsigned long v);
+  Scalar &operator=(long long v);
+  Scalar &operator=(unsigned long long v);
+  Scalar &operator=(float v);
+  Scalar &operator=(double v);
+  Scalar &operator=(long double v);
+  Scalar &operator=(llvm::APInt v);
+  Scalar &operator=(const Scalar &rhs); // Assignment operator
+  Scalar &operator+=(const Scalar &rhs);
+  Scalar &operator<<=(const Scalar &rhs); // Shift left
+  Scalar &operator>>=(const Scalar &rhs); // Shift right (arithmetic)
+  Scalar &operator&=(const Scalar &rhs);
+
+  // Shifts the current value to the right without maintaining the current sign
+  // of the value (if it is signed).
+  bool ShiftRightLogical(const Scalar &rhs); // Returns true on success
+
+  // Takes the absolute value of the current value if it is signed, else the
+  // value remains unchanged. Returns false if the contained value has a void
+  // type.
+  bool AbsoluteValue(); // Returns true on success
+  // Negates the current value (even for unsigned values). Returns false if the
+  // contained value has a void type.
+  bool UnaryNegate(); // Returns true on success
+  // Inverts all bits in the current value as long as it isn't void or a
+  // float/double/long double type. Returns false if the contained value has a
+  // void/float/double/long double type, else the value is inverted and true is
+  // returned.
+  bool OnesComplement(); // Returns true on success
+
+  // Access the type of the current value.
+  Scalar::Type GetType() const { return m_type; }
+
+  // Returns a casted value of the current contained data without modifying the
+  // current value. FAIL_VALUE will be returned if the type of the value is
+  // void or invalid.
+  int SInt(int fail_value = 0) const;
+
+  unsigned char UChar(unsigned char fail_value = 0) const;
+
+  signed char SChar(char fail_value = 0) const;
+
+  unsigned short UShort(unsigned short fail_value = 0) const;
+
+  short SShort(short fail_value = 0) const;
+
+  unsigned int UInt(unsigned int fail_value = 0) const;
+
+  long SLong(long fail_value = 0) const;
+
+  unsigned long ULong(unsigned long fail_value = 0) const;
+
+  long long SLongLong(long long fail_value = 0) const;
+
+  unsigned long long ULongLong(unsigned long long fail_value = 0) const;
+
+  llvm::APInt SInt128(llvm::APInt &fail_value) const;
+
+  llvm::APInt UInt128(const llvm::APInt &fail_value) const;
+
+  float Float(float fail_value = 0.0f) const;
+
+  double Double(double fail_value = 0.0) const;
+
+  long double LongDouble(long double fail_value = 0.0) const;
+
+  Status SetValueFromCString(const char *s, lldb::Encoding encoding,
+                             size_t byte_size);
+
+  Status SetValueFromData(DataExtractor &data, lldb::Encoding encoding,
+                          size_t byte_size);
+
+  static bool UIntValueIsValidForSize(uint64_t uval64, size_t total_byte_size) {
+    if (total_byte_size > 8)
+      return false;
+
+    if (total_byte_size == 8)
+      return true;
+
+    const uint64_t max = (static_cast<uint64_t>(1)
+                          << static_cast<uint64_t>(total_byte_size * 8)) -
+                         1;
+    return uval64 <= max;
+  }
+
+  static bool SIntValueIsValidForSize(int64_t sval64, size_t total_byte_size) {
+    if (total_byte_size > 8)
+      return false;
+
+    if (total_byte_size == 8)
+      return true;
+
+    const int64_t max = (static_cast<int64_t>(1)
+                         << static_cast<uint64_t>(total_byte_size * 8 - 1)) -
+                        1;
+    const int64_t min = ~(max);
+    return min <= sval64 && sval64 <= max;
+  }
+
+protected:
+  typedef char schar_t;
+  typedef unsigned char uchar_t;
+  typedef short sshort_t;
+  typedef unsigned short ushort_t;
+  typedef int sint_t;
+  typedef unsigned int uint_t;
+  typedef long slong_t;
+  typedef unsigned long ulong_t;
+  typedef long long slonglong_t;
+  typedef unsigned long long ulonglong_t;
+  typedef float float_t;
+  typedef double double_t;
+  typedef long double long_double_t;
+
+  // Classes that inherit from Scalar can see and modify these
+  Scalar::Type m_type;
+  llvm::APInt m_integer;
+  llvm::APFloat m_float;
+  bool m_ieee_quad = false;
+
+private:
+  friend const Scalar operator+(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator-(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator/(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator*(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator&(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator|(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator%(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator^(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator<<(const Scalar &lhs, const Scalar &rhs);
+  friend const Scalar operator>>(const Scalar &lhs, const Scalar &rhs);
+  friend bool operator==(const Scalar &lhs, const Scalar &rhs);
+  friend bool operator!=(const Scalar &lhs, const Scalar &rhs);
+  friend bool operator<(const Scalar &lhs, const Scalar &rhs);
+  friend bool operator<=(const Scalar &lhs, const Scalar &rhs);
+  friend bool operator>(const Scalar &lhs, const Scalar &rhs);
+  friend bool operator>=(const Scalar &lhs, const Scalar &rhs);
+};
+
+// Split out the operators into a format where the compiler will be able to
+// implicitly convert numbers into Scalar objects.
+//
+// This allows code like:
+//      Scalar two(2);
+//      Scalar four = two * 2;
+//      Scalar eight = 2 * four;    // This would cause an error if the
+//                                  // operator* was implemented as a
+//                                  // member function.
+// SEE:
+//  Item 19 of "Effective C++ Second Edition" by Scott Meyers
+//  Differentiate among members functions, non-member functions, and
+//  friend functions
+const Scalar operator+(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator-(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator/(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator*(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator&(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator|(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator%(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator^(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator<<(const Scalar &lhs, const Scalar &rhs);
+const Scalar operator>>(const Scalar &lhs, const Scalar &rhs);
+bool operator==(const Scalar &lhs, const Scalar &rhs);
+bool operator!=(const Scalar &lhs, const Scalar &rhs);
+bool operator<(const Scalar &lhs, const Scalar &rhs);
+bool operator<=(const Scalar &lhs, const Scalar &rhs);
+bool operator>(const Scalar &lhs, const Scalar &rhs);
+bool operator>=(const Scalar &lhs, const Scalar &rhs);
+
+llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const Scalar &scalar);
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_SCALAR_H
diff --git a/linux-x64/clang/include/lldb/Utility/SelectHelper.h b/linux-x64/clang/include/lldb/Utility/SelectHelper.h
new file mode 100644
index 0000000..ec37f19
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/SelectHelper.h
@@ -0,0 +1,71 @@
+//===-- SelectHelper.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SelectHelper_h_
+#define liblldb_SelectHelper_h_
+
+#include "lldb/Utility/Status.h"
+#include "lldb/lldb-types.h"
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/Optional.h"
+
+#include <chrono>
+
+class SelectHelper {
+public:
+  // Defaults to infinite wait for select unless you call SetTimeout()
+  SelectHelper();
+
+  // Call SetTimeout() before calling SelectHelper::Select() to set the timeout
+  // based on the current time + the timeout. This allows multiple calls to
+  // SelectHelper::Select() without having to worry about the absolute timeout
+  // as this class manages to set the relative timeout correctly.
+  void SetTimeout(const std::chrono::microseconds &timeout);
+
+  // Call the FDSet*() functions before calling SelectHelper::Select() to set
+  // the file descriptors that we will watch for when calling select. This will
+  // cause FD_SET() to be called prior to calling select using the "fd"
+  // provided.
+  void FDSetRead(lldb::socket_t fd);
+  void FDSetWrite(lldb::socket_t fd);
+  void FDSetError(lldb::socket_t fd);
+
+  // Call the FDIsSet*() functions after calling SelectHelper::Select() to
+  // check which file descriptors are ready for read/write/error. This will
+  // contain the result of FD_ISSET after calling select for a given file
+  // descriptor.
+  bool FDIsSetRead(lldb::socket_t fd) const;
+  bool FDIsSetWrite(lldb::socket_t fd) const;
+  bool FDIsSetError(lldb::socket_t fd) const;
+
+  // Call the system's select() to wait for descriptors using timeout provided
+  // in a call the SelectHelper::SetTimeout(), or infinite wait if no timeout
+  // was set.
+  lldb_private::Status Select();
+
+protected:
+  struct FDInfo {
+    FDInfo()
+        : read_set(false), write_set(false), error_set(false),
+          read_is_set(false), write_is_set(false), error_is_set(false) {}
+
+    void PrepareForSelect() {
+      read_is_set = false;
+      write_is_set = false;
+      error_is_set = false;
+    }
+
+    bool read_set : 1, write_set : 1, error_set : 1, read_is_set : 1,
+        write_is_set : 1, error_is_set : 1;
+  };
+  llvm::DenseMap<lldb::socket_t, FDInfo> m_fd_map;
+  llvm::Optional<std::chrono::steady_clock::time_point> m_end_time;
+};
+
+#endif // liblldb_SelectHelper_h_
diff --git a/linux-x64/clang/include/lldb/Utility/SharedCluster.h b/linux-x64/clang/include/lldb/Utility/SharedCluster.h
new file mode 100644
index 0000000..71bbb33
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/SharedCluster.h
@@ -0,0 +1,95 @@
+//===------------------SharedCluster.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_SharedCluster_h_
+#define utility_SharedCluster_h_
+
+#include "lldb/Utility/LLDBAssert.h"
+#include "lldb/Utility/SharingPtr.h"
+
+#include "llvm/ADT/SmallPtrSet.h"
+
+#include <mutex>
+
+namespace lldb_private {
+
+namespace imp {
+template <typename T>
+class shared_ptr_refcount : public lldb_private::imp::shared_count {
+public:
+  template <class Y>
+  shared_ptr_refcount(Y *in) : shared_count(0), manager(in) {}
+
+  shared_ptr_refcount() : shared_count(0) {}
+
+  ~shared_ptr_refcount() override {}
+
+  void on_zero_shared() override { manager->DecrementRefCount(); }
+
+private:
+  T *manager;
+};
+
+} // namespace imp
+
+template <class T> class ClusterManager {
+public:
+  ClusterManager() : m_objects(), m_external_ref(0), m_mutex() {}
+
+  ~ClusterManager() {
+    for (typename llvm::SmallPtrSet<T *, 16>::iterator pos = m_objects.begin(),
+                                                       end = m_objects.end();
+         pos != end; ++pos) {
+      T *object = *pos;
+      delete object;
+    }
+
+    // Decrement refcount should have been called on this ClusterManager, and
+    // it should have locked the mutex, now we will unlock it before we destroy
+    // it...
+    m_mutex.unlock();
+  }
+
+  void ManageObject(T *new_object) {
+    std::lock_guard<std::mutex> guard(m_mutex);
+    m_objects.insert(new_object);
+  }
+
+  typename lldb_private::SharingPtr<T> GetSharedPointer(T *desired_object) {
+    {
+      std::lock_guard<std::mutex> guard(m_mutex);
+      m_external_ref++;
+      if (0 == m_objects.count(desired_object)) {
+        lldbassert(false && "object not found in shared cluster when expected");
+        desired_object = nullptr;
+      }
+    }
+    return typename lldb_private::SharingPtr<T>(
+        desired_object, new imp::shared_ptr_refcount<ClusterManager>(this));
+  }
+
+private:
+  void DecrementRefCount() {
+    m_mutex.lock();
+    m_external_ref--;
+    if (m_external_ref == 0)
+      delete this;
+    else
+      m_mutex.unlock();
+  }
+
+  friend class imp::shared_ptr_refcount<ClusterManager>;
+
+  llvm::SmallPtrSet<T *, 16> m_objects;
+  int m_external_ref;
+  std::mutex m_mutex;
+};
+
+} // namespace lldb_private
+
+#endif // utility_SharedCluster_h_
diff --git a/linux-x64/clang/include/lldb/Utility/SharingPtr.h b/linux-x64/clang/include/lldb/Utility/SharingPtr.h
new file mode 100644
index 0000000..e4ab3d2
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/SharingPtr.h
@@ -0,0 +1,609 @@
+//===---------------------SharingPtr.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_SharingPtr_h_
+#define utility_SharingPtr_h_
+
+#include <memory>
+
+// Microsoft Visual C++ currently does not enable std::atomic to work in CLR
+// mode - as such we need to "hack around it" for MSVC++ builds only using
+// Windows specific intrinsics instead of the C++11 atomic support
+#ifdef _MSC_VER
+#include <intrin.h>
+#else
+#include <atomic>
+#endif
+
+#include <stddef.h>
+
+
+//#define ENABLE_SP_LOGGING 1 // DON'T CHECK THIS LINE IN UNLESS COMMENTED OUT
+#if defined(ENABLE_SP_LOGGING)
+
+extern "C" void track_sp(void *sp_this, void *ptr, long count);
+
+#endif
+
+namespace lldb_private {
+
+namespace imp {
+
+class shared_count {
+  shared_count(const shared_count &) = delete;
+  shared_count &operator=(const shared_count &) = delete;
+
+public:
+  explicit shared_count(long refs = 0) : shared_owners_(refs) {}
+
+  void add_shared();
+  void release_shared();
+  long use_count() const { return shared_owners_ + 1; }
+
+protected:
+#ifdef _MSC_VER
+  long shared_owners_;
+#else
+  std::atomic<long> shared_owners_;
+#endif
+  virtual ~shared_count();
+
+private:
+  virtual void on_zero_shared() = 0;
+};
+
+template <class T> class shared_ptr_pointer : public shared_count {
+  T data_;
+
+public:
+  shared_ptr_pointer(T p) : data_(p) {}
+
+private:
+  void on_zero_shared() override;
+
+  shared_ptr_pointer(const shared_ptr_pointer &) = delete;
+  shared_ptr_pointer &operator=(const shared_ptr_pointer &) = delete;
+};
+
+template <class T> void shared_ptr_pointer<T>::on_zero_shared() {
+  delete data_;
+}
+
+template <class T> class shared_ptr_emplace : public shared_count {
+  T data_;
+
+public:
+  shared_ptr_emplace() : data_() {}
+
+  template <class A0> shared_ptr_emplace(A0 &a0) : data_(a0) {}
+
+  template <class A0, class A1>
+  shared_ptr_emplace(A0 &a0, A1 &a1) : data_(a0, a1) {}
+
+  template <class A0, class A1, class A2>
+  shared_ptr_emplace(A0 &a0, A1 &a1, A2 &a2) : data_(a0, a1, a2) {}
+
+  template <class A0, class A1, class A2, class A3>
+  shared_ptr_emplace(A0 &a0, A1 &a1, A2 &a2, A3 &a3) : data_(a0, a1, a2, a3) {}
+
+  template <class A0, class A1, class A2, class A3, class A4>
+  shared_ptr_emplace(A0 &a0, A1 &a1, A2 &a2, A3 &a3, A4 &a4)
+      : data_(a0, a1, a2, a3, a4) {}
+
+private:
+  void on_zero_shared() override;
+
+public:
+  T *get() { return &data_; }
+};
+
+template <class T> void shared_ptr_emplace<T>::on_zero_shared() {}
+
+} // namespace imp
+
+template <class T> class SharingPtr {
+public:
+  typedef T element_type;
+
+private:
+  element_type *ptr_;
+  imp::shared_count *cntrl_;
+
+  struct nat {
+    int for_bool_;
+  };
+
+public:
+  SharingPtr();
+  SharingPtr(std::nullptr_t);
+  template <class Y> explicit SharingPtr(Y *p);
+  template <class Y> explicit SharingPtr(Y *p, imp::shared_count *ctrl_block);
+  template <class Y> SharingPtr(const SharingPtr<Y> &r, element_type *p);
+  SharingPtr(const SharingPtr &r);
+  template <class Y> SharingPtr(const SharingPtr<Y> &r);
+
+  ~SharingPtr();
+
+  SharingPtr &operator=(const SharingPtr &r);
+  template <class Y> SharingPtr &operator=(const SharingPtr<Y> &r);
+
+  void swap(SharingPtr &r);
+  void reset();
+  template <class Y> void reset(Y *p);
+  void reset(std::nullptr_t);
+
+  element_type *get() const { return ptr_; }
+  element_type &operator*() const { return *ptr_; }
+  element_type *operator->() const { return ptr_; }
+  long use_count() const { return cntrl_ ? cntrl_->use_count() : 0; }
+  bool unique() const { return use_count() == 1; }
+  bool empty() const { return cntrl_ == nullptr; }
+  operator nat *() const { return (nat *)get(); }
+
+  static SharingPtr<T> make_shared();
+
+  template <class A0> static SharingPtr<T> make_shared(A0 &);
+
+  template <class A0, class A1> static SharingPtr<T> make_shared(A0 &, A1 &);
+
+  template <class A0, class A1, class A2>
+  static SharingPtr<T> make_shared(A0 &, A1 &, A2 &);
+
+  template <class A0, class A1, class A2, class A3>
+  static SharingPtr<T> make_shared(A0 &, A1 &, A2 &, A3 &);
+
+  template <class A0, class A1, class A2, class A3, class A4>
+  static SharingPtr<T> make_shared(A0 &, A1 &, A2 &, A3 &, A4 &);
+
+private:
+  template <class U> friend class SharingPtr;
+};
+
+template <class T>
+inline SharingPtr<T>::SharingPtr() : ptr_(nullptr), cntrl_(nullptr) {}
+
+template <class T>
+inline SharingPtr<T>::SharingPtr(std::nullptr_t)
+    : ptr_(nullptr), cntrl_(nullptr) {}
+
+template <class T>
+template <class Y>
+SharingPtr<T>::SharingPtr(Y *p) : ptr_(p), cntrl_(nullptr) {
+  std::unique_ptr<Y> hold(p);
+  typedef imp::shared_ptr_pointer<Y *> _CntrlBlk;
+  cntrl_ = new _CntrlBlk(p);
+  hold.release();
+}
+
+template <class T>
+template <class Y>
+SharingPtr<T>::SharingPtr(Y *p, imp::shared_count *cntrl_block)
+    : ptr_(p), cntrl_(cntrl_block) {}
+
+template <class T>
+template <class Y>
+inline SharingPtr<T>::SharingPtr(const SharingPtr<Y> &r, element_type *p)
+    : ptr_(p), cntrl_(r.cntrl_) {
+  if (cntrl_)
+    cntrl_->add_shared();
+}
+
+template <class T>
+inline SharingPtr<T>::SharingPtr(const SharingPtr &r)
+    : ptr_(r.ptr_), cntrl_(r.cntrl_) {
+  if (cntrl_)
+    cntrl_->add_shared();
+}
+
+template <class T>
+template <class Y>
+inline SharingPtr<T>::SharingPtr(const SharingPtr<Y> &r)
+    : ptr_(r.ptr_), cntrl_(r.cntrl_) {
+  if (cntrl_)
+    cntrl_->add_shared();
+}
+
+template <class T> SharingPtr<T>::~SharingPtr() {
+  if (cntrl_)
+    cntrl_->release_shared();
+}
+
+template <class T>
+inline SharingPtr<T> &SharingPtr<T>::operator=(const SharingPtr &r) {
+  SharingPtr(r).swap(*this);
+  return *this;
+}
+
+template <class T>
+template <class Y>
+inline SharingPtr<T> &SharingPtr<T>::operator=(const SharingPtr<Y> &r) {
+  SharingPtr(r).swap(*this);
+  return *this;
+}
+
+template <class T> inline void SharingPtr<T>::swap(SharingPtr &r) {
+  std::swap(ptr_, r.ptr_);
+  std::swap(cntrl_, r.cntrl_);
+}
+
+template <class T> inline void SharingPtr<T>::reset() {
+  SharingPtr().swap(*this);
+}
+
+template <class T> inline void SharingPtr<T>::reset(std::nullptr_t p) {
+  reset();
+}
+
+template <class T> template <class Y> inline void SharingPtr<T>::reset(Y *p) {
+  SharingPtr(p).swap(*this);
+}
+
+template <class T> SharingPtr<T> SharingPtr<T>::make_shared() {
+  typedef imp::shared_ptr_emplace<T> CntrlBlk;
+  SharingPtr<T> r;
+  r.cntrl_ = new CntrlBlk();
+  r.ptr_ = static_cast<CntrlBlk *>(r.cntrl_)->get();
+  return r;
+}
+
+template <class T>
+template <class A0>
+SharingPtr<T> SharingPtr<T>::make_shared(A0 &a0) {
+  typedef imp::shared_ptr_emplace<T> CntrlBlk;
+  SharingPtr<T> r;
+  r.cntrl_ = new CntrlBlk(a0);
+  r.ptr_ = static_cast<CntrlBlk *>(r.cntrl_)->get();
+  return r;
+}
+
+template <class T>
+template <class A0, class A1>
+SharingPtr<T> SharingPtr<T>::make_shared(A0 &a0, A1 &a1) {
+  typedef imp::shared_ptr_emplace<T> CntrlBlk;
+  SharingPtr<T> r;
+  r.cntrl_ = new CntrlBlk(a0, a1);
+  r.ptr_ = static_cast<CntrlBlk *>(r.cntrl_)->get();
+  return r;
+}
+
+template <class T>
+template <class A0, class A1, class A2>
+SharingPtr<T> SharingPtr<T>::make_shared(A0 &a0, A1 &a1, A2 &a2) {
+  typedef imp::shared_ptr_emplace<T> CntrlBlk;
+  SharingPtr<T> r;
+  r.cntrl_ = new CntrlBlk(a0, a1, a2);
+  r.ptr_ = static_cast<CntrlBlk *>(r.cntrl_)->get();
+  return r;
+}
+
+template <class T>
+template <class A0, class A1, class A2, class A3>
+SharingPtr<T> SharingPtr<T>::make_shared(A0 &a0, A1 &a1, A2 &a2, A3 &a3) {
+  typedef imp::shared_ptr_emplace<T> CntrlBlk;
+  SharingPtr<T> r;
+  r.cntrl_ = new CntrlBlk(a0, a1, a2, a3);
+  r.ptr_ = static_cast<CntrlBlk *>(r.cntrl_)->get();
+  return r;
+}
+
+template <class T>
+template <class A0, class A1, class A2, class A3, class A4>
+SharingPtr<T> SharingPtr<T>::make_shared(A0 &a0, A1 &a1, A2 &a2, A3 &a3,
+                                         A4 &a4) {
+  typedef imp::shared_ptr_emplace<T> CntrlBlk;
+  SharingPtr<T> r;
+  r.cntrl_ = new CntrlBlk(a0, a1, a2, a3, a4);
+  r.ptr_ = static_cast<CntrlBlk *>(r.cntrl_)->get();
+  return r;
+}
+
+template <class T> inline SharingPtr<T> make_shared() {
+  return SharingPtr<T>::make_shared();
+}
+
+template <class T, class A0> inline SharingPtr<T> make_shared(A0 &a0) {
+  return SharingPtr<T>::make_shared(a0);
+}
+
+template <class T, class A0, class A1>
+inline SharingPtr<T> make_shared(A0 &a0, A1 &a1) {
+  return SharingPtr<T>::make_shared(a0, a1);
+}
+
+template <class T, class A0, class A1, class A2>
+inline SharingPtr<T> make_shared(A0 &a0, A1 &a1, A2 &a2) {
+  return SharingPtr<T>::make_shared(a0, a1, a2);
+}
+
+template <class T, class A0, class A1, class A2, class A3>
+inline SharingPtr<T> make_shared(A0 &a0, A1 &a1, A2 &a2, A3 &a3) {
+  return SharingPtr<T>::make_shared(a0, a1, a2, a3);
+}
+
+template <class T, class A0, class A1, class A2, class A3, class A4>
+inline SharingPtr<T> make_shared(A0 &a0, A1 &a1, A2 &a2, A3 &a3, A4 &a4) {
+  return SharingPtr<T>::make_shared(a0, a1, a2, a3, a4);
+}
+
+template <class T, class U>
+inline bool operator==(const SharingPtr<T> &__x, const SharingPtr<U> &__y) {
+  return __x.get() == __y.get();
+}
+
+template <class T, class U>
+inline bool operator!=(const SharingPtr<T> &__x, const SharingPtr<U> &__y) {
+  return !(__x == __y);
+}
+
+template <class T, class U>
+inline bool operator<(const SharingPtr<T> &__x, const SharingPtr<U> &__y) {
+  return __x.get() < __y.get();
+}
+
+template <class T> inline void swap(SharingPtr<T> &__x, SharingPtr<T> &__y) {
+  __x.swap(__y);
+}
+
+template <class T, class U>
+inline SharingPtr<T> static_pointer_cast(const SharingPtr<U> &r) {
+  return SharingPtr<T>(r, static_cast<T *>(r.get()));
+}
+
+template <class T, class U>
+SharingPtr<T> const_pointer_cast(const SharingPtr<U> &r) {
+  return SharingPtr<T>(r, const_cast<T *>(r.get()));
+}
+
+template <class T> class LoggingSharingPtr : public SharingPtr<T> {
+  typedef SharingPtr<T> base;
+
+public:
+  typedef void (*Callback)(void *, const LoggingSharingPtr &, bool action);
+  // action:  false means increment just happened
+  //          true  means decrement is about to happen
+
+  LoggingSharingPtr() : cb_(0), baton_(nullptr) {}
+
+  LoggingSharingPtr(Callback cb, void *baton) : cb_(cb), baton_(baton) {
+    if (cb_)
+      cb_(baton_, *this, false);
+  }
+
+  template <class Y>
+  LoggingSharingPtr(Y *p) : base(p), cb_(0), baton_(nullptr) {}
+
+  template <class Y>
+  LoggingSharingPtr(Y *p, Callback cb, void *baton)
+      : base(p), cb_(cb), baton_(baton) {
+    if (cb_)
+      cb_(baton_, *this, false);
+  }
+
+  ~LoggingSharingPtr() {
+    if (cb_)
+      cb_(baton_, *this, true);
+  }
+
+  LoggingSharingPtr(const LoggingSharingPtr &p)
+      : base(p), cb_(p.cb_), baton_(p.baton_) {
+    if (cb_)
+      cb_(baton_, *this, false);
+  }
+
+  LoggingSharingPtr &operator=(const LoggingSharingPtr &p) {
+    if (cb_)
+      cb_(baton_, *this, true);
+    base::operator=(p);
+    cb_ = p.cb_;
+    baton_ = p.baton_;
+    if (cb_)
+      cb_(baton_, *this, false);
+    return *this;
+  }
+
+  void reset() {
+    if (cb_)
+      cb_(baton_, *this, true);
+    base::reset();
+  }
+
+  template <class Y> void reset(Y *p) {
+    if (cb_)
+      cb_(baton_, *this, true);
+    base::reset(p);
+    if (cb_)
+      cb_(baton_, *this, false);
+  }
+
+  void SetCallback(Callback cb, void *baton) {
+    cb_ = cb;
+    baton_ = baton;
+  }
+
+  void ClearCallback() {
+    cb_ = 0;
+    baton_ = 0;
+  }
+
+private:
+  Callback cb_;
+  void *baton_;
+};
+
+template <class T> class IntrusiveSharingPtr;
+
+template <class T> class ReferenceCountedBase {
+public:
+  explicit ReferenceCountedBase() : shared_owners_(-1) {}
+
+  void add_shared();
+
+  void release_shared();
+
+  long use_count() const { return shared_owners_ + 1; }
+
+protected:
+  long shared_owners_;
+
+  friend class IntrusiveSharingPtr<T>;
+
+private:
+  ReferenceCountedBase(const ReferenceCountedBase &) = delete;
+  ReferenceCountedBase &operator=(const ReferenceCountedBase &) = delete;
+};
+
+template <class T> void lldb_private::ReferenceCountedBase<T>::add_shared() {
+#ifdef _MSC_VER
+  _InterlockedIncrement(&shared_owners_);
+#else
+  ++shared_owners_;
+#endif
+}
+
+template <class T>
+void lldb_private::ReferenceCountedBase<T>::release_shared() {
+#ifdef _MSC_VER
+  if (_InterlockedDecrement(&shared_owners_) == -1)
+#else
+  if (--shared_owners_ == -1)
+#endif
+    delete static_cast<T *>(this);
+}
+
+template <class T>
+class ReferenceCountedBaseVirtual : public imp::shared_count {
+public:
+  explicit ReferenceCountedBaseVirtual() : imp::shared_count(-1) {}
+
+  ~ReferenceCountedBaseVirtual() override = default;
+
+  void on_zero_shared() override;
+};
+
+template <class T> void ReferenceCountedBaseVirtual<T>::on_zero_shared() {}
+
+template <typename T> class IntrusiveSharingPtr {
+public:
+  typedef T element_type;
+
+  explicit IntrusiveSharingPtr() : ptr_(0) {}
+
+  explicit IntrusiveSharingPtr(T *ptr) : ptr_(ptr) { add_shared(); }
+
+  IntrusiveSharingPtr(const IntrusiveSharingPtr &rhs) : ptr_(rhs.ptr_) {
+    add_shared();
+  }
+
+  template <class X>
+  IntrusiveSharingPtr(const IntrusiveSharingPtr<X> &rhs) : ptr_(rhs.get()) {
+    add_shared();
+  }
+
+  IntrusiveSharingPtr &operator=(const IntrusiveSharingPtr &rhs) {
+    reset(rhs.get());
+    return *this;
+  }
+
+  template <class X>
+  IntrusiveSharingPtr &operator=(const IntrusiveSharingPtr<X> &rhs) {
+    reset(rhs.get());
+    return *this;
+  }
+
+  IntrusiveSharingPtr &operator=(T *ptr) {
+    reset(ptr);
+    return *this;
+  }
+
+  ~IntrusiveSharingPtr() {
+    release_shared();
+    ptr_ = nullptr;
+  }
+
+  T &operator*() const { return *ptr_; }
+
+  T *operator->() const { return ptr_; }
+
+  T *get() const { return ptr_; }
+
+  explicit operator bool() const { return ptr_ != 0; }
+
+  void swap(IntrusiveSharingPtr &rhs) {
+    std::swap(ptr_, rhs.ptr_);
+#if defined(ENABLE_SP_LOGGING)
+    track_sp(this, ptr_, use_count());
+    track_sp(&rhs, rhs.ptr_, rhs.use_count());
+#endif
+  }
+
+  void reset(T *ptr = nullptr) { IntrusiveSharingPtr(ptr).swap(*this); }
+
+  long use_count() const {
+    if (ptr_)
+      return ptr_->use_count();
+    return 0;
+  }
+
+  bool unique() const { return use_count() == 1; }
+
+private:
+  element_type *ptr_;
+
+  void add_shared() {
+    if (ptr_) {
+      ptr_->add_shared();
+#if defined(ENABLE_SP_LOGGING)
+      track_sp(this, ptr_, ptr_->use_count());
+#endif
+    }
+  }
+  void release_shared() {
+    if (ptr_) {
+#if defined(ENABLE_SP_LOGGING)
+      track_sp(this, nullptr, ptr_->use_count() - 1);
+#endif
+      ptr_->release_shared();
+    }
+  }
+};
+
+template <class T, class U>
+inline bool operator==(const IntrusiveSharingPtr<T> &lhs,
+                       const IntrusiveSharingPtr<U> &rhs) {
+  return lhs.get() == rhs.get();
+}
+
+template <class T, class U>
+inline bool operator!=(const IntrusiveSharingPtr<T> &lhs,
+                       const IntrusiveSharingPtr<U> &rhs) {
+  return lhs.get() != rhs.get();
+}
+
+template <class T, class U>
+inline bool operator==(const IntrusiveSharingPtr<T> &lhs, U *rhs) {
+  return lhs.get() == rhs;
+}
+
+template <class T, class U>
+inline bool operator!=(const IntrusiveSharingPtr<T> &lhs, U *rhs) {
+  return lhs.get() != rhs;
+}
+
+template <class T, class U>
+inline bool operator==(T *lhs, const IntrusiveSharingPtr<U> &rhs) {
+  return lhs == rhs.get();
+}
+
+template <class T, class U>
+inline bool operator!=(T *lhs, const IntrusiveSharingPtr<U> &rhs) {
+  return lhs != rhs.get();
+}
+
+} // namespace lldb_private
+
+#endif // utility_SharingPtr_h_
diff --git a/linux-x64/clang/include/lldb/Utility/State.h b/linux-x64/clang/include/lldb/Utility/State.h
new file mode 100644
index 0000000..9ff755f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/State.h
@@ -0,0 +1,76 @@
+//===-- State.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_STATE_H
+#define LLDB_UTILITY_STATE_H
+
+#include "lldb/lldb-enumerations.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FormatProviders.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cstdint>
+
+namespace lldb_private {
+
+/// Converts a StateType to a C string.
+///
+/// \param[in] state
+///     The StateType object to convert.
+///
+/// \return
+///     A NULL terminated C string that describes \a state. The
+///     returned string comes from constant string buffers and does
+///     not need to be freed.
+const char *StateAsCString(lldb::StateType state);
+
+/// Check if a state represents a state where the process or thread
+/// is running.
+///
+/// \param[in] state
+///     The StateType enumeration value
+///
+/// \return
+///     \b true if the state represents a process or thread state
+///     where the process or thread is running, \b false otherwise.
+bool StateIsRunningState(lldb::StateType state);
+
+/// Check if a state represents a state where the process or thread
+/// is stopped. Stopped can mean stopped when the process is still
+/// around, or stopped when the process has exited or doesn't exist
+/// yet. The \a must_exist argument tells us which of these cases is
+/// desired.
+///
+/// \param[in] state
+///     The StateType enumeration value
+///
+/// \param[in] must_exist
+///     A boolean that indicates the thread must also be alive
+///     so states like unloaded or exited won't return true.
+///
+/// \return
+///     \b true if the state represents a process or thread state
+///     where the process or thread is stopped. If \a must_exist is
+///     \b true, then the process can't be exited or unloaded,
+///     otherwise exited and unloaded or other states where the
+///     process no longer exists are considered to be stopped.
+bool StateIsStoppedState(lldb::StateType state, bool must_exist);
+
+const char *GetPermissionsAsCString(uint32_t permissions);
+
+} // namespace lldb_private
+
+namespace llvm {
+template <> struct format_provider<lldb::StateType> {
+  static void format(const lldb::StateType &state, raw_ostream &Stream,
+                     StringRef Style) {
+    Stream << lldb_private::StateAsCString(state);
+  }
+};
+} // namespace llvm
+
+#endif // LLDB_UTILITY_STATE_H
diff --git a/linux-x64/clang/include/lldb/Utility/Status.h b/linux-x64/clang/include/lldb/Utility/Status.h
new file mode 100644
index 0000000..ae730b9
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Status.h
@@ -0,0 +1,224 @@
+//===-- Status.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_STATUS_H
+#define LLDB_UTILITY_STATUS_H
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FormatVariadic.h"
+#include <cstdarg>
+#include <stdint.h>
+#include <string>
+#include <system_error>
+#include <type_traits>
+
+namespace llvm {
+class raw_ostream;
+}
+
+namespace lldb_private {
+
+/// \class Status Status.h "lldb/Utility/Status.h" An error handling class.
+///
+/// This class is designed to be able to hold any error code that can be
+/// encountered on a given platform. The errors are stored as a value of type
+/// Status::ValueType. This value should be large enough to hold any and all
+/// errors that the class supports. Each error has an associated type that is
+/// of type lldb::ErrorType. New types can be added to support new error
+/// types, and architecture specific types can be enabled. In the future we
+/// may wish to switch to a registration mechanism where new error types can
+/// be registered at runtime instead of a hard coded scheme.
+///
+/// All errors in this class also know how to generate a string representation
+/// of themselves for printing results and error codes. The string value will
+/// be fetched on demand and its string value will be cached until the error
+/// is cleared of the value of the error changes.
+class Status {
+public:
+  /// Every error value that this object can contain needs to be able to fit
+  /// into ValueType.
+  typedef uint32_t ValueType;
+
+  /// Default constructor.
+  ///
+  /// Initialize the error object with a generic success value.
+  ///
+  /// \param[in] err
+  ///     An error code.
+  ///
+  /// \param[in] type
+  ///     The type for \a err.
+  Status();
+
+  explicit Status(ValueType err,
+                  lldb::ErrorType type = lldb::eErrorTypeGeneric);
+
+  /* implicit */ Status(std::error_code EC);
+
+  explicit Status(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  /// Assignment operator.
+  ///
+  /// \param[in] err
+  ///     An error code.
+  ///
+  /// \return
+  ///     A const reference to this object.
+  const Status &operator=(const Status &rhs);
+
+  ~Status();
+
+  // llvm::Error support
+  explicit Status(llvm::Error error) { *this = std::move(error); }
+  const Status &operator=(llvm::Error error);
+  llvm::Error ToError() const;
+
+  /// Get the error string associated with the current error.
+  //
+  /// Gets the error value as a NULL terminated C string. The error string
+  /// will be fetched and cached on demand. The error string will be retrieved
+  /// from a callback that is appropriate for the type of the error and will
+  /// be cached until the error value is changed or cleared.
+  ///
+  /// \return
+  ///     The error as a NULL terminated C string value if the error
+  ///     is valid and is able to be converted to a string value,
+  ///     NULL otherwise.
+  const char *AsCString(const char *default_error_str = "unknown error") const;
+
+  /// Clear the object state.
+  ///
+  /// Reverts the state of this object to contain a generic success value and
+  /// frees any cached error string value.
+  void Clear();
+
+  /// Test for error condition.
+  ///
+  /// \return
+  ///     \b true if this object contains an error, \b false
+  ///     otherwise.
+  bool Fail() const;
+
+  /// Access the error value.
+  ///
+  /// \return
+  ///     The error value.
+  ValueType GetError() const;
+
+  /// Access the error type.
+  ///
+  /// \return
+  ///     The error type enumeration value.
+  lldb::ErrorType GetType() const;
+
+  /// Set accessor from a kern_return_t.
+  ///
+  /// Set accesssor for the error value to \a err and the error type to \c
+  /// MachKernel.
+  ///
+  /// \param[in] err
+  ///     A mach error code.
+  void SetMachError(uint32_t err);
+
+  void SetExpressionError(lldb::ExpressionResults, const char *mssg);
+
+  int SetExpressionErrorWithFormat(lldb::ExpressionResults, const char *format,
+                                   ...) __attribute__((format(printf, 3, 4)));
+
+  /// Set accesssor with an error value and type.
+  ///
+  /// Set accesssor for the error value to \a err and the error type to \a
+  /// type.
+  ///
+  /// \param[in] err
+  ///     A mach error code.
+  ///
+  /// \param[in] type
+  ///     The type for \a err.
+  void SetError(ValueType err, lldb::ErrorType type);
+
+  /// Set the current error to errno.
+  ///
+  /// Update the error value to be \c errno and update the type to be \c
+  /// Status::POSIX.
+  void SetErrorToErrno();
+
+  /// Set the current error to a generic error.
+  ///
+  /// Update the error value to be \c LLDB_GENERIC_ERROR and update the type
+  /// to be \c Status::Generic.
+  void SetErrorToGenericError();
+
+  /// Set the current error string to \a err_str.
+  ///
+  /// Set accessor for the error string value for a generic errors, or to
+  /// supply additional details above and beyond the standard error strings
+  /// that the standard type callbacks typically provide. This allows custom
+  /// strings to be supplied as an error explanation. The error string value
+  /// will remain until the error value is cleared or a new error value/type
+  /// is assigned.
+  ///
+  /// \param err_str
+  ///     The new custom error string to copy and cache.
+  void SetErrorString(llvm::StringRef err_str);
+
+  /// Set the current error string to a formatted error string.
+  ///
+  /// \param format
+  ///     A printf style format string
+  int SetErrorStringWithFormat(const char *format, ...)
+      __attribute__((format(printf, 2, 3)));
+
+  int SetErrorStringWithVarArg(const char *format, va_list args);
+
+  template <typename... Args>
+  void SetErrorStringWithFormatv(const char *format, Args &&... args) {
+    SetErrorString(llvm::formatv(format, std::forward<Args>(args)...).str());
+  }
+
+  /// Test for success condition.
+  ///
+  /// Returns true if the error code in this object is considered a successful
+  /// return value.
+  ///
+  /// \return
+  ///     \b true if this object contains an value that describes
+  ///     success (non-erro), \b false otherwise.
+  bool Success() const;
+
+  /// Test for a failure due to a generic interrupt.
+  ///
+  /// Returns true if the error code in this object was caused by an
+  /// interrupt. At present only supports Posix EINTR.
+  ///
+  /// \return
+  ///     \b true if this object contains an value that describes
+  ///     failure due to interrupt, \b false otherwise.
+  bool WasInterrupted() const;
+
+protected:
+  /// Member variables
+  ValueType m_code;             ///< Status code as an integer value.
+  lldb::ErrorType m_type;       ///< The type of the above error code.
+  mutable std::string m_string; ///< A string representation of the error code.
+};
+
+} // namespace lldb_private
+
+namespace llvm {
+template <> struct format_provider<lldb_private::Status> {
+  static void format(const lldb_private::Status &error, llvm::raw_ostream &OS,
+                     llvm::StringRef Options);
+};
+}
+
+#endif // #ifndef LLDB_UTILITY_STATUS_H
diff --git a/linux-x64/clang/include/lldb/Utility/Stream.h b/linux-x64/clang/include/lldb/Utility/Stream.h
new file mode 100644
index 0000000..b24d4e4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Stream.h
@@ -0,0 +1,528 @@
+//===-- Stream.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Stream_h_
+#define liblldb_Stream_h_
+
+#include "lldb/Utility/Flags.h"
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/raw_ostream.h"
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <type_traits>
+
+namespace lldb_private {
+
+/// \class Stream Stream.h "lldb/Utility/Stream.h"
+/// A stream class that can stream formatted output to a file.
+class Stream {
+public:
+  /// \a m_flags bit values.
+  enum {
+    eBinary = (1 << 0) ///< Get and put data as binary instead of as the default
+                       /// string mode.
+  };
+
+  /// Utility class for counting the bytes that were written to a stream in a
+  /// certain time span.
+  /// \example
+  ///   ByteDelta delta(*this);
+  ///   WriteDataToStream("foo");
+  ///   return *delta;
+  /// \endcode
+  class ByteDelta {
+    Stream *m_stream;
+    /// Bytes we have written so far when ByteDelta was created.
+    size_t m_start;
+
+  public:
+    ByteDelta(Stream &s) : m_stream(&s), m_start(s.GetWrittenBytes()) {}
+    /// Returns the number of bytes written to the given Stream since this
+    /// ByteDelta object was created.
+    size_t operator*() const { return m_stream->GetWrittenBytes() - m_start; }
+  };
+
+  /// Construct with flags and address size and byte order.
+  ///
+  /// Construct with dump flags \a flags and the default address size. \a
+  /// flags can be any of the above enumeration logical OR'ed together.
+  Stream(uint32_t flags, uint32_t addr_size, lldb::ByteOrder byte_order);
+
+  /// Construct a default Stream, not binary, host byte order and host addr
+  /// size.
+  ///
+  Stream();
+
+  // FIXME: Streams should not be copyable.
+  Stream(const Stream &other) : m_forwarder(*this) { (*this) = other; }
+
+  Stream &operator=(const Stream &rhs) {
+    m_flags = rhs.m_flags;
+    m_addr_size = rhs.m_addr_size;
+    m_byte_order = rhs.m_byte_order;
+    m_indent_level = rhs.m_indent_level;
+    return *this;
+  }
+
+  /// Destructor
+  virtual ~Stream();
+
+  // Subclasses must override these methods
+
+  /// Flush the stream.
+  ///
+  /// Subclasses should flush the stream to make any output appear if the
+  /// stream has any buffering.
+  virtual void Flush() = 0;
+
+  /// Output character bytes to the stream.
+  ///
+  /// Appends \a src_len characters from the buffer \a src to the stream.
+  ///
+  /// \param[in] src
+  ///     A buffer containing at least \a src_len bytes of data.
+  ///
+  /// \param[in] src_len
+  ///     A number of bytes to append to the stream.
+  ///
+  /// \return
+  ///     The number of bytes that were appended to the stream.
+  size_t Write(const void *src, size_t src_len) {
+    size_t appended_byte_count = WriteImpl(src, src_len);
+    m_bytes_written += appended_byte_count;
+    return appended_byte_count;
+  }
+
+  size_t GetWrittenBytes() const { return m_bytes_written; }
+
+  // Member functions
+  size_t PutChar(char ch);
+
+  /// Set the byte_order value.
+  ///
+  /// Sets the byte order of the data to extract. Extracted values will be
+  /// swapped if necessary when decoding.
+  ///
+  /// \param[in] byte_order
+  ///     The byte order value to use when extracting data.
+  ///
+  /// \return
+  ///     The old byte order value.
+  lldb::ByteOrder SetByteOrder(lldb::ByteOrder byte_order);
+
+  /// Format a C string from a printf style format and variable arguments and
+  /// encode and append the resulting C string as hex bytes.
+  ///
+  /// \param[in] format
+  ///     A printf style format string.
+  ///
+  /// \param[in] ...
+  ///     Any additional arguments needed for the printf format string.
+  ///
+  /// \return
+  ///     The number of bytes that were appended to the stream.
+  size_t PrintfAsRawHex8(const char *format, ...)
+      __attribute__((__format__(__printf__, 2, 3)));
+
+  /// Append an uint8_t value in the hexadecimal format to the stream.
+  ///
+  /// \param[in] uvalue
+  ///     The value to append.
+  ///
+  /// \return
+  ///     The number of bytes that were appended to the stream.
+  size_t PutHex8(uint8_t uvalue);
+
+  size_t PutNHex8(size_t n, uint8_t uvalue);
+
+  size_t PutHex16(uint16_t uvalue,
+                  lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+  size_t PutHex32(uint32_t uvalue,
+                  lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+  size_t PutHex64(uint64_t uvalue,
+                  lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+  size_t PutMaxHex64(uint64_t uvalue, size_t byte_size,
+                     lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+  size_t PutFloat(float f,
+                  lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+  size_t PutDouble(double d,
+                   lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+  size_t PutLongDouble(long double ld,
+                       lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+  size_t PutPointer(void *ptr);
+
+  // Append \a src_len bytes from \a src to the stream as hex characters (two
+  // ascii characters per byte of input data)
+  size_t
+  PutBytesAsRawHex8(const void *src, size_t src_len,
+                    lldb::ByteOrder src_byte_order = lldb::eByteOrderInvalid,
+                    lldb::ByteOrder dst_byte_order = lldb::eByteOrderInvalid);
+
+  // Append \a src_len bytes from \a s to the stream as binary data.
+  size_t PutRawBytes(const void *s, size_t src_len,
+                     lldb::ByteOrder src_byte_order = lldb::eByteOrderInvalid,
+                     lldb::ByteOrder dst_byte_order = lldb::eByteOrderInvalid);
+
+  size_t PutStringAsRawHex8(llvm::StringRef s);
+
+  /// Output a NULL terminated C string \a cstr to the stream \a s.
+  ///
+  /// \param[in] cstr
+  ///     A NULL terminated C string.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(const char *cstr);
+
+  Stream &operator<<(llvm::StringRef str);
+
+  /// Output a pointer value \a p to the stream \a s.
+  ///
+  /// \param[in] p
+  ///     A void pointer.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(const void *p);
+
+  /// Output a character \a ch to the stream \a s.
+  ///
+  /// \param[in] ch
+  ///     A printable character value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(char ch);
+
+  /// Output a uint8_t \a uval to the stream \a s.
+  ///
+  /// \param[in] uval
+  ///     A uint8_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(uint8_t uval);
+
+  /// Output a uint16_t \a uval to the stream \a s.
+  ///
+  /// \param[in] uval
+  ///     A uint16_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(uint16_t uval);
+
+  /// Output a uint32_t \a uval to the stream \a s.
+  ///
+  /// \param[in] uval
+  ///     A uint32_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(uint32_t uval);
+
+  /// Output a uint64_t \a uval to the stream \a s.
+  ///
+  /// \param[in] uval
+  ///     A uint64_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(uint64_t uval);
+
+  /// Output a int8_t \a sval to the stream \a s.
+  ///
+  /// \param[in] sval
+  ///     A int8_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(int8_t sval);
+
+  /// Output a int16_t \a sval to the stream \a s.
+  ///
+  /// \param[in] sval
+  ///     A int16_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(int16_t sval);
+
+  /// Output a int32_t \a sval to the stream \a s.
+  ///
+  /// \param[in] sval
+  ///     A int32_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(int32_t sval);
+
+  /// Output a int64_t \a sval to the stream \a s.
+  ///
+  /// \param[in] sval
+  ///     A int64_t value.
+  ///
+  /// \return
+  ///     A reference to this class so multiple things can be streamed
+  ///     in one statement.
+  Stream &operator<<(int64_t sval);
+
+  /// Output an address value to this stream.
+  ///
+  /// Put an address \a addr out to the stream with optional \a prefix and \a
+  /// suffix strings.
+  ///
+  /// \param[in] addr
+  ///     An address value.
+  ///
+  /// \param[in] addr_size
+  ///     Size in bytes of the address, used for formatting.
+  ///
+  /// \param[in] prefix
+  ///     A prefix C string. If nullptr, no prefix will be output.
+  ///
+  /// \param[in] suffix
+  ///     A suffix C string. If nullptr, no suffix will be output.
+  void Address(uint64_t addr, uint32_t addr_size, const char *prefix = nullptr,
+               const char *suffix = nullptr);
+
+  /// Output an address range to this stream.
+  ///
+  /// Put an address range \a lo_addr - \a hi_addr out to the stream with
+  /// optional \a prefix and \a suffix strings.
+  ///
+  /// \param[in] lo_addr
+  ///     The start address of the address range.
+  ///
+  /// \param[in] hi_addr
+  ///     The end address of the address range.
+  ///
+  /// \param[in] addr_size
+  ///     Size in bytes of the address, used for formatting.
+  ///
+  /// \param[in] prefix
+  ///     A prefix C string. If nullptr, no prefix will be output.
+  ///
+  /// \param[in] suffix
+  ///     A suffix C string. If nullptr, no suffix will be output.
+  void AddressRange(uint64_t lo_addr, uint64_t hi_addr, uint32_t addr_size,
+                    const char *prefix = nullptr, const char *suffix = nullptr);
+
+  /// Output a C string to the stream.
+  ///
+  /// Print a C string \a cstr to the stream.
+  ///
+  /// \param[in] cstr
+  ///     The string to be output to the stream.
+  size_t PutCString(llvm::StringRef cstr);
+
+  /// Output and End of Line character to the stream.
+  size_t EOL();
+
+  /// Get the address size in bytes.
+  ///
+  /// \return
+  ///     The size of an address in bytes that is used when outputting
+  ///     address and pointer values to the stream.
+  uint32_t GetAddressByteSize() const;
+
+  /// The flags accessor.
+  ///
+  /// \return
+  ///     A reference to the Flags member variable.
+  Flags &GetFlags();
+
+  /// The flags const accessor.
+  ///
+  /// \return
+  ///     A const reference to the Flags member variable.
+  const Flags &GetFlags() const;
+
+  //// The byte order accessor.
+  ////
+  //// \return
+  ////     The byte order.
+  lldb::ByteOrder GetByteOrder() const;
+
+  /// Get the current indentation level.
+  ///
+  /// \return
+  ///     The current indentation level as an integer.
+  int GetIndentLevel() const;
+
+  /// Indent the current line in the stream.
+  ///
+  /// Indent the current line using the current indentation level and print an
+  /// optional string following the indentation spaces.
+  ///
+  /// \param[in] s
+  ///     A C string to print following the indentation. If nullptr, just
+  ///     output the indentation characters.
+  size_t Indent(const char *s = nullptr);
+  size_t Indent(llvm::StringRef s);
+
+  /// Decrement the current indentation level.
+  void IndentLess(int amount = 2);
+
+  /// Increment the current indentation level.
+  void IndentMore(int amount = 2);
+
+  /// Output an offset value.
+  ///
+  /// Put an offset \a uval out to the stream using the printf format in \a
+  /// format.
+  ///
+  /// \param[in] offset
+  ///     The offset value.
+  ///
+  /// \param[in] format
+  ///     The printf style format to use when outputting the offset.
+  void Offset(uint32_t offset, const char *format = "0x%8.8x: ");
+
+  /// Output printf formatted output to the stream.
+  ///
+  /// Print some formatted output to the stream.
+  ///
+  /// \param[in] format
+  ///     A printf style format string.
+  ///
+  /// \param[in] ...
+  ///     Variable arguments that are needed for the printf style
+  ///     format string \a format.
+  size_t Printf(const char *format, ...) __attribute__((format(printf, 2, 3)));
+
+  size_t PrintfVarArg(const char *format, va_list args);
+
+  template <typename... Args> void Format(const char *format, Args &&... args) {
+    PutCString(llvm::formatv(format, std::forward<Args>(args)...).str());
+  }
+
+  /// Output a quoted C string value to the stream.
+  ///
+  /// Print a double quoted NULL terminated C string to the stream using the
+  /// printf format in \a format.
+  ///
+  /// \param[in] cstr
+  ///     A NULL terminated C string value.
+  ///
+  /// \param[in] format
+  ///     The optional C string format that can be overridden.
+  void QuotedCString(const char *cstr, const char *format = "\"%s\"");
+
+  /// Set the address size in bytes.
+  ///
+  /// \param[in] addr_size
+  ///     The new size in bytes of an address to use when outputting
+  ///     address and pointer values.
+  void SetAddressByteSize(uint32_t addr_size);
+
+  /// Set the current indentation level.
+  ///
+  /// \param[in] level
+  ///     The new indentation level.
+  void SetIndentLevel(int level);
+
+  /// Output a SLEB128 number to the stream.
+  ///
+  /// Put an SLEB128 \a uval out to the stream using the printf format in \a
+  /// format.
+  ///
+  /// \param[in] uval
+  ///     A uint64_t value that was extracted as a SLEB128 value.
+  size_t PutSLEB128(int64_t uval);
+
+  /// Output a ULEB128 number to the stream.
+  ///
+  /// Put an ULEB128 \a uval out to the stream using the printf format in \a
+  /// format.
+  ///
+  /// \param[in] uval
+  ///     A uint64_t value that was extracted as a ULEB128 value.
+  size_t PutULEB128(uint64_t uval);
+
+  /// Returns a raw_ostream that forwards the data to this Stream object.
+  llvm::raw_ostream &AsRawOstream() {
+    return m_forwarder;
+  }
+
+protected:
+  // Member variables
+  Flags m_flags;        ///< Dump flags.
+  uint32_t m_addr_size; ///< Size of an address in bytes.
+  lldb::ByteOrder
+      m_byte_order;   ///< Byte order to use when encoding scalar types.
+  int m_indent_level; ///< Indention level.
+  std::size_t m_bytes_written = 0; ///< Number of bytes written so far.
+
+  void _PutHex8(uint8_t uvalue, bool add_prefix);
+
+  /// Output character bytes to the stream.
+  ///
+  /// Appends \a src_len characters from the buffer \a src to the stream.
+  ///
+  /// \param[in] src
+  ///     A buffer containing at least \a src_len bytes of data.
+  ///
+  /// \param[in] src_len
+  ///     A number of bytes to append to the stream.
+  ///
+  /// \return
+  ///     The number of bytes that were appended to the stream.
+  virtual size_t WriteImpl(const void *src, size_t src_len) = 0;
+
+  /// \class RawOstreamForward Stream.h "lldb/Utility/Stream.h"
+  /// This is a wrapper class that exposes a raw_ostream interface that just
+  /// forwards to an LLDB stream, allowing to reuse LLVM algorithms that take
+  /// a raw_ostream within the LLDB code base.
+  class RawOstreamForward : public llvm::raw_ostream {
+    // Note: This stream must *not* maintain its own buffer, but instead
+    // directly write everything to the internal Stream class. Without this,
+    // we would run into the problem that the Stream written byte count would
+    // differ from the actually written bytes by the size of the internal
+    // raw_ostream buffer.
+
+    Stream &m_target;
+    void write_impl(const char *Ptr, size_t Size) override {
+      m_target.Write(Ptr, Size);
+    }
+
+    uint64_t current_pos() const override {
+      return m_target.GetWrittenBytes();
+    }
+
+  public:
+    RawOstreamForward(Stream &target)
+        : llvm::raw_ostream(/*unbuffered*/ true), m_target(target) {}
+  };
+  RawOstreamForward m_forwarder;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Stream_h_
diff --git a/linux-x64/clang/include/lldb/Utility/StreamCallback.h b/linux-x64/clang/include/lldb/Utility/StreamCallback.h
new file mode 100644
index 0000000..6dbee67
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StreamCallback.h
@@ -0,0 +1,35 @@
+//===-- StreamCallback.h -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StreamCallback_h_
+#define liblldb_StreamCallback_h_
+
+#include "lldb/lldb-types.h"
+#include "llvm/Support/raw_ostream.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+
+class StreamCallback : public llvm::raw_ostream {
+public:
+  StreamCallback(lldb::LogOutputCallback callback, void *baton);
+  ~StreamCallback() override = default;
+
+private:
+  lldb::LogOutputCallback m_callback;
+  void *m_baton;
+
+  void write_impl(const char *Ptr, size_t Size) override;
+  uint64_t current_pos() const override;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StreamCallback_h
diff --git a/linux-x64/clang/include/lldb/Utility/StreamGDBRemote.h b/linux-x64/clang/include/lldb/Utility/StreamGDBRemote.h
new file mode 100644
index 0000000..dd0ea31
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StreamGDBRemote.h
@@ -0,0 +1,45 @@
+//===-- StreamGDBRemote.h ----------------------------------------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StreamGDBRemote_h_
+#define liblldb_StreamGDBRemote_h_
+
+#include "lldb/Utility/StreamString.h"
+#include "lldb/lldb-enumerations.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+
+class StreamGDBRemote : public StreamString {
+public:
+  StreamGDBRemote();
+
+  StreamGDBRemote(uint32_t flags, uint32_t addr_size,
+                  lldb::ByteOrder byte_order);
+
+  ~StreamGDBRemote() override;
+
+  /// Output a block of data to the stream performing GDB-remote escaping.
+  ///
+  /// \param[in] s
+  ///     A block of data.
+  ///
+  /// \param[in] src_len
+  ///     The amount of data to write.
+  ///
+  /// \return
+  ///     Number of bytes written.
+  // TODO: Convert this function to take ArrayRef<uint8_t>
+  int PutEscapedBytes(const void *s, size_t src_len);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StreamGDBRemote_h_
diff --git a/linux-x64/clang/include/lldb/Utility/StreamString.h b/linux-x64/clang/include/lldb/Utility/StreamString.h
new file mode 100644
index 0000000..581e102
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StreamString.h
@@ -0,0 +1,54 @@
+//===-- StreamString.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StreamString_h_
+#define liblldb_StreamString_h_
+
+#include "lldb/Utility/Stream.h"
+#include "lldb/lldb-enumerations.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <string>
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace lldb_private {
+
+class StreamString : public Stream {
+public:
+  StreamString();
+
+  StreamString(uint32_t flags, uint32_t addr_size, lldb::ByteOrder byte_order);
+
+  ~StreamString() override;
+
+  void Flush() override;
+
+  void Clear();
+
+  bool Empty() const;
+
+  size_t GetSize() const;
+
+  size_t GetSizeOfLastLine() const;
+
+  llvm::StringRef GetString() const;
+
+  const char *GetData() const { return m_packet.c_str(); }
+
+  void FillLastLineToColumn(uint32_t column, char fill_char);
+
+protected:
+  std::string m_packet;
+  size_t WriteImpl(const void *s, size_t length) override;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StreamString_h_
diff --git a/linux-x64/clang/include/lldb/Utility/StreamTee.h b/linux-x64/clang/include/lldb/Utility/StreamTee.h
new file mode 100644
index 0000000..92e94d4
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StreamTee.h
@@ -0,0 +1,140 @@
+//===-- StreamTee.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StreamTee_h_
+#define liblldb_StreamTee_h_
+
+#include <limits.h>
+
+#include <mutex>
+
+#include "lldb/Utility/Stream.h"
+
+namespace lldb_private {
+
+class StreamTee : public Stream {
+public:
+  StreamTee() : Stream(), m_streams_mutex(), m_streams() {}
+
+  StreamTee(lldb::StreamSP &stream_sp)
+      : Stream(), m_streams_mutex(), m_streams() {
+    // No need to lock mutex during construction
+    if (stream_sp)
+      m_streams.push_back(stream_sp);
+  }
+
+  StreamTee(lldb::StreamSP &stream_sp, lldb::StreamSP &stream_2_sp)
+      : Stream(), m_streams_mutex(), m_streams() {
+    // No need to lock mutex during construction
+    if (stream_sp)
+      m_streams.push_back(stream_sp);
+    if (stream_2_sp)
+      m_streams.push_back(stream_2_sp);
+  }
+
+  StreamTee(const StreamTee &rhs)
+      : Stream(rhs), m_streams_mutex(), m_streams() {
+    // Don't copy until we lock down "rhs"
+    std::lock_guard<std::recursive_mutex> guard(rhs.m_streams_mutex);
+    m_streams = rhs.m_streams;
+  }
+
+  ~StreamTee() override {}
+
+  StreamTee &operator=(const StreamTee &rhs) {
+    if (this != &rhs) {
+      Stream::operator=(rhs);
+      std::lock(m_streams_mutex, rhs.m_streams_mutex);
+      std::lock_guard<std::recursive_mutex> lhs_locker(m_streams_mutex,
+                                                       std::adopt_lock);
+      std::lock_guard<std::recursive_mutex> rhs_locker(rhs.m_streams_mutex,
+                                                       std::adopt_lock);
+      m_streams = rhs.m_streams;
+    }
+    return *this;
+  }
+
+  void Flush() override {
+    std::lock_guard<std::recursive_mutex> guard(m_streams_mutex);
+    collection::iterator pos, end;
+    for (pos = m_streams.begin(), end = m_streams.end(); pos != end; ++pos) {
+      // Allow for our collection to contain NULL streams. This allows the
+      // StreamTee to be used with hard coded indexes for clients that might
+      // want N total streams with only a few that are set to valid values.
+      Stream *strm = pos->get();
+      if (strm)
+        strm->Flush();
+    }
+  }
+
+  size_t AppendStream(const lldb::StreamSP &stream_sp) {
+    size_t new_idx = m_streams.size();
+    std::lock_guard<std::recursive_mutex> guard(m_streams_mutex);
+    m_streams.push_back(stream_sp);
+    return new_idx;
+  }
+
+  size_t GetNumStreams() const {
+    size_t result = 0;
+    {
+      std::lock_guard<std::recursive_mutex> guard(m_streams_mutex);
+      result = m_streams.size();
+    }
+    return result;
+  }
+
+  lldb::StreamSP GetStreamAtIndex(uint32_t idx) {
+    lldb::StreamSP stream_sp;
+    std::lock_guard<std::recursive_mutex> guard(m_streams_mutex);
+    if (idx < m_streams.size())
+      stream_sp = m_streams[idx];
+    return stream_sp;
+  }
+
+  void SetStreamAtIndex(uint32_t idx, const lldb::StreamSP &stream_sp) {
+    std::lock_guard<std::recursive_mutex> guard(m_streams_mutex);
+    // Resize our stream vector as necessary to fit as many streams as needed.
+    // This also allows this class to be used with hard coded indexes that can
+    // be used contain many streams, not all of which are valid.
+    if (idx >= m_streams.size())
+      m_streams.resize(idx + 1);
+    m_streams[idx] = stream_sp;
+  }
+
+protected:
+  typedef std::vector<lldb::StreamSP> collection;
+  mutable std::recursive_mutex m_streams_mutex;
+  collection m_streams;
+
+  size_t WriteImpl(const void *s, size_t length) override {
+    std::lock_guard<std::recursive_mutex> guard(m_streams_mutex);
+    if (m_streams.empty())
+      return 0;
+
+    size_t min_bytes_written = SIZE_MAX;
+    collection::iterator pos, end;
+    for (pos = m_streams.begin(), end = m_streams.end(); pos != end; ++pos) {
+      // Allow for our collection to contain NULL streams. This allows the
+      // StreamTee to be used with hard coded indexes for clients that might
+      // want N total streams with only a few that are set to valid values.
+      Stream *strm = pos->get();
+      if (strm) {
+        const size_t bytes_written = strm->Write(s, length);
+        if (min_bytes_written > bytes_written)
+          min_bytes_written = bytes_written;
+      }
+    }
+    if (min_bytes_written == SIZE_MAX)
+      return 0;
+    return min_bytes_written;
+  }
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StreamTee_h_
diff --git a/linux-x64/clang/include/lldb/Utility/StringExtractor.h b/linux-x64/clang/include/lldb/Utility/StringExtractor.h
new file mode 100644
index 0000000..f20ec92
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StringExtractor.h
@@ -0,0 +1,124 @@
+//===-- StringExtractor.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_StringExtractor_h_
+#define utility_StringExtractor_h_
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string>
+
+class StringExtractor {
+public:
+  enum { BigEndian = 0, LittleEndian = 1 };
+  // Constructors and Destructors
+  StringExtractor();
+  StringExtractor(llvm::StringRef packet_str);
+  StringExtractor(const char *packet_cstr);
+  virtual ~StringExtractor();
+
+  void Reset(llvm::StringRef str) {
+    m_packet = str;
+    m_index = 0;
+  }
+
+  // Returns true if the file position is still valid for the data contained in
+  // this string extractor object.
+  bool IsGood() const { return m_index != UINT64_MAX; }
+
+  uint64_t GetFilePos() const { return m_index; }
+
+  void SetFilePos(uint32_t idx) { m_index = idx; }
+
+  void Clear() {
+    m_packet.clear();
+    m_index = 0;
+  }
+
+  void SkipSpaces();
+
+  std::string &GetStringRef() { return m_packet; }
+
+  const std::string &GetStringRef() const { return m_packet; }
+
+  bool Empty() { return m_packet.empty(); }
+
+  size_t GetBytesLeft() {
+    if (m_index < m_packet.size())
+      return m_packet.size() - m_index;
+    return 0;
+  }
+
+  char GetChar(char fail_value = '\0');
+
+  char PeekChar(char fail_value = '\0') {
+    const char *cstr = Peek();
+    if (cstr)
+      return cstr[0];
+    return fail_value;
+  }
+
+  int DecodeHexU8();
+
+  uint8_t GetHexU8(uint8_t fail_value = 0, bool set_eof_on_fail = true);
+
+  bool GetHexU8Ex(uint8_t &ch, bool set_eof_on_fail = true);
+
+  bool GetNameColonValue(llvm::StringRef &name, llvm::StringRef &value);
+
+  int32_t GetS32(int32_t fail_value, int base = 0);
+
+  uint32_t GetU32(uint32_t fail_value, int base = 0);
+
+  int64_t GetS64(int64_t fail_value, int base = 0);
+
+  uint64_t GetU64(uint64_t fail_value, int base = 0);
+
+  uint32_t GetHexMaxU32(bool little_endian, uint32_t fail_value);
+
+  uint64_t GetHexMaxU64(bool little_endian, uint64_t fail_value);
+
+  size_t GetHexBytes(llvm::MutableArrayRef<uint8_t> dest,
+                     uint8_t fail_fill_value);
+
+  size_t GetHexBytesAvail(llvm::MutableArrayRef<uint8_t> dest);
+
+  uint64_t GetHexWithFixedSize(uint32_t byte_size, bool little_endian,
+                               uint64_t fail_value);
+
+  size_t GetHexByteString(std::string &str);
+
+  size_t GetHexByteStringFixedLength(std::string &str, uint32_t nibble_length);
+
+  size_t GetHexByteStringTerminatedBy(std::string &str, char terminator);
+
+  bool ConsumeFront(const llvm::StringRef &str);
+
+  const char *Peek() {
+    if (m_index < m_packet.size())
+      return m_packet.c_str() + m_index;
+    return nullptr;
+  }
+
+protected:
+  bool fail() {
+    m_index = UINT64_MAX;
+    return false;
+  }
+  // For StringExtractor only
+  std::string m_packet; // The string in which to extract data.
+  uint64_t m_index;     // When extracting data from a packet, this index
+                        // will march along as things get extracted. If set to
+                        // UINT64_MAX the end of the packet data was reached
+                        // when decoding information
+};
+
+#endif // utility_StringExtractor_h_
diff --git a/linux-x64/clang/include/lldb/Utility/StringExtractorGDBRemote.h b/linux-x64/clang/include/lldb/Utility/StringExtractorGDBRemote.h
new file mode 100644
index 0000000..cbf6e0c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StringExtractorGDBRemote.h
@@ -0,0 +1,203 @@
+//===-- StringExtractorGDBRemote.h ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H
+#define LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H
+
+#include "lldb/Utility/Status.h"
+#include "lldb/Utility/StringExtractor.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <string>
+
+#include <stddef.h>
+#include <stdint.h>
+
+class StringExtractorGDBRemote : public StringExtractor {
+public:
+  typedef bool (*ResponseValidatorCallback)(
+      void *baton, const StringExtractorGDBRemote &response);
+
+  StringExtractorGDBRemote() : StringExtractor(), m_validator(nullptr) {}
+
+  StringExtractorGDBRemote(llvm::StringRef str)
+      : StringExtractor(str), m_validator(nullptr) {}
+
+  StringExtractorGDBRemote(const char *cstr)
+      : StringExtractor(cstr), m_validator(nullptr) {}
+
+  StringExtractorGDBRemote(const StringExtractorGDBRemote &rhs)
+      : StringExtractor(rhs), m_validator(rhs.m_validator) {}
+
+  ~StringExtractorGDBRemote() override {}
+
+  bool ValidateResponse() const;
+
+  void CopyResponseValidator(const StringExtractorGDBRemote &rhs);
+
+  void SetResponseValidator(ResponseValidatorCallback callback, void *baton);
+
+  void SetResponseValidatorToOKErrorNotSupported();
+
+  void SetResponseValidatorToASCIIHexBytes();
+
+  void SetResponseValidatorToJSON();
+
+  enum ServerPacketType {
+    eServerPacketType_nack = 0,
+    eServerPacketType_ack,
+    eServerPacketType_invalid,
+    eServerPacketType_unimplemented,
+    eServerPacketType_interrupt, // CTRL+c packet or "\x03"
+    eServerPacketType_A,         // Program arguments packet
+    eServerPacketType_qfProcessInfo,
+    eServerPacketType_qsProcessInfo,
+    eServerPacketType_qC,
+    eServerPacketType_qEcho,
+    eServerPacketType_qGroupName,
+    eServerPacketType_qHostInfo,
+    eServerPacketType_qLaunchGDBServer,
+    eServerPacketType_qQueryGDBServer,
+    eServerPacketType_qKillSpawnedProcess,
+    eServerPacketType_qLaunchSuccess,
+    eServerPacketType_qModuleInfo,
+    eServerPacketType_qProcessInfoPID,
+    eServerPacketType_qSpeedTest,
+    eServerPacketType_qUserName,
+    eServerPacketType_qGetWorkingDir,
+    eServerPacketType_qFileLoadAddress,
+    eServerPacketType_QEnvironment,
+    eServerPacketType_QEnableErrorStrings,
+    eServerPacketType_QLaunchArch,
+    eServerPacketType_QSetDisableASLR,
+    eServerPacketType_QSetDetachOnError,
+    eServerPacketType_QSetSTDIN,
+    eServerPacketType_QSetSTDOUT,
+    eServerPacketType_QSetSTDERR,
+    eServerPacketType_QSetWorkingDir,
+    eServerPacketType_QStartNoAckMode,
+    eServerPacketType_qPlatform_shell,
+    eServerPacketType_qPlatform_mkdir,
+    eServerPacketType_qPlatform_chmod,
+    eServerPacketType_vFile_open,
+    eServerPacketType_vFile_close,
+    eServerPacketType_vFile_pread,
+    eServerPacketType_vFile_pwrite,
+    eServerPacketType_vFile_size,
+    eServerPacketType_vFile_mode,
+    eServerPacketType_vFile_exists,
+    eServerPacketType_vFile_md5,
+    eServerPacketType_vFile_stat,
+    eServerPacketType_vFile_symlink,
+    eServerPacketType_vFile_unlink,
+    // debug server packages
+    eServerPacketType_QEnvironmentHexEncoded,
+    eServerPacketType_QListThreadsInStopReply,
+    eServerPacketType_QPassSignals,
+    eServerPacketType_QRestoreRegisterState,
+    eServerPacketType_QSaveRegisterState,
+    eServerPacketType_QSetLogging,
+    eServerPacketType_QSetMaxPacketSize,
+    eServerPacketType_QSetMaxPayloadSize,
+    eServerPacketType_QSetEnableAsyncProfiling,
+    eServerPacketType_QSyncThreadState,
+    eServerPacketType_QThreadSuffixSupported,
+
+    eServerPacketType_jThreadsInfo,
+    eServerPacketType_qsThreadInfo,
+    eServerPacketType_qfThreadInfo,
+    eServerPacketType_qGetPid,
+    eServerPacketType_qGetProfileData,
+    eServerPacketType_qGDBServerVersion,
+    eServerPacketType_qMemoryRegionInfo,
+    eServerPacketType_qMemoryRegionInfoSupported,
+    eServerPacketType_qProcessInfo,
+    eServerPacketType_qRcmd,
+    eServerPacketType_qRegisterInfo,
+    eServerPacketType_qShlibInfoAddr,
+    eServerPacketType_qStepPacketSupported,
+    eServerPacketType_qSupported,
+    eServerPacketType_qSyncThreadStateSupported,
+    eServerPacketType_qThreadExtraInfo,
+    eServerPacketType_qThreadStopInfo,
+    eServerPacketType_qVAttachOrWaitSupported,
+    eServerPacketType_qWatchpointSupportInfo,
+    eServerPacketType_qWatchpointSupportInfoSupported,
+    eServerPacketType_qXfer,
+
+    eServerPacketType_jSignalsInfo,
+    eServerPacketType_jModulesInfo,
+
+    eServerPacketType_vAttach,
+    eServerPacketType_vAttachWait,
+    eServerPacketType_vAttachOrWait,
+    eServerPacketType_vAttachName,
+    eServerPacketType_vCont,
+    eServerPacketType_vCont_actions, // vCont?
+
+    eServerPacketType_stop_reason, // '?'
+
+    eServerPacketType_c,
+    eServerPacketType_C,
+    eServerPacketType_D,
+    eServerPacketType_g,
+    eServerPacketType_G,
+    eServerPacketType_H,
+    eServerPacketType_I, // stdin notification
+    eServerPacketType_k,
+    eServerPacketType_m,
+    eServerPacketType_M,
+    eServerPacketType_p,
+    eServerPacketType_P,
+    eServerPacketType_s,
+    eServerPacketType_S,
+    eServerPacketType_T,
+    eServerPacketType_x,
+    eServerPacketType_X,
+    eServerPacketType_Z,
+    eServerPacketType_z,
+
+    eServerPacketType__M,
+    eServerPacketType__m,
+    eServerPacketType_notify, // '%' notification
+
+    eServerPacketType_jTraceStart,
+    eServerPacketType_jTraceBufferRead,
+    eServerPacketType_jTraceMetaRead,
+    eServerPacketType_jTraceStop,
+    eServerPacketType_jTraceConfigRead,
+  };
+
+  ServerPacketType GetServerPacketType() const;
+
+  enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse };
+
+  ResponseType GetResponseType() const;
+
+  bool IsOKResponse() const;
+
+  bool IsUnsupportedResponse() const;
+
+  bool IsNormalResponse() const;
+
+  bool IsErrorResponse() const;
+
+  // Returns zero if the packet isn't a EXX packet where XX are two hex digits.
+  // Otherwise the error encoded in XX is returned.
+  uint8_t GetError();
+
+  lldb_private::Status GetStatus();
+
+  size_t GetEscapedBinaryData(std::string &str);
+
+protected:
+  ResponseValidatorCallback m_validator;
+  void *m_validator_baton;
+};
+
+#endif // LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H
diff --git a/linux-x64/clang/include/lldb/Utility/StringLexer.h b/linux-x64/clang/include/lldb/Utility/StringLexer.h
new file mode 100644
index 0000000..d9806c1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StringLexer.h
@@ -0,0 +1,56 @@
+//===--------------------- StringLexer.h ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_StringLexer_h_
+#define utility_StringLexer_h_
+
+#include <initializer_list>
+#include <string>
+#include <utility>
+
+namespace lldb_utility {
+
+class StringLexer {
+public:
+  typedef std::string::size_type Position;
+  typedef std::string::size_type Size;
+
+  typedef std::string::value_type Character;
+
+  StringLexer(std::string s);
+
+  // These APIs are not bounds-checked.  Use HasAtLeast() if you're not sure.
+  Character Peek();
+
+  bool NextIf(Character c);
+
+  std::pair<bool, Character> NextIf(std::initializer_list<Character> cs);
+
+  bool AdvanceIf(const std::string &token);
+
+  Character Next();
+
+  bool HasAtLeast(Size s);
+
+  std::string GetUnlexed();
+
+  // This will assert if there are less than s characters preceding the cursor.
+  void PutBack(Size s);
+
+  StringLexer &operator=(const StringLexer &rhs);
+
+private:
+  std::string m_data;
+  Position m_position;
+
+  void Consume();
+};
+
+} // namespace lldb_private
+
+#endif // #ifndef utility_StringLexer_h_
diff --git a/linux-x64/clang/include/lldb/Utility/StringList.h b/linux-x64/clang/include/lldb/Utility/StringList.h
new file mode 100644
index 0000000..68c1f87
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StringList.h
@@ -0,0 +1,133 @@
+//===-- StringList.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StringList_h_
+#define liblldb_StringList_h_
+
+#include "llvm/ADT/StringRef.h"
+
+#include <stddef.h>
+#include <string>
+#include <vector>
+
+namespace lldb_private {
+class Log;
+class Stream;
+}
+
+namespace lldb_private {
+
+class StringList {
+public:
+  StringList();
+
+  explicit StringList(const char *str);
+
+  StringList(const char **strv, int strc);
+
+  virtual ~StringList();
+
+  void AppendString(const std::string &s);
+
+  void AppendString(std::string &&s);
+
+  void AppendString(const char *str);
+
+  void AppendString(const char *str, size_t str_len);
+
+  void AppendString(llvm::StringRef str);
+
+  void AppendList(const char **strv, int strc);
+
+  void AppendList(StringList strings);
+
+  size_t GetSize() const;
+
+  void SetSize(size_t n) { m_strings.resize(n); }
+
+  size_t GetMaxStringLength() const;
+
+  std::string &operator[](size_t idx) {
+    // No bounds checking, verify "idx" is good prior to calling this function
+    return m_strings[idx];
+  }
+
+  const std::string &operator[](size_t idx) const {
+    // No bounds checking, verify "idx" is good prior to calling this function
+    return m_strings[idx];
+  }
+
+  void PopBack() { m_strings.pop_back(); }
+  const char *GetStringAtIndex(size_t idx) const;
+
+  void Join(const char *separator, Stream &strm);
+
+  void Clear();
+
+  void LongestCommonPrefix(std::string &common_prefix);
+
+  void InsertStringAtIndex(size_t idx, const std::string &str);
+
+  void InsertStringAtIndex(size_t idx, std::string &&str);
+
+  void InsertStringAtIndex(size_t id, const char *str);
+
+  void DeleteStringAtIndex(size_t id);
+
+  void RemoveBlankLines();
+
+  size_t SplitIntoLines(const std::string &lines);
+
+  size_t SplitIntoLines(const char *lines, size_t len);
+
+  std::string CopyList(const char *item_preamble = nullptr,
+                       const char *items_sep = "\n") const;
+
+  StringList &operator<<(const char *str);
+
+  StringList &operator<<(const std::string &s);
+
+  StringList &operator<<(StringList strings);
+
+  // Copy assignment for a vector of strings
+  StringList &operator=(const std::vector<std::string> &rhs);
+
+  // This string list contains a list of valid auto completion strings, and the
+  // "s" is passed in. "matches" is filled in with zero or more string values
+  // that start with "s", and the first string to exactly match one of the
+  // string values in this collection, will have "exact_matches_idx" filled in
+  // to match the index, or "exact_matches_idx" will have SIZE_MAX
+  size_t AutoComplete(llvm::StringRef s, StringList &matches,
+                      size_t &exact_matches_idx) const;
+
+  // Dump the StringList to the given lldb_private::Log, `log`, one item per
+  // line. If given, `name` will be used to identify the start and end of the
+  // list in the output.
+  virtual void LogDump(Log *log, const char *name = nullptr);
+
+  // Static helper to convert an iterable of strings to a StringList, and then
+  // dump it with the semantics of the `LogDump` method.
+  template <typename T>
+  static void LogDump(Log *log, T s_iterable, const char *name = nullptr) {
+    if (!log)
+      return;
+    // Make a copy of the iterable as a StringList
+    StringList l{};
+    for (const auto &s : s_iterable)
+      l << s;
+
+    l.LogDump(log, name);
+  }
+
+private:
+  std::vector<std::string> m_strings;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StringList_h_
diff --git a/linux-x64/clang/include/lldb/Utility/StructuredData.h b/linux-x64/clang/include/lldb/Utility/StructuredData.h
new file mode 100644
index 0000000..75eb2f7
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/StructuredData.h
@@ -0,0 +1,551 @@
+//===-- StructuredData.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_StructuredData_h_
+#define liblldb_StructuredData_h_
+
+#include "llvm/ADT/StringRef.h"
+
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/lldb-enumerations.h"
+
+#include <cassert>
+#include <cstddef>
+#include <cstdint>
+#include <functional>
+#include <map>
+#include <memory>
+#include <string>
+#include <type_traits>
+#include <utility>
+#include <vector>
+
+namespace lldb_private {
+class Status;
+class Stream;
+}
+
+namespace lldb_private {
+
+/// \class StructuredData StructuredData.h "lldb/Utility/StructuredData.h"
+/// A class which can hold structured data
+///
+/// The StructuredData class is designed to hold the data from a JSON or plist
+/// style file -- a serialized data structure with dictionaries (maps,
+/// hashes), arrays, and concrete values like integers, floating point
+/// numbers, strings, booleans.
+///
+/// StructuredData does not presuppose any knowledge of the schema for the
+/// data it is holding; it can parse JSON data, for instance, and other parts
+/// of lldb can iterate through the parsed data set to find keys and values
+/// that may be present.
+
+class StructuredData {
+public:
+  class Object;
+  class Array;
+  class Integer;
+  class Float;
+  class Boolean;
+  class String;
+  class Dictionary;
+  class Generic;
+
+  typedef std::shared_ptr<Object> ObjectSP;
+  typedef std::shared_ptr<Array> ArraySP;
+  typedef std::shared_ptr<Integer> IntegerSP;
+  typedef std::shared_ptr<Float> FloatSP;
+  typedef std::shared_ptr<Boolean> BooleanSP;
+  typedef std::shared_ptr<String> StringSP;
+  typedef std::shared_ptr<Dictionary> DictionarySP;
+  typedef std::shared_ptr<Generic> GenericSP;
+
+  class Object : public std::enable_shared_from_this<Object> {
+  public:
+    Object(lldb::StructuredDataType t = lldb::eStructuredDataTypeInvalid)
+        : m_type(t) {}
+
+    virtual ~Object() = default;
+
+    virtual bool IsValid() const { return true; }
+
+    virtual void Clear() { m_type = lldb::eStructuredDataTypeInvalid; }
+
+    lldb::StructuredDataType GetType() const { return m_type; }
+
+    void SetType(lldb::StructuredDataType t) { m_type = t; }
+
+    Array *GetAsArray() {
+      return ((m_type == lldb::eStructuredDataTypeArray)
+                  ? static_cast<Array *>(this)
+                  : nullptr);
+    }
+
+    Dictionary *GetAsDictionary() {
+      return ((m_type == lldb::eStructuredDataTypeDictionary)
+                  ? static_cast<Dictionary *>(this)
+                  : nullptr);
+    }
+
+    Integer *GetAsInteger() {
+      return ((m_type == lldb::eStructuredDataTypeInteger)
+                  ? static_cast<Integer *>(this)
+                  : nullptr);
+    }
+
+    uint64_t GetIntegerValue(uint64_t fail_value = 0) {
+      Integer *integer = GetAsInteger();
+      return ((integer != nullptr) ? integer->GetValue() : fail_value);
+    }
+
+    Float *GetAsFloat() {
+      return ((m_type == lldb::eStructuredDataTypeFloat)
+                  ? static_cast<Float *>(this)
+                  : nullptr);
+    }
+
+    double GetFloatValue(double fail_value = 0.0) {
+      Float *f = GetAsFloat();
+      return ((f != nullptr) ? f->GetValue() : fail_value);
+    }
+
+    Boolean *GetAsBoolean() {
+      return ((m_type == lldb::eStructuredDataTypeBoolean)
+                  ? static_cast<Boolean *>(this)
+                  : nullptr);
+    }
+
+    bool GetBooleanValue(bool fail_value = false) {
+      Boolean *b = GetAsBoolean();
+      return ((b != nullptr) ? b->GetValue() : fail_value);
+    }
+
+    String *GetAsString() {
+      return ((m_type == lldb::eStructuredDataTypeString)
+                  ? static_cast<String *>(this)
+                  : nullptr);
+    }
+
+    llvm::StringRef GetStringValue(const char *fail_value = nullptr) {
+      String *s = GetAsString();
+      if (s)
+        return s->GetValue();
+
+      return fail_value;
+    }
+
+    Generic *GetAsGeneric() {
+      return ((m_type == lldb::eStructuredDataTypeGeneric)
+                  ? static_cast<Generic *>(this)
+                  : nullptr);
+    }
+
+    ObjectSP GetObjectForDotSeparatedPath(llvm::StringRef path);
+
+    void DumpToStdout(bool pretty_print = true) const;
+
+    virtual void Dump(Stream &s, bool pretty_print = true) const = 0;
+
+  private:
+    lldb::StructuredDataType m_type;
+  };
+
+  class Array : public Object {
+  public:
+    Array() : Object(lldb::eStructuredDataTypeArray) {}
+
+    ~Array() override = default;
+
+    bool
+    ForEach(std::function<bool(Object *object)> const &foreach_callback) const {
+      for (const auto &object_sp : m_items) {
+        if (!foreach_callback(object_sp.get()))
+          return false;
+      }
+      return true;
+    }
+
+    size_t GetSize() const { return m_items.size(); }
+
+    ObjectSP operator[](size_t idx) {
+      if (idx < m_items.size())
+        return m_items[idx];
+      return ObjectSP();
+    }
+
+    ObjectSP GetItemAtIndex(size_t idx) const {
+      assert(idx < GetSize());
+      if (idx < m_items.size())
+        return m_items[idx];
+      return ObjectSP();
+    }
+
+    template <class IntType>
+    bool GetItemAtIndexAsInteger(size_t idx, IntType &result) const {
+      ObjectSP value_sp = GetItemAtIndex(idx);
+      if (value_sp.get()) {
+        if (auto int_value = value_sp->GetAsInteger()) {
+          result = static_cast<IntType>(int_value->GetValue());
+          return true;
+        }
+      }
+      return false;
+    }
+
+    template <class IntType>
+    bool GetItemAtIndexAsInteger(size_t idx, IntType &result,
+                                 IntType default_val) const {
+      bool success = GetItemAtIndexAsInteger(idx, result);
+      if (!success)
+        result = default_val;
+      return success;
+    }
+
+    bool GetItemAtIndexAsString(size_t idx, llvm::StringRef &result) const {
+      ObjectSP value_sp = GetItemAtIndex(idx);
+      if (value_sp.get()) {
+        if (auto string_value = value_sp->GetAsString()) {
+          result = string_value->GetValue();
+          return true;
+        }
+      }
+      return false;
+    }
+
+    bool GetItemAtIndexAsString(size_t idx, llvm::StringRef &result,
+                                llvm::StringRef default_val) const {
+      bool success = GetItemAtIndexAsString(idx, result);
+      if (!success)
+        result = default_val;
+      return success;
+    }
+
+    bool GetItemAtIndexAsString(size_t idx, ConstString &result) const {
+      ObjectSP value_sp = GetItemAtIndex(idx);
+      if (value_sp.get()) {
+        if (auto string_value = value_sp->GetAsString()) {
+          result = ConstString(string_value->GetValue());
+          return true;
+        }
+      }
+      return false;
+    }
+
+    bool GetItemAtIndexAsString(size_t idx, ConstString &result,
+                                const char *default_val) const {
+      bool success = GetItemAtIndexAsString(idx, result);
+      if (!success)
+        result.SetCString(default_val);
+      return success;
+    }
+
+    bool GetItemAtIndexAsDictionary(size_t idx, Dictionary *&result) const {
+      result = nullptr;
+      ObjectSP value_sp = GetItemAtIndex(idx);
+      if (value_sp.get()) {
+        result = value_sp->GetAsDictionary();
+        return (result != nullptr);
+      }
+      return false;
+    }
+
+    bool GetItemAtIndexAsArray(size_t idx, Array *&result) const {
+      result = nullptr;
+      ObjectSP value_sp = GetItemAtIndex(idx);
+      if (value_sp.get()) {
+        result = value_sp->GetAsArray();
+        return (result != nullptr);
+      }
+      return false;
+    }
+
+    void Push(ObjectSP item) { m_items.push_back(item); }
+
+    void AddItem(ObjectSP item) { m_items.push_back(item); }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+
+  protected:
+    typedef std::vector<ObjectSP> collection;
+    collection m_items;
+  };
+
+  class Integer : public Object {
+  public:
+    Integer(uint64_t i = 0)
+        : Object(lldb::eStructuredDataTypeInteger), m_value(i) {}
+
+    ~Integer() override = default;
+
+    void SetValue(uint64_t value) { m_value = value; }
+
+    uint64_t GetValue() { return m_value; }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+
+  protected:
+    uint64_t m_value;
+  };
+
+  class Float : public Object {
+  public:
+    Float(double d = 0.0)
+        : Object(lldb::eStructuredDataTypeFloat), m_value(d) {}
+
+    ~Float() override = default;
+
+    void SetValue(double value) { m_value = value; }
+
+    double GetValue() { return m_value; }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+
+  protected:
+    double m_value;
+  };
+
+  class Boolean : public Object {
+  public:
+    Boolean(bool b = false)
+        : Object(lldb::eStructuredDataTypeBoolean), m_value(b) {}
+
+    ~Boolean() override = default;
+
+    void SetValue(bool value) { m_value = value; }
+
+    bool GetValue() { return m_value; }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+
+  protected:
+    bool m_value;
+  };
+
+  class String : public Object {
+  public:
+    String() : Object(lldb::eStructuredDataTypeString) {}
+    explicit String(llvm::StringRef S)
+        : Object(lldb::eStructuredDataTypeString), m_value(S) {}
+
+    void SetValue(llvm::StringRef S) { m_value = S; }
+
+    llvm::StringRef GetValue() { return m_value; }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+
+  protected:
+    std::string m_value;
+  };
+
+  class Dictionary : public Object {
+  public:
+    Dictionary() : Object(lldb::eStructuredDataTypeDictionary), m_dict() {}
+
+    ~Dictionary() override = default;
+
+    size_t GetSize() const { return m_dict.size(); }
+
+    void ForEach(std::function<bool(ConstString key, Object *object)> const
+                     &callback) const {
+      for (const auto &pair : m_dict) {
+        if (!callback(pair.first, pair.second.get()))
+          break;
+      }
+    }
+
+    ObjectSP GetKeys() const {
+      auto object_sp = std::make_shared<Array>();
+      collection::const_iterator iter;
+      for (iter = m_dict.begin(); iter != m_dict.end(); ++iter) {
+        auto key_object_sp = std::make_shared<String>();
+        key_object_sp->SetValue(iter->first.AsCString());
+        object_sp->Push(key_object_sp);
+      }
+      return object_sp;
+    }
+
+    ObjectSP GetValueForKey(llvm::StringRef key) const {
+      ObjectSP value_sp;
+      if (!key.empty()) {
+        ConstString key_cs(key);
+        collection::const_iterator iter = m_dict.find(key_cs);
+        if (iter != m_dict.end())
+          value_sp = iter->second;
+      }
+      return value_sp;
+    }
+
+    bool GetValueForKeyAsBoolean(llvm::StringRef key, bool &result) const {
+      bool success = false;
+      ObjectSP value_sp = GetValueForKey(key);
+      if (value_sp.get()) {
+        Boolean *result_ptr = value_sp->GetAsBoolean();
+        if (result_ptr) {
+          result = result_ptr->GetValue();
+          success = true;
+        }
+      }
+      return success;
+    }
+    template <class IntType>
+    bool GetValueForKeyAsInteger(llvm::StringRef key, IntType &result) const {
+      ObjectSP value_sp = GetValueForKey(key);
+      if (value_sp) {
+        if (auto int_value = value_sp->GetAsInteger()) {
+          result = static_cast<IntType>(int_value->GetValue());
+          return true;
+        }
+      }
+      return false;
+    }
+
+    template <class IntType>
+    bool GetValueForKeyAsInteger(llvm::StringRef key, IntType &result,
+                                 IntType default_val) const {
+      bool success = GetValueForKeyAsInteger<IntType>(key, result);
+      if (!success)
+        result = default_val;
+      return success;
+    }
+
+    bool GetValueForKeyAsString(llvm::StringRef key,
+                                llvm::StringRef &result) const {
+      ObjectSP value_sp = GetValueForKey(key);
+      if (value_sp.get()) {
+        if (auto string_value = value_sp->GetAsString()) {
+          result = string_value->GetValue();
+          return true;
+        }
+      }
+      return false;
+    }
+
+    bool GetValueForKeyAsString(llvm::StringRef key, llvm::StringRef &result,
+                                const char *default_val) const {
+      bool success = GetValueForKeyAsString(key, result);
+      if (!success) {
+        if (default_val)
+          result = default_val;
+        else
+          result = llvm::StringRef();
+      }
+      return success;
+    }
+
+    bool GetValueForKeyAsString(llvm::StringRef key,
+                                ConstString &result) const {
+      ObjectSP value_sp = GetValueForKey(key);
+      if (value_sp.get()) {
+        if (auto string_value = value_sp->GetAsString()) {
+          result = ConstString(string_value->GetValue());
+          return true;
+        }
+      }
+      return false;
+    }
+
+    bool GetValueForKeyAsString(llvm::StringRef key, ConstString &result,
+                                const char *default_val) const {
+      bool success = GetValueForKeyAsString(key, result);
+      if (!success)
+        result.SetCString(default_val);
+      return success;
+    }
+
+    bool GetValueForKeyAsDictionary(llvm::StringRef key,
+                                    Dictionary *&result) const {
+      result = nullptr;
+      ObjectSP value_sp = GetValueForKey(key);
+      if (value_sp.get()) {
+        result = value_sp->GetAsDictionary();
+        return (result != nullptr);
+      }
+      return false;
+    }
+
+    bool GetValueForKeyAsArray(llvm::StringRef key, Array *&result) const {
+      result = nullptr;
+      ObjectSP value_sp = GetValueForKey(key);
+      if (value_sp.get()) {
+        result = value_sp->GetAsArray();
+        return (result != nullptr);
+      }
+      return false;
+    }
+
+    bool HasKey(llvm::StringRef key) const {
+      ConstString key_cs(key);
+      collection::const_iterator search = m_dict.find(key_cs);
+      return search != m_dict.end();
+    }
+
+    void AddItem(llvm::StringRef key, ObjectSP value_sp) {
+      ConstString key_cs(key);
+      m_dict[key_cs] = value_sp;
+    }
+
+    void AddIntegerItem(llvm::StringRef key, uint64_t value) {
+      AddItem(key, std::make_shared<Integer>(value));
+    }
+
+    void AddFloatItem(llvm::StringRef key, double value) {
+      AddItem(key, std::make_shared<Float>(value));
+    }
+
+    void AddStringItem(llvm::StringRef key, llvm::StringRef value) {
+      AddItem(key, std::make_shared<String>(std::move(value)));
+    }
+
+    void AddBooleanItem(llvm::StringRef key, bool value) {
+      AddItem(key, std::make_shared<Boolean>(value));
+    }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+
+  protected:
+    typedef std::map<ConstString, ObjectSP> collection;
+    collection m_dict;
+  };
+
+  class Null : public Object {
+  public:
+    Null() : Object(lldb::eStructuredDataTypeNull) {}
+
+    ~Null() override = default;
+
+    bool IsValid() const override { return false; }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+  };
+
+  class Generic : public Object {
+  public:
+    explicit Generic(void *object = nullptr)
+        : Object(lldb::eStructuredDataTypeGeneric), m_object(object) {}
+
+    void SetValue(void *value) { m_object = value; }
+
+    void *GetValue() const { return m_object; }
+
+    bool IsValid() const override { return m_object != nullptr; }
+
+    void Dump(Stream &s, bool pretty_print = true) const override;
+
+  private:
+    void *m_object;
+  };
+
+  static ObjectSP ParseJSON(std::string json_text);
+
+  static ObjectSP ParseJSONFromFile(const FileSpec &file, Status &error);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_StructuredData_h_
diff --git a/linux-x64/clang/include/lldb/Utility/TildeExpressionResolver.h b/linux-x64/clang/include/lldb/Utility/TildeExpressionResolver.h
new file mode 100644
index 0000000..196fdfc
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/TildeExpressionResolver.h
@@ -0,0 +1,64 @@
+//===--------------------- TildeExpressionResolver.h ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H
+#define LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/StringSet.h"
+
+namespace llvm {
+template <typename T> class SmallVectorImpl;
+}
+
+namespace lldb_private {
+class TildeExpressionResolver {
+public:
+  virtual ~TildeExpressionResolver();
+
+  /// Resolve a Tilde Expression contained according to bash rules.
+  ///
+  /// \param Expr Contains the tilde expression to resolve.  A valid tilde
+  ///             expression must begin with a tilde and contain only non
+  ///             separator characters.
+  ///
+  /// \param Output Contains the resolved tilde expression, or the original
+  ///               input if the tilde expression could not be resolved.
+  ///
+  /// \returns true if \p Expr was successfully resolved, false otherwise.
+  virtual bool ResolveExact(llvm::StringRef Expr,
+                            llvm::SmallVectorImpl<char> &Output) = 0;
+
+  /// Auto-complete a tilde expression with all matching values.
+  ///
+  /// \param Expr Contains the tilde expression prefix to resolve.  See
+  ///             ResolveExact() for validity rules.
+  ///
+  /// \param Output Contains all matching home directories, each one
+  ///               itself unresolved (i.e. you need to call ResolveExact
+  ///               on each item to turn it into a real path).
+  ///
+  /// \returns true if there were any matches, false otherwise.
+  virtual bool ResolvePartial(llvm::StringRef Expr,
+                              llvm::StringSet<> &Output) = 0;
+
+  /// Resolve an entire path that begins with a tilde expression, replacing
+  /// the username portion with the matched result.
+  bool ResolveFullPath(llvm::StringRef Expr,
+                       llvm::SmallVectorImpl<char> &Output);
+};
+
+class StandardTildeExpressionResolver : public TildeExpressionResolver {
+public:
+  bool ResolveExact(llvm::StringRef Expr,
+                    llvm::SmallVectorImpl<char> &Output) override;
+  bool ResolvePartial(llvm::StringRef Expr, llvm::StringSet<> &Output) override;
+};
+}
+
+#endif // #ifndef LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H
diff --git a/linux-x64/clang/include/lldb/Utility/Timeout.h b/linux-x64/clang/include/lldb/Utility/Timeout.h
new file mode 100644
index 0000000..202b747
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Timeout.h
@@ -0,0 +1,70 @@
+//===-- Timeout.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Timeout_h_
+#define liblldb_Timeout_h_
+
+#include "llvm/ADT/Optional.h"
+#include "llvm/Support/Chrono.h"
+#include "llvm/Support/FormatProviders.h"
+
+namespace lldb_private {
+
+// A general purpose class for representing timeouts for various APIs. It's
+// basically an llvm::Optional<std::chrono::duration<int64_t, Ratio>>, but we
+// customize it a bit to enable the standard chrono implicit conversions (e.g.
+// from Timeout<std::milli> to Timeout<std::micro>.
+//
+// The intended meaning of the values is:
+// - llvm::None - no timeout, the call should wait forever - 0 - poll, only
+// complete the call if it will not block - >0 - wait for a given number of
+// units for the result
+template <typename Ratio>
+class Timeout : public llvm::Optional<std::chrono::duration<int64_t, Ratio>> {
+private:
+  template <typename Ratio2> using Dur = std::chrono::duration<int64_t, Ratio2>;
+  template <typename Rep2, typename Ratio2>
+  using EnableIf = std::enable_if<
+      std::is_convertible<std::chrono::duration<Rep2, Ratio2>,
+                          std::chrono::duration<int64_t, Ratio>>::value>;
+
+  using Base = llvm::Optional<Dur<Ratio>>;
+
+public:
+  Timeout(llvm::NoneType none) : Base(none) {}
+  Timeout(const Timeout &other) = default;
+
+  template <typename Ratio2,
+            typename = typename EnableIf<int64_t, Ratio2>::type>
+  Timeout(const Timeout<Ratio2> &other)
+      : Base(other ? Base(Dur<Ratio>(*other)) : llvm::None) {}
+
+  template <typename Rep2, typename Ratio2,
+            typename = typename EnableIf<Rep2, Ratio2>::type>
+  Timeout(const std::chrono::duration<Rep2, Ratio2> &other)
+      : Base(Dur<Ratio>(other)) {}
+};
+
+} // namespace lldb_private
+
+namespace llvm {
+template<typename Ratio>
+struct format_provider<lldb_private::Timeout<Ratio>, void> {
+  static void format(const lldb_private::Timeout<Ratio> &timeout,
+                     raw_ostream &OS, StringRef Options) {
+    typedef typename lldb_private::Timeout<Ratio>::value_type Dur;
+
+    if (!timeout)
+      OS << "<infinite>";
+    else
+      format_provider<Dur>::format(*timeout, OS, Options);
+  }
+};
+}
+
+#endif // liblldb_Timeout_h_
diff --git a/linux-x64/clang/include/lldb/Utility/Timer.h b/linux-x64/clang/include/lldb/Utility/Timer.h
new file mode 100644
index 0000000..ad9421a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/Timer.h
@@ -0,0 +1,74 @@
+//===-- Timer.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Timer_h_
+#define liblldb_Timer_h_
+
+#include "lldb/lldb-defines.h"
+#include "llvm/Support/Chrono.h"
+#include <atomic>
+#include <stdint.h>
+
+namespace lldb_private {
+class Stream;
+
+/// \class Timer Timer.h "lldb/Utility/Timer.h"
+/// A timer class that simplifies common timing metrics.
+
+class Timer {
+public:
+  class Category {
+  public:
+    explicit Category(const char *category_name);
+
+  private:
+    friend class Timer;
+    const char *m_name;
+    std::atomic<uint64_t> m_nanos;
+    std::atomic<uint64_t> m_nanos_total;
+    std::atomic<uint64_t> m_count;
+    std::atomic<Category *> m_next;
+
+    DISALLOW_COPY_AND_ASSIGN(Category);
+  };
+
+  /// Default constructor.
+  Timer(Category &category, const char *format, ...)
+      __attribute__((format(printf, 3, 4)));
+
+  /// Destructor
+  ~Timer();
+
+  void Dump();
+
+  static void SetDisplayDepth(uint32_t depth);
+
+  static void SetQuiet(bool value);
+
+  static void DumpCategoryTimes(Stream *s);
+
+  static void ResetCategoryTimes();
+
+protected:
+  using TimePoint = std::chrono::steady_clock::time_point;
+  void ChildDuration(TimePoint::duration dur) { m_child_duration += dur; }
+
+  Category &m_category;
+  TimePoint m_total_start;
+  TimePoint::duration m_child_duration{0};
+
+  static std::atomic<bool> g_quiet;
+  static std::atomic<unsigned> g_display_depth;
+
+private:
+  DISALLOW_COPY_AND_ASSIGN(Timer);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Timer_h_
diff --git a/linux-x64/clang/include/lldb/Utility/TraceOptions.h b/linux-x64/clang/include/lldb/Utility/TraceOptions.h
new file mode 100644
index 0000000..d5e21cc
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/TraceOptions.h
@@ -0,0 +1,60 @@
+//===-- TraceOptions.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_TraceOptions_h_
+#define liblldb_TraceOptions_h_
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+class TraceOptions {
+public:
+  TraceOptions() : m_trace_params(new StructuredData::Dictionary()) {}
+
+  const StructuredData::DictionarySP &getTraceParams() const {
+    return m_trace_params;
+  }
+
+  lldb::TraceType getType() const { return m_type; }
+
+  uint64_t getTraceBufferSize() const { return m_trace_buffer_size; }
+
+  uint64_t getMetaDataBufferSize() const { return m_meta_data_buffer_size; }
+
+  void setTraceParams(const StructuredData::DictionarySP &dict_obj) {
+    m_trace_params = dict_obj;
+  }
+
+  void setType(lldb::TraceType type) { m_type = type; }
+
+  void setTraceBufferSize(uint64_t size) { m_trace_buffer_size = size; }
+
+  void setMetaDataBufferSize(uint64_t size) { m_meta_data_buffer_size = size; }
+
+  void setThreadID(lldb::tid_t thread_id) { m_thread_id = thread_id; }
+
+  lldb::tid_t getThreadID() const { return m_thread_id; }
+
+private:
+  lldb::TraceType m_type;
+  uint64_t m_trace_buffer_size;
+  uint64_t m_meta_data_buffer_size;
+  lldb::tid_t m_thread_id;
+
+  /// m_trace_params is meant to hold any custom parameters
+  /// apart from meta buffer size and trace size.
+  /// The interpretation of such parameters is left to
+  /// the lldb-server.
+  StructuredData::DictionarySP m_trace_params;
+};
+}
+
+#endif // liblldb_TraceOptions_h_
diff --git a/linux-x64/clang/include/lldb/Utility/UUID.h b/linux-x64/clang/include/lldb/Utility/UUID.h
new file mode 100644
index 0000000..dbeb9db
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/UUID.h
@@ -0,0 +1,124 @@
+//===-- UUID.h --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_UUID_H
+#define LLDB_UTILITY_UUID_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string>
+#include "llvm/ADT/ArrayRef.h"
+
+namespace llvm {
+  class StringRef;
+}
+
+namespace lldb_private {
+
+  class Stream;
+
+class UUID {
+public:
+  UUID() = default;
+
+  /// Creates a UUID from the data pointed to by the bytes argument. No special
+  /// significance is attached to any of the values.
+  static UUID fromData(const void *bytes, uint32_t num_bytes) {
+    if (bytes)
+      return fromData({reinterpret_cast<const uint8_t *>(bytes), num_bytes});
+    return UUID();
+  }
+
+  /// Creates a uuid from the data pointed to by the bytes argument. No special
+  /// significance is attached to any of the values.
+  static UUID fromData(llvm::ArrayRef<uint8_t> bytes) { return UUID(bytes); }
+
+  /// Creates a UUID from the data pointed to by the bytes argument. Data
+  /// consisting purely of zero bytes is treated as an invalid UUID.
+  static UUID fromOptionalData(const void *bytes, uint32_t num_bytes) {
+    if (bytes)
+      return fromOptionalData(
+          {reinterpret_cast<const uint8_t *>(bytes), num_bytes});
+    return UUID();
+  }
+
+  /// Creates a UUID from the data pointed to by the bytes argument. Data
+  /// consisting purely of zero bytes is treated as an invalid UUID.
+  static UUID fromOptionalData(llvm::ArrayRef<uint8_t> bytes) {
+    if (llvm::all_of(bytes, [](uint8_t b) { return b == 0; }))
+      return UUID();
+    return UUID(bytes);
+  }
+
+  void Clear() { m_bytes.clear(); }
+
+  void Dump(Stream *s) const;
+
+  llvm::ArrayRef<uint8_t> GetBytes() const { return m_bytes; }
+
+  explicit operator bool() const { return IsValid(); }
+  bool IsValid() const { return !m_bytes.empty(); }
+
+  std::string GetAsString(llvm::StringRef separator = "-") const;
+
+  size_t SetFromStringRef(llvm::StringRef str, uint32_t num_uuid_bytes = 16);
+  
+  // Same as SetFromStringRef, but if the resultant UUID is all 0 bytes, set the 
+  // UUID to invalid.
+  size_t SetFromOptionalStringRef(llvm::StringRef str, 
+                                  uint32_t num_uuid_bytes = 16);
+
+  // Decode as many UUID bytes (up to 16) as possible from the C string "cstr"
+  // This is used for auto completion where a partial UUID might have been
+  // typed in. It
+  /// Decode as many UUID bytes (up to 16) as possible from the C
+  /// string \a cstr.
+  ///
+  /// \param[in] cstr
+  ///     A NULL terminate C string that points at a UUID string value
+  ///     (no leading spaces). The string must contain only hex
+  ///     characters and optionally can contain the '-' sepearators.
+  ///
+  /// \param[in] uuid_bytes
+  ///     A buffer of bytes that will contain a full or patially
+  ///     decoded UUID.
+  ///
+  /// \return
+  ///     The original string, with all decoded bytes removed.
+  static llvm::StringRef
+  DecodeUUIDBytesFromString(llvm::StringRef str,
+                            llvm::SmallVectorImpl<uint8_t> &uuid_bytes,
+                            uint32_t num_uuid_bytes = 16);
+
+private:
+  UUID(llvm::ArrayRef<uint8_t> bytes) : m_bytes(bytes.begin(), bytes.end()) {}
+
+  // GNU ld generates 20-byte build-ids. Size chosen to avoid heap allocations
+  // for this case.
+  llvm::SmallVector<uint8_t, 20> m_bytes;
+
+  friend bool operator==(const UUID &LHS, const UUID &RHS) {
+    return LHS.m_bytes == RHS.m_bytes;
+  }
+  friend bool operator!=(const UUID &LHS, const UUID &RHS) {
+    return !(LHS == RHS);
+  }
+  friend bool operator<(const UUID &LHS, const UUID &RHS) {
+    return LHS.m_bytes < RHS.m_bytes;
+  }
+  friend bool operator<=(const UUID &LHS, const UUID &RHS) {
+    return !(RHS < LHS);
+  }
+  friend bool operator>(const UUID &LHS, const UUID &RHS) { return RHS < LHS; }
+  friend bool operator>=(const UUID &LHS, const UUID &RHS) {
+    return !(LHS < RHS);
+  }
+};
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_UUID_H
diff --git a/linux-x64/clang/include/lldb/Utility/UriParser.h b/linux-x64/clang/include/lldb/Utility/UriParser.h
new file mode 100644
index 0000000..4a3f012
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/UriParser.h
@@ -0,0 +1,31 @@
+//===-- UriParser.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_UriParser_h_
+#define utility_UriParser_h_
+
+#include "llvm/ADT/StringRef.h"
+
+namespace lldb_private {
+class UriParser {
+public:
+  // Parses
+  // RETURN VALUE
+  //   if url is valid, function returns true and
+  //   scheme/hostname/port/path are set to the parsed values
+  //   port it set to -1 if it is not included in the URL
+  //
+  //   if the url is invalid, function returns false and
+  //   output parameters remain unchanged
+  static bool Parse(llvm::StringRef uri, llvm::StringRef &scheme,
+                    llvm::StringRef &hostname, int &port,
+                    llvm::StringRef &path);
+};
+}
+
+#endif // utility_UriParser_h_
diff --git a/linux-x64/clang/include/lldb/Utility/UserID.h b/linux-x64/clang/include/lldb/Utility/UserID.h
new file mode 100644
index 0000000..2dc5cdb
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/UserID.h
@@ -0,0 +1,93 @@
+//===-- UserID.h ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UserID_h_
+#define liblldb_UserID_h_
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-types.h"
+
+namespace lldb_private {
+class Stream;
+
+/// \class UserID UserID.h "lldb/Core/UserID.h"
+/// A mix in class that contains a generic user ID.
+///
+/// UserID is designed as a mix in class that can contain an integer based
+/// unique identifier for a variety of objects in lldb.
+///
+/// The value for this identifier is chosen by each parser plug-in. A value
+/// should be chosen that makes sense for each kind of object and should allow
+/// quick access to further and more in depth parsing.
+///
+/// Symbol table entries can use this to store the original symbol table
+/// index, functions can use it to store the symbol table index or the
+/// DWARF offset.
+struct UserID {
+  /// Construct with optional user ID.
+  UserID(lldb::user_id_t uid = LLDB_INVALID_UID) : m_uid(uid) {}
+
+  /// Destructor.
+  ~UserID() {}
+
+  /// Clears the object state.
+  ///
+  /// Clears the object contents back to a default invalid state.
+  void Clear() { m_uid = LLDB_INVALID_UID; }
+
+  /// Get accessor for the user ID.
+  ///
+  /// \return
+  ///     The user ID.
+  lldb::user_id_t GetID() const { return m_uid; }
+
+  /// Set accessor for the user ID.
+  ///
+  /// \param[in] uid
+  ///     The new user ID.
+  void SetID(lldb::user_id_t uid) { m_uid = uid; }
+
+  /// Unary predicate function object that can search for a matching user ID.
+  ///
+  /// Function object that can be used on any class that inherits from UserID:
+  /// \code
+  /// iterator pos;
+  /// pos = std::find_if (coll.begin(), coll.end(), UserID::IDMatches(blockID));
+  /// \endcode
+  class IDMatches {
+  public:
+    /// Construct with the user ID to look for.
+    IDMatches(lldb::user_id_t uid) : m_uid(uid) {}
+
+    /// Unary predicate function object callback.
+    bool operator()(const UserID &rhs) const { return m_uid == rhs.GetID(); }
+
+  private:
+    // Member variables.
+    const lldb::user_id_t m_uid; ///< The user ID we are looking for
+  };
+
+protected:
+  // Member variables.
+  lldb::user_id_t m_uid; ///< The user ID that uniquely identifies an object.
+};
+
+inline bool operator==(const UserID &lhs, const UserID &rhs) {
+  return lhs.GetID() == rhs.GetID();
+}
+
+inline bool operator!=(const UserID &lhs, const UserID &rhs) {
+  return lhs.GetID() != rhs.GetID();
+}
+
+/// Stream the UserID object to a Stream.
+Stream &operator<<(Stream &strm, const UserID &uid);
+
+} // namespace lldb_private
+
+#endif // liblldb_UserID_h_
diff --git a/linux-x64/clang/include/lldb/Utility/UserIDResolver.h b/linux-x64/clang/include/lldb/Utility/UserIDResolver.h
new file mode 100644
index 0000000..bca82a1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/UserIDResolver.h
@@ -0,0 +1,56 @@
+//===-- UserIDResolver.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_USERIDRESOLVER_H
+#define LLDB_UTILITY_USERIDRESOLVER_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringRef.h"
+#include <mutex>
+
+namespace lldb_private {
+
+/// An abstract interface for things that know how to map numeric user/group IDs
+/// into names. It caches the resolved names to avoid repeating expensive
+/// queries. The cache is internally protected by a mutex, so concurrent queries
+/// are safe.
+class UserIDResolver {
+public:
+  typedef uint32_t id_t;
+  virtual ~UserIDResolver(); // anchor
+
+  llvm::Optional<llvm::StringRef> GetUserName(id_t uid) {
+    return Get(uid, m_uid_cache, &UserIDResolver::DoGetUserName);
+  }
+  llvm::Optional<llvm::StringRef> GetGroupName(id_t gid) {
+    return Get(gid, m_gid_cache, &UserIDResolver::DoGetGroupName);
+  }
+
+  /// Returns a resolver which returns a failure value for each query. Useful as
+  /// a fallback value for the case when we know all lookups will fail.
+  static UserIDResolver &GetNoopResolver();
+
+protected:
+  virtual llvm::Optional<std::string> DoGetUserName(id_t uid) = 0;
+  virtual llvm::Optional<std::string> DoGetGroupName(id_t gid) = 0;
+
+private:
+  using Map = llvm::DenseMap<id_t, llvm::Optional<std::string>>;
+
+  llvm::Optional<llvm::StringRef>
+  Get(id_t id, Map &cache,
+      llvm::Optional<std::string> (UserIDResolver::*do_get)(id_t));
+
+  std::mutex m_mutex;
+  Map m_uid_cache;
+  Map m_gid_cache;
+};
+
+} // namespace lldb_private
+
+#endif // #ifndef LLDB_HOST_USERIDRESOLVER_H
diff --git a/linux-x64/clang/include/lldb/Utility/VASPrintf.h b/linux-x64/clang/include/lldb/Utility/VASPrintf.h
new file mode 100644
index 0000000..582645f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/VASPrintf.h
@@ -0,0 +1,20 @@
+//===-- VASPrintf.h ---------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_VASPRINTF_H
+#define LLDB_UTILITY_VASPRINTF_H
+
+#include "llvm/ADT/SmallVector.h"
+
+#include <cstdarg>
+
+namespace lldb_private {
+bool VASprintf(llvm::SmallVectorImpl<char> &buf, const char *fmt, va_list args);
+}
+
+#endif // #ifdef LLDB_UTILITY_VASPRINTF_H
diff --git a/linux-x64/clang/include/lldb/Utility/VMRange.h b/linux-x64/clang/include/lldb/Utility/VMRange.h
new file mode 100644
index 0000000..9c2f9d0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/Utility/VMRange.h
@@ -0,0 +1,107 @@
+//===-- VMRange.h -----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_VMRange_h_
+#define liblldb_VMRange_h_
+
+#include "lldb/lldb-types.h"
+
+#include <stddef.h>
+#include <stdint.h>
+#include <vector>
+
+namespace lldb_private {
+class Stream;
+}
+
+namespace lldb_private {
+
+// A vm address range. These can represent offsets ranges or actual
+// addresses.
+class VMRange {
+public:
+  typedef std::vector<VMRange> collection;
+  typedef collection::iterator iterator;
+  typedef collection::const_iterator const_iterator;
+
+  VMRange() : m_base_addr(0), m_byte_size(0) {}
+
+  VMRange(lldb::addr_t start_addr, lldb::addr_t end_addr)
+      : m_base_addr(start_addr),
+        m_byte_size(end_addr > start_addr ? end_addr - start_addr : 0) {}
+
+  ~VMRange() {}
+
+  void Clear() {
+    m_base_addr = 0;
+    m_byte_size = 0;
+  }
+
+  // Set the start and end values
+  void Reset(lldb::addr_t start_addr, lldb::addr_t end_addr) {
+    SetBaseAddress(start_addr);
+    SetEndAddress(end_addr);
+  }
+
+  // Set the start value for the range, and keep the same size
+  void SetBaseAddress(lldb::addr_t base_addr) { m_base_addr = base_addr; }
+
+  void SetEndAddress(lldb::addr_t end_addr) {
+    const lldb::addr_t base_addr = GetBaseAddress();
+    if (end_addr > base_addr)
+      m_byte_size = end_addr - base_addr;
+    else
+      m_byte_size = 0;
+  }
+
+  lldb::addr_t GetByteSize() const { return m_byte_size; }
+
+  void SetByteSize(lldb::addr_t byte_size) { m_byte_size = byte_size; }
+
+  lldb::addr_t GetBaseAddress() const { return m_base_addr; }
+
+  lldb::addr_t GetEndAddress() const { return GetBaseAddress() + m_byte_size; }
+
+  bool IsValid() const { return m_byte_size > 0; }
+
+  bool Contains(lldb::addr_t addr) const {
+    return (GetBaseAddress() <= addr) && (addr < GetEndAddress());
+  }
+
+  bool Contains(const VMRange &range) const {
+    if (Contains(range.GetBaseAddress())) {
+      lldb::addr_t range_end = range.GetEndAddress();
+      return (GetBaseAddress() <= range_end) && (range_end <= GetEndAddress());
+    }
+    return false;
+  }
+
+  void Dump(Stream *s, lldb::addr_t base_addr = 0,
+            uint32_t addr_width = 8) const;
+
+  static bool ContainsValue(const VMRange::collection &coll,
+                            lldb::addr_t value);
+
+  static bool ContainsRange(const VMRange::collection &coll,
+                            const VMRange &range);
+
+protected:
+  lldb::addr_t m_base_addr;
+  lldb::addr_t m_byte_size;
+};
+
+bool operator==(const VMRange &lhs, const VMRange &rhs);
+bool operator!=(const VMRange &lhs, const VMRange &rhs);
+bool operator<(const VMRange &lhs, const VMRange &rhs);
+bool operator<=(const VMRange &lhs, const VMRange &rhs);
+bool operator>(const VMRange &lhs, const VMRange &rhs);
+bool operator>=(const VMRange &lhs, const VMRange &rhs);
+
+} // namespace lldb_private
+
+#endif // liblldb_VMRange_h_
diff --git a/linux-x64/clang/include/lldb/lldb-defines.h b/linux-x64/clang/include/lldb/lldb-defines.h
new file mode 100644
index 0000000..b879644
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-defines.h
@@ -0,0 +1,147 @@
+//===-- lldb-defines.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_defines_h_
+#define LLDB_lldb_defines_h_
+
+#include "lldb/lldb-types.h"
+
+#if defined(_WIN32)
+#if defined(EXPORT_LIBLLDB)
+#define LLDB_API __declspec(dllexport)
+#elif defined(IMPORT_LIBLLDB)
+#define LLDB_API __declspec(dllimport)
+#else
+#define LLDB_API
+#endif
+#else // defined (_WIN32)
+#define LLDB_API
+#endif
+
+#if !defined(INT32_MAX)
+#define INT32_MAX 2147483647
+#endif
+
+#if !defined(UINT32_MAX)
+#define UINT32_MAX 4294967295U
+#endif
+
+#if !defined(UINT64_MAX)
+#define UINT64_MAX 18446744073709551615ULL
+#endif
+
+// LLDB version
+//
+// A build script phase can modify this version number if needed.
+//#define LLDB_VERSION
+//#define LLDB_REVISION
+//#define LLDB_VERSION_STRING
+
+// LLDB defines
+#define LLDB_GENERIC_ERROR UINT32_MAX
+
+// Breakpoints
+#define LLDB_INVALID_BREAK_ID 0
+#define LLDB_DEFAULT_BREAK_SIZE 0
+#define LLDB_BREAK_ID_IS_VALID(bid) ((bid) != (LLDB_INVALID_BREAK_ID))
+#define LLDB_BREAK_ID_IS_INTERNAL(bid) ((bid) < 0)
+
+// Watchpoints
+#define LLDB_INVALID_WATCH_ID 0
+#define LLDB_WATCH_ID_IS_VALID(uid) ((uid) != (LLDB_INVALID_WATCH_ID))
+#define LLDB_WATCH_TYPE_READ (1u << 0)
+#define LLDB_WATCH_TYPE_WRITE (1u << 1)
+#define LLDB_WATCH_TYPE_IS_VALID(type)                                         \
+  ((type | LLDB_WATCH_TYPE_READ) || (type | LLDB_WATCH_TYPE_WRITE))
+
+// Generic Register Numbers
+#define LLDB_REGNUM_GENERIC_PC 0    // Program Counter
+#define LLDB_REGNUM_GENERIC_SP 1    // Stack Pointer
+#define LLDB_REGNUM_GENERIC_FP 2    // Frame Pointer
+#define LLDB_REGNUM_GENERIC_RA 3    // Return Address
+#define LLDB_REGNUM_GENERIC_FLAGS 4 // Processor flags register
+#define LLDB_REGNUM_GENERIC_ARG1                                               \
+  5 // The register that would contain pointer size or less argument 1 (if any)
+#define LLDB_REGNUM_GENERIC_ARG2                                               \
+  6 // The register that would contain pointer size or less argument 2 (if any)
+#define LLDB_REGNUM_GENERIC_ARG3                                               \
+  7 // The register that would contain pointer size or less argument 3 (if any)
+#define LLDB_REGNUM_GENERIC_ARG4                                               \
+  8 // The register that would contain pointer size or less argument 4 (if any)
+#define LLDB_REGNUM_GENERIC_ARG5                                               \
+  9 // The register that would contain pointer size or less argument 5 (if any)
+#define LLDB_REGNUM_GENERIC_ARG6                                               \
+  10 // The register that would contain pointer size or less argument 6 (if any)
+#define LLDB_REGNUM_GENERIC_ARG7                                               \
+  11 // The register that would contain pointer size or less argument 7 (if any)
+#define LLDB_REGNUM_GENERIC_ARG8                                               \
+  12 // The register that would contain pointer size or less argument 8 (if any)
+/// Invalid value definitions
+#define LLDB_INVALID_ADDRESS UINT64_MAX
+#define LLDB_INVALID_INDEX32 UINT32_MAX
+#define LLDB_INVALID_IVAR_OFFSET UINT32_MAX
+#define LLDB_INVALID_IMAGE_TOKEN UINT32_MAX
+#define LLDB_INVALID_MODULE_VERSION UINT32_MAX
+#define LLDB_INVALID_REGNUM UINT32_MAX
+#define LLDB_INVALID_UID UINT64_MAX
+#define LLDB_INVALID_PROCESS_ID 0
+#define LLDB_INVALID_THREAD_ID 0
+#define LLDB_INVALID_FRAME_ID UINT32_MAX
+#define LLDB_INVALID_SIGNAL_NUMBER INT32_MAX
+#define LLDB_INVALID_OFFSET UINT64_MAX // Must match max of lldb::offset_t
+#define LLDB_INVALID_LINE_NUMBER UINT32_MAX
+#define LLDB_INVALID_QUEUE_ID 0
+
+/// CPU Type definitions
+#define LLDB_ARCH_DEFAULT "systemArch"
+#define LLDB_ARCH_DEFAULT_32BIT "systemArch32"
+#define LLDB_ARCH_DEFAULT_64BIT "systemArch64"
+#define LLDB_INVALID_CPUTYPE (0xFFFFFFFEu)
+
+/// Option Set definitions
+// FIXME: I'm sure there's some #define magic that can create all 32 sets on the
+// fly.  That would have the added benefit of making this unreadable.
+#define LLDB_MAX_NUM_OPTION_SETS 32
+#define LLDB_OPT_SET_ALL 0xFFFFFFFFU
+#define LLDB_OPT_SET_1 (1U << 0)
+#define LLDB_OPT_SET_2 (1U << 1)
+#define LLDB_OPT_SET_3 (1U << 2)
+#define LLDB_OPT_SET_4 (1U << 3)
+#define LLDB_OPT_SET_5 (1U << 4)
+#define LLDB_OPT_SET_6 (1U << 5)
+#define LLDB_OPT_SET_7 (1U << 6)
+#define LLDB_OPT_SET_8 (1U << 7)
+#define LLDB_OPT_SET_9 (1U << 8)
+#define LLDB_OPT_SET_10 (1U << 9)
+#define LLDB_OPT_SET_11 (1U << 10)
+#define LLDB_OPT_SET_FROM_TO(A, B)                                             \
+  (((1U << (B)) - 1) ^ (((1U << (A)) - 1) >> 1))
+
+#if defined(_WIN32) && !defined(MAX_PATH)
+#define MAX_PATH 260
+#endif
+
+// ignore GCC function attributes
+#if defined(_MSC_VER) && !defined(__clang__)
+#define __attribute__(X)
+#endif
+
+#define UNUSED_IF_ASSERT_DISABLED(x) ((void)(x))
+
+#if defined(__cplusplus)
+
+/// \def DISALLOW_COPY_AND_ASSIGN(TypeName)
+///     Macro definition for easily disallowing copy constructor and
+///     assignment operators in C++ classes.
+#define DISALLOW_COPY_AND_ASSIGN(TypeName)                                     \
+  TypeName(const TypeName &) = delete;                                         \
+  const TypeName &operator=(const TypeName &) = delete
+
+#endif // #if defined(__cplusplus)
+
+#endif // LLDB_lldb_defines_h_
diff --git a/linux-x64/clang/include/lldb/lldb-enumerations.h b/linux-x64/clang/include/lldb/lldb-enumerations.h
new file mode 100644
index 0000000..f9830c0
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-enumerations.h
@@ -0,0 +1,1061 @@
+//===-- lldb-enumerations.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_enumerations_h_
+#define LLDB_lldb_enumerations_h_
+
+#include <type_traits>
+
+#ifndef SWIG
+// Macro to enable bitmask operations on an enum.  Without this, Enum | Enum
+// gets promoted to an int, so you have to say Enum a = Enum(eFoo | eBar).  If
+// you mark Enum with LLDB_MARK_AS_BITMASK_ENUM(Enum), however, you can simply
+// write Enum a = eFoo | eBar.
+// Unfortunately, swig<3.0 doesn't recognise the constexpr keyword, so remove
+// this entire block, as it is not necessary for swig processing.
+#define LLDB_MARK_AS_BITMASK_ENUM(Enum)                                        \
+  constexpr Enum operator|(Enum a, Enum b) {                                   \
+    return static_cast<Enum>(                                                  \
+        static_cast<std::underlying_type<Enum>::type>(a) |                     \
+        static_cast<std::underlying_type<Enum>::type>(b));                     \
+  }                                                                            \
+  constexpr Enum operator&(Enum a, Enum b) {                                   \
+    return static_cast<Enum>(                                                  \
+        static_cast<std::underlying_type<Enum>::type>(a) &                     \
+        static_cast<std::underlying_type<Enum>::type>(b));                     \
+  }                                                                            \
+  constexpr Enum operator~(Enum a) {                                           \
+    return static_cast<Enum>(                                                  \
+        ~static_cast<std::underlying_type<Enum>::type>(a));                    \
+  }                                                                            \
+  inline Enum &operator|=(Enum &a, Enum b) {                                   \
+    a = a | b;                                                                 \
+    return a;                                                                  \
+  }                                                                            \
+  inline Enum &operator&=(Enum &a, Enum b) {                                   \
+    a = a & b;                                                                 \
+    return a;                                                                  \
+  }
+#else
+#define LLDB_MARK_AS_BITMASK_ENUM(Enum)
+#endif
+
+#ifndef SWIG
+// With MSVC, the default type of an enum is always signed, even if one of the
+// enumerator values is too large to fit into a signed integer but would
+// otherwise fit into an unsigned integer.  As a result of this, all of LLDB's
+// flag-style enumerations that specify something like eValueFoo = 1u << 31
+// result in negative values.  This usually just results in a benign warning,
+// but in a few places we actually do comparisons on the enum values, which
+// would cause a real bug.  Furthermore, there's no way to silence only this
+// warning, as it's part of -Wmicrosoft which also catches a whole slew of
+// other useful issues.
+//
+// To make matters worse, early versions of SWIG don't recognize the syntax of
+// specifying the underlying type of an enum (and Python doesn't care anyway)
+// so we need a way to specify the underlying type when the enum is being used
+// from C++ code, but just use a regular enum when swig is pre-processing.
+#define FLAGS_ENUM(Name) enum Name : unsigned
+#define FLAGS_ANONYMOUS_ENUM() enum : unsigned
+#else
+#define FLAGS_ENUM(Name) enum Name
+#define FLAGS_ANONYMOUS_ENUM() enum
+#endif
+
+namespace lldb {
+
+// Process and Thread States
+enum StateType {
+  eStateInvalid = 0,
+  eStateUnloaded,  ///< Process is object is valid, but not currently loaded
+  eStateConnected, ///< Process is connected to remote debug services, but not
+                   ///launched or attached to anything yet
+  eStateAttaching, ///< Process is currently trying to attach
+  eStateLaunching, ///< Process is in the process of launching
+  // The state changes eStateAttaching and eStateLaunching are both sent while the
+  // private state thread is either not yet started or paused. For that reason, they
+  // should only be signaled as public state changes, and not private state changes.
+  eStateStopped,   ///< Process or thread is stopped and can be examined.
+  eStateRunning,   ///< Process or thread is running and can't be examined.
+  eStateStepping,  ///< Process or thread is in the process of stepping and can
+                   ///not be examined.
+  eStateCrashed,   ///< Process or thread has crashed and can be examined.
+  eStateDetached,  ///< Process has been detached and can't be examined.
+  eStateExited,    ///< Process has exited and can't be examined.
+  eStateSuspended, ///< Process or thread is in a suspended state as far
+                   ///< as the debugger is concerned while other processes
+                   ///< or threads get the chance to run.
+  kLastStateType = eStateSuspended
+};
+
+// Launch Flags
+FLAGS_ENUM(LaunchFlags){
+    eLaunchFlagNone = 0u,
+    eLaunchFlagExec = (1u << 0),  ///< Exec when launching and turn the calling
+                                  ///process into a new process
+    eLaunchFlagDebug = (1u << 1), ///< Stop as soon as the process launches to
+                                  ///allow the process to be debugged
+    eLaunchFlagStopAtEntry = (1u << 2), ///< Stop at the program entry point
+                                        ///instead of auto-continuing when
+                                        ///launching or attaching at entry point
+    eLaunchFlagDisableASLR =
+        (1u << 3), ///< Disable Address Space Layout Randomization
+    eLaunchFlagDisableSTDIO =
+        (1u << 4), ///< Disable stdio for inferior process (e.g. for a GUI app)
+    eLaunchFlagLaunchInTTY =
+        (1u << 5), ///< Launch the process in a new TTY if supported by the host
+    eLaunchFlagLaunchInShell =
+        (1u << 6), ///< Launch the process inside a shell to get shell expansion
+    eLaunchFlagLaunchInSeparateProcessGroup =
+        (1u << 7), ///< Launch the process in a separate process group
+    eLaunchFlagDontSetExitStatus = (1u << 8), ///< If you are going to hand the
+                                              ///process off (e.g. to
+                                              ///debugserver)
+    ///< set this flag so lldb & the handee don't race to set its exit status.
+    eLaunchFlagDetachOnError = (1u << 9), ///< If set, then the client stub
+                                          ///should detach rather than killing
+                                          ///the debugee
+                                          ///< if it loses connection with lldb.
+    eLaunchFlagShellExpandArguments =
+        (1u << 10), ///< Perform shell-style argument expansion
+    eLaunchFlagCloseTTYOnExit = (1u << 11), ///< Close the open TTY on exit
+};
+
+// Thread Run Modes
+enum RunMode { eOnlyThisThread, eAllThreads, eOnlyDuringStepping };
+
+// Byte ordering definitions
+enum ByteOrder {
+  eByteOrderInvalid = 0,
+  eByteOrderBig = 1,
+  eByteOrderPDP = 2,
+  eByteOrderLittle = 4
+};
+
+// Register encoding definitions
+enum Encoding {
+  eEncodingInvalid = 0,
+  eEncodingUint,    // unsigned integer
+  eEncodingSint,    // signed integer
+  eEncodingIEEE754, // float
+  eEncodingVector   // vector registers
+};
+
+// Display format definitions
+enum Format {
+  eFormatDefault = 0,
+  eFormatInvalid = 0,
+  eFormatBoolean,
+  eFormatBinary,
+  eFormatBytes,
+  eFormatBytesWithASCII,
+  eFormatChar,
+  eFormatCharPrintable, // Only printable characters, space if not printable
+  eFormatComplex,       // Floating point complex type
+  eFormatComplexFloat = eFormatComplex,
+  eFormatCString, // NULL terminated C strings
+  eFormatDecimal,
+  eFormatEnum,
+  eFormatHex,
+  eFormatHexUppercase,
+  eFormatFloat,
+  eFormatOctal,
+  eFormatOSType, // OS character codes encoded into an integer 'PICT' 'text'
+                 // etc...
+  eFormatUnicode16,
+  eFormatUnicode32,
+  eFormatUnsigned,
+  eFormatPointer,
+  eFormatVectorOfChar,
+  eFormatVectorOfSInt8,
+  eFormatVectorOfUInt8,
+  eFormatVectorOfSInt16,
+  eFormatVectorOfUInt16,
+  eFormatVectorOfSInt32,
+  eFormatVectorOfUInt32,
+  eFormatVectorOfSInt64,
+  eFormatVectorOfUInt64,
+  eFormatVectorOfFloat16,
+  eFormatVectorOfFloat32,
+  eFormatVectorOfFloat64,
+  eFormatVectorOfUInt128,
+  eFormatComplexInteger, // Integer complex type
+  eFormatCharArray,      // Print characters with no single quotes, used for
+                         // character arrays that can contain non printable
+                         // characters
+  eFormatAddressInfo, // Describe what an address points to (func + offset with
+                      // file/line, symbol + offset, data, etc)
+  eFormatHexFloat,    // ISO C99 hex float string
+  eFormatInstruction, // Disassemble an opcode
+  eFormatVoid,        // Do not print this
+  kNumFormats
+};
+
+// Description levels for "void GetDescription(Stream *, DescriptionLevel)"
+// calls
+enum DescriptionLevel {
+  eDescriptionLevelBrief = 0,
+  eDescriptionLevelFull,
+  eDescriptionLevelVerbose,
+  eDescriptionLevelInitial,
+  kNumDescriptionLevels
+};
+
+// Script interpreter types
+enum ScriptLanguage {
+  eScriptLanguageNone,
+  eScriptLanguagePython,
+  eScriptLanguageDefault = eScriptLanguagePython,
+  eScriptLanguageUnknown
+};
+
+// Register numbering types
+// See RegisterContext::ConvertRegisterKindToRegisterNumber to convert any of
+// these to the lldb internal register numbering scheme (eRegisterKindLLDB).
+enum RegisterKind {
+  eRegisterKindEHFrame = 0, // the register numbers seen in eh_frame
+  eRegisterKindDWARF,       // the register numbers seen DWARF
+  eRegisterKindGeneric, // insn ptr reg, stack ptr reg, etc not specific to any
+                        // particular target
+  eRegisterKindProcessPlugin, // num used by the process plugin - e.g. by the
+                              // remote gdb-protocol stub program
+  eRegisterKindLLDB,          // lldb's internal register numbers
+  kNumRegisterKinds
+};
+
+// Thread stop reasons
+enum StopReason {
+  eStopReasonInvalid = 0,
+  eStopReasonNone,
+  eStopReasonTrace,
+  eStopReasonBreakpoint,
+  eStopReasonWatchpoint,
+  eStopReasonSignal,
+  eStopReasonException,
+  eStopReasonExec, // Program was re-exec'ed
+  eStopReasonPlanComplete,
+  eStopReasonThreadExiting,
+  eStopReasonInstrumentation
+};
+
+// Command Return Status Types
+enum ReturnStatus {
+  eReturnStatusInvalid,
+  eReturnStatusSuccessFinishNoResult,
+  eReturnStatusSuccessFinishResult,
+  eReturnStatusSuccessContinuingNoResult,
+  eReturnStatusSuccessContinuingResult,
+  eReturnStatusStarted,
+  eReturnStatusFailed,
+  eReturnStatusQuit
+};
+
+// The results of expression evaluation:
+enum ExpressionResults {
+  eExpressionCompleted = 0,
+  eExpressionSetupError,
+  eExpressionParseError,
+  eExpressionDiscarded,
+  eExpressionInterrupted,
+  eExpressionHitBreakpoint,
+  eExpressionTimedOut,
+  eExpressionResultUnavailable,
+  eExpressionStoppedForDebug
+};
+
+enum SearchDepth {
+    eSearchDepthInvalid = 0,
+    eSearchDepthTarget,
+    eSearchDepthModule,
+    eSearchDepthCompUnit,
+    eSearchDepthFunction,
+    eSearchDepthBlock,
+    eSearchDepthAddress,
+    kLastSearchDepthKind = eSearchDepthAddress
+};
+
+// Connection Status Types
+enum ConnectionStatus {
+  eConnectionStatusSuccess,        // Success
+  eConnectionStatusEndOfFile,      // End-of-file encountered
+  eConnectionStatusError,          // Check GetError() for details
+  eConnectionStatusTimedOut,       // Request timed out
+  eConnectionStatusNoConnection,   // No connection
+  eConnectionStatusLostConnection, // Lost connection while connected to a valid
+                                   // connection
+  eConnectionStatusInterrupted     // Interrupted read
+};
+
+enum ErrorType {
+  eErrorTypeInvalid,
+  eErrorTypeGeneric,    ///< Generic errors that can be any value.
+  eErrorTypeMachKernel, ///< Mach kernel error codes.
+  eErrorTypePOSIX,      ///< POSIX error codes.
+  eErrorTypeExpression, ///< These are from the ExpressionResults enum.
+  eErrorTypeWin32       ///< Standard Win32 error codes.
+};
+
+enum ValueType {
+  eValueTypeInvalid = 0,
+  eValueTypeVariableGlobal = 1,   // globals variable
+  eValueTypeVariableStatic = 2,   // static variable
+  eValueTypeVariableArgument = 3, // function argument variables
+  eValueTypeVariableLocal = 4,    // function local variables
+  eValueTypeRegister = 5,         // stack frame register value
+  eValueTypeRegisterSet = 6,      // A collection of stack frame register values
+  eValueTypeConstResult = 7,      // constant result variables
+  eValueTypeVariableThreadLocal = 8 // thread local storage variable
+};
+
+// Token size/granularities for Input Readers
+
+enum InputReaderGranularity {
+  eInputReaderGranularityInvalid = 0,
+  eInputReaderGranularityByte,
+  eInputReaderGranularityWord,
+  eInputReaderGranularityLine,
+  eInputReaderGranularityAll
+};
+
+/// These mask bits allow a common interface for queries that can
+/// limit the amount of information that gets parsed to only the
+/// information that is requested. These bits also can indicate what
+/// actually did get resolved during query function calls.
+///
+/// Each definition corresponds to a one of the member variables
+/// in this class, and requests that that item be resolved, or
+/// indicates that the member did get resolved.
+FLAGS_ENUM(SymbolContextItem){
+    eSymbolContextTarget = (1u << 0), ///< Set when \a target is requested from
+                                      /// a query, or was located in query
+                                      /// results
+    eSymbolContextModule = (1u << 1), ///< Set when \a module is requested from
+                                      /// a query, or was located in query
+                                      /// results
+    eSymbolContextCompUnit = (1u << 2), ///< Set when \a comp_unit is requested
+                                        /// from a query, or was located in
+                                        /// query results
+    eSymbolContextFunction = (1u << 3), ///< Set when \a function is requested
+                                        /// from a query, or was located in
+                                        /// query results
+    eSymbolContextBlock = (1u << 4),    ///< Set when the deepest \a block is
+                                     /// requested from a query, or was located
+                                     /// in query results
+    eSymbolContextLineEntry = (1u << 5), ///< Set when \a line_entry is
+                                         /// requested from a query, or was
+                                         /// located in query results
+    eSymbolContextSymbol = (1u << 6), ///< Set when \a symbol is requested from
+                                      /// a query, or was located in query
+                                      /// results
+    eSymbolContextEverything = ((eSymbolContextSymbol << 1) -
+                                1u), ///< Indicates to try and lookup everything
+                                     /// up during a routine symbol context
+                                     /// query.
+    eSymbolContextVariable = (1u << 7), ///< Set when \a global or static
+                                        /// variable is requested from a query,
+                                        /// or was located in query results.
+    ///< eSymbolContextVariable is potentially expensive to lookup so it isn't
+    /// included in
+    ///< eSymbolContextEverything which stops it from being used during frame PC
+    /// lookups and
+    ///< many other potential address to symbol context lookups.
+};
+LLDB_MARK_AS_BITMASK_ENUM(SymbolContextItem)
+
+FLAGS_ENUM(Permissions){ePermissionsWritable = (1u << 0),
+                        ePermissionsReadable = (1u << 1),
+                        ePermissionsExecutable = (1u << 2)};
+LLDB_MARK_AS_BITMASK_ENUM(Permissions)
+
+enum InputReaderAction {
+  eInputReaderActivate, // reader is newly pushed onto the reader stack
+  eInputReaderAsynchronousOutputWritten, // an async output event occurred; the
+                                         // reader may want to do something
+  eInputReaderReactivate, // reader is on top of the stack again after another
+                          // reader was popped off
+  eInputReaderDeactivate, // another reader was pushed on the stack
+  eInputReaderGotToken,   // reader got one of its tokens (granularity)
+  eInputReaderInterrupt, // reader received an interrupt signal (probably from a
+                         // control-c)
+  eInputReaderEndOfFile, // reader received an EOF char (probably from a
+                         // control-d)
+  eInputReaderDone       // reader was just popped off the stack and is done
+};
+
+FLAGS_ENUM(BreakpointEventType){
+    eBreakpointEventTypeInvalidType = (1u << 0),
+    eBreakpointEventTypeAdded = (1u << 1),
+    eBreakpointEventTypeRemoved = (1u << 2),
+    eBreakpointEventTypeLocationsAdded = (1u << 3), // Locations added doesn't
+                                                    // get sent when the
+                                                    // breakpoint is created
+    eBreakpointEventTypeLocationsRemoved = (1u << 4),
+    eBreakpointEventTypeLocationsResolved = (1u << 5),
+    eBreakpointEventTypeEnabled = (1u << 6),
+    eBreakpointEventTypeDisabled = (1u << 7),
+    eBreakpointEventTypeCommandChanged = (1u << 8),
+    eBreakpointEventTypeConditionChanged = (1u << 9),
+    eBreakpointEventTypeIgnoreChanged = (1u << 10),
+    eBreakpointEventTypeThreadChanged = (1u << 11),
+    eBreakpointEventTypeAutoContinueChanged = (1u << 12)};
+
+FLAGS_ENUM(WatchpointEventType){
+    eWatchpointEventTypeInvalidType = (1u << 0),
+    eWatchpointEventTypeAdded = (1u << 1),
+    eWatchpointEventTypeRemoved = (1u << 2),
+    eWatchpointEventTypeEnabled = (1u << 6),
+    eWatchpointEventTypeDisabled = (1u << 7),
+    eWatchpointEventTypeCommandChanged = (1u << 8),
+    eWatchpointEventTypeConditionChanged = (1u << 9),
+    eWatchpointEventTypeIgnoreChanged = (1u << 10),
+    eWatchpointEventTypeThreadChanged = (1u << 11),
+    eWatchpointEventTypeTypeChanged = (1u << 12)};
+
+/// Programming language type.
+///
+/// These enumerations use the same language enumerations as the DWARF
+/// specification for ease of use and consistency.
+/// The enum -> string code is in Language.cpp, don't change this
+/// table without updating that code as well.
+enum LanguageType {
+  eLanguageTypeUnknown = 0x0000,        ///< Unknown or invalid language value.
+  eLanguageTypeC89 = 0x0001,            ///< ISO C:1989.
+  eLanguageTypeC = 0x0002,              ///< Non-standardized C, such as K&R.
+  eLanguageTypeAda83 = 0x0003,          ///< ISO Ada:1983.
+  eLanguageTypeC_plus_plus = 0x0004,    ///< ISO C++:1998.
+  eLanguageTypeCobol74 = 0x0005,        ///< ISO Cobol:1974.
+  eLanguageTypeCobol85 = 0x0006,        ///< ISO Cobol:1985.
+  eLanguageTypeFortran77 = 0x0007,      ///< ISO Fortran 77.
+  eLanguageTypeFortran90 = 0x0008,      ///< ISO Fortran 90.
+  eLanguageTypePascal83 = 0x0009,       ///< ISO Pascal:1983.
+  eLanguageTypeModula2 = 0x000a,        ///< ISO Modula-2:1996.
+  eLanguageTypeJava = 0x000b,           ///< Java.
+  eLanguageTypeC99 = 0x000c,            ///< ISO C:1999.
+  eLanguageTypeAda95 = 0x000d,          ///< ISO Ada:1995.
+  eLanguageTypeFortran95 = 0x000e,      ///< ISO Fortran 95.
+  eLanguageTypePLI = 0x000f,            ///< ANSI PL/I:1976.
+  eLanguageTypeObjC = 0x0010,           ///< Objective-C.
+  eLanguageTypeObjC_plus_plus = 0x0011, ///< Objective-C++.
+  eLanguageTypeUPC = 0x0012,            ///< Unified Parallel C.
+  eLanguageTypeD = 0x0013,              ///< D.
+  eLanguageTypePython = 0x0014,         ///< Python.
+  // NOTE: The below are DWARF5 constants, subject to change upon
+  // completion of the DWARF5 specification
+  eLanguageTypeOpenCL = 0x0015,         ///< OpenCL.
+  eLanguageTypeGo = 0x0016,             ///< Go.
+  eLanguageTypeModula3 = 0x0017,        ///< Modula 3.
+  eLanguageTypeHaskell = 0x0018,        ///< Haskell.
+  eLanguageTypeC_plus_plus_03 = 0x0019, ///< ISO C++:2003.
+  eLanguageTypeC_plus_plus_11 = 0x001a, ///< ISO C++:2011.
+  eLanguageTypeOCaml = 0x001b,          ///< OCaml.
+  eLanguageTypeRust = 0x001c,           ///< Rust.
+  eLanguageTypeC11 = 0x001d,            ///< ISO C:2011.
+  eLanguageTypeSwift = 0x001e,          ///< Swift.
+  eLanguageTypeJulia = 0x001f,          ///< Julia.
+  eLanguageTypeDylan = 0x0020,          ///< Dylan.
+  eLanguageTypeC_plus_plus_14 = 0x0021, ///< ISO C++:2014.
+  eLanguageTypeFortran03 = 0x0022,      ///< ISO Fortran 2003.
+  eLanguageTypeFortran08 = 0x0023,      ///< ISO Fortran 2008.
+  // Vendor Extensions
+  // Note: Language::GetNameForLanguageType
+  // assumes these can be used as indexes into array language_names, and
+  // Language::SetLanguageFromCString and Language::AsCString assume these can
+  // be used as indexes into array g_languages.
+  eLanguageTypeMipsAssembler = 0x0024,   ///< Mips_Assembler.
+  eLanguageTypeExtRenderScript = 0x0025, ///< RenderScript.
+  eNumLanguageTypes
+};
+
+enum InstrumentationRuntimeType {
+  eInstrumentationRuntimeTypeAddressSanitizer = 0x0000,
+  eInstrumentationRuntimeTypeThreadSanitizer = 0x0001,
+  eInstrumentationRuntimeTypeUndefinedBehaviorSanitizer = 0x0002,
+  eInstrumentationRuntimeTypeMainThreadChecker = 0x0003,
+  eInstrumentationRuntimeTypeSwiftRuntimeReporting = 0x0004,
+  eNumInstrumentationRuntimeTypes
+};
+
+enum DynamicValueType {
+  eNoDynamicValues = 0,
+  eDynamicCanRunTarget = 1,
+  eDynamicDontRunTarget = 2
+};
+
+enum StopShowColumn {
+  eStopShowColumnAnsiOrCaret = 0,
+  eStopShowColumnAnsi = 1,
+  eStopShowColumnCaret = 2,
+  eStopShowColumnNone = 3
+};
+
+enum AccessType {
+  eAccessNone,
+  eAccessPublic,
+  eAccessPrivate,
+  eAccessProtected,
+  eAccessPackage
+};
+
+enum CommandArgumentType {
+  eArgTypeAddress = 0,
+  eArgTypeAddressOrExpression,
+  eArgTypeAliasName,
+  eArgTypeAliasOptions,
+  eArgTypeArchitecture,
+  eArgTypeBoolean,
+  eArgTypeBreakpointID,
+  eArgTypeBreakpointIDRange,
+  eArgTypeBreakpointName,
+  eArgTypeByteSize,
+  eArgTypeClassName,
+  eArgTypeCommandName,
+  eArgTypeCount,
+  eArgTypeDescriptionVerbosity,
+  eArgTypeDirectoryName,
+  eArgTypeDisassemblyFlavor,
+  eArgTypeEndAddress,
+  eArgTypeExpression,
+  eArgTypeExpressionPath,
+  eArgTypeExprFormat,
+  eArgTypeFilename,
+  eArgTypeFormat,
+  eArgTypeFrameIndex,
+  eArgTypeFullName,
+  eArgTypeFunctionName,
+  eArgTypeFunctionOrSymbol,
+  eArgTypeGDBFormat,
+  eArgTypeHelpText,
+  eArgTypeIndex,
+  eArgTypeLanguage,
+  eArgTypeLineNum,
+  eArgTypeLogCategory,
+  eArgTypeLogChannel,
+  eArgTypeMethod,
+  eArgTypeName,
+  eArgTypeNewPathPrefix,
+  eArgTypeNumLines,
+  eArgTypeNumberPerLine,
+  eArgTypeOffset,
+  eArgTypeOldPathPrefix,
+  eArgTypeOneLiner,
+  eArgTypePath,
+  eArgTypePermissionsNumber,
+  eArgTypePermissionsString,
+  eArgTypePid,
+  eArgTypePlugin,
+  eArgTypeProcessName,
+  eArgTypePythonClass,
+  eArgTypePythonFunction,
+  eArgTypePythonScript,
+  eArgTypeQueueName,
+  eArgTypeRegisterName,
+  eArgTypeRegularExpression,
+  eArgTypeRunArgs,
+  eArgTypeRunMode,
+  eArgTypeScriptedCommandSynchronicity,
+  eArgTypeScriptLang,
+  eArgTypeSearchWord,
+  eArgTypeSelector,
+  eArgTypeSettingIndex,
+  eArgTypeSettingKey,
+  eArgTypeSettingPrefix,
+  eArgTypeSettingVariableName,
+  eArgTypeShlibName,
+  eArgTypeSourceFile,
+  eArgTypeSortOrder,
+  eArgTypeStartAddress,
+  eArgTypeSummaryString,
+  eArgTypeSymbol,
+  eArgTypeThreadID,
+  eArgTypeThreadIndex,
+  eArgTypeThreadName,
+  eArgTypeTypeName,
+  eArgTypeUnsignedInteger,
+  eArgTypeUnixSignal,
+  eArgTypeVarName,
+  eArgTypeValue,
+  eArgTypeWidth,
+  eArgTypeNone,
+  eArgTypePlatform,
+  eArgTypeWatchpointID,
+  eArgTypeWatchpointIDRange,
+  eArgTypeWatchType,
+  eArgRawInput,
+  eArgTypeCommand,
+  eArgTypeLastArg // Always keep this entry as the last entry in this
+                  // enumeration!!
+};
+
+// Symbol types
+// Symbol holds the SymbolType in a 6-bit field (m_type), so if you get over 63 
+// entries you will have to resize that field.
+enum SymbolType {
+  eSymbolTypeAny = 0,
+  eSymbolTypeInvalid = 0,
+  eSymbolTypeAbsolute,
+  eSymbolTypeCode,
+  eSymbolTypeResolver,
+  eSymbolTypeData,
+  eSymbolTypeTrampoline,
+  eSymbolTypeRuntime,
+  eSymbolTypeException,
+  eSymbolTypeSourceFile,
+  eSymbolTypeHeaderFile,
+  eSymbolTypeObjectFile,
+  eSymbolTypeCommonBlock,
+  eSymbolTypeBlock,
+  eSymbolTypeLocal,
+  eSymbolTypeParam,
+  eSymbolTypeVariable,
+  eSymbolTypeVariableType,
+  eSymbolTypeLineEntry,
+  eSymbolTypeLineHeader,
+  eSymbolTypeScopeBegin,
+  eSymbolTypeScopeEnd,
+  eSymbolTypeAdditional, // When symbols take more than one entry, the extra
+                         // entries get this type
+  eSymbolTypeCompiler,
+  eSymbolTypeInstrumentation,
+  eSymbolTypeUndefined,
+  eSymbolTypeObjCClass,
+  eSymbolTypeObjCMetaClass,
+  eSymbolTypeObjCIVar,
+  eSymbolTypeReExported
+};
+
+enum SectionType {
+  eSectionTypeInvalid,
+  eSectionTypeCode,
+  eSectionTypeContainer, // The section contains child sections
+  eSectionTypeData,
+  eSectionTypeDataCString,         // Inlined C string data
+  eSectionTypeDataCStringPointers, // Pointers to C string data
+  eSectionTypeDataSymbolAddress,   // Address of a symbol in the symbol table
+  eSectionTypeData4,
+  eSectionTypeData8,
+  eSectionTypeData16,
+  eSectionTypeDataPointers,
+  eSectionTypeDebug,
+  eSectionTypeZeroFill,
+  eSectionTypeDataObjCMessageRefs, // Pointer to function pointer + selector
+  eSectionTypeDataObjCCFStrings, // Objective-C const CFString/NSString objects
+  eSectionTypeDWARFDebugAbbrev,
+  eSectionTypeDWARFDebugAddr,
+  eSectionTypeDWARFDebugAranges,
+  eSectionTypeDWARFDebugCuIndex,
+  eSectionTypeDWARFDebugFrame,
+  eSectionTypeDWARFDebugInfo,
+  eSectionTypeDWARFDebugLine,
+  eSectionTypeDWARFDebugLoc,
+  eSectionTypeDWARFDebugMacInfo,
+  eSectionTypeDWARFDebugMacro,
+  eSectionTypeDWARFDebugPubNames,
+  eSectionTypeDWARFDebugPubTypes,
+  eSectionTypeDWARFDebugRanges,
+  eSectionTypeDWARFDebugStr,
+  eSectionTypeDWARFDebugStrOffsets,
+  eSectionTypeDWARFAppleNames,
+  eSectionTypeDWARFAppleTypes,
+  eSectionTypeDWARFAppleNamespaces,
+  eSectionTypeDWARFAppleObjC,
+  eSectionTypeELFSymbolTable,       // Elf SHT_SYMTAB section
+  eSectionTypeELFDynamicSymbols,    // Elf SHT_DYNSYM section
+  eSectionTypeELFRelocationEntries, // Elf SHT_REL or SHT_REL section
+  eSectionTypeELFDynamicLinkInfo,   // Elf SHT_DYNAMIC section
+  eSectionTypeEHFrame,
+  eSectionTypeARMexidx,
+  eSectionTypeARMextab,
+  eSectionTypeCompactUnwind, // compact unwind section in Mach-O,
+                             // __TEXT,__unwind_info
+  eSectionTypeGoSymtab,
+  eSectionTypeAbsoluteAddress, // Dummy section for symbols with absolute
+                               // address
+  eSectionTypeDWARFGNUDebugAltLink,
+  eSectionTypeDWARFDebugTypes, // DWARF .debug_types section
+  eSectionTypeDWARFDebugNames, // DWARF v5 .debug_names
+  eSectionTypeOther,
+  eSectionTypeDWARFDebugLineStr, // DWARF v5 .debug_line_str
+  eSectionTypeDWARFDebugRngLists, // DWARF v5 .debug_rnglists
+  eSectionTypeDWARFDebugLocLists, // DWARF v5 .debug_loclists
+  eSectionTypeDWARFDebugAbbrevDwo,
+  eSectionTypeDWARFDebugInfoDwo,
+  eSectionTypeDWARFDebugStrDwo,
+  eSectionTypeDWARFDebugStrOffsetsDwo,
+  eSectionTypeDWARFDebugTypesDwo,
+};
+
+FLAGS_ENUM(EmulateInstructionOptions){
+    eEmulateInstructionOptionNone = (0u),
+    eEmulateInstructionOptionAutoAdvancePC = (1u << 0),
+    eEmulateInstructionOptionIgnoreConditions = (1u << 1)};
+
+FLAGS_ENUM(FunctionNameType){
+    eFunctionNameTypeNone = 0u,
+    eFunctionNameTypeAuto =
+        (1u << 1), // Automatically figure out which FunctionNameType
+                   // bits to set based on the function name.
+    eFunctionNameTypeFull = (1u << 2), // The function name.
+    // For C this is the same as just the name of the function For C++ this is
+    // the mangled or demangled version of the mangled name. For ObjC this is
+    // the full function signature with the + or - and the square brackets and
+    // the class and selector
+    eFunctionNameTypeBase = (1u << 3), // The function name only, no namespaces
+                                       // or arguments and no class
+                                       // methods or selectors will be searched.
+    eFunctionNameTypeMethod = (1u << 4), // Find function by method name (C++)
+                                         // with no namespace or arguments
+    eFunctionNameTypeSelector =
+        (1u << 5), // Find function by selector name (ObjC) names
+    eFunctionNameTypeAny =
+        eFunctionNameTypeAuto // DEPRECATED: use eFunctionNameTypeAuto
+};
+LLDB_MARK_AS_BITMASK_ENUM(FunctionNameType)
+
+// Basic types enumeration for the public API SBType::GetBasicType()
+enum BasicType {
+  eBasicTypeInvalid = 0,
+  eBasicTypeVoid = 1,
+  eBasicTypeChar,
+  eBasicTypeSignedChar,
+  eBasicTypeUnsignedChar,
+  eBasicTypeWChar,
+  eBasicTypeSignedWChar,
+  eBasicTypeUnsignedWChar,
+  eBasicTypeChar16,
+  eBasicTypeChar32,
+  eBasicTypeShort,
+  eBasicTypeUnsignedShort,
+  eBasicTypeInt,
+  eBasicTypeUnsignedInt,
+  eBasicTypeLong,
+  eBasicTypeUnsignedLong,
+  eBasicTypeLongLong,
+  eBasicTypeUnsignedLongLong,
+  eBasicTypeInt128,
+  eBasicTypeUnsignedInt128,
+  eBasicTypeBool,
+  eBasicTypeHalf,
+  eBasicTypeFloat,
+  eBasicTypeDouble,
+  eBasicTypeLongDouble,
+  eBasicTypeFloatComplex,
+  eBasicTypeDoubleComplex,
+  eBasicTypeLongDoubleComplex,
+  eBasicTypeObjCID,
+  eBasicTypeObjCClass,
+  eBasicTypeObjCSel,
+  eBasicTypeNullPtr,
+  eBasicTypeOther
+};
+
+enum TraceType {
+  eTraceTypeNone = 0,
+
+  // Hardware Trace generated by the processor.
+  eTraceTypeProcessorTrace
+};
+
+enum StructuredDataType {
+  eStructuredDataTypeInvalid = -1,
+  eStructuredDataTypeNull = 0,
+  eStructuredDataTypeGeneric,
+  eStructuredDataTypeArray,
+  eStructuredDataTypeInteger,
+  eStructuredDataTypeFloat,
+  eStructuredDataTypeBoolean,
+  eStructuredDataTypeString,
+  eStructuredDataTypeDictionary
+};
+
+FLAGS_ENUM(TypeClass){
+    eTypeClassInvalid = (0u), eTypeClassArray = (1u << 0),
+    eTypeClassBlockPointer = (1u << 1), eTypeClassBuiltin = (1u << 2),
+    eTypeClassClass = (1u << 3), eTypeClassComplexFloat = (1u << 4),
+    eTypeClassComplexInteger = (1u << 5), eTypeClassEnumeration = (1u << 6),
+    eTypeClassFunction = (1u << 7), eTypeClassMemberPointer = (1u << 8),
+    eTypeClassObjCObject = (1u << 9), eTypeClassObjCInterface = (1u << 10),
+    eTypeClassObjCObjectPointer = (1u << 11), eTypeClassPointer = (1u << 12),
+    eTypeClassReference = (1u << 13), eTypeClassStruct = (1u << 14),
+    eTypeClassTypedef = (1u << 15), eTypeClassUnion = (1u << 16),
+    eTypeClassVector = (1u << 17),
+    // Define the last type class as the MSBit of a 32 bit value
+    eTypeClassOther = (1u << 31),
+    // Define a mask that can be used for any type when finding types
+    eTypeClassAny = (0xffffffffu)};
+LLDB_MARK_AS_BITMASK_ENUM(TypeClass)
+
+enum TemplateArgumentKind {
+  eTemplateArgumentKindNull = 0,
+  eTemplateArgumentKindType,
+  eTemplateArgumentKindDeclaration,
+  eTemplateArgumentKindIntegral,
+  eTemplateArgumentKindTemplate,
+  eTemplateArgumentKindTemplateExpansion,
+  eTemplateArgumentKindExpression,
+  eTemplateArgumentKindPack,
+  eTemplateArgumentKindNullPtr,
+};
+
+// Options that can be set for a formatter to alter its behavior Not all of
+// these are applicable to all formatter types
+FLAGS_ENUM(TypeOptions){eTypeOptionNone = (0u),
+                        eTypeOptionCascade = (1u << 0),
+                        eTypeOptionSkipPointers = (1u << 1),
+                        eTypeOptionSkipReferences = (1u << 2),
+                        eTypeOptionHideChildren = (1u << 3),
+                        eTypeOptionHideValue = (1u << 4),
+                        eTypeOptionShowOneLiner = (1u << 5),
+                        eTypeOptionHideNames = (1u << 6),
+                        eTypeOptionNonCacheable = (1u << 7),
+                        eTypeOptionHideEmptyAggregates = (1u << 8),
+                        eTypeOptionFrontEndWantsDereference = (1u << 9)
+};
+
+// This is the return value for frame comparisons.  If you are comparing frame
+// A to frame B the following cases arise: 1) When frame A pushes frame B (or a
+// frame that ends up pushing B) A is Older than B. 2) When frame A pushed
+// frame B (or if frame A is on the stack but B is not) A is Younger than B 3)
+// When frame A and frame B have the same StackID, they are Equal. 4) When
+// frame A and frame B have the same immediate parent frame, but are not equal,
+// the comparison yields
+//    SameParent.
+// 5) If the two frames are on different threads or processes the comparison is
+// Invalid 6) If for some reason we can't figure out what went on, we return
+// Unknown.
+enum FrameComparison {
+  eFrameCompareInvalid,
+  eFrameCompareUnknown,
+  eFrameCompareEqual,
+  eFrameCompareSameParent,
+  eFrameCompareYounger,
+  eFrameCompareOlder
+};
+
+// File Permissions
+//
+// Designed to mimic the unix file permission bits so they can be used with
+// functions that set 'mode_t' to certain values for permissions.
+FLAGS_ENUM(FilePermissions){
+    eFilePermissionsUserRead = (1u << 8), eFilePermissionsUserWrite = (1u << 7),
+    eFilePermissionsUserExecute = (1u << 6),
+    eFilePermissionsGroupRead = (1u << 5),
+    eFilePermissionsGroupWrite = (1u << 4),
+    eFilePermissionsGroupExecute = (1u << 3),
+    eFilePermissionsWorldRead = (1u << 2),
+    eFilePermissionsWorldWrite = (1u << 1),
+    eFilePermissionsWorldExecute = (1u << 0),
+
+    eFilePermissionsUserRW = (eFilePermissionsUserRead |
+                              eFilePermissionsUserWrite | 0),
+    eFileFilePermissionsUserRX = (eFilePermissionsUserRead | 0 |
+                                  eFilePermissionsUserExecute),
+    eFilePermissionsUserRWX = (eFilePermissionsUserRead |
+                               eFilePermissionsUserWrite |
+                               eFilePermissionsUserExecute),
+
+    eFilePermissionsGroupRW = (eFilePermissionsGroupRead |
+                               eFilePermissionsGroupWrite | 0),
+    eFilePermissionsGroupRX = (eFilePermissionsGroupRead | 0 |
+                               eFilePermissionsGroupExecute),
+    eFilePermissionsGroupRWX = (eFilePermissionsGroupRead |
+                                eFilePermissionsGroupWrite |
+                                eFilePermissionsGroupExecute),
+
+    eFilePermissionsWorldRW = (eFilePermissionsWorldRead |
+                               eFilePermissionsWorldWrite | 0),
+    eFilePermissionsWorldRX = (eFilePermissionsWorldRead | 0 |
+                               eFilePermissionsWorldExecute),
+    eFilePermissionsWorldRWX = (eFilePermissionsWorldRead |
+                                eFilePermissionsWorldWrite |
+                                eFilePermissionsWorldExecute),
+
+    eFilePermissionsEveryoneR = (eFilePermissionsUserRead |
+                                 eFilePermissionsGroupRead |
+                                 eFilePermissionsWorldRead),
+    eFilePermissionsEveryoneW = (eFilePermissionsUserWrite |
+                                 eFilePermissionsGroupWrite |
+                                 eFilePermissionsWorldWrite),
+    eFilePermissionsEveryoneX = (eFilePermissionsUserExecute |
+                                 eFilePermissionsGroupExecute |
+                                 eFilePermissionsWorldExecute),
+
+    eFilePermissionsEveryoneRW = (eFilePermissionsEveryoneR |
+                                  eFilePermissionsEveryoneW | 0),
+    eFilePermissionsEveryoneRX = (eFilePermissionsEveryoneR | 0 |
+                                  eFilePermissionsEveryoneX),
+    eFilePermissionsEveryoneRWX = (eFilePermissionsEveryoneR |
+                                   eFilePermissionsEveryoneW |
+                                   eFilePermissionsEveryoneX),
+    eFilePermissionsFileDefault = eFilePermissionsUserRW,
+    eFilePermissionsDirectoryDefault = eFilePermissionsUserRWX,
+};
+
+// Queue work item types
+//
+// The different types of work that can be enqueued on a libdispatch aka Grand
+// Central Dispatch (GCD) queue.
+enum QueueItemKind {
+  eQueueItemKindUnknown = 0,
+  eQueueItemKindFunction,
+  eQueueItemKindBlock
+};
+
+// Queue type
+// libdispatch aka Grand Central Dispatch (GCD) queues can be either serial
+// (executing on one thread) or concurrent (executing on multiple threads).
+enum QueueKind {
+  eQueueKindUnknown = 0,
+  eQueueKindSerial,
+  eQueueKindConcurrent
+};
+
+// Expression Evaluation Stages
+// These are the cancellable stages of expression evaluation, passed to the
+// expression evaluation callback, so that you can interrupt expression
+// evaluation at the various points in its lifecycle.
+enum ExpressionEvaluationPhase {
+  eExpressionEvaluationParse = 0,
+  eExpressionEvaluationIRGen,
+  eExpressionEvaluationExecution,
+  eExpressionEvaluationComplete
+};
+
+// Watchpoint Kind
+// Indicates what types of events cause the watchpoint to fire. Used by Native
+// *Protocol-related classes.
+FLAGS_ENUM(WatchpointKind){eWatchpointKindWrite = (1u << 0),
+                           eWatchpointKindRead = (1u << 1)};
+
+enum GdbSignal {
+  eGdbSignalBadAccess = 0x91,
+  eGdbSignalBadInstruction = 0x92,
+  eGdbSignalArithmetic = 0x93,
+  eGdbSignalEmulation = 0x94,
+  eGdbSignalSoftware = 0x95,
+  eGdbSignalBreakpoint = 0x96
+};
+
+// Used with SBHost::GetPath (lldb::PathType) to find files that are related to
+// LLDB on the current host machine. Most files are relative to LLDB or are in
+// known locations.
+enum PathType {
+  ePathTypeLLDBShlibDir, // The directory where the lldb.so (unix) or LLDB
+                         // mach-o file in LLDB.framework (MacOSX) exists
+  ePathTypeSupportExecutableDir, // Find LLDB support executable directory
+                                 // (debugserver, etc)
+  ePathTypeHeaderDir,            // Find LLDB header file directory
+  ePathTypePythonDir,            // Find Python modules (PYTHONPATH) directory
+  ePathTypeLLDBSystemPlugins,    // System plug-ins directory
+  ePathTypeLLDBUserPlugins,      // User plug-ins directory
+  ePathTypeLLDBTempSystemDir,    // The LLDB temp directory for this system that
+                                 // will be cleaned up on exit
+  ePathTypeGlobalLLDBTempSystemDir, // The LLDB temp directory for this system,
+                                    // NOT cleaned up on a process exit.
+  ePathTypeClangDir                 // Find path to Clang builtin headers
+};
+
+// Kind of member function
+// Used by the type system
+enum MemberFunctionKind {
+  eMemberFunctionKindUnknown = 0,    // Not sure what the type of this is
+  eMemberFunctionKindConstructor,    // A function used to create instances
+  eMemberFunctionKindDestructor,     // A function used to tear down existing
+                                     // instances
+  eMemberFunctionKindInstanceMethod, // A function that applies to a specific
+                                     // instance
+  eMemberFunctionKindStaticMethod    // A function that applies to a type rather
+                                     // than any instance
+};
+
+// String matching algorithm used by SBTarget
+enum MatchType { eMatchTypeNormal, eMatchTypeRegex, eMatchTypeStartsWith };
+
+// Bitmask that describes details about a type
+FLAGS_ENUM(TypeFlags){
+    eTypeHasChildren = (1u << 0),       eTypeHasValue = (1u << 1),
+    eTypeIsArray = (1u << 2),           eTypeIsBlock = (1u << 3),
+    eTypeIsBuiltIn = (1u << 4),         eTypeIsClass = (1u << 5),
+    eTypeIsCPlusPlus = (1u << 6),       eTypeIsEnumeration = (1u << 7),
+    eTypeIsFuncPrototype = (1u << 8),   eTypeIsMember = (1u << 9),
+    eTypeIsObjC = (1u << 10),           eTypeIsPointer = (1u << 11),
+    eTypeIsReference = (1u << 12),      eTypeIsStructUnion = (1u << 13),
+    eTypeIsTemplate = (1u << 14),       eTypeIsTypedef = (1u << 15),
+    eTypeIsVector = (1u << 16),         eTypeIsScalar = (1u << 17),
+    eTypeIsInteger = (1u << 18),        eTypeIsFloat = (1u << 19),
+    eTypeIsComplex = (1u << 20),        eTypeIsSigned = (1u << 21),
+    eTypeInstanceIsPointer = (1u << 22)};
+
+FLAGS_ENUM(CommandFlags){
+    // eCommandRequiresTarget
+    //
+    // Ensures a valid target is contained in m_exe_ctx prior to executing the
+    // command. If a target doesn't exist or is invalid, the command will fail
+    // and CommandObject::GetInvalidTargetDescription() will be returned as the
+    // error. CommandObject subclasses can override the virtual function for
+    // GetInvalidTargetDescription() to provide custom strings when needed.
+    eCommandRequiresTarget = (1u << 0),
+    // eCommandRequiresProcess
+    //
+    // Ensures a valid process is contained in m_exe_ctx prior to executing the
+    // command. If a process doesn't exist or is invalid, the command will fail
+    // and CommandObject::GetInvalidProcessDescription() will be returned as
+    // the error. CommandObject subclasses can override the virtual function
+    // for GetInvalidProcessDescription() to provide custom strings when
+    // needed.
+    eCommandRequiresProcess = (1u << 1),
+    // eCommandRequiresThread
+    //
+    // Ensures a valid thread is contained in m_exe_ctx prior to executing the
+    // command. If a thread doesn't exist or is invalid, the command will fail
+    // and CommandObject::GetInvalidThreadDescription() will be returned as the
+    // error. CommandObject subclasses can override the virtual function for
+    // GetInvalidThreadDescription() to provide custom strings when needed.
+    eCommandRequiresThread = (1u << 2),
+    // eCommandRequiresFrame
+    //
+    // Ensures a valid frame is contained in m_exe_ctx prior to executing the
+    // command. If a frame doesn't exist or is invalid, the command will fail
+    // and CommandObject::GetInvalidFrameDescription() will be returned as the
+    // error. CommandObject subclasses can override the virtual function for
+    // GetInvalidFrameDescription() to provide custom strings when needed.
+    eCommandRequiresFrame = (1u << 3),
+    // eCommandRequiresRegContext
+    //
+    // Ensures a valid register context (from the selected frame if there is a
+    // frame in m_exe_ctx, or from the selected thread from m_exe_ctx) is
+    // available from m_exe_ctx prior to executing the command. If a target
+    // doesn't exist or is invalid, the command will fail and
+    // CommandObject::GetInvalidRegContextDescription() will be returned as the
+    // error. CommandObject subclasses can override the virtual function for
+    // GetInvalidRegContextDescription() to provide custom strings when needed.
+    eCommandRequiresRegContext = (1u << 4),
+    // eCommandTryTargetAPILock
+    //
+    // Attempts to acquire the target lock if a target is selected in the
+    // command interpreter. If the command object fails to acquire the API
+    // lock, the command will fail with an appropriate error message.
+    eCommandTryTargetAPILock = (1u << 5),
+    // eCommandProcessMustBeLaunched
+    //
+    // Verifies that there is a launched process in m_exe_ctx, if there isn't,
+    // the command will fail with an appropriate error message.
+    eCommandProcessMustBeLaunched = (1u << 6),
+    // eCommandProcessMustBePaused
+    //
+    // Verifies that there is a paused process in m_exe_ctx, if there isn't,
+    // the command will fail with an appropriate error message.
+    eCommandProcessMustBePaused = (1u << 7)};
+
+// Whether a summary should cap how much data it returns to users or not
+enum TypeSummaryCapping {
+  eTypeSummaryCapped = true,
+  eTypeSummaryUncapped = false
+};
+} // namespace lldb
+
+#endif // LLDB_lldb_enumerations_h_
diff --git a/linux-x64/clang/include/lldb/lldb-forward.h b/linux-x64/clang/include/lldb/lldb-forward.h
new file mode 100644
index 0000000..0cdaf1c
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-forward.h
@@ -0,0 +1,489 @@
+//===-- lldb-forward.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_forward_h_
+#define LLDB_lldb_forward_h_
+
+#if defined(__cplusplus)
+
+#include "lldb/Utility/SharingPtr.h"
+
+// lldb forward declarations
+namespace lldb_private {
+
+class ABI;
+class Address;
+class AddressRange;
+class AddressResolver;
+class ArchSpec;
+class ArmUnwindInfo;
+class Args;
+class ASTResultSynthesizer;
+class ASTStructExtractor;
+class Baton;
+class Block;
+class Breakpoint;
+class BreakpointID;
+class BreakpointIDList;
+class BreakpointList;
+class BreakpointLocation;
+class BreakpointLocationCollection;
+class BreakpointLocationList;
+class BreakpointName;
+class BreakpointOptionGroup;
+class BreakpointOptions;
+class BreakpointPrecondition;
+class BreakpointResolver;
+class BreakpointSite;
+class BreakpointSiteList;
+class BroadcastEventSpec;
+class Broadcaster;
+class BroadcasterManager;
+class ClangASTContext;
+class ClangASTImporter;
+class ClangASTMetadata;
+class ClangASTSource;
+class ClangExpressionDeclMap;
+class ClangExpressionParser;
+class ClangExpressionVariable;
+class ClangModulesDeclVendor;
+class ClangPersistentVariables;
+class CommandInterpreter;
+class CommandInterpreterRunOptions;
+class CommandObject;
+class CommandObjectMultiword;
+class CommandReturnObject;
+class Communication;
+class CompactUnwindInfo;
+struct CompilerContext;
+class CompilerDecl;
+class CompilerDeclContext;
+class CompilerType;
+class CompileUnit;
+class Connection;
+class ConnectionFileDescriptor;
+class ConstString;
+class CXXSyntheticChildren;
+class DWARFCallFrameInfo;
+class DWARFDataExtractor;
+class DWARFExpression;
+class DataBuffer;
+class DataEncoder;
+class DataExtractor;
+class Debugger;
+class Declaration;
+class DiagnosticManager;
+class Disassembler;
+class DumpValueObjectOptions;
+class DynamicCheckerFunctions;
+class DynamicLoader;
+class Editline;
+class EmulateInstruction;
+class Status;
+class EvaluateExpressionOptions;
+class Event;
+class EventData;
+class EventDataStructuredData;
+class ExecutionContext;
+class ExecutionContextRef;
+class ExecutionContextScope;
+class Expression;
+class ExpressionVariable;
+class ExpressionVariableList;
+class ExpressionTypeSystemHelper;
+class File;
+class FileSpec;
+class FileSpecList;
+class Flags;
+class TypeCategoryImpl;
+class FormatManager;
+class FormattersMatchCandidate;
+class FuncUnwinders;
+class Function;
+class FunctionInfo;
+class InlineFunctionInfo;
+class Instruction;
+class InstructionList;
+class InstrumentationRuntime;
+class IOHandler;
+class IOObject;
+class IRExecutionUnit;
+class JITLoader;
+class JITLoaderList;
+class Language;
+class LanguageCategory;
+class LanguageRuntime;
+class LineTable;
+class Listener;
+class Log;
+class Mangled;
+class Materializer;
+class MemoryHistory;
+class MemoryRegionInfo;
+class MemoryRegionInfos;
+class Module;
+class ModuleList;
+class ModuleSpec;
+class ModuleSpecList;
+struct NameSearchContext;
+class ObjectContainer;
+class OptionGroup;
+class OptionGroupOptions;
+class OptionGroupPlatform;
+class ObjectFile;
+class ObjectFileJITDelegate;
+class OperatingSystem;
+class Options;
+class OptionValue;
+class OptionValueArch;
+class OptionValueArgs;
+class OptionValueArray;
+class OptionValueBoolean;
+class OptionValueChar;
+class OptionValueDictionary;
+class OptionValueEnumeration;
+class OptionValueFileSpec;
+class OptionValueFileSpecList;
+class OptionValueFormat;
+class OptionValueLanguage;
+class OptionValueFormatEntity;
+class OptionValuePathMappings;
+class OptionValueProperties;
+class OptionValueRegex;
+class OptionValueSInt64;
+class OptionValueString;
+class OptionValueUInt64;
+class OptionValueUUID;
+class PathMappingList;
+class FunctionCaller;
+class PersistentExpressionState;
+class Platform;
+class Process;
+class ProcessAttachInfo;
+class ProcessModID;
+class ProcessInfo;
+class ProcessInstanceInfo;
+class ProcessInstanceInfoList;
+class ProcessInstanceInfoMatch;
+class ProcessLaunchInfo;
+class Property;
+struct PropertyDefinition;
+class RecognizedStackFrame;
+class RegisterCheckpoint;
+class RegisterContext;
+class RegisterValue;
+class RegularExpression;
+class REPL;
+class RichManglingContext;
+class Scalar;
+class ScriptInterpreter;
+class ScriptInterpreterLocker;
+struct ScriptSummaryFormat;
+class SearchFilter;
+class Section;
+class SectionList;
+class SectionLoadHistory;
+class SectionLoadList;
+class Settings;
+class SourceManager;
+class SourceManagerImpl;
+class StackFrame;
+class StackFrameList;
+class StackFrameRecognizer;
+class StackFrameRecognizerManager;
+class StackID;
+class StopInfo;
+class Stoppoint;
+class StoppointCallbackContext;
+class StoppointLocation;
+class Stream;
+template <unsigned N> class StreamBuffer;
+class StreamFile;
+class StreamString;
+class StringList;
+struct StringSummaryFormat;
+class StructuredDataImpl;
+class StructuredDataPlugin;
+class SystemRuntime;
+class TypeSummaryImpl;
+class TypeSummaryOptions;
+class Symbol;
+class SymbolContext;
+class SymbolContextList;
+class SymbolContextScope;
+class SymbolContextSpecifier;
+class SymbolFile;
+class SymbolFileType;
+class SymbolVendor;
+class Symtab;
+class SyntheticChildren;
+class SyntheticChildrenFrontEnd;
+class TypeFilterImpl;
+class TypeSystem;
+class ScriptedSyntheticChildren;
+class Queue;
+class QueueItem;
+class QueueImpl;
+class Target;
+class TargetList;
+class TargetProperties;
+class Thread;
+class ThreadCollection;
+class ThreadList;
+class ThreadPlan;
+class ThreadPlanBase;
+class ThreadPlanRunToAddress;
+class ThreadPlanStepInstruction;
+class ThreadPlanStepOut;
+class ThreadPlanStepOverBreakpoint;
+class ThreadPlanStepRange;
+class ThreadPlanStepThrough;
+class ThreadPlanTracer;
+class ThreadSpec;
+class TraceOptions;
+class Type;
+class TypeAndOrName;
+class TypeCategoryMap;
+class TypeImpl;
+class TypeList;
+class TypeMap;
+class TypeListImpl;
+class TypeMemberImpl;
+class TypeMemberFunctionImpl;
+class TypeEnumMemberImpl;
+class TypeEnumMemberListImpl;
+class TypeFormatImpl;
+class TypeNameSpecifierImpl;
+class TypeValidatorImpl;
+class UUID;
+class UnixSignals;
+class Unwind;
+class UnwindAssembly;
+class UnwindPlan;
+class UnwindTable;
+class UserExpression;
+class UtilityFunction;
+class VMRange;
+class Value;
+class ValueList;
+class ValueObject;
+class ValueObjectChild;
+class ValueObjectConstResult;
+class ValueObjectConstResultChild;
+class ValueObjectConstResultImpl;
+class ValueObjectList;
+class ValueObjectPrinter;
+class Variable;
+class VariableList;
+class Watchpoint;
+class WatchpointList;
+class WatchpointOptions;
+struct LineEntry;
+
+} // namespace lldb_private
+
+// lldb forward declarations
+namespace lldb {
+
+typedef std::shared_ptr<lldb_private::ABI> ABISP;
+typedef std::shared_ptr<lldb_private::Baton> BatonSP;
+typedef std::shared_ptr<lldb_private::Block> BlockSP;
+typedef std::shared_ptr<lldb_private::Breakpoint> BreakpointSP;
+typedef std::weak_ptr<lldb_private::Breakpoint> BreakpointWP;
+typedef std::shared_ptr<lldb_private::BreakpointSite> BreakpointSiteSP;
+typedef std::weak_ptr<lldb_private::BreakpointSite> BreakpointSiteWP;
+typedef std::shared_ptr<lldb_private::BreakpointLocation> BreakpointLocationSP;
+typedef std::weak_ptr<lldb_private::BreakpointLocation> BreakpointLocationWP;
+typedef std::shared_ptr<lldb_private::BreakpointPrecondition> BreakpointPreconditionSP;
+typedef std::shared_ptr<lldb_private::BreakpointResolver> BreakpointResolverSP;
+typedef std::shared_ptr<lldb_private::Broadcaster> BroadcasterSP;
+typedef std::shared_ptr<lldb_private::BroadcasterManager> BroadcasterManagerSP;
+typedef std::weak_ptr<lldb_private::BroadcasterManager> BroadcasterManagerWP;
+typedef std::unique_ptr<lldb_private::ClangASTContext> ClangASTContextUP;
+typedef std::shared_ptr<lldb_private::ClangASTImporter> ClangASTImporterSP;
+typedef std::unique_ptr<lldb_private::ClangModulesDeclVendor>
+    ClangModulesDeclVendorUP;
+typedef std::unique_ptr<lldb_private::ClangPersistentVariables>
+    ClangPersistentVariablesUP;
+typedef std::shared_ptr<lldb_private::UserExpression> UserExpressionSP;
+typedef std::shared_ptr<lldb_private::CommandObject> CommandObjectSP;
+typedef std::shared_ptr<lldb_private::Communication> CommunicationSP;
+typedef std::shared_ptr<lldb_private::Connection> ConnectionSP;
+typedef std::shared_ptr<lldb_private::CompileUnit> CompUnitSP;
+typedef std::shared_ptr<lldb_private::DataBuffer> DataBufferSP;
+typedef std::shared_ptr<lldb_private::DataExtractor> DataExtractorSP;
+typedef std::shared_ptr<lldb_private::Debugger> DebuggerSP;
+typedef std::weak_ptr<lldb_private::Debugger> DebuggerWP;
+typedef std::shared_ptr<lldb_private::Disassembler> DisassemblerSP;
+typedef std::unique_ptr<lldb_private::DynamicCheckerFunctions>
+    DynamicCheckerFunctionsUP;
+typedef std::shared_ptr<lldb_private::DynamicLoader> DynamicLoaderSP;
+typedef std::unique_ptr<lldb_private::DynamicLoader> DynamicLoaderUP;
+typedef std::shared_ptr<lldb_private::Event> EventSP;
+typedef std::shared_ptr<lldb_private::EventData> EventDataSP;
+typedef std::shared_ptr<lldb_private::EventDataStructuredData>
+    EventDataStructuredDataSP;
+typedef std::shared_ptr<lldb_private::ExecutionContextRef>
+    ExecutionContextRefSP;
+typedef std::shared_ptr<lldb_private::ExpressionVariable> ExpressionVariableSP;
+typedef std::shared_ptr<lldb_private::File> FileSP;
+typedef std::shared_ptr<lldb_private::Function> FunctionSP;
+typedef std::shared_ptr<lldb_private::FunctionCaller> FunctionCallerSP;
+typedef std::shared_ptr<lldb_private::FuncUnwinders> FuncUnwindersSP;
+typedef std::shared_ptr<lldb_private::InlineFunctionInfo> InlineFunctionInfoSP;
+typedef std::shared_ptr<lldb_private::Instruction> InstructionSP;
+typedef std::shared_ptr<lldb_private::InstrumentationRuntime>
+    InstrumentationRuntimeSP;
+typedef std::shared_ptr<lldb_private::IOHandler> IOHandlerSP;
+typedef std::shared_ptr<lldb_private::IOObject> IOObjectSP;
+typedef std::shared_ptr<lldb_private::IRExecutionUnit> IRExecutionUnitSP;
+typedef std::shared_ptr<lldb_private::JITLoader> JITLoaderSP;
+typedef std::unique_ptr<lldb_private::JITLoaderList> JITLoaderListUP;
+typedef std::shared_ptr<lldb_private::LanguageRuntime> LanguageRuntimeSP;
+typedef std::shared_ptr<lldb_private::SystemRuntime> SystemRuntimeSP;
+typedef std::unique_ptr<lldb_private::SystemRuntime> SystemRuntimeUP;
+typedef std::shared_ptr<lldb_private::LineTable> LineTableSP;
+typedef std::shared_ptr<lldb_private::Listener> ListenerSP;
+typedef std::weak_ptr<lldb_private::Listener> ListenerWP;
+typedef std::shared_ptr<lldb_private::MemoryHistory> MemoryHistorySP;
+typedef std::unique_ptr<lldb_private::MemoryRegionInfo> MemoryRegionInfoUP;
+typedef std::shared_ptr<lldb_private::Module> ModuleSP;
+typedef std::weak_ptr<lldb_private::Module> ModuleWP;
+typedef std::shared_ptr<lldb_private::ObjectFile> ObjectFileSP;
+typedef std::weak_ptr<lldb_private::ObjectFile> ObjectFileWP;
+typedef std::shared_ptr<lldb_private::ObjectFileJITDelegate>
+    ObjectFileJITDelegateSP;
+typedef std::weak_ptr<lldb_private::ObjectFileJITDelegate>
+    ObjectFileJITDelegateWP;
+typedef std::unique_ptr<lldb_private::OperatingSystem> OperatingSystemUP;
+typedef std::shared_ptr<lldb_private::OptionValue> OptionValueSP;
+typedef std::weak_ptr<lldb_private::OptionValue> OptionValueWP;
+typedef std::shared_ptr<lldb_private::OptionValueArch> OptionValueArchSP;
+typedef std::shared_ptr<lldb_private::OptionValueArgs> OptionValueArgsSP;
+typedef std::shared_ptr<lldb_private::OptionValueArray> OptionValueArraySP;
+typedef std::shared_ptr<lldb_private::OptionValueBoolean> OptionValueBooleanSP;
+typedef std::shared_ptr<lldb_private::OptionValueDictionary>
+    OptionValueDictionarySP;
+typedef std::shared_ptr<lldb_private::OptionValueFileSpec>
+    OptionValueFileSpecSP;
+typedef std::shared_ptr<lldb_private::OptionValueFileSpecList>
+    OptionValueFileSpecListSP;
+typedef std::shared_ptr<lldb_private::OptionValueFormat> OptionValueFormatSP;
+typedef std::shared_ptr<lldb_private::OptionValuePathMappings>
+    OptionValuePathMappingsSP;
+typedef std::shared_ptr<lldb_private::OptionValueProperties>
+    OptionValuePropertiesSP;
+typedef std::shared_ptr<lldb_private::OptionValueRegex> OptionValueRegexSP;
+typedef std::shared_ptr<lldb_private::OptionValueSInt64> OptionValueSInt64SP;
+typedef std::shared_ptr<lldb_private::OptionValueString> OptionValueStringSP;
+typedef std::shared_ptr<lldb_private::OptionValueUInt64> OptionValueUInt64SP;
+typedef std::shared_ptr<lldb_private::OptionValueUUID> OptionValueUUIDSP;
+typedef std::shared_ptr<lldb_private::Platform> PlatformSP;
+typedef std::shared_ptr<lldb_private::Process> ProcessSP;
+typedef std::shared_ptr<lldb_private::ProcessAttachInfo> ProcessAttachInfoSP;
+typedef std::shared_ptr<lldb_private::ProcessLaunchInfo> ProcessLaunchInfoSP;
+typedef std::weak_ptr<lldb_private::Process> ProcessWP;
+typedef std::shared_ptr<lldb_private::Property> PropertySP;
+typedef std::shared_ptr<lldb_private::RegisterCheckpoint> RegisterCheckpointSP;
+typedef std::shared_ptr<lldb_private::RegisterContext> RegisterContextSP;
+typedef std::shared_ptr<lldb_private::RegularExpression> RegularExpressionSP;
+typedef std::shared_ptr<lldb_private::Queue> QueueSP;
+typedef std::weak_ptr<lldb_private::Queue> QueueWP;
+typedef std::shared_ptr<lldb_private::QueueItem> QueueItemSP;
+typedef std::shared_ptr<lldb_private::REPL> REPLSP;
+typedef std::shared_ptr<lldb_private::RecognizedStackFrame>
+    RecognizedStackFrameSP;
+typedef std::shared_ptr<lldb_private::ScriptSummaryFormat>
+    ScriptSummaryFormatSP;
+typedef std::shared_ptr<lldb_private::ScriptInterpreter> ScriptInterpreterSP;
+typedef std::unique_ptr<lldb_private::ScriptInterpreter> ScriptInterpreterUP;
+typedef std::shared_ptr<lldb_private::Section> SectionSP;
+typedef std::unique_ptr<lldb_private::SectionList> SectionListUP;
+typedef std::weak_ptr<lldb_private::Section> SectionWP;
+typedef std::shared_ptr<lldb_private::SectionLoadList> SectionLoadListSP;
+typedef std::shared_ptr<lldb_private::SearchFilter> SearchFilterSP;
+typedef std::shared_ptr<lldb_private::Settings> SettingsSP;
+typedef std::unique_ptr<lldb_private::SourceManager> SourceManagerUP;
+typedef std::shared_ptr<lldb_private::StackFrame> StackFrameSP;
+typedef std::unique_ptr<lldb_private::StackFrame> StackFrameUP;
+typedef std::weak_ptr<lldb_private::StackFrame> StackFrameWP;
+typedef std::shared_ptr<lldb_private::StackFrameList> StackFrameListSP;
+typedef std::shared_ptr<lldb_private::StackFrameRecognizer>
+    StackFrameRecognizerSP;
+typedef std::shared_ptr<lldb_private::StopInfo> StopInfoSP;
+typedef std::shared_ptr<lldb_private::StoppointLocation> StoppointLocationSP;
+typedef std::shared_ptr<lldb_private::Stream> StreamSP;
+typedef std::weak_ptr<lldb_private::Stream> StreamWP;
+typedef std::shared_ptr<lldb_private::StreamFile> StreamFileSP;
+typedef std::shared_ptr<lldb_private::StringSummaryFormat>
+    StringTypeSummaryImplSP;
+typedef std::unique_ptr<lldb_private::StructuredDataImpl> StructuredDataImplUP;
+typedef std::shared_ptr<lldb_private::StructuredDataPlugin>
+    StructuredDataPluginSP;
+typedef std::weak_ptr<lldb_private::StructuredDataPlugin>
+    StructuredDataPluginWP;
+typedef std::shared_ptr<lldb_private::SymbolFile> SymbolFileSP;
+typedef std::shared_ptr<lldb_private::SymbolFileType> SymbolFileTypeSP;
+typedef std::weak_ptr<lldb_private::SymbolFileType> SymbolFileTypeWP;
+typedef std::shared_ptr<lldb_private::SymbolContextSpecifier>
+    SymbolContextSpecifierSP;
+typedef std::unique_ptr<lldb_private::SymbolVendor> SymbolVendorUP;
+typedef std::shared_ptr<lldb_private::SyntheticChildren> SyntheticChildrenSP;
+typedef std::shared_ptr<lldb_private::SyntheticChildrenFrontEnd>
+    SyntheticChildrenFrontEndSP;
+typedef std::shared_ptr<lldb_private::Target> TargetSP;
+typedef std::weak_ptr<lldb_private::Target> TargetWP;
+typedef std::shared_ptr<lldb_private::TargetProperties> TargetPropertiesSP;
+typedef std::shared_ptr<lldb_private::Thread> ThreadSP;
+typedef std::weak_ptr<lldb_private::Thread> ThreadWP;
+typedef std::shared_ptr<lldb_private::ThreadCollection> ThreadCollectionSP;
+typedef std::shared_ptr<lldb_private::ThreadPlan> ThreadPlanSP;
+typedef std::shared_ptr<lldb_private::ThreadPlanTracer> ThreadPlanTracerSP;
+typedef std::shared_ptr<lldb_private::TraceOptions> TraceOptionsSP;
+typedef std::shared_ptr<lldb_private::Type> TypeSP;
+typedef std::weak_ptr<lldb_private::Type> TypeWP;
+typedef std::shared_ptr<lldb_private::TypeCategoryImpl> TypeCategoryImplSP;
+typedef std::shared_ptr<lldb_private::TypeImpl> TypeImplSP;
+typedef std::shared_ptr<lldb_private::TypeMemberFunctionImpl>
+    TypeMemberFunctionImplSP;
+typedef std::shared_ptr<lldb_private::TypeEnumMemberImpl> TypeEnumMemberImplSP;
+typedef std::shared_ptr<lldb_private::TypeFilterImpl> TypeFilterImplSP;
+typedef std::shared_ptr<lldb_private::TypeSystem> TypeSystemSP;
+typedef std::shared_ptr<lldb_private::TypeFormatImpl> TypeFormatImplSP;
+typedef std::shared_ptr<lldb_private::TypeNameSpecifierImpl>
+    TypeNameSpecifierImplSP;
+typedef std::shared_ptr<lldb_private::TypeSummaryImpl> TypeSummaryImplSP;
+typedef std::shared_ptr<lldb_private::TypeSummaryOptions> TypeSummaryOptionsSP;
+typedef std::shared_ptr<lldb_private::TypeValidatorImpl> TypeValidatorImplSP;
+typedef std::shared_ptr<lldb_private::ScriptedSyntheticChildren>
+    ScriptedSyntheticChildrenSP;
+typedef std::shared_ptr<lldb_private::UnixSignals> UnixSignalsSP;
+typedef std::weak_ptr<lldb_private::UnixSignals> UnixSignalsWP;
+typedef std::shared_ptr<lldb_private::UnwindAssembly> UnwindAssemblySP;
+typedef std::shared_ptr<lldb_private::UnwindPlan> UnwindPlanSP;
+typedef std::shared_ptr<lldb_private::UtilityFunction> UtilityFunctionSP;
+typedef lldb_private::SharingPtr<lldb_private::ValueObject> ValueObjectSP;
+typedef std::shared_ptr<lldb_private::Value> ValueSP;
+typedef std::shared_ptr<lldb_private::ValueList> ValueListSP;
+typedef std::shared_ptr<lldb_private::Variable> VariableSP;
+typedef std::shared_ptr<lldb_private::VariableList> VariableListSP;
+typedef std::shared_ptr<lldb_private::ValueObjectList> ValueObjectListSP;
+typedef std::shared_ptr<lldb_private::Watchpoint> WatchpointSP;
+
+} // namespace lldb
+
+// llvm forward declarations
+namespace llvm {
+
+struct ItaniumPartialDemangler;
+class StringRef;
+
+} // namespace llvm
+
+#endif // #if defined(__cplusplus)
+#endif // LLDB_lldb_forward_h_
diff --git a/linux-x64/clang/include/lldb/lldb-private-defines.h b/linux-x64/clang/include/lldb/lldb-private-defines.h
new file mode 100644
index 0000000..737d9ef
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-private-defines.h
@@ -0,0 +1,36 @@
+//===-- lldb-private-defines.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_lldb_private_defines_h_
+#define liblldb_lldb_private_defines_h_
+
+#if defined(__cplusplus)
+
+// Include Compiler.h here so we don't define LLVM_FALLTHROUGH and then
+// Compiler.h later tries to redefine it.
+#include "llvm/Support/Compiler.h"
+
+#ifndef LLVM_FALLTHROUGH
+
+#ifndef __has_cpp_attribute
+#define __has_cpp_attribute(x) 0
+#endif
+
+/// \macro LLVM_FALLTHROUGH
+/// Marks an empty statement preceding a deliberate switch fallthrough.
+#if __has_cpp_attribute(clang::fallthrough)
+#define LLVM_FALLTHROUGH [[clang::fallthrough]]
+#else
+#define LLVM_FALLTHROUGH
+#endif
+
+#endif // ifndef LLVM_FALLTHROUGH
+
+#endif // #if defined(__cplusplus)
+
+#endif // liblldb_lldb_private_defines_h_
diff --git a/linux-x64/clang/include/lldb/lldb-private-enumerations.h b/linux-x64/clang/include/lldb/lldb-private-enumerations.h
new file mode 100644
index 0000000..3d8b360
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-private-enumerations.h
@@ -0,0 +1,264 @@
+//===-- lldb-private-enumerations.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_private_enumerations_h_
+#define LLDB_lldb_private_enumerations_h_
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FormatProviders.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace lldb_private {
+
+// Thread Step Types
+enum StepType {
+  eStepTypeNone,
+  eStepTypeTrace,     ///< Single step one instruction.
+  eStepTypeTraceOver, ///< Single step one instruction, stepping over.
+  eStepTypeInto,      ///< Single step into a specified context.
+  eStepTypeOver,      ///< Single step over a specified context.
+  eStepTypeOut,       ///< Single step out a specified context.
+  eStepTypeScripted   ///< A step type implemented by the script interpreter.
+};
+
+// Address Types
+enum AddressType {
+  eAddressTypeInvalid = 0,
+  eAddressTypeFile, ///< Address is an address as found in an object or symbol
+                    /// file
+  eAddressTypeLoad, ///< Address is an address as in the current target inferior
+                    /// process
+  eAddressTypeHost  ///< Address is an address in the process that is running
+                    /// this code
+};
+
+// Address Class
+//
+// A way of classifying an address used for disassembling and setting
+// breakpoints. Many object files can track exactly what parts of their object
+// files are code, data and other information. This is of course above and
+// beyond just looking at the section types. For example, code might contain PC
+// relative data and the object file might be able to tell us that an address
+// in code is data.
+enum class AddressClass {
+  eInvalid,
+  eUnknown,
+  eCode,
+  eCodeAlternateISA,
+  eData,
+  eDebug,
+  eRuntime
+};
+
+// Votes - Need a tri-state, yes, no, no opinion...
+enum Vote { eVoteNo = -1, eVoteNoOpinion = 0, eVoteYes = 1 };
+
+enum ArchitectureType {
+  eArchTypeInvalid,
+  eArchTypeMachO,
+  eArchTypeELF,
+  eArchTypeCOFF,
+  kNumArchTypes
+};
+
+/// Settable state variable types.
+///
+
+// typedef enum SettableVariableType
+//{
+//    eSetVarTypeInt,
+//    eSetVarTypeBoolean,
+//    eSetVarTypeString,
+//    eSetVarTypeArray,
+//    eSetVarTypeDictionary,
+//    eSetVarTypeEnum,
+//    eSetVarTypeNone
+//} SettableVariableType;
+
+enum VarSetOperationType {
+  eVarSetOperationReplace,
+  eVarSetOperationInsertBefore,
+  eVarSetOperationInsertAfter,
+  eVarSetOperationRemove,
+  eVarSetOperationAppend,
+  eVarSetOperationClear,
+  eVarSetOperationAssign,
+  eVarSetOperationInvalid
+};
+
+enum ArgumentRepetitionType {
+  eArgRepeatPlain,        // Exactly one occurrence
+  eArgRepeatOptional,     // At most one occurrence, but it's optional
+  eArgRepeatPlus,         // One or more occurrences
+  eArgRepeatStar,         // Zero or more occurrences
+  eArgRepeatRange,        // Repetition of same argument, from 1 to n
+  eArgRepeatPairPlain,    // A pair of arguments that must always go together
+                          // ([arg-type arg-value]), occurs exactly once
+  eArgRepeatPairOptional, // A pair that occurs at most once (optional)
+  eArgRepeatPairPlus,     // One or more occurrences of a pair
+  eArgRepeatPairStar,     // Zero or more occurrences of a pair
+  eArgRepeatPairRange,    // A pair that repeats from 1 to n
+  eArgRepeatPairRangeOptional // A pair that repeats from 1 to n, but is
+                              // optional
+};
+
+enum SortOrder { eSortOrderNone, eSortOrderByAddress, eSortOrderByName };
+
+// LazyBool is for boolean values that need to be calculated lazily. Values
+// start off set to eLazyBoolCalculate, and then they can be calculated once
+// and set to eLazyBoolNo or eLazyBoolYes.
+enum LazyBool { eLazyBoolCalculate = -1, eLazyBoolNo = 0, eLazyBoolYes = 1 };
+
+/// Instruction types
+enum InstructionType {
+  eInstructionTypeAny, // Support for any instructions at all (at least one)
+  eInstructionTypePrologueEpilogue, // All prologue and epilogue instructions
+                                    // that push and pop register values and
+                                    // modify sp/fp
+  eInstructionTypePCModifying,      // Any instruction that modifies the program
+                                    // counter/instruction pointer
+  eInstructionTypeAll               // All instructions of any kind
+
+};
+
+/// Format category entry types
+enum FormatCategoryItem {
+  eFormatCategoryItemSummary = 0x0001,
+  eFormatCategoryItemRegexSummary = 0x0002,
+  eFormatCategoryItemFilter = 0x0004,
+  eFormatCategoryItemRegexFilter = 0x0008,
+  eFormatCategoryItemSynth = 0x0010,
+  eFormatCategoryItemRegexSynth = 0x0020,
+  eFormatCategoryItemValue = 0x0040,
+  eFormatCategoryItemRegexValue = 0x0080,
+  eFormatCategoryItemValidator = 0x0100,
+  eFormatCategoryItemRegexValidator = 0x0200
+};
+
+/// Expression execution policies
+enum ExecutionPolicy {
+  eExecutionPolicyOnlyWhenNeeded,
+  eExecutionPolicyNever,
+  eExecutionPolicyAlways,
+  eExecutionPolicyTopLevel // used for top-level code
+};
+
+// Ways that the FormatManager picks a particular format for a type
+enum FormatterChoiceCriterion {
+  eFormatterChoiceCriterionDirectChoice = 0x00000000,
+  eFormatterChoiceCriterionStrippedPointerReference = 0x00000001,
+  eFormatterChoiceCriterionNavigatedTypedefs = 0x00000002,
+  eFormatterChoiceCriterionRegularExpressionSummary = 0x00000004,
+  eFormatterChoiceCriterionRegularExpressionFilter = 0x00000004,
+  eFormatterChoiceCriterionLanguagePlugin = 0x00000008,
+  eFormatterChoiceCriterionStrippedBitField = 0x00000010,
+  eFormatterChoiceCriterionWentToStaticValue = 0x00000020
+};
+
+// Synchronicity behavior of scripted commands
+enum ScriptedCommandSynchronicity {
+  eScriptedCommandSynchronicitySynchronous,
+  eScriptedCommandSynchronicityAsynchronous,
+  eScriptedCommandSynchronicityCurrentValue // use whatever the current
+                                            // synchronicity is
+};
+
+// Verbosity mode of "po" output
+enum LanguageRuntimeDescriptionDisplayVerbosity {
+  eLanguageRuntimeDescriptionDisplayVerbosityCompact, // only print the
+                                                      // description string, if
+                                                      // any
+  eLanguageRuntimeDescriptionDisplayVerbosityFull,    // print the full-blown
+                                                      // output
+};
+
+// Loading modules from memory
+enum MemoryModuleLoadLevel {
+  eMemoryModuleLoadLevelMinimal,  // Load sections only
+  eMemoryModuleLoadLevelPartial,  // Load function bounds but no symbols
+  eMemoryModuleLoadLevelComplete, // Load sections and all symbols
+};
+
+// Result enums for when reading multiple lines from IOHandlers
+enum class LineStatus {
+  Success, // The line that was just edited if good and should be added to the
+           // lines
+  Status,  // There is an error with the current line and it needs to be
+           // re-edited
+           // before it can be accepted
+  Done     // Lines are complete
+};
+
+// Boolean result of running a Type Validator
+enum class TypeValidatorResult : bool { Success = true, Failure = false };
+
+// Enumerations that can be used to specify scopes types when looking up types.
+enum class CompilerContextKind {
+  Invalid = 0,
+  TranslationUnit,
+  Module,
+  Namespace,
+  Class,
+  Structure,
+  Union,
+  Function,
+  Variable,
+  Enumeration,
+  Typedef
+};
+
+// Enumerations that can be used to specify the kind of metric we're looking at
+// when collecting stats.
+enum StatisticKind {
+  ExpressionSuccessful = 0,
+  ExpressionFailure = 1,
+  FrameVarSuccess = 2,
+  FrameVarFailure = 3,
+  StatisticMax = 4
+};
+
+
+inline std::string GetStatDescription(lldb_private::StatisticKind K) {
+   switch (K) {
+   case StatisticKind::ExpressionSuccessful:
+     return "Number of expr evaluation successes";
+   case StatisticKind::ExpressionFailure:
+     return "Number of expr evaluation failures";
+   case StatisticKind::FrameVarSuccess:
+     return "Number of frame var successes";
+   case StatisticKind::FrameVarFailure:
+     return "Number of frame var failures";
+   case StatisticKind::StatisticMax:
+     return "";
+   }
+   llvm_unreachable("Statistic not registered!");
+}
+
+} // namespace lldb_private
+
+namespace llvm {
+template <> struct format_provider<lldb_private::Vote> {
+  static void format(const lldb_private::Vote &V, llvm::raw_ostream &Stream,
+                     StringRef Style) {
+    switch (V) {
+    case lldb_private::eVoteNo:
+      Stream << "no";
+      return;
+    case lldb_private::eVoteNoOpinion:
+      Stream << "no opinion";
+      return;
+    case lldb_private::eVoteYes:
+      Stream << "yes";
+      return;
+    }
+    Stream << "invalid";
+  }
+};
+}
+
+#endif // LLDB_lldb_private_enumerations_h_
diff --git a/linux-x64/clang/include/lldb/lldb-private-forward.h b/linux-x64/clang/include/lldb/lldb-private-forward.h
new file mode 100644
index 0000000..3300707
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-private-forward.h
@@ -0,0 +1,21 @@
+//===-- lldb-private-forward.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_private_forward_h_
+#define LLDB_lldb_private_forward_h_
+
+namespace lldb_private {
+// forward decls.
+class NativeProcessProtocol;
+class NativeRegisterContext;
+class NativeThreadProtocol;
+class ResumeActionList;
+class UnixSignals;
+}
+
+#endif // #ifndef LLDB_lldb_private_forward_h_
diff --git a/linux-x64/clang/include/lldb/lldb-private-interfaces.h b/linux-x64/clang/include/lldb/lldb-private-interfaces.h
new file mode 100644
index 0000000..3a9f78a
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-private-interfaces.h
@@ -0,0 +1,117 @@
+//===-- lldb-private-interfaces.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_lldb_private_interfaces_h_
+#define liblldb_lldb_private_interfaces_h_
+
+#if defined(__cplusplus)
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#include "lldb/lldb-private-enumerations.h"
+
+#include <set>
+
+namespace lldb_private {
+typedef lldb::ABISP (*ABICreateInstance)(lldb::ProcessSP process_sp, const ArchSpec &arch);
+typedef Disassembler *(*DisassemblerCreateInstance)(const ArchSpec &arch,
+                                                    const char *flavor);
+typedef DynamicLoader *(*DynamicLoaderCreateInstance)(Process *process,
+                                                      bool force);
+typedef lldb::JITLoaderSP (*JITLoaderCreateInstance)(Process *process,
+                                                     bool force);
+typedef ObjectContainer *(*ObjectContainerCreateInstance)(
+    const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
+    lldb::offset_t data_offset, const FileSpec *file, lldb::offset_t offset,
+    lldb::offset_t length);
+typedef size_t (*ObjectFileGetModuleSpecifications)(
+    const FileSpec &file, lldb::DataBufferSP &data_sp,
+    lldb::offset_t data_offset, lldb::offset_t file_offset,
+    lldb::offset_t length, ModuleSpecList &module_specs);
+typedef ObjectFile *(*ObjectFileCreateInstance)(const lldb::ModuleSP &module_sp,
+                                                lldb::DataBufferSP &data_sp,
+                                                lldb::offset_t data_offset,
+                                                const FileSpec *file,
+                                                lldb::offset_t file_offset,
+                                                lldb::offset_t length);
+typedef ObjectFile *(*ObjectFileCreateMemoryInstance)(
+    const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
+    const lldb::ProcessSP &process_sp, lldb::addr_t offset);
+typedef bool (*ObjectFileSaveCore)(const lldb::ProcessSP &process_sp,
+                                   const FileSpec &outfile, Status &error);
+typedef EmulateInstruction *(*EmulateInstructionCreateInstance)(
+    const ArchSpec &arch, InstructionType inst_type);
+typedef OperatingSystem *(*OperatingSystemCreateInstance)(Process *process,
+                                                          bool force);
+typedef Language *(*LanguageCreateInstance)(lldb::LanguageType language);
+typedef LanguageRuntime *(*LanguageRuntimeCreateInstance)(
+    Process *process, lldb::LanguageType language);
+typedef lldb::CommandObjectSP (*LanguageRuntimeGetCommandObject)(
+    CommandInterpreter &interpreter);
+typedef lldb::BreakpointPreconditionSP (
+    *LanguageRuntimeGetExceptionPrecondition)(lldb::LanguageType language,
+                                              bool throw_bp);
+typedef lldb::StructuredDataPluginSP (*StructuredDataPluginCreateInstance)(
+    Process &process);
+typedef Status (*StructuredDataFilterLaunchInfo)(ProcessLaunchInfo &launch_info,
+                                                 Target *target);
+typedef SystemRuntime *(*SystemRuntimeCreateInstance)(Process *process);
+typedef lldb::PlatformSP (*PlatformCreateInstance)(bool force,
+                                                   const ArchSpec *arch);
+typedef lldb::ProcessSP (*ProcessCreateInstance)(
+    lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,
+    const FileSpec *crash_file_path);
+typedef lldb::ScriptInterpreterSP (*ScriptInterpreterCreateInstance)(
+    Debugger &debugger);
+typedef SymbolFile *(*SymbolFileCreateInstance)(ObjectFile *obj_file);
+typedef SymbolVendor *(*SymbolVendorCreateInstance)(
+    const lldb::ModuleSP &module_sp,
+    lldb_private::Stream
+        *feedback_strm); // Module can be NULL for default system symbol vendor
+typedef bool (*BreakpointHitCallback)(void *baton,
+                                      StoppointCallbackContext *context,
+                                      lldb::user_id_t break_id,
+                                      lldb::user_id_t break_loc_id);
+typedef bool (*WatchpointHitCallback)(void *baton,
+                                      StoppointCallbackContext *context,
+                                      lldb::user_id_t watch_id);
+typedef void (*OptionValueChangedCallback)(void *baton,
+                                           OptionValue *option_value);
+typedef bool (*ThreadPlanShouldStopHereCallback)(
+    ThreadPlan *current_plan, Flags &flags, lldb::FrameComparison operation,
+    Status &status, void *baton);
+typedef lldb::ThreadPlanSP (*ThreadPlanStepFromHereCallback)(
+    ThreadPlan *current_plan, Flags &flags, lldb::FrameComparison operation,
+    Status &status, void *baton);
+typedef UnwindAssembly *(*UnwindAssemblyCreateInstance)(const ArchSpec &arch);
+typedef lldb::MemoryHistorySP (*MemoryHistoryCreateInstance)(
+    const lldb::ProcessSP &process_sp);
+typedef lldb::InstrumentationRuntimeType (*InstrumentationRuntimeGetType)();
+typedef lldb::InstrumentationRuntimeSP (*InstrumentationRuntimeCreateInstance)(
+    const lldb::ProcessSP &process_sp);
+typedef lldb::TypeSystemSP (*TypeSystemCreateInstance)(
+    lldb::LanguageType language, Module *module, Target *target);
+typedef lldb::REPLSP (*REPLCreateInstance)(Status &error,
+                                           lldb::LanguageType language,
+                                           Debugger *debugger, Target *target,
+                                           const char *repl_options);
+typedef void (*TypeSystemEnumerateSupportedLanguages)(
+    std::set<lldb::LanguageType> &languages_for_types,
+    std::set<lldb::LanguageType> &languages_for_expressions);
+typedef void (*REPLEnumerateSupportedLanguages)(
+    std::set<lldb::LanguageType> &languages);
+typedef int (*ComparisonFunction)(const void *, const void *);
+typedef void (*DebuggerInitializeCallback)(Debugger &debugger);
+
+} // namespace lldb_private
+
+#endif // #if defined(__cplusplus)
+
+#endif // liblldb_lldb_private_interfaces_h_
diff --git a/linux-x64/clang/include/lldb/lldb-private-types.h b/linux-x64/clang/include/lldb/lldb-private-types.h
new file mode 100644
index 0000000..bff4711
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-private-types.h
@@ -0,0 +1,129 @@
+//===-- lldb-private-types.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_lldb_private_types_h_
+#define liblldb_lldb_private_types_h_
+
+#if defined(__cplusplus)
+
+#include "lldb/lldb-private.h"
+
+#include "llvm/ADT/ArrayRef.h"
+
+namespace llvm {
+namespace sys {
+class DynamicLibrary;
+}
+}
+
+namespace lldb_private {
+class Platform;
+class ExecutionContext;
+
+typedef llvm::sys::DynamicLibrary (*LoadPluginCallbackType)(
+    const lldb::DebuggerSP &debugger_sp, const FileSpec &spec, Status &error);
+
+// Every register is described in detail including its name, alternate name
+// (optional), encoding, size in bytes and the default display format.
+struct RegisterInfo {
+  const char *name;     // Name of this register, can't be NULL
+  const char *alt_name; // Alternate name of this register, can be NULL
+  uint32_t byte_size;   // Size in bytes of the register
+  uint32_t byte_offset; // The byte offset in the register context data where
+                        // this register's value is found.
+  // This is optional, and can be 0 if a particular RegisterContext does not
+  // need to address its registers by byte offset.
+  lldb::Encoding encoding;                 // Encoding of the register bits
+  lldb::Format format;                     // Default display format
+  uint32_t kinds[lldb::kNumRegisterKinds]; // Holds all of the various register
+                                           // numbers for all register kinds
+  uint32_t *value_regs;                    // List of registers (terminated with
+                        // LLDB_INVALID_REGNUM).  If this value is not null,
+                        // all registers in this list will be read first, at
+                        // which point the value for this register will be
+                        // valid.  For example, the value list for ah would be
+                        // eax (x86) or rax (x64).
+  uint32_t *invalidate_regs; // List of registers (terminated with
+                             // LLDB_INVALID_REGNUM).  If this value is not
+                             // null, all registers in this list will be
+                             // invalidated when the value of this register
+                             // changes.  For example, the invalidate list for
+                             // eax would be rax ax, ah, and al.
+  const uint8_t *dynamic_size_dwarf_expr_bytes; // A DWARF expression that when
+                                                // evaluated gives
+  // the byte size of this register.
+  size_t dynamic_size_dwarf_len; // The length of the DWARF expression in bytes
+                                 // in the dynamic_size_dwarf_expr_bytes
+                                 // member.
+
+  llvm::ArrayRef<uint8_t> data(const uint8_t *context_base) const {
+    return llvm::ArrayRef<uint8_t>(context_base + byte_offset, byte_size);
+  }
+
+  llvm::MutableArrayRef<uint8_t> mutable_data(uint8_t *context_base) const {
+    return llvm::MutableArrayRef<uint8_t>(context_base + byte_offset,
+                                          byte_size);
+  }
+};
+
+// Registers are grouped into register sets
+struct RegisterSet {
+  const char *name;          // Name of this register set
+  const char *short_name;    // A short name for this register set
+  size_t num_registers;      // The number of registers in REGISTERS array below
+  const uint32_t *registers; // An array of register indices in this set.  The
+                             // values in this array are
+  // *indices* (not register numbers) into a particular RegisterContext's
+  // register array.  For example, if eax is defined at index 4 for a
+  // particular RegisterContext, eax would be included in this RegisterSet by
+  // adding the value 4.  Not by adding the value lldb_eax_i386.
+};
+
+struct OptionEnumValueElement {
+  int64_t value;
+  const char *string_value;
+  const char *usage;
+};
+
+using OptionEnumValues = llvm::ArrayRef<OptionEnumValueElement>;
+
+struct OptionValidator {
+  virtual ~OptionValidator() {}
+  virtual bool IsValid(Platform &platform,
+                       const ExecutionContext &target) const = 0;
+  virtual const char *ShortConditionString() const = 0;
+  virtual const char *LongConditionString() const = 0;
+};
+
+struct OptionDefinition {
+  uint32_t usage_mask; // Used to mark options that can be used together.  If (1
+                       // << n & usage_mask) != 0
+                       // then this option belongs to option set n.
+  bool required;       // This option is required (in the current usage level)
+  const char *long_option; // Full name for this option.
+  int short_option;        // Single character for this option.
+  int option_has_arg; // no_argument, required_argument or optional_argument
+  OptionValidator *validator; // If non-NULL, option is valid iff
+                              // |validator->IsValid()|, otherwise always valid.
+  OptionEnumValues enum_values; // If not empty, an array of enum values.
+  uint32_t completion_type; // Cookie the option class can use to do define the
+                            // argument completion.
+  lldb::CommandArgumentType argument_type; // Type of argument this option takes
+  const char *usage_text; // Full text explaining what this options does and
+                          // what (if any) argument to
+                          // pass it.
+};
+
+typedef struct type128 { uint64_t x[2]; } type128;
+typedef struct type256 { uint64_t x[4]; } type256;
+
+} // namespace lldb_private
+
+#endif // #if defined(__cplusplus)
+
+#endif // liblldb_lldb_private_types_h_
diff --git a/linux-x64/clang/include/lldb/lldb-private.h b/linux-x64/clang/include/lldb/lldb-private.h
new file mode 100644
index 0000000..24954ad
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-private.h
@@ -0,0 +1,28 @@
+//===-- lldb-private.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_lldb_private_h_
+#define lldb_lldb_private_h_
+
+#if defined(__cplusplus)
+
+#include "lldb/lldb-private-defines.h"
+#include "lldb/lldb-private-enumerations.h"
+#include "lldb/lldb-private-interfaces.h"
+#include "lldb/lldb-private-types.h"
+#include "lldb/lldb-public.h"
+
+namespace lldb_private {
+
+const char *GetVersion();
+
+} // namespace lldb_private
+
+#endif // defined(__cplusplus)
+
+#endif // lldb_lldb_private_h_
diff --git a/linux-x64/clang/include/lldb/lldb-public.h b/linux-x64/clang/include/lldb/lldb-public.h
new file mode 100644
index 0000000..449062f
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-public.h
@@ -0,0 +1,17 @@
+//===-- lldb-public.h -------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_h_
+#define LLDB_lldb_h_
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-types.h"
+
+#endif // LLDB_lldb_h_
diff --git a/linux-x64/clang/include/lldb/lldb-types.h b/linux-x64/clang/include/lldb/lldb-types.h
new file mode 100644
index 0000000..414a9f3
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-types.h
@@ -0,0 +1,94 @@
+//===-- lldb-types.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_types_h_
+#define LLDB_lldb_types_h_
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/lldb-forward.h"
+
+#include <stdint.h>
+
+// All host systems must define:
+//  lldb::thread_t          The native thread type for spawned threads on the
+//  system
+//  lldb::thread_arg_t      The type of the one any only thread creation
+//  argument for the host system
+//  lldb::thread_result_t   The return type that gets returned when a thread
+//  finishes.
+//  lldb::thread_func_t     The function prototype used to spawn a thread on the
+//  host system.
+//  #define LLDB_INVALID_PROCESS_ID ...
+//  #define LLDB_INVALID_THREAD_ID ...
+//  #define LLDB_INVALID_HOST_THREAD ...
+
+// TODO: Add a bunch of ifdefs to determine the host system and what
+// things should be defined. Currently MacOSX is being assumed by default since
+// that is what lldb was first developed for.
+
+#ifdef _WIN32
+
+#include <process.h>
+
+namespace lldb {
+typedef void *rwlock_t;
+typedef void *process_t;             // Process type is HANDLE
+typedef void *thread_t;              // Host thread type
+typedef void *file_t;                // Host file type
+typedef unsigned int __w64 socket_t; // Host socket type
+typedef void *thread_arg_t;                       // Host thread argument type
+typedef unsigned thread_result_t;                 // Host thread result type
+typedef thread_result_t (*thread_func_t)(void *); // Host thread function type
+typedef void *pipe_t;                             // Host pipe type is HANDLE
+} // namespace lldb
+
+#else
+
+#include <pthread.h>
+
+namespace lldb {
+// MacOSX Types
+typedef pthread_rwlock_t rwlock_t;
+typedef uint64_t process_t; // Process type is just a pid.
+typedef pthread_t thread_t; // Host thread type
+typedef int file_t;         // Host file type
+typedef int socket_t;       // Host socket type
+typedef void *thread_arg_t;             // Host thread argument type
+typedef void *thread_result_t;          // Host thread result type
+typedef void *(*thread_func_t)(void *); // Host thread function type
+typedef int pipe_t;                     // Host pipe type
+} // namespace lldb
+
+#endif
+
+namespace lldb {
+typedef void (*LogOutputCallback)(const char *, void *baton);
+typedef bool (*CommandOverrideCallback)(void *baton, const char **argv);
+typedef bool (*CommandOverrideCallbackWithResult)(
+    void *baton, const char **argv, lldb_private::CommandReturnObject &result);
+typedef bool (*ExpressionCancelCallback)(ExpressionEvaluationPhase phase,
+                                         void *baton);
+} // namespace lldb
+
+#define LLDB_INVALID_PROCESS ((lldb::process_t)-1)
+#define LLDB_INVALID_HOST_THREAD ((lldb::thread_t)NULL)
+#define LLDB_INVALID_PIPE ((lldb::pipe_t)-1)
+
+namespace lldb {
+typedef uint64_t addr_t;
+typedef uint64_t user_id_t;
+typedef uint64_t pid_t;
+typedef uint64_t tid_t;
+typedef uint64_t offset_t;
+typedef int32_t break_id_t;
+typedef int32_t watch_id_t;
+typedef void *opaque_compiler_type_t;
+typedef uint64_t queue_id_t;
+} // namespace lldb
+
+#endif // LLDB_lldb_types_h_
diff --git a/linux-x64/clang/include/lldb/lldb-versioning.h b/linux-x64/clang/include/lldb/lldb-versioning.h
new file mode 100644
index 0000000..702ebd1
--- /dev/null
+++ b/linux-x64/clang/include/lldb/lldb-versioning.h
@@ -0,0 +1,1542 @@
+//===-- lldb-versioning.h ----------------------------------------*- C++
+//-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_lldb_versioning_h_
+#define LLDB_lldb_versioning_h_
+
+// LLDB API version
+#define LLDB_API_MAJOR_VERSION 1
+#define LLDB_API_MINOR_VERSION 0
+
+/*
+  API versioning
+ ---------------------------------
+
+ The LLDB API is versioned independently of the LLDB source base
+ Our API version numbers are composed of a major and a minor number
+
+ The major number means a complete and stable revision of the API. Major numbers
+ are compatibility breakers
+ (i.e. when we change the API major number, there is no promise of compatibility
+ with the previous major version
+  and we are free to remove and/or change any APIs)
+ Minor numbers are a work-in-progress evolution of the API. APIs will not be
+ removed or changed across minor versions
+ (minors do not break compatibility). However, we can deprecate APIs in minor
+ versions or add new APIs in minor versions
+ A deprecated API is supposedly going to be removed in the next major version
+ and will generate a warning if used
+ APIs we add in minor versions will not be removed (at least until the following
+ major) but they might theoretically be deprecated
+ in a following minor version
+ Users are discouraged from using the LLDB version number to test for API
+ features and should instead use the API version checking
+ as discussed below
+
+  API version checking
+ ---------------------------------
+
+ You can (optionally) sign into an API version checking feature
+ To do so you need to define three macros:
+ LLDB_API_CHECK_VERSIONING - define to any value (or no value)
+ LLDB_API_MAJOR_VERSION_WANTED - which major version of the LLDB API you are
+ targeting
+ LLDB_API_MINOR_VERSION_WANTED - which minor version of the LLDB API you are
+ targeting
+
+ If these macros exist - LLDB will enable version checking of the public API
+
+ If LLDB_API_MAJOR_VERSION is not equal to LLDB_API_MAJOR_VERSION_WANTED we will
+ immediately halt your compilation with an error
+ This is by design, since we do not make any promise of compatibility across
+ major versions - if you really want to test your luck, disable the versioning
+ altogether
+
+ If the major version test passes, you have signed up for a specific minor
+ version of the API
+ Whenever we add or deprecate an API in a minor version, we will mark it with
+ either
+ LLDB_API_NEW_IN_DOT_x - this API is new in LLDB .x
+ LLDB_API_DEPRECATED_IN_DOT_x - this API is deprecated as of .x
+
+ If you are using an API new in DOT_x
+  if LLDB_API_MINOR_VERSION_WANTED >= x then all is well, else you will get a
+ compilation error
+   This is meant to prevent you from using APIs that are newer than whatever
+ LLDB you want to target
+
+ If you are using an API deprecated in DOT_x
+  if LLDB_API_MINOR_VERSION_WANTED >= x then you will get a compilation warning,
+ else all is well
+  This is meant to let you know that you are using an API that is deprecated and
+ might go away
+
+  Caveats
+ ---------------------------------
+
+ Version checking only works on clang on OSX - you will get an error if you try
+ to enable it on any other OS/compiler
+ If you want to enable version checking on other platforms, you will need to
+ define appropriate implementations for
+ LLDB_API_IMPL_DEPRECATED and LLDB_API_IMPL_TOONEW and any other infrastructure
+ your compiler needs for this purpose
+
+ We have no deprecation-as-error mode
+
+ There is no support for API versioning in Python
+
+ We reserve to use macros whose names begin with LLDB_API_ and you should not
+ use them in your source code as they might conflict
+ with present or future macro names we are using to implement versioning
+*/
+
+// if you want the version checking to work on other OS/compiler, define
+// appropriate IMPL_DEPRECATED/IMPL_TOONEW and define
+// LLDB_API_CHECK_VERSIONING_WORKS when you are ready to go live
+#if defined(__APPLE__) && defined(__clang__)
+#define LLDB_API_IMPL_DEPRECATED __attribute__((deprecated))
+#define LLDB_API_IMPL_TOONEW __attribute__((unavailable))
+#define LLDB_API_CHECK_VERSIONING_WORKS
+#endif
+
+#if defined(LLDB_API_CHECK_VERSIONING) &&                                      \
+    !defined(LLDB_API_CHECK_VERSIONING_WORKS)
+#error                                                                         \
+    "API version checking will not work here - please disable or create and submit patches to lldb-versioning.h"
+#endif
+
+#if defined(LLDB_API_CHECK_VERSIONING_WORKS) &&                                \
+    (!defined(LLDB_API_IMPL_DEPRECATED) || !defined(LLDB_API_IMPL_TOONEW))
+#error                                                                         \
+    "LLDB_API_CHECK_VERSIONING_WORKS needs LLDB_API_IMPL_DEPRECATED and LLDB_API_IMPL_TOONEW to be defined"
+#endif
+
+#if defined(LLDB_API_CHECK_VERSIONING) &&                                      \
+    defined(LLDB_API_MAJOR_VERSION_WANTED) &&                                  \
+    defined(LLDB_API_MINOR_VERSION_WANTED)
+
+#if defined(LLDB_API_MAJOR_VERSION) &&                                         \
+    (LLDB_API_MAJOR_VERSION != LLDB_API_MAJOR_VERSION_WANTED)
+#error                                                                         \
+    "Cannot link using this LLDB version - public API versions are incompatible"
+#endif
+
+#define LLDB_API_MINOR_VERSION_DOT_0 0
+#define LLDB_API_MINOR_VERSION_DOT_1 1
+#define LLDB_API_MINOR_VERSION_DOT_2 2
+#define LLDB_API_MINOR_VERSION_DOT_3 3
+#define LLDB_API_MINOR_VERSION_DOT_4 4
+#define LLDB_API_MINOR_VERSION_DOT_5 5
+#define LLDB_API_MINOR_VERSION_DOT_6 6
+#define LLDB_API_MINOR_VERSION_DOT_7 7
+#define LLDB_API_MINOR_VERSION_DOT_8 8
+#define LLDB_API_MINOR_VERSION_DOT_9 9
+#define LLDB_API_MINOR_VERSION_DOT_10 10
+#define LLDB_API_MINOR_VERSION_DOT_11 11
+#define LLDB_API_MINOR_VERSION_DOT_12 12
+#define LLDB_API_MINOR_VERSION_DOT_13 13
+#define LLDB_API_MINOR_VERSION_DOT_14 14
+#define LLDB_API_MINOR_VERSION_DOT_15 15
+#define LLDB_API_MINOR_VERSION_DOT_16 16
+#define LLDB_API_MINOR_VERSION_DOT_17 17
+#define LLDB_API_MINOR_VERSION_DOT_18 18
+#define LLDB_API_MINOR_VERSION_DOT_19 19
+#define LLDB_API_MINOR_VERSION_DOT_20 20
+#define LLDB_API_MINOR_VERSION_DOT_21 21
+#define LLDB_API_MINOR_VERSION_DOT_22 22
+#define LLDB_API_MINOR_VERSION_DOT_23 23
+#define LLDB_API_MINOR_VERSION_DOT_24 24
+#define LLDB_API_MINOR_VERSION_DOT_25 25
+#define LLDB_API_MINOR_VERSION_DOT_26 26
+#define LLDB_API_MINOR_VERSION_DOT_27 27
+#define LLDB_API_MINOR_VERSION_DOT_28 28
+#define LLDB_API_MINOR_VERSION_DOT_29 29
+#define LLDB_API_MINOR_VERSION_DOT_30 30
+#define LLDB_API_MINOR_VERSION_DOT_31 31
+#define LLDB_API_MINOR_VERSION_DOT_32 32
+#define LLDB_API_MINOR_VERSION_DOT_33 33
+#define LLDB_API_MINOR_VERSION_DOT_34 34
+#define LLDB_API_MINOR_VERSION_DOT_35 35
+#define LLDB_API_MINOR_VERSION_DOT_36 36
+#define LLDB_API_MINOR_VERSION_DOT_37 37
+#define LLDB_API_MINOR_VERSION_DOT_38 38
+#define LLDB_API_MINOR_VERSION_DOT_39 39
+#define LLDB_API_MINOR_VERSION_DOT_40 40
+#define LLDB_API_MINOR_VERSION_DOT_41 41
+#define LLDB_API_MINOR_VERSION_DOT_42 42
+#define LLDB_API_MINOR_VERSION_DOT_43 43
+#define LLDB_API_MINOR_VERSION_DOT_44 44
+#define LLDB_API_MINOR_VERSION_DOT_45 45
+#define LLDB_API_MINOR_VERSION_DOT_46 46
+#define LLDB_API_MINOR_VERSION_DOT_47 47
+#define LLDB_API_MINOR_VERSION_DOT_48 48
+#define LLDB_API_MINOR_VERSION_DOT_49 49
+#define LLDB_API_MINOR_VERSION_DOT_50 50
+#define LLDB_API_MINOR_VERSION_DOT_51 51
+#define LLDB_API_MINOR_VERSION_DOT_52 52
+#define LLDB_API_MINOR_VERSION_DOT_53 53
+#define LLDB_API_MINOR_VERSION_DOT_54 54
+#define LLDB_API_MINOR_VERSION_DOT_55 55
+#define LLDB_API_MINOR_VERSION_DOT_56 56
+#define LLDB_API_MINOR_VERSION_DOT_57 57
+#define LLDB_API_MINOR_VERSION_DOT_58 58
+#define LLDB_API_MINOR_VERSION_DOT_59 59
+#define LLDB_API_MINOR_VERSION_DOT_60 60
+#define LLDB_API_MINOR_VERSION_DOT_61 61
+#define LLDB_API_MINOR_VERSION_DOT_62 62
+#define LLDB_API_MINOR_VERSION_DOT_63 63
+#define LLDB_API_MINOR_VERSION_DOT_64 64
+#define LLDB_API_MINOR_VERSION_DOT_65 65
+#define LLDB_API_MINOR_VERSION_DOT_66 66
+#define LLDB_API_MINOR_VERSION_DOT_67 67
+#define LLDB_API_MINOR_VERSION_DOT_68 68
+#define LLDB_API_MINOR_VERSION_DOT_69 69
+#define LLDB_API_MINOR_VERSION_DOT_70 70
+#define LLDB_API_MINOR_VERSION_DOT_71 71
+#define LLDB_API_MINOR_VERSION_DOT_72 72
+#define LLDB_API_MINOR_VERSION_DOT_73 73
+#define LLDB_API_MINOR_VERSION_DOT_74 74
+#define LLDB_API_MINOR_VERSION_DOT_75 75
+#define LLDB_API_MINOR_VERSION_DOT_76 76
+#define LLDB_API_MINOR_VERSION_DOT_77 77
+#define LLDB_API_MINOR_VERSION_DOT_78 78
+#define LLDB_API_MINOR_VERSION_DOT_79 79
+#define LLDB_API_MINOR_VERSION_DOT_80 80
+#define LLDB_API_MINOR_VERSION_DOT_81 81
+#define LLDB_API_MINOR_VERSION_DOT_82 82
+#define LLDB_API_MINOR_VERSION_DOT_83 83
+#define LLDB_API_MINOR_VERSION_DOT_84 84
+#define LLDB_API_MINOR_VERSION_DOT_85 85
+#define LLDB_API_MINOR_VERSION_DOT_86 86
+#define LLDB_API_MINOR_VERSION_DOT_87 87
+#define LLDB_API_MINOR_VERSION_DOT_88 88
+#define LLDB_API_MINOR_VERSION_DOT_89 89
+#define LLDB_API_MINOR_VERSION_DOT_90 90
+#define LLDB_API_MINOR_VERSION_DOT_91 91
+#define LLDB_API_MINOR_VERSION_DOT_92 92
+#define LLDB_API_MINOR_VERSION_DOT_93 93
+#define LLDB_API_MINOR_VERSION_DOT_94 94
+#define LLDB_API_MINOR_VERSION_DOT_95 95
+#define LLDB_API_MINOR_VERSION_DOT_96 96
+#define LLDB_API_MINOR_VERSION_DOT_97 97
+#define LLDB_API_MINOR_VERSION_DOT_98 98
+#define LLDB_API_MINOR_VERSION_DOT_99 99
+
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_0
+#define LLDB_API_NEW_IN_DOT_0 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_0
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_0
+#define LLDB_API_DEPRECATED_IN_DOT_0 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_0
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_1
+#define LLDB_API_NEW_IN_DOT_1 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_1
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_1
+#define LLDB_API_DEPRECATED_IN_DOT_1 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_1
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_2
+#define LLDB_API_NEW_IN_DOT_2 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_2
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_2
+#define LLDB_API_DEPRECATED_IN_DOT_2 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_2
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_3
+#define LLDB_API_NEW_IN_DOT_3 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_3
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_3
+#define LLDB_API_DEPRECATED_IN_DOT_3 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_3
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_4
+#define LLDB_API_NEW_IN_DOT_4 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_4
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_4
+#define LLDB_API_DEPRECATED_IN_DOT_4 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_4
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_5
+#define LLDB_API_NEW_IN_DOT_5 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_5
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_5
+#define LLDB_API_DEPRECATED_IN_DOT_5 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_5
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_6
+#define LLDB_API_NEW_IN_DOT_6 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_6
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_6
+#define LLDB_API_DEPRECATED_IN_DOT_6 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_6
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_7
+#define LLDB_API_NEW_IN_DOT_7 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_7
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_7
+#define LLDB_API_DEPRECATED_IN_DOT_7 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_7
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_8
+#define LLDB_API_NEW_IN_DOT_8 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_8
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_8
+#define LLDB_API_DEPRECATED_IN_DOT_8 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_8
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_9
+#define LLDB_API_NEW_IN_DOT_9 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_9
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_9
+#define LLDB_API_DEPRECATED_IN_DOT_9 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_9
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_10
+#define LLDB_API_NEW_IN_DOT_10 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_10
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_10
+#define LLDB_API_DEPRECATED_IN_DOT_10 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_10
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_11
+#define LLDB_API_NEW_IN_DOT_11 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_11
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_11
+#define LLDB_API_DEPRECATED_IN_DOT_11 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_11
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_12
+#define LLDB_API_NEW_IN_DOT_12 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_12
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_12
+#define LLDB_API_DEPRECATED_IN_DOT_12 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_12
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_13
+#define LLDB_API_NEW_IN_DOT_13 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_13
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_13
+#define LLDB_API_DEPRECATED_IN_DOT_13 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_13
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_14
+#define LLDB_API_NEW_IN_DOT_14 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_14
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_14
+#define LLDB_API_DEPRECATED_IN_DOT_14 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_14
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_15
+#define LLDB_API_NEW_IN_DOT_15 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_15
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_15
+#define LLDB_API_DEPRECATED_IN_DOT_15 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_15
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_16
+#define LLDB_API_NEW_IN_DOT_16 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_16
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_16
+#define LLDB_API_DEPRECATED_IN_DOT_16 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_16
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_17
+#define LLDB_API_NEW_IN_DOT_17 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_17
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_17
+#define LLDB_API_DEPRECATED_IN_DOT_17 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_17
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_18
+#define LLDB_API_NEW_IN_DOT_18 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_18
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_18
+#define LLDB_API_DEPRECATED_IN_DOT_18 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_18
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_19
+#define LLDB_API_NEW_IN_DOT_19 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_19
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_19
+#define LLDB_API_DEPRECATED_IN_DOT_19 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_19
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_20
+#define LLDB_API_NEW_IN_DOT_20 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_20
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_20
+#define LLDB_API_DEPRECATED_IN_DOT_20 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_20
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_21
+#define LLDB_API_NEW_IN_DOT_21 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_21
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_21
+#define LLDB_API_DEPRECATED_IN_DOT_21 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_21
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_22
+#define LLDB_API_NEW_IN_DOT_22 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_22
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_22
+#define LLDB_API_DEPRECATED_IN_DOT_22 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_22
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_23
+#define LLDB_API_NEW_IN_DOT_23 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_23
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_23
+#define LLDB_API_DEPRECATED_IN_DOT_23 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_23
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_24
+#define LLDB_API_NEW_IN_DOT_24 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_24
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_24
+#define LLDB_API_DEPRECATED_IN_DOT_24 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_24
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_25
+#define LLDB_API_NEW_IN_DOT_25 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_25
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_25
+#define LLDB_API_DEPRECATED_IN_DOT_25 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_25
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_26
+#define LLDB_API_NEW_IN_DOT_26 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_26
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_26
+#define LLDB_API_DEPRECATED_IN_DOT_26 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_26
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_27
+#define LLDB_API_NEW_IN_DOT_27 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_27
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_27
+#define LLDB_API_DEPRECATED_IN_DOT_27 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_27
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_28
+#define LLDB_API_NEW_IN_DOT_28 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_28
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_28
+#define LLDB_API_DEPRECATED_IN_DOT_28 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_28
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_29
+#define LLDB_API_NEW_IN_DOT_29 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_29
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_29
+#define LLDB_API_DEPRECATED_IN_DOT_29 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_29
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_30
+#define LLDB_API_NEW_IN_DOT_30 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_30
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_30
+#define LLDB_API_DEPRECATED_IN_DOT_30 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_30
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_31
+#define LLDB_API_NEW_IN_DOT_31 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_31
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_31
+#define LLDB_API_DEPRECATED_IN_DOT_31 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_31
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_32
+#define LLDB_API_NEW_IN_DOT_32 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_32
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_32
+#define LLDB_API_DEPRECATED_IN_DOT_32 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_32
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_33
+#define LLDB_API_NEW_IN_DOT_33 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_33
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_33
+#define LLDB_API_DEPRECATED_IN_DOT_33 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_33
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_34
+#define LLDB_API_NEW_IN_DOT_34 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_34
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_34
+#define LLDB_API_DEPRECATED_IN_DOT_34 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_34
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_35
+#define LLDB_API_NEW_IN_DOT_35 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_35
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_35
+#define LLDB_API_DEPRECATED_IN_DOT_35 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_35
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_36
+#define LLDB_API_NEW_IN_DOT_36 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_36
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_36
+#define LLDB_API_DEPRECATED_IN_DOT_36 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_36
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_37
+#define LLDB_API_NEW_IN_DOT_37 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_37
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_37
+#define LLDB_API_DEPRECATED_IN_DOT_37 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_37
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_38
+#define LLDB_API_NEW_IN_DOT_38 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_38
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_38
+#define LLDB_API_DEPRECATED_IN_DOT_38 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_38
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_39
+#define LLDB_API_NEW_IN_DOT_39 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_39
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_39
+#define LLDB_API_DEPRECATED_IN_DOT_39 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_39
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_40
+#define LLDB_API_NEW_IN_DOT_40 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_40
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_40
+#define LLDB_API_DEPRECATED_IN_DOT_40 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_40
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_41
+#define LLDB_API_NEW_IN_DOT_41 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_41
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_41
+#define LLDB_API_DEPRECATED_IN_DOT_41 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_41
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_42
+#define LLDB_API_NEW_IN_DOT_42 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_42
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_42
+#define LLDB_API_DEPRECATED_IN_DOT_42 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_42
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_43
+#define LLDB_API_NEW_IN_DOT_43 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_43
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_43
+#define LLDB_API_DEPRECATED_IN_DOT_43 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_43
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_44
+#define LLDB_API_NEW_IN_DOT_44 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_44
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_44
+#define LLDB_API_DEPRECATED_IN_DOT_44 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_44
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_45
+#define LLDB_API_NEW_IN_DOT_45 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_45
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_45
+#define LLDB_API_DEPRECATED_IN_DOT_45 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_45
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_46
+#define LLDB_API_NEW_IN_DOT_46 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_46
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_46
+#define LLDB_API_DEPRECATED_IN_DOT_46 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_46
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_47
+#define LLDB_API_NEW_IN_DOT_47 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_47
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_47
+#define LLDB_API_DEPRECATED_IN_DOT_47 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_47
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_48
+#define LLDB_API_NEW_IN_DOT_48 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_48
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_48
+#define LLDB_API_DEPRECATED_IN_DOT_48 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_48
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_49
+#define LLDB_API_NEW_IN_DOT_49 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_49
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_49
+#define LLDB_API_DEPRECATED_IN_DOT_49 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_49
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_50
+#define LLDB_API_NEW_IN_DOT_50 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_50
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_50
+#define LLDB_API_DEPRECATED_IN_DOT_50 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_50
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_51
+#define LLDB_API_NEW_IN_DOT_51 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_51
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_51
+#define LLDB_API_DEPRECATED_IN_DOT_51 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_51
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_52
+#define LLDB_API_NEW_IN_DOT_52 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_52
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_52
+#define LLDB_API_DEPRECATED_IN_DOT_52 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_52
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_53
+#define LLDB_API_NEW_IN_DOT_53 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_53
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_53
+#define LLDB_API_DEPRECATED_IN_DOT_53 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_53
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_54
+#define LLDB_API_NEW_IN_DOT_54 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_54
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_54
+#define LLDB_API_DEPRECATED_IN_DOT_54 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_54
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_55
+#define LLDB_API_NEW_IN_DOT_55 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_55
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_55
+#define LLDB_API_DEPRECATED_IN_DOT_55 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_55
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_56
+#define LLDB_API_NEW_IN_DOT_56 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_56
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_56
+#define LLDB_API_DEPRECATED_IN_DOT_56 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_56
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_57
+#define LLDB_API_NEW_IN_DOT_57 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_57
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_57
+#define LLDB_API_DEPRECATED_IN_DOT_57 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_57
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_58
+#define LLDB_API_NEW_IN_DOT_58 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_58
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_58
+#define LLDB_API_DEPRECATED_IN_DOT_58 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_58
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_59
+#define LLDB_API_NEW_IN_DOT_59 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_59
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_59
+#define LLDB_API_DEPRECATED_IN_DOT_59 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_59
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_60
+#define LLDB_API_NEW_IN_DOT_60 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_60
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_60
+#define LLDB_API_DEPRECATED_IN_DOT_60 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_60
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_61
+#define LLDB_API_NEW_IN_DOT_61 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_61
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_61
+#define LLDB_API_DEPRECATED_IN_DOT_61 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_61
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_62
+#define LLDB_API_NEW_IN_DOT_62 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_62
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_62
+#define LLDB_API_DEPRECATED_IN_DOT_62 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_62
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_63
+#define LLDB_API_NEW_IN_DOT_63 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_63
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_63
+#define LLDB_API_DEPRECATED_IN_DOT_63 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_63
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_64
+#define LLDB_API_NEW_IN_DOT_64 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_64
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_64
+#define LLDB_API_DEPRECATED_IN_DOT_64 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_64
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_65
+#define LLDB_API_NEW_IN_DOT_65 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_65
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_65
+#define LLDB_API_DEPRECATED_IN_DOT_65 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_65
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_66
+#define LLDB_API_NEW_IN_DOT_66 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_66
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_66
+#define LLDB_API_DEPRECATED_IN_DOT_66 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_66
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_67
+#define LLDB_API_NEW_IN_DOT_67 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_67
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_67
+#define LLDB_API_DEPRECATED_IN_DOT_67 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_67
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_68
+#define LLDB_API_NEW_IN_DOT_68 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_68
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_68
+#define LLDB_API_DEPRECATED_IN_DOT_68 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_68
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_69
+#define LLDB_API_NEW_IN_DOT_69 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_69
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_69
+#define LLDB_API_DEPRECATED_IN_DOT_69 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_69
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_70
+#define LLDB_API_NEW_IN_DOT_70 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_70
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_70
+#define LLDB_API_DEPRECATED_IN_DOT_70 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_70
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_71
+#define LLDB_API_NEW_IN_DOT_71 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_71
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_71
+#define LLDB_API_DEPRECATED_IN_DOT_71 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_71
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_72
+#define LLDB_API_NEW_IN_DOT_72 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_72
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_72
+#define LLDB_API_DEPRECATED_IN_DOT_72 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_72
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_73
+#define LLDB_API_NEW_IN_DOT_73 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_73
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_73
+#define LLDB_API_DEPRECATED_IN_DOT_73 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_73
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_74
+#define LLDB_API_NEW_IN_DOT_74 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_74
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_74
+#define LLDB_API_DEPRECATED_IN_DOT_74 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_74
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_75
+#define LLDB_API_NEW_IN_DOT_75 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_75
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_75
+#define LLDB_API_DEPRECATED_IN_DOT_75 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_75
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_76
+#define LLDB_API_NEW_IN_DOT_76 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_76
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_76
+#define LLDB_API_DEPRECATED_IN_DOT_76 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_76
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_77
+#define LLDB_API_NEW_IN_DOT_77 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_77
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_77
+#define LLDB_API_DEPRECATED_IN_DOT_77 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_77
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_78
+#define LLDB_API_NEW_IN_DOT_78 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_78
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_78
+#define LLDB_API_DEPRECATED_IN_DOT_78 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_78
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_79
+#define LLDB_API_NEW_IN_DOT_79 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_79
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_79
+#define LLDB_API_DEPRECATED_IN_DOT_79 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_79
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_80
+#define LLDB_API_NEW_IN_DOT_80 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_80
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_80
+#define LLDB_API_DEPRECATED_IN_DOT_80 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_80
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_81
+#define LLDB_API_NEW_IN_DOT_81 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_81
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_81
+#define LLDB_API_DEPRECATED_IN_DOT_81 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_81
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_82
+#define LLDB_API_NEW_IN_DOT_82 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_82
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_82
+#define LLDB_API_DEPRECATED_IN_DOT_82 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_82
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_83
+#define LLDB_API_NEW_IN_DOT_83 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_83
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_83
+#define LLDB_API_DEPRECATED_IN_DOT_83 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_83
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_84
+#define LLDB_API_NEW_IN_DOT_84 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_84
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_84
+#define LLDB_API_DEPRECATED_IN_DOT_84 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_84
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_85
+#define LLDB_API_NEW_IN_DOT_85 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_85
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_85
+#define LLDB_API_DEPRECATED_IN_DOT_85 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_85
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_86
+#define LLDB_API_NEW_IN_DOT_86 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_86
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_86
+#define LLDB_API_DEPRECATED_IN_DOT_86 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_86
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_87
+#define LLDB_API_NEW_IN_DOT_87 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_87
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_87
+#define LLDB_API_DEPRECATED_IN_DOT_87 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_87
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_88
+#define LLDB_API_NEW_IN_DOT_88 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_88
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_88
+#define LLDB_API_DEPRECATED_IN_DOT_88 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_88
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_89
+#define LLDB_API_NEW_IN_DOT_89 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_89
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_89
+#define LLDB_API_DEPRECATED_IN_DOT_89 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_89
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_90
+#define LLDB_API_NEW_IN_DOT_90 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_90
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_90
+#define LLDB_API_DEPRECATED_IN_DOT_90 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_90
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_91
+#define LLDB_API_NEW_IN_DOT_91 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_91
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_91
+#define LLDB_API_DEPRECATED_IN_DOT_91 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_91
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_92
+#define LLDB_API_NEW_IN_DOT_92 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_92
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_92
+#define LLDB_API_DEPRECATED_IN_DOT_92 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_92
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_93
+#define LLDB_API_NEW_IN_DOT_93 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_93
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_93
+#define LLDB_API_DEPRECATED_IN_DOT_93 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_93
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_94
+#define LLDB_API_NEW_IN_DOT_94 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_94
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_94
+#define LLDB_API_DEPRECATED_IN_DOT_94 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_94
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_95
+#define LLDB_API_NEW_IN_DOT_95 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_95
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_95
+#define LLDB_API_DEPRECATED_IN_DOT_95 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_95
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_96
+#define LLDB_API_NEW_IN_DOT_96 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_96
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_96
+#define LLDB_API_DEPRECATED_IN_DOT_96 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_96
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_97
+#define LLDB_API_NEW_IN_DOT_97 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_97
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_97
+#define LLDB_API_DEPRECATED_IN_DOT_97 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_97
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_98
+#define LLDB_API_NEW_IN_DOT_98 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_98
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_98
+#define LLDB_API_DEPRECATED_IN_DOT_98 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_98
+#endif
+#if LLDB_API_MINOR_VERSION_WANTED < LLDB_API_MINOR_VERSION_DOT_99
+#define LLDB_API_NEW_IN_DOT_99 LLDB_API_IMPL_TOONEW
+#else
+#define LLDB_API_NEW_IN_DOT_99
+#endif
+
+#if LLDB_API_MINOR_VERSION_WANTED >= LLDB_API_MINOR_VERSION_DOT_99
+#define LLDB_API_DEPRECATED_IN_DOT_99 LLDB_API_IMPL_DEPRECATED
+#else
+#define LLDB_API_DEPRECATED_IN_DOT_99
+#endif
+
+#else // defined(LLDB_CHECK_API_VERSIONING) &&
+      // defined(LLDB_API_MAJOR_VERSION_WANTED) &&
+      // defined(LLDB_API_MINOR_VERSION_WANTED) && defined
+      // (LLDB_API_MAJOR_VERSION)
+
+#define LLDB_API_NEW_IN_DOT_0
+#define LLDB_API_DEPRECATED_IN_DOT_0
+#define LLDB_API_NEW_IN_DOT_1
+#define LLDB_API_DEPRECATED_IN_DOT_1
+#define LLDB_API_NEW_IN_DOT_2
+#define LLDB_API_DEPRECATED_IN_DOT_2
+#define LLDB_API_NEW_IN_DOT_3
+#define LLDB_API_DEPRECATED_IN_DOT_3
+#define LLDB_API_NEW_IN_DOT_4
+#define LLDB_API_DEPRECATED_IN_DOT_4
+#define LLDB_API_NEW_IN_DOT_5
+#define LLDB_API_DEPRECATED_IN_DOT_5
+#define LLDB_API_NEW_IN_DOT_6
+#define LLDB_API_DEPRECATED_IN_DOT_6
+#define LLDB_API_NEW_IN_DOT_7
+#define LLDB_API_DEPRECATED_IN_DOT_7
+#define LLDB_API_NEW_IN_DOT_8
+#define LLDB_API_DEPRECATED_IN_DOT_8
+#define LLDB_API_NEW_IN_DOT_9
+#define LLDB_API_DEPRECATED_IN_DOT_9
+#define LLDB_API_NEW_IN_DOT_10
+#define LLDB_API_DEPRECATED_IN_DOT_10
+#define LLDB_API_NEW_IN_DOT_11
+#define LLDB_API_DEPRECATED_IN_DOT_11
+#define LLDB_API_NEW_IN_DOT_12
+#define LLDB_API_DEPRECATED_IN_DOT_12
+#define LLDB_API_NEW_IN_DOT_13
+#define LLDB_API_DEPRECATED_IN_DOT_13
+#define LLDB_API_NEW_IN_DOT_14
+#define LLDB_API_DEPRECATED_IN_DOT_14
+#define LLDB_API_NEW_IN_DOT_15
+#define LLDB_API_DEPRECATED_IN_DOT_15
+#define LLDB_API_NEW_IN_DOT_16
+#define LLDB_API_DEPRECATED_IN_DOT_16
+#define LLDB_API_NEW_IN_DOT_17
+#define LLDB_API_DEPRECATED_IN_DOT_17
+#define LLDB_API_NEW_IN_DOT_18
+#define LLDB_API_DEPRECATED_IN_DOT_18
+#define LLDB_API_NEW_IN_DOT_19
+#define LLDB_API_DEPRECATED_IN_DOT_19
+#define LLDB_API_NEW_IN_DOT_20
+#define LLDB_API_DEPRECATED_IN_DOT_20
+#define LLDB_API_NEW_IN_DOT_21
+#define LLDB_API_DEPRECATED_IN_DOT_21
+#define LLDB_API_NEW_IN_DOT_22
+#define LLDB_API_DEPRECATED_IN_DOT_22
+#define LLDB_API_NEW_IN_DOT_23
+#define LLDB_API_DEPRECATED_IN_DOT_23
+#define LLDB_API_NEW_IN_DOT_24
+#define LLDB_API_DEPRECATED_IN_DOT_24
+#define LLDB_API_NEW_IN_DOT_25
+#define LLDB_API_DEPRECATED_IN_DOT_25
+#define LLDB_API_NEW_IN_DOT_26
+#define LLDB_API_DEPRECATED_IN_DOT_26
+#define LLDB_API_NEW_IN_DOT_27
+#define LLDB_API_DEPRECATED_IN_DOT_27
+#define LLDB_API_NEW_IN_DOT_28
+#define LLDB_API_DEPRECATED_IN_DOT_28
+#define LLDB_API_NEW_IN_DOT_29
+#define LLDB_API_DEPRECATED_IN_DOT_29
+#define LLDB_API_NEW_IN_DOT_30
+#define LLDB_API_DEPRECATED_IN_DOT_30
+#define LLDB_API_NEW_IN_DOT_31
+#define LLDB_API_DEPRECATED_IN_DOT_31
+#define LLDB_API_NEW_IN_DOT_32
+#define LLDB_API_DEPRECATED_IN_DOT_32
+#define LLDB_API_NEW_IN_DOT_33
+#define LLDB_API_DEPRECATED_IN_DOT_33
+#define LLDB_API_NEW_IN_DOT_34
+#define LLDB_API_DEPRECATED_IN_DOT_34
+#define LLDB_API_NEW_IN_DOT_35
+#define LLDB_API_DEPRECATED_IN_DOT_35
+#define LLDB_API_NEW_IN_DOT_36
+#define LLDB_API_DEPRECATED_IN_DOT_36
+#define LLDB_API_NEW_IN_DOT_37
+#define LLDB_API_DEPRECATED_IN_DOT_37
+#define LLDB_API_NEW_IN_DOT_38
+#define LLDB_API_DEPRECATED_IN_DOT_38
+#define LLDB_API_NEW_IN_DOT_39
+#define LLDB_API_DEPRECATED_IN_DOT_39
+#define LLDB_API_NEW_IN_DOT_40
+#define LLDB_API_DEPRECATED_IN_DOT_40
+#define LLDB_API_NEW_IN_DOT_41
+#define LLDB_API_DEPRECATED_IN_DOT_41
+#define LLDB_API_NEW_IN_DOT_42
+#define LLDB_API_DEPRECATED_IN_DOT_42
+#define LLDB_API_NEW_IN_DOT_43
+#define LLDB_API_DEPRECATED_IN_DOT_43
+#define LLDB_API_NEW_IN_DOT_44
+#define LLDB_API_DEPRECATED_IN_DOT_44
+#define LLDB_API_NEW_IN_DOT_45
+#define LLDB_API_DEPRECATED_IN_DOT_45
+#define LLDB_API_NEW_IN_DOT_46
+#define LLDB_API_DEPRECATED_IN_DOT_46
+#define LLDB_API_NEW_IN_DOT_47
+#define LLDB_API_DEPRECATED_IN_DOT_47
+#define LLDB_API_NEW_IN_DOT_48
+#define LLDB_API_DEPRECATED_IN_DOT_48
+#define LLDB_API_NEW_IN_DOT_49
+#define LLDB_API_DEPRECATED_IN_DOT_49
+#define LLDB_API_NEW_IN_DOT_50
+#define LLDB_API_DEPRECATED_IN_DOT_50
+#define LLDB_API_NEW_IN_DOT_51
+#define LLDB_API_DEPRECATED_IN_DOT_51
+#define LLDB_API_NEW_IN_DOT_52
+#define LLDB_API_DEPRECATED_IN_DOT_52
+#define LLDB_API_NEW_IN_DOT_53
+#define LLDB_API_DEPRECATED_IN_DOT_53
+#define LLDB_API_NEW_IN_DOT_54
+#define LLDB_API_DEPRECATED_IN_DOT_54
+#define LLDB_API_NEW_IN_DOT_55
+#define LLDB_API_DEPRECATED_IN_DOT_55
+#define LLDB_API_NEW_IN_DOT_56
+#define LLDB_API_DEPRECATED_IN_DOT_56
+#define LLDB_API_NEW_IN_DOT_57
+#define LLDB_API_DEPRECATED_IN_DOT_57
+#define LLDB_API_NEW_IN_DOT_58
+#define LLDB_API_DEPRECATED_IN_DOT_58
+#define LLDB_API_NEW_IN_DOT_59
+#define LLDB_API_DEPRECATED_IN_DOT_59
+#define LLDB_API_NEW_IN_DOT_60
+#define LLDB_API_DEPRECATED_IN_DOT_60
+#define LLDB_API_NEW_IN_DOT_61
+#define LLDB_API_DEPRECATED_IN_DOT_61
+#define LLDB_API_NEW_IN_DOT_62
+#define LLDB_API_DEPRECATED_IN_DOT_62
+#define LLDB_API_NEW_IN_DOT_63
+#define LLDB_API_DEPRECATED_IN_DOT_63
+#define LLDB_API_NEW_IN_DOT_64
+#define LLDB_API_DEPRECATED_IN_DOT_64
+#define LLDB_API_NEW_IN_DOT_65
+#define LLDB_API_DEPRECATED_IN_DOT_65
+#define LLDB_API_NEW_IN_DOT_66
+#define LLDB_API_DEPRECATED_IN_DOT_66
+#define LLDB_API_NEW_IN_DOT_67
+#define LLDB_API_DEPRECATED_IN_DOT_67
+#define LLDB_API_NEW_IN_DOT_68
+#define LLDB_API_DEPRECATED_IN_DOT_68
+#define LLDB_API_NEW_IN_DOT_69
+#define LLDB_API_DEPRECATED_IN_DOT_69
+#define LLDB_API_NEW_IN_DOT_70
+#define LLDB_API_DEPRECATED_IN_DOT_70
+#define LLDB_API_NEW_IN_DOT_71
+#define LLDB_API_DEPRECATED_IN_DOT_71
+#define LLDB_API_NEW_IN_DOT_72
+#define LLDB_API_DEPRECATED_IN_DOT_72
+#define LLDB_API_NEW_IN_DOT_73
+#define LLDB_API_DEPRECATED_IN_DOT_73
+#define LLDB_API_NEW_IN_DOT_74
+#define LLDB_API_DEPRECATED_IN_DOT_74
+#define LLDB_API_NEW_IN_DOT_75
+#define LLDB_API_DEPRECATED_IN_DOT_75
+#define LLDB_API_NEW_IN_DOT_76
+#define LLDB_API_DEPRECATED_IN_DOT_76
+#define LLDB_API_NEW_IN_DOT_77
+#define LLDB_API_DEPRECATED_IN_DOT_77
+#define LLDB_API_NEW_IN_DOT_78
+#define LLDB_API_DEPRECATED_IN_DOT_78
+#define LLDB_API_NEW_IN_DOT_79
+#define LLDB_API_DEPRECATED_IN_DOT_79
+#define LLDB_API_NEW_IN_DOT_80
+#define LLDB_API_DEPRECATED_IN_DOT_80
+#define LLDB_API_NEW_IN_DOT_81
+#define LLDB_API_DEPRECATED_IN_DOT_81
+#define LLDB_API_NEW_IN_DOT_82
+#define LLDB_API_DEPRECATED_IN_DOT_82
+#define LLDB_API_NEW_IN_DOT_83
+#define LLDB_API_DEPRECATED_IN_DOT_83
+#define LLDB_API_NEW_IN_DOT_84
+#define LLDB_API_DEPRECATED_IN_DOT_84
+#define LLDB_API_NEW_IN_DOT_85
+#define LLDB_API_DEPRECATED_IN_DOT_85
+#define LLDB_API_NEW_IN_DOT_86
+#define LLDB_API_DEPRECATED_IN_DOT_86
+#define LLDB_API_NEW_IN_DOT_87
+#define LLDB_API_DEPRECATED_IN_DOT_87
+#define LLDB_API_NEW_IN_DOT_88
+#define LLDB_API_DEPRECATED_IN_DOT_88
+#define LLDB_API_NEW_IN_DOT_89
+#define LLDB_API_DEPRECATED_IN_DOT_89
+#define LLDB_API_NEW_IN_DOT_90
+#define LLDB_API_DEPRECATED_IN_DOT_90
+#define LLDB_API_NEW_IN_DOT_91
+#define LLDB_API_DEPRECATED_IN_DOT_91
+#define LLDB_API_NEW_IN_DOT_92
+#define LLDB_API_DEPRECATED_IN_DOT_92
+#define LLDB_API_NEW_IN_DOT_93
+#define LLDB_API_DEPRECATED_IN_DOT_93
+#define LLDB_API_NEW_IN_DOT_94
+#define LLDB_API_DEPRECATED_IN_DOT_94
+#define LLDB_API_NEW_IN_DOT_95
+#define LLDB_API_DEPRECATED_IN_DOT_95
+#define LLDB_API_NEW_IN_DOT_96
+#define LLDB_API_DEPRECATED_IN_DOT_96
+#define LLDB_API_NEW_IN_DOT_97
+#define LLDB_API_DEPRECATED_IN_DOT_97
+#define LLDB_API_NEW_IN_DOT_98
+#define LLDB_API_DEPRECATED_IN_DOT_98
+#define LLDB_API_NEW_IN_DOT_99
+#define LLDB_API_DEPRECATED_IN_DOT_99
+#endif // defined(LLDB_CHECK_API_VERSIONING) &&
+       // defined(LLDB_API_MAJOR_VERSION_WANTED) &&
+       // defined(LLDB_API_MINOR_VERSION_WANTED) && defined
+       // (LLDB_API_MAJOR_VERSION)
+
+#endif // LLDB_lldb_versioning_h_
diff --git a/linux-x64/clang/include/llvm-c/Core.h b/linux-x64/clang/include/llvm-c/Core.h
index 9c52189..cac2f29 100644
--- a/linux-x64/clang/include/llvm-c/Core.h
+++ b/linux-x64/clang/include/llvm-c/Core.h
@@ -2403,6 +2403,13 @@
 void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
 
 /**
+ * Obtain the intrinsic ID number which matches the given function name.
+ *
+ * @see llvm::Function::lookupIntrinsicID()
+ */
+unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen);
+
+/**
  * Obtain the ID number from a function instance.
  *
  * @see llvm::Function::getIntrinsicID()
@@ -2728,34 +2735,23 @@
  */
 
 /**
- * Obtain a MDString value from a context.
+ * Create an MDString value from a given string value.
  *
- * The returned instance corresponds to the llvm::MDString class.
+ * The MDString value does not take ownership of the given string, it remains
+ * the responsibility of the caller to free it.
  *
- * The instance is specified by string data of a specified length. The
- * string content is copied, so the backing memory can be freed after
- * this function returns.
+ * @see llvm::MDString::get()
  */
-LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
-                                   unsigned SLen);
+LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str,
+                                       size_t SLen);
 
 /**
- * Obtain a MDString value from the global context.
- */
-LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
-
-/**
- * Obtain a MDNode value from a context.
+ * Create an MDNode value with the given array of operands.
  *
- * The returned value corresponds to the llvm::MDNode class.
+ * @see llvm::MDNode::get()
  */
-LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
-                                 unsigned Count);
-
-/**
- * Obtain a MDNode value from the global context.
- */
-LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
+LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, LLVMMetadataRef *MDs,
+                                     size_t Count);
 
 /**
  * Obtain a Metadata as a Value.
@@ -2797,6 +2793,17 @@
  */
 void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
 
+/** Deprecated: Use LLVMMDStringInContext2 instead. */
+LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
+                                   unsigned SLen);
+/** Deprecated: Use LLVMMDStringInContext2 instead. */
+LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
+/** Deprecated: Use LLVMMDNodeInContext2 instead. */
+LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
+                                 unsigned Count);
+/** Deprecated: Use LLVMMDNodeInContext2 instead. */
+LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
+
 /**
  * @}
  */
@@ -2910,6 +2917,24 @@
 LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
 
 /**
+ * Insert the given basic block after the insertion point of the given builder.
+ *
+ * The insertion point must be valid.
+ *
+ * @see llvm::Function::BasicBlockListType::insertAfter()
+ */
+void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder,
+                                                  LLVMBasicBlockRef BB);
+
+/**
+ * Append the given basic block to the basic block list of the given function.
+ *
+ * @see llvm::Function::BasicBlockListType::push_back()
+ */
+void LLVMAppendExistingBasicBlock(LLVMValueRef Fn,
+                                  LLVMBasicBlockRef BB);
+  
+/**
  * Create a new basic block without inserting it into a function.
  *
  * @see llvm::BasicBlock::Create()
@@ -3485,10 +3510,60 @@
 void LLVMDisposeBuilder(LLVMBuilderRef Builder);
 
 /* Metadata */
-void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
-LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
+
+/**
+ * Get location information used by debugging information.
+ *
+ * @see llvm::IRBuilder::getCurrentDebugLocation()
+ */
+LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder);
+
+/**
+ * Set location information used by debugging information.
+ *
+ * To clear the location metadata of the given instruction, pass NULL to \p Loc.
+ *
+ * @see llvm::IRBuilder::SetCurrentDebugLocation()
+ */
+void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc);
+
+/**
+ * Attempts to set the debug location for the given instruction using the
+ * current debug location for the given builder.  If the builder has no current
+ * debug location, this function is a no-op.
+ *
+ * @see llvm::IRBuilder::SetInstDebugLocation()
+ */
 void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
 
+/**
+ * Get the dafult floating-point math metadata for a given builder.
+ *
+ * @see llvm::IRBuilder::getDefaultFPMathTag()
+ */
+LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder);
+
+/**
+ * Set the default floating-point math metadata for the given builder.
+ *
+ * To clear the metadata, pass NULL to \p FPMathTag.
+ *
+ * @see llvm::IRBuilder::setDefaultFPMathTag()
+ */
+void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder,
+                                    LLVMMetadataRef FPMathTag);
+
+/**
+ * Deprecated: Passing the NULL location will crash.
+ * Use LLVMGetCurrentDebugLocation2 instead.
+ */
+void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
+/**
+ * Deprecated: Returning the NULL location will crash.
+ * Use LLVMGetCurrentDebugLocation2 instead.
+ */
+LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
+
 /* Terminators */
 LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
 LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
diff --git a/linux-x64/clang/include/llvm-c/DebugInfo.h b/linux-x64/clang/include/llvm-c/DebugInfo.h
index f840ce9..33c8110 100644
--- a/linux-x64/clang/include/llvm-c/DebugInfo.h
+++ b/linux-x64/clang/include/llvm-c/DebugInfo.h
@@ -50,13 +50,12 @@
   LLVMDIFlagIntroducedVirtual = 1 << 18,
   LLVMDIFlagBitField = 1 << 19,
   LLVMDIFlagNoReturn = 1 << 20,
-  LLVMDIFlagMainSubprogram = 1 << 21,
   LLVMDIFlagTypePassByValue = 1 << 22,
   LLVMDIFlagTypePassByReference = 1 << 23,
   LLVMDIFlagEnumClass = 1 << 24,
   LLVMDIFlagFixedEnum = LLVMDIFlagEnumClass, // Deprecated.
   LLVMDIFlagThunk = 1 << 25,
-  LLVMDIFlagTrivial = 1 << 26,
+  LLVMDIFlagNonTrivial = 1 << 26,
   LLVMDIFlagBigEndian = 1 << 27,
   LLVMDIFlagLittleEndian = 1 << 28,
   LLVMDIFlagIndirectVirtualBase = (1 << 2) | (1 << 5),
@@ -160,7 +159,8 @@
   LLVMDIObjCPropertyMetadataKind,
   LLVMDIImportedEntityMetadataKind,
   LLVMDIMacroMetadataKind,
-  LLVMDIMacroFileMetadataKind
+  LLVMDIMacroFileMetadataKind,
+  LLVMDICommonBlockMetadataKind
 };
 typedef unsigned LLVMMetadataKind;
 
@@ -452,6 +452,49 @@
 LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location);
 
 /**
+ * Get the "inline at" location associated with this debug location.
+ * \param Location     The debug location.
+ *
+ * @see DILocation::getInlinedAt()
+ */
+LLVMMetadataRef LLVMDILocationGetInlinedAt(LLVMMetadataRef Location);
+
+/**
+ * Get the metadata of the file associated with a given scope.
+ * \param Scope     The scope object.
+ *
+ * @see DIScope::getFile()
+ */
+LLVMMetadataRef LLVMDIScopeGetFile(LLVMMetadataRef Scope);
+
+/**
+ * Get the directory of a given file.
+ * \param File     The file object.
+ * \param Len      The length of the returned string.
+ *
+ * @see DIFile::getDirectory()
+ */
+const char *LLVMDIFileGetDirectory(LLVMMetadataRef File, unsigned *Len);
+
+/**
+ * Get the name of a given file.
+ * \param File     The file object.
+ * \param Len      The length of the returned string.
+ *
+ * @see DIFile::getFilename()
+ */
+const char *LLVMDIFileGetFilename(LLVMMetadataRef File, unsigned *Len);
+
+/**
+ * Get the source of a given file.
+ * \param File     The file object.
+ * \param Len      The length of the returned string.
+ *
+ * @see DIFile::getSource()
+ */
+const char *LLVMDIFileGetSource(LLVMMetadataRef File, unsigned *Len);
+
+/**
  * Create a type array.
  * \param Builder        The DIBuilder.
  * \param Data           The type elements.
@@ -479,6 +522,19 @@
                                   LLVMDIFlags Flags);
 
 /**
+ * Create debugging information entry for an enumerator.
+ * @param Builder        The DIBuilder.
+ * @param Name           Enumerator name.
+ * @param NameLen        Length of enumerator name.
+ * @param Value          Enumerator value.
+ * @param IsUnsigned     True if the value is unsigned.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateEnumerator(LLVMDIBuilderRef Builder,
+                                              const char *Name, size_t NameLen,
+                                              int64_t Value,
+                                              LLVMBool IsUnsigned);
+
+/**
  * Create debugging information entry for an enumeration.
  * \param Builder        The DIBuilder.
  * \param Scope          Scope in which this enumeration is defined.
@@ -1016,6 +1072,48 @@
     size_t NameLen, const char *Linkage, size_t LinkLen, LLVMMetadataRef File,
     unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
     LLVMMetadataRef Expr, LLVMMetadataRef Decl, uint32_t AlignInBits);
+
+/**
+ * Retrieves the \c DIVariable associated with this global variable expression.
+ * \param GVE    The global variable expression.
+ *
+ * @see llvm::DIGlobalVariableExpression::getVariable()
+ */
+LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE);
+
+/**
+ * Retrieves the \c DIExpression associated with this global variable expression.
+ * \param GVE    The global variable expression.
+ *
+ * @see llvm::DIGlobalVariableExpression::getExpression()
+ */
+LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression(
+    LLVMMetadataRef GVE);
+
+/**
+ * Get the metadata of the file associated with a given variable.
+ * \param Var     The variable object.
+ *
+ * @see DIVariable::getFile()
+ */
+LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var);
+
+/**
+ * Get the metadata of the scope associated with a given variable.
+ * \param Var     The variable object.
+ *
+ * @see DIVariable::getScope()
+ */
+LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var);
+
+/**
+ * Get the source line where this \c DIVariable is declared.
+ * \param Var     The DIVariable.
+ *
+ * @see DIVariable::getLine()
+ */
+unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var);
+
 /**
  * Create a new temporary \c MDNode.  Suitable for use in constructing cyclic
  * \c MDNode structures. A temporary \c MDNode is not uniqued, may be RAUW'd,
@@ -1180,6 +1278,30 @@
 void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
 
 /**
+ * Get the line associated with a given subprogram.
+ * \param Subprogram     The subprogram object.
+ *
+ * @see DISubprogram::getLine()
+ */
+unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram);
+
+/**
+ * Get the debug location for the given instruction.
+ *
+ * @see llvm::Instruction::getDebugLoc()
+ */
+LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst);
+
+/**
+ * Set the debug location for the given instruction.
+ *
+ * To clear the location metadata of the given instruction, pass NULL to \p Loc.
+ *
+ * @see llvm::Instruction::setDebugLoc()
+ */
+void LLVMInstructionSetDebugLoc(LLVMValueRef Inst, LLVMMetadataRef Loc);
+
+/**
  * Obtain the enumerated type of a Metadata instance.
  *
  * @see llvm::Metadata::getMetadataID()
diff --git a/linux-x64/clang/include/llvm-c/Error.h b/linux-x64/clang/include/llvm-c/Error.h
index 40ea1fb..5294306 100644
--- a/linux-x64/clang/include/llvm-c/Error.h
+++ b/linux-x64/clang/include/llvm-c/Error.h
@@ -60,7 +60,7 @@
 /**
  * Returns the type id for llvm StringError.
  */
-LLVMErrorTypeId LLVMGetStringErrorTypeId();
+LLVMErrorTypeId LLVMGetStringErrorTypeId(void);
 
 #ifdef __cplusplus
 }
diff --git a/linux-x64/clang/include/llvm-c/Object.h b/linux-x64/clang/include/llvm-c/Object.h
index bbea455..1e9b703 100644
--- a/linux-x64/clang/include/llvm-c/Object.h
+++ b/linux-x64/clang/include/llvm-c/Object.h
@@ -34,29 +34,140 @@
  */
 
 // Opaque type wrappers
-typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
 typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef;
 typedef struct LLVMOpaqueSymbolIterator *LLVMSymbolIteratorRef;
 typedef struct LLVMOpaqueRelocationIterator *LLVMRelocationIteratorRef;
 
-// ObjectFile creation
-LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
-void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
+typedef enum {
+  LLVMBinaryTypeArchive,                /**< Archive file. */
+  LLVMBinaryTypeMachOUniversalBinary,   /**< Mach-O Universal Binary file. */
+  LLVMBinaryTypeCOFFImportFile,         /**< COFF Import file. */
+  LLVMBinaryTypeIR,                     /**< LLVM IR. */
+  LLVMBinaryTypeWinRes,                 /**< Windows resource (.res) file. */
+  LLVMBinaryTypeCOFF,                   /**< COFF Object file. */
+  LLVMBinaryTypeELF32L,                 /**< ELF 32-bit, little endian. */
+  LLVMBinaryTypeELF32B,                 /**< ELF 32-bit, big endian. */
+  LLVMBinaryTypeELF64L,                 /**< ELF 64-bit, little endian. */
+  LLVMBinaryTypeELF64B,                 /**< ELF 64-bit, big endian. */
+  LLVMBinaryTypeMachO32L,               /**< MachO 32-bit, little endian. */
+  LLVMBinaryTypeMachO32B,               /**< MachO 32-bit, big endian. */
+  LLVMBinaryTypeMachO64L,               /**< MachO 64-bit, little endian. */
+  LLVMBinaryTypeMachO64B,               /**< MachO 64-bit, big endian. */
+  LLVMBinaryTypeWasm,                   /**< Web Assembly. */
+} LLVMBinaryType;
 
-// ObjectFile Section iterators
-LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
+/**
+ * Create a binary file from the given memory buffer.
+ *
+ * The exact type of the binary file will be inferred automatically, and the
+ * appropriate implementation selected.  The context may be NULL except if
+ * the resulting file is an LLVM IR file.
+ *
+ * The memory buffer is not consumed by this function.  It is the responsibilty
+ * of the caller to free it with \c LLVMDisposeMemoryBuffer.
+ *
+ * If NULL is returned, the \p ErrorMessage parameter is populated with the
+ * error's description.  It is then the caller's responsibility to free this
+ * message by calling \c LLVMDisposeMessage.
+ *
+ * @see llvm::object::createBinary
+ */
+LLVMBinaryRef LLVMCreateBinary(LLVMMemoryBufferRef MemBuf,
+                               LLVMContextRef Context,
+                               char **ErrorMessage);
+
+/**
+ * Dispose of a binary file.
+ *
+ * The binary file does not own its backing buffer.  It is the responsibilty
+ * of the caller to free it with \c LLVMDisposeMemoryBuffer.
+ */
+void LLVMDisposeBinary(LLVMBinaryRef BR);
+
+/**
+ * Retrieves a copy of the memory buffer associated with this object file.
+ *
+ * The returned buffer is merely a shallow copy and does not own the actual
+ * backing buffer of the binary. Nevertheless, it is the responsibility of the
+ * caller to free it with \c LLVMDisposeMemoryBuffer.
+ *
+ * @see llvm::object::getMemoryBufferRef
+ */
+LLVMMemoryBufferRef LLVMBinaryCopyMemoryBuffer(LLVMBinaryRef BR);
+
+/**
+ * Retrieve the specific type of a binary.
+ *
+ * @see llvm::object::Binary::getType
+ */
+LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR);
+
+/*
+ * For a Mach-O universal binary file, retrieves the object file corresponding
+ * to the given architecture if it is present as a slice.
+ *
+ * If NULL is returned, the \p ErrorMessage parameter is populated with the
+ * error's description.  It is then the caller's responsibility to free this
+ * message by calling \c LLVMDisposeMessage.
+ *
+ * It is the responsiblity of the caller to free the returned object file by
+ * calling \c LLVMDisposeBinary.
+ */
+LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch(LLVMBinaryRef BR,
+                                                        const char *Arch,
+                                                        size_t ArchLen,
+                                                        char **ErrorMessage);
+
+/**
+ * Retrieve a copy of the section iterator for this object file.
+ *
+ * If there are no sections, the result is NULL.
+ *
+ * The returned iterator is merely a shallow copy. Nevertheless, it is
+ * the responsibility of the caller to free it with
+ * \c LLVMDisposeSectionIterator.
+ *
+ * @see llvm::object::sections()
+ */
+LLVMSectionIteratorRef LLVMObjectFileCopySectionIterator(LLVMBinaryRef BR);
+
+/**
+ * Returns whether the given section iterator is at the end.
+ *
+ * @see llvm::object::section_end
+ */
+LLVMBool LLVMObjectFileIsSectionIteratorAtEnd(LLVMBinaryRef BR,
+                                              LLVMSectionIteratorRef SI);
+
+/**
+ * Retrieve a copy of the symbol iterator for this object file.
+ *
+ * If there are no symbols, the result is NULL.
+ *
+ * The returned iterator is merely a shallow copy. Nevertheless, it is
+ * the responsibility of the caller to free it with
+ * \c LLVMDisposeSymbolIterator.
+ *
+ * @see llvm::object::symbols()
+ */
+LLVMSymbolIteratorRef LLVMObjectFileCopySymbolIterator(LLVMBinaryRef BR);
+
+/**
+ * Returns whether the given symbol iterator is at the end.
+ *
+ * @see llvm::object::symbol_end
+ */
+LLVMBool LLVMObjectFileIsSymbolIteratorAtEnd(LLVMBinaryRef BR,
+                                             LLVMSymbolIteratorRef SI);
+
 void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
-LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
-                                LLVMSectionIteratorRef SI);
+
 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
 void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect,
                                  LLVMSymbolIteratorRef Sym);
 
 // ObjectFile Symbol iterators
-LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile);
 void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI);
-LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile,
-                                LLVMSymbolIteratorRef SI);
 void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI);
 
 // SectionRef accessors
@@ -89,6 +200,28 @@
 const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI);
 const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI);
 
+/** Deprecated: Use LLVMBinaryRef instead. */
+typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
+
+/** Deprecated: Use LLVMCreateBinary instead. */
+LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
+
+/** Deprecated: Use LLVMDisposeBinary instead. */
+void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
+
+/** Deprecated: Use LLVMObjectFileCopySectionIterator instead. */
+LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
+
+/** Deprecated: Use LLVMObjectFileIsSectionIteratorAtEnd instead. */
+LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
+                                    LLVMSectionIteratorRef SI);
+
+/** Deprecated: Use LLVMObjectFileCopySymbolIterator instead. */
+LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile);
+
+/** Deprecated: Use LLVMObjectFileIsSymbolIteratorAtEnd instead. */
+LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile,
+                                   LLVMSymbolIteratorRef SI);
 /**
  * @}
  */
diff --git a/linux-x64/clang/include/llvm-c/OptRemarks.h b/linux-x64/clang/include/llvm-c/OptRemarks.h
deleted file mode 100644
index b6cffc7..0000000
--- a/linux-x64/clang/include/llvm-c/OptRemarks.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/*===-- llvm-c/OptRemarks.h - OptRemarks Public C Interface -------*- C -*-===*\
-|*                                                                            *|
-|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
-|* Exceptions.                                                                *|
-|* See https://llvm.org/LICENSE.txt for license information.                  *|
-|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
-|*                                                                            *|
-|*===----------------------------------------------------------------------===*|
-|*                                                                            *|
-|* This header provides a public interface to an opt-remark library.          *|
-|* LLVM provides an implementation of this interface.                         *|
-|*                                                                            *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_OPT_REMARKS_H
-#define LLVM_C_OPT_REMARKS_H
-
-#include "llvm-c/Core.h"
-#include "llvm-c/Types.h"
-#ifdef __cplusplus
-#include <cstddef>
-extern "C" {
-#else
-#include <stddef.h>
-#endif /* !defined(__cplusplus) */
-
-/**
- * @defgroup LLVMCOPTREMARKS OptRemarks
- * @ingroup LLVMC
- *
- * @{
- */
-
-#define OPT_REMARKS_API_VERSION 0
-
-/**
- * String containing a buffer and a length. The buffer is not guaranteed to be
- * zero-terminated.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-typedef struct {
-  const char *Str;
-  uint32_t Len;
-} LLVMOptRemarkStringRef;
-
-/**
- * DebugLoc containing File, Line and Column.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-typedef struct {
-  // File:
-  LLVMOptRemarkStringRef SourceFile;
-  // Line:
-  uint32_t SourceLineNumber;
-  // Column:
-  uint32_t SourceColumnNumber;
-} LLVMOptRemarkDebugLoc;
-
-/**
- * Element of the "Args" list. The key might give more information about what
- * are the semantics of the value, e.g. "Callee" will tell you that the value
- * is a symbol that names a function.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-typedef struct {
-  // e.g. "Callee"
-  LLVMOptRemarkStringRef Key;
-  // e.g. "malloc"
-  LLVMOptRemarkStringRef Value;
-
-  // "DebugLoc": Optional
-  LLVMOptRemarkDebugLoc DebugLoc;
-} LLVMOptRemarkArg;
-
-/**
- * One remark entry.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-typedef struct {
-  // e.g. !Missed, !Passed
-  LLVMOptRemarkStringRef RemarkType;
-  // "Pass": Required
-  LLVMOptRemarkStringRef PassName;
-  // "Name": Required
-  LLVMOptRemarkStringRef RemarkName;
-  // "Function": Required
-  LLVMOptRemarkStringRef FunctionName;
-
-  // "DebugLoc": Optional
-  LLVMOptRemarkDebugLoc DebugLoc;
-  // "Hotness": Optional
-  uint32_t Hotness;
-  // "Args": Optional. It is an array of `num_args` elements.
-  uint32_t NumArgs;
-  LLVMOptRemarkArg *Args;
-} LLVMOptRemarkEntry;
-
-typedef struct LLVMOptRemarkOpaqueParser *LLVMOptRemarkParserRef;
-
-/**
- * Creates a remark parser that can be used to read and parse the buffer located
- * in \p Buf of size \p Size.
- *
- * \p Buf cannot be NULL.
- *
- * This function should be paired with LLVMOptRemarkParserDispose() to avoid
- * leaking resources.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-extern LLVMOptRemarkParserRef LLVMOptRemarkParserCreate(const void *Buf,
-                                                        uint64_t Size);
-
-/**
- * Returns the next remark in the file.
- *
- * The value pointed to by the return value is invalidated by the next call to
- * LLVMOptRemarkParserGetNext().
- *
- * If the parser reaches the end of the buffer, the return value will be NULL.
- *
- * In the case of an error, the return value will be NULL, and:
- *
- * 1) LLVMOptRemarkParserHasError() will return `1`.
- *
- * 2) LLVMOptRemarkParserGetErrorMessage() will return a descriptive error
- *    message.
- *
- * An error may occur if:
- *
- * 1) An argument is invalid.
- *
- * 2) There is a YAML parsing error. This type of error aborts parsing
- *    immediately and returns `1`. It can occur on malformed YAML.
- *
- * 3) Remark parsing error. If this type of error occurs, the parser won't call
- *    the handler and will continue to the next one. It can occur on malformed
- *    remarks, like missing or extra fields in the file.
- *
- * Here is a quick example of the usage:
- *
- * ```
- *  LLVMOptRemarkParserRef Parser = LLVMOptRemarkParserCreate(Buf, Size);
- *  LLVMOptRemarkEntry *Remark = NULL;
- *  while ((Remark == LLVMOptRemarkParserGetNext(Parser))) {
- *    // use Remark
- *  }
- *  bool HasError = LLVMOptRemarkParserHasError(Parser);
- *  LLVMOptRemarkParserDispose(Parser);
- * ```
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-extern LLVMOptRemarkEntry *
-LLVMOptRemarkParserGetNext(LLVMOptRemarkParserRef Parser);
-
-/**
- * Returns `1` if the parser encountered an error while parsing the buffer.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-extern LLVMBool LLVMOptRemarkParserHasError(LLVMOptRemarkParserRef Parser);
-
-/**
- * Returns a null-terminated string containing an error message.
- *
- * In case of no error, the result is `NULL`.
- *
- * The memory of the string is bound to the lifetime of \p Parser. If
- * LLVMOptRemarkParserDispose() is called, the memory of the string will be
- * released.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-extern const char *
-LLVMOptRemarkParserGetErrorMessage(LLVMOptRemarkParserRef Parser);
-
-/**
- * Releases all the resources used by \p Parser.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-extern void LLVMOptRemarkParserDispose(LLVMOptRemarkParserRef Parser);
-
-/**
- * Returns the version of the opt-remarks dylib.
- *
- * \since OPT_REMARKS_API_VERSION=0
- */
-extern uint32_t LLVMOptRemarkVersion(void);
-
-/**
- * @} // endgoup LLVMCOPTREMARKS
- */
-
-#ifdef __cplusplus
-}
-#endif /* !defined(__cplusplus) */
-
-#endif /* LLVM_C_OPT_REMARKS_H */
diff --git a/linux-x64/clang/include/llvm-c/Remarks.h b/linux-x64/clang/include/llvm-c/Remarks.h
new file mode 100644
index 0000000..7fb1665
--- /dev/null
+++ b/linux-x64/clang/include/llvm-c/Remarks.h
@@ -0,0 +1,314 @@
+/*===-- llvm-c/Remarks.h - Remarks Public C Interface -------------*- C -*-===*\
+|*                                                                            *|
+|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
+|* Exceptions.                                                                *|
+|* See https://llvm.org/LICENSE.txt for license information.                  *|
+|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
+|*                                                                            *|
+|*===----------------------------------------------------------------------===*|
+|*                                                                            *|
+|* This header provides a public interface to a remark diagnostics library.   *|
+|* LLVM provides an implementation of this interface.                         *|
+|*                                                                            *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_REMARKS_H
+#define LLVM_C_REMARKS_H
+
+#include "llvm-c/Types.h"
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif /* !defined(__cplusplus) */
+
+/**
+ * @defgroup LLVMCREMARKS Remarks
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+#define REMARKS_API_VERSION 0
+
+/**
+ * The type of the emitted remark.
+ */
+enum LLVMRemarkType {
+  LLVMRemarkTypeUnknown,
+  LLVMRemarkTypePassed,
+  LLVMRemarkTypeMissed,
+  LLVMRemarkTypeAnalysis,
+  LLVMRemarkTypeAnalysisFPCommute,
+  LLVMRemarkTypeAnalysisAliasing,
+  LLVMRemarkTypeFailure
+};
+
+/**
+ * String containing a buffer and a length. The buffer is not guaranteed to be
+ * zero-terminated.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueString *LLVMRemarkStringRef;
+
+/**
+ * Returns the buffer holding the string.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern const char *LLVMRemarkStringGetData(LLVMRemarkStringRef String);
+
+/**
+ * Returns the size of the string.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkStringGetLen(LLVMRemarkStringRef String);
+
+/**
+ * DebugLoc containing File, Line and Column.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueDebugLoc *LLVMRemarkDebugLocRef;
+
+/**
+ * Return the path to the source file for a debug location.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkDebugLocGetSourceFilePath(LLVMRemarkDebugLocRef DL);
+
+/**
+ * Return the line in the source file for a debug location.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkDebugLocGetSourceLine(LLVMRemarkDebugLocRef DL);
+
+/**
+ * Return the column in the source file for a debug location.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkDebugLocGetSourceColumn(LLVMRemarkDebugLocRef DL);
+
+/**
+ * Element of the "Args" list. The key might give more information about what
+ * the semantics of the value are, e.g. "Callee" will tell you that the value
+ * is a symbol that names a function.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueArg *LLVMRemarkArgRef;
+
+/**
+ * Returns the key of an argument. The key defines what the value is, and the
+ * same key can appear multiple times in the list of arguments.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef LLVMRemarkArgGetKey(LLVMRemarkArgRef Arg);
+
+/**
+ * Returns the value of an argument. This is a string that can contain newlines.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef LLVMRemarkArgGetValue(LLVMRemarkArgRef Arg);
+
+/**
+ * Returns the debug location that is attached to the value of this argument.
+ *
+ * If there is no debug location, the return value will be `NULL`.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkDebugLocRef LLVMRemarkArgGetDebugLoc(LLVMRemarkArgRef Arg);
+
+/**
+ * A remark emitted by the compiler.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueEntry *LLVMRemarkEntryRef;
+
+/**
+ * The type of the remark. For example, it can allow users to only keep the
+ * missed optimizations from the compiler.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern enum LLVMRemarkType LLVMRemarkEntryGetType(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get the name of the pass that emitted this remark.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkEntryGetPassName(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get an identifier of the remark.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkEntryGetRemarkName(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get the name of the function being processsed when the remark was emitted.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkEntryGetFunctionName(LLVMRemarkEntryRef Remark);
+
+/**
+ * Returns the debug location that is attached to this remark.
+ *
+ * If there is no debug location, the return value will be `NULL`.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkDebugLocRef
+LLVMRemarkEntryGetDebugLoc(LLVMRemarkEntryRef Remark);
+
+/**
+ * Return the hotness of the remark.
+ *
+ * A hotness of `0` means this value is not set.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint64_t LLVMRemarkEntryGetHotness(LLVMRemarkEntryRef Remark);
+
+/**
+ * The number of arguments the remark holds.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkEntryGetNumArgs(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get a new iterator to iterate over a remark's argument.
+ *
+ * If there are no arguments in \p Remark, the return value will be `NULL`.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkArgRef LLVMRemarkEntryGetFirstArg(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get the next argument in \p Remark from the position of \p It.
+ *
+ * Returns `NULL` if there are no more arguments available.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkArgRef LLVMRemarkEntryGetNextArg(LLVMRemarkArgRef It,
+                                                  LLVMRemarkEntryRef Remark);
+
+typedef struct LLVMRemarkOpaqueParser *LLVMRemarkParserRef;
+
+/**
+ * Creates a remark parser that can be used to parse the buffer located in \p
+ * Buf of size \p Size bytes.
+ *
+ * \p Buf cannot be `NULL`.
+ *
+ * This function should be paired with LLVMRemarkParserDispose() to avoid
+ * leaking resources.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf,
+                                                      uint64_t Size);
+
+/**
+ * Returns the next remark in the file.
+ *
+ * The value pointed to by the return value is invalidated by the next call to
+ * LLVMRemarkParserGetNext().
+ *
+ * If the parser reaches the end of the buffer, the return value will be `NULL`.
+ *
+ * In the case of an error, the return value will be `NULL`, and:
+ *
+ * 1) LLVMRemarkParserHasError() will return `1`.
+ *
+ * 2) LLVMRemarkParserGetErrorMessage() will return a descriptive error
+ *    message.
+ *
+ * An error may occur if:
+ *
+ * 1) An argument is invalid.
+ *
+ * 2) There is a parsing error. This can occur on things like malformed YAML.
+ *
+ * 3) There is a Remark semantic error. This can occur on well-formed files with
+ *    missing or extra fields.
+ *
+ * Here is a quick example of the usage:
+ *
+ * ```
+ * LLVMRemarkParserRef Parser = LLVMRemarkParserCreateYAML(Buf, Size);
+ * LLVMRemarkEntryRef Remark = NULL;
+ * while ((Remark == LLVMRemarkParserGetNext(Parser))) {
+ *    // use Remark
+ * }
+ * bool HasError = LLVMRemarkParserHasError(Parser);
+ * LLVMRemarkParserDispose(Parser);
+ * ```
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkEntryRef LLVMRemarkParserGetNext(LLVMRemarkParserRef Parser);
+
+/**
+ * Returns `1` if the parser encountered an error while parsing the buffer.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMBool LLVMRemarkParserHasError(LLVMRemarkParserRef Parser);
+
+/**
+ * Returns a null-terminated string containing an error message.
+ *
+ * In case of no error, the result is `NULL`.
+ *
+ * The memory of the string is bound to the lifetime of \p Parser. If
+ * LLVMRemarkParserDispose() is called, the memory of the string will be
+ * released.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern const char *LLVMRemarkParserGetErrorMessage(LLVMRemarkParserRef Parser);
+
+/**
+ * Releases all the resources used by \p Parser.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern void LLVMRemarkParserDispose(LLVMRemarkParserRef Parser);
+
+/**
+ * Returns the version of the remarks library.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkVersion(void);
+
+/**
+ * @} // endgoup LLVMCREMARKS
+ */
+
+#ifdef __cplusplus
+}
+#endif /* !defined(__cplusplus) */
+
+#endif /* LLVM_C_REMARKS_H */
diff --git a/linux-x64/clang/include/llvm-c/Target.h b/linux-x64/clang/include/llvm-c/Target.h
index 9a792a0..4ef641e 100644
--- a/linux-x64/clang/include/llvm-c/Target.h
+++ b/linux-x64/clang/include/llvm-c/Target.h
@@ -22,10 +22,6 @@
 #include "llvm-c/Types.h"
 #include "llvm/Config/llvm-config.h"
 
-#if defined(_MSC_VER) && !defined(inline)
-#define inline __inline
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/linux-x64/clang/include/llvm-c/Transforms/Utils.h b/linux-x64/clang/include/llvm-c/Transforms/Utils.h
index ff28833..63594ab 100644
--- a/linux-x64/clang/include/llvm-c/Transforms/Utils.h
+++ b/linux-x64/clang/include/llvm-c/Transforms/Utils.h
@@ -38,6 +38,9 @@
 /** See llvm::createPromoteMemoryToRegisterPass function. */
 void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM);
 
+/** See llvm::createAddDiscriminatorsPass function. */
+void LLVMAddAddDiscriminatorsPass(LLVMPassManagerRef PM);
+
 /**
  * @}
  */
diff --git a/linux-x64/clang/include/llvm-c/Types.h b/linux-x64/clang/include/llvm-c/Types.h
index a2979bd..612c7d3 100644
--- a/linux-x64/clang/include/llvm-c/Types.h
+++ b/linux-x64/clang/include/llvm-c/Types.h
@@ -164,6 +164,11 @@
 typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef;
 
 /**
+ * @see llvm::object::Binary
+ */
+typedef struct LLVMOpaqueBinary *LLVMBinaryRef;
+
+/**
  * @}
  */
 
diff --git a/linux-x64/clang/include/llvm-c/lto.h b/linux-x64/clang/include/llvm-c/lto.h
index a22f0bb..2467722 100644
--- a/linux-x64/clang/include/llvm-c/lto.h
+++ b/linux-x64/clang/include/llvm-c/lto.h
@@ -44,7 +44,7 @@
  * @{
  */
 
-#define LTO_API_VERSION 23
+#define LTO_API_VERSION 24
 
 /**
  * \since prior to LTO_API_VERSION=3
@@ -846,7 +846,47 @@
 extern void thinlto_codegen_set_cache_size_files(thinlto_code_gen_t cg,
                                                  unsigned max_size_files);
 
+/** Opaque reference to an LTO input file */
+typedef struct LLVMOpaqueLTOInput *lto_input_t;
 
+/**
+  * Creates an LTO input file from a buffer. The path
+  * argument is used for diagnotics as this function
+  * otherwise does not know which file the given buffer
+  * is associated with.
+  *
+  * \since LTO_API_VERSION=24
+  */
+extern lto_input_t lto_input_create(const void *buffer,
+                                    size_t buffer_size,
+                                    const char *path);
+
+/**
+  * Frees all memory internally allocated by the LTO input file.
+  * Upon return the lto_module_t is no longer valid.
+  *
+  * \since LTO_API_VERSION=24
+  */
+extern void lto_input_dispose(lto_input_t input);
+
+/**
+  * Returns the number of dependent library specifiers
+  * for the given LTO input file.
+  *
+  * \since LTO_API_VERSION=24
+  */
+extern unsigned lto_input_get_num_dependent_libraries(lto_input_t input);
+
+/**
+  * Returns the ith dependent library specifier
+  * for the given LTO input file. The returned
+  * string is not null-terminated.
+  *
+  * \since LTO_API_VERSION=24
+  */
+extern const char * lto_input_get_dependent_library(lto_input_t input,
+                                                    size_t index,
+                                                    size_t *size);
 
 /**
  * @} // endgroup LLVMCTLTO_CACHING
diff --git a/linux-x64/clang/include/llvm/ADT/APFloat.h b/linux-x64/clang/include/llvm/ADT/APFloat.h
index 6255823..a9648d3 100644
--- a/linux-x64/clang/include/llvm/ADT/APFloat.h
+++ b/linux-x64/clang/include/llvm/ADT/APFloat.h
@@ -147,6 +147,17 @@
 
   /// \name Floating Point Semantics.
   /// @{
+  enum Semantics {
+    S_IEEEhalf,
+    S_IEEEsingle,
+    S_IEEEdouble,
+    S_x87DoubleExtended,
+    S_IEEEquad,
+    S_PPCDoubleDouble
+  };
+
+  static const llvm::fltSemantics &EnumToSemantics(Semantics S);
+  static Semantics SemanticsToEnum(const llvm::fltSemantics &Sem);
 
   static const fltSemantics &IEEEhalf() LLVM_READNONE;
   static const fltSemantics &IEEEsingle() LLVM_READNONE;
diff --git a/linux-x64/clang/include/llvm/ADT/APInt.h b/linux-x64/clang/include/llvm/ADT/APInt.h
index 0f27dbf..2381b75 100644
--- a/linux-x64/clang/include/llvm/ADT/APInt.h
+++ b/linux-x64/clang/include/llvm/ADT/APInt.h
@@ -2212,6 +2212,15 @@
 // See friend declaration above. This additional declaration is required in
 // order to compile LLVM with IBM xlC compiler.
 hash_code hash_value(const APInt &Arg);
-} // End of llvm namespace
+
+/// StoreIntToMemory - Fills the StoreBytes bytes of memory starting from Dst
+/// with the integer held in IntVal.
+void StoreIntToMemory(const APInt &IntVal, uint8_t *Dst, unsigned StoreBytes);
+
+/// LoadIntFromMemory - Loads the integer stored in the LoadBytes bytes starting
+/// from Src into IntVal, which is assumed to be wide enough and to hold zero.
+void LoadIntFromMemory(APInt &IntVal, uint8_t *Src, unsigned LoadBytes);
+
+} // namespace llvm
 
 #endif
diff --git a/linux-x64/clang/include/llvm/ADT/APSInt.h b/linux-x64/clang/include/llvm/ADT/APSInt.h
index be36611..0f99182 100644
--- a/linux-x64/clang/include/llvm/ADT/APSInt.h
+++ b/linux-x64/clang/include/llvm/ADT/APSInt.h
@@ -42,6 +42,24 @@
   /// \param Str the string to be interpreted.
   explicit APSInt(StringRef Str);
 
+  /// Determine sign of this APSInt.
+  ///
+  /// \returns true if this APSInt is negative, false otherwise
+  bool isNegative() const { return isSigned() && APInt::isNegative(); }
+
+  /// Determine if this APSInt Value is non-negative (>= 0)
+  ///
+  /// \returns true if this APSInt is non-negative, false otherwise
+  bool isNonNegative() const { return !isNegative(); }
+
+  /// Determine if this APSInt Value is positive.
+  ///
+  /// This tests if the value of this APSInt is positive (> 0). Note
+  /// that 0 is not a positive value.
+  ///
+  /// \returns true if this APSInt is positive.
+  bool isStrictlyPositive() const { return isNonNegative() && !isNullValue(); }
+
   APSInt &operator=(APInt RHS) {
     // Retain our current sign.
     APInt::operator=(std::move(RHS));
diff --git a/linux-x64/clang/include/llvm/ADT/ArrayRef.h b/linux-x64/clang/include/llvm/ADT/ArrayRef.h
index 75bb7d6..773c88f 100644
--- a/linux-x64/clang/include/llvm/ADT/ArrayRef.h
+++ b/linux-x64/clang/include/llvm/ADT/ArrayRef.h
@@ -430,7 +430,7 @@
       std::copy(Data.begin(), Data.end(), this->begin());
     }
 
-    OwningArrayRef(OwningArrayRef &&Other) { *this = Other; }
+    OwningArrayRef(OwningArrayRef &&Other) { *this = std::move(Other); }
 
     OwningArrayRef &operator=(OwningArrayRef &&Other) {
       delete[] this->data();
diff --git a/linux-x64/clang/include/llvm/ADT/BreadthFirstIterator.h b/linux-x64/clang/include/llvm/ADT/BreadthFirstIterator.h
index cc6c860..e97d766 100644
--- a/linux-x64/clang/include/llvm/ADT/BreadthFirstIterator.h
+++ b/linux-x64/clang/include/llvm/ADT/BreadthFirstIterator.h
@@ -124,7 +124,7 @@
 
   const NodeRef &operator*() const { return VisitQueue.front()->first; }
 
-  // This is a nonstandard operator-> that dereferenfces the pointer an extra
+  // This is a nonstandard operator-> that dereferences the pointer an extra
   // time so that you can actually call methods on the node, because the
   // contained type is a pointer.
   NodeRef operator->() const { return **this; }
diff --git a/linux-x64/clang/include/llvm/ADT/DenseMap.h b/linux-x64/clang/include/llvm/ADT/DenseMap.h
index e7cd370..a05cf81 100644
--- a/linux-x64/clang/include/llvm/ADT/DenseMap.h
+++ b/linux-x64/clang/include/llvm/ADT/DenseMap.h
@@ -63,7 +63,7 @@
   template <typename AltPairT>
   DenseMapPair(AltPairT &&AltPair,
                typename std::enable_if<std::is_convertible<
-                   AltPairT, std::pair<KeyT, ValueT>>::value>::type * = 0)
+                   AltPairT, std::pair<KeyT, ValueT>>::value>::type * = nullptr)
       : std::pair<KeyT, ValueT>(std::forward<AltPairT>(AltPair)) {}
 
   KeyT &getFirst() { return std::pair<KeyT, ValueT>::first; }
diff --git a/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h b/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h
index 18d6dff..5ef6f3a 100644
--- a/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h
+++ b/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h
@@ -17,6 +17,7 @@
 #include "llvm/ADT/Hashing.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/PointerLikeTypeTraits.h"
+#include "llvm/Support/ScalableSize.h"
 #include <cassert>
 #include <cstddef>
 #include <cstdint>
@@ -268,6 +269,21 @@
   static bool isEqual(hash_code LHS, hash_code RHS) { return LHS == RHS; }
 };
 
+template <> struct DenseMapInfo<ElementCount> {
+  static inline ElementCount getEmptyKey() { return {~0U, true}; }
+  static inline ElementCount getTombstoneKey() { return {~0U - 1, false}; }
+  static unsigned getHashValue(const ElementCount& EltCnt) {
+    if (EltCnt.Scalable)
+      return (EltCnt.Min * 37U) - 1U;
+
+    return EltCnt.Min * 37U;
+  }
+
+  static bool isEqual(const ElementCount& LHS, const ElementCount& RHS) {
+    return LHS == RHS;
+  }
+};
+
 } // end namespace llvm
 
 #endif // LLVM_ADT_DENSEMAPINFO_H
diff --git a/linux-x64/clang/include/llvm/ADT/DenseSet.h b/linux-x64/clang/include/llvm/ADT/DenseSet.h
index 5eaaf27..9afb715 100644
--- a/linux-x64/clang/include/llvm/ADT/DenseSet.h
+++ b/linux-x64/clang/include/llvm/ADT/DenseSet.h
@@ -130,7 +130,7 @@
 
   class ConstIterator {
     typename MapTy::const_iterator I;
-    friend class DenseSet;
+    friend class DenseSetImpl;
     friend class Iterator;
 
   public:
diff --git a/linux-x64/clang/include/llvm/ADT/Optional.h b/linux-x64/clang/include/llvm/ADT/Optional.h
index 25a3185..b45a740 100644
--- a/linux-x64/clang/include/llvm/ADT/Optional.h
+++ b/linux-x64/clang/include/llvm/ADT/Optional.h
@@ -16,11 +16,10 @@
 #define LLVM_ADT_OPTIONAL_H
 
 #include "llvm/ADT/None.h"
-#include "llvm/Support/AlignOf.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/type_traits.h"
-#include <algorithm>
 #include <cassert>
+#include <memory>
 #include <new>
 #include <utility>
 
@@ -29,83 +28,185 @@
 class raw_ostream;
 
 namespace optional_detail {
+
+struct in_place_t {};
+
 /// Storage for any type.
-template <typename T, bool = is_trivially_copyable<T>::value> struct OptionalStorage {
-  AlignedCharArrayUnion<T> storage;
-  bool hasVal = false;
+template <typename T, bool = is_trivially_copyable<T>::value>
+class OptionalStorage {
+  union {
+    char empty;
+    T value;
+  };
+  bool hasVal;
 
-  OptionalStorage() = default;
-
-  OptionalStorage(const T &y) : hasVal(true) { new (storage.buffer) T(y); }
-  OptionalStorage(const OptionalStorage &O) : hasVal(O.hasVal) {
-    if (hasVal)
-      new (storage.buffer) T(*O.getPointer());
-  }
-  OptionalStorage(T &&y) : hasVal(true) {
-    new (storage.buffer) T(std::forward<T>(y));
-  }
-  OptionalStorage(OptionalStorage &&O) : hasVal(O.hasVal) {
-    if (O.hasVal) {
-      new (storage.buffer) T(std::move(*O.getPointer()));
-    }
-  }
-
-  OptionalStorage &operator=(T &&y) {
-    if (hasVal)
-      *getPointer() = std::move(y);
-    else {
-      new (storage.buffer) T(std::move(y));
-      hasVal = true;
-    }
-    return *this;
-  }
-  OptionalStorage &operator=(OptionalStorage &&O) {
-    if (!O.hasVal)
-      reset();
-    else {
-      *this = std::move(*O.getPointer());
-    }
-    return *this;
-  }
-
-  // FIXME: these assignments (& the equivalent const T&/const Optional& ctors)
-  // could be made more efficient by passing by value, possibly unifying them
-  // with the rvalue versions above - but this could place a different set of
-  // requirements (notably: the existence of a default ctor) when implemented
-  // in that way. Careful SFINAE to avoid such pitfalls would be required.
-  OptionalStorage &operator=(const T &y) {
-    if (hasVal)
-      *getPointer() = y;
-    else {
-      new (storage.buffer) T(y);
-      hasVal = true;
-    }
-    return *this;
-  }
-  OptionalStorage &operator=(const OptionalStorage &O) {
-    if (!O.hasVal)
-      reset();
-    else
-      *this = *O.getPointer();
-    return *this;
-  }
-
+public:
   ~OptionalStorage() { reset(); }
 
-  void reset() {
+  OptionalStorage() noexcept : empty(), hasVal(false) {}
+
+  OptionalStorage(OptionalStorage const &other) : OptionalStorage() {
+    if (other.hasValue()) {
+      emplace(other.value);
+    }
+  }
+  OptionalStorage(OptionalStorage &&other) : OptionalStorage() {
+    if (other.hasValue()) {
+      emplace(std::move(other.value));
+    }
+  }
+
+  template <class... Args>
+  explicit OptionalStorage(in_place_t, Args &&... args)
+      : value(std::forward<Args>(args)...), hasVal(true) {}
+
+  void reset() noexcept {
     if (hasVal) {
-      (*getPointer()).~T();
+      value.~T();
       hasVal = false;
     }
   }
 
-  T *getPointer() {
+  bool hasValue() const noexcept { return hasVal; }
+
+  T &getValue() LLVM_LVALUE_FUNCTION noexcept {
     assert(hasVal);
-    return reinterpret_cast<T *>(storage.buffer);
+    return value;
   }
-  const T *getPointer() const {
+  T const &getValue() const LLVM_LVALUE_FUNCTION noexcept {
     assert(hasVal);
-    return reinterpret_cast<const T *>(storage.buffer);
+    return value;
+  }
+#if LLVM_HAS_RVALUE_REFERENCE_THIS
+  T &&getValue() && noexcept {
+    assert(hasVal);
+    return std::move(value);
+  }
+#endif
+
+  template <class... Args> void emplace(Args &&... args) {
+    reset();
+    ::new ((void *)std::addressof(value)) T(std::forward<Args>(args)...);
+    hasVal = true;
+  }
+
+  OptionalStorage &operator=(T const &y) {
+    if (hasValue()) {
+      value = y;
+    } else {
+      ::new ((void *)std::addressof(value)) T(y);
+      hasVal = true;
+    }
+    return *this;
+  }
+  OptionalStorage &operator=(T &&y) {
+    if (hasValue()) {
+      value = std::move(y);
+    } else {
+      ::new ((void *)std::addressof(value)) T(std::move(y));
+      hasVal = true;
+    }
+    return *this;
+  }
+
+  OptionalStorage &operator=(OptionalStorage const &other) {
+    if (other.hasValue()) {
+      if (hasValue()) {
+        value = other.value;
+      } else {
+        ::new ((void *)std::addressof(value)) T(other.value);
+        hasVal = true;
+      }
+    } else {
+      reset();
+    }
+    return *this;
+  }
+
+  OptionalStorage &operator=(OptionalStorage &&other) {
+    if (other.hasValue()) {
+      if (hasValue()) {
+        value = std::move(other.value);
+      } else {
+        ::new ((void *)std::addressof(value)) T(std::move(other.value));
+        hasVal = true;
+      }
+    } else {
+      reset();
+    }
+    return *this;
+  }
+};
+
+template <typename T> class OptionalStorage<T, true> {
+  union {
+    char empty;
+    T value;
+  };
+  bool hasVal = false;
+
+public:
+  ~OptionalStorage() = default;
+
+  OptionalStorage() noexcept : empty{} {}
+
+  OptionalStorage(OptionalStorage const &other) = default;
+  OptionalStorage(OptionalStorage &&other) = default;
+
+  OptionalStorage &operator=(OptionalStorage const &other) = default;
+  OptionalStorage &operator=(OptionalStorage &&other) = default;
+
+  template <class... Args>
+  explicit OptionalStorage(in_place_t, Args &&... args)
+      : value(std::forward<Args>(args)...), hasVal(true) {}
+
+  void reset() noexcept {
+    if (hasVal) {
+      value.~T();
+      hasVal = false;
+    }
+  }
+
+  bool hasValue() const noexcept { return hasVal; }
+
+  T &getValue() LLVM_LVALUE_FUNCTION noexcept {
+    assert(hasVal);
+    return value;
+  }
+  T const &getValue() const LLVM_LVALUE_FUNCTION noexcept {
+    assert(hasVal);
+    return value;
+  }
+#if LLVM_HAS_RVALUE_REFERENCE_THIS
+  T &&getValue() && noexcept {
+    assert(hasVal);
+    return std::move(value);
+  }
+#endif
+
+  template <class... Args> void emplace(Args &&... args) {
+    reset();
+    ::new ((void *)std::addressof(value)) T(std::forward<Args>(args)...);
+    hasVal = true;
+  }
+
+  OptionalStorage &operator=(T const &y) {
+    if (hasValue()) {
+      value = y;
+    } else {
+      ::new ((void *)std::addressof(value)) T(y);
+      hasVal = true;
+    }
+    return *this;
+  }
+  OptionalStorage &operator=(T &&y) {
+    if (hasValue()) {
+      value = std::move(y);
+    } else {
+      ::new ((void *)std::addressof(value)) T(std::move(y));
+      hasVal = true;
+    }
+    return *this;
   }
 };
 
@@ -120,10 +221,10 @@
   constexpr Optional() {}
   constexpr Optional(NoneType) {}
 
-  Optional(const T &y) : Storage(y) {}
+  Optional(const T &y) : Storage(optional_detail::in_place_t{}, y) {}
   Optional(const Optional &O) = default;
 
-  Optional(T &&y) : Storage(std::forward<T>(y)) {}
+  Optional(T &&y) : Storage(optional_detail::in_place_t{}, std::move(y)) {}
   Optional(Optional &&O) = default;
 
   Optional &operator=(T &&y) {
@@ -134,9 +235,7 @@
 
   /// Create a new object by constructing it in place with the given arguments.
   template <typename... ArgTypes> void emplace(ArgTypes &&... Args) {
-    reset();
-    Storage.hasVal = true;
-    new (getPointer()) T(std::forward<ArgTypes>(Args)...);
+    Storage.emplace(std::forward<ArgTypes>(Args)...);
   }
 
   static inline Optional create(const T *y) {
@@ -151,23 +250,17 @@
 
   void reset() { Storage.reset(); }
 
-  const T *getPointer() const {
-    assert(Storage.hasVal);
-    return reinterpret_cast<const T *>(Storage.storage.buffer);
-  }
-  T *getPointer() {
-    assert(Storage.hasVal);
-    return reinterpret_cast<T *>(Storage.storage.buffer);
-  }
-  const T &getValue() const LLVM_LVALUE_FUNCTION { return *getPointer(); }
-  T &getValue() LLVM_LVALUE_FUNCTION { return *getPointer(); }
+  const T *getPointer() const { return &Storage.getValue(); }
+  T *getPointer() { return &Storage.getValue(); }
+  const T &getValue() const LLVM_LVALUE_FUNCTION { return Storage.getValue(); }
+  T &getValue() LLVM_LVALUE_FUNCTION { return Storage.getValue(); }
 
-  explicit operator bool() const { return Storage.hasVal; }
-  bool hasValue() const { return Storage.hasVal; }
+  explicit operator bool() const { return hasValue(); }
+  bool hasValue() const { return Storage.hasValue(); }
   const T *operator->() const { return getPointer(); }
   T *operator->() { return getPointer(); }
-  const T &operator*() const LLVM_LVALUE_FUNCTION { return *getPointer(); }
-  T &operator*() LLVM_LVALUE_FUNCTION { return *getPointer(); }
+  const T &operator*() const LLVM_LVALUE_FUNCTION { return getValue(); }
+  T &operator*() LLVM_LVALUE_FUNCTION { return getValue(); }
 
   template <typename U>
   constexpr T getValueOr(U &&value) const LLVM_LVALUE_FUNCTION {
@@ -175,8 +268,8 @@
   }
 
 #if LLVM_HAS_RVALUE_REFERENCE_THIS
-  T &&getValue() && { return std::move(*getPointer()); }
-  T &&operator*() && { return std::move(*getPointer()); }
+  T &&getValue() && { return std::move(Storage.getValue()); }
+  T &&operator*() && { return std::move(Storage.getValue()); }
 
   template <typename U>
   T getValueOr(U &&value) && {
diff --git a/linux-x64/clang/include/llvm/ADT/PointerUnion.h b/linux-x64/clang/include/llvm/ADT/PointerUnion.h
index 0605429..2bcdf54 100644
--- a/linux-x64/clang/include/llvm/ADT/PointerUnion.h
+++ b/linux-x64/clang/include/llvm/ADT/PointerUnion.h
@@ -53,22 +53,98 @@
       typename PointerUnionTypeSelector<T1, T2, RET_EQ, RET_NE>::Return;
 };
 
-/// Provide PointerLikeTypeTraits for void* that is used by PointerUnion
-/// for the two template arguments.
-template <typename PT1, typename PT2> class PointerUnionUIntTraits {
-public:
-  static inline void *getAsVoidPointer(void *P) { return P; }
-  static inline void *getFromVoidPointer(void *P) { return P; }
+namespace pointer_union_detail {
+  constexpr int constexprMin(int a, int b) { return a < b ? a : b; }
+  /// Determine the number of bits required to store integers with values < n.
+  /// This is ceil(log2(n)).
+  constexpr int bitsRequired(unsigned n) {
+    return n > 1 ? 1 + bitsRequired((n + 1) / 2) : 0;
+  }
 
-  enum {
-    PT1BitsAv = (int)(PointerLikeTypeTraits<PT1>::NumLowBitsAvailable),
-    PT2BitsAv = (int)(PointerLikeTypeTraits<PT2>::NumLowBitsAvailable),
-    NumLowBitsAvailable = PT1BitsAv < PT2BitsAv ? PT1BitsAv : PT2BitsAv
+  // FIXME: In C++14, replace this with
+  //   std::min({PointerLikeTypeTraits<Ts>::NumLowBitsAvailable...})
+  template <typename T> constexpr int lowBitsAvailable() {
+    return PointerLikeTypeTraits<T>::NumLowBitsAvailable;
+  }
+  template <typename T1, typename T2, typename... Ts>
+  constexpr int lowBitsAvailable() {
+    return constexprMin(lowBitsAvailable<T1>(), lowBitsAvailable<T2, Ts...>());
+  }
+
+  /// Find the index of a type in a list of types. TypeIndex<T, Us...>::Index
+  /// is the index of T in Us, or sizeof...(Us) if T does not appear in the
+  /// list.
+  template <typename T, typename ...Us> struct TypeIndex;
+  template <typename T, typename ...Us> struct TypeIndex<T, T, Us...> {
+    static constexpr int Index = 0;
   };
-};
+  template <typename T, typename U, typename... Us>
+  struct TypeIndex<T, U, Us...> {
+    static constexpr int Index = 1 + TypeIndex<T, Us...>::Index;
+  };
+  template <typename T> struct TypeIndex<T> {
+    static constexpr int Index = 0;
+  };
 
-/// A discriminated union of two pointer types, with the discriminator in the
-/// low bit of the pointer.
+  /// Find the first type in a list of types.
+  template <typename T, typename...> struct GetFirstType {
+    using type = T;
+  };
+
+  /// Provide PointerLikeTypeTraits for void* that is used by PointerUnion
+  /// for the template arguments.
+  template <typename ...PTs> class PointerUnionUIntTraits {
+  public:
+    static inline void *getAsVoidPointer(void *P) { return P; }
+    static inline void *getFromVoidPointer(void *P) { return P; }
+    static constexpr int NumLowBitsAvailable = lowBitsAvailable<PTs...>();
+  };
+
+  /// Implement assigment in terms of construction.
+  template <typename Derived, typename T> struct AssignableFrom {
+    Derived &operator=(T t) {
+      return static_cast<Derived &>(*this) = Derived(t);
+    }
+  };
+
+  template <typename Derived, typename ValTy, int I, typename ...Types>
+  class PointerUnionMembers;
+
+  template <typename Derived, typename ValTy, int I>
+  class PointerUnionMembers<Derived, ValTy, I> {
+  protected:
+    ValTy Val;
+    PointerUnionMembers() = default;
+    PointerUnionMembers(ValTy Val) : Val(Val) {}
+
+    friend struct PointerLikeTypeTraits<Derived>;
+  };
+
+  template <typename Derived, typename ValTy, int I, typename Type,
+            typename ...Types>
+  class PointerUnionMembers<Derived, ValTy, I, Type, Types...>
+      : public PointerUnionMembers<Derived, ValTy, I + 1, Types...> {
+    using Base = PointerUnionMembers<Derived, ValTy, I + 1, Types...>;
+  public:
+    using Base::Base;
+    PointerUnionMembers() = default;
+    PointerUnionMembers(Type V)
+        : Base(ValTy(const_cast<void *>(
+                         PointerLikeTypeTraits<Type>::getAsVoidPointer(V)),
+                     I)) {}
+
+    using Base::operator=;
+    Derived &operator=(Type V) {
+      this->Val = ValTy(
+          const_cast<void *>(PointerLikeTypeTraits<Type>::getAsVoidPointer(V)),
+          I);
+      return static_cast<Derived &>(*this);
+    };
+  };
+}
+
+/// A discriminated union of two or more pointer types, with the discriminator
+/// in the low bit of the pointer.
 ///
 /// This implementation is extremely efficient in space due to leveraging the
 /// low bits of the pointer, while exposing a natural and type-safe API.
@@ -83,49 +159,44 @@
 ///    P = (float*)0;
 ///    Y = P.get<float*>();   // ok.
 ///    X = P.get<int*>();     // runtime assertion failure.
-template <typename PT1, typename PT2> class PointerUnion {
-public:
-  using ValTy =
-      PointerIntPair<void *, 1, bool, PointerUnionUIntTraits<PT1, PT2>>;
-
-private:
-  ValTy Val;
-
-  struct IsPT1 {
-    static const int Num = 0;
-  };
-  struct IsPT2 {
-    static const int Num = 1;
-  };
-  template <typename T> struct UNION_DOESNT_CONTAIN_TYPE {};
+template <typename... PTs>
+class PointerUnion
+    : public pointer_union_detail::PointerUnionMembers<
+          PointerUnion<PTs...>,
+          PointerIntPair<
+              void *, pointer_union_detail::bitsRequired(sizeof...(PTs)), int,
+              pointer_union_detail::PointerUnionUIntTraits<PTs...>>,
+          0, PTs...> {
+  // The first type is special in some ways, but we don't want PointerUnion to
+  // be a 'template <typename First, typename ...Rest>' because it's much more
+  // convenient to have a name for the whole pack. So split off the first type
+  // here.
+  using First = typename pointer_union_detail::GetFirstType<PTs...>::type;
+  using Base = typename PointerUnion::PointerUnionMembers;
 
 public:
   PointerUnion() = default;
-  PointerUnion(PT1 V)
-      : Val(const_cast<void *>(
-            PointerLikeTypeTraits<PT1>::getAsVoidPointer(V))) {}
-  PointerUnion(PT2 V)
-      : Val(const_cast<void *>(PointerLikeTypeTraits<PT2>::getAsVoidPointer(V)),
-            1) {}
+
+  PointerUnion(std::nullptr_t) : PointerUnion() {}
+  using Base::Base;
 
   /// Test if the pointer held in the union is null, regardless of
   /// which type it is.
   bool isNull() const {
     // Convert from the void* to one of the pointer types, to make sure that
     // we recursively strip off low bits if we have a nested PointerUnion.
-    return !PointerLikeTypeTraits<PT1>::getFromVoidPointer(Val.getPointer());
+    return !PointerLikeTypeTraits<First>::getFromVoidPointer(
+        this->Val.getPointer());
   }
 
   explicit operator bool() const { return !isNull(); }
 
   /// Test if the Union currently holds the type matching T.
   template <typename T> int is() const {
-    using Ty = typename ::llvm::PointerUnionTypeSelector<
-        PT1, T, IsPT1,
-        ::llvm::PointerUnionTypeSelector<PT2, T, IsPT2,
-                                         UNION_DOESNT_CONTAIN_TYPE<T>>>::Return;
-    int TyNo = Ty::Num;
-    return static_cast<int>(Val.getInt()) == TyNo;
+    constexpr int Index = pointer_union_detail::TypeIndex<T, PTs...>::Index;
+    static_assert(Index < sizeof...(PTs),
+                  "PointerUnion::is<T> given type not in the union");
+    return this->Val.getInt() == Index;
   }
 
   /// Returns the value of the specified pointer type.
@@ -133,7 +204,7 @@
   /// If the specified pointer type is incorrect, assert.
   template <typename T> T get() const {
     assert(is<T>() && "Invalid accessor called");
-    return PointerLikeTypeTraits<T>::getFromVoidPointer(Val.getPointer());
+    return PointerLikeTypeTraits<T>::getFromVoidPointer(this->Val.getPointer());
   }
 
   /// Returns the current pointer if it is of the specified pointer type,
@@ -146,342 +217,100 @@
 
   /// If the union is set to the first pointer type get an address pointing to
   /// it.
-  PT1 const *getAddrOfPtr1() const {
+  First const *getAddrOfPtr1() const {
     return const_cast<PointerUnion *>(this)->getAddrOfPtr1();
   }
 
   /// If the union is set to the first pointer type get an address pointing to
   /// it.
-  PT1 *getAddrOfPtr1() {
-    assert(is<PT1>() && "Val is not the first pointer");
+  First *getAddrOfPtr1() {
+    assert(is<First>() && "Val is not the first pointer");
     assert(
-        get<PT1>() == Val.getPointer() &&
+        get<First>() == this->Val.getPointer() &&
         "Can't get the address because PointerLikeTypeTraits changes the ptr");
-    return const_cast<PT1 *>(
-        reinterpret_cast<const PT1 *>(Val.getAddrOfPointer()));
+    return const_cast<First *>(
+        reinterpret_cast<const First *>(this->Val.getAddrOfPointer()));
   }
 
   /// Assignment from nullptr which just clears the union.
   const PointerUnion &operator=(std::nullptr_t) {
-    Val.initWithPointer(nullptr);
+    this->Val.initWithPointer(nullptr);
     return *this;
   }
 
-  /// Assignment operators - Allow assigning into this union from either
-  /// pointer type, setting the discriminator to remember what it came from.
-  const PointerUnion &operator=(const PT1 &RHS) {
-    Val.initWithPointer(
-        const_cast<void *>(PointerLikeTypeTraits<PT1>::getAsVoidPointer(RHS)));
-    return *this;
-  }
-  const PointerUnion &operator=(const PT2 &RHS) {
-    Val.setPointerAndInt(
-        const_cast<void *>(PointerLikeTypeTraits<PT2>::getAsVoidPointer(RHS)),
-        1);
-    return *this;
-  }
+  /// Assignment from elements of the union.
+  using Base::operator=;
 
-  void *getOpaqueValue() const { return Val.getOpaqueValue(); }
+  void *getOpaqueValue() const { return this->Val.getOpaqueValue(); }
   static inline PointerUnion getFromOpaqueValue(void *VP) {
     PointerUnion V;
-    V.Val = ValTy::getFromOpaqueValue(VP);
+    V.Val = decltype(V.Val)::getFromOpaqueValue(VP);
     return V;
   }
 };
 
-template <typename PT1, typename PT2>
-bool operator==(PointerUnion<PT1, PT2> lhs, PointerUnion<PT1, PT2> rhs) {
+template <typename ...PTs>
+bool operator==(PointerUnion<PTs...> lhs, PointerUnion<PTs...> rhs) {
   return lhs.getOpaqueValue() == rhs.getOpaqueValue();
 }
 
-template <typename PT1, typename PT2>
-bool operator!=(PointerUnion<PT1, PT2> lhs, PointerUnion<PT1, PT2> rhs) {
+template <typename ...PTs>
+bool operator!=(PointerUnion<PTs...> lhs, PointerUnion<PTs...> rhs) {
   return lhs.getOpaqueValue() != rhs.getOpaqueValue();
 }
 
-template <typename PT1, typename PT2>
-bool operator<(PointerUnion<PT1, PT2> lhs, PointerUnion<PT1, PT2> rhs) {
+template <typename ...PTs>
+bool operator<(PointerUnion<PTs...> lhs, PointerUnion<PTs...> rhs) {
   return lhs.getOpaqueValue() < rhs.getOpaqueValue();
 }
 
 // Teach SmallPtrSet that PointerUnion is "basically a pointer", that has
 // # low bits available = min(PT1bits,PT2bits)-1.
-template <typename PT1, typename PT2>
-struct PointerLikeTypeTraits<PointerUnion<PT1, PT2>> {
-  static inline void *getAsVoidPointer(const PointerUnion<PT1, PT2> &P) {
+template <typename ...PTs>
+struct PointerLikeTypeTraits<PointerUnion<PTs...>> {
+  static inline void *getAsVoidPointer(const PointerUnion<PTs...> &P) {
     return P.getOpaqueValue();
   }
 
-  static inline PointerUnion<PT1, PT2> getFromVoidPointer(void *P) {
-    return PointerUnion<PT1, PT2>::getFromOpaqueValue(P);
+  static inline PointerUnion<PTs...> getFromVoidPointer(void *P) {
+    return PointerUnion<PTs...>::getFromOpaqueValue(P);
   }
 
-  // The number of bits available are the min of the two pointer types.
-  enum {
-    NumLowBitsAvailable = PointerLikeTypeTraits<
-        typename PointerUnion<PT1, PT2>::ValTy>::NumLowBitsAvailable
-  };
+  // The number of bits available are the min of the pointer types minus the
+  // bits needed for the discriminator.
+  static constexpr int NumLowBitsAvailable = PointerLikeTypeTraits<decltype(
+      PointerUnion<PTs...>::Val)>::NumLowBitsAvailable;
 };
 
 /// A pointer union of three pointer types. See documentation for PointerUnion
 /// for usage.
-template <typename PT1, typename PT2, typename PT3> class PointerUnion3 {
-public:
-  using InnerUnion = PointerUnion<PT1, PT2>;
-  using ValTy = PointerUnion<InnerUnion, PT3>;
-
-private:
-  ValTy Val;
-
-  struct IsInnerUnion {
-    ValTy Val;
-
-    IsInnerUnion(ValTy val) : Val(val) {}
-
-    template <typename T> int is() const {
-      return Val.template is<InnerUnion>() &&
-             Val.template get<InnerUnion>().template is<T>();
-    }
-
-    template <typename T> T get() const {
-      return Val.template get<InnerUnion>().template get<T>();
-    }
-  };
-
-  struct IsPT3 {
-    ValTy Val;
-
-    IsPT3(ValTy val) : Val(val) {}
-
-    template <typename T> int is() const { return Val.template is<T>(); }
-    template <typename T> T get() const { return Val.template get<T>(); }
-  };
-
-public:
-  PointerUnion3() = default;
-  PointerUnion3(PT1 V) { Val = InnerUnion(V); }
-  PointerUnion3(PT2 V) { Val = InnerUnion(V); }
-  PointerUnion3(PT3 V) { Val = V; }
-
-  /// Test if the pointer held in the union is null, regardless of
-  /// which type it is.
-  bool isNull() const { return Val.isNull(); }
-  explicit operator bool() const { return !isNull(); }
-
-  /// Test if the Union currently holds the type matching T.
-  template <typename T> int is() const {
-    // If T is PT1/PT2 choose IsInnerUnion otherwise choose IsPT3.
-    using Ty = typename ::llvm::PointerUnionTypeSelector<
-        PT1, T, IsInnerUnion,
-        ::llvm::PointerUnionTypeSelector<PT2, T, IsInnerUnion, IsPT3>>::Return;
-    return Ty(Val).template is<T>();
-  }
-
-  /// Returns the value of the specified pointer type.
-  ///
-  /// If the specified pointer type is incorrect, assert.
-  template <typename T> T get() const {
-    assert(is<T>() && "Invalid accessor called");
-    // If T is PT1/PT2 choose IsInnerUnion otherwise choose IsPT3.
-    using Ty = typename ::llvm::PointerUnionTypeSelector<
-        PT1, T, IsInnerUnion,
-        ::llvm::PointerUnionTypeSelector<PT2, T, IsInnerUnion, IsPT3>>::Return;
-    return Ty(Val).template get<T>();
-  }
-
-  /// Returns the current pointer if it is of the specified pointer type,
-  /// otherwises returns null.
-  template <typename T> T dyn_cast() const {
-    if (is<T>())
-      return get<T>();
-    return T();
-  }
-
-  /// Assignment from nullptr which just clears the union.
-  const PointerUnion3 &operator=(std::nullptr_t) {
-    Val = nullptr;
-    return *this;
-  }
-
-  /// Assignment operators - Allow assigning into this union from either
-  /// pointer type, setting the discriminator to remember what it came from.
-  const PointerUnion3 &operator=(const PT1 &RHS) {
-    Val = InnerUnion(RHS);
-    return *this;
-  }
-  const PointerUnion3 &operator=(const PT2 &RHS) {
-    Val = InnerUnion(RHS);
-    return *this;
-  }
-  const PointerUnion3 &operator=(const PT3 &RHS) {
-    Val = RHS;
-    return *this;
-  }
-
-  void *getOpaqueValue() const { return Val.getOpaqueValue(); }
-  static inline PointerUnion3 getFromOpaqueValue(void *VP) {
-    PointerUnion3 V;
-    V.Val = ValTy::getFromOpaqueValue(VP);
-    return V;
-  }
-};
-
-// Teach SmallPtrSet that PointerUnion3 is "basically a pointer", that has
-// # low bits available = min(PT1bits,PT2bits,PT2bits)-2.
 template <typename PT1, typename PT2, typename PT3>
-struct PointerLikeTypeTraits<PointerUnion3<PT1, PT2, PT3>> {
-  static inline void *getAsVoidPointer(const PointerUnion3<PT1, PT2, PT3> &P) {
-    return P.getOpaqueValue();
-  }
-
-  static inline PointerUnion3<PT1, PT2, PT3> getFromVoidPointer(void *P) {
-    return PointerUnion3<PT1, PT2, PT3>::getFromOpaqueValue(P);
-  }
-
-  // The number of bits available are the min of the two pointer types.
-  enum {
-    NumLowBitsAvailable = PointerLikeTypeTraits<
-        typename PointerUnion3<PT1, PT2, PT3>::ValTy>::NumLowBitsAvailable
-  };
-};
-
-template <typename PT1, typename PT2, typename PT3>
-bool operator<(PointerUnion3<PT1, PT2, PT3> lhs,
-               PointerUnion3<PT1, PT2, PT3> rhs) {
-  return lhs.getOpaqueValue() < rhs.getOpaqueValue();
-}
+using PointerUnion3 = PointerUnion<PT1, PT2, PT3>;
 
 /// A pointer union of four pointer types. See documentation for PointerUnion
 /// for usage.
 template <typename PT1, typename PT2, typename PT3, typename PT4>
-class PointerUnion4 {
-public:
-  using InnerUnion1 = PointerUnion<PT1, PT2>;
-  using InnerUnion2 = PointerUnion<PT3, PT4>;
-  using ValTy = PointerUnion<InnerUnion1, InnerUnion2>;
-
-private:
-  ValTy Val;
-
-public:
-  PointerUnion4() = default;
-  PointerUnion4(PT1 V) { Val = InnerUnion1(V); }
-  PointerUnion4(PT2 V) { Val = InnerUnion1(V); }
-  PointerUnion4(PT3 V) { Val = InnerUnion2(V); }
-  PointerUnion4(PT4 V) { Val = InnerUnion2(V); }
-
-  /// Test if the pointer held in the union is null, regardless of
-  /// which type it is.
-  bool isNull() const { return Val.isNull(); }
-  explicit operator bool() const { return !isNull(); }
-
-  /// Test if the Union currently holds the type matching T.
-  template <typename T> int is() const {
-    // If T is PT1/PT2 choose InnerUnion1 otherwise choose InnerUnion2.
-    using Ty = typename ::llvm::PointerUnionTypeSelector<
-        PT1, T, InnerUnion1,
-        ::llvm::PointerUnionTypeSelector<PT2, T, InnerUnion1,
-                                         InnerUnion2>>::Return;
-    return Val.template is<Ty>() && Val.template get<Ty>().template is<T>();
-  }
-
-  /// Returns the value of the specified pointer type.
-  ///
-  /// If the specified pointer type is incorrect, assert.
-  template <typename T> T get() const {
-    assert(is<T>() && "Invalid accessor called");
-    // If T is PT1/PT2 choose InnerUnion1 otherwise choose InnerUnion2.
-    using Ty = typename ::llvm::PointerUnionTypeSelector<
-        PT1, T, InnerUnion1,
-        ::llvm::PointerUnionTypeSelector<PT2, T, InnerUnion1,
-                                         InnerUnion2>>::Return;
-    return Val.template get<Ty>().template get<T>();
-  }
-
-  /// Returns the current pointer if it is of the specified pointer type,
-  /// otherwises returns null.
-  template <typename T> T dyn_cast() const {
-    if (is<T>())
-      return get<T>();
-    return T();
-  }
-
-  /// Assignment from nullptr which just clears the union.
-  const PointerUnion4 &operator=(std::nullptr_t) {
-    Val = nullptr;
-    return *this;
-  }
-
-  /// Assignment operators - Allow assigning into this union from either
-  /// pointer type, setting the discriminator to remember what it came from.
-  const PointerUnion4 &operator=(const PT1 &RHS) {
-    Val = InnerUnion1(RHS);
-    return *this;
-  }
-  const PointerUnion4 &operator=(const PT2 &RHS) {
-    Val = InnerUnion1(RHS);
-    return *this;
-  }
-  const PointerUnion4 &operator=(const PT3 &RHS) {
-    Val = InnerUnion2(RHS);
-    return *this;
-  }
-  const PointerUnion4 &operator=(const PT4 &RHS) {
-    Val = InnerUnion2(RHS);
-    return *this;
-  }
-
-  void *getOpaqueValue() const { return Val.getOpaqueValue(); }
-  static inline PointerUnion4 getFromOpaqueValue(void *VP) {
-    PointerUnion4 V;
-    V.Val = ValTy::getFromOpaqueValue(VP);
-    return V;
-  }
-};
-
-// Teach SmallPtrSet that PointerUnion4 is "basically a pointer", that has
-// # low bits available = min(PT1bits,PT2bits,PT2bits)-2.
-template <typename PT1, typename PT2, typename PT3, typename PT4>
-struct PointerLikeTypeTraits<PointerUnion4<PT1, PT2, PT3, PT4>> {
-  static inline void *
-  getAsVoidPointer(const PointerUnion4<PT1, PT2, PT3, PT4> &P) {
-    return P.getOpaqueValue();
-  }
-
-  static inline PointerUnion4<PT1, PT2, PT3, PT4> getFromVoidPointer(void *P) {
-    return PointerUnion4<PT1, PT2, PT3, PT4>::getFromOpaqueValue(P);
-  }
-
-  // The number of bits available are the min of the two pointer types.
-  enum {
-    NumLowBitsAvailable = PointerLikeTypeTraits<
-        typename PointerUnion4<PT1, PT2, PT3, PT4>::ValTy>::NumLowBitsAvailable
-  };
-};
+using PointerUnion4 = PointerUnion<PT1, PT2, PT3, PT4>;
 
 // Teach DenseMap how to use PointerUnions as keys.
-template <typename T, typename U> struct DenseMapInfo<PointerUnion<T, U>> {
-  using Pair = PointerUnion<T, U>;
-  using FirstInfo = DenseMapInfo<T>;
-  using SecondInfo = DenseMapInfo<U>;
+template <typename ...PTs> struct DenseMapInfo<PointerUnion<PTs...>> {
+  using Union = PointerUnion<PTs...>;
+  using FirstInfo =
+      DenseMapInfo<typename pointer_union_detail::GetFirstType<PTs...>::type>;
 
-  static inline Pair getEmptyKey() { return Pair(FirstInfo::getEmptyKey()); }
+  static inline Union getEmptyKey() { return Union(FirstInfo::getEmptyKey()); }
 
-  static inline Pair getTombstoneKey() {
-    return Pair(FirstInfo::getTombstoneKey());
+  static inline Union getTombstoneKey() {
+    return Union(FirstInfo::getTombstoneKey());
   }
 
-  static unsigned getHashValue(const Pair &PairVal) {
-    intptr_t key = (intptr_t)PairVal.getOpaqueValue();
+  static unsigned getHashValue(const Union &UnionVal) {
+    intptr_t key = (intptr_t)UnionVal.getOpaqueValue();
     return DenseMapInfo<intptr_t>::getHashValue(key);
   }
 
-  static bool isEqual(const Pair &LHS, const Pair &RHS) {
-    return LHS.template is<T>() == RHS.template is<T>() &&
-           (LHS.template is<T>() ? FirstInfo::isEqual(LHS.template get<T>(),
-                                                      RHS.template get<T>())
-                                 : SecondInfo::isEqual(LHS.template get<U>(),
-                                                       RHS.template get<U>()));
+  static bool isEqual(const Union &LHS, const Union &RHS) {
+    return LHS == RHS;
   }
 };
 
diff --git a/linux-x64/clang/include/llvm/ADT/STLExtras.h b/linux-x64/clang/include/llvm/ADT/STLExtras.h
index 9a891d1..81dce01 100644
--- a/linux-x64/clang/include/llvm/ADT/STLExtras.h
+++ b/linux-x64/clang/include/llvm/ADT/STLExtras.h
@@ -240,6 +240,13 @@
   return mapped_iterator<ItTy, FuncTy>(std::move(I), std::move(F));
 }
 
+template <class ContainerTy, class FuncTy>
+auto map_range(ContainerTy &&C, FuncTy F)
+    -> decltype(make_range(map_iterator(C.begin(), F),
+                           map_iterator(C.end(), F))) {
+  return make_range(map_iterator(C.begin(), F), map_iterator(C.end(), F));
+}
+
 /// Helper to determine if type T has a member called rbegin().
 template <typename Ty> class has_rbegin_impl {
   using yes = char[1];
@@ -1277,29 +1284,52 @@
 
 /// Provide wrappers to std::lower_bound which take ranges instead of having to
 /// pass begin/end explicitly.
-template <typename R, typename ForwardIt>
-auto lower_bound(R &&Range, ForwardIt I) -> decltype(adl_begin(Range)) {
-  return std::lower_bound(adl_begin(Range), adl_end(Range), I);
+template <typename R, typename T>
+auto lower_bound(R &&Range, T &&Value) -> decltype(adl_begin(Range)) {
+  return std::lower_bound(adl_begin(Range), adl_end(Range),
+                          std::forward<T>(Value));
 }
 
-template <typename R, typename ForwardIt, typename Compare>
-auto lower_bound(R &&Range, ForwardIt I, Compare C)
+template <typename R, typename T, typename Compare>
+auto lower_bound(R &&Range, T &&Value, Compare C)
     -> decltype(adl_begin(Range)) {
-  return std::lower_bound(adl_begin(Range), adl_end(Range), I, C);
+  return std::lower_bound(adl_begin(Range), adl_end(Range),
+                          std::forward<T>(Value), C);
 }
 
 /// Provide wrappers to std::upper_bound which take ranges instead of having to
 /// pass begin/end explicitly.
-template <typename R, typename ForwardIt>
-auto upper_bound(R &&Range, ForwardIt I) -> decltype(adl_begin(Range)) {
-  return std::upper_bound(adl_begin(Range), adl_end(Range), I);
+template <typename R, typename T>
+auto upper_bound(R &&Range, T &&Value) -> decltype(adl_begin(Range)) {
+  return std::upper_bound(adl_begin(Range), adl_end(Range),
+                          std::forward<T>(Value));
 }
 
-template <typename R, typename ForwardIt, typename Compare>
-auto upper_bound(R &&Range, ForwardIt I, Compare C)
+template <typename R, typename T, typename Compare>
+auto upper_bound(R &&Range, T &&Value, Compare C)
     -> decltype(adl_begin(Range)) {
-  return std::upper_bound(adl_begin(Range), adl_end(Range), I, C);
+  return std::upper_bound(adl_begin(Range), adl_end(Range),
+                          std::forward<T>(Value), C);
 }
+
+template <typename R>
+void stable_sort(R &&Range) {
+  std::stable_sort(adl_begin(Range), adl_end(Range));
+}
+
+template <typename R, typename Compare>
+void stable_sort(R &&Range, Compare C) {
+  std::stable_sort(adl_begin(Range), adl_end(Range), C);
+}
+
+/// Binary search for the first iterator in a range where a predicate is false.
+/// Requires that C is always true below some limit, and always false above it.
+template <typename R, typename Predicate,
+          typename Val = decltype(*adl_begin(std::declval<R>()))>
+auto partition_point(R &&Range, Predicate P) -> decltype(adl_begin(Range)) {
+  return std::partition_point(adl_begin(Range), adl_end(Range), P);
+}
+
 /// Wrapper function around std::equal to detect if all elements
 /// in a container are same.
 template <typename R>
@@ -1330,6 +1360,33 @@
   C.erase(remove_if(C, P), C.end());
 }
 
+/// Given a sequence container Cont, replace the range [ContIt, ContEnd) with
+/// the range [ValIt, ValEnd) (which is not from the same container).
+template<typename Container, typename RandomAccessIterator>
+void replace(Container &Cont, typename Container::iterator ContIt,
+             typename Container::iterator ContEnd, RandomAccessIterator ValIt,
+             RandomAccessIterator ValEnd) {
+  while (true) {
+    if (ValIt == ValEnd) {
+      Cont.erase(ContIt, ContEnd);
+      return;
+    } else if (ContIt == ContEnd) {
+      Cont.insert(ContIt, ValIt, ValEnd);
+      return;
+    }
+    *ContIt++ = *ValIt++;
+  }
+}
+
+/// Given a sequence container Cont, replace the range [ContIt, ContEnd) with
+/// the range R.
+template<typename Container, typename Range = std::initializer_list<
+                                 typename Container::value_type>>
+void replace(Container &Cont, typename Container::iterator ContIt,
+             typename Container::iterator ContEnd, Range R) {
+  replace(Cont, ContIt, ContEnd, R.begin(), R.end());
+}
+
 //===----------------------------------------------------------------------===//
 //     Extra additions to <memory>
 //===----------------------------------------------------------------------===//
@@ -1417,6 +1474,9 @@
 template <typename R> class enumerator_iter;
 
 template <typename R> struct result_pair {
+  using value_reference =
+      typename std::iterator_traits<IterOfRange<R>>::reference;
+
   friend class enumerator_iter<R>;
 
   result_pair() = default;
@@ -1430,8 +1490,8 @@
   }
 
   std::size_t index() const { return Index; }
-  const ValueOfRange<R> &value() const { return *Iter; }
-  ValueOfRange<R> &value() { return *Iter; }
+  const value_reference value() const { return *Iter; }
+  value_reference value() { return *Iter; }
 
 private:
   std::size_t Index = std::numeric_limits<std::size_t>::max();
@@ -1576,6 +1636,19 @@
   return true;
 }
 
+/// Returns a raw pointer that represents the same address as the argument.
+///
+/// The late bound return should be removed once we move to C++14 to better
+/// align with the C++20 declaration. Also, this implementation can be removed
+/// once we move to C++20 where it's defined as std::to_addres()
+///
+/// The std::pointer_traits<>::to_address(p) variations of these overloads has
+/// not been implemented.
+template <class Ptr> auto to_address(const Ptr &P) -> decltype(P.operator->()) {
+  return P.operator->();
+}
+template <class T> constexpr T *to_address(T *P) { return P; }
+
 } // end namespace llvm
 
 #endif // LLVM_ADT_STLEXTRAS_H
diff --git a/linux-x64/clang/include/llvm/ADT/SmallVector.h b/linux-x64/clang/include/llvm/ADT/SmallVector.h
index e3bfb90..1758690 100644
--- a/linux-x64/clang/include/llvm/ADT/SmallVector.h
+++ b/linux-x64/clang/include/llvm/ADT/SmallVector.h
@@ -41,8 +41,8 @@
   unsigned Size = 0, Capacity;
 
   SmallVectorBase() = delete;
-  SmallVectorBase(void *FirstEl, size_t Capacity)
-      : BeginX(FirstEl), Capacity(Capacity) {}
+  SmallVectorBase(void *FirstEl, size_t TotalCapacity)
+      : BeginX(FirstEl), Capacity(TotalCapacity) {}
 
   /// This is an implementation of the grow() method which only works
   /// on POD-like data types and is out of line to reduce code duplication.
@@ -63,9 +63,9 @@
   /// of the buffer when they know that more elements are available, and only
   /// update the size later. This avoids the cost of value initializing elements
   /// which will only be overwritten.
-  void set_size(size_t Size) {
-    assert(Size <= capacity());
-    this->Size = Size;
+  void set_size(size_t N) {
+    assert(N <= capacity());
+    Size = N;
   }
 };
 
@@ -318,6 +318,7 @@
 public:
   using iterator = typename SuperClass::iterator;
   using const_iterator = typename SuperClass::const_iterator;
+  using reference = typename SuperClass::reference;
   using size_type = typename SuperClass::size_type;
 
 protected:
@@ -385,22 +386,18 @@
                 std::input_iterator_tag>::value>::type>
   void append(in_iter in_start, in_iter in_end) {
     size_type NumInputs = std::distance(in_start, in_end);
-    // Grow allocated space if needed.
     if (NumInputs > this->capacity() - this->size())
       this->grow(this->size()+NumInputs);
 
-    // Copy the new elements over.
     this->uninitialized_copy(in_start, in_end, this->end());
     this->set_size(this->size() + NumInputs);
   }
 
-  /// Add the specified range to the end of the SmallVector.
+  /// Append \p NumInputs copies of \p Elt to the end.
   void append(size_type NumInputs, const T &Elt) {
-    // Grow allocated space if needed.
     if (NumInputs > this->capacity() - this->size())
       this->grow(this->size()+NumInputs);
 
-    // Copy the new elements over.
     std::uninitialized_fill_n(this->end(), NumInputs, Elt);
     this->set_size(this->size() + NumInputs);
   }
@@ -641,11 +638,12 @@
     insert(I, IL.begin(), IL.end());
   }
 
-  template <typename... ArgTypes> void emplace_back(ArgTypes &&... Args) {
+  template <typename... ArgTypes> reference emplace_back(ArgTypes &&... Args) {
     if (LLVM_UNLIKELY(this->size() >= this->capacity()))
       this->grow();
     ::new ((void *)this->end()) T(std::forward<ArgTypes>(Args)...);
     this->set_size(this->size() + 1);
+    return this->back();
   }
 
   SmallVectorImpl &operator=(const SmallVectorImpl &RHS);
diff --git a/linux-x64/clang/include/llvm/ADT/StringMap.h b/linux-x64/clang/include/llvm/ADT/StringMap.h
index d94e483..8a586fc 100644
--- a/linux-x64/clang/include/llvm/ADT/StringMap.h
+++ b/linux-x64/clang/include/llvm/ADT/StringMap.h
@@ -359,6 +359,11 @@
     return find(Key) == end() ? 0 : 1;
   }
 
+  template <typename InputTy>
+  size_type count(const StringMapEntry<InputTy> &MapEntry) const {
+    return count(MapEntry.getKey());
+  }
+
   /// insert - Insert the specified key/value pair into the map.  If the key
   /// already exists in the map, return false and ignore the request, otherwise
   /// insert it and return true.
diff --git a/linux-x64/clang/include/llvm/ADT/StringSet.h b/linux-x64/clang/include/llvm/ADT/StringSet.h
index fcf9519..af3a44a 100644
--- a/linux-x64/clang/include/llvm/ADT/StringSet.h
+++ b/linux-x64/clang/include/llvm/ADT/StringSet.h
@@ -33,6 +33,7 @@
       for (StringRef X : S)
         insert(X);
     }
+    explicit StringSet(AllocatorTy A) : base(A) {}
 
     std::pair<typename base::iterator, bool> insert(StringRef Key) {
       assert(!Key.empty());
@@ -44,6 +45,12 @@
       for (auto It = Begin; It != End; ++It)
         base::insert(std::make_pair(*It, '\0'));
     }
+
+    template <typename ValueTy>
+    std::pair<typename base::iterator, bool>
+    insert(const StringMapEntry<ValueTy> &MapEntry) {
+      return insert(MapEntry.getKey());
+    }
   };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/ADT/Triple.h b/linux-x64/clang/include/llvm/ADT/Triple.h
index 70d8879..edeb31e 100644
--- a/linux-x64/clang/include/llvm/ADT/Triple.h
+++ b/linux-x64/clang/include/llvm/ADT/Triple.h
@@ -49,6 +49,7 @@
     armeb,          // ARM (big endian): armeb
     aarch64,        // AArch64 (little endian): aarch64
     aarch64_be,     // AArch64 (big endian): aarch64_be
+    aarch64_32,     // AArch64 (little endian) ILP32: aarch64_32
     arc,            // ARC: Synopsys ARC
     avr,            // AVR: Atmel AVR microcontroller
     bpfel,          // eBPF or extended BPF or 64-bit BPF (little endian)
@@ -108,6 +109,7 @@
     ARMSubArch_v8r,
     ARMSubArch_v8m_baseline,
     ARMSubArch_v8m_mainline,
+    ARMSubArch_v8_1m_mainline,
     ARMSubArch_v7,
     ARMSubArch_v7em,
     ARMSubArch_v7m,
@@ -186,7 +188,8 @@
     HermitCore, // HermitCore Unikernel/Multikernel
     Hurd,       // GNU/Hurd
     WASI,       // Experimental WebAssembly OS
-    LastOSType = WASI
+    Emscripten,
+    LastOSType = Emscripten
   };
   enum EnvironmentType {
     UnknownEnvironment,
@@ -200,6 +203,8 @@
     CODE16,
     EABI,
     EABIHF,
+    ELFv1,
+    ELFv2,
     Android,
     Musl,
     MuslEABI,
@@ -209,8 +214,9 @@
     Itanium,
     Cygnus,
     CoreCLR,
-    Simulator,  // Simulator variants of other systems, e.g., Apple's iOS
-    LastEnvironmentType = Simulator
+    Simulator, // Simulator variants of other systems, e.g., Apple's iOS
+    MacABI, // Mac Catalyst variant of Apple's iOS deployment target.
+    LastEnvironmentType = MacABI
   };
   enum ObjectFormatType {
     UnknownObjectFormat,
@@ -219,6 +225,7 @@
     ELF,
     MachO,
     Wasm,
+    XCOFF,
   };
 
 private:
@@ -479,6 +486,10 @@
     return getEnvironment() == Triple::Simulator;
   }
 
+  bool isMacCatalystEnvironment() const {
+    return getEnvironment() == Triple::MacABI;
+  }
+
   bool isOSNetBSD() const {
     return getOS() == Triple::NetBSD;
   }
@@ -591,6 +602,11 @@
     return getOS() == Triple::WASI;
   }
 
+  /// Tests whether the OS is Emscripten.
+  bool isOSEmscripten() const {
+    return getOS() == Triple::Emscripten;
+  }
+
   /// Tests whether the OS uses glibc.
   bool isOSGlibc() const {
     return (getOS() == Triple::Linux || getOS() == Triple::KFreeBSD ||
@@ -598,6 +614,11 @@
            !isAndroid();
   }
 
+  /// Tests whether the OS is AIX.
+  bool isOSAIX() const {
+    return getOS() == Triple::AIX;
+  }
+
   /// Tests whether the OS uses the ELF binary format.
   bool isOSBinFormatELF() const {
     return getObjectFormat() == Triple::ELF;
@@ -618,6 +639,11 @@
     return getObjectFormat() == Triple::Wasm;
   }
 
+  /// Tests whether the OS uses the XCOFF binary format.
+  bool isOSBinFormatXCOFF() const {
+    return getObjectFormat() == Triple::XCOFF;
+  }
+
   /// Tests whether the target is the PS4 CPU
   bool isPS4CPU() const {
     return getArch() == Triple::x86_64 &&
@@ -654,6 +680,11 @@
            getEnvironment() == Triple::MuslEABIHF;
   }
 
+  /// Tests whether the target is SPIR (32- or 64-bit).
+  bool isSPIR() const {
+    return getArch() == Triple::spir || getArch() == Triple::spir64;
+  }
+
   /// Tests whether the target is NVPTX (32- or 64-bit).
   bool isNVPTX() const {
     return getArch() == Triple::nvptx || getArch() == Triple::nvptx64;
@@ -689,6 +720,16 @@
     return isMIPS32() || isMIPS64();
   }
 
+  /// Tests whether the target is 64-bit PowerPC (little and big endian).
+  bool isPPC64() const {
+    return getArch() == Triple::ppc64 || getArch() == Triple::ppc64le;
+  }
+
+  /// Tests whether the target is RISC-V (32- and 64-bit).
+  bool isRISCV() const {
+    return getArch() == Triple::riscv32 || getArch() == Triple::riscv64;
+  }
+
   /// Tests whether the target supports comdat
   bool supportsCOMDAT() const {
     return !isOSBinFormatMachO();
diff --git a/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h
index 4e55f01..9483415 100644
--- a/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h
@@ -37,6 +37,7 @@
 #ifndef LLVM_ANALYSIS_ALIASANALYSIS_H
 #define LLVM_ANALYSIS_ALIASANALYSIS_H
 
+#include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SmallVector.h"
@@ -285,6 +286,28 @@
   return ModRefInfo(FMRB & static_cast<int>(ModRefInfo::ModRef));
 }
 
+/// This class stores info we want to provide to or retain within an alias
+/// query. By default, the root query is stateless and starts with a freshly
+/// constructed info object. Specific alias analyses can use this query info to
+/// store per-query state that is important for recursive or nested queries to
+/// avoid recomputing. To enable preserving this state across multiple queries
+/// where safe (due to the IR not changing), use a `BatchAAResults` wrapper.
+/// The information stored in an `AAQueryInfo` is currently limitted to the
+/// caches used by BasicAA, but can further be extended to fit other AA needs.
+class AAQueryInfo {
+public:
+  using LocPair = std::pair<MemoryLocation, MemoryLocation>;
+  using AliasCacheT = SmallDenseMap<LocPair, AliasResult, 8>;
+  AliasCacheT AliasCache;
+
+  using IsCapturedCacheT = SmallDenseMap<const Value *, bool, 8>;
+  IsCapturedCacheT IsCapturedCache;
+
+  AAQueryInfo() : AliasCache(), IsCapturedCache() {}
+};
+
+class BatchAAResults;
+
 class AAResults {
 public:
   // Make these results default constructable and movable. We have to spell
@@ -599,32 +622,8 @@
   /// helpers above.
   ModRefInfo getModRefInfo(const Instruction *I,
                            const Optional<MemoryLocation> &OptLoc) {
-    if (OptLoc == None) {
-      if (const auto *Call = dyn_cast<CallBase>(I)) {
-        return createModRefInfo(getModRefBehavior(Call));
-      }
-    }
-
-    const MemoryLocation &Loc = OptLoc.getValueOr(MemoryLocation());
-
-    switch (I->getOpcode()) {
-    case Instruction::VAArg:  return getModRefInfo((const VAArgInst*)I, Loc);
-    case Instruction::Load:   return getModRefInfo((const LoadInst*)I,  Loc);
-    case Instruction::Store:  return getModRefInfo((const StoreInst*)I, Loc);
-    case Instruction::Fence:  return getModRefInfo((const FenceInst*)I, Loc);
-    case Instruction::AtomicCmpXchg:
-      return getModRefInfo((const AtomicCmpXchgInst*)I, Loc);
-    case Instruction::AtomicRMW:
-      return getModRefInfo((const AtomicRMWInst*)I, Loc);
-    case Instruction::Call:   return getModRefInfo((const CallInst*)I,  Loc);
-    case Instruction::Invoke: return getModRefInfo((const InvokeInst*)I,Loc);
-    case Instruction::CatchPad:
-      return getModRefInfo((const CatchPadInst *)I, Loc);
-    case Instruction::CatchRet:
-      return getModRefInfo((const CatchReturnInst *)I, Loc);
-    default:
-      return ModRefInfo::NoModRef;
-    }
+    AAQueryInfo AAQIP;
+    return getModRefInfo(I, OptLoc, AAQIP);
   }
 
   /// A convenience wrapper for constructing the memory location.
@@ -691,6 +690,69 @@
   }
 
 private:
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI);
+  bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
+                              bool OrLocal = false);
+  ModRefInfo getModRefInfo(Instruction *I, const CallBase *Call2,
+                           AAQueryInfo &AAQIP);
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const VAArgInst *V, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const LoadInst *L, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const StoreInst *S, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const FenceInst *S, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const AtomicCmpXchgInst *CX,
+                           const MemoryLocation &Loc, AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const AtomicRMWInst *RMW, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const CatchPadInst *I, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const CatchReturnInst *I, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const Instruction *I,
+                           const Optional<MemoryLocation> &OptLoc,
+                           AAQueryInfo &AAQIP) {
+    if (OptLoc == None) {
+      if (const auto *Call = dyn_cast<CallBase>(I)) {
+        return createModRefInfo(getModRefBehavior(Call));
+      }
+    }
+
+    const MemoryLocation &Loc = OptLoc.getValueOr(MemoryLocation());
+
+    switch (I->getOpcode()) {
+    case Instruction::VAArg:
+      return getModRefInfo((const VAArgInst *)I, Loc, AAQIP);
+    case Instruction::Load:
+      return getModRefInfo((const LoadInst *)I, Loc, AAQIP);
+    case Instruction::Store:
+      return getModRefInfo((const StoreInst *)I, Loc, AAQIP);
+    case Instruction::Fence:
+      return getModRefInfo((const FenceInst *)I, Loc, AAQIP);
+    case Instruction::AtomicCmpXchg:
+      return getModRefInfo((const AtomicCmpXchgInst *)I, Loc, AAQIP);
+    case Instruction::AtomicRMW:
+      return getModRefInfo((const AtomicRMWInst *)I, Loc, AAQIP);
+    case Instruction::Call:
+      return getModRefInfo((const CallInst *)I, Loc, AAQIP);
+    case Instruction::Invoke:
+      return getModRefInfo((const InvokeInst *)I, Loc, AAQIP);
+    case Instruction::CatchPad:
+      return getModRefInfo((const CatchPadInst *)I, Loc, AAQIP);
+    case Instruction::CatchRet:
+      return getModRefInfo((const CatchReturnInst *)I, Loc, AAQIP);
+    default:
+      return ModRefInfo::NoModRef;
+    }
+  }
+
   class Concept;
 
   template <typename T> class Model;
@@ -702,6 +764,47 @@
   std::vector<std::unique_ptr<Concept>> AAs;
 
   std::vector<AnalysisKey *> AADeps;
+
+  friend class BatchAAResults;
+};
+
+/// This class is a wrapper over an AAResults, and it is intended to be used
+/// only when there are no IR changes inbetween queries. BatchAAResults is
+/// reusing the same `AAQueryInfo` to preserve the state across queries,
+/// esentially making AA work in "batch mode". The internal state cannot be
+/// cleared, so to go "out-of-batch-mode", the user must either use AAResults,
+/// or create a new BatchAAResults.
+class BatchAAResults {
+  AAResults &AA;
+  AAQueryInfo AAQI;
+
+public:
+  BatchAAResults(AAResults &AAR) : AA(AAR), AAQI() {}
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {
+    return AA.alias(LocA, LocB, AAQI);
+  }
+  bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal = false) {
+    return AA.pointsToConstantMemory(Loc, AAQI, OrLocal);
+  }
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc) {
+    return AA.getModRefInfo(Call, Loc, AAQI);
+  }
+  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2) {
+    return AA.getModRefInfo(Call1, Call2, AAQI);
+  }
+  ModRefInfo getModRefInfo(const Instruction *I,
+                           const Optional<MemoryLocation> &OptLoc) {
+    return AA.getModRefInfo(I, OptLoc, AAQI);
+  }
+  ModRefInfo getModRefInfo(Instruction *I, const CallBase *Call2) {
+    return AA.getModRefInfo(I, Call2, AAQI);
+  }
+  ModRefInfo getArgModRefInfo(const CallBase *Call, unsigned ArgIdx) {
+    return AA.getArgModRefInfo(Call, ArgIdx);
+  }
+  FunctionModRefBehavior getModRefBehavior(const CallBase *Call) {
+    return AA.getModRefBehavior(Call);
+  }
 };
 
 /// Temporary typedef for legacy code that uses a generic \c AliasAnalysis
@@ -734,12 +837,12 @@
   /// each other. This is the interface that must be implemented by specific
   /// alias analysis implementations.
   virtual AliasResult alias(const MemoryLocation &LocA,
-                            const MemoryLocation &LocB) = 0;
+                            const MemoryLocation &LocB, AAQueryInfo &AAQI) = 0;
 
   /// Checks whether the given location points to constant memory, or if
   /// \p OrLocal is true whether it points to a local alloca.
   virtual bool pointsToConstantMemory(const MemoryLocation &Loc,
-                                      bool OrLocal) = 0;
+                                      AAQueryInfo &AAQI, bool OrLocal) = 0;
 
   /// @}
   //===--------------------------------------------------------------------===//
@@ -763,13 +866,14 @@
   /// getModRefInfo (for call sites) - Return information about whether
   /// a particular call site modifies or reads the specified memory location.
   virtual ModRefInfo getModRefInfo(const CallBase *Call,
-                                   const MemoryLocation &Loc) = 0;
+                                   const MemoryLocation &Loc,
+                                   AAQueryInfo &AAQI) = 0;
 
   /// Return information about whether two call sites may refer to the same set
   /// of memory locations. See the AA documentation for details:
   ///   http://llvm.org/docs/AliasAnalysis.html#ModRefInfo
-  virtual ModRefInfo getModRefInfo(const CallBase *Call1,
-                                   const CallBase *Call2) = 0;
+  virtual ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                                   AAQueryInfo &AAQI) = 0;
 
   /// @}
 };
@@ -791,14 +895,14 @@
 
   void setAAResults(AAResults *NewAAR) override { Result.setAAResults(NewAAR); }
 
-  AliasResult alias(const MemoryLocation &LocA,
-                    const MemoryLocation &LocB) override {
-    return Result.alias(LocA, LocB);
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI) override {
+    return Result.alias(LocA, LocB, AAQI);
   }
 
-  bool pointsToConstantMemory(const MemoryLocation &Loc,
+  bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
                               bool OrLocal) override {
-    return Result.pointsToConstantMemory(Loc, OrLocal);
+    return Result.pointsToConstantMemory(Loc, AAQI, OrLocal);
   }
 
   ModRefInfo getArgModRefInfo(const CallBase *Call, unsigned ArgIdx) override {
@@ -813,14 +917,14 @@
     return Result.getModRefBehavior(F);
   }
 
-  ModRefInfo getModRefInfo(const CallBase *Call,
-                           const MemoryLocation &Loc) override {
-    return Result.getModRefInfo(Call, Loc);
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI) override {
+    return Result.getModRefInfo(Call, Loc, AAQI);
   }
 
-  ModRefInfo getModRefInfo(const CallBase *Call1,
-                           const CallBase *Call2) override {
-    return Result.getModRefInfo(Call1, Call2);
+  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                           AAQueryInfo &AAQI) override {
+    return Result.getModRefInfo(Call1, Call2, AAQI);
   }
 };
 
@@ -866,13 +970,16 @@
     AAResultsProxy(AAResults *AAR, DerivedT &CurrentResult)
         : AAR(AAR), CurrentResult(CurrentResult) {}
 
-    AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {
-      return AAR ? AAR->alias(LocA, LocB) : CurrentResult.alias(LocA, LocB);
+    AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                      AAQueryInfo &AAQI) {
+      return AAR ? AAR->alias(LocA, LocB, AAQI)
+                 : CurrentResult.alias(LocA, LocB, AAQI);
     }
 
-    bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal) {
-      return AAR ? AAR->pointsToConstantMemory(Loc, OrLocal)
-                 : CurrentResult.pointsToConstantMemory(Loc, OrLocal);
+    bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
+                                bool OrLocal) {
+      return AAR ? AAR->pointsToConstantMemory(Loc, AAQI, OrLocal)
+                 : CurrentResult.pointsToConstantMemory(Loc, AAQI, OrLocal);
     }
 
     ModRefInfo getArgModRefInfo(const CallBase *Call, unsigned ArgIdx) {
@@ -889,14 +996,16 @@
       return AAR ? AAR->getModRefBehavior(F) : CurrentResult.getModRefBehavior(F);
     }
 
-    ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc) {
-      return AAR ? AAR->getModRefInfo(Call, Loc)
-                 : CurrentResult.getModRefInfo(Call, Loc);
+    ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                             AAQueryInfo &AAQI) {
+      return AAR ? AAR->getModRefInfo(Call, Loc, AAQI)
+                 : CurrentResult.getModRefInfo(Call, Loc, AAQI);
     }
 
-    ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2) {
-      return AAR ? AAR->getModRefInfo(Call1, Call2)
-                 : CurrentResult.getModRefInfo(Call1, Call2);
+    ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                             AAQueryInfo &AAQI) {
+      return AAR ? AAR->getModRefInfo(Call1, Call2, AAQI)
+                 : CurrentResult.getModRefInfo(Call1, Call2, AAQI);
     }
   };
 
@@ -920,11 +1029,13 @@
   AAResultsProxy getBestAAResults() { return AAResultsProxy(AAR, derived()); }
 
 public:
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI) {
     return MayAlias;
   }
 
-  bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal) {
+  bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
+                              bool OrLocal) {
     return false;
   }
 
@@ -940,11 +1051,13 @@
     return FMRB_UnknownModRefBehavior;
   }
 
-  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc) {
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI) {
     return ModRefInfo::ModRef;
   }
 
-  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2) {
+  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                           AAQueryInfo &AAQI) {
     return ModRefInfo::ModRef;
   }
 };
@@ -983,6 +1096,11 @@
 /// This manager effectively wraps the AnalysisManager for registering alias
 /// analyses. When you register your alias analysis with this manager, it will
 /// ensure the analysis itself is registered with its AnalysisManager.
+///
+/// The result of this analysis is only invalidated if one of the particular
+/// aggregated AA results end up being invalidated. This removes the need to
+/// explicitly preserve the results of `AAManager`. Note that analyses should no
+/// longer be registered once the `AAManager` is run.
 class AAManager : public AnalysisInfoMixin<AAManager> {
 public:
   using Result = AAResults;
diff --git a/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h
index 29f584c..22e8c4b 100644
--- a/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h
@@ -81,14 +81,18 @@
   bool invalidate(Function &Fn, const PreservedAnalyses &PA,
                   FunctionAnalysisManager::Invalidator &Inv);
 
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI);
 
-  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc);
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
 
-  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2);
+  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                           AAQueryInfo &AAQI);
 
   /// Chases pointers until we find a (constant global) or not.
-  bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal);
+  bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
+                              bool OrLocal);
 
   /// Get the location associated with a pointer argument of a callsite.
   ModRefInfo getArgModRefInfo(const CallBase *Call, unsigned ArgIdx);
@@ -140,13 +144,6 @@
     SmallVector<VariableGEPIndex, 4> VarIndices;
   };
 
-  /// Track alias queries to guard against recursion.
-  using LocPair = std::pair<MemoryLocation, MemoryLocation>;
-  using AliasCacheTy = SmallDenseMap<LocPair, AliasResult, 8>;
-  AliasCacheTy AliasCache;
-  using IsCapturedCacheTy = SmallDenseMap<const Value *, bool, 8>;
-  IsCapturedCacheTy IsCapturedCache;
-
   /// Tracks phi nodes we have visited.
   ///
   /// When interpret "Value" pointer equality as value equality we need to make
@@ -201,22 +198,24 @@
   AliasResult aliasGEP(const GEPOperator *V1, LocationSize V1Size,
                        const AAMDNodes &V1AAInfo, const Value *V2,
                        LocationSize V2Size, const AAMDNodes &V2AAInfo,
-                       const Value *UnderlyingV1, const Value *UnderlyingV2);
+                       const Value *UnderlyingV1, const Value *UnderlyingV2,
+                       AAQueryInfo &AAQI);
 
   AliasResult aliasPHI(const PHINode *PN, LocationSize PNSize,
                        const AAMDNodes &PNAAInfo, const Value *V2,
                        LocationSize V2Size, const AAMDNodes &V2AAInfo,
-                       const Value *UnderV2);
+                       const Value *UnderV2, AAQueryInfo &AAQI);
 
   AliasResult aliasSelect(const SelectInst *SI, LocationSize SISize,
                           const AAMDNodes &SIAAInfo, const Value *V2,
                           LocationSize V2Size, const AAMDNodes &V2AAInfo,
-                          const Value *UnderV2);
+                          const Value *UnderV2, AAQueryInfo &AAQI);
 
   AliasResult aliasCheck(const Value *V1, LocationSize V1Size,
                          AAMDNodes V1AATag, const Value *V2,
                          LocationSize V2Size, AAMDNodes V2AATag,
-                         const Value *O1 = nullptr, const Value *O2 = nullptr);
+                         AAQueryInfo &AAQI, const Value *O1 = nullptr,
+                         const Value *O2 = nullptr);
 };
 
 /// Analysis pass providing a never-invalidated alias analysis result.
diff --git a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h
index c73c7fa..8bcfd7f 100644
--- a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h
@@ -67,7 +67,8 @@
   /// Returns the estimated profile count of \p BB.
   /// This computes the relative block frequency of \p BB and multiplies it by
   /// the enclosing function's count (if available) and returns the value.
-  Optional<uint64_t> getBlockProfileCount(const BasicBlock *BB) const;
+  Optional<uint64_t> getBlockProfileCount(const BasicBlock *BB,
+                                          bool AllowSynthetic = false) const;
 
   /// Returns the estimated profile count of \p Freq.
   /// This uses the frequency \p Freq and multiplies it by
diff --git a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h
index 813bad4..bfe4fb1 100644
--- a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h
@@ -520,9 +520,11 @@
 
   BlockFrequency getBlockFreq(const BlockNode &Node) const;
   Optional<uint64_t> getBlockProfileCount(const Function &F,
-                                          const BlockNode &Node) const;
+                                          const BlockNode &Node,
+                                          bool AllowSynthetic = false) const;
   Optional<uint64_t> getProfileCountFromFreq(const Function &F,
-                                             uint64_t Freq) const;
+                                             uint64_t Freq,
+                                             bool AllowSynthetic = false) const;
   bool isIrrLoopHeader(const BlockNode &Node);
 
   void setBlockFreq(const BlockNode &Node, uint64_t Freq);
@@ -968,13 +970,17 @@
   }
 
   Optional<uint64_t> getBlockProfileCount(const Function &F,
-                                          const BlockT *BB) const {
-    return BlockFrequencyInfoImplBase::getBlockProfileCount(F, getNode(BB));
+                                          const BlockT *BB,
+                                          bool AllowSynthetic = false) const {
+    return BlockFrequencyInfoImplBase::getBlockProfileCount(F, getNode(BB),
+                                                            AllowSynthetic);
   }
 
   Optional<uint64_t> getProfileCountFromFreq(const Function &F,
-                                             uint64_t Freq) const {
-    return BlockFrequencyInfoImplBase::getProfileCountFromFreq(F, Freq);
+                                             uint64_t Freq,
+                                             bool AllowSynthetic = false) const {
+    return BlockFrequencyInfoImplBase::getProfileCountFromFreq(F, Freq,
+                                                               AllowSynthetic);
   }
 
   bool isIrrLoopHeader(const BlockT *BB) {
diff --git a/linux-x64/clang/include/llvm/Analysis/CFG.h b/linux-x64/clang/include/llvm/Analysis/CFG.h
index bcff4fb..bb55e76 100644
--- a/linux-x64/clang/include/llvm/Analysis/CFG.h
+++ b/linux-x64/clang/include/llvm/Analysis/CFG.h
@@ -47,8 +47,8 @@
 bool isCriticalEdge(const Instruction *TI, unsigned SuccNum,
                     bool AllowIdenticalEdges = false);
 
-/// Determine whether instruction 'To' is reachable from 'From',
-/// returning true if uncertain.
+/// Determine whether instruction 'To' is reachable from 'From', without passing
+/// through any blocks in ExclusionSet, returning true if uncertain.
 ///
 /// Determine whether there is a path from From to To within a single function.
 /// Returns false only if we can prove that once 'From' has been executed then
@@ -62,9 +62,10 @@
 /// we find a block that dominates the block containing 'To'. DT is most useful
 /// on branchy code but not loops, and LI is most useful on code with loops but
 /// does not help on branchy code outside loops.
-bool isPotentiallyReachable(const Instruction *From, const Instruction *To,
-                            const DominatorTree *DT = nullptr,
-                            const LoopInfo *LI = nullptr);
+bool isPotentiallyReachable(
+    const Instruction *From, const Instruction *To,
+    const SmallPtrSetImpl<BasicBlock *> *ExclusionSet = nullptr,
+    const DominatorTree *DT = nullptr, const LoopInfo *LI = nullptr);
 
 /// Determine whether block 'To' is reachable from 'From', returning
 /// true if uncertain.
@@ -88,6 +89,20 @@
                                     const DominatorTree *DT = nullptr,
                                     const LoopInfo *LI = nullptr);
 
+/// Determine whether there is at least one path from a block in
+/// 'Worklist' to 'StopBB' without passing through any blocks in
+/// 'ExclusionSet', returning true if uncertain.
+///
+/// Determine whether there is a path from at least one block in Worklist to
+/// StopBB within a single function without passing through any of the blocks
+/// in 'ExclusionSet'. Returns false only if we can prove that once any block
+/// in 'Worklist' has been reached then 'StopBB' can not be executed.
+/// Conservatively returns true.
+bool isPotentiallyReachableFromMany(
+    SmallVectorImpl<BasicBlock *> &Worklist, BasicBlock *StopBB,
+    const SmallPtrSetImpl<BasicBlock *> *ExclusionSet,
+    const DominatorTree *DT = nullptr, const LoopInfo *LI = nullptr);
+
 /// Return true if the control flow in \p RPOTraversal is irreducible.
 ///
 /// This is a generic implementation to detect CFG irreducibility based on loop
diff --git a/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h
index 696aaeb..7c8b42b 100644
--- a/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h
@@ -60,7 +60,8 @@
   const cflaa::AliasSummary *getAliasSummary(const Function &);
 
   AliasResult query(const MemoryLocation &, const MemoryLocation &);
-  AliasResult alias(const MemoryLocation &, const MemoryLocation &);
+  AliasResult alias(const MemoryLocation &, const MemoryLocation &,
+                    AAQueryInfo &);
 
 private:
   /// Ensures that the given function is available in the cache.
diff --git a/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h
index 2d3b43c..cc7a47c 100644
--- a/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h
@@ -69,7 +69,8 @@
 
   AliasResult query(const MemoryLocation &LocA, const MemoryLocation &LocB);
 
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB) {
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI) {
     if (LocA.Ptr == LocB.Ptr)
       return MustAlias;
 
@@ -79,11 +80,11 @@
     // ConstantExpr, but every query needs to have at least one Value tied to a
     // Function, and neither GlobalValues nor ConstantExprs are.
     if (isa<Constant>(LocA.Ptr) && isa<Constant>(LocB.Ptr))
-      return AAResultBase::alias(LocA, LocB);
+      return AAResultBase::alias(LocA, LocB, AAQI);
 
     AliasResult QueryResult = query(LocA, LocB);
     if (QueryResult == MayAlias)
-      return AAResultBase::alias(LocA, LocB);
+      return AAResultBase::alias(LocA, LocB, AAQI);
 
     return QueryResult;
   }
diff --git a/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h b/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h
index 6d26954..8af5fb8 100644
--- a/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h
+++ b/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h
@@ -291,6 +291,21 @@
   /// post-order walk.
   LazyCallGraph::SCC *UpdatedC;
 
+  /// Preserved analyses across SCCs.
+  ///
+  /// We specifically want to allow CGSCC passes to mutate ancestor IR
+  /// (changing both the CG structure and the function IR itself). However,
+  /// this means we need to take special care to correctly mark what analyses
+  /// are preserved *across* SCCs. We have to track this out-of-band here
+  /// because within the main `PassManeger` infrastructure we need to mark
+  /// everything within an SCC as preserved in order to avoid repeatedly
+  /// invalidating the same analyses as we unnest pass managers and adaptors.
+  /// So we track the cross-SCC version of the preserved analyses here from any
+  /// code that does direct invalidation of SCC analyses, and then use it
+  /// whenever we move forward in the post-order walk of SCCs before running
+  /// passes over the new SCC.
+  PreservedAnalyses CrossSCCPA;
+
   /// A hacky area where the inliner can retain history about inlining
   /// decisions that mutated the call graph's SCC structure in order to avoid
   /// infinite inlining. See the comments in the inliner's CG update logic.
@@ -338,175 +353,7 @@
   }
 
   /// Runs the CGSCC pass across every SCC in the module.
-  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM) {
-    // Setup the CGSCC analysis manager from its proxy.
-    CGSCCAnalysisManager &CGAM =
-        AM.getResult<CGSCCAnalysisManagerModuleProxy>(M).getManager();
-
-    // Get the call graph for this module.
-    LazyCallGraph &CG = AM.getResult<LazyCallGraphAnalysis>(M);
-
-    // We keep worklists to allow us to push more work onto the pass manager as
-    // the passes are run.
-    SmallPriorityWorklist<LazyCallGraph::RefSCC *, 1> RCWorklist;
-    SmallPriorityWorklist<LazyCallGraph::SCC *, 1> CWorklist;
-
-    // Keep sets for invalidated SCCs and RefSCCs that should be skipped when
-    // iterating off the worklists.
-    SmallPtrSet<LazyCallGraph::RefSCC *, 4> InvalidRefSCCSet;
-    SmallPtrSet<LazyCallGraph::SCC *, 4> InvalidSCCSet;
-
-    SmallDenseSet<std::pair<LazyCallGraph::Node *, LazyCallGraph::SCC *>, 4>
-        InlinedInternalEdges;
-
-    CGSCCUpdateResult UR = {RCWorklist,          CWorklist, InvalidRefSCCSet,
-                            InvalidSCCSet,       nullptr,   nullptr,
-                            InlinedInternalEdges};
-
-    // Request PassInstrumentation from analysis manager, will use it to run
-    // instrumenting callbacks for the passes later.
-    PassInstrumentation PI = AM.getResult<PassInstrumentationAnalysis>(M);
-
-    PreservedAnalyses PA = PreservedAnalyses::all();
-    CG.buildRefSCCs();
-    for (auto RCI = CG.postorder_ref_scc_begin(),
-              RCE = CG.postorder_ref_scc_end();
-         RCI != RCE;) {
-      assert(RCWorklist.empty() &&
-             "Should always start with an empty RefSCC worklist");
-      // The postorder_ref_sccs range we are walking is lazily constructed, so
-      // we only push the first one onto the worklist. The worklist allows us
-      // to capture *new* RefSCCs created during transformations.
-      //
-      // We really want to form RefSCCs lazily because that makes them cheaper
-      // to update as the program is simplified and allows us to have greater
-      // cache locality as forming a RefSCC touches all the parts of all the
-      // functions within that RefSCC.
-      //
-      // We also eagerly increment the iterator to the next position because
-      // the CGSCC passes below may delete the current RefSCC.
-      RCWorklist.insert(&*RCI++);
-
-      do {
-        LazyCallGraph::RefSCC *RC = RCWorklist.pop_back_val();
-        if (InvalidRefSCCSet.count(RC)) {
-          LLVM_DEBUG(dbgs() << "Skipping an invalid RefSCC...\n");
-          continue;
-        }
-
-        assert(CWorklist.empty() &&
-               "Should always start with an empty SCC worklist");
-
-        LLVM_DEBUG(dbgs() << "Running an SCC pass across the RefSCC: " << *RC
-                          << "\n");
-
-        // Push the initial SCCs in reverse post-order as we'll pop off the
-        // back and so see this in post-order.
-        for (LazyCallGraph::SCC &C : llvm::reverse(*RC))
-          CWorklist.insert(&C);
-
-        do {
-          LazyCallGraph::SCC *C = CWorklist.pop_back_val();
-          // Due to call graph mutations, we may have invalid SCCs or SCCs from
-          // other RefSCCs in the worklist. The invalid ones are dead and the
-          // other RefSCCs should be queued above, so we just need to skip both
-          // scenarios here.
-          if (InvalidSCCSet.count(C)) {
-            LLVM_DEBUG(dbgs() << "Skipping an invalid SCC...\n");
-            continue;
-          }
-          if (&C->getOuterRefSCC() != RC) {
-            LLVM_DEBUG(dbgs()
-                       << "Skipping an SCC that is now part of some other "
-                          "RefSCC...\n");
-            continue;
-          }
-
-          do {
-            // Check that we didn't miss any update scenario.
-            assert(!InvalidSCCSet.count(C) && "Processing an invalid SCC!");
-            assert(C->begin() != C->end() && "Cannot have an empty SCC!");
-            assert(&C->getOuterRefSCC() == RC &&
-                   "Processing an SCC in a different RefSCC!");
-
-            UR.UpdatedRC = nullptr;
-            UR.UpdatedC = nullptr;
-
-            // Check the PassInstrumentation's BeforePass callbacks before
-            // running the pass, skip its execution completely if asked to
-            // (callback returns false).
-            if (!PI.runBeforePass<LazyCallGraph::SCC>(Pass, *C))
-              continue;
-
-            PreservedAnalyses PassPA = Pass.run(*C, CGAM, CG, UR);
-
-            if (UR.InvalidatedSCCs.count(C))
-              PI.runAfterPassInvalidated<LazyCallGraph::SCC>(Pass);
-            else
-              PI.runAfterPass<LazyCallGraph::SCC>(Pass, *C);
-
-            // Update the SCC and RefSCC if necessary.
-            C = UR.UpdatedC ? UR.UpdatedC : C;
-            RC = UR.UpdatedRC ? UR.UpdatedRC : RC;
-
-            // If the CGSCC pass wasn't able to provide a valid updated SCC,
-            // the current SCC may simply need to be skipped if invalid.
-            if (UR.InvalidatedSCCs.count(C)) {
-              LLVM_DEBUG(dbgs()
-                         << "Skipping invalidated root or island SCC!\n");
-              break;
-            }
-            // Check that we didn't miss any update scenario.
-            assert(C->begin() != C->end() && "Cannot have an empty SCC!");
-
-            // We handle invalidating the CGSCC analysis manager's information
-            // for the (potentially updated) SCC here. Note that any other SCCs
-            // whose structure has changed should have been invalidated by
-            // whatever was updating the call graph. This SCC gets invalidated
-            // late as it contains the nodes that were actively being
-            // processed.
-            CGAM.invalidate(*C, PassPA);
-
-            // Then intersect the preserved set so that invalidation of module
-            // analyses will eventually occur when the module pass completes.
-            PA.intersect(std::move(PassPA));
-
-            // The pass may have restructured the call graph and refined the
-            // current SCC and/or RefSCC. We need to update our current SCC and
-            // RefSCC pointers to follow these. Also, when the current SCC is
-            // refined, re-run the SCC pass over the newly refined SCC in order
-            // to observe the most precise SCC model available. This inherently
-            // cannot cycle excessively as it only happens when we split SCCs
-            // apart, at most converging on a DAG of single nodes.
-            // FIXME: If we ever start having RefSCC passes, we'll want to
-            // iterate there too.
-            if (UR.UpdatedC)
-              LLVM_DEBUG(dbgs()
-                         << "Re-running SCC passes after a refinement of the "
-                            "current SCC: "
-                         << *UR.UpdatedC << "\n");
-
-            // Note that both `C` and `RC` may at this point refer to deleted,
-            // invalid SCC and RefSCCs respectively. But we will short circuit
-            // the processing when we check them in the loop above.
-          } while (UR.UpdatedC);
-        } while (!CWorklist.empty());
-
-        // We only need to keep internal inlined edge information within
-        // a RefSCC, clear it to save on space and let the next time we visit
-        // any of these functions have a fresh start.
-        InlinedInternalEdges.clear();
-      } while (!RCWorklist.empty());
-    }
-
-    // By definition we preserve the call garph, all SCC analyses, and the
-    // analysis proxies by handling them above and in any nested pass managers.
-    PA.preserveSet<AllAnalysesOn<LazyCallGraph::SCC>>();
-    PA.preserve<LazyCallGraphAnalysis>();
-    PA.preserve<CGSCCAnalysisManagerModuleProxy>();
-    PA.preserve<FunctionAnalysisManagerModuleProxy>();
-    return PA;
-  }
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
 
 private:
   CGSCCPassT Pass;
@@ -872,6 +719,210 @@
   return DevirtSCCRepeatedPass<PassT>(std::move(Pass), MaxIterations);
 }
 
+// Out-of-line implementation details for templates below this point.
+
+template <typename CGSCCPassT>
+PreservedAnalyses
+ModuleToPostOrderCGSCCPassAdaptor<CGSCCPassT>::run(Module &M,
+                                                   ModuleAnalysisManager &AM) {
+  // Setup the CGSCC analysis manager from its proxy.
+  CGSCCAnalysisManager &CGAM =
+      AM.getResult<CGSCCAnalysisManagerModuleProxy>(M).getManager();
+
+  // Get the call graph for this module.
+  LazyCallGraph &CG = AM.getResult<LazyCallGraphAnalysis>(M);
+
+  // We keep worklists to allow us to push more work onto the pass manager as
+  // the passes are run.
+  SmallPriorityWorklist<LazyCallGraph::RefSCC *, 1> RCWorklist;
+  SmallPriorityWorklist<LazyCallGraph::SCC *, 1> CWorklist;
+
+  // Keep sets for invalidated SCCs and RefSCCs that should be skipped when
+  // iterating off the worklists.
+  SmallPtrSet<LazyCallGraph::RefSCC *, 4> InvalidRefSCCSet;
+  SmallPtrSet<LazyCallGraph::SCC *, 4> InvalidSCCSet;
+
+  SmallDenseSet<std::pair<LazyCallGraph::Node *, LazyCallGraph::SCC *>, 4>
+      InlinedInternalEdges;
+
+  CGSCCUpdateResult UR = {
+      RCWorklist, CWorklist, InvalidRefSCCSet,         InvalidSCCSet,
+      nullptr,    nullptr,   PreservedAnalyses::all(), InlinedInternalEdges};
+
+  // Request PassInstrumentation from analysis manager, will use it to run
+  // instrumenting callbacks for the passes later.
+  PassInstrumentation PI = AM.getResult<PassInstrumentationAnalysis>(M);
+
+  PreservedAnalyses PA = PreservedAnalyses::all();
+  CG.buildRefSCCs();
+  for (auto RCI = CG.postorder_ref_scc_begin(),
+            RCE = CG.postorder_ref_scc_end();
+       RCI != RCE;) {
+    assert(RCWorklist.empty() &&
+           "Should always start with an empty RefSCC worklist");
+    // The postorder_ref_sccs range we are walking is lazily constructed, so
+    // we only push the first one onto the worklist. The worklist allows us
+    // to capture *new* RefSCCs created during transformations.
+    //
+    // We really want to form RefSCCs lazily because that makes them cheaper
+    // to update as the program is simplified and allows us to have greater
+    // cache locality as forming a RefSCC touches all the parts of all the
+    // functions within that RefSCC.
+    //
+    // We also eagerly increment the iterator to the next position because
+    // the CGSCC passes below may delete the current RefSCC.
+    RCWorklist.insert(&*RCI++);
+
+    do {
+      LazyCallGraph::RefSCC *RC = RCWorklist.pop_back_val();
+      if (InvalidRefSCCSet.count(RC)) {
+        LLVM_DEBUG(dbgs() << "Skipping an invalid RefSCC...\n");
+        continue;
+      }
+
+      assert(CWorklist.empty() &&
+             "Should always start with an empty SCC worklist");
+
+      LLVM_DEBUG(dbgs() << "Running an SCC pass across the RefSCC: " << *RC
+                        << "\n");
+
+      // Push the initial SCCs in reverse post-order as we'll pop off the
+      // back and so see this in post-order.
+      for (LazyCallGraph::SCC &C : llvm::reverse(*RC))
+        CWorklist.insert(&C);
+
+      do {
+        LazyCallGraph::SCC *C = CWorklist.pop_back_val();
+        // Due to call graph mutations, we may have invalid SCCs or SCCs from
+        // other RefSCCs in the worklist. The invalid ones are dead and the
+        // other RefSCCs should be queued above, so we just need to skip both
+        // scenarios here.
+        if (InvalidSCCSet.count(C)) {
+          LLVM_DEBUG(dbgs() << "Skipping an invalid SCC...\n");
+          continue;
+        }
+        if (&C->getOuterRefSCC() != RC) {
+          LLVM_DEBUG(dbgs() << "Skipping an SCC that is now part of some other "
+                               "RefSCC...\n");
+          continue;
+        }
+
+        // Ensure we can proxy analysis updates from from the CGSCC analysis
+        // manager into the Function analysis manager by getting a proxy here.
+        // FIXME: This seems like a bit of a hack. We should find a cleaner
+        // or more costructive way to ensure this happens.
+        (void)CGAM.getResult<FunctionAnalysisManagerCGSCCProxy>(*C, CG);
+
+        // Each time we visit a new SCC pulled off the worklist,
+        // a transformation of a child SCC may have also modified this parent
+        // and invalidated analyses. So we invalidate using the update record's
+        // cross-SCC preserved set. This preserved set is intersected by any
+        // CGSCC pass that handles invalidation (primarily pass managers) prior
+        // to marking its SCC as preserved. That lets us track everything that
+        // might need invalidation across SCCs without excessive invalidations
+        // on a single SCC.
+        //
+        // This essentially allows SCC passes to freely invalidate analyses
+        // of any ancestor SCC. If this becomes detrimental to successfully
+        // caching analyses, we could force each SCC pass to manually
+        // invalidate the analyses for any SCCs other than themselves which
+        // are mutated. However, that seems to lose the robustness of the
+        // pass-manager driven invalidation scheme.
+        //
+        // FIXME: This is redundant in one case -- the top of the worklist may
+        // *also* be the same SCC we just ran over (and invalidated for). In
+        // that case, we'll end up doing a redundant invalidation here as
+        // a consequence.
+        CGAM.invalidate(*C, UR.CrossSCCPA);
+
+        do {
+          // Check that we didn't miss any update scenario.
+          assert(!InvalidSCCSet.count(C) && "Processing an invalid SCC!");
+          assert(C->begin() != C->end() && "Cannot have an empty SCC!");
+          assert(&C->getOuterRefSCC() == RC &&
+                 "Processing an SCC in a different RefSCC!");
+
+          UR.UpdatedRC = nullptr;
+          UR.UpdatedC = nullptr;
+
+          // Check the PassInstrumentation's BeforePass callbacks before
+          // running the pass, skip its execution completely if asked to
+          // (callback returns false).
+          if (!PI.runBeforePass<LazyCallGraph::SCC>(Pass, *C))
+            continue;
+
+          PreservedAnalyses PassPA = Pass.run(*C, CGAM, CG, UR);
+
+          if (UR.InvalidatedSCCs.count(C))
+            PI.runAfterPassInvalidated<LazyCallGraph::SCC>(Pass);
+          else
+            PI.runAfterPass<LazyCallGraph::SCC>(Pass, *C);
+
+          // Update the SCC and RefSCC if necessary.
+          C = UR.UpdatedC ? UR.UpdatedC : C;
+          RC = UR.UpdatedRC ? UR.UpdatedRC : RC;
+
+          // If the CGSCC pass wasn't able to provide a valid updated SCC,
+          // the current SCC may simply need to be skipped if invalid.
+          if (UR.InvalidatedSCCs.count(C)) {
+            LLVM_DEBUG(dbgs() << "Skipping invalidated root or island SCC!\n");
+            break;
+          }
+          // Check that we didn't miss any update scenario.
+          assert(C->begin() != C->end() && "Cannot have an empty SCC!");
+
+          // We handle invalidating the CGSCC analysis manager's information
+          // for the (potentially updated) SCC here. Note that any other SCCs
+          // whose structure has changed should have been invalidated by
+          // whatever was updating the call graph. This SCC gets invalidated
+          // late as it contains the nodes that were actively being
+          // processed.
+          CGAM.invalidate(*C, PassPA);
+
+          // Then intersect the preserved set so that invalidation of module
+          // analyses will eventually occur when the module pass completes.
+          // Also intersect with the cross-SCC preserved set to capture any
+          // cross-SCC invalidation.
+          UR.CrossSCCPA.intersect(PassPA);
+          PA.intersect(std::move(PassPA));
+
+          // The pass may have restructured the call graph and refined the
+          // current SCC and/or RefSCC. We need to update our current SCC and
+          // RefSCC pointers to follow these. Also, when the current SCC is
+          // refined, re-run the SCC pass over the newly refined SCC in order
+          // to observe the most precise SCC model available. This inherently
+          // cannot cycle excessively as it only happens when we split SCCs
+          // apart, at most converging on a DAG of single nodes.
+          // FIXME: If we ever start having RefSCC passes, we'll want to
+          // iterate there too.
+          if (UR.UpdatedC)
+            LLVM_DEBUG(dbgs()
+                       << "Re-running SCC passes after a refinement of the "
+                          "current SCC: "
+                       << *UR.UpdatedC << "\n");
+
+          // Note that both `C` and `RC` may at this point refer to deleted,
+          // invalid SCC and RefSCCs respectively. But we will short circuit
+          // the processing when we check them in the loop above.
+        } while (UR.UpdatedC);
+      } while (!CWorklist.empty());
+
+      // We only need to keep internal inlined edge information within
+      // a RefSCC, clear it to save on space and let the next time we visit
+      // any of these functions have a fresh start.
+      InlinedInternalEdges.clear();
+    } while (!RCWorklist.empty());
+  }
+
+  // By definition we preserve the call garph, all SCC analyses, and the
+  // analysis proxies by handling them above and in any nested pass managers.
+  PA.preserveSet<AllAnalysesOn<LazyCallGraph::SCC>>();
+  PA.preserve<LazyCallGraphAnalysis>();
+  PA.preserve<CGSCCAnalysisManagerModuleProxy>();
+  PA.preserve<FunctionAnalysisManagerModuleProxy>();
+  return PA;
+}
+
 // Clear out the debug logging macro.
 #undef DEBUG_TYPE
 
diff --git a/linux-x64/clang/include/llvm/Analysis/CallGraph.h b/linux-x64/clang/include/llvm/Analysis/CallGraph.h
index a743cbc..7a10183 100644
--- a/linux-x64/clang/include/llvm/Analysis/CallGraph.h
+++ b/linux-x64/clang/include/llvm/Analysis/CallGraph.h
@@ -47,8 +47,8 @@
 
 #include "llvm/ADT/GraphTraits.h"
 #include "llvm/ADT/STLExtras.h"
-#include "llvm/IR/CallSite.h"
 #include "llvm/IR/Function.h"
+#include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/ValueHandle.h"
@@ -229,11 +229,11 @@
   }
 
   /// Adds a function to the list of functions called by this one.
-  void addCalledFunction(CallSite CS, CallGraphNode *M) {
-    assert(!CS.getInstruction() || !CS.getCalledFunction() ||
-           !CS.getCalledFunction()->isIntrinsic() ||
-           !Intrinsic::isLeaf(CS.getCalledFunction()->getIntrinsicID()));
-    CalledFunctions.emplace_back(CS.getInstruction(), M);
+  void addCalledFunction(CallBase *Call, CallGraphNode *M) {
+    assert(!Call || !Call->getCalledFunction() ||
+           !Call->getCalledFunction()->isIntrinsic() ||
+           !Intrinsic::isLeaf(Call->getCalledFunction()->getIntrinsicID()));
+    CalledFunctions.emplace_back(Call, M);
     M->AddRef();
   }
 
@@ -246,7 +246,7 @@
   /// Removes the edge in the node for the specified call site.
   ///
   /// Note that this method takes linear time, so it should be used sparingly.
-  void removeCallEdgeFor(CallSite CS);
+  void removeCallEdgeFor(CallBase &Call);
 
   /// Removes all call edges from this node to the specified callee
   /// function.
@@ -263,7 +263,8 @@
   /// new one.
   ///
   /// Note that this method takes linear time, so it should be used sparingly.
-  void replaceCallEdge(CallSite CS, CallSite NewCS, CallGraphNode *NewNode);
+  void replaceCallEdge(CallBase &Call, CallBase &NewCall,
+                       CallGraphNode *NewNode);
 
 private:
   friend class CallGraph;
diff --git a/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h b/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h
index 43a2df0..2385b6f 100644
--- a/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h
+++ b/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h
@@ -71,6 +71,12 @@
                                 Constant *RHS, const DataLayout &DL,
                                 const TargetLibraryInfo *TLI = nullptr);
 
+/// Attempt to constant fold a unary operation with the specified
+/// operand. If it fails, it returns a constant expression of the specified
+/// operands.
+Constant *ConstantFoldUnaryOpOperand(unsigned Opcode, Constant *Op,
+                                     const DataLayout &DL);
+
 /// Attempt to constant fold a binary operation with the specified
 /// operands.  If it fails, it returns a constant expression of the specified
 /// operands.
diff --git a/linux-x64/clang/include/llvm/Analysis/DomTreeUpdater.h b/linux-x64/clang/include/llvm/Analysis/DomTreeUpdater.h
index fcfd3c1..5ccce2e 100644
--- a/linux-x64/clang/include/llvm/Analysis/DomTreeUpdater.h
+++ b/linux-x64/clang/include/llvm/Analysis/DomTreeUpdater.h
@@ -82,61 +82,114 @@
   /// Returns false under Eager UpdateStrategy or PDT is nullptr.
   bool hasPendingPostDomTreeUpdates() const;
 
-  /// Apply updates on all available trees. Under Eager UpdateStrategy with
-  /// ForceRemoveDuplicates enabled or under Lazy UpdateStrategy, it will
-  /// discard duplicated updates and self-dominance updates. If both DT and PDT
-  /// are nullptrs, this function discards all updates. The Eager Strategy
-  /// applies the updates immediately while the Lazy Strategy queues the
-  /// updates. It is required for the state of the LLVM IR to be updated
-  /// *before* applying the Updates because the internal update routine will
-  /// analyze the current state of the relationship between a pair of (From, To)
-  /// BasicBlocks to determine whether a single update needs to be discarded.
-  void applyUpdates(ArrayRef<DominatorTree::UpdateType> Updates,
-                    bool ForceRemoveDuplicates = false);
+  ///@{
+  /// \name Mutation APIs
+  ///
+  /// These methods provide APIs for submitting updates to the DominatorTree and
+  /// the PostDominatorTree.
+  ///
+  /// Note: There are two strategies to update the DominatorTree and the
+  /// PostDominatorTree:
+  /// 1. Eager UpdateStrategy: Updates are submitted and then flushed
+  /// immediately.
+  /// 2. Lazy UpdateStrategy: Updates are submitted but only flushed when you
+  /// explicitly call Flush APIs. It is recommended to use this update strategy
+  /// when you submit a bunch of updates multiple times which can then
+  /// add up to a large number of updates between two queries on the
+  /// DominatorTree. The incremental updater can reschedule the updates or
+  /// decide to recalculate the dominator tree in order to speedup the updating
+  /// process depending on the number of updates.
+  ///
+  /// Although GenericDomTree provides several update primitives,
+  /// it is not encouraged to use these APIs directly.
 
-  /// Notify all available trees on an edge insertion. If both DT and PDT are
-  /// nullptrs, this function discards the update. Under either Strategy,
-  /// self-dominance update will be removed. The Eager Strategy applies
-  /// the update immediately while the Lazy Strategy queues the update.
-  /// It is recommended to only use this method when you have exactly one
-  /// insertion (and no deletions). It is recommended to use applyUpdates() in
-  /// all other cases. This function has to be called *after* making the update
-  /// on the actual CFG. An internal functions checks if the edge exists in the
+  /// Submit updates to all available trees.
+  /// The Eager Strategy flushes updates immediately while the Lazy Strategy
+  /// queues the updates.
+  ///
+  /// Note: The "existence" of an edge in a CFG refers to the CFG which DTU is
+  /// in sync with + all updates before that single update.
+  ///
+  /// CAUTION!
+  /// 1. It is required for the state of the LLVM IR to be updated
+  /// *before* submitting the updates because the internal update routine will
+  /// analyze the current state of the CFG to determine whether an update
+  /// is valid.
+  /// 2. It is illegal to submit any update that has already been submitted,
+  /// i.e., you are supposed not to insert an existent edge or delete a
+  /// nonexistent edge.
+  void applyUpdates(ArrayRef<DominatorTree::UpdateType> Updates);
+
+  /// Submit updates to all available trees. It will also
+  /// 1. discard duplicated updates,
+  /// 2. remove invalid updates. (Invalid updates means deletion of an edge that
+  /// still exists or insertion of an edge that does not exist.)
+  /// The Eager Strategy flushes updates immediately while the Lazy Strategy
+  /// queues the updates.
+  ///
+  /// Note: The "existence" of an edge in a CFG refers to the CFG which DTU is
+  /// in sync with + all updates before that single update.
+  ///
+  /// CAUTION!
+  /// 1. It is required for the state of the LLVM IR to be updated
+  /// *before* submitting the updates because the internal update routine will
+  /// analyze the current state of the CFG to determine whether an update
+  /// is valid.
+  /// 2. It is illegal to submit any update that has already been submitted,
+  /// i.e., you are supposed not to insert an existent edge or delete a
+  /// nonexistent edge.
+  /// 3. It is only legal to submit updates to an edge in the order CFG changes
+  /// are made. The order you submit updates on different edges is not
+  /// restricted.
+  void applyUpdatesPermissive(ArrayRef<DominatorTree::UpdateType> Updates);
+
+  /// Notify DTU that the entry block was replaced.
+  /// Recalculate all available trees and flush all BasicBlocks
+  /// awaiting deletion immediately.
+  void recalculate(Function &F);
+
+  /// \deprecated { Submit an edge insertion to all available trees. The Eager
+  /// Strategy flushes this update immediately while the Lazy Strategy queues
+  /// the update. An internal function checks if the edge exists in the CFG in
+  /// DEBUG mode. CAUTION! This function has to be called *after* making the
+  /// update on the actual CFG. It is illegal to submit any update that has
+  /// already been applied. }
+  LLVM_ATTRIBUTE_DEPRECATED(void insertEdge(BasicBlock *From, BasicBlock *To),
+                            "Use applyUpdates() instead.");
+
+  /// \deprecated {Submit an edge insertion to all available trees.
+  /// Under either Strategy, an invalid update will be discard silently.
+  /// Invalid update means inserting an edge that does not exist in the CFG.
+  /// The Eager Strategy flushes this update immediately while the Lazy Strategy
+  /// queues the update. It is only recommended to use this method when you
+  /// want to discard an invalid update.
+  /// CAUTION! It is illegal to submit any update that has already been
+  /// submitted. }
+  LLVM_ATTRIBUTE_DEPRECATED(void insertEdgeRelaxed(BasicBlock *From,
+                                                   BasicBlock *To),
+                            "Use applyUpdatesPermissive() instead.");
+
+  /// \deprecated { Submit an edge deletion to all available trees. The Eager
+  /// Strategy flushes this update immediately while the Lazy Strategy queues
+  /// the update. An internal function checks if the edge doesn't exist in the
   /// CFG in DEBUG mode.
-  void insertEdge(BasicBlock *From, BasicBlock *To);
+  /// CAUTION! This function has to be called *after* making the update on the
+  /// actual CFG. It is illegal to submit any update that has already been
+  /// submitted. }
+  LLVM_ATTRIBUTE_DEPRECATED(void deleteEdge(BasicBlock *From, BasicBlock *To),
+                            "Use applyUpdates() instead.");
 
-  /// Notify all available trees on an edge insertion.
-  /// Under either Strategy, the following updates will be discard silently
-  /// 1. Invalid - Inserting an edge that does not exist in the CFG.
-  /// 2. Self-dominance update.
-  /// 3. Both DT and PDT are nullptrs.
-  /// The Eager Strategy applies the update immediately while the Lazy Strategy
-  /// queues the update. It is recommended to only use this method when you have
-  /// exactly one insertion (and no deletions) and want to discard an invalid
-  /// update.
-  void insertEdgeRelaxed(BasicBlock *From, BasicBlock *To);
-
-  /// Notify all available trees on an edge deletion. If both DT and PDT are
-  /// nullptrs, this function discards the update. Under either Strategy,
-  /// self-dominance update will be removed. The Eager Strategy applies
-  /// the update immediately while the Lazy Strategy queues the update.
-  /// It is recommended to only use this method when you have exactly one
-  /// deletion (and no insertions). It is recommended to use applyUpdates() in
-  /// all other cases. This function has to be called *after* making the update
-  /// on the actual CFG. An internal functions checks if the edge doesn't exist
-  /// in the CFG in DEBUG mode.
-  void deleteEdge(BasicBlock *From, BasicBlock *To);
-
-  /// Notify all available trees on an edge deletion.
-  /// Under either Strategy, the following updates will be discard silently
-  /// 1. Invalid - Deleting an edge that still exists in the CFG.
-  /// 2. Self-dominance update.
-  /// 3. Both DT and PDT are nullptrs.
-  /// The Eager Strategy applies the update immediately while the Lazy Strategy
-  /// queues the update. It is recommended to only use this method when you have
-  /// exactly one deletion (and no insertions) and want to discard an invalid
-  /// update.
-  void deleteEdgeRelaxed(BasicBlock *From, BasicBlock *To);
+  /// \deprecated { Submit an edge deletion to all available trees.
+  /// Under either Strategy, an invalid update will be discard silently.
+  /// Invalid update means deleting an edge that exists in the CFG.
+  /// The Eager Strategy flushes this update immediately while the Lazy Strategy
+  /// queues the update. It is only recommended to use this method when you
+  /// want to discard an invalid update.
+  /// CAUTION! It is illegal to submit any update that has already been
+  /// submitted. }
+  LLVM_ATTRIBUTE_DEPRECATED(void deleteEdgeRelaxed(BasicBlock *From,
+                                                   BasicBlock *To),
+                            "Use applyUpdatesPermissive() instead.");
 
   /// Delete DelBB. DelBB will be removed from its Parent and
   /// erased from available trees if it exists and finally get deleted.
@@ -158,27 +211,32 @@
   void callbackDeleteBB(BasicBlock *DelBB,
                         std::function<void(BasicBlock *)> Callback);
 
-  /// Recalculate all available trees and flush all BasicBlocks
-  /// awaiting deletion immediately.
-  void recalculate(Function &F);
+  ///@}
+
+  ///@{
+  /// \name Flush APIs
+  ///
+  /// CAUTION! By the moment these flush APIs are called, the current CFG needs
+  /// to be the same as the CFG which DTU is in sync with + all updates
+  /// submitted.
 
   /// Flush DomTree updates and return DomTree.
-  /// It also flush out of date updates applied by all available trees
-  /// and flush Deleted BBs if both trees are up-to-date.
+  /// It flushes Deleted BBs if both trees are up-to-date.
   /// It must only be called when it has a DomTree.
   DominatorTree &getDomTree();
 
   /// Flush PostDomTree updates and return PostDomTree.
-  /// It also flush out of date updates applied by all available trees
-  /// and flush Deleted BBs if both trees are up-to-date.
+  /// It flushes Deleted BBs if both trees are up-to-date.
   /// It must only be called when it has a PostDomTree.
   PostDominatorTree &getPostDomTree();
 
   /// Apply all pending updates to available trees and flush all BasicBlocks
   /// awaiting deletion.
-  /// Does nothing under Eager UpdateStrategy.
+
   void flush();
 
+  ///@}
+
   /// Debug method to help view the internal state of this class.
   LLVM_DUMP_METHOD void dump() const;
 
@@ -220,11 +278,6 @@
   /// Returns true if at least one BasicBlock is deleted.
   bool forceFlushDeletedBB();
 
-  /// Deduplicate and remove unnecessary updates (no-ops) when using Lazy
-  /// UpdateStrategy. Returns true if the update is queued for update.
-  bool applyLazyUpdate(DominatorTree::UpdateKind Kind, BasicBlock *From,
-                       BasicBlock *To);
-
   /// Helper function to apply all pending DomTree updates.
   void applyDomTreeUpdates();
 
diff --git a/linux-x64/clang/include/llvm/Analysis/GlobalsModRef.h b/linux-x64/clang/include/llvm/Analysis/GlobalsModRef.h
index 14b2097..d3fcfc2 100644
--- a/linux-x64/clang/include/llvm/Analysis/GlobalsModRef.h
+++ b/linux-x64/clang/include/llvm/Analysis/GlobalsModRef.h
@@ -84,10 +84,12 @@
   //------------------------------------------------
   // Implement the AliasAnalysis API
   //
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI);
 
   using AAResultBase::getModRefInfo;
-  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc);
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
 
   /// getModRefBehavior - Return the behavior of the specified function if
   /// called from the specified call site.  The call site may be null in which
@@ -113,7 +115,7 @@
 
   bool isNonEscapingGlobalNoAlias(const GlobalValue *GV, const Value *V);
   ModRefInfo getModRefInfoForArgument(const CallBase *Call,
-                                      const GlobalValue *GV);
+                                      const GlobalValue *GV, AAQueryInfo &AAQI);
 };
 
 /// Analysis pass providing a never-invalidated alias analysis result.
diff --git a/linux-x64/clang/include/llvm/Analysis/IVDescriptors.h b/linux-x64/clang/include/llvm/Analysis/IVDescriptors.h
index 254cabf..7be1fd3 100644
--- a/linux-x64/clang/include/llvm/Analysis/IVDescriptors.h
+++ b/linux-x64/clang/include/llvm/Analysis/IVDescriptors.h
@@ -89,10 +89,12 @@
   RecurrenceDescriptor() = default;
 
   RecurrenceDescriptor(Value *Start, Instruction *Exit, RecurrenceKind K,
-                       MinMaxRecurrenceKind MK, Instruction *UAI, Type *RT,
-                       bool Signed, SmallPtrSetImpl<Instruction *> &CI)
-      : StartValue(Start), LoopExitInstr(Exit), Kind(K), MinMaxKind(MK),
-        UnsafeAlgebraInst(UAI), RecurrenceType(RT), IsSigned(Signed) {
+                       FastMathFlags FMF, MinMaxRecurrenceKind MK,
+                       Instruction *UAI, Type *RT, bool Signed,
+                       SmallPtrSetImpl<Instruction *> &CI)
+      : StartValue(Start), LoopExitInstr(Exit), Kind(K), FMF(FMF),
+        MinMaxKind(MK), UnsafeAlgebraInst(UAI), RecurrenceType(RT),
+        IsSigned(Signed) {
     CastInsts.insert(CI.begin(), CI.end());
   }
 
@@ -198,6 +200,8 @@
 
   MinMaxRecurrenceKind getMinMaxRecurrenceKind() { return MinMaxKind; }
 
+  FastMathFlags getFastMathFlags() { return FMF; }
+
   TrackingVH<Value> getRecurrenceStartValue() { return StartValue; }
 
   Instruction *getLoopExitInstr() { return LoopExitInstr; }
@@ -237,6 +241,9 @@
   Instruction *LoopExitInstr = nullptr;
   // The kind of the recurrence.
   RecurrenceKind Kind = RK_NoRecurrence;
+  // The fast-math flags on the recurrent instructions.  We propagate these
+  // fast-math flags into the vectorized FP instructions we generate.
+  FastMathFlags FMF;
   // If this a min/max recurrence the kind of recurrence.
   MinMaxRecurrenceKind MinMaxKind = MRK_Invalid;
   // First occurrence of unasfe algebra in the PHI's use-chain.
@@ -308,12 +315,16 @@
   /// not have the "fast-math" property. Such operation requires a relaxed FP
   /// mode.
   bool hasUnsafeAlgebra() {
-    return InductionBinOp && !cast<FPMathOperator>(InductionBinOp)->isFast();
+    return (IK == IK_FpInduction) && InductionBinOp &&
+           !cast<FPMathOperator>(InductionBinOp)->isFast();
   }
 
   /// Returns induction operator that does not have "fast-math" property
   /// and requires FP unsafe mode.
   Instruction *getUnsafeAlgebraInst() {
+    if (IK != IK_FpInduction)
+      return nullptr;
+
     if (!InductionBinOp || cast<FPMathOperator>(InductionBinOp)->isFast())
       return nullptr;
     return InductionBinOp;
diff --git a/linux-x64/clang/include/llvm/Analysis/InlineCost.h b/linux-x64/clang/include/llvm/Analysis/InlineCost.h
index e386093..611c9de 100644
--- a/linux-x64/clang/include/llvm/Analysis/InlineCost.h
+++ b/linux-x64/clang/include/llvm/Analysis/InlineCost.h
@@ -22,7 +22,7 @@
 namespace llvm {
 class AssumptionCacheTracker;
 class BlockFrequencyInfo;
-class CallSite;
+class CallBase;
 class DataLayout;
 class Function;
 class ProfileSummaryInfo;
@@ -67,10 +67,10 @@
   };
 
   /// The estimated cost of inlining this callsite.
-  const int Cost;
+  int Cost;
 
   /// The adjusted threshold against which this cost was computed.
-  const int Threshold;
+  int Threshold;
 
   /// Must be set for Always and Never instances.
   const char *Reason = nullptr;
@@ -199,7 +199,7 @@
 
 /// Return the cost associated with a callsite, including parameter passing
 /// and the call/return instruction.
-int getCallsiteCost(CallSite CS, const DataLayout &DL);
+int getCallsiteCost(CallBase &Call, const DataLayout &DL);
 
 /// Get an InlineCost object representing the cost of inlining this
 /// callsite.
@@ -213,7 +213,7 @@
 /// Also note that calling this function *dynamically* computes the cost of
 /// inlining the callsite. It is an expensive, heavyweight call.
 InlineCost getInlineCost(
-    CallSite CS, const InlineParams &Params, TargetTransformInfo &CalleeTTI,
+    CallBase &Call, const InlineParams &Params, TargetTransformInfo &CalleeTTI,
     std::function<AssumptionCache &(Function &)> &GetAssumptionCache,
     Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI,
     ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE = nullptr);
@@ -224,7 +224,7 @@
 /// parameter in all other respects.
 //
 InlineCost
-getInlineCost(CallSite CS, Function *Callee, const InlineParams &Params,
+getInlineCost(CallBase &Call, Function *Callee, const InlineParams &Params,
               TargetTransformInfo &CalleeTTI,
               std::function<AssumptionCache &(Function &)> &GetAssumptionCache,
               Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI,
diff --git a/linux-x64/clang/include/llvm/Analysis/InstructionPrecedenceTracking.h b/linux-x64/clang/include/llvm/Analysis/InstructionPrecedenceTracking.h
index eb72eac..3c39810 100644
--- a/linux-x64/clang/include/llvm/Analysis/InstructionPrecedenceTracking.h
+++ b/linux-x64/clang/include/llvm/Analysis/InstructionPrecedenceTracking.h
@@ -92,7 +92,7 @@
 /// example, throwing calls and guards do not always do this. If we need to know
 /// for sure that some instruction is guaranteed to execute if the given block
 /// is reached, then we need to make sure that there is no implicit control flow
-/// instruction (ICFI) preceeding it. For example, this check is required if we
+/// instruction (ICFI) preceding it. For example, this check is required if we
 /// perform PRE moving non-speculable instruction to other place.
 class ImplicitControlFlowTracking : public InstructionPrecedenceTracking {
 public:
diff --git a/linux-x64/clang/include/llvm/Analysis/InstructionSimplify.h b/linux-x64/clang/include/llvm/Analysis/InstructionSimplify.h
index a904043..531000b 100644
--- a/linux-x64/clang/include/llvm/Analysis/InstructionSimplify.h
+++ b/linux-x64/clang/include/llvm/Analysis/InstructionSimplify.h
@@ -117,6 +117,10 @@
 // deprecated.
 // Please use the SimplifyQuery versions in new code.
 
+/// Given operand for an FNeg, fold the result or return null.
+Value *SimplifyFNegInst(Value *Op, FastMathFlags FMF,
+                        const SimplifyQuery &Q);
+
 /// Given operands for an Add, fold the result or return null.
 Value *SimplifyAddInst(Value *LHS, Value *RHS, bool isNSW, bool isNUW,
                        const SimplifyQuery &Q);
@@ -227,6 +231,15 @@
 Value *SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
                        const SimplifyQuery &Q);
 
+/// Given operand for a UnaryOperator, fold the result or return null.
+Value *SimplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q);
+
+/// Given operand for an FP UnaryOperator, fold the result or return null.
+/// In contrast to SimplifyUnOp, try to use FastMathFlag when folding the
+/// result. In case we don't need FastMathFlags, simply fall to SimplifyUnOp.
+Value *SimplifyFPUnOp(unsigned Opcode, Value *Op, FastMathFlags FMF,
+                      const SimplifyQuery &Q);
+
 /// Given operands for a BinaryOperator, fold the result or return null.
 Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
                      const SimplifyQuery &Q);
diff --git a/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h b/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h
index e7d19d1..1fa1db5 100644
--- a/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h
+++ b/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h
@@ -5,96 +5,86 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-/// \file
-/// Compute iterated dominance frontiers using a linear time algorithm.
-///
-/// The algorithm used here is based on:
-///
-///   Sreedhar and Gao. A linear time algorithm for placing phi-nodes.
-///   In Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of
-///   Programming Languages
-///   POPL '95. ACM, New York, NY, 62-73.
-///
-/// It has been modified to not explicitly use the DJ graph data structure and
-/// to directly compute pruned SSA using per-variable liveness information.
-//
-//===----------------------------------------------------------------------===//
 
 #ifndef LLVM_ANALYSIS_IDF_H
 #define LLVM_ANALYSIS_IDF_H
 
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/IR/BasicBlock.h"
 #include "llvm/IR/CFGDiff.h"
-#include "llvm/IR/Dominators.h"
+#include "llvm/Support/GenericIteratedDominanceFrontier.h"
 
 namespace llvm {
 
-/// Determine the iterated dominance frontier, given a set of defining
-/// blocks, and optionally, a set of live-in blocks.
-///
-/// In turn, the results can be used to place phi nodes.
-///
-/// This algorithm is a linear time computation of Iterated Dominance Frontiers,
-/// pruned using the live-in set.
-/// By default, liveness is not used to prune the IDF computation.
-/// The template parameters should be either BasicBlock* or Inverse<BasicBlock
-/// *>, depending on if you want the forward or reverse IDF.
-template <class NodeTy, bool IsPostDom>
-class IDFCalculator {
- public:
-   IDFCalculator(DominatorTreeBase<BasicBlock, IsPostDom> &DT)
-       : DT(DT), GD(nullptr), useLiveIn(false) {}
+class BasicBlock;
 
-   IDFCalculator(DominatorTreeBase<BasicBlock, IsPostDom> &DT,
-                 const GraphDiff<BasicBlock *, IsPostDom> *GD)
-       : DT(DT), GD(GD), useLiveIn(false) {}
+namespace IDFCalculatorDetail {
 
-   /// Give the IDF calculator the set of blocks in which the value is
-   /// defined.  This is equivalent to the set of starting blocks it should be
-   /// calculating the IDF for (though later gets pruned based on liveness).
-   ///
-   /// Note: This set *must* live for the entire lifetime of the IDF calculator.
-   void setDefiningBlocks(const SmallPtrSetImpl<BasicBlock *> &Blocks) {
-     DefBlocks = &Blocks;
-   }
+/// Specialization for BasicBlock for the optional use of GraphDiff.
+template <bool IsPostDom> struct ChildrenGetterTy<BasicBlock, IsPostDom> {
+  using NodeRef = BasicBlock *;
+  using ChildrenTy = SmallVector<BasicBlock *, 8>;
 
-  /// Give the IDF calculator the set of blocks in which the value is
-  /// live on entry to the block.   This is used to prune the IDF calculation to
-  /// not include blocks where any phi insertion would be dead.
-  ///
-  /// Note: This set *must* live for the entire lifetime of the IDF calculator.
-
-  void setLiveInBlocks(const SmallPtrSetImpl<BasicBlock *> &Blocks) {
-    LiveInBlocks = &Blocks;
-    useLiveIn = true;
+  ChildrenGetterTy() = default;
+  ChildrenGetterTy(const GraphDiff<BasicBlock *, IsPostDom> *GD) : GD(GD) {
+    assert(GD);
   }
 
-  /// Reset the live-in block set to be empty, and tell the IDF
-  /// calculator to not use liveness anymore.
-  void resetLiveInBlocks() {
-    LiveInBlocks = nullptr;
-    useLiveIn = false;
-  }
+  ChildrenTy get(const NodeRef &N);
 
-  /// Calculate iterated dominance frontiers
-  ///
-  /// This uses the linear-time phi algorithm based on DJ-graphs mentioned in
-  /// the file-level comment.  It performs DF->IDF pruning using the live-in
-  /// set, to avoid computing the IDF for blocks where an inserted PHI node
-  /// would be dead.
-  void calculate(SmallVectorImpl<BasicBlock *> &IDFBlocks);
-
-private:
- DominatorTreeBase<BasicBlock, IsPostDom> &DT;
- const GraphDiff<BasicBlock *, IsPostDom> *GD;
- bool useLiveIn;
- const SmallPtrSetImpl<BasicBlock *> *LiveInBlocks;
- const SmallPtrSetImpl<BasicBlock *> *DefBlocks;
+  const GraphDiff<BasicBlock *, IsPostDom> *GD = nullptr;
 };
-typedef IDFCalculator<BasicBlock *, false> ForwardIDFCalculator;
-typedef IDFCalculator<Inverse<BasicBlock *>, true> ReverseIDFCalculator;
+
+} // end of namespace IDFCalculatorDetail
+
+template <bool IsPostDom>
+class IDFCalculator final : public IDFCalculatorBase<BasicBlock, IsPostDom> {
+public:
+  using IDFCalculatorBase =
+      typename llvm::IDFCalculatorBase<BasicBlock, IsPostDom>;
+  using ChildrenGetterTy = typename IDFCalculatorBase::ChildrenGetterTy;
+
+  IDFCalculator(DominatorTreeBase<BasicBlock, IsPostDom> &DT)
+      : IDFCalculatorBase(DT) {}
+
+  IDFCalculator(DominatorTreeBase<BasicBlock, IsPostDom> &DT,
+                const GraphDiff<BasicBlock *, IsPostDom> *GD)
+      : IDFCalculatorBase(DT, ChildrenGetterTy(GD)) {
+    assert(GD);
+  }
+};
+
+using ForwardIDFCalculator = IDFCalculator<false>;
+using ReverseIDFCalculator = IDFCalculator<true>;
+
+//===----------------------------------------------------------------------===//
+// Implementation.
+//===----------------------------------------------------------------------===//
+
+namespace IDFCalculatorDetail {
+
+template <bool IsPostDom>
+typename ChildrenGetterTy<BasicBlock, IsPostDom>::ChildrenTy
+ChildrenGetterTy<BasicBlock, IsPostDom>::get(
+    const ChildrenGetterTy<BasicBlock, IsPostDom>::NodeRef &N) {
+
+  using OrderedNodeTy =
+      typename IDFCalculatorBase<BasicBlock, IsPostDom>::OrderedNodeTy;
+
+  if (!GD) {
+    auto Children = children<OrderedNodeTy>(N);
+    return {Children.begin(), Children.end()};
+  }
+
+  using SnapShotBBPairTy =
+      std::pair<const GraphDiff<BasicBlock *, IsPostDom> *, OrderedNodeTy>;
+
+  ChildrenTy Ret;
+  for (const auto &SnapShotBBPair : children<SnapShotBBPairTy>({GD, N}))
+    Ret.emplace_back(SnapShotBBPair.second);
+  return Ret;
 }
+
+} // end of namespace IDFCalculatorDetail
+
+} // end of namespace llvm
+
 #endif
diff --git a/linux-x64/clang/include/llvm/Analysis/LazyCallGraph.h b/linux-x64/clang/include/llvm/Analysis/LazyCallGraph.h
index 3286547..2d83929 100644
--- a/linux-x64/clang/include/llvm/Analysis/LazyCallGraph.h
+++ b/linux-x64/clang/include/llvm/Analysis/LazyCallGraph.h
@@ -38,6 +38,7 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/PointerIntPair.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/SmallVector.h"
@@ -1082,12 +1083,26 @@
         continue;
       }
 
+      // The blockaddress constant expression is a weird special case, we can't
+      // generically walk its operands the way we do for all other constants.
       if (BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
-        // The blockaddress constant expression is a weird special case, we
-        // can't generically walk its operands the way we do for all other
-        // constants.
-        if (Visited.insert(BA->getFunction()).second)
-          Worklist.push_back(BA->getFunction());
+        // If we've already visited the function referred to by the block
+        // address, we don't need to revisit it.
+        if (Visited.count(BA->getFunction()))
+          continue;
+
+        // If all of the blockaddress' users are instructions within the
+        // referred to function, we don't need to insert a cycle.
+        if (llvm::all_of(BA->users(), [&](User *U) {
+              if (Instruction *I = dyn_cast<Instruction>(U))
+                return I->getFunction() == BA->getFunction();
+              return false;
+            }))
+          continue;
+
+        // Otherwise we should go visit the referred to function.
+        Visited.insert(BA->getFunction());
+        Worklist.push_back(BA->getFunction());
         continue;
       }
 
diff --git a/linux-x64/clang/include/llvm/Analysis/Loads.h b/linux-x64/clang/include/llvm/Analysis/Loads.h
index 0440116..5df6bb0 100644
--- a/linux-x64/clang/include/llvm/Analysis/Loads.h
+++ b/linux-x64/clang/include/llvm/Analysis/Loads.h
@@ -25,7 +25,8 @@
 /// Return true if this is always a dereferenceable pointer. If the context
 /// instruction is specified perform context-sensitive analysis and return true
 /// if the pointer is dereferenceable at the specified instruction.
-bool isDereferenceablePointer(const Value *V, const DataLayout &DL,
+bool isDereferenceablePointer(const Value *V, Type *Ty,
+                              const DataLayout &DL,
                               const Instruction *CtxI = nullptr,
                               const DominatorTree *DT = nullptr);
 
@@ -33,8 +34,8 @@
 /// greater or equal than requested. If the context instruction is specified
 /// performs context-sensitive analysis and returns true if the pointer is
 /// dereferenceable at the specified instruction.
-bool isDereferenceableAndAlignedPointer(const Value *V, unsigned Align,
-                                        const DataLayout &DL,
+bool isDereferenceableAndAlignedPointer(const Value *V, Type *Ty,
+                                        unsigned Align, const DataLayout &DL,
                                         const Instruction *CtxI = nullptr,
                                         const DominatorTree *DT = nullptr);
 
@@ -55,7 +56,20 @@
 /// If it is not obviously safe to load from the specified pointer, we do a
 /// quick local scan of the basic block containing ScanFrom, to determine if
 /// the address is already accessed.
-bool isSafeToLoadUnconditionally(Value *V, unsigned Align,
+bool isSafeToLoadUnconditionally(Value *V, unsigned Align, APInt &Size,
+                                 const DataLayout &DL,
+                                 Instruction *ScanFrom = nullptr,
+                                 const DominatorTree *DT = nullptr);
+
+/// Return true if we know that executing a load from this value cannot trap.
+///
+/// If DT and ScanFrom are specified this method performs context-sensitive
+/// analysis and returns true if it is safe to load immediately before ScanFrom.
+///
+/// If it is not obviously safe to load from the specified pointer, we do a
+/// quick local scan of the basic block containing ScanFrom, to determine if
+/// the address is already accessed.
+bool isSafeToLoadUnconditionally(Value *V, Type *Ty, unsigned Align,
                                  const DataLayout &DL,
                                  Instruction *ScanFrom = nullptr,
                                  const DominatorTree *DT = nullptr);
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h b/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h
index fa34afa..9e9aaa3 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h
@@ -522,6 +522,11 @@
   /// no memory dependence cycles.
   bool canVectorizeMemory() const { return CanVecMem; }
 
+  /// Return true if there is a convergent operation in the loop. There may
+  /// still be reported runtime pointer checks that would be required, but it is
+  /// not legal to insert them.
+  bool hasConvergentOp() const { return HasConvergentOp; }
+
   const RuntimePointerChecking *getRuntimePointerChecking() const {
     return PtrRtChecking.get();
   }
@@ -642,6 +647,7 @@
 
   /// Cache the result of analyzeLoop.
   bool CanVecMem;
+  bool HasConvergentOp;
 
   /// Indicator that there are non vectorizable stores to a uniform address.
   bool HasDependenceInvolvingLoopInvariantAddress;
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h b/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h
index b87d981..368a810 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h
@@ -61,9 +61,6 @@
   MemorySSA *MSSA;
 };
 
-/// Enables memory ssa as a dependency for loop passes.
-extern cl::opt<bool> EnableMSSALoopDependency;
-
 /// Extern template declaration for the analysis set for this IR unit.
 extern template class AllAnalysesOn<Loop>;
 
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopInfo.h b/linux-x64/clang/include/llvm/Analysis/LoopInfo.h
index 0899630..98b3129 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopInfo.h
@@ -54,8 +54,11 @@
 class DominatorTree;
 class LoopInfo;
 class Loop;
+class InductionDescriptor;
 class MDNode;
+class MemorySSAUpdater;
 class PHINode;
+class ScalarEvolution;
 class raw_ostream;
 template <class N, bool IsPostDom> class DominatorTreeBase;
 template <class N, class M> class LoopInfoBase;
@@ -198,9 +201,10 @@
   }
 
   /// True if terminator in the block can branch to another block that is
-  /// outside of the current loop.
+  /// outside of the current loop. \p BB must be inside the loop.
   bool isLoopExiting(const BlockT *BB) const {
     assert(!isInvalid() && "Loop not in a valid state!");
+    assert(contains(BB) && "Exiting block must be part of the loop");
     for (const auto &Succ : children<const BlockT *>(BB)) {
       if (!contains(Succ))
         return true;
@@ -275,7 +279,7 @@
   BlockT *getUniqueExitBlock() const;
 
   /// Edge type.
-  typedef std::pair<const BlockT *, const BlockT *> Edge;
+  typedef std::pair<BlockT *, BlockT *> Edge;
 
   /// Return all pairs of (_inside_block_,_outside_block_).
   void getExitEdges(SmallVectorImpl<Edge> &ExitEdges) const;
@@ -308,6 +312,40 @@
         LoopLatches.push_back(Pred);
   }
 
+  /// Return all inner loops in the loop nest rooted by the loop in preorder,
+  /// with siblings in forward program order.
+  template <class Type>
+  static void getInnerLoopsInPreorder(const LoopT &L,
+                                      SmallVectorImpl<Type> &PreOrderLoops) {
+    SmallVector<LoopT *, 4> PreOrderWorklist;
+    PreOrderWorklist.append(L.rbegin(), L.rend());
+
+    while (!PreOrderWorklist.empty()) {
+      LoopT *L = PreOrderWorklist.pop_back_val();
+      // Sub-loops are stored in forward program order, but will process the
+      // worklist backwards so append them in reverse order.
+      PreOrderWorklist.append(L->rbegin(), L->rend());
+      PreOrderLoops.push_back(L);
+    }
+  }
+
+  /// Return all loops in the loop nest rooted by the loop in preorder, with
+  /// siblings in forward program order.
+  SmallVector<const LoopT *, 4> getLoopsInPreorder() const {
+    SmallVector<const LoopT *, 4> PreOrderLoops;
+    const LoopT *CurLoop = static_cast<const LoopT *>(this);
+    PreOrderLoops.push_back(CurLoop);
+    getInnerLoopsInPreorder(*CurLoop, PreOrderLoops);
+    return PreOrderLoops;
+  }
+  SmallVector<LoopT *, 4> getLoopsInPreorder() {
+    SmallVector<LoopT *, 4> PreOrderLoops;
+    LoopT *CurLoop = static_cast<LoopT *>(this);
+    PreOrderLoops.push_back(CurLoop);
+    getInnerLoopsInPreorder(*CurLoop, PreOrderLoops);
+    return PreOrderLoops;
+  }
+
   //===--------------------------------------------------------------------===//
   // APIs for updating loop information after changing the CFG
   //
@@ -470,7 +508,7 @@
 
   public:
     LocRange() {}
-    LocRange(DebugLoc Start) : Start(std::move(Start)), End(std::move(Start)) {}
+    LocRange(DebugLoc Start) : Start(Start), End(Start) {}
     LocRange(DebugLoc Start, DebugLoc End)
         : Start(std::move(Start)), End(std::move(End)) {}
 
@@ -498,7 +536,8 @@
   /// If InsertPt is specified, it is the point to hoist instructions to.
   /// If null, the terminator of the loop preheader is used.
   bool makeLoopInvariant(Value *V, bool &Changed,
-                         Instruction *InsertPt = nullptr) const;
+                         Instruction *InsertPt = nullptr,
+                         MemorySSAUpdater *MSSAU = nullptr) const;
 
   /// If the given instruction is inside of the loop and it can be hoisted, do
   /// so to make it trivially loop-invariant.
@@ -510,7 +549,8 @@
   /// If null, the terminator of the loop preheader is used.
   ///
   bool makeLoopInvariant(Instruction *I, bool &Changed,
-                         Instruction *InsertPt = nullptr) const;
+                         Instruction *InsertPt = nullptr,
+                         MemorySSAUpdater *MSSAU = nullptr) const;
 
   /// Check to see if the loop has a canonical induction variable: an integer
   /// recurrence that starts at 0 and increments by one each time through the
@@ -521,6 +561,170 @@
   ///
   PHINode *getCanonicalInductionVariable() const;
 
+  /// Obtain the unique incoming and back edge. Return false if they are
+  /// non-unique or the loop is dead; otherwise, return true.
+  bool getIncomingAndBackEdge(BasicBlock *&Incoming,
+                              BasicBlock *&Backedge) const;
+
+  /// Below are some utilities to get loop bounds and induction variable, and
+  /// check if a given phinode is an auxiliary induction variable, as well as
+  /// checking if the loop is canonical.
+  ///
+  /// Here is an example:
+  /// \code
+  /// for (int i = lb; i < ub; i+=step)
+  ///   <loop body>
+  /// --- pseudo LLVMIR ---
+  /// beforeloop:
+  ///   guardcmp = (lb < ub)
+  ///   if (guardcmp) goto preheader; else goto afterloop
+  /// preheader:
+  /// loop:
+  ///   i_1 = phi[{lb, preheader}, {i_2, latch}]
+  ///   <loop body>
+  ///   i_2 = i_1 + step
+  /// latch:
+  ///   cmp = (i_2 < ub)
+  ///   if (cmp) goto loop
+  /// exit:
+  /// afterloop:
+  /// \endcode
+  ///
+  /// - getBounds
+  ///   - getInitialIVValue      --> lb
+  ///   - getStepInst            --> i_2 = i_1 + step
+  ///   - getStepValue           --> step
+  ///   - getFinalIVValue        --> ub
+  ///   - getCanonicalPredicate  --> '<'
+  ///   - getDirection           --> Increasing
+  ///
+  /// - getInductionVariable            --> i_1
+  /// - isAuxiliaryInductionVariable(x) --> true if x == i_1
+  /// - isCanonical                     --> false
+  struct LoopBounds {
+    /// Return the LoopBounds object if
+    /// - the given \p IndVar is an induction variable
+    /// - the initial value of the induction variable can be found
+    /// - the step instruction of the induction variable can be found
+    /// - the final value of the induction variable can be found
+    ///
+    /// Else None.
+    static Optional<Loop::LoopBounds> getBounds(const Loop &L, PHINode &IndVar,
+                                                ScalarEvolution &SE);
+
+    /// Get the initial value of the loop induction variable.
+    Value &getInitialIVValue() const { return InitialIVValue; }
+
+    /// Get the instruction that updates the loop induction variable.
+    Instruction &getStepInst() const { return StepInst; }
+
+    /// Get the step that the loop induction variable gets updated by in each
+    /// loop iteration. Return nullptr if not found.
+    Value *getStepValue() const { return StepValue; }
+
+    /// Get the final value of the loop induction variable.
+    Value &getFinalIVValue() const { return FinalIVValue; }
+
+    /// Return the canonical predicate for the latch compare instruction, if
+    /// able to be calcuated. Else BAD_ICMP_PREDICATE.
+    ///
+    /// A predicate is considered as canonical if requirements below are all
+    /// satisfied:
+    /// 1. The first successor of the latch branch is the loop header
+    ///    If not, inverse the predicate.
+    /// 2. One of the operands of the latch comparison is StepInst
+    ///    If not, and
+    ///    - if the current calcuated predicate is not ne or eq, flip the
+    ///      predicate.
+    ///    - else if the loop is increasing, return slt
+    ///      (notice that it is safe to change from ne or eq to sign compare)
+    ///    - else if the loop is decreasing, return sgt
+    ///      (notice that it is safe to change from ne or eq to sign compare)
+    ///
+    /// Here is an example when both (1) and (2) are not satisfied:
+    /// \code
+    /// loop.header:
+    ///  %iv = phi [%initialiv, %loop.preheader], [%inc, %loop.header]
+    ///  %inc = add %iv, %step
+    ///  %cmp = slt %iv, %finaliv
+    ///  br %cmp, %loop.exit, %loop.header
+    /// loop.exit:
+    /// \endcode
+    /// - The second successor of the latch branch is the loop header instead
+    ///   of the first successor (slt -> sge)
+    /// - The first operand of the latch comparison (%cmp) is the IndVar (%iv)
+    ///   instead of the StepInst (%inc) (sge -> sgt)
+    ///
+    /// The predicate would be sgt if both (1) and (2) are satisfied.
+    /// getCanonicalPredicate() returns sgt for this example.
+    /// Note: The IR is not changed.
+    ICmpInst::Predicate getCanonicalPredicate() const;
+
+    /// An enum for the direction of the loop
+    /// - for (int i = 0; i < ub; ++i)  --> Increasing
+    /// - for (int i = ub; i > 0; --i)  --> Descresing
+    /// - for (int i = x; i != y; i+=z) --> Unknown
+    enum class Direction { Increasing, Decreasing, Unknown };
+
+    /// Get the direction of the loop.
+    Direction getDirection() const;
+
+  private:
+    LoopBounds(const Loop &Loop, Value &I, Instruction &SI, Value *SV, Value &F,
+               ScalarEvolution &SE)
+        : L(Loop), InitialIVValue(I), StepInst(SI), StepValue(SV),
+          FinalIVValue(F), SE(SE) {}
+
+    const Loop &L;
+
+    // The initial value of the loop induction variable
+    Value &InitialIVValue;
+
+    // The instruction that updates the loop induction variable
+    Instruction &StepInst;
+
+    // The value that the loop induction variable gets updated by in each loop
+    // iteration
+    Value *StepValue;
+
+    // The final value of the loop induction variable
+    Value &FinalIVValue;
+
+    ScalarEvolution &SE;
+  };
+
+  /// Return the struct LoopBounds collected if all struct members are found,
+  /// else None.
+  Optional<LoopBounds> getBounds(ScalarEvolution &SE) const;
+
+  /// Return the loop induction variable if found, else return nullptr.
+  /// An instruction is considered as the loop induction variable if
+  /// - it is an induction variable of the loop; and
+  /// - it is used to determine the condition of the branch in the loop latch
+  ///
+  /// Note: the induction variable doesn't need to be canonical, i.e. starts at
+  /// zero and increments by one each time through the loop (but it can be).
+  PHINode *getInductionVariable(ScalarEvolution &SE) const;
+
+  /// Get the loop induction descriptor for the loop induction variable. Return
+  /// true if the loop induction variable is found.
+  bool getInductionDescriptor(ScalarEvolution &SE,
+                              InductionDescriptor &IndDesc) const;
+
+  /// Return true if the given PHINode \p AuxIndVar is
+  /// - in the loop header
+  /// - not used outside of the loop
+  /// - incremented by a loop invariant step for each loop iteration
+  /// - step instruction opcode should be add or sub
+  /// Note: auxiliary induction variable is not required to be used in the
+  ///       conditional branch in the loop latch. (but it can be)
+  bool isAuxiliaryInductionVariable(PHINode &AuxIndVar,
+                                    ScalarEvolution &SE) const;
+
+  /// Return true if the loop induction variable starts at zero and increments
+  /// by one each time through the loop.
+  bool isCanonical(ScalarEvolution &SE) const;
+
   /// Return true if the Loop is in LCSSA form.
   bool isLCSSAForm(DominatorTree &DT) const;
 
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h b/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h
index ad42508..6ff4837 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h
@@ -587,16 +587,9 @@
   // FIXME: If we change the order of LoopInfo we will want to remove the
   // reverse here.
   for (LoopT *RootL : reverse(*this)) {
-    assert(PreOrderWorklist.empty() &&
-           "Must start with an empty preorder walk worklist.");
-    PreOrderWorklist.push_back(RootL);
-    do {
-      LoopT *L = PreOrderWorklist.pop_back_val();
-      // Sub-loops are stored in forward program order, but will process the
-      // worklist backwards so append them in reverse order.
-      PreOrderWorklist.append(L->rbegin(), L->rend());
-      PreOrderLoops.push_back(L);
-    } while (!PreOrderWorklist.empty());
+    auto PreOrderLoopsInRootL = RootL->getLoopsInPreorder();
+    PreOrderLoops.append(PreOrderLoopsInRootL.begin(),
+                         PreOrderLoopsInRootL.end());
   }
 
   return PreOrderLoops;
diff --git a/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h b/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h
index 49b87a4..49f9e58 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h
@@ -18,6 +18,7 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/Analysis/TargetFolder.h"
+#include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/IR/CallSite.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InstVisitor.h"
@@ -83,6 +84,15 @@
 bool isAllocLikeFn(const Value *V, const TargetLibraryInfo *TLI,
                    bool LookThroughBitCast = false);
 
+/// Tests if a value is a call or invoke to a library function that
+/// reallocates memory (e.g., realloc).
+bool isReallocLikeFn(const Value *V, const TargetLibraryInfo *TLI,
+                     bool LookThroughBitCast = false);
+
+/// Tests if a function is a call or invoke to a library function that
+/// reallocates memory (e.g., realloc).
+bool isReallocLikeFn(const Function *F, const TargetLibraryInfo *TLI);
+
 //===----------------------------------------------------------------------===//
 //  malloc Call Utility Functions.
 //
@@ -134,6 +144,9 @@
 //  free Call Utility Functions.
 //
 
+/// isLibFreeFunction - Returns true if the function is a builtin free()
+bool isLibFreeFunction(const Function *F, const LibFunc TLIFn);
+
 /// isFreeCall - Returns non-null if the value is a call to the builtin free()
 const CallInst *isFreeCall(const Value *I, const TargetLibraryInfo *TLI);
 
@@ -250,7 +263,7 @@
 /// May create code to compute the result at run-time.
 class ObjectSizeOffsetEvaluator
   : public InstVisitor<ObjectSizeOffsetEvaluator, SizeOffsetEvalType> {
-  using BuilderTy = IRBuilder<TargetFolder>;
+  using BuilderTy = IRBuilder<TargetFolder, IRBuilderCallbackInserter>;
   using WeakEvalType = std::pair<WeakTrackingVH, WeakTrackingVH>;
   using CacheMapTy = DenseMap<const Value *, WeakEvalType>;
   using PtrSetTy = SmallPtrSet<const Value *, 8>;
@@ -264,6 +277,7 @@
   CacheMapTy CacheMap;
   PtrSetTy SeenVals;
   ObjectSizeOpts EvalOpts;
+  SmallPtrSet<Instruction *, 8> InsertedInstructions;
 
   SizeOffsetEvalType compute_(Value *V);
 
diff --git a/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h b/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h
index de57499..e2669c2 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h
@@ -381,7 +381,8 @@
   ///
   /// See the class comment for more details. It is illegal to call this on
   /// non-memory instructions.
-  MemDepResult getDependency(Instruction *QueryInst);
+  MemDepResult getDependency(Instruction *QueryInst,
+                             OrderedBasicBlock *OBB = nullptr);
 
   /// Perform a full dependency query for the specified call, returning the set
   /// of blocks that the value is potentially live across.
@@ -447,14 +448,14 @@
                                         BasicBlock::iterator ScanIt,
                                         BasicBlock *BB,
                                         Instruction *QueryInst = nullptr,
-                                        unsigned *Limit = nullptr);
+                                        unsigned *Limit = nullptr,
+                                        OrderedBasicBlock *OBB = nullptr);
 
-  MemDepResult getSimplePointerDependencyFrom(const MemoryLocation &MemLoc,
-                                              bool isLoad,
-                                              BasicBlock::iterator ScanIt,
-                                              BasicBlock *BB,
-                                              Instruction *QueryInst,
-                                              unsigned *Limit = nullptr);
+  MemDepResult
+  getSimplePointerDependencyFrom(const MemoryLocation &MemLoc, bool isLoad,
+                                 BasicBlock::iterator ScanIt, BasicBlock *BB,
+                                 Instruction *QueryInst, unsigned *Limit,
+                                 OrderedBasicBlock *OBB);
 
   /// This analysis looks for other loads and stores with invariant.group
   /// metadata and the same pointer operand. Returns Unknown if it does not
diff --git a/linux-x64/clang/include/llvm/Analysis/MemorySSA.h b/linux-x64/clang/include/llvm/Analysis/MemorySSA.h
index fa92fd3..b7730be 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemorySSA.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemorySSA.h
@@ -104,6 +104,9 @@
 
 namespace llvm {
 
+/// Enables memory ssa as a dependency for loop passes.
+extern cl::opt<bool> EnableMSSALoopDependency;
+
 class Function;
 class Instruction;
 class MemoryAccess;
@@ -700,6 +703,11 @@
 class MemorySSA {
 public:
   MemorySSA(Function &, AliasAnalysis *, DominatorTree *);
+
+  // MemorySSA must remain where it's constructed; Walkers it creates store
+  // pointers to it.
+  MemorySSA(MemorySSA &&) = delete;
+
   ~MemorySSA();
 
   MemorySSAWalker *getWalker();
@@ -825,13 +833,13 @@
                                       const MemoryUseOrDef *Template = nullptr);
 
 private:
-  class ClobberWalkerBase;
-  class CachingWalker;
-  class SkipSelfWalker;
+  template <class AliasAnalysisType> class ClobberWalkerBase;
+  template <class AliasAnalysisType> class CachingWalker;
+  template <class AliasAnalysisType> class SkipSelfWalker;
   class OptimizeUses;
 
-  CachingWalker *getWalkerImpl();
-  void buildMemorySSA();
+  CachingWalker<AliasAnalysis> *getWalkerImpl();
+  void buildMemorySSA(BatchAAResults &BAA);
   void optimizeUses();
 
   void prepareForMoveTo(MemoryAccess *, BasicBlock *);
@@ -845,7 +853,8 @@
   void markUnreachableAsLiveOnEntry(BasicBlock *BB);
   bool dominatesUse(const MemoryAccess *, const MemoryAccess *) const;
   MemoryPhi *createMemoryPhi(BasicBlock *BB);
-  MemoryUseOrDef *createNewAccess(Instruction *,
+  template <typename AliasAnalysisType>
+  MemoryUseOrDef *createNewAccess(Instruction *, AliasAnalysisType *,
                                   const MemoryUseOrDef *Template = nullptr);
   MemoryAccess *findDominatingDef(BasicBlock *, enum InsertionPlace);
   void placePHINodes(const SmallPtrSetImpl<BasicBlock *> &);
@@ -881,9 +890,9 @@
   mutable DenseMap<const MemoryAccess *, unsigned long> BlockNumbering;
 
   // Memory SSA building info
-  std::unique_ptr<ClobberWalkerBase> WalkerBase;
-  std::unique_ptr<CachingWalker> Walker;
-  std::unique_ptr<SkipSelfWalker> SkipWalker;
+  std::unique_ptr<ClobberWalkerBase<AliasAnalysis>> WalkerBase;
+  std::unique_ptr<CachingWalker<AliasAnalysis>> Walker;
+  std::unique_ptr<SkipSelfWalker<AliasAnalysis>> SkipWalker;
   unsigned NextID;
 };
 
@@ -927,6 +936,9 @@
     MemorySSA &getMSSA() { return *MSSA.get(); }
 
     std::unique_ptr<MemorySSA> MSSA;
+
+    bool invalidate(Function &F, const PreservedAnalyses &PA,
+                    FunctionAnalysisManager::Invalidator &Inv);
   };
 
   Result run(Function &F, FunctionAnalysisManager &AM);
@@ -1039,8 +1051,6 @@
   /// the walker it uses or returns.
   virtual void invalidateInfo(MemoryAccess *) {}
 
-  virtual void verify(const MemorySSA *MSSA) { assert(MSSA == this->MSSA); }
-
 protected:
   friend class MemorySSA; // For updating MSSA pointer in MemorySSA move
                           // constructor.
@@ -1096,15 +1106,15 @@
     assert(Access && "Tried to access past the end of our iterator");
     // Go to the first argument for phis, and the defining access for everything
     // else.
-    if (MemoryPhi *MP = dyn_cast<MemoryPhi>(Access))
+    if (const MemoryPhi *MP = dyn_cast<MemoryPhi>(Access))
       return MP->getIncomingValue(ArgNo);
     return cast<MemoryUseOrDef>(Access)->getDefiningAccess();
   }
 
   using BaseT::operator++;
-  memoryaccess_def_iterator &operator++() {
+  memoryaccess_def_iterator_base &operator++() {
     assert(Access && "Hit end of iterator");
-    if (MemoryPhi *MP = dyn_cast<MemoryPhi>(Access)) {
+    if (const MemoryPhi *MP = dyn_cast<MemoryPhi>(Access)) {
       if (++ArgNo >= MP->getNumIncomingValues()) {
         ArgNo = 0;
         Access = nullptr;
diff --git a/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h b/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h
index 58cf1cc..6467d41 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h
@@ -105,7 +105,12 @@
   /// Update the MemoryPhi in `To` to have a single incoming edge from `From`,
   /// following a CFG change that replaced multiple edges (switch) with a direct
   /// branch.
-  void removeDuplicatePhiEdgesBetween(BasicBlock *From, BasicBlock *To);
+  void removeDuplicatePhiEdgesBetween(const BasicBlock *From,
+                                      const BasicBlock *To);
+  /// Update MemorySSA when inserting a unique backedge block for a loop.
+  void updatePhisWhenInsertingUniqueBackedgeBlock(BasicBlock *LoopHeader,
+                                                  BasicBlock *LoopPreheader,
+                                                  BasicBlock *BackedgeBlock);
   /// Update MemorySSA after a loop was cloned, given the blocks in RPO order,
   /// the exit blocks and a 1:1 mapping of all blocks and instructions
   /// cloned. This involves duplicating all defs and uses in the cloned blocks
@@ -240,6 +245,16 @@
   /// deleted after this call.
   void removeBlocks(const SmallPtrSetImpl<BasicBlock *> &DeadBlocks);
 
+  /// Instruction I will be changed to an unreachable. Remove all accesses in
+  /// I's block that follow I (inclusive), and update the Phis in the blocks'
+  /// successors.
+  void changeToUnreachable(const Instruction *I);
+
+  /// Conditional branch BI is changed or replaced with an unconditional branch
+  /// to `To`. Update Phis in BI's successors to remove BI's BB.
+  void changeCondBranchToUnconditionalTo(const BranchInst *BI,
+                                         const BasicBlock *To);
+
   /// Get handle on MemorySSA.
   MemorySSA* getMemorySSA() const { return MSSA; }
 
@@ -261,6 +276,7 @@
   MemoryAccess *recursePhi(MemoryAccess *Phi);
   template <class RangeType>
   MemoryAccess *tryRemoveTrivialPhi(MemoryPhi *Phi, RangeType &Operands);
+  void tryRemoveTrivialPhis(ArrayRef<WeakVH> UpdatedPHIs);
   void fixupDefs(const SmallVectorImpl<WeakVH> &);
   // Clone all uses and defs from BB to NewBB given a 1:1 map of all
   // instructions and blocks cloned, and a map of MemoryPhi : Definition
@@ -271,8 +287,14 @@
   // not necessarily be MemoryPhis themselves, they may be MemoryDefs. As such,
   // the map is between MemoryPhis and MemoryAccesses, where the MemoryAccesses
   // may be MemoryPhis or MemoryDefs and not MemoryUses.
+  // If CloneWasSimplified = true, the clone was exact. Otherwise, assume that
+  // the clone involved simplifications that may have: (1) turned a MemoryUse
+  // into an instruction that MemorySSA has no representation for, or (2) turned
+  // a MemoryDef into a MemoryUse or an instruction that MemorySSA has no
+  // representation for. No other cases are supported.
   void cloneUsesAndDefs(BasicBlock *BB, BasicBlock *NewBB,
-                        const ValueToValueMapTy &VMap, PhiToDefMap &MPhiMap);
+                        const ValueToValueMapTy &VMap, PhiToDefMap &MPhiMap,
+                        bool CloneWasSimplified = false);
   template <typename Iter>
   void privateUpdateExitBlocksForClonedLoop(ArrayRef<BasicBlock *> ExitBlocks,
                                             Iter ValuesBegin, Iter ValuesEnd,
diff --git a/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h
index ed15472..b4f4e5f 100644
--- a/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h
@@ -52,14 +52,17 @@
     return false;
   }
 
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
-  bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal);
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI);
+  bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
+                              bool OrLocal);
 
   using AAResultBase::getModRefBehavior;
   FunctionModRefBehavior getModRefBehavior(const Function *F);
 
   using AAResultBase::getModRefInfo;
-  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc);
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
 };
 
 /// Analysis pass providing a never-invalidated alias analysis result.
diff --git a/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h b/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h
index 9890d5f..dc6093a 100644
--- a/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h
+++ b/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h
@@ -74,6 +74,10 @@
 /// passed a null pointer.
 bool IsNoopOnNull(ARCInstKind Class);
 
+/// Test if the given class represents instructions which do nothing if
+/// passed a global variable.
+bool IsNoopOnGlobal(ARCInstKind Class);
+
 /// Test if the given class represents instructions which are always safe
 /// to mark with the "tail" keyword.
 bool IsAlwaysTail(ARCInstKind Class);
diff --git a/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h b/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h
index a2b2955..7b84044 100644
--- a/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h
+++ b/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h
@@ -77,7 +77,7 @@
     // remarks enabled. We can't currently check whether remarks are requested
     // for the calling pass since that requires actually building the remark.
 
-    if (F->getContext().getDiagnosticsOutputFile() ||
+    if (F->getContext().getRemarkStreamer() ||
         F->getContext().getDiagHandlerPtr()->isAnyRemarkEnabled()) {
       auto R = RemarkBuilder();
       emit((DiagnosticInfoOptimizationBase &)R);
@@ -92,7 +92,7 @@
   /// provide more context so that non-trivial false positives can be quickly
   /// detected by the user.
   bool allowExtraAnalysis(StringRef PassName) const {
-    return (F->getContext().getDiagnosticsOutputFile() ||
+    return (F->getContext().getRemarkStreamer() ||
             F->getContext().getDiagHandlerPtr()->isAnyRemarkEnabled(PassName));
   }
 
diff --git a/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h b/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h
index 6823f68..ae64c01 100644
--- a/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h
+++ b/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h
@@ -59,6 +59,14 @@
   /// only relevant to compare relative instructions positions inside \p BB.
   /// Returns false for A == B.
   bool dominates(const Instruction *A, const Instruction *B);
+
+  /// Remove \p from the ordering, if it is present.
+  void eraseInstruction(const Instruction *I);
+
+  /// Replace \p Old with \p New in the ordering. \p New is assigned the
+  /// numbering of \p Old, so it must be inserted at the same position in the
+  /// IR.
+  void replaceInstruction(const Instruction *Old, const Instruction *New);
 };
 
 } // End llvm namespace
diff --git a/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h b/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h
index 636b5d6..f309d34 100644
--- a/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h
@@ -73,6 +73,12 @@
            Summary->getKind() == ProfileSummary::PSK_Instr;
   }
 
+  /// Returns true if module \c M has context sensitive instrumentation profile.
+  bool hasCSInstrumentationProfile() {
+    return hasProfileSummary() &&
+           Summary->getKind() == ProfileSummary::PSK_CSInstr;
+  }
+
   /// Handle the invalidation of this information.
   ///
   /// When used as a result of \c ProfileSummaryAnalysis this method will be
@@ -86,7 +92,8 @@
 
   /// Returns the profile count for \p CallInst.
   Optional<uint64_t> getProfileCount(const Instruction *CallInst,
-                                     BlockFrequencyInfo *BFI);
+                                     BlockFrequencyInfo *BFI,
+                                     bool AllowSynthetic = false);
   /// Returns true if the working set size of the code is considered huge.
   bool hasHugeWorkingSetSize();
   /// Returns true if \p F has hot function entry.
diff --git a/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h b/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h
index dca8718..fbf04c8 100644
--- a/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h
+++ b/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h
@@ -256,6 +256,10 @@
     enqueueUsers(BC);
   }
 
+  void visitAddrSpaceCastInst(AddrSpaceCastInst &ASC) {
+    enqueueUsers(ASC);
+  }
+
   void visitPtrToIntInst(PtrToIntInst &I) {
     PI.setEscaped(&I);
   }
diff --git a/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h b/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h
index f3a0351..0bd98ef 100644
--- a/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h
+++ b/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h
@@ -537,7 +537,7 @@
   const SCEV *getConstant(ConstantInt *V);
   const SCEV *getConstant(const APInt &Val);
   const SCEV *getConstant(Type *Ty, uint64_t V, bool isSigned = false);
-  const SCEV *getTruncateExpr(const SCEV *Op, Type *Ty);
+  const SCEV *getTruncateExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0);
   const SCEV *getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0);
   const SCEV *getSignExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0);
   const SCEV *getAnyExtendExpr(const SCEV *Op, Type *Ty);
@@ -598,6 +598,8 @@
   /// \p IndexExprs The expressions for the indices.
   const SCEV *getGEPExpr(GEPOperator *GEP,
                          const SmallVectorImpl<const SCEV *> &IndexExprs);
+  const SCEV *getMinMaxExpr(unsigned Kind,
+                            SmallVectorImpl<const SCEV *> &Operands);
   const SCEV *getSMaxExpr(const SCEV *LHS, const SCEV *RHS);
   const SCEV *getSMaxExpr(SmallVectorImpl<const SCEV *> &Operands);
   const SCEV *getUMaxExpr(const SCEV *LHS, const SCEV *RHS);
@@ -635,11 +637,13 @@
 
   /// Return a SCEV corresponding to a conversion of the input value to the
   /// specified type.  If the type must be extended, it is zero extended.
-  const SCEV *getTruncateOrZeroExtend(const SCEV *V, Type *Ty);
+  const SCEV *getTruncateOrZeroExtend(const SCEV *V, Type *Ty,
+                                      unsigned Depth = 0);
 
   /// Return a SCEV corresponding to a conversion of the input value to the
   /// specified type.  If the type must be extended, it is sign extended.
-  const SCEV *getTruncateOrSignExtend(const SCEV *V, Type *Ty);
+  const SCEV *getTruncateOrSignExtend(const SCEV *V, Type *Ty,
+                                      unsigned Depth = 0);
 
   /// Return a SCEV corresponding to a conversion of the input value to the
   /// specified type.  If the type must be extended, it is zero extended.  The
@@ -742,9 +746,12 @@
   unsigned getSmallConstantTripMultiple(const Loop *L,
                                         BasicBlock *ExitingBlock);
 
-  /// Get the expression for the number of loop iterations for which this loop
-  /// is guaranteed not to exit via ExitingBlock. Otherwise return
-  /// SCEVCouldNotCompute.
+  /// Return the number of times the backedge executes before the given exit
+  /// would be taken; if not exactly computable, return SCEVCouldNotCompute. 
+  /// For a single exit loop, this value is equivelent to the result of
+  /// getBackedgeTakenCount.  The loop is guaranteed to exit (via *some* exit)
+  /// before the backedge is executed (ExitCount + 1) times.  Note that there
+  /// is no guarantee about *which* exit is taken on the exiting iteration.  
   const SCEV *getExitCount(const Loop *L, BasicBlock *ExitingBlock);
 
   /// If the specified loop has a predictable backedge-taken count, return it,
@@ -780,6 +787,13 @@
   /// backedge-taken count.
   bool hasLoopInvariantBackedgeTakenCount(const Loop *L);
 
+  // This method should be called by the client when it made any change that
+  // would invalidate SCEV's answers, and the client wants to remove all loop
+  // information held internally by ScalarEvolution. This is intended to be used
+  // when the alternative to forget a loop is too expensive (i.e. large loop
+  // bodies).
+  void forgetAllLoops();
+
   /// This method should be called by the client when it has changed a loop in
   /// a way that may effect ScalarEvolution's ability to compute a trip count,
   /// or if the loop is deleted.  This call is potentially expensive for large
@@ -1869,6 +1883,16 @@
   /// Assign A and B to LHS and RHS, respectively.
   bool matchURem(const SCEV *Expr, const SCEV *&LHS, const SCEV *&RHS);
 
+  /// Look for a SCEV expression with type `SCEVType` and operands `Ops` in
+  /// `UniqueSCEVs`.
+  ///
+  /// The first component of the returned tuple is the SCEV if found and null
+  /// otherwise.  The second component is the `FoldingSetNodeID` that was
+  /// constructed to look up the SCEV and the third component is the insertion
+  /// point.
+  std::tuple<const SCEV *, FoldingSetNodeID, void *>
+  findExistingSCEVInCache(int SCEVType, ArrayRef<const SCEV *> Ops);
+
   FoldingSet<SCEV> UniqueSCEVs;
   FoldingSet<SCEVPredicate> UniquePreds;
   BumpPtrAllocator SCEVAllocator;
diff --git a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionAliasAnalysis.h
index d417850..98d5323 100644
--- a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionAliasAnalysis.h
@@ -30,7 +30,8 @@
   explicit SCEVAAResult(ScalarEvolution &SE) : AAResultBase(), SE(SE) {}
   SCEVAAResult(SCEVAAResult &&Arg) : AAResultBase(std::move(Arg)), SE(Arg.SE) {}
 
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI);
 
 private:
   Value *GetBaseValue(const SCEV *S);
diff --git a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h
index a2c1258..a519f93 100644
--- a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h
+++ b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h
@@ -315,8 +315,10 @@
                                    SmallPtrSetImpl<const SCEV *> &Processed);
 
     /// Insert the specified binary operator, doing a small amount of work to
-    /// avoid inserting an obviously redundant operation.
-    Value *InsertBinop(Instruction::BinaryOps Opcode, Value *LHS, Value *RHS);
+    /// avoid inserting an obviously redundant operation, and hoisting to an
+    /// outer loop when the opportunity is there and it is safe.
+    Value *InsertBinop(Instruction::BinaryOps Opcode, Value *LHS, Value *RHS,
+                       SCEV::NoWrapFlags Flags, bool IsSafeToHoist);
 
     /// Arrange for there to be a cast of V to Ty at IP, reusing an existing
     /// cast if a suitable one exists, moving an existing cast if a suitable one
@@ -367,6 +369,10 @@
 
     Value *visitUMaxExpr(const SCEVUMaxExpr *S);
 
+    Value *visitSMinExpr(const SCEVSMinExpr *S);
+
+    Value *visitUMinExpr(const SCEVUMinExpr *S);
+
     Value *visitUnknown(const SCEVUnknown *S) {
       return S->getValue();
     }
diff --git a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpressions.h b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpressions.h
index e187a96..d008af7 100644
--- a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpressions.h
+++ b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpressions.h
@@ -39,7 +39,7 @@
     // These should be ordered in terms of increasing complexity to make the
     // folders simpler.
     scConstant, scTruncate, scZeroExtend, scSignExtend, scAddExpr, scMulExpr,
-    scUDivExpr, scAddRecExpr, scUMaxExpr, scSMaxExpr,
+    scUDivExpr, scAddRecExpr, scUMaxExpr, scSMaxExpr, scUMinExpr, scSMinExpr,
     scUnknown, scCouldNotCompute
   };
 
@@ -190,10 +190,9 @@
 
     /// Methods for support type inquiry through isa, cast, and dyn_cast:
     static bool classof(const SCEV *S) {
-      return S->getSCEVType() == scAddExpr ||
-             S->getSCEVType() == scMulExpr ||
-             S->getSCEVType() == scSMaxExpr ||
-             S->getSCEVType() == scUMaxExpr ||
+      return S->getSCEVType() == scAddExpr || S->getSCEVType() == scMulExpr ||
+             S->getSCEVType() == scSMaxExpr || S->getSCEVType() == scUMaxExpr ||
+             S->getSCEVType() == scSMinExpr || S->getSCEVType() == scUMinExpr ||
              S->getSCEVType() == scAddRecExpr;
     }
   };
@@ -208,10 +207,9 @@
   public:
     /// Methods for support type inquiry through isa, cast, and dyn_cast:
     static bool classof(const SCEV *S) {
-      return S->getSCEVType() == scAddExpr ||
-             S->getSCEVType() == scMulExpr ||
-             S->getSCEVType() == scSMaxExpr ||
-             S->getSCEVType() == scUMaxExpr;
+      return S->getSCEVType() == scAddExpr || S->getSCEVType() == scMulExpr ||
+             S->getSCEVType() == scSMaxExpr || S->getSCEVType() == scUMaxExpr ||
+             S->getSCEVType() == scSMinExpr || S->getSCEVType() == scUMinExpr;
     }
 
     /// Set flags for a non-recurrence without clearing previously set flags.
@@ -366,18 +364,54 @@
     }
   };
 
-  /// This class represents a signed maximum selection.
-  class SCEVSMaxExpr : public SCEVCommutativeExpr {
+  /// This node is the base class min/max selections.
+  class SCEVMinMaxExpr : public SCEVCommutativeExpr {
     friend class ScalarEvolution;
 
-    SCEVSMaxExpr(const FoldingSetNodeIDRef ID,
-                 const SCEV *const *O, size_t N)
-      : SCEVCommutativeExpr(ID, scSMaxExpr, O, N) {
-      // Max never overflows.
+    static bool isMinMaxType(enum SCEVTypes T) {
+      return T == scSMaxExpr || T == scUMaxExpr || T == scSMinExpr ||
+             T == scUMinExpr;
+    }
+
+  protected:
+    /// Note: Constructing subclasses via this constructor is allowed
+    SCEVMinMaxExpr(const FoldingSetNodeIDRef ID, enum SCEVTypes T,
+                   const SCEV *const *O, size_t N)
+        : SCEVCommutativeExpr(ID, T, O, N) {
+      assert(isMinMaxType(T));
+      // Min and max never overflow
       setNoWrapFlags((NoWrapFlags)(FlagNUW | FlagNSW));
     }
 
   public:
+    static bool classof(const SCEV *S) {
+      return isMinMaxType(static_cast<SCEVTypes>(S->getSCEVType()));
+    }
+
+    static enum SCEVTypes negate(enum SCEVTypes T) {
+      switch (T) {
+      case scSMaxExpr:
+        return scSMinExpr;
+      case scSMinExpr:
+        return scSMaxExpr;
+      case scUMaxExpr:
+        return scUMinExpr;
+      case scUMinExpr:
+        return scUMaxExpr;
+      default:
+        llvm_unreachable("Not a min or max SCEV type!");
+      }
+    }
+  };
+
+  /// This class represents a signed maximum selection.
+  class SCEVSMaxExpr : public SCEVMinMaxExpr {
+    friend class ScalarEvolution;
+
+    SCEVSMaxExpr(const FoldingSetNodeIDRef ID, const SCEV *const *O, size_t N)
+        : SCEVMinMaxExpr(ID, scSMaxExpr, O, N) {}
+
+  public:
     /// Methods for support type inquiry through isa, cast, and dyn_cast:
     static bool classof(const SCEV *S) {
       return S->getSCEVType() == scSMaxExpr;
@@ -385,15 +419,11 @@
   };
 
   /// This class represents an unsigned maximum selection.
-  class SCEVUMaxExpr : public SCEVCommutativeExpr {
+  class SCEVUMaxExpr : public SCEVMinMaxExpr {
     friend class ScalarEvolution;
 
-    SCEVUMaxExpr(const FoldingSetNodeIDRef ID,
-                 const SCEV *const *O, size_t N)
-      : SCEVCommutativeExpr(ID, scUMaxExpr, O, N) {
-      // Max never overflows.
-      setNoWrapFlags((NoWrapFlags)(FlagNUW | FlagNSW));
-    }
+    SCEVUMaxExpr(const FoldingSetNodeIDRef ID, const SCEV *const *O, size_t N)
+        : SCEVMinMaxExpr(ID, scUMaxExpr, O, N) {}
 
   public:
     /// Methods for support type inquiry through isa, cast, and dyn_cast:
@@ -402,6 +432,34 @@
     }
   };
 
+  /// This class represents a signed minimum selection.
+  class SCEVSMinExpr : public SCEVMinMaxExpr {
+    friend class ScalarEvolution;
+
+    SCEVSMinExpr(const FoldingSetNodeIDRef ID, const SCEV *const *O, size_t N)
+        : SCEVMinMaxExpr(ID, scSMinExpr, O, N) {}
+
+  public:
+    /// Methods for support type inquiry through isa, cast, and dyn_cast:
+    static bool classof(const SCEV *S) {
+      return S->getSCEVType() == scSMinExpr;
+    }
+  };
+
+  /// This class represents an unsigned minimum selection.
+  class SCEVUMinExpr : public SCEVMinMaxExpr {
+    friend class ScalarEvolution;
+
+    SCEVUMinExpr(const FoldingSetNodeIDRef ID, const SCEV *const *O, size_t N)
+        : SCEVMinMaxExpr(ID, scUMinExpr, O, N) {}
+
+  public:
+    /// Methods for support type inquiry through isa, cast, and dyn_cast:
+    static bool classof(const SCEV *S) {
+      return S->getSCEVType() == scUMinExpr;
+    }
+  };
+
   /// This means that we are dealing with an entirely unknown SCEV
   /// value, and only represent it as its LLVM Value.  This is the
   /// "bottom" value for the analysis.
@@ -474,6 +532,10 @@
         return ((SC*)this)->visitSMaxExpr((const SCEVSMaxExpr*)S);
       case scUMaxExpr:
         return ((SC*)this)->visitUMaxExpr((const SCEVUMaxExpr*)S);
+      case scSMinExpr:
+        return ((SC *)this)->visitSMinExpr((const SCEVSMinExpr *)S);
+      case scUMinExpr:
+        return ((SC *)this)->visitUMinExpr((const SCEVUMinExpr *)S);
       case scUnknown:
         return ((SC*)this)->visitUnknown((const SCEVUnknown*)S);
       case scCouldNotCompute:
@@ -527,6 +589,8 @@
         case scMulExpr:
         case scSMaxExpr:
         case scUMaxExpr:
+        case scSMinExpr:
+        case scUMinExpr:
         case scAddRecExpr:
           for (const auto *Op : cast<SCEVNAryExpr>(S)->operands())
             push(Op);
@@ -689,6 +753,26 @@
       return !Changed ? Expr : SE.getUMaxExpr(Operands);
     }
 
+    const SCEV *visitSMinExpr(const SCEVSMinExpr *Expr) {
+      SmallVector<const SCEV *, 2> Operands;
+      bool Changed = false;
+      for (auto *Op : Expr->operands()) {
+        Operands.push_back(((SC *)this)->visit(Op));
+        Changed |= Op != Operands.back();
+      }
+      return !Changed ? Expr : SE.getSMinExpr(Operands);
+    }
+
+    const SCEV *visitUMinExpr(const SCEVUMinExpr *Expr) {
+      SmallVector<const SCEV *, 2> Operands;
+      bool Changed = false;
+      for (auto *Op : Expr->operands()) {
+        Operands.push_back(((SC *)this)->visit(Op));
+        Changed |= Op != Operands.back();
+      }
+      return !Changed ? Expr : SE.getUMinExpr(Operands);
+    }
+
     const SCEV *visitUnknown(const SCEVUnknown *Expr) {
       return Expr;
     }
diff --git a/linux-x64/clang/include/llvm/Analysis/ScopedNoAliasAA.h b/linux-x64/clang/include/llvm/Analysis/ScopedNoAliasAA.h
index 94c6021..dae733b 100644
--- a/linux-x64/clang/include/llvm/Analysis/ScopedNoAliasAA.h
+++ b/linux-x64/clang/include/llvm/Analysis/ScopedNoAliasAA.h
@@ -39,9 +39,12 @@
     return false;
   }
 
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
-  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc);
-  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2);
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                           AAQueryInfo &AAQI);
 
 private:
   bool mayAliasInScopes(const MDNode *Scopes, const MDNode *NoAlias) const;
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetFolder.h b/linux-x64/clang/include/llvm/Analysis/TargetFolder.h
index b8047a4..7ab6562 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetFolder.h
+++ b/linux-x64/clang/include/llvm/Analysis/TargetFolder.h
@@ -124,6 +124,10 @@
     return Fold(ConstantExpr::getNot(C));
   }
 
+  Constant *CreateUnOp(Instruction::UnaryOps Opc, Constant *C) const {
+    return Fold(ConstantExpr::get(Opc, C));
+  }
+
   //===--------------------------------------------------------------------===//
   // Memory Instructions
   //===--------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def b/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def
index f73c69e..afed404 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def
+++ b/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def
@@ -11,6 +11,15 @@
 // Which is defined depends on whether TLI_DEFINE_ENUM is defined or
 // TLI_DEFINE_STRING is defined. Only one should be defined at a time.
 
+// NOTE: The nofree attribute is added to Libfuncs which are not
+// listed as free or realloc functions in MemoryBuiltins.cpp
+//
+// When adding a function which frees memory include the LibFunc
+// in lib/Analysis/MemoryBuiltins.cpp "isLibFreeFunction".
+//
+// When adding a LibFunc which reallocates memory include the LibFunc
+// in lib/Analysis/MemoryBuiltins.cpp "AllocationFnData[]".
+
 #if !(defined(TLI_DEFINE_ENUM) || defined(TLI_DEFINE_STRING))
 #error "Must define TLI_DEFINE_ENUM or TLI_DEFINE_STRING for TLI .def."
 #elif defined(TLI_DEFINE_ENUM) && defined(TLI_DEFINE_STRING)
@@ -329,6 +338,10 @@
 /// long double __logl_finite(long double x);
 TLI_DEFINE_ENUM_INTERNAL(logl_finite)
 TLI_DEFINE_STRING_INTERNAL("__logl_finite")
+/// void *__memccpy_chk(void *dst, const void *src, int c, size_t n,
+///                     size_t dstsize)
+TLI_DEFINE_ENUM_INTERNAL(memccpy_chk)
+TLI_DEFINE_STRING_INTERNAL("__memccpy_chk")
 /// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size);
 TLI_DEFINE_ENUM_INTERNAL(memcpy_chk)
 TLI_DEFINE_STRING_INTERNAL("__memcpy_chk")
@@ -372,6 +385,23 @@
 /// float __sinpif(float x);
 TLI_DEFINE_ENUM_INTERNAL(sinpif)
 TLI_DEFINE_STRING_INTERNAL("__sinpif")
+/// int __small_fprintf(FILE *stream, const char *format, ...);
+TLI_DEFINE_ENUM_INTERNAL(small_fprintf)
+TLI_DEFINE_STRING_INTERNAL("__small_fprintf")
+/// int __small_printf(const char *format, ...);
+TLI_DEFINE_ENUM_INTERNAL(small_printf)
+TLI_DEFINE_STRING_INTERNAL("__small_printf")
+/// int __small_sprintf(char *str, const char *format, ...);
+TLI_DEFINE_ENUM_INTERNAL(small_sprintf)
+TLI_DEFINE_STRING_INTERNAL("__small_sprintf")
+/// int __snprintf_chk(char *s, size_t n, int flags, size_t slen,
+///                    const char *format, ...);
+TLI_DEFINE_ENUM_INTERNAL(snprintf_chk)
+TLI_DEFINE_STRING_INTERNAL("__snprintf_chk")
+/// int __sprintf_chk(char *str, int flags, size_t str_len,
+///                   const char *format, ...);
+TLI_DEFINE_ENUM_INTERNAL(sprintf_chk)
+TLI_DEFINE_STRING_INTERNAL("__sprintf_chk")
 /// double __sqrt_finite(double x);
 TLI_DEFINE_ENUM_INTERNAL(sqrt_finite)
 TLI_DEFINE_STRING_INTERNAL("__sqrt_finite")
@@ -387,12 +417,26 @@
 /// char *__stpncpy_chk(char *s1, const char *s2, size_t n, size_t s1size);
 TLI_DEFINE_ENUM_INTERNAL(stpncpy_chk)
 TLI_DEFINE_STRING_INTERNAL("__stpncpy_chk")
+/// char *__strcat_chk(char *s1, const char *s2, size_t s1size);
+TLI_DEFINE_ENUM_INTERNAL(strcat_chk)
+TLI_DEFINE_STRING_INTERNAL("__strcat_chk")
 /// char *__strcpy_chk(char *s1, const char *s2, size_t s1size);
 TLI_DEFINE_ENUM_INTERNAL(strcpy_chk)
 TLI_DEFINE_STRING_INTERNAL("__strcpy_chk")
 /// char * __strdup(const char *s);
 TLI_DEFINE_ENUM_INTERNAL(dunder_strdup)
 TLI_DEFINE_STRING_INTERNAL("__strdup")
+/// size_t __strlcat_chk(char *dst, const char *src, size_t size,
+///                      size_t dstsize);
+TLI_DEFINE_ENUM_INTERNAL(strlcat_chk)
+TLI_DEFINE_STRING_INTERNAL("__strlcat_chk")
+/// size_t __strlcpy_chk(char *dst, const char *src, size_t size,
+///                      size_t dstsize);
+TLI_DEFINE_ENUM_INTERNAL(strlcpy_chk)
+TLI_DEFINE_STRING_INTERNAL("__strlcpy_chk")
+/// char *strncat_chk(char *s1, const char *s2, size_t n, size_t s1size);
+TLI_DEFINE_ENUM_INTERNAL(strncat_chk)
+TLI_DEFINE_STRING_INTERNAL("__strncat_chk")
 /// char *__strncpy_chk(char *s1, const char *s2, size_t n, size_t s1size);
 TLI_DEFINE_ENUM_INTERNAL(strncpy_chk)
 TLI_DEFINE_STRING_INTERNAL("__strncpy_chk")
@@ -402,6 +446,14 @@
 /// char * __strtok_r(char *s, const char *delim, char **save_ptr);
 TLI_DEFINE_ENUM_INTERNAL(dunder_strtok_r)
 TLI_DEFINE_STRING_INTERNAL("__strtok_r")
+/// int __vsnprintf_chk(char *s, size_t n, int flags, size_t slen,
+///                     const char *format, va_list ap);
+TLI_DEFINE_ENUM_INTERNAL(vsnprintf_chk)
+TLI_DEFINE_STRING_INTERNAL("__vsnprintf_chk")
+/// int __vsprintf_chk(char *s, int flags, size_t slen, const char *format,
+///                    va_list ap);
+TLI_DEFINE_ENUM_INTERNAL(vsprintf_chk)
+TLI_DEFINE_STRING_INTERNAL("__vsprintf_chk")
 /// int abs(int j);
 TLI_DEFINE_ENUM_INTERNAL(abs)
 TLI_DEFINE_STRING_INTERNAL("abs")
@@ -1191,6 +1243,12 @@
 /// char *strdup(const char *s1);
 TLI_DEFINE_ENUM_INTERNAL(strdup)
 TLI_DEFINE_STRING_INTERNAL("strdup")
+/// size_t strlcat(char *dst, const char *src, size_t size);
+TLI_DEFINE_ENUM_INTERNAL(strlcat)
+TLI_DEFINE_STRING_INTERNAL("strlcat")
+/// size_t strlcpy(char *dst, const char *src, size_t size);
+TLI_DEFINE_ENUM_INTERNAL(strlcpy)
+TLI_DEFINE_STRING_INTERNAL("strlcpy")
 /// size_t strlen(const char *s);
 TLI_DEFINE_ENUM_INTERNAL(strlen)
 TLI_DEFINE_STRING_INTERNAL("strlen")
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.h b/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.h
index fc6811e..4b5200f 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.h
@@ -86,6 +86,7 @@
   enum VectorLibrary {
     NoLibrary,  // Don't use any vector library.
     Accelerate, // Use Accelerate framework.
+    MASSV,      // IBM MASS vector library.
     SVML        // Intel short vector math library.
   };
 
@@ -280,9 +281,9 @@
     case LibFunc_trunc:        case LibFunc_truncf:     case LibFunc_truncl:
     case LibFunc_log2:         case LibFunc_log2f:      case LibFunc_log2l:
     case LibFunc_exp2:         case LibFunc_exp2f:      case LibFunc_exp2l:
-    case LibFunc_memcmp:       case LibFunc_strcmp:     case LibFunc_strcpy:
-    case LibFunc_stpcpy:       case LibFunc_strlen:     case LibFunc_strnlen:
-    case LibFunc_memchr:       case LibFunc_mempcpy:
+    case LibFunc_memcmp:       case LibFunc_bcmp:       case LibFunc_strcmp:
+    case LibFunc_strcpy:       case LibFunc_stpcpy:     case LibFunc_strlen:
+    case LibFunc_strnlen:      case LibFunc_memchr:     case LibFunc_mempcpy:
       return true;
     }
     return false;
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h
index 60dbf67..af1a12d 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h
@@ -27,6 +27,10 @@
 #include "llvm/Pass.h"
 #include "llvm/Support/AtomicOrdering.h"
 #include "llvm/Support/DataTypes.h"
+#include "llvm/Analysis/LoopInfo.h"
+#include "llvm/Analysis/ScalarEvolution.h"
+#include "llvm/IR/Dominators.h"
+#include "llvm/Analysis/AssumptionCache.h"
 #include <functional>
 
 namespace llvm {
@@ -35,6 +39,8 @@
 enum ID : unsigned;
 }
 
+class AssumptionCache;
+class BranchInst;
 class Function;
 class GlobalValue;
 class IntrinsicInst;
@@ -44,6 +50,7 @@
 class ScalarEvolution;
 class StoreInst;
 class SwitchInst;
+class TargetLibraryInfo;
 class Type;
 class User;
 class Value;
@@ -72,6 +79,30 @@
   }
 };
 
+/// Attributes of a target dependent hardware loop.
+struct HardwareLoopInfo {
+  HardwareLoopInfo() = delete;
+  HardwareLoopInfo(Loop *L) : L(L) {}
+  Loop *L = nullptr;
+  BasicBlock *ExitBlock = nullptr;
+  BranchInst *ExitBranch = nullptr;
+  const SCEV *ExitCount = nullptr;
+  IntegerType *CountType = nullptr;
+  Value *LoopDecrement = nullptr; // Decrement the loop counter by this
+                                  // value in every iteration.
+  bool IsNestingLegal = false;    // Can a hardware loop be a parent to
+                                  // another hardware loop?
+  bool CounterInReg = false;      // Should loop counter be updated in
+                                  // the loop via a phi?
+  bool PerformEntryTest = false;  // Generate the intrinsic which also performs
+                                  // icmp ne zero on the loop counter value and
+                                  // produces an i1 to guard the loop entry.
+  bool isHardwareLoopCandidate(ScalarEvolution &SE, LoopInfo &LI,
+                               DominatorTree &DT, bool ForceNestedLoop = false,
+                               bool ForceHardwareLoopPHI = false);
+  bool canAnalyze(LoopInfo &LI);
+};
+
 /// This pass provides access to the codegen interfaces that are needed
 /// for IR-level transformations.
 class TargetTransformInfo {
@@ -80,7 +111,7 @@
   /// API below.
   ///
   /// This is used by targets to construct a TTI wrapping their target-specific
-  /// implementaion that encodes appropriate costs for their target.
+  /// implementation that encodes appropriate costs for their target.
   template <typename T> TargetTransformInfo(T Impl);
 
   /// Construct a baseline TTI object using a minimal implementation of
@@ -208,18 +239,21 @@
   /// This is the most basic query for estimating call cost: it only knows the
   /// function type and (potentially) the number of arguments at the call site.
   /// The latter is only interesting for varargs function types.
-  int getCallCost(FunctionType *FTy, int NumArgs = -1) const;
+  int getCallCost(FunctionType *FTy, int NumArgs = -1,
+                  const User *U = nullptr) const;
 
   /// Estimate the cost of calling a specific function when lowered.
   ///
   /// This overload adds the ability to reason about the particular function
   /// being called in the event it is a library call with special lowering.
-  int getCallCost(const Function *F, int NumArgs = -1) const;
+  int getCallCost(const Function *F, int NumArgs = -1,
+                  const User *U = nullptr) const;
 
   /// Estimate the cost of calling a specific function when lowered.
   ///
   /// This overload allows specifying a set of candidate argument values.
-  int getCallCost(const Function *F, ArrayRef<const Value *> Arguments) const;
+  int getCallCost(const Function *F, ArrayRef<const Value *> Arguments,
+                  const User *U = nullptr) const;
 
   /// \returns A value by which our inlining threshold should be multiplied.
   /// This is primarily used to bump up the inlining threshold wholesale on
@@ -233,13 +267,19 @@
   ///
   /// Mirrors the \c getCallCost method but uses an intrinsic identifier.
   int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                       ArrayRef<Type *> ParamTys) const;
+                       ArrayRef<Type *> ParamTys,
+                       const User *U = nullptr) const;
 
   /// Estimate the cost of an intrinsic when lowered.
   ///
   /// Mirrors the \c getCallCost method but uses an intrinsic identifier.
   int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                       ArrayRef<const Value *> Arguments) const;
+                       ArrayRef<const Value *> Arguments,
+                       const User *U = nullptr) const;
+
+  /// \return the expected cost of a memcpy, which could e.g. depend on the
+  /// source/destination type and alignment and the number of bytes copied.
+  int getMemcpyCost(const Instruction *I) const;
 
   /// \return The estimated number of case clusters when lowering \p 'SI'.
   /// \p JTSize Set a jump table size only when \p SI is suitable for a jump
@@ -295,7 +335,7 @@
 
   // Returns true for the target specific
   // set of operations which produce uniform result
-  // even taking non-unform arguments
+  // even taking non-uniform arguments
   bool isAlwaysUniform(const Value *V) const;
 
   /// Returns the address space ID for a target's 'flat' address space. Note
@@ -436,6 +476,13 @@
   void getUnrollingPreferences(Loop *L, ScalarEvolution &,
                                UnrollingPreferences &UP) const;
 
+  /// Query the target whether it would be profitable to convert the given loop
+  /// into a hardware loop.
+  bool isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
+                                AssumptionCache &AC,
+                                TargetLibraryInfo *LibInfo,
+                                HardwareLoopInfo &HWLoopInfo) const;
+
   /// @}
 
   /// \name Scalar Target Information
@@ -482,6 +529,12 @@
   /// calculation for the instructions in a loop.
   bool canMacroFuseCmp() const;
 
+  /// Return true if the target can save a compare for loop count, for example
+  /// hardware loop saves a compare.
+  bool canSaveCmp(Loop *L, BranchInst **BI, ScalarEvolution *SE, LoopInfo *LI,
+                  DominatorTree *DT, AssumptionCache *AC,
+                  TargetLibraryInfo *LibInfo) const;
+
   /// \return True is LSR should make efforts to create/preserve post-inc
   /// addressing mode expressions.
   bool shouldFavorPostInc() const;
@@ -490,17 +543,26 @@
   /// modes that operate across loop iterations.
   bool shouldFavorBackedgeIndex(const Loop *L) const;
 
-  /// Return true if the target supports masked load/store
-  /// AVX2 and AVX-512 targets allow masks for consecutive load and store
+  /// Return true if the target supports masked load.
   bool isLegalMaskedStore(Type *DataType) const;
+  /// Return true if the target supports masked store.
   bool isLegalMaskedLoad(Type *DataType) const;
 
-  /// Return true if the target supports masked gather/scatter
-  /// AVX-512 fully supports gather and scatter for vectors with 32 and 64
-  /// bits scalar type.
+  /// Return true if the target supports nontemporal store.
+  bool isLegalNTStore(Type *DataType, unsigned Alignment) const;
+  /// Return true if the target supports nontemporal load.
+  bool isLegalNTLoad(Type *DataType, unsigned Alignment) const;
+
+  /// Return true if the target supports masked scatter.
   bool isLegalMaskedScatter(Type *DataType) const;
+  /// Return true if the target supports masked gather.
   bool isLegalMaskedGather(Type *DataType) const;
 
+  /// Return true if the target supports masked compress store.
+  bool isLegalMaskedCompressStore(Type *DataType) const;
+  /// Return true if the target supports masked expand load.
+  bool isLegalMaskedExpandLoad(Type *DataType) const;
+
   /// Return true if the target has a unified operation to calculate division
   /// and remainder. If so, the additional implicit multiplication and
   /// subtraction required to calculate a remainder from division are free. This
@@ -579,17 +641,35 @@
   /// Don't restrict interleaved unrolling to small loops.
   bool enableAggressiveInterleaving(bool LoopHasReductions) const;
 
-  /// If not nullptr, enable inline expansion of memcmp. IsZeroCmp is
-  /// true if this is the expansion of memcmp(p1, p2, s) == 0.
+  /// Returns options for expansion of memcmp. IsZeroCmp is
+  // true if this is the expansion of memcmp(p1, p2, s) == 0.
   struct MemCmpExpansionOptions {
+    // Return true if memcmp expansion is enabled.
+    operator bool() const { return MaxNumLoads > 0; }
+
+    // Maximum number of load operations.
+    unsigned MaxNumLoads = 0;
+
     // The list of available load sizes (in bytes), sorted in decreasing order.
     SmallVector<unsigned, 8> LoadSizes;
+
+    // For memcmp expansion when the memcmp result is only compared equal or
+    // not-equal to 0, allow up to this number of load pairs per block. As an
+    // example, this may allow 'memcmp(a, b, 3) == 0' in a single block:
+    //   a0 = load2bytes &a[0]
+    //   b0 = load2bytes &b[0]
+    //   a2 = load1byte  &a[2]
+    //   b2 = load1byte  &b[2]
+    //   r  = cmp eq (a0 ^ b0 | a2 ^ b2), 0
+    unsigned NumLoadsPerBlock = 1;
+
     // Set to true to allow overlapping loads. For example, 7-byte compares can
     // be done with two 4-byte compares instead of 4+2+1-byte compares. This
     // requires all loads in LoadSizes to be doable in an unaligned way.
     bool AllowOverlappingLoads = false;
   };
-  const MemCmpExpansionOptions *enableMemCmpExpansion(bool IsZeroCmp) const;
+  MemCmpExpansionOptions enableMemCmpExpansion(bool OptSize,
+                                               bool IsZeroCmp) const;
 
   /// Enable matching of interleaved access groups.
   bool enableInterleavedAccessVectorization() const;
@@ -703,7 +783,7 @@
   bool shouldMaximizeVectorBandwidth(bool OptSize) const;
 
   /// \return The minimum vectorization factor for types of given element
-  /// bit width, or 0 if there is no mimimum VF. The returned value only
+  /// bit width, or 0 if there is no minimum VF. The returned value only
   /// applies when shouldMaximizeVectorBandwidth returns true.
   unsigned getMinimumVF(unsigned ElemWidth) const;
 
@@ -1008,6 +1088,11 @@
   /// \returns True if the target wants to expand the given reduction intrinsic
   /// into a shuffle sequence.
   bool shouldExpandReduction(const IntrinsicInst *II) const;
+
+  /// \returns the size cost of rematerializing a GlobalValue address relative
+  /// to a stack reload.
+  unsigned getGISelRematGlobalCost() const;
+
   /// @}
 
 private:
@@ -1038,15 +1123,17 @@
   virtual int getGEPCost(Type *PointeeType, const Value *Ptr,
                          ArrayRef<const Value *> Operands) = 0;
   virtual int getExtCost(const Instruction *I, const Value *Src) = 0;
-  virtual int getCallCost(FunctionType *FTy, int NumArgs) = 0;
-  virtual int getCallCost(const Function *F, int NumArgs) = 0;
+  virtual int getCallCost(FunctionType *FTy, int NumArgs, const User *U) = 0;
+  virtual int getCallCost(const Function *F, int NumArgs, const User *U) = 0;
   virtual int getCallCost(const Function *F,
-                          ArrayRef<const Value *> Arguments) = 0;
+                          ArrayRef<const Value *> Arguments, const User *U) = 0;
   virtual unsigned getInliningThresholdMultiplier() = 0;
   virtual int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                               ArrayRef<Type *> ParamTys) = 0;
+                               ArrayRef<Type *> ParamTys, const User *U) = 0;
   virtual int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                               ArrayRef<const Value *> Arguments) = 0;
+                               ArrayRef<const Value *> Arguments,
+                               const User *U) = 0;
+  virtual int getMemcpyCost(const Instruction *I) = 0;
   virtual unsigned getEstimatedNumberOfCaseClusters(const SwitchInst &SI,
                                                     unsigned &JTSize) = 0;
   virtual int
@@ -1058,6 +1145,10 @@
   virtual bool isLoweredToCall(const Function *F) = 0;
   virtual void getUnrollingPreferences(Loop *L, ScalarEvolution &,
                                        UnrollingPreferences &UP) = 0;
+  virtual bool isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
+                                        AssumptionCache &AC,
+                                        TargetLibraryInfo *LibInfo,
+                                        HardwareLoopInfo &HWLoopInfo) = 0;
   virtual bool isLegalAddImmediate(int64_t Imm) = 0;
   virtual bool isLegalICmpImmediate(int64_t Imm) = 0;
   virtual bool isLegalAddressingMode(Type *Ty, GlobalValue *BaseGV,
@@ -1068,12 +1159,19 @@
   virtual bool isLSRCostLess(TargetTransformInfo::LSRCost &C1,
                              TargetTransformInfo::LSRCost &C2) = 0;
   virtual bool canMacroFuseCmp() = 0;
+  virtual bool canSaveCmp(Loop *L, BranchInst **BI, ScalarEvolution *SE,
+                          LoopInfo *LI, DominatorTree *DT, AssumptionCache *AC,
+                          TargetLibraryInfo *LibInfo) = 0;
   virtual bool shouldFavorPostInc() const = 0;
   virtual bool shouldFavorBackedgeIndex(const Loop *L) const = 0;
   virtual bool isLegalMaskedStore(Type *DataType) = 0;
   virtual bool isLegalMaskedLoad(Type *DataType) = 0;
+  virtual bool isLegalNTStore(Type *DataType, unsigned Alignment) = 0;
+  virtual bool isLegalNTLoad(Type *DataType, unsigned Alignment) = 0;
   virtual bool isLegalMaskedScatter(Type *DataType) = 0;
   virtual bool isLegalMaskedGather(Type *DataType) = 0;
+  virtual bool isLegalMaskedCompressStore(Type *DataType) = 0;
+  virtual bool isLegalMaskedExpandLoad(Type *DataType) = 0;
   virtual bool hasDivRemOp(Type *DataType, bool IsSigned) = 0;
   virtual bool hasVolatileVariant(Instruction *I, unsigned AddrSpace) = 0;
   virtual bool prefersVectorizedAddressing() = 0;
@@ -1096,8 +1194,8 @@
                                                     unsigned VF) = 0;
   virtual bool supportsEfficientVectorElementLoadStore() = 0;
   virtual bool enableAggressiveInterleaving(bool LoopHasReductions) = 0;
-  virtual const MemCmpExpansionOptions *enableMemCmpExpansion(
-      bool IsZeroCmp) const = 0;
+  virtual MemCmpExpansionOptions
+  enableMemCmpExpansion(bool OptSize, bool IsZeroCmp) const = 0;
   virtual bool enableInterleavedAccessVectorization() = 0;
   virtual bool enableMaskedInterleavedAccessVectorization() = 0;
   virtual bool isFPVectorizationPotentiallyUnsafe() = 0;
@@ -1214,6 +1312,7 @@
   virtual bool useReductionIntrinsic(unsigned Opcode, Type *Ty,
                                      ReductionFlags) const = 0;
   virtual bool shouldExpandReduction(const IntrinsicInst *II) const = 0;
+  virtual unsigned getGISelRematGlobalCost() const = 0;
   virtual int getInstructionLatency(const Instruction *I) = 0;
 };
 
@@ -1239,26 +1338,30 @@
   int getExtCost(const Instruction *I, const Value *Src) override {
     return Impl.getExtCost(I, Src);
   }
-  int getCallCost(FunctionType *FTy, int NumArgs) override {
-    return Impl.getCallCost(FTy, NumArgs);
+  int getCallCost(FunctionType *FTy, int NumArgs, const User *U) override {
+    return Impl.getCallCost(FTy, NumArgs, U);
   }
-  int getCallCost(const Function *F, int NumArgs) override {
-    return Impl.getCallCost(F, NumArgs);
+  int getCallCost(const Function *F, int NumArgs, const User *U) override {
+    return Impl.getCallCost(F, NumArgs, U);
   }
   int getCallCost(const Function *F,
-                  ArrayRef<const Value *> Arguments) override {
-    return Impl.getCallCost(F, Arguments);
+                  ArrayRef<const Value *> Arguments, const User *U) override {
+    return Impl.getCallCost(F, Arguments, U);
   }
   unsigned getInliningThresholdMultiplier() override {
     return Impl.getInliningThresholdMultiplier();
   }
   int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                       ArrayRef<Type *> ParamTys) override {
-    return Impl.getIntrinsicCost(IID, RetTy, ParamTys);
+                       ArrayRef<Type *> ParamTys, const User *U = nullptr) override {
+    return Impl.getIntrinsicCost(IID, RetTy, ParamTys, U);
   }
   int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                       ArrayRef<const Value *> Arguments) override {
-    return Impl.getIntrinsicCost(IID, RetTy, Arguments);
+                       ArrayRef<const Value *> Arguments,
+                       const User *U = nullptr) override {
+    return Impl.getIntrinsicCost(IID, RetTy, Arguments, U);
+  }
+  int getMemcpyCost(const Instruction *I) override {
+    return Impl.getMemcpyCost(I);
   }
   int getUserCost(const User *U, ArrayRef<const Value *> Operands) override {
     return Impl.getUserCost(U, Operands);
@@ -1283,6 +1386,12 @@
                                UnrollingPreferences &UP) override {
     return Impl.getUnrollingPreferences(L, SE, UP);
   }
+  bool isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
+                                AssumptionCache &AC,
+                                TargetLibraryInfo *LibInfo,
+                                HardwareLoopInfo &HWLoopInfo) override {
+    return Impl.isHardwareLoopProfitable(L, SE, AC, LibInfo, HWLoopInfo);
+  }
   bool isLegalAddImmediate(int64_t Imm) override {
     return Impl.isLegalAddImmediate(Imm);
   }
@@ -1303,6 +1412,12 @@
   bool canMacroFuseCmp() override {
     return Impl.canMacroFuseCmp();
   }
+  bool canSaveCmp(Loop *L, BranchInst **BI,
+                        ScalarEvolution *SE,
+                        LoopInfo *LI, DominatorTree *DT, AssumptionCache *AC,
+                        TargetLibraryInfo *LibInfo) override {
+    return Impl.canSaveCmp(L, BI, SE, LI, DT, AC, LibInfo);
+  }
   bool shouldFavorPostInc() const override {
     return Impl.shouldFavorPostInc();
   }
@@ -1315,12 +1430,24 @@
   bool isLegalMaskedLoad(Type *DataType) override {
     return Impl.isLegalMaskedLoad(DataType);
   }
+  bool isLegalNTStore(Type *DataType, unsigned Alignment) override {
+    return Impl.isLegalNTStore(DataType, Alignment);
+  }
+  bool isLegalNTLoad(Type *DataType, unsigned Alignment) override {
+    return Impl.isLegalNTLoad(DataType, Alignment);
+  }
   bool isLegalMaskedScatter(Type *DataType) override {
     return Impl.isLegalMaskedScatter(DataType);
   }
   bool isLegalMaskedGather(Type *DataType) override {
     return Impl.isLegalMaskedGather(DataType);
   }
+  bool isLegalMaskedCompressStore(Type *DataType) override {
+    return Impl.isLegalMaskedCompressStore(DataType);
+  }
+  bool isLegalMaskedExpandLoad(Type *DataType) override {
+    return Impl.isLegalMaskedExpandLoad(DataType);
+  }
   bool hasDivRemOp(Type *DataType, bool IsSigned) override {
     return Impl.hasDivRemOp(DataType, IsSigned);
   }
@@ -1375,9 +1502,9 @@
   bool enableAggressiveInterleaving(bool LoopHasReductions) override {
     return Impl.enableAggressiveInterleaving(LoopHasReductions);
   }
-  const MemCmpExpansionOptions *enableMemCmpExpansion(
-      bool IsZeroCmp) const override {
-    return Impl.enableMemCmpExpansion(IsZeroCmp);
+  MemCmpExpansionOptions enableMemCmpExpansion(bool OptSize,
+                                               bool IsZeroCmp) const override {
+    return Impl.enableMemCmpExpansion(OptSize, IsZeroCmp);
   }
   bool enableInterleavedAccessVectorization() override {
     return Impl.enableInterleavedAccessVectorization();
@@ -1624,6 +1751,11 @@
   bool shouldExpandReduction(const IntrinsicInst *II) const override {
     return Impl.shouldExpandReduction(II);
   }
+
+  unsigned getGISelRematGlobalCost() const override {
+    return Impl.getGISelRematGlobalCost();
+  }
+
   int getInstructionLatency(const Instruction *I) override {
     return Impl.getInstructionLatency(I);
   }
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h
index 4705933..a9383e7 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -123,7 +123,7 @@
     return TTI::TCC_Basic;
   }
 
-  unsigned getCallCost(FunctionType *FTy, int NumArgs) {
+  unsigned getCallCost(FunctionType *FTy, int NumArgs, const User *U) {
     assert(FTy && "FunctionType must be provided to this routine.");
 
     // The target-independent implementation just measures the size of the
@@ -140,45 +140,8 @@
 
   unsigned getInliningThresholdMultiplier() { return 1; }
 
-  unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                            ArrayRef<Type *> ParamTys) {
-    switch (IID) {
-    default:
-      // Intrinsics rarely (if ever) have normal argument setup constraints.
-      // Model them as having a basic instruction cost.
-      // FIXME: This is wrong for libc intrinsics.
-      return TTI::TCC_Basic;
-
-    case Intrinsic::annotation:
-    case Intrinsic::assume:
-    case Intrinsic::sideeffect:
-    case Intrinsic::dbg_declare:
-    case Intrinsic::dbg_value:
-    case Intrinsic::dbg_label:
-    case Intrinsic::invariant_start:
-    case Intrinsic::invariant_end:
-    case Intrinsic::launder_invariant_group:
-    case Intrinsic::strip_invariant_group:
-    case Intrinsic::is_constant:
-    case Intrinsic::lifetime_start:
-    case Intrinsic::lifetime_end:
-    case Intrinsic::objectsize:
-    case Intrinsic::ptr_annotation:
-    case Intrinsic::var_annotation:
-    case Intrinsic::experimental_gc_result:
-    case Intrinsic::experimental_gc_relocate:
-    case Intrinsic::coro_alloc:
-    case Intrinsic::coro_begin:
-    case Intrinsic::coro_free:
-    case Intrinsic::coro_end:
-    case Intrinsic::coro_frame:
-    case Intrinsic::coro_size:
-    case Intrinsic::coro_suspend:
-    case Intrinsic::coro_param:
-    case Intrinsic::coro_subfn_addr:
-      // These intrinsics don't actually represent code after lowering.
-      return TTI::TCC_Free;
-    }
+  unsigned getMemcpyCost(const Instruction *I) {
+    return TTI::TCC_Expensive;
   }
 
   bool hasBranchDivergence() { return false; }
@@ -227,6 +190,13 @@
     return true;
   }
 
+  bool isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
+                                AssumptionCache &AC,
+                                TargetLibraryInfo *LibInfo,
+                                HardwareLoopInfo &HWLoopInfo) {
+    return false;
+  }
+
   void getUnrollingPreferences(Loop *, ScalarEvolution &,
                                TTI::UnrollingPreferences &) {}
 
@@ -251,6 +221,12 @@
 
   bool canMacroFuseCmp() { return false; }
 
+  bool canSaveCmp(Loop *L, BranchInst **BI, ScalarEvolution *SE, LoopInfo *LI,
+                  DominatorTree *DT, AssumptionCache *AC,
+                  TargetLibraryInfo *LibInfo) {
+    return false;
+  }
+
   bool shouldFavorPostInc() const { return false; }
 
   bool shouldFavorBackedgeIndex(const Loop *L) const { return false; }
@@ -259,10 +235,28 @@
 
   bool isLegalMaskedLoad(Type *DataType) { return false; }
 
+  bool isLegalNTStore(Type *DataType, unsigned Alignment) {
+    // By default, assume nontemporal memory stores are available for stores
+    // that are aligned and have a size that is a power of 2.
+    unsigned DataSize = DL.getTypeStoreSize(DataType);
+    return Alignment >= DataSize && isPowerOf2_32(DataSize);
+  }
+
+  bool isLegalNTLoad(Type *DataType, unsigned Alignment) {
+    // By default, assume nontemporal memory loads are available for loads that
+    // are aligned and have a size that is a power of 2.
+    unsigned DataSize = DL.getTypeStoreSize(DataType);
+    return Alignment >= DataSize && isPowerOf2_32(DataSize);
+  }
+
   bool isLegalMaskedScatter(Type *DataType) { return false; }
 
   bool isLegalMaskedGather(Type *DataType) { return false; }
 
+  bool isLegalMaskedCompressStore(Type *DataType) { return false; }
+
+  bool isLegalMaskedExpandLoad(Type *DataType) { return false; }
+
   bool hasDivRemOp(Type *DataType, bool IsSigned) { return false; }
 
   bool hasVolatileVariant(Instruction *I, unsigned AddrSpace) { return false; }
@@ -308,9 +302,9 @@
 
   bool enableAggressiveInterleaving(bool LoopHasReductions) { return false; }
 
-  const TTI::MemCmpExpansionOptions *enableMemCmpExpansion(
-      bool IsZeroCmp) const {
-    return nullptr;
+  TTI::MemCmpExpansionOptions enableMemCmpExpansion(bool OptSize,
+                                                    bool IsZeroCmp) const {
+    return {};
   }
 
   bool enableInterleavedAccessVectorization() { return false; }
@@ -584,6 +578,10 @@
     return true;
   }
 
+  unsigned getGISelRematGlobalCost() const {
+    return 1;
+  }
+
 protected:
   // Obtain the minimum required size to hold the value (without the sign)
   // In case of a vector it returns the min required size for one element.
@@ -680,7 +678,7 @@
 public:
   using BaseT::getCallCost;
 
-  unsigned getCallCost(const Function *F, int NumArgs) {
+  unsigned getCallCost(const Function *F, int NumArgs, const User *U) {
     assert(F && "A concrete function must be provided to this routine.");
 
     if (NumArgs < 0)
@@ -692,35 +690,34 @@
       FunctionType *FTy = F->getFunctionType();
       SmallVector<Type *, 8> ParamTys(FTy->param_begin(), FTy->param_end());
       return static_cast<T *>(this)
-          ->getIntrinsicCost(IID, FTy->getReturnType(), ParamTys);
+          ->getIntrinsicCost(IID, FTy->getReturnType(), ParamTys, U);
     }
 
     if (!static_cast<T *>(this)->isLoweredToCall(F))
       return TTI::TCC_Basic; // Give a basic cost if it will be lowered
                              // directly.
 
-    return static_cast<T *>(this)->getCallCost(F->getFunctionType(), NumArgs);
+    return static_cast<T *>(this)->getCallCost(F->getFunctionType(), NumArgs, U);
   }
 
-  unsigned getCallCost(const Function *F, ArrayRef<const Value *> Arguments) {
+  unsigned getCallCost(const Function *F, ArrayRef<const Value *> Arguments,
+                       const User *U) {
     // Simply delegate to generic handling of the call.
     // FIXME: We should use instsimplify or something else to catch calls which
     // will constant fold with these arguments.
-    return static_cast<T *>(this)->getCallCost(F, Arguments.size());
+    return static_cast<T *>(this)->getCallCost(F, Arguments.size(), U);
   }
 
   using BaseT::getGEPCost;
 
   int getGEPCost(Type *PointeeType, const Value *Ptr,
                  ArrayRef<const Value *> Operands) {
-    const GlobalValue *BaseGV = nullptr;
-    if (Ptr != nullptr) {
-      // TODO: will remove this when pointers have an opaque type.
-      assert(Ptr->getType()->getScalarType()->getPointerElementType() ==
-                 PointeeType &&
-             "explicit pointee type doesn't match operand's pointee type");
-      BaseGV = dyn_cast<GlobalValue>(Ptr->stripPointerCasts());
-    }
+    assert(PointeeType && Ptr && "can't get GEPCost of nullptr");
+    // TODO: will remove this when pointers have an opaque type.
+    assert(Ptr->getType()->getScalarType()->getPointerElementType() ==
+               PointeeType &&
+           "explicit pointee type doesn't match operand's pointee type");
+    auto *BaseGV = dyn_cast<GlobalValue>(Ptr->stripPointerCasts());
     bool HasBaseReg = (BaseGV == nullptr);
 
     auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());
@@ -763,21 +760,60 @@
       }
     }
 
-    // Assumes the address space is 0 when Ptr is nullptr.
-    unsigned AS =
-        (Ptr == nullptr ? 0 : Ptr->getType()->getPointerAddressSpace());
-
     if (static_cast<T *>(this)->isLegalAddressingMode(
             TargetType, const_cast<GlobalValue *>(BaseGV),
-            BaseOffset.sextOrTrunc(64).getSExtValue(), HasBaseReg, Scale, AS))
+            BaseOffset.sextOrTrunc(64).getSExtValue(), HasBaseReg, Scale,
+            Ptr->getType()->getPointerAddressSpace()))
       return TTI::TCC_Free;
     return TTI::TCC_Basic;
   }
 
-  using BaseT::getIntrinsicCost;
+  unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
+                            ArrayRef<Type *> ParamTys, const User *U) {
+    switch (IID) {
+    default:
+      // Intrinsics rarely (if ever) have normal argument setup constraints.
+      // Model them as having a basic instruction cost.
+      return TTI::TCC_Basic;
+
+    // TODO: other libc intrinsics.
+    case Intrinsic::memcpy:
+      return static_cast<T *>(this)->getMemcpyCost(dyn_cast<Instruction>(U));
+
+    case Intrinsic::annotation:
+    case Intrinsic::assume:
+    case Intrinsic::sideeffect:
+    case Intrinsic::dbg_declare:
+    case Intrinsic::dbg_value:
+    case Intrinsic::dbg_label:
+    case Intrinsic::invariant_start:
+    case Intrinsic::invariant_end:
+    case Intrinsic::launder_invariant_group:
+    case Intrinsic::strip_invariant_group:
+    case Intrinsic::is_constant:
+    case Intrinsic::lifetime_start:
+    case Intrinsic::lifetime_end:
+    case Intrinsic::objectsize:
+    case Intrinsic::ptr_annotation:
+    case Intrinsic::var_annotation:
+    case Intrinsic::experimental_gc_result:
+    case Intrinsic::experimental_gc_relocate:
+    case Intrinsic::coro_alloc:
+    case Intrinsic::coro_begin:
+    case Intrinsic::coro_free:
+    case Intrinsic::coro_end:
+    case Intrinsic::coro_frame:
+    case Intrinsic::coro_size:
+    case Intrinsic::coro_suspend:
+    case Intrinsic::coro_param:
+    case Intrinsic::coro_subfn_addr:
+      // These intrinsics don't actually represent code after lowering.
+      return TTI::TCC_Free;
+    }
+  }
 
   unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                            ArrayRef<const Value *> Arguments) {
+                            ArrayRef<const Value *> Arguments, const User *U) {
     // Delegate to the generic intrinsic handling code. This mostly provides an
     // opportunity for targets to (for example) special case the cost of
     // certain intrinsics based on constants used as arguments.
@@ -785,7 +821,7 @@
     ParamTys.reserve(Arguments.size());
     for (unsigned Idx = 0, Size = Arguments.size(); Idx != Size; ++Idx)
       ParamTys.push_back(Arguments[Idx]->getType());
-    return static_cast<T *>(this)->getIntrinsicCost(IID, RetTy, ParamTys);
+    return static_cast<T *>(this)->getIntrinsicCost(IID, RetTy, ParamTys, U);
   }
 
   unsigned getUserCost(const User *U, ArrayRef<const Value *> Operands) {
@@ -809,22 +845,18 @@
         // Just use the called value type.
         Type *FTy = CS.getCalledValue()->getType()->getPointerElementType();
         return static_cast<T *>(this)
-            ->getCallCost(cast<FunctionType>(FTy), CS.arg_size());
+            ->getCallCost(cast<FunctionType>(FTy), CS.arg_size(), U);
       }
 
       SmallVector<const Value *, 8> Arguments(CS.arg_begin(), CS.arg_end());
-      return static_cast<T *>(this)->getCallCost(F, Arguments);
+      return static_cast<T *>(this)->getCallCost(F, Arguments, U);
     }
 
-    if (const CastInst *CI = dyn_cast<CastInst>(U)) {
-      // Result of a cmp instruction is often extended (to be used by other
-      // cmp instructions, logical or return instructions). These are usually
-      // nop on most sane targets.
-      if (isa<CmpInst>(CI->getOperand(0)))
-        return TTI::TCC_Free;
-      if (isa<SExtInst>(CI) || isa<ZExtInst>(CI) || isa<FPExtInst>(CI))
-        return static_cast<T *>(this)->getExtCost(CI, Operands.back());
-    }
+    if (isa<SExtInst>(U) || isa<ZExtInst>(U) || isa<FPExtInst>(U))
+      // The old behaviour of generally treating extensions of icmp to be free
+      // has been removed. A target that needs it should override getUserCost().
+      return static_cast<T *>(this)->getExtCost(cast<Instruction>(U),
+                                                Operands.back());
 
     return static_cast<T *>(this)->getOperationCost(
         Operator::getOpcode(U), U->getType(),
diff --git a/linux-x64/clang/include/llvm/Analysis/TypeBasedAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/TypeBasedAliasAnalysis.h
index 1235005..344f268 100644
--- a/linux-x64/clang/include/llvm/Analysis/TypeBasedAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/TypeBasedAliasAnalysis.h
@@ -40,12 +40,16 @@
     return false;
   }
 
-  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
-  bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal);
+  AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
+                    AAQueryInfo &AAQI);
+  bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
+                              bool OrLocal);
   FunctionModRefBehavior getModRefBehavior(const CallBase *Call);
   FunctionModRefBehavior getModRefBehavior(const Function *F);
-  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc);
-  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2);
+  ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
+                           AAQueryInfo &AAQI);
+  ModRefInfo getModRefInfo(const CallBase *Call1, const CallBase *Call2,
+                           AAQueryInfo &AAQI);
 
 private:
   bool Aliases(const MDNode *A, const MDNode *B) const;
diff --git a/linux-x64/clang/include/llvm/Analysis/ValueTracking.h b/linux-x64/clang/include/llvm/Analysis/ValueTracking.h
index b3c07b1..f14c2a4 100644
--- a/linux-x64/clang/include/llvm/Analysis/ValueTracking.h
+++ b/linux-x64/clang/include/llvm/Analysis/ValueTracking.h
@@ -16,6 +16,7 @@
 
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallSet.h"
 #include "llvm/IR/CallSite.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/Instruction.h"
@@ -32,6 +33,7 @@
 class DominatorTree;
 class GEPOperator;
 class IntrinsicInst;
+class WithOverflowInst;
 struct KnownBits;
 class Loop;
 class LoopInfo;
@@ -350,7 +352,8 @@
   /// Since A[i] and A[i-1] are independent pointers, getUnderlyingObjects
   /// should not assume that Curr and Prev share the same underlying object thus
   /// it shouldn't look through the phi above.
-  void GetUnderlyingObjects(Value *V, SmallVectorImpl<Value *> &Objects,
+  void GetUnderlyingObjects(const Value *V,
+                            SmallVectorImpl<const Value *> &Objects,
                             const DataLayout &DL, LoopInfo *LI = nullptr,
                             unsigned MaxLookup = 6);
 
@@ -410,7 +413,16 @@
   bool isValidAssumeForContext(const Instruction *I, const Instruction *CxtI,
                                const DominatorTree *DT = nullptr);
 
-  enum class OverflowResult { AlwaysOverflows, MayOverflow, NeverOverflows };
+  enum class OverflowResult {
+    /// Always overflows in the direction of signed/unsigned min value.
+    AlwaysOverflowsLow,
+    /// Always overflows in the direction of signed/unsigned max value.
+    AlwaysOverflowsHigh,
+    /// May or may not overflow.
+    MayOverflow,
+    /// Never overflows.
+    NeverOverflows,
+  };
 
   OverflowResult computeOverflowForUnsignedMul(const Value *LHS,
                                                const Value *RHS,
@@ -454,12 +466,17 @@
                                              const Instruction *CxtI,
                                              const DominatorTree *DT);
 
-  /// Returns true if the arithmetic part of the \p II 's result is
+  /// Returns true if the arithmetic part of the \p WO 's result is
   /// used only along the paths control dependent on the computation
-  /// not overflowing, \p II being an <op>.with.overflow intrinsic.
-  bool isOverflowIntrinsicNoWrap(const IntrinsicInst *II,
+  /// not overflowing, \p WO being an <op>.with.overflow intrinsic.
+  bool isOverflowIntrinsicNoWrap(const WithOverflowInst *WO,
                                  const DominatorTree &DT);
 
+
+  /// Determine the possible constant range of an integer or vector of integer
+  /// value. This is intended as a cheap, non-recursive check.
+  ConstantRange computeConstantRange(const Value *V, bool UseInstrInfo = true);
+
   /// Return true if this function can prove that the instruction I will
   /// always transfer execution to one of its successors (including the next
   /// instruction that follows within a basic block). E.g. this is not
@@ -505,6 +522,12 @@
   /// value (all bits poison).
   const Value *getGuaranteedNonFullPoisonOp(const Instruction *I);
 
+  /// Return true if the given instruction must trigger undefined behavior.
+  /// when I is executed with any operands which appear in KnownPoison holding
+  /// a full-poison value at the point of execution.
+  bool mustTriggerUB(const Instruction *I,
+                     const SmallSet<const Value *, 16>& KnownPoison);
+
   /// Return true if this function can prove that if PoisonI is executed
   /// and yields a full-poison value (all bits poison), then that will
   /// trigger undefined behavior.
@@ -583,6 +606,12 @@
     return Result;
   }
 
+  /// Determine the pattern that a select with the given compare as its
+  /// predicate and given values as its true/false operands would match.
+  SelectPatternResult matchDecomposedSelectPattern(
+      CmpInst *CmpI, Value *TrueVal, Value *FalseVal, Value *&LHS, Value *&RHS,
+      Instruction::CastOps *CastOp = nullptr, unsigned Depth = 0);
+
   /// Return the canonical comparison predicate for the specified
   /// minimum/maximum flavor.
   CmpInst::Predicate getMinMaxPred(SelectPatternFlavor SPF,
diff --git a/linux-x64/clang/include/llvm/Analysis/VecFuncs.def b/linux-x64/clang/include/llvm/Analysis/VecFuncs.def
new file mode 100644
index 0000000..4c92062
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Analysis/VecFuncs.def
@@ -0,0 +1,250 @@
+//===-- VecFuncs.def - Library information -------------*- C++ -*-----------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// This .def file will create mappings from scalar math functions to vector
+// functions along with their vectorization factor. The current support includes
+// such mappings for Accelerate framework, MASS vector library, and SVML library. 
+
+#if !(defined(TLI_DEFINE_VECFUNC))
+#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF) {SCAL, VEC, VF},
+#endif 
+
+#if defined(TLI_DEFINE_ACCELERATE_VECFUNCS)
+// Accelerate framework's Vector Functions
+
+// Floating-Point Arithmetic and Auxiliary Functions
+TLI_DEFINE_VECFUNC("ceilf", "vceilf", 4)
+TLI_DEFINE_VECFUNC("fabsf", "vfabsf", 4)
+TLI_DEFINE_VECFUNC("llvm.fabs.f32", "vfabsf", 4)
+TLI_DEFINE_VECFUNC("floorf", "vfloorf", 4)
+TLI_DEFINE_VECFUNC("sqrtf", "vsqrtf", 4)
+TLI_DEFINE_VECFUNC("llvm.sqrt.f32", "vsqrtf", 4)
+
+// Exponential and Logarithmic Functions
+TLI_DEFINE_VECFUNC("expf", "vexpf", 4)
+TLI_DEFINE_VECFUNC("llvm.exp.f32", "vexpf", 4)
+TLI_DEFINE_VECFUNC("expm1f", "vexpm1f", 4)
+TLI_DEFINE_VECFUNC("logf", "vlogf", 4)
+TLI_DEFINE_VECFUNC("llvm.log.f32", "vlogf", 4)
+TLI_DEFINE_VECFUNC("log1pf", "vlog1pf", 4)
+TLI_DEFINE_VECFUNC("log10f", "vlog10f", 4)
+TLI_DEFINE_VECFUNC("llvm.log10.f32", "vlog10f", 4)
+TLI_DEFINE_VECFUNC("logbf", "vlogbf", 4)
+
+// Trigonometric Functions
+TLI_DEFINE_VECFUNC("sinf", "vsinf", 4)
+TLI_DEFINE_VECFUNC("llvm.sin.f32", "vsinf", 4)
+TLI_DEFINE_VECFUNC("cosf", "vcosf", 4)
+TLI_DEFINE_VECFUNC("llvm.cos.f32", "vcosf", 4)
+TLI_DEFINE_VECFUNC("tanf", "vtanf", 4)
+TLI_DEFINE_VECFUNC("asinf", "vasinf", 4)
+TLI_DEFINE_VECFUNC("acosf", "vacosf", 4)
+TLI_DEFINE_VECFUNC("atanf", "vatanf", 4)
+
+// Hyperbolic Functions
+TLI_DEFINE_VECFUNC("sinhf", "vsinhf", 4)
+TLI_DEFINE_VECFUNC("coshf", "vcoshf", 4)
+TLI_DEFINE_VECFUNC("tanhf", "vtanhf", 4)
+TLI_DEFINE_VECFUNC("asinhf", "vasinhf", 4)
+TLI_DEFINE_VECFUNC("acoshf", "vacoshf", 4)
+TLI_DEFINE_VECFUNC("atanhf", "vatanhf", 4)
+
+
+#elif defined(TLI_DEFINE_MASSV_VECFUNCS)
+// IBM MASS library's vector Functions
+
+// Floating-Point Arithmetic and Auxiliary Functions
+TLI_DEFINE_VECFUNC("cbrt", "__cbrtd2_massv", 2)
+TLI_DEFINE_VECFUNC("cbrtf", "__cbrtf4_massv", 4)
+TLI_DEFINE_VECFUNC("pow", "__powd2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.pow.f64", "__powd2_massv", 2)
+TLI_DEFINE_VECFUNC("powf", "__powf4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.pow.f32", "__powf4_massv", 4)
+TLI_DEFINE_VECFUNC("sqrt", "__sqrtd2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.sqrt.f64", "__sqrtd2_massv", 2)
+TLI_DEFINE_VECFUNC("sqrtf", "__sqrtf4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.sqrt.f32", "__sqrtf4_massv", 4)
+
+// Exponential and Logarithmic Functions
+TLI_DEFINE_VECFUNC("exp", "__expd2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.exp.f64", "__expd2_massv", 2)
+TLI_DEFINE_VECFUNC("expf", "__expf4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.exp.f32", "__expf4_massv", 4)
+TLI_DEFINE_VECFUNC("exp2", "__exp2d2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.exp2.f64", "__exp2d2_massv", 2)
+TLI_DEFINE_VECFUNC("exp2f", "__exp2f4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.exp2.f32", "__exp2f4_massv", 4)
+TLI_DEFINE_VECFUNC("expm1", "__expm1d2_massv", 2)
+TLI_DEFINE_VECFUNC("expm1f", "__expm1f4_massv", 4)
+TLI_DEFINE_VECFUNC("log", "__logd2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.log.f64", "__logd2_massv", 2)
+TLI_DEFINE_VECFUNC("logf", "__logf4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.log.f32", "__logf4_massv", 4)
+TLI_DEFINE_VECFUNC("log1p", "__log1pd2_massv", 2)
+TLI_DEFINE_VECFUNC("log1pf", "__log1pf4_massv", 4)
+TLI_DEFINE_VECFUNC("log10", "__log10d2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.log10.f64", "__log10d2_massv", 2)
+TLI_DEFINE_VECFUNC("log10f", "__log10f4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.log10.f32", "__log10f4_massv", 4)
+TLI_DEFINE_VECFUNC("log2", "__log2d2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.log2.f64", "__log2d2_massv", 2)
+TLI_DEFINE_VECFUNC("log2f", "__log2f4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.log2.f32", "__log2f4_massv", 4)
+
+// Trigonometric Functions
+TLI_DEFINE_VECFUNC("sin", "__sind2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.sin.f64", "__sind2_massv", 2)
+TLI_DEFINE_VECFUNC("sinf", "__sinf4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.sin.f32", "__sinf4_massv", 4)
+TLI_DEFINE_VECFUNC("cos", "__cosd2_massv", 2)
+TLI_DEFINE_VECFUNC("llvm.cos.f64", "__cosd2_massv", 2)
+TLI_DEFINE_VECFUNC("cosf", "__cosf4_massv", 4)
+TLI_DEFINE_VECFUNC("llvm.cos.f32", "__cosf4_massv", 4)
+TLI_DEFINE_VECFUNC("tan", "__tand2_massv", 2)
+TLI_DEFINE_VECFUNC("tanf", "__tanf4_massv", 4)
+TLI_DEFINE_VECFUNC("asin", "__asind2_massv", 2)
+TLI_DEFINE_VECFUNC("asinf", "__asinf4_massv", 4)
+TLI_DEFINE_VECFUNC("acos", "__acosd2_massv", 2)
+TLI_DEFINE_VECFUNC("acosf", "__acosf4_massv", 4)
+TLI_DEFINE_VECFUNC("atan", "__atand2_massv", 2)
+TLI_DEFINE_VECFUNC("atanf", "__atanf4_massv", 4)
+TLI_DEFINE_VECFUNC("atan2", "__atan2d2_massv", 2)
+TLI_DEFINE_VECFUNC("atan2f", "__atan2f4_massv", 4)
+
+// Hyperbolic Functions
+TLI_DEFINE_VECFUNC("sinh", "__sinhd2_massv", 2)
+TLI_DEFINE_VECFUNC("sinhf", "__sinhf4_massv", 4)
+TLI_DEFINE_VECFUNC("cosh", "__coshd2_massv", 2)
+TLI_DEFINE_VECFUNC("coshf", "__coshf4_massv", 4)
+TLI_DEFINE_VECFUNC("tanh", "__tanhd2_massv", 2)
+TLI_DEFINE_VECFUNC("tanhf", "__tanhf4_massv", 4)
+TLI_DEFINE_VECFUNC("asinh", "__asinhd2_massv", 2)
+TLI_DEFINE_VECFUNC("asinhf", "__asinhf4_massv", 4)
+TLI_DEFINE_VECFUNC("acosh", "__acoshd2_massv", 2)
+TLI_DEFINE_VECFUNC("acoshf", "__acoshf4_massv", 4)
+TLI_DEFINE_VECFUNC("atanh", "__atanhd2_massv", 2)
+TLI_DEFINE_VECFUNC("atanhf", "__atanhf4_massv", 4)
+
+
+#elif defined(TLI_DEFINE_SVML_VECFUNCS)
+// Intel SVM library's Vector Functions
+
+TLI_DEFINE_VECFUNC("sin", "__svml_sin2", 2)
+TLI_DEFINE_VECFUNC("sin", "__svml_sin4", 4)
+TLI_DEFINE_VECFUNC("sin", "__svml_sin8", 8)
+
+TLI_DEFINE_VECFUNC("sinf", "__svml_sinf4", 4)
+TLI_DEFINE_VECFUNC("sinf", "__svml_sinf8", 8)
+TLI_DEFINE_VECFUNC("sinf", "__svml_sinf16", 16)
+
+TLI_DEFINE_VECFUNC("llvm.sin.f64", "__svml_sin2", 2)
+TLI_DEFINE_VECFUNC("llvm.sin.f64", "__svml_sin4", 4)
+TLI_DEFINE_VECFUNC("llvm.sin.f64", "__svml_sin8", 8)
+
+TLI_DEFINE_VECFUNC("llvm.sin.f32", "__svml_sinf4", 4)
+TLI_DEFINE_VECFUNC("llvm.sin.f32", "__svml_sinf8", 8)
+TLI_DEFINE_VECFUNC("llvm.sin.f32", "__svml_sinf16", 16)
+
+TLI_DEFINE_VECFUNC("cos", "__svml_cos2", 2)
+TLI_DEFINE_VECFUNC("cos", "__svml_cos4", 4)
+TLI_DEFINE_VECFUNC("cos", "__svml_cos8", 8)
+
+TLI_DEFINE_VECFUNC("cosf", "__svml_cosf4", 4)
+TLI_DEFINE_VECFUNC("cosf", "__svml_cosf8", 8)
+TLI_DEFINE_VECFUNC("cosf", "__svml_cosf16", 16)
+
+TLI_DEFINE_VECFUNC("llvm.cos.f64", "__svml_cos2", 2)
+TLI_DEFINE_VECFUNC("llvm.cos.f64", "__svml_cos4", 4)
+TLI_DEFINE_VECFUNC("llvm.cos.f64", "__svml_cos8", 8)
+
+TLI_DEFINE_VECFUNC("llvm.cos.f32", "__svml_cosf4", 4)
+TLI_DEFINE_VECFUNC("llvm.cos.f32", "__svml_cosf8", 8)
+TLI_DEFINE_VECFUNC("llvm.cos.f32", "__svml_cosf16", 16)
+
+TLI_DEFINE_VECFUNC("pow", "__svml_pow2", 2)
+TLI_DEFINE_VECFUNC("pow", "__svml_pow4", 4)
+TLI_DEFINE_VECFUNC("pow", "__svml_pow8", 8)
+
+TLI_DEFINE_VECFUNC("powf", "__svml_powf4", 4)
+TLI_DEFINE_VECFUNC("powf", "__svml_powf8", 8)
+TLI_DEFINE_VECFUNC("powf", "__svml_powf16", 16)
+
+TLI_DEFINE_VECFUNC("__pow_finite", "__svml_pow2", 2)
+TLI_DEFINE_VECFUNC("__pow_finite", "__svml_pow4", 4)
+TLI_DEFINE_VECFUNC("__pow_finite", "__svml_pow8", 8)
+
+TLI_DEFINE_VECFUNC("__powf_finite", "__svml_powf4", 4)
+TLI_DEFINE_VECFUNC("__powf_finite", "__svml_powf8", 8)
+TLI_DEFINE_VECFUNC("__powf_finite", "__svml_powf16", 16)
+
+TLI_DEFINE_VECFUNC("llvm.pow.f64", "__svml_pow2", 2)
+TLI_DEFINE_VECFUNC("llvm.pow.f64", "__svml_pow4", 4)
+TLI_DEFINE_VECFUNC("llvm.pow.f64", "__svml_pow8", 8)
+
+TLI_DEFINE_VECFUNC("llvm.pow.f32", "__svml_powf4", 4)
+TLI_DEFINE_VECFUNC("llvm.pow.f32", "__svml_powf8", 8)
+TLI_DEFINE_VECFUNC("llvm.pow.f32", "__svml_powf16", 16)
+
+TLI_DEFINE_VECFUNC("exp", "__svml_exp2", 2)
+TLI_DEFINE_VECFUNC("exp", "__svml_exp4", 4)
+TLI_DEFINE_VECFUNC("exp", "__svml_exp8", 8)
+
+TLI_DEFINE_VECFUNC("expf", "__svml_expf4", 4)
+TLI_DEFINE_VECFUNC("expf", "__svml_expf8", 8)
+TLI_DEFINE_VECFUNC("expf", "__svml_expf16", 16)
+
+TLI_DEFINE_VECFUNC("__exp_finite", "__svml_exp2", 2)
+TLI_DEFINE_VECFUNC("__exp_finite", "__svml_exp4", 4)
+TLI_DEFINE_VECFUNC("__exp_finite", "__svml_exp8", 8)
+
+TLI_DEFINE_VECFUNC("__expf_finite", "__svml_expf4", 4)
+TLI_DEFINE_VECFUNC("__expf_finite", "__svml_expf8", 8)
+TLI_DEFINE_VECFUNC("__expf_finite", "__svml_expf16", 16)
+
+TLI_DEFINE_VECFUNC("llvm.exp.f64", "__svml_exp2", 2)
+TLI_DEFINE_VECFUNC("llvm.exp.f64", "__svml_exp4", 4)
+TLI_DEFINE_VECFUNC("llvm.exp.f64", "__svml_exp8", 8)
+
+TLI_DEFINE_VECFUNC("llvm.exp.f32", "__svml_expf4", 4)
+TLI_DEFINE_VECFUNC("llvm.exp.f32", "__svml_expf8", 8)
+TLI_DEFINE_VECFUNC("llvm.exp.f32", "__svml_expf16", 16)
+
+TLI_DEFINE_VECFUNC("log", "__svml_log2", 2)
+TLI_DEFINE_VECFUNC("log", "__svml_log4", 4)
+TLI_DEFINE_VECFUNC("log", "__svml_log8", 8)
+
+TLI_DEFINE_VECFUNC("logf", "__svml_logf4", 4)
+TLI_DEFINE_VECFUNC("logf", "__svml_logf8", 8)
+TLI_DEFINE_VECFUNC("logf", "__svml_logf16", 16)
+
+TLI_DEFINE_VECFUNC("__log_finite", "__svml_log2", 2)
+TLI_DEFINE_VECFUNC("__log_finite", "__svml_log4", 4)
+TLI_DEFINE_VECFUNC("__log_finite", "__svml_log8", 8)
+
+TLI_DEFINE_VECFUNC("__logf_finite", "__svml_logf4", 4)
+TLI_DEFINE_VECFUNC("__logf_finite", "__svml_logf8", 8)
+TLI_DEFINE_VECFUNC("__logf_finite", "__svml_logf16", 16)
+
+TLI_DEFINE_VECFUNC("llvm.log.f64", "__svml_log2", 2)
+TLI_DEFINE_VECFUNC("llvm.log.f64", "__svml_log4", 4)
+TLI_DEFINE_VECFUNC("llvm.log.f64", "__svml_log8", 8)
+
+TLI_DEFINE_VECFUNC("llvm.log.f32", "__svml_logf4", 4)
+TLI_DEFINE_VECFUNC("llvm.log.f32", "__svml_logf8", 8)
+TLI_DEFINE_VECFUNC("llvm.log.f32", "__svml_logf16", 16)
+
+
+#else
+#error "Must choose which vector library functions are to be defined."
+#endif
+
+#undef TLI_DEFINE_VECFUNC
+#undef TLI_DEFINE_ACCELERATE_VECFUNCS
+#undef TLI_DEFINE_MASSV_VECFUNCS
+#undef TLI_DEFINE_SVML_VECFUNCS
+
diff --git a/linux-x64/clang/include/llvm/Analysis/VectorUtils.h b/linux-x64/clang/include/llvm/Analysis/VectorUtils.h
index 60ef633..d93d2bc 100644
--- a/linux-x64/clang/include/llvm/Analysis/VectorUtils.h
+++ b/linux-x64/clang/include/llvm/Analysis/VectorUtils.h
@@ -17,6 +17,7 @@
 #include "llvm/Analysis/LoopAccessAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/IR/IRBuilder.h"
+#include "llvm/Support/CheckedArithmetic.h"
 
 namespace llvm {
 
@@ -35,13 +36,12 @@
 }
 
 /// Identify if the intrinsic is trivially vectorizable.
-/// This method returns true if the intrinsic's argument types are all
-/// scalars for the scalar form of the intrinsic and all vectors for
-/// the vector form of the intrinsic.
+/// This method returns true if the intrinsic's argument types are all scalars
+/// for the scalar form of the intrinsic and all vectors (or scalars handled by
+/// hasVectorInstrinsicScalarOpd) for the vector form of the intrinsic.
 bool isTriviallyVectorizable(Intrinsic::ID ID);
 
-/// Identifies if the intrinsic has a scalar operand. It checks for
-/// ctlz,cttz and powi special intrinsics whose argument is scalar.
+/// Identifies if the vector form of the intrinsic has a scalar operand.
 bool hasVectorInstrinsicScalarOpd(Intrinsic::ID ID, unsigned ScalarOpdIdx);
 
 /// Returns intrinsic ID for call.
@@ -77,6 +77,12 @@
 /// a sequence of instructions that broadcast a single value into a vector.
 const Value *getSplatValue(const Value *V);
 
+/// Return true if the input value is known to be a vector with all identical
+/// elements (potentially including undefined elements).
+/// This may be more powerful than the related getSplatValue() because it is
+/// not limited by finding a scalar source value to a splatted vector.
+bool isSplatValue(const Value *V, unsigned Depth = 0);
+
 /// Compute a map of integer instructions to their minimum legal type
 /// size.
 ///
@@ -222,6 +228,20 @@
 /// elements, it will be padded with undefs.
 Value *concatenateVectors(IRBuilder<> &Builder, ArrayRef<Value *> Vecs);
 
+/// Given a mask vector of the form <Y x i1>, Return true if all of the
+/// elements of this predicate mask are false or undef.  That is, return true
+/// if all lanes can be assumed inactive. 
+bool maskIsAllZeroOrUndef(Value *Mask);
+
+/// Given a mask vector of the form <Y x i1>, Return true if all of the
+/// elements of this predicate mask are true or undef.  That is, return true
+/// if all lanes can be assumed active. 
+bool maskIsAllOneOrUndef(Value *Mask);
+
+/// Given a mask vector of the form <Y x i1>, return an APInt (of bitwidth Y)
+/// for each lane which may be active.
+APInt possiblyDemandedEltsInMask(Value *Mask);
+  
 /// The group of interleaved loads/stores sharing the same stride and
 /// close to each other.
 ///
@@ -250,10 +270,10 @@
 /// the interleaved store group doesn't allow gaps.
 template <typename InstTy> class InterleaveGroup {
 public:
-  InterleaveGroup(unsigned Factor, bool Reverse, unsigned Align)
+  InterleaveGroup(uint32_t Factor, bool Reverse, uint32_t Align)
       : Factor(Factor), Reverse(Reverse), Align(Align), InsertPos(nullptr) {}
 
-  InterleaveGroup(InstTy *Instr, int Stride, unsigned Align)
+  InterleaveGroup(InstTy *Instr, int32_t Stride, uint32_t Align)
       : Align(Align), InsertPos(Instr) {
     assert(Align && "The alignment should be non-zero");
 
@@ -265,19 +285,23 @@
   }
 
   bool isReverse() const { return Reverse; }
-  unsigned getFactor() const { return Factor; }
-  unsigned getAlignment() const { return Align; }
-  unsigned getNumMembers() const { return Members.size(); }
+  uint32_t getFactor() const { return Factor; }
+  uint32_t getAlignment() const { return Align; }
+  uint32_t getNumMembers() const { return Members.size(); }
 
   /// Try to insert a new member \p Instr with index \p Index and
   /// alignment \p NewAlign. The index is related to the leader and it could be
   /// negative if it is the new leader.
   ///
   /// \returns false if the instruction doesn't belong to the group.
-  bool insertMember(InstTy *Instr, int Index, unsigned NewAlign) {
+  bool insertMember(InstTy *Instr, int32_t Index, uint32_t NewAlign) {
     assert(NewAlign && "The new member's alignment should be non-zero");
 
-    int Key = Index + SmallestKey;
+    // Make sure the key fits in an int32_t.
+    Optional<int32_t> MaybeKey = checkedAdd(Index, SmallestKey);
+    if (!MaybeKey)
+      return false;
+    int32_t Key = *MaybeKey;
 
     // Skip if there is already a member with the same index.
     if (Members.find(Key) != Members.end())
@@ -285,13 +309,19 @@
 
     if (Key > LargestKey) {
       // The largest index is always less than the interleave factor.
-      if (Index >= static_cast<int>(Factor))
+      if (Index >= static_cast<int32_t>(Factor))
         return false;
 
       LargestKey = Key;
     } else if (Key < SmallestKey) {
+
+      // Make sure the largest index fits in an int32_t.
+      Optional<int32_t> MaybeLargestIndex = checkedSub(LargestKey, Key);
+      if (!MaybeLargestIndex)
+        return false;
+
       // The largest index is always less than the interleave factor.
-      if (LargestKey - Key >= static_cast<int>(Factor))
+      if (*MaybeLargestIndex >= static_cast<int64_t>(Factor))
         return false;
 
       SmallestKey = Key;
@@ -306,8 +336,8 @@
   /// Get the member with the given index \p Index
   ///
   /// \returns nullptr if contains no such member.
-  InstTy *getMember(unsigned Index) const {
-    int Key = SmallestKey + Index;
+  InstTy *getMember(uint32_t Index) const {
+    int32_t Key = SmallestKey + Index;
     auto Member = Members.find(Key);
     if (Member == Members.end())
       return nullptr;
@@ -317,7 +347,7 @@
 
   /// Get the index for the given member. Unlike the key in the member
   /// map, the index starts from 0.
-  unsigned getIndex(const InstTy *Instr) const {
+  uint32_t getIndex(const InstTy *Instr) const {
     for (auto I : Members) {
       if (I.second == Instr)
         return I.first - SmallestKey;
@@ -355,12 +385,12 @@
   }
 
 private:
-  unsigned Factor; // Interleave Factor.
+  uint32_t Factor; // Interleave Factor.
   bool Reverse;
-  unsigned Align;
-  DenseMap<int, InstTy *> Members;
-  int SmallestKey = 0;
-  int LargestKey = 0;
+  uint32_t Align;
+  DenseMap<int32_t, InstTy *> Members;
+  int32_t SmallestKey = 0;
+  int32_t LargestKey = 0;
 
   // To avoid breaking dependences, vectorized instructions of an interleave
   // group should be inserted at either the first load or the last store in
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/AMDGPUMetadataVerifier.h b/linux-x64/clang/include/llvm/BinaryFormat/AMDGPUMetadataVerifier.h
index 522721a..7332b2a 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/AMDGPUMetadataVerifier.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/AMDGPUMetadataVerifier.h
@@ -16,7 +16,7 @@
 #ifndef LLVM_BINARYFORMAT_AMDGPUMETADATAVERIFIER_H
 #define LLVM_BINARYFORMAT_AMDGPUMETADATAVERIFIER_H
 
-#include "llvm/BinaryFormat/MsgPackTypes.h"
+#include "llvm/BinaryFormat/MsgPackDocument.h"
 
 namespace llvm {
 namespace AMDGPU {
@@ -33,22 +33,22 @@
 class MetadataVerifier {
   bool Strict;
 
-  bool verifyScalar(msgpack::Node &Node, msgpack::ScalarNode::ScalarKind SKind,
-                    function_ref<bool(msgpack::ScalarNode &)> verifyValue = {});
-  bool verifyInteger(msgpack::Node &Node);
-  bool verifyArray(msgpack::Node &Node,
-                   function_ref<bool(msgpack::Node &)> verifyNode,
+  bool verifyScalar(msgpack::DocNode &Node, msgpack::Type SKind,
+                    function_ref<bool(msgpack::DocNode &)> verifyValue = {});
+  bool verifyInteger(msgpack::DocNode &Node);
+  bool verifyArray(msgpack::DocNode &Node,
+                   function_ref<bool(msgpack::DocNode &)> verifyNode,
                    Optional<size_t> Size = None);
-  bool verifyEntry(msgpack::MapNode &MapNode, StringRef Key, bool Required,
-                   function_ref<bool(msgpack::Node &)> verifyNode);
+  bool verifyEntry(msgpack::MapDocNode &MapNode, StringRef Key, bool Required,
+                   function_ref<bool(msgpack::DocNode &)> verifyNode);
   bool
-  verifyScalarEntry(msgpack::MapNode &MapNode, StringRef Key, bool Required,
-                    msgpack::ScalarNode::ScalarKind SKind,
-                    function_ref<bool(msgpack::ScalarNode &)> verifyValue = {});
-  bool verifyIntegerEntry(msgpack::MapNode &MapNode, StringRef Key,
+  verifyScalarEntry(msgpack::MapDocNode &MapNode, StringRef Key, bool Required,
+                    msgpack::Type SKind,
+                    function_ref<bool(msgpack::DocNode &)> verifyValue = {});
+  bool verifyIntegerEntry(msgpack::MapDocNode &MapNode, StringRef Key,
                           bool Required);
-  bool verifyKernelArgs(msgpack::Node &Node);
-  bool verifyKernel(msgpack::Node &Node);
+  bool verifyKernelArgs(msgpack::DocNode &Node);
+  bool verifyKernel(msgpack::DocNode &Node);
 
 public:
   /// Construct a MetadataVerifier, specifying whether it will operate in \p
@@ -58,7 +58,7 @@
   /// Verify given HSA metadata.
   ///
   /// \returns True when successful, false when metadata is invalid.
-  bool verify(msgpack::Node &HSAMetadataRoot);
+  bool verify(msgpack::DocNode &HSAMetadataRoot);
 };
 
 } // end namespace V3
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/COFF.h b/linux-x64/clang/include/llvm/BinaryFormat/COFF.h
index e0543de..0fe38a4 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/COFF.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/COFF.h
@@ -402,7 +402,7 @@
   IMAGE_REL_ARM64_REL32 = 0x0011,
 };
 
-enum COMDATType : unsigned {
+enum COMDATType : uint8_t {
   IMAGE_COMDAT_SELECT_NODUPLICATES = 1,
   IMAGE_COMDAT_SELECT_ANY,
   IMAGE_COMDAT_SELECT_SAME_SIZE,
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def
index 90ae023..b0f78d0 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def
@@ -354,7 +354,13 @@
 HANDLE_DW_AT(0x2110, GNU_template_name, 0, GNU)
 HANDLE_DW_AT(0x210f, GNU_odr_signature, 0, GNU)
 HANDLE_DW_AT(0x2111, GNU_call_site_value, 0, GNU)
+HANDLE_DW_AT (0x2112, GNU_call_site_data_value, 0, GNU)
+HANDLE_DW_AT (0x2113, GNU_call_site_target, 0, GNU)
+HANDLE_DW_AT (0x2114, GNU_call_site_target_clobbered, 0, GNU)
+HANDLE_DW_AT (0x2115, GNU_tail_call, 0, GNU)
+HANDLE_DW_AT (0x2116, GNU_all_tail_call_sites, 0, GNU)
 HANDLE_DW_AT(0x2117, GNU_all_call_sites, 0, GNU)
+HANDLE_DW_AT (0x2118, GNU_all_source_call_sites, 0, GNU)
 HANDLE_DW_AT(0x2119, GNU_macros, 0, GNU)
 // Extensions for Fission proposal.
 HANDLE_DW_AT(0x2130, GNU_dwo_name, 0, GNU)
@@ -386,6 +392,7 @@
 HANDLE_DW_AT(0x3e00, LLVM_include_path, 0, LLVM)
 HANDLE_DW_AT(0x3e01, LLVM_config_macros, 0, LLVM)
 HANDLE_DW_AT(0x3e02, LLVM_isysroot, 0, LLVM)
+HANDLE_DW_AT(0x3e03, LLVM_tag_offset, 0, LLVM)
 // Apple extensions.
 HANDLE_DW_AT(0x3fe1, APPLE_optimized, 0, APPLE)
 HANDLE_DW_AT(0x3fe2, APPLE_flags, 0, APPLE)
@@ -626,6 +633,8 @@
 // Vendor extensions:
 // Extensions for GNU-style thread-local storage.
 HANDLE_DW_OP(0xe0, GNU_push_tls_address, 0, GNU)
+// The GNU entry value extension.
+HANDLE_DW_OP(0xf3, GNU_entry_value, 0, GNU)
 // Extensions for Fission proposal.
 HANDLE_DW_OP(0xfb, GNU_addr_index, 0, GNU)
 HANDLE_DW_OP(0xfc, GNU_const_index, 0, GNU)
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h
index 3757c75..76d9c36 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h
@@ -129,7 +129,9 @@
 #include "llvm/BinaryFormat/Dwarf.def"
   DW_OP_lo_user = 0xe0,
   DW_OP_hi_user = 0xff,
-  DW_OP_LLVM_fragment = 0x1000 ///< Only used in LLVM metadata.
+  DW_OP_LLVM_fragment = 0x1000,   ///< Only used in LLVM metadata.
+  DW_OP_LLVM_convert = 0x1001,    ///< Only used in LLVM metadata.
+  DW_OP_LLVM_tag_offset = 0x1002, ///< Only used in LLVM metadata.
 };
 
 enum TypeKind : uint8_t {
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def b/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def
index 2e15cc3..aec408b 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def
@@ -6,6 +6,11 @@
 // such as DT_HIOS, etc. to allow using this file to in other contexts.
 // For example we can use it to generate a stringification switch statement.
 
+#ifndef AARCH64_DYNAMIC_TAG
+#define AARCH64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
+#define AARCH64_DYNAMIC_TAG_DEFINED
+#endif
+
 #ifndef HEXAGON_DYNAMIC_TAG
 #define HEXAGON_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
 #define HEXAGON_DYNAMIC_TAG_DEFINED
@@ -16,6 +21,11 @@
 #define MIPS_DYNAMIC_TAG_DEFINED
 #endif
 
+#ifndef PPC_DYNAMIC_TAG
+#define PPC_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
+#define PPC_DYNAMIC_TAG_DEFINED
+#endif
+
 #ifndef PPC64_DYNAMIC_TAG
 #define PPC64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
 #define PPC64_DYNAMIC_TAG_DEFINED
@@ -107,6 +117,10 @@
                                     // table.
 DYNAMIC_TAG(VERNEEDNUM, 0X6FFFFFFF) // The number of entries in DT_VERNEED.
 
+// AArch64 specific dynamic table entries
+AARCH64_DYNAMIC_TAG(AARCH64_BTI_PLT, 0x70000001)
+AARCH64_DYNAMIC_TAG(AARCH64_PAC_PLT, 0x70000003)
+
 // Hexagon specific dynamic table entries
 HEXAGON_DYNAMIC_TAG(HEXAGON_SYMSZ, 0x70000000)
 HEXAGON_DYNAMIC_TAG(HEXAGON_VER, 0x70000001)
@@ -190,17 +204,27 @@
 MIPS_DYNAMIC_TAG(MIPS_RLD_MAP_REL, 0x70000035)  // Relative offset of run time loader
                                                 // map, used for debugging.
 
+// PPC specific dynamic table entries.
+PPC_DYNAMIC_TAG(PPC_GOT, 0x70000000) // Uses Secure PLT ABI.
+PPC_DYNAMIC_TAG(PPC_OPT, 0x70000001) // Has TLS optimization.
+
 // PPC64 specific dynamic table entries.
 PPC64_DYNAMIC_TAG(PPC64_GLINK, 0x70000000) // Address of 32 bytes before the
                                            // first glink lazy resolver stub.
 
 // Sun machine-independent extensions.
 DYNAMIC_TAG(AUXILIARY, 0x7FFFFFFD) // Shared object to load before self
+DYNAMIC_TAG(USED, 0x7FFFFFFE)      // Same as DT_NEEDED
 DYNAMIC_TAG(FILTER, 0x7FFFFFFF)    // Shared object to get values from
 
 
 #ifdef DYNAMIC_TAG_MARKER_DEFINED
 #undef DYNAMIC_TAG_MARKER
+#undef DYNAMIC_TAG_MARKER_DEFINED
+#endif
+#ifdef AARCH64_DYNAMIC_TAG_DEFINED
+#undef AARCH64_DYNAMIC_TAG
+#undef AARCH64_DYNAMIC_TAG_DEFINED
 #endif
 #ifdef MIPS_DYNAMIC_TAG_DEFINED
 #undef MIPS_DYNAMIC_TAG
@@ -210,6 +234,10 @@
 #undef HEXAGON_DYNAMIC_TAG
 #undef HEXAGON_DYNAMIC_TAG_DEFINED
 #endif
+#ifdef PPC_DYNAMIC_TAG_DEFINED
+#undef PPC_DYNAMIC_TAG
+#undef PPC_DYNAMIC_TAG_DEFINED
+#endif
 #ifdef PPC64_DYNAMIC_TAG_DEFINED
 #undef PPC64_DYNAMIC_TAG
 #undef PPC64_DYNAMIC_TAG_DEFINED
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/ELF.h b/linux-x64/clang/include/llvm/BinaryFormat/ELF.h
index 8e3860c..c9cc803 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/ELF.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/ELF.h
@@ -702,15 +702,21 @@
   EF_AMDGPU_MACH_AMDGCN_GFX902 = 0x02d,
   EF_AMDGPU_MACH_AMDGCN_GFX904 = 0x02e,
   EF_AMDGPU_MACH_AMDGCN_GFX906 = 0x02f,
+  EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030,
   EF_AMDGPU_MACH_AMDGCN_GFX909 = 0x031,
+  // AMDGCN GFX10.
+  EF_AMDGPU_MACH_AMDGCN_GFX1010 = 0x033,
+  EF_AMDGPU_MACH_AMDGCN_GFX1011 = 0x034,
+  EF_AMDGPU_MACH_AMDGCN_GFX1012 = 0x035,
 
   // Reserved for AMDGCN-based processors.
   EF_AMDGPU_MACH_AMDGCN_RESERVED0 = 0x027,
   EF_AMDGPU_MACH_AMDGCN_RESERVED1 = 0x030,
+  EF_AMDGPU_MACH_AMDGCN_RESERVED2 = 0x032,
 
   // First/last AMDGCN-based processors.
   EF_AMDGPU_MACH_AMDGCN_FIRST = EF_AMDGPU_MACH_AMDGCN_GFX600,
-  EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX909,
+  EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX1012,
 
   // Indicates if the "xnack" target feature is enabled for all code contained
   // in the object.
@@ -838,6 +844,10 @@
   SHT_LLVM_CALL_GRAPH_PROFILE = 0x6fff4c02, // LLVM Call Graph Profile.
   SHT_LLVM_ADDRSIG = 0x6fff4c03,        // List of address-significant symbols
                                         // for safe ICF.
+  SHT_LLVM_DEPENDENT_LIBRARIES = 0x6fff4c04, // LLVM Dependent Library Specifiers.
+  SHT_LLVM_SYMPART = 0x6fff4c05,        // Symbol partition specification.
+  SHT_LLVM_PART_EHDR = 0x6fff4c06,      // ELF header for loadable partition.
+  SHT_LLVM_PART_PHDR = 0x6fff4c07,      // Phdrs for loadable partition.
   // Android's experimental support for SHT_RELR sections.
   // https://android.googlesource.com/platform/bionic/+/b7feec74547f84559a1467aca02708ff61346d2a/libc/include/elf.h#512
   SHT_ANDROID_RELR = 0x6fffff00,        // Relocation entries; only offsets.
@@ -1339,6 +1349,14 @@
   NT_FREEBSD_PROCSTAT_AUXV = 16,
 };
 
+// Generic note types
+enum : unsigned {
+  NT_VERSION = 1,
+  NT_ARCH = 2,
+  NT_GNU_BUILD_ATTRIBUTE_OPEN = 0x100,
+  NT_GNU_BUILD_ATTRIBUTE_FUNC = 0x101,
+};
+
 enum {
   NT_GNU_ABI_TAG = 1,
   NT_GNU_HWCAP = 2,
@@ -1351,16 +1369,50 @@
 enum : unsigned {
   GNU_PROPERTY_STACK_SIZE = 1,
   GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2,
+  GNU_PROPERTY_AARCH64_FEATURE_1_AND = 0xc0000000,
   GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002,
+  GNU_PROPERTY_X86_ISA_1_NEEDED = 0xc0008000,
   GNU_PROPERTY_X86_FEATURE_2_NEEDED = 0xc0008001,
+  GNU_PROPERTY_X86_ISA_1_USED = 0xc0010000,
   GNU_PROPERTY_X86_FEATURE_2_USED = 0xc0010001,
 };
 
+// aarch64 processor feature bits.
+enum : unsigned {
+  GNU_PROPERTY_AARCH64_FEATURE_1_BTI = 1 << 0,
+  GNU_PROPERTY_AARCH64_FEATURE_1_PAC = 1 << 1,
+};
+
 // x86 processor feature bits.
 enum : unsigned {
   GNU_PROPERTY_X86_FEATURE_1_IBT = 1 << 0,
   GNU_PROPERTY_X86_FEATURE_1_SHSTK = 1 << 1,
 
+  GNU_PROPERTY_X86_ISA_1_CMOV = 1 << 0,
+  GNU_PROPERTY_X86_ISA_1_SSE = 1 << 1,
+  GNU_PROPERTY_X86_ISA_1_SSE2 = 1 << 2,
+  GNU_PROPERTY_X86_ISA_1_SSE3 = 1 << 3,
+  GNU_PROPERTY_X86_ISA_1_SSSE3 = 1 << 4,
+  GNU_PROPERTY_X86_ISA_1_SSE4_1 = 1 << 5,
+  GNU_PROPERTY_X86_ISA_1_SSE4_2 = 1 << 6,
+  GNU_PROPERTY_X86_ISA_1_AVX = 1 << 7,
+  GNU_PROPERTY_X86_ISA_1_AVX2 = 1 << 8,
+  GNU_PROPERTY_X86_ISA_1_FMA = 1 << 9,
+  GNU_PROPERTY_X86_ISA_1_AVX512F = 1 << 10,
+  GNU_PROPERTY_X86_ISA_1_AVX512CD = 1 << 11,
+  GNU_PROPERTY_X86_ISA_1_AVX512ER = 1 << 12,
+  GNU_PROPERTY_X86_ISA_1_AVX512PF = 1 << 13,
+  GNU_PROPERTY_X86_ISA_1_AVX512VL = 1 << 14,
+  GNU_PROPERTY_X86_ISA_1_AVX512DQ = 1 << 15,
+  GNU_PROPERTY_X86_ISA_1_AVX512BW = 1 << 16,
+  GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS = 1 << 17,
+  GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW = 1 << 18,
+  GNU_PROPERTY_X86_ISA_1_AVX512_BITALG = 1 << 19,
+  GNU_PROPERTY_X86_ISA_1_AVX512_IFMA = 1 << 20,
+  GNU_PROPERTY_X86_ISA_1_AVX512_VBMI = 1 << 21,
+  GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2 = 1 << 22,
+  GNU_PROPERTY_X86_ISA_1_AVX512_VNNI = 1 << 23,
+
   GNU_PROPERTY_X86_FEATURE_2_X86 = 1 << 0,
   GNU_PROPERTY_X86_FEATURE_2_X87 = 1 << 1,
   GNU_PROPERTY_X86_FEATURE_2_MMX = 1 << 2,
@@ -1373,6 +1425,11 @@
   GNU_PROPERTY_X86_FEATURE_2_XSAVEC = 1 << 9,
 };
 
+// AMDGPU-specific section indices.
+enum {
+  SHN_AMDGPU_LDS = 0xff00, // Variable in LDS; symbol encoded like SHN_COMMON
+};
+
 // AMD specific notes. (Code Object V2)
 enum {
   // Note types with values between 0 and 9 (inclusive) are reserved.
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/ARM.def b/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/ARM.def
index 730fc5b..e0709fb 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/ARM.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/ARM.def
@@ -135,4 +135,7 @@
 ELF_RELOC(R_ARM_ME_TOO,                 0x80)
 ELF_RELOC(R_ARM_THM_TLS_DESCSEQ16,      0x81)
 ELF_RELOC(R_ARM_THM_TLS_DESCSEQ32,      0x82)
+ELF_RELOC(R_ARM_THM_BF16,               0x88)
+ELF_RELOC(R_ARM_THM_BF12,               0x89)
+ELF_RELOC(R_ARM_THM_BF18,               0x8a)
 ELF_RELOC(R_ARM_IRELATIVE,              0xa0)
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC.def b/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC.def
index e4f8ee0..2803688 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC.def
@@ -27,9 +27,25 @@
 #undef R_PPC_GOT16_HI
 #undef R_PPC_GOT16_HA
 #undef R_PPC_PLTREL24
+#undef R_PPC_COPY
+#undef R_PPC_GLOB_DAT
 #undef R_PPC_JMP_SLOT
+#undef R_PPC_RELATIVE
 #undef R_PPC_LOCAL24PC
+#undef R_PPC_UADDR32
+#undef R_PPC_UADDR16
 #undef R_PPC_REL32
+#undef R_PPC_PLT32
+#undef R_PPC_PLTREL32
+#undef R_PPC_PLT16_LO
+#undef R_PPC_PLT16_HI
+#undef R_PPC_PLT16_HA
+#undef R_PPC_SDAREL16
+#undef R_PPC_SECTOFF
+#undef R_PPC_SECTOFF_LO
+#undef R_PPC_SECTOFF_HI
+#undef R_PPC_SECTOFF_HA
+#undef R_PPC_ADDR30
 #undef R_PPC_TLS
 #undef R_PPC_DTPMOD32
 #undef R_PPC_TPREL16
@@ -84,9 +100,25 @@
 ELF_RELOC(R_PPC_GOT16_HI,               16)
 ELF_RELOC(R_PPC_GOT16_HA,               17)
 ELF_RELOC(R_PPC_PLTREL24,               18)
+ELF_RELOC(R_PPC_COPY,                   19)
+ELF_RELOC(R_PPC_GLOB_DAT,               20)
 ELF_RELOC(R_PPC_JMP_SLOT,               21)
+ELF_RELOC(R_PPC_RELATIVE,               22)
 ELF_RELOC(R_PPC_LOCAL24PC,              23)
+ELF_RELOC(R_PPC_UADDR32,                24)
+ELF_RELOC(R_PPC_UADDR16,                25)
 ELF_RELOC(R_PPC_REL32,                  26)
+ELF_RELOC(R_PPC_PLT32,                  27)
+ELF_RELOC(R_PPC_PLTREL32,               28)
+ELF_RELOC(R_PPC_PLT16_LO,               29)
+ELF_RELOC(R_PPC_PLT16_HI,               30)
+ELF_RELOC(R_PPC_PLT16_HA,               31)
+ELF_RELOC(R_PPC_SDAREL16,               32)
+ELF_RELOC(R_PPC_SECTOFF,                33)
+ELF_RELOC(R_PPC_SECTOFF_LO,             34)
+ELF_RELOC(R_PPC_SECTOFF_HI,             35)
+ELF_RELOC(R_PPC_SECTOFF_HA,             36)
+ELF_RELOC(R_PPC_ADDR30,                 37)
 ELF_RELOC(R_PPC_TLS,                    67)
 ELF_RELOC(R_PPC_DTPMOD32,               68)
 ELF_RELOC(R_PPC_TPREL16,                69)
@@ -117,6 +149,7 @@
 ELF_RELOC(R_PPC_GOT_DTPREL16_HA,        94)
 ELF_RELOC(R_PPC_TLSGD,                  95)
 ELF_RELOC(R_PPC_TLSLD,                  96)
+ELF_RELOC(R_PPC_IRELATIVE,              248)
 ELF_RELOC(R_PPC_REL16,                  249)
 ELF_RELOC(R_PPC_REL16_LO,               250)
 ELF_RELOC(R_PPC_REL16_HI,               251)
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/MachO.h b/linux-x64/clang/include/llvm/BinaryFormat/MachO.h
index 08fe780..a01393a 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/MachO.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/MachO.h
@@ -487,6 +487,7 @@
   PLATFORM_TVOS = 3,
   PLATFORM_WATCHOS = 4,
   PLATFORM_BRIDGEOS = 5,
+  PLATFORM_MACCATALYST = 6,
   PLATFORM_IOSSIMULATOR = 7,
   PLATFORM_TVOSSIMULATOR = 8,
   PLATFORM_WATCHOSSIMULATOR = 9
@@ -942,8 +943,13 @@
 // Structs from <mach-o/reloc.h>
 struct relocation_info {
   int32_t r_address;
+#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN)
+  uint32_t r_type : 4,  r_extern : 1, r_length : 2, r_pcrel : 1,
+      r_symbolnum : 24;
+#else
   uint32_t r_symbolnum : 24, r_pcrel : 1, r_length : 2, r_extern : 1,
       r_type : 4;
+#endif
 };
 
 struct scattered_relocation_info {
@@ -1396,7 +1402,8 @@
 enum : uint32_t {
   // Capability bits used in the definition of cpu_type.
   CPU_ARCH_MASK = 0xff000000, // Mask for architecture bits
-  CPU_ARCH_ABI64 = 0x01000000 // 64 bit ABI
+  CPU_ARCH_ABI64 = 0x01000000, // 64 bit ABI
+  CPU_ARCH_ABI64_32 = 0x02000000, // ILP32 ABI on 64-bit hardware
 };
 
 // Constants for the cputype field.
@@ -1409,6 +1416,7 @@
   CPU_TYPE_MC98000 = 10, // Old Motorola PowerPC
   CPU_TYPE_ARM = 12,
   CPU_TYPE_ARM64 = CPU_TYPE_ARM | CPU_ARCH_ABI64,
+  CPU_TYPE_ARM64_32 = CPU_TYPE_ARM | CPU_ARCH_ABI64_32,
   CPU_TYPE_SPARC = 14,
   CPU_TYPE_POWERPC = 18,
   CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC | CPU_ARCH_ABI64
@@ -1477,7 +1485,12 @@
   CPU_SUBTYPE_ARM_V7EM = 16
 };
 
-enum CPUSubTypeARM64 { CPU_SUBTYPE_ARM64_ALL = 0 };
+enum CPUSubTypeARM64 {
+  CPU_SUBTYPE_ARM64_ALL = 0,
+  CPU_SUBTYPE_ARM64E = 2,
+};
+
+enum CPUSubTypeARM64_32 { CPU_SUBTYPE_ARM64_32_V8 = 1 };
 
 enum CPUSubTypeSPARC { CPU_SUBTYPE_SPARC_ALL = 0 };
 
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Magic.h b/linux-x64/clang/include/llvm/BinaryFormat/Magic.h
index 05af2c3..cd9833e 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Magic.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Magic.h
@@ -39,11 +39,14 @@
     macho_dsym_companion,                     ///< Mach-O dSYM companion file
     macho_kext_bundle,                        ///< Mach-O kext bundle file
     macho_universal_binary,                   ///< Mach-O universal binary
+    minidump,                                 ///< Windows minidump file
     coff_cl_gl_object,   ///< Microsoft cl.exe's intermediate code file
     coff_object,         ///< COFF object file
     coff_import_library, ///< COFF import library
     pecoff_executable,   ///< PECOFF executable file
     windows_resource,    ///< Windows compiled resource file (.res)
+    xcoff_object_32,     ///< 32-bit XCOFF object file
+    xcoff_object_64,     ///< 64-bit XCOFF object file
     wasm_object,         ///< WebAssembly Object file
     pdb,                 ///< Windows PDB debug info file
   };
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Minidump.h b/linux-x64/clang/include/llvm/BinaryFormat/Minidump.h
new file mode 100644
index 0000000..65c17d1
--- /dev/null
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Minidump.h
@@ -0,0 +1,203 @@
+//===- Minidump.h - Minidump constants and structures -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This header constants and data structures pertaining to the Windows Minidump
+// core file format.
+//
+// Reference:
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms679293(v=vs.85).aspx
+// https://chromium.googlesource.com/breakpad/breakpad/
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BINARYFORMAT_MINIDUMP_H
+#define LLVM_BINARYFORMAT_MINIDUMP_H
+
+#include "llvm/ADT/DenseMapInfo.h"
+#include "llvm/Support/Endian.h"
+
+namespace llvm {
+namespace minidump {
+
+/// The minidump header is the first part of a minidump file. It identifies the
+/// file as a minidump file, and gives the location of the stream directory.
+struct Header {
+  static constexpr uint32_t MagicSignature = 0x504d444d; // PMDM
+  static constexpr uint16_t MagicVersion = 0xa793;
+
+  support::ulittle32_t Signature;
+  // The high 16 bits of version field are implementation specific. The low 16
+  // bits should be MagicVersion.
+  support::ulittle32_t Version;
+  support::ulittle32_t NumberOfStreams;
+  support::ulittle32_t StreamDirectoryRVA;
+  support::ulittle32_t Checksum;
+  support::ulittle32_t TimeDateStamp;
+  support::ulittle64_t Flags;
+};
+static_assert(sizeof(Header) == 32, "");
+
+/// The type of a minidump stream identifies its contents. Streams numbers after
+/// LastReserved are for application-defined data streams.
+enum class StreamType : uint32_t {
+#define HANDLE_MDMP_STREAM_TYPE(CODE, NAME) NAME = CODE,
+#include "llvm/BinaryFormat/MinidumpConstants.def"
+  Unused = 0,
+  LastReserved = 0x0000ffff,
+};
+
+/// Specifies the location (and size) of various objects in the minidump file.
+/// The location is relative to the start of the file.
+struct LocationDescriptor {
+  support::ulittle32_t DataSize;
+  support::ulittle32_t RVA;
+};
+static_assert(sizeof(LocationDescriptor) == 8, "");
+
+/// Describes a single memory range (both its VM address and where to find it in
+/// the file) of the process from which this minidump file was generated.
+struct MemoryDescriptor {
+  support::ulittle64_t StartOfMemoryRange;
+  LocationDescriptor Memory;
+};
+static_assert(sizeof(MemoryDescriptor) == 16, "");
+
+/// Specifies the location and type of a single stream in the minidump file. The
+/// minidump stream directory is an array of entries of this type, with its size
+/// given by Header.NumberOfStreams.
+struct Directory {
+  support::little_t<StreamType> Type;
+  LocationDescriptor Location;
+};
+static_assert(sizeof(Directory) == 12, "");
+
+/// The processor architecture of the system that generated this minidump. Used
+/// in the ProcessorArch field of the SystemInfo stream.
+enum class ProcessorArchitecture : uint16_t {
+#define HANDLE_MDMP_ARCH(CODE, NAME) NAME = CODE,
+#include "llvm/BinaryFormat/MinidumpConstants.def"
+};
+
+/// The OS Platform of the system that generated this minidump. Used in the
+/// PlatformId field of the SystemInfo stream.
+enum class OSPlatform : uint32_t {
+#define HANDLE_MDMP_PLATFORM(CODE, NAME) NAME = CODE,
+#include "llvm/BinaryFormat/MinidumpConstants.def"
+};
+
+/// Detailed information about the processor of the system that generated this
+/// minidump. Its interpretation depends on the ProcessorArchitecture enum.
+union CPUInfo {
+  struct X86Info {
+    char VendorID[12];                        // cpuid 0: ebx, edx, ecx
+    support::ulittle32_t VersionInfo;         // cpuid 1: eax
+    support::ulittle32_t FeatureInfo;         // cpuid 1: edx
+    support::ulittle32_t AMDExtendedFeatures; // cpuid 0x80000001, ebx
+  } X86;
+  struct ArmInfo {
+    support::ulittle32_t CPUID;
+    support::ulittle32_t ElfHWCaps; // linux specific, 0 otherwise
+  } Arm;
+  struct OtherInfo {
+    uint8_t ProcessorFeatures[16];
+  } Other;
+};
+static_assert(sizeof(CPUInfo) == 24, "");
+
+/// The SystemInfo stream, containing various information about the system where
+/// this minidump was generated.
+struct SystemInfo {
+  support::little_t<ProcessorArchitecture> ProcessorArch;
+  support::ulittle16_t ProcessorLevel;
+  support::ulittle16_t ProcessorRevision;
+
+  uint8_t NumberOfProcessors;
+  uint8_t ProductType;
+
+  support::ulittle32_t MajorVersion;
+  support::ulittle32_t MinorVersion;
+  support::ulittle32_t BuildNumber;
+  support::little_t<OSPlatform> PlatformId;
+  support::ulittle32_t CSDVersionRVA;
+
+  support::ulittle16_t SuiteMask;
+  support::ulittle16_t Reserved;
+
+  CPUInfo CPU;
+};
+static_assert(sizeof(SystemInfo) == 56, "");
+
+struct VSFixedFileInfo {
+  support::ulittle32_t Signature;
+  support::ulittle32_t StructVersion;
+  support::ulittle32_t FileVersionHigh;
+  support::ulittle32_t FileVersionLow;
+  support::ulittle32_t ProductVersionHigh;
+  support::ulittle32_t ProductVersionLow;
+  support::ulittle32_t FileFlagsMask;
+  support::ulittle32_t FileFlags;
+  support::ulittle32_t FileOS;
+  support::ulittle32_t FileType;
+  support::ulittle32_t FileSubtype;
+  support::ulittle32_t FileDateHigh;
+  support::ulittle32_t FileDateLow;
+};
+static_assert(sizeof(VSFixedFileInfo) == 52, "");
+
+inline bool operator==(const VSFixedFileInfo &LHS, const VSFixedFileInfo &RHS) {
+  return memcmp(&LHS, &RHS, sizeof(VSFixedFileInfo)) == 0;
+}
+
+struct Module {
+  support::ulittle64_t BaseOfImage;
+  support::ulittle32_t SizeOfImage;
+  support::ulittle32_t Checksum;
+  support::ulittle32_t TimeDateStamp;
+  support::ulittle32_t ModuleNameRVA;
+  VSFixedFileInfo VersionInfo;
+  LocationDescriptor CvRecord;
+  LocationDescriptor MiscRecord;
+  support::ulittle64_t Reserved0;
+  support::ulittle64_t Reserved1;
+};
+static_assert(sizeof(Module) == 108, "");
+
+/// Describes a single thread in the minidump file. Part of the ThreadList
+/// stream.
+struct Thread {
+  support::ulittle32_t ThreadId;
+  support::ulittle32_t SuspendCount;
+  support::ulittle32_t PriorityClass;
+  support::ulittle32_t Priority;
+  support::ulittle64_t EnvironmentBlock;
+  MemoryDescriptor Stack;
+  LocationDescriptor Context;
+};
+static_assert(sizeof(Thread) == 48, "");
+
+} // namespace minidump
+
+template <> struct DenseMapInfo<minidump::StreamType> {
+  static minidump::StreamType getEmptyKey() { return minidump::StreamType(-1); }
+
+  static minidump::StreamType getTombstoneKey() {
+    return minidump::StreamType(-2);
+  }
+
+  static unsigned getHashValue(minidump::StreamType Val) {
+    return DenseMapInfo<uint32_t>::getHashValue(static_cast<uint32_t>(Val));
+  }
+
+  static bool isEqual(minidump::StreamType LHS, minidump::StreamType RHS) {
+    return LHS == RHS;
+  }
+};
+
+} // namespace llvm
+
+#endif // LLVM_BINARYFORMAT_MINIDUMP_H
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/MinidumpConstants.def b/linux-x64/clang/include/llvm/BinaryFormat/MinidumpConstants.def
new file mode 100644
index 0000000..d4f13dd
--- /dev/null
+++ b/linux-x64/clang/include/llvm/BinaryFormat/MinidumpConstants.def
@@ -0,0 +1,107 @@
+//===- MinidumpConstants.def - Iteration over minidump constants-*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#if !(defined HANDLE_MDMP_STREAM_TYPE || defined HANDLE_MDMP_ARCH ||           \
+      defined HANDLE_MDMP_PLATFORM)
+#error "Missing HANDLE_MDMP definition"
+#endif
+
+#ifndef HANDLE_MDMP_STREAM_TYPE
+#define HANDLE_MDMP_STREAM_TYPE(CODE, NAME)
+#endif
+
+#ifndef HANDLE_MDMP_ARCH
+#define HANDLE_MDMP_ARCH(CODE, NAME)
+#endif
+
+#ifndef HANDLE_MDMP_PLATFORM
+#define HANDLE_MDMP_PLATFORM(CODE, NAME)
+#endif
+
+HANDLE_MDMP_STREAM_TYPE(0x0003, ThreadList)
+HANDLE_MDMP_STREAM_TYPE(0x0004, ModuleList)
+HANDLE_MDMP_STREAM_TYPE(0x0005, MemoryList)
+HANDLE_MDMP_STREAM_TYPE(0x0006, Exception)
+HANDLE_MDMP_STREAM_TYPE(0x0007, SystemInfo)
+HANDLE_MDMP_STREAM_TYPE(0x0008, ThreadExList)
+HANDLE_MDMP_STREAM_TYPE(0x0009, Memory64List)
+HANDLE_MDMP_STREAM_TYPE(0x000a, CommentA)
+HANDLE_MDMP_STREAM_TYPE(0x000b, CommentW)
+HANDLE_MDMP_STREAM_TYPE(0x000c, HandleData)
+HANDLE_MDMP_STREAM_TYPE(0x000d, FunctionTable)
+HANDLE_MDMP_STREAM_TYPE(0x000e, UnloadedModuleList)
+HANDLE_MDMP_STREAM_TYPE(0x000f, MiscInfo)
+HANDLE_MDMP_STREAM_TYPE(0x0010, MemoryInfoList)
+HANDLE_MDMP_STREAM_TYPE(0x0011, ThreadInfoList)
+HANDLE_MDMP_STREAM_TYPE(0x0012, HandleOperationList)
+HANDLE_MDMP_STREAM_TYPE(0x0013, Token)
+HANDLE_MDMP_STREAM_TYPE(0x0014, JavascriptData)
+HANDLE_MDMP_STREAM_TYPE(0x0015, SystemMemoryInfo)
+HANDLE_MDMP_STREAM_TYPE(0x0016, ProcessVMCounters)
+// Breakpad extension types.  0x4767 = "Gg"
+HANDLE_MDMP_STREAM_TYPE(0x47670001, BreakpadInfo)
+HANDLE_MDMP_STREAM_TYPE(0x47670002, AssertionInfo)
+// These are additional minidump stream values which are specific to the linux
+// breakpad implementation.
+HANDLE_MDMP_STREAM_TYPE(0x47670003, LinuxCPUInfo)    // /proc/cpuinfo
+HANDLE_MDMP_STREAM_TYPE(0x47670004, LinuxProcStatus) // /proc/$x/status
+HANDLE_MDMP_STREAM_TYPE(0x47670005, LinuxLSBRelease) // /etc/lsb-release
+HANDLE_MDMP_STREAM_TYPE(0x47670006, LinuxCMDLine)    // /proc/$x/cmdline
+HANDLE_MDMP_STREAM_TYPE(0x47670007, LinuxEnviron)    // /proc/$x/environ
+HANDLE_MDMP_STREAM_TYPE(0x47670008, LinuxAuxv)       // /proc/$x/auxv
+HANDLE_MDMP_STREAM_TYPE(0x47670009, LinuxMaps)       // /proc/$x/maps
+HANDLE_MDMP_STREAM_TYPE(0x4767000A, LinuxDSODebug)
+HANDLE_MDMP_STREAM_TYPE(0x4767000B, LinuxProcStat)   // /proc/$x/stat
+HANDLE_MDMP_STREAM_TYPE(0x4767000C, LinuxProcUptime) // uptime
+HANDLE_MDMP_STREAM_TYPE(0x4767000D, LinuxProcFD)     // /proc/$x/fd
+// Facebook-defined stream types
+HANDLE_MDMP_STREAM_TYPE(0xFACE1CA7, FacebookLogcat)
+HANDLE_MDMP_STREAM_TYPE(0xFACECAFA, FacebookAppCustomData)
+HANDLE_MDMP_STREAM_TYPE(0xFACECAFB, FacebookBuildID)
+HANDLE_MDMP_STREAM_TYPE(0xFACECAFC, FacebookAppVersionName)
+HANDLE_MDMP_STREAM_TYPE(0xFACECAFD, FacebookJavaStack)
+HANDLE_MDMP_STREAM_TYPE(0xFACECAFE, FacebookDalvikInfo)
+HANDLE_MDMP_STREAM_TYPE(0xFACECAFF, FacebookUnwindSymbols)
+HANDLE_MDMP_STREAM_TYPE(0xFACECB00, FacebookDumpErrorLog)
+HANDLE_MDMP_STREAM_TYPE(0xFACECCCC, FacebookAppStateLog)
+HANDLE_MDMP_STREAM_TYPE(0xFACEDEAD, FacebookAbortReason)
+HANDLE_MDMP_STREAM_TYPE(0xFACEE000, FacebookThreadName)
+
+HANDLE_MDMP_ARCH(0x0000, X86)      // PROCESSOR_ARCHITECTURE_INTEL
+HANDLE_MDMP_ARCH(0x0001, MIPS)     // PROCESSOR_ARCHITECTURE_MIPS
+HANDLE_MDMP_ARCH(0x0002, Alpha)    // PROCESSOR_ARCHITECTURE_ALPHA
+HANDLE_MDMP_ARCH(0x0003, PPC)      // PROCESSOR_ARCHITECTURE_PPC
+HANDLE_MDMP_ARCH(0x0004, SHX)      // PROCESSOR_ARCHITECTURE_SHX (Super-H)
+HANDLE_MDMP_ARCH(0x0005, ARM)      // PROCESSOR_ARCHITECTURE_ARM
+HANDLE_MDMP_ARCH(0x0006, IA64)     // PROCESSOR_ARCHITECTURE_IA64
+HANDLE_MDMP_ARCH(0x0007, Alpha64)  // PROCESSOR_ARCHITECTURE_ALPHA64
+HANDLE_MDMP_ARCH(0x0008, MSIL)     // PROCESSOR_ARCHITECTURE_MSIL
+HANDLE_MDMP_ARCH(0x0009, AMD64)    // PROCESSOR_ARCHITECTURE_AMD64
+HANDLE_MDMP_ARCH(0x000a, X86Win64) // PROCESSOR_ARCHITECTURE_IA32_ON_WIN64
+HANDLE_MDMP_ARCH(0x8001, SPARC)    // Breakpad-defined value for SPARC
+HANDLE_MDMP_ARCH(0x8002, PPC64)    // Breakpad-defined value for PPC64
+HANDLE_MDMP_ARCH(0x8003, ARM64)    // Breakpad-defined value for ARM64
+HANDLE_MDMP_ARCH(0x8004, MIPS64)   // Breakpad-defined value for MIPS64
+
+HANDLE_MDMP_PLATFORM(0x0000, Win32S) // Win32 on Windows 3.1
+HANDLE_MDMP_PLATFORM(0x0001, Win32Windows) // Windows 95-98-Me
+HANDLE_MDMP_PLATFORM(0x0002, Win32NT) // Windows NT, 2000+
+HANDLE_MDMP_PLATFORM(0x0003, Win32CE) // Windows CE, Windows Mobile, "Handheld"
+// Breakpad-defined values.
+HANDLE_MDMP_PLATFORM(0x8000, Unix) // Generic Unix-ish
+HANDLE_MDMP_PLATFORM(0x8101, MacOSX) // Mac OS X/Darwin
+HANDLE_MDMP_PLATFORM(0x8102, IOS) // iOS
+HANDLE_MDMP_PLATFORM(0x8201, Linux) // Linux
+HANDLE_MDMP_PLATFORM(0x8202, Solaris) // Solaris
+HANDLE_MDMP_PLATFORM(0x8203, Android) // Android
+HANDLE_MDMP_PLATFORM(0x8204, PS3) // PS3
+HANDLE_MDMP_PLATFORM(0x8205, NaCl) // Native Client (NaCl)
+
+#undef HANDLE_MDMP_STREAM_TYPE
+#undef HANDLE_MDMP_ARCH
+#undef HANDLE_MDMP_PLATFORM
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/MsgPackDocument.h b/linux-x64/clang/include/llvm/BinaryFormat/MsgPackDocument.h
new file mode 100644
index 0000000..824ecc3
--- /dev/null
+++ b/linux-x64/clang/include/llvm/BinaryFormat/MsgPackDocument.h
@@ -0,0 +1,385 @@
+//===-- MsgPackDocument.h - MsgPack Document --------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// This file declares a class that exposes a simple in-memory representation
+/// of a document of MsgPack objects, that can be read from MsgPack, written to
+/// MsgPack, and inspected and modified in memory. This is intended to be a
+/// lighter-weight (in terms of memory allocations) replacement for
+/// MsgPackTypes.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BINARYFORMAT_MSGPACKDOCUMENT_H
+#define LLVM_BINARYFORMAT_MSGPACKDOCUMENT_H
+
+#include "llvm/BinaryFormat/MsgPackReader.h"
+#include <map>
+
+namespace llvm {
+namespace msgpack {
+
+class ArrayDocNode;
+class Document;
+class MapDocNode;
+
+/// The kind of a DocNode and its owning Document.
+struct KindAndDocument {
+  Document *Doc;
+  Type Kind;
+};
+
+/// A node in a MsgPack Document. This is a simple copyable and
+/// passable-by-value type that does not own any memory.
+class DocNode {
+  friend Document;
+
+public:
+  typedef std::map<DocNode, DocNode> MapTy;
+  typedef std::vector<DocNode> ArrayTy;
+
+private:
+  // Using KindAndDocument allows us to squeeze Kind and a pointer to the
+  // owning Document into the same word. Having a pointer to the owning
+  // Document makes the API of DocNode more convenient, and allows its use in
+  // YAMLIO.
+  const KindAndDocument *KindAndDoc;
+
+protected:
+  // The union of different values.
+  union {
+    int64_t Int;
+    uint64_t UInt;
+    bool Bool;
+    double Float;
+    StringRef Raw;
+    ArrayTy *Array;
+    MapTy *Map;
+  };
+
+public:
+  DocNode() : KindAndDoc(nullptr) {}
+
+  // Type methods
+  bool isMap() const { return getKind() == Type::Map; }
+  bool isArray() const { return getKind() == Type::Array; }
+  bool isScalar() const { return !isMap() && !isArray(); }
+  bool isString() const { return getKind() == Type::String; }
+
+  // Accessors
+  bool isEmpty() const { return !KindAndDoc; }
+  Type getKind() const { return KindAndDoc->Kind; }
+  Document *getDocument() const { return KindAndDoc->Doc; }
+
+  int64_t &getInt() {
+    assert(getKind() == Type::Int);
+    return Int;
+  }
+
+  uint64_t &getUInt() {
+    assert(getKind() == Type::UInt);
+    return UInt;
+  }
+
+  bool &getBool() {
+    assert(getKind() == Type::Boolean);
+    return Bool;
+  }
+
+  double &getFloat() {
+    assert(getKind() == Type::Float);
+    return Float;
+  }
+
+  int64_t getInt() const {
+    assert(getKind() == Type::Int);
+    return Int;
+  }
+
+  uint64_t getUInt() const {
+    assert(getKind() == Type::UInt);
+    return UInt;
+  }
+
+  bool getBool() const {
+    assert(getKind() == Type::Boolean);
+    return Bool;
+  }
+
+  double getFloat() const {
+    assert(getKind() == Type::Float);
+    return Float;
+  }
+
+  StringRef getString() const {
+    assert(getKind() == Type::String);
+    return Raw;
+  }
+
+  /// Get an ArrayDocNode for an array node. If Convert, convert the node to an
+  /// array node if necessary.
+  ArrayDocNode &getArray(bool Convert = false) {
+    if (getKind() != Type::Array) {
+      assert(Convert);
+      convertToArray();
+    }
+    // This could be a static_cast, except ArrayDocNode is a forward reference.
+    return *reinterpret_cast<ArrayDocNode *>(this);
+  }
+
+  /// Get a MapDocNode for a map node. If Convert, convert the node to a map
+  /// node if necessary.
+  MapDocNode &getMap(bool Convert = false) {
+    if (getKind() != Type::Map) {
+      assert(Convert);
+      convertToMap();
+    }
+    // This could be a static_cast, except MapDocNode is a forward reference.
+    return *reinterpret_cast<MapDocNode *>(this);
+  }
+
+  /// Comparison operator, used for map keys.
+  friend bool operator<(const DocNode &Lhs, const DocNode &Rhs) {
+    // This has to cope with one or both of the nodes being default-constructed,
+    // such that KindAndDoc is not set.
+    if (Lhs.KindAndDoc != Rhs.KindAndDoc) {
+      if (!Rhs.KindAndDoc)
+        return false;
+      if (!Lhs.KindAndDoc)
+        return true;
+      return (unsigned)Lhs.getKind() < (unsigned)Rhs.getKind();
+    }
+    switch (Lhs.getKind()) {
+    case Type::Int:
+      return Lhs.Int < Rhs.Int;
+    case Type::UInt:
+      return Lhs.UInt < Rhs.UInt;
+    case Type::Nil:
+      return false;
+    case Type::Boolean:
+      return Lhs.Bool < Rhs.Bool;
+    case Type::Float:
+      return Lhs.Float < Rhs.Float;
+    case Type::String:
+    case Type::Binary:
+      return Lhs.Raw < Rhs.Raw;
+    default:
+      llvm_unreachable("bad map key type");
+    }
+  }
+
+  /// Equality operator
+  friend bool operator==(const DocNode &Lhs, const DocNode &Rhs) {
+    return !(Lhs < Rhs) && !(Rhs < Lhs);
+  }
+
+  /// Convert this node to a string, assuming it is scalar.
+  std::string toString() const;
+
+  /// Convert the StringRef and use it to set this DocNode (assuming scalar). If
+  /// it is a string, copy the string into the Document's strings list so we do
+  /// not rely on S having a lifetime beyond this call. Tag is "" or a YAML tag.
+  StringRef fromString(StringRef S, StringRef Tag = "");
+
+private:
+  // Private constructor setting KindAndDoc, used by methods in Document.
+  DocNode(const KindAndDocument *KindAndDoc) : KindAndDoc(KindAndDoc) {}
+
+  void convertToArray();
+  void convertToMap();
+};
+
+/// A DocNode that is a map.
+class MapDocNode : public DocNode {
+public:
+  MapDocNode() {}
+  MapDocNode(DocNode &N) : DocNode(N) { assert(getKind() == Type::Map); }
+
+  // Map access methods.
+  size_t size() const { return Map->size(); }
+  bool empty() const { return !size(); }
+  MapTy::iterator begin() { return Map->begin(); }
+  MapTy::iterator end() { return Map->end(); }
+  MapTy::iterator find(DocNode Key) { return Map->find(Key); }
+  MapTy::iterator find(StringRef Key);
+  /// Member access. The string data must remain valid for the lifetime of the
+  /// Document.
+  DocNode &operator[](StringRef S);
+  /// Member access.
+  DocNode &operator[](DocNode Key);
+};
+
+/// A DocNode that is an array.
+class ArrayDocNode : public DocNode {
+public:
+  ArrayDocNode() {}
+  ArrayDocNode(DocNode &N) : DocNode(N) { assert(getKind() == Type::Array); }
+
+  // Array access methods.
+  size_t size() const { return Array->size(); }
+  bool empty() const { return !size(); }
+  ArrayTy::iterator begin() { return Array->begin(); }
+  ArrayTy::iterator end() { return Array->end(); }
+  void push_back(DocNode N) {
+    assert(N.getDocument() == getDocument());
+    Array->push_back(N);
+  }
+
+  /// Element access. This extends the array if necessary.
+  DocNode &operator[](size_t Index);
+};
+
+/// Simple in-memory representation of a document of msgpack objects with
+/// ability to find and create array and map elements.  Does not currently cope
+/// with any extension types.
+class Document {
+  // Maps, arrays and strings used by nodes in the document. No attempt is made
+  // to free unused ones.
+  std::vector<std::unique_ptr<DocNode::MapTy>> Maps;
+  std::vector<std::unique_ptr<DocNode::ArrayTy>> Arrays;
+  std::vector<std::unique_ptr<char[]>> Strings;
+
+  // The root node of the document.
+  DocNode Root;
+
+  // The KindAndDocument structs pointed to by nodes in the document.
+  KindAndDocument KindAndDocs[size_t(Type::Extension) + 1];
+
+  // Whether YAML output uses hex for UInt.
+  bool HexMode = false;
+
+public:
+  Document() {
+    clear();
+    for (unsigned T = 0; T != size_t(Type::Extension) + 1; ++T)
+      KindAndDocs[T] = {this, Type(T)};
+  }
+
+  /// Get ref to the document's root element.
+  DocNode &getRoot() { return Root; }
+
+  /// Restore the Document to an empty state.
+  void clear() { getRoot() = getNode(); }
+
+  /// Create a nil node associated with this Document.
+  DocNode getNode() {
+    auto N = DocNode(&KindAndDocs[size_t(Type::Nil)]);
+    return N;
+  }
+
+  /// Create an Int node associated with this Document.
+  DocNode getNode(int64_t V) {
+    auto N = DocNode(&KindAndDocs[size_t(Type::Int)]);
+    N.Int = V;
+    return N;
+  }
+
+  /// Create an Int node associated with this Document.
+  DocNode getNode(int V) {
+    auto N = DocNode(&KindAndDocs[size_t(Type::Int)]);
+    N.Int = V;
+    return N;
+  }
+
+  /// Create a UInt node associated with this Document.
+  DocNode getNode(uint64_t V) {
+    auto N = DocNode(&KindAndDocs[size_t(Type::UInt)]);
+    N.UInt = V;
+    return N;
+  }
+
+  /// Create a UInt node associated with this Document.
+  DocNode getNode(unsigned V) {
+    auto N = DocNode(&KindAndDocs[size_t(Type::UInt)]);
+    N.UInt = V;
+    return N;
+  }
+
+  /// Create a Boolean node associated with this Document.
+  DocNode getNode(bool V) {
+    auto N = DocNode(&KindAndDocs[size_t(Type::Boolean)]);
+    N.Bool = V;
+    return N;
+  }
+
+  /// Create a Float node associated with this Document.
+  DocNode getNode(double V) {
+    auto N = DocNode(&KindAndDocs[size_t(Type::Float)]);
+    N.Float = V;
+    return N;
+  }
+
+  /// Create a String node associated with this Document. If !Copy, the passed
+  /// string must remain valid for the lifetime of the Document.
+  DocNode getNode(StringRef V, bool Copy = false) {
+    if (Copy)
+      V = addString(V);
+    auto N = DocNode(&KindAndDocs[size_t(Type::String)]);
+    N.Raw = V;
+    return N;
+  }
+
+  /// Create a String node associated with this Document. If !Copy, the passed
+  /// string must remain valid for the lifetime of the Document.
+  DocNode getNode(const char *V, bool Copy = false) {
+    return getNode(StringRef(V), Copy);
+  }
+
+  /// Create an empty Map node associated with this Document.
+  MapDocNode getMapNode() {
+    auto N = DocNode(&KindAndDocs[size_t(Type::Map)]);
+    Maps.push_back(std::unique_ptr<DocNode::MapTy>(new DocNode::MapTy));
+    N.Map = Maps.back().get();
+    return N.getMap();
+  }
+
+  /// Create an empty Array node associated with this Document.
+  ArrayDocNode getArrayNode() {
+    auto N = DocNode(&KindAndDocs[size_t(Type::Array)]);
+    Arrays.push_back(std::unique_ptr<DocNode::ArrayTy>(new DocNode::ArrayTy));
+    N.Array = Arrays.back().get();
+    return N.getArray();
+  }
+
+  /// Read a MsgPack document from a binary MsgPack blob.
+  /// The blob data must remain valid for the lifetime of this Document (because
+  /// a string object in the document contains a StringRef into the original
+  /// blob).
+  /// If Multi, then this sets root to an array and adds top-level objects to
+  /// it. If !Multi, then it only reads a single top-level object, even if there
+  /// are more, and sets root to that.
+  /// Returns false if failed due to illegal format.
+  bool readFromBlob(StringRef Blob, bool Multi);
+
+  /// Write a MsgPack document to a binary MsgPack blob.
+  void writeToBlob(std::string &Blob);
+
+  /// Copy a string into the Document's strings list, and return the copy that
+  /// is owned by the Document.
+  StringRef addString(StringRef S) {
+    Strings.push_back(std::unique_ptr<char[]>(new char[S.size()]));
+    memcpy(&Strings.back()[0], S.data(), S.size());
+    return StringRef(&Strings.back()[0], S.size());
+  }
+
+  /// Set whether YAML output uses hex for UInt. Default off.
+  void setHexMode(bool Val = true) { HexMode = Val; }
+
+  /// Get Hexmode flag.
+  bool getHexMode() const { return HexMode; }
+
+  /// Convert MsgPack Document to YAML text.
+  void toYAML(raw_ostream &OS);
+
+  /// Read YAML text into the MsgPack document. Returns false on failure.
+  bool fromYAML(StringRef S);
+};
+
+} // namespace msgpack
+} // namespace llvm
+
+#endif // LLVM_BINARYFORMAT_MSGPACKDOCUMENT_H
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/MsgPackTypes.h b/linux-x64/clang/include/llvm/BinaryFormat/MsgPackTypes.h
deleted file mode 100644
index fcb11ab..0000000
--- a/linux-x64/clang/include/llvm/BinaryFormat/MsgPackTypes.h
+++ /dev/null
@@ -1,371 +0,0 @@
-//===- MsgPackTypes.h - MsgPack Types ---------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file
-/// This is a data structure for representing MessagePack "documents", with
-/// methods to go to and from MessagePack. The types also specialize YAMLIO
-/// traits in order to go to and from YAML.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/ADT/Optional.h"
-#include "llvm/BinaryFormat/MsgPackReader.h"
-#include "llvm/BinaryFormat/MsgPackWriter.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/YAMLTraits.h"
-#include <vector>
-
-#ifndef LLVM_BINARYFORMAT_MSGPACKTYPES_H
-#define LLVM_BINARYFORMAT_MSGPACKTYPES_H
-
-namespace llvm {
-namespace msgpack {
-
-class Node;
-
-/// Short-hand for a Node pointer.
-using NodePtr = std::shared_ptr<Node>;
-
-/// Short-hand for an Optional Node pointer.
-using OptNodePtr = Optional<NodePtr>;
-
-/// Abstract base-class which can be any MessagePack type.
-class Node {
-public:
-  enum NodeKind {
-    NK_Scalar,
-    NK_Array,
-    NK_Map,
-  };
-
-private:
-  virtual void anchor() = 0;
-  const NodeKind Kind;
-
-  static Expected<OptNodePtr> readArray(Reader &MPReader, size_t Length);
-  static Expected<OptNodePtr> readMap(Reader &MPReader, size_t Length);
-
-public:
-  NodeKind getKind() const { return Kind; }
-
-  /// Construct a Node. Used by derived classes to track kind information.
-  Node(NodeKind Kind) : Kind(Kind) {}
-
-  virtual ~Node() = default;
-
-  /// Read from a MessagePack reader \p MPReader, returning an error if one is
-  /// encountered, or None if \p MPReader is at the end of stream, or some Node
-  /// pointer if some type is read.
-  static Expected<OptNodePtr> read(Reader &MPReader);
-
-  /// Write to a MessagePack writer \p MPWriter.
-  virtual void write(Writer &MPWriter) = 0;
-};
-
-/// A MessagePack scalar.
-class ScalarNode : public Node {
-public:
-  enum ScalarKind {
-    SK_Int,
-    SK_UInt,
-    SK_Nil,
-    SK_Boolean,
-    SK_Float,
-    SK_String,
-    SK_Binary,
-  };
-
-private:
-  void anchor() override;
-
-  void destroy();
-
-  ScalarKind SKind;
-
-  union {
-    int64_t IntValue;
-    uint64_t UIntValue;
-    bool BoolValue;
-    double FloatValue;
-    std::string StringValue;
-  };
-
-public:
-  /// Construct an Int ScalarNode.
-  ScalarNode(int64_t IntValue);
-  /// Construct an Int ScalarNode.
-  ScalarNode(int32_t IntValue);
-  /// Construct an UInt ScalarNode.
-  ScalarNode(uint64_t UIntValue);
-  /// Construct an UInt ScalarNode.
-  ScalarNode(uint32_t UIntValue);
-  /// Construct a Nil ScalarNode.
-  ScalarNode();
-  /// Construct a Boolean ScalarNode.
-  ScalarNode(bool BoolValue);
-  /// Construct a Float ScalarNode.
-  ScalarNode(double FloatValue);
-  /// Construct a String ScalarNode.
-  ScalarNode(StringRef StringValue);
-  /// Construct a String ScalarNode.
-  ScalarNode(const char *StringValue);
-  /// Construct a String ScalarNode.
-  ScalarNode(std::string &&StringValue);
-  /// Construct a Binary ScalarNode.
-  ScalarNode(MemoryBufferRef BinaryValue);
-
-  ~ScalarNode();
-
-  ScalarNode &operator=(const ScalarNode &RHS) = delete;
-  /// A ScalarNode can only be move assigned.
-  ScalarNode &operator=(ScalarNode &&RHS);
-
-  /// Change the kind of this ScalarNode, zero initializing it to the new type.
-  void setScalarKind(ScalarKind SKind) {
-    switch (SKind) {
-    case SK_Int:
-      *this = int64_t(0);
-      break;
-    case SK_UInt:
-      *this = uint64_t(0);
-      break;
-    case SK_Boolean:
-      *this = false;
-      break;
-    case SK_Float:
-      *this = 0.0;
-      break;
-    case SK_String:
-      *this = StringRef();
-      break;
-    case SK_Binary:
-      *this = MemoryBufferRef("", "");
-      break;
-    case SK_Nil:
-      *this = ScalarNode();
-      break;
-    }
-  }
-
-  /// Get the current kind of ScalarNode.
-  ScalarKind getScalarKind() { return SKind; }
-
-  /// Get the value of an Int scalar.
-  ///
-  /// \warning Assumes getScalarKind() == SK_Int
-  int64_t getInt() {
-    assert(SKind == SK_Int);
-    return IntValue;
-  }
-
-  /// Get the value of a UInt scalar.
-  ///
-  /// \warning Assumes getScalarKind() == SK_UInt
-  uint64_t getUInt() {
-    assert(SKind == SK_UInt);
-    return UIntValue;
-  }
-
-  /// Get the value of an Boolean scalar.
-  ///
-  /// \warning Assumes getScalarKind() == SK_Boolean
-  bool getBool() {
-    assert(SKind == SK_Boolean);
-    return BoolValue;
-  }
-
-  /// Get the value of an Float scalar.
-  ///
-  /// \warning Assumes getScalarKind() == SK_Float
-  double getFloat() {
-    assert(SKind == SK_Float);
-    return FloatValue;
-  }
-
-  /// Get the value of a String scalar.
-  ///
-  /// \warning Assumes getScalarKind() == SK_String
-  StringRef getString() {
-    assert(SKind == SK_String);
-    return StringValue;
-  }
-
-  /// Get the value of a Binary scalar.
-  ///
-  /// \warning Assumes getScalarKind() == SK_Binary
-  StringRef getBinary() {
-    assert(SKind == SK_Binary);
-    return StringValue;
-  }
-
-  static bool classof(const Node *N) { return N->getKind() == NK_Scalar; }
-
-  void write(Writer &MPWriter) override;
-
-  /// Parse a YAML scalar of the current ScalarKind from \p ScalarStr.
-  ///
-  /// \returns An empty string on success, otherwise an error message.
-  StringRef inputYAML(StringRef ScalarStr);
-
-  /// Output a YAML scalar of the current ScalarKind into \p OS.
-  void outputYAML(raw_ostream &OS) const;
-
-  /// Determine which YAML quoting type the current value would need when
-  /// output.
-  yaml::QuotingType mustQuoteYAML(StringRef ScalarStr) const;
-
-  /// Get the YAML tag for the current ScalarKind.
-  StringRef getYAMLTag() const;
-
-  /// Flag which affects how the type handles YAML tags when reading and
-  /// writing.
-  ///
-  /// When false, tags are used when reading and writing. When reading, the tag
-  /// is used to decide the ScalarKind before parsing. When writing, the tag is
-  /// output along with the value.
-  ///
-  /// When true, tags are ignored when reading and writing. When reading, the
-  /// ScalarKind is always assumed to be String. When writing, the tag is not
-  /// output.
-  bool IgnoreTag = false;
-
-  static const char *IntTag;
-  static const char *NilTag;
-  static const char *BooleanTag;
-  static const char *FloatTag;
-  static const char *StringTag;
-  static const char *BinaryTag;
-};
-
-class ArrayNode : public Node, public std::vector<NodePtr> {
-  void anchor() override;
-
-public:
-  ArrayNode() : Node(NK_Array) {}
-  static bool classof(const Node *N) { return N->getKind() == NK_Array; }
-
-  void write(Writer &MPWriter) override {
-    MPWriter.writeArraySize(this->size());
-    for (auto &N : *this)
-      N->write(MPWriter);
-  }
-};
-
-class MapNode : public Node, public StringMap<NodePtr> {
-  void anchor() override;
-
-public:
-  MapNode() : Node(NK_Map) {}
-  static bool classof(const Node *N) { return N->getKind() == NK_Map; }
-
-  void write(Writer &MPWriter) override {
-    MPWriter.writeMapSize(this->size());
-    for (auto &N : *this) {
-      MPWriter.write(N.first());
-      N.second->write(MPWriter);
-    }
-  }
-};
-
-} // end namespace msgpack
-
-namespace yaml {
-
-template <> struct PolymorphicTraits<msgpack::NodePtr> {
-  static NodeKind getKind(const msgpack::NodePtr &N) {
-    if (isa<msgpack::ScalarNode>(*N))
-      return NodeKind::Scalar;
-    if (isa<msgpack::MapNode>(*N))
-      return NodeKind::Map;
-    if (isa<msgpack::ArrayNode>(*N))
-      return NodeKind::Sequence;
-    llvm_unreachable("NodeKind not supported");
-  }
-  static msgpack::ScalarNode &getAsScalar(msgpack::NodePtr &N) {
-    if (!N || !isa<msgpack::ScalarNode>(*N))
-      N.reset(new msgpack::ScalarNode());
-    return *cast<msgpack::ScalarNode>(N.get());
-  }
-  static msgpack::MapNode &getAsMap(msgpack::NodePtr &N) {
-    if (!N || !isa<msgpack::MapNode>(*N))
-      N.reset(new msgpack::MapNode());
-    return *cast<msgpack::MapNode>(N.get());
-  }
-  static msgpack::ArrayNode &getAsSequence(msgpack::NodePtr &N) {
-    if (!N || !isa<msgpack::ArrayNode>(*N))
-      N.reset(new msgpack::ArrayNode());
-    return *cast<msgpack::ArrayNode>(N.get());
-  }
-};
-
-template <> struct TaggedScalarTraits<msgpack::ScalarNode> {
-  static void output(const msgpack::ScalarNode &S, void *Ctxt,
-                     raw_ostream &ScalarOS, raw_ostream &TagOS) {
-    if (!S.IgnoreTag)
-      TagOS << S.getYAMLTag();
-    S.outputYAML(ScalarOS);
-  }
-
-  static StringRef input(StringRef ScalarStr, StringRef Tag, void *Ctxt,
-                         msgpack::ScalarNode &S) {
-    if (Tag == msgpack::ScalarNode::IntTag) {
-      S.setScalarKind(msgpack::ScalarNode::SK_UInt);
-      if (S.inputYAML(ScalarStr) == StringRef())
-        return StringRef();
-      S.setScalarKind(msgpack::ScalarNode::SK_Int);
-      return S.inputYAML(ScalarStr);
-    }
-
-    if (S.IgnoreTag || Tag == msgpack::ScalarNode::StringTag ||
-        Tag == "tag:yaml.org,2002:str")
-      S.setScalarKind(msgpack::ScalarNode::SK_String);
-    else if (Tag == msgpack::ScalarNode::NilTag)
-      S.setScalarKind(msgpack::ScalarNode::SK_Nil);
-    else if (Tag == msgpack::ScalarNode::BooleanTag)
-      S.setScalarKind(msgpack::ScalarNode::SK_Boolean);
-    else if (Tag == msgpack::ScalarNode::FloatTag)
-      S.setScalarKind(msgpack::ScalarNode::SK_Float);
-    else if (Tag == msgpack::ScalarNode::StringTag)
-      S.setScalarKind(msgpack::ScalarNode::SK_String);
-    else if (Tag == msgpack::ScalarNode::BinaryTag)
-      S.setScalarKind(msgpack::ScalarNode::SK_Binary);
-    else
-      return "Unsupported messagepack tag";
-
-    return S.inputYAML(ScalarStr);
-  }
-
-  static QuotingType mustQuote(const msgpack::ScalarNode &S, StringRef Str) {
-    return S.mustQuoteYAML(Str);
-  }
-};
-
-template <> struct CustomMappingTraits<msgpack::MapNode> {
-  static void inputOne(IO &IO, StringRef Key, msgpack::MapNode &M) {
-    IO.mapRequired(Key.str().c_str(), M[Key]);
-  }
-  static void output(IO &IO, msgpack::MapNode &M) {
-    for (auto &N : M)
-      IO.mapRequired(N.getKey().str().c_str(), N.getValue());
-  }
-};
-
-template <> struct SequenceTraits<msgpack::ArrayNode> {
-  static size_t size(IO &IO, msgpack::ArrayNode &A) { return A.size(); }
-  static msgpack::NodePtr &element(IO &IO, msgpack::ArrayNode &A,
-                                   size_t Index) {
-    if (Index >= A.size())
-      A.resize(Index + 1);
-    return A[Index];
-  }
-};
-
-} // end namespace yaml
-} // end namespace llvm
-
-#endif //  LLVM_BINARYFORMAT_MSGPACKTYPES_H
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h b/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h
index 51f6ab2..0ff52cb 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h
@@ -48,6 +48,11 @@
   std::vector<std::pair<std::string, std::string>> SDKs;
 };
 
+struct WasmFeatureEntry {
+  uint8_t Prefix;
+  std::string Name;
+};
+
 struct WasmExport {
   StringRef Name;
   uint8_t Kind;
@@ -131,12 +136,13 @@
 };
 
 struct WasmDataSegment {
-  uint32_t MemoryIndex;
-  WasmInitExpr Offset;
+  uint32_t InitFlags;
+  uint32_t MemoryIndex; // present if InitFlags & WASM_SEGMENT_HAS_MEMINDEX
+  WasmInitExpr Offset; // present if InitFlags & WASM_SEGMENT_IS_PASSIVE == 0
   ArrayRef<uint8_t> Content;
   StringRef Name; // from the "segment info" section
   uint32_t Alignment;
-  uint32_t Flags;
+  uint32_t LinkerFlags;
   uint32_t Comdat; // from the "comdat info" section
 };
 
@@ -235,11 +241,17 @@
 // Opcodes used in initializer expressions.
 enum : unsigned {
   WASM_OPCODE_END = 0x0b,
+  WASM_OPCODE_CALL = 0x10,
   WASM_OPCODE_GLOBAL_GET = 0x23,
+  WASM_OPCODE_I32_STORE = 0x36,
   WASM_OPCODE_I32_CONST = 0x41,
   WASM_OPCODE_I64_CONST = 0x42,
   WASM_OPCODE_F32_CONST = 0x43,
   WASM_OPCODE_F64_CONST = 0x44,
+  WASM_OPCODE_I32_ADD = 0x6a,
+  WASM_OPCODE_MISC_PREFIX = 0xfc,
+  WASM_OPCODE_MEMORY_INIT = 0x08,
+  WASM_OPCODE_DATA_DROP = 0x09,
 };
 
 enum : unsigned {
@@ -247,6 +259,18 @@
   WASM_LIMITS_FLAG_IS_SHARED = 0x2,
 };
 
+enum : unsigned {
+  WASM_SEGMENT_IS_PASSIVE = 0x01,
+  WASM_SEGMENT_HAS_MEMINDEX = 0x02,
+};
+
+// Feature policy prefixes used in the custom "target_features" section
+enum : uint8_t {
+  WASM_FEATURE_PREFIX_USED = '+',
+  WASM_FEATURE_PREFIX_REQUIRED = '=',
+  WASM_FEATURE_PREFIX_DISALLOWED = '-',
+};
+
 // Kind codes used in the custom "name" section
 enum : unsigned {
   WASM_NAMES_FUNCTION = 0x1,
@@ -343,6 +367,7 @@
 
 std::string toString(WasmSymbolType type);
 std::string relocTypetoString(uint32_t type);
+bool relocTypeHasAddend(uint32_t type);
 
 } // end namespace wasm
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def b/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def
index 59a786b..00dacf7 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def
@@ -2,14 +2,16 @@
 #error "WASM_RELOC must be defined"
 #endif
 
-WASM_RELOC(R_WASM_FUNCTION_INDEX_LEB,   0)
-WASM_RELOC(R_WASM_TABLE_INDEX_SLEB,     1)
-WASM_RELOC(R_WASM_TABLE_INDEX_I32,      2)
-WASM_RELOC(R_WASM_MEMORY_ADDR_LEB,      3)
-WASM_RELOC(R_WASM_MEMORY_ADDR_SLEB,     4)
-WASM_RELOC(R_WASM_MEMORY_ADDR_I32,      5)
-WASM_RELOC(R_WASM_TYPE_INDEX_LEB,       6)
-WASM_RELOC(R_WASM_GLOBAL_INDEX_LEB,     7)
-WASM_RELOC(R_WASM_FUNCTION_OFFSET_I32,  8)
-WASM_RELOC(R_WASM_SECTION_OFFSET_I32,   9)
-WASM_RELOC(R_WASM_EVENT_INDEX_LEB,     10)
+WASM_RELOC(R_WASM_FUNCTION_INDEX_LEB,    0)
+WASM_RELOC(R_WASM_TABLE_INDEX_SLEB,      1)
+WASM_RELOC(R_WASM_TABLE_INDEX_I32,       2)
+WASM_RELOC(R_WASM_MEMORY_ADDR_LEB,       3)
+WASM_RELOC(R_WASM_MEMORY_ADDR_SLEB,      4)
+WASM_RELOC(R_WASM_MEMORY_ADDR_I32,       5)
+WASM_RELOC(R_WASM_TYPE_INDEX_LEB,        6)
+WASM_RELOC(R_WASM_GLOBAL_INDEX_LEB,      7)
+WASM_RELOC(R_WASM_FUNCTION_OFFSET_I32,   8)
+WASM_RELOC(R_WASM_SECTION_OFFSET_I32,    9)
+WASM_RELOC(R_WASM_EVENT_INDEX_LEB,      10)
+WASM_RELOC(R_WASM_MEMORY_ADDR_REL_SLEB, 11)
+WASM_RELOC(R_WASM_TABLE_INDEX_REL_SLEB, 12)
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/XCOFF.h b/linux-x64/clang/include/llvm/BinaryFormat/XCOFF.h
new file mode 100644
index 0000000..7774ab3
--- /dev/null
+++ b/linux-x64/clang/include/llvm/BinaryFormat/XCOFF.h
@@ -0,0 +1,145 @@
+//===-- llvm/BinaryFormat/XCOFF.h - The XCOFF file format -------*- C++/-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines manifest constants for the XCOFF object file format.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BINARYFORMAT_XCOFF_H
+#define LLVM_BINARYFORMAT_XCOFF_H
+
+#include <cstdint>
+
+namespace llvm {
+namespace XCOFF {
+
+// Constants used in the XCOFF definition.
+enum { SectionNameSize = 8, SymbolNameSize = 8 };
+enum ReservedSectionNum { N_DEBUG = -2, N_ABS = -1, N_UNDEF = 0 };
+
+// x_smclas field of x_csect from system header: /usr/include/syms.h
+/// Storage Mapping Class definitions.
+enum StorageMappingClass {
+  //     READ ONLY CLASSES
+  XMC_PR = 0,      ///< Program Code
+  XMC_RO = 1,      ///< Read Only Constant
+  XMC_DB = 2,      ///< Debug Dictionary Table
+  XMC_GL = 6,      ///< Global Linkage (Interfile Interface Code)
+  XMC_XO = 7,      ///< Extended Operation (Pseudo Machine Instruction)
+  XMC_SV = 8,      ///< Supervisor Call (32-bit process only)
+  XMC_SV64 = 17,   ///< Supervisor Call for 64-bit process
+  XMC_SV3264 = 18, ///< Supervisor Call for both 32- and 64-bit processes
+  XMC_TI = 12,     ///< Traceback Index csect
+  XMC_TB = 13,     ///< Traceback Table csect
+
+  //       READ WRITE CLASSES
+  XMC_RW = 5,   ///< Read Write Data
+  XMC_TC0 = 15, ///< TOC Anchor for TOC Addressability
+  XMC_TC = 3,   ///< General TOC item
+  XMC_TD = 16,  ///< Scalar data item in the TOC
+  XMC_DS = 10,  ///< Descriptor csect
+  XMC_UA = 4,   ///< Unclassified - Treated as Read Write
+  XMC_BS = 9,   ///< BSS class (uninitialized static internal)
+  XMC_UC = 11,  ///< Un-named Fortran Common
+
+  XMC_TL = 20, ///< Initialized thread-local variable
+  XMC_UL = 21, ///< Uninitialized thread-local variable
+  XMC_TE = 22  ///< Symbol mapped at the end of TOC
+};
+
+// Flags for defining the section type. Used for the s_flags field of
+// the section header structure. Defined in the system header `scnhdr.h`.
+enum SectionTypeFlags {
+  STYP_PAD = 0x0008,
+  STYP_DWARF = 0x0010,
+  STYP_TEXT = 0x0020,
+  STYP_DATA = 0x0040,
+  STYP_BSS = 0x0080,
+  STYP_EXCEPT = 0x0100,
+  STYP_INFO = 0x0200,
+  STYP_TDATA = 0x0400,
+  STYP_TBSS = 0x0800,
+  STYP_LOADER = 0x1000,
+  STYP_DEBUG = 0x2000,
+  STYP_TYPCHK = 0x4000,
+  STYP_OVRFLO = 0x8000
+};
+
+// STORAGE CLASSES, n_sclass field of syment.
+// The values come from `storclass.h` and `dbxstclass.h`.
+enum StorageClass : uint8_t {
+  // Storage classes used for symbolic debugging symbols.
+  C_FILE = 103,  // File name
+  C_BINCL = 108, // Beginning of include file
+  C_EINCL = 109, // Ending of include file
+  C_GSYM = 128,  // Global variable
+  C_STSYM = 133, // Statically allocated symbol
+  C_BCOMM = 135, // Beginning of common block
+  C_ECOMM = 137, // End of common block
+  C_ENTRY = 141, // Alternate entry
+  C_BSTAT = 143, // Beginning of static block
+  C_ESTAT = 144, // End of static block
+  C_GTLS = 145,  // Global thread-local variable
+  C_STTLS = 146, // Static thread-local variable
+
+  // Storage classes used for DWARF symbols.
+  C_DWARF = 112, // DWARF section symbol
+
+  // Storage classes used for absolute symbols.
+  C_LSYM = 129,  // Automatic variable allocated on stack
+  C_PSYM = 130,  // Argument to subroutine allocated on stack
+  C_RSYM = 131,  // Register variable
+  C_RPSYM = 132, // Argument to function or procedure stored in register
+  C_ECOML = 136, // Local member of common block
+  C_FUN = 142,   // Function or procedure
+
+  // Storage classes used for undefined external symbols or
+  // symbols of general sections.
+  C_EXT = 2,       // External symbol
+  C_WEAKEXT = 111, // Weak external symbol
+
+  // Storage classes used for symbols of general sections.
+  C_NULL = 0,
+  C_STAT = 3,     // Static
+  C_BLOCK = 100,  // ".bb" or ".eb"
+  C_FCN = 101,    // ".bf" or ".ef"
+  C_HIDEXT = 107, // Un-named external symbol
+  C_INFO = 110,   // Comment string in .info section
+  C_DECL = 140,   // Declaration of object (type)
+
+  // Storage classes - Obsolete/Undocumented.
+  C_AUTO = 1,     // Automatic variable
+  C_REG = 4,      // Register variable
+  C_EXTDEF = 5,   // External definition
+  C_LABEL = 6,    // Label
+  C_ULABEL = 7,   // Undefined label
+  C_MOS = 8,      // Member of structure
+  C_ARG = 9,      // Function argument
+  C_STRTAG = 10,  // Structure tag
+  C_MOU = 11,     // Member of union
+  C_UNTAG = 12,   // Union tag
+  C_TPDEF = 13,   // Type definition
+  C_USTATIC = 14, // Undefined static
+  C_ENTAG = 15,   // Enumeration tag
+  C_MOE = 16,     // Member of enumeration
+  C_REGPARM = 17, // Register parameter
+  C_FIELD = 18,   // Bit field
+  C_EOS = 102,    // End of structure
+  C_LINE = 104,
+  C_ALIAS = 105,  // Duplicate tag
+  C_HIDDEN = 106, // Special storage class for external
+  C_EFCN = 255,   // Physical end of function
+
+  // Storage classes - reserved
+  C_TCSYM = 134 // Reserved
+};
+
+} // end namespace XCOFF
+} // end namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitCodes.h b/linux-x64/clang/include/llvm/Bitcode/BitCodes.h
deleted file mode 100644
index a0d8dfd..0000000
--- a/linux-x64/clang/include/llvm/Bitcode/BitCodes.h
+++ /dev/null
@@ -1,182 +0,0 @@
-//===- BitCodes.h - Enum values for the bitcode format ----------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This header Bitcode enum values.
-//
-// The enum values defined in this file should be considered permanent.  If
-// new features are added, they should have values added at the end of the
-// respective lists.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_BITCODE_BITCODES_H
-#define LLVM_BITCODE_BITCODES_H
-
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/Support/DataTypes.h"
-#include "llvm/Support/ErrorHandling.h"
-#include <cassert>
-
-namespace llvm {
-/// Offsets of the 32-bit fields of bitcode wrapper header.
-static const unsigned BWH_MagicField = 0 * 4;
-static const unsigned BWH_VersionField = 1 * 4;
-static const unsigned BWH_OffsetField = 2 * 4;
-static const unsigned BWH_SizeField = 3 * 4;
-static const unsigned BWH_CPUTypeField = 4 * 4;
-static const unsigned BWH_HeaderSize = 5 * 4;
-
-namespace bitc {
-  enum StandardWidths {
-    BlockIDWidth   = 8,  // We use VBR-8 for block IDs.
-    CodeLenWidth   = 4,  // Codelen are VBR-4.
-    BlockSizeWidth = 32  // BlockSize up to 2^32 32-bit words = 16GB per block.
-  };
-
-  // The standard abbrev namespace always has a way to exit a block, enter a
-  // nested block, define abbrevs, and define an unabbreviated record.
-  enum FixedAbbrevIDs {
-    END_BLOCK = 0,  // Must be zero to guarantee termination for broken bitcode.
-    ENTER_SUBBLOCK = 1,
-
-    /// DEFINE_ABBREV - Defines an abbrev for the current block.  It consists
-    /// of a vbr5 for # operand infos.  Each operand info is emitted with a
-    /// single bit to indicate if it is a literal encoding.  If so, the value is
-    /// emitted with a vbr8.  If not, the encoding is emitted as 3 bits followed
-    /// by the info value as a vbr5 if needed.
-    DEFINE_ABBREV = 2,
-
-    // UNABBREV_RECORDs are emitted with a vbr6 for the record code, followed by
-    // a vbr6 for the # operands, followed by vbr6's for each operand.
-    UNABBREV_RECORD = 3,
-
-    // This is not a code, this is a marker for the first abbrev assignment.
-    FIRST_APPLICATION_ABBREV = 4
-  };
-
-  /// StandardBlockIDs - All bitcode files can optionally include a BLOCKINFO
-  /// block, which contains metadata about other blocks in the file.
-  enum StandardBlockIDs {
-    /// BLOCKINFO_BLOCK is used to define metadata about blocks, for example,
-    /// standard abbrevs that should be available to all blocks of a specified
-    /// ID.
-    BLOCKINFO_BLOCK_ID = 0,
-
-    // Block IDs 1-7 are reserved for future expansion.
-    FIRST_APPLICATION_BLOCKID = 8
-  };
-
-  /// BlockInfoCodes - The blockinfo block contains metadata about user-defined
-  /// blocks.
-  enum BlockInfoCodes {
-    // DEFINE_ABBREV has magic semantics here, applying to the current SETBID'd
-    // block, instead of the BlockInfo block.
-
-    BLOCKINFO_CODE_SETBID        = 1, // SETBID: [blockid#]
-    BLOCKINFO_CODE_BLOCKNAME     = 2, // BLOCKNAME: [name]
-    BLOCKINFO_CODE_SETRECORDNAME = 3  // BLOCKINFO_CODE_SETRECORDNAME:
-                                      //                             [id, name]
-  };
-
-} // End bitc namespace
-
-/// BitCodeAbbrevOp - This describes one or more operands in an abbreviation.
-/// This is actually a union of two different things:
-///   1. It could be a literal integer value ("the operand is always 17").
-///   2. It could be an encoding specification ("this operand encoded like so").
-///
-class BitCodeAbbrevOp {
-  uint64_t Val;           // A literal value or data for an encoding.
-  bool IsLiteral : 1;     // Indicate whether this is a literal value or not.
-  unsigned Enc   : 3;     // The encoding to use.
-public:
-  enum Encoding {
-    Fixed = 1,  // A fixed width field, Val specifies number of bits.
-    VBR   = 2,  // A VBR field where Val specifies the width of each chunk.
-    Array = 3,  // A sequence of fields, next field species elt encoding.
-    Char6 = 4,  // A 6-bit fixed field which maps to [a-zA-Z0-9._].
-    Blob  = 5   // 32-bit aligned array of 8-bit characters.
-  };
-
-  explicit BitCodeAbbrevOp(uint64_t V) :  Val(V), IsLiteral(true) {}
-  explicit BitCodeAbbrevOp(Encoding E, uint64_t Data = 0)
-    : Val(Data), IsLiteral(false), Enc(E) {}
-
-  bool isLiteral() const  { return IsLiteral; }
-  bool isEncoding() const { return !IsLiteral; }
-
-  // Accessors for literals.
-  uint64_t getLiteralValue() const { assert(isLiteral()); return Val; }
-
-  // Accessors for encoding info.
-  Encoding getEncoding() const { assert(isEncoding()); return (Encoding)Enc; }
-  uint64_t getEncodingData() const {
-    assert(isEncoding() && hasEncodingData());
-    return Val;
-  }
-
-  bool hasEncodingData() const { return hasEncodingData(getEncoding()); }
-  static bool hasEncodingData(Encoding E) {
-    switch (E) {
-    case Fixed:
-    case VBR:
-      return true;
-    case Array:
-    case Char6:
-    case Blob:
-      return false;
-    }
-    report_fatal_error("Invalid encoding");
-  }
-
-  /// isChar6 - Return true if this character is legal in the Char6 encoding.
-  static bool isChar6(char C) {
-    if (C >= 'a' && C <= 'z') return true;
-    if (C >= 'A' && C <= 'Z') return true;
-    if (C >= '0' && C <= '9') return true;
-    if (C == '.' || C == '_') return true;
-    return false;
-  }
-  static unsigned EncodeChar6(char C) {
-    if (C >= 'a' && C <= 'z') return C-'a';
-    if (C >= 'A' && C <= 'Z') return C-'A'+26;
-    if (C >= '0' && C <= '9') return C-'0'+26+26;
-    if (C == '.')             return 62;
-    if (C == '_')             return 63;
-    llvm_unreachable("Not a value Char6 character!");
-  }
-
-  static char DecodeChar6(unsigned V) {
-    assert((V & ~63) == 0 && "Not a Char6 encoded character!");
-    return "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._"
-        [V];
-  }
-
-};
-
-/// BitCodeAbbrev - This class represents an abbreviation record.  An
-/// abbreviation allows a complex record that has redundancy to be stored in a
-/// specialized format instead of the fully-general, fully-vbr, format.
-class BitCodeAbbrev {
-  SmallVector<BitCodeAbbrevOp, 32> OperandList;
-
-public:
-  unsigned getNumOperandInfos() const {
-    return static_cast<unsigned>(OperandList.size());
-  }
-  const BitCodeAbbrevOp &getOperandInfo(unsigned N) const {
-    return OperandList[N];
-  }
-
-  void Add(const BitCodeAbbrevOp &OpInfo) {
-    OperandList.push_back(OpInfo);
-  }
-};
-} // End llvm namespace
-
-#endif
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitcodeAnalyzer.h b/linux-x64/clang/include/llvm/Bitcode/BitcodeAnalyzer.h
new file mode 100644
index 0000000..cfdebd6
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Bitcode/BitcodeAnalyzer.h
@@ -0,0 +1,103 @@
+//===- llvm/Bitcode/BitcodeAnalyzer.h - Bitcode analyzer --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This header defines interfaces to analyze LLVM bitcode files/streams.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BITCODE_BITCODE_ANALYZER_H
+#define LLVM_BITCODE_BITCODE_ANALYZER_H
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Bitstream/BitstreamReader.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/raw_ostream.h"
+#include <map>
+#include <vector>
+
+namespace llvm {
+
+/// CurStreamTypeType - A type for CurStreamType
+enum CurStreamTypeType {
+  UnknownBitstream,
+  LLVMIRBitstream,
+  ClangSerializedASTBitstream,
+  ClangSerializedDiagnosticsBitstream,
+};
+
+struct BCDumpOptions {
+  /// The stream.
+  raw_ostream &OS;
+  /// Print per-code histogram.
+  bool Histogram = false;
+  /// Don't emit numeric info in dump if symbolic info is available.
+  bool Symbolic = false;
+  /// Print binary blobs using hex escapes.
+  bool ShowBinaryBlobs = false;
+
+  BCDumpOptions(raw_ostream &OS) : OS(OS) {}
+};
+
+class BitcodeAnalyzer {
+  BitstreamCursor Stream;
+  BitstreamBlockInfo BlockInfo;
+  CurStreamTypeType CurStreamType;
+  Optional<BitstreamCursor> BlockInfoStream;
+  unsigned NumTopBlocks = 0;
+
+  struct PerRecordStats {
+    unsigned NumInstances;
+    unsigned NumAbbrev;
+    uint64_t TotalBits;
+    PerRecordStats() : NumInstances(0), NumAbbrev(0), TotalBits(0) {}
+  };
+
+  struct PerBlockIDStats {
+    /// NumInstances - This the number of times this block ID has been seen.
+    unsigned NumInstances;
+    /// NumBits - The total size in bits of all of these blocks.
+    uint64_t NumBits;
+    /// NumSubBlocks - The total number of blocks these blocks contain.
+    unsigned NumSubBlocks;
+    /// NumAbbrevs - The total number of abbreviations.
+    unsigned NumAbbrevs;
+    /// NumRecords - The total number of records these blocks contain, and the
+    /// number that are abbreviated.
+    unsigned NumRecords, NumAbbreviatedRecords;
+    /// CodeFreq - Keep track of the number of times we see each code.
+    std::vector<PerRecordStats> CodeFreq;
+    PerBlockIDStats()
+        : NumInstances(0), NumBits(0), NumSubBlocks(0), NumAbbrevs(0),
+          NumRecords(0), NumAbbreviatedRecords(0) {}
+  };
+
+  std::map<unsigned, PerBlockIDStats> BlockIDStats;
+
+public:
+  BitcodeAnalyzer(StringRef Buffer, Optional<StringRef> BlockInfoBuffer = None);
+  /// Analyze the bitcode file.
+  Error analyze(Optional<BCDumpOptions> O = None,
+                Optional<StringRef> CheckHash = None);
+  /// Print stats about the bitcode file.
+  void printStats(BCDumpOptions O, Optional<StringRef> Filename = None);
+
+private:
+  /// Read a block, updating statistics, etc.
+  Error parseBlock(unsigned BlockID, unsigned IndentLevel,
+                   Optional<BCDumpOptions> O = None,
+                   Optional<StringRef> CheckHash = None);
+
+  Error decodeMetadataStringsBlob(StringRef Indent, ArrayRef<uint64_t> Record,
+                                  StringRef Blob, raw_ostream &OS);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_BITCODE_BITCODE_ANALYZER_H
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitcodeReader.h b/linux-x64/clang/include/llvm/Bitcode/BitcodeReader.h
index 3e8e7ed..ba61da7 100644
--- a/linux-x64/clang/include/llvm/Bitcode/BitcodeReader.h
+++ b/linux-x64/clang/include/llvm/Bitcode/BitcodeReader.h
@@ -15,7 +15,7 @@
 
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Bitcode/BitCodes.h"
+#include "llvm/Bitstream/BitCodes.h"
 #include "llvm/IR/ModuleSummaryIndex.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/Error.h"
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitstreamReader.h b/linux-x64/clang/include/llvm/Bitcode/BitstreamReader.h
deleted file mode 100644
index 90cbe7b..0000000
--- a/linux-x64/clang/include/llvm/Bitcode/BitstreamReader.h
+++ /dev/null
@@ -1,505 +0,0 @@
-//===- BitstreamReader.h - Low-level bitstream reader interface -*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This header defines the BitstreamReader class.  This class can be used to
-// read an arbitrary bitstream, regardless of its contents.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_BITCODE_BITSTREAMREADER_H
-#define LLVM_BITCODE_BITSTREAMREADER_H
-
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/Bitcode/BitCodes.h"
-#include "llvm/Support/Endian.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/MathExtras.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include <algorithm>
-#include <cassert>
-#include <climits>
-#include <cstddef>
-#include <cstdint>
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-namespace llvm {
-
-/// This class maintains the abbreviations read from a block info block.
-class BitstreamBlockInfo {
-public:
-  /// This contains information emitted to BLOCKINFO_BLOCK blocks. These
-  /// describe abbreviations that all blocks of the specified ID inherit.
-  struct BlockInfo {
-    unsigned BlockID;
-    std::vector<std::shared_ptr<BitCodeAbbrev>> Abbrevs;
-    std::string Name;
-    std::vector<std::pair<unsigned, std::string>> RecordNames;
-  };
-
-private:
-  std::vector<BlockInfo> BlockInfoRecords;
-
-public:
-  /// If there is block info for the specified ID, return it, otherwise return
-  /// null.
-  const BlockInfo *getBlockInfo(unsigned BlockID) const {
-    // Common case, the most recent entry matches BlockID.
-    if (!BlockInfoRecords.empty() && BlockInfoRecords.back().BlockID == BlockID)
-      return &BlockInfoRecords.back();
-
-    for (unsigned i = 0, e = static_cast<unsigned>(BlockInfoRecords.size());
-         i != e; ++i)
-      if (BlockInfoRecords[i].BlockID == BlockID)
-        return &BlockInfoRecords[i];
-    return nullptr;
-  }
-
-  BlockInfo &getOrCreateBlockInfo(unsigned BlockID) {
-    if (const BlockInfo *BI = getBlockInfo(BlockID))
-      return *const_cast<BlockInfo*>(BI);
-
-    // Otherwise, add a new record.
-    BlockInfoRecords.emplace_back();
-    BlockInfoRecords.back().BlockID = BlockID;
-    return BlockInfoRecords.back();
-  }
-};
-
-/// This represents a position within a bitstream. There may be multiple
-/// independent cursors reading within one bitstream, each maintaining their
-/// own local state.
-class SimpleBitstreamCursor {
-  ArrayRef<uint8_t> BitcodeBytes;
-  size_t NextChar = 0;
-
-public:
-  /// This is the current data we have pulled from the stream but have not
-  /// returned to the client. This is specifically and intentionally defined to
-  /// follow the word size of the host machine for efficiency. We use word_t in
-  /// places that are aware of this to make it perfectly explicit what is going
-  /// on.
-  using word_t = size_t;
-
-private:
-  word_t CurWord = 0;
-
-  /// This is the number of bits in CurWord that are valid. This is always from
-  /// [0...bits_of(size_t)-1] inclusive.
-  unsigned BitsInCurWord = 0;
-
-public:
-  static const size_t MaxChunkSize = sizeof(word_t) * 8;
-
-  SimpleBitstreamCursor() = default;
-  explicit SimpleBitstreamCursor(ArrayRef<uint8_t> BitcodeBytes)
-      : BitcodeBytes(BitcodeBytes) {}
-  explicit SimpleBitstreamCursor(StringRef BitcodeBytes)
-      : BitcodeBytes(reinterpret_cast<const uint8_t *>(BitcodeBytes.data()),
-                     BitcodeBytes.size()) {}
-  explicit SimpleBitstreamCursor(MemoryBufferRef BitcodeBytes)
-      : SimpleBitstreamCursor(BitcodeBytes.getBuffer()) {}
-
-  bool canSkipToPos(size_t pos) const {
-    // pos can be skipped to if it is a valid address or one byte past the end.
-    return pos <= BitcodeBytes.size();
-  }
-
-  bool AtEndOfStream() {
-    return BitsInCurWord == 0 && BitcodeBytes.size() <= NextChar;
-  }
-
-  /// Return the bit # of the bit we are reading.
-  uint64_t GetCurrentBitNo() const {
-    return NextChar*CHAR_BIT - BitsInCurWord;
-  }
-
-  // Return the byte # of the current bit.
-  uint64_t getCurrentByteNo() const { return GetCurrentBitNo() / 8; }
-
-  ArrayRef<uint8_t> getBitcodeBytes() const { return BitcodeBytes; }
-
-  /// Reset the stream to the specified bit number.
-  void JumpToBit(uint64_t BitNo) {
-    size_t ByteNo = size_t(BitNo/8) & ~(sizeof(word_t)-1);
-    unsigned WordBitNo = unsigned(BitNo & (sizeof(word_t)*8-1));
-    assert(canSkipToPos(ByteNo) && "Invalid location");
-
-    // Move the cursor to the right word.
-    NextChar = ByteNo;
-    BitsInCurWord = 0;
-
-    // Skip over any bits that are already consumed.
-    if (WordBitNo)
-      Read(WordBitNo);
-  }
-
-  /// Get a pointer into the bitstream at the specified byte offset.
-  const uint8_t *getPointerToByte(uint64_t ByteNo, uint64_t NumBytes) {
-    return BitcodeBytes.data() + ByteNo;
-  }
-
-  /// Get a pointer into the bitstream at the specified bit offset.
-  ///
-  /// The bit offset must be on a byte boundary.
-  const uint8_t *getPointerToBit(uint64_t BitNo, uint64_t NumBytes) {
-    assert(!(BitNo % 8) && "Expected bit on byte boundary");
-    return getPointerToByte(BitNo / 8, NumBytes);
-  }
-
-  void fillCurWord() {
-    if (NextChar >= BitcodeBytes.size())
-      report_fatal_error("Unexpected end of file");
-
-    // Read the next word from the stream.
-    const uint8_t *NextCharPtr = BitcodeBytes.data() + NextChar;
-    unsigned BytesRead;
-    if (BitcodeBytes.size() >= NextChar + sizeof(word_t)) {
-      BytesRead = sizeof(word_t);
-      CurWord =
-          support::endian::read<word_t, support::little, support::unaligned>(
-              NextCharPtr);
-    } else {
-      // Short read.
-      BytesRead = BitcodeBytes.size() - NextChar;
-      CurWord = 0;
-      for (unsigned B = 0; B != BytesRead; ++B)
-        CurWord |= uint64_t(NextCharPtr[B]) << (B * 8);
-    }
-    NextChar += BytesRead;
-    BitsInCurWord = BytesRead * 8;
-  }
-
-  word_t Read(unsigned NumBits) {
-    static const unsigned BitsInWord = MaxChunkSize;
-
-    assert(NumBits && NumBits <= BitsInWord &&
-           "Cannot return zero or more than BitsInWord bits!");
-
-    static const unsigned Mask = sizeof(word_t) > 4 ? 0x3f : 0x1f;
-
-    // If the field is fully contained by CurWord, return it quickly.
-    if (BitsInCurWord >= NumBits) {
-      word_t R = CurWord & (~word_t(0) >> (BitsInWord - NumBits));
-
-      // Use a mask to avoid undefined behavior.
-      CurWord >>= (NumBits & Mask);
-
-      BitsInCurWord -= NumBits;
-      return R;
-    }
-
-    word_t R = BitsInCurWord ? CurWord : 0;
-    unsigned BitsLeft = NumBits - BitsInCurWord;
-
-    fillCurWord();
-
-    // If we run out of data, abort.
-    if (BitsLeft > BitsInCurWord)
-      report_fatal_error("Unexpected end of file");
-
-    word_t R2 = CurWord & (~word_t(0) >> (BitsInWord - BitsLeft));
-
-    // Use a mask to avoid undefined behavior.
-    CurWord >>= (BitsLeft & Mask);
-
-    BitsInCurWord -= BitsLeft;
-
-    R |= R2 << (NumBits - BitsLeft);
-
-    return R;
-  }
-
-  uint32_t ReadVBR(unsigned NumBits) {
-    uint32_t Piece = Read(NumBits);
-    if ((Piece & (1U << (NumBits-1))) == 0)
-      return Piece;
-
-    uint32_t Result = 0;
-    unsigned NextBit = 0;
-    while (true) {
-      Result |= (Piece & ((1U << (NumBits-1))-1)) << NextBit;
-
-      if ((Piece & (1U << (NumBits-1))) == 0)
-        return Result;
-
-      NextBit += NumBits-1;
-      Piece = Read(NumBits);
-    }
-  }
-
-  // Read a VBR that may have a value up to 64-bits in size. The chunk size of
-  // the VBR must still be <= 32 bits though.
-  uint64_t ReadVBR64(unsigned NumBits) {
-    uint32_t Piece = Read(NumBits);
-    if ((Piece & (1U << (NumBits-1))) == 0)
-      return uint64_t(Piece);
-
-    uint64_t Result = 0;
-    unsigned NextBit = 0;
-    while (true) {
-      Result |= uint64_t(Piece & ((1U << (NumBits-1))-1)) << NextBit;
-
-      if ((Piece & (1U << (NumBits-1))) == 0)
-        return Result;
-
-      NextBit += NumBits-1;
-      Piece = Read(NumBits);
-    }
-  }
-
-  void SkipToFourByteBoundary() {
-    // If word_t is 64-bits and if we've read less than 32 bits, just dump
-    // the bits we have up to the next 32-bit boundary.
-    if (sizeof(word_t) > 4 &&
-        BitsInCurWord >= 32) {
-      CurWord >>= BitsInCurWord-32;
-      BitsInCurWord = 32;
-      return;
-    }
-
-    BitsInCurWord = 0;
-  }
-
-  /// Skip to the end of the file.
-  void skipToEnd() { NextChar = BitcodeBytes.size(); }
-};
-
-/// When advancing through a bitstream cursor, each advance can discover a few
-/// different kinds of entries:
-struct BitstreamEntry {
-  enum {
-    Error,    // Malformed bitcode was found.
-    EndBlock, // We've reached the end of the current block, (or the end of the
-              // file, which is treated like a series of EndBlock records.
-    SubBlock, // This is the start of a new subblock of a specific ID.
-    Record    // This is a record with a specific AbbrevID.
-  } Kind;
-
-  unsigned ID;
-
-  static BitstreamEntry getError() {
-    BitstreamEntry E; E.Kind = Error; return E;
-  }
-
-  static BitstreamEntry getEndBlock() {
-    BitstreamEntry E; E.Kind = EndBlock; return E;
-  }
-
-  static BitstreamEntry getSubBlock(unsigned ID) {
-    BitstreamEntry E; E.Kind = SubBlock; E.ID = ID; return E;
-  }
-
-  static BitstreamEntry getRecord(unsigned AbbrevID) {
-    BitstreamEntry E; E.Kind = Record; E.ID = AbbrevID; return E;
-  }
-};
-
-/// This represents a position within a bitcode file, implemented on top of a
-/// SimpleBitstreamCursor.
-///
-/// Unlike iterators, BitstreamCursors are heavy-weight objects that should not
-/// be passed by value.
-class BitstreamCursor : SimpleBitstreamCursor {
-  // This is the declared size of code values used for the current block, in
-  // bits.
-  unsigned CurCodeSize = 2;
-
-  /// Abbrevs installed at in this block.
-  std::vector<std::shared_ptr<BitCodeAbbrev>> CurAbbrevs;
-
-  struct Block {
-    unsigned PrevCodeSize;
-    std::vector<std::shared_ptr<BitCodeAbbrev>> PrevAbbrevs;
-
-    explicit Block(unsigned PCS) : PrevCodeSize(PCS) {}
-  };
-
-  /// This tracks the codesize of parent blocks.
-  SmallVector<Block, 8> BlockScope;
-
-  BitstreamBlockInfo *BlockInfo = nullptr;
-
-public:
-  static const size_t MaxChunkSize = sizeof(word_t) * 8;
-
-  BitstreamCursor() = default;
-  explicit BitstreamCursor(ArrayRef<uint8_t> BitcodeBytes)
-      : SimpleBitstreamCursor(BitcodeBytes) {}
-  explicit BitstreamCursor(StringRef BitcodeBytes)
-      : SimpleBitstreamCursor(BitcodeBytes) {}
-  explicit BitstreamCursor(MemoryBufferRef BitcodeBytes)
-      : SimpleBitstreamCursor(BitcodeBytes) {}
-
-  using SimpleBitstreamCursor::canSkipToPos;
-  using SimpleBitstreamCursor::AtEndOfStream;
-  using SimpleBitstreamCursor::getBitcodeBytes;
-  using SimpleBitstreamCursor::GetCurrentBitNo;
-  using SimpleBitstreamCursor::getCurrentByteNo;
-  using SimpleBitstreamCursor::getPointerToByte;
-  using SimpleBitstreamCursor::JumpToBit;
-  using SimpleBitstreamCursor::fillCurWord;
-  using SimpleBitstreamCursor::Read;
-  using SimpleBitstreamCursor::ReadVBR;
-  using SimpleBitstreamCursor::ReadVBR64;
-
-  /// Return the number of bits used to encode an abbrev #.
-  unsigned getAbbrevIDWidth() const { return CurCodeSize; }
-
-  /// Flags that modify the behavior of advance().
-  enum {
-    /// If this flag is used, the advance() method does not automatically pop
-    /// the block scope when the end of a block is reached.
-    AF_DontPopBlockAtEnd = 1,
-
-    /// If this flag is used, abbrev entries are returned just like normal
-    /// records.
-    AF_DontAutoprocessAbbrevs = 2
-  };
-
-  /// Advance the current bitstream, returning the next entry in the stream.
-  BitstreamEntry advance(unsigned Flags = 0) {
-    while (true) {
-      if (AtEndOfStream())
-        return BitstreamEntry::getError();
-
-      unsigned Code = ReadCode();
-      if (Code == bitc::END_BLOCK) {
-        // Pop the end of the block unless Flags tells us not to.
-        if (!(Flags & AF_DontPopBlockAtEnd) && ReadBlockEnd())
-          return BitstreamEntry::getError();
-        return BitstreamEntry::getEndBlock();
-      }
-
-      if (Code == bitc::ENTER_SUBBLOCK)
-        return BitstreamEntry::getSubBlock(ReadSubBlockID());
-
-      if (Code == bitc::DEFINE_ABBREV &&
-          !(Flags & AF_DontAutoprocessAbbrevs)) {
-        // We read and accumulate abbrev's, the client can't do anything with
-        // them anyway.
-        ReadAbbrevRecord();
-        continue;
-      }
-
-      return BitstreamEntry::getRecord(Code);
-    }
-  }
-
-  /// This is a convenience function for clients that don't expect any
-  /// subblocks. This just skips over them automatically.
-  BitstreamEntry advanceSkippingSubblocks(unsigned Flags = 0) {
-    while (true) {
-      // If we found a normal entry, return it.
-      BitstreamEntry Entry = advance(Flags);
-      if (Entry.Kind != BitstreamEntry::SubBlock)
-        return Entry;
-
-      // If we found a sub-block, just skip over it and check the next entry.
-      if (SkipBlock())
-        return BitstreamEntry::getError();
-    }
-  }
-
-  unsigned ReadCode() {
-    return Read(CurCodeSize);
-  }
-
-  // Block header:
-  //    [ENTER_SUBBLOCK, blockid, newcodelen, <align4bytes>, blocklen]
-
-  /// Having read the ENTER_SUBBLOCK code, read the BlockID for the block.
-  unsigned ReadSubBlockID() {
-    return ReadVBR(bitc::BlockIDWidth);
-  }
-
-  /// Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body
-  /// of this block. If the block record is malformed, return true.
-  bool SkipBlock() {
-    // Read and ignore the codelen value.  Since we are skipping this block, we
-    // don't care what code widths are used inside of it.
-    ReadVBR(bitc::CodeLenWidth);
-    SkipToFourByteBoundary();
-    size_t NumFourBytes = Read(bitc::BlockSizeWidth);
-
-    // Check that the block wasn't partially defined, and that the offset isn't
-    // bogus.
-    size_t SkipTo = GetCurrentBitNo() + NumFourBytes*4*8;
-    if (AtEndOfStream() || !canSkipToPos(SkipTo/8))
-      return true;
-
-    JumpToBit(SkipTo);
-    return false;
-  }
-
-  /// Having read the ENTER_SUBBLOCK abbrevid, enter the block, and return true
-  /// if the block has an error.
-  bool EnterSubBlock(unsigned BlockID, unsigned *NumWordsP = nullptr);
-
-  bool ReadBlockEnd() {
-    if (BlockScope.empty()) return true;
-
-    // Block tail:
-    //    [END_BLOCK, <align4bytes>]
-    SkipToFourByteBoundary();
-
-    popBlockScope();
-    return false;
-  }
-
-private:
-  void popBlockScope() {
-    CurCodeSize = BlockScope.back().PrevCodeSize;
-
-    CurAbbrevs = std::move(BlockScope.back().PrevAbbrevs);
-    BlockScope.pop_back();
-  }
-
-  //===--------------------------------------------------------------------===//
-  // Record Processing
-  //===--------------------------------------------------------------------===//
-
-public:
-  /// Return the abbreviation for the specified AbbrevId.
-  const BitCodeAbbrev *getAbbrev(unsigned AbbrevID) {
-    unsigned AbbrevNo = AbbrevID - bitc::FIRST_APPLICATION_ABBREV;
-    if (AbbrevNo >= CurAbbrevs.size())
-      report_fatal_error("Invalid abbrev number");
-    return CurAbbrevs[AbbrevNo].get();
-  }
-
-  /// Read the current record and discard it, returning the code for the record.
-  unsigned skipRecord(unsigned AbbrevID);
-
-  unsigned readRecord(unsigned AbbrevID, SmallVectorImpl<uint64_t> &Vals,
-                      StringRef *Blob = nullptr);
-
-  //===--------------------------------------------------------------------===//
-  // Abbrev Processing
-  //===--------------------------------------------------------------------===//
-  void ReadAbbrevRecord();
-
-  /// Read and return a block info block from the bitstream. If an error was
-  /// encountered, return None.
-  ///
-  /// \param ReadBlockInfoNames Whether to read block/record name information in
-  /// the BlockInfo block. Only llvm-bcanalyzer uses this.
-  Optional<BitstreamBlockInfo>
-  ReadBlockInfoBlock(bool ReadBlockInfoNames = false);
-
-  /// Set the block info to be used by this BitstreamCursor to interpret
-  /// abbreviated records.
-  void setBlockInfo(BitstreamBlockInfo *BI) { BlockInfo = BI; }
-};
-
-} // end llvm namespace
-
-#endif // LLVM_BITCODE_BITSTREAMREADER_H
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitstreamWriter.h b/linux-x64/clang/include/llvm/Bitcode/BitstreamWriter.h
deleted file mode 100644
index 3de3998..0000000
--- a/linux-x64/clang/include/llvm/Bitcode/BitstreamWriter.h
+++ /dev/null
@@ -1,549 +0,0 @@
-//===- BitstreamWriter.h - Low-level bitstream writer interface -*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This header defines the BitstreamWriter class.  This class can be used to
-// write an arbitrary bitstream, regardless of its contents.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_BITCODE_BITSTREAMWRITER_H
-#define LLVM_BITCODE_BITSTREAMWRITER_H
-
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Bitcode/BitCodes.h"
-#include "llvm/Support/Endian.h"
-#include <vector>
-
-namespace llvm {
-
-class BitstreamWriter {
-  SmallVectorImpl<char> &Out;
-
-  /// CurBit - Always between 0 and 31 inclusive, specifies the next bit to use.
-  unsigned CurBit;
-
-  /// CurValue - The current value.  Only bits < CurBit are valid.
-  uint32_t CurValue;
-
-  /// CurCodeSize - This is the declared size of code values used for the
-  /// current block, in bits.
-  unsigned CurCodeSize;
-
-  /// BlockInfoCurBID - When emitting a BLOCKINFO_BLOCK, this is the currently
-  /// selected BLOCK ID.
-  unsigned BlockInfoCurBID;
-
-  /// CurAbbrevs - Abbrevs installed at in this block.
-  std::vector<std::shared_ptr<BitCodeAbbrev>> CurAbbrevs;
-
-  struct Block {
-    unsigned PrevCodeSize;
-    size_t StartSizeWord;
-    std::vector<std::shared_ptr<BitCodeAbbrev>> PrevAbbrevs;
-    Block(unsigned PCS, size_t SSW) : PrevCodeSize(PCS), StartSizeWord(SSW) {}
-  };
-
-  /// BlockScope - This tracks the current blocks that we have entered.
-  std::vector<Block> BlockScope;
-
-  /// BlockInfo - This contains information emitted to BLOCKINFO_BLOCK blocks.
-  /// These describe abbreviations that all blocks of the specified ID inherit.
-  struct BlockInfo {
-    unsigned BlockID;
-    std::vector<std::shared_ptr<BitCodeAbbrev>> Abbrevs;
-  };
-  std::vector<BlockInfo> BlockInfoRecords;
-
-  void WriteByte(unsigned char Value) {
-    Out.push_back(Value);
-  }
-
-  void WriteWord(unsigned Value) {
-    Value = support::endian::byte_swap<uint32_t, support::little>(Value);
-    Out.append(reinterpret_cast<const char *>(&Value),
-               reinterpret_cast<const char *>(&Value + 1));
-  }
-
-  size_t GetBufferOffset() const { return Out.size(); }
-
-  size_t GetWordIndex() const {
-    size_t Offset = GetBufferOffset();
-    assert((Offset & 3) == 0 && "Not 32-bit aligned");
-    return Offset / 4;
-  }
-
-public:
-  explicit BitstreamWriter(SmallVectorImpl<char> &O)
-    : Out(O), CurBit(0), CurValue(0), CurCodeSize(2) {}
-
-  ~BitstreamWriter() {
-    assert(CurBit == 0 && "Unflushed data remaining");
-    assert(BlockScope.empty() && CurAbbrevs.empty() && "Block imbalance");
-  }
-
-  /// Retrieve the current position in the stream, in bits.
-  uint64_t GetCurrentBitNo() const { return GetBufferOffset() * 8 + CurBit; }
-
-  /// Retrieve the number of bits currently used to encode an abbrev ID.
-  unsigned GetAbbrevIDWidth() const { return CurCodeSize; }
-
-  //===--------------------------------------------------------------------===//
-  // Basic Primitives for emitting bits to the stream.
-  //===--------------------------------------------------------------------===//
-
-  /// Backpatch a 32-bit word in the output at the given bit offset
-  /// with the specified value.
-  void BackpatchWord(uint64_t BitNo, unsigned NewWord) {
-    using namespace llvm::support;
-    unsigned ByteNo = BitNo / 8;
-    assert((!endian::readAtBitAlignment<uint32_t, little, unaligned>(
-               &Out[ByteNo], BitNo & 7)) &&
-           "Expected to be patching over 0-value placeholders");
-    endian::writeAtBitAlignment<uint32_t, little, unaligned>(
-        &Out[ByteNo], NewWord, BitNo & 7);
-  }
-
-  void BackpatchWord64(uint64_t BitNo, uint64_t Val) {
-    BackpatchWord(BitNo, (uint32_t)Val);
-    BackpatchWord(BitNo + 32, (uint32_t)(Val >> 32));
-  }
-
-  void Emit(uint32_t Val, unsigned NumBits) {
-    assert(NumBits && NumBits <= 32 && "Invalid value size!");
-    assert((Val & ~(~0U >> (32-NumBits))) == 0 && "High bits set!");
-    CurValue |= Val << CurBit;
-    if (CurBit + NumBits < 32) {
-      CurBit += NumBits;
-      return;
-    }
-
-    // Add the current word.
-    WriteWord(CurValue);
-
-    if (CurBit)
-      CurValue = Val >> (32-CurBit);
-    else
-      CurValue = 0;
-    CurBit = (CurBit+NumBits) & 31;
-  }
-
-  void FlushToWord() {
-    if (CurBit) {
-      WriteWord(CurValue);
-      CurBit = 0;
-      CurValue = 0;
-    }
-  }
-
-  void EmitVBR(uint32_t Val, unsigned NumBits) {
-    assert(NumBits <= 32 && "Too many bits to emit!");
-    uint32_t Threshold = 1U << (NumBits-1);
-
-    // Emit the bits with VBR encoding, NumBits-1 bits at a time.
-    while (Val >= Threshold) {
-      Emit((Val & ((1 << (NumBits-1))-1)) | (1 << (NumBits-1)), NumBits);
-      Val >>= NumBits-1;
-    }
-
-    Emit(Val, NumBits);
-  }
-
-  void EmitVBR64(uint64_t Val, unsigned NumBits) {
-    assert(NumBits <= 32 && "Too many bits to emit!");
-    if ((uint32_t)Val == Val)
-      return EmitVBR((uint32_t)Val, NumBits);
-
-    uint32_t Threshold = 1U << (NumBits-1);
-
-    // Emit the bits with VBR encoding, NumBits-1 bits at a time.
-    while (Val >= Threshold) {
-      Emit(((uint32_t)Val & ((1 << (NumBits-1))-1)) |
-           (1 << (NumBits-1)), NumBits);
-      Val >>= NumBits-1;
-    }
-
-    Emit((uint32_t)Val, NumBits);
-  }
-
-  /// EmitCode - Emit the specified code.
-  void EmitCode(unsigned Val) {
-    Emit(Val, CurCodeSize);
-  }
-
-  //===--------------------------------------------------------------------===//
-  // Block Manipulation
-  //===--------------------------------------------------------------------===//
-
-  /// getBlockInfo - If there is block info for the specified ID, return it,
-  /// otherwise return null.
-  BlockInfo *getBlockInfo(unsigned BlockID) {
-    // Common case, the most recent entry matches BlockID.
-    if (!BlockInfoRecords.empty() && BlockInfoRecords.back().BlockID == BlockID)
-      return &BlockInfoRecords.back();
-
-    for (unsigned i = 0, e = static_cast<unsigned>(BlockInfoRecords.size());
-         i != e; ++i)
-      if (BlockInfoRecords[i].BlockID == BlockID)
-        return &BlockInfoRecords[i];
-    return nullptr;
-  }
-
-  void EnterSubblock(unsigned BlockID, unsigned CodeLen) {
-    // Block header:
-    //    [ENTER_SUBBLOCK, blockid, newcodelen, <align4bytes>, blocklen]
-    EmitCode(bitc::ENTER_SUBBLOCK);
-    EmitVBR(BlockID, bitc::BlockIDWidth);
-    EmitVBR(CodeLen, bitc::CodeLenWidth);
-    FlushToWord();
-
-    size_t BlockSizeWordIndex = GetWordIndex();
-    unsigned OldCodeSize = CurCodeSize;
-
-    // Emit a placeholder, which will be replaced when the block is popped.
-    Emit(0, bitc::BlockSizeWidth);
-
-    CurCodeSize = CodeLen;
-
-    // Push the outer block's abbrev set onto the stack, start out with an
-    // empty abbrev set.
-    BlockScope.emplace_back(OldCodeSize, BlockSizeWordIndex);
-    BlockScope.back().PrevAbbrevs.swap(CurAbbrevs);
-
-    // If there is a blockinfo for this BlockID, add all the predefined abbrevs
-    // to the abbrev list.
-    if (BlockInfo *Info = getBlockInfo(BlockID)) {
-      CurAbbrevs.insert(CurAbbrevs.end(), Info->Abbrevs.begin(),
-                        Info->Abbrevs.end());
-    }
-  }
-
-  void ExitBlock() {
-    assert(!BlockScope.empty() && "Block scope imbalance!");
-    const Block &B = BlockScope.back();
-
-    // Block tail:
-    //    [END_BLOCK, <align4bytes>]
-    EmitCode(bitc::END_BLOCK);
-    FlushToWord();
-
-    // Compute the size of the block, in words, not counting the size field.
-    size_t SizeInWords = GetWordIndex() - B.StartSizeWord - 1;
-    uint64_t BitNo = uint64_t(B.StartSizeWord) * 32;
-
-    // Update the block size field in the header of this sub-block.
-    BackpatchWord(BitNo, SizeInWords);
-
-    // Restore the inner block's code size and abbrev table.
-    CurCodeSize = B.PrevCodeSize;
-    CurAbbrevs = std::move(B.PrevAbbrevs);
-    BlockScope.pop_back();
-  }
-
-  //===--------------------------------------------------------------------===//
-  // Record Emission
-  //===--------------------------------------------------------------------===//
-
-private:
-  /// EmitAbbreviatedLiteral - Emit a literal value according to its abbrev
-  /// record.  This is a no-op, since the abbrev specifies the literal to use.
-  template<typename uintty>
-  void EmitAbbreviatedLiteral(const BitCodeAbbrevOp &Op, uintty V) {
-    assert(Op.isLiteral() && "Not a literal");
-    // If the abbrev specifies the literal value to use, don't emit
-    // anything.
-    assert(V == Op.getLiteralValue() &&
-           "Invalid abbrev for record!");
-  }
-
-  /// EmitAbbreviatedField - Emit a single scalar field value with the specified
-  /// encoding.
-  template<typename uintty>
-  void EmitAbbreviatedField(const BitCodeAbbrevOp &Op, uintty V) {
-    assert(!Op.isLiteral() && "Literals should use EmitAbbreviatedLiteral!");
-
-    // Encode the value as we are commanded.
-    switch (Op.getEncoding()) {
-    default: llvm_unreachable("Unknown encoding!");
-    case BitCodeAbbrevOp::Fixed:
-      if (Op.getEncodingData())
-        Emit((unsigned)V, (unsigned)Op.getEncodingData());
-      break;
-    case BitCodeAbbrevOp::VBR:
-      if (Op.getEncodingData())
-        EmitVBR64(V, (unsigned)Op.getEncodingData());
-      break;
-    case BitCodeAbbrevOp::Char6:
-      Emit(BitCodeAbbrevOp::EncodeChar6((char)V), 6);
-      break;
-    }
-  }
-
-  /// EmitRecordWithAbbrevImpl - This is the core implementation of the record
-  /// emission code.  If BlobData is non-null, then it specifies an array of
-  /// data that should be emitted as part of the Blob or Array operand that is
-  /// known to exist at the end of the record. If Code is specified, then
-  /// it is the record code to emit before the Vals, which must not contain
-  /// the code.
-  template <typename uintty>
-  void EmitRecordWithAbbrevImpl(unsigned Abbrev, ArrayRef<uintty> Vals,
-                                StringRef Blob, Optional<unsigned> Code) {
-    const char *BlobData = Blob.data();
-    unsigned BlobLen = (unsigned) Blob.size();
-    unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
-    assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
-    const BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo].get();
-
-    EmitCode(Abbrev);
-
-    unsigned i = 0, e = static_cast<unsigned>(Abbv->getNumOperandInfos());
-    if (Code) {
-      assert(e && "Expected non-empty abbreviation");
-      const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i++);
-
-      if (Op.isLiteral())
-        EmitAbbreviatedLiteral(Op, Code.getValue());
-      else {
-        assert(Op.getEncoding() != BitCodeAbbrevOp::Array &&
-               Op.getEncoding() != BitCodeAbbrevOp::Blob &&
-               "Expected literal or scalar");
-        EmitAbbreviatedField(Op, Code.getValue());
-      }
-    }
-
-    unsigned RecordIdx = 0;
-    for (; i != e; ++i) {
-      const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
-      if (Op.isLiteral()) {
-        assert(RecordIdx < Vals.size() && "Invalid abbrev/record");
-        EmitAbbreviatedLiteral(Op, Vals[RecordIdx]);
-        ++RecordIdx;
-      } else if (Op.getEncoding() == BitCodeAbbrevOp::Array) {
-        // Array case.
-        assert(i + 2 == e && "array op not second to last?");
-        const BitCodeAbbrevOp &EltEnc = Abbv->getOperandInfo(++i);
-
-        // If this record has blob data, emit it, otherwise we must have record
-        // entries to encode this way.
-        if (BlobData) {
-          assert(RecordIdx == Vals.size() &&
-                 "Blob data and record entries specified for array!");
-          // Emit a vbr6 to indicate the number of elements present.
-          EmitVBR(static_cast<uint32_t>(BlobLen), 6);
-
-          // Emit each field.
-          for (unsigned i = 0; i != BlobLen; ++i)
-            EmitAbbreviatedField(EltEnc, (unsigned char)BlobData[i]);
-
-          // Know that blob data is consumed for assertion below.
-          BlobData = nullptr;
-        } else {
-          // Emit a vbr6 to indicate the number of elements present.
-          EmitVBR(static_cast<uint32_t>(Vals.size()-RecordIdx), 6);
-
-          // Emit each field.
-          for (unsigned e = Vals.size(); RecordIdx != e; ++RecordIdx)
-            EmitAbbreviatedField(EltEnc, Vals[RecordIdx]);
-        }
-      } else if (Op.getEncoding() == BitCodeAbbrevOp::Blob) {
-        // If this record has blob data, emit it, otherwise we must have record
-        // entries to encode this way.
-
-        if (BlobData) {
-          assert(RecordIdx == Vals.size() &&
-                 "Blob data and record entries specified for blob operand!");
-
-          assert(Blob.data() == BlobData && "BlobData got moved");
-          assert(Blob.size() == BlobLen && "BlobLen got changed");
-          emitBlob(Blob);
-          BlobData = nullptr;
-        } else {
-          emitBlob(Vals.slice(RecordIdx));
-        }
-      } else {  // Single scalar field.
-        assert(RecordIdx < Vals.size() && "Invalid abbrev/record");
-        EmitAbbreviatedField(Op, Vals[RecordIdx]);
-        ++RecordIdx;
-      }
-    }
-    assert(RecordIdx == Vals.size() && "Not all record operands emitted!");
-    assert(BlobData == nullptr &&
-           "Blob data specified for record that doesn't use it!");
-  }
-
-public:
-  /// Emit a blob, including flushing before and tail-padding.
-  template <class UIntTy>
-  void emitBlob(ArrayRef<UIntTy> Bytes, bool ShouldEmitSize = true) {
-    // Emit a vbr6 to indicate the number of elements present.
-    if (ShouldEmitSize)
-      EmitVBR(static_cast<uint32_t>(Bytes.size()), 6);
-
-    // Flush to a 32-bit alignment boundary.
-    FlushToWord();
-
-    // Emit literal bytes.
-    for (const auto &B : Bytes) {
-      assert(isUInt<8>(B) && "Value too large to emit as byte");
-      WriteByte((unsigned char)B);
-    }
-
-    // Align end to 32-bits.
-    while (GetBufferOffset() & 3)
-      WriteByte(0);
-  }
-  void emitBlob(StringRef Bytes, bool ShouldEmitSize = true) {
-    emitBlob(makeArrayRef((const uint8_t *)Bytes.data(), Bytes.size()),
-             ShouldEmitSize);
-  }
-
-  /// EmitRecord - Emit the specified record to the stream, using an abbrev if
-  /// we have one to compress the output.
-  template <typename Container>
-  void EmitRecord(unsigned Code, const Container &Vals, unsigned Abbrev = 0) {
-    if (!Abbrev) {
-      // If we don't have an abbrev to use, emit this in its fully unabbreviated
-      // form.
-      auto Count = static_cast<uint32_t>(makeArrayRef(Vals).size());
-      EmitCode(bitc::UNABBREV_RECORD);
-      EmitVBR(Code, 6);
-      EmitVBR(Count, 6);
-      for (unsigned i = 0, e = Count; i != e; ++i)
-        EmitVBR64(Vals[i], 6);
-      return;
-    }
-
-    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), StringRef(), Code);
-  }
-
-  /// EmitRecordWithAbbrev - Emit a record with the specified abbreviation.
-  /// Unlike EmitRecord, the code for the record should be included in Vals as
-  /// the first entry.
-  template <typename Container>
-  void EmitRecordWithAbbrev(unsigned Abbrev, const Container &Vals) {
-    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), StringRef(), None);
-  }
-
-  /// EmitRecordWithBlob - Emit the specified record to the stream, using an
-  /// abbrev that includes a blob at the end.  The blob data to emit is
-  /// specified by the pointer and length specified at the end.  In contrast to
-  /// EmitRecord, this routine expects that the first entry in Vals is the code
-  /// of the record.
-  template <typename Container>
-  void EmitRecordWithBlob(unsigned Abbrev, const Container &Vals,
-                          StringRef Blob) {
-    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), Blob, None);
-  }
-  template <typename Container>
-  void EmitRecordWithBlob(unsigned Abbrev, const Container &Vals,
-                          const char *BlobData, unsigned BlobLen) {
-    return EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals),
-                                    StringRef(BlobData, BlobLen), None);
-  }
-
-  /// EmitRecordWithArray - Just like EmitRecordWithBlob, works with records
-  /// that end with an array.
-  template <typename Container>
-  void EmitRecordWithArray(unsigned Abbrev, const Container &Vals,
-                           StringRef Array) {
-    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), Array, None);
-  }
-  template <typename Container>
-  void EmitRecordWithArray(unsigned Abbrev, const Container &Vals,
-                           const char *ArrayData, unsigned ArrayLen) {
-    return EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals),
-                                    StringRef(ArrayData, ArrayLen), None);
-  }
-
-  //===--------------------------------------------------------------------===//
-  // Abbrev Emission
-  //===--------------------------------------------------------------------===//
-
-private:
-  // Emit the abbreviation as a DEFINE_ABBREV record.
-  void EncodeAbbrev(const BitCodeAbbrev &Abbv) {
-    EmitCode(bitc::DEFINE_ABBREV);
-    EmitVBR(Abbv.getNumOperandInfos(), 5);
-    for (unsigned i = 0, e = static_cast<unsigned>(Abbv.getNumOperandInfos());
-         i != e; ++i) {
-      const BitCodeAbbrevOp &Op = Abbv.getOperandInfo(i);
-      Emit(Op.isLiteral(), 1);
-      if (Op.isLiteral()) {
-        EmitVBR64(Op.getLiteralValue(), 8);
-      } else {
-        Emit(Op.getEncoding(), 3);
-        if (Op.hasEncodingData())
-          EmitVBR64(Op.getEncodingData(), 5);
-      }
-    }
-  }
-public:
-
-  /// EmitAbbrev - This emits an abbreviation to the stream.  Note that this
-  /// method takes ownership of the specified abbrev.
-  unsigned EmitAbbrev(std::shared_ptr<BitCodeAbbrev> Abbv) {
-    // Emit the abbreviation as a record.
-    EncodeAbbrev(*Abbv);
-    CurAbbrevs.push_back(std::move(Abbv));
-    return static_cast<unsigned>(CurAbbrevs.size())-1 +
-      bitc::FIRST_APPLICATION_ABBREV;
-  }
-
-  //===--------------------------------------------------------------------===//
-  // BlockInfo Block Emission
-  //===--------------------------------------------------------------------===//
-
-  /// EnterBlockInfoBlock - Start emitting the BLOCKINFO_BLOCK.
-  void EnterBlockInfoBlock() {
-    EnterSubblock(bitc::BLOCKINFO_BLOCK_ID, 2);
-    BlockInfoCurBID = ~0U;
-    BlockInfoRecords.clear();
-  }
-private:
-  /// SwitchToBlockID - If we aren't already talking about the specified block
-  /// ID, emit a BLOCKINFO_CODE_SETBID record.
-  void SwitchToBlockID(unsigned BlockID) {
-    if (BlockInfoCurBID == BlockID) return;
-    SmallVector<unsigned, 2> V;
-    V.push_back(BlockID);
-    EmitRecord(bitc::BLOCKINFO_CODE_SETBID, V);
-    BlockInfoCurBID = BlockID;
-  }
-
-  BlockInfo &getOrCreateBlockInfo(unsigned BlockID) {
-    if (BlockInfo *BI = getBlockInfo(BlockID))
-      return *BI;
-
-    // Otherwise, add a new record.
-    BlockInfoRecords.emplace_back();
-    BlockInfoRecords.back().BlockID = BlockID;
-    return BlockInfoRecords.back();
-  }
-
-public:
-
-  /// EmitBlockInfoAbbrev - Emit a DEFINE_ABBREV record for the specified
-  /// BlockID.
-  unsigned EmitBlockInfoAbbrev(unsigned BlockID, std::shared_ptr<BitCodeAbbrev> Abbv) {
-    SwitchToBlockID(BlockID);
-    EncodeAbbrev(*Abbv);
-
-    // Add the abbrev to the specified block record.
-    BlockInfo &Info = getOrCreateBlockInfo(BlockID);
-    Info.Abbrevs.push_back(std::move(Abbv));
-
-    return Info.Abbrevs.size()-1+bitc::FIRST_APPLICATION_ABBREV;
-  }
-};
-
-
-} // End llvm namespace
-
-#endif
diff --git a/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h b/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h
index 71148ac..3ec0b38 100644
--- a/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h
+++ b/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h
@@ -17,7 +17,7 @@
 #ifndef LLVM_BITCODE_LLVMBITCODES_H
 #define LLVM_BITCODE_LLVMBITCODES_H
 
-#include "llvm/Bitcode/BitCodes.h"
+#include "llvm/Bitstream/BitCodes.h"
 
 namespace llvm {
 namespace bitc {
@@ -263,10 +263,31 @@
   // Index-wide flags
   FS_FLAGS = 20,
   // Maps type identifier to summary information for that type identifier.
+  // Produced by the thin link (only lives in combined index).
   // TYPE_ID: [typeid, kind, bitwidth, align, size, bitmask, inlinebits,
   //           n x (typeid, kind, name, numrba,
   //                numrba x (numarg, numarg x arg, kind, info, byte, bit))]
   FS_TYPE_ID = 21,
+  // For background see overview at https://llvm.org/docs/TypeMetadata.html.
+  // The type metadata includes both the type identifier and the offset of
+  // the address point of the type (the address held by objects of that type
+  // which may not be the beginning of the virtual table). Vtable definitions
+  // are decorated with type metadata for the types they are compatible with.
+  //
+  // Maps type identifier to summary information for that type identifier
+  // computed from type metadata: the valueid of each vtable definition
+  // decorated with a type metadata for that identifier, and the offset from
+  // the corresponding type metadata.
+  // Exists in the per-module summary to provide information to thin link
+  // for index-based whole program devirtualization.
+  // TYPE_ID_METADATA: [typeid, n x (valueid, offset)]
+  FS_TYPE_ID_METADATA = 22,
+  // Summarizes vtable definition for use in index-based whole program
+  // devirtualization during the thin link.
+  // PERMODULE_VTABLE_GLOBALVAR_INIT_REFS: [valueid, flags, varflags,
+  //                                        numrefs, numrefs x valueid,
+  //                                        n x (valueid, offset)]
+  FS_PERMODULE_VTABLE_GLOBALVAR_INIT_REFS = 23,
 };
 
 enum MetadataCodes {
@@ -310,6 +331,7 @@
   METADATA_INDEX_OFFSET = 38,           // [offset]
   METADATA_INDEX = 39,                  // [bitpos]
   METADATA_LABEL = 40,                  // [distinct, scope, name, file, line]
+  METADATA_COMMON_BLOCK = 44,     // [distinct, scope, name, variable,...]
 };
 
 // The constants block (CONSTANTS_BLOCK_ID) describes emission for each
@@ -605,6 +627,9 @@
   ATTR_KIND_OPT_FOR_FUZZING = 57,
   ATTR_KIND_SHADOWCALLSTACK = 58,
   ATTR_KIND_SPECULATIVE_LOAD_HARDENING = 59,
+  ATTR_KIND_IMMARG = 60,
+  ATTR_KIND_WILLRETURN = 61,
+  ATTR_KIND_NOFREE = 62
 };
 
 enum ComdatSelectionKindCodes {
diff --git a/linux-x64/clang/include/llvm/Bitstream/BitCodes.h b/linux-x64/clang/include/llvm/Bitstream/BitCodes.h
new file mode 100644
index 0000000..adf54ba
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Bitstream/BitCodes.h
@@ -0,0 +1,184 @@
+//===- BitCodes.h - Enum values for the bitstream format --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This header defines bitstream enum values.
+//
+// The enum values defined in this file should be considered permanent.  If
+// new features are added, they should have values added at the end of the
+// respective lists.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BITSTREAM_BITCODES_H
+#define LLVM_BITSTREAM_BITCODES_H
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/DataTypes.h"
+#include "llvm/Support/ErrorHandling.h"
+#include <cassert>
+
+namespace llvm {
+/// Offsets of the 32-bit fields of bitstream wrapper header.
+enum BitstreamWrapperHeader : unsigned {
+  BWH_MagicField   = 0 * 4,
+  BWH_VersionField = 1 * 4,
+  BWH_OffsetField  = 2 * 4,
+  BWH_SizeField    = 3 * 4,
+  BWH_CPUTypeField = 4 * 4,
+  BWH_HeaderSize   = 5 * 4
+};
+
+namespace bitc {
+  enum StandardWidths {
+    BlockIDWidth   = 8,  // We use VBR-8 for block IDs.
+    CodeLenWidth   = 4,  // Codelen are VBR-4.
+    BlockSizeWidth = 32  // BlockSize up to 2^32 32-bit words = 16GB per block.
+  };
+
+  // The standard abbrev namespace always has a way to exit a block, enter a
+  // nested block, define abbrevs, and define an unabbreviated record.
+  enum FixedAbbrevIDs {
+    END_BLOCK = 0,  // Must be zero to guarantee termination for broken bitcode.
+    ENTER_SUBBLOCK = 1,
+
+    /// DEFINE_ABBREV - Defines an abbrev for the current block.  It consists
+    /// of a vbr5 for # operand infos.  Each operand info is emitted with a
+    /// single bit to indicate if it is a literal encoding.  If so, the value is
+    /// emitted with a vbr8.  If not, the encoding is emitted as 3 bits followed
+    /// by the info value as a vbr5 if needed.
+    DEFINE_ABBREV = 2,
+
+    // UNABBREV_RECORDs are emitted with a vbr6 for the record code, followed by
+    // a vbr6 for the # operands, followed by vbr6's for each operand.
+    UNABBREV_RECORD = 3,
+
+    // This is not a code, this is a marker for the first abbrev assignment.
+    FIRST_APPLICATION_ABBREV = 4
+  };
+
+  /// StandardBlockIDs - All bitcode files can optionally include a BLOCKINFO
+  /// block, which contains metadata about other blocks in the file.
+  enum StandardBlockIDs {
+    /// BLOCKINFO_BLOCK is used to define metadata about blocks, for example,
+    /// standard abbrevs that should be available to all blocks of a specified
+    /// ID.
+    BLOCKINFO_BLOCK_ID = 0,
+
+    // Block IDs 1-7 are reserved for future expansion.
+    FIRST_APPLICATION_BLOCKID = 8
+  };
+
+  /// BlockInfoCodes - The blockinfo block contains metadata about user-defined
+  /// blocks.
+  enum BlockInfoCodes {
+    // DEFINE_ABBREV has magic semantics here, applying to the current SETBID'd
+    // block, instead of the BlockInfo block.
+
+    BLOCKINFO_CODE_SETBID        = 1, // SETBID: [blockid#]
+    BLOCKINFO_CODE_BLOCKNAME     = 2, // BLOCKNAME: [name]
+    BLOCKINFO_CODE_SETRECORDNAME = 3  // BLOCKINFO_CODE_SETRECORDNAME:
+                                      //                             [id, name]
+  };
+
+} // End bitc namespace
+
+/// BitCodeAbbrevOp - This describes one or more operands in an abbreviation.
+/// This is actually a union of two different things:
+///   1. It could be a literal integer value ("the operand is always 17").
+///   2. It could be an encoding specification ("this operand encoded like so").
+///
+class BitCodeAbbrevOp {
+  uint64_t Val;           // A literal value or data for an encoding.
+  bool IsLiteral : 1;     // Indicate whether this is a literal value or not.
+  unsigned Enc   : 3;     // The encoding to use.
+public:
+  enum Encoding {
+    Fixed = 1,  // A fixed width field, Val specifies number of bits.
+    VBR   = 2,  // A VBR field where Val specifies the width of each chunk.
+    Array = 3,  // A sequence of fields, next field species elt encoding.
+    Char6 = 4,  // A 6-bit fixed field which maps to [a-zA-Z0-9._].
+    Blob  = 5   // 32-bit aligned array of 8-bit characters.
+  };
+
+  explicit BitCodeAbbrevOp(uint64_t V) :  Val(V), IsLiteral(true) {}
+  explicit BitCodeAbbrevOp(Encoding E, uint64_t Data = 0)
+    : Val(Data), IsLiteral(false), Enc(E) {}
+
+  bool isLiteral() const  { return IsLiteral; }
+  bool isEncoding() const { return !IsLiteral; }
+
+  // Accessors for literals.
+  uint64_t getLiteralValue() const { assert(isLiteral()); return Val; }
+
+  // Accessors for encoding info.
+  Encoding getEncoding() const { assert(isEncoding()); return (Encoding)Enc; }
+  uint64_t getEncodingData() const {
+    assert(isEncoding() && hasEncodingData());
+    return Val;
+  }
+
+  bool hasEncodingData() const { return hasEncodingData(getEncoding()); }
+  static bool hasEncodingData(Encoding E) {
+    switch (E) {
+    case Fixed:
+    case VBR:
+      return true;
+    case Array:
+    case Char6:
+    case Blob:
+      return false;
+    }
+    report_fatal_error("Invalid encoding");
+  }
+
+  /// isChar6 - Return true if this character is legal in the Char6 encoding.
+  static bool isChar6(char C) {
+    if (C >= 'a' && C <= 'z') return true;
+    if (C >= 'A' && C <= 'Z') return true;
+    if (C >= '0' && C <= '9') return true;
+    if (C == '.' || C == '_') return true;
+    return false;
+  }
+  static unsigned EncodeChar6(char C) {
+    if (C >= 'a' && C <= 'z') return C-'a';
+    if (C >= 'A' && C <= 'Z') return C-'A'+26;
+    if (C >= '0' && C <= '9') return C-'0'+26+26;
+    if (C == '.')             return 62;
+    if (C == '_')             return 63;
+    llvm_unreachable("Not a value Char6 character!");
+  }
+
+  static char DecodeChar6(unsigned V) {
+    assert((V & ~63) == 0 && "Not a Char6 encoded character!");
+    return "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._"
+        [V];
+  }
+
+};
+
+/// BitCodeAbbrev - This class represents an abbreviation record.  An
+/// abbreviation allows a complex record that has redundancy to be stored in a
+/// specialized format instead of the fully-general, fully-vbr, format.
+class BitCodeAbbrev {
+  SmallVector<BitCodeAbbrevOp, 32> OperandList;
+
+public:
+  unsigned getNumOperandInfos() const {
+    return static_cast<unsigned>(OperandList.size());
+  }
+  const BitCodeAbbrevOp &getOperandInfo(unsigned N) const {
+    return OperandList[N];
+  }
+
+  void Add(const BitCodeAbbrevOp &OpInfo) {
+    OperandList.push_back(OpInfo);
+  }
+};
+} // End llvm namespace
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Bitstream/BitstreamReader.h b/linux-x64/clang/include/llvm/Bitstream/BitstreamReader.h
new file mode 100644
index 0000000..ccb4a49
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Bitstream/BitstreamReader.h
@@ -0,0 +1,553 @@
+//===- BitstreamReader.h - Low-level bitstream reader interface -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This header defines the BitstreamReader class.  This class can be used to
+// read an arbitrary bitstream, regardless of its contents.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BITSTREAM_BITSTREAMREADER_H
+#define LLVM_BITSTREAM_BITSTREAMREADER_H
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Bitstream/BitCodes.h"
+#include "llvm/Support/Endian.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include <algorithm>
+#include <cassert>
+#include <climits>
+#include <cstddef>
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace llvm {
+
+/// This class maintains the abbreviations read from a block info block.
+class BitstreamBlockInfo {
+public:
+  /// This contains information emitted to BLOCKINFO_BLOCK blocks. These
+  /// describe abbreviations that all blocks of the specified ID inherit.
+  struct BlockInfo {
+    unsigned BlockID;
+    std::vector<std::shared_ptr<BitCodeAbbrev>> Abbrevs;
+    std::string Name;
+    std::vector<std::pair<unsigned, std::string>> RecordNames;
+  };
+
+private:
+  std::vector<BlockInfo> BlockInfoRecords;
+
+public:
+  /// If there is block info for the specified ID, return it, otherwise return
+  /// null.
+  const BlockInfo *getBlockInfo(unsigned BlockID) const {
+    // Common case, the most recent entry matches BlockID.
+    if (!BlockInfoRecords.empty() && BlockInfoRecords.back().BlockID == BlockID)
+      return &BlockInfoRecords.back();
+
+    for (unsigned i = 0, e = static_cast<unsigned>(BlockInfoRecords.size());
+         i != e; ++i)
+      if (BlockInfoRecords[i].BlockID == BlockID)
+        return &BlockInfoRecords[i];
+    return nullptr;
+  }
+
+  BlockInfo &getOrCreateBlockInfo(unsigned BlockID) {
+    if (const BlockInfo *BI = getBlockInfo(BlockID))
+      return *const_cast<BlockInfo*>(BI);
+
+    // Otherwise, add a new record.
+    BlockInfoRecords.emplace_back();
+    BlockInfoRecords.back().BlockID = BlockID;
+    return BlockInfoRecords.back();
+  }
+};
+
+/// This represents a position within a bitstream. There may be multiple
+/// independent cursors reading within one bitstream, each maintaining their
+/// own local state.
+class SimpleBitstreamCursor {
+  ArrayRef<uint8_t> BitcodeBytes;
+  size_t NextChar = 0;
+
+public:
+  /// This is the current data we have pulled from the stream but have not
+  /// returned to the client. This is specifically and intentionally defined to
+  /// follow the word size of the host machine for efficiency. We use word_t in
+  /// places that are aware of this to make it perfectly explicit what is going
+  /// on.
+  using word_t = size_t;
+
+private:
+  word_t CurWord = 0;
+
+  /// This is the number of bits in CurWord that are valid. This is always from
+  /// [0...bits_of(size_t)-1] inclusive.
+  unsigned BitsInCurWord = 0;
+
+public:
+  static const constexpr size_t MaxChunkSize = sizeof(word_t) * 8;
+
+  SimpleBitstreamCursor() = default;
+  explicit SimpleBitstreamCursor(ArrayRef<uint8_t> BitcodeBytes)
+      : BitcodeBytes(BitcodeBytes) {}
+  explicit SimpleBitstreamCursor(StringRef BitcodeBytes)
+      : BitcodeBytes(arrayRefFromStringRef(BitcodeBytes)) {}
+  explicit SimpleBitstreamCursor(MemoryBufferRef BitcodeBytes)
+      : SimpleBitstreamCursor(BitcodeBytes.getBuffer()) {}
+
+  bool canSkipToPos(size_t pos) const {
+    // pos can be skipped to if it is a valid address or one byte past the end.
+    return pos <= BitcodeBytes.size();
+  }
+
+  bool AtEndOfStream() {
+    return BitsInCurWord == 0 && BitcodeBytes.size() <= NextChar;
+  }
+
+  /// Return the bit # of the bit we are reading.
+  uint64_t GetCurrentBitNo() const {
+    return NextChar*CHAR_BIT - BitsInCurWord;
+  }
+
+  // Return the byte # of the current bit.
+  uint64_t getCurrentByteNo() const { return GetCurrentBitNo() / 8; }
+
+  ArrayRef<uint8_t> getBitcodeBytes() const { return BitcodeBytes; }
+
+  /// Reset the stream to the specified bit number.
+  Error JumpToBit(uint64_t BitNo) {
+    size_t ByteNo = size_t(BitNo/8) & ~(sizeof(word_t)-1);
+    unsigned WordBitNo = unsigned(BitNo & (sizeof(word_t)*8-1));
+    assert(canSkipToPos(ByteNo) && "Invalid location");
+
+    // Move the cursor to the right word.
+    NextChar = ByteNo;
+    BitsInCurWord = 0;
+
+    // Skip over any bits that are already consumed.
+    if (WordBitNo) {
+      if (Expected<word_t> Res = Read(WordBitNo))
+        return Error::success();
+      else
+        return Res.takeError();
+    }
+
+    return Error::success();
+  }
+
+  /// Get a pointer into the bitstream at the specified byte offset.
+  const uint8_t *getPointerToByte(uint64_t ByteNo, uint64_t NumBytes) {
+    return BitcodeBytes.data() + ByteNo;
+  }
+
+  /// Get a pointer into the bitstream at the specified bit offset.
+  ///
+  /// The bit offset must be on a byte boundary.
+  const uint8_t *getPointerToBit(uint64_t BitNo, uint64_t NumBytes) {
+    assert(!(BitNo % 8) && "Expected bit on byte boundary");
+    return getPointerToByte(BitNo / 8, NumBytes);
+  }
+
+  Error fillCurWord() {
+    if (NextChar >= BitcodeBytes.size())
+      return createStringError(std::errc::io_error,
+                               "Unexpected end of file reading %u of %u bytes",
+                               NextChar, BitcodeBytes.size());
+
+    // Read the next word from the stream.
+    const uint8_t *NextCharPtr = BitcodeBytes.data() + NextChar;
+    unsigned BytesRead;
+    if (BitcodeBytes.size() >= NextChar + sizeof(word_t)) {
+      BytesRead = sizeof(word_t);
+      CurWord =
+          support::endian::read<word_t, support::little, support::unaligned>(
+              NextCharPtr);
+    } else {
+      // Short read.
+      BytesRead = BitcodeBytes.size() - NextChar;
+      CurWord = 0;
+      for (unsigned B = 0; B != BytesRead; ++B)
+        CurWord |= uint64_t(NextCharPtr[B]) << (B * 8);
+    }
+    NextChar += BytesRead;
+    BitsInCurWord = BytesRead * 8;
+    return Error::success();
+  }
+
+  Expected<word_t> Read(unsigned NumBits) {
+    static const unsigned BitsInWord = MaxChunkSize;
+
+    assert(NumBits && NumBits <= BitsInWord &&
+           "Cannot return zero or more than BitsInWord bits!");
+
+    static const unsigned Mask = sizeof(word_t) > 4 ? 0x3f : 0x1f;
+
+    // If the field is fully contained by CurWord, return it quickly.
+    if (BitsInCurWord >= NumBits) {
+      word_t R = CurWord & (~word_t(0) >> (BitsInWord - NumBits));
+
+      // Use a mask to avoid undefined behavior.
+      CurWord >>= (NumBits & Mask);
+
+      BitsInCurWord -= NumBits;
+      return R;
+    }
+
+    word_t R = BitsInCurWord ? CurWord : 0;
+    unsigned BitsLeft = NumBits - BitsInCurWord;
+
+    if (Error fillResult = fillCurWord())
+      return std::move(fillResult);
+
+    // If we run out of data, abort.
+    if (BitsLeft > BitsInCurWord)
+      return createStringError(std::errc::io_error,
+                               "Unexpected end of file reading %u of %u bits",
+                               BitsInCurWord, BitsLeft);
+
+    word_t R2 = CurWord & (~word_t(0) >> (BitsInWord - BitsLeft));
+
+    // Use a mask to avoid undefined behavior.
+    CurWord >>= (BitsLeft & Mask);
+
+    BitsInCurWord -= BitsLeft;
+
+    R |= R2 << (NumBits - BitsLeft);
+
+    return R;
+  }
+
+  Expected<uint32_t> ReadVBR(unsigned NumBits) {
+    Expected<unsigned> MaybeRead = Read(NumBits);
+    if (!MaybeRead)
+      return MaybeRead;
+    uint32_t Piece = MaybeRead.get();
+
+    if ((Piece & (1U << (NumBits-1))) == 0)
+      return Piece;
+
+    uint32_t Result = 0;
+    unsigned NextBit = 0;
+    while (true) {
+      Result |= (Piece & ((1U << (NumBits-1))-1)) << NextBit;
+
+      if ((Piece & (1U << (NumBits-1))) == 0)
+        return Result;
+
+      NextBit += NumBits-1;
+      MaybeRead = Read(NumBits);
+      if (!MaybeRead)
+        return MaybeRead;
+      Piece = MaybeRead.get();
+    }
+  }
+
+  // Read a VBR that may have a value up to 64-bits in size. The chunk size of
+  // the VBR must still be <= 32 bits though.
+  Expected<uint64_t> ReadVBR64(unsigned NumBits) {
+    Expected<uint64_t> MaybeRead = Read(NumBits);
+    if (!MaybeRead)
+      return MaybeRead;
+    uint32_t Piece = MaybeRead.get();
+
+    if ((Piece & (1U << (NumBits-1))) == 0)
+      return uint64_t(Piece);
+
+    uint64_t Result = 0;
+    unsigned NextBit = 0;
+    while (true) {
+      Result |= uint64_t(Piece & ((1U << (NumBits-1))-1)) << NextBit;
+
+      if ((Piece & (1U << (NumBits-1))) == 0)
+        return Result;
+
+      NextBit += NumBits-1;
+      MaybeRead = Read(NumBits);
+      if (!MaybeRead)
+        return MaybeRead;
+      Piece = MaybeRead.get();
+    }
+  }
+
+  void SkipToFourByteBoundary() {
+    // If word_t is 64-bits and if we've read less than 32 bits, just dump
+    // the bits we have up to the next 32-bit boundary.
+    if (sizeof(word_t) > 4 &&
+        BitsInCurWord >= 32) {
+      CurWord >>= BitsInCurWord-32;
+      BitsInCurWord = 32;
+      return;
+    }
+
+    BitsInCurWord = 0;
+  }
+
+  /// Skip to the end of the file.
+  void skipToEnd() { NextChar = BitcodeBytes.size(); }
+};
+
+/// When advancing through a bitstream cursor, each advance can discover a few
+/// different kinds of entries:
+struct BitstreamEntry {
+  enum {
+    Error,    // Malformed bitcode was found.
+    EndBlock, // We've reached the end of the current block, (or the end of the
+              // file, which is treated like a series of EndBlock records.
+    SubBlock, // This is the start of a new subblock of a specific ID.
+    Record    // This is a record with a specific AbbrevID.
+  } Kind;
+
+  unsigned ID;
+
+  static BitstreamEntry getError() {
+    BitstreamEntry E; E.Kind = Error; return E;
+  }
+
+  static BitstreamEntry getEndBlock() {
+    BitstreamEntry E; E.Kind = EndBlock; return E;
+  }
+
+  static BitstreamEntry getSubBlock(unsigned ID) {
+    BitstreamEntry E; E.Kind = SubBlock; E.ID = ID; return E;
+  }
+
+  static BitstreamEntry getRecord(unsigned AbbrevID) {
+    BitstreamEntry E; E.Kind = Record; E.ID = AbbrevID; return E;
+  }
+};
+
+/// This represents a position within a bitcode file, implemented on top of a
+/// SimpleBitstreamCursor.
+///
+/// Unlike iterators, BitstreamCursors are heavy-weight objects that should not
+/// be passed by value.
+class BitstreamCursor : SimpleBitstreamCursor {
+  // This is the declared size of code values used for the current block, in
+  // bits.
+  unsigned CurCodeSize = 2;
+
+  /// Abbrevs installed at in this block.
+  std::vector<std::shared_ptr<BitCodeAbbrev>> CurAbbrevs;
+
+  struct Block {
+    unsigned PrevCodeSize;
+    std::vector<std::shared_ptr<BitCodeAbbrev>> PrevAbbrevs;
+
+    explicit Block(unsigned PCS) : PrevCodeSize(PCS) {}
+  };
+
+  /// This tracks the codesize of parent blocks.
+  SmallVector<Block, 8> BlockScope;
+
+  BitstreamBlockInfo *BlockInfo = nullptr;
+
+public:
+  static const size_t MaxChunkSize = sizeof(word_t) * 8;
+
+  BitstreamCursor() = default;
+  explicit BitstreamCursor(ArrayRef<uint8_t> BitcodeBytes)
+      : SimpleBitstreamCursor(BitcodeBytes) {}
+  explicit BitstreamCursor(StringRef BitcodeBytes)
+      : SimpleBitstreamCursor(BitcodeBytes) {}
+  explicit BitstreamCursor(MemoryBufferRef BitcodeBytes)
+      : SimpleBitstreamCursor(BitcodeBytes) {}
+
+  using SimpleBitstreamCursor::canSkipToPos;
+  using SimpleBitstreamCursor::AtEndOfStream;
+  using SimpleBitstreamCursor::getBitcodeBytes;
+  using SimpleBitstreamCursor::GetCurrentBitNo;
+  using SimpleBitstreamCursor::getCurrentByteNo;
+  using SimpleBitstreamCursor::getPointerToByte;
+  using SimpleBitstreamCursor::JumpToBit;
+  using SimpleBitstreamCursor::fillCurWord;
+  using SimpleBitstreamCursor::Read;
+  using SimpleBitstreamCursor::ReadVBR;
+  using SimpleBitstreamCursor::ReadVBR64;
+
+  /// Return the number of bits used to encode an abbrev #.
+  unsigned getAbbrevIDWidth() const { return CurCodeSize; }
+
+  /// Flags that modify the behavior of advance().
+  enum {
+    /// If this flag is used, the advance() method does not automatically pop
+    /// the block scope when the end of a block is reached.
+    AF_DontPopBlockAtEnd = 1,
+
+    /// If this flag is used, abbrev entries are returned just like normal
+    /// records.
+    AF_DontAutoprocessAbbrevs = 2
+  };
+
+  /// Advance the current bitstream, returning the next entry in the stream.
+  Expected<BitstreamEntry> advance(unsigned Flags = 0) {
+    while (true) {
+      if (AtEndOfStream())
+        return BitstreamEntry::getError();
+
+      Expected<unsigned> MaybeCode = ReadCode();
+      if (!MaybeCode)
+        return MaybeCode.takeError();
+      unsigned Code = MaybeCode.get();
+
+      if (Code == bitc::END_BLOCK) {
+        // Pop the end of the block unless Flags tells us not to.
+        if (!(Flags & AF_DontPopBlockAtEnd) && ReadBlockEnd())
+          return BitstreamEntry::getError();
+        return BitstreamEntry::getEndBlock();
+      }
+
+      if (Code == bitc::ENTER_SUBBLOCK) {
+        if (Expected<unsigned> MaybeSubBlock = ReadSubBlockID())
+          return BitstreamEntry::getSubBlock(MaybeSubBlock.get());
+        else
+          return MaybeSubBlock.takeError();
+      }
+
+      if (Code == bitc::DEFINE_ABBREV &&
+          !(Flags & AF_DontAutoprocessAbbrevs)) {
+        // We read and accumulate abbrev's, the client can't do anything with
+        // them anyway.
+        if (Error Err = ReadAbbrevRecord())
+          return std::move(Err);
+        continue;
+      }
+
+      return BitstreamEntry::getRecord(Code);
+    }
+  }
+
+  /// This is a convenience function for clients that don't expect any
+  /// subblocks. This just skips over them automatically.
+  Expected<BitstreamEntry> advanceSkippingSubblocks(unsigned Flags = 0) {
+    while (true) {
+      // If we found a normal entry, return it.
+      Expected<BitstreamEntry> MaybeEntry = advance(Flags);
+      if (!MaybeEntry)
+        return MaybeEntry;
+      BitstreamEntry Entry = MaybeEntry.get();
+
+      if (Entry.Kind != BitstreamEntry::SubBlock)
+        return Entry;
+
+      // If we found a sub-block, just skip over it and check the next entry.
+      if (Error Err = SkipBlock())
+        return std::move(Err);
+    }
+  }
+
+  Expected<unsigned> ReadCode() { return Read(CurCodeSize); }
+
+  // Block header:
+  //    [ENTER_SUBBLOCK, blockid, newcodelen, <align4bytes>, blocklen]
+
+  /// Having read the ENTER_SUBBLOCK code, read the BlockID for the block.
+  Expected<unsigned> ReadSubBlockID() { return ReadVBR(bitc::BlockIDWidth); }
+
+  /// Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body
+  /// of this block.
+  Error SkipBlock() {
+    // Read and ignore the codelen value.
+    if (Expected<uint32_t> Res = ReadVBR(bitc::CodeLenWidth))
+      ; // Since we are skipping this block, we don't care what code widths are
+        // used inside of it.
+    else
+      return Res.takeError();
+
+    SkipToFourByteBoundary();
+    Expected<unsigned> MaybeNum = Read(bitc::BlockSizeWidth);
+    if (!MaybeNum)
+      return MaybeNum.takeError();
+    size_t NumFourBytes = MaybeNum.get();
+
+    // Check that the block wasn't partially defined, and that the offset isn't
+    // bogus.
+    size_t SkipTo = GetCurrentBitNo() + NumFourBytes * 4 * 8;
+    if (AtEndOfStream())
+      return createStringError(std::errc::illegal_byte_sequence,
+                               "can't skip block: already at end of stream");
+    if (!canSkipToPos(SkipTo / 8))
+      return createStringError(std::errc::illegal_byte_sequence,
+                               "can't skip to bit %zu from %" PRIu64, SkipTo,
+                               GetCurrentBitNo());
+
+    if (Error Res = JumpToBit(SkipTo))
+      return Res;
+
+    return Error::success();
+  }
+
+  /// Having read the ENTER_SUBBLOCK abbrevid, and enter the block.
+  Error EnterSubBlock(unsigned BlockID, unsigned *NumWordsP = nullptr);
+
+  bool ReadBlockEnd() {
+    if (BlockScope.empty()) return true;
+
+    // Block tail:
+    //    [END_BLOCK, <align4bytes>]
+    SkipToFourByteBoundary();
+
+    popBlockScope();
+    return false;
+  }
+
+private:
+  void popBlockScope() {
+    CurCodeSize = BlockScope.back().PrevCodeSize;
+
+    CurAbbrevs = std::move(BlockScope.back().PrevAbbrevs);
+    BlockScope.pop_back();
+  }
+
+  //===--------------------------------------------------------------------===//
+  // Record Processing
+  //===--------------------------------------------------------------------===//
+
+public:
+  /// Return the abbreviation for the specified AbbrevId.
+  const BitCodeAbbrev *getAbbrev(unsigned AbbrevID) {
+    unsigned AbbrevNo = AbbrevID - bitc::FIRST_APPLICATION_ABBREV;
+    if (AbbrevNo >= CurAbbrevs.size())
+      report_fatal_error("Invalid abbrev number");
+    return CurAbbrevs[AbbrevNo].get();
+  }
+
+  /// Read the current record and discard it, returning the code for the record.
+  Expected<unsigned> skipRecord(unsigned AbbrevID);
+
+  Expected<unsigned> readRecord(unsigned AbbrevID,
+                                SmallVectorImpl<uint64_t> &Vals,
+                                StringRef *Blob = nullptr);
+
+  //===--------------------------------------------------------------------===//
+  // Abbrev Processing
+  //===--------------------------------------------------------------------===//
+  Error ReadAbbrevRecord();
+
+  /// Read and return a block info block from the bitstream. If an error was
+  /// encountered, return None.
+  ///
+  /// \param ReadBlockInfoNames Whether to read block/record name information in
+  /// the BlockInfo block. Only llvm-bcanalyzer uses this.
+  Expected<Optional<BitstreamBlockInfo>>
+  ReadBlockInfoBlock(bool ReadBlockInfoNames = false);
+
+  /// Set the block info to be used by this BitstreamCursor to interpret
+  /// abbreviated records.
+  void setBlockInfo(BitstreamBlockInfo *BI) { BlockInfo = BI; }
+};
+
+} // end llvm namespace
+
+#endif // LLVM_BITSTREAM_BITSTREAMREADER_H
diff --git a/linux-x64/clang/include/llvm/Bitstream/BitstreamWriter.h b/linux-x64/clang/include/llvm/Bitstream/BitstreamWriter.h
new file mode 100644
index 0000000..c0ead19
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Bitstream/BitstreamWriter.h
@@ -0,0 +1,547 @@
+//===- BitstreamWriter.h - Low-level bitstream writer interface -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This header defines the BitstreamWriter class.  This class can be used to
+// write an arbitrary bitstream, regardless of its contents.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BITSTREAM_BITSTREAMWRITER_H
+#define LLVM_BITSTREAM_BITSTREAMWRITER_H
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Bitstream/BitCodes.h"
+#include "llvm/Support/Endian.h"
+#include <vector>
+
+namespace llvm {
+
+class BitstreamWriter {
+  SmallVectorImpl<char> &Out;
+
+  /// CurBit - Always between 0 and 31 inclusive, specifies the next bit to use.
+  unsigned CurBit;
+
+  /// CurValue - The current value.  Only bits < CurBit are valid.
+  uint32_t CurValue;
+
+  /// CurCodeSize - This is the declared size of code values used for the
+  /// current block, in bits.
+  unsigned CurCodeSize;
+
+  /// BlockInfoCurBID - When emitting a BLOCKINFO_BLOCK, this is the currently
+  /// selected BLOCK ID.
+  unsigned BlockInfoCurBID;
+
+  /// CurAbbrevs - Abbrevs installed at in this block.
+  std::vector<std::shared_ptr<BitCodeAbbrev>> CurAbbrevs;
+
+  struct Block {
+    unsigned PrevCodeSize;
+    size_t StartSizeWord;
+    std::vector<std::shared_ptr<BitCodeAbbrev>> PrevAbbrevs;
+    Block(unsigned PCS, size_t SSW) : PrevCodeSize(PCS), StartSizeWord(SSW) {}
+  };
+
+  /// BlockScope - This tracks the current blocks that we have entered.
+  std::vector<Block> BlockScope;
+
+  /// BlockInfo - This contains information emitted to BLOCKINFO_BLOCK blocks.
+  /// These describe abbreviations that all blocks of the specified ID inherit.
+  struct BlockInfo {
+    unsigned BlockID;
+    std::vector<std::shared_ptr<BitCodeAbbrev>> Abbrevs;
+  };
+  std::vector<BlockInfo> BlockInfoRecords;
+
+  void WriteByte(unsigned char Value) {
+    Out.push_back(Value);
+  }
+
+  void WriteWord(unsigned Value) {
+    Value = support::endian::byte_swap<uint32_t, support::little>(Value);
+    Out.append(reinterpret_cast<const char *>(&Value),
+               reinterpret_cast<const char *>(&Value + 1));
+  }
+
+  size_t GetBufferOffset() const { return Out.size(); }
+
+  size_t GetWordIndex() const {
+    size_t Offset = GetBufferOffset();
+    assert((Offset & 3) == 0 && "Not 32-bit aligned");
+    return Offset / 4;
+  }
+
+public:
+  explicit BitstreamWriter(SmallVectorImpl<char> &O)
+    : Out(O), CurBit(0), CurValue(0), CurCodeSize(2) {}
+
+  ~BitstreamWriter() {
+    assert(CurBit == 0 && "Unflushed data remaining");
+    assert(BlockScope.empty() && CurAbbrevs.empty() && "Block imbalance");
+  }
+
+  /// Retrieve the current position in the stream, in bits.
+  uint64_t GetCurrentBitNo() const { return GetBufferOffset() * 8 + CurBit; }
+
+  /// Retrieve the number of bits currently used to encode an abbrev ID.
+  unsigned GetAbbrevIDWidth() const { return CurCodeSize; }
+
+  //===--------------------------------------------------------------------===//
+  // Basic Primitives for emitting bits to the stream.
+  //===--------------------------------------------------------------------===//
+
+  /// Backpatch a 32-bit word in the output at the given bit offset
+  /// with the specified value.
+  void BackpatchWord(uint64_t BitNo, unsigned NewWord) {
+    using namespace llvm::support;
+    unsigned ByteNo = BitNo / 8;
+    assert((!endian::readAtBitAlignment<uint32_t, little, unaligned>(
+               &Out[ByteNo], BitNo & 7)) &&
+           "Expected to be patching over 0-value placeholders");
+    endian::writeAtBitAlignment<uint32_t, little, unaligned>(
+        &Out[ByteNo], NewWord, BitNo & 7);
+  }
+
+  void BackpatchWord64(uint64_t BitNo, uint64_t Val) {
+    BackpatchWord(BitNo, (uint32_t)Val);
+    BackpatchWord(BitNo + 32, (uint32_t)(Val >> 32));
+  }
+
+  void Emit(uint32_t Val, unsigned NumBits) {
+    assert(NumBits && NumBits <= 32 && "Invalid value size!");
+    assert((Val & ~(~0U >> (32-NumBits))) == 0 && "High bits set!");
+    CurValue |= Val << CurBit;
+    if (CurBit + NumBits < 32) {
+      CurBit += NumBits;
+      return;
+    }
+
+    // Add the current word.
+    WriteWord(CurValue);
+
+    if (CurBit)
+      CurValue = Val >> (32-CurBit);
+    else
+      CurValue = 0;
+    CurBit = (CurBit+NumBits) & 31;
+  }
+
+  void FlushToWord() {
+    if (CurBit) {
+      WriteWord(CurValue);
+      CurBit = 0;
+      CurValue = 0;
+    }
+  }
+
+  void EmitVBR(uint32_t Val, unsigned NumBits) {
+    assert(NumBits <= 32 && "Too many bits to emit!");
+    uint32_t Threshold = 1U << (NumBits-1);
+
+    // Emit the bits with VBR encoding, NumBits-1 bits at a time.
+    while (Val >= Threshold) {
+      Emit((Val & ((1 << (NumBits-1))-1)) | (1 << (NumBits-1)), NumBits);
+      Val >>= NumBits-1;
+    }
+
+    Emit(Val, NumBits);
+  }
+
+  void EmitVBR64(uint64_t Val, unsigned NumBits) {
+    assert(NumBits <= 32 && "Too many bits to emit!");
+    if ((uint32_t)Val == Val)
+      return EmitVBR((uint32_t)Val, NumBits);
+
+    uint32_t Threshold = 1U << (NumBits-1);
+
+    // Emit the bits with VBR encoding, NumBits-1 bits at a time.
+    while (Val >= Threshold) {
+      Emit(((uint32_t)Val & ((1 << (NumBits-1))-1)) |
+           (1 << (NumBits-1)), NumBits);
+      Val >>= NumBits-1;
+    }
+
+    Emit((uint32_t)Val, NumBits);
+  }
+
+  /// EmitCode - Emit the specified code.
+  void EmitCode(unsigned Val) {
+    Emit(Val, CurCodeSize);
+  }
+
+  //===--------------------------------------------------------------------===//
+  // Block Manipulation
+  //===--------------------------------------------------------------------===//
+
+  /// getBlockInfo - If there is block info for the specified ID, return it,
+  /// otherwise return null.
+  BlockInfo *getBlockInfo(unsigned BlockID) {
+    // Common case, the most recent entry matches BlockID.
+    if (!BlockInfoRecords.empty() && BlockInfoRecords.back().BlockID == BlockID)
+      return &BlockInfoRecords.back();
+
+    for (unsigned i = 0, e = static_cast<unsigned>(BlockInfoRecords.size());
+         i != e; ++i)
+      if (BlockInfoRecords[i].BlockID == BlockID)
+        return &BlockInfoRecords[i];
+    return nullptr;
+  }
+
+  void EnterSubblock(unsigned BlockID, unsigned CodeLen) {
+    // Block header:
+    //    [ENTER_SUBBLOCK, blockid, newcodelen, <align4bytes>, blocklen]
+    EmitCode(bitc::ENTER_SUBBLOCK);
+    EmitVBR(BlockID, bitc::BlockIDWidth);
+    EmitVBR(CodeLen, bitc::CodeLenWidth);
+    FlushToWord();
+
+    size_t BlockSizeWordIndex = GetWordIndex();
+    unsigned OldCodeSize = CurCodeSize;
+
+    // Emit a placeholder, which will be replaced when the block is popped.
+    Emit(0, bitc::BlockSizeWidth);
+
+    CurCodeSize = CodeLen;
+
+    // Push the outer block's abbrev set onto the stack, start out with an
+    // empty abbrev set.
+    BlockScope.emplace_back(OldCodeSize, BlockSizeWordIndex);
+    BlockScope.back().PrevAbbrevs.swap(CurAbbrevs);
+
+    // If there is a blockinfo for this BlockID, add all the predefined abbrevs
+    // to the abbrev list.
+    if (BlockInfo *Info = getBlockInfo(BlockID)) {
+      CurAbbrevs.insert(CurAbbrevs.end(), Info->Abbrevs.begin(),
+                        Info->Abbrevs.end());
+    }
+  }
+
+  void ExitBlock() {
+    assert(!BlockScope.empty() && "Block scope imbalance!");
+    const Block &B = BlockScope.back();
+
+    // Block tail:
+    //    [END_BLOCK, <align4bytes>]
+    EmitCode(bitc::END_BLOCK);
+    FlushToWord();
+
+    // Compute the size of the block, in words, not counting the size field.
+    size_t SizeInWords = GetWordIndex() - B.StartSizeWord - 1;
+    uint64_t BitNo = uint64_t(B.StartSizeWord) * 32;
+
+    // Update the block size field in the header of this sub-block.
+    BackpatchWord(BitNo, SizeInWords);
+
+    // Restore the inner block's code size and abbrev table.
+    CurCodeSize = B.PrevCodeSize;
+    CurAbbrevs = std::move(B.PrevAbbrevs);
+    BlockScope.pop_back();
+  }
+
+  //===--------------------------------------------------------------------===//
+  // Record Emission
+  //===--------------------------------------------------------------------===//
+
+private:
+  /// EmitAbbreviatedLiteral - Emit a literal value according to its abbrev
+  /// record.  This is a no-op, since the abbrev specifies the literal to use.
+  template<typename uintty>
+  void EmitAbbreviatedLiteral(const BitCodeAbbrevOp &Op, uintty V) {
+    assert(Op.isLiteral() && "Not a literal");
+    // If the abbrev specifies the literal value to use, don't emit
+    // anything.
+    assert(V == Op.getLiteralValue() &&
+           "Invalid abbrev for record!");
+  }
+
+  /// EmitAbbreviatedField - Emit a single scalar field value with the specified
+  /// encoding.
+  template<typename uintty>
+  void EmitAbbreviatedField(const BitCodeAbbrevOp &Op, uintty V) {
+    assert(!Op.isLiteral() && "Literals should use EmitAbbreviatedLiteral!");
+
+    // Encode the value as we are commanded.
+    switch (Op.getEncoding()) {
+    default: llvm_unreachable("Unknown encoding!");
+    case BitCodeAbbrevOp::Fixed:
+      if (Op.getEncodingData())
+        Emit((unsigned)V, (unsigned)Op.getEncodingData());
+      break;
+    case BitCodeAbbrevOp::VBR:
+      if (Op.getEncodingData())
+        EmitVBR64(V, (unsigned)Op.getEncodingData());
+      break;
+    case BitCodeAbbrevOp::Char6:
+      Emit(BitCodeAbbrevOp::EncodeChar6((char)V), 6);
+      break;
+    }
+  }
+
+  /// EmitRecordWithAbbrevImpl - This is the core implementation of the record
+  /// emission code.  If BlobData is non-null, then it specifies an array of
+  /// data that should be emitted as part of the Blob or Array operand that is
+  /// known to exist at the end of the record. If Code is specified, then
+  /// it is the record code to emit before the Vals, which must not contain
+  /// the code.
+  template <typename uintty>
+  void EmitRecordWithAbbrevImpl(unsigned Abbrev, ArrayRef<uintty> Vals,
+                                StringRef Blob, Optional<unsigned> Code) {
+    const char *BlobData = Blob.data();
+    unsigned BlobLen = (unsigned) Blob.size();
+    unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
+    assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
+    const BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo].get();
+
+    EmitCode(Abbrev);
+
+    unsigned i = 0, e = static_cast<unsigned>(Abbv->getNumOperandInfos());
+    if (Code) {
+      assert(e && "Expected non-empty abbreviation");
+      const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i++);
+
+      if (Op.isLiteral())
+        EmitAbbreviatedLiteral(Op, Code.getValue());
+      else {
+        assert(Op.getEncoding() != BitCodeAbbrevOp::Array &&
+               Op.getEncoding() != BitCodeAbbrevOp::Blob &&
+               "Expected literal or scalar");
+        EmitAbbreviatedField(Op, Code.getValue());
+      }
+    }
+
+    unsigned RecordIdx = 0;
+    for (; i != e; ++i) {
+      const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
+      if (Op.isLiteral()) {
+        assert(RecordIdx < Vals.size() && "Invalid abbrev/record");
+        EmitAbbreviatedLiteral(Op, Vals[RecordIdx]);
+        ++RecordIdx;
+      } else if (Op.getEncoding() == BitCodeAbbrevOp::Array) {
+        // Array case.
+        assert(i + 2 == e && "array op not second to last?");
+        const BitCodeAbbrevOp &EltEnc = Abbv->getOperandInfo(++i);
+
+        // If this record has blob data, emit it, otherwise we must have record
+        // entries to encode this way.
+        if (BlobData) {
+          assert(RecordIdx == Vals.size() &&
+                 "Blob data and record entries specified for array!");
+          // Emit a vbr6 to indicate the number of elements present.
+          EmitVBR(static_cast<uint32_t>(BlobLen), 6);
+
+          // Emit each field.
+          for (unsigned i = 0; i != BlobLen; ++i)
+            EmitAbbreviatedField(EltEnc, (unsigned char)BlobData[i]);
+
+          // Know that blob data is consumed for assertion below.
+          BlobData = nullptr;
+        } else {
+          // Emit a vbr6 to indicate the number of elements present.
+          EmitVBR(static_cast<uint32_t>(Vals.size()-RecordIdx), 6);
+
+          // Emit each field.
+          for (unsigned e = Vals.size(); RecordIdx != e; ++RecordIdx)
+            EmitAbbreviatedField(EltEnc, Vals[RecordIdx]);
+        }
+      } else if (Op.getEncoding() == BitCodeAbbrevOp::Blob) {
+        // If this record has blob data, emit it, otherwise we must have record
+        // entries to encode this way.
+
+        if (BlobData) {
+          assert(RecordIdx == Vals.size() &&
+                 "Blob data and record entries specified for blob operand!");
+
+          assert(Blob.data() == BlobData && "BlobData got moved");
+          assert(Blob.size() == BlobLen && "BlobLen got changed");
+          emitBlob(Blob);
+          BlobData = nullptr;
+        } else {
+          emitBlob(Vals.slice(RecordIdx));
+        }
+      } else {  // Single scalar field.
+        assert(RecordIdx < Vals.size() && "Invalid abbrev/record");
+        EmitAbbreviatedField(Op, Vals[RecordIdx]);
+        ++RecordIdx;
+      }
+    }
+    assert(RecordIdx == Vals.size() && "Not all record operands emitted!");
+    assert(BlobData == nullptr &&
+           "Blob data specified for record that doesn't use it!");
+  }
+
+public:
+  /// Emit a blob, including flushing before and tail-padding.
+  template <class UIntTy>
+  void emitBlob(ArrayRef<UIntTy> Bytes, bool ShouldEmitSize = true) {
+    // Emit a vbr6 to indicate the number of elements present.
+    if (ShouldEmitSize)
+      EmitVBR(static_cast<uint32_t>(Bytes.size()), 6);
+
+    // Flush to a 32-bit alignment boundary.
+    FlushToWord();
+
+    // Emit literal bytes.
+    for (const auto &B : Bytes) {
+      assert(isUInt<8>(B) && "Value too large to emit as byte");
+      WriteByte((unsigned char)B);
+    }
+
+    // Align end to 32-bits.
+    while (GetBufferOffset() & 3)
+      WriteByte(0);
+  }
+  void emitBlob(StringRef Bytes, bool ShouldEmitSize = true) {
+    emitBlob(makeArrayRef((const uint8_t *)Bytes.data(), Bytes.size()),
+             ShouldEmitSize);
+  }
+
+  /// EmitRecord - Emit the specified record to the stream, using an abbrev if
+  /// we have one to compress the output.
+  template <typename Container>
+  void EmitRecord(unsigned Code, const Container &Vals, unsigned Abbrev = 0) {
+    if (!Abbrev) {
+      // If we don't have an abbrev to use, emit this in its fully unabbreviated
+      // form.
+      auto Count = static_cast<uint32_t>(makeArrayRef(Vals).size());
+      EmitCode(bitc::UNABBREV_RECORD);
+      EmitVBR(Code, 6);
+      EmitVBR(Count, 6);
+      for (unsigned i = 0, e = Count; i != e; ++i)
+        EmitVBR64(Vals[i], 6);
+      return;
+    }
+
+    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), StringRef(), Code);
+  }
+
+  /// EmitRecordWithAbbrev - Emit a record with the specified abbreviation.
+  /// Unlike EmitRecord, the code for the record should be included in Vals as
+  /// the first entry.
+  template <typename Container>
+  void EmitRecordWithAbbrev(unsigned Abbrev, const Container &Vals) {
+    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), StringRef(), None);
+  }
+
+  /// EmitRecordWithBlob - Emit the specified record to the stream, using an
+  /// abbrev that includes a blob at the end.  The blob data to emit is
+  /// specified by the pointer and length specified at the end.  In contrast to
+  /// EmitRecord, this routine expects that the first entry in Vals is the code
+  /// of the record.
+  template <typename Container>
+  void EmitRecordWithBlob(unsigned Abbrev, const Container &Vals,
+                          StringRef Blob) {
+    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), Blob, None);
+  }
+  template <typename Container>
+  void EmitRecordWithBlob(unsigned Abbrev, const Container &Vals,
+                          const char *BlobData, unsigned BlobLen) {
+    return EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals),
+                                    StringRef(BlobData, BlobLen), None);
+  }
+
+  /// EmitRecordWithArray - Just like EmitRecordWithBlob, works with records
+  /// that end with an array.
+  template <typename Container>
+  void EmitRecordWithArray(unsigned Abbrev, const Container &Vals,
+                           StringRef Array) {
+    EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals), Array, None);
+  }
+  template <typename Container>
+  void EmitRecordWithArray(unsigned Abbrev, const Container &Vals,
+                           const char *ArrayData, unsigned ArrayLen) {
+    return EmitRecordWithAbbrevImpl(Abbrev, makeArrayRef(Vals),
+                                    StringRef(ArrayData, ArrayLen), None);
+  }
+
+  //===--------------------------------------------------------------------===//
+  // Abbrev Emission
+  //===--------------------------------------------------------------------===//
+
+private:
+  // Emit the abbreviation as a DEFINE_ABBREV record.
+  void EncodeAbbrev(const BitCodeAbbrev &Abbv) {
+    EmitCode(bitc::DEFINE_ABBREV);
+    EmitVBR(Abbv.getNumOperandInfos(), 5);
+    for (unsigned i = 0, e = static_cast<unsigned>(Abbv.getNumOperandInfos());
+         i != e; ++i) {
+      const BitCodeAbbrevOp &Op = Abbv.getOperandInfo(i);
+      Emit(Op.isLiteral(), 1);
+      if (Op.isLiteral()) {
+        EmitVBR64(Op.getLiteralValue(), 8);
+      } else {
+        Emit(Op.getEncoding(), 3);
+        if (Op.hasEncodingData())
+          EmitVBR64(Op.getEncodingData(), 5);
+      }
+    }
+  }
+public:
+
+  /// Emits the abbreviation \p Abbv to the stream.
+  unsigned EmitAbbrev(std::shared_ptr<BitCodeAbbrev> Abbv) {
+    EncodeAbbrev(*Abbv);
+    CurAbbrevs.push_back(std::move(Abbv));
+    return static_cast<unsigned>(CurAbbrevs.size())-1 +
+      bitc::FIRST_APPLICATION_ABBREV;
+  }
+
+  //===--------------------------------------------------------------------===//
+  // BlockInfo Block Emission
+  //===--------------------------------------------------------------------===//
+
+  /// EnterBlockInfoBlock - Start emitting the BLOCKINFO_BLOCK.
+  void EnterBlockInfoBlock() {
+    EnterSubblock(bitc::BLOCKINFO_BLOCK_ID, 2);
+    BlockInfoCurBID = ~0U;
+    BlockInfoRecords.clear();
+  }
+private:
+  /// SwitchToBlockID - If we aren't already talking about the specified block
+  /// ID, emit a BLOCKINFO_CODE_SETBID record.
+  void SwitchToBlockID(unsigned BlockID) {
+    if (BlockInfoCurBID == BlockID) return;
+    SmallVector<unsigned, 2> V;
+    V.push_back(BlockID);
+    EmitRecord(bitc::BLOCKINFO_CODE_SETBID, V);
+    BlockInfoCurBID = BlockID;
+  }
+
+  BlockInfo &getOrCreateBlockInfo(unsigned BlockID) {
+    if (BlockInfo *BI = getBlockInfo(BlockID))
+      return *BI;
+
+    // Otherwise, add a new record.
+    BlockInfoRecords.emplace_back();
+    BlockInfoRecords.back().BlockID = BlockID;
+    return BlockInfoRecords.back();
+  }
+
+public:
+
+  /// EmitBlockInfoAbbrev - Emit a DEFINE_ABBREV record for the specified
+  /// BlockID.
+  unsigned EmitBlockInfoAbbrev(unsigned BlockID, std::shared_ptr<BitCodeAbbrev> Abbv) {
+    SwitchToBlockID(BlockID);
+    EncodeAbbrev(*Abbv);
+
+    // Add the abbrev to the specified block record.
+    BlockInfo &Info = getOrCreateBlockInfo(BlockID);
+    Info.Abbrevs.push_back(std::move(Abbv));
+
+    return Info.Abbrevs.size()-1+bitc::FIRST_APPLICATION_ABBREV;
+  }
+};
+
+
+} // End llvm namespace
+
+#endif
diff --git a/linux-x64/clang/include/llvm/CodeGen/AccelTable.h b/linux-x64/clang/include/llvm/CodeGen/AccelTable.h
index 9731abd..734531a 100644
--- a/linux-x64/clang/include/llvm/CodeGen/AccelTable.h
+++ b/linux-x64/clang/include/llvm/CodeGen/AccelTable.h
@@ -326,14 +326,8 @@
 
   void emit(AsmPrinter *Asm) const override;
 
-#ifndef _MSC_VER
-  // The line below is rejected by older versions (TBD) of MSVC.
   static constexpr Atom Atoms[] = {
       Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)};
-#else
-  // FIXME: Erase this path once the minimum MSCV version has been bumped.
-  static const SmallVector<Atom, 4> Atoms;
-#endif
 
 #ifndef NDEBUG
   void print(raw_ostream &OS) const override;
@@ -351,16 +345,10 @@
 
   void emit(AsmPrinter *Asm) const override;
 
-#ifndef _MSC_VER
-  // The line below is rejected by older versions (TBD) of MSVC.
   static constexpr Atom Atoms[] = {
       Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4),
       Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2),
       Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1)};
-#else
-  // FIXME: Erase this path once the minimum MSCV version has been bumped.
-  static const SmallVector<Atom, 4> Atoms;
-#endif
 
 #ifndef NDEBUG
   void print(raw_ostream &OS) const override;
@@ -375,14 +363,8 @@
 
   void emit(AsmPrinter *Asm) const override;
 
-#ifndef _MSC_VER
-  // The line below is rejected by older versions (TBD) of MSVC.
   static constexpr Atom Atoms[] = {
       Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)};
-#else
-  // FIXME: Erase this path once the minimum MSCV version has been bumped.
-  static const SmallVector<Atom, 4> Atoms;
-#endif
 
 #ifndef NDEBUG
   void print(raw_ostream &OS) const override;
@@ -406,16 +388,10 @@
 
   void emit(AsmPrinter *Asm) const override;
 
-#ifndef _MSC_VER
-  // The line below is rejected by older versions (TBD) of MSVC.
   static constexpr Atom Atoms[] = {
       Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4),
       Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2),
       Atom(5, dwarf::DW_FORM_data1), Atom(6, dwarf::DW_FORM_data4)};
-#else
-  // FIXME: Erase this path once the minimum MSCV version has been bumped.
-  static const SmallVector<Atom, 4> Atoms;
-#endif
 
 #ifndef NDEBUG
   void print(raw_ostream &OS) const override;
diff --git a/linux-x64/clang/include/llvm/CodeGen/Analysis.h b/linux-x64/clang/include/llvm/CodeGen/Analysis.h
index 468768d..0be0ac2 100644
--- a/linux-x64/clang/include/llvm/CodeGen/Analysis.h
+++ b/linux-x64/clang/include/llvm/CodeGen/Analysis.h
@@ -25,6 +25,7 @@
 
 namespace llvm {
 class GlobalValue;
+class LLT;
 class MachineBasicBlock;
 class MachineFunction;
 class TargetLoweringBase;
@@ -73,6 +74,25 @@
                      SmallVectorImpl<uint64_t> *Offsets = nullptr,
                      uint64_t StartingOffset = 0);
 
+/// Variant of ComputeValueVTs that also produces the memory VTs.
+void ComputeValueVTs(const TargetLowering &TLI, const DataLayout &DL, Type *Ty,
+                     SmallVectorImpl<EVT> &ValueVTs,
+                     SmallVectorImpl<EVT> *MemVTs,
+                     SmallVectorImpl<uint64_t> *Offsets = nullptr,
+                     uint64_t StartingOffset = 0);
+
+/// computeValueLLTs - Given an LLVM IR type, compute a sequence of
+/// LLTs that represent all the individual underlying
+/// non-aggregate types that comprise it.
+///
+/// If Offsets is non-null, it points to a vector to be filled in
+/// with the in-memory offsets of each of the individual values.
+///
+void computeValueLLTs(const DataLayout &DL, Type &Ty,
+                      SmallVectorImpl<LLT> &ValueTys,
+                      SmallVectorImpl<uint64_t> *Offsets = nullptr,
+                      uint64_t StartingOffset = 0);
+
 /// ExtractTypeInfo - Returns the type info, possibly bitcast, encoded in V.
 GlobalValue *ExtractTypeInfo(Value *V);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h b/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h
index fb12bb2..9c2097b 100644
--- a/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h
+++ b/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h
@@ -19,6 +19,7 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
+#include "llvm/CodeGen/AsmPrinterHandler.h"
 #include "llvm/CodeGen/DwarfStringPoolEntry.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/IR/InlineAsm.h"
@@ -32,7 +33,6 @@
 
 namespace llvm {
 
-class AsmPrinterHandler;
 class BasicBlock;
 class BlockAddress;
 class Constant;
@@ -138,16 +138,16 @@
   /// Protected struct HandlerInfo and Handlers permit target extended
   /// AsmPrinter adds their own handlers.
   struct HandlerInfo {
-    AsmPrinterHandler *Handler;
+    std::unique_ptr<AsmPrinterHandler> Handler;
     const char *TimerName;
     const char *TimerDescription;
     const char *TimerGroupName;
     const char *TimerGroupDescription;
 
-    HandlerInfo(AsmPrinterHandler *Handler, const char *TimerName,
-                const char *TimerDescription, const char *TimerGroupName,
-                const char *TimerGroupDescription)
-        : Handler(Handler), TimerName(TimerName),
+    HandlerInfo(std::unique_ptr<AsmPrinterHandler> Handler,
+                const char *TimerName, const char *TimerDescription,
+                const char *TimerGroupName, const char *TimerGroupDescription)
+        : Handler(std::move(Handler)), TimerName(TimerName),
           TimerDescription(TimerDescription), TimerGroupName(TimerGroupName),
           TimerGroupDescription(TimerGroupDescription) {}
   };
@@ -315,6 +315,8 @@
 
   void emitStackSizeSection(const MachineFunction &MF);
 
+  void emitRemarksSection(Module &M);
+
   enum CFIMoveType { CFI_M_None, CFI_M_EH, CFI_M_Debug };
   CFIMoveType needsCFIMoves() const;
 
@@ -510,7 +512,7 @@
   void EmitSLEB128(int64_t Value, const char *Desc = nullptr) const;
 
   /// Emit the specified unsigned leb128 value.
-  void EmitULEB128(uint64_t Value, const char *Desc = nullptr) const;
+  void EmitULEB128(uint64_t Value, const char *Desc = nullptr, unsigned PadTo = 0) const;
 
   /// Emit a .byte 42 directive that corresponds to an encoding.  If verbose
   /// assembly output is enabled, we output comments describing the encoding.
@@ -588,20 +590,22 @@
   virtual void PrintSpecial(const MachineInstr *MI, raw_ostream &OS,
                             const char *Code) const;
 
+  /// Print the MachineOperand as a symbol. Targets with complex handling of
+  /// symbol references should override the base implementation.
+  virtual void PrintSymbolOperand(const MachineOperand &MO, raw_ostream &OS);
+
   /// Print the specified operand of MI, an INLINEASM instruction, using the
   /// specified assembler variant.  Targets should override this to format as
   /// appropriate.  This method can return true if the operand is erroneous.
   virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
-                               unsigned AsmVariant, const char *ExtraCode,
-                               raw_ostream &OS);
+                               const char *ExtraCode, raw_ostream &OS);
 
   /// Print the specified operand of MI, an INLINEASM instruction, using the
   /// specified assembler variant as an address. Targets should override this to
   /// format as appropriate.  This method can return true if the operand is
   /// erroneous.
   virtual bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
-                                     unsigned AsmVariant, const char *ExtraCode,
-                                     raw_ostream &OS);
+                                     const char *ExtraCode, raw_ostream &OS);
 
   /// Let the target do anything it needs to do before emitting inlineasm.
   /// \p StartInfo - the subtarget info before parsing inline asm
@@ -616,6 +620,15 @@
   virtual void emitInlineAsmEnd(const MCSubtargetInfo &StartInfo,
                                 const MCSubtargetInfo *EndInfo) const;
 
+  /// This emits visibility information about symbol, if this is supported by
+  /// the target.
+  void EmitVisibility(MCSymbol *Sym, unsigned Visibility,
+                      bool IsDefinition = true) const;
+
+  /// This emits linkage information about \p GVSym based on \p GV, if this is
+  /// supported by the target.
+  void EmitLinkage(const GlobalValue *GV, MCSymbol *GVSym) const;
+
 private:
   /// Private state for PrintSpecial()
   // Assign a unique ID to this machine instruction.
@@ -646,13 +659,6 @@
   // Internal Implementation Details
   //===------------------------------------------------------------------===//
 
-  /// This emits visibility information about symbol, if this is supported by
-  /// the target.
-  void EmitVisibility(MCSymbol *Sym, unsigned Visibility,
-                      bool IsDefinition = true) const;
-
-  void EmitLinkage(const GlobalValue *GV, MCSymbol *GVSym) const;
-
   void EmitJumpTableEntry(const MachineJumpTableInfo *MJTI,
                           const MachineBasicBlock *MBB, unsigned uid) const;
   void EmitLLVMUsedList(const ConstantArray *InitList);
diff --git a/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h b/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h
index 1e9aeab..173be72 100644
--- a/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h
@@ -196,11 +196,12 @@
 public:
   /// \name Scalar TTI Implementations
   /// @{
-  bool allowsMisalignedMemoryAccesses(LLVMContext &Context,
-                                      unsigned BitWidth, unsigned AddressSpace,
-                                      unsigned Alignment, bool *Fast) const {
+  bool allowsMisalignedMemoryAccesses(LLVMContext &Context, unsigned BitWidth,
+                                      unsigned AddressSpace, unsigned Alignment,
+                                      bool *Fast) const {
     EVT E = EVT::getIntegerVT(Context, BitWidth);
-    return getTLI()->allowsMisalignedMemoryAccesses(E, AddressSpace, Alignment, Fast);
+    return getTLI()->allowsMisalignedMemoryAccesses(
+        E, AddressSpace, Alignment, MachineMemOperand::MONone, Fast);
   }
 
   bool hasBranchDivergence() { return false; }
@@ -292,12 +293,12 @@
   }
 
   unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                            ArrayRef<const Value *> Arguments) {
-    return BaseT::getIntrinsicCost(IID, RetTy, Arguments);
+                            ArrayRef<const Value *> Arguments, const User *U) {
+    return BaseT::getIntrinsicCost(IID, RetTy, Arguments, U);
   }
 
   unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
-                            ArrayRef<Type *> ParamTys) {
+                            ArrayRef<Type *> ParamTys, const User *U) {
     if (IID == Intrinsic::cttz) {
       if (getTLI()->isCheapToSpeculateCttz())
         return TargetTransformInfo::TCC_Basic;
@@ -310,7 +311,7 @@
       return TargetTransformInfo::TCC_Expensive;
     }
 
-    return BaseT::getIntrinsicCost(IID, RetTy, ParamTys);
+    return BaseT::getIntrinsicCost(IID, RetTy, ParamTys, U);
   }
 
   unsigned getEstimatedNumberOfCaseClusters(const SwitchInst &SI,
@@ -413,6 +414,12 @@
       if (TLI->isZExtFree(OpTy, Ty))
         return TargetTransformInfo::TCC_Free;
       return TargetTransformInfo::TCC_Basic;
+
+    case Instruction::AddrSpaceCast:
+      if (TLI->isFreeAddrSpaceCast(OpTy->getPointerAddressSpace(),
+                                   Ty->getPointerAddressSpace()))
+        return TargetTransformInfo::TCC_Free;
+      return TargetTransformInfo::TCC_Basic;
     }
 
     return BaseT::getOperationCost(Opcode, Ty, OpTy);
@@ -485,6 +492,13 @@
     UP.BEInsns = 2;
   }
 
+  bool isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
+                                AssumptionCache &AC,
+                                TargetLibraryInfo *LibInfo,
+                                HardwareLoopInfo &HWLoopInfo) {
+    return BaseT::isHardwareLoopProfitable(L, SE, AC, LibInfo, HWLoopInfo);
+  }
+
   int getInstructionLatency(const Instruction *I) {
     if (isa<LoadInst>(I))
       return getST()->getSchedModel().DefaultLoadLatency;
@@ -656,7 +670,7 @@
       return 0;
 
     if (Opcode == Instruction::AddrSpaceCast &&
-        TLI->isNoopAddrSpaceCast(Src->getPointerAddressSpace(),
+        TLI->isFreeAddrSpaceCast(Src->getPointerAddressSpace(),
                                  Dst->getPointerAddressSpace()))
       return 0;
 
@@ -1057,8 +1071,8 @@
     case Intrinsic::experimental_vector_reduce_and:
     case Intrinsic::experimental_vector_reduce_or:
     case Intrinsic::experimental_vector_reduce_xor:
-    case Intrinsic::experimental_vector_reduce_fadd:
-    case Intrinsic::experimental_vector_reduce_fmul:
+    case Intrinsic::experimental_vector_reduce_v2_fadd:
+    case Intrinsic::experimental_vector_reduce_v2_fmul:
     case Intrinsic::experimental_vector_reduce_smax:
     case Intrinsic::experimental_vector_reduce_smin:
     case Intrinsic::experimental_vector_reduce_fmax:
@@ -1248,12 +1262,16 @@
     case Intrinsic::experimental_vector_reduce_xor:
       return ConcreteTTI->getArithmeticReductionCost(Instruction::Xor, Tys[0],
                                                      /*IsPairwiseForm=*/false);
-    case Intrinsic::experimental_vector_reduce_fadd:
-      return ConcreteTTI->getArithmeticReductionCost(Instruction::FAdd, Tys[0],
-                                                     /*IsPairwiseForm=*/false);
-    case Intrinsic::experimental_vector_reduce_fmul:
-      return ConcreteTTI->getArithmeticReductionCost(Instruction::FMul, Tys[0],
-                                                     /*IsPairwiseForm=*/false);
+    case Intrinsic::experimental_vector_reduce_v2_fadd:
+      return ConcreteTTI->getArithmeticReductionCost(
+          Instruction::FAdd, Tys[0],
+          /*IsPairwiseForm=*/false); // FIXME: Add new flag for cost of strict
+                                     // reductions.
+    case Intrinsic::experimental_vector_reduce_v2_fmul:
+      return ConcreteTTI->getArithmeticReductionCost(
+          Instruction::FMul, Tys[0],
+          /*IsPairwiseForm=*/false); // FIXME: Add new flag for cost of strict
+                                     // reductions.
     case Intrinsic::experimental_vector_reduce_smax:
     case Intrinsic::experimental_vector_reduce_smin:
     case Intrinsic::experimental_vector_reduce_fmax:
@@ -1306,6 +1324,30 @@
                                               CondTy, nullptr);
       return Cost;
     }
+    case Intrinsic::smul_fix:
+    case Intrinsic::umul_fix: {
+      unsigned ExtSize = RetTy->getScalarSizeInBits() * 2;
+      Type *ExtTy = Type::getIntNTy(RetTy->getContext(), ExtSize);
+      if (RetVF > 1)
+        ExtTy = VectorType::get(ExtTy, RetVF);
+
+      unsigned ExtOp =
+          IID == Intrinsic::smul_fix ? Instruction::SExt : Instruction::ZExt;
+
+      unsigned Cost = 0;
+      Cost += 2 * ConcreteTTI->getCastInstrCost(ExtOp, ExtTy, RetTy);
+      Cost += ConcreteTTI->getArithmeticInstrCost(Instruction::Mul, ExtTy);
+      Cost +=
+          2 * ConcreteTTI->getCastInstrCost(Instruction::Trunc, RetTy, ExtTy);
+      Cost += ConcreteTTI->getArithmeticInstrCost(Instruction::LShr, RetTy,
+                                                  TTI::OK_AnyValue,
+                                                  TTI::OK_UniformConstantValue);
+      Cost += ConcreteTTI->getArithmeticInstrCost(Instruction::Shl, RetTy,
+                                                  TTI::OK_AnyValue,
+                                                  TTI::OK_UniformConstantValue);
+      Cost += ConcreteTTI->getArithmeticInstrCost(Instruction::Or, RetTy);
+      return Cost;
+    }
     case Intrinsic::sadd_with_overflow:
     case Intrinsic::ssub_with_overflow: {
       Type *SumTy = RetTy->getContainedType(0);
@@ -1346,6 +1388,36 @@
                                               OverflowTy, nullptr);
       return Cost;
     }
+    case Intrinsic::smul_with_overflow:
+    case Intrinsic::umul_with_overflow: {
+      Type *MulTy = RetTy->getContainedType(0);
+      Type *OverflowTy = RetTy->getContainedType(1);
+      unsigned ExtSize = MulTy->getScalarSizeInBits() * 2;
+      Type *ExtTy = Type::getIntNTy(RetTy->getContext(), ExtSize);
+      if (MulTy->isVectorTy())
+        ExtTy = VectorType::get(ExtTy, MulTy->getVectorNumElements() );
+
+      unsigned ExtOp =
+          IID == Intrinsic::smul_fix ? Instruction::SExt : Instruction::ZExt;
+
+      unsigned Cost = 0;
+      Cost += 2 * ConcreteTTI->getCastInstrCost(ExtOp, ExtTy, MulTy);
+      Cost += ConcreteTTI->getArithmeticInstrCost(Instruction::Mul, ExtTy);
+      Cost +=
+          2 * ConcreteTTI->getCastInstrCost(Instruction::Trunc, MulTy, ExtTy);
+      Cost += ConcreteTTI->getArithmeticInstrCost(Instruction::LShr, MulTy,
+                                                  TTI::OK_AnyValue,
+                                                  TTI::OK_UniformConstantValue);
+
+      if (IID == Intrinsic::smul_with_overflow)
+        Cost += ConcreteTTI->getArithmeticInstrCost(
+            Instruction::AShr, MulTy, TTI::OK_AnyValue,
+            TTI::OK_UniformConstantValue);
+
+      Cost += ConcreteTTI->getCmpSelInstrCost(BinaryOperator::ICmp, MulTy,
+                                              OverflowTy, nullptr);
+      return Cost;
+    }
     case Intrinsic::ctpop:
       ISDs.push_back(ISD::CTPOP);
       // In case of legalization use TCC_Expensive. This is cheaper than a
diff --git a/linux-x64/clang/include/llvm/CodeGen/CSEConfigBase.h b/linux-x64/clang/include/llvm/CodeGen/CSEConfigBase.h
new file mode 100644
index 0000000..70b5e5c
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/CSEConfigBase.h
@@ -0,0 +1,28 @@
+//===- CSEConfigBase.h - A CSEConfig interface ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_CSECONFIG_BASE_H
+#define LLVM_CODEGEN_CSECONFIG_BASE_H
+
+namespace llvm {
+// Class representing some configuration that can be done during GlobalISel's
+// CSEInfo analysis. We define it here because TargetPassConfig can't depend on
+// the GlobalISel library, and so we use this in the interface between them
+// so that the derived classes in GISel can reference generic opcodes.
+class CSEConfigBase {
+public:
+  virtual ~CSEConfigBase() = default;
+  // Hook for defining which Generic instructions should be CSEd.
+  // GISelCSEInfo currently only calls this hook when dealing with generic
+  // opcodes.
+  virtual bool shouldCSEOpc(unsigned Opc) { return false; }
+};
+
+} // namespace llvm
+
+#endif // LLVM_CODEGEN_CSECONFIG_BASE_H
diff --git a/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h b/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h
index 78aebbe..aa339e1 100644
--- a/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h
+++ b/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h
@@ -145,7 +145,7 @@
 
   bool needsCustom() const { return isCustom; }
 
-  unsigned getLocReg() const { assert(isRegLoc()); return Loc; }
+  Register getLocReg() const { assert(isRegLoc()); return Loc; }
   unsigned getLocMemOffset() const { assert(isMemLoc()); return Loc; }
   unsigned getExtraInfo() const { return Loc; }
   MVT getLocVT() const { return LocVT; }
@@ -556,7 +556,7 @@
 
     // Sort the locations of the arguments according to their original position.
     SmallVector<CCValAssign, 16> TmpArgLocs;
-    std::swap(TmpArgLocs, Locs);
+    TmpArgLocs.swap(Locs);
     auto B = TmpArgLocs.begin(), E = TmpArgLocs.end();
     std::merge(B, B + NumFirstPassLocs, B + NumFirstPassLocs, E,
                std::back_inserter(Locs),
diff --git a/linux-x64/clang/include/llvm/CodeGen/CommandFlags.inc b/linux-x64/clang/include/llvm/CodeGen/CommandFlags.inc
index 5b9564c..cb69e9f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/CommandFlags.inc
+++ b/linux-x64/clang/include/llvm/CodeGen/CommandFlags.inc
@@ -271,6 +271,11 @@
     EnableAddrsig("addrsig", cl::desc("Emit an address-significance table"),
                   cl::init(false));
 
+static cl::opt<bool>
+    EnableDebugEntryValues("debug-entry-values",
+                           cl::desc("Emit debug info about parameter's entry values"),
+                           cl::init(false));
+
 // Common utility function tightly tied to the options listed here. Initializes
 // a TargetOptions object with CodeGen flags and returns it.
 static TargetOptions InitTargetOptionsFromCodeGenFlags() {
@@ -300,6 +305,7 @@
   Options.ExceptionModel = ExceptionModel;
   Options.EmitStackSizeSection = EnableStackSizeSection;
   Options.EmitAddrsig = EnableAddrsig;
+  Options.EnableDebugEntryValues = EnableDebugEntryValues;
 
   Options.MCOptions = InitMCTargetOptionsFromFlags();
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/DIE.h b/linux-x64/clang/include/llvm/CodeGen/DIE.h
index 9e7167f..684f9e4 100644
--- a/linux-x64/clang/include/llvm/CodeGen/DIE.h
+++ b/linux-x64/clang/include/llvm/CodeGen/DIE.h
@@ -38,6 +38,7 @@
 class AsmPrinter;
 class DIE;
 class DIEUnit;
+class DwarfCompileUnit;
 class MCExpr;
 class MCSection;
 class MCSymbol;
@@ -230,6 +231,25 @@
 };
 
 //===--------------------------------------------------------------------===//
+/// A BaseTypeRef DIE.
+class DIEBaseTypeRef {
+  const DwarfCompileUnit *CU;
+  const uint64_t Index;
+  static constexpr unsigned ULEB128PadSize = 4;
+
+public:
+  explicit DIEBaseTypeRef(const DwarfCompileUnit *TheCU, uint64_t Idx)
+    : CU(TheCU), Index(Idx) {}
+
+  /// EmitValue - Emit base type reference.
+  void EmitValue(const AsmPrinter *AP, dwarf::Form Form) const;
+  /// SizeOf - Determine size of the base type reference in bytes.
+  unsigned SizeOf(const AsmPrinter *AP, dwarf::Form Form) const;
+
+  void print(raw_ostream &O) const;
+};
+
+//===--------------------------------------------------------------------===//
 /// A simple label difference DIE.
 ///
 class DIEDelta {
@@ -349,7 +369,7 @@
   /// should be stored by reference instead of by value.
   using ValTy = AlignedCharArrayUnion<DIEInteger, DIEString, DIEExpr, DIELabel,
                                       DIEDelta *, DIEEntry, DIEBlock *,
-                                      DIELoc *, DIELocList>;
+                                      DIELoc *, DIELocList, DIEBaseTypeRef *>;
 
   static_assert(sizeof(ValTy) <= sizeof(uint64_t) ||
                     sizeof(ValTy) <= sizeof(void *),
@@ -501,6 +521,18 @@
     }
     Last = &N;
   }
+
+  void push_front(Node &N) {
+    assert(N.Next.getPointer() == &N && "Expected unlinked node");
+    assert(N.Next.getInt() == true && "Expected unlinked node");
+
+    if (Last) {
+      N.Next.setPointerAndInt(Last->Next.getPointer(), false);
+      Last->Next.setPointerAndInt(&N, true);
+    } else {
+      Last = &N;
+    }
+  }
 };
 
 template <class T> class IntrusiveBackList : IntrusiveBackListBase {
@@ -508,8 +540,15 @@
   using IntrusiveBackListBase::empty;
 
   void push_back(T &N) { IntrusiveBackListBase::push_back(N); }
+  void push_front(T &N) { IntrusiveBackListBase::push_front(N); }
   T &back() { return *static_cast<T *>(Last); }
   const T &back() const { return *static_cast<T *>(Last); }
+  T &front() {
+    return *static_cast<T *>(Last ? Last->Next.getPointer() : nullptr);
+  }
+  const T &front() const {
+    return *static_cast<T *>(Last ? Last->Next.getPointer() : nullptr);
+  }
 
   class const_iterator;
   class iterator
@@ -759,7 +798,7 @@
   ///
   /// \returns the DIEUnit that represents the compile or type unit that owns
   /// this DIE, or NULL if this DIE hasn't been added to a unit DIE.
-  const DIEUnit *getUnit() const;
+  DIEUnit *getUnit() const;
 
   void setOffset(unsigned O) { Offset = O; }
   void setSize(unsigned S) { Size = S; }
@@ -772,6 +811,13 @@
     return Children.back();
   }
 
+  DIE &addChildFront(DIE *Child) {
+    assert(!Child->getParent() && "Child should be orphaned");
+    Child->Owner = this;
+    Children.push_front(*Child);
+    return Children.front();
+  }
+
   /// Find a value in the DIE with the attribute given.
   ///
   /// Returns a default-constructed DIEValue (where \a DIEValue::getType()
diff --git a/linux-x64/clang/include/llvm/CodeGen/DIEValue.def b/linux-x64/clang/include/llvm/CodeGen/DIEValue.def
index c6c4c9a..92afeb3 100644
--- a/linux-x64/clang/include/llvm/CodeGen/DIEValue.def
+++ b/linux-x64/clang/include/llvm/CodeGen/DIEValue.def
@@ -34,6 +34,7 @@
 HANDLE_DIEVALUE_SMALL(String)
 HANDLE_DIEVALUE_SMALL(Expr)
 HANDLE_DIEVALUE_SMALL(Label)
+HANDLE_DIEVALUE_LARGE(BaseTypeRef)
 HANDLE_DIEVALUE_LARGE(Delta)
 HANDLE_DIEVALUE_SMALL(Entry)
 HANDLE_DIEVALUE_LARGE(Block)
diff --git a/linux-x64/clang/include/llvm/CodeGen/DbgEntityHistoryCalculator.h b/linux-x64/clang/include/llvm/CodeGen/DbgEntityHistoryCalculator.h
index b5374d8..7eec75b 100644
--- a/linux-x64/clang/include/llvm/CodeGen/DbgEntityHistoryCalculator.h
+++ b/linux-x64/clang/include/llvm/CodeGen/DbgEntityHistoryCalculator.h
@@ -10,6 +10,7 @@
 #define LLVM_CODEGEN_DBGVALUEHISTORYCALCULATOR_H
 
 #include "llvm/ADT/MapVector.h"
+#include "llvm/ADT/PointerIntPair.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/IR/DebugInfoMetadata.h"
 #include <utility>
@@ -21,35 +22,76 @@
 class MachineInstr;
 class TargetRegisterInfo;
 
-// For each user variable, keep a list of instruction ranges where this variable
-// is accessible. The variables are listed in order of appearance.
+/// For each user variable, keep a list of instruction ranges where this
+/// variable is accessible. The variables are listed in order of appearance.
 class DbgValueHistoryMap {
-  // Each instruction range starts with a DBG_VALUE instruction, specifying the
-  // location of a variable, which is assumed to be valid until the end of the
-  // range. If end is not specified, location is valid until the start
-  // instruction of the next instruction range, or until the end of the
-  // function.
 public:
-  using InstrRange = std::pair<const MachineInstr *, const MachineInstr *>;
-  using InstrRanges = SmallVector<InstrRange, 4>;
+  /// Index in the entry vector.
+  typedef size_t EntryIndex;
+
+  /// Special value to indicate that an entry is valid until the end of the
+  /// function.
+  static const EntryIndex NoEntry = std::numeric_limits<EntryIndex>::max();
+
+  /// Specifies a change in a variable's debug value history.
+  ///
+  /// There exist two types of entries:
+  ///
+  /// * Debug value entry:
+  ///
+  ///   A new debug value becomes live. If the entry's \p EndIndex is \p NoEntry,
+  ///   the value is valid until the end of the function. For other values, the
+  ///   index points to the entry in the entry vector that ends this debug
+  ///   value. The ending entry can either be an overlapping debug value, or
+  ///   an instruction that clobbers the value.
+  ///
+  /// * Clobbering entry:
+  ///
+  ///   This entry's instruction clobbers one or more preceding
+  ///   register-described debug values that have their end index
+  ///   set to this entry's position in the entry vector.
+  class Entry {
+  public:
+    enum EntryKind { DbgValue, Clobber };
+
+    Entry(const MachineInstr *Instr, EntryKind Kind)
+        : Instr(Instr, Kind), EndIndex(NoEntry) {}
+
+    const MachineInstr *getInstr() const { return Instr.getPointer(); }
+    EntryIndex getEndIndex() const { return EndIndex; }
+    EntryKind getEntryKind() const { return Instr.getInt(); }
+
+    bool isClobber() const { return getEntryKind() == Clobber; }
+    bool isDbgValue() const { return getEntryKind() == DbgValue; }
+    bool isClosed() const { return EndIndex != NoEntry; }
+
+    void endEntry(EntryIndex EndIndex);
+
+  private:
+    PointerIntPair<const MachineInstr *, 1, EntryKind> Instr;
+    EntryIndex EndIndex;
+  };
+  using Entries = SmallVector<Entry, 4>;
   using InlinedEntity = std::pair<const DINode *, const DILocation *>;
-  using InstrRangesMap = MapVector<InlinedEntity, InstrRanges>;
+  using EntriesMap = MapVector<InlinedEntity, Entries>;
 
 private:
-  InstrRangesMap VarInstrRanges;
+  EntriesMap VarEntries;
 
 public:
-  void startInstrRange(InlinedEntity Var, const MachineInstr &MI);
-  void endInstrRange(InlinedEntity Var, const MachineInstr &MI);
+  bool startDbgValue(InlinedEntity Var, const MachineInstr &MI,
+                     EntryIndex &NewIndex);
+  EntryIndex startClobber(InlinedEntity Var, const MachineInstr &MI);
 
-  // Returns register currently describing @Var. If @Var is currently
-  // unaccessible or is not described by a register, returns 0.
-  unsigned getRegisterForVar(InlinedEntity Var) const;
+  Entry &getEntry(InlinedEntity Var, EntryIndex Index) {
+    auto &Entries = VarEntries[Var];
+    return Entries[Index];
+  }
 
-  bool empty() const { return VarInstrRanges.empty(); }
-  void clear() { VarInstrRanges.clear(); }
-  InstrRangesMap::const_iterator begin() const { return VarInstrRanges.begin(); }
-  InstrRangesMap::const_iterator end() const { return VarInstrRanges.end(); }
+  bool empty() const { return VarEntries.empty(); }
+  void clear() { VarEntries.clear(); }
+  EntriesMap::const_iterator begin() const { return VarEntries.begin(); }
+  EntriesMap::const_iterator end() const { return VarEntries.end(); }
 
 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
   LLVM_DUMP_METHOD void dump() const;
diff --git a/linux-x64/clang/include/llvm/CodeGen/DebugHandlerBase.h b/linux-x64/clang/include/llvm/CodeGen/DebugHandlerBase.h
index 3771d48..4008d59 100644
--- a/linux-x64/clang/include/llvm/CodeGen/DebugHandlerBase.h
+++ b/linux-x64/clang/include/llvm/CodeGen/DebugHandlerBase.h
@@ -129,7 +129,7 @@
   const MCExpr *getFunctionLocalOffsetAfterInsn(const MachineInstr *MI);
 
   /// If this type is derived from a base type then return base type size.
-  static uint64_t getBaseTypeSize(const DITypeRef TyRef);
+  static uint64_t getBaseTypeSize(const DIType *Ty);
 };
 
 }
diff --git a/linux-x64/clang/include/llvm/CodeGen/FastISel.h b/linux-x64/clang/include/llvm/CodeGen/FastISel.h
index 394324b..f09b59d 100644
--- a/linux-x64/clang/include/llvm/CodeGen/FastISel.h
+++ b/linux-x64/clang/include/llvm/CodeGen/FastISel.h
@@ -527,7 +527,7 @@
   /// Select and emit code for a binary operator instruction, which has
   /// an opcode which directly corresponds to the given ISD opcode.
   bool selectBinaryOp(const User *I, unsigned ISDOpcode);
-  bool selectFNeg(const User *I);
+  bool selectFNeg(const User *I, const Value *In);
   bool selectGetElementPtr(const User *I);
   bool selectStackmap(const CallInst *I);
   bool selectPatchpoint(const CallInst *I);
diff --git a/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h b/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h
index f5f37d1..fb60191 100644
--- a/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h
@@ -13,7 +13,6 @@
 
 #ifndef LLVM_CODEGEN_FUNCTIONLOWERINGINFO_H
 #define LLVM_CODEGEN_FUNCTIONLOWERINGINFO_H
-
 #include "llvm/ADT/APInt.h"
 #include "llvm/ADT/BitVector.h"
 #include "llvm/ADT/DenseMap.h"
@@ -21,6 +20,7 @@
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/Analysis/LegacyDivergenceAnalysis.h"
 #include "llvm/CodeGen/ISDOpcodes.h"
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/CodeGen/TargetRegisterInfo.h"
@@ -57,6 +57,7 @@
   const TargetLowering *TLI;
   MachineRegisterInfo *RegInfo;
   BranchProbabilityInfo *BPI;
+  const LegacyDivergenceAnalysis *DA;
   /// CanLowerReturn - true iff the function's return value can be lowered to
   /// registers.
   bool CanLowerReturn;
@@ -71,48 +72,6 @@
   /// MBBMap - A mapping from LLVM basic blocks to their machine code entry.
   DenseMap<const BasicBlock*, MachineBasicBlock *> MBBMap;
 
-  /// A map from swifterror value in a basic block to the virtual register it is
-  /// currently represented by.
-  DenseMap<std::pair<const MachineBasicBlock *, const Value *>, unsigned>
-      SwiftErrorVRegDefMap;
-
-  /// A list of upward exposed vreg uses that need to be satisfied by either a
-  /// copy def or a phi node at the beginning of the basic block representing
-  /// the predecessor(s) swifterror value.
-  DenseMap<std::pair<const MachineBasicBlock *, const Value *>, unsigned>
-      SwiftErrorVRegUpwardsUse;
-
-  /// A map from instructions that define/use a swifterror value to the virtual
-  /// register that represents that def/use.
-  llvm::DenseMap<PointerIntPair<const Instruction *, 1, bool>, unsigned>
-      SwiftErrorVRegDefUses;
-
-  /// The swifterror argument of the current function.
-  const Value *SwiftErrorArg;
-
-  using SwiftErrorValues = SmallVector<const Value*, 1>;
-  /// A function can only have a single swifterror argument. And if it does
-  /// have a swifterror argument, it must be the first entry in
-  /// SwiftErrorVals.
-  SwiftErrorValues SwiftErrorVals;
-
-  /// Get or create the swifterror value virtual register in
-  /// SwiftErrorVRegDefMap for this basic block.
-  unsigned getOrCreateSwiftErrorVReg(const MachineBasicBlock *,
-                                     const Value *);
-
-  /// Set the swifterror virtual register in the SwiftErrorVRegDefMap for this
-  /// basic block.
-  void setCurrentSwiftErrorVReg(const MachineBasicBlock *MBB, const Value *,
-                                unsigned);
-
-  /// Get or create the swifterror value virtual register for a def of a
-  /// swifterror by an instruction.
-  std::pair<unsigned, bool> getOrCreateSwiftErrorVRegDefAt(const Instruction *);
-  std::pair<unsigned, bool>
-  getOrCreateSwiftErrorVRegUseAt(const Instruction *, const MachineBasicBlock *,
-                                 const Value *);
-
   /// ValueMap - Since we emit code for the function a basic block at a time,
   /// we must remember which virtual registers hold the values for
   /// cross-basic-block values.
@@ -240,9 +199,11 @@
     return ValueMap.count(V);
   }
 
-  unsigned CreateReg(MVT VT);
+  unsigned CreateReg(MVT VT, bool isDivergent = false);
 
-  unsigned CreateRegs(Type *Ty);
+  unsigned CreateRegs(const Value *V);
+
+  unsigned CreateRegs(Type *Ty, bool isDivergent = false);
 
   unsigned InitializeRegForValue(const Value *V) {
     // Tokens never live in vregs.
@@ -251,7 +212,7 @@
     unsigned &R = ValueMap[V];
     assert(R == 0 && "Already initialized this value register!");
     assert(VirtReg2Value.empty());
-    return R = CreateRegs(V->getType());
+    return R = CreateRegs(V);
   }
 
   /// GetLiveOutRegInfo - Gets LiveOutInfo for a register, returning NULL if the
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CSEInfo.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CSEInfo.h
index 97f3cd5..5a44e67 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CSEInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CSEInfo.h
@@ -13,6 +13,7 @@
 #define LLVM_CODEGEN_GLOBALISEL_CSEINFO_H
 
 #include "llvm/ADT/FoldingSet.h"
+#include "llvm/CodeGen/CSEConfigBase.h"
 #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h"
 #include "llvm/CodeGen/GlobalISel/GISelWorkList.h"
 #include "llvm/CodeGen/GlobalISel/Utils.h"
@@ -36,25 +37,27 @@
   void Profile(FoldingSetNodeID &ID);
 };
 
-// Class representing some configuration that can be done during CSE analysis.
-// Currently it only supports shouldCSE method that each pass can set.
-class CSEConfig {
+// A CSE config for fully optimized builds.
+class CSEConfigFull : public CSEConfigBase {
 public:
-  virtual ~CSEConfig() = default;
-  // Hook for defining which Generic instructions should be CSEd.
-  // GISelCSEInfo currently only calls this hook when dealing with generic
-  // opcodes.
-  virtual bool shouldCSEOpc(unsigned Opc);
+  virtual ~CSEConfigFull() = default;
+  virtual bool shouldCSEOpc(unsigned Opc) override;
 };
 
-// TODO: Find a better place for this.
 // Commonly used for O0 config.
-class CSEConfigConstantOnly : public CSEConfig {
+class CSEConfigConstantOnly : public CSEConfigBase {
 public:
   virtual ~CSEConfigConstantOnly() = default;
   virtual bool shouldCSEOpc(unsigned Opc) override;
 };
 
+// Returns the standard expected CSEConfig for the given optimization level.
+// We have this logic here so targets can make use of it from their derived
+// TargetPassConfig, but can't put this logic into TargetPassConfig directly
+// because the CodeGen library can't depend on GlobalISel.
+std::unique_ptr<CSEConfigBase>
+getStandardCSEConfigForOpt(CodeGenOpt::Level Level);
+
 /// The CSE Analysis object.
 /// This installs itself as a delegate to the MachineFunction to track
 /// new instructions as well as deletions. It however will not be able to
@@ -73,7 +76,7 @@
   FoldingSet<UniqueMachineInstr> CSEMap;
   MachineRegisterInfo *MRI = nullptr;
   MachineFunction *MF = nullptr;
-  std::unique_ptr<CSEConfig> CSEOpt;
+  std::unique_ptr<CSEConfigBase> CSEOpt;
   /// Keep a cache of UniqueInstrs for each MachineInstr. In GISel,
   /// often instructions are mutated (while their ID has completely changed).
   /// Whenever mutation happens, invalidate the UniqueMachineInstr for the
@@ -138,7 +141,9 @@
 
   void releaseMemory();
 
-  void setCSEConfig(std::unique_ptr<CSEConfig> Opt) { CSEOpt = std::move(Opt); }
+  void setCSEConfig(std::unique_ptr<CSEConfigBase> Opt) {
+    CSEOpt = std::move(Opt);
+  }
 
   bool shouldCSE(unsigned Opc) const;
 
@@ -198,11 +203,12 @@
   bool AlreadyComputed = false;
 
 public:
-  /// Takes a CSEConfig object that defines what opcodes get CSEd.
+  /// Takes a CSEConfigBase object that defines what opcodes get CSEd.
   /// If CSEConfig is already set, and the CSE Analysis has been preserved,
   /// it will not use the new CSEOpt(use Recompute to force using the new
   /// CSEOpt).
-  GISelCSEInfo &get(std::unique_ptr<CSEConfig> CSEOpt, bool ReCompute = false);
+  GISelCSEInfo &get(std::unique_ptr<CSEConfigBase> CSEOpt,
+                    bool ReCompute = false);
   void setMF(MachineFunction &MFunc) { MF = &MFunc; }
   void setComputed(bool Computed) { AlreadyComputed = Computed; }
   void releaseMemory() { Info.releaseMemory(); }
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h
index 9b72b70..d8d15bd 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h
@@ -15,6 +15,7 @@
 #define LLVM_CODEGEN_GLOBALISEL_CALLLOWERING_H
 
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/SmallVector.h"
 #include "llvm/CodeGen/CallingConvLower.h"
 #include "llvm/CodeGen/TargetCallingConv.h"
 #include "llvm/IR/CallSite.h"
@@ -42,14 +43,19 @@
   virtual void anchor();
 public:
   struct ArgInfo {
-    unsigned Reg;
+    SmallVector<Register, 4> Regs;
     Type *Ty;
     ISD::ArgFlagsTy Flags;
     bool IsFixed;
 
-    ArgInfo(unsigned Reg, Type *Ty, ISD::ArgFlagsTy Flags = ISD::ArgFlagsTy{},
-            bool IsFixed = true)
-        : Reg(Reg), Ty(Ty), Flags(Flags), IsFixed(IsFixed) {}
+    ArgInfo(ArrayRef<Register> Regs, Type *Ty,
+            ISD::ArgFlagsTy Flags = ISD::ArgFlagsTy{}, bool IsFixed = true)
+        : Regs(Regs.begin(), Regs.end()), Ty(Ty), Flags(Flags),
+          IsFixed(IsFixed) {
+      // FIXME: We should have just one way of saying "no register".
+      assert((Ty->isVoidTy() == (Regs.empty() || Regs[0] == 0)) &&
+             "only void types should have no register");
+    }
   };
 
   /// Argument handling is mostly uniform between the four places that
@@ -65,24 +71,28 @@
 
     virtual ~ValueHandler() = default;
 
+    /// Returns true if the handler is dealing with formal arguments,
+    /// not with return values etc.
+    virtual bool isArgumentHandler() const { return false; }
+
     /// Materialize a VReg containing the address of the specified
     /// stack-based object. This is either based on a FrameIndex or
     /// direct SP manipulation, depending on the context. \p MPO
     /// should be initialized to an appropriate description of the
     /// address created.
-    virtual unsigned getStackAddress(uint64_t Size, int64_t Offset,
+    virtual Register getStackAddress(uint64_t Size, int64_t Offset,
                                      MachinePointerInfo &MPO) = 0;
 
     /// The specified value has been assigned to a physical register,
     /// handle the appropriate COPY (either to or from) and mark any
     /// relevant uses/defines as needed.
-    virtual void assignValueToReg(unsigned ValVReg, unsigned PhysReg,
+    virtual void assignValueToReg(Register ValVReg, Register PhysReg,
                                   CCValAssign &VA) = 0;
 
     /// The specified value has been assigned to a stack
     /// location. Load or store it there, with appropriate extension
     /// if necessary.
-    virtual void assignValueToAddress(unsigned ValVReg, unsigned Addr,
+    virtual void assignValueToAddress(Register ValVReg, Register Addr,
                                       uint64_t Size, MachinePointerInfo &MPO,
                                       CCValAssign &VA) = 0;
 
@@ -97,7 +107,7 @@
       llvm_unreachable("Custom values not supported");
     }
 
-    unsigned extendRegister(unsigned ValReg, CCValAssign &VA);
+    Register extendRegister(Register ValReg, CCValAssign &VA);
 
     virtual bool assignArg(unsigned ValNo, MVT ValVT, MVT LocVT,
                            CCValAssign::LocInfo LocInfo, const ArgInfo &Info,
@@ -129,6 +139,24 @@
   void setArgFlags(ArgInfo &Arg, unsigned OpIdx, const DataLayout &DL,
                    const FuncInfoTy &FuncInfo) const;
 
+  /// Generate instructions for packing \p SrcRegs into one big register
+  /// corresponding to the aggregate type \p PackedTy.
+  ///
+  /// \param SrcRegs should contain one virtual register for each base type in
+  ///                \p PackedTy, as returned by computeValueLLTs.
+  ///
+  /// \return The packed register.
+  Register packRegs(ArrayRef<Register> SrcRegs, Type *PackedTy,
+                    MachineIRBuilder &MIRBuilder) const;
+
+  /// Generate instructions for unpacking \p SrcReg into the \p DstRegs
+  /// corresponding to the aggregate type \p PackedTy.
+  ///
+  /// \param DstRegs should contain one virtual register for each base type in
+  ///        \p PackedTy, as returned by computeValueLLTs.
+  void unpackRegs(ArrayRef<Register> DstRegs, Register SrcReg, Type *PackedTy,
+                  MachineIRBuilder &MIRBuilder) const;
+
   /// Invoke Handler::assignArg on each of the given \p Args and then use
   /// \p Callback to move them to the assigned locations.
   ///
@@ -140,28 +168,51 @@
   CallLowering(const TargetLowering *TLI) : TLI(TLI) {}
   virtual ~CallLowering() = default;
 
+  /// \return true if the target is capable of handling swifterror values that
+  /// have been promoted to a specified register. The extended versions of
+  /// lowerReturn and lowerCall should be implemented.
+  virtual bool supportSwiftError() const {
+    return false;
+  }
+
   /// This hook must be implemented to lower outgoing return values, described
   /// by \p Val, into the specified virtual registers \p VRegs.
   /// This hook is used by GlobalISel.
   ///
+  /// \p SwiftErrorVReg is non-zero if the function has a swifterror parameter
+  /// that needs to be implicitly returned.
+  ///
   /// \return True if the lowering succeeds, false otherwise.
   virtual bool lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val,
-                           ArrayRef<unsigned> VRegs) const {
+                           ArrayRef<Register> VRegs,
+                           Register SwiftErrorVReg) const {
+    if (!supportSwiftError()) {
+      assert(SwiftErrorVReg == 0 && "attempt to use unsupported swifterror");
+      return lowerReturn(MIRBuilder, Val, VRegs);
+    }
+    return false;
+  }
+
+  /// This hook behaves as the extended lowerReturn function, but for targets
+  /// that do not support swifterror value promotion.
+  virtual bool lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val,
+                           ArrayRef<Register> VRegs) const {
     return false;
   }
 
   /// This hook must be implemented to lower the incoming (formal)
-  /// arguments, described by \p Args, for GlobalISel. Each argument
-  /// must end up in the related virtual register described by VRegs.
-  /// In other words, the first argument should end up in VRegs[0],
-  /// the second in VRegs[1], and so on.
+  /// arguments, described by \p VRegs, for GlobalISel. Each argument
+  /// must end up in the related virtual registers described by \p VRegs.
+  /// In other words, the first argument should end up in \c VRegs[0],
+  /// the second in \c VRegs[1], and so on. For each argument, there will be one
+  /// register for each non-aggregate type, as returned by \c computeValueLLTs.
   /// \p MIRBuilder is set to the proper insertion for the argument
   /// lowering.
   ///
   /// \return True if the lowering succeeded, false otherwise.
   virtual bool lowerFormalArguments(MachineIRBuilder &MIRBuilder,
                                     const Function &F,
-                                    ArrayRef<unsigned> VRegs) const {
+                                    ArrayRef<ArrayRef<Register>> VRegs) const {
     return false;
   }
 
@@ -173,20 +224,31 @@
   /// \p Callee is the destination of the call. It should be either a register,
   /// globaladdress, or externalsymbol.
   ///
-  /// \p ResTy is the type returned by the function
+  /// \p OrigRet is a descriptor for the return type of the function.
   ///
-  /// \p ResReg is the generic virtual register that the returned
-  /// value should be lowered into.
+  /// \p OrigArgs is a list of descriptors of the arguments passed to the
+  /// function.
   ///
-  /// \p ArgTys is a list of the types each member of \p ArgRegs has; used by
-  /// the target to decide which register/stack slot should be allocated.
-  ///
-  /// \p ArgRegs is a list of virtual registers containing each argument that
-  /// needs to be passed.
+  /// \p SwiftErrorVReg is non-zero if the call has a swifterror inout
+  /// parameter, and contains the vreg that the swifterror should be copied into
+  /// after the call.
   ///
   /// \return true if the lowering succeeded, false otherwise.
   virtual bool lowerCall(MachineIRBuilder &MIRBuilder, CallingConv::ID CallConv,
                          const MachineOperand &Callee, const ArgInfo &OrigRet,
+                         ArrayRef<ArgInfo> OrigArgs,
+                         Register SwiftErrorVReg) const {
+    if (!supportSwiftError()) {
+      assert(SwiftErrorVReg == 0 && "trying to use unsupported swifterror");
+      return lowerCall(MIRBuilder, CallConv, Callee, OrigRet, OrigArgs);
+    }
+    return false;
+  }
+
+  /// This hook behaves as the extended lowerCall function, but for targets that
+  /// do not support swifterror value promotion.
+  virtual bool lowerCall(MachineIRBuilder &MIRBuilder, CallingConv::ID CallConv,
+                         const MachineOperand &Callee, const ArgInfo &OrigRet,
                          ArrayRef<ArgInfo> OrigArgs) const {
     return false;
   }
@@ -196,11 +258,18 @@
   ///
   /// \p CI is the call/invoke instruction.
   ///
-  /// \p ResReg is a register where the call's return value should be stored (or
-  /// 0 if there is no return value).
+  /// \p ResRegs are the registers where the call's return value should be
+  /// stored (or 0 if there is no return value). There will be one register for
+  /// each non-aggregate type, as returned by \c computeValueLLTs.
   ///
-  /// \p ArgRegs is a list of virtual registers containing each argument that
-  /// needs to be passed.
+  /// \p ArgRegs is a list of lists of virtual registers containing each
+  /// argument that needs to be passed (argument \c i should be placed in \c
+  /// ArgRegs[i]). For each argument, there will be one register for each
+  /// non-aggregate type, as returned by \c computeValueLLTs.
+  ///
+  /// \p SwiftErrorVReg is non-zero if the call has a swifterror inout
+  /// parameter, and contains the vreg that the swifterror should be copied into
+  /// after the call.
   ///
   /// \p GetCalleeReg is a callback to materialize a register for the callee if
   /// the target determines it cannot jump to the destination based purely on \p
@@ -209,7 +278,8 @@
   ///
   /// \return true if the lowering succeeded, false otherwise.
   bool lowerCall(MachineIRBuilder &MIRBuilder, ImmutableCallSite CS,
-                 unsigned ResReg, ArrayRef<unsigned> ArgRegs,
+                 ArrayRef<Register> ResRegs,
+                 ArrayRef<ArrayRef<Register>> ArgRegs, Register SwiftErrorVReg,
                  std::function<unsigned()> GetCalleeReg) const;
 };
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CombinerHelper.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CombinerHelper.h
index ee30ba9..0c50c9c 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CombinerHelper.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CombinerHelper.h
@@ -17,6 +17,9 @@
 #ifndef LLVM_CODEGEN_GLOBALISEL_COMBINER_HELPER_H
 #define LLVM_CODEGEN_GLOBALISEL_COMBINER_HELPER_H
 
+#include "llvm/CodeGen/LowLevelType.h"
+#include "llvm/CodeGen/Register.h"
+
 namespace llvm {
 
 class GISelChangeObserver;
@@ -25,6 +28,12 @@
 class MachineInstr;
 class MachineOperand;
 
+struct PreferredTuple {
+  LLT Ty;                // The result type of the extend.
+  unsigned ExtendOpcode; // G_ANYEXT/G_SEXT/G_ZEXT
+  MachineInstr *MI;
+};
+
 class CombinerHelper {
   MachineIRBuilder &Builder;
   MachineRegisterInfo &MRI;
@@ -34,20 +43,27 @@
   CombinerHelper(GISelChangeObserver &Observer, MachineIRBuilder &B);
 
   /// MachineRegisterInfo::replaceRegWith() and inform the observer of the changes
-  void replaceRegWith(MachineRegisterInfo &MRI, unsigned FromReg, unsigned ToReg) const;
+  void replaceRegWith(MachineRegisterInfo &MRI, Register FromReg, Register ToReg) const;
 
   /// Replace a single register operand with a new register and inform the
   /// observer of the changes.
   void replaceRegOpWith(MachineRegisterInfo &MRI, MachineOperand &FromRegOp,
-                        unsigned ToReg) const;
+                        Register ToReg) const;
 
   /// If \p MI is COPY, try to combine it.
   /// Returns true if MI changed.
   bool tryCombineCopy(MachineInstr &MI);
+  bool matchCombineCopy(MachineInstr &MI);
+  void applyCombineCopy(MachineInstr &MI);
 
   /// If \p MI is extend that consumes the result of a load, try to combine it.
   /// Returns true if MI changed.
   bool tryCombineExtendingLoads(MachineInstr &MI);
+  bool matchCombineExtendingLoads(MachineInstr &MI, PreferredTuple &MatchInfo);
+  void applyCombineExtendingLoads(MachineInstr &MI, PreferredTuple &MatchInfo);
+
+  bool matchCombineBr(MachineInstr &MI);
+  bool tryCombineBr(MachineInstr &MI);
 
   /// Try to transform \p MI by using all of the above
   /// combine functions. Returns true if changed.
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/GISelWorkList.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/GISelWorkList.h
index 626a666..b0bb519 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/GISelWorkList.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/GISelWorkList.h
@@ -32,6 +32,10 @@
   SmallVector<MachineInstr *, N> Worklist;
   DenseMap<MachineInstr *, unsigned> WorklistMap;
 
+#ifndef NDEBUG
+  bool Finalized = true;
+#endif
+
 public:
   GISelWorkList() : WorklistMap(N) {}
 
@@ -39,16 +43,50 @@
 
   unsigned size() const { return WorklistMap.size(); }
 
+  // Since we don't know ahead of time how many instructions we're going to add
+  // to the worklist, and migrating densemap's elements is quite expensive
+  // everytime we resize, only insert to the smallvector (typically during the
+  // initial phase of populating lists). Before the worklist can be used,
+  // finalize should be called. Also assert with NDEBUG if list is ever used
+  // without finalizing. Note that unlike insert, we won't check for duplicates
+  // - so the ideal place to use this is during the initial prepopulating phase
+  // of most passes.
+  void deferred_insert(MachineInstr *I) {
+    Worklist.push_back(I);
+#ifndef NDEBUG
+    Finalized = false;
+#endif
+  }
+
+  // This should only be called when using deferred_insert.
+  // This asserts that the WorklistMap is empty, and then
+  // inserts all the elements in the Worklist into the map.
+  // It also asserts if there are any duplicate elements found.
+  void finalize() {
+    assert(WorklistMap.empty() && "Expecting empty worklistmap");
+    if (Worklist.size() > N)
+      WorklistMap.reserve(Worklist.size());
+    for (unsigned i = 0; i < Worklist.size(); ++i)
+      if (!WorklistMap.try_emplace(Worklist[i], i).second)
+        llvm_unreachable("Duplicate elements in the list");
+#ifndef NDEBUG
+    Finalized = true;
+#endif
+  }
+
   /// Add the specified instruction to the worklist if it isn't already in it.
   void insert(MachineInstr *I) {
+    assert(Finalized && "GISelWorkList used without finalizing");
     if (WorklistMap.try_emplace(I, Worklist.size()).second)
       Worklist.push_back(I);
   }
 
   /// Remove I from the worklist if it exists.
   void remove(const MachineInstr *I) {
+    assert((Finalized || WorklistMap.empty()) && "Neither finalized nor empty");
     auto It = WorklistMap.find(I);
-    if (It == WorklistMap.end()) return; // Not in worklist.
+    if (It == WorklistMap.end())
+      return; // Not in worklist.
 
     // Don't bother moving everything down, just null out the slot.
     Worklist[It->second] = nullptr;
@@ -62,6 +100,7 @@
   }
 
   MachineInstr *pop_back_val() {
+    assert(Finalized && "GISelWorkList used without finalizing");
     MachineInstr *I;
     do {
       I = Worklist.pop_back_val();
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h
index c75d823..8654ba8 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h
@@ -22,7 +22,9 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/CodeGen/GlobalISel/CSEMIRBuilder.h"
 #include "llvm/CodeGen/GlobalISel/Types.h"
+#include "llvm/CodeGen/SwiftErrorValueTracking.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/SwitchLoweringUtils.h"
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/Support/Allocator.h"
 #include <memory>
@@ -36,6 +38,7 @@
 class CallLowering;
 class Constant;
 class DataLayout;
+class FunctionLoweringInfo;
 class Instruction;
 class MachineBasicBlock;
 class MachineFunction;
@@ -68,7 +71,7 @@
   public:
     ValueToVRegInfo() = default;
 
-    using VRegListT = SmallVector<unsigned, 1>;
+    using VRegListT = SmallVector<Register, 1>;
     using OffsetListT = SmallVector<uint64_t, 1>;
 
     using const_vreg_iterator =
@@ -163,6 +166,8 @@
   /// this function.
   DenseMap<const AllocaInst *, int> FrameIndices;
 
+  SwiftErrorValueTracking SwiftError;
+
   /// \name Methods for translating form LLVM IR to MachineInstr.
   /// \see ::translate for general information on the translate methods.
   /// @{
@@ -195,7 +200,7 @@
   /// the function.
   ///
   /// \return true if the materialization succeeded.
-  bool translate(const Constant &C, unsigned Reg);
+  bool translate(const Constant &C, Register Reg);
 
   /// Translate an LLVM bitcast into generic IR. Either a COPY or a G_BITCAST is
   /// emitted.
@@ -211,7 +216,7 @@
   bool translateMemfunc(const CallInst &CI, MachineIRBuilder &MIRBuilder,
                         unsigned ID);
 
-  void getStackGuard(unsigned DstReg, MachineIRBuilder &MIRBuilder);
+  void getStackGuard(Register DstReg, MachineIRBuilder &MIRBuilder);
 
   bool translateOverflowIntrinsic(const CallInst &CI, unsigned Op,
                                   MachineIRBuilder &MIRBuilder);
@@ -232,14 +237,6 @@
 
   bool translateInlineAsm(const CallInst &CI, MachineIRBuilder &MIRBuilder);
 
-  // FIXME: temporary function to expose previous interface to call lowering
-  // until it is refactored.
-  /// Combines all component registers of \p V into a single scalar with size
-  /// "max(Offsets) + last size".
-  unsigned packRegs(const Value &V, MachineIRBuilder &MIRBuilder);
-
-  void unpackRegs(const Value &V, unsigned Src, MachineIRBuilder &MIRBuilder);
-
   /// Returns true if the value should be split into multiple LLTs.
   /// If \p Offsets is given then the split type's offsets will be stored in it.
   /// If \p Offsets is not empty it will be cleared first.
@@ -290,7 +287,42 @@
   /// \pre \p U is a branch instruction.
   bool translateBr(const User &U, MachineIRBuilder &MIRBuilder);
 
+  // Begin switch lowering functions.
+  bool emitJumpTableHeader(SwitchCG::JumpTable &JT,
+                           SwitchCG::JumpTableHeader &JTH,
+                           MachineBasicBlock *HeaderBB);
+  void emitJumpTable(SwitchCG::JumpTable &JT, MachineBasicBlock *MBB);
+
+  void emitSwitchCase(SwitchCG::CaseBlock &CB, MachineBasicBlock *SwitchBB,
+                      MachineIRBuilder &MIB);
+
+  bool lowerJumpTableWorkItem(SwitchCG::SwitchWorkListItem W,
+                              MachineBasicBlock *SwitchMBB,
+                              MachineBasicBlock *CurMBB,
+                              MachineBasicBlock *DefaultMBB,
+                              MachineIRBuilder &MIB,
+                              MachineFunction::iterator BBI,
+                              BranchProbability UnhandledProbs,
+                              SwitchCG::CaseClusterIt I,
+                              MachineBasicBlock *Fallthrough,
+                              bool FallthroughUnreachable);
+
+  bool lowerSwitchRangeWorkItem(SwitchCG::CaseClusterIt I,
+                                Value *Cond,
+                                MachineBasicBlock *Fallthrough,
+                                bool FallthroughUnreachable,
+                                BranchProbability UnhandledProbs,
+                                MachineBasicBlock *CurMBB,
+                                MachineIRBuilder &MIB,
+                                MachineBasicBlock *SwitchMBB);
+
+  bool lowerSwitchWorkItem(SwitchCG::SwitchWorkListItem W, Value *Cond,
+                           MachineBasicBlock *SwitchMBB,
+                           MachineBasicBlock *DefaultMBB,
+                           MachineIRBuilder &MIB);
+
   bool translateSwitch(const User &U, MachineIRBuilder &MIRBuilder);
+  // End switch lowering section.
 
   bool translateIndirectBr(const User &U, MachineIRBuilder &MIRBuilder);
 
@@ -416,6 +448,7 @@
 
   bool translateAtomicCmpXchg(const User &U, MachineIRBuilder &MIRBuilder);
   bool translateAtomicRMW(const User &U, MachineIRBuilder &MIRBuilder);
+  bool translateFence(const User &U, MachineIRBuilder &MIRBuilder);
 
   // Stubs to keep the compiler happy while we implement the rest of the
   // translation.
@@ -431,9 +464,6 @@
   bool translateCatchSwitch(const User &U, MachineIRBuilder &MIRBuilder) {
     return false;
   }
-  bool translateFence(const User &U, MachineIRBuilder &MIRBuilder) {
-    return false;
-  }
   bool translateAddrSpaceCast(const User &U, MachineIRBuilder &MIRBuilder) {
     return translateCast(TargetOpcode::G_ADDRSPACE_CAST, U, MIRBuilder);
   }
@@ -478,19 +508,50 @@
   /// Current optimization remark emitter. Used to report failures.
   std::unique_ptr<OptimizationRemarkEmitter> ORE;
 
+  FunctionLoweringInfo FuncInfo;
+
+  // True when either the Target Machine specifies no optimizations or the
+  // function has the optnone attribute.
+  bool EnableOpts = false;
+
+  /// Switch analysis and optimization.
+  class GISelSwitchLowering : public SwitchCG::SwitchLowering {
+  public:
+    GISelSwitchLowering(IRTranslator *irt, FunctionLoweringInfo &funcinfo)
+        : SwitchLowering(funcinfo), IRT(irt) {
+      assert(irt && "irt is null!");
+    }
+
+    virtual void addSuccessorWithProb(
+        MachineBasicBlock *Src, MachineBasicBlock *Dst,
+        BranchProbability Prob = BranchProbability::getUnknown()) override {
+      IRT->addSuccessorWithProb(Src, Dst, Prob);
+    }
+
+    virtual ~GISelSwitchLowering() = default;
+
+  private:
+    IRTranslator *IRT;
+  };
+
+  std::unique_ptr<GISelSwitchLowering> SL;
+
   // * Insert all the code needed to materialize the constants
   // at the proper place. E.g., Entry block or dominator block
   // of each constant depending on how fancy we want to be.
   // * Clear the different maps.
   void finalizeFunction();
 
+  // Handle emitting jump tables for each basic block.
+  void finalizeBasicBlock();
+
   /// Get the VRegs that represent \p Val.
   /// Non-aggregate types have just one corresponding VReg and the list can be
   /// used as a single "unsigned". Aggregates get flattened. If such VRegs do
   /// not exist, they are created.
-  ArrayRef<unsigned> getOrCreateVRegs(const Value &Val);
+  ArrayRef<Register> getOrCreateVRegs(const Value &Val);
 
-  unsigned getOrCreateVReg(const Value &Val) {
+  Register getOrCreateVReg(const Value &Val) {
     auto Regs = getOrCreateVRegs(Val);
     if (Regs.empty())
       return 0;
@@ -534,6 +595,14 @@
     return SmallVector<MachineBasicBlock *, 4>(1, &getMBB(*Edge.first));
   }
 
+  /// Return branch probability calculated by BranchProbabilityInfo for IR
+  /// blocks.
+  BranchProbability getEdgeProbability(const MachineBasicBlock *Src,
+                                       const MachineBasicBlock *Dst) const;
+
+  void addSuccessorWithProb(MachineBasicBlock *Src, MachineBasicBlock *Dst,
+                            BranchProbability Prob);
+
 public:
   // Ctor, nothing fancy.
   IRTranslator();
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
index 87ef2f8..e010180 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
@@ -437,15 +437,15 @@
 
       unsigned Size = MRI.getType(MO.getReg()).getSizeInBits();
       if (MatcherOpcode == GIM_CheckMemorySizeEqualToLLT &&
-          MMO->getSize() * 8 != Size) {
+          MMO->getSizeInBits() != Size) {
         if (handleReject() == RejectAndGiveUp)
           return false;
       } else if (MatcherOpcode == GIM_CheckMemorySizeLessThanLLT &&
-                 MMO->getSize() * 8 >= Size) {
+                 MMO->getSizeInBits() >= Size) {
         if (handleReject() == RejectAndGiveUp)
           return false;
       } else if (MatcherOpcode == GIM_CheckMemorySizeGreaterThanLLT &&
-                 MMO->getSize() * 8 <= Size)
+                 MMO->getSizeInBits() <= Size)
         if (handleReject() == RejectAndGiveUp)
           return false;
 
@@ -478,17 +478,19 @@
                              << InsnID << "]->getOperand(" << OpIdx
                              << "), SizeInBits=" << SizeInBits << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
+      MachineOperand &MO = State.MIs[InsnID]->getOperand(OpIdx);
+      const LLT Ty = MRI.getType(MO.getReg());
+
       // iPTR must be looked up in the target.
       if (SizeInBits == 0) {
         MachineFunction *MF = State.MIs[InsnID]->getParent()->getParent();
-        SizeInBits = MF->getDataLayout().getPointerSizeInBits(0);
+        const unsigned AddrSpace = Ty.getAddressSpace();
+        SizeInBits = MF->getDataLayout().getPointerSizeInBits(AddrSpace);
       }
 
       assert(SizeInBits != 0 && "Pointer size must be known");
 
-      MachineOperand &MO = State.MIs[InsnID]->getOperand(OpIdx);
       if (MO.isReg()) {
-        const LLT &Ty = MRI.getType(MO.getReg());
         if (!Ty.isPointer() || Ty.getSizeInBits() != SizeInBits)
           if (handleReject() == RejectAndGiveUp)
             return false;
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h
index e7680e1..a22778b 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h
@@ -28,6 +28,18 @@
   MachineRegisterInfo &MRI;
   const LegalizerInfo &LI;
 
+  static bool isArtifactCast(unsigned Opc) {
+    switch (Opc) {
+    case TargetOpcode::G_TRUNC:
+    case TargetOpcode::G_SEXT:
+    case TargetOpcode::G_ZEXT:
+    case TargetOpcode::G_ANYEXT:
+      return true;
+    default:
+      return false;
+    }
+  }
+
 public:
   LegalizationArtifactCombiner(MachineIRBuilder &B, MachineRegisterInfo &MRI,
                     const LegalizerInfo &LI)
@@ -39,11 +51,11 @@
       return false;
 
     Builder.setInstr(MI);
-    unsigned DstReg = MI.getOperand(0).getReg();
-    unsigned SrcReg = lookThroughCopyInstrs(MI.getOperand(1).getReg());
+    Register DstReg = MI.getOperand(0).getReg();
+    Register SrcReg = lookThroughCopyInstrs(MI.getOperand(1).getReg());
 
     // aext(trunc x) - > aext/copy/trunc x
-    unsigned TruncSrc;
+    Register TruncSrc;
     if (mi_match(SrcReg, MRI, m_GTrunc(m_Reg(TruncSrc)))) {
       LLVM_DEBUG(dbgs() << ".. Combine MI: " << MI;);
       Builder.buildAnyExtOrTrunc(DstReg, TruncSrc);
@@ -52,7 +64,7 @@
     }
 
     // aext([asz]ext x) -> [asz]ext x
-    unsigned ExtSrc;
+    Register ExtSrc;
     MachineInstr *ExtMI;
     if (mi_match(SrcReg, MRI,
                  m_all_of(m_MInstr(ExtMI), m_any_of(m_GAnyExt(m_Reg(ExtSrc)),
@@ -62,6 +74,20 @@
       markInstAndDefDead(MI, *ExtMI, DeadInsts);
       return true;
     }
+
+    // Try to fold aext(g_constant) when the larger constant type is legal.
+    // Can't use MIPattern because we don't have a specific constant in mind.
+    auto *SrcMI = MRI.getVRegDef(SrcReg);
+    if (SrcMI->getOpcode() == TargetOpcode::G_CONSTANT) {
+      const LLT &DstTy = MRI.getType(DstReg);
+      if (isInstLegal({TargetOpcode::G_CONSTANT, {DstTy}})) {
+        auto &CstVal = SrcMI->getOperand(1);
+        Builder.buildConstant(
+            DstReg, CstVal.getCImm()->getValue().sext(DstTy.getSizeInBits()));
+        markInstAndDefDead(MI, *SrcMI, DeadInsts);
+        return true;
+      }
+    }
     return tryFoldImplicitDef(MI, DeadInsts);
   }
 
@@ -72,11 +98,11 @@
       return false;
 
     Builder.setInstr(MI);
-    unsigned DstReg = MI.getOperand(0).getReg();
-    unsigned SrcReg = lookThroughCopyInstrs(MI.getOperand(1).getReg());
+    Register DstReg = MI.getOperand(0).getReg();
+    Register SrcReg = lookThroughCopyInstrs(MI.getOperand(1).getReg());
 
     // zext(trunc x) - > and (aext/copy/trunc x), mask
-    unsigned TruncSrc;
+    Register TruncSrc;
     if (mi_match(SrcReg, MRI, m_GTrunc(m_Reg(TruncSrc)))) {
       LLT DstTy = MRI.getType(DstReg);
       if (isInstUnsupported({TargetOpcode::G_AND, {DstTy}}) ||
@@ -91,6 +117,20 @@
       markInstAndDefDead(MI, *MRI.getVRegDef(SrcReg), DeadInsts);
       return true;
     }
+
+    // Try to fold zext(g_constant) when the larger constant type is legal.
+    // Can't use MIPattern because we don't have a specific constant in mind.
+    auto *SrcMI = MRI.getVRegDef(SrcReg);
+    if (SrcMI->getOpcode() == TargetOpcode::G_CONSTANT) {
+      const LLT &DstTy = MRI.getType(DstReg);
+      if (isInstLegal({TargetOpcode::G_CONSTANT, {DstTy}})) {
+        auto &CstVal = SrcMI->getOperand(1);
+        Builder.buildConstant(
+            DstReg, CstVal.getCImm()->getValue().zext(DstTy.getSizeInBits()));
+        markInstAndDefDead(MI, *SrcMI, DeadInsts);
+        return true;
+      }
+    }
     return tryFoldImplicitDef(MI, DeadInsts);
   }
 
@@ -101,11 +141,11 @@
       return false;
 
     Builder.setInstr(MI);
-    unsigned DstReg = MI.getOperand(0).getReg();
-    unsigned SrcReg = lookThroughCopyInstrs(MI.getOperand(1).getReg());
+    Register DstReg = MI.getOperand(0).getReg();
+    Register SrcReg = lookThroughCopyInstrs(MI.getOperand(1).getReg());
 
     // sext(trunc x) - > ashr (shl (aext/copy/trunc x), c), c
-    unsigned TruncSrc;
+    Register TruncSrc;
     if (mi_match(SrcReg, MRI, m_GTrunc(m_Reg(TruncSrc)))) {
       LLT DstTy = MRI.getType(DstReg);
       // Guess on the RHS shift amount type, which should be re-legalized if
@@ -139,7 +179,7 @@
     if (MachineInstr *DefMI = getOpcodeDef(TargetOpcode::G_IMPLICIT_DEF,
                                            MI.getOperand(1).getReg(), MRI)) {
       Builder.setInstr(MI);
-      unsigned DstReg = MI.getOperand(0).getReg();
+      Register DstReg = MI.getOperand(0).getReg();
       LLT DstTy = MRI.getType(DstReg);
 
       if (Opcode == TargetOpcode::G_ANYEXT) {
@@ -180,21 +220,33 @@
       return false;
 
     unsigned NumDefs = MI.getNumOperands() - 1;
+    MachineInstr *SrcDef =
+        getDefIgnoringCopies(MI.getOperand(NumDefs).getReg(), MRI);
+    if (!SrcDef)
+      return false;
 
     LLT OpTy = MRI.getType(MI.getOperand(NumDefs).getReg());
     LLT DestTy = MRI.getType(MI.getOperand(0).getReg());
+    MachineInstr *MergeI = SrcDef;
+    unsigned ConvertOp = 0;
 
+    // Handle intermediate conversions
+    unsigned SrcOp = SrcDef->getOpcode();
+    if (isArtifactCast(SrcOp)) {
+      ConvertOp = SrcOp;
+      MergeI = getDefIgnoringCopies(SrcDef->getOperand(1).getReg(), MRI);
+    }
+
+    // FIXME: Handle scalarizing concat_vectors (scalar result type with vector
+    // source)
     unsigned MergingOpcode = getMergeOpcode(OpTy, DestTy);
-    MachineInstr *MergeI =
-        getOpcodeDef(MergingOpcode, MI.getOperand(NumDefs).getReg(), MRI);
-
-    if (!MergeI)
+    if (!MergeI || MergeI->getOpcode() != MergingOpcode)
       return false;
 
     const unsigned NumMergeRegs = MergeI->getNumOperands() - 1;
 
     if (NumMergeRegs < NumDefs) {
-      if (NumDefs % NumMergeRegs != 0)
+      if (ConvertOp != 0 || NumDefs % NumMergeRegs != 0)
         return false;
 
       Builder.setInstr(MI);
@@ -207,7 +259,7 @@
 
       const unsigned NewNumDefs = NumDefs / NumMergeRegs;
       for (unsigned Idx = 0; Idx < NumMergeRegs; ++Idx) {
-        SmallVector<unsigned, 2> DstRegs;
+        SmallVector<Register, 2> DstRegs;
         for (unsigned j = 0, DefIdx = Idx * NewNumDefs; j < NewNumDefs;
              ++j, ++DefIdx)
           DstRegs.push_back(MI.getOperand(DefIdx).getReg());
@@ -216,7 +268,7 @@
       }
 
     } else if (NumMergeRegs > NumDefs) {
-      if (NumMergeRegs % NumDefs != 0)
+      if (ConvertOp != 0 || NumMergeRegs % NumDefs != 0)
         return false;
 
       Builder.setInstr(MI);
@@ -229,7 +281,7 @@
 
       const unsigned NumRegs = NumMergeRegs / NumDefs;
       for (unsigned DefIdx = 0; DefIdx < NumDefs; ++DefIdx) {
-        SmallVector<unsigned, 2> Regs;
+        SmallVector<Register, 2> Regs;
         for (unsigned j = 0, Idx = NumRegs * DefIdx + 1; j < NumRegs;
              ++j, ++Idx)
           Regs.push_back(MergeI->getOperand(Idx).getReg());
@@ -238,10 +290,22 @@
       }
 
     } else {
+      LLT MergeSrcTy = MRI.getType(MergeI->getOperand(1).getReg());
+      if (ConvertOp) {
+        Builder.setInstr(MI);
+
+        for (unsigned Idx = 0; Idx < NumDefs; ++Idx) {
+          Register MergeSrc = MergeI->getOperand(Idx + 1).getReg();
+          Builder.buildInstr(ConvertOp, {MI.getOperand(Idx).getReg()},
+                             {MergeSrc});
+        }
+
+        markInstAndDefDead(MI, *MergeI, DeadInsts);
+        return true;
+      }
       // FIXME: is a COPY appropriate if the types mismatch? We know both
       // registers are allocatable by now.
-      if (MRI.getType(MI.getOperand(0).getReg()) !=
-          MRI.getType(MergeI->getOperand(1).getReg()))
+      if (DestTy != MergeSrcTy)
         return false;
 
       for (unsigned Idx = 0; Idx < NumDefs; ++Idx)
@@ -317,7 +381,13 @@
   /// Adds instructions that are dead as a result of the combine
   /// into DeadInsts, which can include MI.
   bool tryCombineInstruction(MachineInstr &MI,
-                             SmallVectorImpl<MachineInstr *> &DeadInsts) {
+                             SmallVectorImpl<MachineInstr *> &DeadInsts,
+                             GISelObserverWrapper &WrapperObserver) {
+    // This might be a recursive call, and we might have DeadInsts already
+    // populated. To avoid bad things happening later with multiple vreg defs
+    // etc, process the dead instructions now if any.
+    if (!DeadInsts.empty())
+      deleteMarkedDeadInsts(DeadInsts, WrapperObserver);
     switch (MI.getOpcode()) {
     default:
       return false;
@@ -334,7 +404,7 @@
     case TargetOpcode::G_TRUNC: {
       bool Changed = false;
       for (auto &Use : MRI.use_instructions(MI.getOperand(0).getReg()))
-        Changed |= tryCombineInstruction(Use, DeadInsts);
+        Changed |= tryCombineInstruction(Use, DeadInsts, WrapperObserver);
       return Changed;
     }
     }
@@ -383,8 +453,10 @@
       MachineInstr *TmpDef = MRI.getVRegDef(PrevRegSrc);
       if (MRI.hasOneUse(PrevRegSrc)) {
         if (TmpDef != &DefMI) {
-          assert(TmpDef->getOpcode() == TargetOpcode::COPY &&
-                 "Expecting copy here");
+          assert((TmpDef->getOpcode() == TargetOpcode::COPY ||
+                  isArtifactCast(TmpDef->getOpcode())) &&
+                 "Expecting copy or artifact cast here");
+
           DeadInsts.push_back(TmpDef);
         }
       } else
@@ -395,6 +467,22 @@
       DeadInsts.push_back(&DefMI);
   }
 
+  /// Erase the dead instructions in the list and call the observer hooks.
+  /// Normally the Legalizer will deal with erasing instructions that have been
+  /// marked dead. However, for the trunc(ext(x)) cases we can end up trying to
+  /// process instructions which have been marked dead, but otherwise break the
+  /// MIR by introducing multiple vreg defs. For those cases, allow the combines
+  /// to explicitly delete the instructions before we run into trouble.
+  void deleteMarkedDeadInsts(SmallVectorImpl<MachineInstr *> &DeadInsts,
+                             GISelObserverWrapper &WrapperObserver) {
+    for (auto *DeadMI : DeadInsts) {
+      LLVM_DEBUG(dbgs() << *DeadMI << "Is dead, eagerly deleting\n");
+      WrapperObserver.erasingInstr(*DeadMI);
+      DeadMI->eraseFromParentAndMarkDBGValuesForRemoval();
+    }
+    DeadInsts.clear();
+  }
+
   /// Checks if the target legalizer info has specified anything about the
   /// instruction, or if unsupported.
   bool isInstUnsupported(const LegalityQuery &Query) const {
@@ -403,6 +491,10 @@
     return Step.Action == Unsupported || Step.Action == NotFound;
   }
 
+  bool isInstLegal(const LegalityQuery &Query) const {
+    return LI.getAction(Query).Action == LegalizeActions::Legal;
+  }
+
   bool isConstantUnsupported(LLT Ty) const {
     if (!Ty.isVector())
       return isInstUnsupported({TargetOpcode::G_CONSTANT, {Ty}});
@@ -414,8 +506,8 @@
 
   /// Looks through copy instructions and returns the actual
   /// source register.
-  unsigned lookThroughCopyInstrs(unsigned Reg) {
-    unsigned TmpReg;
+  unsigned lookThroughCopyInstrs(Register Reg) {
+    Register TmpReg;
     while (mi_match(Reg, MRI, m_Copy(m_Reg(TmpReg)))) {
       if (MRI.getType(TmpReg).isValid())
         Reg = TmpReg;
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Legalizer.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Legalizer.h
index 0181650..13cf3f7 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Legalizer.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Legalizer.h
@@ -54,6 +54,11 @@
         MachineFunctionProperties::Property::Legalized);
   }
 
+  MachineFunctionProperties getClearedProperties() const override {
+    return MachineFunctionProperties()
+      .set(MachineFunctionProperties::Property::NoPHIs);
+  }
+
   bool combineExtracts(MachineInstr &MI, MachineRegisterInfo &MRI,
                        const TargetInstrInfo &TII);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h
index 136356c..e8cb65f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h
@@ -124,6 +124,11 @@
   /// result elements, and replacing the vreg of the operand in place.
   void moreElementsVectorDst(MachineInstr &MI, LLT MoreTy, unsigned OpIdx);
 
+  /// Legalize a single operand \p OpIdx of the machine instruction \p MI as a
+  /// Use by producing a vector with undefined high elements, extracting the
+  /// original vector type, and replacing the vreg of the operand in place.
+  void moreElementsVectorSrc(MachineInstr &MI, LLT MoreTy, unsigned OpIdx);
+
   LegalizeResult
   widenScalarMergeValues(MachineInstr &MI, unsigned TypeIdx, LLT WideTy);
   LegalizeResult
@@ -136,14 +141,14 @@
   /// Helper function to split a wide generic register into bitwise blocks with
   /// the given Type (which implies the number of blocks needed). The generic
   /// registers created are appended to Ops, starting at bit 0 of Reg.
-  void extractParts(unsigned Reg, LLT Ty, int NumParts,
-                    SmallVectorImpl<unsigned> &VRegs);
+  void extractParts(Register Reg, LLT Ty, int NumParts,
+                    SmallVectorImpl<Register> &VRegs);
 
   /// Version which handles irregular splits.
-  bool extractParts(unsigned Reg, LLT RegTy, LLT MainTy,
+  bool extractParts(Register Reg, LLT RegTy, LLT MainTy,
                     LLT &LeftoverTy,
-                    SmallVectorImpl<unsigned> &VRegs,
-                    SmallVectorImpl<unsigned> &LeftoverVRegs);
+                    SmallVectorImpl<Register> &VRegs,
+                    SmallVectorImpl<Register> &LeftoverVRegs);
 
   /// Helper function to build a wide generic register \p DstReg of type \p
   /// RegTy from smaller parts. This will produce a G_MERGE_VALUES,
@@ -154,9 +159,16 @@
   ///
   /// If \p ResultTy does not evenly break into \p PartTy sized pieces, the
   /// remainder must be specified with \p LeftoverRegs of type \p LeftoverTy.
-  void insertParts(unsigned DstReg, LLT ResultTy,
-                   LLT PartTy, ArrayRef<unsigned> PartRegs,
-                   LLT LeftoverTy = LLT(), ArrayRef<unsigned> LeftoverRegs = {});
+  void insertParts(Register DstReg, LLT ResultTy,
+                   LLT PartTy, ArrayRef<Register> PartRegs,
+                   LLT LeftoverTy = LLT(), ArrayRef<Register> LeftoverRegs = {});
+
+  /// Perform generic multiplication of values held in multiple registers.
+  /// Generated instructions use only types NarrowTy and i1.
+  /// Destination can be same or two times size of the source.
+  void multiplyRegisters(SmallVectorImpl<Register> &DstRegs,
+                         ArrayRef<Register> Src1Regs,
+                         ArrayRef<Register> Src2Regs, LLT NarrowTy);
 
   LegalizeResult fewerElementsVectorImplicitDef(MachineInstr &MI,
                                                 unsigned TypeIdx, LLT NarrowTy);
@@ -181,6 +193,12 @@
   LegalizeResult
   fewerElementsVectorSelect(MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy);
 
+  LegalizeResult fewerElementsVectorPhi(MachineInstr &MI,
+                                        unsigned TypeIdx, LLT NarrowTy);
+
+  LegalizeResult moreElementsVectorPhi(MachineInstr &MI, unsigned TypeIdx,
+                                       LLT MoreTy);
+
   LegalizeResult
   reduceLoadStoreWidth(MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy);
 
@@ -188,14 +206,21 @@
                                              LLT HalfTy, LLT ShiftAmtTy);
 
   LegalizeResult narrowScalarShift(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
-  LegalizeResult narrowScalarMul(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
+  LegalizeResult narrowScalarMul(MachineInstr &MI, LLT Ty);
   LegalizeResult narrowScalarExtract(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
   LegalizeResult narrowScalarInsert(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
 
+  LegalizeResult narrowScalarBasic(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
   LegalizeResult narrowScalarSelect(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
 
   LegalizeResult lowerBitCount(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
 
+  LegalizeResult lowerU64ToF32BitOps(MachineInstr &MI);
+  LegalizeResult lowerUITOFP(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
+  LegalizeResult lowerSITOFP(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
+  LegalizeResult lowerMinMax(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
+  LegalizeResult lowerFCopySign(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
+
   MachineRegisterInfo &MRI;
   const LegalizerInfo &LI;
   /// To keep track of changes made by the LegalizerHelper.
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
index 5979173..513c98f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
@@ -92,6 +92,7 @@
   UseLegacyRules,
 };
 } // end namespace LegalizeActions
+raw_ostream &operator<<(raw_ostream &OS, LegalizeActions::LegalizeAction Action);
 
 using LegalizeActions::LegalizeAction;
 
@@ -122,6 +123,7 @@
 
   struct MemDesc {
     uint64_t SizeInBits;
+    uint64_t AlignInBits;
     AtomicOrdering Ordering;
   };
 
@@ -164,13 +166,23 @@
     std::function<std::pair<unsigned, LLT>(const LegalityQuery &)>;
 
 namespace LegalityPredicates {
-struct TypePairAndMemSize {
+struct TypePairAndMemDesc {
   LLT Type0;
   LLT Type1;
   uint64_t MemSize;
+  uint64_t Align;
 
-  bool operator==(const TypePairAndMemSize &Other) const {
+  bool operator==(const TypePairAndMemDesc &Other) const {
     return Type0 == Other.Type0 && Type1 == Other.Type1 &&
+           Align == Other.Align &&
+           MemSize == Other.MemSize;
+  }
+
+  /// \returns true if this memory access is legal with for the acecss described
+  /// by \p Other (The alignment is sufficient for the size and result type).
+  bool isCompatible(const TypePairAndMemDesc &Other) const {
+    return Type0 == Other.Type0 && Type1 == Other.Type1 &&
+           Align >= Other.Align &&
            MemSize == Other.MemSize;
   }
 };
@@ -199,9 +211,9 @@
               std::initializer_list<std::pair<LLT, LLT>> TypesInit);
 /// True iff the given types for the given pair of type indexes is one of the
 /// specified type pairs.
-LegalityPredicate typePairAndMemSizeInSet(
+LegalityPredicate typePairAndMemDescInSet(
     unsigned TypeIdx0, unsigned TypeIdx1, unsigned MMOIdx,
-    std::initializer_list<TypePairAndMemSize> TypesAndMemSizeInit);
+    std::initializer_list<TypePairAndMemDesc> TypesAndMemDescInit);
 /// True iff the specified type index is a scalar.
 LegalityPredicate isScalar(unsigned TypeIdx);
 /// True iff the specified type index is a vector.
@@ -455,13 +467,13 @@
     return actionFor(LegalizeAction::Legal, Types);
   }
   /// The instruction is legal when type indexes 0 and 1 along with the memory
-  /// size is any type and size tuple in the given list.
-  LegalizeRuleSet &legalForTypesWithMemSize(
-      std::initializer_list<LegalityPredicates::TypePairAndMemSize>
-          TypesAndMemSize) {
+  /// size and minimum alignment is any type and size tuple in the given list.
+  LegalizeRuleSet &legalForTypesWithMemDesc(
+      std::initializer_list<LegalityPredicates::TypePairAndMemDesc>
+          TypesAndMemDesc) {
     return actionIf(LegalizeAction::Legal,
-                    LegalityPredicates::typePairAndMemSizeInSet(
-                        typeIdx(0), typeIdx(1), /*MMOIdx*/ 0, TypesAndMemSize));
+                    LegalityPredicates::typePairAndMemDescInSet(
+                        typeIdx(0), typeIdx(1), /*MMOIdx*/ 0, TypesAndMemDesc));
   }
   /// The instruction is legal when type indexes 0 and 1 are both in the given
   /// list. That is, the type pair is in the cartesian product of the list.
@@ -474,6 +486,20 @@
                                             std::initializer_list<LLT> Types1) {
     return actionForCartesianProduct(LegalizeAction::Legal, Types0, Types1);
   }
+  /// The instruction is legal when type indexes 0, 1, and 2 are both their
+  /// respective lists.
+  LegalizeRuleSet &legalForCartesianProduct(std::initializer_list<LLT> Types0,
+                                            std::initializer_list<LLT> Types1,
+                                            std::initializer_list<LLT> Types2) {
+    return actionForCartesianProduct(LegalizeAction::Legal, Types0, Types1,
+                                     Types2);
+  }
+
+  LegalizeRuleSet &alwaysLegal() {
+    using namespace LegalizeMutations;
+    markAllTypeIdxsAsCovered();
+    return actionIf(LegalizeAction::Legal, always);
+  }
 
   /// The instruction is lowered.
   LegalizeRuleSet &lower() {
@@ -624,6 +650,13 @@
   LegalizeRuleSet &customFor(std::initializer_list<LLT> Types) {
     return actionFor(LegalizeAction::Custom, Types);
   }
+
+  /// The instruction is custom when type indexes 0 and 1 is any type pair in the
+  /// given list.
+  LegalizeRuleSet &customFor(std::initializer_list<std::pair<LLT, LLT>> Types) {
+    return actionFor(LegalizeAction::Custom, Types);
+  }
+
   LegalizeRuleSet &customForCartesianProduct(std::initializer_list<LLT> Types) {
     return actionForCartesianProduct(LegalizeAction::Custom, Types);
   }
@@ -670,7 +703,7 @@
                     LegalizeMutations::scalarize(TypeIdx));
   }
 
-  /// Ensure the scalar is at least as wide as Ty.
+  /// Ensure the scalar or element is at least as wide as Ty.
   LegalizeRuleSet &minScalarOrElt(unsigned TypeIdx, const LLT &Ty) {
     using namespace LegalityPredicates;
     using namespace LegalizeMutations;
@@ -679,6 +712,17 @@
                     changeElementTo(typeIdx(TypeIdx), Ty));
   }
 
+  /// Ensure the scalar or element is at least as wide as Ty.
+  LegalizeRuleSet &minScalarOrEltIf(LegalityPredicate Predicate,
+                                    unsigned TypeIdx, const LLT &Ty) {
+    using namespace LegalityPredicates;
+    using namespace LegalizeMutations;
+    return actionIf(LegalizeAction::WidenScalar,
+                    all(Predicate, scalarOrEltNarrowerThan(
+                                       TypeIdx, Ty.getScalarSizeInBits())),
+                    changeElementTo(typeIdx(TypeIdx), Ty));
+  }
+
   /// Ensure the scalar is at least as wide as Ty.
   LegalizeRuleSet &minScalar(unsigned TypeIdx, const LLT &Ty) {
     using namespace LegalityPredicates;
@@ -749,6 +793,22 @@
         });
   }
 
+  /// Conditionally widen the scalar or elt to match the size of another.
+  LegalizeRuleSet &minScalarEltSameAsIf(LegalityPredicate Predicate,
+                                   unsigned TypeIdx, unsigned LargeTypeIdx) {
+    typeIdx(TypeIdx);
+    return widenScalarIf(
+        [=](const LegalityQuery &Query) {
+          return Query.Types[LargeTypeIdx].getScalarSizeInBits() >
+                     Query.Types[TypeIdx].getScalarSizeInBits() &&
+                 Predicate(Query);
+        },
+        [=](const LegalityQuery &Query) {
+          LLT T = Query.Types[LargeTypeIdx];
+          return std::make_pair(TypeIdx, T);
+        });
+  }
+
   /// Add more elements to the vector to reach the next power of two.
   /// No effect if the type is not a vector or the element count is a power of
   /// two.
@@ -1043,12 +1103,22 @@
   LegalizeActionStep getAction(const MachineInstr &MI,
                                const MachineRegisterInfo &MRI) const;
 
+  bool isLegal(const LegalityQuery &Query) const {
+    return getAction(Query).Action == LegalizeAction::Legal;
+  }
   bool isLegal(const MachineInstr &MI, const MachineRegisterInfo &MRI) const;
+  bool isLegalOrCustom(const MachineInstr &MI,
+                       const MachineRegisterInfo &MRI) const;
 
   virtual bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
                               MachineIRBuilder &MIRBuilder,
                               GISelChangeObserver &Observer) const;
 
+  /// Return true if MI is either legal or has been legalized and false
+  /// if not legal.
+  virtual bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
+                                 MachineIRBuilder &MIRBuilder) const;
+
 private:
   /// Determine what action should be taken to legalize the given generic
   /// instruction opcode, type-index and type. Requires computeTables to have
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h
index cfc7c35..06de580 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h
@@ -21,12 +21,14 @@
 #ifndef LLVM_CODEGEN_GLOBALISEL_LOCALIZER_H
 #define LLVM_CODEGEN_GLOBALISEL_LOCALIZER_H
 
+#include "llvm/ADT/SetVector.h"
 #include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
 
 namespace llvm {
 // Forward declarations.
 class MachineRegisterInfo;
+class TargetTransformInfo;
 
 /// This pass implements the localization mechanism described at the
 /// top of this file. One specificity of the implementation is that
@@ -43,9 +45,11 @@
   /// MRI contains all the register class/bank information that this
   /// pass uses and updates.
   MachineRegisterInfo *MRI;
+  /// TTI used for getting remat costs for instructions.
+  TargetTransformInfo *TTI;
 
   /// Check whether or not \p MI needs to be moved close to its uses.
-  static bool shouldLocalize(const MachineInstr &MI);
+  bool shouldLocalize(const MachineInstr &MI);
 
   /// Check if \p MOUse is used in the same basic block as \p Def.
   /// If the use is in the same block, we say it is local.
@@ -57,6 +61,15 @@
   /// Initialize the field members using \p MF.
   void init(MachineFunction &MF);
 
+  typedef SmallSetVector<MachineInstr *, 32> LocalizedSetVecT;
+
+  /// Do inter-block localization from the entry block.
+  bool localizeInterBlock(MachineFunction &MF,
+                          LocalizedSetVecT &LocalizedInstrs);
+
+  /// Do intra-block localization of already localized instructions.
+  bool localizeIntraBlock(LocalizedSetVecT &LocalizedInstrs);
+
 public:
   Localizer();
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
index 1f4ee8a..13eddd9 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
@@ -1,4 +1,4 @@
-//== ----- llvm/CodeGen/GlobalISel/MIPatternMatch.h --------------------- == //
+//==------ llvm/CodeGen/GlobalISel/MIPatternMatch.h -------------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -30,8 +30,7 @@
   SubPatternT SubPat;
   OneUse_match(const SubPatternT &SP) : SubPat(SP) {}
 
-  template <typename OpTy>
-  bool match(const MachineRegisterInfo &MRI, unsigned Reg) {
+  bool match(MachineRegisterInfo &MRI, unsigned Reg) {
     return MRI.hasOneUse(Reg) && SubPat.match(MRI, Reg);
   }
 };
@@ -161,7 +160,7 @@
   }
 };
 
-inline bind_ty<unsigned> m_Reg(unsigned &R) { return R; }
+inline bind_ty<Register> m_Reg(Register &R) { return R; }
 inline bind_ty<MachineInstr *> m_MInstr(MachineInstr *&MI) { return MI; }
 inline bind_ty<LLT> m_Type(LLT &Ty) { return Ty; }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
index 6e1ff7c..da3c478 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
@@ -59,13 +59,14 @@
 class DstOp {
   union {
     LLT LLTTy;
-    unsigned Reg;
+    Register Reg;
     const TargetRegisterClass *RC;
   };
 
 public:
   enum class DstType { Ty_LLT, Ty_Reg, Ty_RC };
   DstOp(unsigned R) : Reg(R), Ty(DstType::Ty_Reg) {}
+  DstOp(Register R) : Reg(R), Ty(DstType::Ty_Reg) {}
   DstOp(const MachineOperand &Op) : Reg(Op.getReg()), Ty(DstType::Ty_Reg) {}
   DstOp(const LLT &T) : LLTTy(T), Ty(DstType::Ty_LLT) {}
   DstOp(const TargetRegisterClass *TRC) : RC(TRC), Ty(DstType::Ty_RC) {}
@@ -96,7 +97,7 @@
     llvm_unreachable("Unrecognised DstOp::DstType enum");
   }
 
-  unsigned getReg() const {
+  Register getReg() const {
     assert(Ty == DstType::Ty_Reg && "Not a register");
     return Reg;
   }
@@ -119,13 +120,13 @@
 class SrcOp {
   union {
     MachineInstrBuilder SrcMIB;
-    unsigned Reg;
+    Register Reg;
     CmpInst::Predicate Pred;
   };
 
 public:
   enum class SrcType { Ty_Reg, Ty_MIB, Ty_Predicate };
-  SrcOp(unsigned R) : Reg(R), Ty(SrcType::Ty_Reg) {}
+  SrcOp(Register R) : Reg(R), Ty(SrcType::Ty_Reg) {}
   SrcOp(const MachineOperand &Op) : Reg(Op.getReg()), Ty(SrcType::Ty_Reg) {}
   SrcOp(const MachineInstrBuilder &MIB) : SrcMIB(MIB), Ty(SrcType::Ty_MIB) {}
   SrcOp(const CmpInst::Predicate P) : Pred(P), Ty(SrcType::Ty_Predicate) {}
@@ -156,7 +157,7 @@
     llvm_unreachable("Unrecognised SrcOp::SrcType enum");
   }
 
-  unsigned getReg() const {
+  Register getReg() const {
     switch (Ty) {
     case SrcType::Ty_Predicate:
       llvm_unreachable("Not a register operand");
@@ -237,6 +238,10 @@
     return *State.MF;
   }
 
+  const DataLayout &getDataLayout() const {
+    return getMF().getFunction().getParent()->getDataLayout();
+  }
+
   /// Getter for DebugLoc
   const DebugLoc &getDL() { return State.DL; }
 
@@ -317,13 +322,13 @@
 
   /// Build and insert a DBG_VALUE instruction expressing the fact that the
   /// associated \p Variable lives in \p Reg (suitably modified by \p Expr).
-  MachineInstrBuilder buildDirectDbgValue(unsigned Reg, const MDNode *Variable,
+  MachineInstrBuilder buildDirectDbgValue(Register Reg, const MDNode *Variable,
                                           const MDNode *Expr);
 
   /// Build and insert a DBG_VALUE instruction expressing the fact that the
   /// associated \p Variable lives in memory at \p Reg (suitably modified by \p
   /// Expr).
-  MachineInstrBuilder buildIndirectDbgValue(unsigned Reg,
+  MachineInstrBuilder buildIndirectDbgValue(Register Reg,
                                             const MDNode *Variable,
                                             const MDNode *Expr);
 
@@ -352,7 +357,7 @@
   /// \pre \p Res must be a generic virtual register with pointer type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildFrameIndex(unsigned Res, int Idx);
+  MachineInstrBuilder buildFrameIndex(const DstOp &Res, int Idx);
 
   /// Build and insert \p Res = G_GLOBAL_VALUE \p GV
   ///
@@ -364,8 +369,7 @@
   ///      in the same address space as \p GV.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildGlobalValue(unsigned Res, const GlobalValue *GV);
-
+  MachineInstrBuilder buildGlobalValue(const DstOp &Res, const GlobalValue *GV);
 
   /// Build and insert \p Res = G_GEP \p Op0, \p Op1
   ///
@@ -378,8 +382,8 @@
   /// \pre \p Op1 must be a generic virtual register with scalar type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildGEP(unsigned Res, unsigned Op0,
-                               unsigned Op1);
+  MachineInstrBuilder buildGEP(const DstOp &Res, const SrcOp &Op0,
+                               const SrcOp &Op1);
 
   /// Materialize and insert \p Res = G_GEP \p Op0, (G_CONSTANT \p Value)
   ///
@@ -397,7 +401,7 @@
   ///       type as \p Op0 or \p Op0 itself.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  Optional<MachineInstrBuilder> materializeGEP(unsigned &Res, unsigned Op0,
+  Optional<MachineInstrBuilder> materializeGEP(Register &Res, Register Op0,
                                                const LLT &ValueTy,
                                                uint64_t Value);
 
@@ -414,9 +418,24 @@
   ///      be cleared in \p Op0.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildPtrMask(unsigned Res, unsigned Op0,
+  MachineInstrBuilder buildPtrMask(const DstOp &Res, const SrcOp &Op0,
                                    uint32_t NumBits);
 
+  /// Build and insert \p Res, \p CarryOut = G_UADDO \p Op0, \p Op1
+  ///
+  /// G_UADDO sets \p Res to \p Op0 + \p Op1 (truncated to the bit width) and
+  /// sets \p CarryOut to 1 if the result overflowed in unsigned arithmetic.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers with the
+  /// same scalar type.
+  ////\pre \p CarryOut must be generic virtual register with scalar type
+  ///(typically s1)
+  ///
+  /// \return The newly created instruction.
+  MachineInstrBuilder buildUAddo(const DstOp &Res, const DstOp &CarryOut,
+                                 const SrcOp &Op0, const SrcOp &Op1);
+
   /// Build and insert \p Res, \p CarryOut = G_UADDE \p Op0,
   /// \p Op1, \p CarryIn
   ///
@@ -465,6 +484,16 @@
   /// \return The newly created instruction.
   MachineInstrBuilder buildSExt(const DstOp &Res, const SrcOp &Op);
 
+  /// Build and insert a G_PTRTOINT instruction.
+  MachineInstrBuilder buildPtrToInt(const DstOp &Dst, const SrcOp &Src) {
+    return buildInstr(TargetOpcode::G_PTRTOINT, {Dst}, {Src});
+  }
+
+  /// Build and insert \p Dst = G_BITCAST \p Src
+  MachineInstrBuilder buildBitcast(const DstOp &Dst, const SrcOp &Src) {
+    return buildInstr(TargetOpcode::G_BITCAST, {Dst}, {Src});
+  }
+
   /// \return The opcode of the extension the target wants to use for boolean
   /// values.
   unsigned getBoolExtOp(bool IsVec, bool IsFP) const;
@@ -554,7 +583,7 @@
   ///      depend on bit 0 (for now).
   ///
   /// \return The newly created instruction.
-  MachineInstrBuilder buildBrCond(unsigned Tst, MachineBasicBlock &Dest);
+  MachineInstrBuilder buildBrCond(Register Tst, MachineBasicBlock &Dest);
 
   /// Build and insert G_BRINDIRECT \p Tgt
   ///
@@ -564,7 +593,21 @@
   /// \pre \p Tgt must be a generic virtual register with pointer type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildBrIndirect(unsigned Tgt);
+  MachineInstrBuilder buildBrIndirect(Register Tgt);
+
+  /// Build and insert G_BRJT \p TablePtr, \p JTI, \p IndexReg
+  ///
+  /// G_BRJT is a jump table branch using a table base pointer \p TablePtr,
+  /// jump table index \p JTI and index \p IndexReg
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p TablePtr must be a generic virtual register with pointer type.
+  /// \pre \p JTI must be be a jump table index.
+  /// \pre \p IndexReg must be a generic virtual register with pointer type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildBrJT(Register TablePtr, unsigned JTI,
+                                Register IndexReg);
 
   /// Build and insert \p Res = G_CONSTANT \p Val
   ///
@@ -603,6 +646,7 @@
                                              const ConstantFP &Val);
 
   MachineInstrBuilder buildFConstant(const DstOp &Res, double Val);
+  MachineInstrBuilder buildFConstant(const DstOp &Res, const APFloat &Val);
 
   /// Build and insert \p Res = COPY Op
   ///
@@ -622,7 +666,7 @@
   /// \pre \p Addr must be a generic virtual register with pointer type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildLoad(unsigned Res, unsigned Addr,
+  MachineInstrBuilder buildLoad(const DstOp &Res, const SrcOp &Addr,
                                 MachineMemOperand &MMO);
 
   /// Build and insert `Res = <opcode> Addr, MMO`.
@@ -634,8 +678,8 @@
   /// \pre \p Addr must be a generic virtual register with pointer type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildLoadInstr(unsigned Opcode, unsigned Res,
-                                     unsigned Addr, MachineMemOperand &MMO);
+  MachineInstrBuilder buildLoadInstr(unsigned Opcode, const DstOp &Res,
+                                     const SrcOp &Addr, MachineMemOperand &MMO);
 
   /// Build and insert `G_STORE Val, Addr, MMO`.
   ///
@@ -646,7 +690,7 @@
   /// \pre \p Addr must be a generic virtual register with pointer type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildStore(unsigned Val, unsigned Addr,
+  MachineInstrBuilder buildStore(const SrcOp &Val, const SrcOp &Addr,
                                  MachineMemOperand &MMO);
 
   /// Build and insert `Res0, ... = G_EXTRACT Src, Idx0`.
@@ -655,7 +699,7 @@
   /// \pre \p Res and \p Src must be generic virtual registers.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildExtract(unsigned Res, unsigned Src, uint64_t Index);
+  MachineInstrBuilder buildExtract(const DstOp &Res, const SrcOp &Src, uint64_t Index);
 
   /// Build and insert \p Res = IMPLICIT_DEF.
   MachineInstrBuilder buildUndef(const DstOp &Res);
@@ -673,7 +717,7 @@
   /// \pre The bits defined by each Op (derived from index and scalar size) must
   ///      not overlap.
   /// \pre \p Indices must be in ascending order of bit position.
-  void buildSequence(unsigned Res, ArrayRef<unsigned> Ops,
+  void buildSequence(Register Res, ArrayRef<Register> Ops,
                      ArrayRef<uint64_t> Indices);
 
   /// Build and insert \p Res = G_MERGE_VALUES \p Op0, ...
@@ -687,7 +731,7 @@
   /// \pre The type of all \p Ops registers must be identical.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildMerge(const DstOp &Res, ArrayRef<unsigned> Ops);
+  MachineInstrBuilder buildMerge(const DstOp &Res, ArrayRef<Register> Ops);
 
   /// Build and insert \p Res0, ... = G_UNMERGE_VALUES \p Op
   ///
@@ -700,7 +744,10 @@
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder buildUnmerge(ArrayRef<LLT> Res, const SrcOp &Op);
-  MachineInstrBuilder buildUnmerge(ArrayRef<unsigned> Res, const SrcOp &Op);
+  MachineInstrBuilder buildUnmerge(ArrayRef<Register> Res, const SrcOp &Op);
+
+  /// Build and insert an unmerge of \p Res sized pieces to cover \p Op
+  MachineInstrBuilder buildUnmerge(LLT Res, const SrcOp &Op);
 
   /// Build and insert \p Res = G_BUILD_VECTOR \p Op0, ...
   ///
@@ -712,7 +759,7 @@
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder buildBuildVector(const DstOp &Res,
-                                       ArrayRef<unsigned> Ops);
+                                       ArrayRef<Register> Ops);
 
   /// Build and insert \p Res = G_BUILD_VECTOR with \p Src replicated to fill
   /// the number of elements
@@ -733,7 +780,7 @@
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder buildBuildVectorTrunc(const DstOp &Res,
-                                            ArrayRef<unsigned> Ops);
+                                            ArrayRef<Register> Ops);
 
   /// Build and insert \p Res = G_CONCAT_VECTORS \p Op0, ...
   ///
@@ -747,10 +794,10 @@
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder buildConcatVectors(const DstOp &Res,
-                                         ArrayRef<unsigned> Ops);
+                                         ArrayRef<Register> Ops);
 
-  MachineInstrBuilder buildInsert(unsigned Res, unsigned Src,
-                                  unsigned Op, unsigned Index);
+  MachineInstrBuilder buildInsert(Register Res, Register Src,
+                                  Register Op, unsigned Index);
 
   /// Build and insert either a G_INTRINSIC (if \p HasSideEffects is false) or
   /// G_INTRINSIC_W_SIDE_EFFECTS instruction. Its first operand will be the
@@ -762,7 +809,9 @@
   /// \pre setBasicBlock or setMI must have been called.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildIntrinsic(Intrinsic::ID ID, unsigned Res,
+  MachineInstrBuilder buildIntrinsic(Intrinsic::ID ID, ArrayRef<Register> Res,
+                                     bool HasSideEffects);
+  MachineInstrBuilder buildIntrinsic(Intrinsic::ID ID, ArrayRef<DstOp> Res,
                                      bool HasSideEffects);
 
   /// Build and insert \p Res = G_FPTRUNC \p Op
@@ -877,8 +926,8 @@
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder
-  buildAtomicCmpXchgWithSuccess(unsigned OldValRes, unsigned SuccessRes,
-                                unsigned Addr, unsigned CmpVal, unsigned NewVal,
+  buildAtomicCmpXchgWithSuccess(Register OldValRes, Register SuccessRes,
+                                Register Addr, Register CmpVal, Register NewVal,
                                 MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMIC_CMPXCHG Addr, CmpVal, NewVal,
@@ -895,8 +944,8 @@
   ///      registers of the same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicCmpXchg(unsigned OldValRes, unsigned Addr,
-                                         unsigned CmpVal, unsigned NewVal,
+  MachineInstrBuilder buildAtomicCmpXchg(Register OldValRes, Register Addr,
+                                         Register CmpVal, Register NewVal,
                                          MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_<Opcode> Addr, Val, MMO`.
@@ -912,8 +961,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMW(unsigned Opcode, unsigned OldValRes,
-                                     unsigned Addr, unsigned Val,
+  MachineInstrBuilder buildAtomicRMW(unsigned Opcode, Register OldValRes,
+                                     Register Addr, Register Val,
                                      MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_XCHG Addr, Val, MMO`.
@@ -928,8 +977,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWXchg(unsigned OldValRes, unsigned Addr,
-                                         unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWXchg(Register OldValRes, Register Addr,
+                                         Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_ADD Addr, Val, MMO`.
   ///
@@ -943,8 +992,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWAdd(unsigned OldValRes, unsigned Addr,
-                                         unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWAdd(Register OldValRes, Register Addr,
+                                        Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_SUB Addr, Val, MMO`.
   ///
@@ -958,8 +1007,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWSub(unsigned OldValRes, unsigned Addr,
-                                         unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWSub(Register OldValRes, Register Addr,
+                                        Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_AND Addr, Val, MMO`.
   ///
@@ -973,8 +1022,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWAnd(unsigned OldValRes, unsigned Addr,
-                                         unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWAnd(Register OldValRes, Register Addr,
+                                        Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_NAND Addr, Val, MMO`.
   ///
@@ -989,8 +1038,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWNand(unsigned OldValRes, unsigned Addr,
-                                         unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWNand(Register OldValRes, Register Addr,
+                                         Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_OR Addr, Val, MMO`.
   ///
@@ -1004,8 +1053,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWOr(unsigned OldValRes, unsigned Addr,
-                                       unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWOr(Register OldValRes, Register Addr,
+                                       Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_XOR Addr, Val, MMO`.
   ///
@@ -1019,8 +1068,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWXor(unsigned OldValRes, unsigned Addr,
-                                        unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWXor(Register OldValRes, Register Addr,
+                                        Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_MAX Addr, Val, MMO`.
   ///
@@ -1035,8 +1084,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWMax(unsigned OldValRes, unsigned Addr,
-                                        unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWMax(Register OldValRes, Register Addr,
+                                        Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_MIN Addr, Val, MMO`.
   ///
@@ -1051,8 +1100,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWMin(unsigned OldValRes, unsigned Addr,
-                                        unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWMin(Register OldValRes, Register Addr,
+                                        Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_UMAX Addr, Val, MMO`.
   ///
@@ -1067,8 +1116,8 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWUmax(unsigned OldValRes, unsigned Addr,
-                                         unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWUmax(Register OldValRes, Register Addr,
+                                         Register Val, MachineMemOperand &MMO);
 
   /// Build and insert `OldValRes<def> = G_ATOMICRMW_UMIN Addr, Val, MMO`.
   ///
@@ -1083,8 +1132,11 @@
   ///      same type.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAtomicRMWUmin(unsigned OldValRes, unsigned Addr,
-                                         unsigned Val, MachineMemOperand &MMO);
+  MachineInstrBuilder buildAtomicRMWUmin(Register OldValRes, Register Addr,
+                                         Register Val, MachineMemOperand &MMO);
+
+  /// Build and insert `G_FENCE Ordering, Scope`.
+  MachineInstrBuilder buildFence(unsigned Ordering, unsigned Scope);
 
   /// Build and insert \p Res = G_BLOCK_ADDR \p BA
   ///
@@ -1094,7 +1146,7 @@
   /// \pre \p Res must be a generic virtual register of a pointer type.
   ///
   /// \return The newly created instruction.
-  MachineInstrBuilder buildBlockAddress(unsigned Res, const BlockAddress *BA);
+  MachineInstrBuilder buildBlockAddress(Register Res, const BlockAddress *BA);
 
   /// Build and insert \p Res = G_ADD \p Op0, \p Op1
   ///
@@ -1207,6 +1259,131 @@
     return buildInstr(TargetOpcode::G_OR, {Dst}, {Src0, Src1});
   }
 
+  /// Build and insert \p Res = G_XOR \p Op0, \p Op1
+  MachineInstrBuilder buildXor(const DstOp &Dst, const SrcOp &Src0,
+                               const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_XOR, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert a bitwise not,
+  /// \p NegOne = G_CONSTANT -1
+  /// \p Res = G_OR \p Op0, NegOne
+  MachineInstrBuilder buildNot(const DstOp &Dst, const SrcOp &Src0) {
+    auto NegOne = buildConstant(Dst.getLLTTy(*getMRI()), -1);
+    return buildInstr(TargetOpcode::G_XOR, {Dst}, {Src0, NegOne});
+  }
+
+  /// Build and insert \p Res = G_CTPOP \p Op0, \p Src0
+  MachineInstrBuilder buildCTPOP(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_CTPOP, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_CTLZ \p Op0, \p Src0
+  MachineInstrBuilder buildCTLZ(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_CTLZ, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_CTLZ_ZERO_UNDEF \p Op0, \p Src0
+  MachineInstrBuilder buildCTLZ_ZERO_UNDEF(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_CTLZ_ZERO_UNDEF, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_CTTZ \p Op0, \p Src0
+  MachineInstrBuilder buildCTTZ(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_CTTZ, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_CTTZ_ZERO_UNDEF \p Op0, \p Src0
+  MachineInstrBuilder buildCTTZ_ZERO_UNDEF(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_CTTZ_ZERO_UNDEF, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_FADD \p Op0, \p Op1
+  MachineInstrBuilder buildFAdd(const DstOp &Dst, const SrcOp &Src0,
+                                const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_FADD, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert \p Res = G_FSUB \p Op0, \p Op1
+  MachineInstrBuilder buildFSub(const DstOp &Dst, const SrcOp &Src0,
+                                const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_FSUB, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert \p Res = G_FMA \p Op0, \p Op1, \p Op2
+  MachineInstrBuilder buildFMA(const DstOp &Dst, const SrcOp &Src0,
+                               const SrcOp &Src1, const SrcOp &Src2) {
+    return buildInstr(TargetOpcode::G_FMA, {Dst}, {Src0, Src1, Src2});
+  }
+
+  /// Build and insert \p Res = G_FNEG \p Op0
+  MachineInstrBuilder buildFNeg(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_FNEG, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_FABS \p Op0
+  MachineInstrBuilder buildFAbs(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_FABS, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_FCOPYSIGN \p Op0, \p Op1
+  MachineInstrBuilder buildFCopysign(const DstOp &Dst, const SrcOp &Src0,
+                                     const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_FCOPYSIGN, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert \p Res = G_UITOFP \p Src0
+  MachineInstrBuilder buildUITOFP(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_UITOFP, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_SITOFP \p Src0
+  MachineInstrBuilder buildSITOFP(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_SITOFP, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_FPTOUI \p Src0
+  MachineInstrBuilder buildFPTOUI(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_FPTOUI, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_FPTOSI \p Src0
+  MachineInstrBuilder buildFPTOSI(const DstOp &Dst, const SrcOp &Src0) {
+    return buildInstr(TargetOpcode::G_FPTOSI, {Dst}, {Src0});
+  }
+
+  /// Build and insert \p Res = G_SMIN \p Op0, \p Op1
+  MachineInstrBuilder buildSMin(const DstOp &Dst, const SrcOp &Src0,
+                                const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_SMIN, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert \p Res = G_SMAX \p Op0, \p Op1
+  MachineInstrBuilder buildSMax(const DstOp &Dst, const SrcOp &Src0,
+                                const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_SMAX, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert \p Res = G_UMIN \p Op0, \p Op1
+  MachineInstrBuilder buildUMin(const DstOp &Dst, const SrcOp &Src0,
+                                const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_UMIN, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert \p Res = G_UMAX \p Op0, \p Op1
+  MachineInstrBuilder buildUMax(const DstOp &Dst, const SrcOp &Src0,
+                                const SrcOp &Src1) {
+    return buildInstr(TargetOpcode::G_UMAX, {Dst}, {Src0, Src1});
+  }
+
+  /// Build and insert \p Res = G_JUMP_TABLE \p JTI
+  ///
+  /// G_JUMP_TABLE sets \p Res to the address of the jump table specified by
+  /// the jump table index \p JTI.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildJumpTable(const LLT PtrTy, unsigned JTI);
+
   virtual MachineInstrBuilder buildInstr(unsigned Opc, ArrayRef<DstOp> DstOps,
                                          ArrayRef<SrcOp> SrcOps,
                                          Optional<unsigned> Flags = None);
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegBankSelect.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegBankSelect.h
index c31ca5c..d9d076b 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegBankSelect.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegBankSelect.h
@@ -523,7 +523,7 @@
   /// \p OnlyAssign == true means that \p Reg just needs to be assigned a
   /// register bank.  I.e., no repairing is necessary to have the
   /// assignment match.
-  bool assignmentMatch(unsigned Reg,
+  bool assignmentMatch(Register Reg,
                        const RegisterBankInfo::ValueMapping &ValMapping,
                        bool &OnlyAssign) const;
 
@@ -562,7 +562,7 @@
   bool repairReg(MachineOperand &MO,
                  const RegisterBankInfo::ValueMapping &ValMapping,
                  RegBankSelect::RepairingPlacement &RepairPt,
-                 const iterator_range<SmallVectorImpl<unsigned>::const_iterator>
+                 const iterator_range<SmallVectorImpl<Register>::const_iterator>
                      &NewVRegs);
 
   /// Return the cost of the instruction needed to map \p MO to \p ValMapping.
@@ -633,6 +633,11 @@
         MachineFunctionProperties::Property::RegBankSelected);
   }
 
+  MachineFunctionProperties getClearedProperties() const override {
+    return MachineFunctionProperties()
+      .set(MachineFunctionProperties::Property::NoPHIs);
+  }
+
   /// Walk through \p MF and assign a register bank to every virtual register
   /// that are still mapped to nothing.
   /// The target needs to provide a RegisterBankInfo and in particular
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h
index 37a63d1..e84b1c3 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h
@@ -18,6 +18,7 @@
 #include "llvm/ADT/Hashing.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/iterator_range.h"
+#include "llvm/CodeGen/Register.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cassert>
 #include <initializer_list>
@@ -193,7 +194,7 @@
     unsigned Cost = 0;
 
     /// Mapping of all the operands.
-    const ValueMapping *OperandsMapping;
+    const ValueMapping *OperandsMapping = nullptr;
 
     /// Number of operands.
     unsigned NumOperands = 0;
@@ -210,15 +211,11 @@
     /// The rationale is that it is more efficient for the optimizers
     /// to be able to assume that the mapping of the ith operand is
     /// at the index i.
-    ///
-    /// \pre ID != InvalidMappingID
     InstructionMapping(unsigned ID, unsigned Cost,
                        const ValueMapping *OperandsMapping,
                        unsigned NumOperands)
         : ID(ID), Cost(Cost), OperandsMapping(OperandsMapping),
           NumOperands(NumOperands) {
-      assert(getID() != InvalidMappingID &&
-             "Use the default constructor for invalid mapping");
     }
 
     /// Default constructor.
@@ -285,7 +282,7 @@
     SmallVector<int, 8> OpToNewVRegIdx;
 
     /// Hold the registers that will be used to map MI with InstrMapping.
-    SmallVector<unsigned, 8> NewVRegs;
+    SmallVector<Register, 8> NewVRegs;
 
     /// Current MachineRegisterInfo, used to create new virtual registers.
     MachineRegisterInfo &MRI;
@@ -306,15 +303,15 @@
     /// \return The iterator range for the space created.
     //
     /// \pre getMI().getOperand(OpIdx).isReg()
-    iterator_range<SmallVectorImpl<unsigned>::iterator>
+    iterator_range<SmallVectorImpl<Register>::iterator>
     getVRegsMem(unsigned OpIdx);
 
     /// Get the end iterator for a range starting at \p StartIdx and
     /// spannig \p NumVal in NewVRegs.
     /// \pre StartIdx + NumVal <= NewVRegs.size()
-    SmallVectorImpl<unsigned>::const_iterator
+    SmallVectorImpl<Register>::const_iterator
     getNewVRegsEnd(unsigned StartIdx, unsigned NumVal) const;
-    SmallVectorImpl<unsigned>::iterator getNewVRegsEnd(unsigned StartIdx,
+    SmallVectorImpl<Register>::iterator getNewVRegsEnd(unsigned StartIdx,
                                                        unsigned NumVal);
 
   public:
@@ -360,7 +357,7 @@
     ///
     /// \post the \p PartialMapIdx-th register of the value mapping of the \p
     /// OpIdx-th operand has been set.
-    void setVRegs(unsigned OpIdx, unsigned PartialMapIdx, unsigned NewVReg);
+    void setVRegs(unsigned OpIdx, unsigned PartialMapIdx, Register NewVReg);
 
     /// Get all the virtual registers required to map the \p OpIdx-th operand of
     /// the instruction.
@@ -374,7 +371,7 @@
     ///
     /// \pre getMI().getOperand(OpIdx).isReg()
     /// \pre ForDebug || All partial mappings have been set a register
-    iterator_range<SmallVectorImpl<unsigned>::const_iterator>
+    iterator_range<SmallVectorImpl<Register>::const_iterator>
     getVRegs(unsigned OpIdx, bool ForDebug = false) const;
 
     /// Print this operands mapper on dbgs() stream.
@@ -438,7 +435,7 @@
   /// Get the MinimalPhysRegClass for Reg.
   /// \pre Reg is a physical register.
   const TargetRegisterClass &
-  getMinimalPhysRegClass(unsigned Reg, const TargetRegisterInfo &TRI) const;
+  getMinimalPhysRegClass(Register Reg, const TargetRegisterInfo &TRI) const;
 
   /// Try to get the mapping of \p MI.
   /// See getInstrMapping for more details on what a mapping represents.
@@ -583,7 +580,7 @@
   /// or a register bank, then this returns nullptr.
   ///
   /// \pre Reg != 0 (NoRegister)
-  const RegisterBank *getRegBank(unsigned Reg, const MachineRegisterInfo &MRI,
+  const RegisterBank *getRegBank(Register Reg, const MachineRegisterInfo &MRI,
                                  const TargetRegisterInfo &TRI) const;
 
   /// Get the total number of register banks.
@@ -621,6 +618,12 @@
     return &A != &B;
   }
 
+  /// \returns true if emitting a copy from \p Src to \p Dst is impossible.
+  bool cannotCopy(const RegisterBank &Dst, const RegisterBank &Src,
+                  unsigned Size) const {
+    return copyCost(Dst, Src, Size) == std::numeric_limits<unsigned>::max();
+  }
+
   /// Get the cost of using \p ValMapping to decompose a register. This is
   /// similar to ::copyCost, except for cases where multiple copy-like
   /// operations need to be inserted. If the register is used as a source
@@ -638,7 +641,7 @@
   /// \note Use MachineRegisterInfo::constrainRegAttrs instead for any non-isel
   /// purpose, including non-select passes of GlobalISel
   static const TargetRegisterClass *
-  constrainGenericRegister(unsigned Reg, const TargetRegisterClass &RC,
+  constrainGenericRegister(Register Reg, const TargetRegisterClass &RC,
                            MachineRegisterInfo &MRI);
 
   /// Identifier used when the related instruction mapping instance
@@ -723,7 +726,7 @@
   /// virtual register.
   ///
   /// \pre \p Reg != 0 (NoRegister).
-  unsigned getSizeInBits(unsigned Reg, const MachineRegisterInfo &MRI,
+  unsigned getSizeInBits(Register Reg, const MachineRegisterInfo &MRI,
                          const TargetRegisterInfo &TRI) const;
 
   /// Check that information hold by this instance make sense for the
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h
index dd14a0c..6946aad 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h
@@ -15,6 +15,7 @@
 #define LLVM_CODEGEN_GLOBALISEL_UTILS_H
 
 #include "llvm/ADT/StringRef.h"
+#include "llvm/CodeGen/Register.h"
 
 namespace llvm {
 
@@ -36,21 +37,37 @@
 class APFloat;
 
 /// Try to constrain Reg to the specified register class. If this fails,
-/// create a new virtual register in the correct class and insert a COPY before
-/// \p InsertPt. The debug location of \p InsertPt is used for the new copy.
+/// create a new virtual register in the correct class.
 ///
 /// \return The virtual register constrained to the right register class.
 unsigned constrainRegToClass(MachineRegisterInfo &MRI,
                              const TargetInstrInfo &TII,
-                             const RegisterBankInfo &RBI,
-                             MachineInstr &InsertPt, unsigned Reg,
+                             const RegisterBankInfo &RBI, unsigned Reg,
                              const TargetRegisterClass &RegClass);
 
+/// Constrain the Register operand OpIdx, so that it is now constrained to the
+/// TargetRegisterClass passed as an argument (RegClass).
+/// If this fails, create a new virtual register in the correct class and
+/// insert a COPY before \p InsertPt if it is a use or after if it is a
+/// definition. The debug location of \p InsertPt is used for the new copy.
+///
+/// \return The virtual register constrained to the right register class.
+unsigned constrainOperandRegClass(const MachineFunction &MF,
+                                  const TargetRegisterInfo &TRI,
+                                  MachineRegisterInfo &MRI,
+                                  const TargetInstrInfo &TII,
+                                  const RegisterBankInfo &RBI,
+                                  MachineInstr &InsertPt,
+                                  const TargetRegisterClass &RegClass,
+                                  const MachineOperand &RegMO, unsigned OpIdx);
+
 /// Try to constrain Reg so that it is usable by argument OpIdx of the
 /// provided MCInstrDesc \p II. If this fails, create a new virtual
-/// register in the correct class and insert a COPY before \p InsertPt.
-/// This is equivalent to constrainRegToClass() with RegClass obtained from the
-/// MCInstrDesc. The debug location of \p InsertPt is used for the new copy.
+/// register in the correct class and insert a COPY before \p InsertPt
+/// if it is a use or after if it is a definition.
+/// This is equivalent to constrainOperandRegClass(..., RegClass, ...)
+/// with RegClass obtained from the MCInstrDesc. The debug location of \p
+/// InsertPt is used for the new copy.
 ///
 /// \return The virtual register constrained to the right register class.
 unsigned constrainOperandRegClass(const MachineFunction &MF,
@@ -89,17 +106,40 @@
                         const char *PassName, StringRef Msg,
                         const MachineInstr &MI);
 
+/// If \p VReg is defined by a G_CONSTANT fits in int64_t
+/// returns it.
 Optional<int64_t> getConstantVRegVal(unsigned VReg,
                                      const MachineRegisterInfo &MRI);
+/// Simple struct used to hold a constant integer value and a virtual
+/// register.
+struct ValueAndVReg {
+  int64_t Value;
+  unsigned VReg;
+};
+/// If \p VReg is defined by a statically evaluable chain of
+/// instructions rooted on a G_CONSTANT (\p LookThroughInstrs == true)
+/// and that constant fits in int64_t, returns its value as well as
+/// the virtual register defined by this G_CONSTANT.
+/// When \p LookThroughInstrs == false, this function behaves like
+/// getConstantVRegVal.
+Optional<ValueAndVReg>
+getConstantVRegValWithLookThrough(unsigned VReg, const MachineRegisterInfo &MRI,
+                                  bool LookThroughInstrs = true);
 const ConstantFP* getConstantFPVRegVal(unsigned VReg,
                                        const MachineRegisterInfo &MRI);
 
 /// See if Reg is defined by an single def instruction that is
 /// Opcode. Also try to do trivial folding if it's a COPY with
 /// same types. Returns null otherwise.
-MachineInstr *getOpcodeDef(unsigned Opcode, unsigned Reg,
+MachineInstr *getOpcodeDef(unsigned Opcode, Register Reg,
                            const MachineRegisterInfo &MRI);
 
+/// Find the def instruction for \p Reg, folding away any trivial copies. Note
+/// it may still return a COPY, if it changes the type. May return nullptr if \p
+/// Reg is not a generic virtual register.
+MachineInstr *getDefIgnoringCopies(Register Reg,
+                                   const MachineRegisterInfo &MRI);
+
 /// Returns an APFloat from Val converted to the appropriate size.
 APFloat getAPFloatFromSize(double Val, unsigned Size);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h b/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h
index ed4bfe7..acf27dc 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h
@@ -278,6 +278,11 @@
     /// multiplication on 2 integers.
     SMULFIX, UMULFIX,
 
+    /// Same as the corresponding unsaturated fixed point instructions, but the
+    /// result is clamped between the min and max values representable by the
+    /// bits of the first 2 operands.
+    SMULFIXSAT,
+
     /// Simple binary floating point operators.
     FADD, FSUB, FMUL, FDIV, FREM,
 
@@ -297,6 +302,26 @@
     STRICT_FRINT, STRICT_FNEARBYINT, STRICT_FMAXNUM, STRICT_FMINNUM,
     STRICT_FCEIL, STRICT_FFLOOR, STRICT_FROUND, STRICT_FTRUNC,
 
+    /// X = STRICT_FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating 
+    /// point type down to the precision of the destination VT.  TRUNC is a 
+    /// flag, which is always an integer that is zero or one.  If TRUNC is 0,
+    /// this is a normal rounding, if it is 1, this FP_ROUND is known to not
+    /// change the value of Y.
+    ///
+    /// The TRUNC = 1 case is used in cases where we know that the value will
+    /// not be modified by the node, because Y is not using any of the extra
+    /// precision of source type.  This allows certain transformations like
+    /// STRICT_FP_EXTEND(STRICT_FP_ROUND(X,1)) -> X which are not safe for
+    /// STRICT_FP_EXTEND(STRICT_FP_ROUND(X,0)) because the extra bits aren't
+    /// removed.
+    /// It is used to limit optimizations while the DAG is being optimized.
+    STRICT_FP_ROUND,
+
+    /// X = STRICT_FP_EXTEND(Y) - Extend a smaller FP type into a larger FP
+    /// type.
+    /// It is used to limit optimizations while the DAG is being optimized.
+    STRICT_FP_EXTEND,
+
     /// FMA - Perform a * b + c with no intermediate rounding step.
     FMA,
 
@@ -585,6 +610,8 @@
     FNEG, FABS, FSQRT, FCBRT, FSIN, FCOS, FPOWI, FPOW,
     FLOG, FLOG2, FLOG10, FEXP, FEXP2,
     FCEIL, FTRUNC, FRINT, FNEARBYINT, FROUND, FFLOOR,
+    LROUND, LLROUND, LRINT, LLRINT,
+
     /// FMINNUM/FMAXNUM - Perform floating-point minimum or maximum on two
     /// values.
     //
@@ -872,11 +899,14 @@
     VECREDUCE_STRICT_FADD, VECREDUCE_STRICT_FMUL,
     /// These reductions are non-strict, and have a single vector operand.
     VECREDUCE_FADD, VECREDUCE_FMUL,
+    /// FMIN/FMAX nodes can have flags, for NaN/NoNaN variants.
+    VECREDUCE_FMAX, VECREDUCE_FMIN,
+    /// Integer reductions may have a result type larger than the vector element
+    /// type. However, the reduction is performed using the vector element type
+    /// and the value in the top bits is unspecified.
     VECREDUCE_ADD, VECREDUCE_MUL,
     VECREDUCE_AND, VECREDUCE_OR, VECREDUCE_XOR,
     VECREDUCE_SMAX, VECREDUCE_SMIN, VECREDUCE_UMAX, VECREDUCE_UMIN,
-    /// FMIN/FMAX nodes can have flags, for NaN/NoNaN variants.
-    VECREDUCE_FMAX, VECREDUCE_FMIN,
 
     /// BUILTIN_OP_END - This must be the last enum value in this list.
     /// The target-specific pre-isel opcode values start here.
diff --git a/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h b/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h
index 622c124..8bb8816 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h
@@ -605,6 +605,44 @@
     /// activated in the constructor of the live range.
     void flushSegmentSet();
 
+    /// Stores indexes from the input index sequence R at which this LiveRange
+    /// is live to the output O iterator.
+    /// R is a range of _ascending sorted_ _random_ access iterators
+    /// to the input indexes. Indexes stored at O are ascending sorted so it
+    /// can be used directly in the subsequent search (for example for
+    /// subranges). Returns true if found at least one index.
+    template <typename Range, typename OutputIt>
+    bool findIndexesLiveAt(Range &&R, OutputIt O) const {
+      assert(std::is_sorted(R.begin(), R.end()));
+      auto Idx = R.begin(), EndIdx = R.end();
+      auto Seg = segments.begin(), EndSeg = segments.end();
+      bool Found = false;
+      while (Idx != EndIdx && Seg != EndSeg) {
+        // if the Seg is lower find first segment that is above Idx using binary
+        // search
+        if (Seg->end <= *Idx) {
+          Seg = std::upper_bound(++Seg, EndSeg, *Idx,
+            [=](typename std::remove_reference<decltype(*Idx)>::type V,
+                const typename std::remove_reference<decltype(*Seg)>::type &S) {
+              return V < S.end;
+            });
+          if (Seg == EndSeg)
+            break;
+        }
+        auto NotLessStart = std::lower_bound(Idx, EndIdx, Seg->start);
+        if (NotLessStart == EndIdx)
+          break;
+        auto NotLessEnd = std::lower_bound(NotLessStart, EndIdx, Seg->end);
+        if (NotLessEnd != NotLessStart) {
+          Found = true;
+          O = std::copy(NotLessStart, NotLessEnd, O);
+        }
+        Idx = NotLessEnd;
+        ++Seg;
+      }
+      return Found;
+    }
+
     void print(raw_ostream &OS) const;
     void dump() const;
 
@@ -789,8 +827,15 @@
     ///    L000F, refining for mask L0018. Will split the L00F0 lane into
     ///    L00E0 and L0010 and the L000F lane into L0007 and L0008. The Mod
     ///    function will be applied to the L0010 and L0008 subranges.
+    ///
+    /// \p Indexes and \p TRI are required to clean up the VNIs that
+    /// don't defne the related lane masks after they get shrunk. E.g.,
+    /// when L000F gets split into L0007 and L0008 maybe only a subset
+    /// of the VNIs that defined L000F defines L0007.
     void refineSubRanges(BumpPtrAllocator &Allocator, LaneBitmask LaneMask,
-                         std::function<void(LiveInterval::SubRange&)> Apply);
+                         std::function<void(LiveInterval::SubRange &)> Apply,
+                         const SlotIndexes &Indexes,
+                         const TargetRegisterInfo &TRI);
 
     bool operator<(const LiveInterval& other) const {
       const SlotIndex &thisIndex = beginIndex();
diff --git a/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h b/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h
index d0791be..588b0f9 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h
@@ -417,6 +417,15 @@
       RegUnitRanges[Unit] = nullptr;
     }
 
+    /// Remove associated live ranges for the register units associated with \p
+    /// Reg. Subsequent uses should rely on on-demand recomputation.  \note This
+    /// method can result in inconsistent liveness tracking if multiple phyical
+    /// registers share a regunit, and should be used cautiously.
+    void removeAllRegUnitsForPhysReg(unsigned Reg) {
+      for (MCRegUnitIterator Units(Reg, TRI); Units.isValid(); ++Units)
+        removeRegUnit(*Units);
+    }
+
     /// Remove value numbers and related live segments starting at position
     /// \p Pos that are part of any liverange of physical register \p Reg or one
     /// of its subregisters.
diff --git a/linux-x64/clang/include/llvm/CodeGen/MIRParser/MIParser.h b/linux-x64/clang/include/llvm/CodeGen/MIRParser/MIParser.h
new file mode 100644
index 0000000..4e32a04
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/MIRParser/MIParser.h
@@ -0,0 +1,233 @@
+//===- MIParser.h - Machine Instructions Parser -----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the function that parses the machine instructions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_CODEGEN_MIRPARSER_MIPARSER_H
+#define LLVM_LIB_CODEGEN_MIRPARSER_MIPARSER_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/CodeGen/MachineMemOperand.h"
+#include "llvm/Support/Allocator.h"
+
+namespace llvm {
+
+class MachineBasicBlock;
+class MachineFunction;
+class MDNode;
+class RegisterBank;
+struct SlotMapping;
+class SMDiagnostic;
+class SourceMgr;
+class StringRef;
+class TargetRegisterClass;
+class TargetSubtargetInfo;
+
+struct VRegInfo {
+  enum uint8_t {
+    UNKNOWN, NORMAL, GENERIC, REGBANK
+  } Kind = UNKNOWN;
+  bool Explicit = false; ///< VReg was explicitly specified in the .mir file.
+  union {
+    const TargetRegisterClass *RC;
+    const RegisterBank *RegBank;
+  } D;
+  unsigned VReg;
+  unsigned PreferredReg = 0;
+};
+
+using Name2RegClassMap = StringMap<const TargetRegisterClass *>;
+using Name2RegBankMap = StringMap<const RegisterBank *>;
+
+struct PerTargetMIParsingState {
+private:
+  const TargetSubtargetInfo &Subtarget;
+
+  /// Maps from instruction names to op codes.
+  StringMap<unsigned> Names2InstrOpCodes;
+
+  /// Maps from register names to registers.
+  StringMap<unsigned> Names2Regs;
+
+  /// Maps from register mask names to register masks.
+  StringMap<const uint32_t *> Names2RegMasks;
+
+  /// Maps from subregister names to subregister indices.
+  StringMap<unsigned> Names2SubRegIndices;
+
+  /// Maps from target index names to target indices.
+  StringMap<int> Names2TargetIndices;
+
+  /// Maps from direct target flag names to the direct target flag values.
+  StringMap<unsigned> Names2DirectTargetFlags;
+
+  /// Maps from direct target flag names to the bitmask target flag values.
+  StringMap<unsigned> Names2BitmaskTargetFlags;
+
+  /// Maps from MMO target flag names to MMO target flag values.
+  StringMap<MachineMemOperand::Flags> Names2MMOTargetFlags;
+
+  /// Maps from register class names to register classes.
+  Name2RegClassMap Names2RegClasses;
+
+  /// Maps from register bank names to register banks.
+  Name2RegBankMap Names2RegBanks;
+
+  void initNames2InstrOpCodes();
+  void initNames2Regs();
+  void initNames2RegMasks();
+  void initNames2SubRegIndices();
+  void initNames2TargetIndices();
+  void initNames2DirectTargetFlags();
+  void initNames2BitmaskTargetFlags();
+  void initNames2MMOTargetFlags();
+
+  void initNames2RegClasses();
+  void initNames2RegBanks();
+
+public:
+  /// Try to convert an instruction name to an opcode. Return true if the
+  /// instruction name is invalid.
+  bool parseInstrName(StringRef InstrName, unsigned &OpCode);
+
+  /// Try to convert a register name to a register number. Return true if the
+  /// register name is invalid.
+  bool getRegisterByName(StringRef RegName, unsigned &Reg);
+
+  /// Check if the given identifier is a name of a register mask.
+  ///
+  /// Return null if the identifier isn't a register mask.
+  const uint32_t *getRegMask(StringRef Identifier);
+
+  /// Check if the given identifier is a name of a subregister index.
+  ///
+  /// Return 0 if the name isn't a subregister index class.
+  unsigned getSubRegIndex(StringRef Name);
+
+  /// Try to convert a name of target index to the corresponding target index.
+  ///
+  /// Return true if the name isn't a name of a target index.
+  bool getTargetIndex(StringRef Name, int &Index);
+
+  /// Try to convert a name of a direct target flag to the corresponding
+  /// target flag.
+  ///
+  /// Return true if the name isn't a name of a direct flag.
+  bool getDirectTargetFlag(StringRef Name, unsigned &Flag);
+
+  /// Try to convert a name of a bitmask target flag to the corresponding
+  /// target flag.
+  ///
+  /// Return true if the name isn't a name of a bitmask target flag.
+  bool getBitmaskTargetFlag(StringRef Name, unsigned &Flag);
+
+  /// Try to convert a name of a MachineMemOperand target flag to the
+  /// corresponding target flag.
+  ///
+  /// Return true if the name isn't a name of a target MMO flag.
+  bool getMMOTargetFlag(StringRef Name, MachineMemOperand::Flags &Flag);
+
+  /// Check if the given identifier is a name of a register class.
+  ///
+  /// Return null if the name isn't a register class.
+  const TargetRegisterClass *getRegClass(StringRef Name);
+
+  /// Check if the given identifier is a name of a register bank.
+  ///
+  /// Return null if the name isn't a register bank.
+  const RegisterBank *getRegBank(StringRef Name);
+
+  PerTargetMIParsingState(const TargetSubtargetInfo &STI)
+    : Subtarget(STI) {
+    initNames2RegClasses();
+    initNames2RegBanks();
+  }
+
+  ~PerTargetMIParsingState() = default;
+
+  void setTarget(const TargetSubtargetInfo &NewSubtarget);
+};
+
+struct PerFunctionMIParsingState {
+  BumpPtrAllocator Allocator;
+  MachineFunction &MF;
+  SourceMgr *SM;
+  const SlotMapping &IRSlots;
+  PerTargetMIParsingState &Target;
+
+  DenseMap<unsigned, MachineBasicBlock *> MBBSlots;
+  DenseMap<unsigned, VRegInfo *> VRegInfos;
+  StringMap<VRegInfo *> VRegInfosNamed;
+  DenseMap<unsigned, int> FixedStackObjectSlots;
+  DenseMap<unsigned, int> StackObjectSlots;
+  DenseMap<unsigned, unsigned> ConstantPoolSlots;
+  DenseMap<unsigned, unsigned> JumpTableSlots;
+
+  PerFunctionMIParsingState(MachineFunction &MF, SourceMgr &SM,
+                            const SlotMapping &IRSlots,
+                            PerTargetMIParsingState &Target);
+
+  VRegInfo &getVRegInfo(unsigned Num);
+  VRegInfo &getVRegInfoNamed(StringRef RegName);
+};
+
+/// Parse the machine basic block definitions, and skip the machine
+/// instructions.
+///
+/// This function runs the first parsing pass on the machine function's body.
+/// It parses only the machine basic block definitions and creates the machine
+/// basic blocks in the given machine function.
+///
+/// The machine instructions aren't parsed during the first pass because all
+/// the machine basic blocks aren't defined yet - this makes it impossible to
+/// resolve the machine basic block references.
+///
+/// Return true if an error occurred.
+bool parseMachineBasicBlockDefinitions(PerFunctionMIParsingState &PFS,
+                                       StringRef Src, SMDiagnostic &Error);
+
+/// Parse the machine instructions.
+///
+/// This function runs the second parsing pass on the machine function's body.
+/// It skips the machine basic block definitions and parses only the machine
+/// instructions and basic block attributes like liveins and successors.
+///
+/// The second parsing pass assumes that the first parsing pass already ran
+/// on the given source string.
+///
+/// Return true if an error occurred.
+bool parseMachineInstructions(PerFunctionMIParsingState &PFS, StringRef Src,
+                              SMDiagnostic &Error);
+
+bool parseMBBReference(PerFunctionMIParsingState &PFS,
+                       MachineBasicBlock *&MBB, StringRef Src,
+                       SMDiagnostic &Error);
+
+bool parseRegisterReference(PerFunctionMIParsingState &PFS,
+                            unsigned &Reg, StringRef Src,
+                            SMDiagnostic &Error);
+
+bool parseNamedRegisterReference(PerFunctionMIParsingState &PFS, unsigned &Reg,
+                                 StringRef Src, SMDiagnostic &Error);
+
+bool parseVirtualRegisterReference(PerFunctionMIParsingState &PFS,
+                                   VRegInfo *&Info, StringRef Src,
+                                   SMDiagnostic &Error);
+
+bool parseStackObjectReference(PerFunctionMIParsingState &PFS, int &FI,
+                               StringRef Src, SMDiagnostic &Error);
+
+bool parseMDNode(PerFunctionMIParsingState &PFS, MDNode *&Node, StringRef Src,
+                 SMDiagnostic &Error);
+
+} // end namespace llvm
+
+#endif // LLVM_LIB_CODEGEN_MIRPARSER_MIPARSER_H
diff --git a/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h b/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h
index b95cf0f..a4b03a7 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h
@@ -1,4 +1,4 @@
-//===- MIRPrinter.h - MIR serialization format printer --------------------===//
+//===- MIRPrinter.h - MIR serialization format printer ----------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
diff --git a/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h b/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h
index b600ec9..94e76a7 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h
@@ -1,4 +1,4 @@
-//===- MIRYamlMapping.h - Describes the mapping between MIR and YAML ------===//
+//===- MIRYamlMapping.h - Describe mapping between MIR and YAML--*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -17,6 +17,7 @@
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/CodeGen/MachineJumpTableInfo.h"
+#include "llvm/CodeGen/TargetFrameLowering.h"
 #include "llvm/Support/SMLoc.h"
 #include "llvm/Support/YAMLTraits.h"
 #include "llvm/Support/raw_ostream.h"
@@ -36,6 +37,7 @@
 
   StringValue() = default;
   StringValue(std::string Value) : Value(std::move(Value)) {}
+  StringValue(const char Val[]) : Value(Val) {}
 
   bool operator==(const StringValue &Other) const {
     return Value == Other.Value;
@@ -211,7 +213,7 @@
   int64_t Offset = 0;
   uint64_t Size = 0;
   unsigned Alignment = 0;
-  uint8_t StackID = 0;
+  TargetStackID::Value StackID;
   StringValue CalleeSavedRegister;
   bool CalleeSavedRestored = true;
   Optional<int64_t> LocalOffset;
@@ -251,7 +253,7 @@
     if (Object.Type != MachineStackObject::VariableSized)
       YamlIO.mapRequired("size", Object.Size);
     YamlIO.mapOptional("alignment", Object.Alignment, (unsigned)0);
-    YamlIO.mapOptional("stack-id", Object.StackID);
+    YamlIO.mapOptional("stack-id", Object.StackID, TargetStackID::Default);
     YamlIO.mapOptional("callee-saved-register", Object.CalleeSavedRegister,
                        StringValue()); // Don't print it out when it's empty.
     YamlIO.mapOptional("callee-saved-restored", Object.CalleeSavedRestored,
@@ -277,7 +279,7 @@
   int64_t Offset = 0;
   uint64_t Size = 0;
   unsigned Alignment = 0;
-  uint8_t StackID = 0;
+  TargetStackID::Value StackID;
   bool IsImmutable = false;
   bool IsAliased = false;
   StringValue CalleeSavedRegister;
@@ -307,6 +309,15 @@
   }
 };
 
+template <>
+struct ScalarEnumerationTraits<TargetStackID::Value> {
+  static void enumeration(yaml::IO &IO, TargetStackID::Value &ID) {
+    IO.enumCase(ID, "default", TargetStackID::Default);
+    IO.enumCase(ID, "sgpr-spill", TargetStackID::SGPRSpill);
+    IO.enumCase(ID, "noalloc", TargetStackID::NoAlloc);
+  }
+};
+
 template <> struct MappingTraits<FixedMachineStackObject> {
   static void mapping(yaml::IO &YamlIO, FixedMachineStackObject &Object) {
     YamlIO.mapRequired("id", Object.ID);
@@ -316,7 +327,7 @@
     YamlIO.mapOptional("offset", Object.Offset, (int64_t)0);
     YamlIO.mapOptional("size", Object.Size, (uint64_t)0);
     YamlIO.mapOptional("alignment", Object.Alignment, (unsigned)0);
-    YamlIO.mapOptional("stack-id", Object.StackID);
+    YamlIO.mapOptional("stack-id", Object.StackID, TargetStackID::Default);
     if (Object.Type != FixedMachineStackObject::SpillSlot) {
       YamlIO.mapOptional("isImmutable", Object.IsImmutable, false);
       YamlIO.mapOptional("isAliased", Object.IsAliased, false);
@@ -336,6 +347,66 @@
   static const bool flow = true;
 };
 
+
+/// Serializable representation of CallSiteInfo.
+struct CallSiteInfo {
+  // Representation of call argument and register which is used to
+  // transfer it.
+  struct ArgRegPair {
+    StringValue Reg;
+    uint16_t ArgNo;
+
+    bool operator==(const ArgRegPair &Other) const {
+      return Reg == Other.Reg && ArgNo == Other.ArgNo;
+    }
+  };
+
+  /// Identifies call instruction location in machine function.
+  struct MachineInstrLoc {
+    unsigned BlockNum;
+    unsigned Offset;
+
+    bool operator==(const MachineInstrLoc &Other) const {
+      return BlockNum == Other.BlockNum && Offset == Other.Offset;
+    }
+  };
+
+  MachineInstrLoc CallLocation;
+  std::vector<ArgRegPair> ArgForwardingRegs;
+
+  bool operator==(const CallSiteInfo &Other) const {
+    return CallLocation.BlockNum == Other.CallLocation.BlockNum &&
+           CallLocation.Offset == Other.CallLocation.Offset;
+  }
+};
+
+template <> struct MappingTraits<CallSiteInfo::ArgRegPair> {
+  static void mapping(IO &YamlIO, CallSiteInfo::ArgRegPair &ArgReg) {
+    YamlIO.mapRequired("arg", ArgReg.ArgNo);
+    YamlIO.mapRequired("reg", ArgReg.Reg);
+  }
+
+  static const bool flow = true;
+};
+}
+}
+
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::CallSiteInfo::ArgRegPair)
+
+namespace llvm {
+namespace yaml {
+
+template <> struct MappingTraits<CallSiteInfo> {
+  static void mapping(IO &YamlIO, CallSiteInfo &CSInfo) {
+    YamlIO.mapRequired("bb", CSInfo.CallLocation.BlockNum);
+    YamlIO.mapRequired("offset", CSInfo.CallLocation.Offset);
+    YamlIO.mapOptional("fwdArgRegs", CSInfo.ArgForwardingRegs,
+                       std::vector<CallSiteInfo::ArgRegPair>());
+  }
+
+  static const bool flow = true;
+};
+
 struct MachineConstantPoolValue {
   UnsignedValue ID;
   StringValue Value;
@@ -390,6 +461,7 @@
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::VirtualRegisterDefinition)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::MachineStackObject)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::FixedMachineStackObject)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::CallSiteInfo)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::MachineConstantPoolValue)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::MachineJumpTable::Entry)
 
@@ -482,6 +554,20 @@
   }
 };
 
+/// Targets should override this in a way that mirrors the implementation of
+/// llvm::MachineFunctionInfo.
+struct MachineFunctionInfo {
+  virtual ~MachineFunctionInfo() {}
+  virtual void mappingImpl(IO &YamlIO) {}
+};
+
+template <> struct MappingTraits<std::unique_ptr<MachineFunctionInfo>> {
+  static void mapping(IO &YamlIO, std::unique_ptr<MachineFunctionInfo> &MFI) {
+    if (MFI)
+      MFI->mappingImpl(YamlIO);
+  }
+};
+
 struct MachineFunction {
   StringRef Name;
   unsigned Alignment = 0;
@@ -503,6 +589,8 @@
   std::vector<FixedMachineStackObject> FixedStackObjects;
   std::vector<MachineStackObject> StackObjects;
   std::vector<MachineConstantPoolValue> Constants; /// Constant pool.
+  std::unique_ptr<MachineFunctionInfo> MachineFuncInfo;
+  std::vector<CallSiteInfo> CallSitesInfo;
   MachineJumpTable JumpTableInfo;
   BlockStringValue Body;
 };
@@ -529,8 +617,11 @@
                        std::vector<FixedMachineStackObject>());
     YamlIO.mapOptional("stack", MF.StackObjects,
                        std::vector<MachineStackObject>());
+    YamlIO.mapOptional("callSites", MF.CallSitesInfo,
+                       std::vector<CallSiteInfo>());
     YamlIO.mapOptional("constants", MF.Constants,
                        std::vector<MachineConstantPoolValue>());
+    YamlIO.mapOptional("machineFunctionInfo", MF.MachineFuncInfo);
     if (!YamlIO.outputting() || !MF.JumpTableInfo.Entries.empty())
       YamlIO.mapOptional("jumpTable", MF.JumpTableInfo, MachineJumpTable());
     YamlIO.mapOptional("body", MF.Body, BlockStringValue());
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h b/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h
index 34e18ba..333d0a7 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h
@@ -114,6 +114,10 @@
   /// branch.
   bool AddressTaken = false;
 
+  /// Indicate that this basic block needs its symbol be emitted regardless of
+  /// whether the flow just falls-through to it.
+  bool LabelMustBeEmitted = false;
+
   /// Indicate that this basic block is the entry block of an EH scope, i.e.,
   /// the block that used to have a catchpad or cleanuppad instruction in the
   /// LLVM IR.
@@ -158,6 +162,13 @@
   /// branch.
   void setHasAddressTaken() { AddressTaken = true; }
 
+  /// Test whether this block must have its label emitted.
+  bool hasLabelMustBeEmitted() const { return LabelMustBeEmitted; }
+
+  /// Set this block to reflect that, regardless how we flow to it, we need
+  /// its label be emitted.
+  void setLabelMustBeEmitted() { LabelMustBeEmitted = true; }
+
   /// Return the MachineFunction containing this basic block.
   const MachineFunction *getParent() const { return xParent; }
   MachineFunction *getParent() { return xParent; }
@@ -899,11 +910,11 @@
   MachineBasicBlock::iterator I, B, E;
 
 public:
-  MachineInstrSpan(MachineBasicBlock::iterator I)
-    : MBB(*I->getParent()),
-      I(I),
-      B(I == MBB.begin() ? MBB.end() : std::prev(I)),
-      E(std::next(I)) {}
+  MachineInstrSpan(MachineBasicBlock::iterator I, MachineBasicBlock *BB)
+      : MBB(*BB), I(I), B(I == MBB.begin() ? MBB.end() : std::prev(I)),
+        E(std::next(I)) {
+    assert(I == BB->end() || I->getParent() == BB);
+  }
 
   MachineBasicBlock::iterator begin() {
     return B == MBB.end() ? MBB.begin() : std::next(B);
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h b/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h
index 402a2dc..7617351 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h
@@ -470,7 +470,10 @@
     assert(unsigned(ObjectIdx+NumFixedObjects) < Objects.size() &&
            "Invalid Object Idx!");
     Objects[ObjectIdx+NumFixedObjects].Alignment = Align;
-    ensureMaxAlignment(Align);
+
+    // Only ensure max alignment for the default stack.
+    if (getStackID(ObjectIdx) == 0)
+      ensureMaxAlignment(Align);
   }
 
   /// Return the underlying Alloca of the specified
@@ -697,6 +700,8 @@
     assert(unsigned(ObjectIdx+NumFixedObjects) < Objects.size() &&
            "Invalid Object Idx!");
     Objects[ObjectIdx+NumFixedObjects].StackID = ID;
+    // If ID > 0, MaxAlignment may now be overly conservative.
+    // If ID == 0, MaxAlignment will need to be updated separately.
   }
 
   /// Returns true if the specified index corresponds to a dead object.
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h b/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h
index 34ceb15..201c126 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h
@@ -30,11 +30,6 @@
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/CodeGen/MachineMemOperand.h"
-#include "llvm/IR/DebugLoc.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/Metadata.h"
-#include "llvm/MC/MCDwarf.h"
-#include "llvm/MC/MCSymbol.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/ArrayRecycler.h"
 #include "llvm/Support/AtomicOrdering.h"
@@ -52,6 +47,7 @@
 class BasicBlock;
 class BlockAddress;
 class DataLayout;
+class DebugLoc;
 class DIExpression;
 class DILocalVariable;
 class DILocation;
@@ -66,6 +62,7 @@
 class MachineRegisterInfo;
 class MCContext;
 class MCInstrDesc;
+class MCSymbol;
 class Pass;
 class PseudoSourceValueManager;
 class raw_ostream;
@@ -324,6 +321,10 @@
   /// CodeView label annotations.
   std::vector<std::pair<MCSymbol *, MDNode *>> CodeViewAnnotations;
 
+  /// CodeView heapallocsites.
+  std::vector<std::tuple<MCSymbol*, MCSymbol*, DIType*>>
+      CodeViewHeapAllocSites;
+
   bool CallsEHReturn = false;
   bool CallsUnwindInit = false;
   bool HasEHScopes = false;
@@ -377,9 +378,28 @@
     virtual void MF_HandleRemoval(MachineInstr &MI) = 0;
   };
 
+  /// Structure used to represent pair of argument number after call lowering
+  /// and register used to transfer that argument.
+  /// For now we support only cases when argument is transferred through one
+  /// register.
+  struct ArgRegPair {
+    unsigned Reg;
+    uint16_t ArgNo;
+    ArgRegPair(unsigned R, unsigned Arg) : Reg(R), ArgNo(Arg) {
+      assert(Arg < (1 << 16) && "Arg out of range");
+    }
+  };
+  /// Vector of call argument and its forwarding register.
+  using CallSiteInfo = SmallVector<ArgRegPair, 1>;
+  using CallSiteInfoImpl = SmallVectorImpl<ArgRegPair>;
+
 private:
   Delegate *TheDelegate = nullptr;
 
+  using CallSiteInfoMap = DenseMap<const MachineInstr *, CallSiteInfo>;
+  /// Map a call instruction to call site arguments forwarding info.
+  CallSiteInfoMap CallSitesInfo;
+
   // Callbacks for insertion and removal.
   void handleInsertion(MachineInstr &MI);
   void handleRemoval(MachineInstr &MI);
@@ -442,7 +462,6 @@
   /// getSubtarget - Return the subtarget for which this machine code is being
   /// compiled.
   const TargetSubtargetInfo &getSubtarget() const { return *STI; }
-  void setSubtarget(const TargetSubtargetInfo *ST) { STI = ST; }
 
   /// getSubtarget - This method returns a pointer to the specified type of
   /// TargetSubtargetInfo.  In debug builds, it verifies that the object being
@@ -740,6 +759,12 @@
   MachineMemOperand *getMachineMemOperand(const MachineMemOperand *MMO,
                                           const AAMDNodes &AAInfo);
 
+  /// Allocate a new MachineMemOperand by copying an existing one,
+  /// replacing the flags. MachineMemOperands are owned
+  /// by the MachineFunction and need not be explicitly deallocated.
+  MachineMemOperand *getMachineMemOperand(const MachineMemOperand *MMO,
+                                          MachineMemOperand::Flags Flags);
+
   using OperandCapacity = ArrayRecycler<MachineOperand>::Capacity;
 
   /// Allocate an array of MachineOperands. This is only intended for use by
@@ -790,10 +815,7 @@
     return FrameInstructions;
   }
 
-  LLVM_NODISCARD unsigned addFrameInst(const MCCFIInstruction &Inst) {
-    FrameInstructions.push_back(Inst);
-    return FrameInstructions.size() - 1;
-  }
+  LLVM_NODISCARD unsigned addFrameInst(const MCCFIInstruction &Inst);
 
   /// \name Exception Handling
   /// \{
@@ -912,6 +934,14 @@
     return CodeViewAnnotations;
   }
 
+  /// Record heapallocsites
+  void addCodeViewHeapAllocSite(MachineInstr *I, MDNode *MD);
+
+  ArrayRef<std::tuple<MCSymbol*, MCSymbol*, DIType*>>
+      getCodeViewHeapAllocSites() const {
+    return CodeViewHeapAllocSites;
+  }
+
   /// Return a reference to the C++ typeinfo for the current function.
   const std::vector<const GlobalValue *> &getTypeInfos() const {
     return TypeInfos;
@@ -935,6 +965,23 @@
   const VariableDbgInfoMapTy &getVariableDbgInfo() const {
     return VariableDbgInfos;
   }
+
+  void addCallArgsForwardingRegs(const MachineInstr *CallI,
+                                 CallSiteInfoImpl &&CallInfo) {
+    assert(CallI->isCall());
+    CallSitesInfo[CallI] = std::move(CallInfo);
+  }
+
+  const CallSiteInfoMap &getCallSitesInfo() const {
+    return CallSitesInfo;
+  }
+
+  /// Update call sites info by deleting entry for \p Old call instruction.
+  /// If \p New is present then transfer \p Old call info to it. This function
+  /// should be called before removing call instruction or before replacing
+  /// call instruction with new one.
+  void updateCallSiteInfo(const MachineInstr *Old,
+                          const MachineInstr *New = nullptr);
 };
 
 //===--------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h b/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h
index 4cb39c5..c82c5b1 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h
@@ -24,6 +24,7 @@
 #include "llvm/CodeGen/MachineMemOperand.h"
 #include "llvm/CodeGen/MachineOperand.h"
 #include "llvm/CodeGen/TargetOpcodes.h"
+#include "llvm/IR/DebugInfoMetadata.h"
 #include "llvm/IR/DebugLoc.h"
 #include "llvm/IR/InlineAsm.h"
 #include "llvm/MC/MCInstrDesc.h"
@@ -102,8 +103,10 @@
                                         // no unsigned wrap.
     NoSWrap      = 1 << 12,             // Instruction supports binary operator
                                         // no signed wrap.
-    IsExact      = 1 << 13              // Instruction supports division is
+    IsExact      = 1 << 13,             // Instruction supports division is
                                         // known to be exact.
+    FPExcept     = 1 << 14,             // Instruction may raise floating-point
+                                        // exceptions.
   };
 
 private:
@@ -830,6 +833,17 @@
     return mayLoad(Type) || mayStore(Type);
   }
 
+  /// Return true if this instruction could possibly raise a floating-point
+  /// exception.  This is the case if the instruction is a floating-point
+  /// instruction that can in principle raise an exception, as indicated
+  /// by the MCID::MayRaiseFPException property, *and* at the same time,
+  /// the instruction is used in a context where we expect floating-point
+  /// exceptions might be enabled, as indicated by the FPExcept MI flag.
+  bool mayRaiseFPException() const {
+    return hasProperty(MCID::MayRaiseFPException) &&
+           getFlag(MachineInstr::MIFlag::FPExcept);
+  }
+
   //===--------------------------------------------------------------------===//
   // Flags that indicate whether an instruction can be modified by a method.
   //===--------------------------------------------------------------------===//
@@ -1005,6 +1019,18 @@
       && getOperand(1).isImm();
   }
 
+  /// A DBG_VALUE is an entry value iff its debug expression contains the
+  /// DW_OP_entry_value DWARF operation.
+  bool isDebugEntryValue() const {
+    return isDebugValue() && getDebugExpression()->isEntryValue();
+  }
+
+  /// Return true if the instruction is a debug value which describes a part of
+  /// a variable as unavailable.
+  bool isUndefDebugValue() const {
+    return isDebugValue() && getOperand(0).isReg() && !getOperand(0).getReg();
+  }
+
   bool isPHI() const {
     return getOpcode() == TargetOpcode::PHI ||
            getOpcode() == TargetOpcode::G_PHI;
@@ -1016,6 +1042,8 @@
            getOpcode() == TargetOpcode::INLINEASM_BR;
   }
 
+  /// FIXME: Seems like a layering violation that the AsmDialect, which is X86
+  /// specific, be attached to a generic MachineInstr.
   bool isMSInlineAsm() const {
     return isInlineAsm() && getInlineAsmDialect() == InlineAsm::AD_Intel;
   }
@@ -1199,12 +1227,22 @@
 
   /// Wrapper for findRegisterDefOperandIdx, it returns
   /// a pointer to the MachineOperand rather than an index.
-  MachineOperand *findRegisterDefOperand(unsigned Reg, bool isDead = false,
-                                      const TargetRegisterInfo *TRI = nullptr) {
-    int Idx = findRegisterDefOperandIdx(Reg, isDead, false, TRI);
+  MachineOperand *
+  findRegisterDefOperand(unsigned Reg, bool isDead = false,
+                         bool Overlap = false,
+                         const TargetRegisterInfo *TRI = nullptr) {
+    int Idx = findRegisterDefOperandIdx(Reg, isDead, Overlap, TRI);
     return (Idx == -1) ? nullptr : &getOperand(Idx);
   }
 
+  const MachineOperand *
+  findRegisterDefOperand(unsigned Reg, bool isDead = false,
+                         bool Overlap = false,
+                         const TargetRegisterInfo *TRI = nullptr) const {
+    return const_cast<MachineInstr *>(this)->findRegisterDefOperand(
+        Reg, isDead, Overlap, TRI);
+  }
+
   /// Find the index of the first operand in the
   /// operand list that is used to represent the predicate. It returns -1 if
   /// none is found.
@@ -1366,7 +1404,7 @@
   /// @param AA Optional alias analysis, used to compare memory operands.
   /// @param Other MachineInstr to check aliasing against.
   /// @param UseTBAA Whether to pass TBAA information to alias analysis.
-  bool mayAlias(AliasAnalysis *AA, MachineInstr &Other, bool UseTBAA);
+  bool mayAlias(AliasAnalysis *AA, const MachineInstr &Other, bool UseTBAA) const;
 
   /// Return true if this instruction may have an ordered
   /// or volatile memory reference, or if the information describing the memory
@@ -1536,6 +1574,10 @@
   /// FIXME: This is not fully implemented yet.
   void setPostInstrSymbol(MachineFunction &MF, MCSymbol *Symbol);
 
+  /// Clone another MachineInstr's pre- and post- instruction symbols and
+  /// replace ours with it.
+  void cloneInstrSymbols(MachineFunction &MF, const MachineInstr &MI);
+
   /// Return the MIFlags which represent both MachineInstrs. This
   /// should be used when merging two MachineInstrs into one. This routine does
   /// not modify the MIFlags of this MachineInstr.
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h b/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h
index 4a8cd68..6d7fb72 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h
@@ -82,7 +82,7 @@
   /// Get the register for the operand index.
   /// The operand at the index should be a register (asserted by
   /// MachineOperand).
-  unsigned getReg(unsigned Idx) { return MI->getOperand(Idx).getReg(); }
+  Register getReg(unsigned Idx) const { return MI->getOperand(Idx).getReg(); }
 
   /// Add a new virtual register operand.
   const MachineInstrBuilder &addReg(unsigned RegNo, unsigned flags = 0,
@@ -287,6 +287,9 @@
       case MachineOperand::MO_GlobalAddress:
         return addGlobalAddress(Disp.getGlobal(), Disp.getOffset() + off,
                                 TargetFlags);
+      case MachineOperand::MO_BlockAddress:
+        return addBlockAddress(Disp.getBlockAddress(), Disp.getOffset() + off,
+                               TargetFlags);
     }
   }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineInstrBundle.h b/linux-x64/clang/include/llvm/CodeGen/MachineInstrBundle.h
index 9bb5b63..1810d23 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineInstrBundle.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineInstrBundle.h
@@ -61,7 +61,8 @@
     MachineBasicBlock::instr_iterator I) {
   while (I->isBundledWithSucc())
     ++I;
-  return ++I;
+  ++I;
+  return I;
 }
 
 /// Returns an iterator pointing beyond the bundle containing \p I.
@@ -69,7 +70,8 @@
     MachineBasicBlock::const_instr_iterator I) {
   while (I->isBundledWithSucc())
     ++I;
-  return ++I;
+  ++I;
+  return I;
 }
 
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h b/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h
index 12fae2f..65f7063 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h
@@ -18,8 +18,6 @@
 #include "llvm/ADT/BitmaskEnum.h"
 #include "llvm/ADT/PointerUnion.h"
 #include "llvm/CodeGen/PseudoSourceValue.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/Metadata.h"
 #include "llvm/IR/Value.h" // PointerLikeTypeTraits<Value*>
 #include "llvm/Support/AtomicOrdering.h"
 #include "llvm/Support/DataTypes.h"
@@ -222,6 +220,9 @@
   /// Return the size in bytes of the memory reference.
   uint64_t getSize() const { return Size; }
 
+  /// Return the size in bits of the memory reference.
+  uint64_t getSizeInBits() const { return Size * 8; }
+
   /// Return the minimum known alignment in bytes of the actual memory
   /// reference.
   uint64_t getAlignment() const;
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h b/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h
index 9b81dc6..4ff5c7f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h
@@ -150,6 +150,8 @@
   bool doInitialization(Module &) override;
   bool doFinalization(Module &) override;
 
+  const LLVMTargetMachine &getTarget() const { return TM; }
+
   const MCContext &getContext() const { return Context; }
   MCContext &getContext() { return Context; }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h b/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h
index ddcdc07..2152c75 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h
@@ -14,6 +14,7 @@
 #define LLVM_CODEGEN_MACHINEOPERAND_H
 
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/CodeGen/Register.h"
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/Support/DataTypes.h"
 #include "llvm/Support/LowLevelTypeImpl.h"
@@ -345,9 +346,9 @@
   //===--------------------------------------------------------------------===//
 
   /// getReg - Returns the register number.
-  unsigned getReg() const {
+  Register getReg() const {
     assert(isReg() && "This is not a register operand!");
-    return SmallContents.RegNo;
+    return Register(SmallContents.RegNo);
   }
 
   unsigned getSubReg() const {
@@ -683,6 +684,11 @@
     Contents.RegMask = RegMaskPtr;
   }
 
+  void setPredicate(unsigned Predicate) {
+    assert(isPredicate() && "Wrong MachineOperand mutator");
+    Contents.Pred = Predicate;
+  }
+
   //===--------------------------------------------------------------------===//
   // Other methods.
   //===--------------------------------------------------------------------===//
@@ -713,6 +719,10 @@
   /// ChangeToES - Replace this operand with a new external symbol operand.
   void ChangeToES(const char *SymName, unsigned char TargetFlags = 0);
 
+  /// ChangeToGA - Replace this operand with a new global address operand.
+  void ChangeToGA(const GlobalValue *GV, int64_t Offset,
+                  unsigned char TargetFlags = 0);
+
   /// ChangeToMCSymbol - Replace this operand with a new MC symbol operand.
   void ChangeToMCSymbol(MCSymbol *Sym);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h b/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
index 9a0fd56..a461a29 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
@@ -158,9 +158,10 @@
   /// (1) to filter trivial false positives or (2) to provide more context so
   /// that non-trivial false positives can be quickly detected by the user.
   bool allowExtraAnalysis(StringRef PassName) const {
-    return (MF.getFunction().getContext().getDiagnosticsOutputFile() ||
-            MF.getFunction().getContext()
-            .getDiagHandlerPtr()->isAnyRemarkEnabled(PassName));
+    return (
+        MF.getFunction().getContext().getRemarkStreamer() ||
+        MF.getFunction().getContext().getDiagHandlerPtr()->isAnyRemarkEnabled(
+            PassName));
   }
 
   /// Take a lambda that returns a remark which will be emitted.  Second
@@ -171,8 +172,11 @@
     // remarks enabled. We can't currently check whether remarks are requested
     // for the calling pass since that requires actually building the remark.
 
-    if (MF.getFunction().getContext().getDiagnosticsOutputFile() ||
-        MF.getFunction().getContext().getDiagHandlerPtr()->isAnyRemarkEnabled()) {
+    if (MF.getFunction().getContext().getRemarkStreamer() ||
+        MF.getFunction()
+            .getContext()
+            .getDiagHandlerPtr()
+            ->isAnyRemarkEnabled()) {
       auto R = RemarkBuilder();
       emit((DiagnosticInfoOptimizationBase &)R);
     }
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachinePipeliner.h b/linux-x64/clang/include/llvm/CodeGen/MachinePipeliner.h
index a30e4b9..03ca530 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachinePipeliner.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachinePipeliner.h
@@ -318,9 +318,9 @@
                               MBBVectorTy &EpilogBBs);
   void splitLifetimes(MachineBasicBlock *KernelBB, MBBVectorTy &EpilogBBs,
                       SMSchedule &Schedule);
-  void addBranches(MBBVectorTy &PrologBBs, MachineBasicBlock *KernelBB,
-                   MBBVectorTy &EpilogBBs, SMSchedule &Schedule,
-                   ValueMapTy *VRMap);
+  void addBranches(MachineBasicBlock &PreheaderBB, MBBVectorTy &PrologBBs,
+                   MachineBasicBlock *KernelBB, MBBVectorTy &EpilogBBs,
+                   SMSchedule &Schedule, ValueMapTy *VRMap);
   bool computeDelta(MachineInstr &MI, unsigned &Delta);
   void updateMemOperands(MachineInstr &NewMI, MachineInstr &OldMI,
                          unsigned Num);
@@ -463,6 +463,56 @@
 #endif
 };
 
+// 16 was selected based on the number of ProcResource kinds for all
+// existing Subtargets, so that SmallVector don't need to resize too often.
+static const int DefaultProcResSize = 16;
+
+class ResourceManager {
+private:
+  const MCSubtargetInfo *STI;
+  const MCSchedModel &SM;
+  const bool UseDFA;
+  std::unique_ptr<DFAPacketizer> DFAResources;
+  /// Each processor resource is associated with a so-called processor resource
+  /// mask. This vector allows to correlate processor resource IDs with
+  /// processor resource masks. There is exactly one element per each processor
+  /// resource declared by the scheduling model.
+  llvm::SmallVector<uint64_t, DefaultProcResSize> ProcResourceMasks;
+
+  llvm::SmallVector<uint64_t, DefaultProcResSize> ProcResourceCount;
+
+public:
+  ResourceManager(const TargetSubtargetInfo *ST)
+      : STI(ST), SM(ST->getSchedModel()), UseDFA(ST->useDFAforSMS()),
+        ProcResourceMasks(SM.getNumProcResourceKinds(), 0),
+        ProcResourceCount(SM.getNumProcResourceKinds(), 0) {
+    if (UseDFA)
+      DFAResources.reset(ST->getInstrInfo()->CreateTargetScheduleState(*ST));
+    initProcResourceVectors(SM, ProcResourceMasks);
+  }
+
+  void initProcResourceVectors(const MCSchedModel &SM,
+                               SmallVectorImpl<uint64_t> &Masks);
+  /// Check if the resources occupied by a MCInstrDesc are available in
+  /// the current state.
+  bool canReserveResources(const MCInstrDesc *MID) const;
+
+  /// Reserve the resources occupied by a MCInstrDesc and change the current
+  /// state to reflect that change.
+  void reserveResources(const MCInstrDesc *MID);
+
+  /// Check if the resources occupied by a machine instruction are available
+  /// in the current state.
+  bool canReserveResources(const MachineInstr &MI) const;
+
+  /// Reserve the resources occupied by a machine instruction and change the
+  /// current state to reflect that change.
+  void reserveResources(const MachineInstr &MI);
+
+  /// Reset the state
+  void clearResources();
+};
+
 /// This class represents the scheduled code.  The main data structure is a
 /// map from scheduled cycle to instructions.  During scheduling, the
 /// data structure explicitly represents all stages/iterations.   When
@@ -501,12 +551,11 @@
   /// Virtual register information.
   MachineRegisterInfo &MRI;
 
-  std::unique_ptr<DFAPacketizer> Resources;
+  ResourceManager ProcItinResources;
 
 public:
   SMSchedule(MachineFunction *mf)
-      : ST(mf->getSubtarget()), MRI(mf->getRegInfo()),
-        Resources(ST.getInstrInfo()->CreateTargetScheduleState(ST)) {}
+      : ST(mf->getSubtarget()), MRI(mf->getRegInfo()), ProcItinResources(&ST) {}
 
   void reset() {
     ScheduledInstrs.clear();
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h b/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h
index d25cd98..b5deed1 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -561,9 +561,14 @@
   }
 
   /// hasOneNonDBGUse - Return true if there is exactly one non-Debug
-  /// instruction using the specified register.
+  /// use of the specified register.
   bool hasOneNonDBGUse(unsigned RegNo) const;
 
+  /// hasOneNonDBGUse - Return true if there is exactly one non-Debug
+  /// instruction using the specified register. Said instruction may have
+  /// multiple uses.
+  bool hasOneNonDBGUser(unsigned RegNo) const;
+  
   /// replaceRegWith - Replace all instances of FromReg with ToReg in the
   /// machine function.  This is like llvm-level X->replaceAllUsesWith(Y),
   /// except that it also changes any definitions of the register as well.
@@ -712,12 +717,12 @@
 
   /// createVirtualRegister - Create and return a new virtual register in the
   /// function with the specified register class.
-  unsigned createVirtualRegister(const TargetRegisterClass *RegClass,
+  Register createVirtualRegister(const TargetRegisterClass *RegClass,
                                  StringRef Name = "");
 
   /// Create and return a new virtual register in the function with the same
   /// attributes as the given register.
-  unsigned cloneVirtualRegister(unsigned VReg, StringRef Name = "");
+  Register cloneVirtualRegister(Register VReg, StringRef Name = "");
 
   /// Get the low-level type of \p Reg or LLT{} if Reg is not a generic
   /// (target independent) virtual register.
@@ -732,7 +737,7 @@
 
   /// Create and return a new generic virtual register with low-level
   /// type \p Ty.
-  unsigned createGenericVirtualRegister(LLT Ty, StringRef Name = "");
+  Register createGenericVirtualRegister(LLT Ty, StringRef Name = "");
 
   /// Remove all types associated to virtual registers (after instruction
   /// selection and constraining of all generic virtual registers).
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h b/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h
index 7057998..75a334f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h
@@ -264,10 +264,6 @@
   LiveIntervals *LIS;
   std::unique_ptr<MachineSchedStrategy> SchedImpl;
 
-  /// Topo - A topological ordering for SUnits which permits fast IsReachable
-  /// and similar queries.
-  ScheduleDAGTopologicalSort Topo;
-
   /// Ordered list of DAG postprocessing steps.
   std::vector<std::unique_ptr<ScheduleDAGMutation>> Mutations;
 
@@ -291,7 +287,7 @@
   ScheduleDAGMI(MachineSchedContext *C, std::unique_ptr<MachineSchedStrategy> S,
                 bool RemoveKillFlags)
       : ScheduleDAGInstrs(*C->MF, C->MLI, RemoveKillFlags), AA(C->AA),
-        LIS(C->LIS), SchedImpl(std::move(S)), Topo(SUnits, &ExitSU) {}
+        LIS(C->LIS), SchedImpl(std::move(S)) {}
 
   // Provide a vtable anchor
   ~ScheduleDAGMI() override;
@@ -319,17 +315,6 @@
       Mutations.push_back(std::move(Mutation));
   }
 
-  /// True if an edge can be added from PredSU to SuccSU without creating
-  /// a cycle.
-  bool canAddEdge(SUnit *SuccSU, SUnit *PredSU);
-
-  /// Add a DAG edge to the given SU with the given predecessor
-  /// dependence data.
-  ///
-  /// \returns true if the edge may be added without creating a cycle OR if an
-  /// equivalent edge already existed (false indicates failure).
-  bool addEdge(SUnit *SuccSU, const SDep &PredDep);
-
   MachineBasicBlock::iterator top() const { return CurrentTop; }
   MachineBasicBlock::iterator bottom() const { return CurrentBottom; }
 
@@ -681,6 +666,10 @@
   // scheduled instruction.
   SmallVector<unsigned, 16> ReservedCycles;
 
+  // For each PIdx, stores first index into ReservedCycles that corresponds to
+  // it.
+  SmallVector<unsigned, 16> ReservedCyclesIndex;
+
 #ifndef NDEBUG
   // Remember the greatest possible stall as an upper bound on the number of
   // times we should retry the pending queue because of a hazard.
@@ -755,7 +744,11 @@
   /// cycle.
   unsigned getLatencyStallCycles(SUnit *SU);
 
-  unsigned getNextResourceCycle(unsigned PIdx, unsigned Cycles);
+  unsigned getNextResourceCycleByInstance(unsigned InstanceIndex,
+                                          unsigned Cycles);
+
+  std::pair<unsigned, unsigned> getNextResourceCycle(unsigned PIdx,
+                                                     unsigned Cycles);
 
   bool checkHazard(SUnit *SU);
 
@@ -1014,6 +1007,7 @@
 /// Callbacks from ScheduleDAGMI:
 ///   initPolicy -> initialize(DAG) -> registerRoots -> pickNode ...
 class PostGenericScheduler : public GenericSchedulerBase {
+protected:
   ScheduleDAGMI *DAG;
   SchedBoundary Top;
   SmallVector<SUnit*, 8> BotRoots;
diff --git a/linux-x64/clang/include/llvm/CodeGen/Passes.h b/linux-x64/clang/include/llvm/CodeGen/Passes.h
index c59473a..d92ee93 100644
--- a/linux-x64/clang/include/llvm/CodeGen/Passes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/Passes.h
@@ -345,8 +345,9 @@
   /// pointer or stack pointer index addressing.
   extern char &LocalStackSlotAllocationID;
 
-  /// ExpandISelPseudos - This pass expands pseudo-instructions.
-  extern char &ExpandISelPseudosID;
+  /// This pass expands pseudo-instructions, reserves registers and adjusts
+  /// machine frame information.
+  extern char &FinalizeISelID;
 
   /// UnpackMachineBundles - This pass unpack machine instruction bundles.
   extern char &UnpackMachineBundlesID;
@@ -446,6 +447,9 @@
   /// Creates CFI Instruction Inserter pass. \see CFIInstrInserter.cpp
   FunctionPass *createCFIInstrInserter();
 
+  /// Create Hardware Loop pass. \see HardwareLoops.cpp
+  FunctionPass *createHardwareLoopsPass();
+
 } // End llvm namespace
 
 #endif
diff --git a/linux-x64/clang/include/llvm/CodeGen/PseudoSourceValue.h b/linux-x64/clang/include/llvm/CodeGen/PseudoSourceValue.h
index 4920f23..4b3cc91 100644
--- a/linux-x64/clang/include/llvm/CodeGen/PseudoSourceValue.h
+++ b/linux-x64/clang/include/llvm/CodeGen/PseudoSourceValue.h
@@ -15,7 +15,6 @@
 
 #include "llvm/ADT/StringMap.h"
 #include "llvm/IR/GlobalValue.h"
-#include "llvm/IR/Value.h"
 #include "llvm/IR/ValueMap.h"
 #include <map>
 
@@ -123,7 +122,7 @@
   bool mayAlias(const MachineFrameInfo *) const override;
 };
 
-/// A specialized pseudo soruce value for holding GlobalValue values.
+/// A specialized pseudo source value for holding GlobalValue values.
 class GlobalValuePseudoSourceValue : public CallEntryPseudoSourceValue {
   const GlobalValue *GV;
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/RegAllocRegistry.h b/linux-x64/clang/include/llvm/CodeGen/RegAllocRegistry.h
index 7077aa3..9a63674 100644
--- a/linux-x64/clang/include/llvm/CodeGen/RegAllocRegistry.h
+++ b/linux-x64/clang/include/llvm/CodeGen/RegAllocRegistry.h
@@ -22,29 +22,30 @@
 
 //===----------------------------------------------------------------------===//
 ///
-/// RegisterRegAlloc class - Track the registration of register allocators.
+/// RegisterRegAllocBase class - Track the registration of register allocators.
 ///
 //===----------------------------------------------------------------------===//
-class RegisterRegAlloc : public MachinePassRegistryNode<FunctionPass *(*)()> {
+template <class SubClass>
+class RegisterRegAllocBase : public MachinePassRegistryNode<FunctionPass *(*)()> {
 public:
   using FunctionPassCtor = FunctionPass *(*)();
 
   static MachinePassRegistry<FunctionPassCtor> Registry;
 
-  RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C)
+  RegisterRegAllocBase(const char *N, const char *D, FunctionPassCtor C)
       : MachinePassRegistryNode(N, D, C) {
     Registry.Add(this);
   }
 
-  ~RegisterRegAlloc() { Registry.Remove(this); }
+  ~RegisterRegAllocBase() { Registry.Remove(this); }
 
   // Accessors.
-  RegisterRegAlloc *getNext() const {
-    return (RegisterRegAlloc *)MachinePassRegistryNode::getNext();
+  SubClass *getNext() const {
+    return static_cast<SubClass *>(MachinePassRegistryNode::getNext());
   }
 
-  static RegisterRegAlloc *getList() {
-    return (RegisterRegAlloc *)Registry.getList();
+  static SubClass *getList() {
+    return static_cast<SubClass *>(Registry.getList());
   }
 
   static FunctionPassCtor getDefault() { return Registry.getDefault(); }
@@ -56,6 +57,17 @@
   }
 };
 
+class RegisterRegAlloc : public RegisterRegAllocBase<RegisterRegAlloc> {
+public:
+  RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C)
+    : RegisterRegAllocBase(N, D, C) {}
+};
+
+/// RegisterRegAlloc's global Registry tracks allocator registration.
+template <class T>
+MachinePassRegistry<RegisterRegAlloc::FunctionPassCtor>
+RegisterRegAllocBase<T>::Registry;
+
 } // end namespace llvm
 
 #endif // LLVM_CODEGEN_REGALLOCREGISTRY_H
diff --git a/linux-x64/clang/include/llvm/CodeGen/Register.h b/linux-x64/clang/include/llvm/CodeGen/Register.h
new file mode 100644
index 0000000..907c1a9
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/Register.h
@@ -0,0 +1,60 @@
+//===-- llvm/CodeGen/Register.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_REGISTER_H
+#define LLVM_CODEGEN_REGISTER_H
+
+#include <cassert>
+
+namespace llvm {
+
+/// Wrapper class representing virtual and physical registers. Should be passed
+/// by value.
+class Register {
+  unsigned Reg;
+
+public:
+  Register(unsigned Val = 0): Reg(Val) {}
+
+  /// Return true if the specified register number is in the virtual register
+  /// namespace.
+  bool isVirtual() const {
+    return int(Reg) < 0;
+  }
+
+  /// Return true if the specified register number is in the physical register
+  /// namespace.
+  bool isPhysical() const {
+    return int(Reg) > 0;
+  }
+
+  /// Convert a virtual register number to a 0-based index. The first virtual
+  /// register in a function will get the index 0.
+  unsigned virtRegIndex() const {
+    assert(isVirtual() && "Not a virtual register");
+    return Reg & ~(1u << 31);
+  }
+
+  /// Convert a 0-based index to a virtual register number.
+  /// This is the inverse operation of VirtReg2IndexFunctor below.
+  static Register index2VirtReg(unsigned Index) {
+    return Register(Index | (1u << 31));
+  }
+
+  operator unsigned() const {
+    return Reg;
+  }
+
+  bool isValid() const {
+    return Reg != 0;
+  }
+};
+
+}
+
+#endif
diff --git a/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h b/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h
index 478ea38..9c48df8 100644
--- a/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h
+++ b/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h
@@ -157,10 +157,15 @@
   /// Returns the scavenged register.
   /// This is deprecated as it depends on the quality of the kill flags being
   /// present; Use scavengeRegisterBackwards() instead!
+  ///
+  /// If \p AllowSpill is false, fail if a spill is required to make the
+  /// register available, and return NoRegister.
   unsigned scavengeRegister(const TargetRegisterClass *RC,
-                            MachineBasicBlock::iterator I, int SPAdj);
-  unsigned scavengeRegister(const TargetRegisterClass *RegClass, int SPAdj) {
-    return scavengeRegister(RegClass, MBBI, SPAdj);
+                            MachineBasicBlock::iterator I, int SPAdj,
+                            bool AllowSpill = true);
+  unsigned scavengeRegister(const TargetRegisterClass *RegClass, int SPAdj,
+                            bool AllowSpill = true) {
+    return scavengeRegister(RegClass, MBBI, SPAdj, AllowSpill);
   }
 
   /// Make a register of the specific register class available from the current
@@ -169,9 +174,13 @@
   /// SPAdj is the stack adjustment due to call frame, it's passed along to
   /// eliminateFrameIndex().
   /// Returns the scavenged register.
+  ///
+  /// If \p AllowSpill is false, fail if a spill is required to make the
+  /// register available, and return NoRegister.
   unsigned scavengeRegisterBackwards(const TargetRegisterClass &RC,
                                      MachineBasicBlock::iterator To,
-                                     bool RestoreAfter, int SPAdj);
+                                     bool RestoreAfter, int SPAdj,
+                                     bool AllowSpill = true);
 
   /// Tell the scavenger a register is used.
   void setRegUsed(unsigned Reg, LaneBitmask LaneMask = LaneBitmask::getAll());
diff --git a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h
index 68614dd..e004f3b 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h
@@ -414,7 +414,7 @@
     /// dirty.
     void setDepthToAtLeast(unsigned NewDepth);
 
-    /// If NewDepth is greater than this node's depth value, set it to be
+    /// If NewHeight is greater than this node's height value, set it to be
     /// the new height value. This also recursively marks predecessor nodes
     /// dirty.
     void setHeightToAtLeast(unsigned NewHeight);
@@ -691,6 +691,12 @@
     std::vector<SUnit> &SUnits;
     SUnit *ExitSU;
 
+    // Have any new nodes been added?
+    bool Dirty = false;
+
+    // Outstanding added edges, that have not been applied to the ordering.
+    SmallVector<std::pair<SUnit *, SUnit *>, 16> Updates;
+
     /// Maps topological index to the node number.
     std::vector<int> Index2Node;
     /// Maps the node number to its topological index.
@@ -710,6 +716,11 @@
     /// Assigns the topological index to the node n.
     void Allocate(int n, int index);
 
+    /// Fix the ordering, by either recomputing from scratch or by applying
+    /// any outstanding updates. Uses a heuristic to estimate what will be
+    /// cheaper.
+    void FixOrder();
+
   public:
     ScheduleDAGTopologicalSort(std::vector<SUnit> &SUnits, SUnit *ExitSU);
 
@@ -734,11 +745,19 @@
     /// added from SUnit \p X to SUnit \p Y.
     void AddPred(SUnit *Y, SUnit *X);
 
+    /// Queues an update to the topological ordering to accommodate an edge to
+    /// be added from SUnit \p X to SUnit \p Y.
+    void AddPredQueued(SUnit *Y, SUnit *X);
+
     /// Updates the topological ordering to accommodate an an edge to be
     /// removed from the specified node \p N from the predecessors of the
     /// current node \p M.
     void RemovePred(SUnit *M, SUnit *N);
 
+    /// Mark the ordering as temporarily broken, after a new node has been
+    /// added.
+    void MarkDirty() { Dirty = true; }
+
     typedef std::vector<int>::iterator iterator;
     typedef std::vector<int>::const_iterator const_iterator;
     iterator begin() { return Index2Node.begin(); }
diff --git a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h
index fa7f886..3e3b604 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h
@@ -234,6 +234,11 @@
     /// For an unanalyzable memory access, this Value is used in maps.
     UndefValue *UnknownValue;
 
+
+    /// Topo - A topological ordering for SUnits which permits fast IsReachable
+    /// and similar queries.
+    ScheduleDAGTopologicalSort Topo;
+
     using DbgValueVector =
         std::vector<std::pair<MachineInstr *, MachineInstr *>>;
     /// Remember instruction that precedes DBG_VALUE.
@@ -338,6 +343,17 @@
     /// Fixes register kill flags that scheduling has made invalid.
     void fixupKills(MachineBasicBlock &MBB);
 
+    /// True if an edge can be added from PredSU to SuccSU without creating
+    /// a cycle.
+    bool canAddEdge(SUnit *SuccSU, SUnit *PredSU);
+
+    /// Add a DAG edge to the given SU with the given predecessor
+    /// dependence data.
+    ///
+    /// \returns true if the edge may be added without creating a cycle OR if an
+    /// equivalent edge already existed (false indicates failure).
+    bool addEdge(SUnit *SuccSU, const SDep &PredDep);
+
   protected:
     void initSUnits();
     void addPhysRegDataDeps(SUnit *SU, unsigned OperIdx);
diff --git a/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h b/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h
index dfd1d49..12a9708 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h
@@ -267,6 +267,10 @@
   /// Tracks dbg_value and dbg_label information through SDISel.
   SDDbgInfo *DbgInfo;
 
+  using CallSiteInfo = MachineFunction::CallSiteInfo;
+  using CallSiteInfoImpl = MachineFunction::CallSiteInfoImpl;
+  DenseMap<const SDNode *, CallSiteInfo> SDCallSiteInfo;
+
   uint16_t NextPersistentId = 0;
 
 public:
@@ -297,6 +301,9 @@
 
     /// The node N that was updated.
     virtual void NodeUpdated(SDNode *N);
+
+    /// The node N that was inserted.
+    virtual void NodeInserted(SDNode *N);
   };
 
   struct DAGNodeDeletedListener : public DAGUpdateListener {
@@ -403,6 +410,7 @@
   const TargetLowering &getTargetLoweringInfo() const { return *TLI; }
   const TargetLibraryInfo &getLibInfo() const { return *LibInfo; }
   const SelectionDAGTargetInfo &getSelectionDAGInfo() const { return *TSI; }
+  const LegacyDivergenceAnalysis *getDivergenceAnalysis() const { return DA; }
   LLVMContext *getContext() const {return Context; }
   OptimizationRemarkEmitter &getORE() const { return *ORE; }
 
@@ -572,6 +580,9 @@
                       bool isTarget = false, bool isOpaque = false);
   SDValue getIntPtrConstant(uint64_t Val, const SDLoc &DL,
                             bool isTarget = false);
+  SDValue getShiftAmountConstant(uint64_t Val, EVT VT, const SDLoc &DL,
+                                 bool LegalTypes = true);
+
   SDValue getTargetConstant(uint64_t Val, const SDLoc &DL, EVT VT,
                             bool isOpaque = false) {
     return getConstant(Val, DL, VT, true, isOpaque);
@@ -788,6 +799,16 @@
   /// value assuming it was the smaller SrcTy value.
   SDValue getZeroExtendInReg(SDValue Op, const SDLoc &DL, EVT VT);
 
+  /// Convert Op, which must be of integer type, to the integer type VT, by
+  /// either truncating it or performing either zero or sign extension as
+  /// appropriate extension for the pointer's semantics.
+  SDValue getPtrExtOrTrunc(SDValue Op, const SDLoc &DL, EVT VT);
+
+  /// Return the expression required to extend the Op as a pointer value
+  /// assuming it was the smaller SrcTy value. This may be either a zero extend
+  /// or a sign extend.
+  SDValue getPtrExtendInReg(SDValue Op, const SDLoc &DL, EVT VT);
+
   /// Convert Op, which must be of integer type, to the integer type VT,
   /// by using an extension appropriate for the target's
   /// BooleanContent for type OpVT or truncating it.
@@ -970,6 +991,10 @@
   /// Try to simplify a shift into 1 of its operands or a constant.
   SDValue simplifyShift(SDValue X, SDValue Y);
 
+  /// Try to simplify a floating-point binary operation into 1 of its operands
+  /// or a constant.
+  SDValue simplifyFPBinop(unsigned Opcode, SDValue X, SDValue Y);
+
   /// VAArg produces a result and token chain, and takes a pointer
   /// and a source value as input.
   SDValue getVAArg(EVT VT, const SDLoc &dl, SDValue Chain, SDValue Ptr,
@@ -981,12 +1006,6 @@
   /// a success flag (initially i1), and a chain.
   SDValue getAtomicCmpSwap(unsigned Opcode, const SDLoc &dl, EVT MemVT,
                            SDVTList VTs, SDValue Chain, SDValue Ptr,
-                           SDValue Cmp, SDValue Swp, MachinePointerInfo PtrInfo,
-                           unsigned Alignment, AtomicOrdering SuccessOrdering,
-                           AtomicOrdering FailureOrdering,
-                           SyncScope::ID SSID);
-  SDValue getAtomicCmpSwap(unsigned Opcode, const SDLoc &dl, EVT MemVT,
-                           SDVTList VTs, SDValue Chain, SDValue Ptr,
                            SDValue Cmp, SDValue Swp, MachineMemOperand *MMO);
 
   /// Gets a node for an atomic op, produces result (if relevant)
@@ -1016,12 +1035,19 @@
     unsigned Align = 0,
     MachineMemOperand::Flags Flags
     = MachineMemOperand::MOLoad | MachineMemOperand::MOStore,
-    unsigned Size = 0);
+    unsigned Size = 0,
+    const AAMDNodes &AAInfo = AAMDNodes());
 
   SDValue getMemIntrinsicNode(unsigned Opcode, const SDLoc &dl, SDVTList VTList,
                               ArrayRef<SDValue> Ops, EVT MemVT,
                               MachineMemOperand *MMO);
 
+  /// Creates a LifetimeSDNode that starts (`IsStart==true`) or ends
+  /// (`IsStart==false`) the lifetime of the portion of `FrameIndex` between
+  /// offsets `Offset` and `Offset + Size`.
+  SDValue getLifetimeNode(bool IsStart, const SDLoc &dl, SDValue Chain,
+                          int FrameIndex, int64_t Size, int64_t Offset = -1);
+
   /// Create a MERGE_VALUES node from the given operands.
   SDValue getMergeValues(ArrayRef<SDValue> Ops, const SDLoc &dl);
 
@@ -1404,17 +1430,32 @@
                                        ArrayRef<SDValue> Ops,
                                        const SDNodeFlags Flags = SDNodeFlags());
 
+  /// Fold floating-point operations with 2 operands when both operands are
+  /// constants and/or undefined.
+  SDValue foldConstantFPMath(unsigned Opcode, const SDLoc &DL, EVT VT,
+                             SDValue N1, SDValue N2);
+
   /// Constant fold a setcc to true or false.
   SDValue FoldSetCC(EVT VT, SDValue N1, SDValue N2, ISD::CondCode Cond,
                     const SDLoc &dl);
 
-  /// See if the specified operand can be simplified with the knowledge that only
-  /// the bits specified by Mask are used.  If so, return the simpler operand,
-  /// otherwise return a null SDValue.
+  /// See if the specified operand can be simplified with the knowledge that
+  /// only the bits specified by DemandedBits are used.  If so, return the
+  /// simpler operand, otherwise return a null SDValue.
   ///
   /// (This exists alongside SimplifyDemandedBits because GetDemandedBits can
   /// simplify nodes with multiple uses more aggressively.)
-  SDValue GetDemandedBits(SDValue V, const APInt &Mask);
+  SDValue GetDemandedBits(SDValue V, const APInt &DemandedBits);
+
+  /// See if the specified operand can be simplified with the knowledge that
+  /// only the bits specified by DemandedBits are used in the elements specified
+  /// by DemandedElts.  If so, return the simpler operand, otherwise return a
+  /// null SDValue.
+  ///
+  /// (This exists alongside SimplifyDemandedBits because GetDemandedBits can
+  /// simplify nodes with multiple uses more aggressively.)
+  SDValue GetDemandedBits(SDValue V, const APInt &DemandedBits,
+                          const APInt &DemandedElts);
 
   /// Return true if the sign bit of Op is known to be zero.
   /// We use this predicate to simplify operations downstream.
@@ -1423,8 +1464,19 @@
   /// Return true if 'Op & Mask' is known to be zero.  We
   /// use this predicate to simplify operations downstream.  Op and Mask are
   /// known to be the same type.
-  bool MaskedValueIsZero(SDValue Op, const APInt &Mask, unsigned Depth = 0)
-    const;
+  bool MaskedValueIsZero(SDValue Op, const APInt &Mask,
+                         unsigned Depth = 0) const;
+
+  /// Return true if 'Op & Mask' is known to be zero in DemandedElts.  We
+  /// use this predicate to simplify operations downstream.  Op and Mask are
+  /// known to be the same type.
+  bool MaskedValueIsZero(SDValue Op, const APInt &Mask,
+                         const APInt &DemandedElts, unsigned Depth = 0) const;
+
+  /// Return true if '(Op & Mask) == Mask'.
+  /// Op and Mask are known to be the same type.
+  bool MaskedValueIsAllOnes(SDValue Op, const APInt &Mask,
+                            unsigned Depth = 0) const;
 
   /// Determine which bits of Op are known to be either zero or one and return
   /// them in Known. For vectors, the known bits are those that are shared by
@@ -1524,6 +1576,13 @@
   /// Test whether \p V has a splatted value.
   bool isSplatValue(SDValue V, bool AllowUndefs = false);
 
+  /// If V is a splatted value, return the source vector and its splat index.
+  SDValue getSplatSourceVector(SDValue V, int &SplatIndex);
+
+  /// If V is a splat vector, return its scalar source operand by extracting
+  /// that element from the source vector.
+  SDValue getSplatValue(SDValue V);
+
   /// Match a binop + shuffle pyramid that represents a horizontal reduction
   /// over the elements of a vector starting from the EXTRACT_VECTOR_ELT node /p
   /// Extract. The reduction must use one of the opcodes listed in /p
@@ -1541,6 +1600,11 @@
   /// vector op and fill the end of the resulting vector with UNDEFS.
   SDValue UnrollVectorOp(SDNode *N, unsigned ResNE = 0);
 
+  /// Like UnrollVectorOp(), but for the [US](ADD|SUB|MUL)O family of opcodes.
+  /// This is a separate function because those opcodes have two results.
+  std::pair<SDValue, SDValue> UnrollVectorOverflowOp(SDNode *N,
+                                                     unsigned ResNE = 0);
+
   /// Return true if loads are next to each other and can be
   /// merged. Check that both are nonvolatile and if LD is loading
   /// 'Bytes' bytes from a location that is 'Dist' units away from the
@@ -1575,6 +1639,9 @@
     return SplitVector(N->getOperand(OpNo), SDLoc(N));
   }
 
+  /// Widen the vector up to the next power of two using INSERT_SUBVECTOR.
+  SDValue WidenVector(const SDValue &N, const SDLoc &DL);
+
   /// Append the extracted elements from Start to Count out of the vector Op
   /// in Args. If Count is 0, all of the elements will be extracted.
   void ExtractVectorElements(SDValue Op, SmallVectorImpl<SDValue> &Args,
@@ -1596,6 +1663,17 @@
            isConstantFPBuildVectorOrConstantFP(N);
   }
 
+  void addCallSiteInfo(const SDNode *CallNode, CallSiteInfoImpl &&CallInfo) {
+    SDCallSiteInfo[CallNode] = std::move(CallInfo);
+  }
+
+  CallSiteInfo getSDCallSiteInfo(const SDNode *CallNode) {
+    auto I = SDCallSiteInfo.find(CallNode);
+    if (I != SDCallSiteInfo.end())
+      return std::move(I->second);
+    return CallSiteInfo();
+  }
+
 private:
   void InsertNode(SDNode *N);
   bool RemoveNodeFromCSEMaps(SDNode *N);
diff --git a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h
index f168b84..4ee5833 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h
@@ -33,11 +33,13 @@
 private:
   SDValue Base;
   SDValue Index;
-  int64_t Offset = 0;
+  Optional<int64_t> Offset;
   bool IsIndexSignExt = false;
 
 public:
   BaseIndexOffset() = default;
+  BaseIndexOffset(SDValue Base, SDValue Index, bool IsIndexSignExt)
+      : Base(Base), Index(Index), Offset(), IsIndexSignExt(IsIndexSignExt) {}
   BaseIndexOffset(SDValue Base, SDValue Index, int64_t Offset,
                   bool IsIndexSignExt)
       : Base(Base), Index(Index), Offset(Offset),
@@ -47,6 +49,13 @@
   SDValue getBase() const { return Base; }
   SDValue getIndex() { return Index; }
   SDValue getIndex() const { return Index; }
+  bool hasValidOffset() const { return Offset.hasValue(); }
+
+  // Returns true if `Other` and `*this` are both some offset from the same base
+  // pointer. In that case, `Off` is set to the offset between `*this` and
+  // `Other` (negative if `Other` is before `*this`).
+  bool equalBaseIndex(const BaseIndexOffset &Other, const SelectionDAG &DAG,
+                      int64_t &Off) const;
 
   bool equalBaseIndex(const BaseIndexOffset &Other,
                       const SelectionDAG &DAG) const {
@@ -54,11 +63,28 @@
     return equalBaseIndex(Other, DAG, Off);
   }
 
-  bool equalBaseIndex(const BaseIndexOffset &Other, const SelectionDAG &DAG,
-                      int64_t &Off) const;
+  // Returns true if `Other` (with size `OtherSize`) can be proven to be fully
+  // contained in `*this` (with size `Size`).
+  bool contains(const SelectionDAG &DAG, int64_t BitSize,
+                const BaseIndexOffset &Other, int64_t OtherBitSize,
+                int64_t &BitOffset) const;
 
-  /// Parses tree in Ptr for base, index, offset addresses.
-  static BaseIndexOffset match(const LSBaseSDNode *N, const SelectionDAG &DAG);
+  bool contains(const SelectionDAG &DAG, int64_t BitSize,
+                const BaseIndexOffset &Other, int64_t OtherBitSize) const {
+    int64_t BitOffset;
+    return contains(DAG, BitSize, Other, OtherBitSize, BitOffset);
+  }
+
+  // Returns true `Op0` and `Op1` can be proven to alias/not alias, in
+  // which case `IsAlias` is set to true/false.
+  static bool computeAliasing(const SDNode *Op0,
+                              const Optional<int64_t> NumBytes0,
+                              const SDNode *Op1,
+                              const Optional<int64_t> NumBytes1,
+                              const SelectionDAG &DAG, bool &IsAlias);
+
+  /// Parses tree in N for base, index, offset addresses.
+  static BaseIndexOffset match(const SDNode *N, const SelectionDAG &DAG);
 
   void print(raw_ostream& OS) const;
   void dump() const;
diff --git a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h
index 2acb922..147c325 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h
@@ -34,6 +34,7 @@
   class TargetLibraryInfo;
   class FunctionLoweringInfo;
   class ScheduleHazardRecognizer;
+  class SwiftErrorValueTracking;
   class GCFunctionInfo;
   class ScheduleDAGSDNodes;
   class LoadInst;
@@ -45,6 +46,7 @@
   TargetMachine &TM;
   const TargetLibraryInfo *LibInfo;
   FunctionLoweringInfo *FuncInfo;
+  SwiftErrorValueTracking *SwiftError;
   MachineFunction *MF;
   MachineRegisterInfo *RegInfo;
   SelectionDAG *CurDAG;
@@ -143,10 +145,12 @@
     OPC_CheckInteger,
     OPC_CheckChild0Integer, OPC_CheckChild1Integer, OPC_CheckChild2Integer,
     OPC_CheckChild3Integer, OPC_CheckChild4Integer,
-    OPC_CheckCondCode,
+    OPC_CheckCondCode, OPC_CheckChild2CondCode,
     OPC_CheckValueType,
     OPC_CheckComplexPat,
     OPC_CheckAndImm, OPC_CheckOrImm,
+    OPC_CheckImmAllOnesV,
+    OPC_CheckImmAllZerosV,
     OPC_CheckFoldableChainNode,
 
     OPC_EmitInteger,
diff --git a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h
index c0dd9d1..5aab964 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h
@@ -368,6 +368,13 @@
   bool ApproximateFuncs : 1;
   bool AllowReassociation : 1;
 
+  // We assume instructions do not raise floating-point exceptions by default,
+  // and only those marked explicitly may do so.  We could choose to represent
+  // this via a positive "FPExcept" flags like on the MI level, but having a
+  // negative "NoFPExcept" flag here (that defaults to true) makes the flag
+  // intersection logic more straightforward.
+  bool NoFPExcept : 1;
+
 public:
   /// Default constructor turns off all optimization flags.
   SDNodeFlags()
@@ -375,7 +382,7 @@
         Exact(false), NoNaNs(false), NoInfs(false),
         NoSignedZeros(false), AllowReciprocal(false), VectorReduction(false),
         AllowContract(false), ApproximateFuncs(false),
-        AllowReassociation(false) {}
+        AllowReassociation(false), NoFPExcept(true) {}
 
   /// Propagate the fast-math-flags from an IR FPMathOperator.
   void copyFMF(const FPMathOperator &FPMO) {
@@ -438,6 +445,10 @@
     setDefined();
     AllowReassociation = b;
   }
+  void setFPExcept(bool b) {
+    setDefined();
+    NoFPExcept = !b;
+  }
 
   // These are accessors for each flag.
   bool hasNoUnsignedWrap() const { return NoUnsignedWrap; }
@@ -451,9 +462,10 @@
   bool hasAllowContract() const { return AllowContract; }
   bool hasApproximateFuncs() const { return ApproximateFuncs; }
   bool hasAllowReassociation() const { return AllowReassociation; }
+  bool hasFPExcept() const { return !NoFPExcept; }
 
   bool isFast() const {
-    return NoSignedZeros && AllowReciprocal && NoNaNs && NoInfs &&
+    return NoSignedZeros && AllowReciprocal && NoNaNs && NoInfs && NoFPExcept &&
            AllowContract && ApproximateFuncs && AllowReassociation;
   }
 
@@ -473,6 +485,7 @@
     AllowContract &= Flags.AllowContract;
     ApproximateFuncs &= Flags.ApproximateFuncs;
     AllowReassociation &= Flags.AllowReassociation;
+    NoFPExcept &= Flags.NoFPExcept;
   }
 };
 
@@ -488,6 +501,17 @@
   // SubclassData.  These are designed to fit within a uint16_t so they pack
   // with NodeType.
 
+#if defined(_AIX) && (!defined(__GNUC__) || defined(__ibmxl__))
+// Except for GCC; by default, AIX compilers store bit-fields in 4-byte words
+// and give the `pack` pragma push semantics.
+#define BEGIN_TWO_BYTE_PACK() _Pragma("pack(2)")
+#define END_TWO_BYTE_PACK() _Pragma("pack(pop)")
+#else
+#define BEGIN_TWO_BYTE_PACK()
+#define END_TWO_BYTE_PACK()
+#endif
+
+BEGIN_TWO_BYTE_PACK()
   class SDNodeBitfields {
     friend class SDNode;
     friend class MemIntrinsicSDNode;
@@ -560,6 +584,9 @@
     LoadSDNodeBitfields LoadSDNodeBits;
     StoreSDNodeBitfields StoreSDNodeBits;
   };
+END_TWO_BYTE_PACK()
+#undef BEGIN_TWO_BYTE_PACK
+#undef END_TWO_BYTE_PACK
 
   // RawSDNodeBits must cover the entirety of the union.  This means that all of
   // the union's members must have size <= RawSDNodeBits.  We write the RHS as
@@ -677,6 +704,8 @@
       case ISD::STRICT_FFLOOR:
       case ISD::STRICT_FROUND:
       case ISD::STRICT_FTRUNC:
+      case ISD::STRICT_FP_ROUND:
+      case ISD::STRICT_FP_EXTEND:
         return true;
     }
   }
@@ -1385,7 +1414,10 @@
 public:
   AtomicSDNode(unsigned Opc, unsigned Order, const DebugLoc &dl, SDVTList VTL,
                EVT MemVT, MachineMemOperand *MMO)
-      : MemSDNode(Opc, Order, dl, VTL, MemVT, MMO) {}
+    : MemSDNode(Opc, Order, dl, VTL, MemVT, MMO) {
+    assert(((Opc != ISD::ATOMIC_LOAD && Opc != ISD::ATOMIC_STORE) ||
+            MMO->isAtomic()) && "then why are we using an AtomicSDNode?");
+  }
 
   const SDValue &getBasePtr() const { return getOperand(1); }
   const SDValue &getVal() const { return getOperand(2); }
@@ -1482,14 +1514,16 @@
 
   bool isSplat() const { return isSplatMask(Mask, getValueType(0)); }
 
-  int  getSplatIndex() const {
+  int getSplatIndex() const {
     assert(isSplat() && "Cannot get splat index for non-splat!");
     EVT VT = getValueType(0);
-    for (unsigned i = 0, e = VT.getVectorNumElements(); i != e; ++i) {
+    for (unsigned i = 0, e = VT.getVectorNumElements(); i != e; ++i)
       if (Mask[i] >= 0)
         return Mask[i];
-    }
-    llvm_unreachable("Splat with all undef indices?");
+
+    // We can choose any index value here and be correct because all elements
+    // are undefined. Return 0 for better potential for callers to simplify.
+    return 0;
   }
 
   static bool isSplatMask(const int *Mask, EVT VT);
@@ -1622,16 +1656,32 @@
 /// If \p V is not a bitcasted one-use value, it is returned as-is.
 SDValue peekThroughOneUseBitcasts(SDValue V);
 
+/// Return the non-extracted vector source operand of \p V if it exists.
+/// If \p V is not an extracted subvector, it is returned as-is.
+SDValue peekThroughExtractSubvectors(SDValue V);
+
 /// Returns true if \p V is a bitwise not operation. Assumes that an all ones
 /// constant is canonicalized to be operand 1.
-bool isBitwiseNot(SDValue V);
+bool isBitwiseNot(SDValue V, bool AllowUndefs = false);
 
 /// Returns the SDNode if it is a constant splat BuildVector or constant int.
-ConstantSDNode *isConstOrConstSplat(SDValue N, bool AllowUndefs = false);
+ConstantSDNode *isConstOrConstSplat(SDValue N, bool AllowUndefs = false,
+                                    bool AllowTruncation = false);
+
+/// Returns the SDNode if it is a demanded constant splat BuildVector or
+/// constant int.
+ConstantSDNode *isConstOrConstSplat(SDValue N, const APInt &DemandedElts,
+                                    bool AllowUndefs = false,
+                                    bool AllowTruncation = false);
 
 /// Returns the SDNode if it is a constant splat BuildVector or constant float.
 ConstantFPSDNode *isConstOrConstSplatFP(SDValue N, bool AllowUndefs = false);
 
+/// Returns the SDNode if it is a demanded constant splat BuildVector or
+/// constant float.
+ConstantFPSDNode *isConstOrConstSplatFP(SDValue N, const APInt &DemandedElts,
+                                        bool AllowUndefs = false);
+
 /// Return true if the value is a constant 0 integer or a splatted vector of
 /// a constant 0 integer (with no undefs by default).
 /// Build vector implicit truncation is not an issue for null values.
@@ -1692,6 +1742,38 @@
   }
 };
 
+/// This SDNode is used for LIFETIME_START/LIFETIME_END values, which indicate
+/// the offet and size that are started/ended in the underlying FrameIndex.
+class LifetimeSDNode : public SDNode {
+  friend class SelectionDAG;
+  int64_t Size;
+  int64_t Offset; // -1 if offset is unknown.
+
+  LifetimeSDNode(unsigned Opcode, unsigned Order, const DebugLoc &dl,
+                 SDVTList VTs, int64_t Size, int64_t Offset)
+      : SDNode(Opcode, Order, dl, VTs), Size(Size), Offset(Offset) {}
+public:
+  int64_t getFrameIndex() const {
+    return cast<FrameIndexSDNode>(getOperand(1))->getIndex();
+  }
+
+  bool hasOffset() const { return Offset >= 0; }
+  int64_t getOffset() const {
+    assert(hasOffset() && "offset is unknown");
+    return Offset;
+  }
+  int64_t getSize() const {
+    assert(hasOffset() && "offset is unknown");
+    return Size;
+  }
+
+  // Methods to support isa and dyn_cast
+  static bool classof(const SDNode *N) {
+    return N->getOpcode() == ISD::LIFETIME_START ||
+           N->getOpcode() == ISD::LIFETIME_END;
+  }
+};
+
 class JumpTableSDNode : public SDNode {
   friend class SelectionDAG;
 
@@ -1837,12 +1919,31 @@
                        unsigned MinSplatBits = 0,
                        bool isBigEndian = false) const;
 
+  /// Returns the demanded splatted value or a null value if this is not a
+  /// splat.
+  ///
+  /// The DemandedElts mask indicates the elements that must be in the splat.
+  /// If passed a non-null UndefElements bitvector, it will resize it to match
+  /// the vector width and set the bits where elements are undef.
+  SDValue getSplatValue(const APInt &DemandedElts,
+                        BitVector *UndefElements = nullptr) const;
+
   /// Returns the splatted value or a null value if this is not a splat.
   ///
   /// If passed a non-null UndefElements bitvector, it will resize it to match
   /// the vector width and set the bits where elements are undef.
   SDValue getSplatValue(BitVector *UndefElements = nullptr) const;
 
+  /// Returns the demanded splatted constant or null if this is not a constant
+  /// splat.
+  ///
+  /// The DemandedElts mask indicates the elements that must be in the splat.
+  /// If passed a non-null UndefElements bitvector, it will resize it to match
+  /// the vector width and set the bits where elements are undef.
+  ConstantSDNode *
+  getConstantSplatNode(const APInt &DemandedElts,
+                       BitVector *UndefElements = nullptr) const;
+
   /// Returns the splatted constant or null if this is not a constant
   /// splat.
   ///
@@ -1851,6 +1952,16 @@
   ConstantSDNode *
   getConstantSplatNode(BitVector *UndefElements = nullptr) const;
 
+  /// Returns the demanded splatted constant FP or null if this is not a
+  /// constant FP splat.
+  ///
+  /// The DemandedElts mask indicates the elements that must be in the splat.
+  /// If passed a non-null UndefElements bitvector, it will resize it to match
+  /// the vector width and set the bits where elements are undef.
+  ConstantFPSDNode *
+  getConstantFPSplatNode(const APInt &DemandedElts,
+                         BitVector *UndefElements = nullptr) const;
+
   /// Returns the splatted constant FP or null if this is not a constant
   /// FP splat.
   ///
@@ -1975,8 +2086,10 @@
 
   MCSymbol *Label;
 
-  LabelSDNode(unsigned Order, const DebugLoc &dl, MCSymbol *L)
-      : SDNode(ISD::EH_LABEL, Order, dl, getSDVTList(MVT::Other)), Label(L) {}
+  LabelSDNode(unsigned Opcode, unsigned Order, const DebugLoc &dl, MCSymbol *L)
+      : SDNode(Opcode, Order, dl, getSDVTList(MVT::Other)), Label(L) {
+    assert(LabelSDNode::classof(this) && "not a label opcode");
+  }
 
 public:
   MCSymbol *getLabel() const { return Label; }
@@ -2068,6 +2181,8 @@
       : MemSDNode(NodeTy, Order, dl, VTs, MemVT, MMO) {
     LSBaseSDNodeBits.AddressingMode = AM;
     assert(getAddressingMode() == AM && "Value truncated");
+    assert((!MMO->isAtomic() || MMO->isVolatile()) &&
+           "use an AtomicSDNode instead for non-volatile atomics");
   }
 
   const SDValue &getOffset() const {
@@ -2492,18 +2607,6 @@
       cast<StoreSDNode>(N)->getAddressingMode() == ISD::UNINDEXED;
   }
 
-  /// Return true if the node is a math/logic binary operator. This corresponds
-  /// to the IR function of the same name.
-  inline bool isBinaryOp(const SDNode *N) {
-    auto Op = N->getOpcode();
-    return (Op == ISD::ADD || Op == ISD::SUB || Op == ISD::MUL ||
-            Op == ISD::AND || Op == ISD::OR || Op == ISD::XOR ||
-            Op == ISD::SHL || Op == ISD::SRL || Op == ISD::SRA ||
-            Op == ISD::SDIV || Op == ISD::UDIV || Op == ISD::SREM ||
-            Op == ISD::UREM || Op == ISD::FADD || Op == ISD::FSUB ||
-            Op == ISD::FMUL || Op == ISD::FDIV || Op == ISD::FREM);
-  }
-
   /// Attempt to match a unary predicate against a scalar/splat constant or
   /// every element of a constant BUILD_VECTOR.
   /// If AllowUndef is true, then UNDEF elements will pass nullptr to Match.
@@ -2514,10 +2617,11 @@
   /// Attempt to match a binary predicate against a pair of scalar/splat
   /// constants or every element of a pair of constant BUILD_VECTORs.
   /// If AllowUndef is true, then UNDEF elements will pass nullptr to Match.
+  /// If AllowTypeMismatch is true then RetType + ArgTypes don't need to match.
   bool matchBinaryPredicate(
       SDValue LHS, SDValue RHS,
       std::function<bool(ConstantSDNode *, ConstantSDNode *)> Match,
-      bool AllowUndefs = false);
+      bool AllowUndefs = false, bool AllowTypeMismatch = false);
 } // end namespace ISD
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h b/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h
index 63461d6..10ab4cc 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h
@@ -308,20 +308,6 @@
 
   using IdxMBBPair = std::pair<SlotIndex, MachineBasicBlock *>;
 
-  inline bool operator<(SlotIndex V, const IdxMBBPair &IM) {
-    return V < IM.first;
-  }
-
-  inline bool operator<(const IdxMBBPair &IM, SlotIndex V) {
-    return IM.first < V;
-  }
-
-  struct Idx2MBBCompare {
-    bool operator()(const IdxMBBPair &LHS, const IdxMBBPair &RHS) const {
-      return LHS.first < RHS.first;
-    }
-  };
-
   /// SlotIndexes pass.
   ///
   /// This pass assigns indexes to each instruction.
@@ -333,10 +319,6 @@
     using IndexList = ilist<IndexListEntry>;
     IndexList indexList;
 
-#ifdef EXPENSIVE_CHECKS
-    IndexList graveyardList;
-#endif // EXPENSIVE_CHECKS
-
     MachineFunction *mf;
 
     using Mi2IndexMap = DenseMap<const MachineInstr *, SlotIndex>;
@@ -382,9 +364,6 @@
     /// Dump the indexes.
     void dump() const;
 
-    /// Renumber the index list, providing space for new instructions.
-    void renumberIndexes();
-
     /// Repair indexes after adding and removing instructions.
     void repairIndexesInRange(MachineBasicBlock *MBB,
                               MachineBasicBlock::iterator Begin,
@@ -513,7 +492,9 @@
     /// Move iterator to the next IdxMBBPair where the SlotIndex is greater or
     /// equal to \p To.
     MBBIndexIterator advanceMBBIndex(MBBIndexIterator I, SlotIndex To) const {
-      return std::lower_bound(I, idx2MBBMap.end(), To);
+      return std::partition_point(
+          I, idx2MBBMap.end(),
+          [=](const IdxMBBPair &IM) { return IM.first < To; });
     }
 
     /// Get an iterator pointing to the IdxMBBPair with the biggest SlotIndex
@@ -549,29 +530,6 @@
       return J->second;
     }
 
-    /// Returns the MBB covering the given range, or null if the range covers
-    /// more than one basic block.
-    MachineBasicBlock* getMBBCoveringRange(SlotIndex start, SlotIndex end) const {
-
-      assert(start < end && "Backwards ranges not allowed.");
-      MBBIndexIterator itr = findMBBIndex(start);
-      if (itr == MBBIndexEnd()) {
-        itr = std::prev(itr);
-        return itr->second;
-      }
-
-      // Check that we don't cross the boundary into this block.
-      if (itr->first < end)
-        return nullptr;
-
-      itr = std::prev(itr);
-
-      if (itr->first <= start)
-        return itr->second;
-
-      return nullptr;
-    }
-
     /// Insert the given machine instruction into the mapping. Returns the
     /// assigned index.
     /// If Late is set and there are null indexes between mi's neighboring
@@ -677,33 +635,7 @@
       idx2MBBMap.push_back(IdxMBBPair(startIdx, mbb));
 
       renumberIndexes(newItr);
-      llvm::sort(idx2MBBMap, Idx2MBBCompare());
-    }
-
-    /// Free the resources that were required to maintain a SlotIndex.
-    ///
-    /// Once an index is no longer needed (for instance because the instruction
-    /// at that index has been moved), the resources required to maintain the
-    /// index can be relinquished to reduce memory use and improve renumbering
-    /// performance. Any remaining SlotIndex objects that point to the same
-    /// index are left 'dangling' (much the same as a dangling pointer to a
-    /// freed object) and should not be accessed, except to destruct them.
-    ///
-    /// Like dangling pointers, access to dangling SlotIndexes can cause
-    /// painful-to-track-down bugs, especially if the memory for the index
-    /// previously pointed to has been re-used. To detect dangling SlotIndex
-    /// bugs, build with EXPENSIVE_CHECKS=1. This will cause "erased" indexes to
-    /// be retained in a graveyard instead of being freed. Operations on indexes
-    /// in the graveyard will trigger an assertion.
-    void eraseIndex(SlotIndex index) {
-      IndexListEntry *entry = index.listEntry();
-#ifdef EXPENSIVE_CHECKS
-      indexList.remove(entry);
-      graveyardList.push_back(entry);
-      entry->setPoison();
-#else
-      indexList.erase(entry);
-#endif
+      llvm::sort(idx2MBBMap, less_first());
     }
   };
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/StackProtector.h b/linux-x64/clang/include/llvm/CodeGen/StackProtector.h
index ed52db3..2bdf442 100644
--- a/linux-x64/clang/include/llvm/CodeGen/StackProtector.h
+++ b/linux-x64/clang/include/llvm/CodeGen/StackProtector.h
@@ -61,12 +61,6 @@
   /// protection when -fstack-protection is used.
   unsigned SSPBufferSize = 0;
 
-  /// VisitedPHIs - The set of PHI nodes visited when determining
-  /// if a variable's reference has been taken.  This set
-  /// is maintained to ensure we don't visit the same PHI node multiple
-  /// times.
-  SmallPtrSet<const PHINode *, 16> VisitedPHIs;
-
   // A prologue is generated.
   bool HasPrologue = false;
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/SwiftErrorValueTracking.h b/linux-x64/clang/include/llvm/CodeGen/SwiftErrorValueTracking.h
new file mode 100644
index 0000000..fb7a128
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/SwiftErrorValueTracking.h
@@ -0,0 +1,110 @@
+//===- SwiftErrorValueTracking.h - Track swifterror VReg vals --*- C++ -*--===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This implements a limited mem2reg-like analysis to promote uses of function
+// arguments and allocas marked with swiftalloc from memory into virtual
+// registers tracked by this class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SWIFTERRORVALUETRACKING_H
+#define SWIFTERRORVALUETRACKING_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/CodeGen/Register.h"
+#include "llvm/IR/BasicBlock.h"
+#include "llvm/IR/DebugLoc.h"
+#include <functional>
+#include <type_traits>
+#include <utility>
+
+
+namespace llvm {
+  class Function;
+  class MachineBasicBlock;
+  class MachineFunction;
+  class MachineInstr;
+  class TargetInstrInfo;
+  class TargetLowering;
+
+class SwiftErrorValueTracking {
+  // Some useful objects to reduce the number of function arguments needed.
+  MachineFunction *MF;
+  const Function *Fn;
+  const TargetLowering *TLI;
+  const TargetInstrInfo *TII;
+
+  /// A map from swifterror value in a basic block to the virtual register it is
+  /// currently represented by.
+  DenseMap<std::pair<const MachineBasicBlock *, const Value *>, Register>
+      VRegDefMap;
+
+  /// A list of upward exposed vreg uses that need to be satisfied by either a
+  /// copy def or a phi node at the beginning of the basic block representing
+  /// the predecessor(s) swifterror value.
+  DenseMap<std::pair<const MachineBasicBlock *, const Value *>, Register>
+      VRegUpwardsUse;
+
+  /// A map from instructions that define/use a swifterror value to the virtual
+  /// register that represents that def/use.
+  llvm::DenseMap<PointerIntPair<const Instruction *, 1, bool>, Register>
+      VRegDefUses;
+
+  /// The swifterror argument of the current function.
+  const Value *SwiftErrorArg;
+
+  using SwiftErrorValues = SmallVector<const Value*, 1>;
+  /// A function can only have a single swifterror argument. And if it does
+  /// have a swifterror argument, it must be the first entry in
+  /// SwiftErrorVals.
+  SwiftErrorValues SwiftErrorVals;
+
+public:
+  /// Initialize data structures for specified new function.
+  void setFunction(MachineFunction &MF);
+
+  /// Get the (unique) function argument that was marked swifterror, or nullptr
+  /// if this function has no swifterror args.
+  const Value *getFunctionArg() const {
+    return SwiftErrorArg;
+  }
+
+  /// Get or create the swifterror value virtual register in
+  /// VRegDefMap for this basic block.
+  Register getOrCreateVReg(const MachineBasicBlock *, const Value *);
+
+  /// Set the swifterror virtual register in the VRegDefMap for this
+  /// basic block.
+  void setCurrentVReg(const MachineBasicBlock *MBB, const Value *, Register);
+
+  /// Get or create the swifterror value virtual register for a def of a
+  /// swifterror by an instruction.
+  Register getOrCreateVRegDefAt(const Instruction *, const MachineBasicBlock *,
+                                const Value *);
+
+  /// Get or create the swifterror value virtual register for a use of a
+  /// swifterror by an instruction.
+  Register getOrCreateVRegUseAt(const Instruction *, const MachineBasicBlock *,
+                                const Value *);
+
+  /// Create initial definitions of swifterror values in the entry block of the
+  /// current function.
+  bool createEntriesInEntryBlock(DebugLoc DbgLoc);
+
+  /// Propagate assigned swifterror vregs through a function, synthesizing PHI
+  /// nodes when needed to maintain consistency.
+  void propagateVRegs();
+
+  void preassignVRegs(MachineBasicBlock *MBB, BasicBlock::const_iterator Begin,
+                      BasicBlock::const_iterator End);
+};
+
+}
+
+#endif
diff --git a/linux-x64/clang/include/llvm/CodeGen/SwitchLoweringUtils.h b/linux-x64/clang/include/llvm/CodeGen/SwitchLoweringUtils.h
new file mode 100644
index 0000000..62134dc
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/SwitchLoweringUtils.h
@@ -0,0 +1,297 @@
+//===- SwitchLoweringUtils.h - Switch Lowering ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_SWITCHLOWERINGUTILS_H
+#define LLVM_CODEGEN_SWITCHLOWERINGUTILS_H
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/CodeGen/SelectionDAGNodes.h"
+#include "llvm/CodeGen/TargetLowering.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/Support/BranchProbability.h"
+
+namespace llvm {
+
+class FunctionLoweringInfo;
+class MachineBasicBlock;
+
+namespace SwitchCG {
+
+enum CaseClusterKind {
+  /// A cluster of adjacent case labels with the same destination, or just one
+  /// case.
+  CC_Range,
+  /// A cluster of cases suitable for jump table lowering.
+  CC_JumpTable,
+  /// A cluster of cases suitable for bit test lowering.
+  CC_BitTests
+};
+
+/// A cluster of case labels.
+struct CaseCluster {
+  CaseClusterKind Kind;
+  const ConstantInt *Low, *High;
+  union {
+    MachineBasicBlock *MBB;
+    unsigned JTCasesIndex;
+    unsigned BTCasesIndex;
+  };
+  BranchProbability Prob;
+
+  static CaseCluster range(const ConstantInt *Low, const ConstantInt *High,
+                           MachineBasicBlock *MBB, BranchProbability Prob) {
+    CaseCluster C;
+    C.Kind = CC_Range;
+    C.Low = Low;
+    C.High = High;
+    C.MBB = MBB;
+    C.Prob = Prob;
+    return C;
+  }
+
+  static CaseCluster jumpTable(const ConstantInt *Low, const ConstantInt *High,
+                               unsigned JTCasesIndex, BranchProbability Prob) {
+    CaseCluster C;
+    C.Kind = CC_JumpTable;
+    C.Low = Low;
+    C.High = High;
+    C.JTCasesIndex = JTCasesIndex;
+    C.Prob = Prob;
+    return C;
+  }
+
+  static CaseCluster bitTests(const ConstantInt *Low, const ConstantInt *High,
+                              unsigned BTCasesIndex, BranchProbability Prob) {
+    CaseCluster C;
+    C.Kind = CC_BitTests;
+    C.Low = Low;
+    C.High = High;
+    C.BTCasesIndex = BTCasesIndex;
+    C.Prob = Prob;
+    return C;
+  }
+};
+
+using CaseClusterVector = std::vector<CaseCluster>;
+using CaseClusterIt = CaseClusterVector::iterator;
+
+/// Sort Clusters and merge adjacent cases.
+void sortAndRangeify(CaseClusterVector &Clusters);
+
+struct CaseBits {
+  uint64_t Mask = 0;
+  MachineBasicBlock *BB = nullptr;
+  unsigned Bits = 0;
+  BranchProbability ExtraProb;
+
+  CaseBits() = default;
+  CaseBits(uint64_t mask, MachineBasicBlock *bb, unsigned bits,
+           BranchProbability Prob)
+      : Mask(mask), BB(bb), Bits(bits), ExtraProb(Prob) {}
+};
+
+using CaseBitsVector = std::vector<CaseBits>;
+
+/// This structure is used to communicate between SelectionDAGBuilder and
+/// SDISel for the code generation of additional basic blocks needed by
+/// multi-case switch statements.
+struct CaseBlock {
+  // For the GISel interface.
+  struct PredInfoPair {
+    CmpInst::Predicate Pred;
+    // Set when no comparison should be emitted.
+    bool NoCmp;
+  };
+  union {
+    // The condition code to use for the case block's setcc node.
+    // Besides the integer condition codes, this can also be SETTRUE, in which
+    // case no comparison gets emitted.
+    ISD::CondCode CC;
+    struct PredInfoPair PredInfo;
+  };
+
+  // The LHS/MHS/RHS of the comparison to emit.
+  // Emit by default LHS op RHS. MHS is used for range comparisons:
+  // If MHS is not null: (LHS <= MHS) and (MHS <= RHS).
+  const Value *CmpLHS, *CmpMHS, *CmpRHS;
+
+  // The block to branch to if the setcc is true/false.
+  MachineBasicBlock *TrueBB, *FalseBB;
+
+  // The block into which to emit the code for the setcc and branches.
+  MachineBasicBlock *ThisBB;
+
+  /// The debug location of the instruction this CaseBlock was
+  /// produced from.
+  SDLoc DL;
+  DebugLoc DbgLoc;
+
+  // Branch weights.
+  BranchProbability TrueProb, FalseProb;
+
+  // Constructor for SelectionDAG.
+  CaseBlock(ISD::CondCode cc, const Value *cmplhs, const Value *cmprhs,
+            const Value *cmpmiddle, MachineBasicBlock *truebb,
+            MachineBasicBlock *falsebb, MachineBasicBlock *me, SDLoc dl,
+            BranchProbability trueprob = BranchProbability::getUnknown(),
+            BranchProbability falseprob = BranchProbability::getUnknown())
+      : CC(cc), CmpLHS(cmplhs), CmpMHS(cmpmiddle), CmpRHS(cmprhs),
+        TrueBB(truebb), FalseBB(falsebb), ThisBB(me), DL(dl),
+        TrueProb(trueprob), FalseProb(falseprob) {}
+
+  // Constructor for GISel.
+  CaseBlock(CmpInst::Predicate pred, bool nocmp, const Value *cmplhs,
+            const Value *cmprhs, const Value *cmpmiddle,
+            MachineBasicBlock *truebb, MachineBasicBlock *falsebb,
+            MachineBasicBlock *me, DebugLoc dl,
+            BranchProbability trueprob = BranchProbability::getUnknown(),
+            BranchProbability falseprob = BranchProbability::getUnknown())
+      : PredInfo({pred, nocmp}), CmpLHS(cmplhs), CmpMHS(cmpmiddle),
+        CmpRHS(cmprhs), TrueBB(truebb), FalseBB(falsebb), ThisBB(me),
+        DbgLoc(dl), TrueProb(trueprob), FalseProb(falseprob) {}
+};
+
+struct JumpTable {
+  /// The virtual register containing the index of the jump table entry
+  /// to jump to.
+  unsigned Reg;
+  /// The JumpTableIndex for this jump table in the function.
+  unsigned JTI;
+  /// The MBB into which to emit the code for the indirect jump.
+  MachineBasicBlock *MBB;
+  /// The MBB of the default bb, which is a successor of the range
+  /// check MBB.  This is when updating PHI nodes in successors.
+  MachineBasicBlock *Default;
+
+  JumpTable(unsigned R, unsigned J, MachineBasicBlock *M, MachineBasicBlock *D)
+      : Reg(R), JTI(J), MBB(M), Default(D) {}
+};
+struct JumpTableHeader {
+  APInt First;
+  APInt Last;
+  const Value *SValue;
+  MachineBasicBlock *HeaderBB;
+  bool Emitted;
+  bool OmitRangeCheck;
+
+  JumpTableHeader(APInt F, APInt L, const Value *SV, MachineBasicBlock *H,
+                  bool E = false)
+      : First(std::move(F)), Last(std::move(L)), SValue(SV), HeaderBB(H),
+        Emitted(E), OmitRangeCheck(false) {}
+};
+using JumpTableBlock = std::pair<JumpTableHeader, JumpTable>;
+
+struct BitTestCase {
+  uint64_t Mask;
+  MachineBasicBlock *ThisBB;
+  MachineBasicBlock *TargetBB;
+  BranchProbability ExtraProb;
+
+  BitTestCase(uint64_t M, MachineBasicBlock *T, MachineBasicBlock *Tr,
+              BranchProbability Prob)
+      : Mask(M), ThisBB(T), TargetBB(Tr), ExtraProb(Prob) {}
+};
+
+using BitTestInfo = SmallVector<BitTestCase, 3>;
+
+struct BitTestBlock {
+  APInt First;
+  APInt Range;
+  const Value *SValue;
+  unsigned Reg;
+  MVT RegVT;
+  bool Emitted;
+  bool ContiguousRange;
+  MachineBasicBlock *Parent;
+  MachineBasicBlock *Default;
+  BitTestInfo Cases;
+  BranchProbability Prob;
+  BranchProbability DefaultProb;
+
+  BitTestBlock(APInt F, APInt R, const Value *SV, unsigned Rg, MVT RgVT, bool E,
+               bool CR, MachineBasicBlock *P, MachineBasicBlock *D,
+               BitTestInfo C, BranchProbability Pr)
+      : First(std::move(F)), Range(std::move(R)), SValue(SV), Reg(Rg),
+        RegVT(RgVT), Emitted(E), ContiguousRange(CR), Parent(P), Default(D),
+        Cases(std::move(C)), Prob(Pr) {}
+};
+
+/// Return the range of value within a range.
+uint64_t getJumpTableRange(const CaseClusterVector &Clusters, unsigned First,
+                           unsigned Last);
+
+/// Return the number of cases within a range.
+uint64_t getJumpTableNumCases(const SmallVectorImpl<unsigned> &TotalCases,
+                              unsigned First, unsigned Last);
+
+struct SwitchWorkListItem {
+  MachineBasicBlock *MBB;
+  CaseClusterIt FirstCluster;
+  CaseClusterIt LastCluster;
+  const ConstantInt *GE;
+  const ConstantInt *LT;
+  BranchProbability DefaultProb;
+};
+using SwitchWorkList = SmallVector<SwitchWorkListItem, 4>;
+
+class SwitchLowering {
+public:
+  SwitchLowering(FunctionLoweringInfo &funcinfo) : FuncInfo(funcinfo) {}
+
+  void init(const TargetLowering &tli, const TargetMachine &tm,
+            const DataLayout &dl) {
+    TLI = &tli;
+    TM = &tm;
+    DL = &dl;
+  }
+
+  /// Vector of CaseBlock structures used to communicate SwitchInst code
+  /// generation information.
+  std::vector<CaseBlock> SwitchCases;
+
+  /// Vector of JumpTable structures used to communicate SwitchInst code
+  /// generation information.
+  std::vector<JumpTableBlock> JTCases;
+
+  /// Vector of BitTestBlock structures used to communicate SwitchInst code
+  /// generation information.
+  std::vector<BitTestBlock> BitTestCases;
+
+  void findJumpTables(CaseClusterVector &Clusters, const SwitchInst *SI,
+                      MachineBasicBlock *DefaultMBB);
+
+  bool buildJumpTable(const CaseClusterVector &Clusters, unsigned First,
+                      unsigned Last, const SwitchInst *SI,
+                      MachineBasicBlock *DefaultMBB, CaseCluster &JTCluster);
+
+
+  void findBitTestClusters(CaseClusterVector &Clusters, const SwitchInst *SI);
+
+  /// Build a bit test cluster from Clusters[First..Last]. Returns false if it
+  /// decides it's not a good idea.
+  bool buildBitTests(CaseClusterVector &Clusters, unsigned First, unsigned Last,
+                     const SwitchInst *SI, CaseCluster &BTCluster);
+
+  virtual void addSuccessorWithProb(
+      MachineBasicBlock *Src, MachineBasicBlock *Dst,
+      BranchProbability Prob = BranchProbability::getUnknown()) = 0;
+
+  virtual ~SwitchLowering() = default;
+
+private:
+  const TargetLowering *TLI;
+  const TargetMachine *TM;
+  const DataLayout *DL;
+  FunctionLoweringInfo &FuncInfo;
+};
+
+} // namespace SwitchCG
+} // namespace llvm
+
+#endif // LLVM_CODEGEN_SWITCHLOWERINGUTILS_H
+
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetCallingConv.h b/linux-x64/clang/include/llvm/CodeGen/TargetCallingConv.h
index f82c05d..aebeeec 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetCallingConv.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetCallingConv.h
@@ -45,9 +45,12 @@
     unsigned IsInConsecutiveRegsLast : 1;
     unsigned IsInConsecutiveRegs : 1;
     unsigned IsCopyElisionCandidate : 1; ///< Argument copy elision candidate
+    unsigned IsPointer : 1;
 
     unsigned ByValSize; ///< Byval struct size
 
+    unsigned PointerAddrSpace; ///< Address space of pointer argument
+
   public:
     ArgFlagsTy()
         : IsZExt(0), IsSExt(0), IsInReg(0), IsSRet(0), IsByVal(0), IsNest(0),
@@ -55,8 +58,9 @@
           IsSwiftSelf(0), IsSwiftError(0), IsHva(0), IsHvaStart(0),
           IsSecArgPass(0), ByValAlign(0), OrigAlign(0),
           IsInConsecutiveRegsLast(0), IsInConsecutiveRegs(0),
-          IsCopyElisionCandidate(0), ByValSize(0) {
-      static_assert(sizeof(*this) == 2 * sizeof(unsigned), "flags are too big");
+          IsCopyElisionCandidate(0), IsPointer(0), ByValSize(0),
+          PointerAddrSpace(0) {
+      static_assert(sizeof(*this) == 3 * sizeof(unsigned), "flags are too big");
     }
 
     bool isZExt() const { return IsZExt; }
@@ -113,6 +117,9 @@
     bool isCopyElisionCandidate()  const { return IsCopyElisionCandidate; }
     void setCopyElisionCandidate() { IsCopyElisionCandidate = 1; }
 
+    bool isPointer()  const { return IsPointer; }
+    void setPointer() { IsPointer = 1; }
+
     unsigned getByValAlign() const { return (1U << ByValAlign) / 2; }
     void setByValAlign(unsigned A) {
       ByValAlign = Log2_32(A) + 1;
@@ -127,7 +134,10 @@
 
     unsigned getByValSize() const { return ByValSize; }
     void setByValSize(unsigned S) { ByValSize = S; }
-  };
+
+    unsigned getPointerAddrSpace() const { return PointerAddrSpace; }
+    void setPointerAddrSpace(unsigned AS) { PointerAddrSpace = AS; }
+};
 
   /// InputArg - This struct carries flags and type information about a
   /// single incoming (formal) argument or incoming (from the perspective
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h b/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h
index 754ee5c..878c9ff 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h
@@ -14,6 +14,7 @@
 #define LLVM_CODEGEN_TARGETFRAMELOWERING_H
 
 #include "llvm/CodeGen/MachineBasicBlock.h"
+#include "llvm/ADT/StringSwitch.h"
 #include <utility>
 #include <vector>
 
@@ -23,6 +24,14 @@
   class MachineFunction;
   class RegScavenger;
 
+namespace TargetStackID {
+  enum Value {
+    Default = 0,
+    SGPRSpill = 1,
+    NoAlloc = 255
+  };
+}
+
 /// Information about stack frame layout on the target.  It holds the direction
 /// of stack growth, the known stack alignment on entry to each function, and
 /// the offset to the locals area.
@@ -345,6 +354,16 @@
     return true;
   }
 
+  virtual bool isSupportedStackID(TargetStackID::Value ID) const {
+    switch (ID) {
+    default:
+      return false;
+    case TargetStackID::Default:
+    case TargetStackID::NoAlloc:
+      return true;
+    }
+  }
+
   /// Check if given function is safe for not having callee saved registers.
   /// This is used when interprocedural register allocation is enabled.
   static bool isSafeForNoCSROpt(const Function &F) {
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h b/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h
index b732be6..314bb72 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h
@@ -26,6 +26,7 @@
 #include "llvm/CodeGen/MachineOperand.h"
 #include "llvm/CodeGen/MachineOutliner.h"
 #include "llvm/CodeGen/PseudoSourceValue.h"
+#include "llvm/CodeGen/VirtRegMap.h"
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/Support/BranchProbability.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -59,6 +60,8 @@
 
 template <class T> class SmallVectorImpl;
 
+using ParamLoadedValue = std::pair<const MachineOperand*, DIExpression*>;
+
 //---------------------------------------------------------------------------
 ///
 /// TargetInstrInfo - Interface to description of machine instruction set
@@ -80,6 +83,7 @@
 
   /// Given a machine instruction descriptor, returns the register
   /// class constraint for OpNum, or NULL.
+  virtual
   const TargetRegisterClass *getRegClass(const MCInstrDesc &MCID, unsigned OpNum,
                                          const TargetRegisterInfo *TRI,
                                          const MachineFunction &MF) const;
@@ -669,8 +673,9 @@
   /// is finished.  Return the value/register of the new loop count.  We need
   /// this function when peeling off one or more iterations of a loop. This
   /// function assumes the nth iteration is peeled first.
-  virtual unsigned reduceLoopCount(MachineBasicBlock &MBB, MachineInstr *IndVar,
-                                   MachineInstr &Cmp,
+  virtual unsigned reduceLoopCount(MachineBasicBlock &MBB,
+                                   MachineBasicBlock &PreHeader,
+                                   MachineInstr *IndVar, MachineInstr &Cmp,
                                    SmallVectorImpl<MachineOperand> &Cond,
                                    SmallVectorImpl<MachineInstr *> &PrevInsts,
                                    unsigned Iter, unsigned MaxIter) const {
@@ -932,9 +937,12 @@
   /// operand folded, otherwise NULL is returned.
   /// The new instruction is inserted before MI, and the client is responsible
   /// for removing the old instruction.
+  /// If VRM is passed, the assigned physregs can be inspected by target to
+  /// decide on using an opcode (note that those assignments can still change).
   MachineInstr *foldMemoryOperand(MachineInstr &MI, ArrayRef<unsigned> Ops,
                                   int FI,
-                                  LiveIntervals *LIS = nullptr) const;
+                                  LiveIntervals *LIS = nullptr,
+                                  VirtRegMap *VRM = nullptr) const;
 
   /// Same as the previous version except it allows folding of any load and
   /// store from / to any address, not just from a specific stack slot.
@@ -1024,7 +1032,8 @@
   foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
                         ArrayRef<unsigned> Ops,
                         MachineBasicBlock::iterator InsertPt, int FrameIndex,
-                        LiveIntervals *LIS = nullptr) const {
+                        LiveIntervals *LIS = nullptr,
+                        VirtRegMap *VRM = nullptr) const {
     return nullptr;
   }
 
@@ -1144,8 +1153,9 @@
 
   /// Get the base operand and byte offset of an instruction that reads/writes
   /// memory.
-  virtual bool getMemOperandWithOffset(MachineInstr &MI,
-                                       MachineOperand *&BaseOp, int64_t &Offset,
+  virtual bool getMemOperandWithOffset(const MachineInstr &MI,
+                                       const MachineOperand *&BaseOp,
+                                       int64_t &Offset,
                                        const TargetRegisterInfo *TRI) const {
     return false;
   }
@@ -1170,8 +1180,8 @@
   /// or
   ///   DAG->addMutation(createStoreClusterDAGMutation(DAG->TII, DAG->TRI));
   /// to TargetPassConfig::createMachineScheduler() to have an effect.
-  virtual bool shouldClusterMemOps(MachineOperand &BaseOp1,
-                                   MachineOperand &BaseOp2,
+  virtual bool shouldClusterMemOps(const MachineOperand &BaseOp1,
+                                   const MachineOperand &BaseOp2,
                                    unsigned NumLoads) const {
     llvm_unreachable("target did not implement shouldClusterMemOps()");
   }
@@ -1259,8 +1269,9 @@
 
   /// Measure the specified inline asm to determine an approximation of its
   /// length.
-  virtual unsigned getInlineAsmLength(const char *Str,
-                                      const MCAsmInfo &MAI) const;
+  virtual unsigned getInlineAsmLength(
+    const char *Str, const MCAsmInfo &MAI,
+    const TargetSubtargetInfo *STI = nullptr) const;
 
   /// Allocate and return a hazard recognizer to use for this target when
   /// scheduling the machine instructions before register allocation.
@@ -1548,7 +1559,8 @@
   /// See also MachineInstr::mayAlias, which is implemented on top of this
   /// function.
   virtual bool
-  areMemAccessesTriviallyDisjoint(MachineInstr &MIa, MachineInstr &MIb,
+  areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
+                                  const MachineInstr &MIb,
                                   AliasAnalysis *AA = nullptr) const {
     assert((MIa.mayLoad() || MIa.mayStore()) &&
            "MIa must load from or modify a memory location");
@@ -1681,6 +1693,10 @@
     return false;
   }
 
+  /// Produce RHS description of parameter's loading instruction \p MI.
+  virtual Optional<ParamLoadedValue>
+  describeLoadedValue(const MachineInstr &MI) const;
+
 private:
   unsigned CallFrameSetupOpcode, CallFrameDestroyOpcode;
   unsigned CatchRetOpcode;
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h b/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h
index fa71024..d5cca60 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h
@@ -188,6 +188,7 @@
     bool IsSwiftSelf : 1;
     bool IsSwiftError : 1;
     uint16_t Alignment = 0;
+    Type *ByValType = nullptr;
 
     ArgListEntry()
         : IsSExt(false), IsZExt(false), IsInReg(false), IsSRet(false),
@@ -238,7 +239,14 @@
   /// Return the pointer type for the given address space, defaults to
   /// the pointer type from the data layout.
   /// FIXME: The default needs to be removed once all the code is updated.
-  MVT getPointerTy(const DataLayout &DL, uint32_t AS = 0) const {
+  virtual MVT getPointerTy(const DataLayout &DL, uint32_t AS = 0) const {
+    return MVT::getIntegerVT(DL.getPointerSizeInBits(AS));
+  }
+
+  /// Return the in-memory pointer type for the given address space, defaults to
+  /// the pointer type from the data layout.  FIXME: The default needs to be
+  /// removed once all the code is updated.
+  MVT getPointerMemTy(const DataLayout &DL, uint32_t AS = 0) const {
     return MVT::getIntegerVT(DL.getPointerSizeInBits(AS));
   }
 
@@ -294,6 +302,9 @@
     // The default action for one element vectors is to scalarize
     if (VT.getVectorNumElements() == 1)
       return TypeScalarizeVector;
+    // The default action for an odd-width vector is to widen.
+    if (!VT.isPow2VectorType())
+      return TypeWidenVector;
     // The default action for other vectors is to promote
     return TypePromoteInteger;
   }
@@ -390,8 +401,9 @@
   /// efficiently, casting the load to a smaller vector of larger types and
   /// loading is more efficient, however, this can be undone by optimizations in
   /// dag combiner.
-  virtual bool isLoadBitCastBeneficial(EVT LoadVT,
-                                       EVT BitcastVT) const {
+  virtual bool isLoadBitCastBeneficial(EVT LoadVT, EVT BitcastVT,
+                                       const SelectionDAG &DAG,
+                                       const MachineMemOperand &MMO) const {
     // Don't do if we could do an indexed load on the original type, but not on
     // the new one.
     if (!LoadVT.isSimple() || !BitcastVT.isSimple())
@@ -405,14 +417,18 @@
         getTypeToPromoteTo(ISD::LOAD, LoadMVT) == BitcastVT.getSimpleVT())
       return false;
 
-    return true;
+    bool Fast = false;
+    return allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), BitcastVT,
+                              MMO, &Fast) && Fast;
   }
 
   /// Return true if the following transform is beneficial:
   /// (store (y (conv x)), y*)) -> (store x, (x*))
-  virtual bool isStoreBitCastBeneficial(EVT StoreVT, EVT BitcastVT) const {
+  virtual bool isStoreBitCastBeneficial(EVT StoreVT, EVT BitcastVT,
+                                        const SelectionDAG &DAG,
+                                        const MachineMemOperand &MMO) const {
     // Default to the same logic as loads.
-    return isLoadBitCastBeneficial(StoreVT, BitcastVT);
+    return isLoadBitCastBeneficial(StoreVT, BitcastVT, DAG, MMO);
   }
 
   /// Return true if it is expected to be cheaper to do a store of a non-zero
@@ -424,10 +440,12 @@
     return false;
   }
 
-  /// Allow store merging after legalization in addition to before legalization.
-  /// This may catch stores that do not exist earlier (eg, stores created from
-  /// intrinsics).
-  virtual bool mergeStoresAfterLegalization() const { return true; }
+  /// Allow store merging for the specified type after legalization in addition
+  /// to before legalization. This may transform stores that do not exist
+  /// earlier (for example, stores created from intrinsics).
+  virtual bool mergeStoresAfterLegalization(EVT MemVT) const {
+    return true;
+  }
 
   /// Returns if it's reasonable to merge stores to MemVT size.
   virtual bool canMergeStoresTo(unsigned AS, EVT MemVT,
@@ -524,13 +542,22 @@
   /// There are two ways to clear extreme bits (either low or high):
   /// Mask:    x &  (-1 << y)  (the instcombine canonical form)
   /// Shifts:  x >> y << y
-  /// Return true if the variant with 2 shifts is preferred.
+  /// Return true if the variant with 2 variable shifts is preferred.
   /// Return false if there is no preference.
-  virtual bool preferShiftsToClearExtremeBits(SDValue X) const {
+  virtual bool shouldFoldMaskToVariableShiftPair(SDValue X) const {
     // By default, let's assume that no one prefers shifts.
     return false;
   }
 
+  /// Return true if it is profitable to fold a pair of shifts into a mask.
+  /// This is usually true on most targets. But some targets, like Thumb1,
+  /// have immediate shift instructions, but no immediate "and" instruction;
+  /// this makes the fold unprofitable.
+  virtual bool shouldFoldConstantShiftPairToMask(const SDNode *N,
+                                                 CombineLevel Level) const {
+    return true;
+  }
+
   /// Should we tranform the IR-optimal check for whether given truncation
   /// down into KeptBits would be truncating or not:
   ///   (add %x, (1 << (KeptBits-1))) srccond (1 << KeptBits)
@@ -544,6 +571,16 @@
     return false;
   }
 
+  /// These two forms are equivalent:
+  ///   sub %y, (xor %x, -1)
+  ///   add (add %x, 1), %y
+  /// The variant with two add's is IR-canonical.
+  /// Some targets may prefer one to the other.
+  virtual bool preferIncOfAddToSubOfNot(EVT VT) const {
+    // By default, let's assume that everyone prefers the form with two add's.
+    return true;
+  }
+
   /// Return true if the target wants to use the optimization that
   /// turns ext(promotableInst1(...(promotableInstN(load)))) into
   /// promotedInst1(...(promotedInstN(ext(load)))).
@@ -563,11 +600,6 @@
     return false;
   }
 
-  /// Return true if target supports floating point exceptions.
-  bool hasFloatingPointExceptions() const {
-    return HasFloatingPointExceptions;
-  }
-
   /// Return true if target always beneficiates from combining into FMA for a
   /// given value type. This must typically return false on targets where FMA
   /// takes more cycles to execute than FADD.
@@ -622,12 +654,21 @@
 
   /// Return the register class that should be used for the specified value
   /// type.
-  virtual const TargetRegisterClass *getRegClassFor(MVT VT) const {
+  virtual const TargetRegisterClass *getRegClassFor(MVT VT, bool isDivergent = false) const {
+    (void)isDivergent;
     const TargetRegisterClass *RC = RegClassForVT[VT.SimpleTy];
     assert(RC && "This value type is not natively supported!");
     return RC;
   }
 
+  /// Allows target to decide about the register class of the
+  /// specific value that is live outside the defining block.
+  /// Returns true if the value needs uniform register class.
+  virtual bool requiresUniformRegister(MachineFunction &MF,
+                                       const Value *) const {
+    return false;
+  }
+
   /// Return the 'representative' register class for the specified value
   /// type.
   ///
@@ -778,7 +819,8 @@
   /// Returns true if the target can instruction select the specified FP
   /// immediate natively. If false, the legalizer will materialize the FP
   /// immediate as a load from a constant pool.
-  virtual bool isFPImmLegal(const APFloat &/*Imm*/, EVT /*VT*/) const {
+  virtual bool isFPImmLegal(const APFloat & /*Imm*/, EVT /*VT*/,
+                            bool ForCodeSize = false) const {
     return false;
   }
 
@@ -840,6 +882,7 @@
     default:
       llvm_unreachable("Unexpected fixed point operation.");
     case ISD::SMULFIX:
+    case ISD::SMULFIXSAT:
     case ISD::UMULFIX:
       Supported = isSupportedFixedPointOperation(Op, VT, Scale);
       break;
@@ -876,6 +919,8 @@
       case ISD::STRICT_FFLOOR: EqOpc = ISD::FFLOOR; break;
       case ISD::STRICT_FROUND: EqOpc = ISD::FROUND; break;
       case ISD::STRICT_FTRUNC: EqOpc = ISD::FTRUNC; break;
+      case ISD::STRICT_FP_ROUND: EqOpc = ISD::FP_ROUND; break;
+      case ISD::STRICT_FP_EXTEND: EqOpc = ISD::FP_EXTEND; break;
     }
 
     auto Action = getOperationAction(EqOpc, VT);
@@ -942,21 +987,20 @@
 
   /// Return true if lowering to a jump table is suitable for a set of case
   /// clusters which may contain \p NumCases cases, \p Range range of values.
-  /// FIXME: This function check the maximum table size and density, but the
-  /// minimum size is not checked. It would be nice if the minimum size is
-  /// also combined within this function. Currently, the minimum size check is
-  /// performed in findJumpTable() in SelectionDAGBuiler and
-  /// getEstimatedNumberOfCaseClusters() in BasicTTIImpl.
   virtual bool isSuitableForJumpTable(const SwitchInst *SI, uint64_t NumCases,
                                       uint64_t Range) const {
-    const bool OptForSize = SI->getParent()->getParent()->optForSize();
+    // FIXME: This function check the maximum table size and density, but the
+    // minimum size is not checked. It would be nice if the minimum size is
+    // also combined within this function. Currently, the minimum size check is
+    // performed in findJumpTable() in SelectionDAGBuiler and
+    // getEstimatedNumberOfCaseClusters() in BasicTTIImpl.
+    const bool OptForSize = SI->getParent()->getParent()->hasOptSize();
     const unsigned MinDensity = getMinimumJumpTableDensity(OptForSize);
-    const unsigned MaxJumpTableSize =
-        OptForSize || getMaximumJumpTableSize() == 0
-            ? UINT_MAX
-            : getMaximumJumpTableSize();
-    // Check whether a range of clusters is dense enough for a jump table.
-    if (Range <= MaxJumpTableSize &&
+    const unsigned MaxJumpTableSize = getMaximumJumpTableSize();
+    
+    // Check whether the number of cases is small enough and
+    // the range is dense enough for a jump table.
+    if ((OptForSize || Range <= MaxJumpTableSize) &&
         (NumCases * 100 >= Range * MinDensity)) {
       return true;
     }
@@ -1151,24 +1195,42 @@
   EVT getValueType(const DataLayout &DL, Type *Ty,
                    bool AllowUnknown = false) const {
     // Lower scalar pointers to native pointer types.
-    if (PointerType *PTy = dyn_cast<PointerType>(Ty))
+    if (auto *PTy = dyn_cast<PointerType>(Ty))
       return getPointerTy(DL, PTy->getAddressSpace());
 
-    if (Ty->isVectorTy()) {
-      VectorType *VTy = cast<VectorType>(Ty);
-      Type *Elm = VTy->getElementType();
+    if (auto *VTy = dyn_cast<VectorType>(Ty)) {
+      Type *EltTy = VTy->getElementType();
       // Lower vectors of pointers to native pointer types.
+      if (auto *PTy = dyn_cast<PointerType>(EltTy)) {
+        EVT PointerTy(getPointerTy(DL, PTy->getAddressSpace()));
+        EltTy = PointerTy.getTypeForEVT(Ty->getContext());
+      }
+      return EVT::getVectorVT(Ty->getContext(), EVT::getEVT(EltTy, false),
+                              VTy->getNumElements());
+    }
+
+    return EVT::getEVT(Ty, AllowUnknown);
+  }
+
+  EVT getMemValueType(const DataLayout &DL, Type *Ty,
+                      bool AllowUnknown = false) const {
+    // Lower scalar pointers to native pointer types.
+    if (PointerType *PTy = dyn_cast<PointerType>(Ty))
+      return getPointerMemTy(DL, PTy->getAddressSpace());
+    else if (VectorType *VTy = dyn_cast<VectorType>(Ty)) {
+      Type *Elm = VTy->getElementType();
       if (PointerType *PT = dyn_cast<PointerType>(Elm)) {
-        EVT PointerTy(getPointerTy(DL, PT->getAddressSpace()));
+        EVT PointerTy(getPointerMemTy(DL, PT->getAddressSpace()));
         Elm = PointerTy.getTypeForEVT(Ty->getContext());
       }
-
       return EVT::getVectorVT(Ty->getContext(), EVT::getEVT(Elm, false),
                        VTy->getNumElements());
     }
-    return EVT::getEVT(Ty, AllowUnknown);
+
+    return getValueType(DL, Ty, AllowUnknown);
   }
 
+
   /// Return the MVT corresponding to this LLVM type. See getValueType.
   MVT getSimpleValueType(const DataLayout &DL, Type *Ty,
                          bool AllowUnknown = false) const {
@@ -1338,18 +1400,6 @@
     return OptSize ? MaxLoadsPerMemcmpOptSize : MaxLoadsPerMemcmp;
   }
 
-  /// For memcmp expansion when the memcmp result is only compared equal or
-  /// not-equal to 0, allow up to this number of load pairs per block. As an
-  /// example, this may allow 'memcmp(a, b, 3) == 0' in a single block:
-  ///   a0 = load2bytes &a[0]
-  ///   b0 = load2bytes &b[0]
-  ///   a2 = load1byte  &a[2]
-  ///   b2 = load1byte  &b[2]
-  ///   r  = cmp eq (a0 ^ b0 | a2 ^ b2), 0
-  virtual unsigned getMemcmpEqZeroLoadsPerBlock() const {
-    return 1;
-  }
-
   /// Get maximum # of store operations permitted for llvm.memmove
   ///
   /// This function returns the maximum number of store operations permitted
@@ -1369,10 +1419,10 @@
   /// copy/move/set is converted to a sequence of store operations. Its use
   /// helps to ensure that such replacements don't generate code that causes an
   /// alignment error (trap) on the target machine.
-  virtual bool allowsMisalignedMemoryAccesses(EVT,
-                                              unsigned AddrSpace = 0,
-                                              unsigned Align = 1,
-                                              bool * /*Fast*/ = nullptr) const {
+  virtual bool allowsMisalignedMemoryAccesses(
+      EVT, unsigned AddrSpace = 0, unsigned Align = 1,
+      MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
+      bool * /*Fast*/ = nullptr) const {
     return false;
   }
 
@@ -1380,8 +1430,18 @@
   /// given address space and alignment. If the access is allowed, the optional
   /// final parameter returns if the access is also fast (as defined by the
   /// target).
+  bool
+  allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT,
+                     unsigned AddrSpace = 0, unsigned Alignment = 1,
+                     MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
+                     bool *Fast = nullptr) const;
+
+  /// Return true if the target supports a memory access of this type for the
+  /// given MachineMemOperand. If the access is allowed, the optional
+  /// final parameter returns if the access is also fast (as defined by the
+  /// target).
   bool allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT,
-                          unsigned AddrSpace = 0, unsigned Alignment = 1,
+                          const MachineMemOperand &MMO,
                           bool *Fast = nullptr) const;
 
   /// Returns the target specific optimal type for load and store operations as
@@ -1395,12 +1455,11 @@
   /// zero. 'MemcpyStrSrc' indicates whether the memcpy source is constant so it
   /// does not need to be loaded.  It returns EVT::Other if the type should be
   /// determined using generic target-independent logic.
-  virtual EVT getOptimalMemOpType(uint64_t /*Size*/,
-                                  unsigned /*DstAlign*/, unsigned /*SrcAlign*/,
-                                  bool /*IsMemset*/,
-                                  bool /*ZeroMemset*/,
-                                  bool /*MemcpyStrSrc*/,
-                                  MachineFunction &/*MF*/) const {
+  virtual EVT
+  getOptimalMemOpType(uint64_t /*Size*/, unsigned /*DstAlign*/,
+                      unsigned /*SrcAlign*/, bool /*IsMemset*/,
+                      bool /*ZeroMemset*/, bool /*MemcpyStrSrc*/,
+                      const AttributeList & /*FuncAttributes*/) const {
     return MVT::Other;
   }
 
@@ -1548,8 +1607,9 @@
   }
 
   /// Returns true if a cast from SrcAS to DestAS is "cheap", such that e.g. we
-  /// are happy to sink it into basic blocks.
-  virtual bool isCheapAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const {
+  /// are happy to sink it into basic blocks. A cast may be free, but not
+  /// necessarily a no-op. e.g. a free truncate from a 64-bit to 32-bit pointer.
+  virtual bool isFreeAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const {
     return isNoopAddrSpaceCast(SrcAS, DestAS);
   }
 
@@ -1879,12 +1939,6 @@
   /// control.
   void setJumpIsExpensive(bool isExpensive = true);
 
-  /// Tells the code generator that this target supports floating point
-  /// exceptions and cares about preserving floating point exception behavior.
-  void setHasFloatingPointExceptions(bool FPExceptions = true) {
-    HasFloatingPointExceptions = FPExceptions;
-  }
-
   /// Tells the code generator which bitwidths to bypass.
   void addBypassSlowDiv(unsigned int SlowBitWidth, unsigned int FastBitWidth) {
     BypassSlowDivWidths[SlowBitWidth] = FastBitWidth;
@@ -2173,6 +2227,8 @@
     case ISD::UADDSAT:
     case ISD::FMINNUM:
     case ISD::FMAXNUM:
+    case ISD::FMINNUM_IEEE:
+    case ISD::FMAXNUM_IEEE:
     case ISD::FMINIMUM:
     case ISD::FMAXIMUM:
       return true;
@@ -2180,6 +2236,30 @@
     }
   }
 
+  /// Return true if the node is a math/logic binary operator.
+  virtual bool isBinOp(unsigned Opcode) const {
+    // A commutative binop must be a binop.
+    if (isCommutativeBinOp(Opcode))
+      return true;
+    // These are non-commutative binops.
+    switch (Opcode) {
+    case ISD::SUB:
+    case ISD::SHL:
+    case ISD::SRL:
+    case ISD::SRA:
+    case ISD::SDIV:
+    case ISD::UDIV:
+    case ISD::SREM:
+    case ISD::UREM:
+    case ISD::FSUB:
+    case ISD::FDIV:
+    case ISD::FREM:
+      return true;
+    default:
+      return false;
+    }
+  }
+
   /// Return true if it's free to truncate a value of type FromTy to type
   /// ToTy. e.g. On x86 it's free to truncate a i32 value in register EAX to i16
   /// by referencing its sub-register AX.
@@ -2439,6 +2519,31 @@
     return false;
   }
 
+  /// Return true if extraction of a scalar element from the given vector type
+  /// at the given index is cheap. For example, if scalar operations occur on
+  /// the same register file as vector operations, then an extract element may
+  /// be a sub-register rename rather than an actual instruction.
+  virtual bool isExtractVecEltCheap(EVT VT, unsigned Index) const {
+    return false;
+  }
+
+  /// Try to convert math with an overflow comparison into the corresponding DAG
+  /// node operation. Targets may want to override this independently of whether
+  /// the operation is legal/custom for the given type because it may obscure
+  /// matching of other patterns.
+  virtual bool shouldFormOverflowOp(unsigned Opcode, EVT VT) const {
+    // TODO: The default logic is inherited from code in CodeGenPrepare.
+    // The opcode should not make a difference by default?
+    if (Opcode != ISD::UADDO)
+      return false;
+
+    // Allow the transform as long as we have an integer type that is not
+    // obviously illegal and unsupported.
+    if (VT.isVector())
+      return false;
+    return VT.isSimple() || !isOperationExpand(Opcode, VT);
+  }
+
   // Return true if it is profitable to use a scalar input to a BUILD_VECTOR
   // even if the vector itself has multiple uses.
   virtual bool aggressivelyPreferBuildVectorSources(EVT VecVT) const {
@@ -2519,10 +2624,6 @@
   /// predication.
   bool JumpIsExpensive;
 
-  /// Whether the target supports or cares about preserving floating point
-  /// exception behavior.
-  bool HasFloatingPointExceptions;
-
   /// This target prefers to use _setjmp to implement llvm.setjmp.
   ///
   /// Defaults to false.
@@ -2858,11 +2959,10 @@
 
   /// Returns a pair of (return value, chain).
   /// It is an error to pass RTLIB::UNKNOWN_LIBCALL as \p LC.
-  std::pair<SDValue, SDValue> makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC,
-                                          EVT RetVT, ArrayRef<SDValue> Ops,
-                                          bool isSigned, const SDLoc &dl,
-                                          bool doesNotReturn = false,
-                                          bool isReturnValueUsed = true) const;
+  std::pair<SDValue, SDValue> makeLibCall(
+      SelectionDAG &DAG, RTLIB::Libcall LC, EVT RetVT, ArrayRef<SDValue> Ops,
+      bool isSigned, const SDLoc &dl, bool doesNotReturn = false,
+      bool isReturnValueUsed = true, bool isPostTypeLegalization = false) const;
 
   /// Check whether parameters to a call that are passed in callee saved
   /// registers are the same as from the calling function.  This needs to be
@@ -2900,6 +3000,20 @@
     }
   };
 
+  /// Determines the optimal series of memory ops to replace the memset / memcpy.
+  /// Return true if the number of memory ops is below the threshold (Limit).
+  /// It returns the types of the sequence of memory ops to perform
+  /// memset / memcpy by reference.
+  bool findOptimalMemOpLowering(std::vector<EVT> &MemOps,
+                                unsigned Limit, uint64_t Size,
+                                unsigned DstAlign, unsigned SrcAlign,
+                                bool IsMemset,
+                                bool ZeroMemset,
+                                bool MemcpyStrSrc,
+                                bool AllowOverlap,
+                                unsigned DstAS, unsigned SrcAS,
+                                const AttributeList &FuncAttributes) const;
+
   /// Check to see if the specified operand of the specified instruction is a
   /// constant integer.  If so, check to see if there are any bits set in the
   /// constant that are not demanded.  If so, shrink the constant and return
@@ -3025,6 +3139,10 @@
                                                  TargetLoweringOpt &TLO,
                                                  unsigned Depth = 0) const;
 
+  /// This method returns the constant pool value that will be loaded by LD.
+  /// NOTE: You must check for implicit extensions of the constant by LD.
+  virtual const Constant *getTargetConstantFromLoad(LoadSDNode *LD) const;
+
   /// If \p SNaN is false, \returns true if \p Op is known to never be any
   /// NaN. If \p sNaN is true, returns if \p Op is known to never be a signaling
   /// NaN.
@@ -3112,15 +3230,6 @@
     return true;
   }
 
-  /// Return true if it is profitable to fold a pair of shifts into a mask.
-  /// This is usually true on most targets. But some targets, like Thumb1,
-  /// have immediate shift instructions, but no immediate "and" instruction;
-  /// this makes the fold unprofitable.
-  virtual bool shouldFoldShiftPairToMask(const SDNode *N,
-                                         CombineLevel Level) const {
-    return true;
-  }
-
   // Return true if it is profitable to combine a BUILD_VECTOR with a stride-pattern
   // to a shuffle and a truncate.
   // Example of such a combine:
@@ -3454,6 +3563,15 @@
     return false;
   }
 
+  /// For most targets, an LLVM type must be broken down into multiple
+  /// smaller types. Usually the halves are ordered according to the endianness
+  /// but for some platform that would break. So this method will default to
+  /// matching the endianness but can be overridden.
+  virtual bool
+  shouldSplitFunctionArgumentsAsLittleEndian(const DataLayout &DL) const {
+    return DL.isLittleEndian();
+  }
+
   /// Returns a 0 terminated array of registers that can be safely used as
   /// scratch registers.
   virtual const MCPhysReg *getScratchRegisters(CallingConv::ID CC) const {
@@ -3663,7 +3781,7 @@
                                             SelectionDAG &DAG) const;
 
   // Lower custom output constraints. If invalid, return SDValue().
-  virtual SDValue LowerAsmOutputForConstraint(SDValue &Chain, SDValue *Flag,
+  virtual SDValue LowerAsmOutputForConstraint(SDValue &Chain, SDValue &Flag,
                                               SDLoc DL,
                                               const AsmOperandInfo &OpInfo,
                                               SelectionDAG &DAG) const;
@@ -3872,6 +3990,25 @@
   /// integers as its arguments.
   SDValue expandFixedPointMul(SDNode *Node, SelectionDAG &DAG) const;
 
+  /// Method for building the DAG expansion of ISD::U(ADD|SUB)O. Expansion
+  /// always suceeds and populates the Result and Overflow arguments.
+  void expandUADDSUBO(SDNode *Node, SDValue &Result, SDValue &Overflow,
+                      SelectionDAG &DAG) const;
+
+  /// Method for building the DAG expansion of ISD::S(ADD|SUB)O. Expansion
+  /// always suceeds and populates the Result and Overflow arguments.
+  void expandSADDSUBO(SDNode *Node, SDValue &Result, SDValue &Overflow,
+                      SelectionDAG &DAG) const;
+
+  /// Method for building the DAG expansion of ISD::[US]MULO. Returns whether
+  /// expansion was successful and populates the Result and Overflow arguments.
+  bool expandMULO(SDNode *Node, SDValue &Result, SDValue &Overflow,
+                  SelectionDAG &DAG) const;
+
+  /// Expand a VECREDUCE_* into an explicit calculation. If Count is specified,
+  /// only the first Count elements of the vector are used.
+  SDValue expandVecReduce(SDNode *Node, SelectionDAG &DAG) const;
+
   //===--------------------------------------------------------------------===//
   // Instruction Emitting Hooks
   //
@@ -3932,6 +4069,14 @@
                                                SDValue N1, ISD::CondCode Cond,
                                                DAGCombinerInfo &DCI,
                                                const SDLoc &DL) const;
+
+  SDValue prepareUREMEqFold(EVT SETCCVT, SDValue REMNode,
+                            SDValue CompTargetNode, ISD::CondCode Cond,
+                            DAGCombinerInfo &DCI, const SDLoc &DL,
+                            SmallVectorImpl<SDNode *> &Created) const;
+  SDValue buildUREMEqFold(EVT SETCCVT, SDValue REMNode, SDValue CompTargetNode,
+                          ISD::CondCode Cond, DAGCombinerInfo &DCI,
+                          const SDLoc &DL) const;
 };
 
 /// Given an LLVM IR type and return type attributes, compute the return value
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h b/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h
index 1def50d..0bd82aa 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h
@@ -24,6 +24,7 @@
 struct MachineSchedContext;
 class PassConfigImpl;
 class ScheduleDAGInstrs;
+class CSEConfigBase;
 
 // The old pass manager infrastructure is hidden in a legacy namespace now.
 namespace legacy {
@@ -319,6 +320,9 @@
   /// By default, it's enabled for non O0 levels.
   virtual bool isGISelCSEEnabled() const;
 
+  /// Returns the CSEConfig object to use for the current optimization level.
+  virtual std::unique_ptr<CSEConfigBase> getCSEConfig() const;
+
 protected:
   // Helper to verify the analysis is really immutable.
   void setOpt(bool &Opt, bool Val);
@@ -360,11 +364,11 @@
 
   /// addFastRegAlloc - Add the minimum set of target-independent passes that
   /// are required for fast register allocation.
-  virtual void addFastRegAlloc(FunctionPass *RegAllocPass);
+  virtual void addFastRegAlloc();
 
   /// addOptimizedRegAlloc - Add passes related to register allocation.
   /// LLVMTargetMachine provides standard regalloc passes for most targets.
-  virtual void addOptimizedRegAlloc(FunctionPass *RegAllocPass);
+  virtual void addOptimizedRegAlloc();
 
   /// addPreRewrite - Add passes to the optimized register allocation pipeline
   /// after register allocation is complete, but before virtual registers are
@@ -374,10 +378,18 @@
   /// after RABasic or RAGreedy, they should take advantage of LiveRegMatrix.
   /// When these passes run, VirtRegMap contains legal physreg assignments for
   /// all virtual registers.
+  ///
+  /// Note if the target overloads addRegAssignAndRewriteOptimized, this may not
+  /// be honored. This is also not generally used for the the fast variant,
+  /// where the allocation and rewriting are done in one pass.
   virtual bool addPreRewrite() {
     return false;
   }
 
+  /// Add passes to be run immediately after virtual registers are rewritten
+  /// to physical registers.
+  virtual void addPostRewrite() { }
+
   /// This method may be implemented by targets that want to run passes after
   /// register allocation pass pipeline but before prolog-epilog insertion.
   virtual void addPostRegAlloc() { }
@@ -431,7 +443,12 @@
 
   /// addMachinePasses helper to create the target-selected or overriden
   /// regalloc pass.
-  FunctionPass *createRegAllocPass(bool Optimized);
+  virtual FunctionPass *createRegAllocPass(bool Optimized);
+
+  /// Add core register alloator passes which do the actual register assignment
+  /// and rewriting. \returns true if any passes were added.
+  virtual bool addRegAssignmentFast();
+  virtual bool addRegAssignmentOptimized();
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h b/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h
index 5ed1e44..9a3ab47 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h
@@ -520,15 +520,18 @@
   /// function.  Used by MachineRegisterInfo::isConstantPhysReg().
   virtual bool isConstantPhysReg(unsigned PhysReg) const { return false; }
 
+  /// Returns true if the register class is considered divergent.
+  virtual bool isDivergentRegClass(const TargetRegisterClass *RC) const {
+    return false;
+  }
+
   /// Physical registers that may be modified within a function but are
   /// guaranteed to be restored before any uses. This is useful for targets that
   /// have call sequences where a GOT register may be updated by the caller
   /// prior to a call and is guaranteed to be restored (also by the caller)
   /// after the call.
   virtual bool isCallerPreservedPhysReg(unsigned PhysReg,
-                                        const MachineFunction &MF) const {
-    return false;
-  }
+                                        const MachineFunction &MF) const;
 
   /// Prior to adding the live-out mask to a stackmap or patchpoint
   /// instruction, provide the target the opportunity to adjust it (mainly to
@@ -985,7 +988,7 @@
 
   /// getFrameRegister - This method should return the register used as a base
   /// for values allocated in the current stack frame.
-  virtual unsigned getFrameRegister(const MachineFunction &MF) const = 0;
+  virtual Register getFrameRegister(const MachineFunction &MF) const = 0;
 
   /// Mark a register and all its aliases as reserved in the given set.
   void markSuperRegs(BitVector &RegisterSet, unsigned Reg) const;
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h b/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h
index bf0e9b2..037fc3e 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h
@@ -42,6 +42,7 @@
 class SDep;
 class SelectionDAGTargetInfo;
 struct SubtargetFeatureKV;
+struct SubtargetSubTypeKV;
 struct SubtargetInfoKV;
 class SUnit;
 class TargetFrameLowering;
@@ -62,8 +63,7 @@
 protected: // Can only create subclasses...
   TargetSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS,
                       ArrayRef<SubtargetFeatureKV> PF,
-                      ArrayRef<SubtargetFeatureKV> PD,
-                      const SubtargetInfoKV *ProcSched,
+                      ArrayRef<SubtargetSubTypeKV> PD,
                       const MCWriteProcResEntry *WPR,
                       const MCWriteLatencyEntry *WL,
                       const MCReadAdvanceEntry *RA, const InstrStage *IS,
@@ -193,6 +193,9 @@
   /// for preRA scheduling with the source level scheduler.
   virtual bool enableMachineSchedDefaultSched() const { return true; }
 
+  /// True if the subtarget should run MachinePipeliner
+  virtual bool enableMachinePipeliner() const { return true; };
+
   /// True if the subtarget should enable joining global copies.
   ///
   /// By default this is enabled if the machine scheduler is enabled, but
@@ -246,6 +249,10 @@
       std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations) const {
   }
 
+  /// Default to DFA for resource management, return false when target will use
+  /// ProcResource in InstrSchedModel instead.
+  virtual bool useDFAforSMS() const { return true; }
+
   // For use with PostRAScheduling: get the minimum optimization level needed
   // to enable post-RA scheduling.
   virtual CodeGenOpt::Level getOptLevelToEnablePostRAScheduler() const {
@@ -284,6 +291,14 @@
 
   /// This is called after a .mir file was loaded.
   virtual void mirFileLoaded(MachineFunction &MF) const;
+
+  /// True if the register allocator should use the allocation orders exactly as
+  /// written in the tablegen descriptions, false if it should allocate
+  /// the specified physical register later if is it callee-saved.
+  virtual bool ignoreCSRForAllocationOrder(const MachineFunction &MF,
+                                           unsigned PhysReg) const {
+    return false;
+  }
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td b/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td
index f82faf2..feea7e5 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td
+++ b/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td
@@ -62,89 +62,105 @@
 def v64i16 : ValueType<1024,39>;   // 64 x i16 vector value
 def v128i16: ValueType<2048,40>;   //128 x i16 vector value
 
-def v1i32  : ValueType<32 , 41>;   //  1 x i32 vector value
-def v2i32  : ValueType<64 , 42>;   //  2 x i32 vector value
-def v4i32  : ValueType<128, 43>;   //  4 x i32 vector value
-def v8i32  : ValueType<256, 44>;   //  8 x i32 vector value
-def v16i32 : ValueType<512, 45>;   // 16 x i32 vector value
-def v32i32 : ValueType<1024,46>;   // 32 x i32 vector value
-def v64i32 : ValueType<2048,47>;   // 64 x i32 vector value
+def v1i32    : ValueType<32 , 41>;   //  1 x i32 vector value
+def v2i32    : ValueType<64 , 42>;   //  2 x i32 vector value
+def v3i32    : ValueType<96 , 43>;   //  3 x i32 vector value
+def v4i32    : ValueType<128, 44>;   //  4 x i32 vector value
+def v5i32    : ValueType<160, 45>;   //  5 x i32 vector value
+def v8i32    : ValueType<256, 46>;   //  8 x i32 vector value
+def v16i32   : ValueType<512, 47>;   // 16 x i32 vector value
+def v32i32   : ValueType<1024,48>;   // 32 x i32 vector value
+def v64i32   : ValueType<2048,49>;   // 64 x i32 vector value
+def v128i32  : ValueType<4096,50>;   // 128 x i32 vector value
+def v256i32  : ValueType<8182,51>;   // 256 x i32 vector value
+def v512i32  : ValueType<16384,52>;  // 512 x i32 vector value
+def v1024i32 : ValueType<32768,53>;  // 1024 x i32 vector value
+def v2048i32 : ValueType<65536,54>;  // 2048 x i32 vector value
 
-def v1i64  : ValueType<64 , 48>;   //  1 x i64 vector value
-def v2i64  : ValueType<128, 49>;   //  2 x i64 vector value
-def v4i64  : ValueType<256, 50>;   //  4 x i64 vector value
-def v8i64  : ValueType<512, 51>;   //  8 x i64 vector value
-def v16i64 : ValueType<1024,52>;   // 16 x i64 vector value
-def v32i64 : ValueType<2048,53>;   // 32 x i64 vector value
+def v1i64  : ValueType<64 , 55>;   //  1 x i64 vector value
+def v2i64  : ValueType<128, 56>;   //  2 x i64 vector value
+def v4i64  : ValueType<256, 57>;   //  4 x i64 vector value
+def v8i64  : ValueType<512, 58>;   //  8 x i64 vector value
+def v16i64 : ValueType<1024,59>;   // 16 x i64 vector value
+def v32i64 : ValueType<2048,60>;   // 32 x i64 vector value
 
-def v1i128 : ValueType<128, 54>;   //  1 x i128 vector value
+def v1i128 : ValueType<128, 61>;   //  1 x i128 vector value
 
-def nxv1i1  : ValueType<1,   55>;  // n x  1 x i1  vector value
-def nxv2i1  : ValueType<2,   56>;  // n x  2 x i1  vector value
-def nxv4i1  : ValueType<4,   57>;  // n x  4 x i1  vector value
-def nxv8i1  : ValueType<8,   58>;  // n x  8 x i1  vector value
-def nxv16i1 : ValueType<16,  59>;  // n x 16 x i1  vector value
-def nxv32i1 : ValueType<32,  60>;  // n x 32 x i1  vector value
+def nxv1i1  : ValueType<1,   62>;  // n x  1 x i1  vector value
+def nxv2i1  : ValueType<2,   63>;  // n x  2 x i1  vector value
+def nxv4i1  : ValueType<4,   64>;  // n x  4 x i1  vector value
+def nxv8i1  : ValueType<8,   65>;  // n x  8 x i1  vector value
+def nxv16i1 : ValueType<16,  66>;  // n x 16 x i1  vector value
+def nxv32i1 : ValueType<32,  67>;  // n x 32 x i1  vector value
 
-def nxv1i8  : ValueType<8,   61>;  // n x  1 x i8  vector value
-def nxv2i8  : ValueType<16,  62>;  // n x  2 x i8  vector value
-def nxv4i8  : ValueType<32,  63>;  // n x  4 x i8  vector value
-def nxv8i8  : ValueType<64,  64>;  // n x  8 x i8  vector value
-def nxv16i8 : ValueType<128, 65>;  // n x 16 x i8  vector value
-def nxv32i8 : ValueType<256, 66>;  // n x 32 x i8  vector value
+def nxv1i8  : ValueType<8,   68>;  // n x  1 x i8  vector value
+def nxv2i8  : ValueType<16,  69>;  // n x  2 x i8  vector value
+def nxv4i8  : ValueType<32,  70>;  // n x  4 x i8  vector value
+def nxv8i8  : ValueType<64,  71>;  // n x  8 x i8  vector value
+def nxv16i8 : ValueType<128, 72>;  // n x 16 x i8  vector value
+def nxv32i8 : ValueType<256, 73>;  // n x 32 x i8  vector value
 
-def nxv1i16 : ValueType<16,  67>;  // n x  1 x i16 vector value
-def nxv2i16 : ValueType<32,  68>;  // n x  2 x i16 vector value
-def nxv4i16 : ValueType<64,  69>;  // n x  4 x i16 vector value
-def nxv8i16 : ValueType<128, 70>;  // n x  8 x i16 vector value
-def nxv16i16: ValueType<256, 71>;  // n x 16 x i16 vector value
-def nxv32i16: ValueType<512, 72>;  // n x 32 x i16 vector value
+def nxv1i16 : ValueType<16,  74>;  // n x  1 x i16 vector value
+def nxv2i16 : ValueType<32,  75>;  // n x  2 x i16 vector value
+def nxv4i16 : ValueType<64,  76>;  // n x  4 x i16 vector value
+def nxv8i16 : ValueType<128, 77>;  // n x  8 x i16 vector value
+def nxv16i16: ValueType<256, 78>;  // n x 16 x i16 vector value
+def nxv32i16: ValueType<512, 79>;  // n x 32 x i16 vector value
 
-def nxv1i32 : ValueType<32,  73>;  // n x  1 x i32 vector value
-def nxv2i32 : ValueType<64,  74>;  // n x  2 x i32 vector value
-def nxv4i32 : ValueType<128, 75>;  // n x  4 x i32 vector value
-def nxv8i32 : ValueType<256, 76>;  // n x  8 x i32 vector value
-def nxv16i32: ValueType<512, 77>;  // n x 16 x i32 vector value
-def nxv32i32: ValueType<1024,78>;  // n x 32 x i32 vector value
+def nxv1i32 : ValueType<32,  80>;  // n x  1 x i32 vector value
+def nxv2i32 : ValueType<64,  81>;  // n x  2 x i32 vector value
+def nxv4i32 : ValueType<128, 82>;  // n x  4 x i32 vector value
+def nxv8i32 : ValueType<256, 83>;  // n x  8 x i32 vector value
+def nxv16i32: ValueType<512, 84>;  // n x 16 x i32 vector value
+def nxv32i32: ValueType<1024,85>;  // n x 32 x i32 vector value
 
-def nxv1i64 : ValueType<64,  79>;  // n x  1 x i64 vector value
-def nxv2i64 : ValueType<128, 80>;  // n x  2 x i64 vector value
-def nxv4i64 : ValueType<256, 81>;  // n x  4 x i64 vector value
-def nxv8i64 : ValueType<512, 82>;  // n x  8 x i64 vector value
-def nxv16i64: ValueType<1024,83>;  // n x 16 x i64 vector value
-def nxv32i64: ValueType<2048,84>;  // n x 32 x i64 vector value
+def nxv1i64 : ValueType<64,  86>;  // n x  1 x i64 vector value
+def nxv2i64 : ValueType<128, 87>;  // n x  2 x i64 vector value
+def nxv4i64 : ValueType<256, 88>;  // n x  4 x i64 vector value
+def nxv8i64 : ValueType<512, 89>;  // n x  8 x i64 vector value
+def nxv16i64: ValueType<1024,90>;  // n x 16 x i64 vector value
+def nxv32i64: ValueType<2048,91>;  // n x 32 x i64 vector value
 
-def v2f16  : ValueType<32 , 85>;   //  2 x f16 vector value
-def v4f16  : ValueType<64 , 86>;   //  4 x f16 vector value
-def v8f16  : ValueType<128, 87>;   //  8 x f16 vector value
-def v1f32  : ValueType<32 , 88>;   //  1 x f32 vector value
-def v2f32  : ValueType<64 , 89>;   //  2 x f32 vector value
-def v4f32  : ValueType<128, 90>;   //  4 x f32 vector value
-def v8f32  : ValueType<256, 91>;   //  8 x f32 vector value
-def v16f32 : ValueType<512, 92>;   // 16 x f32 vector value
-def v1f64  : ValueType<64,  93>;   //  1 x f64 vector value
-def v2f64  : ValueType<128, 94>;   //  2 x f64 vector value
-def v4f64  : ValueType<256, 95>;   //  4 x f64 vector value
-def v8f64  : ValueType<512, 96>;   //  8 x f64 vector value
+def v2f16    : ValueType<32 , 92>;    //    2 x f16 vector value
+def v4f16    : ValueType<64 , 93>;    //    4 x f16 vector value
+def v8f16    : ValueType<128, 94>;    //    8 x f16 vector value
+def v1f32    : ValueType<32 , 95>;    //    1 x f32 vector value
+def v2f32    : ValueType<64 , 96>;    //    2 x f32 vector value
+def v3f32    : ValueType<96 , 97>;    //    3 x f32 vector value
+def v4f32    : ValueType<128, 98>;    //    4 x f32 vector value
+def v5f32    : ValueType<160, 99>;    //    5 x f32 vector value
+def v8f32    : ValueType<256, 100>;   //    8 x f32 vector value
+def v16f32   : ValueType<512,  101>;  //   16 x f32 vector value
+def v32f32   : ValueType<1024, 102>;  //   32 x f32 vector value
+def v64f32   : ValueType<2048, 103>;  //   64 x f32 vector value
+def v128f32  : ValueType<4096, 104>;  //  128 x f32 vector value
+def v256f32  : ValueType<8182, 105>;  //  256 x f32 vector value
+def v512f32  : ValueType<16384, 106>; //  512 x f32 vector value
+def v1024f32 : ValueType<32768, 107>; // 1024 x f32 vector value
+def v2048f32 : ValueType<65536, 108>; // 2048 x f32 vector value
+def v1f64    : ValueType<64, 109>;    //    1 x f64 vector value
+def v2f64    : ValueType<128, 110>;   //    2 x f64 vector value
+def v4f64    : ValueType<256, 111>;   //    4 x f64 vector value
+def v8f64    : ValueType<512, 112>;   //    8 x f64 vector value
 
-def nxv2f16  : ValueType<32 ,  97>; // n x  2 x f16 vector value
-def nxv4f16  : ValueType<64 ,  98>; // n x  4 x f16 vector value
-def nxv8f16  : ValueType<128,  99>; // n x  8 x f16 vector value
-def nxv1f32  : ValueType<32 , 100>; // n x  1 x f32 vector value
-def nxv2f32  : ValueType<64 , 101>; // n x  2 x f32 vector value
-def nxv4f32  : ValueType<128, 102>; // n x  4 x f32 vector value
-def nxv8f32  : ValueType<256, 103>; // n x  8 x f32 vector value
-def nxv16f32 : ValueType<512, 104>; // n x 16 x f32 vector value
-def nxv1f64  : ValueType<64,  105>; // n x  1 x f64 vector value
-def nxv2f64  : ValueType<128, 106>; // n x  2 x f64 vector value
-def nxv4f64  : ValueType<256, 107>; // n x  4 x f64 vector value
-def nxv8f64  : ValueType<512, 108>; // n x  8 x f64 vector value
+def nxv2f16  : ValueType<32 , 113>; // n x  2 x f16 vector value
+def nxv4f16  : ValueType<64 , 114>; // n x  4 x f16 vector value
+def nxv8f16  : ValueType<128, 115>; // n x  8 x f16 vector value
+def nxv1f32  : ValueType<32 , 116>; // n x  1 x f32 vector value
+def nxv2f32  : ValueType<64 , 117>; // n x  2 x f32 vector value
+def nxv4f32  : ValueType<128, 118>; // n x  4 x f32 vector value
+def nxv8f32  : ValueType<256, 119>; // n x  8 x f32 vector value
+def nxv16f32 : ValueType<512, 120>; // n x 16 x f32 vector value
+def nxv1f64  : ValueType<64,  121>; // n x  1 x f64 vector value
+def nxv2f64  : ValueType<128, 122>; // n x  2 x f64 vector value
+def nxv4f64  : ValueType<256, 123>; // n x  4 x f64 vector value
+def nxv8f64  : ValueType<512, 124>; // n x  8 x f64 vector value
 
-def x86mmx : ValueType<64 , 109>;   // X86 MMX value
-def FlagVT : ValueType<0  , 110>;   // Pre-RA sched glue
-def isVoid : ValueType<0  , 111>;   // Produces no value
-def untyped: ValueType<8  , 112>;   // Produces an untyped value
-def ExceptRef: ValueType<0, 113>;   // WebAssembly's except_ref type
+def x86mmx : ValueType<64 , 125>;   // X86 MMX value
+def FlagVT : ValueType<0  , 126>;   // Pre-RA sched glue
+def isVoid : ValueType<0  , 127>;   // Produces no value
+def untyped: ValueType<8  , 128>;   // Produces an untyped value
+def ExceptRef: ValueType<0, 129>;   // WebAssembly's except_ref type
 def token  : ValueType<0  , 248>;   // TokenTy
 def MetadataVT: ValueType<0, 249>;  // Metadata
 
@@ -166,3 +182,14 @@
 
 // Pseudo valuetype to represent "any type of any size".
 def Any    : ValueType<0  , 255>;
+
+/// This class is for targets that want to use pointer types in patterns
+/// with the GlobalISelEmitter.  Targets must define their own pointer
+/// derived from this class.  The scalar argument should be an
+/// integer type with the same bit size as the ponter.
+/// e.g. def p0 : PtrValueType <i64, 0>;
+
+class PtrValueType <ValueType scalar, int addrspace> :
+    ValueType<scalar.Size, scalar.Value> {
+  int AddrSpace = addrspace;
+}
diff --git a/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h b/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h
index 7bdecbe..7a64d67 100644
--- a/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h
+++ b/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h
@@ -97,8 +97,8 @@
 
     /// returns the physical register mapped to the specified
     /// virtual register
-    unsigned getPhys(unsigned virtReg) const {
-      assert(TargetRegisterInfo::isVirtualRegister(virtReg));
+    Register getPhys(Register virtReg) const {
+      assert(virtReg.isVirtual());
       return Virt2PhysMap[virtReg];
     }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/WasmEHFuncInfo.h b/linux-x64/clang/include/llvm/CodeGen/WasmEHFuncInfo.h
index aaca847..887a146 100644
--- a/linux-x64/clang/include/llvm/CodeGen/WasmEHFuncInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/WasmEHFuncInfo.h
@@ -28,10 +28,6 @@
   // When there is an entry <A, B>, if an exception is not caught by A, it
   // should next unwind to the EH pad B.
   DenseMap<BBOrMBB, BBOrMBB> EHPadUnwindMap;
-  // For entry <A, B>, A is a BB with an instruction that may throw
-  // (invoke/cleanupret in LLVM IR, call/rethrow in the backend) and B is an EH
-  // pad that A unwinds to.
-  DenseMap<BBOrMBB, BBOrMBB> ThrowUnwindMap;
 
   // Helper functions
   const BasicBlock *getEHPadUnwindDest(const BasicBlock *BB) const {
@@ -40,18 +36,9 @@
   void setEHPadUnwindDest(const BasicBlock *BB, const BasicBlock *Dest) {
     EHPadUnwindMap[BB] = Dest;
   }
-  const BasicBlock *getThrowUnwindDest(BasicBlock *BB) const {
-    return ThrowUnwindMap.lookup(BB).get<const BasicBlock *>();
-  }
-  void setThrowUnwindDest(const BasicBlock *BB, const BasicBlock *Dest) {
-    ThrowUnwindMap[BB] = Dest;
-  }
   bool hasEHPadUnwindDest(const BasicBlock *BB) const {
     return EHPadUnwindMap.count(BB);
   }
-  bool hasThrowUnwindDest(const BasicBlock *BB) const {
-    return ThrowUnwindMap.count(BB);
-  }
 
   MachineBasicBlock *getEHPadUnwindDest(MachineBasicBlock *MBB) const {
     return EHPadUnwindMap.lookup(MBB).get<MachineBasicBlock *>();
@@ -59,18 +46,9 @@
   void setEHPadUnwindDest(MachineBasicBlock *MBB, MachineBasicBlock *Dest) {
     EHPadUnwindMap[MBB] = Dest;
   }
-  MachineBasicBlock *getThrowUnwindDest(MachineBasicBlock *MBB) const {
-    return ThrowUnwindMap.lookup(MBB).get<MachineBasicBlock *>();
-  }
-  void setThrowUnwindDest(MachineBasicBlock *MBB, MachineBasicBlock *Dest) {
-    ThrowUnwindMap[MBB] = Dest;
-  }
   bool hasEHPadUnwindDest(MachineBasicBlock *MBB) const {
     return EHPadUnwindMap.count(MBB);
   }
-  bool hasThrowUnwindDest(MachineBasicBlock *MBB) const {
-    return ThrowUnwindMap.count(MBB);
-  }
 };
 
 // Analyze the IR in the given function to build WasmEHFuncInfo.
diff --git a/linux-x64/clang/include/llvm/Config/abi-breaking.h b/linux-x64/clang/include/llvm/Config/abi-breaking.h
index 3338004..fd32bf3 100644
--- a/linux-x64/clang/include/llvm/Config/abi-breaking.h
+++ b/linux-x64/clang/include/llvm/Config/abi-breaking.h
@@ -34,15 +34,27 @@
 #elif defined(_WIN32) || defined(__CYGWIN__) // Win32 w/o #pragma detect_mismatch
 // FIXME: Implement checks without weak.
 #elif defined(__cplusplus)
+#if !(defined(_AIX) && defined(__GNUC__) && !defined(__clang__))
+#define LLVM_HIDDEN_VISIBILITY __attribute__ ((visibility("hidden")))
+#else
+// GCC on AIX does not support visibility attributes. Symbols are not
+// exported by default on AIX.
+#define LLVM_HIDDEN_VISIBILITY
+#endif
 namespace llvm {
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
 extern int EnableABIBreakingChecks;
-__attribute__((weak, visibility ("hidden"))) int *VerifyEnableABIBreakingChecks = &EnableABIBreakingChecks;
+LLVM_HIDDEN_VISIBILITY
+__attribute__((weak)) int *VerifyEnableABIBreakingChecks =
+    &EnableABIBreakingChecks;
 #else
 extern int DisableABIBreakingChecks;
-__attribute__((weak, visibility ("hidden"))) int *VerifyDisableABIBreakingChecks = &DisableABIBreakingChecks;
+LLVM_HIDDEN_VISIBILITY
+__attribute__((weak)) int *VerifyDisableABIBreakingChecks =
+    &DisableABIBreakingChecks;
 #endif
 }
+#undef LLVM_HIDDEN_VISIBILITY
 #endif // _MSC_VER
 
 #endif // LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING
diff --git a/linux-x64/clang/include/llvm/Config/llvm-config.h b/linux-x64/clang/include/llvm/Config/llvm-config.h
index 483d60c..55f10fc 100644
--- a/linux-x64/clang/include/llvm/Config/llvm-config.h
+++ b/linux-x64/clang/include/llvm/Config/llvm-config.h
@@ -72,10 +72,10 @@
 #define LLVM_VERSION_MINOR 0
 
 /* Patch version of the LLVM API */
-#define LLVM_VERSION_PATCH 3
+#define LLVM_VERSION_PATCH 8
 
 /* LLVM version string */
-#define LLVM_VERSION_STRING "9.0.3svn"
+#define LLVM_VERSION_STRING "9.0.8svn"
 
 /* Whether LLVM records statistics for use with GetStatistics(),
  * PrintStatistics() or PrintStatisticsJSON()
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVRecord.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVRecord.h
index 1df3d16..784c47e 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVRecord.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVRecord.h
@@ -24,17 +24,31 @@
 
 namespace codeview {
 
+/// CVRecord is a fat pointer (base + size pair) to a symbol or type record.
+/// Carrying the size separately instead of trusting the size stored in the
+/// record prefix provides some extra safety and flexibility.
 template <typename Kind> class CVRecord {
 public:
-  CVRecord() : Type(static_cast<Kind>(0)) {}
+  CVRecord() = default;
 
-  CVRecord(Kind K, ArrayRef<uint8_t> Data) : Type(K), RecordData(Data) {}
+  CVRecord(ArrayRef<uint8_t> Data) : RecordData(Data) {}
 
-  bool valid() const { return Type != static_cast<Kind>(0); }
+  CVRecord(const RecordPrefix *P, size_t Size)
+      : RecordData(reinterpret_cast<const uint8_t *>(P), Size) {}
+
+  bool valid() const { return kind() != Kind(0); }
 
   uint32_t length() const { return RecordData.size(); }
-  Kind kind() const { return Type; }
+
+  Kind kind() const {
+    if (RecordData.size() < sizeof(RecordPrefix))
+      return Kind(0);
+    return static_cast<Kind>(static_cast<uint16_t>(
+        reinterpret_cast<const RecordPrefix *>(RecordData.data())->RecordKind));
+  }
+
   ArrayRef<uint8_t> data() const { return RecordData; }
+
   StringRef str_data() const {
     return StringRef(reinterpret_cast<const char *>(RecordData.data()),
                      RecordData.size());
@@ -44,7 +58,6 @@
     return RecordData.drop_front(sizeof(RecordPrefix));
   }
 
-  Kind Type;
   ArrayRef<uint8_t> RecordData;
 };
 
@@ -71,8 +84,7 @@
     ArrayRef<uint8_t> Data = StreamBuffer.take_front(RealLen);
     StreamBuffer = StreamBuffer.drop_front(RealLen);
 
-    Record R(static_cast<decltype(Record::Type)>((uint16_t)Prefix->RecordKind),
-             Data);
+    Record R(Data);
     if (auto EC = F(R))
       return EC;
   }
@@ -91,13 +103,12 @@
     return std::move(EC);
   if (Prefix->RecordLen < 2)
     return make_error<CodeViewError>(cv_error_code::corrupt_record);
-  Kind K = static_cast<Kind>(uint16_t(Prefix->RecordKind));
 
   Reader.setOffset(Offset);
   ArrayRef<uint8_t> RawData;
   if (auto EC = Reader.readBytes(RawData, Prefix->RecordLen + sizeof(uint16_t)))
     return std::move(EC);
-  return codeview::CVRecord<Kind>(K, RawData);
+  return codeview::CVRecord<Kind>(RawData);
 }
 
 } // end namespace codeview
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h
index 7538cb2..7d20bb0 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h
@@ -11,6 +11,7 @@
 
 #include "llvm/DebugInfo/CodeView/CVRecord.h"
 #include "llvm/DebugInfo/CodeView/TypeRecord.h"
+#include "llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h"
 #include "llvm/Support/Error.h"
 
 namespace llvm {
@@ -30,6 +31,9 @@
 Error visitTypeRecord(CVType &Record, TypeIndex Index,
                       TypeVisitorCallbacks &Callbacks,
                       VisitorDataSource Source = VDS_BytesPresent);
+Error visitTypeRecord(CVType &Record, TypeIndex Index,
+                      TypeVisitorCallbackPipeline &Callbacks,
+                      VisitorDataSource Source = VDS_BytesPresent);
 Error visitTypeRecord(CVType &Record, TypeVisitorCallbacks &Callbacks,
                       VisitorDataSource Source = VDS_BytesPresent);
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h
index 4fbf507..c3acb05 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h
@@ -159,9 +159,10 @@
   MSIL = 0x0f,
   HLSL = 0x10,
 
-  /// The DMD compiler emits 'D' for the CV source language. Microsoft doesn't
-  /// have an enumerator for it yet.
+  /// The DMD & Swift compilers emit 'D' and 'S', respectively, for the CV
+  /// source language. Microsoft does not have enumerators for them yet.
   D = 'D',
+  Swift = 'S',
 };
 
 /// These values correspond to the CV_call_e enumeration, and are documented
@@ -303,6 +304,9 @@
 };
 CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(ModifierOptions)
 
+// If the subsection kind has this bit set, then the linker should ignore it.
+enum : uint32_t { SubsectionIgnoreFlag = 0x80000000 };
+
 enum class DebugSubsectionKind : uint32_t {
   None = 0,
   Symbols = 0xf1,
@@ -508,9 +512,23 @@
 
 // Corresponds to CV_HREG_e enum.
 enum class RegisterId : uint16_t {
+#define CV_REGISTERS_ALL
 #define CV_REGISTER(name, value) name = value,
 #include "CodeViewRegisters.def"
 #undef CV_REGISTER
+#undef CV_REGISTERS_ALL
+};
+
+// Register Ids are shared between architectures in CodeView. CPUType is needed
+// to map register Id to name.
+struct CPURegister {
+  CPURegister() = delete;
+  CPURegister(CPUType Cpu, codeview::RegisterId Reg) {
+    this->Cpu = Cpu;
+    this->Reg = Reg;
+  }
+  CPUType Cpu;
+  RegisterId Reg;
 };
 
 /// Two-bit value indicating which register is the designated frame pointer
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h
index b2476f1..d3bad4c 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h
@@ -24,28 +24,64 @@
 #include <type_traits>
 
 namespace llvm {
+
 namespace codeview {
 
+class CodeViewRecordStreamer {
+public:
+  virtual void EmitBytes(StringRef Data) = 0;
+  virtual void EmitIntValue(uint64_t Value, unsigned Size) = 0;
+  virtual void EmitBinaryData(StringRef Data) = 0;
+  virtual ~CodeViewRecordStreamer() = default;
+};
+
 class CodeViewRecordIO {
   uint32_t getCurrentOffset() const {
-    return (isWriting()) ? Writer->getOffset() : Reader->getOffset();
+    if (isWriting())
+      return Writer->getOffset();
+    else if (isReading())
+      return Reader->getOffset();
+    else
+      return 0;
   }
 
 public:
+  // deserializes records to structures
   explicit CodeViewRecordIO(BinaryStreamReader &Reader) : Reader(&Reader) {}
+
+  // serializes records to buffer
   explicit CodeViewRecordIO(BinaryStreamWriter &Writer) : Writer(&Writer) {}
 
+  // writes records to assembly file using MC library interface
+  explicit CodeViewRecordIO(CodeViewRecordStreamer &Streamer)
+      : Streamer(&Streamer) {}
+
   Error beginRecord(Optional<uint32_t> MaxLength);
   Error endRecord();
 
   Error mapInteger(TypeIndex &TypeInd);
 
-  bool isReading() const { return Reader != nullptr; }
-  bool isWriting() const { return !isReading(); }
+  bool isStreaming() const {
+    return (Streamer != nullptr) && (Reader == nullptr) && (Writer == nullptr);
+  }
+  bool isReading() const {
+    return (Reader != nullptr) && (Streamer == nullptr) && (Writer == nullptr);
+  }
+  bool isWriting() const {
+    return (Writer != nullptr) && (Streamer == nullptr) && (Reader == nullptr);
+  }
 
   uint32_t maxFieldLength() const;
 
   template <typename T> Error mapObject(T &Value) {
+    if (isStreaming()) {
+      StringRef BytesSR =
+          StringRef((reinterpret_cast<const char *>(&Value)), sizeof(Value));
+      Streamer->EmitBytes(BytesSR);
+      incrStreamedLen(sizeof(T));
+      return Error::success();
+    }
+
     if (isWriting())
       return Writer->writeObject(Value);
 
@@ -57,6 +93,12 @@
   }
 
   template <typename T> Error mapInteger(T &Value) {
+    if (isStreaming()) {
+      Streamer->EmitIntValue((int)Value, sizeof(T));
+      incrStreamedLen(sizeof(T));
+      return Error::success();
+    }
+
     if (isWriting())
       return Writer->writeInteger(Value);
 
@@ -64,18 +106,21 @@
   }
 
   template <typename T> Error mapEnum(T &Value) {
-    if (sizeof(Value) > maxFieldLength())
+    if (!isStreaming() && sizeof(Value) > maxFieldLength())
       return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
 
     using U = typename std::underlying_type<T>::type;
     U X;
-    if (isWriting())
+
+    if (isWriting() || isStreaming())
       X = static_cast<U>(Value);
 
     if (auto EC = mapInteger(X))
       return EC;
+
     if (isReading())
       Value = static_cast<T>(X);
+
     return Error::success();
   }
 
@@ -90,7 +135,16 @@
   template <typename SizeType, typename T, typename ElementMapper>
   Error mapVectorN(T &Items, const ElementMapper &Mapper) {
     SizeType Size;
-    if (isWriting()) {
+    if (isStreaming()) {
+      Size = static_cast<SizeType>(Items.size());
+      Streamer->EmitIntValue(Size, sizeof(Size));
+      incrStreamedLen(sizeof(Size)); // add 1 for the delimiter
+
+      for (auto &X : Items) {
+        if (auto EC = Mapper(*this, X))
+          return EC;
+      }
+    } else if (isWriting()) {
       Size = static_cast<SizeType>(Items.size());
       if (auto EC = Writer->writeInteger(Size))
         return EC;
@@ -115,7 +169,7 @@
 
   template <typename T, typename ElementMapper>
   Error mapVectorTail(T &Items, const ElementMapper &Mapper) {
-    if (isWriting()) {
+    if (isStreaming() || isWriting()) {
       for (auto &Item : Items) {
         if (auto EC = Mapper(*this, Item))
           return EC;
@@ -138,10 +192,28 @@
   Error padToAlignment(uint32_t Align);
   Error skipPadding();
 
+  uint64_t getStreamedLen() {
+    if (isStreaming())
+      return StreamedLen;
+    return 0;
+  }
+
 private:
+  void emitEncodedSignedInteger(const int64_t &Value);
+  void emitEncodedUnsignedInteger(const uint64_t &Value);
   Error writeEncodedSignedInteger(const int64_t &Value);
   Error writeEncodedUnsignedInteger(const uint64_t &Value);
 
+  void incrStreamedLen(const uint64_t &Len) {
+    if (isStreaming())
+      StreamedLen += Len;
+  }
+
+  void resetStreamedLen() {
+    if (isStreaming())
+      StreamedLen = 4; // The record prefix is 4 bytes long
+  }
+
   struct RecordLimit {
     uint32_t BeginOffset;
     Optional<uint32_t> MaxLength;
@@ -162,6 +234,8 @@
 
   BinaryStreamReader *Reader = nullptr;
   BinaryStreamWriter *Writer = nullptr;
+  CodeViewRecordStreamer *Streamer = nullptr;
+  uint64_t StreamedLen = 0;
 };
 
 } // end namespace codeview
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def
index 0593bc0..9767e49 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def
@@ -14,8 +14,15 @@
 #define CV_REGISTER(name, value)
 #endif
 
+#if !defined(CV_REGISTERS_ALL) && !defined(CV_REGISTERS_X86) &&                \
+    !defined(CV_REGISTERS_ARM64)
+#error Need include at least one register set.
+#endif
+
 // This currently only contains the "register subset shared by all processor
-// types" (ERR etc.) and the x86 registers.
+// types" (ERR etc.) and the x86/arm64 registers.
+
+#if defined(CV_REGISTERS_ALL) || defined(CV_REGISTERS_X86)
 
 // Some system headers define macros that conflict with our enums. Every
 // compiler supported by LLVM has the push_macro and pop_macro pragmas, so use
@@ -356,3 +363,197 @@
 #pragma pop_macro("CR2")
 #pragma pop_macro("CR3")
 #pragma pop_macro("CR4")
+
+#endif // defined(CV_REGISTERS_ALL) || defined(CV_REGISTERS_X86)
+
+#if defined(CV_REGISTERS_ALL) || defined(CV_REGISTERS_ARM64)
+
+// ARM64 registers
+
+CV_REGISTER(ARM64_NOREG, 0)
+
+// General purpose 32-bit integer registers
+
+CV_REGISTER(ARM64_W0, 10)
+CV_REGISTER(ARM64_W1, 11)
+CV_REGISTER(ARM64_W2, 12)
+CV_REGISTER(ARM64_W3, 13)
+CV_REGISTER(ARM64_W4, 14)
+CV_REGISTER(ARM64_W5, 15)
+CV_REGISTER(ARM64_W6, 16)
+CV_REGISTER(ARM64_W7, 17)
+CV_REGISTER(ARM64_W8, 18)
+CV_REGISTER(ARM64_W9, 19)
+CV_REGISTER(ARM64_W10, 20)
+CV_REGISTER(ARM64_W11, 21)
+CV_REGISTER(ARM64_W12, 22)
+CV_REGISTER(ARM64_W13, 23)
+CV_REGISTER(ARM64_W14, 24)
+CV_REGISTER(ARM64_W15, 25)
+CV_REGISTER(ARM64_W16, 26)
+CV_REGISTER(ARM64_W17, 27)
+CV_REGISTER(ARM64_W18, 28)
+CV_REGISTER(ARM64_W19, 29)
+CV_REGISTER(ARM64_W20, 30)
+CV_REGISTER(ARM64_W21, 31)
+CV_REGISTER(ARM64_W22, 32)
+CV_REGISTER(ARM64_W23, 33)
+CV_REGISTER(ARM64_W24, 34)
+CV_REGISTER(ARM64_W25, 35)
+CV_REGISTER(ARM64_W26, 36)
+CV_REGISTER(ARM64_W27, 37)
+CV_REGISTER(ARM64_W28, 38)
+CV_REGISTER(ARM64_W29, 39)
+CV_REGISTER(ARM64_W30, 40)
+CV_REGISTER(ARM64_WZR, 41)
+
+// General purpose 64-bit integer registers
+
+CV_REGISTER(ARM64_X0, 50)
+CV_REGISTER(ARM64_X1, 51)
+CV_REGISTER(ARM64_X2, 52)
+CV_REGISTER(ARM64_X3, 53)
+CV_REGISTER(ARM64_X4, 54)
+CV_REGISTER(ARM64_X5, 55)
+CV_REGISTER(ARM64_X6, 56)
+CV_REGISTER(ARM64_X7, 57)
+CV_REGISTER(ARM64_X8, 58)
+CV_REGISTER(ARM64_X9, 59)
+CV_REGISTER(ARM64_X10, 60)
+CV_REGISTER(ARM64_X11, 61)
+CV_REGISTER(ARM64_X12, 62)
+CV_REGISTER(ARM64_X13, 63)
+CV_REGISTER(ARM64_X14, 64)
+CV_REGISTER(ARM64_X15, 65)
+CV_REGISTER(ARM64_X16, 66)
+CV_REGISTER(ARM64_X17, 67)
+CV_REGISTER(ARM64_X18, 68)
+CV_REGISTER(ARM64_X19, 69)
+CV_REGISTER(ARM64_X20, 70)
+CV_REGISTER(ARM64_X21, 71)
+CV_REGISTER(ARM64_X22, 72)
+CV_REGISTER(ARM64_X23, 73)
+CV_REGISTER(ARM64_X24, 74)
+CV_REGISTER(ARM64_X25, 75)
+CV_REGISTER(ARM64_X26, 76)
+CV_REGISTER(ARM64_X27, 77)
+CV_REGISTER(ARM64_X28, 78)
+CV_REGISTER(ARM64_FP, 79)
+CV_REGISTER(ARM64_LR, 80)
+CV_REGISTER(ARM64_SP, 81)
+CV_REGISTER(ARM64_ZR, 82)
+
+// status register
+
+CV_REGISTER(ARM64_NZCV, 90)
+
+// 32-bit floating point registers
+
+CV_REGISTER(ARM64_S0, 100)
+CV_REGISTER(ARM64_S1, 101)
+CV_REGISTER(ARM64_S2, 102)
+CV_REGISTER(ARM64_S3, 103)
+CV_REGISTER(ARM64_S4, 104)
+CV_REGISTER(ARM64_S5, 105)
+CV_REGISTER(ARM64_S6, 106)
+CV_REGISTER(ARM64_S7, 107)
+CV_REGISTER(ARM64_S8, 108)
+CV_REGISTER(ARM64_S9, 109)
+CV_REGISTER(ARM64_S10, 110)
+CV_REGISTER(ARM64_S11, 111)
+CV_REGISTER(ARM64_S12, 112)
+CV_REGISTER(ARM64_S13, 113)
+CV_REGISTER(ARM64_S14, 114)
+CV_REGISTER(ARM64_S15, 115)
+CV_REGISTER(ARM64_S16, 116)
+CV_REGISTER(ARM64_S17, 117)
+CV_REGISTER(ARM64_S18, 118)
+CV_REGISTER(ARM64_S19, 119)
+CV_REGISTER(ARM64_S20, 120)
+CV_REGISTER(ARM64_S21, 121)
+CV_REGISTER(ARM64_S22, 122)
+CV_REGISTER(ARM64_S23, 123)
+CV_REGISTER(ARM64_S24, 124)
+CV_REGISTER(ARM64_S25, 125)
+CV_REGISTER(ARM64_S26, 126)
+CV_REGISTER(ARM64_S27, 127)
+CV_REGISTER(ARM64_S28, 128)
+CV_REGISTER(ARM64_S29, 129)
+CV_REGISTER(ARM64_S30, 130)
+CV_REGISTER(ARM64_S31, 131)
+
+// 64-bit floating point registers
+
+CV_REGISTER(ARM64_D0, 140)
+CV_REGISTER(ARM64_D1, 141)
+CV_REGISTER(ARM64_D2, 142)
+CV_REGISTER(ARM64_D3, 143)
+CV_REGISTER(ARM64_D4, 144)
+CV_REGISTER(ARM64_D5, 145)
+CV_REGISTER(ARM64_D6, 146)
+CV_REGISTER(ARM64_D7, 147)
+CV_REGISTER(ARM64_D8, 148)
+CV_REGISTER(ARM64_D9, 149)
+CV_REGISTER(ARM64_D10, 150)
+CV_REGISTER(ARM64_D11, 151)
+CV_REGISTER(ARM64_D12, 152)
+CV_REGISTER(ARM64_D13, 153)
+CV_REGISTER(ARM64_D14, 154)
+CV_REGISTER(ARM64_D15, 155)
+CV_REGISTER(ARM64_D16, 156)
+CV_REGISTER(ARM64_D17, 157)
+CV_REGISTER(ARM64_D18, 158)
+CV_REGISTER(ARM64_D19, 159)
+CV_REGISTER(ARM64_D20, 160)
+CV_REGISTER(ARM64_D21, 161)
+CV_REGISTER(ARM64_D22, 162)
+CV_REGISTER(ARM64_D23, 163)
+CV_REGISTER(ARM64_D24, 164)
+CV_REGISTER(ARM64_D25, 165)
+CV_REGISTER(ARM64_D26, 166)
+CV_REGISTER(ARM64_D27, 167)
+CV_REGISTER(ARM64_D28, 168)
+CV_REGISTER(ARM64_D29, 169)
+CV_REGISTER(ARM64_D30, 170)
+CV_REGISTER(ARM64_D31, 171)
+
+// 128-bit SIMD registers
+
+CV_REGISTER(ARM64_Q0, 180)
+CV_REGISTER(ARM64_Q1, 181)
+CV_REGISTER(ARM64_Q2, 182)
+CV_REGISTER(ARM64_Q3, 183)
+CV_REGISTER(ARM64_Q4, 184)
+CV_REGISTER(ARM64_Q5, 185)
+CV_REGISTER(ARM64_Q6, 186)
+CV_REGISTER(ARM64_Q7, 187)
+CV_REGISTER(ARM64_Q8, 188)
+CV_REGISTER(ARM64_Q9, 189)
+CV_REGISTER(ARM64_Q10, 190)
+CV_REGISTER(ARM64_Q11, 191)
+CV_REGISTER(ARM64_Q12, 192)
+CV_REGISTER(ARM64_Q13, 193)
+CV_REGISTER(ARM64_Q14, 194)
+CV_REGISTER(ARM64_Q15, 195)
+CV_REGISTER(ARM64_Q16, 196)
+CV_REGISTER(ARM64_Q17, 197)
+CV_REGISTER(ARM64_Q18, 198)
+CV_REGISTER(ARM64_Q19, 199)
+CV_REGISTER(ARM64_Q20, 200)
+CV_REGISTER(ARM64_Q21, 201)
+CV_REGISTER(ARM64_Q22, 202)
+CV_REGISTER(ARM64_Q23, 203)
+CV_REGISTER(ARM64_Q24, 204)
+CV_REGISTER(ARM64_Q25, 205)
+CV_REGISTER(ARM64_Q26, 206)
+CV_REGISTER(ARM64_Q27, 207)
+CV_REGISTER(ARM64_Q28, 208)
+CV_REGISTER(ARM64_Q29, 209)
+CV_REGISTER(ARM64_Q30, 210)
+CV_REGISTER(ARM64_Q31, 211)
+
+// Floating point status register
+
+CV_REGISTER(ARM64_FPSR, 220)
+
+#endif // defined(CV_REGISTERS_ALL) || defined(CV_REGISTERS_ARM64)
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
index e36d804..4f8ccfd 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
@@ -102,7 +102,6 @@
 CV_SYMBOL(S_GPROCIA64_ST  , 0x1016)
 CV_SYMBOL(S_LOCALSLOT_ST  , 0x1017)
 CV_SYMBOL(S_PARAMSLOT_ST  , 0x1018)
-CV_SYMBOL(S_ANNOTATION    , 0x1019)
 CV_SYMBOL(S_GMANPROC_ST   , 0x101a)
 CV_SYMBOL(S_LMANPROC_ST   , 0x101b)
 CV_SYMBOL(S_RESERVED1     , 0x101c)
@@ -254,6 +253,7 @@
 SYMBOL_RECORD_ALIAS(S_GTHREAD32     , 0x1113, GlobalTLS, ThreadLocalDataSym)
 
 SYMBOL_RECORD(S_UNAMESPACE    , 0x1124, UsingNamespaceSym)
+SYMBOL_RECORD(S_ANNOTATION    , 0x1019, AnnotationSym)
 
 #undef CV_SYMBOL
 #undef SYMBOL_RECORD
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h
index 1ca2bd0..9fd88a6 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h
@@ -70,6 +70,11 @@
   }
 
   Error initialize(BinaryStreamReader Reader);
+  Error initialize(BinaryStreamRef Section) {
+    return initialize(BinaryStreamReader(Section));
+  }
+
+  bool valid() const { return Lines.valid(); }
   bool hasExtraFiles() const;
 
   Iterator begin() const { return Lines.begin(); }
@@ -77,7 +82,7 @@
 
 private:
   InlineeLinesSignature Signature;
-  VarStreamArray<InlineeSourceLine> Lines;
+  LinesArray Lines;
 };
 
 class DebugInlineeLinesSubsection final : public DebugSubsection {
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/EnumTables.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/EnumTables.h
index 74f8c71..ed126ed 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/EnumTables.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/EnumTables.h
@@ -20,7 +20,7 @@
 
 ArrayRef<EnumEntry<SymbolKind>> getSymbolTypeNames();
 ArrayRef<EnumEntry<TypeLeafKind>> getTypeLeafNames();
-ArrayRef<EnumEntry<uint16_t>> getRegisterNames();
+ArrayRef<EnumEntry<uint16_t>> getRegisterNames(CPUType Cpu);
 ArrayRef<EnumEntry<uint32_t>> getPublicSymFlagNames();
 ArrayRef<EnumEntry<uint8_t>> getProcSymFlagNames();
 ArrayRef<EnumEntry<uint16_t>> getLocalFlagNames();
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/RecordSerialization.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/RecordSerialization.h
index 618146c..36c0f2f 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/RecordSerialization.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/RecordSerialization.h
@@ -31,6 +31,9 @@
 enum : unsigned { MaxRecordLength = 0xFF00 };
 
 struct RecordPrefix {
+  RecordPrefix() = default;
+  explicit RecordPrefix(uint16_t Kind) : RecordLen(2), RecordKind(Kind) {}
+
   ulittle16_t RecordLen;  // Record length, starting from &RecordKind.
   ulittle16_t RecordKind; // Record kind enum (SymRecordKind or TypeRecordKind)
 };
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h
index ac7b106..5e9a743 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h
@@ -13,6 +13,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/iterator.h"
 #include "llvm/ADT/iterator_range.h"
 #include "llvm/DebugInfo/CodeView/CVRecord.h"
 #include "llvm/DebugInfo/CodeView/CodeView.h"
@@ -155,15 +156,19 @@
   uint32_t RecordOffset;
 };
 
-struct BinaryAnnotationIterator {
-  struct AnnotationData {
-    BinaryAnnotationsOpCode OpCode;
-    StringRef Name;
-    uint32_t U1;
-    uint32_t U2;
-    int32_t S1;
-  };
+struct DecodedAnnotation {
+  StringRef Name;
+  ArrayRef<uint8_t> Bytes;
+  BinaryAnnotationsOpCode OpCode;
+  uint32_t U1 = 0;
+  uint32_t U2 = 0;
+  int32_t S1 = 0;
+};
 
+struct BinaryAnnotationIterator
+    : public iterator_facade_base<BinaryAnnotationIterator,
+                                  std::forward_iterator_tag,
+                                  DecodedAnnotation> {
   BinaryAnnotationIterator() = default;
   BinaryAnnotationIterator(ArrayRef<uint8_t> Annotations) : Data(Annotations) {}
   BinaryAnnotationIterator(const BinaryAnnotationIterator &Other)
@@ -173,10 +178,6 @@
     return Data == Other.Data;
   }
 
-  bool operator!=(const BinaryAnnotationIterator &Other) const {
-    return !(*this == Other);
-  }
-
   BinaryAnnotationIterator &operator=(const BinaryAnnotationIterator Other) {
     Data = Other.Data;
     return *this;
@@ -193,13 +194,7 @@
     return *this;
   }
 
-  BinaryAnnotationIterator operator++(int) {
-    BinaryAnnotationIterator Orig(*this);
-    ++(*this);
-    return Orig;
-  }
-
-  const AnnotationData &operator*() {
+  const DecodedAnnotation &operator*() {
     ParseCurrentAnnotation();
     return Current.getValue();
   }
@@ -241,17 +236,17 @@
              (ThirdByte << 8) | FourthByte;
 
     return -1;
-  };
+  }
 
   static int32_t DecodeSignedOperand(uint32_t Operand) {
     if (Operand & 1)
       return -(Operand >> 1);
     return Operand >> 1;
-  };
+  }
 
   static int32_t DecodeSignedOperand(ArrayRef<uint8_t> &Annotations) {
     return DecodeSignedOperand(GetCompressedAnnotation(Annotations));
-  };
+  }
 
   bool ParseCurrentAnnotation() {
     if (Current.hasValue())
@@ -259,7 +254,7 @@
 
     Next = Data;
     uint32_t Op = GetCompressedAnnotation(Next);
-    AnnotationData Result;
+    DecodedAnnotation Result;
     Result.OpCode = static_cast<BinaryAnnotationsOpCode>(Op);
     switch (Result.OpCode) {
     case BinaryAnnotationsOpCode::Invalid:
@@ -324,11 +319,12 @@
       break;
     }
     }
+    Result.Bytes = Data.take_front(Data.size() - Next.size());
     Current = Result;
     return true;
   }
 
-  Optional<AnnotationData> Current;
+  Optional<DecodedAnnotation> Current;
   ArrayRef<uint8_t> Data;
   ArrayRef<uint8_t> Next;
 };
@@ -973,7 +969,7 @@
 public:
   explicit UsingNamespaceSym(SymbolRecordKind Kind) : SymbolRecord(Kind) {}
   explicit UsingNamespaceSym(uint32_t RecordOffset)
-      : SymbolRecord(SymbolRecordKind::RegRelativeSym),
+      : SymbolRecord(SymbolRecordKind::UsingNamespaceSym),
         RecordOffset(RecordOffset) {}
 
   StringRef Name;
@@ -982,6 +978,19 @@
 };
 
 // S_ANNOTATION
+class AnnotationSym : public SymbolRecord {
+public:
+  explicit AnnotationSym(SymbolRecordKind Kind) : SymbolRecord(Kind) {}
+  explicit AnnotationSym(uint32_t RecordOffset)
+      : SymbolRecord(SymbolRecordKind::AnnotationSym),
+        RecordOffset(RecordOffset) {}
+
+  uint32_t CodeOffset = 0;
+  uint16_t Segment = 0;
+  std::vector<StringRef> Strings;
+
+  uint32_t RecordOffset;
+};
 
 using CVSymbol = CVRecord<SymbolKind>;
 using CVSymbolArray = VarStreamArray<CVSymbol>;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolSerializer.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolSerializer.h
index 08271c1..b805b65 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolSerializer.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolSerializer.h
@@ -51,8 +51,8 @@
   template <typename SymType>
   static CVSymbol writeOneSymbol(SymType &Sym, BumpPtrAllocator &Storage,
                                  CodeViewContainer Container) {
-    CVSymbol Result;
-    Result.Type = static_cast<SymbolKind>(Sym.Kind);
+    RecordPrefix Prefix{uint16_t(Sym.Kind)};
+    CVSymbol Result(&Prefix, sizeof(Prefix));
     SymbolSerializer Serializer(Storage, Container);
     consumeError(Serializer.visitSymbolBegin(Result));
     consumeError(Serializer.visitKnownRecord(Result, Sym));
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeDeserializer.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeDeserializer.h
index d2ee347..081de32 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeDeserializer.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeDeserializer.h
@@ -58,7 +58,7 @@
     TypeRecordKind K =
         static_cast<TypeRecordKind>(uint16_t(Prefix->RecordKind));
     T Record(K);
-    CVType CVT(static_cast<TypeLeafKind>(K), Data);
+    CVType CVT(Data);
     if (auto EC = deserializeAs<T>(CVT, Record))
       return std::move(EC);
     return Record;
@@ -111,14 +111,14 @@
 
 public:
   explicit FieldListDeserializer(BinaryStreamReader &Reader) : Mapping(Reader) {
-    CVType FieldList;
-    FieldList.Type = TypeLeafKind::LF_FIELDLIST;
+    RecordPrefix Pre(static_cast<uint16_t>(TypeLeafKind::LF_FIELDLIST));
+    CVType FieldList(&Pre, sizeof(Pre));
     consumeError(Mapping.Mapping.visitTypeBegin(FieldList));
   }
 
   ~FieldListDeserializer() override {
-    CVType FieldList;
-    FieldList.Type = TypeLeafKind::LF_FIELDLIST;
+    RecordPrefix Pre(static_cast<uint16_t>(TypeLeafKind::LF_FIELDLIST));
+    CVType FieldList(&Pre, sizeof(Pre));
     consumeError(Mapping.Mapping.visitTypeEnd(FieldList));
   }
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h
index c2fbff6..b0a16cc 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h
@@ -84,7 +84,7 @@
   }
   std::array<uint8_t, 8> Hash;
 
-  bool empty() const { return *(const uint64_t*)Hash.data() == 0; }

+  bool empty() const { return *(const uint64_t*)Hash.data() == 0; }
 
   /// Given a sequence of bytes representing a record, compute a global hash for
   /// this record.  Due to the nature of global hashes incorporating the hashes
@@ -109,8 +109,8 @@
   template <typename Range>
   static std::vector<GloballyHashedType> hashTypes(Range &&Records) {
     std::vector<GloballyHashedType> Hashes;
-    bool UnresolvedRecords = false;

-    for (const auto &R : Records) {

+    bool UnresolvedRecords = false;
+    for (const auto &R : Records) {
       GloballyHashedType H = hashType(R, Hashes, Hashes);
       if (H.empty())
         UnresolvedRecords = true;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h
index b885d54..4c309c1 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h
@@ -23,9 +23,11 @@
 public:
   explicit TypeRecordMapping(BinaryStreamReader &Reader) : IO(Reader) {}
   explicit TypeRecordMapping(BinaryStreamWriter &Writer) : IO(Writer) {}
+  explicit TypeRecordMapping(CodeViewRecordStreamer &Streamer) : IO(Streamer) {}
 
   using TypeVisitorCallbacks::visitTypeBegin;
   Error visitTypeBegin(CVType &Record) override;
+  Error visitTypeBegin(CVType &Record, TypeIndex Index) override;
   Error visitTypeEnd(CVType &Record) override;
 
   Error visitMemberBegin(CVMemberRecord &Record) override;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h
index fb0b579..169715b 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h
@@ -82,6 +82,11 @@
     Pipeline.push_back(&Callbacks);
   }
 
+  void addCallbackToPipelineFront(TypeVisitorCallbacks &Callbacks) {
+    auto CallBackItr = Pipeline.begin();
+    Pipeline.insert(CallBackItr, &Callbacks);
+  }
+
 #define TYPE_RECORD(EnumName, EnumVal, Name)                                   \
   Error visitKnownRecord(CVType &CVR, Name##Record &Record) override {         \
     return visitKnownRecordImpl(CVR, Record);                                  \
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DIContext.h b/linux-x64/clang/include/llvm/DebugInfo/DIContext.h
index a41ab21..d2a5318 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DIContext.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DIContext.h
@@ -97,11 +97,10 @@
   void addFrame(const DILineInfo &Frame) {
     Frames.push_back(Frame);
   }
-  
+
   void resize(unsigned i) {
     Frames.resize(i);
   }
-  
 };
 
 /// Container for description of a global variable.
@@ -113,6 +112,16 @@
   DIGlobal() : Name("<invalid>") {}
 };
 
+struct DILocal {
+  std::string FunctionName;
+  std::string Name;
+  std::string DeclFile;
+  uint64_t DeclLine = 0;
+  Optional<int64_t> FrameOffset;
+  Optional<uint64_t> Size;
+  Optional<uint64_t> TagOffset;
+};
+
 /// A DINameKind is passed to name search methods to specify a
 /// preference regarding the type of name resolution the caller wants.
 enum class DINameKind { None, ShortName, LinkageName };
@@ -157,7 +166,8 @@
 /// dumped.
 struct DIDumpOptions {
   unsigned DumpType = DIDT_All;
-  unsigned RecurseDepth = -1U;
+  unsigned ChildRecurseDepth = -1U;
+  unsigned ParentRecurseDepth = -1U;
   uint16_t Version = 0; // DWARF version to assume when extracting.
   uint8_t AddrSize = 4; // Address byte size to assume when extracting.
   bool ShowAddresses = true;
@@ -171,15 +181,18 @@
   /// Return default option set for printing a single DIE without children.
   static DIDumpOptions getForSingleDIE() {
     DIDumpOptions Opts;
-    Opts.RecurseDepth = 0;
+    Opts.ChildRecurseDepth = 0;
+    Opts.ParentRecurseDepth = 0;
     return Opts;
   }
 
   /// Return the options with RecurseDepth set to 0 unless explicitly required.
   DIDumpOptions noImplicitRecursion() const {
     DIDumpOptions Opts = *this;
-    if (RecurseDepth == -1U && !ShowChildren)
-      Opts.RecurseDepth = 0;
+    if (ChildRecurseDepth == -1U && !ShowChildren)
+      Opts.ChildRecurseDepth = 0;
+    if (ParentRecurseDepth == -1U && !ShowParents)
+      Opts.ParentRecurseDepth = 0;
     return Opts;
   }
 };
@@ -203,12 +216,18 @@
     return true;
   }
 
-  virtual DILineInfo getLineInfoForAddress(uint64_t Address,
+  virtual DILineInfo getLineInfoForAddress(
+      object::SectionedAddress Address,
       DILineInfoSpecifier Specifier = DILineInfoSpecifier()) = 0;
-  virtual DILineInfoTable getLineInfoForAddressRange(uint64_t Address,
-      uint64_t Size, DILineInfoSpecifier Specifier = DILineInfoSpecifier()) = 0;
-  virtual DIInliningInfo getInliningInfoForAddress(uint64_t Address,
+  virtual DILineInfoTable getLineInfoForAddressRange(
+      object::SectionedAddress Address, uint64_t Size,
       DILineInfoSpecifier Specifier = DILineInfoSpecifier()) = 0;
+  virtual DIInliningInfo getInliningInfoForAddress(
+      object::SectionedAddress Address,
+      DILineInfoSpecifier Specifier = DILineInfoSpecifier()) = 0;
+
+  virtual std::vector<DILocal>
+  getLocalsForAddress(object::SectionedAddress Address) = 0;
 
 private:
   const DIContextKind Kind;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
index 0f09a59..3033757 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
@@ -71,7 +71,7 @@
       : AccelSection(AccelSection), StringSection(StringSection) {}
   virtual ~DWARFAcceleratorTable();
 
-  virtual llvm::Error extract() = 0;
+  virtual Error extract() = 0;
   virtual void dump(raw_ostream &OS) const = 0;
 
   DWARFAcceleratorTable(const DWARFAcceleratorTable &) = delete;
@@ -174,7 +174,7 @@
                         DataExtractor StringSection)
       : DWARFAcceleratorTable(AccelSection, StringSection) {}
 
-  llvm::Error extract() override;
+  Error extract() override;
   uint32_t getNumBuckets();
   uint32_t getNumHashes();
   uint32_t getSizeHdr();
@@ -222,7 +222,7 @@
 /// referenced by the name table and interpreted with the help of the
 /// abbreviation table.
 class DWARFDebugNames : public DWARFAcceleratorTable {
-  /// The fixed-size part of a Dwarf 5 Name Index header
+  /// The fixed-size part of a DWARF v5 Name Index header
   struct HeaderPOD {
     uint32_t UnitLength;
     uint16_t Version;
@@ -241,7 +241,7 @@
   class NameIterator;
   class ValueIterator;
 
-  /// Dwarf 5 Name Index header.
+  /// DWARF v5 Name Index header.
   struct Header : public HeaderPOD {
     SmallString<8> AugmentationString;
 
@@ -348,7 +348,7 @@
   };
 
 public:
-  /// A single entry in the Name Table (Dwarf 5 sect. 6.1.1.4.6) of the Name
+  /// A single entry in the Name Table (DWARF v5 sect. 6.1.1.4.6) of the Name
   /// Index.
   class NameTableEntry {
     DataExtractor StrData;
@@ -380,7 +380,7 @@
     uint32_t getEntryOffset() const { return EntryOffset; }
   };
 
-  /// Represents a single accelerator table within the Dwarf 5 .debug_names
+  /// Represents a single accelerator table within the DWARF v5 .debug_names
   /// section.
   class NameIndex {
     DenseSet<Abbrev, AbbrevMapInfo> Abbrevs;
@@ -459,7 +459,7 @@
     NameIterator begin() const { return NameIterator(this, 1); }
     NameIterator end() const { return NameIterator(this, getNameCount() + 1); }
 
-    llvm::Error extract();
+    Error extract();
     uint32_t getUnitOffset() const { return Base; }
     uint32_t getNextUnitOffset() const { return Base + 4 + Hdr.UnitLength; }
     void dump(ScopedPrinter &W) const;
@@ -579,7 +579,7 @@
                   DataExtractor StringSection)
       : DWARFAcceleratorTable(AccelSection, StringSection) {}
 
-  llvm::Error extract() override;
+  Error extract() override;
   void dump(raw_ostream &OS) const override;
 
   /// Look up all entries in the accelerator table matching \c Key.
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAddressRange.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAddressRange.h
index 56d46c6..2d5f9f3 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAddressRange.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAddressRange.h
@@ -42,12 +42,6 @@
     return LowPC < RHS.HighPC && RHS.LowPC < HighPC;
   }
 
-  /// Returns true if [LowPC, HighPC) fully contains [RHS.LowPC, RHS.HighPC).
-  bool contains(const DWARFAddressRange &RHS) const {
-    assert(valid() && RHS.valid());
-    return LowPC <= RHS.LowPC && RHS.HighPC <= HighPC;
-  }
-
   void dump(raw_ostream &OS, uint32_t AddressSize,
             DIDumpOptions DumpOpts = {}) const;
 };
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAttribute.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAttribute.h
index fc6f0a4..96e622c 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAttribute.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAttribute.h
@@ -42,6 +42,10 @@
     return isValid();
   }
 
+  /// Identifies DWARF attributes that may contain a reference to a
+  /// DWARF expression.
+  static bool mayHaveLocationDescription(dwarf::Attribute Attr);
+
   void clear() {
     Offset = 0;
     ByteSize = 0;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h
index e415927..23cf21c 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h
@@ -317,15 +317,23 @@
 
   /// Get the compilation unit, the function DIE and lexical block DIE for the
   /// given address where applicable.
+  /// TODO: change input parameter from "uint64_t Address"
+  ///       into "SectionedAddress Address"
   DIEsForAddress getDIEsForAddress(uint64_t Address);
 
-  DILineInfo getLineInfoForAddress(uint64_t Address,
+  DILineInfo getLineInfoForAddress(
+      object::SectionedAddress Address,
       DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
-  DILineInfoTable getLineInfoForAddressRange(uint64_t Address, uint64_t Size,
+  DILineInfoTable getLineInfoForAddressRange(
+      object::SectionedAddress Address, uint64_t Size,
       DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
-  DIInliningInfo getInliningInfoForAddress(uint64_t Address,
+  DIInliningInfo getInliningInfoForAddress(
+      object::SectionedAddress Address,
       DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
 
+  std::vector<DILocal>
+  getLocalsForAddress(object::SectionedAddress Address) override;
+
   bool isLittleEndian() const { return DObj->isLittleEndian(); }
   static bool isSupportedVersion(unsigned version) {
     return version == 2 || version == 3 || version == 4 || version == 5;
@@ -366,7 +374,11 @@
 private:
   /// Return the compile unit which contains instruction with provided
   /// address.
+  /// TODO: change input parameter from "uint64_t Address"
+  ///       into "SectionedAddress Address"
   DWARFCompileUnit *getCompileUnitForAddress(uint64_t Address);
+  void addLocalsForDie(DWARFCompileUnit *CU, DWARFDie Subprogram, DWARFDie Die,
+                       std::vector<DILocal> &Result);
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h
index 6d3af24..03223fb 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h
@@ -49,10 +49,6 @@
       return -1ULL;
     }
 
-    bool containsAddress(uint64_t Address) const {
-      return LowPC <= Address && Address < HighPC();
-    }
-
     bool operator<(const Range &other) const {
       return LowPC < other.LowPC;
     }
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
index 9e40c84..9a3ad2b 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
@@ -139,12 +139,16 @@
     static void dumpTableHeader(raw_ostream &OS);
 
     static bool orderByAddress(const Row &LHS, const Row &RHS) {
-      return LHS.Address < RHS.Address;
+      return std::tie(LHS.Address.SectionIndex, LHS.Address.Address) <
+             std::tie(RHS.Address.SectionIndex, RHS.Address.Address);
     }
 
     /// The program-counter value corresponding to a machine instruction
-    /// generated by the compiler.
-    uint64_t Address;
+    /// generated by the compiler and section index pointing to the section
+    /// containg this PC. If relocation information is present then section
+    /// index is the index of the section which contains above address.
+    /// Otherwise this is object::SectionedAddress::Undef value.
+    object::SectionedAddress Address;
     /// An unsigned integer indicating a source line number. Lines are numbered
     /// beginning at 1. The compiler may emit the value 0 in cases where an
     /// instruction cannot be attributed to any source line.
@@ -192,21 +196,29 @@
     /// and is described by line table rows [FirstRowIndex, LastRowIndex).
     uint64_t LowPC;
     uint64_t HighPC;
+    /// If relocation information is present then this is the index of the
+    /// section which contains above addresses. Otherwise this is
+    /// object::SectionedAddress::Undef value.
+    uint64_t SectionIndex;
     unsigned FirstRowIndex;
     unsigned LastRowIndex;
     bool Empty;
 
     void reset();
 
-    static bool orderByLowPC(const Sequence &LHS, const Sequence &RHS) {
-      return LHS.LowPC < RHS.LowPC;
+    static bool orderByHighPC(const Sequence &LHS, const Sequence &RHS) {
+      return std::tie(LHS.SectionIndex, LHS.HighPC) <
+             std::tie(RHS.SectionIndex, RHS.HighPC);
     }
 
     bool isValid() const {
       return !Empty && (LowPC < HighPC) && (FirstRowIndex < LastRowIndex);
     }
 
-    bool containsPC(uint64_t PC) const { return (LowPC <= PC && PC < HighPC); }
+    bool containsPC(object::SectionedAddress PC) const {
+      return SectionIndex == PC.SectionIndex &&
+             (LowPC <= PC.Address && PC.Address < HighPC);
+    }
   };
 
   struct LineTable {
@@ -223,14 +235,17 @@
 
     /// Returns the index of the row with file/line info for a given address,
     /// or UnknownRowIndex if there is no such row.
-    uint32_t lookupAddress(uint64_t Address) const;
+    uint32_t lookupAddress(object::SectionedAddress Address) const;
 
-    bool lookupAddressRange(uint64_t Address, uint64_t Size,
+    bool lookupAddressRange(object::SectionedAddress Address, uint64_t Size,
                             std::vector<uint32_t> &Result) const;
 
     bool hasFileAtIndex(uint64_t FileIndex) const;
 
     /// Extracts filename by its index in filename table in prologue.
+    /// In Dwarf 4, the files are 1-indexed and the current compilation file
+    /// name is not represented in the list. In DWARF v5, the files are
+    /// 0-indexed and the primary source file has the index 0.
     /// Returns true on success.
     bool getFileNameByIndex(uint64_t FileIndex, const char *CompDir,
                             DILineInfoSpecifier::FileLineInfoKind Kind,
@@ -238,7 +253,8 @@
 
     /// Fills the Result argument with the file and line information
     /// corresponding to Address. Returns true on success.
-    bool getFileLineInfoForAddress(uint64_t Address, const char *CompDir,
+    bool getFileLineInfoForAddress(object::SectionedAddress Address,
+                                   const char *CompDir,
                                    DILineInfoSpecifier::FileLineInfoKind Kind,
                                    DILineInfo &Result) const;
 
@@ -252,6 +268,11 @@
         std::function<void(Error)> RecoverableErrorCallback,
         raw_ostream *OS = nullptr);
 
+    /// Get DWARF-version aware access to the file name entry at the provided
+    /// index.
+    const llvm::DWARFDebugLine::FileNameEntry &
+        getFileNameEntry(uint64_t Index) const;
+
     using RowVector = std::vector<Row>;
     using RowIter = RowVector::const_iterator;
     using SequenceVector = std::vector<Sequence>;
@@ -263,10 +284,15 @@
 
   private:
     uint32_t findRowInSeq(const DWARFDebugLine::Sequence &Seq,
-                          uint64_t Address) const;
+                          object::SectionedAddress Address) const;
     Optional<StringRef>
     getSourceByIndex(uint64_t FileIndex,
                      DILineInfoSpecifier::FileLineInfoKind Kind) const;
+
+    uint32_t lookupAddressImpl(object::SectionedAddress Address) const;
+
+    bool lookupAddressRangeImpl(object::SectionedAddress Address, uint64_t Size,
+                                std::vector<uint32_t> &Result) const;
   };
 
   const LineTable *getLineTable(uint32_t Offset) const;
@@ -333,13 +359,10 @@
     ParsingState(struct LineTable *LT);
 
     void resetRowAndSequence();
-    void appendRowToMatrix(uint32_t Offset);
+    void appendRowToMatrix();
 
     /// Line table we're currently parsing.
     struct LineTable *LineTable;
-    /// The row number that starts at zero for the prologue, and increases for
-    /// each row added to the matrix.
-    unsigned RowNumber = 0;
     struct Row Row;
     struct Sequence Sequence;
   };
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
index dbed959..cced604 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
@@ -41,7 +41,7 @@
     SmallVector<Entry, 2> Entries;
     /// Dump this list on OS.
     void dump(raw_ostream &OS, bool IsLittleEndian, unsigned AddressSize,
-              const MCRegisterInfo *MRI, uint64_t BaseAddress,
+              const MCRegisterInfo *MRI, DWARFUnit *U, uint64_t BaseAddress,
               unsigned Indent) const;
   };
 
@@ -86,7 +86,7 @@
     SmallVector<Entry, 2> Entries;
     void dump(raw_ostream &OS, uint64_t BaseAddr, bool IsLittleEndian,
               unsigned AddressSize, const MCRegisterInfo *RegInfo,
-              unsigned Indent) const;
+              DWARFUnit *U, unsigned Indent) const;
   };
 
 private:
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
index c1c0f42..a66f602 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
@@ -76,7 +76,7 @@
   /// list. Has to be passed base address of the compile unit referencing this
   /// range list.
   DWARFAddressRangesVector
-  getAbsoluteRanges(llvm::Optional<SectionedAddress> BaseAddr) const;
+  getAbsoluteRanges(llvm::Optional<object::SectionedAddress> BaseAddr) const;
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h
index c6661a8..167ddde 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h
@@ -37,7 +37,7 @@
   Error extract(DWARFDataExtractor Data, uint32_t End, uint32_t *OffsetPtr);
   void dump(raw_ostream &OS, uint8_t AddrSize, uint8_t MaxEncodingStringLength,
             uint64_t &CurrentBase, DIDumpOptions DumpOpts,
-            llvm::function_ref<Optional<SectionedAddress>(uint32_t)>
+            llvm::function_ref<Optional<object::SectionedAddress>(uint32_t)>
                 LookupPooledAddress) const;
   bool isSentinel() const { return EntryKind == dwarf::DW_RLE_end_of_list; }
 };
@@ -47,7 +47,7 @@
 public:
   /// Build a DWARFAddressRangesVector from a rangelist.
   DWARFAddressRangesVector
-  getAbsoluteRanges(llvm::Optional<SectionedAddress> BaseAddr,
+  getAbsoluteRanges(llvm::Optional<object::SectionedAddress> BaseAddr,
                     DWARFUnit &U) const;
 };
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFExpression.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFExpression.h
index 8049094..f066dd5 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFExpression.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFExpression.h
@@ -41,7 +41,8 @@
       SizeAddr = 5,
       SizeRefAddr = 6,
       SizeBlock = 7, ///< Preceding operand contains block size
-      SignBit = 0x8,
+      BaseTypeRef = 8,
+      SignBit = 0x80,
       SignedSize1 = SignBit | Size1,
       SignedSize2 = SignBit | Size2,
       SignedSize4 = SignBit | Size4,
@@ -54,7 +55,8 @@
       DwarfNA, ///< Serves as a marker for unused entries
       Dwarf2 = 2,
       Dwarf3,
-      Dwarf4
+      Dwarf4,
+      Dwarf5
     };
 
     /// Description of the encoding of one expression Op.
@@ -77,17 +79,20 @@
     bool Error;
     uint32_t EndOffset;
     uint64_t Operands[2];
+    uint32_t OperandEndOffsets[2];
 
   public:
     Description &getDescription() { return Desc; }
     uint8_t getCode() { return Opcode; }
     uint64_t getRawOperand(unsigned Idx) { return Operands[Idx]; }
+    uint32_t getOperandEndOffset(unsigned Idx) { return OperandEndOffsets[Idx]; }
     uint32_t getEndOffset() { return EndOffset; }
     bool extract(DataExtractor Data, uint16_t Version, uint8_t AddressSize,
                  uint32_t Offset);
     bool isError() { return Error; }
-    bool print(raw_ostream &OS, const DWARFExpression *U,
-               const MCRegisterInfo *RegInfo, bool isEH);
+    bool print(raw_ostream &OS, const DWARFExpression *Expr,
+               const MCRegisterInfo *RegInfo, DWARFUnit *U, bool isEH);
+    bool verify(DWARFUnit *U);
   };
 
   /// An iterator to go through the expression operations.
@@ -124,15 +129,17 @@
 
   DWARFExpression(DataExtractor Data, uint16_t Version, uint8_t AddressSize)
       : Data(Data), Version(Version), AddressSize(AddressSize) {
-    assert(AddressSize == 8 || AddressSize == 4);
+    assert(AddressSize == 8 || AddressSize == 4 || AddressSize == 2);
   }
 
   iterator begin() const { return iterator(this, 0); }
   iterator end() const { return iterator(this, Data.getData().size()); }
 
-  void print(raw_ostream &OS, const MCRegisterInfo *RegInfo,
+  void print(raw_ostream &OS, const MCRegisterInfo *RegInfo, DWARFUnit *U,
              bool IsEH = false) const;
 
+  bool verify(DWARFUnit *U);
+
 private:
   DataExtractor Data;
   uint16_t Version;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFFormValue.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFFormValue.h
index e092d96..731e71e 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFFormValue.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFFormValue.h
@@ -41,6 +41,9 @@
 private:
   struct ValueType {
     ValueType() { uval = 0; }
+    ValueType(int64_t V) : sval(V) {}
+    ValueType(uint64_t V) : uval(V) {}
+    ValueType(const char *V) : cstr(V) {}
 
     union {
       uint64_t uval;
@@ -55,26 +58,28 @@
   ValueType Value;              /// Contains all data for the form.
   const DWARFUnit *U = nullptr; /// Remember the DWARFUnit at extract time.
   const DWARFContext *C = nullptr; /// Context for extract time.
+
+  DWARFFormValue(dwarf::Form F, ValueType V) : Form(F), Value(V) {}
+
 public:
   DWARFFormValue(dwarf::Form F = dwarf::Form(0)) : Form(F) {}
 
+  static DWARFFormValue createFromSValue(dwarf::Form F, int64_t V);
+  static DWARFFormValue createFromUValue(dwarf::Form F, uint64_t V);
+  static DWARFFormValue createFromPValue(dwarf::Form F, const char *V);
+  static DWARFFormValue createFromBlockValue(dwarf::Form F,
+                                             ArrayRef<uint8_t> D);
+  static DWARFFormValue createFromUnit(dwarf::Form F, const DWARFUnit *Unit,
+                                       uint32_t *OffsetPtr);
+
   dwarf::Form getForm() const { return Form; }
   uint64_t getRawUValue() const { return Value.uval; }
-  void setForm(dwarf::Form F) { Form = F; }
-  void setUValue(uint64_t V) { Value.uval = V; }
-  void setSValue(int64_t V) { Value.sval = V; }
-  void setPValue(const char *V) { Value.cstr = V; }
-
-  void setBlockValue(const ArrayRef<uint8_t> &Data) {
-    Value.data = Data.data();
-    setUValue(Data.size());
-  }
 
   bool isFormClass(FormClass FC) const;
   const DWARFUnit *getUnit() const { return U; }
   void dump(raw_ostream &OS, DIDumpOptions DumpOpts = DIDumpOptions()) const;
   void dumpSectionedAddress(raw_ostream &OS, DIDumpOptions DumpOpts,
-                            SectionedAddress SA) const;
+                            object::SectionedAddress SA) const;
   static void dumpAddressSection(const DWARFObject &Obj, raw_ostream &OS,
                                  DIDumpOptions DumpOpts, uint64_t SectionIndex);
 
@@ -99,11 +104,16 @@
   /// getAsFoo functions below return the extracted value as Foo if only
   /// DWARFFormValue has form class is suitable for representing Foo.
   Optional<uint64_t> getAsReference() const;
+  struct UnitOffset {
+    DWARFUnit *Unit;
+    uint64_t Offset;
+  };
+  Optional<UnitOffset> getAsRelativeReference() const;
   Optional<uint64_t> getAsUnsignedConstant() const;
   Optional<int64_t> getAsSignedConstant() const;
   Optional<const char *> getAsCString() const;
   Optional<uint64_t> getAsAddress() const;
-  Optional<SectionedAddress> getAsSectionedAddress() const;
+  Optional<object::SectionedAddress> getAsSectionedAddress() const;
   Optional<uint64_t> getAsSectionOffset() const;
   Optional<ArrayRef<uint8_t>> getAsBlock() const;
   Optional<uint64_t> getAsCStringOffset() const;
@@ -154,6 +164,19 @@
   return None;
 }
 
+/// Take an optional DWARFFormValue and try to extract a string value from it.
+///
+/// \param V and optional DWARFFormValue to attempt to extract the value from.
+/// \returns an optional value that contains a value if the form value
+/// was valid and was a string.
+inline StringRef toStringRef(const Optional<DWARFFormValue> &V,
+                             StringRef Default = {}) {
+  if (V)
+    if (auto S = V->getAsCString())
+      return *S;
+  return Default;
+}
+
 /// Take an optional DWARFFormValue and extract a string value from it.
 ///
 /// \param V and optional DWARFFormValue to attempt to extract the value from.
@@ -241,7 +264,7 @@
   return None;
 }
 
-inline Optional<SectionedAddress>
+inline Optional<object::SectionedAddress>
 toSectionedAddress(const Optional<DWARFFormValue> &V) {
   if (V)
     return V->getAsSectionedAddress();
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFListTable.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFListTable.h
index 6c13db3..a1ea69b 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFListTable.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFListTable.h
@@ -157,7 +157,7 @@
   uint8_t getAddrSize() const { return Header.getAddrSize(); }
 
   void dump(raw_ostream &OS,
-            llvm::function_ref<Optional<SectionedAddress>(uint32_t)>
+            llvm::function_ref<Optional<object::SectionedAddress>(uint32_t)>
                 LookupPooledAddress,
             DIDumpOptions DumpOpts = {}) const;
 
@@ -234,7 +234,7 @@
 template <typename DWARFListType>
 void DWARFListTableBase<DWARFListType>::dump(
     raw_ostream &OS,
-    llvm::function_ref<Optional<SectionedAddress>(uint32_t)>
+    llvm::function_ref<Optional<object::SectionedAddress>(uint32_t)>
         LookupPooledAddress,
     DIDumpOptions DumpOpts) const {
   Header.dump(OS, DumpOpts);
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFRelocMap.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFRelocMap.h
index a8f5b28..cd022e7 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFRelocMap.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFRelocMap.h
@@ -10,6 +10,7 @@
 #define LLVM_DEBUGINFO_DWARF_DWARFRELOCMAP_H
 
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/Object/RelocationResolver.h"
 #include <cstdint>
 
 namespace llvm {
@@ -18,7 +19,9 @@
 /// Section index is -1LL if relocation points to absolute symbol.
 struct RelocAddrEntry {
   uint64_t SectionIndex;
-  uint64_t Value;
+  object::RelocationRef Reloc;
+  object::RelocationResolver Resolver;
+  uint64_t SymbolValue;
 };
 
 /// In place of applying the relocations to the data we've read from disk we use
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFSection.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFSection.h
index bb00046..054524d 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFSection.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFSection.h
@@ -22,11 +22,6 @@
   bool IsNameUnique;
 };
 
-struct SectionedAddress {
-  uint64_t Address;
-  uint64_t SectionIndex;
-};
-
 } // end namespace llvm
 
 #endif // LLVM_DEBUGINFO_DWARF_DWARFSECTION_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h
index e82ce8e..f9f90db 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h
@@ -48,7 +48,7 @@
   uint32_t Offset = 0;
   // Version, address size, and DWARF format.
   dwarf::FormParams FormParams;
-  uint32_t Length = 0;
+  uint64_t Length = 0;
   uint64_t AbbrOffset = 0;
 
   // For DWO units only.
@@ -82,7 +82,7 @@
   uint8_t getDwarfOffsetByteSize() const {
     return FormParams.getDwarfOffsetByteSize();
   }
-  uint32_t getLength() const { return Length; }
+  uint64_t getLength() const { return Length; }
   uint64_t getAbbrOffset() const { return AbbrOffset; }
   Optional<uint64_t> getDWOId() const { return DWOId; }
   void setDWOId(uint64_t Id) {
@@ -97,8 +97,11 @@
     return UnitType == dwarf::DW_UT_type || UnitType == dwarf::DW_UT_split_type;
   }
   uint8_t getSize() const { return Size; }
-  // FIXME: Support DWARF64.
-  uint32_t getNextUnitOffset() const { return Offset + Length + 4; }
+  uint32_t getNextUnitOffset() const {
+    return Offset + Length +
+           (FormParams.Format == llvm::dwarf::DwarfFormat::DWARF64 ? 4 : 0) +
+           FormParams.getDwarfOffsetByteSize();
+  }
 };
 
 const DWARFUnitIndex &getDWARFUnitIndex(DWARFContext &Context,
@@ -172,6 +175,7 @@
   StrOffsetsContributionDescriptor(uint64_t Base, uint64_t Size,
                                    uint8_t Version, dwarf::DwarfFormat Format)
       : Base(Base), Size(Size), FormParams({Version, 0, Format}) {}
+  StrOffsetsContributionDescriptor() = default;
 
   uint8_t getVersion() const { return FormParams.Version; }
   dwarf::DwarfFormat getFormat() const { return FormParams.Format; }
@@ -181,7 +185,7 @@
   /// Determine whether a contribution to the string offsets table is
   /// consistent with the relevant section size and that its length is
   /// a multiple of the size of one of its entries.
-  Optional<StrOffsetsContributionDescriptor>
+  Expected<StrOffsetsContributionDescriptor>
   validateContributionSize(DWARFDataExtractor &DA);
 };
 
@@ -217,7 +221,7 @@
   Optional<DWARFDebugRnglistTable> RngListTable;
 
   mutable const DWARFAbbreviationDeclarationSet *Abbrevs;
-  llvm::Optional<SectionedAddress> BaseAddr;
+  llvm::Optional<object::SectionedAddress> BaseAddr;
   /// The compile unit debug information entry items.
   std::vector<DWARFDebugInfoEntry> DieArray;
 
@@ -246,14 +250,14 @@
   /// Find the unit's contribution to the string offsets table and determine its
   /// length and form. The given offset is expected to be derived from the unit
   /// DIE's DW_AT_str_offsets_base attribute.
-  Optional<StrOffsetsContributionDescriptor>
+  Expected<Optional<StrOffsetsContributionDescriptor>>
   determineStringOffsetsTableContribution(DWARFDataExtractor &DA);
 
   /// Find the unit's contribution to the string offsets table and determine its
   /// length and form. The given offset is expected to be 0 in a dwo file or,
   /// in a dwp file, the start of the unit's contribution to the string offsets
   /// table section (as determined by the index table).
-  Optional<StrOffsetsContributionDescriptor>
+  Expected<Optional<StrOffsetsContributionDescriptor>>
   determineStringOffsetsTableContributionDWO(DWARFDataExtractor &DA);
 
 public:
@@ -304,7 +308,8 @@
     RangeSectionBase = Base;
   }
 
-  Optional<SectionedAddress> getAddrOffsetSectionItem(uint32_t Index) const;
+  Optional<object::SectionedAddress>
+  getAddrOffsetSectionItem(uint32_t Index) const;
   Optional<uint64_t> getStringOffsetSectionItem(uint32_t Index) const;
 
   DWARFDataExtractor getDebugInfoExtractor() const;
@@ -375,7 +380,7 @@
     llvm_unreachable("Invalid UnitType.");
   }
 
-  llvm::Optional<SectionedAddress> getBaseAddress();
+  llvm::Optional<object::SectionedAddress> getBaseAddress();
 
   DWARFDie getUnitDIE(bool ExtractUnitDIEOnly = true) {
     extractDIEsIfNeeded(ExtractUnitDIEOnly);
@@ -384,6 +389,13 @@
     return DWARFDie(this, &DieArray[0]);
   }
 
+  DWARFDie getNonSkeletonUnitDIE(bool ExtractUnitDIEOnly = true) {
+    parseDWO();
+    if (DWO)
+      return DWO->getUnitDIE(ExtractUnitDIEOnly);
+    return getUnitDIE(ExtractUnitDIEOnly);
+  }
+
   const char *getCompilationDir();
   Optional<uint64_t> getDWOId() {
     extractDIEsIfNeeded(/*CUDieOnly*/ true);
@@ -461,13 +473,12 @@
   DWARFDie getDIEForOffset(uint32_t Offset) {
     extractDIEsIfNeeded(false);
     assert(!DieArray.empty());
-    auto it = std::lower_bound(
-        DieArray.begin(), DieArray.end(), Offset,
-        [](const DWARFDebugInfoEntry &LHS, uint32_t Offset) {
-          return LHS.getOffset() < Offset;
+    auto It =
+        llvm::partition_point(DieArray, [=](const DWARFDebugInfoEntry &DIE) {
+          return DIE.getOffset() < Offset;
         });
-    if (it != DieArray.end() && it->getOffset() == Offset)
-      return DWARFDie(this, &*it);
+    if (It != DieArray.end() && It->getOffset() == Offset)
+      return DWARFDie(this, &*It);
     return DWARFDie();
   }
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/GSYM/FileEntry.h b/linux-x64/clang/include/llvm/DebugInfo/GSYM/FileEntry.h
new file mode 100644
index 0000000..228b4ef
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/GSYM/FileEntry.h
@@ -0,0 +1,68 @@
+//===- FileEntry.h ----------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_GSYM_FILEENTRY_H
+#define LLVM_DEBUGINFO_GSYM_FILEENTRY_H
+
+#include "llvm/ADT/DenseMapInfo.h"
+#include "llvm/ADT/Hashing.h"
+#include <functional>
+#include <stdint.h>
+#include <utility>
+
+namespace llvm {
+namespace gsym {
+
+/// Files in GSYM are contained in FileEntry structs where we split the
+/// directory and basename into two different strings in the string
+/// table. This allows paths to shared commont directory and filename
+/// strings and saves space.
+struct FileEntry {
+
+  /// Offsets in the string table.
+  /// @{
+  uint32_t Dir = 0;
+  uint32_t Base = 0;
+  /// @}
+
+  FileEntry() = default;
+  FileEntry(uint32_t D, uint32_t B) : Dir(D), Base(B) {}
+
+  // Implement operator== so that FileEntry can be used as key in
+  // unordered containers.
+  bool operator==(const FileEntry &RHS) const {
+    return Base == RHS.Base && Dir == RHS.Dir;
+  };
+  bool operator!=(const FileEntry &RHS) const {
+    return Base != RHS.Base || Dir != RHS.Dir;
+  };
+};
+
+} // namespace gsym
+
+template <> struct DenseMapInfo<gsym::FileEntry> {
+  static inline gsym::FileEntry getEmptyKey() {
+    uint32_t key = DenseMapInfo<uint32_t>::getEmptyKey();
+    return gsym::FileEntry(key, key);
+  }
+  static inline gsym::FileEntry getTombstoneKey() {
+    uint32_t key = DenseMapInfo<uint32_t>::getTombstoneKey();
+    return gsym::FileEntry(key, key);
+  }
+  static unsigned getHashValue(const gsym::FileEntry &Val) {
+    return llvm::hash_combine(DenseMapInfo<uint32_t>::getHashValue(Val.Dir),
+                              DenseMapInfo<uint32_t>::getHashValue(Val.Base));
+  }
+  static bool isEqual(const gsym::FileEntry &LHS, const gsym::FileEntry &RHS) {
+    return LHS == RHS;
+  }
+};
+
+} // namespace llvm
+#endif // #ifndef LLVM_DEBUGINFO_GSYM_FILEENTRY_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/GSYM/FunctionInfo.h b/linux-x64/clang/include/llvm/DebugInfo/GSYM/FunctionInfo.h
new file mode 100644
index 0000000..eedb1e6
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/GSYM/FunctionInfo.h
@@ -0,0 +1,107 @@
+//===- FunctionInfo.h -------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_GSYM_FUNCTIONINFO_H
+#define LLVM_DEBUGINFO_GSYM_FUNCTIONINFO_H
+
+#include "llvm/DebugInfo/GSYM/InlineInfo.h"
+#include "llvm/DebugInfo/GSYM/LineEntry.h"
+#include "llvm/DebugInfo/GSYM/Range.h"
+#include "llvm/DebugInfo/GSYM/StringTable.h"
+#include <tuple>
+#include <vector>
+
+namespace llvm {
+class raw_ostream;
+namespace gsym {
+
+/// Function information in GSYM files encodes information for one
+/// contiguous address range. The name of the function is encoded as
+/// a string table offset and allows multiple functions with the same
+/// name to share the name string in the string table. Line tables are
+/// stored in a sorted vector of gsym::LineEntry objects and are split
+/// into line tables for each function. If a function has a discontiguous
+/// range, it will be split into two gsym::FunctionInfo objects. If the
+/// function has inline functions, the information will be encoded in
+/// the "Inline" member, see gsym::InlineInfo for more information.
+struct FunctionInfo {
+  AddressRange Range;
+  uint32_t Name; ///< String table offset in the string table.
+  std::vector<gsym::LineEntry> Lines;
+  InlineInfo Inline;
+
+  FunctionInfo(uint64_t Addr = 0, uint64_t Size = 0, uint32_t N = 0)
+      : Range(Addr, Addr + Size), Name(N) {}
+
+  bool hasRichInfo() const {
+    /// Returns whether we have something else than range and name. When
+    /// converting information from a symbol table and from debug info, we
+    /// might end up with multiple FunctionInfo objects for the same range
+    /// and we need to be able to tell which one is the better object to use.
+    return !Lines.empty() || Inline.isValid();
+  }
+
+  bool isValid() const {
+    /// Address and size can be zero and there can be no line entries for a
+    /// symbol so the only indication this entry is valid is if the name is
+    /// not zero. This can happen when extracting information from symbol
+    /// tables that do not encode symbol sizes. In that case only the
+    /// address and name will be filled in.
+    return Name != 0;
+  }
+
+  uint64_t startAddress() const { return Range.Start; }
+  uint64_t endAddress() const { return Range.End; }
+  uint64_t size() const { return Range.size(); }
+  void setStartAddress(uint64_t Addr) { Range.Start = Addr; }
+  void setEndAddress(uint64_t Addr) { Range.End = Addr; }
+  void setSize(uint64_t Size) { Range.End = Range.Start + Size; }
+
+  void clear() {
+    Range = {0, 0};
+    Name = 0;
+    Lines.clear();
+    Inline.clear();
+  }
+};
+
+inline bool operator==(const FunctionInfo &LHS, const FunctionInfo &RHS) {
+  return LHS.Range == RHS.Range && LHS.Name == RHS.Name &&
+         LHS.Lines == RHS.Lines && LHS.Inline == RHS.Inline;
+}
+inline bool operator!=(const FunctionInfo &LHS, const FunctionInfo &RHS) {
+  return !(LHS == RHS);
+}
+/// This sorting will order things consistently by address range first, but then
+/// followed by inlining being valid and line tables. We might end up with a
+/// FunctionInfo from debug info that will have the same range as one from the
+/// symbol table, but we want to quickly be able to sort and use the best version
+/// when creating the final GSYM file.
+inline bool operator<(const FunctionInfo &LHS, const FunctionInfo &RHS) {
+  // First sort by address range
+  if (LHS.Range != RHS.Range)
+    return LHS.Range < RHS.Range;
+
+  // Then sort by inline
+  if (LHS.Inline.isValid() != RHS.Inline.isValid())
+    return RHS.Inline.isValid();
+
+  // If the number of lines is the same, then compare line table entries
+  if (LHS.Lines.size() == RHS.Lines.size())
+    return LHS.Lines < RHS.Lines;
+  // Then sort by number of line table entries (more is better)
+  return LHS.Lines.size() < RHS.Lines.size();
+}
+
+raw_ostream &operator<<(raw_ostream &OS, const FunctionInfo &R);
+
+} // namespace gsym
+} // namespace llvm
+
+#endif // #ifndef LLVM_DEBUGINFO_GSYM_FUNCTIONINFO_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/GSYM/InlineInfo.h b/linux-x64/clang/include/llvm/DebugInfo/GSYM/InlineInfo.h
new file mode 100644
index 0000000..2224306
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/GSYM/InlineInfo.h
@@ -0,0 +1,78 @@
+//===- InlineInfo.h ---------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_GSYM_INLINEINFO_H
+#define LLVM_DEBUGINFO_GSYM_INLINEINFO_H
+
+#include "llvm/ADT/Optional.h"
+#include "llvm/DebugInfo/GSYM/Range.h"
+#include <stdint.h>
+#include <vector>
+
+
+namespace llvm {
+class raw_ostream;
+
+namespace gsym {
+
+/// Inline information stores the name of the inline function along with
+/// an array of address ranges. It also stores the call file and call line
+/// that called this inline function. This allows us to unwind inline call
+/// stacks back to the inline or concrete function that called this
+/// function. Inlined functions contained in this function are stored in the
+/// "Children" variable. All address ranges must be sorted and all address
+/// ranges of all children must be contained in the ranges of this function.
+/// Any clients that encode information will need to ensure the ranges are
+/// all contined correctly or lookups could fail. Add ranges in these objects
+/// must be contained in the top level FunctionInfo address ranges as well.
+struct InlineInfo {
+
+  uint32_t Name; ///< String table offset in the string table.
+  uint32_t CallFile; ///< 1 based file index in the file table.
+  uint32_t CallLine; ///< Source line number.
+  AddressRanges Ranges;
+  std::vector<InlineInfo> Children;
+  InlineInfo() : Name(0), CallFile(0), CallLine(0) {}
+  void clear() {
+    Name = 0;
+    CallFile = 0;
+    CallLine = 0;
+    Ranges.clear();
+    Children.clear();
+  }
+  bool isValid() const { return !Ranges.empty(); }
+
+  using InlineArray = std::vector<const InlineInfo *>;
+
+  /// Lookup an address in the InlineInfo object
+  ///
+  /// This function is used to symbolicate an inline call stack and can
+  /// turn one address in the program into one or more inline call stacks
+  /// and have the stack trace show the original call site from
+  /// non-inlined code.
+  ///
+  /// \param Addr the address to lookup
+  ///
+  /// \returns optional vector of InlineInfo objects that describe the
+  /// inline call stack for a given address, false otherwise.
+  llvm::Optional<InlineArray> getInlineStack(uint64_t Addr) const;
+};
+
+inline bool operator==(const InlineInfo &LHS, const InlineInfo &RHS) {
+  return LHS.Name == RHS.Name && LHS.CallFile == RHS.CallFile &&
+         LHS.CallLine == RHS.CallLine && LHS.Ranges == RHS.Ranges &&
+         LHS.Children == RHS.Children;
+}
+
+raw_ostream &operator<<(raw_ostream &OS, const InlineInfo &FI);
+
+} // namespace gsym
+} // namespace llvm
+
+#endif // #ifndef LLVM_DEBUGINFO_GSYM_INLINEINFO_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/GSYM/LineEntry.h b/linux-x64/clang/include/llvm/DebugInfo/GSYM/LineEntry.h
new file mode 100644
index 0000000..6b93809
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/GSYM/LineEntry.h
@@ -0,0 +1,48 @@
+//===- LineEntry.h ----------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_GSYM_LINEENTRY_H
+#define LLVM_DEBUGINFO_GSYM_LINEENTRY_H
+
+#include "llvm/DebugInfo/GSYM/Range.h"
+
+namespace llvm {
+namespace gsym {
+
+/// Line entries are used to encode the line tables in FunctionInfo objects.
+/// They are stored as a sorted vector of these objects and store the
+/// address, file and line of the line table row for a given address. The
+/// size of a line table entry is calculated by looking at the next entry
+/// in the FunctionInfo's vector of entries.
+struct LineEntry {
+  uint64_t Addr; ///< Start address of this line entry.
+  uint32_t File; ///< 1 based index of file in FileTable
+  uint32_t Line; ///< Source line number.
+  LineEntry(uint64_t A = 0, uint32_t F = 0, uint32_t L = 0)
+      : Addr(A), File(F), Line(L) {}
+  bool isValid() { return File != 0; }
+};
+
+inline raw_ostream &operator<<(raw_ostream &OS, const LineEntry &LE) {
+  return OS << "addr=" << HEX64(LE.Addr) << ", file=" << format("%3u", LE.File)
+      << ", line=" << format("%3u", LE.Line);
+}
+
+inline bool operator==(const LineEntry &LHS, const LineEntry &RHS) {
+  return LHS.Addr == RHS.Addr && LHS.File == RHS.File && LHS.Line == RHS.Line;
+}
+inline bool operator!=(const LineEntry &LHS, const LineEntry &RHS) {
+  return !(LHS == RHS);
+}
+inline bool operator<(const LineEntry &LHS, const LineEntry &RHS) {
+  return LHS.Addr < RHS.Addr;
+}
+} // namespace gsym
+} // namespace llvm
+#endif // #ifndef LLVM_DEBUGINFO_GSYM_LINEENTRY_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/GSYM/Range.h b/linux-x64/clang/include/llvm/DebugInfo/GSYM/Range.h
new file mode 100644
index 0000000..772ff24
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/GSYM/Range.h
@@ -0,0 +1,87 @@
+//===- AddressRange.h -------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_GSYM_RANGE_H
+#define LLVM_DEBUGINFO_GSYM_RANGE_H
+
+#include "llvm/Support/Format.h"
+#include "llvm/Support/raw_ostream.h"
+#include <stdint.h>
+#include <vector>
+
+#define HEX8(v) llvm::format_hex(v, 4)
+#define HEX16(v) llvm::format_hex(v, 6)
+#define HEX32(v) llvm::format_hex(v, 10)
+#define HEX64(v) llvm::format_hex(v, 18)
+
+namespace llvm {
+class raw_ostream;
+
+namespace gsym {
+
+/// A class that represents an address range. The range is specified using
+/// a start and an end address.
+struct AddressRange {
+  uint64_t Start;
+  uint64_t End;
+  AddressRange() : Start(0), End(0) {}
+  AddressRange(uint64_t S, uint64_t E) : Start(S), End(E) {}
+  uint64_t size() const { return End - Start; }
+  bool contains(uint64_t Addr) const { return Start <= Addr && Addr < End; }
+  bool intersects(const AddressRange &R) const {
+    return Start < R.End && R.Start < End;
+  }
+
+  bool operator==(const AddressRange &R) const {
+    return Start == R.Start && End == R.End;
+  }
+  bool operator!=(const AddressRange &R) const {
+    return !(*this == R);
+  }
+  bool operator<(const AddressRange &R) const {
+    return std::make_pair(Start, End) < std::make_pair(R.Start, R.End);
+  }
+};
+
+raw_ostream &operator<<(raw_ostream &OS, const AddressRange &R);
+
+/// The AddressRanges class helps normalize address range collections.
+/// This class keeps a sorted vector of AddressRange objects and can perform
+/// insertions and searches efficiently. The address ranges are always sorted
+/// and never contain any invalid or empty address ranges. This allows us to
+/// emit address ranges into the GSYM file efficiently. Intersecting address
+/// ranges are combined during insertion so that we can emit the most compact
+/// representation for address ranges when writing to disk.
+class AddressRanges {
+protected:
+  using Collection = std::vector<AddressRange>;
+  Collection Ranges;
+public:
+  void clear() { Ranges.clear(); }
+  bool empty() const { return Ranges.empty(); }
+  bool contains(uint64_t Addr) const;
+  void insert(AddressRange Range);
+  size_t size() const { return Ranges.size(); }
+  bool operator==(const AddressRanges &RHS) const {
+    return Ranges == RHS.Ranges;
+  }
+  const AddressRange &operator[](size_t i) const {
+    assert(i < Ranges.size());
+    return Ranges[i];
+  }
+  Collection::const_iterator begin() const { return Ranges.begin(); }
+  Collection::const_iterator end() const { return Ranges.end(); }
+};
+
+raw_ostream &operator<<(raw_ostream &OS, const AddressRanges &AR);
+
+} // namespace gsym
+} // namespace llvm
+
+#endif // #ifndef LLVM_DEBUGINFO_GSYM_RANGE_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/GSYM/StringTable.h b/linux-x64/clang/include/llvm/DebugInfo/GSYM/StringTable.h
new file mode 100644
index 0000000..0001b8b
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/GSYM/StringTable.h
@@ -0,0 +1,54 @@
+//===- StringTable.h --------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_GSYM_STRINGTABLE_H
+#define LLVM_DEBUGINFO_GSYM_STRINGTABLE_H
+
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/DebugInfo/GSYM/Range.h"
+#include <stdint.h>
+#include <string>
+
+
+namespace llvm {
+namespace gsym {
+
+/// String tables in GSYM files are required to start with an empty
+/// string at offset zero. Strings must be UTF8 NULL terminated strings.
+struct StringTable {
+  StringRef Data;
+  StringTable() : Data() {}
+  StringTable(StringRef D) : Data(D) {}
+  StringRef operator[](size_t Offset) const { return getString(Offset); }
+  StringRef getString(uint32_t Offset) const {
+    if (Offset < Data.size()) {
+      auto End = Data.find('\0', Offset);
+      return Data.substr(Offset, End - Offset);
+    }
+    return StringRef();
+  }
+  void clear() { Data = StringRef(); }
+};
+
+inline raw_ostream &operator<<(raw_ostream &OS, const StringTable &S) {
+  OS << "String table:\n";
+  uint32_t Offset = 0;
+  const size_t Size = S.Data.size();
+  while (Offset < Size) {
+    StringRef Str = S.getString(Offset);
+    OS << HEX32(Offset) << ": \"" << Str << "\"\n";
+    Offset += Str.size() + 1;
+  }
+  return OS;
+}
+
+} // namespace gsym
+} // namespace llvm
+#endif // #ifndef LLVM_DEBUGINFO_GSYM_STRINGTABLE_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/HashTable.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/HashTable.h
index e8f08c6..86c43a4 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/HashTable.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/HashTable.h
@@ -143,7 +143,7 @@
       return EC;
     if (Present.intersects(Deleted))
       return make_error<RawError>(raw_error_code::corrupt_file,
-                                  "Present bit vector interesects deleted!");
+                                  "Present bit vector intersects deleted!");
 
     for (uint32_t P : Present) {
       if (auto EC = Stream.readInteger(Buckets[P].first))
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h
index 161aa32..cb1ffc7 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h
@@ -68,6 +68,8 @@
   findChecksumsSubsection() const;
 
 private:
+  Error reloadSerialize(BinaryStreamReader &Reader);
+
   DbiModuleDescriptor Mod;
 
   uint32_t Signature;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h
index 84b0cb3..6119e6e 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h
@@ -176,7 +176,7 @@
 };
 static_assert(sizeof(DbiStreamHeader) == 64, "Invalid DbiStreamHeader size!");
 
-/// The header preceeding the File Info Substream of the DBI stream.
+/// The header preceding the File Info Substream of the DBI stream.
 struct FileInfoSubstreamHeader {
   /// Total # of modules, should match number of records in the ModuleInfo
   /// substream.
@@ -207,7 +207,7 @@
   static const uint16_t TypeServerIndexShift = 8;
 };
 
-/// The header preceeding each entry in the Module Info substream of the DBI
+/// The header preceding each entry in the Module Info substream of the DBI
 /// stream.  Corresponds to the type MODI in the reference implementation.
 struct ModuleInfoHeader {
   /// Currently opened module. This field is a pointer in the reference
@@ -272,7 +272,7 @@
   support::ulittle32_t NumSections;
 };
 
-// The header preceeding the global TPI stream.
+// The header preceding the global TPI stream.
 // This corresponds to `HDR` in PDB/dbi/tpi.h.
 struct TpiStreamHeader {
   struct EmbeddedBuf {
@@ -300,7 +300,7 @@
 const uint32_t MinTpiHashBuckets = 0x1000;
 const uint32_t MaxTpiHashBuckets = 0x40000;
 
-/// The header preceeding the global PDB Stream (Stream 1)
+/// The header preceding the global PDB Stream (Stream 1)
 struct InfoStreamHeader {
   support::ulittle32_t Version;
   support::ulittle32_t Signature;
@@ -308,7 +308,7 @@
   codeview::GUID Guid;
 };
 
-/// The header preceeding the /names stream.
+/// The header preceding the /names stream.
 struct PDBStringTableHeader {
   support::ulittle32_t Signature;   // PDBStringTableSignature
   support::ulittle32_t HashVersion; // 1 or 2
@@ -341,7 +341,6 @@
   short Padding;                 // Pad to 4 bytes.
   char Reserved[8];
 };
-
 static_assert(sizeof(SrcHeaderBlockEntry) == 40, "Incorrect struct size!");
 
 } // namespace pdb
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBContext.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBContext.h
index e404e07..7b6793f 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBContext.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBContext.h
@@ -43,15 +43,18 @@
     void dump(raw_ostream &OS, DIDumpOptions DIDumpOpts) override;
 
     DILineInfo getLineInfoForAddress(
-        uint64_t Address,
+        object::SectionedAddress Address,
         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
     DILineInfoTable getLineInfoForAddressRange(
-        uint64_t Address, uint64_t Size,
+        object::SectionedAddress Address, uint64_t Size,
         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
     DIInliningInfo getInliningInfoForAddress(
-        uint64_t Address,
+        object::SectionedAddress Address,
         DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
 
+    std::vector<DILocal>
+    getLocalsForAddress(object::SectionedAddress Address) override;
+
   private:
     std::string getFunctionName(uint64_t Address, DINameKind NameKind) const;
     std::unique_ptr<IPDBSession> Session;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBExtras.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBExtras.h
index b9a8d8f..f5c3a5f 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBExtras.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBExtras.h
@@ -27,7 +27,8 @@
 raw_ostream &operator<<(raw_ostream &OS, const PDB_CallingConv &Conv);
 raw_ostream &operator<<(raw_ostream &OS, const PDB_BuiltinType &Type);
 raw_ostream &operator<<(raw_ostream &OS, const PDB_DataKind &Data);
-raw_ostream &operator<<(raw_ostream &OS, const codeview::RegisterId &Reg);
+raw_ostream &operator<<(raw_ostream &OS,
+                        const llvm::codeview::CPURegister &CpuReg);
 raw_ostream &operator<<(raw_ostream &OS, const PDB_LocType &Loc);
 raw_ostream &operator<<(raw_ostream &OS, const codeview::ThunkOrdinal &Thunk);
 raw_ostream &operator<<(raw_ostream &OS, const PDB_Checksum &Checksum);
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h
index 6d26b64..742cb85 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h
@@ -126,6 +126,7 @@
   Am33 = 0x13,
   Amd64 = 0x8664,
   Arm = 0x1C0,
+  Arm64 = 0xaa64,
   ArmNT = 0x1C4,
   Ebc = 0xEBC,
   x86 = 0x14C,
diff --git a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/DIPrinter.h b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/DIPrinter.h
index 71663f3..db7a61a 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/DIPrinter.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/DIPrinter.h
@@ -20,16 +20,22 @@
 struct DILineInfo;
 class DIInliningInfo;
 struct DIGlobal;
+struct DILocal;
 
 namespace symbolize {
 
 class DIPrinter {
+public:
+  enum class OutputStyle { LLVM, GNU };
+
+private:
   raw_ostream &OS;
   bool PrintFunctionNames;
   bool PrintPretty;
   int PrintSourceContext;
   bool Verbose;
   bool Basenames;
+  OutputStyle Style;
 
   void print(const DILineInfo &Info, bool Inlined);
   void printContext(const std::string &FileName, int64_t Line);
@@ -37,14 +43,16 @@
 public:
   DIPrinter(raw_ostream &OS, bool PrintFunctionNames = true,
             bool PrintPretty = false, int PrintSourceContext = 0,
-            bool Verbose = false, bool Basenames = false)
+            bool Verbose = false, bool Basenames = false,
+            OutputStyle Style = OutputStyle::LLVM)
       : OS(OS), PrintFunctionNames(PrintFunctionNames),
         PrintPretty(PrintPretty), PrintSourceContext(PrintSourceContext),
-        Verbose(Verbose), Basenames(Basenames) {}
+        Verbose(Verbose), Basenames(Basenames), Style(Style) {}
 
   DIPrinter &operator<<(const DILineInfo &Info);
   DIPrinter &operator<<(const DIInliningInfo &Info);
   DIPrinter &operator<<(const DIGlobal &Global);
+  DIPrinter &operator<<(const DILocal &Local);
 };
 }
 }
diff --git a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/SymbolizableModule.h b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/SymbolizableModule.h
index f0862d0..506ecc4 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/SymbolizableModule.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/SymbolizableModule.h
@@ -24,13 +24,16 @@
 public:
   virtual ~SymbolizableModule() = default;
 
-  virtual DILineInfo symbolizeCode(uint64_t ModuleOffset,
+  virtual DILineInfo symbolizeCode(object::SectionedAddress ModuleOffset,
                                    FunctionNameKind FNKind,
                                    bool UseSymbolTable) const = 0;
-  virtual DIInliningInfo symbolizeInlinedCode(uint64_t ModuleOffset,
-                                              FunctionNameKind FNKind,
-                                              bool UseSymbolTable) const = 0;
-  virtual DIGlobal symbolizeData(uint64_t ModuleOffset) const = 0;
+  virtual DIInliningInfo
+  symbolizeInlinedCode(object::SectionedAddress ModuleOffset,
+                       FunctionNameKind FNKind, bool UseSymbolTable) const = 0;
+  virtual DIGlobal
+  symbolizeData(object::SectionedAddress ModuleOffset) const = 0;
+  virtual std::vector<DILocal>
+  symbolizeFrame(object::SectionedAddress ModuleOffset) const = 0;
 
   // Return true if this is a 32-bit x86 PE COFF module.
   virtual bool isWin32Module() const = 0;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h
index 4e57fe4..d3da28c 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h
@@ -35,38 +35,35 @@
 class LLVMSymbolizer {
 public:
   struct Options {
-    FunctionNameKind PrintFunctions;
-    bool UseSymbolTable : 1;
-    bool Demangle : 1;
-    bool RelativeAddresses : 1;
+    FunctionNameKind PrintFunctions = FunctionNameKind::LinkageName;
+    bool UseSymbolTable = true;
+    bool Demangle = true;
+    bool RelativeAddresses = false;
     std::string DefaultArch;
     std::vector<std::string> DsymHints;
     std::string FallbackDebugPath;
-
-    Options(FunctionNameKind PrintFunctions = FunctionNameKind::LinkageName,
-            bool UseSymbolTable = true, bool Demangle = true,
-            bool RelativeAddresses = false, std::string DefaultArch = "",
-            std::string FallbackDebugPath = "")
-        : PrintFunctions(PrintFunctions), UseSymbolTable(UseSymbolTable),
-          Demangle(Demangle), RelativeAddresses(RelativeAddresses),
-          DefaultArch(std::move(DefaultArch)),
-          FallbackDebugPath(std::move(FallbackDebugPath)) {}
+    std::string DWPName;
   };
 
-  LLVMSymbolizer(const Options &Opts = Options()) : Opts(Opts) {}
+  LLVMSymbolizer() = default;
+  LLVMSymbolizer(const Options &Opts) : Opts(Opts) {}
 
   ~LLVMSymbolizer() {
     flush();
   }
 
+  Expected<DILineInfo> symbolizeCode(const ObjectFile &Obj,
+                                     object::SectionedAddress ModuleOffset);
   Expected<DILineInfo> symbolizeCode(const std::string &ModuleName,
-                                     uint64_t ModuleOffset,
-                                     StringRef DWPName = "");
-  Expected<DIInliningInfo> symbolizeInlinedCode(const std::string &ModuleName,
-                                                uint64_t ModuleOffset,
-                                                StringRef DWPName = "");
+                                     object::SectionedAddress ModuleOffset);
+  Expected<DIInliningInfo>
+  symbolizeInlinedCode(const std::string &ModuleName,
+                       object::SectionedAddress ModuleOffset);
   Expected<DIGlobal> symbolizeData(const std::string &ModuleName,
-                                   uint64_t ModuleOffset);
+                                   object::SectionedAddress ModuleOffset);
+  Expected<std::vector<DILocal>>
+  symbolizeFrame(const std::string &ModuleName,
+                 object::SectionedAddress ModuleOffset);
   void flush();
 
   static std::string
@@ -76,14 +73,23 @@
 private:
   // Bundles together object file with code/data and object file with
   // corresponding debug info. These objects can be the same.
-  using ObjectPair = std::pair<ObjectFile *, ObjectFile *>;
+  using ObjectPair = std::pair<const ObjectFile *, const ObjectFile *>;
+
+  Expected<DILineInfo>
+  symbolizeCodeCommon(SymbolizableModule *Info,
+                      object::SectionedAddress ModuleOffset);
 
   /// Returns a SymbolizableModule or an error if loading debug info failed.
   /// Only one attempt is made to load a module, and errors during loading are
   /// only reported once. Subsequent calls to get module info for a module that
   /// failed to load will return nullptr.
   Expected<SymbolizableModule *>
-  getOrCreateModuleInfo(const std::string &ModuleName, StringRef DWPName = "");
+  getOrCreateModuleInfo(const std::string &ModuleName);
+
+  Expected<SymbolizableModule *>
+  createModuleInfo(const ObjectFile *Obj,
+                   std::unique_ptr<DIContext> Context,
+                   StringRef ModuleName);
 
   ObjectFile *lookUpDsymFile(const std::string &Path,
                              const MachOObjectFile *ExeObj,
diff --git a/linux-x64/clang/include/llvm/Demangle/ItaniumDemangle.h b/linux-x64/clang/include/llvm/Demangle/ItaniumDemangle.h
index df06aa6..aaccb27 100644
--- a/linux-x64/clang/include/llvm/Demangle/ItaniumDemangle.h
+++ b/linux-x64/clang/include/llvm/Demangle/ItaniumDemangle.h
@@ -89,6 +89,7 @@
     X(InitListExpr) \
     X(FoldExpr) \
     X(ThrowExpr) \
+    X(UUIDOfExpr) \
     X(BoolExpr) \
     X(IntegerCastExpr) \
     X(IntegerLiteral) \
@@ -1873,6 +1874,21 @@
   }
 };
 
+// MSVC __uuidof extension, generated by clang in -fms-extensions mode.
+class UUIDOfExpr : public Node {
+  Node *Operand;
+public:
+  UUIDOfExpr(Node *Operand_) : Node(KUUIDOfExpr), Operand(Operand_) {}
+
+  template<typename Fn> void match(Fn F) const { F(Operand); }
+
+  void printLeft(OutputStream &S) const override {
+    S << "__uuidof(";
+    Operand->print(S);
+    S << ")";
+  }
+};
+
 class BoolExpr : public Node {
   bool Value;
 
@@ -2794,11 +2810,13 @@
 // <ctor-dtor-name> ::= C1  # complete object constructor
 //                  ::= C2  # base object constructor
 //                  ::= C3  # complete object allocating constructor
-//   extension      ::= C5    # ?
+//   extension      ::= C4  # gcc old-style "[unified]" constructor
+//   extension      ::= C5  # the COMDAT used for ctors
 //                  ::= D0  # deleting destructor
 //                  ::= D1  # complete object destructor
 //                  ::= D2  # base object destructor
-//   extension      ::= D5    # ?
+//   extension      ::= D4  # gcc old-style "[unified]" destructor
+//   extension      ::= D5  # the COMDAT used for dtors
 template <typename Derived, typename Alloc>
 Node *
 AbstractManglingParser<Derived, Alloc>::parseCtorDtorName(Node *&SoFar,
@@ -2821,7 +2839,8 @@
 
   if (consumeIf('C')) {
     bool IsInherited = consumeIf('I');
-    if (look() != '1' && look() != '2' && look() != '3' && look() != '5')
+    if (look() != '1' && look() != '2' && look() != '3' && look() != '4' &&
+        look() != '5')
       return nullptr;
     int Variant = look() - '0';
     ++First;
@@ -2830,15 +2849,15 @@
       if (getDerived().parseName(State) == nullptr)
         return nullptr;
     }
-    return make<CtorDtorName>(SoFar, false, Variant);
+    return make<CtorDtorName>(SoFar, /*IsDtor=*/false, Variant);
   }
 
-  if (look() == 'D' &&
-      (look(1) == '0' || look(1) == '1' || look(1) == '2' || look(1) == '5')) {
+  if (look() == 'D' && (look(1) == '0' || look(1) == '1' || look(1) == '2' ||
+                        look(1) == '4' || look(1) == '5')) {
     int Variant = look(1) - '0';
     First += 2;
     if (State) State->CtorDtorConversion = true;
-    return make<CtorDtorName>(SoFar, true, Variant);
+    return make<CtorDtorName>(SoFar, /*IsDtor=*/true, Variant);
   }
 
   return nullptr;
@@ -3573,7 +3592,11 @@
     StringView Res = parseBareSourceName();
     if (Res.empty())
       return nullptr;
-    return make<NameType>(Res);
+    // Typically, <builtin-type>s are not considered substitution candidates,
+    // but the exception to that exception is vendor extended types (Itanium C++
+    // ABI 5.9.1).
+    Result = make<NameType>(Res);
+    break;
   }
   case 'D':
     switch (look(1)) {
@@ -3601,6 +3624,10 @@
     case 's':
       First += 2;
       return make<NameType>("char16_t");
+    //                ::= Du   # char8_t (C++2a, not yet in the Itanium spec)
+    case 'u':
+      First += 2;
+      return make<NameType>("char8_t");
     //                ::= Da   # auto (in dependent new-expressions)
     case 'a':
       First += 2;
@@ -4642,6 +4669,21 @@
   case '9':
     return getDerived().parseUnresolvedName();
   }
+
+  if (consumeIf("u8__uuidoft")) {
+    Node *Ty = getDerived().parseType();
+    if (!Ty)
+      return nullptr;
+    return make<UUIDOfExpr>(Ty);
+  }
+
+  if (consumeIf("u8__uuidofz")) {
+    Node *Ex = getDerived().parseExpr();
+    if (!Ex)
+      return nullptr;
+    return make<UUIDOfExpr>(Ex);
+  }
+
   return nullptr;
 }
 
diff --git a/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangle.h b/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangle.h
index a23e327..382e794 100644
--- a/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangle.h
+++ b/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangle.h
@@ -55,24 +55,21 @@
     }
   }
 
-  char *allocUnalignedBuffer(size_t Length) {
-    uint8_t *Buf = Head->Buf + Head->Used;
+  char *allocUnalignedBuffer(size_t Size) {
+    assert(Head && Head->Buf);
 
-    Head->Used += Length;
-    if (Head->Used > Head->Capacity) {
-      // It's possible we need a buffer which is larger than our default unit
-      // size, so we need to be careful to add a node with capacity that is at
-      // least as large as what we need.
-      addNode(std::max(AllocUnit, Length));
-      Head->Used = Length;
-      Buf = Head->Buf;
-    }
+    uint8_t *P = Head->Buf + Head->Used;
 
-    return reinterpret_cast<char *>(Buf);
+    Head->Used += Size;
+    if (Head->Used <= Head->Capacity)
+      return reinterpret_cast<char *>(P);
+
+    addNode(std::max(AllocUnit, Size));
+    Head->Used = Size;
+    return reinterpret_cast<char *>(Head->Buf);
   }
 
   template <typename T, typename... Args> T *allocArray(size_t Count) {
-
     size_t Size = Count * sizeof(T);
     assert(Head && Head->Buf);
 
@@ -83,17 +80,16 @@
     size_t Adjustment = AlignedP - P;
 
     Head->Used += Size + Adjustment;
-    if (Head->Used < Head->Capacity)
+    if (Head->Used <= Head->Capacity)
       return new (PP) T[Count]();
 
-    addNode(AllocUnit);
+    addNode(std::max(AllocUnit, Size));
     Head->Used = Size;
     return new (Head->Buf) T[Count]();
   }
 
   template <typename T, typename... Args> T *alloc(Args &&... ConstructorArgs) {
-
-    size_t Size = sizeof(T);
+    constexpr size_t Size = sizeof(T);
     assert(Head && Head->Buf);
 
     size_t P = (size_t)Head->Buf + Head->Used;
@@ -103,9 +99,10 @@
     size_t Adjustment = AlignedP - P;
 
     Head->Used += Size + Adjustment;
-    if (Head->Used < Head->Capacity)
+    if (Head->Used <= Head->Capacity)
       return new (PP) T(std::forward<Args>(ConstructorArgs)...);
 
+    static_assert(Size < AllocUnit, "");
     addNode(AllocUnit);
     Head->Used = Size;
     return new (Head->Buf) T(std::forward<Args>(ConstructorArgs)...);
@@ -159,6 +156,8 @@
 private:
   SymbolNode *demangleEncodedSymbol(StringView &MangledName,
                                     QualifiedNameNode *QN);
+  SymbolNode *demangleDeclarator(StringView &MangledName);
+  SymbolNode *demangleMD5Name(StringView &MangledName);
 
   VariableSymbolNode *demangleVariableEncoding(StringView &MangledName,
                                                StorageClass SC);
@@ -178,8 +177,9 @@
 
   ArrayTypeNode *demangleArrayType(StringView &MangledName);
 
+  NodeArrayNode *demangleFunctionParameterList(StringView &MangledName,
+                                               bool &IsVariadic);
   NodeArrayNode *demangleTemplateParameterList(StringView &MangledName);
-  NodeArrayNode *demangleFunctionParameterList(StringView &MangledName);
 
   std::pair<uint64_t, bool> demangleNumber(StringView &MangledName);
   uint64_t demangleUnsigned(StringView &MangledName);
@@ -206,6 +206,8 @@
   NamedIdentifierNode *demangleBackRefName(StringView &MangledName);
   IdentifierNode *demangleTemplateInstantiationName(StringView &MangledName,
                                                     NameBackrefBehavior NBB);
+  IntrinsicFunctionKind
+  translateIntrinsicFunctionCode(char CH, FunctionIdentifierCodeGroup Group);
   IdentifierNode *demangleFunctionIdentifierCode(StringView &MangledName);
   IdentifierNode *
   demangleFunctionIdentifierCode(StringView &MangledName,
@@ -222,7 +224,7 @@
   demangleSpecialTableSymbolNode(StringView &MangledName,
                                  SpecialIntrinsicKind SIK);
   LocalStaticGuardVariableNode *
-  demangleLocalStaticGuard(StringView &MangledName);
+  demangleLocalStaticGuard(StringView &MangledName, bool IsThread);
   VariableSymbolNode *demangleUntypedVariable(ArenaAllocator &Arena,
                                               StringView &MangledName,
                                               StringView VariableName);
diff --git a/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangleNodes.h b/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangleNodes.h
index b478418..da9d9d5 100644
--- a/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangleNodes.h
+++ b/linux-x64/clang/include/llvm/Demangle/MicrosoftDemangleNodes.h
@@ -82,6 +82,7 @@
   Char,
   Schar,
   Uchar,
+  Char8,
   Char16,
   Char32,
   Short,
@@ -170,8 +171,8 @@
   VectorCopyCtorIter,         // ?__G vector copy constructor iterator
   VectorVbaseCopyCtorIter,    // ?__H vector vbase copy constructor iterator
   ManVectorVbaseCopyCtorIter, // ?__I managed vector vbase copy constructor
-  CoAwait,                    // ?__L co_await
-  Spaceship,                  // operator<=>
+  CoAwait,                    // ?__L operator co_await
+  Spaceship,                  // ?__M operator<=>
   MaxIntrinsic
 };
 
@@ -343,7 +344,7 @@
   // Function parameters
   NodeArrayNode *Params = nullptr;
 
-  // True if the function type is noexcept
+  // True if the function type is noexcept.
   bool IsNoexcept = false;
 };
 
@@ -408,6 +409,7 @@
 
   void output(OutputStream &OS, OutputFlags Flags) const override;
 
+  bool IsThread = false;
   uint32_t ScopeIndex = 0;
 };
 
@@ -513,7 +515,7 @@
 
   void output(OutputStream &OS, OutputFlags Flags, StringView Separator) const;
 
-  Node **Nodes = 0;
+  Node **Nodes = nullptr;
   size_t Count = 0;
 };
 
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
new file mode 100644
index 0000000..8d2f641
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
@@ -0,0 +1,80 @@
+//===--------- EHFrameSupport.h - JITLink eh-frame utils --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// EHFrame registration support for JITLink.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORT_H
+#define LLVM_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORT_H
+
+#include "llvm/ADT/Triple.h"
+#include "llvm/ExecutionEngine/JITLink/JITLink.h"
+#include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/Support/Error.h"
+
+namespace llvm {
+namespace jitlink {
+
+/// Registers all FDEs in the given eh-frame section with the current process.
+Error registerEHFrameSection(const void *EHFrameSectionAddr);
+
+/// Deregisters all FDEs in the given eh-frame section with the current process.
+Error deregisterEHFrameSection(const void *EHFrameSectionAddr);
+
+/// Supports registration/deregistration of EH-frames in a target process.
+class EHFrameRegistrar {
+public:
+  virtual ~EHFrameRegistrar();
+  virtual Error registerEHFrames(JITTargetAddress EHFrameSectionAddr) = 0;
+  virtual Error deregisterEHFrames(JITTargetAddress EHFrameSectionAddr) = 0;
+};
+
+/// Registers / Deregisters EH-frames in the current process.
+class InProcessEHFrameRegistrar final : public EHFrameRegistrar {
+public:
+  /// Get a reference to the InProcessEHFrameRegistrar singleton.
+  static InProcessEHFrameRegistrar &getInstance();
+
+  InProcessEHFrameRegistrar(const InProcessEHFrameRegistrar &) = delete;
+  InProcessEHFrameRegistrar &
+  operator=(const InProcessEHFrameRegistrar &) = delete;
+
+  InProcessEHFrameRegistrar(InProcessEHFrameRegistrar &&) = delete;
+  InProcessEHFrameRegistrar &operator=(InProcessEHFrameRegistrar &&) = delete;
+
+  Error registerEHFrames(JITTargetAddress EHFrameSectionAddr) override {
+    return registerEHFrameSection(
+        jitTargetAddressToPointer<void *>(EHFrameSectionAddr));
+  }
+
+  Error deregisterEHFrames(JITTargetAddress EHFrameSectionAddr) override {
+    return deregisterEHFrameSection(
+        jitTargetAddressToPointer<void *>(EHFrameSectionAddr));
+  }
+
+private:
+  InProcessEHFrameRegistrar();
+};
+
+using StoreFrameAddressFunction = std::function<void(JITTargetAddress)>;
+
+/// Creates a pass that records the address of the EH frame section. If no
+/// eh-frame section is found, it will set EHFrameAddr to zero.
+///
+/// Authors of JITLinkContexts can use this function to register a post-fixup
+/// pass that records the address of the eh-frame section. This address can
+/// be used after finalization to register and deregister the frame.
+AtomGraphPassFunction
+createEHFrameRecorderPass(const Triple &TT,
+                          StoreFrameAddressFunction StoreFrameAddress);
+
+} // end namespace jitlink
+} // end namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORT_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/JITLink.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/JITLink.h
new file mode 100644
index 0000000..be80d44
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -0,0 +1,930 @@
+//===------------ JITLink.h - JIT linker functionality ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Contains generic JIT-linker types.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINK_H
+#define LLVM_EXECUTIONENGINE_JITLINK_JITLINK_H
+
+#include "JITLinkMemoryManager.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/DenseSet.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/Triple.h"
+#include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/Endian.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/Memory.h"
+#include "llvm/Support/MemoryBuffer.h"
+
+#include <map>
+#include <string>
+#include <system_error>
+
+namespace llvm {
+namespace jitlink {
+
+/// Base class for errors originating in JIT linker, e.g. missing relocation
+/// support.
+class JITLinkError : public ErrorInfo<JITLinkError> {
+public:
+  static char ID;
+
+  JITLinkError(Twine ErrMsg) : ErrMsg(ErrMsg.str()) {}
+
+  void log(raw_ostream &OS) const override;
+  const std::string &getErrorMessage() const { return ErrMsg; }
+  std::error_code convertToErrorCode() const override;
+
+private:
+  std::string ErrMsg;
+};
+
+// Forward declare the Atom class.
+class Atom;
+
+/// Edge class. Represents both object file relocations, as well as layout and
+/// keep-alive constraints.
+class Edge {
+public:
+  using Kind = uint8_t;
+
+  using GenericEdgeKind = enum : Kind {
+    Invalid,                    // Invalid edge value.
+    FirstKeepAlive,             // Keeps target alive. Offset/addend zero.
+    KeepAlive = FirstKeepAlive, // Tag first edge kind that preserves liveness.
+    LayoutNext,                 // Layout constraint. Offset/Addend zero.
+    FirstRelocation             // First architecture specific relocation.
+  };
+
+  using OffsetT = uint32_t;
+  using AddendT = int64_t;
+
+  Edge(Kind K, OffsetT Offset, Atom &Target, AddendT Addend)
+      : Target(&Target), Offset(Offset), Addend(Addend), K(K) {}
+
+  OffsetT getOffset() const { return Offset; }
+  Kind getKind() const { return K; }
+  void setKind(Kind K) { this->K = K; }
+  bool isRelocation() const { return K >= FirstRelocation; }
+  Kind getRelocation() const {
+    assert(isRelocation() && "Not a relocation edge");
+    return K - FirstRelocation;
+  }
+  bool isKeepAlive() const { return K >= FirstKeepAlive; }
+  Atom &getTarget() const { return *Target; }
+  void setTarget(Atom &Target) { this->Target = &Target; }
+  AddendT getAddend() const { return Addend; }
+  void setAddend(AddendT Addend) { this->Addend = Addend; }
+
+private:
+  Atom *Target;
+  OffsetT Offset;
+  AddendT Addend;
+  Kind K = 0;
+};
+
+using EdgeVector = std::vector<Edge>;
+
+const StringRef getGenericEdgeKindName(Edge::Kind K);
+
+/// Base Atom class. Used by absolute and undefined atoms.
+class Atom {
+  friend class AtomGraph;
+
+protected:
+  /// Create a named (as yet unresolved) atom.
+  Atom(StringRef Name)
+      : Name(Name), IsDefined(false), IsLive(false), ShouldDiscard(false),
+        IsGlobal(false), IsAbsolute(false), IsCallable(false),
+        IsExported(false), IsWeak(false), HasLayoutNext(false),
+        IsCommon(false) {}
+
+  /// Create an absolute symbol atom.
+  Atom(StringRef Name, JITTargetAddress Address)
+      : Name(Name), Address(Address), IsDefined(true), IsLive(false),
+        ShouldDiscard(false), IsGlobal(false), IsAbsolute(false),
+        IsCallable(false), IsExported(false), IsWeak(false),
+        HasLayoutNext(false), IsCommon(false) {}
+
+public:
+  /// Returns true if this atom has a name.
+  bool hasName() const { return Name != StringRef(); }
+
+  /// Returns the name of this atom.
+  StringRef getName() const { return Name; }
+
+  /// Returns the current target address of this atom.
+  /// The initial target address (for atoms that have one) will be taken from
+  /// the input object file's virtual address space. During the layout phase
+  /// of JIT linking the atom's address will be updated to point to its final
+  /// address in the JIT'd process.
+  JITTargetAddress getAddress() const { return Address; }
+
+  /// Set the current target address of this atom.
+  void setAddress(JITTargetAddress Address) { this->Address = Address; }
+
+  /// Returns true if this is a defined atom.
+  bool isDefined() const { return IsDefined; }
+
+  /// Returns true if this atom is marked as live.
+  bool isLive() const { return IsLive; }
+
+  /// Mark this atom as live.
+  ///
+  /// Note: Only defined and absolute atoms can be marked live.
+  void setLive(bool IsLive) {
+    assert((IsDefined || IsAbsolute || !IsLive) &&
+           "Only defined and absolute atoms can be marked live");
+    this->IsLive = IsLive;
+  }
+
+  /// Returns true if this atom should be discarded during pruning.
+  bool shouldDiscard() const { return ShouldDiscard; }
+
+  /// Mark this atom to be discarded.
+  ///
+  /// Note: Only defined and absolute atoms can be marked live.
+  void setShouldDiscard(bool ShouldDiscard) {
+    assert((IsDefined || IsAbsolute || !ShouldDiscard) &&
+           "Only defined and absolute atoms can be marked live");
+    this->ShouldDiscard = ShouldDiscard;
+  }
+
+  /// Returns true if this definition is global (i.e. visible outside this
+  /// linkage unit).
+  ///
+  /// Note: This is distict from Exported, which means visibile outside the
+  /// JITDylib that this graph is being linked in to.
+  bool isGlobal() const { return IsGlobal; }
+
+  /// Mark this atom as global.
+  void setGlobal(bool IsGlobal) { this->IsGlobal = IsGlobal; }
+
+  /// Returns true if this atom represents an absolute symbol.
+  bool isAbsolute() const { return IsAbsolute; }
+
+  /// Returns true if this atom is known to be callable.
+  ///
+  /// Primarily provided for easy interoperability with ORC, which uses the
+  /// JITSymbolFlags::Common flag to identify symbols that can be interposed
+  /// with stubs.
+  bool isCallable() const { return IsCallable; }
+
+  /// Mark this atom as callable.
+  void setCallable(bool IsCallable) {
+    assert((IsDefined || IsAbsolute || !IsCallable) &&
+           "Callable atoms must be defined or absolute");
+    this->IsCallable = IsCallable;
+  }
+
+  /// Returns true if this atom should appear in the symbol table of a final
+  /// linked image.
+  bool isExported() const { return IsExported; }
+
+  /// Mark this atom as exported.
+  void setExported(bool IsExported) {
+    assert((!IsExported || ((IsDefined || IsAbsolute) && hasName())) &&
+           "Exported atoms must have names");
+    this->IsExported = IsExported;
+  }
+
+  /// Returns true if this is a weak symbol.
+  bool isWeak() const { return IsWeak; }
+
+  /// Mark this atom as weak.
+  void setWeak(bool IsWeak) { this->IsWeak = IsWeak; }
+
+private:
+  StringRef Name;
+  JITTargetAddress Address = 0;
+
+  bool IsDefined : 1;
+  bool IsLive : 1;
+  bool ShouldDiscard : 1;
+
+  bool IsGlobal : 1;
+  bool IsAbsolute : 1;
+  bool IsCallable : 1;
+  bool IsExported : 1;
+  bool IsWeak : 1;
+
+protected:
+  // These flags only make sense for DefinedAtom, but we can minimize the size
+  // of DefinedAtom by defining them here.
+  bool HasLayoutNext : 1;
+  bool IsCommon : 1;
+};
+
+// Forward declare DefinedAtom.
+class DefinedAtom;
+
+raw_ostream &operator<<(raw_ostream &OS, const Atom &A);
+void printEdge(raw_ostream &OS, const Atom &FixupAtom, const Edge &E,
+               StringRef EdgeKindName);
+
+/// Represents a section address range via a pair of DefinedAtom pointers to
+/// the first and last atoms in the section.
+class SectionRange {
+public:
+  SectionRange() = default;
+  SectionRange(DefinedAtom *First, DefinedAtom *Last)
+      : First(First), Last(Last) {}
+  DefinedAtom *getFirstAtom() const {
+    assert((!Last || First) && "First can not be null if end is non-null");
+    return First;
+  }
+  DefinedAtom *getLastAtom() const {
+    assert((First || !Last) && "Last can not be null if start is non-null");
+    return Last;
+  }
+  bool isEmpty() const {
+    assert((First || !Last) && "Last can not be null if start is non-null");
+    return !First;
+  }
+  JITTargetAddress getStart() const;
+  JITTargetAddress getEnd() const;
+  uint64_t getSize() const;
+
+private:
+  DefinedAtom *First = nullptr;
+  DefinedAtom *Last = nullptr;
+};
+
+/// Represents an object file section.
+class Section {
+  friend class AtomGraph;
+
+private:
+  Section(StringRef Name, uint32_t Alignment, sys::Memory::ProtectionFlags Prot,
+          unsigned Ordinal, bool IsZeroFill)
+      : Name(Name), Alignment(Alignment), Prot(Prot), Ordinal(Ordinal),
+        IsZeroFill(IsZeroFill) {
+    assert(isPowerOf2_32(Alignment) && "Alignments must be a power of 2");
+  }
+
+  using DefinedAtomSet = DenseSet<DefinedAtom *>;
+
+public:
+  using atom_iterator = DefinedAtomSet::iterator;
+  using const_atom_iterator = DefinedAtomSet::const_iterator;
+
+  ~Section();
+  StringRef getName() const { return Name; }
+  uint32_t getAlignment() const { return Alignment; }
+  sys::Memory::ProtectionFlags getProtectionFlags() const { return Prot; }
+  unsigned getSectionOrdinal() const { return Ordinal; }
+  size_t getNextAtomOrdinal() { return ++NextAtomOrdinal; }
+
+  bool isZeroFill() const { return IsZeroFill; }
+
+  /// Returns an iterator over the atoms in the section (in no particular
+  /// order).
+  iterator_range<atom_iterator> atoms() {
+    return make_range(DefinedAtoms.begin(), DefinedAtoms.end());
+  }
+
+  /// Returns an iterator over the atoms in the section (in no particular
+  /// order).
+  iterator_range<const_atom_iterator> atoms() const {
+    return make_range(DefinedAtoms.begin(), DefinedAtoms.end());
+  }
+
+  /// Return the number of atoms in this section.
+  DefinedAtomSet::size_type atoms_size() { return DefinedAtoms.size(); }
+
+  /// Return true if this section contains no atoms.
+  bool atoms_empty() const { return DefinedAtoms.empty(); }
+
+  /// Returns the range of this section as the pair of atoms with the lowest
+  /// and highest target address. This operation is expensive, as it
+  /// must traverse all atoms in the section.
+  ///
+  /// Note: If the section is empty, both values will be null. The section
+  /// address will evaluate to null, and the size to zero. If the section
+  /// contains a single atom both values will point to it, the address will
+  /// evaluate to the address of that atom, and the size will be the size of
+  /// that atom.
+  SectionRange getRange() const;
+
+private:
+  void addAtom(DefinedAtom &DA) {
+    assert(!DefinedAtoms.count(&DA) && "Atom is already in this section");
+    DefinedAtoms.insert(&DA);
+  }
+
+  void removeAtom(DefinedAtom &DA) {
+    assert(DefinedAtoms.count(&DA) && "Atom is not in this section");
+    DefinedAtoms.erase(&DA);
+  }
+
+  StringRef Name;
+  uint32_t Alignment = 0;
+  sys::Memory::ProtectionFlags Prot;
+  unsigned Ordinal = 0;
+  unsigned NextAtomOrdinal = 0;
+  bool IsZeroFill = false;
+  DefinedAtomSet DefinedAtoms;
+};
+
+/// Defined atom class. Suitable for use by defined named and anonymous
+/// atoms.
+class DefinedAtom : public Atom {
+  friend class AtomGraph;
+
+private:
+  DefinedAtom(Section &Parent, JITTargetAddress Address, uint32_t Alignment)
+      : Atom("", Address), Parent(Parent), Ordinal(Parent.getNextAtomOrdinal()),
+        Alignment(Alignment) {
+    assert(isPowerOf2_32(Alignment) && "Alignments must be a power of two");
+  }
+
+  DefinedAtom(Section &Parent, StringRef Name, JITTargetAddress Address,
+              uint32_t Alignment)
+      : Atom(Name, Address), Parent(Parent),
+        Ordinal(Parent.getNextAtomOrdinal()), Alignment(Alignment) {
+    assert(isPowerOf2_32(Alignment) && "Alignments must be a power of two");
+  }
+
+public:
+  using edge_iterator = EdgeVector::iterator;
+
+  Section &getSection() const { return Parent; }
+
+  uint64_t getSize() const { return Size; }
+
+  StringRef getContent() const {
+    assert(!Parent.isZeroFill() && "Trying to get content for zero-fill atom");
+    assert(Size <= std::numeric_limits<size_t>::max() &&
+           "Content size too large");
+    return {ContentPtr, static_cast<size_t>(Size)};
+  }
+  void setContent(StringRef Content) {
+    assert(!Parent.isZeroFill() && "Calling setContent on zero-fill atom?");
+    ContentPtr = Content.data();
+    Size = Content.size();
+  }
+
+  bool isZeroFill() const { return Parent.isZeroFill(); }
+
+  void setZeroFill(uint64_t Size) {
+    assert(Parent.isZeroFill() && !ContentPtr &&
+           "Can't set zero-fill length of a non zero-fill atom");
+    this->Size = Size;
+  }
+
+  uint64_t getZeroFillSize() const {
+    assert(Parent.isZeroFill() &&
+           "Can't get zero-fill length of a non zero-fill atom");
+    return Size;
+  }
+
+  uint32_t getAlignment() const { return Alignment; }
+
+  bool hasLayoutNext() const { return HasLayoutNext; }
+  void setLayoutNext(DefinedAtom &Next) {
+    assert(!HasLayoutNext && "Atom already has layout-next constraint");
+    HasLayoutNext = true;
+    Edges.push_back(Edge(Edge::LayoutNext, 0, Next, 0));
+  }
+  DefinedAtom &getLayoutNext() {
+    assert(HasLayoutNext && "Atom does not have a layout-next constraint");
+    DefinedAtom *Next = nullptr;
+    for (auto &E : edges())
+      if (E.getKind() == Edge::LayoutNext) {
+        assert(E.getTarget().isDefined() &&
+               "layout-next target atom must be a defined atom");
+        Next = static_cast<DefinedAtom *>(&E.getTarget());
+        break;
+      }
+    assert(Next && "Missing LayoutNext edge");
+    return *Next;
+  }
+
+  bool isCommon() const { return IsCommon; }
+
+  void addEdge(Edge::Kind K, Edge::OffsetT Offset, Atom &Target,
+               Edge::AddendT Addend) {
+    assert(K != Edge::LayoutNext &&
+           "Layout edges should be added via setLayoutNext");
+    Edges.push_back(Edge(K, Offset, Target, Addend));
+  }
+
+  iterator_range<edge_iterator> edges() {
+    return make_range(Edges.begin(), Edges.end());
+  }
+  size_t edges_size() const { return Edges.size(); }
+  bool edges_empty() const { return Edges.empty(); }
+
+  unsigned getOrdinal() const { return Ordinal; }
+
+private:
+  void setCommon(uint64_t Size) {
+    assert(ContentPtr == 0 && "Atom already has content?");
+    IsCommon = true;
+    setZeroFill(Size);
+  }
+
+  EdgeVector Edges;
+  uint64_t Size = 0;
+  Section &Parent;
+  const char *ContentPtr = nullptr;
+  unsigned Ordinal = 0;
+  uint32_t Alignment = 0;
+};
+
+inline JITTargetAddress SectionRange::getStart() const {
+  return First ? First->getAddress() : 0;
+}
+
+inline JITTargetAddress SectionRange::getEnd() const {
+  return Last ? Last->getAddress() + Last->getSize() : 0;
+}
+
+inline uint64_t SectionRange::getSize() const { return getEnd() - getStart(); }
+
+inline SectionRange Section::getRange() const {
+  if (atoms_empty())
+    return SectionRange();
+  DefinedAtom *First = *DefinedAtoms.begin(), *Last = *DefinedAtoms.begin();
+  for (auto *DA : atoms()) {
+    if (DA->getAddress() < First->getAddress())
+      First = DA;
+    if (DA->getAddress() > Last->getAddress())
+      Last = DA;
+  }
+  return SectionRange(First, Last);
+}
+
+class AtomGraph {
+private:
+  using SectionList = std::vector<std::unique_ptr<Section>>;
+  using AddressToAtomMap = std::map<JITTargetAddress, DefinedAtom *>;
+  using NamedAtomMap = DenseMap<StringRef, Atom *>;
+  using ExternalAtomSet = DenseSet<Atom *>;
+
+public:
+  using external_atom_iterator = ExternalAtomSet::iterator;
+
+  using section_iterator = pointee_iterator<SectionList::iterator>;
+  using const_section_iterator = pointee_iterator<SectionList::const_iterator>;
+
+  template <typename SecItrT, typename AtomItrT, typename T>
+  class defined_atom_iterator_impl
+      : public iterator_facade_base<
+            defined_atom_iterator_impl<SecItrT, AtomItrT, T>,
+            std::forward_iterator_tag, T> {
+  public:
+    defined_atom_iterator_impl() = default;
+
+    defined_atom_iterator_impl(SecItrT SI, SecItrT SE)
+        : SI(SI), SE(SE),
+          AI(SI != SE ? SI->atoms().begin() : Section::atom_iterator()) {
+      moveToNextAtomOrEnd();
+    }
+
+    bool operator==(const defined_atom_iterator_impl &RHS) const {
+      return (SI == RHS.SI) && (AI == RHS.AI);
+    }
+
+    T operator*() const {
+      assert(AI != SI->atoms().end() && "Dereferencing end?");
+      return *AI;
+    }
+
+    defined_atom_iterator_impl operator++() {
+      ++AI;
+      moveToNextAtomOrEnd();
+      return *this;
+    }
+
+  private:
+    void moveToNextAtomOrEnd() {
+      while (SI != SE && AI == SI->atoms().end()) {
+        ++SI;
+        if (SI == SE)
+          AI = Section::atom_iterator();
+        else
+          AI = SI->atoms().begin();
+      }
+    }
+
+    SecItrT SI, SE;
+    AtomItrT AI;
+  };
+
+  using defined_atom_iterator =
+      defined_atom_iterator_impl<section_iterator, Section::atom_iterator,
+                                 DefinedAtom *>;
+
+  using const_defined_atom_iterator =
+      defined_atom_iterator_impl<const_section_iterator,
+                                 Section::const_atom_iterator,
+                                 const DefinedAtom *>;
+
+  AtomGraph(std::string Name, unsigned PointerSize,
+            support::endianness Endianness)
+      : Name(std::move(Name)), PointerSize(PointerSize),
+        Endianness(Endianness) {}
+
+  /// Returns the name of this graph (usually the name of the original
+  /// underlying MemoryBuffer).
+  const std::string &getName() { return Name; }
+
+  /// Returns the pointer size for use in this graph.
+  unsigned getPointerSize() const { return PointerSize; }
+
+  /// Returns the endianness of atom-content in this graph.
+  support::endianness getEndianness() const { return Endianness; }
+
+  /// Create a section with the given name, protection flags, and alignment.
+  Section &createSection(StringRef Name, uint32_t Alignment,
+                         sys::Memory::ProtectionFlags Prot, bool IsZeroFill) {
+    std::unique_ptr<Section> Sec(
+        new Section(Name, Alignment, Prot, Sections.size(), IsZeroFill));
+    Sections.push_back(std::move(Sec));
+    return *Sections.back();
+  }
+
+  /// Add an external atom representing an undefined symbol in this graph.
+  Atom &addExternalAtom(StringRef Name) {
+    assert(!NamedAtoms.count(Name) && "Duplicate named atom inserted");
+    Atom *A = reinterpret_cast<Atom *>(
+        AtomAllocator.Allocate(sizeof(Atom), alignof(Atom)));
+    new (A) Atom(Name);
+    ExternalAtoms.insert(A);
+    NamedAtoms[Name] = A;
+    return *A;
+  }
+
+  /// Add an external atom representing an absolute symbol.
+  Atom &addAbsoluteAtom(StringRef Name, JITTargetAddress Addr) {
+    assert(!NamedAtoms.count(Name) && "Duplicate named atom inserted");
+    Atom *A = reinterpret_cast<Atom *>(
+        AtomAllocator.Allocate(sizeof(Atom), alignof(Atom)));
+    new (A) Atom(Name, Addr);
+    AbsoluteAtoms.insert(A);
+    NamedAtoms[Name] = A;
+    return *A;
+  }
+
+  /// Add an anonymous defined atom to the graph.
+  ///
+  /// Anonymous atoms have content but no name. They must have an address.
+  DefinedAtom &addAnonymousAtom(Section &Parent, JITTargetAddress Address,
+                                uint32_t Alignment) {
+    DefinedAtom *A = reinterpret_cast<DefinedAtom *>(
+        AtomAllocator.Allocate(sizeof(DefinedAtom), alignof(DefinedAtom)));
+    new (A) DefinedAtom(Parent, Address, Alignment);
+    Parent.addAtom(*A);
+    getAddrToAtomMap()[A->getAddress()] = A;
+    return *A;
+  }
+
+  /// Add a defined atom to the graph.
+  ///
+  /// Allocates and constructs a DefinedAtom instance with the given parent,
+  /// name, address, and alignment.
+  DefinedAtom &addDefinedAtom(Section &Parent, StringRef Name,
+                              JITTargetAddress Address, uint32_t Alignment) {
+    assert(!NamedAtoms.count(Name) && "Duplicate named atom inserted");
+    DefinedAtom *A = reinterpret_cast<DefinedAtom *>(
+        AtomAllocator.Allocate(sizeof(DefinedAtom), alignof(DefinedAtom)));
+    new (A) DefinedAtom(Parent, Name, Address, Alignment);
+    Parent.addAtom(*A);
+    getAddrToAtomMap()[A->getAddress()] = A;
+    NamedAtoms[Name] = A;
+    return *A;
+  }
+
+  /// Add a common symbol atom to the graph.
+  ///
+  /// Adds a common-symbol atom to the graph with the given parent, name,
+  /// address, alignment and size.
+  DefinedAtom &addCommonAtom(Section &Parent, StringRef Name,
+                             JITTargetAddress Address, uint32_t Alignment,
+                             uint64_t Size) {
+    assert(!NamedAtoms.count(Name) && "Duplicate named atom inserted");
+    DefinedAtom *A = reinterpret_cast<DefinedAtom *>(
+        AtomAllocator.Allocate(sizeof(DefinedAtom), alignof(DefinedAtom)));
+    new (A) DefinedAtom(Parent, Name, Address, Alignment);
+    A->setCommon(Size);
+    Parent.addAtom(*A);
+    NamedAtoms[Name] = A;
+    return *A;
+  }
+
+  iterator_range<section_iterator> sections() {
+    return make_range(section_iterator(Sections.begin()),
+                      section_iterator(Sections.end()));
+  }
+
+  /// Returns the section with the given name if it exists, otherwise returns
+  /// null.
+  Section *findSectionByName(StringRef Name) {
+    for (auto &S : sections())
+      if (S.getName() == Name)
+        return &S;
+    return nullptr;
+  }
+
+  iterator_range<external_atom_iterator> external_atoms() {
+    return make_range(ExternalAtoms.begin(), ExternalAtoms.end());
+  }
+
+  iterator_range<external_atom_iterator> absolute_atoms() {
+    return make_range(AbsoluteAtoms.begin(), AbsoluteAtoms.end());
+  }
+
+  iterator_range<defined_atom_iterator> defined_atoms() {
+    return make_range(defined_atom_iterator(Sections.begin(), Sections.end()),
+                      defined_atom_iterator(Sections.end(), Sections.end()));
+  }
+
+  iterator_range<const_defined_atom_iterator> defined_atoms() const {
+    return make_range(
+        const_defined_atom_iterator(Sections.begin(), Sections.end()),
+        const_defined_atom_iterator(Sections.end(), Sections.end()));
+  }
+
+  /// Returns the atom with the given name, which must exist in this graph.
+  Atom &getAtomByName(StringRef Name) {
+    auto I = NamedAtoms.find(Name);
+    assert(I != NamedAtoms.end() && "Name not in NamedAtoms map");
+    return *I->second;
+  }
+
+  /// Returns the atom with the given name, which must exist in this graph and
+  /// be a DefinedAtom.
+  DefinedAtom &getDefinedAtomByName(StringRef Name) {
+    auto &A = getAtomByName(Name);
+    assert(A.isDefined() && "Atom is not a defined atom");
+    return static_cast<DefinedAtom &>(A);
+  }
+
+  /// Search for the given atom by name.
+  /// Returns the atom (if found) or an error (if no atom with this name
+  /// exists).
+  Expected<Atom &> findAtomByName(StringRef Name) {
+    auto I = NamedAtoms.find(Name);
+    if (I == NamedAtoms.end())
+      return make_error<JITLinkError>("No atom named " + Name);
+    return *I->second;
+  }
+
+  /// Search for the given defined atom by name.
+  /// Returns the defined atom (if found) or an error (if no atom with this
+  /// name exists, or if one exists but is not a defined atom).
+  Expected<DefinedAtom &> findDefinedAtomByName(StringRef Name) {
+    auto I = NamedAtoms.find(Name);
+    if (I == NamedAtoms.end())
+      return make_error<JITLinkError>("No atom named " + Name);
+    if (!I->second->isDefined())
+      return make_error<JITLinkError>("Atom " + Name +
+                                      " exists but is not a "
+                                      "defined atom");
+    return static_cast<DefinedAtom &>(*I->second);
+  }
+
+  /// Returns the atom covering the given address, or an error if no such atom
+  /// exists.
+  ///
+  /// Returns null if no atom exists at the given address.
+  DefinedAtom *getAtomByAddress(JITTargetAddress Address) {
+    refreshAddrToAtomCache();
+
+    // If there are no defined atoms, bail out early.
+    if (AddrToAtomCache->empty())
+      return nullptr;
+
+    // Find the atom *after* the given address.
+    auto I = AddrToAtomCache->upper_bound(Address);
+
+    // If this address falls before any known atom, bail out.
+    if (I == AddrToAtomCache->begin())
+      return nullptr;
+
+    // The atom we're looking for is the one before the atom we found.
+    --I;
+
+    // Otherwise range check the atom that was found.
+    assert(!I->second->getContent().empty() && "Atom content not set");
+    if (Address >= I->second->getAddress() + I->second->getContent().size())
+      return nullptr;
+
+    return I->second;
+  }
+
+  /// Like getAtomByAddress, but returns an Error if the given address is not
+  /// covered by an atom, rather than a null pointer.
+  Expected<DefinedAtom &> findAtomByAddress(JITTargetAddress Address) {
+    if (auto *DA = getAtomByAddress(Address))
+      return *DA;
+    return make_error<JITLinkError>("No atom at address " +
+                                    formatv("{0:x16}", Address));
+  }
+
+  // Remove the given external atom from the graph.
+  void removeExternalAtom(Atom &A) {
+    assert(!A.isDefined() && !A.isAbsolute() && "A is not an external atom");
+    assert(ExternalAtoms.count(&A) && "A is not in the external atoms set");
+    ExternalAtoms.erase(&A);
+    A.~Atom();
+  }
+
+  /// Remove the given absolute atom from the graph.
+  void removeAbsoluteAtom(Atom &A) {
+    assert(A.isAbsolute() && "A is not an absolute atom");
+    assert(AbsoluteAtoms.count(&A) && "A is not in the absolute atoms set");
+    AbsoluteAtoms.erase(&A);
+    A.~Atom();
+  }
+
+  /// Remove the given defined atom from the graph.
+  void removeDefinedAtom(DefinedAtom &DA) {
+    if (AddrToAtomCache) {
+      assert(AddrToAtomCache->count(DA.getAddress()) &&
+             "Cache exists, but does not contain atom");
+      AddrToAtomCache->erase(DA.getAddress());
+    }
+    if (DA.hasName()) {
+      assert(NamedAtoms.count(DA.getName()) && "Named atom not in map");
+      NamedAtoms.erase(DA.getName());
+    }
+    DA.getSection().removeAtom(DA);
+    DA.~DefinedAtom();
+  }
+
+  /// Invalidate the atom-to-address map.
+  void invalidateAddrToAtomMap() { AddrToAtomCache = None; }
+
+  /// Dump the graph.
+  ///
+  /// If supplied, the EdgeKindToName function will be used to name edge
+  /// kinds in the debug output. Otherwise raw edge kind numbers will be
+  /// displayed.
+  void dump(raw_ostream &OS,
+            std::function<StringRef(Edge::Kind)> EdegKindToName =
+                std::function<StringRef(Edge::Kind)>());
+
+private:
+  AddressToAtomMap &getAddrToAtomMap() {
+    refreshAddrToAtomCache();
+    return *AddrToAtomCache;
+  }
+
+  const AddressToAtomMap &getAddrToAtomMap() const {
+    refreshAddrToAtomCache();
+    return *AddrToAtomCache;
+  }
+
+  void refreshAddrToAtomCache() const {
+    if (!AddrToAtomCache) {
+      AddrToAtomCache = AddressToAtomMap();
+      for (auto *DA : defined_atoms())
+        (*AddrToAtomCache)[DA->getAddress()] = const_cast<DefinedAtom *>(DA);
+    }
+  }
+
+  // Put the BumpPtrAllocator first so that we don't free any of the atoms in
+  // it until all of their destructors have been run.
+  BumpPtrAllocator AtomAllocator;
+
+  std::string Name;
+  unsigned PointerSize;
+  support::endianness Endianness;
+  SectionList Sections;
+  NamedAtomMap NamedAtoms;
+  ExternalAtomSet ExternalAtoms;
+  ExternalAtomSet AbsoluteAtoms;
+  mutable Optional<AddressToAtomMap> AddrToAtomCache;
+};
+
+/// A function for mutating AtomGraphs.
+using AtomGraphPassFunction = std::function<Error(AtomGraph &)>;
+
+/// A list of atom graph passes.
+using AtomGraphPassList = std::vector<AtomGraphPassFunction>;
+
+/// An atom graph pass configuration, consisting of a list of pre-prune,
+/// post-prune, and post-fixup passes.
+struct PassConfiguration {
+
+  /// Pre-prune passes.
+  ///
+  /// These passes are called on the graph after it is built, and before any
+  /// atoms have been pruned.
+  ///
+  /// Notable use cases: Marking atoms live or should-discard.
+  AtomGraphPassList PrePrunePasses;
+
+  /// Post-prune passes.
+  ///
+  /// These passes are called on the graph after dead and should-discard atoms
+  /// have been removed, but before fixups are applied.
+  ///
+  /// Notable use cases: Building GOT, stub, and TLV atoms.
+  AtomGraphPassList PostPrunePasses;
+
+  /// Post-fixup passes.
+  ///
+  /// These passes are called on the graph after atom contents has been copied
+  /// to working memory, and fixups applied.
+  ///
+  /// Notable use cases: Testing and validation.
+  AtomGraphPassList PostFixupPasses;
+};
+
+/// A map of symbol names to resolved addresses.
+using AsyncLookupResult = DenseMap<StringRef, JITEvaluatedSymbol>;
+
+/// A function to call with a resolved symbol map (See AsyncLookupResult) or an
+/// error if resolution failed.
+using JITLinkAsyncLookupContinuation =
+    std::function<void(Expected<AsyncLookupResult> LR)>;
+
+/// An asynchronous symbol lookup. Performs a search (possibly asynchronously)
+/// for the given symbols, calling the given continuation with either the result
+/// (if the lookup succeeds), or an error (if the lookup fails).
+using JITLinkAsyncLookupFunction =
+    std::function<void(const DenseSet<StringRef> &Symbols,
+                       JITLinkAsyncLookupContinuation LookupContinuation)>;
+
+/// Holds context for a single jitLink invocation.
+class JITLinkContext {
+public:
+  /// Destroy a JITLinkContext.
+  virtual ~JITLinkContext();
+
+  /// Return the MemoryManager to be used for this link.
+  virtual JITLinkMemoryManager &getMemoryManager() = 0;
+
+  /// Returns a StringRef for the object buffer.
+  /// This method can not be called once takeObjectBuffer has been called.
+  virtual MemoryBufferRef getObjectBuffer() const = 0;
+
+  /// Notify this context that linking failed.
+  /// Called by JITLink if linking cannot be completed.
+  virtual void notifyFailed(Error Err) = 0;
+
+  /// Called by JITLink to resolve external symbols. This method is passed a
+  /// lookup continutation which it must call with a result to continue the
+  /// linking process.
+  virtual void lookup(const DenseSet<StringRef> &Symbols,
+                      JITLinkAsyncLookupContinuation LookupContinuation) = 0;
+
+  /// Called by JITLink once all defined atoms in the graph have been assigned
+  /// their final memory locations in the target process. At this point he
+  /// atom graph can be, inspected to build a symbol table however the atom
+  /// content will not generally have been copied to the target location yet.
+  virtual void notifyResolved(AtomGraph &G) = 0;
+
+  /// Called by JITLink to notify the context that the object has been
+  /// finalized (i.e. emitted to memory and memory permissions set). If all of
+  /// this objects dependencies have also been finalized then the code is ready
+  /// to run.
+  virtual void
+  notifyFinalized(std::unique_ptr<JITLinkMemoryManager::Allocation> A) = 0;
+
+  /// Called by JITLink prior to linking to determine whether default passes for
+  /// the target should be added. The default implementation returns true.
+  /// If subclasses override this method to return false for any target then
+  /// they are required to fully configure the pass pipeline for that target.
+  virtual bool shouldAddDefaultTargetPasses(const Triple &TT) const;
+
+  /// Returns the mark-live pass to be used for this link. If no pass is
+  /// returned (the default) then the target-specific linker implementation will
+  /// choose a conservative default (usually marking all atoms live).
+  /// This function is only called if shouldAddDefaultTargetPasses returns true,
+  /// otherwise the JITContext is responsible for adding a mark-live pass in
+  /// modifyPassConfig.
+  virtual AtomGraphPassFunction getMarkLivePass(const Triple &TT) const;
+
+  /// Called by JITLink to modify the pass pipeline prior to linking.
+  /// The default version performs no modification.
+  virtual Error modifyPassConfig(const Triple &TT, PassConfiguration &Config);
+};
+
+/// Marks all atoms in a graph live. This can be used as a default, conservative
+/// mark-live implementation.
+Error markAllAtomsLive(AtomGraph &G);
+
+/// Basic JITLink implementation.
+///
+/// This function will use sensible defaults for GOT and Stub handling.
+void jitLink(std::unique_ptr<JITLinkContext> Ctx);
+
+} // end namespace jitlink
+} // end namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
new file mode 100644
index 0000000..9d0b37f
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
@@ -0,0 +1,99 @@
+//===-- JITLinkMemoryManager.h - JITLink mem manager interface --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Contains the JITLinkMemoryManager interface.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINKMEMORYMANAGER_H
+#define LLVM_EXECUTIONENGINE_JITLINK_JITLINKMEMORYMANAGER_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/Memory.h"
+#include <cstdint>
+
+namespace llvm {
+namespace jitlink {
+
+/// Manages allocations of JIT memory.
+///
+/// Instances of this class may be accessed concurrently from multiple threads
+/// and their implemetations should include any necessary synchronization.
+class JITLinkMemoryManager {
+public:
+  using ProtectionFlags = sys::Memory::ProtectionFlags;
+
+  class SegmentRequest {
+  public:
+    SegmentRequest() = default;
+    SegmentRequest(size_t ContentSize, unsigned ContentAlign,
+                   uint64_t ZeroFillSize, unsigned ZeroFillAlign)
+        : ContentSize(ContentSize), ZeroFillSize(ZeroFillSize),
+          ContentAlign(ContentAlign), ZeroFillAlign(ZeroFillAlign) {}
+    size_t getContentSize() const { return ContentSize; }
+    unsigned getContentAlignment() const { return ContentAlign; }
+    uint64_t getZeroFillSize() const { return ZeroFillSize; }
+    unsigned getZeroFillAlignment() const { return ZeroFillAlign; }
+
+  private:
+    size_t ContentSize = 0;
+    uint64_t ZeroFillSize = 0;
+    unsigned ContentAlign = 0;
+    unsigned ZeroFillAlign = 0;
+  };
+
+  using SegmentsRequestMap = DenseMap<unsigned, SegmentRequest>;
+
+  /// Represents an allocation created by the memory manager.
+  ///
+  /// An allocation object is responsible for allocating and owning jit-linker
+  /// working and target memory, and for transfering from working to target
+  /// memory.
+  ///
+  class Allocation {
+  public:
+    using FinalizeContinuation = std::function<void(Error)>;
+
+    virtual ~Allocation();
+
+    /// Should return the address of linker working memory for the segment with
+    /// the given protection flags.
+    virtual MutableArrayRef<char> getWorkingMemory(ProtectionFlags Seg) = 0;
+
+    /// Should return the final address in the target process where the segment
+    /// will reside.
+    virtual JITTargetAddress getTargetMemory(ProtectionFlags Seg) = 0;
+
+    /// Should transfer from working memory to target memory, and release
+    /// working memory.
+    virtual void finalizeAsync(FinalizeContinuation OnFinalize) = 0;
+
+    /// Should deallocate target memory.
+    virtual Error deallocate() = 0;
+  };
+
+  virtual ~JITLinkMemoryManager();
+
+  /// Create an Allocation object.
+  virtual Expected<std::unique_ptr<Allocation>>
+  allocate(const SegmentsRequestMap &Request) = 0;
+};
+
+/// A JITLinkMemoryManager that allocates in-process memory.
+class InProcessMemoryManager : public JITLinkMemoryManager {
+public:
+  Expected<std::unique_ptr<Allocation>>
+  allocate(const SegmentsRequestMap &Request) override;
+};
+
+} // end namespace jitlink
+} // end namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/MachO.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/MachO.h
new file mode 100644
index 0000000..7facb65
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/MachO.h
@@ -0,0 +1,30 @@
+//===------- MachO.h - Generic JIT link function for MachO ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Generic jit-link functions for MachO.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_MACHO_H
+#define LLVM_EXECUTIONENGINE_JITLINK_MACHO_H
+
+#include "llvm/ExecutionEngine/JITLink/JITLink.h"
+
+namespace llvm {
+namespace jitlink {
+
+/// jit-link the given ObjBuffer, which must be a MachO object file.
+///
+/// Uses conservative defaults for GOT and stub handling based on the target
+/// platform.
+void jitLink_MachO(std::unique_ptr<JITLinkContext> Ctx);
+
+} // end namespace jitlink
+} // end namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_JITLINK_MACHO_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h
new file mode 100644
index 0000000..1d5b586
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h
@@ -0,0 +1,63 @@
+//===--- MachO_x86_64.h - JIT link functions for MachO/x86-64 ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// jit-link functions for MachO/x86-64.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
+#define LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
+
+#include "llvm/ExecutionEngine/JITLink/JITLink.h"
+
+namespace llvm {
+namespace jitlink {
+
+namespace MachO_x86_64_Edges {
+
+enum MachOX86RelocationKind : Edge::Kind {
+  Branch32 = Edge::FirstRelocation,
+  Pointer64,
+  Pointer64Anon,
+  PCRel32,
+  PCRel32Minus1,
+  PCRel32Minus2,
+  PCRel32Minus4,
+  PCRel32Anon,
+  PCRel32Minus1Anon,
+  PCRel32Minus2Anon,
+  PCRel32Minus4Anon,
+  PCRel32GOTLoad,
+  PCRel32GOT,
+  PCRel32TLV,
+  Delta32,
+  Delta64,
+  NegDelta32,
+  NegDelta64,
+};
+
+} // namespace MachO_x86_64_Edges
+
+/// jit-link the given object buffer, which must be a MachO x86-64 object file.
+///
+/// If PrePrunePasses is empty then a default mark-live pass will be inserted
+/// that will mark all exported atoms live. If PrePrunePasses is not empty, the
+/// caller is responsible for including a pass to mark atoms as live.
+///
+/// If PostPrunePasses is empty then a default GOT-and-stubs insertion pass will
+/// be inserted. If PostPrunePasses is not empty then the caller is responsible
+/// for including a pass to insert GOT and stub edges.
+void jitLink_MachO_x86_64(std::unique_ptr<JITLinkContext> Ctx);
+
+/// Return the string name of the given MachO x86-64 edge kind.
+StringRef getMachOX86RelocationKindName(Edge::Kind R);
+
+} // end namespace jitlink
+} // end namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h
index da1352f..b14154c 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h
@@ -55,7 +55,7 @@
 class JITSymbolFlags {
 public:
   using UnderlyingType = uint8_t;
-  using TargetFlagsType = uint64_t;
+  using TargetFlagsType = uint8_t;
 
   enum FlagNames : UnderlyingType {
     None = 0,
@@ -65,15 +65,9 @@
     Absolute = 1U << 3,
     Exported = 1U << 4,
     Callable = 1U << 5,
-    Lazy = 1U << 6,
-    Materializing = 1U << 7,
-    LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ Materializing)
+    LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ Callable)
   };
 
-  static JITSymbolFlags stripTransientFlags(JITSymbolFlags Orig) {
-    return static_cast<FlagNames>(Orig.Flags & ~Lazy & ~Materializing);
-  }
-
   /// Default-construct a JITSymbolFlags instance.
   JITSymbolFlags() = default;
 
@@ -83,7 +77,7 @@
   /// Construct a JITSymbolFlags instance from the given flags and target
   ///        flags.
   JITSymbolFlags(FlagNames Flags, TargetFlagsType TargetFlags)
-    : Flags(Flags), TargetFlags(TargetFlags) {}
+      : TargetFlags(TargetFlags), Flags(Flags) {}
 
   /// Implicitly convert to bool. Returs true if any flag is set.
   explicit operator bool() const { return Flags != None || TargetFlags != 0; }
@@ -110,19 +104,6 @@
     return (Flags & HasError) == HasError;
   }
 
-  /// Returns true if this is a lazy symbol.
-  ///        This flag is used internally by the JIT APIs to track
-  ///        materialization states.
-  bool isLazy() const { return Flags & Lazy; }
-
-  /// Returns true if this symbol is in the process of being
-  ///        materialized.
-  bool isMaterializing() const { return Flags & Materializing; }
-
-  /// Returns true if this symbol is fully materialized.
-  ///        (i.e. neither lazy, nor materializing).
-  bool isMaterialized() const { return !(Flags & (Lazy | Materializing)); }
-
   /// Returns true if the Weak flag is set.
   bool isWeak() const {
     return (Flags & Weak) == Weak;
@@ -167,8 +148,8 @@
   fromObjectSymbol(const object::SymbolRef &Symbol);
 
 private:
-  FlagNames Flags = None;
   TargetFlagsType TargetFlags = 0;
+  FlagNames Flags = None;
 };
 
 inline JITSymbolFlags operator&(const JITSymbolFlags &LHS,
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h
index 15a6566..1585925 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h
@@ -13,25 +13,17 @@
 #ifndef LLVM_EXECUTIONENGINE_ORC_COMPILEUTILS_H
 #define LLVM_EXECUTIONENGINE_ORC_COMPILEUTILS_H
 
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ExecutionEngine/ObjectCache.h"
 #include "llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h"
-#include "llvm/IR/LegacyPassManager.h"
-#include "llvm/Object/Binary.h"
-#include "llvm/Object/ObjectFile.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/SmallVectorMemoryBuffer.h"
-#include "llvm/Support/raw_ostream.h"
-#include "llvm/Target/TargetMachine.h"
-#include <algorithm>
 #include <memory>
 
 namespace llvm {
 
+class JITTargetMachineBuilder;
 class MCContext;
+class MemoryBuffer;
 class Module;
+class ObjectCache;
+class TargetMachine;
 
 namespace orc {
 
@@ -50,51 +42,11 @@
   void setObjectCache(ObjectCache *NewCache) { ObjCache = NewCache; }
 
   /// Compile a Module to an ObjectFile.
-  CompileResult operator()(Module &M) {
-    CompileResult CachedObject = tryToLoadFromObjectCache(M);
-    if (CachedObject)
-      return CachedObject;
-
-    SmallVector<char, 0> ObjBufferSV;
-
-    {
-      raw_svector_ostream ObjStream(ObjBufferSV);
-
-      legacy::PassManager PM;
-      MCContext *Ctx;
-      if (TM.addPassesToEmitMC(PM, Ctx, ObjStream))
-        llvm_unreachable("Target does not support MC emission.");
-      PM.run(M);
-    }
-
-    auto ObjBuffer =
-        llvm::make_unique<SmallVectorMemoryBuffer>(std::move(ObjBufferSV));
-    auto Obj =
-        object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef());
-
-    if (Obj) {
-      notifyObjectCompiled(M, *ObjBuffer);
-      return std::move(ObjBuffer);
-    }
-
-    // TODO: Actually report errors helpfully.
-    consumeError(Obj.takeError());
-    return nullptr;
-  }
+  CompileResult operator()(Module &M);
 
 private:
-
-  CompileResult tryToLoadFromObjectCache(const Module &M) {
-    if (!ObjCache)
-      return CompileResult();
-
-    return ObjCache->getObject(&M);
-  }
-
-  void notifyObjectCompiled(const Module &M, const MemoryBuffer &ObjBuffer) {
-    if (ObjCache)
-      ObjCache->notifyObjectCompiled(&M, ObjBuffer.getMemBufferRef());
-  }
+  CompileResult tryToLoadFromObjectCache(const Module &M);
+  void notifyObjectCompiled(const Module &M, const MemoryBuffer &ObjBuffer);
 
   TargetMachine &TM;
   ObjectCache *ObjCache = nullptr;
@@ -107,16 +59,11 @@
 class ConcurrentIRCompiler {
 public:
   ConcurrentIRCompiler(JITTargetMachineBuilder JTMB,
-                       ObjectCache *ObjCache = nullptr)
-      : JTMB(std::move(JTMB)), ObjCache(ObjCache) {}
+                       ObjectCache *ObjCache = nullptr);
 
   void setObjectCache(ObjectCache *ObjCache) { this->ObjCache = ObjCache; }
 
-  std::unique_ptr<MemoryBuffer> operator()(Module &M) {
-    auto TM = cantFail(JTMB.createTargetMachine());
-    SimpleCompiler C(*TM, ObjCache);
-    return C(M);
-  }
+  std::unique_ptr<MemoryBuffer> operator()(Module &M);
 
 private:
   JITTargetMachineBuilder JTMB;
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h
index 299247a..016fd82 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h
@@ -33,6 +33,7 @@
 class MaterializationUnit;
 class MaterializationResponsibility;
 class JITDylib;
+enum class SymbolState : uint8_t;
 
 /// VModuleKey provides a unique identifier (allocated and managed by
 /// ExecutionSessions) for a module added to the JIT.
@@ -56,6 +57,18 @@
 /// A list of (JITDylib*, bool) pairs.
 using JITDylibSearchList = std::vector<std::pair<JITDylib *, bool>>;
 
+struct SymbolAliasMapEntry {
+  SymbolAliasMapEntry() = default;
+  SymbolAliasMapEntry(SymbolStringPtr Aliasee, JITSymbolFlags AliasFlags)
+      : Aliasee(std::move(Aliasee)), AliasFlags(AliasFlags) {}
+
+  SymbolStringPtr Aliasee;
+  JITSymbolFlags AliasFlags;
+};
+
+/// A map of Symbols to (Symbol, Flags) pairs.
+using SymbolAliasMap = DenseMap<SymbolStringPtr, SymbolAliasMapEntry>;
+
 /// Render a SymbolStringPtr.
 raw_ostream &operator<<(raw_ostream &OS, const SymbolStringPtr &Sym);
 
@@ -87,12 +100,15 @@
 /// Render a JITDylibSearchList.
 raw_ostream &operator<<(raw_ostream &OS, const JITDylibSearchList &JDs);
 
+/// Render a SymbolAliasMap.
+raw_ostream &operator<<(raw_ostream &OS, const SymbolAliasMap &Aliases);
+
+/// Render a SymbolState.
+raw_ostream &operator<<(raw_ostream &OS, const SymbolState &S);
+
 /// Callback to notify client that symbols have been resolved.
 using SymbolsResolvedCallback = std::function<void(Expected<SymbolMap>)>;
 
-/// Callback to notify client that symbols are ready for execution.
-using SymbolsReadyCallback = std::function<void(Error)>;
-
 /// Callback to register the dependencies for a given query.
 using RegisterDependenciesFunction =
     std::function<void(const SymbolDependenceMap &)>;
@@ -174,7 +190,7 @@
   /// Note: The returned flags may have transient flags (Lazy, Materializing)
   /// set. These should be stripped with JITSymbolFlags::stripTransientFlags
   /// before using.
-  const SymbolFlagsMap &getSymbols() { return SymbolFlags; }
+  const SymbolFlagsMap &getSymbols() const { return SymbolFlags; }
 
   /// Returns the names of any symbols covered by this
   /// MaterializationResponsibility object that have queries pending. This
@@ -188,12 +204,12 @@
   /// symbols must be ones covered by this MaterializationResponsibility
   /// instance. Individual calls to this method may resolve a subset of the
   /// symbols, but all symbols must have been resolved prior to calling emit.
-  void resolve(const SymbolMap &Symbols);
+  void notifyResolved(const SymbolMap &Symbols);
 
   /// Notifies the target JITDylib (and any pending queries on that JITDylib)
   /// that all symbols covered by this MaterializationResponsibility instance
   /// have been emitted.
-  void emit();
+  void notifyEmitted();
 
   /// Adds new symbols to the JITDylib and this responsibility instance.
   ///        JITDylib entries start out in the materializing state.
@@ -333,18 +349,6 @@
       std::move(Symbols), std::move(K));
 }
 
-struct SymbolAliasMapEntry {
-  SymbolAliasMapEntry() = default;
-  SymbolAliasMapEntry(SymbolStringPtr Aliasee, JITSymbolFlags AliasFlags)
-      : Aliasee(std::move(Aliasee)), AliasFlags(AliasFlags) {}
-
-  SymbolStringPtr Aliasee;
-  JITSymbolFlags AliasFlags;
-};
-
-/// A map of Symbols to (Symbol, Flags) pairs.
-using SymbolAliasMap = DenseMap<SymbolStringPtr, SymbolAliasMapEntry>;
-
 /// A materialization unit for symbol aliases. Allows existing symbols to be
 /// aliased with alternate flags.
 class ReExportsMaterializationUnit : public MaterializationUnit {
@@ -418,7 +422,7 @@
   ReexportsGenerator(JITDylib &SourceJD, bool MatchNonExported = false,
                      SymbolPredicate Allow = SymbolPredicate());
 
-  SymbolNameSet operator()(JITDylib &JD, const SymbolNameSet &Names);
+  Expected<SymbolNameSet> operator()(JITDylib &JD, const SymbolNameSet &Names);
 
 private:
   JITDylib &SourceJD;
@@ -426,6 +430,15 @@
   SymbolPredicate Allow;
 };
 
+/// Represents the state that a symbol has reached during materialization.
+enum class SymbolState : uint8_t {
+  Invalid,       /// No symbol should be in this state.
+  NeverSearched, /// Added to the symbol table, never queried.
+  Materializing, /// Queried, materialization begun.
+  Resolved,      /// Assigned address, still materializing.
+  Ready = 0x3f   /// Ready and safe for clients to access.
+};
+
 /// A symbol query that returns results via a callback when results are
 ///        ready.
 ///
@@ -436,38 +449,30 @@
   friend class JITSymbolResolverAdapter;
 
 public:
-
-  /// Create a query for the given symbols, notify-resolved and
-  ///        notify-ready callbacks.
+  /// Create a query for the given symbols. The NotifyComplete
+  /// callback will be called once all queried symbols reach the given
+  /// minimum state.
   AsynchronousSymbolQuery(const SymbolNameSet &Symbols,
-                          SymbolsResolvedCallback NotifySymbolsResolved,
-                          SymbolsReadyCallback NotifySymbolsReady);
+                          SymbolState RequiredState,
+                          SymbolsResolvedCallback NotifyComplete);
 
-  /// Set the resolved symbol information for the given symbol name.
-  void resolve(const SymbolStringPtr &Name, JITEvaluatedSymbol Sym);
+  /// Notify the query that a requested symbol has reached the required state.
+  void notifySymbolMetRequiredState(const SymbolStringPtr &Name,
+                                    JITEvaluatedSymbol Sym);
 
   /// Returns true if all symbols covered by this query have been
   ///        resolved.
-  bool isFullyResolved() const { return NotYetResolvedCount == 0; }
+  bool isComplete() const { return OutstandingSymbolsCount == 0; }
 
-  /// Call the NotifySymbolsResolved callback.
+  /// Call the NotifyComplete callback.
   ///
-  /// This should only be called if all symbols covered by the query have been
-  /// resolved.
-  void handleFullyResolved();
-
-  /// Notify the query that a requested symbol is ready for execution.
-  void notifySymbolReady();
-
-  /// Returns true if all symbols covered by this query are ready.
-  bool isFullyReady() const { return NotYetReadyCount == 0; }
-
-  /// Calls the NotifySymbolsReady callback.
-  ///
-  /// This should only be called if all symbols covered by this query are ready.
-  void handleFullyReady();
+  /// This should only be called if all symbols covered by the query have
+  /// reached the specified state.
+  void handleComplete();
 
 private:
+  SymbolState getRequiredState() { return RequiredState; }
+
   void addQueryDependence(JITDylib &JD, SymbolStringPtr Name);
 
   void removeQueryDependence(JITDylib &JD, const SymbolStringPtr &Name);
@@ -478,12 +483,11 @@
 
   void detach();
 
-  SymbolsResolvedCallback NotifySymbolsResolved;
-  SymbolsReadyCallback NotifySymbolsReady;
+  SymbolsResolvedCallback NotifyComplete;
   SymbolDependenceMap QueryRegistrations;
   SymbolMap ResolvedSymbols;
-  size_t NotYetResolvedCount;
-  size_t NotYetReadyCount;
+  size_t OutstandingSymbolsCount;
+  SymbolState RequiredState;
 };
 
 /// A symbol table that supports asynchoronous symbol queries.
@@ -497,7 +501,7 @@
   friend class ExecutionSession;
   friend class MaterializationResponsibility;
 public:
-  using GeneratorFunction = std::function<SymbolNameSet(
+  using GeneratorFunction = std::function<Expected<SymbolNameSet>(
       JITDylib &Parent, const SymbolNameSet &Names)>;
 
   using AsynchronousSymbolQuerySet =
@@ -595,7 +599,7 @@
 
   /// Search the given JITDylib for the symbols in Symbols. If found, store
   ///        the flags for each symbol in Flags. Returns any unresolved symbols.
-  SymbolFlagsMap lookupFlags(const SymbolNameSet &Names);
+  Expected<SymbolFlagsMap> lookupFlags(const SymbolNameSet &Names);
 
   /// Dump current JITDylib state to OS.
   void dump(raw_ostream &OS);
@@ -608,8 +612,8 @@
   /// and the query will not be applied. The Query is not failed and can be
   /// re-used in a subsequent lookup once the symbols have been added, or
   /// manually failed.
-  SymbolNameSet legacyLookup(std::shared_ptr<AsynchronousSymbolQuery> Q,
-                             SymbolNameSet Names);
+  Expected<SymbolNameSet>
+  legacyLookup(std::shared_ptr<AsynchronousSymbolQuery> Q, SymbolNameSet Names);
 
 private:
   using AsynchronousSymbolQueryList =
@@ -626,40 +630,92 @@
       DenseMap<SymbolStringPtr, std::shared_ptr<UnmaterializedInfo>>;
 
   struct MaterializingInfo {
-    AsynchronousSymbolQueryList PendingQueries;
     SymbolDependenceMap Dependants;
     SymbolDependenceMap UnemittedDependencies;
     bool IsEmitted = false;
+
+    void addQuery(std::shared_ptr<AsynchronousSymbolQuery> Q);
+    void removeQuery(const AsynchronousSymbolQuery &Q);
+    AsynchronousSymbolQueryList takeQueriesMeeting(SymbolState RequiredState);
+    AsynchronousSymbolQueryList takeAllQueries();
+    bool hasQueriesPending() const { return !PendingQueries.empty(); }
+    const AsynchronousSymbolQueryList &pendingQueries() const {
+      return PendingQueries;
+    }
+
+  private:
+    AsynchronousSymbolQueryList PendingQueries;
   };
 
   using MaterializingInfosMap = DenseMap<SymbolStringPtr, MaterializingInfo>;
 
-  using LookupImplActionFlags = enum {
-    None = 0,
-    NotifyFullyResolved = 1 << 0U,
-    NotifyFullyReady = 1 << 1U,
-    LLVM_MARK_AS_BITMASK_ENUM(NotifyFullyReady)
+  class SymbolTableEntry {
+  public:
+    SymbolTableEntry() = default;
+    SymbolTableEntry(JITSymbolFlags Flags)
+        : Flags(Flags), State(static_cast<uint8_t>(SymbolState::NeverSearched)),
+          MaterializerAttached(false), PendingRemoval(false) {}
+
+    JITTargetAddress getAddress() const { return Addr; }
+    JITSymbolFlags getFlags() const { return Flags; }
+    SymbolState getState() const { return static_cast<SymbolState>(State); }
+
+    bool isInMaterializationPhase() const {
+      return getState() == SymbolState::Materializing ||
+             getState() == SymbolState::Resolved;
+    }
+
+    bool hasMaterializerAttached() const { return MaterializerAttached; }
+    bool isPendingRemoval() const { return PendingRemoval; }
+
+    void setAddress(JITTargetAddress Addr) { this->Addr = Addr; }
+    void setFlags(JITSymbolFlags Flags) { this->Flags = Flags; }
+    void setState(SymbolState State) {
+      assert(static_cast<uint8_t>(State) < (1 << 6) &&
+             "State does not fit in bitfield");
+      this->State = static_cast<uint8_t>(State);
+    }
+
+    void setMaterializerAttached(bool MaterializerAttached) {
+      this->MaterializerAttached = MaterializerAttached;
+    }
+
+    void setPendingRemoval(bool PendingRemoval) {
+      this->PendingRemoval = PendingRemoval;
+    }
+
+    JITEvaluatedSymbol getSymbol() const {
+      return JITEvaluatedSymbol(Addr, Flags);
+    }
+
+  private:
+    JITTargetAddress Addr = 0;
+    JITSymbolFlags Flags;
+    uint8_t State : 6;
+    uint8_t MaterializerAttached : 1;
+    uint8_t PendingRemoval : 1;
   };
 
+  using SymbolTable = DenseMap<SymbolStringPtr, SymbolTableEntry>;
+
   JITDylib(ExecutionSession &ES, std::string Name);
 
   Error defineImpl(MaterializationUnit &MU);
 
-  SymbolNameSet lookupFlagsImpl(SymbolFlagsMap &Flags,
-                                const SymbolNameSet &Names);
+  Expected<SymbolNameSet> lookupFlagsImpl(SymbolFlagsMap &Flags,
+                                          const SymbolNameSet &Names);
 
-  void lodgeQuery(std::shared_ptr<AsynchronousSymbolQuery> &Q,
-                  SymbolNameSet &Unresolved, bool MatchNonExported,
-                  MaterializationUnitList &MUs);
+  Error lodgeQuery(std::shared_ptr<AsynchronousSymbolQuery> &Q,
+                   SymbolNameSet &Unresolved, bool MatchNonExported,
+                   MaterializationUnitList &MUs);
 
   void lodgeQueryImpl(std::shared_ptr<AsynchronousSymbolQuery> &Q,
                       SymbolNameSet &Unresolved, bool MatchNonExported,
                       MaterializationUnitList &MUs);
 
-  LookupImplActionFlags
-  lookupImpl(std::shared_ptr<AsynchronousSymbolQuery> &Q,
-             std::vector<std::unique_ptr<MaterializationUnit>> &MUs,
-             SymbolNameSet &Unresolved);
+  bool lookupImpl(std::shared_ptr<AsynchronousSymbolQuery> &Q,
+                  std::vector<std::unique_ptr<MaterializationUnit>> &MUs,
+                  SymbolNameSet &Unresolved);
 
   void detachQueryHelper(AsynchronousSymbolQuery &Q,
                          const SymbolNameSet &QuerySymbols);
@@ -685,7 +741,7 @@
 
   ExecutionSession &ES;
   std::string JITDylibName;
-  SymbolMap Symbols;
+  SymbolTable Symbols;
   UnmaterializedInfosMap UnmaterializedInfos;
   MaterializingInfosMap MaterializingInfos;
   GeneratorFunction DefGenerator;
@@ -726,7 +782,15 @@
   /// the ExecutionSession.
   JITDylib &getMainJITDylib();
 
+  /// Return a pointer to the "name" JITDylib.
+  /// Ownership of JITDylib remains within Execution Session
+  JITDylib *getJITDylibByName(StringRef Name);
+
   /// Add a new JITDylib to this ExecutionSession.
+  ///
+  /// The JITDylib Name is required to be unique. Clients should verify that
+  /// names are not being re-used (e.g. by calling getJITDylibByName) if names
+  /// are based on user input.
   JITDylib &createJITDylib(std::string Name,
                            bool AddToMainDylibSearchOrder = true);
 
@@ -768,7 +832,7 @@
   /// Do not use -- this will be removed soon.
   Expected<SymbolMap>
   legacyLookup(LegacyAsyncLookupFunction AsyncLookup, SymbolNameSet Names,
-               bool WaiUntilReady,
+               SymbolState RequiredState,
                RegisterDependenciesFunction RegisterDependencies);
 
   /// Search the given JITDylib list for the given symbols.
@@ -778,11 +842,8 @@
   /// (hidden visibility) symbols in that dylib (true means match against
   /// non-exported symbols, false means do not match).
   ///
-  /// The OnResolve callback will be called once all requested symbols are
-  /// resolved, or if an error occurs prior to resolution.
-  ///
-  /// The OnReady callback will be called once all requested symbols are ready,
-  /// or if an error occurs after resolution but before all symbols are ready.
+  /// The NotifyComplete callback will be called once all requested symbols
+  /// reach the required state.
   ///
   /// If all symbols are found, the RegisterDependencies function will be called
   /// while the session lock is held. This gives clients a chance to register
@@ -794,7 +855,7 @@
   /// client to get an address to call) then the value NoDependenciesToRegister
   /// can be used.
   void lookup(const JITDylibSearchList &SearchOrder, SymbolNameSet Symbols,
-              SymbolsResolvedCallback OnResolve, SymbolsReadyCallback OnReady,
+              SymbolState RequiredState, SymbolsResolvedCallback NotifyComplete,
               RegisterDependenciesFunction RegisterDependencies);
 
   /// Blocking version of lookup above. Returns the resolved symbol map.
@@ -806,9 +867,9 @@
   /// error will be reported via reportErrors.
   Expected<SymbolMap> lookup(const JITDylibSearchList &SearchOrder,
                              const SymbolNameSet &Symbols,
+                             SymbolState RequiredState = SymbolState::Ready,
                              RegisterDependenciesFunction RegisterDependencies =
-                                 NoDependenciesToRegister,
-                             bool WaitUntilReady = true);
+                                 NoDependenciesToRegister);
 
   /// Convenience version of blocking lookup.
   /// Searches each of the JITDylibs in the search order in turn for the given
@@ -831,10 +892,11 @@
   /// Materialize the given unit.
   void dispatchMaterialization(JITDylib &JD,
                                std::unique_ptr<MaterializationUnit> MU) {
-    LLVM_DEBUG(runSessionLocked([&]() {
-                 dbgs() << "Compiling, for " << JD.getName() << ", " << *MU
-                        << "\n";
-               }););
+    LLVM_DEBUG({
+      runSessionLocked([&]() {
+        dbgs() << "Dispatching " << *MU << " for " << JD.getName() << "\n";
+      });
+    });
     DispatchMaterialization(JD, std::move(MU));
   }
 
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
index 40dd415..ae3ab8c 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
@@ -217,28 +217,29 @@
 
   /// Create a DynamicLibrarySearchGenerator that searches for symbols in the
   /// given sys::DynamicLibrary.
+  ///
   /// If the Allow predicate is given then only symbols matching the predicate
-  /// will be searched for in the DynamicLibrary. If the predicate is not given
-  /// then all symbols will be searched for.
-  DynamicLibrarySearchGenerator(sys::DynamicLibrary Dylib, const DataLayout &DL,
+  /// will be searched for. If the predicate is not given then all symbols will
+  /// be searched for.
+  DynamicLibrarySearchGenerator(sys::DynamicLibrary Dylib, char GlobalPrefix,
                                 SymbolPredicate Allow = SymbolPredicate());
 
   /// Permanently loads the library at the given path and, on success, returns
   /// a DynamicLibrarySearchGenerator that will search it for symbol definitions
   /// in the library. On failure returns the reason the library failed to load.
   static Expected<DynamicLibrarySearchGenerator>
-  Load(const char *FileName, const DataLayout &DL,
+  Load(const char *FileName, char GlobalPrefix,
        SymbolPredicate Allow = SymbolPredicate());
 
   /// Creates a DynamicLibrarySearchGenerator that searches for symbols in
   /// the current process.
   static Expected<DynamicLibrarySearchGenerator>
-  GetForCurrentProcess(const DataLayout &DL,
+  GetForCurrentProcess(char GlobalPrefix,
                        SymbolPredicate Allow = SymbolPredicate()) {
-    return Load(nullptr, DL, std::move(Allow));
+    return Load(nullptr, GlobalPrefix, std::move(Allow));
   }
 
-  SymbolNameSet operator()(JITDylib &JD, const SymbolNameSet &Names);
+  Expected<SymbolNameSet> operator()(JITDylib &JD, const SymbolNameSet &Names);
 
 private:
   sys::DynamicLibrary Dylib;
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
index 2ea9ac1..a7ed537 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
@@ -146,13 +146,13 @@
     std::error_code EC;
     auto TrampolineBlock =
         sys::OwningMemoryBlock(sys::Memory::allocateMappedMemory(
-            sys::Process::getPageSize(), nullptr,
+            sys::Process::getPageSizeEstimate(), nullptr,
             sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC));
     if (EC)
       return errorCodeToError(EC);
 
     unsigned NumTrampolines =
-        (sys::Process::getPageSize() - ORCABI::PointerSize) /
+        (sys::Process::getPageSizeEstimate() - ORCABI::PointerSize) /
         ORCABI::TrampolineSize;
 
     uint8_t *TrampolineMem = static_cast<uint8_t *>(TrampolineBlock.base());
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LLJIT.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LLJIT.h
index b0ef20d..b54c7d8 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LLJIT.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LLJIT.h
@@ -20,35 +20,49 @@
 #include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"
 #include "llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h"
 #include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h"
-#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
 #include "llvm/ExecutionEngine/Orc/ThreadSafeModule.h"
 #include "llvm/Support/ThreadPool.h"
 
 namespace llvm {
 namespace orc {
 
+class LLJITBuilderState;
+class LLLazyJITBuilderState;
+
 /// A pre-fabricated ORC JIT stack that can serve as an alternative to MCJIT.
+///
+/// Create instances using LLJITBuilder.
 class LLJIT {
+  template <typename, typename, typename> friend class LLJITBuilderSetters;
+
 public:
+  static Expected<std::unique_ptr<LLJIT>> Create(LLJITBuilderState &S);
 
   /// Destruct this instance. If a multi-threaded instance, waits for all
   /// compile threads to complete.
   ~LLJIT();
 
-  /// Create an LLJIT instance.
-  /// If NumCompileThreads is not equal to zero, creates a multi-threaded
-  /// LLJIT with the given number of compile threads.
-  static Expected<std::unique_ptr<LLJIT>>
-  Create(JITTargetMachineBuilder JTMB, DataLayout DL,
-         unsigned NumCompileThreads = 0);
-
   /// Returns the ExecutionSession for this instance.
   ExecutionSession &getExecutionSession() { return *ES; }
 
+  /// Returns a reference to the DataLayout for this instance.
+  const DataLayout &getDataLayout() const { return DL; }
+
   /// Returns a reference to the JITDylib representing the JIT'd main program.
   JITDylib &getMainJITDylib() { return Main; }
 
+  /// Returns the JITDylib with the given name, or nullptr if no JITDylib with
+  /// that name exists.
+  JITDylib *getJITDylibByName(StringRef Name) {
+    return ES->getJITDylibByName(Name);
+  }
+
   /// Create a new JITDylib with the given name and return a reference to it.
+  ///
+  /// JITDylib names must be unique. If the given name is derived from user
+  /// input or elsewhere in the environment then the client should check
+  /// (e.g. by calling getJITDylibByName) that the given name is not already in
+  /// use.
   JITDylib &createJITDylib(std::string Name) {
     return ES->createJITDylib(std::move(Name));
   }
@@ -56,8 +70,6 @@
   /// Convenience method for defining an absolute symbol.
   Error defineAbsolute(StringRef Name, JITEvaluatedSymbol Address);
 
-  /// Convenience method for defining an
-
   /// Adds an IR module to the given JITDylib.
   Error addIRModule(JITDylib &JD, ThreadSafeModule TSM);
 
@@ -103,17 +115,14 @@
   Error runDestructors() { return DtorRunner.run(); }
 
   /// Returns a reference to the ObjLinkingLayer
-  RTDyldObjectLinkingLayer &getObjLinkingLayer() { return ObjLinkingLayer; }
+  ObjectLayer &getObjLinkingLayer() { return *ObjLinkingLayer; }
 
 protected:
+  static std::unique_ptr<ObjectLayer>
+  createObjectLinkingLayer(LLJITBuilderState &S, ExecutionSession &ES);
 
   /// Create an LLJIT instance with a single compile thread.
-  LLJIT(std::unique_ptr<ExecutionSession> ES, std::unique_ptr<TargetMachine> TM,
-        DataLayout DL);
-
-  /// Create an LLJIT instance with multiple compile threads.
-  LLJIT(std::unique_ptr<ExecutionSession> ES, JITTargetMachineBuilder JTMB,
-        DataLayout DL, unsigned NumCompileThreads);
+  LLJIT(LLJITBuilderState &S, Error &Err);
 
   std::string mangle(StringRef UnmangledName);
 
@@ -127,8 +136,8 @@
   DataLayout DL;
   std::unique_ptr<ThreadPool> CompileThreads;
 
-  RTDyldObjectLinkingLayer ObjLinkingLayer;
-  IRCompileLayer CompileLayer;
+  std::unique_ptr<ObjectLayer> ObjLinkingLayer;
+  std::unique_ptr<IRCompileLayer> CompileLayer;
 
   CtorDtorRunner CtorRunner, DtorRunner;
 };
@@ -136,25 +145,20 @@
 /// An extended version of LLJIT that supports lazy function-at-a-time
 /// compilation of LLVM IR.
 class LLLazyJIT : public LLJIT {
-public:
+  template <typename, typename, typename> friend class LLJITBuilderSetters;
 
-  /// Create an LLLazyJIT instance.
-  /// If NumCompileThreads is not equal to zero, creates a multi-threaded
-  /// LLLazyJIT with the given number of compile threads.
-  static Expected<std::unique_ptr<LLLazyJIT>>
-  Create(JITTargetMachineBuilder JTMB, DataLayout DL,
-         JITTargetAddress ErrorAddr, unsigned NumCompileThreads = 0);
+public:
 
   /// Set an IR transform (e.g. pass manager pipeline) to run on each function
   /// when it is compiled.
   void setLazyCompileTransform(IRTransformLayer::TransformFunction Transform) {
-    TransformLayer.setTransform(std::move(Transform));
+    TransformLayer->setTransform(std::move(Transform));
   }
 
   /// Sets the partition function.
   void
   setPartitionFunction(CompileOnDemandLayer::PartitionFunction Partition) {
-    CODLayer.setPartitionFunction(std::move(Partition));
+    CODLayer->setPartitionFunction(std::move(Partition));
   }
 
   /// Add a module to be lazily compiled to JITDylib JD.
@@ -168,24 +172,144 @@
 private:
 
   // Create a single-threaded LLLazyJIT instance.
-  LLLazyJIT(std::unique_ptr<ExecutionSession> ES,
-            std::unique_ptr<TargetMachine> TM, DataLayout DL,
-            std::unique_ptr<LazyCallThroughManager> LCTMgr,
-            std::function<std::unique_ptr<IndirectStubsManager>()> ISMBuilder);
-
-  // Create a multi-threaded LLLazyJIT instance.
-  LLLazyJIT(std::unique_ptr<ExecutionSession> ES, JITTargetMachineBuilder JTMB,
-            DataLayout DL, unsigned NumCompileThreads,
-            std::unique_ptr<LazyCallThroughManager> LCTMgr,
-            std::function<std::unique_ptr<IndirectStubsManager>()> ISMBuilder);
+  LLLazyJIT(LLLazyJITBuilderState &S, Error &Err);
 
   std::unique_ptr<LazyCallThroughManager> LCTMgr;
-  std::function<std::unique_ptr<IndirectStubsManager>()> ISMBuilder;
-
-  IRTransformLayer TransformLayer;
-  CompileOnDemandLayer CODLayer;
+  std::unique_ptr<IRTransformLayer> TransformLayer;
+  std::unique_ptr<CompileOnDemandLayer> CODLayer;
 };
 
+class LLJITBuilderState {
+public:
+  using CreateObjectLinkingLayerFunction =
+      std::function<std::unique_ptr<ObjectLayer>(ExecutionSession &)>;
+
+  std::unique_ptr<ExecutionSession> ES;
+  Optional<JITTargetMachineBuilder> JTMB;
+  CreateObjectLinkingLayerFunction CreateObjectLinkingLayer;
+  unsigned NumCompileThreads = 0;
+
+  /// Called prior to JIT class construcion to fix up defaults.
+  Error prepareForConstruction();
+};
+
+template <typename JITType, typename SetterImpl, typename State>
+class LLJITBuilderSetters {
+public:
+  /// Set the JITTargetMachineBuilder for this instance.
+  ///
+  /// If this method is not called, JITTargetMachineBuilder::detectHost will be
+  /// used to construct a default target machine builder for the host platform.
+  SetterImpl &setJITTargetMachineBuilder(JITTargetMachineBuilder JTMB) {
+    impl().JTMB = std::move(JTMB);
+    return impl();
+  }
+
+  /// Return a reference to the JITTargetMachineBuilder.
+  ///
+  Optional<JITTargetMachineBuilder> &getJITTargetMachineBuilder() {
+    return impl().JTMB;
+  }
+
+  /// Set an ObjectLinkingLayer creation function.
+  ///
+  /// If this method is not called, a default creation function will be used
+  /// that will construct an RTDyldObjectLinkingLayer.
+  SetterImpl &setCreateObjectLinkingLayer(
+      LLJITBuilderState::CreateObjectLinkingLayerFunction
+          CreateObjectLinkingLayer) {
+    impl().CreateObjectLinkingLayer = std::move(CreateObjectLinkingLayer);
+    return impl();
+  }
+
+  /// Set the number of compile threads to use.
+  ///
+  /// If set to zero, compilation will be performed on the execution thread when
+  /// JITing in-process. If set to any other number N, a thread pool of N
+  /// threads will be created for compilation.
+  ///
+  /// If this method is not called, behavior will be as if it were called with
+  /// a zero argument.
+  SetterImpl &setNumCompileThreads(unsigned NumCompileThreads) {
+    impl().NumCompileThreads = NumCompileThreads;
+    return impl();
+  }
+
+  /// Create an instance of the JIT.
+  Expected<std::unique_ptr<JITType>> create() {
+    if (auto Err = impl().prepareForConstruction())
+      return std::move(Err);
+
+    Error Err = Error::success();
+    std::unique_ptr<JITType> J(new JITType(impl(), Err));
+    if (Err)
+      return std::move(Err);
+    return std::move(J);
+  }
+
+protected:
+  SetterImpl &impl() { return static_cast<SetterImpl &>(*this); }
+};
+
+/// Constructs LLJIT instances.
+class LLJITBuilder
+    : public LLJITBuilderState,
+      public LLJITBuilderSetters<LLJIT, LLJITBuilder, LLJITBuilderState> {};
+
+class LLLazyJITBuilderState : public LLJITBuilderState {
+  friend class LLLazyJIT;
+
+public:
+  using IndirectStubsManagerBuilderFunction =
+      std::function<std::unique_ptr<IndirectStubsManager>()>;
+
+  Triple TT;
+  JITTargetAddress LazyCompileFailureAddr = 0;
+  std::unique_ptr<LazyCallThroughManager> LCTMgr;
+  IndirectStubsManagerBuilderFunction ISMBuilder;
+
+  Error prepareForConstruction();
+};
+
+template <typename JITType, typename SetterImpl, typename State>
+class LLLazyJITBuilderSetters
+    : public LLJITBuilderSetters<JITType, SetterImpl, State> {
+public:
+  /// Set the address in the target address to call if a lazy compile fails.
+  ///
+  /// If this method is not called then the value will default to 0.
+  SetterImpl &setLazyCompileFailureAddr(JITTargetAddress Addr) {
+    this->impl().LazyCompileFailureAddr = Addr;
+    return this->impl();
+  }
+
+  /// Set the lazy-callthrough manager.
+  ///
+  /// If this method is not called then a default, in-process lazy callthrough
+  /// manager for the host platform will be used.
+  SetterImpl &
+  setLazyCallthroughManager(std::unique_ptr<LazyCallThroughManager> LCTMgr) {
+    this->impl().LCTMgr = std::move(LCTMgr);
+    return this->impl();
+  }
+
+  /// Set the IndirectStubsManager builder function.
+  ///
+  /// If this method is not called then a default, in-process
+  /// IndirectStubsManager builder for the host platform will be used.
+  SetterImpl &setIndirectStubsManagerBuilder(
+      LLLazyJITBuilderState::IndirectStubsManagerBuilderFunction ISMBuilder) {
+    this->impl().ISMBuilder = std::move(ISMBuilder);
+    return this->impl();
+  }
+};
+
+/// Constructs LLLazyJIT instances.
+class LLLazyJITBuilder
+    : public LLLazyJITBuilderState,
+      public LLLazyJITBuilderSetters<LLLazyJIT, LLLazyJITBuilder,
+                                     LLLazyJITBuilderState> {};
+
 } // End namespace orc
 } // End namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
index fdf64d0..e5c5feb 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
@@ -34,8 +34,8 @@
 
 /// Lazy-emitting IR layer.
 ///
-///   This layer accepts LLVM IR Modules (via addModule), but does not
-/// immediately emit them the layer below. Instead, emissing to the base layer
+///   This layer accepts LLVM IR Modules (via addModule) but does not
+/// immediately emit them the layer below. Instead, emission to the base layer
 /// is deferred until the first time the client requests the address (via
 /// JITSymbol::getAddress) for a symbol contained in this layer.
 template <typename BaseLayerT> class LazyEmittingLayer {
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h
index e0e5526..f9cbbf6 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h
@@ -148,8 +148,8 @@
   for (auto &S : Symbols) {
     if (JITSymbol Sym = FindSymbol(*S)) {
       if (auto Addr = Sym.getAddress()) {
-        Query.resolve(S, JITEvaluatedSymbol(*Addr, Sym.getFlags()));
-        Query.notifySymbolReady();
+        Query.notifySymbolMetRequiredState(
+            S, JITEvaluatedSymbol(*Addr, Sym.getFlags()));
         NewSymbolsResolved = true;
       } else {
         ES.legacyFailQuery(Query, Addr.takeError());
@@ -162,11 +162,8 @@
       SymbolsNotFound.insert(S);
   }
 
-  if (NewSymbolsResolved && Query.isFullyResolved())
-    Query.handleFullyResolved();
-
-  if (NewSymbolsResolved && Query.isFullyReady())
-    Query.handleFullyReady();
+  if (NewSymbolsResolved && Query.isComplete())
+    Query.handleComplete();
 
   return SymbolsNotFound;
 }
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
new file mode 100644
index 0000000..c1e7d27
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
@@ -0,0 +1,165 @@
+//===-- ObjectLinkingLayer.h - JITLink-based jit linking layer --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Contains the definition for an JITLink-based, in-process object linking
+// layer.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_ORC_OBJECTLINKINGLAYER_H
+#define LLVM_EXECUTIONENGINE_ORC_OBJECTLINKINGLAYER_H
+
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ExecutionEngine/JITLink/JITLink.h"
+#include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
+#include "llvm/Support/Error.h"
+#include <algorithm>
+#include <cassert>
+#include <functional>
+#include <list>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace llvm {
+
+namespace jitlink {
+class EHFrameRegistrar;
+} // namespace jitlink
+
+namespace object {
+class ObjectFile;
+} // namespace object
+
+namespace orc {
+
+class ObjectLinkingLayerJITLinkContext;
+
+/// An ObjectLayer implementation built on JITLink.
+///
+/// Clients can use this class to add relocatable object files to an
+/// ExecutionSession, and it typically serves as the base layer (underneath
+/// a compiling layer like IRCompileLayer) for the rest of the JIT.
+class ObjectLinkingLayer : public ObjectLayer {
+  friend class ObjectLinkingLayerJITLinkContext;
+
+public:
+  /// Plugin instances can be added to the ObjectLinkingLayer to receive
+  /// callbacks when code is loaded or emitted, and when JITLink is being
+  /// configured.
+  class Plugin {
+  public:
+    virtual ~Plugin();
+    virtual void modifyPassConfig(MaterializationResponsibility &MR,
+                                  const Triple &TT,
+                                  jitlink::PassConfiguration &Config) {}
+    virtual void notifyLoaded(MaterializationResponsibility &MR) {}
+    virtual Error notifyEmitted(MaterializationResponsibility &MR) {
+      return Error::success();
+    }
+    virtual Error notifyRemovingModule(VModuleKey K) {
+      return Error::success();
+    }
+    virtual Error notifyRemovingAllModules() { return Error::success(); }
+  };
+
+  /// Construct an ObjectLinkingLayer with the given NotifyLoaded,
+  /// and NotifyEmitted functors.
+  ObjectLinkingLayer(ExecutionSession &ES,
+                     jitlink::JITLinkMemoryManager &MemMgr);
+
+  /// Destruct an ObjectLinkingLayer.
+  ~ObjectLinkingLayer();
+
+  /// Add a pass-config modifier.
+  ObjectLinkingLayer &addPlugin(std::unique_ptr<Plugin> P) {
+    std::lock_guard<std::mutex> Lock(LayerMutex);
+    Plugins.push_back(std::move(P));
+    return *this;
+  }
+
+  /// Emit the object.
+  void emit(MaterializationResponsibility R,
+            std::unique_ptr<MemoryBuffer> O) override;
+
+  /// Instructs this ObjectLinkingLayer instance to override the symbol flags
+  /// found in the AtomGraph with the flags supplied by the
+  /// MaterializationResponsibility instance. This is a workaround to support
+  /// symbol visibility in COFF, which does not use the libObject's
+  /// SF_Exported flag. Use only when generating / adding COFF object files.
+  ///
+  /// FIXME: We should be able to remove this if/when COFF properly tracks
+  /// exported symbols.
+  ObjectLinkingLayer &
+  setOverrideObjectFlagsWithResponsibilityFlags(bool OverrideObjectFlags) {
+    this->OverrideObjectFlags = OverrideObjectFlags;
+    return *this;
+  }
+
+  /// If set, this ObjectLinkingLayer instance will claim responsibility
+  /// for any symbols provided by a given object file that were not already in
+  /// the MaterializationResponsibility instance. Setting this flag allows
+  /// higher-level program representations (e.g. LLVM IR) to be added based on
+  /// only a subset of the symbols they provide, without having to write
+  /// intervening layers to scan and add the additional symbols. This trades
+  /// diagnostic quality for convenience however: If all symbols are enumerated
+  /// up-front then clashes can be detected and reported early (and usually
+  /// deterministically). If this option is set, clashes for the additional
+  /// symbols may not be detected until late, and detection may depend on
+  /// the flow of control through JIT'd code. Use with care.
+  ObjectLinkingLayer &
+  setAutoClaimResponsibilityForObjectSymbols(bool AutoClaimObjectSymbols) {
+    this->AutoClaimObjectSymbols = AutoClaimObjectSymbols;
+    return *this;
+  }
+
+private:
+  using AllocPtr = std::unique_ptr<jitlink::JITLinkMemoryManager::Allocation>;
+
+  void modifyPassConfig(MaterializationResponsibility &MR, const Triple &TT,
+                        jitlink::PassConfiguration &PassConfig);
+  void notifyLoaded(MaterializationResponsibility &MR);
+  Error notifyEmitted(MaterializationResponsibility &MR, AllocPtr Alloc);
+
+  Error removeModule(VModuleKey K);
+  Error removeAllModules();
+
+  mutable std::mutex LayerMutex;
+  jitlink::JITLinkMemoryManager &MemMgr;
+  bool OverrideObjectFlags = false;
+  bool AutoClaimObjectSymbols = false;
+  DenseMap<VModuleKey, AllocPtr> TrackedAllocs;
+  std::vector<AllocPtr> UntrackedAllocs;
+  std::vector<std::unique_ptr<Plugin>> Plugins;
+};
+
+class EHFrameRegistrationPlugin : public ObjectLinkingLayer::Plugin {
+public:
+  EHFrameRegistrationPlugin(jitlink::EHFrameRegistrar &Registrar);
+  Error notifyEmitted(MaterializationResponsibility &MR) override;
+  void modifyPassConfig(MaterializationResponsibility &MR, const Triple &TT,
+                        jitlink::PassConfiguration &PassConfig) override;
+  Error notifyRemovingModule(VModuleKey K) override;
+  Error notifyRemovingAllModules() override;
+
+private:
+  jitlink::EHFrameRegistrar &Registrar;
+  DenseMap<MaterializationResponsibility *, JITTargetAddress> InProcessLinks;
+  DenseMap<VModuleKey, JITTargetAddress> TrackedEHFrameAddrs;
+  std::vector<JITTargetAddress> UntrackedEHFrameAddrs;
+};
+
+} // end namespace orc
+} // end namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_ORC_OBJECTLINKINGLAYER_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
index 9684481..4c8e2ea 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
@@ -299,13 +299,13 @@
     std::error_code EC;
     auto TrampolineBlock =
         sys::OwningMemoryBlock(sys::Memory::allocateMappedMemory(
-            sys::Process::getPageSize(), nullptr,
+            sys::Process::getPageSizeEstimate(), nullptr,
             sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC));
     if (EC)
       return errorCodeToError(EC);
 
     uint32_t NumTrampolines =
-        (sys::Process::getPageSize() - TargetT::PointerSize) /
+        (sys::Process::getPageSizeEstimate() - TargetT::PointerSize) /
         TargetT::TrampolineSize;
 
     uint8_t *TrampolineMem = static_cast<uint8_t *>(TrampolineBlock.base());
@@ -335,7 +335,7 @@
   handleGetRemoteInfo() {
     std::string ProcessTriple = sys::getProcessTriple();
     uint32_t PointerSize = TargetT::PointerSize;
-    uint32_t PageSize = sys::Process::getPageSize();
+    uint32_t PageSize = sys::Process::getPageSizeEstimate();
     uint32_t TrampolineSize = TargetT::TrampolineSize;
     uint32_t IndirectStubSize = TargetT::IndirectStubsInfo::StubSize;
     LLVM_DEBUG(dbgs() << "  Remote info:\n"
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
index cd9ec36..479658b 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
@@ -43,22 +43,34 @@
                          const RuntimeDyld::LoadedObjectInfo &)>;
 
   /// Functor for receiving finalization notifications.
-  using NotifyEmittedFunction = std::function<void(VModuleKey)>;
+  using NotifyEmittedFunction =
+      std::function<void(VModuleKey, std::unique_ptr<MemoryBuffer>)>;
 
   using GetMemoryManagerFunction =
       std::function<std::unique_ptr<RuntimeDyld::MemoryManager>()>;
 
   /// Construct an ObjectLinkingLayer with the given NotifyLoaded,
   ///        and NotifyEmitted functors.
-  RTDyldObjectLinkingLayer(
-      ExecutionSession &ES, GetMemoryManagerFunction GetMemoryManager,
-      NotifyLoadedFunction NotifyLoaded = NotifyLoadedFunction(),
-      NotifyEmittedFunction NotifyEmitted = NotifyEmittedFunction());
+  RTDyldObjectLinkingLayer(ExecutionSession &ES,
+                           GetMemoryManagerFunction GetMemoryManager);
 
   /// Emit the object.
   void emit(MaterializationResponsibility R,
             std::unique_ptr<MemoryBuffer> O) override;
 
+  /// Set the NotifyLoaded callback.
+  RTDyldObjectLinkingLayer &setNotifyLoaded(NotifyLoadedFunction NotifyLoaded) {
+    this->NotifyLoaded = std::move(NotifyLoaded);
+    return *this;
+  }
+
+  /// Set the NotifyEmitted callback.
+  RTDyldObjectLinkingLayer &
+  setNotifyEmitted(NotifyEmittedFunction NotifyEmitted) {
+    this->NotifyEmitted = std::move(NotifyEmitted);
+    return *this;
+  }
+
   /// Set the 'ProcessAllSections' flag.
   ///
   /// If set to true, all sections in each object file will be allocated using
@@ -108,7 +120,8 @@
                   std::map<StringRef, JITEvaluatedSymbol> Resolved,
                   std::set<StringRef> &InternalSymbols);
 
-  void onObjEmit(VModuleKey K, MaterializationResponsibility &R, Error Err);
+  void onObjEmit(VModuleKey K, std::unique_ptr<MemoryBuffer> ObjBuffer,
+                 MaterializationResponsibility &R, Error Err);
 
   mutable std::mutex RTDyldLayerMutex;
   GetMemoryManagerFunction GetMemoryManager;
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
index 39fa74b..c354f6c 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
@@ -50,25 +50,20 @@
 class SymbolStringPtr {
   friend class SymbolStringPool;
   friend struct DenseMapInfo<SymbolStringPtr>;
-  friend bool operator==(const SymbolStringPtr &LHS,
-                         const SymbolStringPtr &RHS);
-  friend bool operator<(const SymbolStringPtr &LHS, const SymbolStringPtr &RHS);
-
-  static SymbolStringPool::PoolMapEntry Tombstone;
 
 public:
   SymbolStringPtr() = default;
   SymbolStringPtr(const SymbolStringPtr &Other)
     : S(Other.S) {
-    if (S)
+    if (isRealPoolEntry(S))
       ++S->getValue();
   }
 
   SymbolStringPtr& operator=(const SymbolStringPtr &Other) {
-    if (S)
+    if (isRealPoolEntry(S))
       --S->getValue();
     S = Other.S;
-    if (S)
+    if (isRealPoolEntry(S))
       ++S->getValue();
     return *this;
   }
@@ -78,7 +73,7 @@
   }
 
   SymbolStringPtr& operator=(SymbolStringPtr &&Other) {
-    if (S)
+    if (isRealPoolEntry(S))
       --S->getValue();
     S = nullptr;
     std::swap(S, Other.S);
@@ -86,35 +81,65 @@
   }
 
   ~SymbolStringPtr() {
-    if (S)
+    if (isRealPoolEntry(S))
       --S->getValue();
   }
 
   StringRef operator*() const { return S->first(); }
 
+  friend bool operator==(const SymbolStringPtr &LHS,
+                         const SymbolStringPtr &RHS) {
+    return LHS.S == RHS.S;
+  }
+
+  friend bool operator!=(const SymbolStringPtr &LHS,
+                         const SymbolStringPtr &RHS) {
+    return !(LHS == RHS);
+  }
+
+  friend bool operator<(const SymbolStringPtr &LHS,
+                        const SymbolStringPtr &RHS) {
+    return LHS.S < RHS.S;
+  }
+
 private:
+  using PoolEntryPtr = SymbolStringPool::PoolMapEntry *;
 
   SymbolStringPtr(SymbolStringPool::PoolMapEntry *S)
       : S(S) {
-    if (S)
+    if (isRealPoolEntry(S))
       ++S->getValue();
   }
 
-  SymbolStringPool::PoolMapEntry *S = nullptr;
+  // Returns false for null, empty, and tombstone values, true otherwise.
+  bool isRealPoolEntry(PoolEntryPtr P) {
+    return ((reinterpret_cast<uintptr_t>(P) - 1) & InvalidPtrMask) !=
+           InvalidPtrMask;
+  }
+
+  static SymbolStringPtr getEmptyVal() {
+    return SymbolStringPtr(reinterpret_cast<PoolEntryPtr>(EmptyBitPattern));
+  }
+
+  static SymbolStringPtr getTombstoneVal() {
+    return SymbolStringPtr(reinterpret_cast<PoolEntryPtr>(TombstoneBitPattern));
+  }
+
+  constexpr static uintptr_t EmptyBitPattern =
+      std::numeric_limits<uintptr_t>::max()
+      << PointerLikeTypeTraits<PoolEntryPtr>::NumLowBitsAvailable;
+
+  constexpr static uintptr_t TombstoneBitPattern =
+      (std::numeric_limits<uintptr_t>::max() - 1)
+      << PointerLikeTypeTraits<PoolEntryPtr>::NumLowBitsAvailable;
+
+  constexpr static uintptr_t InvalidPtrMask =
+      (std::numeric_limits<uintptr_t>::max() - 3)
+      << PointerLikeTypeTraits<PoolEntryPtr>::NumLowBitsAvailable;
+
+  PoolEntryPtr S = nullptr;
 };
 
-inline bool operator==(const SymbolStringPtr &LHS, const SymbolStringPtr &RHS) {
-  return LHS.S == RHS.S;
-}
-
-inline bool operator!=(const SymbolStringPtr &LHS, const SymbolStringPtr &RHS) {
-  return !(LHS == RHS);
-}
-
-inline bool operator<(const SymbolStringPtr &LHS, const SymbolStringPtr &RHS) {
-  return LHS.S < RHS.S;
-}
-
 inline SymbolStringPool::~SymbolStringPool() {
 #ifndef NDEBUG
   clearDeadEntries();
@@ -150,16 +175,15 @@
 struct DenseMapInfo<orc::SymbolStringPtr> {
 
   static orc::SymbolStringPtr getEmptyKey() {
-    return orc::SymbolStringPtr();
+    return orc::SymbolStringPtr::getEmptyVal();
   }
 
   static orc::SymbolStringPtr getTombstoneKey() {
-    return orc::SymbolStringPtr(&orc::SymbolStringPtr::Tombstone);
+    return orc::SymbolStringPtr::getTombstoneVal();
   }
 
-  static unsigned getHashValue(orc::SymbolStringPtr V) {
-    uintptr_t IV = reinterpret_cast<uintptr_t>(V.S);
-    return unsigned(IV) ^ unsigned(IV >> 9);
+  static unsigned getHashValue(const orc::SymbolStringPtr &V) {
+    return DenseMapInfo<orc::SymbolStringPtr::PoolEntryPtr>::getHashValue(V.S);
   }
 
   static bool isEqual(const orc::SymbolStringPtr &LHS,
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h
index 2af9203..b2b4eba 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h
@@ -52,18 +52,19 @@
   std::string ErrMsg;
 };
 
-class RuntimeDyldCheckerImpl;
 class RuntimeDyldImpl;
 
 class RuntimeDyld {
-  friend class RuntimeDyldCheckerImpl;
-
 protected:
   // Change the address associated with a section when resolving relocations.
   // Any relocations already associated with the symbol will be re-resolved.
   void reassignSectionAddress(unsigned SectionID, uint64_t Addr);
 
 public:
+  using NotifyStubEmittedFunction = std::function<void(
+      StringRef FileName, StringRef SectionName, StringRef SymbolName,
+      unsigned SectionID, uint32_t StubOffset)>;
+
   /// Information about the loaded object.
   class LoadedObjectInfo : public llvm::LoadedObjectInfo {
     friend class RuntimeDyldImpl;
@@ -184,6 +185,9 @@
   /// and resolve relocatons based on where they put it).
   void *getSymbolLocalAddress(StringRef Name) const;
 
+  /// Get the section ID for the section containing the given symbol.
+  unsigned getSymbolSectionID(StringRef Name) const;
+
   /// Get the target address and flags for the named symbol.
   /// This address is the one used for relocation.
   JITEvaluatedSymbol getSymbol(StringRef Name) const;
@@ -204,6 +208,19 @@
   /// This is the address which will be used for relocation resolution.
   void mapSectionAddress(const void *LocalAddress, uint64_t TargetAddress);
 
+  /// Returns the section's working memory.
+  StringRef getSectionContent(unsigned SectionID) const;
+
+  /// If the section was loaded, return the section's load address,
+  /// otherwise return None.
+  uint64_t getSectionLoadAddress(unsigned SectionID) const;
+
+  /// Set the NotifyStubEmitted callback. This is used for debugging
+  /// purposes. A callback is made for each stub that is generated.
+  void setNotifyStubEmitted(NotifyStubEmittedFunction NotifyStubEmitted) {
+    this->NotifyStubEmitted = std::move(NotifyStubEmitted);
+  }
+
   /// Register any EH frame sections that have been loaded but not previously
   /// registered with the memory manager.  Note, RuntimeDyld is responsible
   /// for identifying the EH frame and calling the memory manager with the
@@ -265,7 +282,7 @@
   MemoryManager &MemMgr;
   JITSymbolResolver &Resolver;
   bool ProcessAllSections;
-  RuntimeDyldCheckerImpl *Checker;
+  NotifyStubEmittedFunction NotifyStubEmitted;
 };
 
 // Asynchronous JIT link for ORC.
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
index ee925c2..93ea091 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
@@ -9,7 +9,10 @@
 #ifndef LLVM_EXECUTIONENGINE_RUNTIMEDYLDCHECKER_H
 #define LLVM_EXECUTIONENGINE_RUNTIMEDYLDCHECKER_H
 
+#include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/Optional.h"
+#include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/Support/Endian.h"
 
 #include <cstdint>
 #include <memory>
@@ -57,7 +60,8 @@
 ///
 /// ident_expr = 'decode_operand' '(' symbol ',' operand-index ')'
 ///            | 'next_pc'        '(' symbol ')'
-///            | 'stub_addr' '(' file-name ',' section-name ',' symbol ')'
+///            | 'stub_addr' '(' stub-container-name ',' symbol ')'
+///            | 'got_addr' '(' stub-container-name ',' symbol ')'
 ///            | symbol
 ///
 /// binary_expr = expr '+' expr
@@ -69,16 +73,85 @@
 ///
 class RuntimeDyldChecker {
 public:
-  RuntimeDyldChecker(RuntimeDyld &RTDyld, MCDisassembler *Disassembler,
-                     MCInstPrinter *InstPrinter, raw_ostream &ErrStream);
+  class MemoryRegionInfo {
+  public:
+    MemoryRegionInfo() = default;
+
+    /// Constructor for symbols/sections with content.
+    MemoryRegionInfo(StringRef Content, JITTargetAddress TargetAddress)
+        : ContentPtr(Content.data()), Size(Content.size()),
+          TargetAddress(TargetAddress) {}
+
+    /// Constructor for zero-fill symbols/sections.
+    MemoryRegionInfo(uint64_t Size, JITTargetAddress TargetAddress)
+        : Size(Size), TargetAddress(TargetAddress) {}
+
+    /// Returns true if this is a zero-fill symbol/section.
+    bool isZeroFill() const {
+      assert(Size && "setContent/setZeroFill must be called first");
+      return !ContentPtr;
+    }
+
+    /// Set the content for this memory region.
+    void setContent(StringRef Content) {
+      assert(!ContentPtr && !Size && "Content/zero-fill already set");
+      ContentPtr = Content.data();
+      Size = Content.size();
+    }
+
+    /// Set a zero-fill length for this memory region.
+    void setZeroFill(uint64_t Size) {
+      assert(!ContentPtr && !this->Size && "Content/zero-fill already set");
+      this->Size = Size;
+    }
+
+    /// Returns the content for this section if there is any.
+    StringRef getContent() const {
+      assert(!isZeroFill() && "Can't get content for a zero-fill section");
+      return StringRef(ContentPtr, static_cast<size_t>(Size));
+    }
+
+    /// Returns the zero-fill length for this section.
+    uint64_t getZeroFillLength() const {
+      assert(isZeroFill() && "Can't get zero-fill length for content section");
+      return Size;
+    }
+
+    /// Set the target address for this region.
+    void setTargetAddress(JITTargetAddress TargetAddress) {
+      assert(!this->TargetAddress && "TargetAddress already set");
+      this->TargetAddress = TargetAddress;
+    }
+
+    /// Return the target address for this region.
+    JITTargetAddress getTargetAddress() const { return TargetAddress; }
+
+  private:
+    const char *ContentPtr = 0;
+    uint64_t Size = 0;
+    JITTargetAddress TargetAddress = 0;
+  };
+
+  using IsSymbolValidFunction = std::function<bool(StringRef Symbol)>;
+  using GetSymbolInfoFunction =
+      std::function<Expected<MemoryRegionInfo>(StringRef SymbolName)>;
+  using GetSectionInfoFunction = std::function<Expected<MemoryRegionInfo>(
+      StringRef FileName, StringRef SectionName)>;
+  using GetStubInfoFunction = std::function<Expected<MemoryRegionInfo>(
+      StringRef StubContainer, StringRef TargetName)>;
+  using GetGOTInfoFunction = std::function<Expected<MemoryRegionInfo>(
+      StringRef GOTContainer, StringRef TargetName)>;
+
+  RuntimeDyldChecker(IsSymbolValidFunction IsSymbolValid,
+                     GetSymbolInfoFunction GetSymbolInfo,
+                     GetSectionInfoFunction GetSectionInfo,
+                     GetStubInfoFunction GetStubInfo,
+                     GetGOTInfoFunction GetGOTInfo,
+                     support::endianness Endianness,
+                     MCDisassembler *Disassembler, MCInstPrinter *InstPrinter,
+                     raw_ostream &ErrStream);
   ~RuntimeDyldChecker();
 
-  // Get the associated RTDyld instance.
-  RuntimeDyld& getRTDyld();
-
-  // Get the associated RTDyld instance.
-  const RuntimeDyld& getRTDyld() const;
-
   /// Check a single expression against the attached RuntimeDyld
   ///        instance.
   bool check(StringRef CheckExpr) const;
@@ -99,7 +172,7 @@
                                                   bool LocalAddress);
 
   /// If there is a section at the given local address, return its load
-  ///        address, otherwise return none.
+  /// address, otherwise return none.
   Optional<uint64_t> getSectionLoadAddress(void *LocalAddress) const;
 
 private:
diff --git a/linux-x64/clang/include/llvm/IR/Argument.h b/linux-x64/clang/include/llvm/IR/Argument.h
index 2de5c71..5f514b9 100644
--- a/linux-x64/clang/include/llvm/IR/Argument.h
+++ b/linux-x64/clang/include/llvm/IR/Argument.h
@@ -78,6 +78,9 @@
   /// If this is a byval or inalloca argument, return its alignment.
   unsigned getParamAlignment() const;
 
+  /// If this is a byval argument, return its type.
+  Type *getParamByValType() const;
+
   /// Return true if this argument has the nest attribute.
   bool hasNestAttr() const;
 
@@ -90,6 +93,9 @@
   /// Return true if this argument has the sret attribute.
   bool hasStructRetAttr() const;
 
+  /// Return true if this argument has the inreg attribute.
+  bool hasInRegAttr() const;
+
   /// Return true if this argument has the returned attribute.
   bool hasReturnedAttr() const;
 
@@ -118,6 +124,8 @@
   /// Check if an argument has a given attribute.
   bool hasAttribute(Attribute::AttrKind Kind) const;
 
+  Attribute getAttribute(Attribute::AttrKind Kind) const;
+
   /// Method for support type inquiry through isa, cast, and dyn_cast.
   static bool classof(const Value *V) {
     return V->getValueID() == ArgumentVal;
diff --git a/linux-x64/clang/include/llvm/IR/Attributes.h b/linux-x64/clang/include/llvm/IR/Attributes.h
index 8d7f401..06cc09e 100644
--- a/linux-x64/clang/include/llvm/IR/Attributes.h
+++ b/linux-x64/clang/include/llvm/IR/Attributes.h
@@ -90,6 +90,7 @@
   static Attribute get(LLVMContext &Context, AttrKind Kind, uint64_t Val = 0);
   static Attribute get(LLVMContext &Context, StringRef Kind,
                        StringRef Val = StringRef());
+  static Attribute get(LLVMContext &Context, AttrKind Kind, Type *Ty);
 
   /// Return a uniquified Attribute object that has the specific
   /// alignment set.
@@ -102,6 +103,7 @@
   static Attribute getWithAllocSizeArgs(LLVMContext &Context,
                                         unsigned ElemSizeArg,
                                         const Optional<unsigned> &NumElemsArg);
+  static Attribute getWithByValType(LLVMContext &Context, Type *Ty);
 
   //===--------------------------------------------------------------------===//
   // Attribute Accessors
@@ -117,6 +119,9 @@
   /// attribute.
   bool isStringAttribute() const;
 
+  /// Return true if the attribute is a type attribute.
+  bool isTypeAttribute() const;
+
   /// Return true if the attribute is present.
   bool hasAttribute(AttrKind Val) const;
 
@@ -139,6 +144,10 @@
   /// attribute to be a string attribute.
   StringRef getValueAsString() const;
 
+  /// Return the attribute's value as a Type. This requires the attribute to be
+  /// a type attribute.
+  Type *getValueAsType() const;
+
   /// Returns the alignment field of an attribute as a byte alignment
   /// value.
   unsigned getAlignment() const;
@@ -279,6 +288,7 @@
   unsigned getStackAlignment() const;
   uint64_t getDereferenceableBytes() const;
   uint64_t getDereferenceableOrNullBytes() const;
+  Type *getByValType() const;
   std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
   std::string getAsString(bool InAttrGrp = false) const;
 
@@ -598,6 +608,9 @@
   /// Return the alignment for the specified function parameter.
   unsigned getParamAlignment(unsigned ArgNo) const;
 
+  /// Return the byval type for the specified function parameter.
+  Type *getParamByValType(unsigned ArgNo) const;
+
   /// Get the stack alignment.
   unsigned getStackAlignment(unsigned Index) const;
 
@@ -697,6 +710,7 @@
   uint64_t DerefBytes = 0;
   uint64_t DerefOrNullBytes = 0;
   uint64_t AllocSizeArgs = 0;
+  Type *ByValType = nullptr;
 
 public:
   AttrBuilder() = default;
@@ -772,6 +786,9 @@
   /// dereferenceable_or_null attribute exists (zero is returned otherwise).
   uint64_t getDereferenceableOrNullBytes() const { return DerefOrNullBytes; }
 
+  /// Retrieve the byval type.
+  Type *getByValType() const { return ByValType; }
+
   /// Retrieve the allocsize args, if the allocsize attribute exists.  If it
   /// doesn't exist, pair(0, 0) is returned.
   std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
@@ -796,6 +813,9 @@
   AttrBuilder &addAllocSizeAttr(unsigned ElemSizeArg,
                                 const Optional<unsigned> &NumElemsArg);
 
+  /// This turns a byval type into the form used internally in Attribute.
+  AttrBuilder &addByValAttr(Type *Ty);
+
   /// Add an allocsize attribute, using the representation returned by
   /// Attribute.getIntValue().
   AttrBuilder &addAllocSizeAttrFromRawRepr(uint64_t RawAllocSizeRepr);
diff --git a/linux-x64/clang/include/llvm/IR/Attributes.inc b/linux-x64/clang/include/llvm/IR/Attributes.inc
index 28d4287..c99cba1 100644
--- a/linux-x64/clang/include/llvm/IR/Attributes.inc
+++ b/linux-x64/clang/include/llvm/IR/Attributes.inc
@@ -10,6 +10,7 @@
 Convergent,
 Dereferenceable,
 DereferenceableOrNull,
+ImmArg,
 InAlloca,
 InReg,
 InaccessibleMemOnly,
@@ -24,6 +25,7 @@
 NoCapture,
 NoCfCheck,
 NoDuplicate,
+NoFree,
 NoImplicitFloat,
 NoInline,
 NoRecurse,
@@ -57,6 +59,7 @@
 SwiftError,
 SwiftSelf,
 UWTable,
+WillReturn,
 WriteOnly,
 ZExt,
 #endif
@@ -74,6 +77,7 @@
     .Case("convergent", Attribute::Convergent)
     .Case("dereferenceable", Attribute::Dereferenceable)
     .Case("dereferenceable_or_null", Attribute::DereferenceableOrNull)
+    .Case("immarg", Attribute::ImmArg)
     .Case("inalloca", Attribute::InAlloca)
     .Case("inreg", Attribute::InReg)
     .Case("inaccessiblememonly", Attribute::InaccessibleMemOnly)
@@ -88,6 +92,7 @@
     .Case("nocapture", Attribute::NoCapture)
     .Case("nocf_check", Attribute::NoCfCheck)
     .Case("noduplicate", Attribute::NoDuplicate)
+    .Case("nofree", Attribute::NoFree)
     .Case("noimplicitfloat", Attribute::NoImplicitFloat)
     .Case("noinline", Attribute::NoInline)
     .Case("norecurse", Attribute::NoRecurse)
@@ -121,6 +126,7 @@
     .Case("swifterror", Attribute::SwiftError)
     .Case("swiftself", Attribute::SwiftSelf)
     .Case("uwtable", Attribute::UWTable)
+    .Case("willreturn", Attribute::WillReturn)
     .Case("writeonly", Attribute::WriteOnly)
     .Case("zeroext", Attribute::ZExt)
     .Default(Attribute::None);
@@ -208,6 +214,11 @@
     return llvm::Attribute::DereferenceableOrNull;
   }
 };
+struct ImmArgAttr : EnumAttr {
+  static enum Attribute::AttrKind getKind() {
+    return llvm::Attribute::ImmArg;
+  }
+};
 struct InAllocaAttr : EnumAttr {
   static enum Attribute::AttrKind getKind() {
     return llvm::Attribute::InAlloca;
@@ -278,6 +289,11 @@
     return llvm::Attribute::NoDuplicate;
   }
 };
+struct NoFreeAttr : EnumAttr {
+  static enum Attribute::AttrKind getKind() {
+    return llvm::Attribute::NoFree;
+  }
+};
 struct NoImplicitFloatAttr : EnumAttr {
   static enum Attribute::AttrKind getKind() {
     return llvm::Attribute::NoImplicitFloat;
@@ -443,6 +459,11 @@
     return llvm::Attribute::UWTable;
   }
 };
+struct WillReturnAttr : EnumAttr {
+  static enum Attribute::AttrKind getKind() {
+    return llvm::Attribute::WillReturn;
+  }
+};
 struct WriteOnlyAttr : EnumAttr {
   static enum Attribute::AttrKind getKind() {
     return llvm::Attribute::WriteOnly;
diff --git a/linux-x64/clang/include/llvm/IR/Attributes.td b/linux-x64/clang/include/llvm/IR/Attributes.td
index e786d85..694a23a 100644
--- a/linux-x64/clang/include/llvm/IR/Attributes.td
+++ b/linux-x64/clang/include/llvm/IR/Attributes.td
@@ -85,6 +85,9 @@
 /// Call cannot be duplicated.
 def NoDuplicate : EnumAttr<"noduplicate">;
 
+/// Function does not deallocate memory.
+def NoFree : EnumAttr<"nofree">;
+
 /// Disable implicit floating point insts.
 def NoImplicitFloat : EnumAttr<"noimplicitfloat">;
 
@@ -130,6 +133,9 @@
 /// Return value is always equal to this argument.
 def Returned : EnumAttr<"returned">;
 
+/// Parameter is required to be a trivial constant.
+def ImmArg : EnumAttr<"immarg">;
+
 /// Function can return twice.
 def ReturnsTwice : EnumAttr<"returns_twice">;
 
@@ -193,6 +199,9 @@
 /// Function must be in a unwind table.
 def UWTable : EnumAttr<"uwtable">;
 
+/// Function always comes back to callsite.
+def WillReturn : EnumAttr<"willreturn">;
+
 /// Function only writes to memory.
 def WriteOnly : EnumAttr<"writeonly">;
 
diff --git a/linux-x64/clang/include/llvm/IR/AutoUpgrade.h b/linux-x64/clang/include/llvm/IR/AutoUpgrade.h
index 9900319..017ad93 100644
--- a/linux-x64/clang/include/llvm/IR/AutoUpgrade.h
+++ b/linux-x64/clang/include/llvm/IR/AutoUpgrade.h
@@ -46,9 +46,9 @@
   /// so that it can update all calls to the old function.
   void UpgradeCallsToIntrinsic(Function* F);
 
-  /// This checks for global variables which should be upgraded. It returns true
-  /// if it requires upgrading.
-  bool UpgradeGlobalVariable(GlobalVariable *GV);
+  /// This checks for global variables which should be upgraded. It it requires
+  /// upgrading, returns a pointer to the upgraded variable.
+  GlobalVariable *UpgradeGlobalVariable(GlobalVariable *GV);
 
   /// This checks for module flags which should be upgraded. It returns true if
   /// module is modified.
diff --git a/linux-x64/clang/include/llvm/IR/BasicBlock.h b/linux-x64/clang/include/llvm/IR/BasicBlock.h
index fd9efb8..69555af 100644
--- a/linux-x64/clang/include/llvm/IR/BasicBlock.h
+++ b/linux-x64/clang/include/llvm/IR/BasicBlock.h
@@ -390,6 +390,14 @@
   /// direct branches, switches, etc. to it.
   bool hasAddressTaken() const { return getSubclassDataFromValue() != 0; }
 
+  /// Update all phi nodes in this basic block to refer to basic block \p New
+  /// instead of basic block \p Old.
+  void replacePhiUsesWith(BasicBlock *Old, BasicBlock *New);
+
+  /// Update all phi nodes in this basic block's successors to refer to basic
+  /// block \p New instead of basic block \p Old.
+  void replaceSuccessorsPhiUsesWith(BasicBlock *Old, BasicBlock *New);
+
   /// Update all phi nodes in this basic block's successors to refer to basic
   /// block \p New instead of to it.
   void replaceSuccessorsPhiUsesWith(BasicBlock *New);
diff --git a/linux-x64/clang/include/llvm/IR/CallSite.h b/linux-x64/clang/include/llvm/IR/CallSite.h
index 1454874..b47a96c 100644
--- a/linux-x64/clang/include/llvm/IR/CallSite.h
+++ b/linux-x64/clang/include/llvm/IR/CallSite.h
@@ -415,6 +415,11 @@
     CALLSITE_DELEGATE_GETTER(getParamAlignment(ArgNo));
   }
 
+  /// Extract the byval type for a call or parameter (nullptr=unknown).
+  Type *getParamByValType(unsigned ArgNo) const {
+    CALLSITE_DELEGATE_GETTER(getParamByValType(ArgNo));
+  }
+
   /// Extract the number of dereferenceable bytes for a call or parameter
   /// (0=unknown).
   uint64_t getDereferenceableBytes(unsigned i) const {
@@ -724,7 +729,7 @@
     /// through (also identified by position but in the call site instruction).
     ///
     /// NOTE that we use LLVM argument numbers (starting at 0) and not
-    /// clang/soruce argument numbers (starting at 1). The -1 entries represent
+    /// clang/source argument numbers (starting at 1). The -1 entries represent
     /// unknown values that are passed to the callee.
     using ParameterEncodingTy = SmallVector<int, 0>;
     ParameterEncodingTy ParameterEncoding;
diff --git a/linux-x64/clang/include/llvm/IR/Constant.h b/linux-x64/clang/include/llvm/IR/Constant.h
index e71ac27..9315766 100644
--- a/linux-x64/clang/include/llvm/IR/Constant.h
+++ b/linux-x64/clang/include/llvm/IR/Constant.h
@@ -90,6 +90,10 @@
   /// elements.
   bool containsUndefElement() const;
 
+  /// Return true if this is a vector constant that includes any constant
+  /// expressions.
+  bool containsConstantExpression() const;
+
   /// Return true if evaluation of this constant could trap. This is true for
   /// things like constant expressions that could divide by zero.
   bool canTrap() const;
diff --git a/linux-x64/clang/include/llvm/IR/ConstantFolder.h b/linux-x64/clang/include/llvm/IR/ConstantFolder.h
index 1971cb8..5a5cabf 100644
--- a/linux-x64/clang/include/llvm/IR/ConstantFolder.h
+++ b/linux-x64/clang/include/llvm/IR/ConstantFolder.h
@@ -134,6 +134,10 @@
     return ConstantExpr::getNot(C);
   }
 
+  Constant *CreateUnOp(Instruction::UnaryOps Opc, Constant *C) const {
+    return ConstantExpr::get(Opc, C);
+  }
+
   //===--------------------------------------------------------------------===//
   // Memory Instructions
   //===--------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/IR/ConstantRange.h b/linux-x64/clang/include/llvm/IR/ConstantRange.h
index 86c8c30..91f3f31 100644
--- a/linux-x64/clang/include/llvm/IR/ConstantRange.h
+++ b/linux-x64/clang/include/llvm/IR/ConstantRange.h
@@ -41,14 +41,25 @@
 
 class MDNode;
 class raw_ostream;
+struct KnownBits;
 
 /// This class represents a range of values.
 class LLVM_NODISCARD ConstantRange {
   APInt Lower, Upper;
 
+  /// Create empty constant range with same bitwidth.
+  ConstantRange getEmpty() const {
+    return ConstantRange(getBitWidth(), false);
+  }
+
+  /// Create full constant range with same bitwidth.
+  ConstantRange getFull() const {
+    return ConstantRange(getBitWidth(), true);
+  }
+
 public:
-  /// Initialize a full (the default) or empty set for the specified bit width.
-  explicit ConstantRange(uint32_t BitWidth, bool isFullSet = true);
+  /// Initialize a full or empty set for the specified bit width.
+  explicit ConstantRange(uint32_t BitWidth, bool isFullSet);
 
   /// Initialize a range to hold the single specified value.
   ConstantRange(APInt Value);
@@ -58,6 +69,29 @@
   /// assert out if the two APInt's are not the same bit width.
   ConstantRange(APInt Lower, APInt Upper);
 
+  /// Create empty constant range with the given bit width.
+  static ConstantRange getEmpty(uint32_t BitWidth) {
+    return ConstantRange(BitWidth, false);
+  }
+
+  /// Create full constant range with the given bit width.
+  static ConstantRange getFull(uint32_t BitWidth) {
+    return ConstantRange(BitWidth, true);
+  }
+
+  /// Create non-empty constant range with the given bounds. If Lower and
+  /// Upper are the same, a full range is returned.
+  static ConstantRange getNonEmpty(APInt Lower, APInt Upper) {
+    if (Lower == Upper)
+      return getFull(Lower.getBitWidth());
+    return ConstantRange(std::move(Lower), std::move(Upper));
+  }
+
+  /// Initialize a range based on a known bits constraint. The IsSigned flag
+  /// indicates whether the constant range should not wrap in the signed or
+  /// unsigned domain.
+  static ConstantRange fromKnownBits(const KnownBits &Known, bool IsSigned);
+
   /// Produce the smallest range such that all values that may satisfy the given
   /// predicate with any value contained within Other is contained in the
   /// returned range.  Formally, this returns a superset of
@@ -90,14 +124,12 @@
   static ConstantRange makeExactICmpRegion(CmpInst::Predicate Pred,
                                            const APInt &Other);
 
-  /// Return the largest range containing all X such that "X BinOpC Y" is
-  /// guaranteed not to wrap (overflow) for all Y in Other.
+  /// Produce the largest range containing all X such that "X BinOp Y" is
+  /// guaranteed not to wrap (overflow) for *all* Y in Other. However, there may
+  /// be *some* Y in Other for which additional X not contained in the result
+  /// also do not overflow.
   ///
-  /// NB! The returned set does *not* contain **all** possible values of X for
-  /// which "X BinOpC Y" does not wrap -- some viable values of X may be
-  /// missing, so you cannot use this to constrain X's range.  E.g. in the
-  /// fourth example, "(-2) + 1" is both nsw and nuw (so the "X" could be -2),
-  /// but (-2) is not in the set returned.
+  /// NoWrapKind must be one of OBO::NoUnsignedWrap or OBO::NoSignedWrap.
   ///
   /// Examples:
   ///  typedef OverflowingBinaryOperator OBO;
@@ -105,17 +137,19 @@
   ///  MGNR(Add, [i8 1, 2), OBO::NoSignedWrap) == [-128, 127)
   ///  MGNR(Add, [i8 1, 2), OBO::NoUnsignedWrap) == [0, -1)
   ///  MGNR(Add, [i8 0, 1), OBO::NoUnsignedWrap) == Full Set
-  ///  MGNR(Add, [i8 1, 2), OBO::NoUnsignedWrap | OBO::NoSignedWrap)
-  ///    == [0,INT_MAX)
   ///  MGNR(Add, [i8 -1, 6), OBO::NoSignedWrap) == [INT_MIN+1, INT_MAX-4)
   ///  MGNR(Sub, [i8 1, 2), OBO::NoSignedWrap) == [-127, 128)
   ///  MGNR(Sub, [i8 1, 2), OBO::NoUnsignedWrap) == [1, 0)
-  ///  MGNR(Sub, [i8 1, 2), OBO::NoUnsignedWrap | OBO::NoSignedWrap)
-  ///    == [1,INT_MAX)
   static ConstantRange makeGuaranteedNoWrapRegion(Instruction::BinaryOps BinOp,
                                                   const ConstantRange &Other,
                                                   unsigned NoWrapKind);
 
+  /// Produce the range that contains X if and only if "X BinOp Other" does
+  /// not wrap.
+  static ConstantRange makeExactNoWrapRegion(Instruction::BinaryOps BinOp,
+                                             const APInt &Other,
+                                             unsigned NoWrapKind);
+
   /// Set up \p Pred and \p RHS such that
   /// ConstantRange::makeExactICmpRegion(Pred, RHS) == *this.  Return true if
   /// successful.
@@ -137,14 +171,32 @@
   /// Return true if this set contains no members.
   bool isEmptySet() const;
 
-  /// Return true if this set wraps around the top of the range.
-  /// For example: [100, 8).
+  /// Return true if this set wraps around the unsigned domain. Special cases:
+  ///  * Empty set: Not wrapped.
+  ///  * Full set: Not wrapped.
+  ///  * [X, 0) == [X, Max]: Not wrapped.
   bool isWrappedSet() const;
 
-  /// Return true if this set wraps around the INT_MIN of
-  /// its bitwidth. For example: i8 [120, 140).
+  /// Return true if the exclusive upper bound wraps around the unsigned
+  /// domain. Special cases:
+  ///  * Empty set: Not wrapped.
+  ///  * Full set: Not wrapped.
+  ///  * [X, 0): Wrapped.
+  bool isUpperWrapped() const;
+
+  /// Return true if this set wraps around the signed domain. Special cases:
+  ///  * Empty set: Not wrapped.
+  ///  * Full set: Not wrapped.
+  ///  * [X, SignedMin) == [X, SignedMax]: Not wrapped.
   bool isSignWrappedSet() const;
 
+  /// Return true if the (exclusive) upper bound wraps around the signed
+  /// domain. Special cases:
+  ///  * Empty set: Not wrapped.
+  ///  * Full set: Not wrapped.
+  ///  * [X, SignedMin): Wrapped.
+  bool isUpperSignWrapped() const;
+
   /// Return true if the specified value is in the set.
   bool contains(const APInt &Val) const;
 
@@ -169,15 +221,18 @@
   /// Return true if this set contains exactly one member.
   bool isSingleElement() const { return getSingleElement() != nullptr; }
 
-  /// Return the number of elements in this set.
-  APInt getSetSize() const;
-
   /// Compare set size of this range with the range CR.
   bool isSizeStrictlySmallerThan(const ConstantRange &CR) const;
 
-  // Compare set size of this range with Value.
+  /// Compare set size of this range with Value.
   bool isSizeLargerThan(uint64_t MaxSize) const;
 
+  /// Return true if all values in this range are negative.
+  bool isAllNegative() const;
+
+  /// Return true if all values in this range are non-negative.
+  bool isAllNonNegative() const;
+
   /// Return the largest unsigned value contained in the ConstantRange.
   APInt getUnsignedMax() const;
 
@@ -205,20 +260,30 @@
   /// the sets).
   ConstantRange difference(const ConstantRange &CR) const;
 
-  /// Return the range that results from the intersection of
-  /// this range with another range.  The resultant range is guaranteed to
-  /// include all elements contained in both input ranges, and to have the
-  /// smallest possible set size that does so.  Because there may be two
-  /// intersections with the same set size, A.intersectWith(B) might not
-  /// be equal to B.intersectWith(A).
-  ConstantRange intersectWith(const ConstantRange &CR) const;
+  /// If represented precisely, the result of some range operations may consist
+  /// of multiple disjoint ranges. As only a single range may be returned, any
+  /// range covering these disjoint ranges constitutes a valid result, but some
+  /// may be more useful than others depending on context. The preferred range
+  /// type specifies whether a range that is non-wrapping in the unsigned or
+  /// signed domain, or has the smallest size, is preferred. If a signedness is
+  /// preferred but all ranges are non-wrapping or all wrapping, then the
+  /// smallest set size is preferred. If there are multiple smallest sets, any
+  /// one of them may be returned.
+  enum PreferredRangeType { Smallest, Unsigned, Signed };
+
+  /// Return the range that results from the intersection of this range with
+  /// another range. If the intersection is disjoint, such that two results
+  /// are possible, the preferred range is determined by the PreferredRangeType.
+  ConstantRange intersectWith(const ConstantRange &CR,
+                              PreferredRangeType Type = Smallest) const;
 
   /// Return the range that results from the union of this range
   /// with another range.  The resultant range is guaranteed to include the
   /// elements of both sets, but may contain more.  For example, [3, 9) union
   /// [12,15) is [3, 15), which includes 9, 10, and 11, which were not included
   /// in either set before.
-  ConstantRange unionWith(const ConstantRange &CR) const;
+  ConstantRange unionWith(const ConstantRange &CR,
+                          PreferredRangeType Type = Smallest) const;
 
   /// Return a new range representing the possible values resulting
   /// from an application of the specified cast operator to this range. \p
@@ -300,6 +365,23 @@
   ConstantRange udiv(const ConstantRange &Other) const;
 
   /// Return a new range representing the possible values resulting
+  /// from a signed division of a value in this range and a value in
+  /// \p Other. Division by zero and division of SignedMin by -1 are considered
+  /// undefined behavior, in line with IR, and do not contribute towards the
+  /// result.
+  ConstantRange sdiv(const ConstantRange &Other) const;
+
+  /// Return a new range representing the possible values resulting
+  /// from an unsigned remainder operation of a value in this range and a
+  /// value in \p Other.
+  ConstantRange urem(const ConstantRange &Other) const;
+
+  /// Return a new range representing the possible values resulting
+  /// from a signed remainder operation of a value in this range and a
+  /// value in \p Other.
+  ConstantRange srem(const ConstantRange &Other) const;
+
+  /// Return a new range representing the possible values resulting
   /// from a binary-and of a value in this range by a value in \p Other.
   ConstantRange binaryAnd(const ConstantRange &Other) const;
 
@@ -320,9 +402,53 @@
   /// arithmetic right shift of a value in this range and a value in \p Other.
   ConstantRange ashr(const ConstantRange &Other) const;
 
+  /// Perform an unsigned saturating addition of two constant ranges.
+  ConstantRange uadd_sat(const ConstantRange &Other) const;
+
+  /// Perform a signed saturating addition of two constant ranges.
+  ConstantRange sadd_sat(const ConstantRange &Other) const;
+
+  /// Perform an unsigned saturating subtraction of two constant ranges.
+  ConstantRange usub_sat(const ConstantRange &Other) const;
+
+  /// Perform a signed saturating subtraction of two constant ranges.
+  ConstantRange ssub_sat(const ConstantRange &Other) const;
+
   /// Return a new range that is the logical not of the current set.
   ConstantRange inverse() const;
 
+  /// Calculate absolute value range. If the original range contains signed
+  /// min, then the resulting range will also contain signed min.
+  ConstantRange abs() const;
+
+  /// Represents whether an operation on the given constant range is known to
+  /// always or never overflow.
+  enum class OverflowResult {
+    /// Always overflows in the direction of signed/unsigned min value.
+    AlwaysOverflowsLow,
+    /// Always overflows in the direction of signed/unsigned max value.
+    AlwaysOverflowsHigh,
+    /// May or may not overflow.
+    MayOverflow,
+    /// Never overflows.
+    NeverOverflows,
+  };
+
+  /// Return whether unsigned add of the two ranges always/never overflows.
+  OverflowResult unsignedAddMayOverflow(const ConstantRange &Other) const;
+
+  /// Return whether signed add of the two ranges always/never overflows.
+  OverflowResult signedAddMayOverflow(const ConstantRange &Other) const;
+
+  /// Return whether unsigned sub of the two ranges always/never overflows.
+  OverflowResult unsignedSubMayOverflow(const ConstantRange &Other) const;
+
+  /// Return whether signed sub of the two ranges always/never overflows.
+  OverflowResult signedSubMayOverflow(const ConstantRange &Other) const;
+
+  /// Return whether unsigned mul of the two ranges always/never overflows.
+  OverflowResult unsignedMulMayOverflow(const ConstantRange &Other) const;
+
   /// Print out the bounds to a stream.
   void print(raw_ostream &OS) const;
 
diff --git a/linux-x64/clang/include/llvm/IR/DIBuilder.h b/linux-x64/clang/include/llvm/IR/DIBuilder.h
index b575632..ad9a35b 100644
--- a/linux-x64/clang/include/llvm/IR/DIBuilder.h
+++ b/linux-x64/clang/include/llvm/IR/DIBuilder.h
@@ -706,6 +706,16 @@
                  DITemplateParameterArray TParams = nullptr,
                  DITypeArray ThrownTypes = nullptr);
 
+    /// Create common block entry for a Fortran common block.
+    /// \param Scope       Scope of this common block.
+    /// \param decl        Global variable declaration.
+    /// \param Name        The name of this common block.
+    /// \param File        The file this common block is defined.
+    /// \param LineNo      Line number.
+    DICommonBlock *createCommonBlock(DIScope *Scope, DIGlobalVariable *decl,
+                                     StringRef Name, DIFile *File,
+                                     unsigned LineNo);
+
     /// This creates new descriptor for a namespace with the specified
     /// parent scope.
     /// \param Scope       Namespace scope
diff --git a/linux-x64/clang/include/llvm/IR/DataLayout.h b/linux-x64/clang/include/llvm/IR/DataLayout.h
index 274ec23..ac9770a 100644
--- a/linux-x64/clang/include/llvm/IR/DataLayout.h
+++ b/linux-x64/clang/include/llvm/IR/DataLayout.h
@@ -108,6 +108,13 @@
 /// generating LLVM IR is required to generate the right target data for the
 /// target being codegen'd to.
 class DataLayout {
+public:
+  enum class FunctionPtrAlignType {
+    /// The function pointer alignment is independent of the function alignment.
+    Independent,
+    /// The function pointer alignment is a multiple of the function alignment.
+    MultipleOfFunctionAlign,
+  };
 private:
   /// Defaults to false.
   bool BigEndian;
@@ -116,6 +123,9 @@
   unsigned StackNaturalAlign;
   unsigned ProgramAddrSpace;
 
+  unsigned FunctionPtrAlign;
+  FunctionPtrAlignType TheFunctionPtrAlignType;
+
   enum ManglingModeT {
     MM_None,
     MM_ELF,
@@ -199,6 +209,8 @@
     BigEndian = DL.isBigEndian();
     AllocaAddrSpace = DL.AllocaAddrSpace;
     StackNaturalAlign = DL.StackNaturalAlign;
+    FunctionPtrAlign = DL.FunctionPtrAlign;
+    TheFunctionPtrAlignType = DL.TheFunctionPtrAlignType;
     ProgramAddrSpace = DL.ProgramAddrSpace;
     ManglingMode = DL.ManglingMode;
     LegalIntWidths = DL.LegalIntWidths;
@@ -256,6 +268,17 @@
   unsigned getStackAlignment() const { return StackNaturalAlign; }
   unsigned getAllocaAddrSpace() const { return AllocaAddrSpace; }
 
+  /// Returns the alignment of function pointers, which may or may not be
+  /// related to the alignment of functions.
+  /// \see getFunctionPtrAlignType
+  unsigned getFunctionPtrAlign() const { return FunctionPtrAlign; }
+
+  /// Return the type of function pointer alignment.
+  /// \see getFunctionPtrAlign
+  FunctionPtrAlignType getFunctionPtrAlignType() const {
+    return TheFunctionPtrAlignType;
+  }
+
   unsigned getProgramAddressSpace() const { return ProgramAddrSpace; }
 
   bool hasMicrosoftFastStdCallMangling() const {
@@ -345,10 +368,13 @@
     return NonIntegralAddressSpaces;
   }
 
-  bool isNonIntegralPointerType(PointerType *PT) const {
+  bool isNonIntegralAddressSpace(unsigned AddrSpace) const {
     ArrayRef<unsigned> NonIntegralSpaces = getNonIntegralAddressSpaces();
-    return find(NonIntegralSpaces, PT->getAddressSpace()) !=
-           NonIntegralSpaces.end();
+    return find(NonIntegralSpaces, AddrSpace) != NonIntegralSpaces.end();
+  }
+
+  bool isNonIntegralPointerType(PointerType *PT) const {
+    return isNonIntegralAddressSpace(PT->getAddressSpace());
   }
 
   bool isNonIntegralPointerType(Type *Ty) const {
@@ -427,6 +453,14 @@
     return 8 * getTypeStoreSize(Ty);
   }
 
+  /// Returns true if no extra padding bits are needed when storing the
+  /// specified type.
+  ///
+  /// For example, returns false for i19 that has a 24-bit store size.
+  bool typeSizeEqualsStoreSize(Type *Ty) const {
+    return getTypeSizeInBits(Ty) == getTypeStoreSizeInBits(Ty);
+  }
+
   /// Returns the offset in bytes between successive objects of the
   /// specified type, including alignment padding.
   ///
diff --git a/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def b/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def
index f19c04d..07e3d6b 100644
--- a/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def
+++ b/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def
@@ -50,12 +50,12 @@
 HANDLE_DI_FLAG((1 << 18), IntroducedVirtual)
 HANDLE_DI_FLAG((1 << 19), BitField)
 HANDLE_DI_FLAG((1 << 20), NoReturn)
-HANDLE_DI_FLAG((1 << 21), MainSubprogram)
+HANDLE_DI_FLAG((1 << 21), ArgumentNotModified)
 HANDLE_DI_FLAG((1 << 22), TypePassByValue)
 HANDLE_DI_FLAG((1 << 23), TypePassByReference)
 HANDLE_DI_FLAG((1 << 24), EnumClass)
 HANDLE_DI_FLAG((1 << 25), Thunk)
-HANDLE_DI_FLAG((1 << 26), Trivial)
+HANDLE_DI_FLAG((1 << 26), NonTrivial)
 HANDLE_DI_FLAG((1 << 27), BigEndian)
 HANDLE_DI_FLAG((1 << 28), LittleEndian)
 HANDLE_DI_FLAG((1 << 29), AllCallsDescribed)
@@ -84,11 +84,15 @@
 HANDLE_DISP_FLAG((1u << 2), LocalToUnit)
 HANDLE_DISP_FLAG((1u << 3), Definition)
 HANDLE_DISP_FLAG((1u << 4), Optimized)
+HANDLE_DISP_FLAG((1u << 5), Pure)
+HANDLE_DISP_FLAG((1u << 6), Elemental)
+HANDLE_DISP_FLAG((1u << 7), Recursive)
+HANDLE_DISP_FLAG((1u << 8), MainSubprogram)
 
 #ifdef DISP_FLAG_LARGEST_NEEDED
 // Intended to be used with ADT/BitmaskEnum.h.
 // NOTE: Always must be equal to largest flag, check this when adding new flags.
-HANDLE_DISP_FLAG((1 << 4), Largest)
+HANDLE_DISP_FLAG((1 << 8), Largest)
 #undef DISP_FLAG_LARGEST_NEEDED
 #endif
 
diff --git a/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h b/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h
index 385f6e7..9dc6dfb 100644
--- a/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h
+++ b/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h
@@ -60,44 +60,6 @@
 
 namespace llvm {
 
-/// Holds a subclass of DINode.
-///
-/// FIXME: This class doesn't currently make much sense.  Previously it was a
-/// union beteen MDString (for ODR-uniqued types) and things like DIType.  To
-/// support CodeView work, it wasn't deleted outright when MDString-based type
-/// references were deleted; we'll soon need a similar concept for CodeView
-/// DITypeIndex.
-template <class T> class TypedDINodeRef {
-  const Metadata *MD = nullptr;
-
-public:
-  TypedDINodeRef() = default;
-  TypedDINodeRef(std::nullptr_t) {}
-  TypedDINodeRef(const T *MD) : MD(MD) {}
-
-  explicit TypedDINodeRef(const Metadata *MD) : MD(MD) {
-    assert((!MD || isa<T>(MD)) && "Expected valid type ref");
-  }
-
-  template <class U>
-  TypedDINodeRef(
-      const TypedDINodeRef<U> &X,
-      typename std::enable_if<std::is_convertible<U *, T *>::value>::type * =
-          nullptr)
-      : MD(X) {}
-
-  operator Metadata *() const { return const_cast<Metadata *>(MD); }
-
-  T *resolve() const { return const_cast<T *>(cast_or_null<T>(MD)); }
-
-  bool operator==(const TypedDINodeRef<T> &X) const { return MD == X.MD; }
-  bool operator!=(const TypedDINodeRef<T> &X) const { return MD != X.MD; }
-};
-
-using DINodeRef = TypedDINodeRef<DINode>;
-using DIScopeRef = TypedDINodeRef<DIScope>;
-using DITypeRef = TypedDINodeRef<DIType>;
-
 class DITypeRefArray {
   const MDTuple *N = nullptr;
 
@@ -114,17 +76,19 @@
 
   // FIXME: Fix callers and remove condition on N.
   unsigned size() const { return N ? N->getNumOperands() : 0u; }
-  DITypeRef operator[](unsigned I) const { return DITypeRef(N->getOperand(I)); }
+  DIType *operator[](unsigned I) const {
+    return cast_or_null<DIType>(N->getOperand(I));
+  }
 
-  class iterator : std::iterator<std::input_iterator_tag, DITypeRef,
-                                 std::ptrdiff_t, void, DITypeRef> {
+  class iterator : std::iterator<std::input_iterator_tag, DIType *,
+                                 std::ptrdiff_t, void, DIType *> {
     MDNode::op_iterator I = nullptr;
 
   public:
     iterator() = default;
     explicit iterator(MDNode::op_iterator I) : I(I) {}
 
-    DITypeRef operator*() const { return DITypeRef(*I); }
+    DIType *operator*() const { return cast_or_null<DIType>(*I); }
 
     iterator &operator++() {
       ++I;
@@ -227,6 +191,7 @@
     case DILexicalBlockKind:
     case DILexicalBlockFileKind:
     case DINamespaceKind:
+    case DICommonBlockKind:
     case DITemplateTypeParameterKind:
     case DITemplateValueParameterKind:
     case DIGlobalVariableKind:
@@ -240,18 +205,6 @@
   }
 };
 
-template <class T> struct simplify_type<const TypedDINodeRef<T>> {
-  using SimpleType = Metadata *;
-
-  static SimpleType getSimplifiedValue(const TypedDINodeRef<T> &MD) {
-    return MD;
-  }
-};
-
-template <class T>
-struct simplify_type<TypedDINodeRef<T>>
-    : simplify_type<const TypedDINodeRef<T>> {};
-
 /// Generic tagged DWARF-like metadata node.
 ///
 /// An un-specialized DWARF-like metadata node.  The first operand is a
@@ -458,7 +411,7 @@
   inline Optional<StringRef> getSource() const;
 
   StringRef getName() const;
-  DIScopeRef getScope() const;
+  DIScope *getScope() const;
 
   /// Return the raw underlying file.
   ///
@@ -485,6 +438,7 @@
     case DILexicalBlockKind:
     case DILexicalBlockFileKind:
     case DINamespaceKind:
+    case DICommonBlockKind:
     case DIModuleKind:
       return true;
     }
@@ -671,7 +625,7 @@
   uint64_t getOffsetInBits() const { return OffsetInBits; }
   DIFlags getFlags() const { return Flags; }
 
-  DIScopeRef getScope() const { return DIScopeRef(getRawScope()); }
+  DIScope *getScope() const { return cast_or_null<DIScope>(getRawScope()); }
   StringRef getName() const { return getStringOperand(2); }
 
 
@@ -816,14 +770,12 @@
         DWARFAddressSpace(DWARFAddressSpace) {}
   ~DIDerivedType() = default;
 
-  static DIDerivedType *getImpl(LLVMContext &Context, unsigned Tag,
-                                StringRef Name, DIFile *File, unsigned Line,
-                                DIScopeRef Scope, DITypeRef BaseType,
-                                uint64_t SizeInBits, uint32_t AlignInBits,
-                                uint64_t OffsetInBits,
-                                Optional<unsigned> DWARFAddressSpace,
-                                DIFlags Flags, Metadata *ExtraData,
-                                StorageType Storage, bool ShouldCreate = true) {
+  static DIDerivedType *
+  getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, DIFile *File,
+          unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
+          uint32_t AlignInBits, uint64_t OffsetInBits,
+          Optional<unsigned> DWARFAddressSpace, DIFlags Flags,
+          Metadata *ExtraData, StorageType Storage, bool ShouldCreate = true) {
     return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File,
                    Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
                    DWARFAddressSpace, Flags, ExtraData, Storage, ShouldCreate);
@@ -857,7 +809,7 @@
                      ExtraData))
   DEFINE_MDNODE_GET(DIDerivedType,
                     (unsigned Tag, StringRef Name, DIFile *File, unsigned Line,
-                     DIScopeRef Scope, DITypeRef BaseType, uint64_t SizeInBits,
+                     DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
                      uint32_t AlignInBits, uint64_t OffsetInBits,
                      Optional<unsigned> DWARFAddressSpace, DIFlags Flags,
                      Metadata *ExtraData = nullptr),
@@ -868,7 +820,7 @@
   TempDIDerivedType clone() const { return cloneImpl(); }
 
   /// Get the base type this is derived from.
-  DITypeRef getBaseType() const { return DITypeRef(getRawBaseType()); }
+  DIType *getBaseType() const { return cast_or_null<DIType>(getRawBaseType()); }
   Metadata *getRawBaseType() const { return getOperand(3); }
 
   /// \returns The DWARF address space of the memory pointed to or referenced by
@@ -888,9 +840,9 @@
 
   /// Get casted version of extra data.
   /// @{
-  DITypeRef getClassType() const {
+  DIType *getClassType() const {
     assert(getTag() == dwarf::DW_TAG_ptr_to_member_type);
-    return DITypeRef(getExtraData());
+    return cast_or_null<DIType>(getExtraData());
   }
 
   DIObjCProperty *getObjCProperty() const {
@@ -962,12 +914,12 @@
 
   static DICompositeType *
   getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
-          unsigned Line, DIScopeRef Scope, DITypeRef BaseType,
-          uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
-          DIFlags Flags, DINodeArray Elements, unsigned RuntimeLang,
-          DITypeRef VTableHolder, DITemplateParameterArray TemplateParams,
-          StringRef Identifier, DIDerivedType *Discriminator,
-          StorageType Storage, bool ShouldCreate = true) {
+          unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
+          uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
+          DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder,
+          DITemplateParameterArray TemplateParams, StringRef Identifier,
+          DIDerivedType *Discriminator, StorageType Storage,
+          bool ShouldCreate = true) {
     return getImpl(
         Context, Tag, getCanonicalMDString(Context, Name), File, Line, Scope,
         BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, Elements.get(),
@@ -994,12 +946,13 @@
 public:
   DEFINE_MDNODE_GET(DICompositeType,
                     (unsigned Tag, StringRef Name, DIFile *File, unsigned Line,
-                     DIScopeRef Scope, DITypeRef BaseType, uint64_t SizeInBits,
-                     uint32_t AlignInBits, uint64_t OffsetInBits,
-                     DIFlags Flags, DINodeArray Elements, unsigned RuntimeLang,
-                     DITypeRef VTableHolder,
+                     DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
+                     uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
+                     DINodeArray Elements, unsigned RuntimeLang,
+                     DIType *VTableHolder,
                      DITemplateParameterArray TemplateParams = nullptr,
-                     StringRef Identifier = "", DIDerivedType *Discriminator = nullptr),
+                     StringRef Identifier = "",
+                     DIDerivedType *Discriminator = nullptr),
                     (Tag, Name, File, Line, Scope, BaseType, SizeInBits,
                      AlignInBits, OffsetInBits, Flags, Elements, RuntimeLang,
                      VTableHolder, TemplateParams, Identifier, Discriminator))
@@ -1052,11 +1005,13 @@
                unsigned RuntimeLang, Metadata *VTableHolder,
                Metadata *TemplateParams, Metadata *Discriminator);
 
-  DITypeRef getBaseType() const { return DITypeRef(getRawBaseType()); }
+  DIType *getBaseType() const { return cast_or_null<DIType>(getRawBaseType()); }
   DINodeArray getElements() const {
     return cast_or_null<MDTuple>(getRawElements());
   }
-  DITypeRef getVTableHolder() const { return DITypeRef(getRawVTableHolder()); }
+  DIType *getVTableHolder() const {
+    return cast_or_null<DIType>(getRawVTableHolder());
+  }
   DITemplateParameterArray getTemplateParams() const {
     return cast_or_null<MDTuple>(getRawTemplateParams());
   }
@@ -1086,7 +1041,7 @@
     replaceOperandWith(4, Elements.get());
   }
 
-  void replaceVTableHolder(DITypeRef VTableHolder) {
+  void replaceVTableHolder(DIType *VTableHolder) {
     replaceOperandWith(5, VTableHolder);
   }
 
@@ -1635,9 +1590,6 @@
 };
 
 /// Subprogram description.
-///
-/// TODO: Remove DisplayName.  It's always equal to Name.
-/// TODO: Split up flags.
 class DISubprogram : public DILocalScope {
   friend class LLVMContextImpl;
   friend class MDNode;
@@ -1675,7 +1627,8 @@
   // Helper for converting old bitfields to new flags word.
   static DISPFlags toSPFlags(bool IsLocalToUnit, bool IsDefinition,
                              bool IsOptimized,
-                             unsigned Virtuality = SPFlagNonvirtual) {
+                             unsigned Virtuality = SPFlagNonvirtual,
+                             bool IsMainSubprogram = false) {
     // We're assuming virtuality is the low-order field.
     static_assert(
         int(SPFlagVirtual) == int(dwarf::DW_VIRTUALITY_virtual) &&
@@ -1685,7 +1638,8 @@
         (Virtuality & SPFlagVirtuality) |
         (IsLocalToUnit ? SPFlagLocalToUnit : SPFlagZero) |
         (IsDefinition ? SPFlagDefinition : SPFlagZero) |
-        (IsOptimized ? SPFlagOptimized : SPFlagZero));
+        (IsOptimized ? SPFlagOptimized : SPFlagZero) |
+        (IsMainSubprogram ? SPFlagMainSubprogram : SPFlagZero));
   }
 
 private:
@@ -1704,9 +1658,9 @@
   ~DISubprogram() = default;
 
   static DISubprogram *
-  getImpl(LLVMContext &Context, DIScopeRef Scope, StringRef Name,
+  getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name,
           StringRef LinkageName, DIFile *File, unsigned Line,
-          DISubroutineType *Type, unsigned ScopeLine, DITypeRef ContainingType,
+          DISubroutineType *Type, unsigned ScopeLine, DIType *ContainingType,
           unsigned VirtualIndex, int ThisAdjustment, DIFlags Flags,
           DISPFlags SPFlags, DICompileUnit *Unit,
           DITemplateParameterArray TemplateParams, DISubprogram *Declaration,
@@ -1741,9 +1695,9 @@
 public:
   DEFINE_MDNODE_GET(
       DISubprogram,
-      (DIScopeRef Scope, StringRef Name, StringRef LinkageName, DIFile *File,
+      (DIScope * Scope, StringRef Name, StringRef LinkageName, DIFile *File,
        unsigned Line, DISubroutineType *Type, unsigned ScopeLine,
-       DITypeRef ContainingType, unsigned VirtualIndex, int ThisAdjustment,
+       DIType *ContainingType, unsigned VirtualIndex, int ThisAdjustment,
        DIFlags Flags, DISPFlags SPFlags, DICompileUnit *Unit,
        DITemplateParameterArray TemplateParams = nullptr,
        DISubprogram *Declaration = nullptr, DINodeArray RetainedNodes = nullptr,
@@ -1784,6 +1738,7 @@
   bool isLocalToUnit() const { return getSPFlags() & SPFlagLocalToUnit; }
   bool isDefinition() const { return getSPFlags() & SPFlagDefinition; }
   bool isOptimized() const { return getSPFlags() & SPFlagOptimized; }
+  bool isMainSubprogram() const { return getSPFlags() & SPFlagMainSubprogram; }
 
   bool isArtificial() const { return getFlags() & FlagArtificial; }
   bool isPrivate() const {
@@ -1800,7 +1755,9 @@
   bool areAllCallsDescribed() const {
     return getFlags() & FlagAllCallsDescribed;
   }
-  bool isMainSubprogram() const { return getFlags() & FlagMainSubprogram; }
+  bool isPure() const { return getSPFlags() & SPFlagPure; }
+  bool isElemental() const { return getSPFlags() & SPFlagElemental; }
+  bool isRecursive() const { return getSPFlags() & SPFlagRecursive; }
 
   /// Check if this is reference-qualified.
   ///
@@ -1824,7 +1781,7 @@
   // Returns true if this subprogram is a thunk generated by the compiler.
   bool isThunk() const { return getFlags() & FlagThunk; }
 
-  DIScopeRef getScope() const { return DIScopeRef(getRawScope()); }
+  DIScope *getScope() const { return cast_or_null<DIScope>(getRawScope()); }
 
   StringRef getName() const { return getStringOperand(2); }
   StringRef getLinkageName() const { return getStringOperand(3); }
@@ -1832,8 +1789,8 @@
   DISubroutineType *getType() const {
     return cast_or_null<DISubroutineType>(getRawType());
   }
-  DITypeRef getContainingType() const {
-    return DITypeRef(getRawContainingType());
+  DIType *getContainingType() const {
+    return cast_or_null<DIType>(getRawContainingType());
   }
 
   DICompileUnit *getUnit() const {
@@ -2178,7 +2135,7 @@
 
 public:
   StringRef getName() const { return getStringOperand(0); }
-  DITypeRef getType() const { return DITypeRef(getRawType()); }
+  DIType *getType() const { return cast_or_null<DIType>(getRawType()); }
 
   MDString *getRawName() const { return getOperandAs<MDString>(0); }
   Metadata *getRawType() const { return getOperand(1); }
@@ -2200,7 +2157,7 @@
   ~DITemplateTypeParameter() = default;
 
   static DITemplateTypeParameter *getImpl(LLVMContext &Context, StringRef Name,
-                                          DITypeRef Type, StorageType Storage,
+                                          DIType *Type, StorageType Storage,
                                           bool ShouldCreate = true) {
     return getImpl(Context, getCanonicalMDString(Context, Name), Type, Storage,
                    ShouldCreate);
@@ -2214,7 +2171,7 @@
   }
 
 public:
-  DEFINE_MDNODE_GET(DITemplateTypeParameter, (StringRef Name, DITypeRef Type),
+  DEFINE_MDNODE_GET(DITemplateTypeParameter, (StringRef Name, DIType *Type),
                     (Name, Type))
   DEFINE_MDNODE_GET(DITemplateTypeParameter, (MDString * Name, Metadata *Type),
                     (Name, Type))
@@ -2237,7 +2194,7 @@
   ~DITemplateValueParameter() = default;
 
   static DITemplateValueParameter *getImpl(LLVMContext &Context, unsigned Tag,
-                                           StringRef Name, DITypeRef Type,
+                                           StringRef Name, DIType *Type,
                                            Metadata *Value, StorageType Storage,
                                            bool ShouldCreate = true) {
     return getImpl(Context, Tag, getCanonicalMDString(Context, Name), Type,
@@ -2254,8 +2211,9 @@
   }
 
 public:
-  DEFINE_MDNODE_GET(DITemplateValueParameter, (unsigned Tag, StringRef Name,
-                                               DITypeRef Type, Metadata *Value),
+  DEFINE_MDNODE_GET(DITemplateValueParameter,
+                    (unsigned Tag, StringRef Name, DIType *Type,
+                     Metadata *Value),
                     (Tag, Name, Type, Value))
   DEFINE_MDNODE_GET(DITemplateValueParameter, (unsigned Tag, MDString *Name,
                                                Metadata *Type, Metadata *Value),
@@ -2287,7 +2245,7 @@
   DIScope *getScope() const { return cast_or_null<DIScope>(getRawScope()); }
   StringRef getName() const { return getStringOperand(1); }
   DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
-  DITypeRef getType() const { return DITypeRef(getRawType()); }
+  DIType *getType() const { return cast_or_null<DIType>(getRawType()); }
   uint32_t getAlignInBits() const { return AlignInBits; }
   uint32_t getAlignInBytes() const { return getAlignInBits() / CHAR_BIT; }
   /// Determines the size of the variable's type.
@@ -2296,7 +2254,7 @@
   /// Return the signedness of this variable's type, or None if this type is
   /// neither signed nor unsigned.
   Optional<DIBasicType::Signedness> getSignedness() const {
-    if (auto *BT = dyn_cast<DIBasicType>(getType().resolve()))
+    if (auto *BT = dyn_cast<DIBasicType>(getType()))
       return BT->getSignedness();
     return None;
   }
@@ -2503,6 +2461,13 @@
   /// Return whether this is a piece of an aggregate variable.
   bool isFragment() const { return getFragmentInfo().hasValue(); }
 
+  /// Return whether this is an implicit location description.
+  bool isImplicit() const;
+
+  /// Return whether the location is computed on the expression stack, meaning
+  /// it cannot be a simple register location.
+  bool isComplex() const;
+
   /// Append \p Ops with operations to apply the \p Offset.
   static void appendOffset(SmallVectorImpl<uint64_t> &Ops, int64_t Offset);
 
@@ -2516,20 +2481,26 @@
   static const DIExpression *extractAddressClass(const DIExpression *Expr,
                                                  unsigned &AddrClass);
 
-  /// Constants for DIExpression::prepend.
-  enum { NoDeref = false, WithDeref = true, WithStackValue = true };
+  /// Used for DIExpression::prepend.
+  enum PrependOps : uint8_t {
+    ApplyOffset = 0,
+    DerefBefore = 1 << 0,
+    DerefAfter = 1 << 1,
+    StackValue = 1 << 2,
+    EntryValue = 1 << 3
+  };
 
   /// Prepend \p DIExpr with a deref and offset operation and optionally turn it
-  /// into a stack value.
-  static DIExpression *prepend(const DIExpression *Expr, bool DerefBefore,
-                               int64_t Offset = 0, bool DerefAfter = false,
-                               bool StackValue = false);
+  /// into a stack value or/and an entry value.
+  static DIExpression *prepend(const DIExpression *Expr, uint8_t Flags,
+                               int64_t Offset = 0);
 
   /// Prepend \p DIExpr with the given opcodes and optionally turn it into a
   /// stack value.
   static DIExpression *prependOpcodes(const DIExpression *Expr,
                                       SmallVectorImpl<uint64_t> &Ops,
-                                      bool StackValue = false);
+                                      bool StackValue = false,
+                                      bool EntryValue = false);
 
   /// Append the opcodes \p Ops to \p DIExpr. Unlike \ref appendToStack, the
   /// returned expression is a stack value only if \p DIExpr is a stack value.
@@ -2558,17 +2529,14 @@
   createFragmentExpression(const DIExpression *Expr, unsigned OffsetInBits,
                            unsigned SizeInBits);
 
-  /// Determine the relative position of the fragments described by this
-  /// DIExpression and \p Other.
+  /// Determine the relative position of the fragments passed in.
   /// Returns -1 if this is entirely before Other, 0 if this and Other overlap,
   /// 1 if this is entirely after Other.
-  int fragmentCmp(const DIExpression *Other) const {
-    auto Fragment1 = *getFragmentInfo();
-    auto Fragment2 = *Other->getFragmentInfo();
-    unsigned l1 = Fragment1.OffsetInBits;
-    unsigned l2 = Fragment2.OffsetInBits;
-    unsigned r1 = l1 + Fragment1.SizeInBits;
-    unsigned r2 = l2 + Fragment2.SizeInBits;
+  static int fragmentCmp(const FragmentInfo &A, const FragmentInfo &B) {
+    uint64_t l1 = A.OffsetInBits;
+    uint64_t l2 = B.OffsetInBits;
+    uint64_t r1 = l1 + A.SizeInBits;
+    uint64_t r2 = l2 + B.SizeInBits;
     if (r1 <= l2)
       return -1;
     else if (r2 <= l1)
@@ -2577,12 +2545,59 @@
       return 0;
   }
 
+  /// Check if fragments overlap between a pair of FragmentInfos.
+  static bool fragmentsOverlap(const FragmentInfo &A, const FragmentInfo &B) {
+    return fragmentCmp(A, B) == 0;
+  }
+
+  /// Determine the relative position of the fragments described by this
+  /// DIExpression and \p Other. Calls static fragmentCmp implementation.
+  int fragmentCmp(const DIExpression *Other) const {
+    auto Fragment1 = *getFragmentInfo();
+    auto Fragment2 = *Other->getFragmentInfo();
+    return fragmentCmp(Fragment1, Fragment2);
+  }
+
   /// Check if fragments overlap between this DIExpression and \p Other.
   bool fragmentsOverlap(const DIExpression *Other) const {
     if (!isFragment() || !Other->isFragment())
       return true;
     return fragmentCmp(Other) == 0;
   }
+
+  /// Check if the expression consists of exactly one entry value operand.
+  /// (This is the only configuration of entry values that is supported.)
+  bool isEntryValue() const {
+    return getNumElements() > 0 &&
+           getElement(0) == dwarf::DW_OP_entry_value;
+  }
+};
+
+inline bool operator==(const DIExpression::FragmentInfo &A,
+                       const DIExpression::FragmentInfo &B) {
+  return std::tie(A.SizeInBits, A.OffsetInBits) ==
+         std::tie(B.SizeInBits, B.OffsetInBits);
+}
+
+inline bool operator<(const DIExpression::FragmentInfo &A,
+                      const DIExpression::FragmentInfo &B) {
+  return std::tie(A.SizeInBits, A.OffsetInBits) <
+         std::tie(B.SizeInBits, B.OffsetInBits);
+}
+
+template <> struct DenseMapInfo<DIExpression::FragmentInfo> {
+  using FragInfo = DIExpression::FragmentInfo;
+  static const uint64_t MaxVal = std::numeric_limits<uint64_t>::max();
+
+  static inline FragInfo getEmptyKey() { return {MaxVal, MaxVal}; }
+
+  static inline FragInfo getTombstoneKey() { return {MaxVal - 1, MaxVal - 1}; }
+
+  static unsigned getHashValue(const FragInfo &Frag) {
+    return (Frag.SizeInBits & 0xffff) << 16 | (Frag.OffsetInBits & 0xffff);
+  }
+
+  static bool isEqual(const FragInfo &A, const FragInfo &B) { return A == B; }
 };
 
 /// Global variables.
@@ -2604,7 +2619,7 @@
 
   static DIGlobalVariable *
   getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name,
-          StringRef LinkageName, DIFile *File, unsigned Line, DITypeRef Type,
+          StringRef LinkageName, DIFile *File, unsigned Line, DIType *Type,
           bool IsLocalToUnit, bool IsDefinition,
           DIDerivedType *StaticDataMemberDeclaration, MDTuple *TemplateParams,
           uint32_t AlignInBits, StorageType Storage, bool ShouldCreate = true) {
@@ -2631,7 +2646,7 @@
 public:
   DEFINE_MDNODE_GET(DIGlobalVariable,
                     (DIScope * Scope, StringRef Name, StringRef LinkageName,
-                     DIFile *File, unsigned Line, DITypeRef Type,
+                     DIFile *File, unsigned Line, DIType *Type,
                      bool IsLocalToUnit, bool IsDefinition,
                      DIDerivedType *StaticDataMemberDeclaration,
                      MDTuple *TemplateParams, uint32_t AlignInBits),
@@ -2668,6 +2683,65 @@
   }
 };
 
+class DICommonBlock : public DIScope {
+  unsigned LineNo;
+
+  friend class LLVMContextImpl;
+  friend class MDNode;
+
+  DICommonBlock(LLVMContext &Context, StorageType Storage, unsigned LineNo,
+                ArrayRef<Metadata *> Ops)
+      : DIScope(Context, DICommonBlockKind, Storage, dwarf::DW_TAG_common_block,
+                Ops), LineNo(LineNo) {}
+
+  static DICommonBlock *getImpl(LLVMContext &Context, DIScope *Scope,
+                                DIGlobalVariable *Decl, StringRef Name,
+                                DIFile *File, unsigned LineNo,
+                                StorageType Storage,
+                                bool ShouldCreate = true) {
+    return getImpl(Context, Scope, Decl, getCanonicalMDString(Context, Name),
+                   File, LineNo, Storage, ShouldCreate);
+  }
+  static DICommonBlock *getImpl(LLVMContext &Context, Metadata *Scope,
+                                Metadata *Decl, MDString *Name, Metadata *File,
+                                unsigned LineNo, 
+                                StorageType Storage, bool ShouldCreate = true);
+
+  TempDICommonBlock cloneImpl() const {
+    return getTemporary(getContext(), getScope(), getDecl(), getName(),
+                        getFile(), getLineNo());
+  }
+
+public:
+  DEFINE_MDNODE_GET(DICommonBlock,
+                    (DIScope *Scope, DIGlobalVariable *Decl, StringRef Name,
+                     DIFile *File, unsigned LineNo),
+                    (Scope, Decl, Name, File, LineNo))
+  DEFINE_MDNODE_GET(DICommonBlock,
+                    (Metadata *Scope, Metadata *Decl, MDString *Name,
+                     Metadata *File, unsigned LineNo),
+                    (Scope, Decl, Name, File, LineNo))
+
+  TempDICommonBlock clone() const { return cloneImpl(); }
+
+  DIScope *getScope() const { return cast_or_null<DIScope>(getRawScope()); }
+  DIGlobalVariable *getDecl() const {
+    return cast_or_null<DIGlobalVariable>(getRawDecl());
+  }
+  StringRef getName() const { return getStringOperand(2); }
+  DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
+  unsigned getLineNo() const { return LineNo; }
+
+  Metadata *getRawScope() const { return getOperand(0); }
+  Metadata *getRawDecl() const { return getOperand(1); }
+  MDString *getRawName() const { return getOperandAs<MDString>(2); }
+  Metadata *getRawFile() const { return getOperand(3); }
+
+  static bool classof(const Metadata *MD) {
+    return MD->getMetadataID() == DICommonBlockKind;
+  }
+};
+
 /// Local variable.
 ///
 /// TODO: Split up flags.
@@ -2689,7 +2763,7 @@
 
   static DILocalVariable *getImpl(LLVMContext &Context, DIScope *Scope,
                                   StringRef Name, DIFile *File, unsigned Line,
-                                  DITypeRef Type, unsigned Arg, DIFlags Flags,
+                                  DIType *Type, unsigned Arg, DIFlags Flags,
                                   uint32_t AlignInBits, StorageType Storage,
                                   bool ShouldCreate = true) {
     return getImpl(Context, Scope, getCanonicalMDString(Context, Name), File,
@@ -2710,8 +2784,8 @@
 public:
   DEFINE_MDNODE_GET(DILocalVariable,
                     (DILocalScope * Scope, StringRef Name, DIFile *File,
-                     unsigned Line, DITypeRef Type, unsigned Arg,
-                     DIFlags Flags, uint32_t AlignInBits),
+                     unsigned Line, DIType *Type, unsigned Arg, DIFlags Flags,
+                     uint32_t AlignInBits),
                     (Scope, Name, File, Line, Type, Arg, Flags, AlignInBits))
   DEFINE_MDNODE_GET(DILocalVariable,
                     (Metadata * Scope, MDString *Name, Metadata *File,
@@ -2735,6 +2809,11 @@
   bool isArtificial() const { return getFlags() & FlagArtificial; }
   bool isObjectPointer() const { return getFlags() & FlagObjectPointer; }
 
+  /// Check that an argument is unmodified.
+  bool isNotModified() const { return getFlags() & FlagArgumentNotModified; }
+  /// Set the flag if an argument is unmodified.
+  void setIsNotModified() { Flags |= FlagArgumentNotModified; }
+
   /// Check that a location is valid for this variable.
   ///
   /// Check that \c DL exists, is in the same subprogram, and has the same
@@ -2836,7 +2915,7 @@
   static DIObjCProperty *
   getImpl(LLVMContext &Context, StringRef Name, DIFile *File, unsigned Line,
           StringRef GetterName, StringRef SetterName, unsigned Attributes,
-          DITypeRef Type, StorageType Storage, bool ShouldCreate = true) {
+          DIType *Type, StorageType Storage, bool ShouldCreate = true) {
     return getImpl(Context, getCanonicalMDString(Context, Name), File, Line,
                    getCanonicalMDString(Context, GetterName),
                    getCanonicalMDString(Context, SetterName), Attributes, Type,
@@ -2858,7 +2937,7 @@
   DEFINE_MDNODE_GET(DIObjCProperty,
                     (StringRef Name, DIFile *File, unsigned Line,
                      StringRef GetterName, StringRef SetterName,
-                     unsigned Attributes, DITypeRef Type),
+                     unsigned Attributes, DIType *Type),
                     (Name, File, Line, GetterName, SetterName, Attributes,
                      Type))
   DEFINE_MDNODE_GET(DIObjCProperty,
@@ -2876,7 +2955,7 @@
   DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
   StringRef getGetterName() const { return getStringOperand(2); }
   StringRef getSetterName() const { return getStringOperand(3); }
-  DITypeRef getType() const { return DITypeRef(getRawType()); }
+  DIType *getType() const { return cast_or_null<DIType>(getRawType()); }
 
   StringRef getFilename() const {
     if (auto *F = getFile())
@@ -2920,8 +2999,8 @@
   ~DIImportedEntity() = default;
 
   static DIImportedEntity *getImpl(LLVMContext &Context, unsigned Tag,
-                                   DIScope *Scope, DINodeRef Entity,
-                                   DIFile *File, unsigned Line, StringRef Name,
+                                   DIScope *Scope, DINode *Entity, DIFile *File,
+                                   unsigned Line, StringRef Name,
                                    StorageType Storage,
                                    bool ShouldCreate = true) {
     return getImpl(Context, Tag, Scope, Entity, File, Line,
@@ -2940,8 +3019,8 @@
 
 public:
   DEFINE_MDNODE_GET(DIImportedEntity,
-                    (unsigned Tag, DIScope *Scope, DINodeRef Entity,
-                     DIFile *File, unsigned Line, StringRef Name = ""),
+                    (unsigned Tag, DIScope *Scope, DINode *Entity, DIFile *File,
+                     unsigned Line, StringRef Name = ""),
                     (Tag, Scope, Entity, File, Line, Name))
   DEFINE_MDNODE_GET(DIImportedEntity,
                     (unsigned Tag, Metadata *Scope, Metadata *Entity,
@@ -2952,7 +3031,7 @@
 
   unsigned getLine() const { return Line; }
   DIScope *getScope() const { return cast_or_null<DIScope>(getRawScope()); }
-  DINodeRef getEntity() const { return DINodeRef(getRawEntity()); }
+  DINode *getEntity() const { return cast_or_null<DINode>(getRawEntity()); }
   StringRef getName() const { return getStringOperand(2); }
   DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
 
diff --git a/linux-x64/clang/include/llvm/IR/DerivedTypes.h b/linux-x64/clang/include/llvm/IR/DerivedTypes.h
index 5bf3729..3c1d427 100644
--- a/linux-x64/clang/include/llvm/IR/DerivedTypes.h
+++ b/linux-x64/clang/include/llvm/IR/DerivedTypes.h
@@ -23,6 +23,7 @@
 #include "llvm/IR/Type.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
+#include "llvm/Support/ScalableSize.h"
 #include <cassert>
 #include <cstdint>
 
@@ -387,6 +388,8 @@
   SequentialType(const SequentialType &) = delete;
   SequentialType &operator=(const SequentialType &) = delete;
 
+  /// For scalable vectors, this will return the minimum number of elements
+  /// in the vector.
   uint64_t getNumElements() const { return NumElements; }
   Type *getElementType() const { return ContainedType; }
 
@@ -422,14 +425,37 @@
 
 /// Class to represent vector types.
 class VectorType : public SequentialType {
-  VectorType(Type *ElType, unsigned NumEl);
+  /// A fully specified VectorType is of the form <vscale x n x Ty>. 'n' is the
+  /// minimum number of elements of type Ty contained within the vector, and
+  /// 'vscale x' indicates that the total element count is an integer multiple
+  /// of 'n', where the multiple is either guaranteed to be one, or is
+  /// statically unknown at compile time.
+  ///
+  /// If the multiple is known to be 1, then the extra term is discarded in
+  /// textual IR:
+  ///
+  /// <4 x i32>          - a vector containing 4 i32s
+  /// <vscale x 4 x i32> - a vector containing an unknown integer multiple
+  ///                      of 4 i32s
+
+  VectorType(Type *ElType, unsigned NumEl, bool Scalable = false);
+  VectorType(Type *ElType, ElementCount EC);
+
+  // If true, the total number of elements is an unknown multiple of the
+  // minimum 'NumElements' from SequentialType. Otherwise the total number
+  // of elements is exactly equal to 'NumElements'.
+  bool Scalable;
 
 public:
   VectorType(const VectorType &) = delete;
   VectorType &operator=(const VectorType &) = delete;
 
   /// This static method is the primary way to construct an VectorType.
-  static VectorType *get(Type *ElementType, unsigned NumElements);
+  static VectorType *get(Type *ElementType, ElementCount EC);
+  static VectorType *get(Type *ElementType, unsigned NumElements,
+                         bool Scalable = false) {
+    return VectorType::get(ElementType, {NumElements, Scalable});
+  }
 
   /// This static method gets a VectorType with the same number of elements as
   /// the input type, and the element type is an integer type of the same width
@@ -438,7 +464,7 @@
     unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
     assert(EltBits && "Element size must be of a non-zero size");
     Type *EltTy = IntegerType::get(VTy->getContext(), EltBits);
-    return VectorType::get(EltTy, VTy->getNumElements());
+    return VectorType::get(EltTy, VTy->getElementCount());
   }
 
   /// This static method is like getInteger except that the element types are
@@ -446,7 +472,7 @@
   static VectorType *getExtendedElementVectorType(VectorType *VTy) {
     unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
     Type *EltTy = IntegerType::get(VTy->getContext(), EltBits * 2);
-    return VectorType::get(EltTy, VTy->getNumElements());
+    return VectorType::get(EltTy, VTy->getElementCount());
   }
 
   /// This static method is like getInteger except that the element types are
@@ -456,29 +482,45 @@
     assert((EltBits & 1) == 0 &&
            "Cannot truncate vector element with odd bit-width");
     Type *EltTy = IntegerType::get(VTy->getContext(), EltBits / 2);
-    return VectorType::get(EltTy, VTy->getNumElements());
+    return VectorType::get(EltTy, VTy->getElementCount());
   }
 
   /// This static method returns a VectorType with half as many elements as the
   /// input type and the same element type.
   static VectorType *getHalfElementsVectorType(VectorType *VTy) {
-    unsigned NumElts = VTy->getNumElements();
-    assert ((NumElts & 1) == 0 &&
+    auto EltCnt = VTy->getElementCount();
+    assert ((EltCnt.Min & 1) == 0 &&
             "Cannot halve vector with odd number of elements.");
-    return VectorType::get(VTy->getElementType(), NumElts/2);
+    return VectorType::get(VTy->getElementType(), EltCnt/2);
   }
 
   /// This static method returns a VectorType with twice as many elements as the
   /// input type and the same element type.
   static VectorType *getDoubleElementsVectorType(VectorType *VTy) {
-    unsigned NumElts = VTy->getNumElements();
-    return VectorType::get(VTy->getElementType(), NumElts*2);
+    auto EltCnt = VTy->getElementCount();
+    assert((VTy->getNumElements() * 2ull) <= UINT_MAX &&
+           "Too many elements in vector");
+    return VectorType::get(VTy->getElementType(), EltCnt*2);
   }
 
   /// Return true if the specified type is valid as a element type.
   static bool isValidElementType(Type *ElemTy);
 
-  /// Return the number of bits in the Vector type.
+  /// Return an ElementCount instance to represent the (possibly scalable)
+  /// number of elements in the vector.
+  ElementCount getElementCount() const {
+    uint64_t MinimumEltCnt = getNumElements();
+    assert(MinimumEltCnt <= UINT_MAX && "Too many elements in vector");
+    return { (unsigned)MinimumEltCnt, Scalable };
+  }
+
+  /// Returns whether or not this is a scalable vector (meaning the total
+  /// element count is a multiple of the minimum).
+  bool isScalable() const {
+    return Scalable;
+  }
+
+  /// Return the minimum number of bits in the Vector type.
   /// Returns zero when the vector is a vector of pointers.
   unsigned getBitWidth() const {
     return getNumElements() * getElementType()->getPrimitiveSizeInBits();
@@ -494,6 +536,10 @@
   return cast<VectorType>(this)->getNumElements();
 }
 
+bool Type::getVectorIsScalable() const {
+  return cast<VectorType>(this)->isScalable();
+}
+
 /// Class to represent pointers.
 class PointerType : public Type {
   explicit PointerType(Type *ElType, unsigned AddrSpace);
diff --git a/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h b/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h
index af1e297..55e5e59 100644
--- a/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h
+++ b/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h
@@ -1,4 +1,4 @@
-//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM -*- C++ ---*-===//
+//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM ---*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
diff --git a/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h b/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h
index ab4c692..3736632 100644
--- a/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h
+++ b/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h
@@ -465,12 +465,15 @@
   virtual bool isEnabled() const = 0;
 
   StringRef getPassName() const { return PassName; }
+  StringRef getRemarkName() const { return RemarkName; }
   std::string getMsg() const;
   Optional<uint64_t> getHotness() const { return Hotness; }
   void setHotness(Optional<uint64_t> H) { Hotness = H; }
 
   bool isVerbose() const { return IsVerbose; }
 
+  ArrayRef<Argument> getArgs() const { return Args; }
+
   static bool classof(const DiagnosticInfo *DI) {
     return (DI->getKind() >= DK_FirstRemark &&
             DI->getKind() <= DK_LastRemark) ||
@@ -500,7 +503,7 @@
   const char *PassName;
 
   /// Textual identifier for the remark (single-word, camel-case). Can be used
-  /// by external tools reading the YAML output file for optimization remarks to
+  /// by external tools reading the output file for optimization remarks to
   /// identify the remark.
   StringRef RemarkName;
 
@@ -518,8 +521,6 @@
   /// the optimization records and not in the remark printed in the compiler
   /// output.
   int FirstExtraArgIndex = -1;
-
-  friend struct yaml::MappingTraits<DiagnosticInfoOptimizationBase *>;
 };
 
 /// Allow the insertion operator to return the actual remark type rather than a
@@ -1001,12 +1002,6 @@
   void print(DiagnosticPrinter &DP) const override;
 };
 
-namespace yaml {
-template <> struct MappingTraits<DiagnosticInfoOptimizationBase *> {
-  static void mapping(IO &io, DiagnosticInfoOptimizationBase *&OptDiag);
-};
-} // namespace yaml
-
 } // end namespace llvm
 
 #endif // LLVM_IR_DIAGNOSTICINFO_H
diff --git a/linux-x64/clang/include/llvm/IR/Function.h b/linux-x64/clang/include/llvm/IR/Function.h
index 7184cb4..7fa61e1 100644
--- a/linux-x64/clang/include/llvm/IR/Function.h
+++ b/linux-x64/clang/include/llvm/IR/Function.h
@@ -296,15 +296,18 @@
 
   /// Get the entry count for this function.
   ///
-  /// Entry count is the number of times the function was executed based on
-  /// pgo data.
-  ProfileCount getEntryCount() const;
+  /// Entry count is the number of times the function was executed.
+  /// When AllowSynthetic is false, only pgo_data will be returned.
+  ProfileCount getEntryCount(bool AllowSynthetic = false) const;
 
   /// Return true if the function is annotated with profile data.
   ///
   /// Presence of entry counts from a profile run implies the function has
-  /// profile annotations.
-  bool hasProfileData() const { return getEntryCount().hasValue(); }
+  /// profile annotations. If IncludeSynthetic is false, only return true
+  /// when the profile data is real.
+  bool hasProfileData(bool IncludeSynthetic = false) const {
+    return getEntryCount(IncludeSynthetic).hasValue();
+  }
 
   /// Returns the set of GUIDs that needs to be imported to the function for
   /// sample PGO, to enable the same inlines as the profiled optimized binary.
@@ -398,6 +401,11 @@
     return getAttributes().hasParamAttribute(ArgNo, Kind);
   }
 
+  /// gets the specified attribute from the list of attributes.
+  Attribute getParamAttribute(unsigned ArgNo, Attribute::AttrKind Kind) const {
+    return getAttributes().getParamAttr(ArgNo, Kind);
+  }
+
   /// gets the attribute from the list of attributes.
   Attribute getAttribute(unsigned i, Attribute::AttrKind Kind) const {
     return AttributeSets.getAttribute(i, Kind);
@@ -428,6 +436,12 @@
     return AttributeSets.getParamAlignment(ArgNo);
   }
 
+  /// Extract the byval type for a parameter.
+  Type *getParamByValType(unsigned ArgNo) const {
+    Type *Ty = AttributeSets.getParamByValType(ArgNo);
+    return Ty ? Ty : (arg_begin() + ArgNo)->getType()->getPointerElementType();
+  }
+
   /// Extract the number of dereferenceable bytes for a call or
   /// parameter (0=unknown).
   /// @param i AttributeList index, referring to a return value or argument.
@@ -550,6 +564,14 @@
     addFnAttr(Attribute::Speculatable);
   }
 
+  /// Determine if the call might deallocate memory.
+  bool doesNotFreeMemory() const {
+    return onlyReadsMemory() || hasFnAttribute(Attribute::NoFree);
+  }
+  void setDoesNotFreeMemory() {
+    addFnAttr(Attribute::NoFree);
+  }
+
   /// Determine if the function is known not to recurse, directly or
   /// indirectly.
   bool doesNotRecurse() const {
@@ -590,12 +612,15 @@
     addAttribute(AttributeList::ReturnIndex, Attribute::NoAlias);
   }
 
+  /// Do not optimize this function (-O0).
+  bool hasOptNone() const { return hasFnAttribute(Attribute::OptimizeNone); }
+
   /// Optimize this function for minimum size (-Oz).
-  bool optForMinSize() const { return hasFnAttribute(Attribute::MinSize); }
+  bool hasMinSize() const { return hasFnAttribute(Attribute::MinSize); }
 
   /// Optimize this function for size (-Os) or minimum size (-Oz).
-  bool optForSize() const {
-    return hasFnAttribute(Attribute::OptimizeForSize) || optForMinSize();
+  bool hasOptSize() const {
+    return hasFnAttribute(Attribute::OptimizeForSize) || hasMinSize();
   }
 
   /// copyAttributesFrom - copy all additional attributes (those not needed to
diff --git a/linux-x64/clang/include/llvm/IR/GlobalValue.h b/linux-x64/clang/include/llvm/IR/GlobalValue.h
index d78ce62..2209881 100644
--- a/linux-x64/clang/include/llvm/IR/GlobalValue.h
+++ b/linux-x64/clang/include/llvm/IR/GlobalValue.h
@@ -79,15 +79,15 @@
         ValueType(Ty), Visibility(DefaultVisibility),
         UnnamedAddrVal(unsigned(UnnamedAddr::None)),
         DllStorageClass(DefaultStorageClass), ThreadLocal(NotThreadLocal),
-        HasLLVMReservedName(false), IsDSOLocal(false), IntID((Intrinsic::ID)0U),
-        Parent(nullptr) {
+        HasLLVMReservedName(false), IsDSOLocal(false), HasPartition(false),
+        IntID((Intrinsic::ID)0U), Parent(nullptr) {
     setLinkage(Linkage);
     setName(Name);
   }
 
   Type *ValueType;
 
-  static const unsigned GlobalValueSubClassDataBits = 17;
+  static const unsigned GlobalValueSubClassDataBits = 16;
 
   // All bitfields use unsigned as the underlying type so that MSVC will pack
   // them.
@@ -108,9 +108,13 @@
   /// definition cannot be runtime preempted.
   unsigned IsDSOLocal : 1;
 
+  /// True if this symbol has a partition name assigned (see
+  /// https://lld.llvm.org/Partitions.html).
+  unsigned HasPartition : 1;
+
 private:
   // Give subclasses access to what otherwise would be wasted padding.
-  // (17 + 4 + 2 + 2 + 2 + 3 + 1 + 1) == 32.
+  // (16 + 4 + 2 + 2 + 2 + 3 + 1 + 1 + 1) == 32.
   unsigned SubClassData : GlobalValueSubClassDataBits;
 
   friend class Constant;
@@ -280,6 +284,12 @@
     return IsDSOLocal;
   }
 
+  bool hasPartition() const {
+    return HasPartition;
+  }
+  StringRef getPartition() const;
+  void setPartition(StringRef Part);
+
   static LinkageTypes getLinkOnceLinkage(bool ODR) {
     return ODR ? LinkOnceODRLinkage : LinkOnceAnyLinkage;
   }
diff --git a/linux-x64/clang/include/llvm/IR/IRBuilder.h b/linux-x64/clang/include/llvm/IR/IRBuilder.h
index 2e0619d..a74364d 100644
--- a/linux-x64/clang/include/llvm/IR/IRBuilder.h
+++ b/linux-x64/clang/include/llvm/IR/IRBuilder.h
@@ -31,7 +31,7 @@
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
 #include "llvm/IR/Instructions.h"
-#include "llvm/IR/Intrinsics.h"
+#include "llvm/IR/IntrinsicInst.h"
 #include "llvm/IR/LLVMContext.h"
 #include "llvm/IR/Module.h"
 #include "llvm/IR/Operator.h"
@@ -96,12 +96,18 @@
   MDNode *DefaultFPMathTag;
   FastMathFlags FMF;
 
+  bool IsFPConstrained;
+  ConstrainedFPIntrinsic::ExceptionBehavior DefaultConstrainedExcept;
+  ConstrainedFPIntrinsic::RoundingMode DefaultConstrainedRounding;
+
   ArrayRef<OperandBundleDef> DefaultOperandBundles;
 
 public:
   IRBuilderBase(LLVMContext &context, MDNode *FPMathTag = nullptr,
                 ArrayRef<OperandBundleDef> OpBundles = None)
-      : Context(context), DefaultFPMathTag(FPMathTag),
+      : Context(context), DefaultFPMathTag(FPMathTag), IsFPConstrained(false),
+        DefaultConstrainedExcept(ConstrainedFPIntrinsic::ebStrict),
+        DefaultConstrainedRounding(ConstrainedFPIntrinsic::rmDynamic),
         DefaultOperandBundles(OpBundles) {
     ClearInsertionPoint();
   }
@@ -218,6 +224,37 @@
   /// Set the fast-math flags to be used with generated fp-math operators
   void setFastMathFlags(FastMathFlags NewFMF) { FMF = NewFMF; }
 
+  /// Enable/Disable use of constrained floating point math. When
+  /// enabled the CreateF<op>() calls instead create constrained
+  /// floating point intrinsic calls. Fast math flags are unaffected
+  /// by this setting.
+  void setIsFPConstrained(bool IsCon) { IsFPConstrained = IsCon; }
+
+  /// Query for the use of constrained floating point math
+  bool getIsFPConstrained() { return IsFPConstrained; }
+
+  /// Set the exception handling to be used with constrained floating point
+  void setDefaultConstrainedExcept(
+      ConstrainedFPIntrinsic::ExceptionBehavior NewExcept) {
+    DefaultConstrainedExcept = NewExcept;
+  }
+
+  /// Set the rounding mode handling to be used with constrained floating point
+  void setDefaultConstrainedRounding(
+      ConstrainedFPIntrinsic::RoundingMode NewRounding) {
+    DefaultConstrainedRounding = NewRounding;
+  }
+
+  /// Get the exception handling used with constrained floating point
+  ConstrainedFPIntrinsic::ExceptionBehavior getDefaultConstrainedExcept() {
+    return DefaultConstrainedExcept;
+  }
+
+  /// Get the rounding mode handling used with constrained floating point
+  ConstrainedFPIntrinsic::RoundingMode getDefaultConstrainedRounding() {
+    return DefaultConstrainedRounding;
+  }
+
   //===--------------------------------------------------------------------===//
   // RAII helpers.
   //===--------------------------------------------------------------------===//
@@ -1045,6 +1082,38 @@
     return (LC && RC) ? Insert(Folder.CreateBinOp(Opc, LC, RC), Name) : nullptr;
   }
 
+  Value *getConstrainedFPRounding(
+      Optional<ConstrainedFPIntrinsic::RoundingMode> Rounding) {
+    ConstrainedFPIntrinsic::RoundingMode UseRounding =
+        DefaultConstrainedRounding;
+
+    if (Rounding.hasValue())
+      UseRounding = Rounding.getValue();
+
+    Optional<StringRef> RoundingStr =
+        ConstrainedFPIntrinsic::RoundingModeToStr(UseRounding);
+    assert(RoundingStr.hasValue() && "Garbage strict rounding mode!");
+    auto *RoundingMDS = MDString::get(Context, RoundingStr.getValue());
+
+    return MetadataAsValue::get(Context, RoundingMDS);
+  }
+
+  Value *getConstrainedFPExcept(
+      Optional<ConstrainedFPIntrinsic::ExceptionBehavior> Except) {
+    ConstrainedFPIntrinsic::ExceptionBehavior UseExcept =
+        DefaultConstrainedExcept;
+
+    if (Except.hasValue())
+      UseExcept = Except.getValue();
+
+    Optional<StringRef> ExceptStr =
+        ConstrainedFPIntrinsic::ExceptionBehaviorToStr(UseExcept);
+    assert(ExceptStr.hasValue() && "Garbage strict exception behavior!");
+    auto *ExceptMDS = MDString::get(Context, ExceptStr.getValue());
+
+    return MetadataAsValue::get(Context, ExceptMDS);
+  }
+
 public:
   Value *CreateAdd(Value *LHS, Value *RHS, const Twine &Name = "",
                    bool HasNUW = false, bool HasNSW = false) {
@@ -1214,6 +1283,14 @@
     return CreateAnd(LHS, ConstantInt::get(LHS->getType(), RHS), Name);
   }
 
+  Value *CreateAnd(ArrayRef<Value*> Ops) {
+    assert(!Ops.empty());
+    Value *Accum = Ops[0];
+    for (unsigned i = 1; i < Ops.size(); i++)
+      Accum = CreateAnd(Accum, Ops[i]);
+    return Accum;
+  }
+
   Value *CreateOr(Value *LHS, Value *RHS, const Twine &Name = "") {
     if (auto *RC = dyn_cast<Constant>(RHS)) {
       if (RC->isNullValue())
@@ -1232,6 +1309,14 @@
     return CreateOr(LHS, ConstantInt::get(LHS->getType(), RHS), Name);
   }
 
+  Value *CreateOr(ArrayRef<Value*> Ops) {
+    assert(!Ops.empty());
+    Value *Accum = Ops[0];
+    for (unsigned i = 1; i < Ops.size(); i++)
+      Accum = CreateOr(Accum, Ops[i]);
+    return Accum;
+  }
+
   Value *CreateXor(Value *LHS, Value *RHS, const Twine &Name = "") {
     if (Value *V = foldConstant(Instruction::Xor, LHS, RHS, Name)) return V;
     return Insert(BinaryOperator::CreateXor(LHS, RHS), Name);
@@ -1247,6 +1332,10 @@
 
   Value *CreateFAdd(Value *L, Value *R, const Twine &Name = "",
                     MDNode *FPMD = nullptr) {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fadd,
+                                      L, R, nullptr, Name, FPMD);
+
     if (Value *V = foldConstant(Instruction::FAdd, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFAdd(L, R), FPMD, FMF);
     return Insert(I, Name);
@@ -1256,6 +1345,10 @@
   /// default FMF.
   Value *CreateFAddFMF(Value *L, Value *R, Instruction *FMFSource,
                        const Twine &Name = "") {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fadd,
+                                      L, R, FMFSource, Name);
+
     if (Value *V = foldConstant(Instruction::FAdd, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFAdd(L, R), nullptr,
                                 FMFSource->getFastMathFlags());
@@ -1264,6 +1357,10 @@
 
   Value *CreateFSub(Value *L, Value *R, const Twine &Name = "",
                     MDNode *FPMD = nullptr) {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fsub,
+                                      L, R, nullptr, Name, FPMD);
+
     if (Value *V = foldConstant(Instruction::FSub, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFSub(L, R), FPMD, FMF);
     return Insert(I, Name);
@@ -1273,6 +1370,10 @@
   /// default FMF.
   Value *CreateFSubFMF(Value *L, Value *R, Instruction *FMFSource,
                        const Twine &Name = "") {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fsub,
+                                      L, R, FMFSource, Name);
+
     if (Value *V = foldConstant(Instruction::FSub, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFSub(L, R), nullptr,
                                 FMFSource->getFastMathFlags());
@@ -1281,6 +1382,10 @@
 
   Value *CreateFMul(Value *L, Value *R, const Twine &Name = "",
                     MDNode *FPMD = nullptr) {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fmul,
+                                      L, R, nullptr, Name, FPMD);
+
     if (Value *V = foldConstant(Instruction::FMul, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFMul(L, R), FPMD, FMF);
     return Insert(I, Name);
@@ -1290,6 +1395,10 @@
   /// default FMF.
   Value *CreateFMulFMF(Value *L, Value *R, Instruction *FMFSource,
                        const Twine &Name = "") {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fmul,
+                                      L, R, FMFSource, Name);
+
     if (Value *V = foldConstant(Instruction::FMul, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFMul(L, R), nullptr,
                                 FMFSource->getFastMathFlags());
@@ -1298,6 +1407,10 @@
 
   Value *CreateFDiv(Value *L, Value *R, const Twine &Name = "",
                     MDNode *FPMD = nullptr) {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fdiv,
+                                      L, R, nullptr, Name, FPMD);
+
     if (Value *V = foldConstant(Instruction::FDiv, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFDiv(L, R), FPMD, FMF);
     return Insert(I, Name);
@@ -1307,6 +1420,10 @@
   /// default FMF.
   Value *CreateFDivFMF(Value *L, Value *R, Instruction *FMFSource,
                        const Twine &Name = "") {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_fdiv,
+                                      L, R, FMFSource, Name);
+
     if (Value *V = foldConstant(Instruction::FDiv, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFDiv(L, R), nullptr,
                                 FMFSource->getFastMathFlags());
@@ -1315,6 +1432,10 @@
 
   Value *CreateFRem(Value *L, Value *R, const Twine &Name = "",
                     MDNode *FPMD = nullptr) {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_frem,
+                                      L, R, nullptr, Name, FPMD);
+
     if (Value *V = foldConstant(Instruction::FRem, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFRem(L, R), FPMD, FMF);
     return Insert(I, Name);
@@ -1324,6 +1445,10 @@
   /// default FMF.
   Value *CreateFRemFMF(Value *L, Value *R, Instruction *FMFSource,
                        const Twine &Name = "") {
+    if (IsFPConstrained)
+      return CreateConstrainedFPBinOp(Intrinsic::experimental_constrained_frem,
+                                      L, R, FMFSource, Name);
+
     if (Value *V = foldConstant(Instruction::FRem, L, R, Name)) return V;
     Instruction *I = setFPAttrs(BinaryOperator::CreateFRem(L, R), nullptr,
                                 FMFSource->getFastMathFlags());
@@ -1340,6 +1465,23 @@
     return Insert(BinOp, Name);
   }
 
+  CallInst *CreateConstrainedFPBinOp(
+      Intrinsic::ID ID, Value *L, Value *R, Instruction *FMFSource = nullptr,
+      const Twine &Name = "", MDNode *FPMathTag = nullptr,
+      Optional<ConstrainedFPIntrinsic::RoundingMode> Rounding = None,
+      Optional<ConstrainedFPIntrinsic::ExceptionBehavior> Except = None) {
+    Value *RoundingV = getConstrainedFPRounding(Rounding);
+    Value *ExceptV = getConstrainedFPExcept(Except);
+
+    FastMathFlags UseFMF = FMF;
+    if (FMFSource)
+      UseFMF = FMFSource->getFastMathFlags();
+
+    CallInst *C = CreateIntrinsic(ID, {L->getType()},
+                                  {L, R, RoundingV, ExceptV}, nullptr, Name);
+    return cast<CallInst>(setFPAttrs(C, FPMathTag, UseFMF));
+  }
+
   Value *CreateNeg(Value *V, const Twine &Name = "",
                    bool HasNUW = false, bool HasNSW = false) {
     if (auto *VC = dyn_cast<Constant>(V))
@@ -1366,12 +1508,54 @@
                   Name);
   }
 
+  /// Copy fast-math-flags from an instruction rather than using the builder's
+  /// default FMF.
+  Value *CreateFNegFMF(Value *V, Instruction *FMFSource,
+                       const Twine &Name = "") {
+   if (auto *VC = dyn_cast<Constant>(V))
+     return Insert(Folder.CreateFNeg(VC), Name);
+   // TODO: This should return UnaryOperator::CreateFNeg(...) once we are
+   // confident that they are optimized sufficiently.
+   return Insert(setFPAttrs(BinaryOperator::CreateFNeg(V), nullptr,
+                            FMFSource->getFastMathFlags()),
+                 Name);
+  }
+
   Value *CreateNot(Value *V, const Twine &Name = "") {
     if (auto *VC = dyn_cast<Constant>(V))
       return Insert(Folder.CreateNot(VC), Name);
     return Insert(BinaryOperator::CreateNot(V), Name);
   }
 
+  Value *CreateUnOp(Instruction::UnaryOps Opc,
+                    Value *V, const Twine &Name = "",
+                    MDNode *FPMathTag = nullptr) {
+    if (auto *VC = dyn_cast<Constant>(V))
+      return Insert(Folder.CreateUnOp(Opc, VC), Name);
+    Instruction *UnOp = UnaryOperator::Create(Opc, V);
+    if (isa<FPMathOperator>(UnOp))
+      UnOp = setFPAttrs(UnOp, FPMathTag, FMF);
+    return Insert(UnOp, Name);
+  }
+
+  /// Create either a UnaryOperator or BinaryOperator depending on \p Opc.
+  /// Correct number of operands must be passed accordingly.
+  Value *CreateNAryOp(unsigned Opc, ArrayRef<Value *> Ops,
+                      const Twine &Name = "",
+                      MDNode *FPMathTag = nullptr) {
+    if (Instruction::isBinaryOp(Opc)) {
+      assert(Ops.size() == 2 && "Invalid number of operands!");
+      return CreateBinOp(static_cast<Instruction::BinaryOps>(Opc),
+                         Ops[0], Ops[1], Name, FPMathTag);
+    }
+    if (Instruction::isUnaryOp(Opc)) {
+      assert(Ops.size() == 1 && "Invalid number of operands!");
+      return CreateUnOp(static_cast<Instruction::UnaryOps>(Opc),
+                        Ops[0], Name, FPMathTag);
+    }
+    llvm_unreachable("Unexpected opcode!");
+  }
+
   //===--------------------------------------------------------------------===//
   // Instruction creation methods: Memory Instructions
   //===--------------------------------------------------------------------===//
@@ -2067,6 +2251,8 @@
       MDNode *Unpred = MDFrom->getMetadata(LLVMContext::MD_unpredictable);
       Sel = addBranchMetadata(Sel, Prof, Unpred);
     }
+    if (isa<FPMathOperator>(Sel))
+      Sel = cast<SelectInst>(setFPAttrs(Sel, nullptr /* MDNode* */, FMF));
     return Insert(Sel, Name);
   }
 
@@ -2267,6 +2453,74 @@
     return V;
   }
 
+  Value *CreatePreserveArrayAccessIndex(Value *Base, unsigned Dimension,
+                                        unsigned LastIndex) {
+    assert(isa<PointerType>(Base->getType()) &&
+           "Invalid Base ptr type for preserve.array.access.index.");
+    auto *BaseType = Base->getType();
+
+    Value *LastIndexV = getInt32(LastIndex);
+    Constant *Zero = ConstantInt::get(Type::getInt32Ty(Context), 0);
+    SmallVector<Value *, 4> IdxList;
+    for (unsigned I = 0; I < Dimension; ++I)
+      IdxList.push_back(Zero);
+    IdxList.push_back(LastIndexV);
+
+    Type *ResultType =
+        GetElementPtrInst::getGEPReturnType(Base, IdxList);
+
+    Module *M = BB->getParent()->getParent();
+    Function *FnPreserveArrayAccessIndex = Intrinsic::getDeclaration(
+        M, Intrinsic::preserve_array_access_index, {ResultType, BaseType});
+
+    Value *DimV = getInt32(Dimension);
+    CallInst *Fn =
+        CreateCall(FnPreserveArrayAccessIndex, {Base, DimV, LastIndexV});
+
+    return Fn;
+  }
+
+  Value *CreatePreserveUnionAccessIndex(Value *Base, unsigned FieldIndex,
+                                        MDNode *DbgInfo) {
+    assert(isa<PointerType>(Base->getType()) &&
+           "Invalid Base ptr type for preserve.union.access.index.");
+    auto *BaseType = Base->getType();
+
+    Module *M = BB->getParent()->getParent();
+    Function *FnPreserveUnionAccessIndex = Intrinsic::getDeclaration(
+        M, Intrinsic::preserve_union_access_index, {BaseType, BaseType});
+
+    Value *DIIndex = getInt32(FieldIndex);
+    CallInst *Fn =
+        CreateCall(FnPreserveUnionAccessIndex, {Base, DIIndex});
+    Fn->setMetadata(LLVMContext::MD_preserve_access_index, DbgInfo);
+
+    return Fn;
+  }
+
+  Value *CreatePreserveStructAccessIndex(Value *Base, unsigned Index,
+                                         unsigned FieldIndex, MDNode *DbgInfo) {
+    assert(isa<PointerType>(Base->getType()) &&
+           "Invalid Base ptr type for preserve.struct.access.index.");
+    auto *BaseType = Base->getType();
+
+    Value *GEPIndex = getInt32(Index);
+    Constant *Zero = ConstantInt::get(Type::getInt32Ty(Context), 0);
+    Type *ResultType =
+        GetElementPtrInst::getGEPReturnType(Base, {Zero, GEPIndex});
+
+    Module *M = BB->getParent()->getParent();
+    Function *FnPreserveStructAccessIndex = Intrinsic::getDeclaration(
+        M, Intrinsic::preserve_struct_access_index, {ResultType, BaseType});
+
+    Value *DIIndex = getInt32(FieldIndex);
+    CallInst *Fn = CreateCall(FnPreserveStructAccessIndex,
+                              {Base, GEPIndex, DIIndex});
+    Fn->setMetadata(LLVMContext::MD_preserve_access_index, DbgInfo);
+
+    return Fn;
+  }
+
 private:
   /// Helper function that creates an assume intrinsic call that
   /// represents an alignment assumption on the provided Ptr, Mask, Type
diff --git a/linux-x64/clang/include/llvm/IR/InstrTypes.h b/linux-x64/clang/include/llvm/IR/InstrTypes.h
index 6f50668..ca419b5 100644
--- a/linux-x64/clang/include/llvm/IR/InstrTypes.h
+++ b/linux-x64/clang/include/llvm/IR/InstrTypes.h
@@ -77,7 +77,8 @@
 
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static bool classof(const Instruction *I) {
-    return I->getOpcode() == Instruction::Alloca ||
+    return I->isUnaryOp() ||
+           I->getOpcode() == Instruction::Alloca ||
            I->getOpcode() == Instruction::Load ||
            I->getOpcode() == Instruction::VAArg ||
            I->getOpcode() == Instruction::ExtractValue ||
@@ -96,6 +97,91 @@
 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(UnaryInstruction, Value)
 
 //===----------------------------------------------------------------------===//
+//                                UnaryOperator Class
+//===----------------------------------------------------------------------===//
+
+class UnaryOperator : public UnaryInstruction {
+  void AssertOK();
+
+protected:
+  UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
+                const Twine &Name, Instruction *InsertBefore);
+  UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
+                const Twine &Name, BasicBlock *InsertAtEnd);
+
+  // Note: Instruction needs to be a friend here to call cloneImpl.
+  friend class Instruction;
+
+  UnaryOperator *cloneImpl() const;
+
+public:
+
+  /// Construct a unary instruction, given the opcode and an operand.
+  /// Optionally (if InstBefore is specified) insert the instruction
+  /// into a BasicBlock right before the specified instruction.  The specified
+  /// Instruction is allowed to be a dereferenced end iterator.
+  ///
+  static UnaryOperator *Create(UnaryOps Op, Value *S,
+                               const Twine &Name = Twine(),
+                               Instruction *InsertBefore = nullptr);
+
+  /// Construct a unary instruction, given the opcode and an operand.
+  /// Also automatically insert this instruction to the end of the
+  /// BasicBlock specified.
+  ///
+  static UnaryOperator *Create(UnaryOps Op, Value *S,
+                               const Twine &Name,
+                               BasicBlock *InsertAtEnd);
+
+  /// These methods just forward to Create, and are useful when you
+  /// statically know what type of instruction you're going to create.  These
+  /// helpers just save some typing.
+#define HANDLE_UNARY_INST(N, OPC, CLASS) \
+  static UnaryOperator *Create##OPC(Value *V, const Twine &Name = "") {\
+    return Create(Instruction::OPC, V, Name);\
+  }
+#include "llvm/IR/Instruction.def"
+#define HANDLE_UNARY_INST(N, OPC, CLASS) \
+  static UnaryOperator *Create##OPC(Value *V, const Twine &Name, \
+                                    BasicBlock *BB) {\
+    return Create(Instruction::OPC, V, Name, BB);\
+  }
+#include "llvm/IR/Instruction.def"
+#define HANDLE_UNARY_INST(N, OPC, CLASS) \
+  static UnaryOperator *Create##OPC(Value *V, const Twine &Name, \
+                                    Instruction *I) {\
+    return Create(Instruction::OPC, V, Name, I);\
+  }
+#include "llvm/IR/Instruction.def"
+
+  static UnaryOperator *CreateWithCopiedFlags(UnaryOps Opc,
+                                              Value *V,
+                                              Instruction *CopyO,
+                                              const Twine &Name = "") {
+    UnaryOperator *UO = Create(Opc, V, Name);
+    UO->copyIRFlags(CopyO);
+    return UO;
+  }
+
+  static UnaryOperator *CreateFNegFMF(Value *Op, Instruction *FMFSource,
+                                      const Twine &Name = "") {
+    return CreateWithCopiedFlags(Instruction::FNeg, Op, FMFSource, Name);
+  }
+
+  UnaryOps getOpcode() const {
+    return static_cast<UnaryOps>(Instruction::getOpcode());
+  }
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static bool classof(const Instruction *I) {
+    return I->isUnaryOp();
+  }
+  static bool classof(const Value *V) {
+    return isa<Instruction>(V) && classof(cast<Instruction>(V));
+  }
+};
+
+//===----------------------------------------------------------------------===//
 //                           BinaryOperator Class
 //===----------------------------------------------------------------------===//
 
@@ -162,42 +248,42 @@
 
   static BinaryOperator *CreateWithCopiedFlags(BinaryOps Opc,
                                                Value *V1, Value *V2,
-                                               BinaryOperator *CopyBO,
+                                               Instruction *CopyO,
                                                const Twine &Name = "") {
     BinaryOperator *BO = Create(Opc, V1, V2, Name);
-    BO->copyIRFlags(CopyBO);
+    BO->copyIRFlags(CopyO);
     return BO;
   }
 
   static BinaryOperator *CreateFAddFMF(Value *V1, Value *V2,
-                                       BinaryOperator *FMFSource,
+                                       Instruction *FMFSource,
                                        const Twine &Name = "") {
     return CreateWithCopiedFlags(Instruction::FAdd, V1, V2, FMFSource, Name);
   }
   static BinaryOperator *CreateFSubFMF(Value *V1, Value *V2,
-                                       BinaryOperator *FMFSource,
+                                       Instruction *FMFSource,
                                        const Twine &Name = "") {
     return CreateWithCopiedFlags(Instruction::FSub, V1, V2, FMFSource, Name);
   }
   static BinaryOperator *CreateFMulFMF(Value *V1, Value *V2,
-                                       BinaryOperator *FMFSource,
+                                       Instruction *FMFSource,
                                        const Twine &Name = "") {
     return CreateWithCopiedFlags(Instruction::FMul, V1, V2, FMFSource, Name);
   }
   static BinaryOperator *CreateFDivFMF(Value *V1, Value *V2,
-                                       BinaryOperator *FMFSource,
+                                       Instruction *FMFSource,
                                        const Twine &Name = "") {
     return CreateWithCopiedFlags(Instruction::FDiv, V1, V2, FMFSource, Name);
   }
   static BinaryOperator *CreateFRemFMF(Value *V1, Value *V2,
-                                       BinaryOperator *FMFSource,
+                                       Instruction *FMFSource,
                                        const Twine &Name = "") {
     return CreateWithCopiedFlags(Instruction::FRem, V1, V2, FMFSource, Name);
   }
-  static BinaryOperator *CreateFNegFMF(Value *Op, BinaryOperator *FMFSource,
+  static BinaryOperator *CreateFNegFMF(Value *Op, Instruction *FMFSource,
                                        const Twine &Name = "") {
     Value *Zero = ConstantFP::getNegativeZero(Op->getType());
-    return CreateWithCopiedFlags(Instruction::FSub, Zero, Op, FMFSource);
+    return CreateWithCopiedFlags(Instruction::FSub, Zero, Op, FMFSource, Name);
   }
 
   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
@@ -1488,6 +1574,12 @@
     return Attrs.getParamAlignment(ArgNo);
   }
 
+  /// Extract the byval type for a call or parameter.
+  Type *getParamByValType(unsigned ArgNo) const {
+    Type *Ty = Attrs.getParamByValType(ArgNo);
+    return Ty ? Ty : getArgOperand(ArgNo)->getType()->getPointerElementType();
+  }
+
   /// Extract the number of dereferenceable bytes for a call or
   /// parameter (0=unknown).
   uint64_t getDereferenceableBytes(unsigned i) const {
diff --git a/linux-x64/clang/include/llvm/IR/Instruction.h b/linux-x64/clang/include/llvm/IR/Instruction.h
index b940d12..6a9a74b 100644
--- a/linux-x64/clang/include/llvm/IR/Instruction.h
+++ b/linux-x64/clang/include/llvm/IR/Instruction.h
@@ -311,9 +311,6 @@
   /// Returns false if no metadata was found.
   bool extractProfTotalWeight(uint64_t &TotalVal) const;
 
-  /// Updates branch_weights metadata by scaling it by \p S / \p T.
-  void updateProfWeight(uint64_t S, uint64_t T);
-
   /// Sets the branch_weights metadata to \p W for CallInst.
   void setProfWeight(uint64_t W);
 
@@ -668,6 +665,10 @@
   /// instruction must be a terminator.
   void setSuccessor(unsigned Idx, BasicBlock *BB);
 
+  /// Replace specified successor OldBB to point at the provided block.
+  /// This instruction must be a terminator.
+  void replaceSuccessorWith(BasicBlock *OldBB, BasicBlock *NewBB);
+
   /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static bool classof(const Value *V) {
     return V->getValueID() >= Value::InstructionVal;
diff --git a/linux-x64/clang/include/llvm/IR/Instructions.h b/linux-x64/clang/include/llvm/IR/Instructions.h
index a82ceda..6773664 100644
--- a/linux-x64/clang/include/llvm/IR/Instructions.h
+++ b/linux-x64/clang/include/llvm/IR/Instructions.h
@@ -521,9 +521,11 @@
 //                                AtomicCmpXchgInst Class
 //===----------------------------------------------------------------------===//
 
-/// an instruction that atomically checks whether a
+/// An instruction that atomically checks whether a
 /// specified value is in a memory location, and, if it is, stores a new value
-/// there.  Returns the value that was loaded.
+/// there. The value returned by this instruction is a pair containing the
+/// original value as first element, and an i1 indicating success (true) or
+/// failure (false) as second element.
 ///
 class AtomicCmpXchgInst : public Instruction {
   void Init(Value *Ptr, Value *Cmp, Value *NewVal,
@@ -1134,71 +1136,6 @@
 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GetElementPtrInst, Value)
 
 //===----------------------------------------------------------------------===//
-//                                UnaryOperator Class
-//===----------------------------------------------------------------------===//
-
-/// a unary instruction 
-class UnaryOperator : public UnaryInstruction {
-  void AssertOK();
-
-protected:
-  UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
-                const Twine &Name, Instruction *InsertBefore);
-  UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
-                const Twine &Name, BasicBlock *InsertAtEnd);
-
-  // Note: Instruction needs to be a friend here to call cloneImpl.
-  friend class Instruction;
-
-  UnaryOperator *cloneImpl() const;
-
-public:
-
-  /// Construct a unary instruction, given the opcode and an operand.
-  /// Optionally (if InstBefore is specified) insert the instruction
-  /// into a BasicBlock right before the specified instruction.  The specified
-  /// Instruction is allowed to be a dereferenced end iterator.
-  ///
-  static UnaryOperator *Create(UnaryOps Op, Value *S,
-                               const Twine &Name = Twine(),
-                               Instruction *InsertBefore = nullptr);
-
-  /// Construct a unary instruction, given the opcode and an operand.
-  /// Also automatically insert this instruction to the end of the
-  /// BasicBlock specified.
-  ///
-  static UnaryOperator *Create(UnaryOps Op, Value *S,
-                               const Twine &Name,
-                               BasicBlock *InsertAtEnd);
-
-  /// These methods just forward to Create, and are useful when you
-  /// statically know what type of instruction you're going to create.  These
-  /// helpers just save some typing.
-#define HANDLE_UNARY_INST(N, OPC, CLASS) \
-  static UnaryInstruction *Create##OPC(Value *V, \
-                                       const Twine &Name = "") {\
-    return Create(Instruction::OPC, V, Name);\
-  }
-#include "llvm/IR/Instruction.def"
-#define HANDLE_UNARY_INST(N, OPC, CLASS) \
-  static UnaryInstruction *Create##OPC(Value *V, \
-                                       const Twine &Name, BasicBlock *BB) {\
-    return Create(Instruction::OPC, V, Name, BB);\
-  }
-#include "llvm/IR/Instruction.def"
-#define HANDLE_UNARY_INST(N, OPC, CLASS) \
-  static UnaryInstruction *Create##OPC(Value *V, \
-                                       const Twine &Name, Instruction *I) {\
-    return Create(Instruction::OPC, V, Name, I);\
-  }
-#include "llvm/IR/Instruction.def"
-
-  UnaryOps getOpcode() const {
-    return static_cast<UnaryOps>(Instruction::getOpcode());
-  }
-};
-
-//===----------------------------------------------------------------------===//
 //                               ICmpInst Class
 //===----------------------------------------------------------------------===//
 
@@ -1730,6 +1667,9 @@
     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   }
 
+  /// Updates profile metadata by scaling it by \p S / \p T.
+  void updateProfWeight(uint64_t S, uint64_t T);
+
 private:
   // Shadow Instruction::setInstructionSubclassData with a private forwarding
   // method so that subclasses cannot accidentally use it.
@@ -2043,6 +1983,10 @@
     return User::operator new(s, 3);
   }
 
+  /// Swap the first 2 operands and adjust the mask to preserve the semantics
+  /// of the instruction.
+  void commute();
+
   /// Return true if a shufflevector instruction can be
   /// formed with the specified operands.
   static bool isValidOperands(const Value *V1, const Value *V2,
@@ -2731,6 +2675,14 @@
     block_begin()[i] = BB;
   }
 
+  /// Replace every incoming basic block \p Old to basic block \p New.
+  void replaceIncomingBlockWith(const BasicBlock *Old, BasicBlock *New) {
+    assert(New && Old && "PHI node got a null basic block!");
+    for (unsigned Op = 0, NumOps = getNumOperands(); Op != NumOps; ++Op)
+      if (getIncomingBlock(Op) == Old)
+        setIncomingBlock(Op, New);
+  }
+
   /// Add an incoming value to the end of the PHI list
   ///
   void addIncoming(Value *V, BasicBlock *BB) {
@@ -2774,6 +2726,19 @@
     return getIncomingValue(Idx);
   }
 
+  /// Set every incoming value(s) for block \p BB to \p V.
+  void setIncomingValueForBlock(const BasicBlock *BB, Value *V) {
+    assert(BB && "PHI node got a null basic block!");
+    bool Found = false;
+    for (unsigned Op = 0, NumOps = getNumOperands(); Op != NumOps; ++Op)
+      if (getIncomingBlock(Op) == BB) {
+        Found = true;
+        setIncomingValue(Op, V);
+      }
+    (void)Found;
+    assert(Found && "Invalid basic block argument to set!");
+  }
+
   /// If the specified PHI node always merges together the
   /// same value, return the value, otherwise return null.
   Value *hasConstantValue() const;
@@ -3485,6 +3450,60 @@
   }
 };
 
+/// A wrapper class to simplify modification of SwitchInst cases along with
+/// their prof branch_weights metadata.
+class SwitchInstProfUpdateWrapper {
+  SwitchInst &SI;
+  Optional<SmallVector<uint32_t, 8> > Weights = None;
+
+  // Sticky invalid state is needed to safely ignore operations with prof data
+  // in cases where SwitchInstProfUpdateWrapper is created from SwitchInst
+  // with inconsistent prof data. TODO: once we fix all prof data
+  // inconsistencies we can turn invalid state to assertions.
+  enum {
+    Invalid,
+    Initialized,
+    Changed
+  } State = Invalid;
+
+protected:
+  static MDNode *getProfBranchWeightsMD(const SwitchInst &SI);
+
+  MDNode *buildProfBranchWeightsMD();
+
+  void init();
+
+public:
+  using CaseWeightOpt = Optional<uint32_t>;
+  SwitchInst *operator->() { return &SI; }
+  SwitchInst &operator*() { return SI; }
+  operator SwitchInst *() { return &SI; }
+
+  SwitchInstProfUpdateWrapper(SwitchInst &SI) : SI(SI) { init(); }
+
+  ~SwitchInstProfUpdateWrapper() {
+    if (State == Changed)
+      SI.setMetadata(LLVMContext::MD_prof, buildProfBranchWeightsMD());
+  }
+
+  /// Delegate the call to the underlying SwitchInst::removeCase() and remove
+  /// correspondent branch weight.
+  SwitchInst::CaseIt removeCase(SwitchInst::CaseIt I);
+
+  /// Delegate the call to the underlying SwitchInst::addCase() and set the
+  /// specified branch weight for the added case.
+  void addCase(ConstantInt *OnVal, BasicBlock *Dest, CaseWeightOpt W);
+
+  /// Delegate the call to the underlying SwitchInst::eraseFromParent() and mark
+  /// this object to not touch the underlying SwitchInst in destructor.
+  SymbolTableList<Instruction>::iterator eraseFromParent();
+
+  void setSuccessorWeight(unsigned idx, CaseWeightOpt W);
+  CaseWeightOpt getSuccessorWeight(unsigned idx);
+
+  static CaseWeightOpt getSuccessorWeight(const SwitchInst &SI, unsigned idx);
+};
+
 template <>
 struct OperandTraits<SwitchInst> : public HungoffOperandTraits<2> {
 };
@@ -3919,6 +3938,9 @@
             ArrayRef<BasicBlock *> IndirectDests, ArrayRef<Value *> Args,
             ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr);
 
+  /// Should the Indirect Destinations change, scan + update the Arg list.
+  void updateArgBlockAddresses(unsigned i, BasicBlock *B);
+
   /// Compute the number of operands to allocate.
   static int ComputeNumOperands(int NumArgs, int NumIndirectDests,
                                 int NumBundleInputs = 0) {
@@ -4056,7 +4078,7 @@
     return cast<BasicBlock>(*(&Op<-1>() - getNumIndirectDests() - 1));
   }
   BasicBlock *getIndirectDest(unsigned i) const {
-    return cast<BasicBlock>(*(&Op<-1>() - getNumIndirectDests() + i));
+    return cast_or_null<BasicBlock>(*(&Op<-1>() - getNumIndirectDests() + i));
   }
   SmallVector<BasicBlock *, 16> getIndirectDests() const {
     SmallVector<BasicBlock *, 16> IndirectDests;
@@ -4068,6 +4090,7 @@
     *(&Op<-1>() - getNumIndirectDests() - 1) = reinterpret_cast<Value *>(B);
   }
   void setIndirectDest(unsigned i, BasicBlock *B) {
+    updateArgBlockAddresses(i, B);
     *(&Op<-1>() - getNumIndirectDests() + i) = reinterpret_cast<Value *>(B);
   }
 
@@ -4077,11 +4100,10 @@
     return i == 0 ? getDefaultDest() : getIndirectDest(i - 1);
   }
 
-  void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
-    assert(idx < getNumIndirectDests() + 1 &&
+  void setSuccessor(unsigned i, BasicBlock *NewSucc) {
+    assert(i < getNumIndirectDests() + 1 &&
            "Successor # out of range for callbr!");
-    *(&Op<-1>() - getNumIndirectDests() -1 + idx) =
-        reinterpret_cast<Value *>(NewSucc);
+    return i == 0 ? setDefaultDest(NewSucc) : setIndirectDest(i - 1, NewSucc);
   }
 
   unsigned getNumSuccessors() const { return getNumIndirectDests() + 1; }
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicEnums.inc b/linux-x64/clang/include/llvm/IR/IntrinsicEnums.inc
index ef21b6f..6123806 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicEnums.inc
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicEnums.inc
@@ -81,6 +81,8 @@
     experimental_constrained_floor,            // llvm.experimental.constrained.floor
     experimental_constrained_fma,              // llvm.experimental.constrained.fma
     experimental_constrained_fmul,             // llvm.experimental.constrained.fmul
+    experimental_constrained_fpext,            // llvm.experimental.constrained.fpext
+    experimental_constrained_fptrunc,          // llvm.experimental.constrained.fptrunc
     experimental_constrained_frem,             // llvm.experimental.constrained.frem
     experimental_constrained_fsub,             // llvm.experimental.constrained.fsub
     experimental_constrained_log,              // llvm.experimental.constrained.log
@@ -106,16 +108,16 @@
     experimental_stackmap,                     // llvm.experimental.stackmap
     experimental_vector_reduce_add,            // llvm.experimental.vector.reduce.add
     experimental_vector_reduce_and,            // llvm.experimental.vector.reduce.and
-    experimental_vector_reduce_fadd,           // llvm.experimental.vector.reduce.fadd
     experimental_vector_reduce_fmax,           // llvm.experimental.vector.reduce.fmax
     experimental_vector_reduce_fmin,           // llvm.experimental.vector.reduce.fmin
-    experimental_vector_reduce_fmul,           // llvm.experimental.vector.reduce.fmul
     experimental_vector_reduce_mul,            // llvm.experimental.vector.reduce.mul
     experimental_vector_reduce_or,             // llvm.experimental.vector.reduce.or
     experimental_vector_reduce_smax,           // llvm.experimental.vector.reduce.smax
     experimental_vector_reduce_smin,           // llvm.experimental.vector.reduce.smin
     experimental_vector_reduce_umax,           // llvm.experimental.vector.reduce.umax
     experimental_vector_reduce_umin,           // llvm.experimental.vector.reduce.umin
+    experimental_vector_reduce_v2_fadd,        // llvm.experimental.vector.reduce.v2.fadd
+    experimental_vector_reduce_v2_fmul,        // llvm.experimental.vector.reduce.v2.fmul
     experimental_vector_reduce_xor,            // llvm.experimental.vector.reduce.xor
     experimental_widenable_condition,          // llvm.experimental.widenable.condition
     fabs,                                      // llvm.fabs
@@ -142,6 +144,8 @@
     launder_invariant_group,                   // llvm.launder.invariant.group
     lifetime_end,                              // llvm.lifetime.end
     lifetime_start,                            // llvm.lifetime.start
+    llrint,                                    // llvm.llrint
+    llround,                                   // llvm.llround
     load_relative,                             // llvm.load.relative
     localaddress,                              // llvm.localaddress
     localescape,                               // llvm.localescape
@@ -150,6 +154,10 @@
     log10,                                     // llvm.log10
     log2,                                      // llvm.log2
     longjmp,                                   // llvm.longjmp
+    loop_decrement,                            // llvm.loop.decrement
+    loop_decrement_reg,                        // llvm.loop.decrement.reg
+    lrint,                                     // llvm.lrint
+    lround,                                    // llvm.lround
     masked_compressstore,                      // llvm.masked.compressstore
     masked_expandload,                         // llvm.masked.expandload
     masked_gather,                             // llvm.masked.gather
@@ -202,6 +210,9 @@
     pow,                                       // llvm.pow
     powi,                                      // llvm.powi
     prefetch,                                  // llvm.prefetch
+    preserve_array_access_index,               // llvm.preserve.array.access.index
+    preserve_struct_access_index,              // llvm.preserve.struct.access.index
+    preserve_union_access_index,               // llvm.preserve.union.access.index
     ptr_annotation,                            // llvm.ptr.annotation
     read_register,                             // llvm.read_register
     readcyclecounter,                          // llvm.readcyclecounter
@@ -210,12 +221,14 @@
     round,                                     // llvm.round
     sadd_sat,                                  // llvm.sadd.sat
     sadd_with_overflow,                        // llvm.sadd.with.overflow
+    set_loop_iterations,                       // llvm.set.loop.iterations
     setjmp,                                    // llvm.setjmp
     sideeffect,                                // llvm.sideeffect
     siglongjmp,                                // llvm.siglongjmp
     sigsetjmp,                                 // llvm.sigsetjmp
     sin,                                       // llvm.sin
     smul_fix,                                  // llvm.smul.fix
+    smul_fix_sat,                              // llvm.smul.fix.sat
     smul_with_overflow,                        // llvm.smul.with.overflow
     sponentry,                                 // llvm.sponentry
     sqrt,                                      // llvm.sqrt
@@ -227,6 +240,7 @@
     stackrestore,                              // llvm.stackrestore
     stacksave,                                 // llvm.stacksave
     strip_invariant_group,                     // llvm.strip.invariant.group
+    test_set_loop_iterations,                  // llvm.test.set.loop.iterations
     thread_pointer,                            // llvm.thread.pointer
     trap,                                      // llvm.trap
     trunc,                                     // llvm.trunc
@@ -245,6 +259,7 @@
     write_register,                            // llvm.write_register
     xray_customevent,                          // llvm.xray.customevent
     xray_typedevent,                           // llvm.xray.typedevent
+    aarch64_addg,                              // llvm.aarch64.addg
     aarch64_clrex,                             // llvm.aarch64.clrex
     aarch64_crc32b,                            // llvm.aarch64.crc32b
     aarch64_crc32cb,                           // llvm.aarch64.crc32cb
@@ -271,10 +286,13 @@
     aarch64_dmb,                               // llvm.aarch64.dmb
     aarch64_dsb,                               // llvm.aarch64.dsb
     aarch64_get_fpcr,                          // llvm.aarch64.get.fpcr
+    aarch64_gmi,                               // llvm.aarch64.gmi
     aarch64_hint,                              // llvm.aarch64.hint
+    aarch64_irg,                               // llvm.aarch64.irg
     aarch64_isb,                               // llvm.aarch64.isb
     aarch64_ldaxp,                             // llvm.aarch64.ldaxp
     aarch64_ldaxr,                             // llvm.aarch64.ldaxr
+    aarch64_ldg,                               // llvm.aarch64.ldg
     aarch64_ldxp,                              // llvm.aarch64.ldxp
     aarch64_ldxr,                              // llvm.aarch64.ldxr
     aarch64_neon_abs,                          // llvm.aarch64.neon.abs
@@ -284,6 +302,7 @@
     aarch64_neon_fabd,                         // llvm.aarch64.neon.fabd
     aarch64_neon_facge,                        // llvm.aarch64.neon.facge
     aarch64_neon_facgt,                        // llvm.aarch64.neon.facgt
+    aarch64_neon_faddp,                        // llvm.aarch64.neon.faddp
     aarch64_neon_faddv,                        // llvm.aarch64.neon.faddv
     aarch64_neon_fcvtas,                       // llvm.aarch64.neon.fcvtas
     aarch64_neon_fcvtau,                       // llvm.aarch64.neon.fcvtau
@@ -437,10 +456,12 @@
     aarch64_sisd_fabd,                         // llvm.aarch64.sisd.fabd
     aarch64_sisd_fcvtxn,                       // llvm.aarch64.sisd.fcvtxn
     aarch64_space,                             // llvm.aarch64.space
+    aarch64_stg,                               // llvm.aarch64.stg
     aarch64_stlxp,                             // llvm.aarch64.stlxp
     aarch64_stlxr,                             // llvm.aarch64.stlxr
     aarch64_stxp,                              // llvm.aarch64.stxp
     aarch64_stxr,                              // llvm.aarch64.stxr
+    aarch64_subp,                              // llvm.aarch64.subp
     aarch64_udiv,                              // llvm.aarch64.udiv
     amdgcn_alignbit,                           // llvm.amdgcn.alignbit
     amdgcn_alignbyte,                          // llvm.amdgcn.alignbyte
@@ -487,6 +508,12 @@
     amdgcn_ds_fadd,                            // llvm.amdgcn.ds.fadd
     amdgcn_ds_fmax,                            // llvm.amdgcn.ds.fmax
     amdgcn_ds_fmin,                            // llvm.amdgcn.ds.fmin
+    amdgcn_ds_gws_barrier,                     // llvm.amdgcn.ds.gws.barrier
+    amdgcn_ds_gws_init,                        // llvm.amdgcn.ds.gws.init
+    amdgcn_ds_gws_sema_br,                     // llvm.amdgcn.ds.gws.sema.br
+    amdgcn_ds_gws_sema_p,                      // llvm.amdgcn.ds.gws.sema.p
+    amdgcn_ds_gws_sema_release_all,            // llvm.amdgcn.ds.gws.sema.release.all
+    amdgcn_ds_gws_sema_v,                      // llvm.amdgcn.ds.gws.sema.v
     amdgcn_ds_ordered_add,                     // llvm.amdgcn.ds.ordered.add
     amdgcn_ds_ordered_swap,                    // llvm.amdgcn.ds.ordered.swap
     amdgcn_ds_permute,                         // llvm.amdgcn.ds.permute
@@ -983,10 +1010,33 @@
     amdgcn_loop,                               // llvm.amdgcn.loop
     amdgcn_mbcnt_hi,                           // llvm.amdgcn.mbcnt.hi
     amdgcn_mbcnt_lo,                           // llvm.amdgcn.mbcnt.lo
+    amdgcn_mfma_f32_16x16x16f16,               // llvm.amdgcn.mfma.f32.16x16x16f16
+    amdgcn_mfma_f32_16x16x1f32,                // llvm.amdgcn.mfma.f32.16x16x1f32
+    amdgcn_mfma_f32_16x16x2bf16,               // llvm.amdgcn.mfma.f32.16x16x2bf16
+    amdgcn_mfma_f32_16x16x4f16,                // llvm.amdgcn.mfma.f32.16x16x4f16
+    amdgcn_mfma_f32_16x16x4f32,                // llvm.amdgcn.mfma.f32.16x16x4f32
+    amdgcn_mfma_f32_16x16x8bf16,               // llvm.amdgcn.mfma.f32.16x16x8bf16
+    amdgcn_mfma_f32_32x32x1f32,                // llvm.amdgcn.mfma.f32.32x32x1f32
+    amdgcn_mfma_f32_32x32x2bf16,               // llvm.amdgcn.mfma.f32.32x32x2bf16
+    amdgcn_mfma_f32_32x32x2f32,                // llvm.amdgcn.mfma.f32.32x32x2f32
+    amdgcn_mfma_f32_32x32x4bf16,               // llvm.amdgcn.mfma.f32.32x32x4bf16
+    amdgcn_mfma_f32_32x32x4f16,                // llvm.amdgcn.mfma.f32.32x32x4f16
+    amdgcn_mfma_f32_32x32x8f16,                // llvm.amdgcn.mfma.f32.32x32x8f16
+    amdgcn_mfma_f32_4x4x1f32,                  // llvm.amdgcn.mfma.f32.4x4x1f32
+    amdgcn_mfma_f32_4x4x2bf16,                 // llvm.amdgcn.mfma.f32.4x4x2bf16
+    amdgcn_mfma_f32_4x4x4f16,                  // llvm.amdgcn.mfma.f32.4x4x4f16
+    amdgcn_mfma_i32_16x16x16i8,                // llvm.amdgcn.mfma.i32.16x16x16i8
+    amdgcn_mfma_i32_16x16x4i8,                 // llvm.amdgcn.mfma.i32.16x16x4i8
+    amdgcn_mfma_i32_32x32x4i8,                 // llvm.amdgcn.mfma.i32.32x32x4i8
+    amdgcn_mfma_i32_32x32x8i8,                 // llvm.amdgcn.mfma.i32.32x32x8i8
+    amdgcn_mfma_i32_4x4x4i8,                   // llvm.amdgcn.mfma.i32.4x4x4i8
     amdgcn_mov_dpp,                            // llvm.amdgcn.mov.dpp
+    amdgcn_mov_dpp8,                           // llvm.amdgcn.mov.dpp8
     amdgcn_mqsad_pk_u16_u8,                    // llvm.amdgcn.mqsad.pk.u16.u8
     amdgcn_mqsad_u32_u8,                       // llvm.amdgcn.mqsad.u32.u8
     amdgcn_msad_u8,                            // llvm.amdgcn.msad.u8
+    amdgcn_permlane16,                         // llvm.amdgcn.permlane16
+    amdgcn_permlanex16,                        // llvm.amdgcn.permlanex16
     amdgcn_ps_live,                            // llvm.amdgcn.ps.live
     amdgcn_qsad_pk_u16_u8,                     // llvm.amdgcn.qsad.pk.u16.u8
     amdgcn_queue_ptr,                          // llvm.amdgcn.queue.ptr
@@ -1021,6 +1071,7 @@
     amdgcn_s_dcache_wb,                        // llvm.amdgcn.s.dcache.wb
     amdgcn_s_dcache_wb_vol,                    // llvm.amdgcn.s.dcache.wb.vol
     amdgcn_s_decperflevel,                     // llvm.amdgcn.s.decperflevel
+    amdgcn_s_get_waveid_in_workgroup,          // llvm.amdgcn.s.get.waveid.in.workgroup
     amdgcn_s_getpc,                            // llvm.amdgcn.s.getpc
     amdgcn_s_getreg,                           // llvm.amdgcn.s.getreg
     amdgcn_s_incperflevel,                     // llvm.amdgcn.s.incperflevel
@@ -1067,6 +1118,7 @@
     amdgcn_unreachable,                        // llvm.amdgcn.unreachable
     amdgcn_update_dpp,                         // llvm.amdgcn.update.dpp
     amdgcn_wave_barrier,                       // llvm.amdgcn.wave.barrier
+    amdgcn_wavefrontsize,                      // llvm.amdgcn.wavefrontsize
     amdgcn_workgroup_id_x,                     // llvm.amdgcn.workgroup.id.x
     amdgcn_workgroup_id_y,                     // llvm.amdgcn.workgroup.id.y
     amdgcn_workgroup_id_z,                     // llvm.amdgcn.workgroup.id.z
@@ -1080,6 +1132,10 @@
     arm_cdp,                                   // llvm.arm.cdp
     arm_cdp2,                                  // llvm.arm.cdp2
     arm_clrex,                                 // llvm.arm.clrex
+    arm_cmse_tt,                               // llvm.arm.cmse.tt
+    arm_cmse_tta,                              // llvm.arm.cmse.tta
+    arm_cmse_ttat,                             // llvm.arm.cmse.ttat
+    arm_cmse_ttt,                              // llvm.arm.cmse.ttt
     arm_crc32b,                                // llvm.arm.crc32b
     arm_crc32cb,                               // llvm.arm.crc32cb
     arm_crc32ch,                               // llvm.arm.crc32ch
@@ -1090,6 +1146,7 @@
     arm_dmb,                                   // llvm.arm.dmb
     arm_dsb,                                   // llvm.arm.dsb
     arm_get_fpscr,                             // llvm.arm.get.fpscr
+    arm_gnu_eabi_mcount,                       // llvm.arm.gnu.eabi.mcount
     arm_hint,                                  // llvm.arm.hint
     arm_isb,                                   // llvm.arm.isb
     arm_ldaex,                                 // llvm.arm.ldaex
@@ -4715,21 +4772,41 @@
     nvvm_vote_uni,                             // llvm.nvvm.vote.uni
     nvvm_vote_uni_sync,                        // llvm.nvvm.vote.uni.sync
     nvvm_wmma_m16n16k16_load_a_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.a.col.f16
+    nvvm_wmma_m16n16k16_load_a_s8_col,         // llvm.nvvm.wmma.m16n16k16.load.a.col.s8
     nvvm_wmma_m16n16k16_load_a_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16
+    nvvm_wmma_m16n16k16_load_a_s8_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.s8
+    nvvm_wmma_m16n16k16_load_a_u8_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.u8
+    nvvm_wmma_m16n16k16_load_a_u8_col,         // llvm.nvvm.wmma.m16n16k16.load.a.col.u8
     nvvm_wmma_m16n16k16_load_a_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.a.row.f16
+    nvvm_wmma_m16n16k16_load_a_s8_row,         // llvm.nvvm.wmma.m16n16k16.load.a.row.s8
     nvvm_wmma_m16n16k16_load_a_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16
+    nvvm_wmma_m16n16k16_load_a_s8_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.s8
+    nvvm_wmma_m16n16k16_load_a_u8_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.u8
+    nvvm_wmma_m16n16k16_load_a_u8_row,         // llvm.nvvm.wmma.m16n16k16.load.a.row.u8
     nvvm_wmma_m16n16k16_load_b_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.b.col.f16
+    nvvm_wmma_m16n16k16_load_b_s8_col,         // llvm.nvvm.wmma.m16n16k16.load.b.col.s8
     nvvm_wmma_m16n16k16_load_b_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16
+    nvvm_wmma_m16n16k16_load_b_s8_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.s8
+    nvvm_wmma_m16n16k16_load_b_u8_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.u8
+    nvvm_wmma_m16n16k16_load_b_u8_col,         // llvm.nvvm.wmma.m16n16k16.load.b.col.u8
     nvvm_wmma_m16n16k16_load_b_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.b.row.f16
+    nvvm_wmma_m16n16k16_load_b_s8_row,         // llvm.nvvm.wmma.m16n16k16.load.b.row.s8
     nvvm_wmma_m16n16k16_load_b_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16
+    nvvm_wmma_m16n16k16_load_b_s8_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.s8
+    nvvm_wmma_m16n16k16_load_b_u8_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.u8
+    nvvm_wmma_m16n16k16_load_b_u8_row,         // llvm.nvvm.wmma.m16n16k16.load.b.row.u8
     nvvm_wmma_m16n16k16_load_c_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.c.col.f16
     nvvm_wmma_m16n16k16_load_c_f32_col,        // llvm.nvvm.wmma.m16n16k16.load.c.col.f32
+    nvvm_wmma_m16n16k16_load_c_s32_col,        // llvm.nvvm.wmma.m16n16k16.load.c.col.s32
     nvvm_wmma_m16n16k16_load_c_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16
     nvvm_wmma_m16n16k16_load_c_f32_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32
+    nvvm_wmma_m16n16k16_load_c_s32_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.s32
     nvvm_wmma_m16n16k16_load_c_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.c.row.f16
     nvvm_wmma_m16n16k16_load_c_f32_row,        // llvm.nvvm.wmma.m16n16k16.load.c.row.f32
+    nvvm_wmma_m16n16k16_load_c_s32_row,        // llvm.nvvm.wmma.m16n16k16.load.c.row.s32
     nvvm_wmma_m16n16k16_load_c_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16
     nvvm_wmma_m16n16k16_load_c_f32_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32
+    nvvm_wmma_m16n16k16_load_c_s32_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.s32
     nvvm_wmma_m16n16k16_mma_col_col_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16
     nvvm_wmma_m16n16k16_mma_col_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite
     nvvm_wmma_m16n16k16_mma_col_col_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32
@@ -4738,6 +4815,10 @@
     nvvm_wmma_m16n16k16_mma_col_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite
     nvvm_wmma_m16n16k16_mma_col_col_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32
     nvvm_wmma_m16n16k16_mma_col_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_col_col_s8,        // llvm.nvvm.wmma.m16n16k16.mma.col.col.s8
+    nvvm_wmma_m16n16k16_mma_col_col_s8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.s8.satfinite
+    nvvm_wmma_m16n16k16_mma_col_col_u8,        // llvm.nvvm.wmma.m16n16k16.mma.col.col.u8
+    nvvm_wmma_m16n16k16_mma_col_col_u8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.u8.satfinite
     nvvm_wmma_m16n16k16_mma_col_row_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16
     nvvm_wmma_m16n16k16_mma_col_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite
     nvvm_wmma_m16n16k16_mma_col_row_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32
@@ -4746,6 +4827,10 @@
     nvvm_wmma_m16n16k16_mma_col_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite
     nvvm_wmma_m16n16k16_mma_col_row_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32
     nvvm_wmma_m16n16k16_mma_col_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_col_row_s8,        // llvm.nvvm.wmma.m16n16k16.mma.col.row.s8
+    nvvm_wmma_m16n16k16_mma_col_row_s8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.s8.satfinite
+    nvvm_wmma_m16n16k16_mma_col_row_u8,        // llvm.nvvm.wmma.m16n16k16.mma.col.row.u8
+    nvvm_wmma_m16n16k16_mma_col_row_u8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.u8.satfinite
     nvvm_wmma_m16n16k16_mma_row_col_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16
     nvvm_wmma_m16n16k16_mma_row_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite
     nvvm_wmma_m16n16k16_mma_row_col_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32
@@ -4754,6 +4839,10 @@
     nvvm_wmma_m16n16k16_mma_row_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite
     nvvm_wmma_m16n16k16_mma_row_col_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32
     nvvm_wmma_m16n16k16_mma_row_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_row_col_s8,        // llvm.nvvm.wmma.m16n16k16.mma.row.col.s8
+    nvvm_wmma_m16n16k16_mma_row_col_s8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.s8.satfinite
+    nvvm_wmma_m16n16k16_mma_row_col_u8,        // llvm.nvvm.wmma.m16n16k16.mma.row.col.u8
+    nvvm_wmma_m16n16k16_mma_row_col_u8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.u8.satfinite
     nvvm_wmma_m16n16k16_mma_row_row_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16
     nvvm_wmma_m16n16k16_mma_row_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite
     nvvm_wmma_m16n16k16_mma_row_row_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32
@@ -4762,30 +4851,58 @@
     nvvm_wmma_m16n16k16_mma_row_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite
     nvvm_wmma_m16n16k16_mma_row_row_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32
     nvvm_wmma_m16n16k16_mma_row_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_row_row_s8,        // llvm.nvvm.wmma.m16n16k16.mma.row.row.s8
+    nvvm_wmma_m16n16k16_mma_row_row_s8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.s8.satfinite
+    nvvm_wmma_m16n16k16_mma_row_row_u8,        // llvm.nvvm.wmma.m16n16k16.mma.row.row.u8
+    nvvm_wmma_m16n16k16_mma_row_row_u8_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.u8.satfinite
     nvvm_wmma_m16n16k16_store_d_f16_col,       // llvm.nvvm.wmma.m16n16k16.store.d.col.f16
     nvvm_wmma_m16n16k16_store_d_f32_col,       // llvm.nvvm.wmma.m16n16k16.store.d.col.f32
+    nvvm_wmma_m16n16k16_store_d_s32_col,       // llvm.nvvm.wmma.m16n16k16.store.d.col.s32
     nvvm_wmma_m16n16k16_store_d_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16
     nvvm_wmma_m16n16k16_store_d_f32_col_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32
+    nvvm_wmma_m16n16k16_store_d_s32_col_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.s32
     nvvm_wmma_m16n16k16_store_d_f16_row,       // llvm.nvvm.wmma.m16n16k16.store.d.row.f16
     nvvm_wmma_m16n16k16_store_d_f32_row,       // llvm.nvvm.wmma.m16n16k16.store.d.row.f32
+    nvvm_wmma_m16n16k16_store_d_s32_row,       // llvm.nvvm.wmma.m16n16k16.store.d.row.s32
     nvvm_wmma_m16n16k16_store_d_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16
     nvvm_wmma_m16n16k16_store_d_f32_row_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32
+    nvvm_wmma_m16n16k16_store_d_s32_row_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.s32
     nvvm_wmma_m32n8k16_load_a_f16_col,         // llvm.nvvm.wmma.m32n8k16.load.a.col.f16
+    nvvm_wmma_m32n8k16_load_a_s8_col,          // llvm.nvvm.wmma.m32n8k16.load.a.col.s8
     nvvm_wmma_m32n8k16_load_a_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.f16
+    nvvm_wmma_m32n8k16_load_a_s8_col_stride,   // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.s8
+    nvvm_wmma_m32n8k16_load_a_u8_col_stride,   // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.u8
+    nvvm_wmma_m32n8k16_load_a_u8_col,          // llvm.nvvm.wmma.m32n8k16.load.a.col.u8
     nvvm_wmma_m32n8k16_load_a_f16_row,         // llvm.nvvm.wmma.m32n8k16.load.a.row.f16
+    nvvm_wmma_m32n8k16_load_a_s8_row,          // llvm.nvvm.wmma.m32n8k16.load.a.row.s8
     nvvm_wmma_m32n8k16_load_a_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.f16
+    nvvm_wmma_m32n8k16_load_a_s8_row_stride,   // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.s8
+    nvvm_wmma_m32n8k16_load_a_u8_row_stride,   // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.u8
+    nvvm_wmma_m32n8k16_load_a_u8_row,          // llvm.nvvm.wmma.m32n8k16.load.a.row.u8
     nvvm_wmma_m32n8k16_load_b_f16_col,         // llvm.nvvm.wmma.m32n8k16.load.b.col.f16
+    nvvm_wmma_m32n8k16_load_b_s8_col,          // llvm.nvvm.wmma.m32n8k16.load.b.col.s8
     nvvm_wmma_m32n8k16_load_b_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.f16
+    nvvm_wmma_m32n8k16_load_b_s8_col_stride,   // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.s8
+    nvvm_wmma_m32n8k16_load_b_u8_col_stride,   // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.u8
+    nvvm_wmma_m32n8k16_load_b_u8_col,          // llvm.nvvm.wmma.m32n8k16.load.b.col.u8
     nvvm_wmma_m32n8k16_load_b_f16_row,         // llvm.nvvm.wmma.m32n8k16.load.b.row.f16
+    nvvm_wmma_m32n8k16_load_b_s8_row,          // llvm.nvvm.wmma.m32n8k16.load.b.row.s8
     nvvm_wmma_m32n8k16_load_b_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.f16
+    nvvm_wmma_m32n8k16_load_b_s8_row_stride,   // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.s8
+    nvvm_wmma_m32n8k16_load_b_u8_row_stride,   // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.u8
+    nvvm_wmma_m32n8k16_load_b_u8_row,          // llvm.nvvm.wmma.m32n8k16.load.b.row.u8
     nvvm_wmma_m32n8k16_load_c_f16_col,         // llvm.nvvm.wmma.m32n8k16.load.c.col.f16
     nvvm_wmma_m32n8k16_load_c_f32_col,         // llvm.nvvm.wmma.m32n8k16.load.c.col.f32
+    nvvm_wmma_m32n8k16_load_c_s32_col,         // llvm.nvvm.wmma.m32n8k16.load.c.col.s32
     nvvm_wmma_m32n8k16_load_c_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f16
     nvvm_wmma_m32n8k16_load_c_f32_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f32
+    nvvm_wmma_m32n8k16_load_c_s32_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.s32
     nvvm_wmma_m32n8k16_load_c_f16_row,         // llvm.nvvm.wmma.m32n8k16.load.c.row.f16
     nvvm_wmma_m32n8k16_load_c_f32_row,         // llvm.nvvm.wmma.m32n8k16.load.c.row.f32
+    nvvm_wmma_m32n8k16_load_c_s32_row,         // llvm.nvvm.wmma.m32n8k16.load.c.row.s32
     nvvm_wmma_m32n8k16_load_c_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f16
     nvvm_wmma_m32n8k16_load_c_f32_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f32
+    nvvm_wmma_m32n8k16_load_c_s32_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.s32
     nvvm_wmma_m32n8k16_mma_col_col_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16
     nvvm_wmma_m32n8k16_mma_col_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16.satfinite
     nvvm_wmma_m32n8k16_mma_col_col_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32
@@ -4794,6 +4911,10 @@
     nvvm_wmma_m32n8k16_mma_col_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16.satfinite
     nvvm_wmma_m32n8k16_mma_col_col_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32
     nvvm_wmma_m32n8k16_mma_col_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_col_col_s8,         // llvm.nvvm.wmma.m32n8k16.mma.col.col.s8
+    nvvm_wmma_m32n8k16_mma_col_col_s8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.s8.satfinite
+    nvvm_wmma_m32n8k16_mma_col_col_u8,         // llvm.nvvm.wmma.m32n8k16.mma.col.col.u8
+    nvvm_wmma_m32n8k16_mma_col_col_u8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.u8.satfinite
     nvvm_wmma_m32n8k16_mma_col_row_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16
     nvvm_wmma_m32n8k16_mma_col_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16.satfinite
     nvvm_wmma_m32n8k16_mma_col_row_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32
@@ -4802,6 +4923,10 @@
     nvvm_wmma_m32n8k16_mma_col_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16.satfinite
     nvvm_wmma_m32n8k16_mma_col_row_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32
     nvvm_wmma_m32n8k16_mma_col_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_col_row_s8,         // llvm.nvvm.wmma.m32n8k16.mma.col.row.s8
+    nvvm_wmma_m32n8k16_mma_col_row_s8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.s8.satfinite
+    nvvm_wmma_m32n8k16_mma_col_row_u8,         // llvm.nvvm.wmma.m32n8k16.mma.col.row.u8
+    nvvm_wmma_m32n8k16_mma_col_row_u8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.u8.satfinite
     nvvm_wmma_m32n8k16_mma_row_col_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16
     nvvm_wmma_m32n8k16_mma_row_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16.satfinite
     nvvm_wmma_m32n8k16_mma_row_col_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32
@@ -4810,6 +4935,10 @@
     nvvm_wmma_m32n8k16_mma_row_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16.satfinite
     nvvm_wmma_m32n8k16_mma_row_col_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32
     nvvm_wmma_m32n8k16_mma_row_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_row_col_s8,         // llvm.nvvm.wmma.m32n8k16.mma.row.col.s8
+    nvvm_wmma_m32n8k16_mma_row_col_s8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.s8.satfinite
+    nvvm_wmma_m32n8k16_mma_row_col_u8,         // llvm.nvvm.wmma.m32n8k16.mma.row.col.u8
+    nvvm_wmma_m32n8k16_mma_row_col_u8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.u8.satfinite
     nvvm_wmma_m32n8k16_mma_row_row_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16
     nvvm_wmma_m32n8k16_mma_row_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16.satfinite
     nvvm_wmma_m32n8k16_mma_row_row_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32
@@ -4818,30 +4947,58 @@
     nvvm_wmma_m32n8k16_mma_row_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16.satfinite
     nvvm_wmma_m32n8k16_mma_row_row_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32
     nvvm_wmma_m32n8k16_mma_row_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_row_row_s8,         // llvm.nvvm.wmma.m32n8k16.mma.row.row.s8
+    nvvm_wmma_m32n8k16_mma_row_row_s8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.s8.satfinite
+    nvvm_wmma_m32n8k16_mma_row_row_u8,         // llvm.nvvm.wmma.m32n8k16.mma.row.row.u8
+    nvvm_wmma_m32n8k16_mma_row_row_u8_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.u8.satfinite
     nvvm_wmma_m32n8k16_store_d_f16_col,        // llvm.nvvm.wmma.m32n8k16.store.d.col.f16
     nvvm_wmma_m32n8k16_store_d_f32_col,        // llvm.nvvm.wmma.m32n8k16.store.d.col.f32
+    nvvm_wmma_m32n8k16_store_d_s32_col,        // llvm.nvvm.wmma.m32n8k16.store.d.col.s32
     nvvm_wmma_m32n8k16_store_d_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f16
     nvvm_wmma_m32n8k16_store_d_f32_col_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f32
+    nvvm_wmma_m32n8k16_store_d_s32_col_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.s32
     nvvm_wmma_m32n8k16_store_d_f16_row,        // llvm.nvvm.wmma.m32n8k16.store.d.row.f16
     nvvm_wmma_m32n8k16_store_d_f32_row,        // llvm.nvvm.wmma.m32n8k16.store.d.row.f32
+    nvvm_wmma_m32n8k16_store_d_s32_row,        // llvm.nvvm.wmma.m32n8k16.store.d.row.s32
     nvvm_wmma_m32n8k16_store_d_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f16
     nvvm_wmma_m32n8k16_store_d_f32_row_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f32
+    nvvm_wmma_m32n8k16_store_d_s32_row_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.s32
     nvvm_wmma_m8n32k16_load_a_f16_col,         // llvm.nvvm.wmma.m8n32k16.load.a.col.f16
+    nvvm_wmma_m8n32k16_load_a_s8_col,          // llvm.nvvm.wmma.m8n32k16.load.a.col.s8
     nvvm_wmma_m8n32k16_load_a_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.f16
+    nvvm_wmma_m8n32k16_load_a_s8_col_stride,   // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.s8
+    nvvm_wmma_m8n32k16_load_a_u8_col_stride,   // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.u8
+    nvvm_wmma_m8n32k16_load_a_u8_col,          // llvm.nvvm.wmma.m8n32k16.load.a.col.u8
     nvvm_wmma_m8n32k16_load_a_f16_row,         // llvm.nvvm.wmma.m8n32k16.load.a.row.f16
+    nvvm_wmma_m8n32k16_load_a_s8_row,          // llvm.nvvm.wmma.m8n32k16.load.a.row.s8
     nvvm_wmma_m8n32k16_load_a_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.f16
+    nvvm_wmma_m8n32k16_load_a_s8_row_stride,   // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.s8
+    nvvm_wmma_m8n32k16_load_a_u8_row_stride,   // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.u8
+    nvvm_wmma_m8n32k16_load_a_u8_row,          // llvm.nvvm.wmma.m8n32k16.load.a.row.u8
     nvvm_wmma_m8n32k16_load_b_f16_col,         // llvm.nvvm.wmma.m8n32k16.load.b.col.f16
+    nvvm_wmma_m8n32k16_load_b_s8_col,          // llvm.nvvm.wmma.m8n32k16.load.b.col.s8
     nvvm_wmma_m8n32k16_load_b_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.f16
+    nvvm_wmma_m8n32k16_load_b_s8_col_stride,   // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.s8
+    nvvm_wmma_m8n32k16_load_b_u8_col_stride,   // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.u8
+    nvvm_wmma_m8n32k16_load_b_u8_col,          // llvm.nvvm.wmma.m8n32k16.load.b.col.u8
     nvvm_wmma_m8n32k16_load_b_f16_row,         // llvm.nvvm.wmma.m8n32k16.load.b.row.f16
+    nvvm_wmma_m8n32k16_load_b_s8_row,          // llvm.nvvm.wmma.m8n32k16.load.b.row.s8
     nvvm_wmma_m8n32k16_load_b_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.f16
+    nvvm_wmma_m8n32k16_load_b_s8_row_stride,   // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.s8
+    nvvm_wmma_m8n32k16_load_b_u8_row_stride,   // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.u8
+    nvvm_wmma_m8n32k16_load_b_u8_row,          // llvm.nvvm.wmma.m8n32k16.load.b.row.u8
     nvvm_wmma_m8n32k16_load_c_f16_col,         // llvm.nvvm.wmma.m8n32k16.load.c.col.f16
     nvvm_wmma_m8n32k16_load_c_f32_col,         // llvm.nvvm.wmma.m8n32k16.load.c.col.f32
+    nvvm_wmma_m8n32k16_load_c_s32_col,         // llvm.nvvm.wmma.m8n32k16.load.c.col.s32
     nvvm_wmma_m8n32k16_load_c_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f16
     nvvm_wmma_m8n32k16_load_c_f32_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f32
+    nvvm_wmma_m8n32k16_load_c_s32_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.s32
     nvvm_wmma_m8n32k16_load_c_f16_row,         // llvm.nvvm.wmma.m8n32k16.load.c.row.f16
     nvvm_wmma_m8n32k16_load_c_f32_row,         // llvm.nvvm.wmma.m8n32k16.load.c.row.f32
+    nvvm_wmma_m8n32k16_load_c_s32_row,         // llvm.nvvm.wmma.m8n32k16.load.c.row.s32
     nvvm_wmma_m8n32k16_load_c_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f16
     nvvm_wmma_m8n32k16_load_c_f32_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f32
+    nvvm_wmma_m8n32k16_load_c_s32_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.s32
     nvvm_wmma_m8n32k16_mma_col_col_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16
     nvvm_wmma_m8n32k16_mma_col_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16.satfinite
     nvvm_wmma_m8n32k16_mma_col_col_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32
@@ -4850,6 +5007,10 @@
     nvvm_wmma_m8n32k16_mma_col_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16.satfinite
     nvvm_wmma_m8n32k16_mma_col_col_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32
     nvvm_wmma_m8n32k16_mma_col_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_col_col_s8,         // llvm.nvvm.wmma.m8n32k16.mma.col.col.s8
+    nvvm_wmma_m8n32k16_mma_col_col_s8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.s8.satfinite
+    nvvm_wmma_m8n32k16_mma_col_col_u8,         // llvm.nvvm.wmma.m8n32k16.mma.col.col.u8
+    nvvm_wmma_m8n32k16_mma_col_col_u8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.u8.satfinite
     nvvm_wmma_m8n32k16_mma_col_row_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16
     nvvm_wmma_m8n32k16_mma_col_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16.satfinite
     nvvm_wmma_m8n32k16_mma_col_row_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32
@@ -4858,6 +5019,10 @@
     nvvm_wmma_m8n32k16_mma_col_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16.satfinite
     nvvm_wmma_m8n32k16_mma_col_row_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32
     nvvm_wmma_m8n32k16_mma_col_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_col_row_s8,         // llvm.nvvm.wmma.m8n32k16.mma.col.row.s8
+    nvvm_wmma_m8n32k16_mma_col_row_s8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.s8.satfinite
+    nvvm_wmma_m8n32k16_mma_col_row_u8,         // llvm.nvvm.wmma.m8n32k16.mma.col.row.u8
+    nvvm_wmma_m8n32k16_mma_col_row_u8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.u8.satfinite
     nvvm_wmma_m8n32k16_mma_row_col_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16
     nvvm_wmma_m8n32k16_mma_row_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16.satfinite
     nvvm_wmma_m8n32k16_mma_row_col_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32
@@ -4866,6 +5031,10 @@
     nvvm_wmma_m8n32k16_mma_row_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16.satfinite
     nvvm_wmma_m8n32k16_mma_row_col_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32
     nvvm_wmma_m8n32k16_mma_row_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_row_col_s8,         // llvm.nvvm.wmma.m8n32k16.mma.row.col.s8
+    nvvm_wmma_m8n32k16_mma_row_col_s8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.s8.satfinite
+    nvvm_wmma_m8n32k16_mma_row_col_u8,         // llvm.nvvm.wmma.m8n32k16.mma.row.col.u8
+    nvvm_wmma_m8n32k16_mma_row_col_u8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.u8.satfinite
     nvvm_wmma_m8n32k16_mma_row_row_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16
     nvvm_wmma_m8n32k16_mma_row_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16.satfinite
     nvvm_wmma_m8n32k16_mma_row_row_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32
@@ -4874,14 +5043,55 @@
     nvvm_wmma_m8n32k16_mma_row_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16.satfinite
     nvvm_wmma_m8n32k16_mma_row_row_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32
     nvvm_wmma_m8n32k16_mma_row_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_row_row_s8,         // llvm.nvvm.wmma.m8n32k16.mma.row.row.s8
+    nvvm_wmma_m8n32k16_mma_row_row_s8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.s8.satfinite
+    nvvm_wmma_m8n32k16_mma_row_row_u8,         // llvm.nvvm.wmma.m8n32k16.mma.row.row.u8
+    nvvm_wmma_m8n32k16_mma_row_row_u8_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.u8.satfinite
     nvvm_wmma_m8n32k16_store_d_f16_col,        // llvm.nvvm.wmma.m8n32k16.store.d.col.f16
     nvvm_wmma_m8n32k16_store_d_f32_col,        // llvm.nvvm.wmma.m8n32k16.store.d.col.f32
+    nvvm_wmma_m8n32k16_store_d_s32_col,        // llvm.nvvm.wmma.m8n32k16.store.d.col.s32
     nvvm_wmma_m8n32k16_store_d_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f16
     nvvm_wmma_m8n32k16_store_d_f32_col_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f32
+    nvvm_wmma_m8n32k16_store_d_s32_col_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.s32
     nvvm_wmma_m8n32k16_store_d_f16_row,        // llvm.nvvm.wmma.m8n32k16.store.d.row.f16
     nvvm_wmma_m8n32k16_store_d_f32_row,        // llvm.nvvm.wmma.m8n32k16.store.d.row.f32
+    nvvm_wmma_m8n32k16_store_d_s32_row,        // llvm.nvvm.wmma.m8n32k16.store.d.row.s32
     nvvm_wmma_m8n32k16_store_d_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f16
     nvvm_wmma_m8n32k16_store_d_f32_row_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f32
+    nvvm_wmma_m8n32k16_store_d_s32_row_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.s32
+    nvvm_wmma_m8n8k128_load_a_b1_row,          // llvm.nvvm.wmma.m8n8k128.load.a.row.b1
+    nvvm_wmma_m8n8k128_load_a_b1_row_stride,   // llvm.nvvm.wmma.m8n8k128.load.a.row.stride.b1
+    nvvm_wmma_m8n8k128_load_b_b1_col,          // llvm.nvvm.wmma.m8n8k128.load.b.col.b1
+    nvvm_wmma_m8n8k128_load_b_b1_col_stride,   // llvm.nvvm.wmma.m8n8k128.load.b.col.stride.b1
+    nvvm_wmma_m8n8k128_load_c_s32_col,         // llvm.nvvm.wmma.m8n8k128.load.c.col.s32
+    nvvm_wmma_m8n8k128_load_c_s32_col_stride,  // llvm.nvvm.wmma.m8n8k128.load.c.col.stride.s32
+    nvvm_wmma_m8n8k128_load_c_s32_row,         // llvm.nvvm.wmma.m8n8k128.load.c.row.s32
+    nvvm_wmma_m8n8k128_load_c_s32_row_stride,  // llvm.nvvm.wmma.m8n8k128.load.c.row.stride.s32
+    nvvm_wmma_m8n8k128_mma_row_col_b1,         // llvm.nvvm.wmma.m8n8k128.mma.row.col.b1
+    nvvm_wmma_m8n8k128_store_d_s32_col,        // llvm.nvvm.wmma.m8n8k128.store.d.col.s32
+    nvvm_wmma_m8n8k128_store_d_s32_col_stride,  // llvm.nvvm.wmma.m8n8k128.store.d.col.stride.s32
+    nvvm_wmma_m8n8k128_store_d_s32_row,        // llvm.nvvm.wmma.m8n8k128.store.d.row.s32
+    nvvm_wmma_m8n8k128_store_d_s32_row_stride,  // llvm.nvvm.wmma.m8n8k128.store.d.row.stride.s32
+    nvvm_wmma_m8n8k32_load_a_s4_row,           // llvm.nvvm.wmma.m8n8k32.load.a.row.s4
+    nvvm_wmma_m8n8k32_load_a_s4_row_stride,    // llvm.nvvm.wmma.m8n8k32.load.a.row.stride.s4
+    nvvm_wmma_m8n8k32_load_a_u4_row_stride,    // llvm.nvvm.wmma.m8n8k32.load.a.row.stride.u4
+    nvvm_wmma_m8n8k32_load_a_u4_row,           // llvm.nvvm.wmma.m8n8k32.load.a.row.u4
+    nvvm_wmma_m8n8k32_load_b_s4_col,           // llvm.nvvm.wmma.m8n8k32.load.b.col.s4
+    nvvm_wmma_m8n8k32_load_b_s4_col_stride,    // llvm.nvvm.wmma.m8n8k32.load.b.col.stride.s4
+    nvvm_wmma_m8n8k32_load_b_u4_col_stride,    // llvm.nvvm.wmma.m8n8k32.load.b.col.stride.u4
+    nvvm_wmma_m8n8k32_load_b_u4_col,           // llvm.nvvm.wmma.m8n8k32.load.b.col.u4
+    nvvm_wmma_m8n8k32_load_c_s32_col,          // llvm.nvvm.wmma.m8n8k32.load.c.col.s32
+    nvvm_wmma_m8n8k32_load_c_s32_col_stride,   // llvm.nvvm.wmma.m8n8k32.load.c.col.stride.s32
+    nvvm_wmma_m8n8k32_load_c_s32_row,          // llvm.nvvm.wmma.m8n8k32.load.c.row.s32
+    nvvm_wmma_m8n8k32_load_c_s32_row_stride,   // llvm.nvvm.wmma.m8n8k32.load.c.row.stride.s32
+    nvvm_wmma_m8n8k32_mma_row_col_s4,          // llvm.nvvm.wmma.m8n8k32.mma.row.col.s4
+    nvvm_wmma_m8n8k32_mma_row_col_s4_satfinite,  // llvm.nvvm.wmma.m8n8k32.mma.row.col.s4.satfinite
+    nvvm_wmma_m8n8k32_mma_row_col_u4,          // llvm.nvvm.wmma.m8n8k32.mma.row.col.u4
+    nvvm_wmma_m8n8k32_mma_row_col_u4_satfinite,  // llvm.nvvm.wmma.m8n8k32.mma.row.col.u4.satfinite
+    nvvm_wmma_m8n8k32_store_d_s32_col,         // llvm.nvvm.wmma.m8n8k32.store.d.col.s32
+    nvvm_wmma_m8n8k32_store_d_s32_col_stride,  // llvm.nvvm.wmma.m8n8k32.store.d.col.stride.s32
+    nvvm_wmma_m8n8k32_store_d_s32_row,         // llvm.nvvm.wmma.m8n8k32.store.d.row.s32
+    nvvm_wmma_m8n8k32_store_d_s32_row_stride,  // llvm.nvvm.wmma.m8n8k32.store.d.row.stride.s32
     ppc_addf128_round_to_odd,                  // llvm.ppc.addf128.round.to.odd
     ppc_altivec_crypto_vcipher,                // llvm.ppc.altivec.crypto.vcipher
     ppc_altivec_crypto_vcipherlast,            // llvm.ppc.altivec.crypto.vcipherlast
@@ -5209,6 +5419,7 @@
     ppc_set_texasru,                           // llvm.ppc.set.texasru
     ppc_set_tfhar,                             // llvm.ppc.set.tfhar
     ppc_set_tfiar,                             // llvm.ppc.set.tfiar
+    ppc_setrnd,                                // llvm.ppc.setrnd
     ppc_sqrtf128_round_to_odd,                 // llvm.ppc.sqrtf128.round.to.odd
     ppc_subf128_round_to_odd,                  // llvm.ppc.subf128.round.to.odd
     ppc_sync,                                  // llvm.ppc.sync
@@ -5575,7 +5786,7 @@
     wasm_memory_grow,                          // llvm.wasm.memory.grow
     wasm_memory_init,                          // llvm.wasm.memory.init
     wasm_memory_size,                          // llvm.wasm.memory.size
-    wasm_rethrow,                              // llvm.wasm.rethrow
+    wasm_rethrow_in_catch,                     // llvm.wasm.rethrow.in.catch
     wasm_sub_saturate_signed,                  // llvm.wasm.sub.saturate.signed
     wasm_sub_saturate_unsigned,                // llvm.wasm.sub.saturate.unsigned
     wasm_throw,                                // llvm.wasm.throw
@@ -5706,6 +5917,8 @@
     x86_avx2_packsswb,                         // llvm.x86.avx2.packsswb
     x86_avx2_packusdw,                         // llvm.x86.avx2.packusdw
     x86_avx2_packuswb,                         // llvm.x86.avx2.packuswb
+    x86_avx2_pavg_b,                           // llvm.x86.avx2.pavg.b
+    x86_avx2_pavg_w,                           // llvm.x86.avx2.pavg.w
     x86_avx2_pblendvb,                         // llvm.x86.avx2.pblendvb
     x86_avx2_permd,                            // llvm.x86.avx2.permd
     x86_avx2_permps,                           // llvm.x86.avx2.permps
@@ -6142,6 +6355,8 @@
     x86_avx512_packsswb_512,                   // llvm.x86.avx512.packsswb.512
     x86_avx512_packusdw_512,                   // llvm.x86.avx512.packusdw.512
     x86_avx512_packuswb_512,                   // llvm.x86.avx512.packuswb.512
+    x86_avx512_pavg_b_512,                     // llvm.x86.avx512.pavg.b.512
+    x86_avx512_pavg_w_512,                     // llvm.x86.avx512.pavg.w.512
     x86_avx512_permvar_df_256,                 // llvm.x86.avx512.permvar.df.256
     x86_avx512_permvar_df_512,                 // llvm.x86.avx512.permvar.df.512
     x86_avx512_permvar_di_256,                 // llvm.x86.avx512.permvar.di.256
@@ -6283,6 +6498,12 @@
     x86_avx512_vfmadd_ps_512,                  // llvm.x86.avx512.vfmadd.ps.512
     x86_avx512_vfmaddsub_pd_512,               // llvm.x86.avx512.vfmaddsub.pd.512
     x86_avx512_vfmaddsub_ps_512,               // llvm.x86.avx512.vfmaddsub.ps.512
+    x86_avx512_vp2intersect_d_128,             // llvm.x86.avx512.vp2intersect.d.128
+    x86_avx512_vp2intersect_d_256,             // llvm.x86.avx512.vp2intersect.d.256
+    x86_avx512_vp2intersect_d_512,             // llvm.x86.avx512.vp2intersect.d.512
+    x86_avx512_vp2intersect_q_128,             // llvm.x86.avx512.vp2intersect.q.128
+    x86_avx512_vp2intersect_q_256,             // llvm.x86.avx512.vp2intersect.q.256
+    x86_avx512_vp2intersect_q_512,             // llvm.x86.avx512.vp2intersect.q.512
     x86_avx512_vpdpbusd_128,                   // llvm.x86.avx512.vpdpbusd.128
     x86_avx512_vpdpbusd_256,                   // llvm.x86.avx512.vpdpbusd.256
     x86_avx512_vpdpbusd_512,                   // llvm.x86.avx512.vpdpbusd.512
@@ -6324,6 +6545,15 @@
     x86_avx512_vpshufbitqmb_128,               // llvm.x86.avx512.vpshufbitqmb.128
     x86_avx512_vpshufbitqmb_256,               // llvm.x86.avx512.vpshufbitqmb.256
     x86_avx512_vpshufbitqmb_512,               // llvm.x86.avx512.vpshufbitqmb.512
+    x86_avx512bf16_cvtne2ps2bf16_128,          // llvm.x86.avx512bf16.cvtne2ps2bf16.128
+    x86_avx512bf16_cvtne2ps2bf16_256,          // llvm.x86.avx512bf16.cvtne2ps2bf16.256
+    x86_avx512bf16_cvtne2ps2bf16_512,          // llvm.x86.avx512bf16.cvtne2ps2bf16.512
+    x86_avx512bf16_cvtneps2bf16_256,           // llvm.x86.avx512bf16.cvtneps2bf16.256
+    x86_avx512bf16_cvtneps2bf16_512,           // llvm.x86.avx512bf16.cvtneps2bf16.512
+    x86_avx512bf16_dpbf16ps_128,               // llvm.x86.avx512bf16.dpbf16ps.128
+    x86_avx512bf16_dpbf16ps_256,               // llvm.x86.avx512bf16.dpbf16ps.256
+    x86_avx512bf16_dpbf16ps_512,               // llvm.x86.avx512bf16.dpbf16ps.512
+    x86_avx512bf16_mask_cvtneps2bf16_128,      // llvm.x86.avx512bf16.mask.cvtneps2bf16.128
     x86_bmi_bextr_32,                          // llvm.x86.bmi.bextr.32
     x86_bmi_bextr_64,                          // llvm.x86.bmi.bextr.64
     x86_bmi_bzhi_32,                           // llvm.x86.bmi.bzhi.32
@@ -6339,6 +6569,8 @@
     x86_clzero,                                // llvm.x86.clzero
     x86_directstore32,                         // llvm.x86.directstore32
     x86_directstore64,                         // llvm.x86.directstore64
+    x86_enqcmd,                                // llvm.x86.enqcmd
+    x86_enqcmds,                               // llvm.x86.enqcmds
     x86_flags_read_u32,                        // llvm.x86.flags.read.u32
     x86_flags_read_u64,                        // llvm.x86.flags.read.u64
     x86_flags_write_u32,                       // llvm.x86.flags.write.u32
@@ -6534,6 +6766,8 @@
     x86_sse2_packsswb_128,                     // llvm.x86.sse2.packsswb.128
     x86_sse2_packuswb_128,                     // llvm.x86.sse2.packuswb.128
     x86_sse2_pause,                            // llvm.x86.sse2.pause
+    x86_sse2_pavg_b,                           // llvm.x86.sse2.pavg.b
+    x86_sse2_pavg_w,                           // llvm.x86.sse2.pavg.w
     x86_sse2_pmadd_wd,                         // llvm.x86.sse2.pmadd.wd
     x86_sse2_pmovmskb_128,                     // llvm.x86.sse2.pmovmskb.128
     x86_sse2_pmulh_w,                          // llvm.x86.sse2.pmulh.w
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicImpl.inc b/linux-x64/clang/include/llvm/IR/IntrinsicImpl.inc
index 4ce577a..c6ff35c 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicImpl.inc
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicImpl.inc
@@ -22,21 +22,21 @@
   size_t Count;
 };
 static constexpr IntrinsicTargetInfo TargetInfos[] = {
-  {llvm::StringLiteral(""), 0, 229},
-  {llvm::StringLiteral("aarch64"), 229, 197},
-  {llvm::StringLiteral("amdgcn"), 426, 635},
-  {llvm::StringLiteral("arm"), 1061, 251},
-  {llvm::StringLiteral("bpf"), 1312, 4},
-  {llvm::StringLiteral("hexagon"), 1316, 1766},
-  {llvm::StringLiteral("mips"), 3082, 667},
-  {llvm::StringLiteral("nvvm"), 3749, 1117},
-  {llvm::StringLiteral("ppc"), 4866, 405},
-  {llvm::StringLiteral("r600"), 5271, 35},
-  {llvm::StringLiteral("riscv"), 5306, 18},
-  {llvm::StringLiteral("s390"), 5324, 220},
-  {llvm::StringLiteral("wasm"), 5544, 21},
-  {llvm::StringLiteral("x86"), 5565, 1149},
-  {llvm::StringLiteral("xcore"), 6714, 53},
+  {llvm::StringLiteral(""), 0, 243},
+  {llvm::StringLiteral("aarch64"), 243, 204},
+  {llvm::StringLiteral("amdgcn"), 447, 666},
+  {llvm::StringLiteral("arm"), 1113, 256},
+  {llvm::StringLiteral("bpf"), 1369, 4},
+  {llvm::StringLiteral("hexagon"), 1373, 1766},
+  {llvm::StringLiteral("mips"), 3139, 667},
+  {llvm::StringLiteral("nvvm"), 3806, 1270},
+  {llvm::StringLiteral("ppc"), 5076, 406},
+  {llvm::StringLiteral("r600"), 5482, 35},
+  {llvm::StringLiteral("riscv"), 5517, 18},
+  {llvm::StringLiteral("s390"), 5535, 220},
+  {llvm::StringLiteral("wasm"), 5755, 21},
+  {llvm::StringLiteral("x86"), 5776, 1172},
+  {llvm::StringLiteral("xcore"), 6948, 53},
 };
 #endif
 
@@ -108,6 +108,8 @@
   "llvm.experimental.constrained.floor",
   "llvm.experimental.constrained.fma",
   "llvm.experimental.constrained.fmul",
+  "llvm.experimental.constrained.fpext",
+  "llvm.experimental.constrained.fptrunc",
   "llvm.experimental.constrained.frem",
   "llvm.experimental.constrained.fsub",
   "llvm.experimental.constrained.log",
@@ -133,16 +135,16 @@
   "llvm.experimental.stackmap",
   "llvm.experimental.vector.reduce.add",
   "llvm.experimental.vector.reduce.and",
-  "llvm.experimental.vector.reduce.fadd",
   "llvm.experimental.vector.reduce.fmax",
   "llvm.experimental.vector.reduce.fmin",
-  "llvm.experimental.vector.reduce.fmul",
   "llvm.experimental.vector.reduce.mul",
   "llvm.experimental.vector.reduce.or",
   "llvm.experimental.vector.reduce.smax",
   "llvm.experimental.vector.reduce.smin",
   "llvm.experimental.vector.reduce.umax",
   "llvm.experimental.vector.reduce.umin",
+  "llvm.experimental.vector.reduce.v2.fadd",
+  "llvm.experimental.vector.reduce.v2.fmul",
   "llvm.experimental.vector.reduce.xor",
   "llvm.experimental.widenable.condition",
   "llvm.fabs",
@@ -169,6 +171,8 @@
   "llvm.launder.invariant.group",
   "llvm.lifetime.end",
   "llvm.lifetime.start",
+  "llvm.llrint",
+  "llvm.llround",
   "llvm.load.relative",
   "llvm.localaddress",
   "llvm.localescape",
@@ -177,6 +181,10 @@
   "llvm.log10",
   "llvm.log2",
   "llvm.longjmp",
+  "llvm.loop.decrement",
+  "llvm.loop.decrement.reg",
+  "llvm.lrint",
+  "llvm.lround",
   "llvm.masked.compressstore",
   "llvm.masked.expandload",
   "llvm.masked.gather",
@@ -229,6 +237,9 @@
   "llvm.pow",
   "llvm.powi",
   "llvm.prefetch",
+  "llvm.preserve.array.access.index",
+  "llvm.preserve.struct.access.index",
+  "llvm.preserve.union.access.index",
   "llvm.ptr.annotation",
   "llvm.read_register",
   "llvm.readcyclecounter",
@@ -237,12 +248,14 @@
   "llvm.round",
   "llvm.sadd.sat",
   "llvm.sadd.with.overflow",
+  "llvm.set.loop.iterations",
   "llvm.setjmp",
   "llvm.sideeffect",
   "llvm.siglongjmp",
   "llvm.sigsetjmp",
   "llvm.sin",
   "llvm.smul.fix",
+  "llvm.smul.fix.sat",
   "llvm.smul.with.overflow",
   "llvm.sponentry",
   "llvm.sqrt",
@@ -254,6 +267,7 @@
   "llvm.stackrestore",
   "llvm.stacksave",
   "llvm.strip.invariant.group",
+  "llvm.test.set.loop.iterations",
   "llvm.thread.pointer",
   "llvm.trap",
   "llvm.trunc",
@@ -272,6 +286,7 @@
   "llvm.write_register",
   "llvm.xray.customevent",
   "llvm.xray.typedevent",
+  "llvm.aarch64.addg",
   "llvm.aarch64.clrex",
   "llvm.aarch64.crc32b",
   "llvm.aarch64.crc32cb",
@@ -298,10 +313,13 @@
   "llvm.aarch64.dmb",
   "llvm.aarch64.dsb",
   "llvm.aarch64.get.fpcr",
+  "llvm.aarch64.gmi",
   "llvm.aarch64.hint",
+  "llvm.aarch64.irg",
   "llvm.aarch64.isb",
   "llvm.aarch64.ldaxp",
   "llvm.aarch64.ldaxr",
+  "llvm.aarch64.ldg",
   "llvm.aarch64.ldxp",
   "llvm.aarch64.ldxr",
   "llvm.aarch64.neon.abs",
@@ -311,6 +329,7 @@
   "llvm.aarch64.neon.fabd",
   "llvm.aarch64.neon.facge",
   "llvm.aarch64.neon.facgt",
+  "llvm.aarch64.neon.faddp",
   "llvm.aarch64.neon.faddv",
   "llvm.aarch64.neon.fcvtas",
   "llvm.aarch64.neon.fcvtau",
@@ -464,10 +483,12 @@
   "llvm.aarch64.sisd.fabd",
   "llvm.aarch64.sisd.fcvtxn",
   "llvm.aarch64.space",
+  "llvm.aarch64.stg",
   "llvm.aarch64.stlxp",
   "llvm.aarch64.stlxr",
   "llvm.aarch64.stxp",
   "llvm.aarch64.stxr",
+  "llvm.aarch64.subp",
   "llvm.aarch64.udiv",
   "llvm.amdgcn.alignbit",
   "llvm.amdgcn.alignbyte",
@@ -514,6 +535,12 @@
   "llvm.amdgcn.ds.fadd",
   "llvm.amdgcn.ds.fmax",
   "llvm.amdgcn.ds.fmin",
+  "llvm.amdgcn.ds.gws.barrier",
+  "llvm.amdgcn.ds.gws.init",
+  "llvm.amdgcn.ds.gws.sema.br",
+  "llvm.amdgcn.ds.gws.sema.p",
+  "llvm.amdgcn.ds.gws.sema.release.all",
+  "llvm.amdgcn.ds.gws.sema.v",
   "llvm.amdgcn.ds.ordered.add",
   "llvm.amdgcn.ds.ordered.swap",
   "llvm.amdgcn.ds.permute",
@@ -1010,10 +1037,33 @@
   "llvm.amdgcn.loop",
   "llvm.amdgcn.mbcnt.hi",
   "llvm.amdgcn.mbcnt.lo",
+  "llvm.amdgcn.mfma.f32.16x16x16f16",
+  "llvm.amdgcn.mfma.f32.16x16x1f32",
+  "llvm.amdgcn.mfma.f32.16x16x2bf16",
+  "llvm.amdgcn.mfma.f32.16x16x4f16",
+  "llvm.amdgcn.mfma.f32.16x16x4f32",
+  "llvm.amdgcn.mfma.f32.16x16x8bf16",
+  "llvm.amdgcn.mfma.f32.32x32x1f32",
+  "llvm.amdgcn.mfma.f32.32x32x2bf16",
+  "llvm.amdgcn.mfma.f32.32x32x2f32",
+  "llvm.amdgcn.mfma.f32.32x32x4bf16",
+  "llvm.amdgcn.mfma.f32.32x32x4f16",
+  "llvm.amdgcn.mfma.f32.32x32x8f16",
+  "llvm.amdgcn.mfma.f32.4x4x1f32",
+  "llvm.amdgcn.mfma.f32.4x4x2bf16",
+  "llvm.amdgcn.mfma.f32.4x4x4f16",
+  "llvm.amdgcn.mfma.i32.16x16x16i8",
+  "llvm.amdgcn.mfma.i32.16x16x4i8",
+  "llvm.amdgcn.mfma.i32.32x32x4i8",
+  "llvm.amdgcn.mfma.i32.32x32x8i8",
+  "llvm.amdgcn.mfma.i32.4x4x4i8",
   "llvm.amdgcn.mov.dpp",
+  "llvm.amdgcn.mov.dpp8",
   "llvm.amdgcn.mqsad.pk.u16.u8",
   "llvm.amdgcn.mqsad.u32.u8",
   "llvm.amdgcn.msad.u8",
+  "llvm.amdgcn.permlane16",
+  "llvm.amdgcn.permlanex16",
   "llvm.amdgcn.ps.live",
   "llvm.amdgcn.qsad.pk.u16.u8",
   "llvm.amdgcn.queue.ptr",
@@ -1048,6 +1098,7 @@
   "llvm.amdgcn.s.dcache.wb",
   "llvm.amdgcn.s.dcache.wb.vol",
   "llvm.amdgcn.s.decperflevel",
+  "llvm.amdgcn.s.get.waveid.in.workgroup",
   "llvm.amdgcn.s.getpc",
   "llvm.amdgcn.s.getreg",
   "llvm.amdgcn.s.incperflevel",
@@ -1094,6 +1145,7 @@
   "llvm.amdgcn.unreachable",
   "llvm.amdgcn.update.dpp",
   "llvm.amdgcn.wave.barrier",
+  "llvm.amdgcn.wavefrontsize",
   "llvm.amdgcn.workgroup.id.x",
   "llvm.amdgcn.workgroup.id.y",
   "llvm.amdgcn.workgroup.id.z",
@@ -1107,6 +1159,10 @@
   "llvm.arm.cdp",
   "llvm.arm.cdp2",
   "llvm.arm.clrex",
+  "llvm.arm.cmse.tt",
+  "llvm.arm.cmse.tta",
+  "llvm.arm.cmse.ttat",
+  "llvm.arm.cmse.ttt",
   "llvm.arm.crc32b",
   "llvm.arm.crc32cb",
   "llvm.arm.crc32ch",
@@ -1117,6 +1173,7 @@
   "llvm.arm.dmb",
   "llvm.arm.dsb",
   "llvm.arm.get.fpscr",
+  "llvm.arm.gnu.eabi.mcount",
   "llvm.arm.hint",
   "llvm.arm.isb",
   "llvm.arm.ldaex",
@@ -4742,21 +4799,41 @@
   "llvm.nvvm.vote.uni",
   "llvm.nvvm.vote.uni.sync",
   "llvm.nvvm.wmma.m16n16k16.load.a.col.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.a.col.s8",
   "llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.a.col.stride.s8",
+  "llvm.nvvm.wmma.m16n16k16.load.a.col.stride.u8",
+  "llvm.nvvm.wmma.m16n16k16.load.a.col.u8",
   "llvm.nvvm.wmma.m16n16k16.load.a.row.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.a.row.s8",
   "llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.a.row.stride.s8",
+  "llvm.nvvm.wmma.m16n16k16.load.a.row.stride.u8",
+  "llvm.nvvm.wmma.m16n16k16.load.a.row.u8",
   "llvm.nvvm.wmma.m16n16k16.load.b.col.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.col.s8",
   "llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.col.stride.s8",
+  "llvm.nvvm.wmma.m16n16k16.load.b.col.stride.u8",
+  "llvm.nvvm.wmma.m16n16k16.load.b.col.u8",
   "llvm.nvvm.wmma.m16n16k16.load.b.row.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.row.s8",
   "llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.row.stride.s8",
+  "llvm.nvvm.wmma.m16n16k16.load.b.row.stride.u8",
+  "llvm.nvvm.wmma.m16n16k16.load.b.row.u8",
   "llvm.nvvm.wmma.m16n16k16.load.c.col.f16",
   "llvm.nvvm.wmma.m16n16k16.load.c.col.f32",
+  "llvm.nvvm.wmma.m16n16k16.load.c.col.s32",
   "llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16",
   "llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32",
+  "llvm.nvvm.wmma.m16n16k16.load.c.col.stride.s32",
   "llvm.nvvm.wmma.m16n16k16.load.c.row.f16",
   "llvm.nvvm.wmma.m16n16k16.load.c.row.f32",
+  "llvm.nvvm.wmma.m16n16k16.load.c.row.s32",
   "llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16",
   "llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32",
+  "llvm.nvvm.wmma.m16n16k16.load.c.row.stride.s32",
   "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16",
   "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32",
@@ -4765,6 +4842,10 @@
   "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32",
   "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.s8",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.s8.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.u8",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.u8.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16",
   "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32",
@@ -4773,6 +4854,10 @@
   "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32",
   "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.s8",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.s8.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.u8",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.u8.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16",
   "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32",
@@ -4781,6 +4866,10 @@
   "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32",
   "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.s8",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.s8.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.u8",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.u8.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16",
   "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32",
@@ -4789,30 +4878,58 @@
   "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite",
   "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32",
   "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.s8",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.s8.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.u8",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.u8.satfinite",
   "llvm.nvvm.wmma.m16n16k16.store.d.col.f16",
   "llvm.nvvm.wmma.m16n16k16.store.d.col.f32",
+  "llvm.nvvm.wmma.m16n16k16.store.d.col.s32",
   "llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16",
   "llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32",
+  "llvm.nvvm.wmma.m16n16k16.store.d.col.stride.s32",
   "llvm.nvvm.wmma.m16n16k16.store.d.row.f16",
   "llvm.nvvm.wmma.m16n16k16.store.d.row.f32",
+  "llvm.nvvm.wmma.m16n16k16.store.d.row.s32",
   "llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16",
   "llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32",
+  "llvm.nvvm.wmma.m16n16k16.store.d.row.stride.s32",
   "llvm.nvvm.wmma.m32n8k16.load.a.col.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.a.col.s8",
   "llvm.nvvm.wmma.m32n8k16.load.a.col.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.a.col.stride.s8",
+  "llvm.nvvm.wmma.m32n8k16.load.a.col.stride.u8",
+  "llvm.nvvm.wmma.m32n8k16.load.a.col.u8",
   "llvm.nvvm.wmma.m32n8k16.load.a.row.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.a.row.s8",
   "llvm.nvvm.wmma.m32n8k16.load.a.row.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.a.row.stride.s8",
+  "llvm.nvvm.wmma.m32n8k16.load.a.row.stride.u8",
+  "llvm.nvvm.wmma.m32n8k16.load.a.row.u8",
   "llvm.nvvm.wmma.m32n8k16.load.b.col.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.col.s8",
   "llvm.nvvm.wmma.m32n8k16.load.b.col.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.col.stride.s8",
+  "llvm.nvvm.wmma.m32n8k16.load.b.col.stride.u8",
+  "llvm.nvvm.wmma.m32n8k16.load.b.col.u8",
   "llvm.nvvm.wmma.m32n8k16.load.b.row.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.row.s8",
   "llvm.nvvm.wmma.m32n8k16.load.b.row.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.row.stride.s8",
+  "llvm.nvvm.wmma.m32n8k16.load.b.row.stride.u8",
+  "llvm.nvvm.wmma.m32n8k16.load.b.row.u8",
   "llvm.nvvm.wmma.m32n8k16.load.c.col.f16",
   "llvm.nvvm.wmma.m32n8k16.load.c.col.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.c.col.s32",
   "llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f16",
   "llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.c.col.stride.s32",
   "llvm.nvvm.wmma.m32n8k16.load.c.row.f16",
   "llvm.nvvm.wmma.m32n8k16.load.c.row.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.c.row.s32",
   "llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f16",
   "llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.c.row.stride.s32",
   "llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16",
   "llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32",
@@ -4821,6 +4938,10 @@
   "llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32",
   "llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.s8",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.s8.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.u8",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.u8.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16",
   "llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32",
@@ -4829,6 +4950,10 @@
   "llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32",
   "llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.s8",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.s8.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.u8",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.u8.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16",
   "llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32",
@@ -4837,6 +4962,10 @@
   "llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32",
   "llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.s8",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.s8.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.u8",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.u8.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16",
   "llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32",
@@ -4845,30 +4974,58 @@
   "llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16.satfinite",
   "llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32",
   "llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.s8",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.s8.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.u8",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.u8.satfinite",
   "llvm.nvvm.wmma.m32n8k16.store.d.col.f16",
   "llvm.nvvm.wmma.m32n8k16.store.d.col.f32",
+  "llvm.nvvm.wmma.m32n8k16.store.d.col.s32",
   "llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f16",
   "llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.store.d.col.stride.s32",
   "llvm.nvvm.wmma.m32n8k16.store.d.row.f16",
   "llvm.nvvm.wmma.m32n8k16.store.d.row.f32",
+  "llvm.nvvm.wmma.m32n8k16.store.d.row.s32",
   "llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f16",
   "llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.store.d.row.stride.s32",
   "llvm.nvvm.wmma.m8n32k16.load.a.col.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.a.col.s8",
   "llvm.nvvm.wmma.m8n32k16.load.a.col.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.a.col.stride.s8",
+  "llvm.nvvm.wmma.m8n32k16.load.a.col.stride.u8",
+  "llvm.nvvm.wmma.m8n32k16.load.a.col.u8",
   "llvm.nvvm.wmma.m8n32k16.load.a.row.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.a.row.s8",
   "llvm.nvvm.wmma.m8n32k16.load.a.row.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.a.row.stride.s8",
+  "llvm.nvvm.wmma.m8n32k16.load.a.row.stride.u8",
+  "llvm.nvvm.wmma.m8n32k16.load.a.row.u8",
   "llvm.nvvm.wmma.m8n32k16.load.b.col.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.col.s8",
   "llvm.nvvm.wmma.m8n32k16.load.b.col.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.col.stride.s8",
+  "llvm.nvvm.wmma.m8n32k16.load.b.col.stride.u8",
+  "llvm.nvvm.wmma.m8n32k16.load.b.col.u8",
   "llvm.nvvm.wmma.m8n32k16.load.b.row.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.row.s8",
   "llvm.nvvm.wmma.m8n32k16.load.b.row.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.row.stride.s8",
+  "llvm.nvvm.wmma.m8n32k16.load.b.row.stride.u8",
+  "llvm.nvvm.wmma.m8n32k16.load.b.row.u8",
   "llvm.nvvm.wmma.m8n32k16.load.c.col.f16",
   "llvm.nvvm.wmma.m8n32k16.load.c.col.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.c.col.s32",
   "llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f16",
   "llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.c.col.stride.s32",
   "llvm.nvvm.wmma.m8n32k16.load.c.row.f16",
   "llvm.nvvm.wmma.m8n32k16.load.c.row.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.c.row.s32",
   "llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f16",
   "llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.c.row.stride.s32",
   "llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16",
   "llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32",
@@ -4877,6 +5034,10 @@
   "llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32",
   "llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.s8",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.s8.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.u8",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.u8.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16",
   "llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32",
@@ -4885,6 +5046,10 @@
   "llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32",
   "llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.s8",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.s8.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.u8",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.u8.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16",
   "llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32",
@@ -4893,6 +5058,10 @@
   "llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32",
   "llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.s8",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.s8.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.u8",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.u8.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16",
   "llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32",
@@ -4901,14 +5070,55 @@
   "llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16.satfinite",
   "llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32",
   "llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.s8",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.s8.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.u8",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.u8.satfinite",
   "llvm.nvvm.wmma.m8n32k16.store.d.col.f16",
   "llvm.nvvm.wmma.m8n32k16.store.d.col.f32",
+  "llvm.nvvm.wmma.m8n32k16.store.d.col.s32",
   "llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f16",
   "llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.store.d.col.stride.s32",
   "llvm.nvvm.wmma.m8n32k16.store.d.row.f16",
   "llvm.nvvm.wmma.m8n32k16.store.d.row.f32",
+  "llvm.nvvm.wmma.m8n32k16.store.d.row.s32",
   "llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f16",
   "llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.store.d.row.stride.s32",
+  "llvm.nvvm.wmma.m8n8k128.load.a.row.b1",
+  "llvm.nvvm.wmma.m8n8k128.load.a.row.stride.b1",
+  "llvm.nvvm.wmma.m8n8k128.load.b.col.b1",
+  "llvm.nvvm.wmma.m8n8k128.load.b.col.stride.b1",
+  "llvm.nvvm.wmma.m8n8k128.load.c.col.s32",
+  "llvm.nvvm.wmma.m8n8k128.load.c.col.stride.s32",
+  "llvm.nvvm.wmma.m8n8k128.load.c.row.s32",
+  "llvm.nvvm.wmma.m8n8k128.load.c.row.stride.s32",
+  "llvm.nvvm.wmma.m8n8k128.mma.row.col.b1",
+  "llvm.nvvm.wmma.m8n8k128.store.d.col.s32",
+  "llvm.nvvm.wmma.m8n8k128.store.d.col.stride.s32",
+  "llvm.nvvm.wmma.m8n8k128.store.d.row.s32",
+  "llvm.nvvm.wmma.m8n8k128.store.d.row.stride.s32",
+  "llvm.nvvm.wmma.m8n8k32.load.a.row.s4",
+  "llvm.nvvm.wmma.m8n8k32.load.a.row.stride.s4",
+  "llvm.nvvm.wmma.m8n8k32.load.a.row.stride.u4",
+  "llvm.nvvm.wmma.m8n8k32.load.a.row.u4",
+  "llvm.nvvm.wmma.m8n8k32.load.b.col.s4",
+  "llvm.nvvm.wmma.m8n8k32.load.b.col.stride.s4",
+  "llvm.nvvm.wmma.m8n8k32.load.b.col.stride.u4",
+  "llvm.nvvm.wmma.m8n8k32.load.b.col.u4",
+  "llvm.nvvm.wmma.m8n8k32.load.c.col.s32",
+  "llvm.nvvm.wmma.m8n8k32.load.c.col.stride.s32",
+  "llvm.nvvm.wmma.m8n8k32.load.c.row.s32",
+  "llvm.nvvm.wmma.m8n8k32.load.c.row.stride.s32",
+  "llvm.nvvm.wmma.m8n8k32.mma.row.col.s4",
+  "llvm.nvvm.wmma.m8n8k32.mma.row.col.s4.satfinite",
+  "llvm.nvvm.wmma.m8n8k32.mma.row.col.u4",
+  "llvm.nvvm.wmma.m8n8k32.mma.row.col.u4.satfinite",
+  "llvm.nvvm.wmma.m8n8k32.store.d.col.s32",
+  "llvm.nvvm.wmma.m8n8k32.store.d.col.stride.s32",
+  "llvm.nvvm.wmma.m8n8k32.store.d.row.s32",
+  "llvm.nvvm.wmma.m8n8k32.store.d.row.stride.s32",
   "llvm.ppc.addf128.round.to.odd",
   "llvm.ppc.altivec.crypto.vcipher",
   "llvm.ppc.altivec.crypto.vcipherlast",
@@ -5236,6 +5446,7 @@
   "llvm.ppc.set.texasru",
   "llvm.ppc.set.tfhar",
   "llvm.ppc.set.tfiar",
+  "llvm.ppc.setrnd",
   "llvm.ppc.sqrtf128.round.to.odd",
   "llvm.ppc.subf128.round.to.odd",
   "llvm.ppc.sync",
@@ -5602,7 +5813,7 @@
   "llvm.wasm.memory.grow",
   "llvm.wasm.memory.init",
   "llvm.wasm.memory.size",
-  "llvm.wasm.rethrow",
+  "llvm.wasm.rethrow.in.catch",
   "llvm.wasm.sub.saturate.signed",
   "llvm.wasm.sub.saturate.unsigned",
   "llvm.wasm.throw",
@@ -5733,6 +5944,8 @@
   "llvm.x86.avx2.packsswb",
   "llvm.x86.avx2.packusdw",
   "llvm.x86.avx2.packuswb",
+  "llvm.x86.avx2.pavg.b",
+  "llvm.x86.avx2.pavg.w",
   "llvm.x86.avx2.pblendvb",
   "llvm.x86.avx2.permd",
   "llvm.x86.avx2.permps",
@@ -6169,6 +6382,8 @@
   "llvm.x86.avx512.packsswb.512",
   "llvm.x86.avx512.packusdw.512",
   "llvm.x86.avx512.packuswb.512",
+  "llvm.x86.avx512.pavg.b.512",
+  "llvm.x86.avx512.pavg.w.512",
   "llvm.x86.avx512.permvar.df.256",
   "llvm.x86.avx512.permvar.df.512",
   "llvm.x86.avx512.permvar.di.256",
@@ -6310,6 +6525,12 @@
   "llvm.x86.avx512.vfmadd.ps.512",
   "llvm.x86.avx512.vfmaddsub.pd.512",
   "llvm.x86.avx512.vfmaddsub.ps.512",
+  "llvm.x86.avx512.vp2intersect.d.128",
+  "llvm.x86.avx512.vp2intersect.d.256",
+  "llvm.x86.avx512.vp2intersect.d.512",
+  "llvm.x86.avx512.vp2intersect.q.128",
+  "llvm.x86.avx512.vp2intersect.q.256",
+  "llvm.x86.avx512.vp2intersect.q.512",
   "llvm.x86.avx512.vpdpbusd.128",
   "llvm.x86.avx512.vpdpbusd.256",
   "llvm.x86.avx512.vpdpbusd.512",
@@ -6351,6 +6572,15 @@
   "llvm.x86.avx512.vpshufbitqmb.128",
   "llvm.x86.avx512.vpshufbitqmb.256",
   "llvm.x86.avx512.vpshufbitqmb.512",
+  "llvm.x86.avx512bf16.cvtne2ps2bf16.128",
+  "llvm.x86.avx512bf16.cvtne2ps2bf16.256",
+  "llvm.x86.avx512bf16.cvtne2ps2bf16.512",
+  "llvm.x86.avx512bf16.cvtneps2bf16.256",
+  "llvm.x86.avx512bf16.cvtneps2bf16.512",
+  "llvm.x86.avx512bf16.dpbf16ps.128",
+  "llvm.x86.avx512bf16.dpbf16ps.256",
+  "llvm.x86.avx512bf16.dpbf16ps.512",
+  "llvm.x86.avx512bf16.mask.cvtneps2bf16.128",
   "llvm.x86.bmi.bextr.32",
   "llvm.x86.bmi.bextr.64",
   "llvm.x86.bmi.bzhi.32",
@@ -6366,6 +6596,8 @@
   "llvm.x86.clzero",
   "llvm.x86.directstore32",
   "llvm.x86.directstore64",
+  "llvm.x86.enqcmd",
+  "llvm.x86.enqcmds",
   "llvm.x86.flags.read.u32",
   "llvm.x86.flags.read.u64",
   "llvm.x86.flags.write.u32",
@@ -6561,6 +6793,8 @@
   "llvm.x86.sse2.packsswb.128",
   "llvm.x86.sse2.packuswb.128",
   "llvm.x86.sse2.pause",
+  "llvm.x86.sse2.pavg.b",
+  "llvm.x86.sse2.pavg.w",
   "llvm.x86.sse2.pmadd.wd",
   "llvm.x86.sse2.pmovmskb.128",
   "llvm.x86.sse2.pmulh.w",
@@ -6825,107 +7059,42 @@
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
-  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<7),
-  0 | (1<<0) | (1<<2) | (1<<3) | (1<<5) | (1<<6),
-  0 | (1<<2),
-  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<1) | (1<<2) | (1<<4) | (1<<5) | (1<<7),
+  0 | (1<<0) | (1<<4),
+  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0,
   0,
   0,
   0 | (1<<6),
-  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
-  0 | (1<<3) | (1<<6),
-  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
-  0 | (1<<3),
+  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
+  0 | (1<<0) | (1<<1) | (1<<4) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
+  0 | (1<<1),
   0,
   0,
   0,
-  0 | (1<<3) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<4) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<7),
-  0 | (1<<1) | (1<<2) | (1<<5) | (1<<6),
-  0,
-  0 | (1<<2) | (1<<3) | (1<<4) | (1<<5),
-  0 | (1<<1) | (1<<2),
-  0 | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<4),
-  0 | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<3) | (1<<4) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<2) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
@@ -6934,669 +7103,124 @@
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<3) | (1<<5) | (1<<7),
+  0 | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<6) | (1<<7),
   0,
-  0 | (1<<2) | (1<<4),
-  0 | (1<<0) | (1<<7),
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<1),
+  0 | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<6) | (1<<7),
+  0 | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<4) | (1<<5),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1),
+  0 | (1<<5) | (1<<7),
   0 | (1<<0),
   0,
-  0 | (1<<2) | (1<<6) | (1<<7),
+  0 | (1<<7),
+  0 | (1<<0),
+  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<6) | (1<<7),
   0 | (1<<2),
-  0 | (1<<2) | (1<<5),
   0,
   0 | (1<<5),
-  0 | (1<<3),
-  0,
+  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<5),
+  0 | (1<<6),
   0 | (1<<1),
-  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<1) | (1<<2) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<0) | (1<<2),
-  0,
-  0,
-  0 | (1<<7),
-  0 | (1<<0),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
-  0,
-  0 | (1<<5) | (1<<6),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
-  0,
-  0,
-  0 | (1<<4),
-  0,
-  0,
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<0),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<6) | (1<<7),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2),
-  0,
-  0,
-  0,
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2),
-  0,
-  0,
-  0,
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2),
-  0,
-  0,
-  0,
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<2),
-  0,
-  0 | (1<<7),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<7),
-  0 | (1<<0),
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
-  0 | (1<<7),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<1) | (1<<2) | (1<<6),
-  0 | (1<<5) | (1<<7),
-  0 | (1<<1) | (1<<2) | (1<<4) | (1<<5),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<4),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<2),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
   0,
   0 | (1<<6),
-  0 | (1<<3),
+  0 | (1<<4),
+  0,
+  0 | (1<<2),
+  0 | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<1) | (1<<3),
+  0,
+  0,
+  0,
+  0 | (1<<0) | (1<<1),
   0,
   0,
   0,
@@ -7654,13 +7278,653 @@
   0,
   0,
   0,
-  0 | (1<<5) | (1<<7),
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
   0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
   0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<7),
-  0 | (1<<0) | (1<<3) | (1<<4) | (1<<5)
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
+  0,
+  0 | (1<<6) | (1<<7),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
+  0,
+  0,
+  0 | (1<<5),
+  0,
+  0,
+  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<1),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<7),
+  0 | (1<<0),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
+  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<4),
+  0,
+  0,
+  0 | (1<<1),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<2) | (1<<3),
+  0 | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0,
+  0 | (1<<2),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<4) | (1<<5),
+  0 | (1<<1),
+  0 | (1<<0) | (1<<2) | (1<<4) | (1<<5) | (1<<7),
+  0 | (1<<0),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<1),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<7),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<5),
+  0 | (1<<2),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<7),
+  0 | (1<<1) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<1) | (1<<2) | (1<<5) | (1<<6) | (1<<7),
+  0
 };
 
 return (OTable[id/8] & (1 << (id%8))) != 0;
@@ -7669,506 +7933,514 @@
 // Global intrinsic function declaration type table.
 #ifdef GET_INTRINSIC_GENERATOR_GLOBAL
 static const unsigned IIT_Table[] = {
-  0x2e, 0x2e2e, (1U<<31) | 1664, 0x10, 0x1f1f, 0x1f1f, 0x2f2f, 
-  0x2f2f, 0x2e2e0, (1U<<31) | 6031, 0x32f, 0x2f3, 0x2f2f2f, (1U<<31) | 6020, (1U<<31) | 764, 
-  0x2e0, 0x2e1, 0x12e1, 0x2e, (1U<<31) | 764, (1U<<31) | 675, 0x2e, 0x2e2e1, 
-  0x142e2e, 0x2e0, (1U<<31) | 766, 0x1f, 0x22e2e, (1U<<31) | 193, 0x2f2f, 0x11f1f, 
-  0x1f1f, 0x11f1f, (1U<<31) | 6078, (1U<<31) | 6078, (1U<<31) | 6031, (1U<<31) | 6078, 0x0, 0x0, 
-  0x42e, (1U<<31) | 6028, (1U<<31) | 6027, 0x2e2e2e, 0x2e40, 0x2e50, 0x40, 0x2e0, 
-  0x2e0, 0x2e, 0x2e4, 0x0, 0x2e4, 0x0, 0x2f2f, 0x2f2f, 
-  0x1f1f1f, (1U<<31) | 6063, (1U<<31) | 6063, (1U<<31) | 6063, (1U<<31) | 6063, (1U<<31) | 6061, (1U<<31) | 6061, (1U<<31) | 6063, 
-  (1U<<31) | 6059, (1U<<31) | 6061, (1U<<31) | 6061, (1U<<31) | 6061, (1U<<31) | 6063, (1U<<31) | 6063, (1U<<31) | 6063, (1U<<31) | 6061, 
-  (1U<<31) | 6061, (1U<<31) | 6063, (1U<<31) | 6061, (1U<<31) | 6070, (1U<<31) | 6063, (1U<<31) | 6063, (1U<<31) | 6063, (1U<<31) | 6063, 
-  (1U<<31) | 6063, (1U<<31) | 6083, (1U<<31) | 4028, (1U<<31) | 6016, (1U<<31) | 6107, (1U<<31) | 6087, (1U<<31) | 6099, (1U<<31) | 6091, 
-  (1U<<31) | 6116, 0xbf1f, 0xbf1f, (1U<<31) | 6052, 0xbf2f, 0xbf2f, (1U<<31) | 6052, 0xbf1f, 
-  0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0x1, 0x2f2f, 
-  0x2f2f, 0x4, 0x2f2f2f2f, 0x2f2f2f2f, 0x42e, 0x1f1f1f1f, 0x1f1f1f1f, 0x2ee2e2e, 
-  0x2e2ee0, 0x2ee2e2e0, 0x1f, 0x42e2e0, (1U<<31) | 6084, 0x2e2e2e0, 0x4452e0, 0x54452e0, 
-  0x44552e0, (1U<<31) | 4839, (1U<<31) | 4840, 0xf1, 0x4f4f, 0x4f50, 0x4f50, 0x1f2e2e, 
-  0x2e, (1U<<31) | 6084, 0x42e2e2e, 0x2f2f, 0x2f2f, 0x2f2f, 0x42e0, (1U<<31) | 90, 
-  (1U<<31) | 847, (1U<<31) | 857, (1U<<31) | 869, (1U<<31) | 99, (1U<<31) | 110, 0x2f2f2f, 0x2f2f2f, (1U<<31) | 184, 
-  (1U<<31) | 4929, (1U<<31) | 184, (1U<<31) | 4929, 0x19f24f0, 0x49f24f0, 0x2f2f2f, 0x2f2f2f, 0x2f2f, 
+  0x2e, 0x2e2e, (1U<<31) | 1578, 0x10, 0x7f1f, 0x7f1f, 0x7f2f, 
+  0x7f2f, 0x2e2e0, (1U<<31) | 6512, 0x32f, 0x2f3, 0x7f7f2f, (1U<<31) | 6501, (1U<<31) | 759, 
+  0x2e0, 0x2e1, 0x12e1, 0x2e, (1U<<31) | 759, (1U<<31) | 670, 0x2e, 0x2e2e1, 
+  0x142e2e, 0x2e0, (1U<<31) | 761, 0x1f, 0x22e2e, (1U<<31) | 193, 0x7f2f, 0x17f1f, 
+  0x7f1f, 0x17f1f, (1U<<31) | 6581, (1U<<31) | 6581, (1U<<31) | 6512, (1U<<31) | 6581, 0x0, 0x0, 
+  0x42e, (1U<<31) | 6509, (1U<<31) | 6508, 0x2e2e2e, 0x2e40, 0x2e50, 0x40, 0x2e0, 
+  0x2e0, 0x2e, 0x2e4, 0x0, 0x2e4, 0x0, 0x7f2f, 0x7f2f, 
+  0x7f7f1f, (1U<<31) | 6547, (1U<<31) | 6547, (1U<<31) | 6547, (1U<<31) | 6547, (1U<<31) | 6554, (1U<<31) | 6554, (1U<<31) | 6547, 
+  (1U<<31) | 6563, (1U<<31) | 6554, (1U<<31) | 6533, (1U<<31) | 6574, (1U<<31) | 6554, (1U<<31) | 6554, (1U<<31) | 6547, (1U<<31) | 6547, 
+  (1U<<31) | 6547, (1U<<31) | 6554, (1U<<31) | 6554, (1U<<31) | 6547, (1U<<31) | 6554, (1U<<31) | 6539, (1U<<31) | 6547, (1U<<31) | 6547, 
+  (1U<<31) | 6547, (1U<<31) | 6547, (1U<<31) | 6547, (1U<<31) | 6586, (1U<<31) | 4236, (1U<<31) | 6497, (1U<<31) | 6610, (1U<<31) | 6590, 
+  (1U<<31) | 6602, (1U<<31) | 6594, (1U<<31) | 6619, (1U<<31) | 842, (1U<<31) | 842, (1U<<31) | 842, (1U<<31) | 842, (1U<<31) | 842, 
+  (1U<<31) | 842, (1U<<31) | 842, (1U<<31) | 842, (1U<<31) | 842, (1U<<31) | 842, 0xbf7f2f, 0xbf7f2f, (1U<<31) | 842, 
+  0x1, 0x7f2f, 0x7f2f, 0x4, 0x7f7f7f2f, 0x7f7f7f2f, 0x42e, 0x7f7f7f1f, 
+  0x7f7f7f1f, 0x2ee2e2e, 0x2e2ee0, 0x2ee2e2e0, 0x1f, 0x42e2e0, (1U<<31) | 6587, 0x2e2e2e0, 
+  0x4452e0, 0x54452e0, 0x44552e0, (1U<<31) | 5091, (1U<<31) | 5092, 0xf1, 0x7f4f, 0x4f50, 
+  0x4f50, 0xaf1f, 0xaf1f, 0x1f2e2e, 0x2e, (1U<<31) | 6587, 0x42e2e2e, 0x7f2f, 
+  0x7f2f, 0x7f2f, 0x42e0, 0x1f1, (1U<<31) | 6481, 0xaf1f, 0xaf1f, (1U<<31) | 97, 
+  (1U<<31) | 6093, (1U<<31) | 6070, (1U<<31) | 6082, (1U<<31) | 66, (1U<<31) | 77, 0x7f7f2f, 0x7f7f2f, (1U<<31) | 184, 
+  (1U<<31) | 5205, (1U<<31) | 184, (1U<<31) | 5205, 0x19f24f0, 0x49f24f0, 0x7f7f2f, 0x7f7f2f, 0x7f2f, 
   0x2ee2ee0, 0x2ee2ee0, 0x2ee2ee0, 0x2ee2ee0, 0x2e2e, 0x2e0, 0x2e, 0x2e2e, 
-  (1U<<31) | 6084, 0x2ee2ee0, 0x2ee0, 0x2e2ee2e, 0x2ee2e, 0x2ee2e, 0x2ee2ee0, 0x2e0, 
+  (1U<<31) | 6587, 0x2ee2ee0, 0x2ee0, 0x2e2ee2e, 0x2ee2e, 0x2ee2e, 0x2ee2ee0, 0x2e0, 
   0x2e2e, 0x2e2e, 0x2e2e, 0x2e2e, 0x2e2e, 0x2e2e, 0x2e2e, 0x2e2ee0, 
   0x2e2ee2e, 0x2e4, 0x2e4, 0x2e2e, 0x2e2e, 0x2e2e, 0x111cf1f, 0x40, 
-  0x2f2f2f, 0x42f2f, 0x4442e0, (1U<<31) | 1674, (1U<<31) | 6034, 0x5, 0x42e, 0x2f2f, 
-  0x2f2f, 0x1f1f1f, (1U<<31) | 155, 0x2e4, 0x0, 0x42e0, 0x42e4, 0x2f2f, 
-  0x41f1f1f, (1U<<31) | 155, 0x2e, 0x2f2f, 0xf0f, 0x1f1f1f, (1U<<31) | 155, 0x2e, 
-  0x2ee2e0, 0x2e0, 0x2e, 0x4f4f, 0x2e, 0x0, 0x2f2f, (1U<<31) | 6043, 
-  (1U<<31) | 6038, 0x1f1f1f, (1U<<31) | 155, 0x41f1f1f, (1U<<31) | 155, 0x1f1f1f, (1U<<31) | 155, 0x2e2e0, 
-  0x2e0, 0x2e0, 0x42e2e2e0, (1U<<31) | 166, 0x42e0, 0x42e30, 0x0, 0x444, 
-  0x444, 0x444, 0x444, 0x544, 0x444, 0x444, 0x544, 0x2c2c2c, 
-  0x2c2c2c, 0x2c2c, 0x2c2c, 0x4a44a4a, 0x44, 0x4a44a4a, 0x4a44a4a, 0x4a4a4a4a, 
-  0x4a4a4a, 0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x40, 0x40, 0x5, 
-  0x40, 0x40, (1U<<31) | 752, 0x4f5, (1U<<31) | 752, 0x4f5, 0xf0f, (1U<<31) | 924, 
-  0x3f3f3f, 0x3f3f, 0x3f3f3f, 0xafaf1f, 0xafaf1f, 0xbf2f, 0xaf1f, 0xaf1f, 
-  0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xbf3f, 0xaf1f, 
-  0xaf1f, 0x2f2f2f, 0x2f2f2f, 0x3f3f3f, 0xbf2f, 0x3f3f3f, 0xbf2f, 0x2f2f2f, 
-  0x2f2f2f, 0x3f3f3f, 0xbf2f, 0x3f3f3f, 0xbf2f, (1U<<31) | 5827, (1U<<31) | 5827, (1U<<31) | 5827, 
-  (1U<<31) | 5827, 0x2f2f2f, 0x2f2f, 0x2f2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f2f, 
-  (1U<<31) | 5902, (1U<<31) | 5892, (1U<<31) | 5880, (1U<<31) | 5902, (1U<<31) | 5981, (1U<<31) | 5902, (1U<<31) | 5892, (1U<<31) | 5964, 
-  (1U<<31) | 5892, (1U<<31) | 5880, (1U<<31) | 5943, (1U<<31) | 5880, 0x3f3f3f, (1U<<31) | 936, 0x552c, (1U<<31) | 924, 
-  0x3f3f, (1U<<31) | 1231, (1U<<31) | 924, 0x3f3f3f, 0xbf3f, 0xbf1f, 0xbf1f, 0x9f1f, 
-  0x9f1f, 0x9f1f, (1U<<31) | 5827, 0x3f3f3f, (1U<<31) | 931, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
-  0xbf1f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, (1U<<31) | 936, 0x1f1f, 0x1f1f1f, 0x1f1f1f, 
-  (1U<<31) | 936, 0x445, 0x1f1f, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 1231, (1U<<31) | 1231, 0x1f1f1f, 
-  0x1f1f1f, (1U<<31) | 1231, (1U<<31) | 1231, 0x1f1f1f, (1U<<31) | 197, (1U<<31) | 197, 0x3f3f3f, 0x1f1f1f, 
-  0x1f1f1f, (1U<<31) | 1801, 0xcf3f3f0, (1U<<31) | 5858, (1U<<31) | 5868, 0xcf3f3f0, (1U<<31) | 5910, (1U<<31) | 5858, 
-  (1U<<31) | 5919, (1U<<31) | 5868, (1U<<31) | 5930, (1U<<31) | 924, 0x1f1f1f, 0x3f2c3f, 0x3f2c2c3f, (1U<<31) | 897, 
-  (1U<<31) | 882, 0x3f2c3f3f, (1U<<31) | 908, (1U<<31) | 895, (1U<<31) | 880, 0x3f3f3f, 0xbf3f, 0xbf1f, 
-  0xbf1f, (1U<<31) | 5827, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, 0x3f3f3f, 
-  0x3f3f3f, 0xbf1f, (1U<<31) | 936, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 1231, 0x1f1f1f, (1U<<31) | 1231, 
-  0x1f1f1f, (1U<<31) | 197, 0x3f3f, 0x3f3f3f, 0x1f1f1f, 0x3f3f, 0x1f1f1f, (1U<<31) | 1801, 
-  0x1f1f1f, 0x53f5bf3f, 0x4af1f, 0x4af1f, 0x7a3a, 0x49f2f, 0x49f2f, 0x3a7a, 
-  0x43f3f3f, 0x43f3f3f, 0x1f1f1f, 0x2f2f2f, 0x87, 0x545, 0x2e554, 0x4f54, 
-  0x2e554, 0x4f54, 0x1f1f1f, 0x4444, 0x4444, (1U<<31) | 120, (1U<<31) | 120, 0x1444a44, 
-  0x1444a44, 0x1444a444, 0x1444a44, 0x1444a44, 0x1444a44, 0x1444a44, 0x1444a44, 0x1444a44, 
-  0x1444a44, 0x1444a44, 0x11444a2f, 0x11444a2f, (1U<<31) | 50, (1U<<31) | 50, 0x0, 0x0, 
-  0x0, 0x42f1, 0x2f2f, 0x7777, 0x7777, 0x7777, 0x7777, 0x4439, 
-  0x4439, 0x4474, 0x7739, 0x7739, 0x7769, 0x5, (1U<<31) | 388, 0x2f2f2f2f, 
-  (1U<<31) | 70, (1U<<31) | 60, 0x14f4, 0x444, 0x14f4, (1U<<31) | 141, (1U<<31) | 141, (1U<<31) | 141, 
-  (1U<<31) | 24, (1U<<31) | 24, 0x444, 0x444, (1U<<31) | 4960, 0x50, (1U<<31) | 0, (1U<<31) | 14, 
-  0x42f2f5, 0x777, 0x1769697, 0x2f2f2f2f, 0x2f2f2f2f, 0x777, 0x2f2f, 0xaf1f, 
-  0x2f2f, 0x4, 0x41f1f5, (1U<<31) | 150, 0x515, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3441, (1U<<31) | 3475, (1U<<31) | 3475, 
-  (1U<<31) | 3515, (1U<<31) | 3561, (1U<<31) | 3515, (1U<<31) | 3515, (1U<<31) | 3515, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3443, (1U<<31) | 3477, (1U<<31) | 3477, 
-  (1U<<31) | 3517, (1U<<31) | 3563, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 3517, (1U<<31) | 1863, (1U<<31) | 1927, (1U<<31) | 2252, 
-  (1U<<31) | 2504, (1U<<31) | 2504, (1U<<31) | 2900, (1U<<31) | 2900, (1U<<31) | 2523, (1U<<31) | 2921, (1U<<31) | 2921, (1U<<31) | 2504, 
-  (1U<<31) | 2269, (1U<<31) | 2523, (1U<<31) | 2523, (1U<<31) | 1894, (1U<<31) | 1962, (1U<<31) | 2215, (1U<<31) | 2463, (1U<<31) | 2463, 
-  (1U<<31) | 2855, (1U<<31) | 2855, (1U<<31) | 2483, (1U<<31) | 2877, (1U<<31) | 2877, (1U<<31) | 2463, (1U<<31) | 2233, (1U<<31) | 2483, 
-  (1U<<31) | 2483, (1U<<31) | 1962, (1U<<31) | 2038, (1U<<31) | 2038, (1U<<31) | 1980, (1U<<31) | 2058, (1U<<31) | 2058, (1U<<31) | 1962, 
-  (1U<<31) | 1962, (1U<<31) | 2038, (1U<<31) | 2038, (1U<<31) | 1980, (1U<<31) | 2058, (1U<<31) | 2058, (1U<<31) | 1894, (1U<<31) | 1962, 
-  (1U<<31) | 1962, (1U<<31) | 1910, (1U<<31) | 1980, (1U<<31) | 1980, (1U<<31) | 1910, (1U<<31) | 1980, (1U<<31) | 1980, (1U<<31) | 1927, 
-  (1U<<31) | 1999, (1U<<31) | 1999, (1U<<31) | 1944, (1U<<31) | 2018, (1U<<31) | 2018, (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 1999, 
-  (1U<<31) | 1999, (1U<<31) | 1944, (1U<<31) | 2018, (1U<<31) | 2018, (1U<<31) | 1863, (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 1878, 
-  (1U<<31) | 1944, (1U<<31) | 1944, (1U<<31) | 1878, (1U<<31) | 1944, (1U<<31) | 1944, (1U<<31) | 1807, (1U<<31) | 1863, (1U<<31) | 1863, 
-  (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 3465, (1U<<31) | 3465, (1U<<31) | 3465, (1U<<31) | 3465, (1U<<31) | 3465, 
-  (1U<<31) | 3465, (1U<<31) | 3465, (1U<<31) | 3465, (1U<<31) | 3454, (1U<<31) | 3490, (1U<<31) | 3490, (1U<<31) | 3532, (1U<<31) | 3580, 
-  (1U<<31) | 3532, (1U<<31) | 3532, (1U<<31) | 3532, (1U<<31) | 3490, (1U<<31) | 3532, (1U<<31) | 3532, (1U<<31) | 3580, (1U<<31) | 3580, 
-  (1U<<31) | 3580, (1U<<31) | 1807, (1U<<31) | 1863, (1U<<31) | 1863, (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 2112, (1U<<31) | 2252, 
-  (1U<<31) | 2252, (1U<<31) | 2504, (1U<<31) | 2504, (1U<<31) | 2252, (1U<<31) | 2504, (1U<<31) | 2504, (1U<<31) | 2900, (1U<<31) | 2900, 
-  (1U<<31) | 2900, (1U<<31) | 2269, (1U<<31) | 2523, (1U<<31) | 2523, (1U<<31) | 2921, (1U<<31) | 2921, (1U<<31) | 2921, (1U<<31) | 2504, 
-  (1U<<31) | 2127, (1U<<31) | 2269, (1U<<31) | 2269, (1U<<31) | 2523, (1U<<31) | 2523, (1U<<31) | 2523, (1U<<31) | 1834, (1U<<31) | 1894, 
-  (1U<<31) | 1894, (1U<<31) | 1962, (1U<<31) | 1962, (1U<<31) | 2079, (1U<<31) | 2215, (1U<<31) | 2215, (1U<<31) | 2463, (1U<<31) | 2463, 
-  (1U<<31) | 2215, (1U<<31) | 2463, (1U<<31) | 2463, (1U<<31) | 2855, (1U<<31) | 2855, (1U<<31) | 2855, (1U<<31) | 2233, (1U<<31) | 2483, 
-  (1U<<31) | 2483, (1U<<31) | 2877, (1U<<31) | 2877, (1U<<31) | 2877, (1U<<31) | 2463, (1U<<31) | 2095, (1U<<31) | 2233, (1U<<31) | 2233, 
-  (1U<<31) | 2483, (1U<<31) | 2483, (1U<<31) | 2483, (1U<<31) | 2178, (1U<<31) | 2326, (1U<<31) | 2414, (1U<<31) | 2682, (1U<<31) | 2794, 
-  (1U<<31) | 2326, (1U<<31) | 2586, (1U<<31) | 2682, (1U<<31) | 2998, (1U<<31) | 3118, (1U<<31) | 2998, (1U<<31) | 2346, (1U<<31) | 2608, 
-  (1U<<31) | 2708, (1U<<31) | 3026, (1U<<31) | 3150, (1U<<31) | 3026, (1U<<31) | 2682, (1U<<31) | 2196, (1U<<31) | 2346, (1U<<31) | 2438, 
-  (1U<<31) | 2708, (1U<<31) | 2824, (1U<<31) | 2708, (1U<<31) | 1894, (1U<<31) | 1962, (1U<<31) | 1962, (1U<<31) | 2038, (1U<<31) | 2038, 
-  (1U<<31) | 2038, (1U<<31) | 1910, (1U<<31) | 1980, (1U<<31) | 1980, (1U<<31) | 2058, (1U<<31) | 2058, (1U<<31) | 2058, (1U<<31) | 1962, 
-  (1U<<31) | 2178, (1U<<31) | 2326, (1U<<31) | 2414, (1U<<31) | 2682, (1U<<31) | 2794, (1U<<31) | 2326, (1U<<31) | 2586, (1U<<31) | 2682, 
-  (1U<<31) | 2998, (1U<<31) | 3118, (1U<<31) | 2998, (1U<<31) | 2346, (1U<<31) | 2608, (1U<<31) | 2708, (1U<<31) | 3026, (1U<<31) | 3150, 
-  (1U<<31) | 3026, (1U<<31) | 2682, (1U<<31) | 2196, (1U<<31) | 2346, (1U<<31) | 2438, (1U<<31) | 2708, (1U<<31) | 2824, (1U<<31) | 2708, 
-  (1U<<31) | 1894, (1U<<31) | 1962, (1U<<31) | 1962, (1U<<31) | 2038, (1U<<31) | 2038, (1U<<31) | 2038, (1U<<31) | 1910, (1U<<31) | 1980, 
-  (1U<<31) | 1980, (1U<<31) | 2058, (1U<<31) | 2058, (1U<<31) | 2058, (1U<<31) | 1834, (1U<<31) | 1894, (1U<<31) | 1894, (1U<<31) | 1962, 
-  (1U<<31) | 1962, (1U<<31) | 1962, (1U<<31) | 1848, (1U<<31) | 1910, (1U<<31) | 1910, (1U<<31) | 1980, (1U<<31) | 1980, (1U<<31) | 1980, 
-  (1U<<31) | 1848, (1U<<31) | 1910, (1U<<31) | 1910, (1U<<31) | 1980, (1U<<31) | 1980, (1U<<31) | 1980, (1U<<31) | 2143, (1U<<31) | 2287, 
-  (1U<<31) | 2367, (1U<<31) | 2631, (1U<<31) | 2735, (1U<<31) | 2287, (1U<<31) | 2543, (1U<<31) | 2631, (1U<<31) | 2943, (1U<<31) | 3055, 
-  (1U<<31) | 2943, (1U<<31) | 2306, (1U<<31) | 2564, (1U<<31) | 2656, (1U<<31) | 2970, (1U<<31) | 3086, (1U<<31) | 2970, (1U<<31) | 2631, 
-  (1U<<31) | 2160, (1U<<31) | 2306, (1U<<31) | 2390, (1U<<31) | 2656, (1U<<31) | 2764, (1U<<31) | 2656, (1U<<31) | 1863, (1U<<31) | 1927, 
-  (1U<<31) | 1927, (1U<<31) | 1999, (1U<<31) | 1999, (1U<<31) | 1999, (1U<<31) | 1878, (1U<<31) | 1944, (1U<<31) | 1944, (1U<<31) | 2018, 
-  (1U<<31) | 2018, (1U<<31) | 2018, (1U<<31) | 1927, (1U<<31) | 2143, (1U<<31) | 2287, (1U<<31) | 2367, (1U<<31) | 2631, (1U<<31) | 2735, 
-  (1U<<31) | 2287, (1U<<31) | 2543, (1U<<31) | 2631, (1U<<31) | 2943, (1U<<31) | 3055, (1U<<31) | 2943, (1U<<31) | 2306, (1U<<31) | 2564, 
-  (1U<<31) | 2656, (1U<<31) | 2970, (1U<<31) | 3086, (1U<<31) | 2970, (1U<<31) | 2631, (1U<<31) | 2160, (1U<<31) | 2306, (1U<<31) | 2390, 
-  (1U<<31) | 2656, (1U<<31) | 2764, (1U<<31) | 2656, (1U<<31) | 1863, (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 1999, (1U<<31) | 1999, 
-  (1U<<31) | 1999, (1U<<31) | 1878, (1U<<31) | 1944, (1U<<31) | 1944, (1U<<31) | 2018, (1U<<31) | 2018, (1U<<31) | 2018, (1U<<31) | 1807, 
-  (1U<<31) | 1863, (1U<<31) | 1863, (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 1927, (1U<<31) | 1820, (1U<<31) | 1878, (1U<<31) | 1878, 
-  (1U<<31) | 1944, (1U<<31) | 1944, (1U<<31) | 1944, (1U<<31) | 1820, (1U<<31) | 1878, (1U<<31) | 1878, (1U<<31) | 1944, (1U<<31) | 1944, 
-  (1U<<31) | 1944, (1U<<31) | 3464, (1U<<31) | 3502, (1U<<31) | 3502, (1U<<31) | 3546, (1U<<31) | 3596, (1U<<31) | 3546, (1U<<31) | 3546, 
-  (1U<<31) | 3546, (1U<<31) | 3502, (1U<<31) | 3546, (1U<<31) | 3546, (1U<<31) | 3596, (1U<<31) | 3596, (1U<<31) | 3596, (1U<<31) | 388, 
-  (1U<<31) | 388, 0x50, 0x440, 0x44447, 0x44477, 0x414477, 0x444777, 0x4144776, 
-  (1U<<31) | 388, 0x10, 0x42f2f, 0x4444, 0x2f2f, 0x51, 0x444, 0x444, 
-  0x14441f1f, 0x5455, 0x4a454a, 0x4444, 0x1, 0x5455, (1U<<31) | 388, (1U<<31) | 3355, 
-  (1U<<31) | 3355, (1U<<31) | 3353, (1U<<31) | 3355, (1U<<31) | 3355, (1U<<31) | 3355, (1U<<31) | 3355, (1U<<31) | 3355, (1U<<31) | 3355, 
-  (1U<<31) | 3355, (1U<<31) | 3355, 0x4444a0f, 0x4444a0f, 0x4444a0f0, 0x4444a0f0, 0x44444a0f, (1U<<31) | 3323, 
-  0x2f2f, 0x77, 0x44, 0x444, 0x2f2f, 0x2f2f, 0x77, 0x0, 
-  0x444a0f, 0x0, 0x0, 0x0, 0x0, 0x40, 0x5, 0x44, 
-  0x40, 0x5, 0x5, 0x440, 0x440, 0x40, 0x40, 0x4444, 
-  0x4444, 0x4444, 0x441f1f, 0x1439394, 0x14444, 0x14444, 0x1f1f1f, 0x1f1f, 
-  0x2f2f, (1U<<31) | 3335, (1U<<31) | 3335, (1U<<31) | 3333, (1U<<31) | 3335, (1U<<31) | 3335, (1U<<31) | 3335, (1U<<31) | 3335, 
-  (1U<<31) | 3335, (1U<<31) | 3335, (1U<<31) | 3335, (1U<<31) | 3335, 0x44444a0f, 0x44444a0f, (1U<<31) | 3323, (1U<<31) | 3323, 
-  (1U<<31) | 3313, (1U<<31) | 3312, (1U<<31) | 37, (1U<<31) | 36, 0x42f2f, 0x441f1f, 0x1439394, 0x14444, 
-  0x14444, 0x0, (1U<<31) | 130, 0x0, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0xf0f, 0x11, 0x4444, 0xf0f, 0x4444440, 0x4444440, 
-  0x0, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x40, 
-  0x40, 0x40, 0x4, 0x40, 0x40, 0x4f4, (1U<<31) | 736, 0x2e440, 
-  0x2e440, 0x2e440, 0x2e440, 0x4f4, (1U<<31) | 736, 0x4444440, 0x4444440, 0x444440, 
-  0x444440, 0x444444, 0x444444, (1U<<31) | 3346, (1U<<31) | 3346, 0x2c2c2c, 0x2c2c2c, 0x2c2c, 
-  0x2c2c, (1U<<31) | 5827, 0x4a44a4a, 0x44, 0x4a44a4a, 0x4a44a4a, 0x4a4a4a4a, 0x4a4a4a, 
-  0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, (1U<<31) | 5827, 0x3f3f3f, 0x3f3f3f, 0x3f3f, 
-  0xbfbf3f, 0xbfbf3f, 0x3f3f3f3f, 0x3f3f, 0xbf3f, 0xbf3f, 0x4af1f, 0x4af1f, 
-  0x7a3a, 0x49f2f, 0x49f2f, 0x3a7a, 0xbf3f, 0xbf3f, 0xbf3f, 0xbf3f, 
-  0xbf3f, 0xbf3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x4cf3f, (1U<<31) | 5902, 
-  (1U<<31) | 5892, (1U<<31) | 5880, (1U<<31) | 4724, (1U<<31) | 4724, (1U<<31) | 3260, (1U<<31) | 4713, (1U<<31) | 4713, (1U<<31) | 3242, 
-  (1U<<31) | 4700, (1U<<31) | 4700, (1U<<31) | 3220, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
-  0x3f3f3f, (1U<<31) | 936, (1U<<31) | 936, (1U<<31) | 936, 0x3f3f3f, 0xbf3f3f, 0xbf3f3f, 0x3f3f3f, 
-  0xbf3f, 0xbf3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f, 0x3f3f3f, 
-  0x3f3f3f, 0x3f3f3f, (1U<<31) | 936, (1U<<31) | 919, (1U<<31) | 919, (1U<<31) | 919, 0x3f3f, 0x3f3f3f, 
-  (1U<<31) | 924, (1U<<31) | 924, (1U<<31) | 924, 0x3f3f3f, 0x3f3f3f, (1U<<31) | 924, (1U<<31) | 924, (1U<<31) | 924, 
-  0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, (1U<<31) | 924, 0x3f3f, 0x3f3f3f, 
-  0x3f3f3f, 0x3f3f3f, 0x3f3f, 0x3f3f, 0x2f2f, 0x3f3f, 0x3f3f, 0x3f3f, 
-  (1U<<31) | 924, 0x3f3f3f, 0x3f3f3f, 0x3f3f, 0x3f3f3f, (1U<<31) | 924, 0x3f3f3f3f, 0x3f3f3f, 
-  0x3f3f3f, 0x4bf4f0, 0xbfbf4f0, (1U<<31) | 5836, (1U<<31) | 5846, 0x4bfbf4f0, (1U<<31) | 3837, (1U<<31) | 4604, 
-  (1U<<31) | 3847, (1U<<31) | 4615, (1U<<31) | 3859, 0x2b2b2b, 0x2b2b2b2b, (1U<<31) | 648, (1U<<31) | 646, 0x2b2b2b2b, 
-  (1U<<31) | 648, (1U<<31) | 646, (1U<<31) | 644, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x40, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x5445, 0x5445, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x5445, 0x5445, 0x444, 0x444, 0x444, 0x444, 
+  0x7f7f2f, 0x47f2f, 0x4442e0, 0x44cf4f, 0x44cf4f, 0x4cf4f, (1U<<31) | 1588, (1U<<31) | 6515, 
+  0x5, 0x42e, 0x7f2f, 0x7f2f, 0x7f7f1f, (1U<<31) | 6166, 0x1f0, 0x2e4, 
+  0x0, 0x42e0, 0x42e4, 0x7f2f, 0x47f7f1f, 0x47f7f1f, (1U<<31) | 6166, 0x2e, 
+  0x7f2f, 0x7f0f, 0x7f7f1f, (1U<<31) | 6166, 0x2e, 0x2ee2e0, 0x2e0, 0x2e, 
+  0x7f4f, 0x1f1, 0x2e, 0x0, 0x7f2f, (1U<<31) | 6524, (1U<<31) | 6519, 0x7f7f1f, 
+  (1U<<31) | 6166, 0x47f7f1f, (1U<<31) | 6166, 0x7f7f1f, (1U<<31) | 6166, 0x2e2e0, 0x2e0, 0x2e0, 
+  0x42e2e2e0, (1U<<31) | 166, 0x42e0, 0x42e30, 0x52e2e, 0x0, 0x444, 0x444, 
+  0x444, 0x444, 0x544, 0x444, 0x444, 0x544, 0x2c2c2c, 0x2c2c2c, 
+  0x2c2c, 0x2c2c, 0x4a44a4a, 0x44, 0x4a44a4a, 0x4a44a4a, 0x4a4a4a4a, 0x4a4a4a, 
+  0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x40, 0x40, 0x5, 0x52e5, 
+  0x40, 0x52e2e, 0x40, (1U<<31) | 747, 0x4f5, 0x2e2e2e, (1U<<31) | 747, 0x4f5, 
+  0x7f0f, (1U<<31) | 6187, 0x7f7f3f, 0x7f3f, 0x7f7f3f, 0xffaf1f, 0xffaf1f, 0x7f7f3f, 
+  0xbf2f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 
+  0xaf1f, 0xbf3f, 0xaf1f, 0xaf1f, 0x7f7f2f, 0x7f7f2f, 0x7f7f3f, 0xbf2f, 
+  0x7f7f3f, 0xbf2f, 0x7f7f2f, 0x7f7f2f, 0x7f7f3f, 0xbf2f, 0x7f7f3f, 0xbf2f, 
+  (1U<<31) | 6437, (1U<<31) | 6437, (1U<<31) | 6437, (1U<<31) | 6437, 0x7f7f2f, 0x7f2f, 0x7f7f2f, 0x7f2f, 
+  0x7f2f, 0x7f2f, 0x7f7f2f, (1U<<31) | 6293, (1U<<31) | 6283, (1U<<31) | 6271, (1U<<31) | 6293, (1U<<31) | 6339, 
+  (1U<<31) | 6293, (1U<<31) | 6283, (1U<<31) | 6322, (1U<<31) | 6283, (1U<<31) | 6271, (1U<<31) | 6301, (1U<<31) | 6271, 0x7f7f3f, 
+  (1U<<31) | 6199, 0x552c, (1U<<31) | 6187, 0x7f3f, (1U<<31) | 4643, (1U<<31) | 6187, 0x7f7f3f, 0xbf3f, 
+  0xbf1f, 0xbf1f, 0x9f1f, 0x9f1f, 0x9f1f, (1U<<31) | 6437, 0x7f7f3f, (1U<<31) | 6194, 
+  0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0xbf1f, 0x7f7f3f, 0x7f7f3f, 0xbf1f, (1U<<31) | 6199, 
+  0x7f1f, 0x7f7f1f, 0x7f7f1f, (1U<<31) | 6199, 0x445, 0x7f1f, 0x7f7f1f, 0x7f7f1f, 
+  (1U<<31) | 4643, (1U<<31) | 4643, 0x7f7f1f, 0x7f7f1f, (1U<<31) | 4643, (1U<<31) | 4643, 0x7f7f1f, (1U<<31) | 6177, 
+  (1U<<31) | 6177, 0x7f7f3f, 0x7f7f1f, 0x7f7f1f, (1U<<31) | 4649, 0xcf7f3f0, (1U<<31) | 6393, (1U<<31) | 6413, 
+  0xcf7f3f0, (1U<<31) | 6352, (1U<<31) | 6393, (1U<<31) | 6361, (1U<<31) | 6413, (1U<<31) | 6372, (1U<<31) | 6187, 0x7f7f1f, 
+  0x7f2c3f, 0x7f2c2c3f, (1U<<31) | 6131, (1U<<31) | 6103, 0x7f2c7f3f, (1U<<31) | 6155, (1U<<31) | 6142, (1U<<31) | 6116, 
+  0x7f7f3f, 0xbf3f, 0xbf1f, 0xbf1f, (1U<<31) | 6437, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 
+  0x7f7f3f, 0xbf1f, 0x7f7f3f, 0x7f7f3f, 0xbf1f, (1U<<31) | 6199, 0x7f7f1f, 0x7f7f1f, 
+  (1U<<31) | 4643, 0x7f7f1f, (1U<<31) | 4643, 0x7f7f1f, (1U<<31) | 6177, 0x7f3f, 0x7f7f3f, 0x7f7f1f, 
+  0x7f3f, 0x7f7f1f, (1U<<31) | 4649, 0x7f7f1f, 0x57f5bf3f, 0x4af1f, 0x4af1f, 0x7a3a, 
+  0x49f2f, 0x49f2f, 0x3a7a, 0x47f7f3f, 0x47f7f3f, 0x7f7f1f, 0x7f7f2f, 0x87, 
+  0x545, 0x2e2e0, 0x2e554, 0x4f54, 0x2e554, 0x4f54, 0x2e2e5, 0x7f7f1f, 
+  0x4444, 0x4444, (1U<<31) | 136, (1U<<31) | 136, (1U<<31) | 117, (1U<<31) | 117, 0x1444a444, (1U<<31) | 117, 
+  (1U<<31) | 117, (1U<<31) | 117, (1U<<31) | 117, (1U<<31) | 117, (1U<<31) | 117, (1U<<31) | 117, (1U<<31) | 117, 0x11444a0f, 
+  0x11444a0f, (1U<<31) | 26, (1U<<31) | 26, 0x0, 0x0, 0x0, 0x42f1, 0x7f2f, 
+  0x7777, 0x7777, 0x7777, 0x7777, 0x4439, 0x4439, 0x4474, 0x7739, 
+  0x7739, 0x7769, 0x5, (1U<<31) | 383, 0x7f7f7f2f, (1U<<31) | 156, (1U<<31) | 146, 0x14f4, 
+  0x444, 0x14f4, (1U<<31) | 127, (1U<<31) | 127, (1U<<31) | 127, 0x440, 0x440, 0x440, 
+  0x40, 0x40, 0x40, (1U<<31) | 0, (1U<<31) | 0, 0x444, 0x444, (1U<<31) | 6264, 
+  0x1f0, (1U<<31) | 46, (1U<<31) | 36, 0x4ffaf1f, 0x777, 0x1769697, 0x7f7f7f2f, 0x7f7f7f2f, 
+  0x777, 0x7f2f, 0xaf1f, 0x7f2f, 0x4, 0x4ff9f1f, (1U<<31) | 60, 0x9f11f, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3542, (1U<<31) | 3593, (1U<<31) | 3593, (1U<<31) | 3652, (1U<<31) | 3719, (1U<<31) | 3652, (1U<<31) | 3652, (1U<<31) | 3652, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 3531, (1U<<31) | 3580, (1U<<31) | 3580, (1U<<31) | 3637, (1U<<31) | 3702, (1U<<31) | 3637, (1U<<31) | 3637, (1U<<31) | 3637, 
+  (1U<<31) | 1755, (1U<<31) | 1819, (1U<<31) | 2144, (1U<<31) | 2396, (1U<<31) | 2396, (1U<<31) | 2792, (1U<<31) | 2792, (1U<<31) | 2415, 
+  (1U<<31) | 2813, (1U<<31) | 2813, (1U<<31) | 2396, (1U<<31) | 2161, (1U<<31) | 2415, (1U<<31) | 2415, (1U<<31) | 1786, (1U<<31) | 1854, 
+  (1U<<31) | 2107, (1U<<31) | 2355, (1U<<31) | 2355, (1U<<31) | 2747, (1U<<31) | 2747, (1U<<31) | 2375, (1U<<31) | 2769, (1U<<31) | 2769, 
+  (1U<<31) | 2355, (1U<<31) | 2125, (1U<<31) | 2375, (1U<<31) | 2375, (1U<<31) | 1854, (1U<<31) | 1930, (1U<<31) | 1930, (1U<<31) | 1872, 
+  (1U<<31) | 1950, (1U<<31) | 1950, (1U<<31) | 1854, (1U<<31) | 1854, (1U<<31) | 1930, (1U<<31) | 1930, (1U<<31) | 1872, (1U<<31) | 1950, 
+  (1U<<31) | 1950, (1U<<31) | 1786, (1U<<31) | 1854, (1U<<31) | 1854, (1U<<31) | 1802, (1U<<31) | 1872, (1U<<31) | 1872, (1U<<31) | 1802, 
+  (1U<<31) | 1872, (1U<<31) | 1872, (1U<<31) | 1819, (1U<<31) | 1891, (1U<<31) | 1891, (1U<<31) | 1836, (1U<<31) | 1910, (1U<<31) | 1910, 
+  (1U<<31) | 1819, (1U<<31) | 1819, (1U<<31) | 1891, (1U<<31) | 1891, (1U<<31) | 1836, (1U<<31) | 1910, (1U<<31) | 1910, (1U<<31) | 1755, 
+  (1U<<31) | 1819, (1U<<31) | 1819, (1U<<31) | 1770, (1U<<31) | 1836, (1U<<31) | 1836, (1U<<31) | 1770, (1U<<31) | 1836, (1U<<31) | 1836, 
+  (1U<<31) | 1699, (1U<<31) | 1755, (1U<<31) | 1755, (1U<<31) | 1819, (1U<<31) | 1819, (1U<<31) | 1819, (1U<<31) | 3521, (1U<<31) | 3521, 
+  (1U<<31) | 3521, (1U<<31) | 3521, (1U<<31) | 3521, (1U<<31) | 3521, (1U<<31) | 3521, (1U<<31) | 3521, (1U<<31) | 3510, (1U<<31) | 3555, 
+  (1U<<31) | 3555, (1U<<31) | 3608, (1U<<31) | 3669, (1U<<31) | 3608, (1U<<31) | 3608, (1U<<31) | 3608, (1U<<31) | 3555, (1U<<31) | 3608, 
+  (1U<<31) | 3608, (1U<<31) | 3669, (1U<<31) | 3669, (1U<<31) | 3669, (1U<<31) | 1699, (1U<<31) | 1755, (1U<<31) | 1755, (1U<<31) | 1819, 
+  (1U<<31) | 1819, (1U<<31) | 2004, (1U<<31) | 2144, (1U<<31) | 2144, (1U<<31) | 2396, (1U<<31) | 2396, (1U<<31) | 2144, (1U<<31) | 2396, 
+  (1U<<31) | 2396, (1U<<31) | 2792, (1U<<31) | 2792, (1U<<31) | 2792, (1U<<31) | 2161, (1U<<31) | 2415, (1U<<31) | 2415, (1U<<31) | 2813, 
+  (1U<<31) | 2813, (1U<<31) | 2813, (1U<<31) | 2396, (1U<<31) | 2019, (1U<<31) | 2161, (1U<<31) | 2161, (1U<<31) | 2415, (1U<<31) | 2415, 
+  (1U<<31) | 2415, (1U<<31) | 1726, (1U<<31) | 1786, (1U<<31) | 1786, (1U<<31) | 1854, (1U<<31) | 1854, (1U<<31) | 1971, (1U<<31) | 2107, 
+  (1U<<31) | 2107, (1U<<31) | 2355, (1U<<31) | 2355, (1U<<31) | 2107, (1U<<31) | 2355, (1U<<31) | 2355, (1U<<31) | 2747, (1U<<31) | 2747, 
+  (1U<<31) | 2747, (1U<<31) | 2125, (1U<<31) | 2375, (1U<<31) | 2375, (1U<<31) | 2769, (1U<<31) | 2769, (1U<<31) | 2769, (1U<<31) | 2355, 
+  (1U<<31) | 1987, (1U<<31) | 2125, (1U<<31) | 2125, (1U<<31) | 2375, (1U<<31) | 2375, (1U<<31) | 2375, (1U<<31) | 2070, (1U<<31) | 2218, 
+  (1U<<31) | 2306, (1U<<31) | 2574, (1U<<31) | 2686, (1U<<31) | 2218, (1U<<31) | 2478, (1U<<31) | 2574, (1U<<31) | 2890, (1U<<31) | 3010, 
+  (1U<<31) | 2890, (1U<<31) | 2238, (1U<<31) | 2500, (1U<<31) | 2600, (1U<<31) | 2918, (1U<<31) | 3042, (1U<<31) | 2918, (1U<<31) | 2574, 
+  (1U<<31) | 2088, (1U<<31) | 2238, (1U<<31) | 2330, (1U<<31) | 2600, (1U<<31) | 2716, (1U<<31) | 2600, (1U<<31) | 1786, (1U<<31) | 1854, 
+  (1U<<31) | 1854, (1U<<31) | 1930, (1U<<31) | 1930, (1U<<31) | 1930, (1U<<31) | 1802, (1U<<31) | 1872, (1U<<31) | 1872, (1U<<31) | 1950, 
+  (1U<<31) | 1950, (1U<<31) | 1950, (1U<<31) | 1854, (1U<<31) | 2070, (1U<<31) | 2218, (1U<<31) | 2306, (1U<<31) | 2574, (1U<<31) | 2686, 
+  (1U<<31) | 2218, (1U<<31) | 2478, (1U<<31) | 2574, (1U<<31) | 2890, (1U<<31) | 3010, (1U<<31) | 2890, (1U<<31) | 2238, (1U<<31) | 2500, 
+  (1U<<31) | 2600, (1U<<31) | 2918, (1U<<31) | 3042, (1U<<31) | 2918, (1U<<31) | 2574, (1U<<31) | 2088, (1U<<31) | 2238, (1U<<31) | 2330, 
+  (1U<<31) | 2600, (1U<<31) | 2716, (1U<<31) | 2600, (1U<<31) | 1786, (1U<<31) | 1854, (1U<<31) | 1854, (1U<<31) | 1930, (1U<<31) | 1930, 
+  (1U<<31) | 1930, (1U<<31) | 1802, (1U<<31) | 1872, (1U<<31) | 1872, (1U<<31) | 1950, (1U<<31) | 1950, (1U<<31) | 1950, (1U<<31) | 1726, 
+  (1U<<31) | 1786, (1U<<31) | 1786, (1U<<31) | 1854, (1U<<31) | 1854, (1U<<31) | 1854, (1U<<31) | 1740, (1U<<31) | 1802, (1U<<31) | 1802, 
+  (1U<<31) | 1872, (1U<<31) | 1872, (1U<<31) | 1872, (1U<<31) | 1740, (1U<<31) | 1802, (1U<<31) | 1802, (1U<<31) | 1872, (1U<<31) | 1872, 
+  (1U<<31) | 1872, (1U<<31) | 2035, (1U<<31) | 2179, (1U<<31) | 2259, (1U<<31) | 2523, (1U<<31) | 2627, (1U<<31) | 2179, (1U<<31) | 2435, 
+  (1U<<31) | 2523, (1U<<31) | 2835, (1U<<31) | 2947, (1U<<31) | 2835, (1U<<31) | 2198, (1U<<31) | 2456, (1U<<31) | 2548, (1U<<31) | 2862, 
+  (1U<<31) | 2978, (1U<<31) | 2862, (1U<<31) | 2523, (1U<<31) | 2052, (1U<<31) | 2198, (1U<<31) | 2282, (1U<<31) | 2548, (1U<<31) | 2656, 
+  (1U<<31) | 2548, (1U<<31) | 1755, (1U<<31) | 1819, (1U<<31) | 1819, (1U<<31) | 1891, (1U<<31) | 1891, (1U<<31) | 1891, (1U<<31) | 1770, 
+  (1U<<31) | 1836, (1U<<31) | 1836, (1U<<31) | 1910, (1U<<31) | 1910, (1U<<31) | 1910, (1U<<31) | 1819, (1U<<31) | 2035, (1U<<31) | 2179, 
+  (1U<<31) | 2259, (1U<<31) | 2523, (1U<<31) | 2627, (1U<<31) | 2179, (1U<<31) | 2435, (1U<<31) | 2523, (1U<<31) | 2835, (1U<<31) | 2947, 
+  (1U<<31) | 2835, (1U<<31) | 2198, (1U<<31) | 2456, (1U<<31) | 2548, (1U<<31) | 2862, (1U<<31) | 2978, (1U<<31) | 2862, (1U<<31) | 2523, 
+  (1U<<31) | 2052, (1U<<31) | 2198, (1U<<31) | 2282, (1U<<31) | 2548, (1U<<31) | 2656, (1U<<31) | 2548, (1U<<31) | 1755, (1U<<31) | 1819, 
+  (1U<<31) | 1819, (1U<<31) | 1891, (1U<<31) | 1891, (1U<<31) | 1891, (1U<<31) | 1770, (1U<<31) | 1836, (1U<<31) | 1836, (1U<<31) | 1910, 
+  (1U<<31) | 1910, (1U<<31) | 1910, (1U<<31) | 1699, (1U<<31) | 1755, (1U<<31) | 1755, (1U<<31) | 1819, (1U<<31) | 1819, (1U<<31) | 1819, 
+  (1U<<31) | 1712, (1U<<31) | 1770, (1U<<31) | 1770, (1U<<31) | 1836, (1U<<31) | 1836, (1U<<31) | 1836, (1U<<31) | 1712, (1U<<31) | 1770, 
+  (1U<<31) | 1770, (1U<<31) | 1836, (1U<<31) | 1836, (1U<<31) | 1836, (1U<<31) | 3520, (1U<<31) | 3567, (1U<<31) | 3567, (1U<<31) | 3622, 
+  (1U<<31) | 3685, (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3567, (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3685, 
+  (1U<<31) | 3685, (1U<<31) | 3685, (1U<<31) | 383, (1U<<31) | 383, 0x50, 0x440, 0x44447, 0x44477, 
+  0x414477, 0x444777, 0x4144776, (1U<<31) | 383, 0x10, 0x47f2f, 0x4444, 0x7f2f, 
+  0x1f1, 0x444, 0x444, (1U<<31) | 3454, (1U<<31) | 3500, (1U<<31) | 3476, (1U<<31) | 3488, (1U<<31) | 3466, 
+  (1U<<31) | 3442, (1U<<31) | 3356, (1U<<31) | 3322, (1U<<31) | 3500, (1U<<31) | 3476, (1U<<31) | 3344, (1U<<31) | 3488, (1U<<31) | 3466, 
+  (1U<<31) | 3442, (1U<<31) | 3454, (1U<<31) | 3280, (1U<<31) | 3312, (1U<<31) | 3334, (1U<<31) | 3312, (1U<<31) | 3280, 0x14447f1f, 
+  0x47f1f, 0x5455, 0x4a454a, 0x4444, 0x1144444, 0x1144444, 0x1, 0x5455, 
+  (1U<<31) | 383, (1U<<31) | 3290, (1U<<31) | 3290, (1U<<31) | 3300, (1U<<31) | 3290, (1U<<31) | 3290, (1U<<31) | 3290, (1U<<31) | 3290, 
+  (1U<<31) | 3290, (1U<<31) | 3290, (1U<<31) | 3290, (1U<<31) | 3290, 0x4444a0f, 0x4444a0f, 0x4444a0f0, 0x4444a0f0, 
+  0x44444a0f, (1U<<31) | 3239, 0x7f2f, 0x77, 0x44, 0x444, 0x7f2f, 0x7f2f, 
+  0x77, 0x0, 0x444a0f, 0x0, 0x0, 0x0, 0x0, 0x40, 
+  0x4, 0x5, 0x44, 0x40, 0x5, 0x5, 0x440, 0x440, 
+  0x40, 0x40, 0x4444, 0x4444, 0x4444, 0x447f1f, 0x1439394, 0x14444, 
+  0x14444, 0x7f7f1f, 0x7f1f, 0x7f2f, (1U<<31) | 3249, (1U<<31) | 3249, (1U<<31) | 3260, (1U<<31) | 3249, 
+  (1U<<31) | 3249, (1U<<31) | 3249, (1U<<31) | 3249, (1U<<31) | 3249, (1U<<31) | 3249, (1U<<31) | 3249, (1U<<31) | 3249, 0x44444a0f, 
+  0x44444a0f, (1U<<31) | 3239, (1U<<31) | 3239, (1U<<31) | 3221, (1U<<31) | 3220, (1U<<31) | 13, (1U<<31) | 12, 0x47f2f, 
+  0x447f1f, 0x1439394, 0x14444, 0x14444, 0x0, (1U<<31) | 106, 0x0, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x7f0f, 0x11, 
+  0x4444, 0x7f0f, 0x4444440, 0x4444440, 0x0, 0x2e4, 0x2e4, 0x2e4, 
+  0x2e4, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x40, 
+  0x40, 0x40, 0x4, 0x0, 0x40, 0x40, 0x4f4, (1U<<31) | 731, 
+  0x2e440, 0x2e440, 0x2e440, 0x2e440, 0x4f4, (1U<<31) | 731, 0x4444440, 0x4444440, 
+  0x444440, 0x444440, 0x444444, 0x444444, (1U<<31) | 3273, (1U<<31) | 3273, 0x2c2c2c, 0x2c2c2c, 
+  0x2c2c, 0x2c2c, (1U<<31) | 6437, 0x4a44a4a, 0x44, 0x4a44a4a, 0x4a44a4a, 0x4a4a4a4a, 
+  0x4a4a4a, 0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, (1U<<31) | 6437, 0x7f7f3f, 0x7f7f3f, 
+  0x7f3f, 0xffbf3f, 0xffbf3f, 0x7f7f7f3f, 0x7f3f, 0xbf3f, 0xbf3f, 0x4af1f, 
+  0x4af1f, 0x7a3a, 0x49f2f, 0x49f2f, 0x3a7a, 0xbf3f, 0xbf3f, 0xbf3f, 
+  0xbf3f, 0xbf3f, 0xbf3f, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x4cf3f, 
+  (1U<<31) | 6385, (1U<<31) | 6403, (1U<<31) | 6425, (1U<<31) | 4926, (1U<<31) | 4926, (1U<<31) | 3855, (1U<<31) | 4935, (1U<<31) | 4935, 
+  (1U<<31) | 3837, (1U<<31) | 4946, (1U<<31) | 4946, (1U<<31) | 3815, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 
+  0x7f7f3f, 0x7f7f3f, (1U<<31) | 6199, (1U<<31) | 6199, (1U<<31) | 6199, 0x7f7f3f, 0xbf7f3f, 0xbf7f3f, 
+  0x7f7f3f, 0xbf3f, 0xbf3f, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x7f3f, 
+  0x7f7f3f, 0x7f7f3f, 0x7f7f3f, (1U<<31) | 6199, (1U<<31) | 6182, (1U<<31) | 6182, (1U<<31) | 6182, 0x7f3f, 
+  0x7f7f3f, (1U<<31) | 6187, (1U<<31) | 6187, (1U<<31) | 6187, 0x7f7f3f, 0x7f7f3f, (1U<<31) | 6187, (1U<<31) | 6187, 
+  (1U<<31) | 6187, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x7f7f3f, (1U<<31) | 6187, 0x7f3f, 
+  0x7f7f3f, 0x7f7f3f, 0x7f7f3f, 0x7f3f, 0x7f3f, 0x7f2f, 0x7f3f, 0x7f3f, 
+  0x7f3f, (1U<<31) | 6187, 0x7f7f3f, 0x7f7f3f, 0x7f3f, 0x7f7f3f, (1U<<31) | 6187, 0x7f7f7f3f, 
+  0x7f7f3f, 0x7f7f3f, 0x4bf4f0, 0xffbf4f0, (1U<<31) | 6446, (1U<<31) | 6456, 0x4ffbf4f0, (1U<<31) | 4179, 
+  (1U<<31) | 5142, (1U<<31) | 4189, (1U<<31) | 5153, (1U<<31) | 4201, 0x2b2b2b, 0x2b2b2b2b, (1U<<31) | 643, (1U<<31) | 641, 
+  0x2b2b2b2b, (1U<<31) | 643, (1U<<31) | 641, (1U<<31) | 639, 0x444, 0x444, 0x444, 0x444, 
   0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x2e440, 0x2e440, 0x2e440, 0x2e440, 
-  0x4f44, 0x2e444, 0x4f44, 0x2e444, 0x444, 0x44, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x40, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x4444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x44, 0x2f7, 
-  0x2f7, 0x52e5, 0x52e5, 0x52e5, 0x555, 0x44, 0x55, 0x44, 
+  0x40, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x5445, 0x5445, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x5445, 0x5445, 0x444, 0x444, 0x444, 
   0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x555, 0x555, 
-  0x444, 0x545, 0x444, 0x444, 0x555, 0x44, 0x44, 0x444, 
-  0x444, 0x444, 0x444, 0x445, 0x445, 0x444, 0x555, 0x444, 
-  0x555, 0x444, 0x555, 0x444, 0x555, 0x44, 0x55, 0x44, 
-  0x44, 0x55, 0x444, 0x444, 0x555, 0x4444, 0x54, 0x54, 
-  0x44, 0x44, 0x44, 0x44, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x2e440, 0x2e440, 0x2e440, 
+  0x2e440, 0x4f44, 0x2e444, 0x4f44, 0x2e444, 0x444, 0x44, 0x444, 
   0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x555, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x44, 0x44, 0x44, 
-  0x45, 0x44, 0x44, 0x444, 0x444, 0x55, 0x45, 0x44, 
-  0x44, 0x55, 0x55, 0x55, 0x55, 0x555, 0x555, 0x555, 
+  0x40, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x44, 
+  0x2f7, 0x2f7, 0x52e5, 0x52e5, 0x52e5, 0x555, 0x44, 0x55, 
+  0x44, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x555, 
+  0x555, 0x444, 0x545, 0x444, 0x444, 0x555, 0x44, 0x44, 
+  0x444, 0x444, 0x444, 0x444, 0x445, 0x445, 0x444, 0x555, 
+  0x444, 0x555, 0x444, 0x555, 0x444, 0x555, 0x44, 0x55, 
+  0x44, 0x44, 0x55, 0x444, 0x444, 0x555, 0x4444, 0x54, 
+  0x54, 0x44, 0x44, 0x44, 0x44, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x555, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x44, 0x44, 
+  0x44, 0x45, 0x44, 0x44, 0x444, 0x444, 0x55, 0x45, 
+  0x44, 0x44, 0x55, 0x55, 0x55, 0x55, 0x555, 0x555, 
   0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
   0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x554, 0x554, 0x554, 0x554, 0x554, 0x554, 0x554, 
-  0x554, 0x55, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x554, 0x554, 0x554, 0x554, 0x554, 0x554, 
+  0x554, 0x554, 0x55, 0x555, 0x555, 0x555, 0x555, 0x555, 
   0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x5555, 0x555, 0x5555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x444, 0x555, 0x44, 0x44, (1U<<31) | 4075, 0x444, 0x555, 0x445, 
-  0x445, 0x544, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x445, 0x445, 
-  0x445, 0x444, 0x444, 0x444, 0x444, 0x555, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, (1U<<31) | 4075, 0x55, 
-  0x55, 0x454, 0x554, 0x454, 0x554, 0x454, 0x454, 0x454, 
-  0x454, 0x454, 0x454, 0x454, 0x454, 0x4555, 0x4555, 0x4555, 
-  0x4555, 0x4555, 0x4555, 0x4555, 0x4555, (1U<<31) | 4978, 0x554, 0x554, 
-  (1U<<31) | 4972, 0x44, 0x444, 0x444, 0x44, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x554, 0x444, 0x444, 0x444, 0x444, 0x554, 
-  0x444, 0x444, 0x554, 0x444, 0x444, 0x45, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x44, 0x444, 0x444, 0x44, 0x44, 0x44, 
-  0x444, 0x5545, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x5555, 0x555, 
+  0x5555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x444, 0x555, 0x44, 0x44, (1U<<31) | 4283, 0x444, 0x555, 
+  0x445, 0x445, 0x544, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x445, 
+  0x445, 0x445, 0x444, 0x444, 0x444, 0x444, 0x555, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, (1U<<31) | 4283, 
+  0x55, 0x55, 0x454, 0x554, 0x454, 0x554, 0x454, 0x454, 
+  0x454, 0x454, 0x454, 0x454, 0x454, 0x454, 0x4555, 0x4555, 
+  0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, (1U<<31) | 5249, 0x554, 
+  0x554, (1U<<31) | 5243, 0x44, 0x444, 0x444, 0x44, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x554, 0x444, 0x444, 0x444, 0x444, 
+  0x554, 0x444, 0x444, 0x554, 0x444, 0x444, 0x45, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x44, 0x444, 0x444, 0x44, 0x44, 
+  0x44, 0x444, 0x5545, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 
   0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x58, 0x57, 
-  0x85, 0x85, 0x87, 0x85, 0x85, 0x84, 0x84, 0x84, 
-  0x84, 0x75, 0x75, 0x78, 0x75, 0x75, 0x74, 0x74, 
-  0x74, 0x74, 0x58, 0x57, 0x48, 0x47, 0x48, 0x47, 
-  0x888, 0x484, 0x884, 0x884, 0x884, 0x884, 0x48, 0x48, 
-  0x888, 0x777, 0x474, 0x774, 0x774, 0x774, 0x774, 0x777, 
-  0x777, 0x77, 0x7777, 0x7777, 0x47777, 0x7777, 0x7777, 0x47, 
-  0x47, (1U<<31) | 5157, 0x777, 0x777, 0x777, (1U<<31) | 5238, 0x777, (1U<<31) | 1684, 
-  (1U<<31) | 704, (1U<<31) | 684, (1U<<31) | 1692, (1U<<31) | 715, (1U<<31) | 694, (1U<<31) | 1684, (1U<<31) | 704, (1U<<31) | 684, 
-  (1U<<31) | 1684, (1U<<31) | 704, (1U<<31) | 684, (1U<<31) | 1684, (1U<<31) | 704, (1U<<31) | 684, (1U<<31) | 1684, (1U<<31) | 704, 
-  (1U<<31) | 684, 0x4e4, 0x5e5, 0x4444, 0x4444, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x444, 0x444, 0x444, 
-  0x444, 0x445, 0x445, 0x445, 0x445, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x444, 0x445, 0x4455, 0x4455, 0x445, 
-  0x444, 0x444, 0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x5555, 
+  0x444, 0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x58, 
+  0x57, 0x85, 0x85, 0x87, 0x85, 0x85, 0x84, 0x84, 
+  0x84, 0x84, 0x75, 0x75, 0x78, 0x75, 0x75, 0x74, 
+  0x74, 0x74, 0x74, 0x58, 0x57, 0x48, 0x47, 0x48, 
+  0x47, 0x888, 0x484, 0x884, 0x884, 0x884, 0x884, 0x48, 
+  0x48, 0x888, 0x777, 0x474, 0x774, 0x774, 0x774, 0x774, 
+  0x777, 0x777, 0x77, 0x7777, 0x7777, 0x47777, 0x7777, 0x7777, 
+  0x47, 0x47, (1U<<31) | 5458, 0x777, 0x777, 0x777, (1U<<31) | 5539, 0x777, 
+  (1U<<31) | 1562, (1U<<31) | 699, (1U<<31) | 679, (1U<<31) | 1570, (1U<<31) | 710, (1U<<31) | 689, (1U<<31) | 1562, (1U<<31) | 699, 
+  (1U<<31) | 679, (1U<<31) | 1562, (1U<<31) | 699, (1U<<31) | 679, (1U<<31) | 1562, (1U<<31) | 699, (1U<<31) | 679, (1U<<31) | 1562, 
+  (1U<<31) | 699, (1U<<31) | 679, 0x4e4, 0x5e5, 0x4444, 0x4444, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x444, 0x444, 
+  0x444, 0x444, 0x445, 0x445, 0x445, 0x445, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x444, 0x445, 0x4455, 0x4455, 
+  0x445, 0x444, 0x444, 0x444, 0x444, 0x4444, 0x4444, 0x4444, 
   0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
-  0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x555, 
+  0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
   0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x4444, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
   0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
   0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
   0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
   0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
   0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x445, 0x445, 0x445, 
-  0x445, 0x445, 0x445, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x445, 0x445, 0x445, 
-  0x445, 0x445, 0x445, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x444, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 
-  0x445, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x444, 0x4444, 0x4444, 0x4444, 0x555, 0x555, 0x5555, 
-  0x5555, 0x555, 0x555, 0x555, 0x555, 0x5555, 0x5555, 0x554, 
-  0x554, 0x555, 0x555, 0x4455, 0x5555, 0x5555, 0x5555, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x555, 0x555, 0x445, 0x444, 0x445, 
-  0x444, 0x445, 0x445, 0x554, 0x554, 0x5555, 0x5555, 0x5555, 
-  0x5555, 0x555, 0x555, 0x555, 0x555, 0x4555, 0x455, 0x454, 
-  0x5555, 0x555, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x454, 
-  0x454, 0x454, 0x454, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x445, 0x4455, 
-  0x445, 0x4455, 0x5555, 0x5555, 0x555, 0x555, 0x5555, 0x5555, 
-  0x555, 0x555, 0x4444, 0x4444, 0x4444, 0x5555, 0x5555, 0x555, 
-  0x4455, 0x4455, 0x445, 0x445, 0x5555, 0x5555, 0x555, 0x555, 
-  0x555, 0x555, 0x4444, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 
-  0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x4444, 
+  0x444, 0x444, 0x444, 0x444, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x445, 0x445, 
+  0x445, 0x445, 0x445, 0x445, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x445, 0x445, 
+  0x445, 0x445, 0x445, 0x445, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x444, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 
+  0x445, 0x445, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x444, 0x4444, 0x4444, 0x4444, 0x555, 0x555, 
+  0x5555, 0x5555, 0x555, 0x555, 0x555, 0x555, 0x5555, 0x5555, 
+  0x554, 0x554, 0x555, 0x555, 0x4455, 0x5555, 0x5555, 0x5555, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x555, 0x555, 0x445, 0x444, 
+  0x445, 0x444, 0x445, 0x445, 0x554, 0x554, 0x5555, 0x5555, 
+  0x5555, 0x5555, 0x555, 0x555, 0x555, 0x555, 0x4555, 0x455, 
+  0x454, 0x5555, 0x555, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x454, 0x454, 0x454, 0x454, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x445, 
+  0x4455, 0x445, 0x4455, 0x5555, 0x5555, 0x555, 0x555, 0x5555, 
+  0x5555, 0x555, 0x555, 0x4444, 0x4444, 0x4444, 0x5555, 0x5555, 
+  0x555, 0x4455, 0x4455, 0x445, 0x445, 0x5555, 0x5555, 0x555, 
+  0x555, 0x555, 0x555, 0x4444, 0x455, 0x4555, 0x4555, 0x4555, 
+  0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 
+  0x4444, 0x455, 0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 
+  0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x455, 
+  0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x455, 0x455, 
+  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x444, 0x454, 
   0x455, 0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 
-  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x455, 0x455, 
-  0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x455, 0x455, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x444, 0x454, 0x455, 
-  0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x454, 0x455, 0x455, 
-  0x44, 0x55, 0x44, 0x54, 0x44, 0x54, 0x44, 0x44, 
-  0x54, 0x444, 0x444, 0x44, 0x54, 0x44, 0x54, 0x55, 
-  0x4444, 0x544, 0x4455, 0x555, 0x44444, 0x5444, 0x44555, 0x5555, 
-  0x55, 0x555, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 
-  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x455, 0x455, 0x455, 
-  0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x455, 0x455, 0x455, 0x4555, 0x4555, 
-  0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x455, 0x455, 0x444, 0x445, 0x554, 0x444, 0x444, 0x555, 
-  0x555, 0x555, 0x555, 0x442e2e, (1U<<31) | 726, 0x2e442e2e, 0x452e2e, (1U<<31) | 742, 
-  0x2e542e2e, 0x442e2e, (1U<<31) | 726, 0x2e442e2e, 0x442e2e, (1U<<31) | 726, 0x2e442e2e, 0x442e2e, 
-  (1U<<31) | 726, 0x2e442e2e, 0x44e4, 0x44, 0x44, 0x44444, 0x44444, 0x44444, 
-  0x44444, 0x444, 0x444, 0x444, 0x444, 0x4555, 0x4555, 0x455, 
-  0x455, 0x4555, 0x54, 0x54, 0x54, 0x55, 0x54, 0x55, 
-  0x54, 0x55, 0x54, 0x55, 0x44, 0x45, 0x4555, 0x4555, 
-  0x45, 0x45, 0x54, 0x555, 0x54, 0x555, 0x45, 0x45, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x454, 0x54, 
-  0x4444, 0x544, 0x4455, 0x555, 0x444, 0x444, 0x444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x55e4, 0x4444, 0x4444, 
-  0x4444, 0x4455, 0x44555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x454, 0x454, 0x54, 0x455, 0x455, 0x4555, 0x4555, 
-  0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x45, 0x555, 0x555, 0x44c4, 0x44d4, 0x4d4c, (1U<<31) | 4913, 
-  0x44c, 0x44d, 0x444c, 0x444d, 0x444c, 0x444d, 0x444c, 0x444d, 
+  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x454, 0x455, 
+  0x455, 0x44, 0x55, 0x44, 0x54, 0x44, 0x54, 0x44, 
+  0x44, 0x54, 0x444, 0x444, 0x44, 0x54, 0x44, 0x54, 
+  0x55, 0x4444, 0x544, 0x4455, 0x555, 0x44444, 0x5444, 0x44555, 
+  0x5555, 0x55, 0x555, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 
+  0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x455, 0x455, 
+  0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x455, 0x455, 0x455, 0x4555, 
+  0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x455, 0x455, 0x444, 0x445, 0x554, 0x444, 0x444, 
+  0x555, 0x555, 0x555, 0x555, 0x442e2e, (1U<<31) | 721, 0x2e442e2e, 0x452e2e, 
+  (1U<<31) | 737, 0x2e542e2e, 0x442e2e, (1U<<31) | 721, 0x2e442e2e, 0x442e2e, (1U<<31) | 721, 0x2e442e2e, 
+  0x442e2e, (1U<<31) | 721, 0x2e442e2e, 0x44e4, 0x44, 0x44, 0x44444, 0x44444, 
+  0x44444, 0x44444, 0x444, 0x444, 0x444, 0x444, 0x4555, 0x4555, 
+  0x455, 0x455, 0x4555, 0x54, 0x54, 0x54, 0x55, 0x54, 
+  0x55, 0x54, 0x55, 0x54, 0x55, 0x44, 0x45, 0x4555, 
+  0x4555, 0x45, 0x45, 0x54, 0x555, 0x54, 0x555, 0x45, 
+  0x45, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x454, 
+  0x54, 0x4444, 0x544, 0x4455, 0x555, 0x444, 0x444, 0x444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x55e4, 0x4444, 
+  0x4444, 0x4444, 0x4455, 0x44555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x454, 0x454, 0x54, 0x455, 0x455, 0x4555, 
+  0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x45, 0x555, 0x555, 0x44c4, 0x44d4, 0x4d4c, 
+  (1U<<31) | 5189, 0x44c, 0x44d, 0x444c, 0x444d, 0x444c, 0x444d, 0x444c, 
+  0x444d, 0x444c, 0x444d, 0x444c, 0x444d, 0x444c, 0x444d, 0x44c, 
+  0x44d, 0x44c, 0x444c, 0x444d, 0x444c, 0x444d, 0x444c, 0x444d, 
   0x444c, 0x444d, 0x444c, 0x444d, 0x444c, 0x444d, 0x44c, 0x44d, 
-  0x44c, 0x444c, 0x444d, 0x444c, 0x444d, 0x444c, 0x444d, 0x444c, 
-  0x444d, 0x444c, 0x444d, 0x444c, 0x444d, 0x44c, 0x44d, 0x4d4c, 
-  (1U<<31) | 4913, 0x44c, 0x44d, 0x44c, 0x44d, 0x44c, 0x44d, (1U<<31) | 202, 
-  (1U<<31) | 230, (1U<<31) | 202, (1U<<31) | 230, (1U<<31) | 204, (1U<<31) | 232, (1U<<31) | 202, (1U<<31) | 230, (1U<<31) | 202, 
-  (1U<<31) | 230, (1U<<31) | 1241, (1U<<31) | 1249, (1U<<31) | 1241, (1U<<31) | 1249, (1U<<31) | 202, (1U<<31) | 230, (1U<<31) | 202, 
-  (1U<<31) | 230, (1U<<31) | 202, (1U<<31) | 230, (1U<<31) | 4635, (1U<<31) | 4740, (1U<<31) | 4635, (1U<<31) | 4740, (1U<<31) | 4635, 
-  (1U<<31) | 4740, (1U<<31) | 4635, (1U<<31) | 4740, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 
-  0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 4662, (1U<<31) | 4777, (1U<<31) | 4662, (1U<<31) | 4777, 0x4c4c4c, 
-  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 209, (1U<<31) | 237, (1U<<31) | 221, (1U<<31) | 249, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 4662, 
-  (1U<<31) | 4777, (1U<<31) | 4662, (1U<<31) | 4777, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, 0x4c4c4d, 
-  (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, 0x4c4c4c, 
-  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
-  (1U<<31) | 4918, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
-  (1U<<31) | 4918, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 4662, (1U<<31) | 4777, (1U<<31) | 4662, 
-  (1U<<31) | 4777, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
-  0x44d4d4d, 0x4c4c4c, 0x4d4d4d, (1U<<31) | 1239, (1U<<31) | 1247, (1U<<31) | 1237, (1U<<31) | 1245, (1U<<31) | 1239, 
-  (1U<<31) | 1247, (1U<<31) | 1237, (1U<<31) | 1245, (1U<<31) | 4628, (1U<<31) | 4733, (1U<<31) | 4628, (1U<<31) | 4733, (1U<<31) | 3875, 
-  (1U<<31) | 3925, (1U<<31) | 3873, (1U<<31) | 3923, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4d4d, 
-  (1U<<31) | 4805, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
-  0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c4c, 
-  0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 
-  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
-  0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 
-  0x4d4d, 0x4d4d, (1U<<31) | 4920, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4d, 
-  (1U<<31) | 4807, 0x4c, 0x4d, 0x4d, (1U<<31) | 4902, 0x4c4c, 0x4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c, 0x4d4d, 0x44c4c4d, (1U<<31) | 3944, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 
-  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4d, (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, 0x44c4c, 
-  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4d, (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, 0x44d4c, 
-  (1U<<31) | 4009, 0x44d4c4c, (1U<<31) | 4007, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4c, 
-  (1U<<31) | 4009, 0x44d4c4c, (1U<<31) | 4007, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44d4d, (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, (1U<<31) | 4655, 
-  (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4655, 
-  (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4655, 
-  (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, 0x4c442e0, 
-  0x4d442e0, (1U<<31) | 4643, (1U<<31) | 4758, 0x4d442e0, (1U<<31) | 4905, (1U<<31) | 4748, (1U<<31) | 4895, 0x4c442e0, 
-  0x4d442e0, (1U<<31) | 4643, (1U<<31) | 4758, (1U<<31) | 4655, (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, 
-  (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4655, (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, 
-  (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4655, (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, 
-  (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4655, (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, 
-  (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4655, (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, 
-  (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4655, (1U<<31) | 4770, (1U<<31) | 4653, (1U<<31) | 4768, (1U<<31) | 4653, 
-  (1U<<31) | 4768, (1U<<31) | 4653, (1U<<31) | 4768, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
-  0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 
-  0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x54c4c, 0x54d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
-  0x44d4d4d, (1U<<31) | 3903, (1U<<31) | 3932, (1U<<31) | 3903, (1U<<31) | 3932, 0x44c4c4c, 0x44d4d4d, 0x44c4c4d, 
-  (1U<<31) | 3944, 0x44c4c4d, (1U<<31) | 3944, (1U<<31) | 3913, (1U<<31) | 3942, (1U<<31) | 3913, (1U<<31) | 3942, 0x44c4c4d, 
-  (1U<<31) | 3944, (1U<<31) | 4635, (1U<<31) | 4740, (1U<<31) | 4635, (1U<<31) | 4740, (1U<<31) | 4635, (1U<<31) | 4740, (1U<<31) | 4635, 
-  (1U<<31) | 4740, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44d4d, (1U<<31) | 4017, 0x44d4d4d, 
-  (1U<<31) | 4015, 0x4d4d4d, (1U<<31) | 4918, 0x44d4d, (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, 0x4d4d4d, 
-  (1U<<31) | 4918, 0x44d4d, (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, 0x54c4c4c, 0x54d4d4d, 0x44d4d, 
-  (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, 0x54c4c4c, 0x54d4d4d, 0x54c4c4c, 0x54d4d4d, 0x44c4d, 
-  (1U<<31) | 3954, 0x44c4d4d, (1U<<31) | 3952, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, 0x4c4c4d, 
-  (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, 0x4c4c4c, 0x4d4d4d, 0x4c4c4d, (1U<<31) | 4807, 0x44c4d, 
-  (1U<<31) | 3954, 0x44c4d4d, (1U<<31) | 3952, 0x44c4d4d, (1U<<31) | 3952, 0x44c4c, 0x44d4d, 0x44c4c, 
-  0x44d4d, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d4d, 
-  (1U<<31) | 4805, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 
-  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 
-  0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 
-  0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4d4d, (1U<<31) | 4805, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 
-  0x4d4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4d, (1U<<31) | 3954, 0x44c4d4d, (1U<<31) | 3952, 0x4c4c4d, 
-  (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, 0x44c4d, (1U<<31) | 3954, 0x44c4d4d, (1U<<31) | 3952, 0x44c4c, 
-  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d4d, (1U<<31) | 4805, (1U<<31) | 4662, 
-  (1U<<31) | 4777, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c, 0x4d4d, (1U<<31) | 216, (1U<<31) | 244, (1U<<31) | 216, (1U<<31) | 244, (1U<<31) | 216, 
-  (1U<<31) | 244, 0x4c4c4c, 0x4d4d4d, 0x54c4d, (1U<<31) | 4954, 0x54c4d4d, (1U<<31) | 4952, 0x44c4c, 
-  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x444d4d, (1U<<31) | 3615, 0x444d4d4d, (1U<<31) | 3613, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 
-  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x54c4d, (1U<<31) | 4954, 0x54c4d4d, (1U<<31) | 4952, 0x444d4d, 
-  (1U<<31) | 3615, 0x444d4d4d, (1U<<31) | 3613, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 
-  0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x444d4d, 
-  (1U<<31) | 3615, 0x444d4d4d, (1U<<31) | 3613, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4d, (1U<<31) | 4817, 0x4c4c440, 0x4d4d440, 0x4c4c440, 
-  0x4d4d440, (1U<<31) | 4680, (1U<<31) | 4795, 0x4c4d440, (1U<<31) | 4814, 0x4c4d440, (1U<<31) | 4814, (1U<<31) | 4690, 
-  (1U<<31) | 4822, 0x4c4c440, 0x4d4d440, 0x4c4c440, 0x4d4d440, (1U<<31) | 4680, (1U<<31) | 4795, 0x4c4d, 
-  (1U<<31) | 4817, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 
-  0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c4d, (1U<<31) | 3944, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d, 
-  (1U<<31) | 4807, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 4662, 
-  (1U<<31) | 4777, (1U<<31) | 4662, (1U<<31) | 4777, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 209, 
-  (1U<<31) | 237, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 4662, (1U<<31) | 4777, (1U<<31) | 4662, 
-  (1U<<31) | 4777, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4d, 
-  (1U<<31) | 4807, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
-  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, 0x4c4c4d, (1U<<31) | 4807, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
-  (1U<<31) | 4918, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 4662, (1U<<31) | 4777, (1U<<31) | 4662, 
-  (1U<<31) | 4777, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4918, (1U<<31) | 4671, (1U<<31) | 4786, 0x44d4d, 
-  (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, 0x44d4d, (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, 0x44d4d, 
-  (1U<<31) | 4017, 0x44d4d4d, (1U<<31) | 4015, (1U<<31) | 3902, (1U<<31) | 3931, 0x4c4d, (1U<<31) | 4817, 0x4c4d, 
-  (1U<<31) | 4817, 0x4c4d4d, (1U<<31) | 4832, 0x4c4d4d, (1U<<31) | 4832, 0x4c4d, (1U<<31) | 4817, 0x4c4d, 
-  (1U<<31) | 4817, 0x4c4c4c, 0x4d4d4d, 0x4c4d, (1U<<31) | 4817, 0x4c4d, (1U<<31) | 4817, 0x2e0, 
-  0x2e0, 0x2e0, 0x2e0, 0x42e0, 0x52e0, 0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 
-  0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 0x4442e2e, 0x4452e2e, 0x4442e2e, 0x4442e2e, 0x4442e2e, 
-  0x2e0, 0x42e2e0, 0x442e0, 0x3939, 0x2a2a, 0x44, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x393939, 0x393939, 0x444, 0x393939, 0x393939, 0x444, 
-  0x444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x444, 0x393939, 0x2a2a2a, 
-  0x393939, 0x2a2a2a, 0x2a2a2a, 0x2a2a2a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x444, 0x2c2c2c, 0x42c2c, 0x4444, 
+  0x4d4c, (1U<<31) | 5189, 0x44c, 0x44d, 0x44c, 0x44d, 0x44c, 0x44d, 
+  (1U<<31) | 197, (1U<<31) | 225, (1U<<31) | 197, (1U<<31) | 225, (1U<<31) | 199, (1U<<31) | 227, (1U<<31) | 197, (1U<<31) | 225, 
+  (1U<<31) | 197, (1U<<31) | 225, (1U<<31) | 1139, (1U<<31) | 1147, (1U<<31) | 1139, (1U<<31) | 1147, (1U<<31) | 197, (1U<<31) | 225, 
+  (1U<<31) | 197, (1U<<31) | 225, (1U<<31) | 197, (1U<<31) | 225, (1U<<31) | 4851, (1U<<31) | 4966, (1U<<31) | 4851, (1U<<31) | 4966, 
+  (1U<<31) | 4851, (1U<<31) | 4966, (1U<<31) | 4851, (1U<<31) | 4966, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, (1U<<31) | 4888, (1U<<31) | 5003, (1U<<31) | 4888, (1U<<31) | 5003, 
+  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, (1U<<31) | 204, (1U<<31) | 232, (1U<<31) | 216, (1U<<31) | 244, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 
+  (1U<<31) | 4888, (1U<<31) | 5003, (1U<<31) | 4888, (1U<<31) | 5003, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 
+  0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 
+  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4d4d4d, (1U<<31) | 5194, 0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 0x4c4c4c, 0x4d4d4d, 
+  0x4d4d4d, (1U<<31) | 5194, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, (1U<<31) | 4888, (1U<<31) | 5003, 
+  (1U<<31) | 4888, (1U<<31) | 5003, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 0x44c4c4c, 0x44d4d4d, 
+  0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, (1U<<31) | 1137, (1U<<31) | 1145, (1U<<31) | 1135, (1U<<31) | 1143, 
+  (1U<<31) | 1137, (1U<<31) | 1145, (1U<<31) | 1135, (1U<<31) | 1143, (1U<<31) | 4844, (1U<<31) | 4959, (1U<<31) | 4844, (1U<<31) | 4959, 
+  (1U<<31) | 4018, (1U<<31) | 4068, (1U<<31) | 4016, (1U<<31) | 4066, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4d4d, (1U<<31) | 5031, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c, 0x4d4d, 0x4d4d, (1U<<31) | 5196, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 
+  0x4c4c4d, (1U<<31) | 5033, 0x4c, 0x4d, 0x4d, (1U<<31) | 5178, 0x4c4c, 0x4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x44c4c4d, (1U<<31) | 4087, 0x4c4c4c, 0x4d4d4d, 
+  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 
+  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 
+  0x44d4c, (1U<<31) | 4217, 0x44d4c4c, (1U<<31) | 4215, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x44d4c, (1U<<31) | 4217, 0x44d4c4c, (1U<<31) | 4215, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 
+  (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, 
+  0x4c442e0, 0x4d442e0, (1U<<31) | 4859, (1U<<31) | 4984, 0x4d442e0, (1U<<31) | 5181, (1U<<31) | 4974, (1U<<31) | 5171, 
+  0x4c442e0, 0x4d442e0, (1U<<31) | 4859, (1U<<31) | 4984, (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4881, (1U<<31) | 4996, (1U<<31) | 4879, (1U<<31) | 4994, 
+  (1U<<31) | 4879, (1U<<31) | 4994, (1U<<31) | 4879, (1U<<31) | 4994, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x54c4c, 0x54d4d, 0x44c4c4c, 0x44d4d4d, 
+  0x44c4c4c, 0x44d4d4d, (1U<<31) | 4046, (1U<<31) | 4075, (1U<<31) | 4046, (1U<<31) | 4075, 0x44c4c4c, 0x44d4d4d, 
+  0x44c4c4d, (1U<<31) | 4087, 0x44c4c4d, (1U<<31) | 4087, (1U<<31) | 4056, (1U<<31) | 4085, (1U<<31) | 4056, (1U<<31) | 4085, 
+  0x44c4c4d, (1U<<31) | 4087, (1U<<31) | 4851, (1U<<31) | 4966, (1U<<31) | 4851, (1U<<31) | 4966, (1U<<31) | 4851, (1U<<31) | 4966, 
+  (1U<<31) | 4851, (1U<<31) | 4966, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44d4d, (1U<<31) | 4225, 
+  0x44d4d4d, (1U<<31) | 4223, 0x4d4d4d, (1U<<31) | 5194, 0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 
+  0x4d4d4d, (1U<<31) | 5194, 0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 0x54c4c4c, 0x54d4d4d, 
+  0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 0x54c4c4c, 0x54d4d4d, 0x54c4c4c, 0x54d4d4d, 
+  0x44c4d, (1U<<31) | 4097, 0x44c4d4d, (1U<<31) | 4095, 0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 
+  0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 0x4c4c4c, 0x4d4d4d, 0x4c4c4d, (1U<<31) | 5033, 
+  0x44c4d, (1U<<31) | 4097, 0x44c4d4d, (1U<<31) | 4095, 0x44c4d4d, (1U<<31) | 4095, 0x44c4c, 0x44d4d, 
+  0x44c4c, 0x44d4d, 0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 0x4c4c4d, (1U<<31) | 5033, 
+  0x4c4c4d4d, (1U<<31) | 5031, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
+  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 
+  0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 
+  0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4d4d, (1U<<31) | 5031, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4d, (1U<<31) | 4097, 0x44c4d4d, (1U<<31) | 4095, 
+  0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 0x44c4d, (1U<<31) | 4097, 0x44c4d4d, (1U<<31) | 4095, 
+  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4d, (1U<<31) | 5033, 0x4c4c4d4d, (1U<<31) | 5031, 
+  (1U<<31) | 4888, (1U<<31) | 5003, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, (1U<<31) | 211, (1U<<31) | 239, (1U<<31) | 211, (1U<<31) | 239, 
+  (1U<<31) | 211, (1U<<31) | 239, 0x4c4c4c, 0x4d4d4d, 0x54c4d, (1U<<31) | 5230, 0x54c4d4d, (1U<<31) | 5228, 
+  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x444d4d, (1U<<31) | 3740, 0x444d4d4d, (1U<<31) | 3738, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
+  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x54c4d, (1U<<31) | 5230, 0x54c4d4d, (1U<<31) | 5228, 
+  0x444d4d, (1U<<31) | 3740, 0x444d4d4d, (1U<<31) | 3738, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
+  0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x444d4d, (1U<<31) | 3740, 0x444d4d4d, (1U<<31) | 3738, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4d, (1U<<31) | 5043, 0x4c4c440, 0x4d4d440, 
+  0x4c4c440, 0x4d4d440, (1U<<31) | 4906, (1U<<31) | 5021, 0x4c4d440, (1U<<31) | 5040, 0x4c4d440, (1U<<31) | 5040, 
+  (1U<<31) | 4916, (1U<<31) | 5048, 0x4c4c440, 0x4d4d440, 0x4c4c440, 0x4d4d440, (1U<<31) | 4906, (1U<<31) | 5021, 
+  0x4c4d, (1U<<31) | 5043, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c4d, (1U<<31) | 4087, 0x4c4c4d, (1U<<31) | 5033, 
+  0x4c4c4d, (1U<<31) | 5033, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 
+  (1U<<31) | 4888, (1U<<31) | 5003, (1U<<31) | 4888, (1U<<31) | 5003, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 
+  (1U<<31) | 204, (1U<<31) | 232, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, (1U<<31) | 4888, (1U<<31) | 5003, 
+  (1U<<31) | 4888, (1U<<31) | 5003, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 0x4c4c4d, (1U<<31) | 5033, 
+  0x4c4c4d, (1U<<31) | 5033, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 0x4c4c4c, 0x4d4d4d, 
+  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, 0x4c4c4d, (1U<<31) | 5033, 0x4c4c4c, 0x4d4d4d, 
+  0x4d4d4d, (1U<<31) | 5194, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, (1U<<31) | 4888, (1U<<31) | 5003, 
+  (1U<<31) | 4888, (1U<<31) | 5003, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 5194, (1U<<31) | 4897, (1U<<31) | 5012, 
+  0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, 
+  0x44d4d, (1U<<31) | 4225, 0x44d4d4d, (1U<<31) | 4223, (1U<<31) | 4045, (1U<<31) | 4074, 0x4c4d, (1U<<31) | 5043, 
+  0x4c4d, (1U<<31) | 5043, 0x4c4d4d, (1U<<31) | 5058, 0x4c4d4d, (1U<<31) | 5058, 0x4c4d, (1U<<31) | 5043, 
+  0x4c4d, (1U<<31) | 5043, 0x4c4c4c, 0x4d4d4d, 0x4c4d, (1U<<31) | 5043, 0x4c4d, (1U<<31) | 5043, 
+  0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x42e0, 0x52e0, 0x442e2e2e, 0x442e2e2e, 
+  0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 0x4442e2e, 0x4452e2e, 0x4442e2e, 0x4442e2e, 
+  0x4442e2e, 0x2e0, 0x42e2e0, 0x442e0, 0x3939, 0x2a2a, 0x44, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x393939, 0x393939, 0x444, 0x393939, 0x393939, 
+  0x444, 0x444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x444, 0x393939, 
+  0x2a2a2a, 0x393939, 0x2a2a2a, 0x2a2a2a, 0x2a2a2a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x444, 0x2c2c2c, 0x42c2c, 
+  0x4444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x4444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 
+  0x43b3b, 0x44a4a, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 
+  0x43b3b3b, 0x44a4a4a, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 
+  0x43b3b3b, 0x44a4a4a, 0x44, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 
+  0x594, 0x3b4, 0x2c4, 0x4a4, 0x4, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 
+  0x594, 0x3b4, 0x2c4, 0x4a4, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x44, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 
+  0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 
+  0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x39390, 0x39390, 0x39390, 
+  0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a0, 0x2a2a0, 
+  0x2a2a0, 0x42c4, 0x4595, 0x43b4, 0x44a4, 0x42c4, 0x4595, 0x43b4, 
+  0x44a4, 0x440, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x4555, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 
+  0x3b3b4a, 0x393955, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 
+  0x393955, 0x4455, 0x393955, 0x393955, 0x2a2a55, 0x2a2a55, 0x393955, 0x393955, 
+  0x393955, 0x4455, 0x393955, 0x393955, 0x2a2a55, 0x2a2a55, 0x4a4a5959, 0x2c2c3b3b, 
+  0x3b3b4a4a, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x393955, 0x454, 0x454, 0x454, 
+  0x454, 0x454, 0x454, 0x898989, 0x7a7a7a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x8959, 0x7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898989, 0x7a7a7a, 0x7a7a6b, 
+  0x89897a, 0x598989, 0x4a7a7a, 0x7a89, 0x6b7a, 0x7a89, 0x6b7a, 0x5989, 
+  0x4a7a, 0x5989, 0x4a7a, 0x4a89, 0x3b7a, 0x4a89, 0x3b7a, 0x42c, 
+  0x559, 0x43b, 0x44a, 0x8989, 0x7a7a, (1U<<31) | 6224, 0x7a7a7a7a, 0x898989, 
+  0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, (1U<<31) | 6224, 
+  0x7a7a7a7a, 0x898989, 0x7a7a7a, 0x8989, 0x7a7a, 0x8989, 0x7a7a, 0x8989, 
+  0x7a7a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x8989, 0x7a7a, 0x898989, 
+  0x7a7a7a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x7a7a3b, 
+  0x89894a, 0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 
+  0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 
+  0x3b3b4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x442c2c, 0x545959, 0x443b3b, 0x444a4a, 0x444, 0x2c42c2c, 0x5945959, 
+  0x3b43b3b, 0x4a44a4a, 0x42e4, 0x42e2c, 0x42e59, 0x42e3b, 0x42e4a, 0x42c, 
+  0x459, 0x43b, 0x44a, 0x42e4, 0x4444, 0x42e4, 0x4455, 0x3b3b3b3b, 
+  0x4a4a4a4a, 0x3b3b3b3b, 0x4a4a4a4a, 0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 
+  0x393955, 0x393955, 0x393955, 0x393955, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
   0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
   0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x4444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 
-  0x44a4a, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 
-  0x44a4a4a, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 
-  0x44a4a4a, 0x44, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 0x594, 
-  0x3b4, 0x2c4, 0x4a4, 0x4, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 0x594, 
-  0x3b4, 0x2c4, 0x4a4, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 
-  0x45959, 0x43b3b, 0x44a4a, 0x44, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
   0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
   0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x39390, 0x39390, 0x39390, 0x2a2a4, 
-  0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a0, 0x2a2a0, 0x2a2a0, 
-  0x42c4, 0x4595, 0x43b4, 0x44a4, 0x42c4, 0x4595, 0x43b4, 0x44a4, 
-  0x440, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x4555, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 
-  0x393955, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x393955, 
-  0x4455, 0x393955, 0x393955, 0x2a2a55, 0x2a2a55, 0x393955, 0x393955, 0x393955, 
-  0x4455, 0x393955, 0x393955, 0x2a2a55, 0x2a2a55, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 
-  0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x393955, 0x454, 0x454, 0x454, 0x454, 
-  0x454, 0x454, 0x898989, 0x7a7a7a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x8959, 0x7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898989, 0x7a7a7a, 0x7a7a6b, 0x89897a, 
-  0x598989, 0x4a7a7a, 0x7a89, 0x6b7a, 0x7a89, 0x6b7a, 0x5989, 0x4a7a, 
-  0x5989, 0x4a7a, 0x4a89, 0x3b7a, 0x4a89, 0x3b7a, 0x42c, 0x559, 
-  0x43b, 0x44a, 0x8989, 0x7a7a, (1U<<31) | 5787, 0x7a7a7a7a, 0x898989, 0x7a7a7a, 
-  0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, (1U<<31) | 5787, 0x7a7a7a7a, 
-  0x898989, 0x7a7a7a, 0x8989, 0x7a7a, 0x8989, 0x7a7a, 0x8989, 0x7a7a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x8989, 0x7a7a, 0x898989, 0x7a7a7a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x7a7a3b, 0x89894a, 
-  0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 
-  0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 
-  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x442c2c, 0x545959, 0x443b3b, 0x444a4a, 0x444, 0x2c42c2c, 0x5945959, 0x3b43b3b, 
-  0x4a44a4a, 0x42e4, 0x42e2c, 0x42e59, 0x42e3b, 0x42e4a, 0x42c, 0x459, 
-  0x43b, 0x44a, 0x42e4, 0x4444, 0x42e4, 0x4455, 0x3b3b3b3b, 0x4a4a4a4a, 
-  0x3b3b3b3b, 0x4a4a4a4a, 0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x393955, 
-  0x393955, 0x393955, 0x393955, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 
-  0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x444, 0x2c2c, 0x4455, 0x3b3b3b3b, 
+  0x4a4a4a4a, 0x3b3b3b3b, 0x4a4a4a4a, 0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 
+  0x455, 0x393939, 0x3b3b3b, 0x4a4a4a, 0x393939, 0x39394, 0x39394, 0x392a39, 
+  0x392a39, 0x393939, 0x444, 0x393939, 0x444, 0x3b3b3b, 0x4a4a4a, 0x393955, 
+  0x393955, 0x445, 0x445, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c, 
+  0x5959, 0x3b3b, 0x4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 0x2c2c2c, 
+  0x42c2c, 0x2c2c2c, 0x42c2c, 0x393939, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 
+  0x393939, 0x2a2a2a, 0x394, 0x394, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 
+  0x2a39, 0x2a39, 0x2a39, 0x2a39, 0x39392a, 0x44439, 0x44439, 0x4439, 
+  0x39392a, 0x4439, 0x39392a, 0x4444, 0x2a4, 0x44, 0x439, 0x42a, 
+  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
+  0x42c2c, 0x43b3b, 0x44a4a, 0x455, 0x43939, 0x42a2a, 0x43939, 0x444, 
+  0x43939, 0x42a2a, 0x43939, 0x42a2a, 0x444, 0x43939, 0x42a2a, 0x42c2c2c, 
+  0x4595959, 0x43b3b3b, 0x44a4a4a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 0x44a4a4a, 0x2c2c2c, 
   0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 
-  0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x444, 0x2c2c, 0x4455, 0x3b3b3b3b, 0x4a4a4a4a, 
-  0x3b3b3b3b, 0x4a4a4a4a, 0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x455, 
-  0x393939, 0x3b3b3b, 0x4a4a4a, 0x393939, 0x39394, 0x39394, 0x392a39, 0x392a39, 
-  0x393939, 0x444, 0x393939, 0x444, 0x3b3b3b, 0x4a4a4a, 0x393955, 0x393955, 
-  0x445, 0x445, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c, 0x5959, 
-  0x3b3b, 0x4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 0x2c2c2c, 0x42c2c, 
-  0x2c2c2c, 0x42c2c, 0x393939, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 0x393939, 
-  0x2a2a2a, 0x394, 0x394, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 
-  0x2a39, 0x2a39, 0x2a39, 0x39392a, 0x44439, 0x44439, 0x4439, 0x39392a, 
-  0x4439, 0x39392a, 0x4444, 0x2a4, 0x44, 0x439, 0x42a, 0x42c2c, 
-  0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 
-  0x43b3b, 0x44a4a, 0x455, 0x43939, 0x42a2a, 0x43939, 0x444, 0x43939, 
-  0x42a2a, 0x43939, 0x42a2a, 0x444, 0x43939, 0x42a2a, 0x42c2c2c, 0x4595959, 
-  0x43b3b3b, 0x44a4a4a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 0x44a4a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 
-  0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42e2c0, 0x42e590, 
-  0x42e3b0, 0x42e4a0, 0x393939, 0x393939, 0x444, 0x393939, 0x393939, 0x444, 
-  0x444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x393939, 0x2a2a2a, 0x393939, 0x2a2a2a, 0x2a2a2a, 0x2a2a2a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c2c, 
-  0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x440, 0x2c2c2c, 0x42c2c, 0x888, 0x777, 
+  0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42e2c0, 
+  0x42e590, 0x42e3b0, 0x42e4a0, 0x393939, 0x393939, 0x444, 0x393939, 0x393939, 
+  0x444, 0x444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x393939, 0x2a2a2a, 0x393939, 0x2a2a2a, 0x2a2a2a, 0x2a2a2a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
+  0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x440, 0x2c2c2c, 0x42c2c, 0x888, 
+  0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 
+  0x888, 0x777, 0x777, 0x7fcf2f, 0x7fcf2f, 0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 
+  0x7fcf1f, 0x7f7fcf1f, 0x7f7fcf1f, 0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 
+  0x7fcf1f, 0x74f7, 0x84f8, 0x44f4, 0x44f4, 0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 
+  0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 0x7fcf1f, 0x40, 0x40, 0x440, 
+  0x40, 0x40, 0x440, 0x0, 0x44, 0x44, 0x44, 0x85, 
+  0x74, 0x47, 0x58, 0x88, 0x77, 0x77, 0x4f0, 0x4f0, 
+  0x77, 0x77, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+  0x87, 0x87, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+  0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 
+  0x85, 0x85, 0x85, 0x85, 0x777, 0x777, 0x888, 0x777, 
   0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 
-  0x777, 0x777, 0x2fcf2f, 0x2fcf2f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 
-  0x1f1fcf1f, 0x1f1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 
-  0x74f7, 0x84f8, 0x44f4, 0x44f4, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 
-  0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x40, 0x40, 0x440, 0x40, 
-  0x40, 0x440, 0x0, 0x44, 0x44, 0x44, 0x85, 0x74, 
-  0x47, 0x58, 0x88, 0x77, 0x77, 0x4f0, 0x4f0, 0x77, 
-  0x77, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
-  0x87, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x85, 
-  0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x85, 
-  0x85, 0x85, 0x85, 0x777, 0x777, 0x888, 0x777, 0x777, 
-  0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 
-  0x777, 0x88, 0x77, 0x77, 0x73, 0x73, 0x74, 0x74, 
-  0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 
-  0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 
-  0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 
-  0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x88, 0x77, 
-  0x77, 0x88, 0x77, 0x77, 0x8888, 0x7777, 0x7777, 0x8888, 
-  0x7777, 0x7777, 0x8888, 0x7777, 0x7777, 0x8888, 0x7777, 0x7777, 
-  0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x4444, 0x48, 
-  0x48, 0x48, 0x48, 0x47, 0x47, 0x47, 0x47, 0x2e1, 
-  0x2e1, 0x2e1, 0x2e1, 0x51, 0x51, 0x51, 0x4cf2f, 0x4cf1f, 
-  0x4cf4f, 0x4cf2f, 0x4cf1f, 0x4cf4f, 0x88, 0x77, 0x77, 0x58, 
-  0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 0x448, 
-  (1U<<31) | 3183, (1U<<31) | 4946, 0x444, 0x545, 0x0, 0x0, 0x0, 0x88, 
-  0x77, 0x33, 0x44, 0x55, 0xcf4f, 0x888, 0x777, 0x777, 
-  0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 
-  0x777, 0x444, 0x444, 0x444, 0x555, 0x444, 0x555, 0x4444, 
-  0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 
-  0xcf4f, 0x88, 0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 
-  0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 0x4, 0x5, 
+  0x777, 0x777, 0x88, 0x77, 0x77, 0x73, 0x73, 0x74, 
+  0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 
+  0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 
+  0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 
+  0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x88, 
+  0x77, 0x77, 0x88, 0x77, 0x77, 0x8888, 0x7777, 0x7777, 
+  0x8888, 0x7777, 0x7777, 0x8888, 0x7777, 0x7777, 0x8888, 0x7777, 
+  0x7777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x4444, 
+  0x48, 0x48, 0x48, 0x48, 0x47, 0x47, 0x47, 0x47, 
+  0x2e1, 0x2e1, 0x2e1, 0x2e1, 0x51, 0x51, 0x51, 0x4cf2f, 
+  0x4cf1f, 0x4cf4f, 0x4cf2f, 0x4cf1f, 0x4cf4f, 0x88, 0x77, 0x77, 
+  0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 
+  0x448, (1U<<31) | 3075, (1U<<31) | 5222, 0x444, 0x545, 0x0, 0x0, 0x0, 
+  0x88, 0x77, 0x33, 0x44, 0x55, 0xcf4f, 0x888, 0x777, 
+  0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 
+  0x777, 0x777, 0x444, 0x444, 0x444, 0x555, 0x444, 0x555, 
+  0x4444, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 
+  0xcf4f, 0xcf4f, 0x88, 0x88, 0x77, 0x77, 0x88, 0x77, 
+  0x77, 0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 0x4, 
+  0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
   0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
   0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
   0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
@@ -8176,874 +8448,942 @@
   0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
   0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
   0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4f4, 0x444, 0x455, 0x455, 0x88, 0x77, 0x77, 0x88, 
-  0x77, 0x77, 0x4444, 0x4444, 0x88, 0x77, 0x77, 0x4477, 
-  0x4444, 0x4477, 0x4444, 0x4477, 0x4444, 0x44747, 0x44444, 0x44747, 
-  0x44444, 0x44747, 0x44444, 0x44747, 0x44444, 0x4477, 0x4444, 0x77, 
-  0x77, 0x77, 0x77, 0x77, 0x88, 0x77, 0x77, 0x88, 
-  0x77, 0x77, 0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 
-  0x4453, 0x4453, 0x4453, 0x4454, 0x4454, 0x4454, 0x4455, 0x4455, 
-  0x4455, 0x4453, 0x4453, 0x4453, (1U<<31) | 3631, (1U<<31) | 3631, (1U<<31) | 3631, (1U<<31) | 3647, 
-  (1U<<31) | 3647, (1U<<31) | 3647, (1U<<31) | 3664, (1U<<31) | 3664, (1U<<31) | 3664, (1U<<31) | 3631, (1U<<31) | 3631, (1U<<31) | 3631, 
-  (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3638, (1U<<31) | 3638, (1U<<31) | 3638, (1U<<31) | 3622, (1U<<31) | 3622, 
-  (1U<<31) | 3622, 0x453, 0x453, 0x453, 0x454, 0x454, 0x454, 0x455, 
-  0x455, 0x455, 0x453, 0x453, 0x453, (1U<<31) | 4046, (1U<<31) | 4046, (1U<<31) | 4046, 
-  (1U<<31) | 4060, (1U<<31) | 4060, (1U<<31) | 4060, (1U<<31) | 4082, (1U<<31) | 4082, (1U<<31) | 4082, (1U<<31) | 4046, (1U<<31) | 4046, 
-  (1U<<31) | 4046, (1U<<31) | 4038, (1U<<31) | 4038, (1U<<31) | 4038, (1U<<31) | 4052, (1U<<31) | 4052, (1U<<31) | 4052, (1U<<31) | 4038, 
-  (1U<<31) | 4038, (1U<<31) | 4038, 0x44453, 0x44453, 0x44453, 0x44454, 0x44454, 0x44454, 
-  0x44455, 0x44455, 0x44455, 0x44453, 0x44453, 0x44453, (1U<<31) | 3375, (1U<<31) | 3375, 
-  (1U<<31) | 3375, (1U<<31) | 3393, (1U<<31) | 3393, (1U<<31) | 3393, (1U<<31) | 3412, (1U<<31) | 3412, (1U<<31) | 3412, (1U<<31) | 3375, 
-  (1U<<31) | 3375, (1U<<31) | 3375, (1U<<31) | 3365, (1U<<31) | 3365, (1U<<31) | 3365, (1U<<31) | 3383, (1U<<31) | 3383, (1U<<31) | 3383, 
-  (1U<<31) | 3365, (1U<<31) | 3365, (1U<<31) | 3365, 0x4453, 0x4453, 0x4453, 0x4454, 0x4454, 
-  0x4454, 0x4455, 0x4455, 0x4455, 0x4453, 0x4453, 0x4453, (1U<<31) | 3631, 
-  (1U<<31) | 3631, (1U<<31) | 3631, (1U<<31) | 3647, (1U<<31) | 3647, (1U<<31) | 3647, (1U<<31) | 3664, (1U<<31) | 3664, (1U<<31) | 3664, 
-  (1U<<31) | 3631, (1U<<31) | 3631, (1U<<31) | 3631, (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3638, (1U<<31) | 3638, 
-  (1U<<31) | 3638, (1U<<31) | 3622, (1U<<31) | 3622, (1U<<31) | 3622, 0x44453, 0x44453, 0x44453, 0x44454, 
-  0x44454, 0x44454, 0x44455, 0x44455, 0x44455, 0x44453, 0x44453, 0x44453, 
-  (1U<<31) | 3375, (1U<<31) | 3375, (1U<<31) | 3375, (1U<<31) | 3393, (1U<<31) | 3393, (1U<<31) | 3393, (1U<<31) | 3412, (1U<<31) | 3412, 
-  (1U<<31) | 3412, (1U<<31) | 3375, (1U<<31) | 3375, (1U<<31) | 3375, (1U<<31) | 3365, (1U<<31) | 3365, (1U<<31) | 3365, (1U<<31) | 3383, 
-  (1U<<31) | 3383, (1U<<31) | 3383, (1U<<31) | 3365, (1U<<31) | 3365, (1U<<31) | 3365, 0x54, 0x54, 0x54, 
-  0x54, 0x54, 0x54, 0x34450, 0x34450, 0x34450, 0x44450, 0x44450, 
-  0x44450, 0x54450, 0x54450, 0x54450, 0x34450, 0x34450, 0x34450, 0x334450, 
-  0x334450, 0x334450, 0x444450, 0x444450, 0x444450, 0x554450, 0x554450, 0x554450, 
-  0x334450, 0x334450, 0x334450, 0x33334450, 0x33334450, 0x33334450, 0x44444450, 0x44444450, 
-  0x44444450, 0x33334450, 0x33334450, 0x33334450, 0x3450, 0x3450, 0x3450, 0x4450, 
-  0x4450, 0x4450, 0x5450, 0x5450, 0x5450, 0x3450, 0x3450, 0x3450, 
-  0x33450, 0x33450, 0x33450, 0x44450, 0x44450, 0x44450, 0x55450, 0x55450, 
-  0x55450, 0x33450, 0x33450, 0x33450, 0x3333450, 0x3333450, 0x3333450, 0x4444450, 
-  0x4444450, 0x4444450, 0x3333450, 0x3333450, 0x3333450, 0x344450, 0x344450, 0x344450, 
-  0x444450, 0x444450, 0x444450, 0x544450, 0x544450, 0x544450, 0x344450, 0x344450, 
-  0x344450, 0x3344450, 0x3344450, 0x3344450, 0x4444450, 0x4444450, 0x4444450, 0x5544450, 
-  0x5544450, 0x5544450, 0x3344450, 0x3344450, 0x3344450, (1U<<31) | 805, (1U<<31) | 805, (1U<<31) | 805, 
-  (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 805, (1U<<31) | 805, (1U<<31) | 805, 0x34450, 0x34450, 
-  0x34450, 0x44450, 0x44450, 0x44450, 0x54450, 0x54450, 0x54450, 0x34450, 
-  0x34450, 0x34450, 0x334450, 0x334450, 0x334450, 0x444450, 0x444450, 0x444450, 
-  0x554450, 0x554450, 0x554450, 0x334450, 0x334450, 0x334450, 0x33334450, 0x33334450, 
-  0x33334450, 0x44444450, 0x44444450, 0x44444450, 0x33334450, 0x33334450, 0x33334450, 0x344450, 
-  0x344450, 0x344450, 0x444450, 0x444450, 0x444450, 0x544450, 0x544450, 0x544450, 
-  0x344450, 0x344450, 0x344450, 0x3344450, 0x3344450, 0x3344450, 0x4444450, 0x4444450, 
-  0x4444450, 0x5544450, 0x5544450, 0x5544450, 0x3344450, 0x3344450, 0x3344450, (1U<<31) | 805, 
-  (1U<<31) | 805, (1U<<31) | 805, (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 805, (1U<<31) | 805, (1U<<31) | 805, 
-  0x34450, 0x44450, 0x34450, 0x334450, 0x444450, 0x334450, 0x33334450, 0x44444450, 
-  0x33334450, 0x3450, 0x4450, 0x3450, 0x33450, 0x44450, 0x33450, 0x3333450, 
-  0x4444450, 0x3333450, 0x344450, 0x444450, 0x344450, 0x3344450, 0x4444450, 0x3344450, 
-  (1U<<31) | 805, (1U<<31) | 3302, (1U<<31) | 805, 0x34450, 0x44450, 0x34450, 0x334450, 0x444450, 
-  0x334450, 0x33334450, 0x44444450, 0x33334450, 0x344450, 0x444450, 0x344450, 0x3344450, 
-  0x4444450, 0x3344450, (1U<<31) | 805, (1U<<31) | 3302, (1U<<31) | 805, 0x55, (1U<<31) | 5305, (1U<<31) | 5293, 
-  (1U<<31) | 5293, (1U<<31) | 5217, (1U<<31) | 5206, (1U<<31) | 5206, (1U<<31) | 5138, (1U<<31) | 3671, (1U<<31) | 5128, (1U<<31) | 3654, 
-  (1U<<31) | 5128, (1U<<31) | 3654, (1U<<31) | 5349, (1U<<31) | 5338, (1U<<31) | 5338, (1U<<31) | 5263, (1U<<31) | 5253, (1U<<31) | 5253, 
-  (1U<<31) | 5179, (1U<<31) | 4088, (1U<<31) | 5170, (1U<<31) | 4066, (1U<<31) | 5170, (1U<<31) | 4066, (1U<<31) | 5495, (1U<<31) | 5480, 
-  (1U<<31) | 5480, (1U<<31) | 5305, (1U<<31) | 5293, (1U<<31) | 5293, (1U<<31) | 5217, (1U<<31) | 3420, (1U<<31) | 5206, (1U<<31) | 3401, 
-  (1U<<31) | 5206, (1U<<31) | 3401, (1U<<31) | 5551, (1U<<31) | 5537, (1U<<31) | 5537, (1U<<31) | 5349, (1U<<31) | 5338, (1U<<31) | 5338, 
-  (1U<<31) | 5263, (1U<<31) | 3671, (1U<<31) | 5253, (1U<<31) | 3654, (1U<<31) | 5253, (1U<<31) | 3654, (1U<<31) | 5723, (1U<<31) | 5706, 
-  (1U<<31) | 5706, (1U<<31) | 5443, (1U<<31) | 5431, (1U<<31) | 5431, (1U<<31) | 5349, (1U<<31) | 3420, (1U<<31) | 5338, (1U<<31) | 3401, 
-  (1U<<31) | 5338, (1U<<31) | 3401, (1U<<31) | 5395, (1U<<31) | 5382, (1U<<31) | 5382, (1U<<31) | 5305, (1U<<31) | 5293, (1U<<31) | 5293, 
-  (1U<<31) | 5443, (1U<<31) | 5431, (1U<<31) | 5431, (1U<<31) | 5349, (1U<<31) | 5338, (1U<<31) | 5338, (1U<<31) | 5317, (1U<<31) | 5282, 
-  (1U<<31) | 5282, (1U<<31) | 5228, (1U<<31) | 5196, (1U<<31) | 5196, (1U<<31) | 5148, (1U<<31) | 3681, (1U<<31) | 5119, (1U<<31) | 3638, 
-  (1U<<31) | 5119, (1U<<31) | 3638, (1U<<31) | 5360, (1U<<31) | 5328, (1U<<31) | 5328, (1U<<31) | 5273, (1U<<31) | 5244, (1U<<31) | 5244, 
-  (1U<<31) | 5188, (1U<<31) | 4097, (1U<<31) | 5162, (1U<<31) | 4052, (1U<<31) | 5162, (1U<<31) | 4052, (1U<<31) | 5510, (1U<<31) | 5466, 
-  (1U<<31) | 5466, (1U<<31) | 5317, (1U<<31) | 5282, (1U<<31) | 5282, (1U<<31) | 5228, (1U<<31) | 3431, (1U<<31) | 5196, (1U<<31) | 3383, 
-  (1U<<31) | 5196, (1U<<31) | 3383, (1U<<31) | 5565, (1U<<31) | 5524, (1U<<31) | 5524, (1U<<31) | 5360, (1U<<31) | 5328, (1U<<31) | 5328, 
-  (1U<<31) | 5273, (1U<<31) | 3681, (1U<<31) | 5244, (1U<<31) | 3638, (1U<<31) | 5244, (1U<<31) | 3638, (1U<<31) | 5740, (1U<<31) | 5690, 
-  (1U<<31) | 5690, (1U<<31) | 5455, (1U<<31) | 5420, (1U<<31) | 5420, (1U<<31) | 5360, (1U<<31) | 3431, (1U<<31) | 5328, (1U<<31) | 3383, 
-  (1U<<31) | 5328, (1U<<31) | 3383, (1U<<31) | 5408, (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5317, (1U<<31) | 5282, (1U<<31) | 5282, 
-  (1U<<31) | 5455, (1U<<31) | 5420, (1U<<31) | 5420, (1U<<31) | 5360, (1U<<31) | 5328, (1U<<31) | 5328, (1U<<31) | 4890, 0x4f5, 
-  (1U<<31) | 5263, (1U<<31) | 5253, (1U<<31) | 5253, (1U<<31) | 5263, (1U<<31) | 5253, (1U<<31) | 5253, (1U<<31) | 5263, (1U<<31) | 5253, 
-  (1U<<31) | 5253, (1U<<31) | 5263, (1U<<31) | 5253, (1U<<31) | 5253, (1U<<31) | 5273, (1U<<31) | 5244, (1U<<31) | 5244, (1U<<31) | 5273, 
-  (1U<<31) | 5244, (1U<<31) | 5244, (1U<<31) | 5273, (1U<<31) | 5244, (1U<<31) | 5244, (1U<<31) | 5273, (1U<<31) | 5244, (1U<<31) | 5244, 
-  0x88, 0x77, 0x77, 0x54, 0x54, 0x54, 0x54, 0x54, 
-  0x54, 0x54, 0x54, 0x48, 0x48, 0x48, 0x48, 0x47, 
-  0x47, 0x47, 0x47, 0x58, 0x58, 0x58, 0x58, 0x57, 
-  0x57, 0x57, 0x57, 0x11, 0x141, 0x11, 0x141, 0x14, 
-  0x144, 0x11, 0x141, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4846, 
-  (1U<<31) | 3960, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4866, (1U<<31) | 4878, (1U<<31) | 3981, (1U<<31) | 3994, (1U<<31) | 4866, 
-  (1U<<31) | 4878, (1U<<31) | 3981, (1U<<31) | 3994, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5007, (1U<<31) | 5578, (1U<<31) | 4265, (1U<<31) | 4278, (1U<<31) | 5007, 
-  (1U<<31) | 5578, (1U<<31) | 4265, (1U<<31) | 4278, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4846, 
-  (1U<<31) | 3960, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4866, (1U<<31) | 4878, (1U<<31) | 3981, (1U<<31) | 3994, (1U<<31) | 4866, 
-  (1U<<31) | 4878, (1U<<31) | 3981, (1U<<31) | 3994, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5007, (1U<<31) | 5578, (1U<<31) | 4265, (1U<<31) | 4278, (1U<<31) | 5007, 
-  (1U<<31) | 5578, (1U<<31) | 4265, (1U<<31) | 4278, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4846, 
-  (1U<<31) | 3960, (1U<<31) | 4846, (1U<<31) | 3960, (1U<<31) | 4866, (1U<<31) | 4878, (1U<<31) | 3981, (1U<<31) | 3994, (1U<<31) | 4866, 
-  (1U<<31) | 4878, (1U<<31) | 3981, (1U<<31) | 3994, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5019, (1U<<31) | 5019, (1U<<31) | 5590, (1U<<31) | 5590, (1U<<31) | 5069, 
-  (1U<<31) | 5069, (1U<<31) | 5640, (1U<<31) | 5640, (1U<<31) | 5007, (1U<<31) | 5578, (1U<<31) | 4265, (1U<<31) | 4278, (1U<<31) | 5007, 
-  (1U<<31) | 5578, (1U<<31) | 4265, (1U<<31) | 4278, (1U<<31) | 6137, 0x595959, 0x595959, 0x595959, 0x595959, 
-  0x2c2c2c2c, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x5959, 0x445959, 0x444a4a, 
-  0x40, 0x0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x2e2c, 0x2e3b, 
-  0x2e4a, 0x2e2c, 0x2e2c, 0x2e4a, 0x2e4a, 0x3b, 0x4a0, 0x2e2c0, 
-  0x2e3b0, 0x2e4a0, 0x2e4a0, 0x2e4a0, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, (1U<<31) | 6123, 
-  0x4a4a4a, (1U<<31) | 6121, (1U<<31) | 6121, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c59, 
-  0x44a7a, 0x44a7a, 0x2c4, 0x7a7a4a, 0x7a7a44, 0x7a7a4a, 0x7a7a44, 0x2c2c2c, 
-  0x2c2c44, 0x595959, 0x595944, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x7a7a4a, 
-  0x7a7a44, 0x7a7a4a, 0x7a7a44, 0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 0x3b3b3b, 
-  0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 0x3b3b3b, 
+  0x4, 0x4f4, 0x444, 0x455, 0x455, 0x88, 0x77, 0x77, 
+  0x88, 0x77, 0x77, 0x4444, 0x4444, 0x88, 0x77, 0x77, 
+  0x4477, 0x4444, 0x4477, 0x4444, 0x4477, 0x4444, 0x44747, 0x44444, 
+  0x44747, 0x44444, 0x44747, 0x44444, 0x44747, 0x44444, 0x4477, 0x4444, 
+  0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x77, 0x77, 
+  0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 0x88, 0x77, 
+  0x77, 0x4453, 0x4453, 0x4453, 0x4454, 0x4454, 0x4454, 0x4455, 
+  0x4455, 0x4455, 0x4453, 0x4453, 0x4453, (1U<<31) | 3756, (1U<<31) | 3756, (1U<<31) | 3756, 
+  (1U<<31) | 3772, (1U<<31) | 3772, (1U<<31) | 3772, (1U<<31) | 3789, (1U<<31) | 3789, (1U<<31) | 3789, (1U<<31) | 3756, (1U<<31) | 3756, 
+  (1U<<31) | 3756, (1U<<31) | 3747, (1U<<31) | 3747, (1U<<31) | 3747, (1U<<31) | 3763, (1U<<31) | 3763, (1U<<31) | 3763, (1U<<31) | 3747, 
+  (1U<<31) | 3747, (1U<<31) | 3747, 0x453, 0x453, 0x453, 0x454, 0x454, 0x454, 
+  0x455, 0x455, 0x455, 0x453, 0x453, 0x453, (1U<<31) | 4254, (1U<<31) | 4254, 
+  (1U<<31) | 4254, (1U<<31) | 4268, (1U<<31) | 4268, (1U<<31) | 4268, (1U<<31) | 4290, (1U<<31) | 4290, (1U<<31) | 4290, (1U<<31) | 4254, 
+  (1U<<31) | 4254, (1U<<31) | 4254, (1U<<31) | 4246, (1U<<31) | 4246, (1U<<31) | 4246, (1U<<31) | 4260, (1U<<31) | 4260, (1U<<31) | 4260, 
+  (1U<<31) | 4246, (1U<<31) | 4246, (1U<<31) | 4246, 0x44453, 0x44453, 0x44453, 0x44454, 0x44454, 
+  0x44454, 0x44455, 0x44455, 0x44455, 0x44453, 0x44453, 0x44453, (1U<<31) | 3376, 
+  (1U<<31) | 3376, (1U<<31) | 3376, (1U<<31) | 3394, (1U<<31) | 3394, (1U<<31) | 3394, (1U<<31) | 3413, (1U<<31) | 3413, (1U<<31) | 3413, 
+  (1U<<31) | 3376, (1U<<31) | 3376, (1U<<31) | 3376, (1U<<31) | 3366, (1U<<31) | 3366, (1U<<31) | 3366, (1U<<31) | 3384, (1U<<31) | 3384, 
+  (1U<<31) | 3384, (1U<<31) | 3366, (1U<<31) | 3366, (1U<<31) | 3366, 0x4453, 0x4453, 0x4453, 0x4454, 
+  0x4454, 0x4454, 0x4455, 0x4455, 0x4455, 0x4453, 0x4453, 0x4453, 
+  (1U<<31) | 3756, (1U<<31) | 3756, (1U<<31) | 3756, (1U<<31) | 3772, (1U<<31) | 3772, (1U<<31) | 3772, (1U<<31) | 3789, (1U<<31) | 3789, 
+  (1U<<31) | 3789, (1U<<31) | 3756, (1U<<31) | 3756, (1U<<31) | 3756, (1U<<31) | 3747, (1U<<31) | 3747, (1U<<31) | 3747, (1U<<31) | 3763, 
+  (1U<<31) | 3763, (1U<<31) | 3763, (1U<<31) | 3747, (1U<<31) | 3747, (1U<<31) | 3747, 0x44453, 0x44453, 0x44453, 
+  0x44454, 0x44454, 0x44454, 0x44455, 0x44455, 0x44455, 0x44453, 0x44453, 
+  0x44453, (1U<<31) | 3376, (1U<<31) | 3376, (1U<<31) | 3376, (1U<<31) | 3394, (1U<<31) | 3394, (1U<<31) | 3394, (1U<<31) | 3413, 
+  (1U<<31) | 3413, (1U<<31) | 3413, (1U<<31) | 3376, (1U<<31) | 3376, (1U<<31) | 3376, (1U<<31) | 3366, (1U<<31) | 3366, (1U<<31) | 3366, 
+  (1U<<31) | 3384, (1U<<31) | 3384, (1U<<31) | 3384, (1U<<31) | 3366, (1U<<31) | 3366, (1U<<31) | 3366, 0x54, 0x54, 
+  0x54, 0x54, 0x54, 0x54, 0x34450, 0x34450, 0x34450, 0x44450, 
+  0x44450, 0x44450, 0x54450, 0x54450, 0x54450, 0x34450, 0x34450, 0x34450, 
+  0x334450, 0x334450, 0x334450, 0x444450, 0x444450, 0x444450, 0x554450, 0x554450, 
+  0x554450, 0x334450, 0x334450, 0x334450, 0x33334450, 0x33334450, 0x33334450, 0x44444450, 
+  0x44444450, 0x44444450, 0x33334450, 0x33334450, 0x33334450, 0x3450, 0x3450, 0x3450, 
+  0x4450, 0x4450, 0x4450, 0x5450, 0x5450, 0x5450, 0x3450, 0x3450, 
+  0x3450, 0x33450, 0x33450, 0x33450, 0x44450, 0x44450, 0x44450, 0x55450, 
+  0x55450, 0x55450, 0x33450, 0x33450, 0x33450, 0x3333450, 0x3333450, 0x3333450, 
+  0x4444450, 0x4444450, 0x4444450, 0x3333450, 0x3333450, 0x3333450, 0x344450, 0x344450, 
+  0x344450, 0x444450, 0x444450, 0x444450, 0x544450, 0x544450, 0x544450, 0x344450, 
+  0x344450, 0x344450, 0x3344450, 0x3344450, 0x3344450, 0x4444450, 0x4444450, 0x4444450, 
+  0x5544450, 0x5544450, 0x5544450, 0x3344450, 0x3344450, 0x3344450, (1U<<31) | 800, (1U<<31) | 800, 
+  (1U<<31) | 800, (1U<<31) | 3210, (1U<<31) | 3210, (1U<<31) | 3210, (1U<<31) | 800, (1U<<31) | 800, (1U<<31) | 800, 0x34450, 
+  0x34450, 0x34450, 0x44450, 0x44450, 0x44450, 0x54450, 0x54450, 0x54450, 
+  0x34450, 0x34450, 0x34450, 0x334450, 0x334450, 0x334450, 0x444450, 0x444450, 
+  0x444450, 0x554450, 0x554450, 0x554450, 0x334450, 0x334450, 0x334450, 0x33334450, 
+  0x33334450, 0x33334450, 0x44444450, 0x44444450, 0x44444450, 0x33334450, 0x33334450, 0x33334450, 
+  0x344450, 0x344450, 0x344450, 0x444450, 0x444450, 0x444450, 0x544450, 0x544450, 
+  0x544450, 0x344450, 0x344450, 0x344450, 0x3344450, 0x3344450, 0x3344450, 0x4444450, 
+  0x4444450, 0x4444450, 0x5544450, 0x5544450, 0x5544450, 0x3344450, 0x3344450, 0x3344450, 
+  (1U<<31) | 800, (1U<<31) | 800, (1U<<31) | 800, (1U<<31) | 3210, (1U<<31) | 3210, (1U<<31) | 3210, (1U<<31) | 800, (1U<<31) | 800, 
+  (1U<<31) | 800, 0x34450, 0x44450, 0x34450, 0x334450, 0x444450, 0x334450, 0x33334450, 
+  0x44444450, 0x33334450, 0x3450, 0x4450, 0x3450, 0x33450, 0x44450, 0x33450, 
+  0x3333450, 0x4444450, 0x3333450, 0x344450, 0x444450, 0x344450, 0x3344450, 0x4444450, 
+  0x3344450, (1U<<31) | 800, (1U<<31) | 3210, (1U<<31) | 800, 0x34450, 0x44450, 0x34450, 0x334450, 
+  0x444450, 0x334450, 0x33334450, 0x44444450, 0x33334450, 0x344450, 0x444450, 0x344450, 
+  0x3344450, 0x4444450, 0x3344450, (1U<<31) | 800, (1U<<31) | 3210, (1U<<31) | 800, 0x55, (1U<<31) | 5606, 
+  (1U<<31) | 5594, (1U<<31) | 5594, (1U<<31) | 5518, (1U<<31) | 5507, (1U<<31) | 5507, (1U<<31) | 5439, (1U<<31) | 3796, (1U<<31) | 5429, 
+  (1U<<31) | 3779, (1U<<31) | 5429, (1U<<31) | 3779, (1U<<31) | 5650, (1U<<31) | 5639, (1U<<31) | 5639, (1U<<31) | 5564, (1U<<31) | 5554, 
+  (1U<<31) | 5554, (1U<<31) | 5480, (1U<<31) | 4296, (1U<<31) | 5471, (1U<<31) | 4274, (1U<<31) | 5471, (1U<<31) | 4274, (1U<<31) | 5796, 
+  (1U<<31) | 5781, (1U<<31) | 5781, (1U<<31) | 5606, (1U<<31) | 5594, (1U<<31) | 5594, (1U<<31) | 5518, (1U<<31) | 3421, (1U<<31) | 5507, 
+  (1U<<31) | 3402, (1U<<31) | 5507, (1U<<31) | 3402, (1U<<31) | 5852, (1U<<31) | 5838, (1U<<31) | 5838, (1U<<31) | 5650, (1U<<31) | 5639, 
+  (1U<<31) | 5639, (1U<<31) | 5564, (1U<<31) | 3796, (1U<<31) | 5554, (1U<<31) | 3779, (1U<<31) | 5554, (1U<<31) | 3779, (1U<<31) | 6024, 
+  (1U<<31) | 6007, (1U<<31) | 6007, (1U<<31) | 5744, (1U<<31) | 5732, (1U<<31) | 5732, (1U<<31) | 5650, (1U<<31) | 3421, (1U<<31) | 5639, 
+  (1U<<31) | 3402, (1U<<31) | 5639, (1U<<31) | 3402, (1U<<31) | 5696, (1U<<31) | 5683, (1U<<31) | 5683, (1U<<31) | 5606, (1U<<31) | 5594, 
+  (1U<<31) | 5594, (1U<<31) | 5744, (1U<<31) | 5732, (1U<<31) | 5732, (1U<<31) | 5650, (1U<<31) | 5639, (1U<<31) | 5639, (1U<<31) | 5618, 
+  (1U<<31) | 5583, (1U<<31) | 5583, (1U<<31) | 5529, (1U<<31) | 5497, (1U<<31) | 5497, (1U<<31) | 5449, (1U<<31) | 3806, (1U<<31) | 5420, 
+  (1U<<31) | 3763, (1U<<31) | 5420, (1U<<31) | 3763, (1U<<31) | 5661, (1U<<31) | 5629, (1U<<31) | 5629, (1U<<31) | 5574, (1U<<31) | 5545, 
+  (1U<<31) | 5545, (1U<<31) | 5489, (1U<<31) | 4305, (1U<<31) | 5463, (1U<<31) | 4260, (1U<<31) | 5463, (1U<<31) | 4260, (1U<<31) | 5811, 
+  (1U<<31) | 5767, (1U<<31) | 5767, (1U<<31) | 5618, (1U<<31) | 5583, (1U<<31) | 5583, (1U<<31) | 5529, (1U<<31) | 3432, (1U<<31) | 5497, 
+  (1U<<31) | 3384, (1U<<31) | 5497, (1U<<31) | 3384, (1U<<31) | 5866, (1U<<31) | 5825, (1U<<31) | 5825, (1U<<31) | 5661, (1U<<31) | 5629, 
+  (1U<<31) | 5629, (1U<<31) | 5574, (1U<<31) | 3806, (1U<<31) | 5545, (1U<<31) | 3763, (1U<<31) | 5545, (1U<<31) | 3763, (1U<<31) | 6041, 
+  (1U<<31) | 5991, (1U<<31) | 5991, (1U<<31) | 5756, (1U<<31) | 5721, (1U<<31) | 5721, (1U<<31) | 5661, (1U<<31) | 3432, (1U<<31) | 5629, 
+  (1U<<31) | 3384, (1U<<31) | 5629, (1U<<31) | 3384, (1U<<31) | 5709, (1U<<31) | 5671, (1U<<31) | 5671, (1U<<31) | 5618, (1U<<31) | 5583, 
+  (1U<<31) | 5583, (1U<<31) | 5756, (1U<<31) | 5721, (1U<<31) | 5721, (1U<<31) | 5661, (1U<<31) | 5629, (1U<<31) | 5629, (1U<<31) | 5166, 
+  0x4f5, (1U<<31) | 5564, (1U<<31) | 5554, (1U<<31) | 5554, (1U<<31) | 5564, (1U<<31) | 5554, (1U<<31) | 5554, (1U<<31) | 5564, 
+  (1U<<31) | 5554, (1U<<31) | 5554, (1U<<31) | 5564, (1U<<31) | 5554, (1U<<31) | 5554, (1U<<31) | 5574, (1U<<31) | 5545, (1U<<31) | 5545, 
+  (1U<<31) | 5574, (1U<<31) | 5545, (1U<<31) | 5545, (1U<<31) | 5574, (1U<<31) | 5545, (1U<<31) | 5545, (1U<<31) | 5574, (1U<<31) | 5545, 
+  (1U<<31) | 5545, 0x88, 0x77, 0x77, 0x54, 0x54, 0x54, 0x54, 
+  0x54, 0x54, 0x54, 0x54, 0x48, 0x48, 0x48, 0x48, 
+  0x47, 0x47, 0x47, 0x47, 0x58, 0x58, 0x58, 0x58, 
+  0x57, 0x57, 0x57, 0x57, 0x11, 0x141, 0x11, 0x141, 
+  0x14, 0x144, 0x11, 0x141, (1U<<31) | 5098, (1U<<31) | 5085, (1U<<31) | 4132, (1U<<31) | 4125, 
+  (1U<<31) | 4125, (1U<<31) | 5085, (1U<<31) | 5098, (1U<<31) | 5085, (1U<<31) | 4132, (1U<<31) | 4125, (1U<<31) | 4125, (1U<<31) | 5085, 
+  (1U<<31) | 5098, (1U<<31) | 5085, (1U<<31) | 4132, (1U<<31) | 4125, (1U<<31) | 4125, (1U<<31) | 5085, (1U<<31) | 5098, (1U<<31) | 5085, 
+  (1U<<31) | 4132, (1U<<31) | 4125, (1U<<31) | 4125, (1U<<31) | 5085, (1U<<31) | 5118, (1U<<31) | 5130, (1U<<31) | 5065, (1U<<31) | 4153, 
+  (1U<<31) | 4166, (1U<<31) | 4103, (1U<<31) | 5118, (1U<<31) | 5130, (1U<<31) | 5065, (1U<<31) | 4153, (1U<<31) | 4166, (1U<<31) | 4103, 
+  (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, 
+  (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, 
+  (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, 
+  (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, 
+  (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, 
+  (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, (1U<<31) | 3135, 
+  (1U<<31) | 5308, (1U<<31) | 5879, (1U<<31) | 3198, (1U<<31) | 4473, (1U<<31) | 4486, (1U<<31) | 3171, (1U<<31) | 5308, (1U<<31) | 5879, 
+  (1U<<31) | 3198, (1U<<31) | 4473, (1U<<31) | 4486, (1U<<31) | 3171, (1U<<31) | 5098, (1U<<31) | 5077, (1U<<31) | 4132, (1U<<31) | 4116, 
+  (1U<<31) | 4116, (1U<<31) | 5077, (1U<<31) | 5098, (1U<<31) | 5077, (1U<<31) | 4132, (1U<<31) | 4116, (1U<<31) | 4116, (1U<<31) | 5077, 
+  (1U<<31) | 5098, 0x4f4, (1U<<31) | 4132, 0x44f4, 0x44f4, 0x4f4, (1U<<31) | 5098, 0x4f4, 
+  (1U<<31) | 4132, 0x44f4, 0x44f4, 0x4f4, (1U<<31) | 5118, (1U<<31) | 5130, (1U<<31) | 5065, (1U<<31) | 4153, 
+  (1U<<31) | 4166, (1U<<31) | 4103, (1U<<31) | 5118, (1U<<31) | 5130, (1U<<31) | 5065, (1U<<31) | 4153, (1U<<31) | 4166, (1U<<31) | 4103, 
+  (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, 
+  (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, 
+  (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, 
+  (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, 
+  (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, 
+  (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, 
+  (1U<<31) | 5308, (1U<<31) | 5879, (1U<<31) | 3198, (1U<<31) | 4473, (1U<<31) | 4486, (1U<<31) | 3171, (1U<<31) | 5308, (1U<<31) | 5879, 
+  (1U<<31) | 3198, (1U<<31) | 4473, (1U<<31) | 4486, (1U<<31) | 3171, (1U<<31) | 5098, 0x4f4, (1U<<31) | 4132, 0x44f4, 
+  0x44f4, 0x4f4, (1U<<31) | 5098, 0x4f4, (1U<<31) | 4132, 0x44f4, 0x44f4, 0x4f4, 
+  (1U<<31) | 5098, (1U<<31) | 5077, (1U<<31) | 4132, (1U<<31) | 4116, (1U<<31) | 4116, (1U<<31) | 5077, (1U<<31) | 5098, (1U<<31) | 5077, 
+  (1U<<31) | 4132, (1U<<31) | 4116, (1U<<31) | 4116, (1U<<31) | 5077, (1U<<31) | 5118, (1U<<31) | 5130, (1U<<31) | 5065, (1U<<31) | 4153, 
+  (1U<<31) | 4166, (1U<<31) | 4103, (1U<<31) | 5118, (1U<<31) | 5130, (1U<<31) | 5065, (1U<<31) | 4153, (1U<<31) | 4166, (1U<<31) | 4103, 
+  (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, 
+  (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, 
+  (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, 
+  (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, 
+  (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 5320, (1U<<31) | 5320, (1U<<31) | 5891, (1U<<31) | 5891, 
+  (1U<<31) | 5370, (1U<<31) | 5370, (1U<<31) | 5941, (1U<<31) | 5941, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, (1U<<31) | 3112, 
+  (1U<<31) | 5308, (1U<<31) | 5879, (1U<<31) | 3198, (1U<<31) | 4473, (1U<<31) | 4486, (1U<<31) | 3171, (1U<<31) | 5308, (1U<<31) | 5879, 
+  (1U<<31) | 3198, (1U<<31) | 4473, (1U<<31) | 4486, (1U<<31) | 3171, 0x4f4, 0x44f4, 0x4f4, 0x44f4, 
+  (1U<<31) | 5085, (1U<<31) | 4125, (1U<<31) | 5085, (1U<<31) | 4125, (1U<<31) | 3231, 0x444f0, 0x4444f0, 0x444f0, 
+  0x4444f0, 0x4f4, 0x44f4, 0x44f4, 0x4f4, 0x4f4, 0x44f4, 0x44f4, 
+  0x4f4, (1U<<31) | 5085, (1U<<31) | 4125, (1U<<31) | 5085, (1U<<31) | 4125, (1U<<31) | 3231, (1U<<31) | 3231, (1U<<31) | 3231, 
+  (1U<<31) | 3231, 0x444f0, 0x4444f0, 0x444f0, 0x4444f0, (1U<<31) | 6640, 0x595959, 0x595959, 
+  0x595959, 0x595959, 0x2c2c2c2c, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x5959, 
+  0x445959, 0x444a4a, 0x40, 0x0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 
+  0x2e2c, 0x2e3b, 0x2e4a, 0x2e2c, 0x2e2c, 0x2e4a, 0x2e4a, 0x3b, 
+  0x4a0, 0x2e2c0, 0x2e3b0, 0x2e4a0, 0x2e4a0, 0x2e4a0, 0x2c2c2c, 0x3b3b3b, 
+  0x4a4a4a, (1U<<31) | 6626, 0x4a4a4a, (1U<<31) | 6624, (1U<<31) | 6624, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c59, 0x44a7a, 0x44a7a, 0x2c4, 0x7a7a4a, 0x7a7a44, 0x7a7a4a, 
+  0x7a7a44, 0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 
+  0x4a4a44, 0x7a7a4a, 0x7a7a44, 0x7a7a4a, 0x7a7a44, 0x2c2c2c, 0x2c2c44, 0x595959, 
+  0x595944, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x595959, 
+  0x595944, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x3b3b3b, 
   0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 
-  0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x47a4a, 
-  0x47a4a, 0x2c4, 0x7a7a, 0x2c2c, 0x7a7a, 0x7a7a7a7a, 0x7a7a7a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x3b3b3b3b, 
-  0x3b3b3b3b, 0x7a7a7a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x3b3b3b3b, 0x4a2c2c4a, 0x4a3b3b4a, 0x4a3b3b4a, 0x4a2c2c4a, 0x4a3b3b4a, 
-  0x4a3b3b4a, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 
-  0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x7a7a7a7a, 0x2c4a4a4a, 0x4a4a3b, 
-  0x59594a, 0x59594a, 0x3b3b2c, 0x3b3b2c, 0x4a4a3b, 0x4a4a3b, 0x59594a, 0x3b3b2c, 
-  0x4a4a3b, 0x5959, (1U<<31) | 6125, 0x4a4a, 0x7a7a, 0x7a7a, 0x7a7a, 0x7a7a, 
-  0x7a7a, 0x2c2c2c, 0x595959, 0x59595959, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x4a4a4a4a, 
-  0x4a4a4a, 0x7a7a, 0x4a4a4a4a, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
-  0x4a4a4a, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 
-  0x2c2c2c, 0x4a4a4a, (1U<<31) | 6123, 0x4a4a4a, (1U<<31) | 6121, (1U<<31) | 6121, 0x2c2c2c, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x4a4a4a, 0x4a2c4a, 0x4a3b4a, 0x4a2c4a, 
-  0x4a4a4a, 0x3b4a, 0x2c3b, 0x3b4a, 0x4a59, 0x3b4a, 0x2c3b, 0x3b4a, 
-  0x4a59, 0x555, 0x1f0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 
-  0x2e0, 0x2e0, 0x2e0, 0x555, 0x555, (1U<<31) | 6137, 0x444, 0x444, 
-  (1U<<31) | 6136, 0x5, 0x5, 0x5, 0x5, 0x1, 0x0, 0x1f0, 
-  (1U<<31) | 6137, 0x8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
-  0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
-  0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x48a8a8a, (1U<<31) | 5809, (1U<<31) | 5809, (1U<<31) | 5809, 
-  (1U<<31) | 5809, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 5809, (1U<<31) | 5809, (1U<<31) | 5809, 
-  (1U<<31) | 5809, (1U<<31) | 5809, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
-  0x8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 5809, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, (1U<<31) | 5809, 
-  (1U<<31) | 5809, 0x8a8a8a, 0x8a8a8a, (1U<<31) | 5809, (1U<<31) | 5809, (1U<<31) | 5809, (1U<<31) | 5809, (1U<<31) | 5809, 
-  (1U<<31) | 5809, 0x48a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 
+  0x4a4a44, 0x47a4a, 0x47a4a, 0x2c4, 0x7a7a, 0x2c2c, 0x7a7a, 0x7a7a7a7a, 
+  0x7a7a7a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x3b3b3b3b, 0x3b3b3b3b, 0x7a7a7a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x3b3b3b3b, 0x4a2c2c4a, 0x4a3b3b4a, 0x4a3b3b4a, 
+  0x4a2c2c4a, 0x4a3b3b4a, 0x4a3b3b4a, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 
+  0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x7a7a7a7a, 
+  0x2c4a4a4a, 0x4a4a3b, 0x59594a, 0x59594a, 0x3b3b2c, 0x3b3b2c, 0x4a4a3b, 0x4a4a3b, 
+  0x59594a, 0x3b3b2c, 0x4a4a3b, 0x5959, (1U<<31) | 6628, 0x4a4a, 0x7a7a, 0x7a7a, 
+  0x7a7a, 0x7a7a, 0x7a7a, 0x2c2c2c, 0x595959, 0x59595959, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x7a7a, 0x4a4a4a4a, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x4a4a4a, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
+  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x4a4a4a, (1U<<31) | 6626, 0x4a4a4a, (1U<<31) | 6624, (1U<<31) | 6624, 
+  0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x4a4a4a, 0x4a2c4a, 
+  0x4a3b4a, 0x4a2c4a, 0x4a4a4a, 0x3b4a, 0x2c3b, 0x3b4a, 0x4a59, 0x3b4a, 
+  0x2c3b, 0x3b4a, 0x4a59, 0x555, 0x1f0, 0x2e0, 0x2e0, 0x2e0, 
+  0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x555, 0x555, (1U<<31) | 6640, 
+  0x444, 0x444, (1U<<31) | 6639, 0x5, 0x5, 0x5, 0x5, 0x1, 
+  0x0, 0x1f0, (1U<<31) | 6640, 0x8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 
+  0x8a8a, 0x8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 
+  0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x48a8a8a, (1U<<31) | 6246, 
+  (1U<<31) | 6246, (1U<<31) | 6246, (1U<<31) | 6246, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 6246, 
+  (1U<<31) | 6246, (1U<<31) | 6246, (1U<<31) | 6246, (1U<<31) | 6246, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
+  0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 6246, 0x8a8a8a, 0x8a8a8a, 
+  0x8a8a8a, (1U<<31) | 6246, (1U<<31) | 6246, 0x8a8a8a, 0x8a8a8a, (1U<<31) | 6246, (1U<<31) | 6246, (1U<<31) | 6246, 
+  (1U<<31) | 6246, (1U<<31) | 6246, (1U<<31) | 6246, 0x48a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 
   0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 
-  0x2e8a, 0x2e8a, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 
-  0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, (1U<<31) | 6130, (1U<<31) | 5003, 0x50, 0x50, 
-  0x50, 0x50, (1U<<31) | 6138, (1U<<31) | 6137, 0x0, 0x44, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x44, 0x4, 0x44, 0x4, 0x4, 0x44, 
-  0x4, (1U<<31) | 6133, 0x44, 0x4, 0x5, 0x2e89, 0x2e89, 0x52e4a, 
-  0x52e4a, 0x2e4a, 0x2e4a, 0x2e890, 0x2e890, 0x52e4a0, 0x52e4a0, 0x2e4a0, 
-  0x2e4a0, 0x888, 0x888, 0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 0x898959, 
-  0x898944, 0x7a7a4a, 0x7a7a44, 0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 0x897a, 
-  0x894a, 0x894a, 0x3b7a, 0x7a89, 0x7a7a, 0x597a, 0x4a89, 0x597a, 
-  0x4a89, 0x898989, 0x7a7a7a, 0x595989, 0x4a4a7a, 0x898989, 0x7a7a7a, 0x898989, 
-  0x7a7a7a, 0x8989, 0x8989, 0x7a7a, 0x7a7a, 0x8989, 0x7a7a, 0x48959, 
-  0x47a4a, 0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x45959, 0x4594a4a, 0x4a4a4a, 
-  0x7a7a, (1U<<31) | 3288, (1U<<31) | 3288, 0x7a7a7, 0x0, (1U<<31) | 550, 0x70, 0x44a4a0, 
+  0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 
+  0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, (1U<<31) | 6633, (1U<<31) | 5304, 
+  0x50, 0x50, 0x50, 0x50, 0x48, (1U<<31) | 6641, (1U<<31) | 6640, 0x0, 
+  0x44, 0x4444, 0x4444, 0x4444, 0x4444, 0x44, 0x4, 0x44, 
+  0x4, 0x4, 0x44, 0x4, (1U<<31) | 6636, 0x44, 0x4, 0x5, 
+  0x2e89, 0x2e89, 0x52e4a, 0x52e4a, 0x2e4a, 0x2e4a, 0x2e890, 0x2e890, 
+  0x52e4a0, 0x52e4a0, 0x2e4a0, 0x2e4a0, 0x888, 0x888, 0x898959, 0x898944, 
+  0x7a7a4a, 0x7a7a44, 0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 0x898959, 0x898944, 
+  0x7a7a4a, 0x7a7a44, 0x897a, 0x894a, 0x894a, 0x3b7a, 0x7a89, 0x7a7a, 
+  0x597a, 0x4a89, 0x597a, 0x4a89, 0x898989, 0x7a7a7a, 0x595989, 0x4a4a7a, 
+  0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x8989, 0x8989, 0x7a7a, 0x7a7a, 
+  0x8989, 0x7a7a, 0x48959, 0x47a4a, 0x8959, 0x7a4a, 0x8959, 0x7a4a, 
+  0x45959, 0x4594a4a, 0x4a4a4a, 0x7a7a, (1U<<31) | 3184, (1U<<31) | 3184, 0x7a7a7, 0x0, 
+  (1U<<31) | 545, 0x70, 0x44a4a0, 0x4, 0x4, 0x4, 0x4, 0x4, 
   0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x2f2f, 
-  0x2f2f, 0x4447a0, 0x447a0, (1U<<31) | 3288, (1U<<31) | 3288, (1U<<31) | 3288, (1U<<31) | 3288, (1U<<31) | 3274, 
-  (1U<<31) | 3288, (1U<<31) | 3288, (1U<<31) | 3274, 0x4444f4, 0x5554f5, 0x44444f4, 0x55554f5, 0x44444f4, 
-  0x55554f5, 0x4444f4, 0x5554f5, 0x4444f4, 0x5554f5, 0x4444f4, 0x5554f5, 0x4444f4, 
-  0x5554f5, 0x4444f4, 0x5554f5, 0x44444f4, 0x55554f5, 0x4, 0x4, 0x42e4, 
-  0x5e50, 0x40, 0x40, 0x50, 0x42e4, 0x42e4, 0x42e0, 0x52f4, 
-  0x4, 0x2c2c2c, 0x2c2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x2c2c2c2c, 
-  0x2c2c2c, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 
-  0x3b3b3b, 0x2c2c59, (1U<<31) | 659, (1U<<31) | 4595, (1U<<31) | 4994, (1U<<31) | 824, (1U<<31) | 659, (1U<<31) | 4595, 
-  (1U<<31) | 4994, (1U<<31) | 824, (1U<<31) | 659, (1U<<31) | 4595, (1U<<31) | 4994, (1U<<31) | 824, 0x4a4a4a, (1U<<31) | 1622, 
-  (1U<<31) | 3733, (1U<<31) | 4147, (1U<<31) | 1765, 0x42c2c, 0x44a4a, 0x45959, 0x43b3b, 0x2c2c2c, 
-  0x4a4a4a, 0x595959, 0x3b3b3b, 0x42c2c2c, (1U<<31) | 1644, 0x44a4a4a, (1U<<31) | 3711, 0x43b3b3b, 
-  (1U<<31) | 1787, 0x42c2c2c, (1U<<31) | 1644, 0x44a4a4a, (1U<<31) | 3711, 0x43b3b3b, (1U<<31) | 1787, (1U<<31) | 5778, 
-  (1U<<31) | 5756, (1U<<31) | 5778, (1U<<31) | 5778, (1U<<31) | 5756, (1U<<31) | 5756, 0x2c2c2c, (1U<<31) | 659, 0x4a4a4a, 
-  (1U<<31) | 4595, 0x3b3b3b, (1U<<31) | 824, 0x2c2c2c, (1U<<31) | 659, 0x4a4a4a, (1U<<31) | 4595, 0x3b3b3b, 
-  (1U<<31) | 824, 0x2c2c2c, (1U<<31) | 659, 0x4a4a4a, (1U<<31) | 4595, 0x3b3b3b, (1U<<31) | 824, 0x2c2c2c, 
-  (1U<<31) | 659, 0x4a4a4a, (1U<<31) | 4595, 0x3b3b3b, (1U<<31) | 824, 0x448989, 0x447a7a, 0x4898989, 
-  0x47a7a7a, 0x4898989, 0x47a7a7a, (1U<<31) | 4435, (1U<<31) | 4291, 0x3b2c2c3b, 0x594a4a59, 0x2c59592c, 
-  0x4a3b3b4a, 0x2c2c3b, 0x4a4a59, 0x59592c, 0x3b3b4a, 0x2c2c, (1U<<31) | 668, 0x4a4a, 
-  (1U<<31) | 4579, 0x3b3b, (1U<<31) | 833, 0x42e2c, 0x2e42c, 0x2e42c, 0x3b2c2c3b, 0x594a4a59, 
-  0x4a3b3b4a, 0x2c2c2c2c, 0x4a4a4a4a, 0x3b3b3b3b, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c2c2c, 
-  0x4a4a4a4a, 0x3b3b3b3b, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 
-  0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c2c, 0x4a4a4a, 0x3b3b3b, 0x2c2c3b, 0x4a4a59, 
-  0x3b3b4a, 0x2c2c2c, 0x4a4a4a, 0x3b3b3b, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c3b, 
-  0x4a4a59, 0x3b3b4a, (1U<<31) | 1654, 0x4595959, 0x2c2c2c2c, 0x4a4a3b, (1U<<31) | 4586, 0x59594a, 
-  (1U<<31) | 4985, 0x3b3b2c, (1U<<31) | 815, 0x4a4a3b, (1U<<31) | 4586, 0x59594a, (1U<<31) | 4985, 0x3b3b2c, 
-  (1U<<31) | 815, 0x2c2c2c2c, 0x2c2c2c2c, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 
-  0x2c2c2c, 0x2c2c2c, 0x42c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 
-  0x2e42c0, (1U<<31) | 1622, (1U<<31) | 1632, (1U<<31) | 3733, (1U<<31) | 3721, (1U<<31) | 1765, (1U<<31) | 1775, (1U<<31) | 1622, 
-  (1U<<31) | 1632, (1U<<31) | 3733, (1U<<31) | 3721, (1U<<31) | 1765, (1U<<31) | 1775, 0x2e42c0, 0x2c2c4a, 0x4a4a59, 
-  0x3b3b59, 0x3b3b4a, 0x4a4a2c, 0x59592c, 0x2c2c4, 0x2c3b, 0x4a59, 0x3b4a, 
-  0x2c3b, 0x4a59, 0x2c3b, 0x4a59, 0x3b4a, 0x3b4a, 0x2c3b, 0x4a59, 
-  0x3b4a, 0x3f4, 0x3f4, 0x44e4, 0x544e4, 0x555e4, 0x3f3f3f3f, 0x40, 
-  0x2e, (1U<<31) | 6028, (1U<<31) | 6023, (1U<<31) | 4942, 0x2e, 0x1f41f, 0x442e440, 0x41f, 
-  0x0, 0x3f3f3f, 0x3f3f3f, 0x2e40, 0xaf1f, 0xaf1f, (1U<<31) | 6012, (1U<<31) | 6009, 
-  (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, 
-  (1U<<31) | 6009, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6009, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6009, 
-  (1U<<31) | 6012, (1U<<31) | 6009, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6009, (1U<<31) | 6009, (1U<<31) | 3189, (1U<<31) | 4965, 
-  0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 
-  0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x5959, 0x25959, 0x8a8a8a, 0x7b7b7b, 
-  (1U<<31) | 5809, 0x7b7b7b7b, 0x28a8a8a, 0x27b7b7b, 0x8a7a, 0x8a4a, 0x7b4b, 0x8a4a, 
-  0x7b4b, 0x27b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a8a8a, 0x7b7b7b, 0x2e2d, 0x592e89, 
-  0x5a2e8a, 0x4a2e7a, 0x4b2e7b, 0x89592e0, 0x8a5a2e0, 0x7a4a2e0, 0x7b4b2e0, 0x8a8a8a, 
-  0x7b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a4, 0x7b4, 0x5a5a4, 0x5a5a4, 0x5a5a4, 
-  0x7b7b, 0x48a8a, 0x47b7b, 0x7b7b, 0x598989, 0x5a8a8a, 0x4a7a7a, 0x4b7b7b, 
-  0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 
-  0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 0x0, 0x0, (1U<<31) | 320, (1U<<31) | 366, 
-  (1U<<31) | 565, (1U<<31) | 610, (1U<<31) | 471, (1U<<31) | 528, (1U<<31) | 392, (1U<<31) | 426, (1U<<31) | 332, (1U<<31) | 344, 
-  (1U<<31) | 577, (1U<<31) | 622, (1U<<31) | 483, (1U<<31) | 495, (1U<<31) | 404, (1U<<31) | 438, 0x4a2e4a, 0x4b2e4b, 
-  0x592e59, 0x5a2e5a, 0x4a4a2e0, 0x4b4b2e0, 0x59592e0, 0x5a5a2e0, 0x22d2d3c, 0x4b4b3c, 
-  0x3c3c2d, 0x4b4b3c, 0x3c3c2d, 0x2d2d2d2d, 0x4b4b4b, 0x4b7b7b, 0x4b4b4b, 0x3c3c3c, 
-  0x3c3c3c, 0x4b4b4b, 0x3c3c3c, 0x3c3c3c, 0x2d2d3c, 0x3c3c4b, 0x2d4, 0x3c3c3c, 
-  0x3c3c3c, 0x3c3c3c, 0x2d2d5a, 0x2d2d2d, 0x2d2d2d, 0x4b4b4b, 0x3c3c3c, 0x4a4b4b, 
-  0x595a5a, 0x3b3c3c, 0x44b4b, 0x45a5a, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x595959, 
-  0x5a5a5a, 0x4a4b4b, 0x3b3c3c, 0x44b4b, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x4a4b4b, 
-  0x595a5a, 0x3b3c3c, 0x44b4b, 0x45a5a, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x595959, 
-  0x5a5a5a, 0x48b8b8b, 0x47c7c7c, 0x259, 0x25a, 0x25b, 0x34a, 0x34b, 
-  0x34c, 0x4898919, 0x48a8a1a, 0x448b8b1b, 0x47a7a1a, 0x47b7b1b, 0x447c7c1c, 0x4a4a, 
-  0x4b4b, 0x4c4c, 0x5959, 0x5a5a, 0x5b5b, 0x458989, 0x447a7a, 0x457a7a, 
-  0x4894, 0x4895, 0x4894, 0x4895, 0x47a4, 0x47a5, 0x47a4, 0x47a5, 
-  0x447a7a, 0x458989, 0x457a7a, 0x42c2c3b, 0x42d2d3c, (1U<<31) | 1700, 0x48b8b8b, 0x47c7c7c, 
-  0x428b8b8b, 0x437c7c7c, 0x48919, 0x48a1a, 0x48b1b, 0x47a1a, 0x47b1b, 0x47c1c, 
-  (1U<<31) | 1388, (1U<<31) | 1720, (1U<<31) | 1366, (1U<<31) | 1731, (1U<<31) | 1520, (1U<<31) | 1487, (1U<<31) | 1498, (1U<<31) | 1509, 
-  (1U<<31) | 1432, (1U<<31) | 1410, (1U<<31) | 1476, (1U<<31) | 1454, (1U<<31) | 1421, (1U<<31) | 1399, (1U<<31) | 1465, (1U<<31) | 1443, 
-  (1U<<31) | 1333, (1U<<31) | 1300, (1U<<31) | 1344, (1U<<31) | 1311, (1U<<31) | 1322, (1U<<31) | 1289, (1U<<31) | 1377, (1U<<31) | 1355, 
-  0x442e4b20, 0x442e4c30, 0x442e5b20, 0x442e5b20, 0x1b1b1b, 0x1d1d1d, (1U<<31) | 171, 0x1c1c1c, 
-  0x1b1b4, 0x1d1d4, (1U<<31) | 178, 0x1c1c4, 0x1b1b4, 0x1d1d4, (1U<<31) | 178, 0x1c1c4, 
-  (1U<<31) | 1588, (1U<<31) | 1543, 0x42489892, 0x4247a7a2, (1U<<31) | 80, 0x24a894a, 0x424b8b4b, 0x27a897a, 
-  0x427b8b7b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x2598959, 
-  0x25a8a5a, 0x425b8b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x428b7b8b, 0x2597a59, 0x25a7a5a, 
-  0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x27a597a, 
-  (1U<<31) | 1554, (1U<<31) | 1577, 0x24a894a, 0x424b8b4b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a894a, 
-  0x24a8a4a, 0x424b8b4b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x434c7c4c, 0x2597a59, 0x25a7a5a, 
-  0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x27a597a, 
-  (1U<<31) | 1588, (1U<<31) | 1543, (1U<<31) | 80, (1U<<31) | 298, (1U<<31) | 309, (1U<<31) | 1277, (1U<<31) | 276, (1U<<31) | 287, 
-  (1U<<31) | 1708, (1U<<31) | 1265, (1U<<31) | 1253, 0x24892, 0x247a2, (1U<<31) | 1147, (1U<<31) | 1207, (1U<<31) | 1123, 
-  (1U<<31) | 1219, (1U<<31) | 1195, (1U<<31) | 1159, (1U<<31) | 1171, (1U<<31) | 1183, (1U<<31) | 1003, (1U<<31) | 979, (1U<<31) | 1099, 
-  (1U<<31) | 1075, (1U<<31) | 991, (1U<<31) | 967, (1U<<31) | 1087, (1U<<31) | 1063, (1U<<31) | 955, (1U<<31) | 943, (1U<<31) | 1051, 
-  (1U<<31) | 1027, (1U<<31) | 1039, (1U<<31) | 1015, (1U<<31) | 1135, (1U<<31) | 1111, 0x2898989, 0x28a8a8a, 0x428b8b8b, 
-  0x27a7a7a, 0x27b7b7b, 0x437c7c7c, (1U<<31) | 1588, (1U<<31) | 1543, 0x28948989, 0x28a48a8a, (1U<<31) | 1601, 
-  0x27a47a7a, 0x27b47b7b, (1U<<31) | 1744, (1U<<31) | 1565, (1U<<31) | 1531, (1U<<31) | 1588, (1U<<31) | 1543, (1U<<31) | 1588, 
-  (1U<<31) | 1543, (1U<<31) | 1588, (1U<<31) | 1543, 0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 
-  0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 
-  0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x24a594a, 0x2592e0, 0x25a2e0, 
-  0x25b2e0, 0x23b593b, 0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x22c3b2c, 
-  0x23b2e0, 0x33c2e0, 0x43d2e0, 0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 
-  0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 
-  0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 
-  0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 
-  0x25b2e0, 0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 0x23b2e0, 0x33c2e0, 0x43d2e0, 0x22c4a2c, 
-  0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 
-  0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 
-  0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 
-  0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 
-  0x23b2e0, 0x33c2e0, 0x43d2e0, (1U<<31) | 554, (1U<<31) | 599, (1U<<31) | 1599, (1U<<31) | 460, (1U<<31) | 517, 
-  (1U<<31) | 1742, (1U<<31) | 3208, (1U<<31) | 3196, 0x28948989, 0x28a48a8a, (1U<<31) | 1601, 0x27a47a7a, 0x27b47b7b, 
-  (1U<<31) | 1744, (1U<<31) | 3208, (1U<<31) | 3196, 0x28948989, 0x28a48a8a, (1U<<31) | 1601, 0x27a47a7a, 0x27b47b7b, 
-  (1U<<31) | 1744, (1U<<31) | 3208, (1U<<31) | 3196, (1U<<31) | 589, (1U<<31) | 634, (1U<<31) | 1611, (1U<<31) | 507, (1U<<31) | 540, 
-  (1U<<31) | 1754, (1U<<31) | 1588, (1U<<31) | 1543, (1U<<31) | 4527, (1U<<31) | 3881, (1U<<31) | 4209, (1U<<31) | 4404, (1U<<31) | 4548, 
-  (1U<<31) | 3816, (1U<<31) | 4230, (1U<<31) | 4383, (1U<<31) | 4464, (1U<<31) | 4126, (1U<<31) | 4506, (1U<<31) | 4178, (1U<<31) | 4320, 
-  (1U<<31) | 3743, (1U<<31) | 4341, (1U<<31) | 3764, (1U<<31) | 4443, (1U<<31) | 4105, (1U<<31) | 4485, (1U<<31) | 4157, (1U<<31) | 4299, 
-  (1U<<31) | 3690, (1U<<31) | 4362, (1U<<31) | 3785, (1U<<31) | 1588, (1U<<31) | 1543, (1U<<31) | 1588, (1U<<31) | 1543, 0x27a3b7a, 
-  0x27b3b7b, 0x437c3c7c, 0x23b47a3b, 0x23b47b3b, 0x33c47c3c, (1U<<31) | 298, (1U<<31) | 309, (1U<<31) | 1277, 
-  (1U<<31) | 276, (1U<<31) | 287, (1U<<31) | 1708, (1U<<31) | 1265, (1U<<31) | 1253, 0x48b8b8b, 0x47c7c7c, 0x48b8b8b, 
-  0x47c7c7c, 0x48b8b8b, 0x47c7c7c, 0x4c4c3d, (1U<<31) | 840, 0x4c4c3d, (1U<<31) | 840, 0x5a8a8a, 
-  0x5b8b8b, 0x5a5a5a, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x2c2c2c, 0x2d2d2d, 
-  (1U<<31) | 779, 0x4c7c7c, 0x4c4c4c, (1U<<31) | 786, 0x3d3d4c, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 
-  0x2c2c2c, 0x2d2d2d, (1U<<31) | 779, (1U<<31) | 793, (1U<<31) | 779, 0x4a4c4c, 0x595b5b, 0x3b3d3d, 
-  0x44c4c, 0x45b5b, 0x43d3d, 0x4c4c4c, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 
-  0x4a4c4c, 0x595959, 0x595a5a, 0x595b5b, 0x3b3d3d, 0x44c4c, 0x45959, 0x45a5a, 
-  0x45b5b, 0x43d3d, 0x4c4c4c, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 
-  0x3d3d3d, 0x4a4c4c, 0x595b5b, 0x3b3d3d, 0x44c4c, 0x45b5b, 0x43d3d, 0x4c4c4c, 
-  0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, (1U<<31) | 3733, (1U<<31) | 3806, (1U<<31) | 3903, (1U<<31) | 4147, 
-  (1U<<31) | 4199, (1U<<31) | 4251, 0x2898989, 0x28a8a8a, 0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, 
-  (1U<<31) | 589, (1U<<31) | 507, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1588, (1U<<31) | 1543, 0x2898989, 0x28a8a8a, 
-  0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, (1U<<31) | 589, (1U<<31) | 507, 0x428b8b8b, 0x437c7c7c, 
-  (1U<<31) | 1588, (1U<<31) | 1543, (1U<<31) | 4538, (1U<<31) | 3892, (1U<<31) | 4220, (1U<<31) | 4415, (1U<<31) | 4559, (1U<<31) | 3827, 
-  (1U<<31) | 4241, (1U<<31) | 4394, (1U<<31) | 4475, (1U<<31) | 4137, (1U<<31) | 4517, (1U<<31) | 4189, (1U<<31) | 4331, (1U<<31) | 3754, 
-  (1U<<31) | 4352, (1U<<31) | 3775, 0x442e4b20, 0x442e4c30, 0x442e5b20, 0x442e5b20, (1U<<31) | 4454, (1U<<31) | 4116, 
-  (1U<<31) | 4496, (1U<<31) | 4168, (1U<<31) | 4310, (1U<<31) | 3701, (1U<<31) | 4373, (1U<<31) | 3796, 0x49f2f, 0x48b8b, 
-  0x47c7c, 0x48b8b8b, 0x47c7c7c, 0x49f2f, 0x4489894, 0x447a7a4, 0x4894, 0x4895, 
-  0x4894, 0x4895, 0x47a4, 0x47a5, 0x47a4, 0x47a5, 0x47777, 0x48888, 
-  (1U<<31) | 4569, (1U<<31) | 4425, (1U<<31) | 4569, (1U<<31) | 4425, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x4a4a4a4a, 
+  0x4, 0x4, 0x7f2f, 0x7f2f, 0x4447a0, 0x447a0, (1U<<31) | 3184, (1U<<31) | 3184, 
+  (1U<<31) | 3184, (1U<<31) | 3184, (1U<<31) | 3157, (1U<<31) | 3184, (1U<<31) | 3184, (1U<<31) | 3157, 0x4444f4, 0x5554f5, 
+  0x44444f4, 0x55554f5, 0x44444f4, 0x55554f5, 0x4444f4, 0x5554f5, 0x4444f4, 0x5554f5, 
+  0x4444f4, 0x5554f5, 0x4444f4, 0x5554f5, 0x4444f4, 0x5554f5, 0x44444f4, 0x55554f5, 
+  0x4, 0x4, 0x42e4, 0x5e50, 0x40, 0x40, 0x50, 0x42e4, 
+  0x42e4, 0x42e0, 0x52f4, 0x4, 0x2c2c2c, 0x2c2c2c2c, 0x4a4a4a, 0x595959, 
+  0x3b3b3b, 0x2c2c2c, 0x2c2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 
+  0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c59, (1U<<31) | 654, (1U<<31) | 4825, (1U<<31) | 5275, 
+  (1U<<31) | 819, (1U<<31) | 654, (1U<<31) | 4825, (1U<<31) | 5275, (1U<<31) | 819, (1U<<31) | 654, (1U<<31) | 4825, (1U<<31) | 5275, 
+  (1U<<31) | 819, 0x4a4a4a, (1U<<31) | 1520, (1U<<31) | 3912, (1U<<31) | 4355, (1U<<31) | 1663, 0x42c2c, 0x44a4a, 
+  0x45959, 0x43b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x42c2c2c, (1U<<31) | 1542, 
+  0x44a4a4a, (1U<<31) | 3890, 0x43b3b3b, (1U<<31) | 1685, 0x42c2c2c, (1U<<31) | 1542, 0x44a4a4a, (1U<<31) | 3890, 
+  0x43b3b3b, (1U<<31) | 1685, (1U<<31) | 6215, (1U<<31) | 6057, (1U<<31) | 6215, (1U<<31) | 6215, (1U<<31) | 6057, (1U<<31) | 6057, 
+  0x2c2c2c, (1U<<31) | 654, 0x4a4a4a, (1U<<31) | 4825, 0x3b3b3b, (1U<<31) | 819, 0x2c2c2c, (1U<<31) | 654, 
+  0x4a4a4a, (1U<<31) | 4825, 0x3b3b3b, (1U<<31) | 819, 0x2c2c2c, (1U<<31) | 654, 0x4a4a4a, (1U<<31) | 4825, 
+  0x3b3b3b, (1U<<31) | 819, 0x2c2c2c, (1U<<31) | 654, 0x4a4a4a, (1U<<31) | 4825, 0x3b3b3b, (1U<<31) | 819, 
+  0x448989, 0x447a7a, 0x4898989, 0x47a7a7a, 0x4898989, 0x47a7a7a, (1U<<31) | 4655, (1U<<31) | 4499, 
+  0x3b2c2c3b, 0x594a4a59, 0x2c59592c, 0x4a3b3b4a, 0x2c2c3b, 0x4a4a59, 0x59592c, 0x3b3b4a, 
+  0x2c2c, (1U<<31) | 663, 0x4a4a, (1U<<31) | 4799, 0x3b3b, (1U<<31) | 828, 0x42e2c, 0x2e42c, 
+  0x2e42c, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c2c2c, 0x4a4a4a4a, 0x3b3b3b3b, 0x3b2c2c3b, 
+  0x594a4a59, 0x4a3b3b4a, 0x2c2c2c2c, 0x4a4a4a4a, 0x3b3b3b3b, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 
+  0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c2c, 0x4a4a4a, 
+  0x3b3b3b, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c2c, 0x4a4a4a, 0x3b3b3b, 0x2c2c3b, 
+  0x4a4a59, 0x3b3b4a, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, (1U<<31) | 1552, 0x4595959, 0x2c2c2c2c, 
+  0x4a4a3b, (1U<<31) | 4816, 0x59594a, (1U<<31) | 5266, 0x3b3b2c, (1U<<31) | 810, 0x4a4a3b, (1U<<31) | 4816, 
+  0x59594a, (1U<<31) | 5266, 0x3b3b2c, (1U<<31) | 810, 0x2c2c2c2c, 0x2c2c2c2c, 0x2c2c2c, 0x4a4a4a, 
+  0x595959, 0x3b3b3b, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x42c2c2c, 0x2c2c2c, 0x2c2c2c, 
+  0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2e42c0, (1U<<31) | 1520, (1U<<31) | 1530, (1U<<31) | 3912, (1U<<31) | 3900, 
+  (1U<<31) | 1663, (1U<<31) | 1673, (1U<<31) | 1520, (1U<<31) | 1530, (1U<<31) | 3912, (1U<<31) | 3900, (1U<<31) | 1663, (1U<<31) | 1673, 
+  0x2e42c0, 0x2c2c4a, 0x4a4a59, 0x3b3b59, 0x3b3b4a, 0x4a4a2c, 0x59592c, 0x2c2c4, 
+  0x2c3b, 0x4a59, 0x3b4a, 0x2c3b, 0x4a59, 0x2c3b, 0x4a59, 0x3b4a, 
+  0x3b4a, 0x2c3b, 0x4a59, 0x3b4a, 0x3f4, 0x3f4, 0x44e4, 0x544e4, 
+  0x555e4, 0x7f7f7f3f, 0x40, 0x2e, (1U<<31) | 6509, (1U<<31) | 6504, (1U<<31) | 5218, 0x2e, 
+  0x7f41f, 0x442e440, 0x41f, 0x0, 0x7f7f3f, 0x7f7f3f, 0x2e40, 0xaf1f, 
+  0xaf1f, (1U<<31) | 6493, (1U<<31) | 6490, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6490, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6490, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6490, (1U<<31) | 6493, (1U<<31) | 6490, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6490, 
+  (1U<<31) | 6490, (1U<<31) | 3081, (1U<<31) | 5236, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 
+  0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x5959, 
+  0x25959, 0x8a8a8a, 0x7b7b7b, (1U<<31) | 6246, 0x7b7b7b7b, 0x28a8a8a, 0x27b7b7b, 0x8a7a, 
+  0x8a4a, 0x7b4b, 0x8a4a, 0x7b4b, 0x27b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a8a8a, 
+  0x7b7b7b, 0x2e2d, 0x592e89, 0x5a2e8a, 0x4a2e7a, 0x4b2e7b, 0x89592e0, 0x8a5a2e0, 
+  0x7a4a2e0, 0x7b4b2e0, 0x8a8a8a, 0x7b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a4, 0x7b4, 
+  0x5a5a4, 0x5a5a4, 0x5a5a4, 0x7b7b, 0x48a8a, 0x47b7b, 0x7b7b, 0x598989, 
+  0x5a8a8a, 0x4a7a7a, 0x4b7b7b, 0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 0x89894, 
+  0x8a8a4, 0x7a7a4, 0x7b7b4, 0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 0x0, 
+  0x0, (1U<<31) | 315, (1U<<31) | 361, (1U<<31) | 560, (1U<<31) | 605, (1U<<31) | 466, (1U<<31) | 523, (1U<<31) | 387, 
+  (1U<<31) | 421, (1U<<31) | 327, (1U<<31) | 339, (1U<<31) | 572, (1U<<31) | 617, (1U<<31) | 478, (1U<<31) | 490, (1U<<31) | 399, 
+  (1U<<31) | 433, 0x4a2e4a, 0x4b2e4b, 0x592e59, 0x5a2e5a, 0x4a4a2e0, 0x4b4b2e0, 0x59592e0, 
+  0x5a5a2e0, 0x22d2d3c, 0x4b4b3c, 0x3c3c2d, 0x4b4b3c, 0x3c3c2d, 0x2d2d2d, 0x3c3c3c, 
+  0x2d2d2d2d, 0x4b4b4b, 0x4b7b7b, 0x4b4b4b, 0x3c3c3c, 0x3c3c3c, 0x4b4b4b, 0x3c3c3c, 
+  0x3c3c3c, 0x2d2d3c, 0x3c3c4b, 0x2d4, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x2d2d5a, 
+  0x2d2d2d, 0x2d2d2d, 0x4b4b4b, 0x3c3c3c, 0x4a4b4b, 0x595a5a, 0x3b3c3c, 0x44b4b, 
+  0x45a5a, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x595959, 0x5a5a5a, 0x4a4b4b, 0x3b3c3c, 
+  0x44b4b, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x4a4b4b, 0x595a5a, 0x3b3c3c, 0x44b4b, 
+  0x45a5a, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x595959, 0x5a5a5a, 0x48b8b8b, 0x47c7c7c, 
+  0x259, 0x25a, 0x25b, 0x34a, 0x34b, 0x34c, 0x4898919, 0x48a8a1a, 
+  0x448b8b1b, 0x47a7a1a, 0x47b7b1b, 0x447c7c1c, 0x4a4a, 0x4b4b, 0x4c4c, 0x5959, 
+  0x5a5a, 0x5b5b, 0x458989, 0x447a7a, 0x457a7a, 0x4894, 0x4895, 0x4894, 
+  0x4895, 0x47a4, 0x47a5, 0x47a4, 0x47a5, 0x447a7a, 0x458989, 0x457a7a, 
+  0x42c2c3b, 0x42d2d3c, (1U<<31) | 1598, 0x48b8b8b, 0x47c7c7c, 0x428b8b8b, 0x437c7c7c, 0x48919, 
+  0x48a1a, 0x48b1b, 0x47a1a, 0x47b1b, 0x47c1c, (1U<<31) | 1286, (1U<<31) | 1618, (1U<<31) | 1264, 
+  (1U<<31) | 1629, (1U<<31) | 1418, (1U<<31) | 1385, (1U<<31) | 1396, (1U<<31) | 1407, (1U<<31) | 1330, (1U<<31) | 1308, (1U<<31) | 1374, 
+  (1U<<31) | 1352, (1U<<31) | 1319, (1U<<31) | 1297, (1U<<31) | 1363, (1U<<31) | 1341, (1U<<31) | 1231, (1U<<31) | 1198, (1U<<31) | 1242, 
+  (1U<<31) | 1209, (1U<<31) | 1220, (1U<<31) | 1187, (1U<<31) | 1275, (1U<<31) | 1253, 0x442e4b20, 0x442e4c30, 0x442e5b20, 
+  0x442e5b20, 0x1b1b1b, 0x1d1d1d, (1U<<31) | 171, 0x1c1c1c, 0x1b1b4, 0x1d1d4, (1U<<31) | 178, 
+  0x1c1c4, 0x1b1b4, 0x1d1d4, (1U<<31) | 178, 0x1c1c4, (1U<<31) | 1486, (1U<<31) | 1441, 0x42489892, 
+  0x4247a7a2, (1U<<31) | 87, 0x24a894a, 0x424b8b4b, 0x27a897a, 0x427b8b7b, 0x2598959, 0x25a8a5a, 
+  0x425b8b5b, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a7a4a, 
+  0x24b7b4b, 0x434c7c4c, 0x428b7b8b, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 
+  0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x27a597a, (1U<<31) | 1452, (1U<<31) | 1475, 0x24a894a, 
+  0x424b8b4b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x2598959, 
+  0x25a8a5a, 0x425b8b5b, 0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 
+  0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x27a597a, (1U<<31) | 1486, (1U<<31) | 1441, (1U<<31) | 87, 
+  (1U<<31) | 293, (1U<<31) | 304, (1U<<31) | 1175, (1U<<31) | 271, (1U<<31) | 282, (1U<<31) | 1606, (1U<<31) | 1163, (1U<<31) | 1151, 
+  0x24892, 0x247a2, (1U<<31) | 1051, (1U<<31) | 1111, (1U<<31) | 1027, (1U<<31) | 1123, (1U<<31) | 1099, (1U<<31) | 1063, 
+  (1U<<31) | 1075, (1U<<31) | 1087, (1U<<31) | 907, (1U<<31) | 883, (1U<<31) | 1003, (1U<<31) | 979, (1U<<31) | 895, (1U<<31) | 871, 
+  (1U<<31) | 991, (1U<<31) | 967, (1U<<31) | 859, (1U<<31) | 847, (1U<<31) | 955, (1U<<31) | 931, (1U<<31) | 943, (1U<<31) | 919, 
+  (1U<<31) | 1039, (1U<<31) | 1015, 0x2898989, 0x28a8a8a, 0x428b8b8b, 0x27a7a7a, 0x27b7b7b, 0x437c7c7c, 
+  (1U<<31) | 1486, (1U<<31) | 1441, 0x28948989, 0x28a48a8a, (1U<<31) | 1499, 0x27a47a7a, 0x27b47b7b, (1U<<31) | 1642, 
+  (1U<<31) | 1463, (1U<<31) | 1429, (1U<<31) | 1486, (1U<<31) | 1441, (1U<<31) | 1486, (1U<<31) | 1441, (1U<<31) | 1486, (1U<<31) | 1441, 
+  0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x23b4a3b, 0x23b4b3b, 
+  0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 0x22c5b2c, 0x2592e0, 
+  0x25a2e0, 0x25b2e0, 0x24a594a, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 0x23b5a3b, 
+  0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x22c3b2c, 0x23b2e0, 0x33c2e0, 0x43d2e0, 
+  0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x23b4a3b, 0x23b4b3b, 
+  0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 0x22c5b2c, 0x2592e0, 
+  0x25a2e0, 0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 0x2592e0, 0x25a2e0, 0x25b2e0, 
+  0x23b593b, 0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x22c3b2c, 0x32c3c2c, 
+  0x42d3d2d, 0x23b2e0, 0x33c2e0, 0x43d2e0, 0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 
+  0x24b2e0, 0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 
+  0x22c592c, 0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x24a594a, 0x24a5a4a, 
+  0x24b5b4b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 0x23b5a3b, 0x23b5b3b, 0x2592e0, 
+  0x25a2e0, 0x25b2e0, 0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 0x23b2e0, 0x33c2e0, 0x43d2e0, 
+  (1U<<31) | 549, (1U<<31) | 594, (1U<<31) | 1497, (1U<<31) | 455, (1U<<31) | 512, (1U<<31) | 1640, (1U<<31) | 3100, (1U<<31) | 3088, 
+  0x28948989, 0x28a48a8a, (1U<<31) | 1499, 0x27a47a7a, 0x27b47b7b, (1U<<31) | 1642, (1U<<31) | 3100, (1U<<31) | 3088, 
+  0x28948989, 0x28a48a8a, (1U<<31) | 1499, 0x27a47a7a, 0x27b47b7b, (1U<<31) | 1642, (1U<<31) | 3100, (1U<<31) | 3088, 
+  (1U<<31) | 584, (1U<<31) | 629, (1U<<31) | 1509, (1U<<31) | 502, (1U<<31) | 535, (1U<<31) | 1652, (1U<<31) | 1486, (1U<<31) | 1441, 
+  (1U<<31) | 4747, (1U<<31) | 4024, (1U<<31) | 4417, (1U<<31) | 4612, (1U<<31) | 4768, (1U<<31) | 3995, (1U<<31) | 4438, (1U<<31) | 4591, 
+  (1U<<31) | 4684, (1U<<31) | 4334, (1U<<31) | 4726, (1U<<31) | 4386, (1U<<31) | 4528, (1U<<31) | 3922, (1U<<31) | 4549, (1U<<31) | 3943, 
+  (1U<<31) | 4663, (1U<<31) | 4313, (1U<<31) | 4705, (1U<<31) | 4365, (1U<<31) | 4507, (1U<<31) | 3869, (1U<<31) | 4570, (1U<<31) | 3964, 
+  (1U<<31) | 1486, (1U<<31) | 1441, (1U<<31) | 1486, (1U<<31) | 1441, 0x27a3b7a, 0x27b3b7b, 0x437c3c7c, 0x23b47a3b, 
+  0x23b47b3b, 0x33c47c3c, (1U<<31) | 293, (1U<<31) | 304, (1U<<31) | 1175, (1U<<31) | 271, (1U<<31) | 282, (1U<<31) | 1606, 
+  (1U<<31) | 1163, (1U<<31) | 1151, 0x48b8b8b, 0x47c7c7c, 0x48b8b8b, 0x47c7c7c, 0x48b8b8b, 0x47c7c7c, 
+  0x4c4c3d, (1U<<31) | 835, 0x4c4c3d, (1U<<31) | 835, (1U<<31) | 774, 0x3d3d3d, 0x5a8a8a, 0x5b8b8b, 
+  0x5a5a5a, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x2c2c2c, 0x2d2d2d, (1U<<31) | 774, 
+  0x4c7c7c, 0x4c4c4c, (1U<<31) | 781, 0x3d3d4c, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x2c2c2c, 
+  0x2d2d2d, (1U<<31) | 774, (1U<<31) | 788, (1U<<31) | 774, 0x4a4c4c, 0x595b5b, 0x3b3d3d, 0x44c4c, 
+  0x45b5b, 0x43d3d, 0x4c4c4c, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x4a4c4c, 
+  0x595959, 0x595a5a, 0x595b5b, 0x3b3d3d, 0x44c4c, 0x45959, 0x45a5a, 0x45b5b, 
+  0x43d3d, 0x4c4c4c, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 
+  0x4a4c4c, 0x595b5b, 0x3b3d3d, 0x44c4c, 0x45b5b, 0x43d3d, 0x4c4c4c, 0x5b5b5b, 
+  0x3b3b3b, 0x3c3c3c, 0x3d3d3d, (1U<<31) | 3912, (1U<<31) | 3985, (1U<<31) | 4046, (1U<<31) | 4355, (1U<<31) | 4407, 
+  (1U<<31) | 4459, 0x2898989, 0x28a8a8a, 0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, (1U<<31) | 584, 
+  (1U<<31) | 502, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1486, (1U<<31) | 1441, 0x2898989, 0x28a8a8a, 0x28b8b8b, 
+  0x27a7a7a, 0x27b7b7b, 0x37c7c7c, (1U<<31) | 584, (1U<<31) | 502, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1486, 
+  (1U<<31) | 1441, (1U<<31) | 4758, (1U<<31) | 4035, (1U<<31) | 4428, (1U<<31) | 4623, (1U<<31) | 4779, (1U<<31) | 4006, (1U<<31) | 4449, 
+  (1U<<31) | 4602, (1U<<31) | 4695, (1U<<31) | 4345, (1U<<31) | 4737, (1U<<31) | 4397, (1U<<31) | 4539, (1U<<31) | 3933, (1U<<31) | 4560, 
+  (1U<<31) | 3954, 0x442e4b20, 0x442e4c30, 0x442e5b20, 0x442e5b20, (1U<<31) | 4674, (1U<<31) | 4324, (1U<<31) | 4716, 
+  (1U<<31) | 4376, (1U<<31) | 4518, (1U<<31) | 3880, (1U<<31) | 4581, (1U<<31) | 3975, 0x49f2f, 0x48b8b, 0x47c7c, 
+  0x48b8b8b, 0x47c7c7c, 0x49f2f, 0x4489894, 0x447a7a4, 0x4894, 0x4895, 0x4894, 
+  0x4895, 0x47a4, 0x47a5, 0x47a4, 0x47a5, 0x47777, 0x48888, (1U<<31) | 4789, 
+  (1U<<31) | 4633, (1U<<31) | 4789, (1U<<31) | 4633, (1U<<31) | 4806, (1U<<31) | 4834, (1U<<31) | 4869, (1U<<31) | 5256, (1U<<31) | 5284, 
+  (1U<<31) | 5294, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x4a4a4a4a, 
   0x4b4b4b4b, 0x4c4c4c4c, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 
-  0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x3b3b3b3b, 0x3c3c3c3c, 0x3d3d3d3d, (1U<<31) | 5769, (1U<<31) | 5800, 
-  (1U<<31) | 5818, 0x7a4a7a7a, 0x7b4b7b7b, 0x7c4c7c7c, 0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 0x2c2c2c2c, 
-  0x2d2d2d2d, (1U<<31) | 777, 0x5b8b8b, 0x4c7c7c, 0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 0x59595959, 
-  0x5a5a5a5a, 0x5b5b5b5b, 0x2c2c1c, 0x2d2d1d, (1U<<31) | 770, 0x444, 0x555, 0x444, 
-  0x555, 0x444, 0x555, 0x444, 0x555, 0x2e0, 0x2e0, 0x2e0, 
-  0x2e0, 0x2e0, 0x42e0, 0x52e0, 0x4, 0x5, 0x40, 0x50, 
+  0x3b3b3b3b, 0x3c3c3c3c, 0x3d3d3d3d, (1U<<31) | 6206, (1U<<31) | 6237, (1U<<31) | 6255, 0x7a4a7a7a, 0x7b4b7b7b, 
+  0x7c4c7c7c, 0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 0x2c2c2c2c, 0x2d2d2d2d, (1U<<31) | 772, 0x5b8b8b, 
+  0x4c7c7c, 0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 0x2c2c1c, 
+  0x2d2d1d, (1U<<31) | 765, 0x7a7a3b, 0x7b7b3c, 0x7c7c3d, 0x7b3b, 0x7c3c, 0x4a4a7a7a, 
+  0x4b4b7b7b, 0x4c4c7c7c, 0x1a3b7a3b, 0x444, 0x555, 0x444, 0x555, 0x444, 
+  0x555, 0x444, 0x555, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 
+  0x42e0, 0x52e0, 0x2e2e2, 0x2e2e2, 0x4, 0x5, 0x40, 0x50, 
   0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x40, 0x50, 0x20, 0x2e40, 
-  0x2e0, 0x4442, 0x4452, 0x4440, 0x4450, 0x0, 0x0, (1U<<31) | 758, 
-  (1U<<31) | 6007, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, 
-  (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 800, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, 
-  (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 4925, 
-  (1U<<31) | 4023, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 5994, (1U<<31) | 6012, 
-  (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, 
-  (1U<<31) | 4938, (1U<<31) | 4938, (1U<<31) | 4938, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 4938, (1U<<31) | 4938, (1U<<31) | 6012, 
-  (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 4938, (1U<<31) | 4938, (1U<<31) | 4938, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, 
-  (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, 
-  (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, (1U<<31) | 6012, 0x442e0, 0x2e2e0, 0x4440, 0x2595959, 
+  0x2e0, 0x4442, 0x4452, 0x4440, 0x4450, 0x0, 0x0, (1U<<31) | 753, 
+  (1U<<31) | 6488, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 795, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 5201, 
+  (1U<<31) | 4231, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6468, (1U<<31) | 6493, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, 
+  (1U<<31) | 5214, (1U<<31) | 5214, (1U<<31) | 5214, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 5214, (1U<<31) | 5214, (1U<<31) | 6493, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 5214, (1U<<31) | 5214, (1U<<31) | 5214, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, 
+  (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, (1U<<31) | 6493, 0x442e0, 0x2e2e0, 0x4440, 0x2595959, 
   0x25a5a5a, 0x25b5b5b, 0x40, 0x50, 0x4, 0x5, 0x4, 0x5, 
-  0x4, 0x4, 0x45, (1U<<31) | 1797, (1U<<31) | 4034, (1U<<31) | 4261, (1U<<31) | 1797, (1U<<31) | 4034, 
-  (1U<<31) | 4261, 0x44, 0x55, 0x5, (1U<<31) | 4261, 0x2e0, 0x0, 0x2e0, 
+  0x4, 0x4, 0x45, (1U<<31) | 1695, (1U<<31) | 4242, (1U<<31) | 4469, (1U<<31) | 1695, (1U<<31) | 4242, 
+  (1U<<31) | 4469, 0x44, 0x55, 0x5, (1U<<31) | 4469, 0x2e0, 0x0, 0x2e0, 
   0x2e0, 0x2e2e, 0x0, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x24a4a4a, 0x4a4a4a, 
   0x4a4a4a, 0x4a4a4a4a, 0x2e, 0x27a7a7a, 0x27a7a7a, 0x7a7a4, 0x7a7a4, 0x7a7a4, 
-  0x7a7a4, 0x7a7a4, 0x7a7a4, (1U<<31) | 5796, (1U<<31) | 6003, (1U<<31) | 5997, (1U<<31) | 5765, 0x7a4, 
-  0x7a5, (1U<<31) | 5796, (1U<<31) | 5765, 0x7a4, 0x7a5, 0x2e0, 0x7a7a7a, 0x7a7a7a, 
-  0x7a7a7a, 0x7a7a7a, 0x7a4, (1U<<31) | 801, 0x7a7a, 0x7a7a, 0x7a7a, 0x7a7a, 
+  0x7a7a4, 0x7a7a4, 0x7a7a4, (1U<<31) | 6233, (1U<<31) | 6477, (1U<<31) | 6471, (1U<<31) | 6066, 0x7a4, 
+  0x7a5, (1U<<31) | 6233, (1U<<31) | 6066, 0x7a4, 0x7a5, 0x2e0, 0x7a7a7a, 0x7a7a7a, 
+  0x7a7a7a, 0x7a7a7a, 0x7a4, (1U<<31) | 796, 0x7a7a, 0x7a7a, 0x7a7a, 0x7a7a, 
   0x0, 0x2e0, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 
   0x2e0, 0x2898989, 0x2898989, 0x89894, 0x89894, 0x89894, 0x89894, 0x89894, 
   0x89894, 0x894a, 0x897a, 0x7a4a, 0x894, 0x895, 0x897a7a, 0x894a, 
   0x7a4a, 0x894, 0x895, 0x0, 0x2e2c2c0, 0x898989, 0x898989, 0x0, 
-  0x898989, 0x898989, 0x894, 0x4a4a3b, 0x3b3b2c, 0x3b3b2c, 0x0, 0x3b3b4a, 
-  0x2c4, 0x3b3b3b, 0x3b3b3b, 0x2c2c59, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x44a4a, 
-  0x45959, 0x43b3b, 0x4a4a4a, 0x3b3b3b, 0x44a4a, 0x43b3b, 0x4a4a4a, 0x595959, 
-  0x3b3b3b, 0x44a4a, 0x45959, 0x43b3b, 0x89894, 0x89894, 0x89894, 0x89894, 
-  0x89894, 0x89894, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 
-  0x2e2c, 0x442e0, 0x440, (1U<<31) | 5787, 0x7a7a7a7a, 0x2898989, 0x27a7a7a, 0x27a7a7a, 
-  0x22c2c3b, 0x4a4a3b, 0x2c2c2c2c, 0x3b3b, 0x59594, 0x59594, 0x59594, 0x48989, 
-  0x47a7a, 0x4898989, 0x47a7a7a, 0x344, 0x444, 0x244, 0x555, 0x242c42c4, 
-  0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, (1U<<31) | 266, 0x22c2c4, 0x22c2c4, 
-  0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c2c, 0x2c5959, 0x225959, 0x595959, 
-  0x22595959, (1U<<31) | 6009, (1U<<31) | 6009, (1U<<31) | 6009, (1U<<31) | 6012, 0x4a4a4a, (1U<<31) | 6012, 0x3b3b3b, 
-  (1U<<31) | 6012, 0x3b3b3b, (1U<<31) | 6012, 0x4a4a4a, (1U<<31) | 6012, 0x3b3b3b, (1U<<31) | 6012, 0x3b3b3b, 
-  (1U<<31) | 6012, 0x2c2c3b, (1U<<31) | 6012, 0x3b3b3b, (1U<<31) | 6012, 0x2c2c2c, (1U<<31) | 6012, 0x2c2c2c, 
-  (1U<<31) | 6012, 0x4a4a4a, (1U<<31) | 6012, 0x3b3b3b, (1U<<31) | 3189, (1U<<31) | 4965, 0x444, 0x555, 
-  0x4442, 0x2e0, 0x4442, 0x3b7a, 0x3b7b, 0x47a3b, 0x47b3b, 0x22c2c2c, 
-  0x22d2d2d, (1U<<31) | 258, 0x22c2c2c, 0x22d2d2d, (1U<<31) | 258, 0x2c2c2c, 0x2d2d2d, (1U<<31) | 779, 
-  0x0, 0x0, 0x40, 0x50, 0x40, 0x50, 0x40, 0x2e40, 
-  0x2e50, 0x2e40, 0x2e50, 0x20, 0x4, 0x0, 0x45, 0x8989, 
-  0x8a8a, 0x7a7a, 0x7b7b, 0x8989, 0x7a7a, (1U<<31) | 416, (1U<<31) | 450, (1U<<31) | 356, 
-  (1U<<31) | 378, 0x2c4a, 0x2c59, 0x2c3b, 0x4a59, 0x2c4a, 0x2c59, 0x2c3b, 
-  0x4a59, 0x3b4a, 0x3b59, 0x3b4a, 0x3b59, 0x2c3b, 0x4a59, 0x3b4a, 
-  0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 0x4a3b3b4a, 0x3b3b3b3b, 
-  0x4a3b3b4a, 0x3b3b3b3b, 0x4a3b3b4a, 0x4a3b3b4a, 0x2c2c2c2c, 0x2c2c2c, 0x4a4a4a, 0x595959, 
-  0x3b3b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x442e0, 0x442e0, 0x442e0, 
+  0x898989, 0x898989, 0x894, 0x4a4a3b, 0x3b3b2c, 0x3b3b2c, 0x0, 0x2c2c2c, 
+  0x3b3b3b, 0x3b3b4a, 0x2c4, 0x3b3b3b, 0x3b3b3b, 0x2c2c59, 0x4a4a4a, 0x595959, 
+  0x3b3b3b, 0x44a4a, 0x45959, 0x43b3b, 0x4a4a4a, 0x3b3b3b, 0x44a4a, 0x43b3b, 
+  0x4a4a4a, 0x595959, 0x3b3b3b, 0x44a4a, 0x45959, 0x43b3b, 0x89894, 0x89894, 
+  0x89894, 0x89894, 0x89894, 0x89894, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 
+  0x898989, 0x7a7a7a, 0x2e2c, 0x442e0, 0x440, (1U<<31) | 6224, 0x7a7a7a7a, 0x2898989, 
+  0x27a7a7a, 0x27a7a7a, 0x22c2c3b, 0x4a4a3b, 0x2c2c2c2c, 0x3b3b, 0x59594, 0x59594, 
+  0x59594, 0x48989, 0x47a7a, 0x4898989, 0x47a7a7a, 0x344, 0x444, 0x244, 
+  0x555, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, (1U<<31) | 261, 
+  0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c2c, 0x2c5959, 
+  0x225959, 0x595959, 0x22595959, (1U<<31) | 6490, (1U<<31) | 6490, (1U<<31) | 6490, (1U<<31) | 6493, 0x4a4a4a, 
+  (1U<<31) | 6493, 0x3b3b3b, (1U<<31) | 6493, 0x3b3b3b, (1U<<31) | 6493, 0x4a4a4a, (1U<<31) | 6493, 0x3b3b3b, 
+  (1U<<31) | 6493, 0x3b3b3b, (1U<<31) | 6493, 0x2c2c3b, (1U<<31) | 6493, 0x3b3b3b, (1U<<31) | 6493, 0x2c2c2c, 
+  (1U<<31) | 6493, 0x2c2c2c, (1U<<31) | 6493, 0x4a4a4a, (1U<<31) | 6493, 0x3b3b3b, (1U<<31) | 3081, (1U<<31) | 5236, 
+  0x444, 0x555, 0x4442, 0x2e0, 0x4442, 0x3b7a, 0x3b7b, 0x47a3b, 
+  0x47b3b, 0x22c2c2c, 0x22d2d2d, (1U<<31) | 253, 0x22c2c2c, 0x22d2d2d, (1U<<31) | 253, 0x2c2c2c, 
+  0x2d2d2d, (1U<<31) | 774, 0x0, 0x0, 0x40, 0x50, 0x40, 0x50, 
+  0x40, 0x2e40, 0x2e50, 0x2e40, 0x2e50, 0x20, 0x4, 0x0, 
+  0x45, 0x8989, 0x8a8a, 0x7a7a, 0x7b7b, 0x8989, 0x7a7a, (1U<<31) | 411, 
+  (1U<<31) | 445, (1U<<31) | 351, (1U<<31) | 373, 0x2c4a, 0x2c59, 0x2c3b, 0x4a59, 0x2c4a, 
+  0x2c59, 0x2c3b, 0x4a59, 0x3b4a, 0x3b59, 0x3b4a, 0x3b59, 0x2c3b, 
+  0x4a59, 0x3b4a, 0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 
+  0x4a3b3b4a, 0x3b3b3b3b, 0x4a3b3b4a, 0x3b3b3b3b, 0x4a3b3b4a, 0x4a3b3b4a, 0x2c2c2c2c, 0x2c2c2c, 
+  0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x442e0, 
   0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 
-  0x442e0, 0x4440, 0x4, 0x44, 0x2e2e, 0x44f0, 0x0, 0x4f0, 
-  0x40, 0x4444, (1U<<31) | 3346, 0x4f0, 0x4f0, 0x4f4, 0x4f0, 0x4, 
-  0x4, 0x4, 0x44, 0x44f, 0xcf4f, 0x4f4, 0x4f4, 0x4f4, 
-  0x2e4f0, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x44f4, 0x4f4, 0x4f0, 
-  0x4f0, 0x44f0, 0x44f0, 0x44f4, 0x44f0, 0x4f4, 0x44f0, 0xcf4f0, 
-  0x44f0, 0x2e4f0, 0x440, 0x44f0, 0x44f0, 0xcf4f0, 0x40, 0x44f0, 
-  0x2e4f0, 0x444, 0x0, 0x4f0, 0x4f4, 0x4f4, 0x2e, 0x444, 0
+  0x442e0, 0x442e0, 0x442e0, 0x4440, 0x4, 0x44, 0x2e2e, 0x44f0, 
+  0x0, 0x4f0, 0x40, 0x4444, (1U<<31) | 3273, 0x4f0, 0x4f0, 0x4f4, 
+  0x4f0, 0x4, 0x4, 0x4, 0x44, 0x44f, 0xcf4f, 0x4f4, 
+  0x4f4, 0x4f4, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x44f4, 
+  0x4f4, 0x4f0, 0x4f0, 0x44f0, 0x44f0, 0x44f4, 0x44f0, 0x4f4, 
+  0x44f0, 0xcf4f0, 0x44f0, 0x2e4f0, 0x440, 0x44f0, 0x44f0, 0xcf4f0, 
+  0x40, 0x44f0, 0x2e4f0, 0x444, 0x0, 0x4f0, 0x4f4, 0x4f4, 
+  0x2e, 0x444, 0
 };
 
 static const unsigned char IIT_LongEncodingTable[] = {
-  /* 0 */ 0, 4, 4, 15, 0, 15, 0, 15, 0, 15, 0, 1, 1, 0,
-  /* 14 */ 0, 4, 4, 15, 3, 15, 3, 1, 1, 0,
-  /* 24 */ 4, 27, 2, 4, 4, 4, 4, 1, 4, 1, 1, 0,
-  /* 36 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 4, 4, 1, 1, 0,
-  /* 50 */ 0, 15, 2, 10, 4, 4, 4, 1, 1, 0,
-  /* 60 */ 21, 15, 2, 1, 15, 2, 15, 2, 1, 0,
-  /* 70 */ 15, 2, 15, 2, 15, 2, 15, 2, 1, 0,
-  /* 80 */ 15, 3, 15, 3, 15, 3, 31, 3, 1, 0,
-  /* 90 */ 0, 15, 3, 33, 3, 31, 3, 1, 0,
-  /* 99 */ 0, 15, 3, 34, 1, 0, 4, 31, 3, 1, 0,
-  /* 110 */ 0, 15, 3, 15, 12, 4, 31, 3, 1, 0,
-  /* 120 */ 15, 1, 15, 12, 15, 1, 4, 4, 1, 0,
-  /* 130 */ 15, 1, 15, 1, 15, 1, 4, 4, 4, 1, 0,
-  /* 141 */ 7, 27, 3, 7, 7, 4, 4, 1, 0,
-  /* 150 */ 21, 1, 5, 1, 0,
-  /* 155 */ 21, 15, 1, 31, 1, 1, 15, 1, 15, 1, 0,
+  /* 0 */ 4, 27, 2, 4, 4, 4, 4, 1, 4, 1, 1, 0,
+  /* 12 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 4, 4, 1, 1, 0,
+  /* 26 */ 0, 15, 0, 10, 4, 4, 4, 1, 1, 0,
+  /* 36 */ 0, 4, 4, 15, 3, 15, 7, 1, 1, 0,
+  /* 46 */ 0, 4, 4, 15, 0, 15, 7, 15, 7, 15, 7, 1, 1, 0,
+  /* 60 */ 21, 1, 15, 1, 1, 0,
+  /* 66 */ 0, 15, 3, 34, 1, 0, 4, 31, 3, 1, 0,
+  /* 77 */ 0, 15, 3, 15, 12, 4, 31, 3, 1, 0,
+  /* 87 */ 15, 3, 15, 7, 15, 7, 31, 3, 1, 0,
+  /* 97 */ 0, 15, 3, 33, 7, 31, 3, 1, 0,
+  /* 106 */ 15, 1, 15, 7, 15, 7, 4, 4, 4, 1, 0,
+  /* 117 */ 15, 1, 15, 7, 10, 4, 4, 4, 1, 0,
+  /* 127 */ 7, 27, 3, 7, 7, 4, 4, 1, 0,
+  /* 136 */ 15, 1, 15, 12, 15, 7, 4, 4, 1, 0,
+  /* 146 */ 21, 15, 2, 1, 15, 7, 15, 7, 1, 0,
+  /* 156 */ 15, 2, 15, 7, 15, 7, 15, 7, 1, 0,
   /* 166 */ 0, 19, 15, 1, 0,
   /* 171 */ 16, 1, 16, 1, 16, 1, 0,
   /* 178 */ 4, 16, 1, 16, 1, 0,
   /* 184 */ 0, 15, 4, 15, 12, 15, 17, 1, 0,
   /* 193 */ 2, 18, 1, 0,
-  /* 197 */ 15, 1, 25, 1, 0,
-  /* 202 */ 36, 1, 36, 1, 36, 1, 0,
-  /* 209 */ 21, 12, 4, 36, 1, 12, 4, 12, 4, 36, 1, 0,
-  /* 221 */ 12, 4, 12, 4, 12, 4, 36, 1, 0,
-  /* 230 */ 37, 1, 37, 1, 37, 1, 0,
-  /* 237 */ 21, 13, 4, 37, 1, 13, 4, 13, 4, 37, 1, 0,
-  /* 249 */ 13, 4, 13, 4, 13, 4, 37, 1, 0,
-  /* 258 */ 16, 2, 16, 2, 16, 2, 2, 0,
-  /* 266 */ 12, 2, 12, 2, 4, 12, 2, 4, 2, 0,
-  /* 276 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 0,
-  /* 287 */ 11, 7, 11, 7, 11, 7, 11, 4, 4, 2, 0,
-  /* 298 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 0,
-  /* 309 */ 10, 8, 10, 8, 10, 8, 10, 5, 4, 2, 0,
-  /* 320 */ 10, 4, 10, 4, 14, 2, 10, 4, 10, 4, 2, 0,
-  /* 332 */ 10, 4, 10, 4, 14, 2, 9, 5, 10, 4, 2, 0,
-  /* 344 */ 10, 4, 10, 4, 14, 2, 10, 5, 10, 4, 2, 0,
-  /* 356 */ 10, 7, 10, 7, 10, 7, 10, 4, 2, 0,
-  /* 366 */ 11, 4, 11, 4, 14, 2, 11, 4, 11, 4, 2, 0,
-  /* 378 */ 11, 7, 11, 7, 11, 7, 11, 4, 2, 0,
-  /* 388 */ 27, 4, 2, 0,
-  /* 392 */ 9, 5, 9, 5, 14, 2, 10, 4, 9, 5, 2, 0,
-  /* 404 */ 9, 5, 9, 5, 14, 2, 9, 5, 9, 5, 2, 0,
-  /* 416 */ 9, 8, 9, 8, 9, 8, 9, 5, 2, 0,
-  /* 426 */ 10, 5, 10, 5, 14, 2, 10, 4, 10, 5, 2, 0,
-  /* 438 */ 10, 5, 10, 5, 14, 2, 10, 5, 10, 5, 2, 0,
-  /* 450 */ 10, 8, 10, 8, 10, 8, 10, 5, 2, 0,
-  /* 460 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 0,
-  /* 471 */ 10, 7, 10, 7, 14, 2, 10, 4, 10, 7, 2, 0,
-  /* 483 */ 10, 7, 10, 7, 14, 2, 9, 5, 10, 7, 2, 0,
-  /* 495 */ 10, 7, 10, 7, 14, 2, 10, 5, 10, 7, 2, 0,
-  /* 507 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 0,
-  /* 517 */ 11, 7, 11, 7, 11, 7, 4, 11, 7, 2, 0,
-  /* 528 */ 11, 7, 11, 7, 14, 2, 11, 4, 11, 7, 2, 0,
-  /* 540 */ 11, 7, 11, 7, 11, 7, 11, 7, 2, 0,
-  /* 550 */ 27, 7, 2, 0,
-  /* 554 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 0,
-  /* 565 */ 9, 8, 9, 8, 14, 2, 10, 4, 9, 8, 2, 0,
-  /* 577 */ 9, 8, 9, 8, 14, 2, 9, 5, 9, 8, 2, 0,
-  /* 589 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 0,
-  /* 599 */ 10, 8, 10, 8, 10, 8, 4, 10, 8, 2, 0,
-  /* 610 */ 10, 8, 10, 8, 14, 2, 10, 4, 10, 8, 2, 0,
-  /* 622 */ 10, 8, 10, 8, 14, 2, 10, 5, 10, 8, 2, 0,
-  /* 634 */ 10, 8, 10, 8, 10, 8, 10, 8, 2, 0,
-  /* 644 */ 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 0,
-  /* 659 */ 21, 12, 2, 4, 12, 2, 12, 2, 0,
-  /* 668 */ 21, 12, 2, 4, 12, 2, 0,
-  /* 675 */ 18, 4, 14, 2, 14, 2, 14, 2, 0,
-  /* 684 */ 21, 4, 14, 2, 14, 2, 4, 14, 2, 0,
-  /* 694 */ 21, 5, 14, 2, 14, 2, 4, 14, 2, 0,
-  /* 704 */ 21, 4, 14, 2, 14, 2, 4, 4, 14, 2, 0,
-  /* 715 */ 21, 5, 14, 2, 14, 2, 4, 4, 14, 2, 0,
-  /* 726 */ 14, 2, 14, 2, 4, 4, 4, 14, 2, 0,
-  /* 736 */ 21, 4, 4, 14, 2, 0,
-  /* 742 */ 14, 2, 14, 2, 4, 4, 5, 14, 2, 0,
-  /* 752 */ 21, 5, 5, 14, 2, 0,
-  /* 758 */ 0, 17, 17, 14, 2, 0,
-  /* 764 */ 14, 2, 18, 14, 2, 0,
-  /* 770 */ 16, 1, 16, 2, 16, 2, 0,
-  /* 777 */ 16, 2, 16, 2, 16, 2, 16, 2, 0,
-  /* 786 */ 13, 3, 16, 2, 16, 2, 0,
-  /* 793 */ 11, 5, 16, 2, 16, 2, 0,
-  /* 800 */ 17, 17, 17, 2, 0,
-  /* 805 */ 0, 5, 4, 4, 4, 3, 3, 3, 3, 0,
-  /* 815 */ 21, 12, 2, 4, 11, 3, 11, 3, 0,
-  /* 824 */ 21, 11, 3, 4, 11, 3, 11, 3, 0,
-  /* 833 */ 21, 11, 3, 4, 11, 3, 0,
-  /* 840 */ 16, 2, 13, 3, 13, 3, 0,
-  /* 847 */ 15, 3, 33, 3, 31, 3, 1, 15, 3, 0,
-  /* 857 */ 15, 3, 34, 1, 0, 4, 31, 3, 1, 15, 3, 0,
-  /* 869 */ 15, 3, 15, 12, 4, 31, 3, 1, 15, 3, 0,
-  /* 880 */ 15, 3, 15, 3, 12, 2, 12, 2, 12, 2, 12, 2, 15, 3, 0,
-  /* 895 */ 15, 3, 15, 3, 12, 2, 12, 2, 12, 2, 15, 3, 0,
-  /* 908 */ 15, 3, 15, 3, 12, 2, 12, 2, 15, 3, 0,
-  /* 919 */ 15, 3, 25, 3, 0,
-  /* 924 */ 15, 3, 25, 3, 25, 3, 0,
-  /* 931 */ 15, 3, 26, 3, 0,
-  /* 936 */ 15, 3, 26, 3, 26, 3, 0,
-  /* 943 */ 9, 5, 9, 5, 14, 2, 10, 4, 9, 1, 4, 0,
-  /* 955 */ 9, 8, 9, 8, 14, 2, 10, 4, 9, 1, 4, 0,
-  /* 967 */ 10, 4, 10, 4, 14, 2, 9, 5, 9, 1, 4, 0,
-  /* 979 */ 9, 5, 9, 5, 14, 2, 9, 5, 9, 1, 4, 0,
-  /* 991 */ 10, 7, 10, 7, 14, 2, 9, 5, 9, 1, 4, 0,
-  /* 1003 */ 9, 8, 9, 8, 14, 2, 9, 5, 9, 1, 4, 0,
-  /* 1015 */ 10, 4, 10, 4, 14, 2, 10, 4, 10, 1, 4, 0,
-  /* 1027 */ 10, 5, 10, 5, 14, 2, 10, 4, 10, 1, 4, 0,
-  /* 1039 */ 10, 7, 10, 7, 14, 2, 10, 4, 10, 1, 4, 0,
-  /* 1051 */ 10, 8, 10, 8, 14, 2, 10, 4, 10, 1, 4, 0,
-  /* 1063 */ 10, 4, 10, 4, 14, 2, 10, 5, 10, 1, 4, 0,
-  /* 1075 */ 10, 5, 10, 5, 14, 2, 10, 5, 10, 1, 4, 0,
-  /* 1087 */ 10, 7, 10, 7, 14, 2, 10, 5, 10, 1, 4, 0,
-  /* 1099 */ 10, 8, 10, 8, 14, 2, 10, 5, 10, 1, 4, 0,
-  /* 1111 */ 11, 4, 11, 4, 14, 2, 11, 4, 11, 1, 4, 0,
-  /* 1123 */ 11, 5, 11, 5, 14, 2, 11, 4, 11, 1, 4, 0,
-  /* 1135 */ 11, 7, 11, 7, 14, 2, 11, 4, 11, 1, 4, 0,
-  /* 1147 */ 11, 8, 11, 8, 14, 2, 11, 4, 11, 1, 4, 0,
-  /* 1159 */ 11, 4, 11, 4, 14, 2, 11, 5, 11, 1, 4, 0,
-  /* 1171 */ 11, 5, 11, 5, 14, 2, 11, 5, 11, 1, 4, 0,
-  /* 1183 */ 11, 7, 11, 7, 14, 2, 11, 5, 11, 1, 4, 0,
-  /* 1195 */ 11, 8, 11, 8, 14, 2, 11, 5, 11, 1, 4, 0,
-  /* 1207 */ 12, 4, 12, 4, 14, 2, 12, 4, 12, 1, 4, 0,
-  /* 1219 */ 12, 7, 12, 7, 14, 2, 12, 4, 12, 1, 4, 0,
-  /* 1231 */ 15, 1, 25, 1, 4, 0,
-  /* 1237 */ 12, 4, 12, 4, 36, 1, 4, 0,
-  /* 1245 */ 13, 4, 13, 4, 37, 1, 4, 0,
-  /* 1253 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 4, 0,
-  /* 1265 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 4, 0,
-  /* 1277 */ 11, 8, 11, 8, 11, 8, 11, 5, 4, 2, 4, 0,
-  /* 1289 */ 10, 4, 10, 4, 14, 2, 10, 4, 2, 4, 0,
-  /* 1300 */ 9, 5, 9, 5, 14, 2, 10, 4, 2, 4, 0,
-  /* 1311 */ 10, 5, 10, 5, 14, 2, 10, 4, 2, 4, 0,
-  /* 1322 */ 10, 7, 10, 7, 14, 2, 10, 4, 2, 4, 0,
-  /* 1333 */ 9, 8, 9, 8, 14, 2, 10, 4, 2, 4, 0,
-  /* 1344 */ 10, 8, 10, 8, 14, 2, 10, 4, 2, 4, 0,
-  /* 1355 */ 11, 4, 11, 4, 14, 2, 11, 4, 2, 4, 0,
-  /* 1366 */ 11, 5, 11, 5, 14, 2, 11, 4, 2, 4, 0,
-  /* 1377 */ 11, 7, 11, 7, 14, 2, 11, 4, 2, 4, 0,
-  /* 1388 */ 11, 8, 11, 8, 14, 2, 11, 4, 2, 4, 0,
-  /* 1399 */ 10, 4, 10, 4, 14, 2, 9, 5, 2, 4, 0,
-  /* 1410 */ 9, 5, 9, 5, 14, 2, 9, 5, 2, 4, 0,
-  /* 1421 */ 10, 7, 10, 7, 14, 2, 9, 5, 2, 4, 0,
-  /* 1432 */ 9, 8, 9, 8, 14, 2, 9, 5, 2, 4, 0,
-  /* 1443 */ 10, 4, 10, 4, 14, 2, 10, 5, 2, 4, 0,
-  /* 1454 */ 10, 5, 10, 5, 14, 2, 10, 5, 2, 4, 0,
-  /* 1465 */ 10, 7, 10, 7, 14, 2, 10, 5, 2, 4, 0,
-  /* 1476 */ 10, 8, 10, 8, 14, 2, 10, 5, 2, 4, 0,
-  /* 1487 */ 11, 4, 11, 4, 14, 2, 11, 5, 2, 4, 0,
-  /* 1498 */ 11, 5, 11, 5, 14, 2, 11, 5, 2, 4, 0,
-  /* 1509 */ 11, 7, 11, 7, 14, 2, 11, 5, 2, 4, 0,
-  /* 1520 */ 11, 8, 11, 8, 14, 2, 11, 5, 2, 4, 0,
-  /* 1531 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 4, 0,
-  /* 1543 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 0,
-  /* 1554 */ 10, 7, 10, 7, 9, 8, 10, 7, 2, 4, 0,
-  /* 1565 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 4, 0,
-  /* 1577 */ 9, 8, 9, 8, 10, 7, 9, 8, 2, 4, 0,
-  /* 1588 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 0,
-  /* 1599 */ 11, 8, 11, 8, 11, 8, 4, 11, 8, 2, 4, 0,
-  /* 1611 */ 11, 8, 11, 8, 11, 8, 11, 8, 2, 4, 0,
-  /* 1622 */ 12, 2, 12, 2, 12, 2, 12, 2, 4, 0,
-  /* 1632 */ 21, 12, 2, 4, 12, 2, 12, 2, 12, 2, 4, 0,
-  /* 1644 */ 21, 12, 2, 4, 12, 2, 12, 2, 4, 0,
-  /* 1654 */ 12, 2, 9, 5, 9, 5, 12, 2, 4, 0,
-  /* 1664 */ 15, 1, 15, 1, 14, 2, 14, 2, 4, 0,
-  /* 1674 */ 15, 4, 15, 4, 14, 2, 14, 2, 4, 0,
-  /* 1684 */ 21, 4, 14, 2, 14, 2, 4, 0,
-  /* 1692 */ 21, 5, 14, 2, 14, 2, 4, 0,
-  /* 1700 */ 13, 3, 16, 2, 16, 2, 4, 0,
-  /* 1708 */ 12, 7, 12, 7, 12, 7, 12, 4, 4, 3, 4, 0,
-  /* 1720 */ 12, 4, 12, 4, 14, 2, 12, 4, 3, 4, 0,
-  /* 1731 */ 12, 7, 12, 7, 14, 2, 12, 4, 3, 4, 0,
-  /* 1742 */ 12, 7, 12, 7, 12, 7, 4, 12, 7, 3, 4, 0,
-  /* 1754 */ 12, 7, 12, 7, 12, 7, 12, 7, 3, 4, 0,
-  /* 1765 */ 11, 3, 11, 3, 11, 3, 11, 3, 4, 0,
-  /* 1775 */ 21, 11, 3, 4, 11, 3, 11, 3, 11, 3, 4, 0,
-  /* 1787 */ 21, 11, 3, 4, 11, 3, 11, 3, 4, 0,
-  /* 1797 */ 21, 3, 4, 0,
-  /* 1801 */ 15, 3, 26, 3, 4, 0,
-  /* 1807 */ 15, 0, 4, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1820 */ 15, 0, 4, 4, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1834 */ 15, 0, 4, 7, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1848 */ 15, 0, 4, 4, 7, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1863 */ 15, 0, 4, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1878 */ 15, 0, 4, 4, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1894 */ 15, 0, 4, 7, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1910 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1927 */ 15, 0, 4, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1944 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1962 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1980 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 1999 */ 15, 0, 4, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2018 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2038 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2058 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2079 */ 15, 0, 4, 15, 10, 7, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2095 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2112 */ 15, 0, 4, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2127 */ 15, 0, 4, 4, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2143 */ 15, 0, 4, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2160 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2178 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2196 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2215 */ 15, 0, 4, 15, 10, 7, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2233 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2252 */ 15, 0, 4, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2269 */ 15, 0, 4, 4, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2287 */ 15, 0, 4, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2306 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2326 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2346 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2367 */ 15, 0, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2390 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2414 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2438 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2463 */ 15, 0, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2483 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2504 */ 15, 0, 4, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2523 */ 15, 0, 4, 4, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2543 */ 15, 0, 4, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2564 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2586 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2608 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2631 */ 15, 0, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2656 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2682 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2708 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2735 */ 15, 0, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2764 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2794 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2824 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2855 */ 15, 0, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2877 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2900 */ 15, 0, 4, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2921 */ 15, 0, 4, 4, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2943 */ 15, 0, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2970 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 2998 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 3026 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 3055 */ 15, 0, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 3086 */ 15, 0, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 3118 */ 15, 0, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 3150 */ 15, 0, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
-  /* 3183 */ 21, 4, 1, 4, 4, 0,
-  /* 3189 */ 21, 2, 4, 2, 4, 4, 0,
-  /* 3196 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 4, 0,
-  /* 3208 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 4, 0,
-  /* 3220 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 15, 3, 15, 3, 4, 4, 0,
-  /* 3242 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 15, 3, 4, 4, 0,
-  /* 3260 */ 21, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 4, 4, 0,
-  /* 3274 */ 10, 4, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
-  /* 3288 */ 10, 7, 10, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
-  /* 3302 */ 0, 5, 4, 4, 4, 4, 4, 4, 4, 0,
-  /* 3312 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 4, 0,
-  /* 3323 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 0,
-  /* 3333 */ 15, 1, 15, 1, 15, 1, 10, 4, 4, 4, 4, 4, 0,
-  /* 3346 */ 21, 4, 4, 4, 4, 4, 0,
-  /* 3353 */ 15, 1, 15, 1, 15, 1, 10, 4, 4, 4, 4, 0,
-  /* 3365 */ 23, 3, 3, 3, 3, 5, 4, 4, 4, 0,
-  /* 3375 */ 21, 3, 3, 5, 4, 4, 4, 0,
-  /* 3383 */ 23, 4, 4, 4, 4, 5, 4, 4, 4, 0,
-  /* 3393 */ 21, 4, 4, 5, 4, 4, 4, 0,
-  /* 3401 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 4, 0,
-  /* 3412 */ 21, 5, 5, 5, 4, 4, 4, 0,
-  /* 3420 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 4, 0,
-  /* 3431 */ 23, 7, 7, 7, 7, 5, 4, 4, 4, 0,
-  /* 3441 */ 15, 1, 15, 1, 15, 1, 15, 9, 11, 4, 4, 4, 0,
-  /* 3454 */ 15, 0, 4, 15, 9, 11, 4, 4, 4, 0,
-  /* 3464 */ 0, 15, 2, 4, 15, 9, 11, 4, 4, 4, 0,
-  /* 3475 */ 15, 1, 15, 1, 15, 1, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3490 */ 15, 0, 4, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3502 */ 0, 15, 2, 4, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3515 */ 15, 1, 15, 1, 15, 1, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3532 */ 15, 0, 4, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3546 */ 0, 15, 2, 4, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3561 */ 15, 1, 15, 1, 15, 1, 15, 9, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3580 */ 15, 0, 4, 15, 9, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3596 */ 0, 15, 2, 4, 15, 9, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
-  /* 3613 */ 16, 4, 16, 4, 16, 4, 4, 4, 0,
-  /* 3622 */ 23, 3, 3, 3, 3, 5, 4, 4, 0,
-  /* 3631 */ 21, 3, 3, 5, 4, 4, 0,
-  /* 3638 */ 23, 4, 4, 4, 4, 5, 4, 4, 0,
-  /* 3647 */ 21, 4, 4, 5, 4, 4, 0,
-  /* 3654 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 0,
-  /* 3664 */ 21, 5, 5, 5, 4, 4, 0,
-  /* 3671 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 0,
-  /* 3681 */ 23, 7, 7, 7, 7, 5, 4, 4, 0,
-  /* 3690 */ 0, 14, 2, 10, 1, 10, 4, 10, 4, 4, 0,
-  /* 3701 */ 0, 14, 2, 2, 10, 4, 10, 4, 4, 0,
-  /* 3711 */ 21, 10, 4, 4, 10, 4, 10, 4, 4, 0,
-  /* 3721 */ 21, 10, 4, 4, 10, 4, 10, 4, 10, 4, 4, 0,
-  /* 3733 */ 10, 4, 10, 4, 10, 4, 10, 4, 4, 0,
-  /* 3743 */ 0, 14, 2, 9, 1, 9, 5, 10, 4, 4, 0,
-  /* 3754 */ 0, 14, 2, 2, 9, 5, 10, 4, 4, 0,
-  /* 3764 */ 0, 14, 2, 10, 1, 10, 5, 10, 4, 4, 0,
-  /* 3775 */ 0, 14, 2, 2, 10, 5, 10, 4, 4, 0,
-  /* 3785 */ 0, 14, 2, 11, 1, 11, 4, 11, 4, 4, 0,
-  /* 3796 */ 0, 14, 2, 2, 11, 4, 11, 4, 4, 0,
-  /* 3806 */ 11, 4, 11, 4, 11, 4, 11, 4, 4, 0,
-  /* 3816 */ 0, 14, 2, 11, 1, 11, 5, 11, 4, 4, 0,
-  /* 3827 */ 0, 14, 2, 2, 11, 5, 11, 4, 4, 0,
-  /* 3837 */ 0, 15, 4, 15, 11, 15, 11, 4, 4, 0,
-  /* 3847 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 4, 4, 0,
-  /* 3859 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 4, 4, 0,
-  /* 3873 */ 36, 1, 36, 1, 12, 4, 4, 0,
-  /* 3881 */ 0, 14, 2, 12, 1, 12, 4, 12, 4, 4, 0,
-  /* 3892 */ 0, 14, 2, 3, 12, 4, 12, 4, 4, 0,
-  /* 3902 */ 21, 12, 4, 12, 4, 12, 4, 12, 4, 4, 0,
-  /* 3913 */ 13, 4, 13, 4, 12, 4, 12, 4, 4, 0,
-  /* 3923 */ 37, 1, 37, 1, 13, 4, 4, 0,
-  /* 3931 */ 21, 13, 4, 13, 4, 13, 4, 13, 4, 4, 0,
-  /* 3942 */ 16, 4, 16, 4, 13, 4, 13, 4, 4, 0,
-  /* 3952 */ 16, 4, 16, 4, 13, 4, 4, 0,
-  /* 3960 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
-  /* 3981 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
-  /* 3994 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 4, 0,
-  /* 4007 */ 13, 4, 13, 4, 16, 4, 4, 0,
-  /* 4015 */ 16, 4, 16, 4, 16, 4, 4, 0,
-  /* 4023 */ 17, 17, 4, 4, 0,
-  /* 4028 */ 15, 0, 18, 4, 4, 0,
-  /* 4034 */ 21, 4, 4, 0,
-  /* 4038 */ 23, 3, 3, 3, 3, 5, 4, 0,
-  /* 4046 */ 21, 3, 3, 5, 4, 0,
-  /* 4052 */ 23, 4, 4, 4, 4, 5, 4, 0,
-  /* 4060 */ 21, 4, 4, 5, 4, 0,
-  /* 4066 */ 23, 4, 4, 4, 4, 5, 5, 4, 0,
-  /* 4075 */ 21, 5, 4, 5, 5, 4, 0,
-  /* 4082 */ 21, 5, 5, 5, 4, 0,
-  /* 4088 */ 23, 7, 7, 7, 7, 5, 5, 4, 0,
-  /* 4097 */ 23, 7, 7, 7, 7, 5, 4, 0,
-  /* 4105 */ 0, 14, 2, 9, 1, 10, 4, 9, 5, 4, 0,
-  /* 4116 */ 0, 14, 2, 2, 10, 4, 9, 5, 4, 0,
-  /* 4126 */ 0, 14, 2, 9, 1, 9, 5, 9, 5, 4, 0,
-  /* 4137 */ 0, 14, 2, 2, 9, 5, 9, 5, 4, 0,
-  /* 4147 */ 9, 5, 9, 5, 9, 5, 9, 5, 4, 0,
-  /* 4157 */ 0, 14, 2, 10, 1, 10, 4, 10, 5, 4, 0,
-  /* 4168 */ 0, 14, 2, 2, 10, 4, 10, 5, 4, 0,
-  /* 4178 */ 0, 14, 2, 10, 1, 10, 5, 10, 5, 4, 0,
-  /* 4189 */ 0, 14, 2, 2, 10, 5, 10, 5, 4, 0,
-  /* 4199 */ 10, 5, 10, 5, 10, 5, 10, 5, 4, 0,
-  /* 4209 */ 0, 14, 2, 11, 1, 11, 4, 11, 5, 4, 0,
-  /* 4220 */ 0, 14, 2, 2, 11, 4, 11, 5, 4, 0,
-  /* 4230 */ 0, 14, 2, 11, 1, 11, 5, 11, 5, 4, 0,
-  /* 4241 */ 0, 14, 2, 2, 11, 5, 11, 5, 4, 0,
-  /* 4251 */ 11, 5, 11, 5, 11, 5, 11, 5, 4, 0,
-  /* 4261 */ 21, 5, 4, 0,
-  /* 4265 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 4, 0,
-  /* 4278 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0,
-  /* 4291 */ 21, 10, 4, 4, 10, 7, 4, 0,
-  /* 4299 */ 0, 14, 2, 10, 1, 10, 4, 10, 7, 4, 0,
-  /* 4310 */ 0, 14, 2, 2, 10, 4, 10, 7, 4, 0,
-  /* 4320 */ 0, 14, 2, 9, 1, 9, 5, 10, 7, 4, 0,
-  /* 4331 */ 0, 14, 2, 2, 9, 5, 10, 7, 4, 0,
-  /* 4341 */ 0, 14, 2, 10, 1, 10, 5, 10, 7, 4, 0,
-  /* 4352 */ 0, 14, 2, 2, 10, 5, 10, 7, 4, 0,
-  /* 4362 */ 0, 14, 2, 11, 1, 11, 4, 11, 7, 4, 0,
-  /* 4373 */ 0, 14, 2, 2, 11, 4, 11, 7, 4, 0,
-  /* 4383 */ 0, 14, 2, 11, 1, 11, 5, 11, 7, 4, 0,
-  /* 4394 */ 0, 14, 2, 2, 11, 5, 11, 7, 4, 0,
-  /* 4404 */ 0, 14, 2, 12, 1, 12, 4, 12, 7, 4, 0,
-  /* 4415 */ 0, 14, 2, 3, 12, 4, 12, 7, 4, 0,
-  /* 4425 */ 12, 7, 12, 7, 12, 7, 12, 7, 4, 0,
-  /* 4435 */ 21, 9, 5, 4, 9, 8, 4, 0,
-  /* 4443 */ 0, 14, 2, 9, 1, 10, 4, 9, 8, 4, 0,
-  /* 4454 */ 0, 14, 2, 2, 10, 4, 9, 8, 4, 0,
-  /* 4464 */ 0, 14, 2, 9, 1, 9, 5, 9, 8, 4, 0,
-  /* 4475 */ 0, 14, 2, 2, 9, 5, 9, 8, 4, 0,
-  /* 4485 */ 0, 14, 2, 10, 1, 10, 4, 10, 8, 4, 0,
-  /* 4496 */ 0, 14, 2, 2, 10, 4, 10, 8, 4, 0,
-  /* 4506 */ 0, 14, 2, 10, 1, 10, 5, 10, 8, 4, 0,
-  /* 4517 */ 0, 14, 2, 2, 10, 5, 10, 8, 4, 0,
-  /* 4527 */ 0, 14, 2, 11, 1, 11, 4, 11, 8, 4, 0,
-  /* 4538 */ 0, 14, 2, 2, 11, 4, 11, 8, 4, 0,
-  /* 4548 */ 0, 14, 2, 11, 1, 11, 5, 11, 8, 4, 0,
-  /* 4559 */ 0, 14, 2, 2, 11, 5, 11, 8, 4, 0,
-  /* 4569 */ 11, 8, 11, 8, 11, 8, 11, 8, 4, 0,
-  /* 4579 */ 21, 10, 4, 4, 10, 4, 0,
-  /* 4586 */ 21, 11, 3, 4, 10, 4, 10, 4, 0,
-  /* 4595 */ 21, 10, 4, 4, 10, 4, 10, 4, 0,
-  /* 4604 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 4, 0,
-  /* 4615 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 4, 0,
-  /* 4628 */ 12, 4, 36, 1, 12, 4, 0,
-  /* 4635 */ 0, 36, 1, 14, 2, 12, 4, 0,
-  /* 4643 */ 0, 14, 2, 36, 1, 4, 4, 12, 4, 0,
-  /* 4653 */ 36, 1, 36, 1, 12, 4, 12, 4, 0,
-  /* 4662 */ 12, 4, 36, 1, 12, 4, 12, 4, 0,
-  /* 4671 */ 13, 4, 36, 1, 12, 4, 12, 4, 0,
-  /* 4680 */ 0, 36, 1, 4, 4, 12, 4, 12, 4, 0,
-  /* 4690 */ 0, 36, 1, 4, 4, 13, 4, 12, 4, 0,
-  /* 4700 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 4, 0,
-  /* 4713 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 4, 0,
-  /* 4724 */ 21, 15, 3, 15, 3, 15, 12, 4, 0,
-  /* 4733 */ 13, 4, 37, 1, 13, 4, 0,
-  /* 4740 */ 0, 37, 1, 14, 2, 13, 4, 0,
-  /* 4748 */ 0, 14, 2, 36, 1, 4, 4, 13, 4, 0,
-  /* 4758 */ 0, 14, 2, 37, 1, 4, 4, 13, 4, 0,
-  /* 4768 */ 37, 1, 37, 1, 13, 4, 13, 4, 0,
-  /* 4777 */ 13, 4, 37, 1, 13, 4, 13, 4, 0,
-  /* 4786 */ 16, 4, 37, 1, 13, 4, 13, 4, 0,
-  /* 4795 */ 0, 37, 1, 4, 4, 13, 4, 13, 4, 0,
-  /* 4805 */ 16, 4, 16, 4, 13, 4, 13, 4, 0,
-  /* 4814 */ 0, 4, 4, 16, 4, 13, 4, 0,
-  /* 4822 */ 0, 37, 1, 4, 4, 16, 4, 13, 4, 0,
-  /* 4832 */ 16, 4, 16, 4, 13, 4, 0,
-  /* 4839 */ 0, 14, 20, 5, 15, 4, 0,
-  /* 4846 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
-  /* 4866 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
-  /* 4878 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 0,
-  /* 4890 */ 5, 19, 15, 4, 0,
-  /* 4895 */ 0, 14, 2, 37, 1, 4, 4, 16, 4, 0,
-  /* 4905 */ 0, 14, 2, 4, 4, 16, 4, 0,
-  /* 4913 */ 13, 4, 16, 4, 0,
-  /* 4918 */ 16, 4, 16, 4, 16, 4, 0,
-  /* 4925 */ 4, 17, 4, 0,
-  /* 4929 */ 0, 15, 4, 15, 12, 15, 17, 4, 0,
-  /* 4938 */ 17, 17, 4, 0,
-  /* 4942 */ 0, 18, 4, 0,
-  /* 4946 */ 21, 5, 1, 4, 5, 0,
-  /* 4952 */ 16, 4, 16, 4, 13, 4, 5, 0,
-  /* 4960 */ 21, 1, 5, 5, 0,
-  /* 4965 */ 21, 2, 5, 2, 5, 5, 0,
-  /* 4972 */ 21, 5, 4, 5, 5, 0,
-  /* 4978 */ 21, 5, 4, 5, 5, 5, 0,
-  /* 4985 */ 21, 10, 4, 4, 9, 5, 9, 5, 0,
-  /* 4994 */ 21, 9, 5, 4, 9, 5, 9, 5, 0,
-  /* 5003 */ 41, 41, 5, 0,
-  /* 5007 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 0,
-  /* 5019 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
-  /* 5069 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
-  /* 5119 */ 23, 4, 4, 4, 4, 5, 4, 7, 0,
-  /* 5128 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 0,
-  /* 5138 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 0,
-  /* 5148 */ 23, 7, 7, 7, 7, 5, 4, 7, 0,
-  /* 5157 */ 21, 7, 4, 7, 0,
-  /* 5162 */ 23, 4, 4, 4, 4, 5, 7, 0,
-  /* 5170 */ 23, 4, 4, 4, 4, 5, 5, 7, 0,
-  /* 5179 */ 23, 7, 7, 7, 7, 5, 5, 7, 0,
-  /* 5188 */ 23, 7, 7, 7, 7, 5, 7, 0,
-  /* 5196 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 0,
-  /* 5206 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 0,
-  /* 5217 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 0,
-  /* 5228 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 0,
-  /* 5238 */ 21, 7, 4, 7, 7, 0,
-  /* 5244 */ 23, 4, 4, 4, 4, 5, 7, 7, 0,
-  /* 5253 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 0,
-  /* 5263 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 0,
-  /* 5273 */ 23, 7, 7, 7, 7, 5, 7, 7, 0,
-  /* 5282 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 0,
-  /* 5293 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 0,
-  /* 5305 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 0,
-  /* 5317 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 0,
-  /* 5328 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 0,
-  /* 5338 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 0,
-  /* 5349 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 0,
-  /* 5360 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 0,
-  /* 5370 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 0,
-  /* 5382 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 0,
-  /* 5395 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 0,
-  /* 5408 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 0,
-  /* 5420 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 0,
-  /* 5431 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 0,
-  /* 5443 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 0,
-  /* 5455 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 0,
-  /* 5466 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 5480 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 5495 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 5510 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 5524 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 5537 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 5551 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 5565 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 5578 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 5590 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 5640 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 5690 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 5706 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 5723 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 5740 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 5756 */ 21, 10, 4, 4, 10, 7, 10, 7, 0,
-  /* 5765 */ 17, 10, 7, 0,
-  /* 5769 */ 9, 8, 9, 8, 9, 5, 9, 8, 0,
-  /* 5778 */ 21, 9, 5, 4, 9, 8, 9, 8, 0,
-  /* 5787 */ 9, 8, 9, 8, 9, 8, 9, 8, 0,
-  /* 5796 */ 17, 9, 8, 0,
-  /* 5800 */ 10, 8, 10, 8, 10, 5, 10, 8, 0,
-  /* 5809 */ 10, 8, 10, 8, 10, 8, 10, 8, 0,
-  /* 5818 */ 11, 8, 11, 8, 11, 5, 11, 8, 0,
-  /* 5827 */ 15, 3, 15, 3, 15, 11, 15, 11, 0,
-  /* 5836 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 0,
-  /* 5846 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 0,
-  /* 5858 */ 0, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 5868 */ 0, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 5880 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 5892 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 5902 */ 21, 15, 3, 15, 3, 15, 12, 0,
-  /* 5910 */ 0, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 5919 */ 0, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 5930 */ 0, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 5943 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 5964 */ 22, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 5981 */ 21, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 5994 */ 4, 17, 0,
-  /* 5997 */ 10, 7, 10, 7, 17, 0,
-  /* 6003 */ 9, 8, 17, 0,
-  /* 6007 */ 0, 14, 17, 17, 0,
-  /* 6012 */ 17, 17, 17, 0,
-  /* 6016 */ 15, 0, 18, 0,
-  /* 6020 */ 1, 18, 0,
-  /* 6023 */ 14, 2, 18, 0,
-  /* 6027 */ 15, 4, 18, 0,
-  /* 6031 */ 0, 19, 0,
-  /* 6034 */ 15, 1, 19, 0,
-  /* 6038 */ 1, 14, 2, 19, 0,
-  /* 6043 */ 21, 14, 2, 1, 14, 2, 4, 19, 0,
-  /* 6052 */ 15, 2, 15, 10, 15, 19, 0,
-  /* 6059 */ 15, 2, 15, 2, 15, 2, 15, 2, 19, 19, 0,
-  /* 6070 */ 15, 2, 15, 2, 4, 19, 19, 0,
-  /* 6078 */ 0, 19, 19, 19, 0,
-  /* 6083 */ 15, 0, 29, 0,
-  /* 6087 */ 0, 1, 29, 0,
-  /* 6091 */ 0, 5, 4, 14, 2, 4, 29, 0,
-  /* 6099 */ 5, 5, 4, 14, 2, 4, 29, 0,
-  /* 6107 */ 18, 5, 4, 15, 4, 4, 4, 29, 0,
-  /* 6116 */ 0, 5, 4, 29, 0,
-  /* 6121 */ 28, 35, 28, 35, 28, 35, 28, 35, 0,
-  /* 6130 */ 5, 41, 0,
-  /* 6133 */ 8, 41, 0,
-  /* 6136 */ 41, 41, 41, 41, 0,
+  /* 197 */ 36, 1, 36, 1, 36, 1, 0,
+  /* 204 */ 21, 12, 4, 36, 1, 12, 4, 12, 4, 36, 1, 0,
+  /* 216 */ 12, 4, 12, 4, 12, 4, 36, 1, 0,
+  /* 225 */ 37, 1, 37, 1, 37, 1, 0,
+  /* 232 */ 21, 13, 4, 37, 1, 13, 4, 13, 4, 37, 1, 0,
+  /* 244 */ 13, 4, 13, 4, 13, 4, 37, 1, 0,
+  /* 253 */ 16, 2, 16, 2, 16, 2, 2, 0,
+  /* 261 */ 12, 2, 12, 2, 4, 12, 2, 4, 2, 0,
+  /* 271 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 0,
+  /* 282 */ 11, 7, 11, 7, 11, 7, 11, 4, 4, 2, 0,
+  /* 293 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 0,
+  /* 304 */ 10, 8, 10, 8, 10, 8, 10, 5, 4, 2, 0,
+  /* 315 */ 10, 4, 10, 4, 14, 2, 10, 4, 10, 4, 2, 0,
+  /* 327 */ 10, 4, 10, 4, 14, 2, 9, 5, 10, 4, 2, 0,
+  /* 339 */ 10, 4, 10, 4, 14, 2, 10, 5, 10, 4, 2, 0,
+  /* 351 */ 10, 7, 10, 7, 10, 7, 10, 4, 2, 0,
+  /* 361 */ 11, 4, 11, 4, 14, 2, 11, 4, 11, 4, 2, 0,
+  /* 373 */ 11, 7, 11, 7, 11, 7, 11, 4, 2, 0,
+  /* 383 */ 27, 4, 2, 0,
+  /* 387 */ 9, 5, 9, 5, 14, 2, 10, 4, 9, 5, 2, 0,
+  /* 399 */ 9, 5, 9, 5, 14, 2, 9, 5, 9, 5, 2, 0,
+  /* 411 */ 9, 8, 9, 8, 9, 8, 9, 5, 2, 0,
+  /* 421 */ 10, 5, 10, 5, 14, 2, 10, 4, 10, 5, 2, 0,
+  /* 433 */ 10, 5, 10, 5, 14, 2, 10, 5, 10, 5, 2, 0,
+  /* 445 */ 10, 8, 10, 8, 10, 8, 10, 5, 2, 0,
+  /* 455 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 0,
+  /* 466 */ 10, 7, 10, 7, 14, 2, 10, 4, 10, 7, 2, 0,
+  /* 478 */ 10, 7, 10, 7, 14, 2, 9, 5, 10, 7, 2, 0,
+  /* 490 */ 10, 7, 10, 7, 14, 2, 10, 5, 10, 7, 2, 0,
+  /* 502 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 0,
+  /* 512 */ 11, 7, 11, 7, 11, 7, 4, 11, 7, 2, 0,
+  /* 523 */ 11, 7, 11, 7, 14, 2, 11, 4, 11, 7, 2, 0,
+  /* 535 */ 11, 7, 11, 7, 11, 7, 11, 7, 2, 0,
+  /* 545 */ 27, 7, 2, 0,
+  /* 549 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 0,
+  /* 560 */ 9, 8, 9, 8, 14, 2, 10, 4, 9, 8, 2, 0,
+  /* 572 */ 9, 8, 9, 8, 14, 2, 9, 5, 9, 8, 2, 0,
+  /* 584 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 0,
+  /* 594 */ 10, 8, 10, 8, 10, 8, 4, 10, 8, 2, 0,
+  /* 605 */ 10, 8, 10, 8, 14, 2, 10, 4, 10, 8, 2, 0,
+  /* 617 */ 10, 8, 10, 8, 14, 2, 10, 5, 10, 8, 2, 0,
+  /* 629 */ 10, 8, 10, 8, 10, 8, 10, 8, 2, 0,
+  /* 639 */ 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 0,
+  /* 654 */ 21, 12, 2, 4, 12, 2, 12, 2, 0,
+  /* 663 */ 21, 12, 2, 4, 12, 2, 0,
+  /* 670 */ 18, 4, 14, 2, 14, 2, 14, 2, 0,
+  /* 679 */ 21, 4, 14, 2, 14, 2, 4, 14, 2, 0,
+  /* 689 */ 21, 5, 14, 2, 14, 2, 4, 14, 2, 0,
+  /* 699 */ 21, 4, 14, 2, 14, 2, 4, 4, 14, 2, 0,
+  /* 710 */ 21, 5, 14, 2, 14, 2, 4, 4, 14, 2, 0,
+  /* 721 */ 14, 2, 14, 2, 4, 4, 4, 14, 2, 0,
+  /* 731 */ 21, 4, 4, 14, 2, 0,
+  /* 737 */ 14, 2, 14, 2, 4, 4, 5, 14, 2, 0,
+  /* 747 */ 21, 5, 5, 14, 2, 0,
+  /* 753 */ 0, 17, 17, 14, 2, 0,
+  /* 759 */ 14, 2, 18, 14, 2, 0,
+  /* 765 */ 16, 1, 16, 2, 16, 2, 0,
+  /* 772 */ 16, 2, 16, 2, 16, 2, 16, 2, 0,
+  /* 781 */ 13, 3, 16, 2, 16, 2, 0,
+  /* 788 */ 11, 5, 16, 2, 16, 2, 0,
+  /* 795 */ 17, 17, 17, 2, 0,
+  /* 800 */ 0, 5, 4, 4, 4, 3, 3, 3, 3, 0,
+  /* 810 */ 21, 12, 2, 4, 11, 3, 11, 3, 0,
+  /* 819 */ 21, 11, 3, 4, 11, 3, 11, 3, 0,
+  /* 828 */ 21, 11, 3, 4, 11, 3, 0,
+  /* 835 */ 16, 2, 13, 3, 13, 3, 0,
+  /* 842 */ 42, 7, 15, 3, 0,
+  /* 847 */ 9, 5, 9, 5, 14, 2, 10, 4, 9, 1, 4, 0,
+  /* 859 */ 9, 8, 9, 8, 14, 2, 10, 4, 9, 1, 4, 0,
+  /* 871 */ 10, 4, 10, 4, 14, 2, 9, 5, 9, 1, 4, 0,
+  /* 883 */ 9, 5, 9, 5, 14, 2, 9, 5, 9, 1, 4, 0,
+  /* 895 */ 10, 7, 10, 7, 14, 2, 9, 5, 9, 1, 4, 0,
+  /* 907 */ 9, 8, 9, 8, 14, 2, 9, 5, 9, 1, 4, 0,
+  /* 919 */ 10, 4, 10, 4, 14, 2, 10, 4, 10, 1, 4, 0,
+  /* 931 */ 10, 5, 10, 5, 14, 2, 10, 4, 10, 1, 4, 0,
+  /* 943 */ 10, 7, 10, 7, 14, 2, 10, 4, 10, 1, 4, 0,
+  /* 955 */ 10, 8, 10, 8, 14, 2, 10, 4, 10, 1, 4, 0,
+  /* 967 */ 10, 4, 10, 4, 14, 2, 10, 5, 10, 1, 4, 0,
+  /* 979 */ 10, 5, 10, 5, 14, 2, 10, 5, 10, 1, 4, 0,
+  /* 991 */ 10, 7, 10, 7, 14, 2, 10, 5, 10, 1, 4, 0,
+  /* 1003 */ 10, 8, 10, 8, 14, 2, 10, 5, 10, 1, 4, 0,
+  /* 1015 */ 11, 4, 11, 4, 14, 2, 11, 4, 11, 1, 4, 0,
+  /* 1027 */ 11, 5, 11, 5, 14, 2, 11, 4, 11, 1, 4, 0,
+  /* 1039 */ 11, 7, 11, 7, 14, 2, 11, 4, 11, 1, 4, 0,
+  /* 1051 */ 11, 8, 11, 8, 14, 2, 11, 4, 11, 1, 4, 0,
+  /* 1063 */ 11, 4, 11, 4, 14, 2, 11, 5, 11, 1, 4, 0,
+  /* 1075 */ 11, 5, 11, 5, 14, 2, 11, 5, 11, 1, 4, 0,
+  /* 1087 */ 11, 7, 11, 7, 14, 2, 11, 5, 11, 1, 4, 0,
+  /* 1099 */ 11, 8, 11, 8, 14, 2, 11, 5, 11, 1, 4, 0,
+  /* 1111 */ 12, 4, 12, 4, 14, 2, 12, 4, 12, 1, 4, 0,
+  /* 1123 */ 12, 7, 12, 7, 14, 2, 12, 4, 12, 1, 4, 0,
+  /* 1135 */ 12, 4, 12, 4, 36, 1, 4, 0,
+  /* 1143 */ 13, 4, 13, 4, 37, 1, 4, 0,
+  /* 1151 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 4, 0,
+  /* 1163 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 4, 0,
+  /* 1175 */ 11, 8, 11, 8, 11, 8, 11, 5, 4, 2, 4, 0,
+  /* 1187 */ 10, 4, 10, 4, 14, 2, 10, 4, 2, 4, 0,
+  /* 1198 */ 9, 5, 9, 5, 14, 2, 10, 4, 2, 4, 0,
+  /* 1209 */ 10, 5, 10, 5, 14, 2, 10, 4, 2, 4, 0,
+  /* 1220 */ 10, 7, 10, 7, 14, 2, 10, 4, 2, 4, 0,
+  /* 1231 */ 9, 8, 9, 8, 14, 2, 10, 4, 2, 4, 0,
+  /* 1242 */ 10, 8, 10, 8, 14, 2, 10, 4, 2, 4, 0,
+  /* 1253 */ 11, 4, 11, 4, 14, 2, 11, 4, 2, 4, 0,
+  /* 1264 */ 11, 5, 11, 5, 14, 2, 11, 4, 2, 4, 0,
+  /* 1275 */ 11, 7, 11, 7, 14, 2, 11, 4, 2, 4, 0,
+  /* 1286 */ 11, 8, 11, 8, 14, 2, 11, 4, 2, 4, 0,
+  /* 1297 */ 10, 4, 10, 4, 14, 2, 9, 5, 2, 4, 0,
+  /* 1308 */ 9, 5, 9, 5, 14, 2, 9, 5, 2, 4, 0,
+  /* 1319 */ 10, 7, 10, 7, 14, 2, 9, 5, 2, 4, 0,
+  /* 1330 */ 9, 8, 9, 8, 14, 2, 9, 5, 2, 4, 0,
+  /* 1341 */ 10, 4, 10, 4, 14, 2, 10, 5, 2, 4, 0,
+  /* 1352 */ 10, 5, 10, 5, 14, 2, 10, 5, 2, 4, 0,
+  /* 1363 */ 10, 7, 10, 7, 14, 2, 10, 5, 2, 4, 0,
+  /* 1374 */ 10, 8, 10, 8, 14, 2, 10, 5, 2, 4, 0,
+  /* 1385 */ 11, 4, 11, 4, 14, 2, 11, 5, 2, 4, 0,
+  /* 1396 */ 11, 5, 11, 5, 14, 2, 11, 5, 2, 4, 0,
+  /* 1407 */ 11, 7, 11, 7, 14, 2, 11, 5, 2, 4, 0,
+  /* 1418 */ 11, 8, 11, 8, 14, 2, 11, 5, 2, 4, 0,
+  /* 1429 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 4, 0,
+  /* 1441 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 0,
+  /* 1452 */ 10, 7, 10, 7, 9, 8, 10, 7, 2, 4, 0,
+  /* 1463 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 4, 0,
+  /* 1475 */ 9, 8, 9, 8, 10, 7, 9, 8, 2, 4, 0,
+  /* 1486 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 0,
+  /* 1497 */ 11, 8, 11, 8, 11, 8, 4, 11, 8, 2, 4, 0,
+  /* 1509 */ 11, 8, 11, 8, 11, 8, 11, 8, 2, 4, 0,
+  /* 1520 */ 12, 2, 12, 2, 12, 2, 12, 2, 4, 0,
+  /* 1530 */ 21, 12, 2, 4, 12, 2, 12, 2, 12, 2, 4, 0,
+  /* 1542 */ 21, 12, 2, 4, 12, 2, 12, 2, 4, 0,
+  /* 1552 */ 12, 2, 9, 5, 9, 5, 12, 2, 4, 0,
+  /* 1562 */ 21, 4, 14, 2, 14, 2, 4, 0,
+  /* 1570 */ 21, 5, 14, 2, 14, 2, 4, 0,
+  /* 1578 */ 15, 1, 15, 7, 14, 2, 14, 2, 4, 0,
+  /* 1588 */ 15, 4, 15, 7, 14, 2, 14, 2, 4, 0,
+  /* 1598 */ 13, 3, 16, 2, 16, 2, 4, 0,
+  /* 1606 */ 12, 7, 12, 7, 12, 7, 12, 4, 4, 3, 4, 0,
+  /* 1618 */ 12, 4, 12, 4, 14, 2, 12, 4, 3, 4, 0,
+  /* 1629 */ 12, 7, 12, 7, 14, 2, 12, 4, 3, 4, 0,
+  /* 1640 */ 12, 7, 12, 7, 12, 7, 4, 12, 7, 3, 4, 0,
+  /* 1652 */ 12, 7, 12, 7, 12, 7, 12, 7, 3, 4, 0,
+  /* 1663 */ 11, 3, 11, 3, 11, 3, 11, 3, 4, 0,
+  /* 1673 */ 21, 11, 3, 4, 11, 3, 11, 3, 11, 3, 4, 0,
+  /* 1685 */ 21, 11, 3, 4, 11, 3, 11, 3, 4, 0,
+  /* 1695 */ 21, 3, 4, 0,
+  /* 1699 */ 15, 0, 4, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1712 */ 15, 0, 4, 4, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1726 */ 15, 0, 4, 7, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1740 */ 15, 0, 4, 4, 7, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1755 */ 15, 0, 4, 15, 10, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1770 */ 15, 0, 4, 4, 15, 10, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1786 */ 15, 0, 4, 7, 15, 10, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1802 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1819 */ 15, 0, 4, 15, 10, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1836 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1854 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1872 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1891 */ 15, 0, 4, 15, 10, 15, 15, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1910 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1930 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1950 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1971 */ 15, 0, 4, 15, 10, 7, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1987 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2004 */ 15, 0, 4, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2019 */ 15, 0, 4, 4, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2035 */ 15, 0, 4, 15, 10, 15, 15, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2052 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2070 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2088 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2107 */ 15, 0, 4, 15, 10, 7, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2125 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2144 */ 15, 0, 4, 15, 10, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2161 */ 15, 0, 4, 4, 15, 10, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2179 */ 15, 0, 4, 15, 10, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2198 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2218 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2238 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2259 */ 15, 0, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2282 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2306 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2330 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2355 */ 15, 0, 4, 15, 10, 7, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2375 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2396 */ 15, 0, 4, 15, 10, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2415 */ 15, 0, 4, 4, 15, 10, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2435 */ 15, 0, 4, 15, 10, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2456 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2478 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2500 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2523 */ 15, 0, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2548 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2574 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2600 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2627 */ 15, 0, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2656 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2686 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2716 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2747 */ 15, 0, 4, 15, 10, 7, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2769 */ 15, 0, 4, 4, 15, 10, 7, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2792 */ 15, 0, 4, 15, 10, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2813 */ 15, 0, 4, 4, 15, 10, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2835 */ 15, 0, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2862 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2890 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2918 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2947 */ 15, 0, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2978 */ 15, 0, 4, 4, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 3010 */ 15, 0, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 3042 */ 15, 0, 4, 4, 7, 15, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 18, 15, 23, 15, 23, 15, 23, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 3075 */ 21, 4, 1, 4, 4, 0,
+  /* 3081 */ 21, 2, 4, 2, 4, 4, 0,
+  /* 3088 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 4, 0,
+  /* 3100 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 4, 0,
+  /* 3112 */ 40, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3135 */ 40, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3157 */ 10, 4, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3171 */ 0, 15, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3184 */ 10, 7, 10, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3198 */ 0, 15, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3210 */ 0, 5, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3220 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 4, 0,
+  /* 3231 */ 21, 4, 4, 4, 4, 4, 4, 0,
+  /* 3239 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 0,
+  /* 3249 */ 15, 1, 15, 7, 10, 4, 4, 4, 4, 4, 0,
+  /* 3260 */ 15, 1, 15, 7, 15, 7, 10, 4, 4, 4, 4, 4, 0,
+  /* 3273 */ 21, 4, 4, 4, 4, 4, 0,
+  /* 3280 */ 10, 4, 4, 4, 10, 4, 4, 4, 4, 0,
+  /* 3290 */ 15, 1, 15, 7, 10, 4, 4, 4, 4, 0,
+  /* 3300 */ 15, 1, 15, 7, 15, 7, 10, 4, 4, 4, 4, 0,
+  /* 3312 */ 12, 4, 4, 4, 12, 4, 4, 4, 4, 0,
+  /* 3322 */ 13, 4, 9, 3, 9, 3, 13, 4, 4, 4, 4, 0,
+  /* 3334 */ 13, 4, 4, 4, 13, 4, 4, 4, 4, 0,
+  /* 3344 */ 13, 4, 10, 6, 10, 6, 13, 4, 4, 4, 4, 0,
+  /* 3356 */ 13, 4, 7, 7, 13, 4, 4, 4, 4, 0,
+  /* 3366 */ 23, 3, 3, 3, 3, 5, 4, 4, 4, 0,
+  /* 3376 */ 21, 3, 3, 5, 4, 4, 4, 0,
+  /* 3384 */ 23, 4, 4, 4, 4, 5, 4, 4, 4, 0,
+  /* 3394 */ 21, 4, 4, 5, 4, 4, 4, 0,
+  /* 3402 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 4, 0,
+  /* 3413 */ 21, 5, 5, 5, 4, 4, 4, 0,
+  /* 3421 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 4, 0,
+  /* 3432 */ 23, 7, 7, 7, 7, 5, 4, 4, 4, 0,
+  /* 3442 */ 10, 7, 9, 3, 9, 3, 10, 7, 4, 4, 4, 0,
+  /* 3454 */ 10, 7, 10, 6, 10, 6, 10, 7, 4, 4, 4, 0,
+  /* 3466 */ 10, 7, 7, 7, 10, 7, 4, 4, 4, 0,
+  /* 3476 */ 12, 7, 9, 3, 9, 3, 12, 7, 4, 4, 4, 0,
+  /* 3488 */ 12, 7, 10, 6, 10, 6, 12, 7, 4, 4, 4, 0,
+  /* 3500 */ 12, 7, 7, 7, 12, 7, 4, 4, 4, 0,
+  /* 3510 */ 15, 0, 4, 15, 9, 11, 4, 4, 4, 0,
+  /* 3520 */ 0, 15, 2, 4, 15, 9, 11, 4, 4, 4, 0,
+  /* 3531 */ 15, 1, 15, 7, 15, 9, 11, 4, 4, 4, 0,
+  /* 3542 */ 15, 1, 15, 7, 15, 7, 15, 9, 11, 4, 4, 4, 0,
+  /* 3555 */ 15, 0, 4, 15, 9, 15, 15, 11, 4, 4, 4, 0,
+  /* 3567 */ 0, 15, 2, 4, 15, 9, 15, 15, 11, 4, 4, 4, 0,
+  /* 3580 */ 15, 1, 15, 7, 15, 9, 15, 15, 11, 4, 4, 4, 0,
+  /* 3593 */ 15, 1, 15, 7, 15, 7, 15, 9, 15, 15, 11, 4, 4, 4, 0,
+  /* 3608 */ 15, 0, 4, 15, 9, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3622 */ 0, 15, 2, 4, 15, 9, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3637 */ 15, 1, 15, 7, 15, 9, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3652 */ 15, 1, 15, 7, 15, 7, 15, 9, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3669 */ 15, 0, 4, 15, 9, 15, 15, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3685 */ 0, 15, 2, 4, 15, 9, 15, 15, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3702 */ 15, 1, 15, 7, 15, 9, 15, 15, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3719 */ 15, 1, 15, 7, 15, 7, 15, 9, 15, 15, 15, 15, 15, 15, 11, 4, 4, 4, 0,
+  /* 3738 */ 16, 4, 16, 4, 16, 4, 4, 4, 0,
+  /* 3747 */ 23, 3, 3, 3, 3, 5, 4, 4, 0,
+  /* 3756 */ 21, 3, 3, 5, 4, 4, 0,
+  /* 3763 */ 23, 4, 4, 4, 4, 5, 4, 4, 0,
+  /* 3772 */ 21, 4, 4, 5, 4, 4, 0,
+  /* 3779 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 0,
+  /* 3789 */ 21, 5, 5, 5, 4, 4, 0,
+  /* 3796 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 0,
+  /* 3806 */ 23, 7, 7, 7, 7, 5, 4, 4, 0,
+  /* 3815 */ 23, 15, 3, 15, 7, 15, 7, 15, 7, 15, 12, 15, 7, 15, 7, 15, 7, 15, 7, 4, 4, 0,
+  /* 3837 */ 22, 15, 3, 15, 7, 15, 7, 15, 12, 15, 7, 15, 7, 15, 7, 4, 4, 0,
+  /* 3855 */ 21, 15, 3, 15, 7, 15, 12, 15, 7, 15, 7, 4, 4, 0,
+  /* 3869 */ 0, 14, 2, 10, 1, 10, 4, 10, 4, 4, 0,
+  /* 3880 */ 0, 14, 2, 2, 10, 4, 10, 4, 4, 0,
+  /* 3890 */ 21, 10, 4, 4, 10, 4, 10, 4, 4, 0,
+  /* 3900 */ 21, 10, 4, 4, 10, 4, 10, 4, 10, 4, 4, 0,
+  /* 3912 */ 10, 4, 10, 4, 10, 4, 10, 4, 4, 0,
+  /* 3922 */ 0, 14, 2, 9, 1, 9, 5, 10, 4, 4, 0,
+  /* 3933 */ 0, 14, 2, 2, 9, 5, 10, 4, 4, 0,
+  /* 3943 */ 0, 14, 2, 10, 1, 10, 5, 10, 4, 4, 0,
+  /* 3954 */ 0, 14, 2, 2, 10, 5, 10, 4, 4, 0,
+  /* 3964 */ 0, 14, 2, 11, 1, 11, 4, 11, 4, 4, 0,
+  /* 3975 */ 0, 14, 2, 2, 11, 4, 11, 4, 4, 0,
+  /* 3985 */ 11, 4, 11, 4, 11, 4, 11, 4, 4, 0,
+  /* 3995 */ 0, 14, 2, 11, 1, 11, 5, 11, 4, 4, 0,
+  /* 4006 */ 0, 14, 2, 2, 11, 5, 11, 4, 4, 0,
+  /* 4016 */ 36, 1, 36, 1, 12, 4, 4, 0,
+  /* 4024 */ 0, 14, 2, 12, 1, 12, 4, 12, 4, 4, 0,
+  /* 4035 */ 0, 14, 2, 3, 12, 4, 12, 4, 4, 0,
+  /* 4045 */ 21, 12, 4, 12, 4, 12, 4, 12, 4, 4, 0,
+  /* 4056 */ 13, 4, 13, 4, 12, 4, 12, 4, 4, 0,
+  /* 4066 */ 37, 1, 37, 1, 13, 4, 4, 0,
+  /* 4074 */ 21, 13, 4, 13, 4, 13, 4, 13, 4, 4, 0,
+  /* 4085 */ 16, 4, 16, 4, 13, 4, 13, 4, 4, 0,
+  /* 4095 */ 16, 4, 16, 4, 13, 4, 4, 0,
+  /* 4103 */ 40, 4, 4, 4, 4, 4, 4, 4, 4, 15, 4, 4, 0,
+  /* 4116 */ 23, 4, 4, 4, 4, 15, 4, 4, 0,
+  /* 4125 */ 21, 4, 4, 15, 4, 4, 0,
+  /* 4132 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
+  /* 4153 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
+  /* 4166 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 4, 0,
+  /* 4179 */ 0, 15, 4, 15, 11, 15, 15, 4, 4, 0,
+  /* 4189 */ 0, 15, 4, 15, 11, 15, 15, 15, 15, 4, 4, 0,
+  /* 4201 */ 0, 15, 4, 15, 11, 15, 15, 15, 15, 15, 15, 4, 4, 0,
+  /* 4215 */ 13, 4, 13, 4, 16, 4, 4, 0,
+  /* 4223 */ 16, 4, 16, 4, 16, 4, 4, 0,
+  /* 4231 */ 17, 17, 4, 4, 0,
+  /* 4236 */ 15, 0, 18, 4, 4, 0,
+  /* 4242 */ 21, 4, 4, 0,
+  /* 4246 */ 23, 3, 3, 3, 3, 5, 4, 0,
+  /* 4254 */ 21, 3, 3, 5, 4, 0,
+  /* 4260 */ 23, 4, 4, 4, 4, 5, 4, 0,
+  /* 4268 */ 21, 4, 4, 5, 4, 0,
+  /* 4274 */ 23, 4, 4, 4, 4, 5, 5, 4, 0,
+  /* 4283 */ 21, 5, 4, 5, 5, 4, 0,
+  /* 4290 */ 21, 5, 5, 5, 4, 0,
+  /* 4296 */ 23, 7, 7, 7, 7, 5, 5, 4, 0,
+  /* 4305 */ 23, 7, 7, 7, 7, 5, 4, 0,
+  /* 4313 */ 0, 14, 2, 9, 1, 10, 4, 9, 5, 4, 0,
+  /* 4324 */ 0, 14, 2, 2, 10, 4, 9, 5, 4, 0,
+  /* 4334 */ 0, 14, 2, 9, 1, 9, 5, 9, 5, 4, 0,
+  /* 4345 */ 0, 14, 2, 2, 9, 5, 9, 5, 4, 0,
+  /* 4355 */ 9, 5, 9, 5, 9, 5, 9, 5, 4, 0,
+  /* 4365 */ 0, 14, 2, 10, 1, 10, 4, 10, 5, 4, 0,
+  /* 4376 */ 0, 14, 2, 2, 10, 4, 10, 5, 4, 0,
+  /* 4386 */ 0, 14, 2, 10, 1, 10, 5, 10, 5, 4, 0,
+  /* 4397 */ 0, 14, 2, 2, 10, 5, 10, 5, 4, 0,
+  /* 4407 */ 10, 5, 10, 5, 10, 5, 10, 5, 4, 0,
+  /* 4417 */ 0, 14, 2, 11, 1, 11, 4, 11, 5, 4, 0,
+  /* 4428 */ 0, 14, 2, 2, 11, 4, 11, 5, 4, 0,
+  /* 4438 */ 0, 14, 2, 11, 1, 11, 5, 11, 5, 4, 0,
+  /* 4449 */ 0, 14, 2, 2, 11, 5, 11, 5, 4, 0,
+  /* 4459 */ 11, 5, 11, 5, 11, 5, 11, 5, 4, 0,
+  /* 4469 */ 21, 5, 4, 0,
+  /* 4473 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 4, 0,
+  /* 4486 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0,
+  /* 4499 */ 21, 10, 4, 4, 10, 7, 4, 0,
+  /* 4507 */ 0, 14, 2, 10, 1, 10, 4, 10, 7, 4, 0,
+  /* 4518 */ 0, 14, 2, 2, 10, 4, 10, 7, 4, 0,
+  /* 4528 */ 0, 14, 2, 9, 1, 9, 5, 10, 7, 4, 0,
+  /* 4539 */ 0, 14, 2, 2, 9, 5, 10, 7, 4, 0,
+  /* 4549 */ 0, 14, 2, 10, 1, 10, 5, 10, 7, 4, 0,
+  /* 4560 */ 0, 14, 2, 2, 10, 5, 10, 7, 4, 0,
+  /* 4570 */ 0, 14, 2, 11, 1, 11, 4, 11, 7, 4, 0,
+  /* 4581 */ 0, 14, 2, 2, 11, 4, 11, 7, 4, 0,
+  /* 4591 */ 0, 14, 2, 11, 1, 11, 5, 11, 7, 4, 0,
+  /* 4602 */ 0, 14, 2, 2, 11, 5, 11, 7, 4, 0,
+  /* 4612 */ 0, 14, 2, 12, 1, 12, 4, 12, 7, 4, 0,
+  /* 4623 */ 0, 14, 2, 3, 12, 4, 12, 7, 4, 0,
+  /* 4633 */ 12, 7, 12, 7, 12, 7, 12, 7, 4, 0,
+  /* 4643 */ 15, 1, 25, 7, 4, 0,
+  /* 4649 */ 15, 3, 26, 7, 4, 0,
+  /* 4655 */ 21, 9, 5, 4, 9, 8, 4, 0,
+  /* 4663 */ 0, 14, 2, 9, 1, 10, 4, 9, 8, 4, 0,
+  /* 4674 */ 0, 14, 2, 2, 10, 4, 9, 8, 4, 0,
+  /* 4684 */ 0, 14, 2, 9, 1, 9, 5, 9, 8, 4, 0,
+  /* 4695 */ 0, 14, 2, 2, 9, 5, 9, 8, 4, 0,
+  /* 4705 */ 0, 14, 2, 10, 1, 10, 4, 10, 8, 4, 0,
+  /* 4716 */ 0, 14, 2, 2, 10, 4, 10, 8, 4, 0,
+  /* 4726 */ 0, 14, 2, 10, 1, 10, 5, 10, 8, 4, 0,
+  /* 4737 */ 0, 14, 2, 2, 10, 5, 10, 8, 4, 0,
+  /* 4747 */ 0, 14, 2, 11, 1, 11, 4, 11, 8, 4, 0,
+  /* 4758 */ 0, 14, 2, 2, 11, 4, 11, 8, 4, 0,
+  /* 4768 */ 0, 14, 2, 11, 1, 11, 5, 11, 8, 4, 0,
+  /* 4779 */ 0, 14, 2, 2, 11, 5, 11, 8, 4, 0,
+  /* 4789 */ 11, 8, 11, 8, 11, 8, 11, 8, 4, 0,
+  /* 4799 */ 21, 10, 4, 4, 10, 4, 0,
+  /* 4806 */ 21, 10, 1, 10, 1, 10, 4, 10, 4, 0,
+  /* 4816 */ 21, 11, 3, 4, 10, 4, 10, 4, 0,
+  /* 4825 */ 21, 10, 4, 4, 10, 4, 10, 4, 0,
+  /* 4834 */ 21, 11, 1, 11, 1, 11, 4, 11, 4, 0,
+  /* 4844 */ 12, 4, 36, 1, 12, 4, 0,
+  /* 4851 */ 0, 36, 1, 14, 2, 12, 4, 0,
+  /* 4859 */ 0, 14, 2, 36, 1, 4, 4, 12, 4, 0,
+  /* 4869 */ 21, 12, 1, 12, 1, 12, 4, 12, 4, 0,
+  /* 4879 */ 36, 1, 36, 1, 12, 4, 12, 4, 0,
+  /* 4888 */ 12, 4, 36, 1, 12, 4, 12, 4, 0,
+  /* 4897 */ 13, 4, 36, 1, 12, 4, 12, 4, 0,
+  /* 4906 */ 0, 36, 1, 4, 4, 12, 4, 12, 4, 0,
+  /* 4916 */ 0, 36, 1, 4, 4, 13, 4, 12, 4, 0,
+  /* 4926 */ 21, 15, 3, 15, 7, 15, 12, 4, 0,
+  /* 4935 */ 22, 15, 3, 15, 7, 15, 7, 15, 12, 4, 0,
+  /* 4946 */ 23, 15, 3, 15, 7, 15, 7, 15, 7, 15, 12, 4, 0,
+  /* 4959 */ 13, 4, 37, 1, 13, 4, 0,
+  /* 4966 */ 0, 37, 1, 14, 2, 13, 4, 0,
+  /* 4974 */ 0, 14, 2, 36, 1, 4, 4, 13, 4, 0,
+  /* 4984 */ 0, 14, 2, 37, 1, 4, 4, 13, 4, 0,
+  /* 4994 */ 37, 1, 37, 1, 13, 4, 13, 4, 0,
+  /* 5003 */ 13, 4, 37, 1, 13, 4, 13, 4, 0,
+  /* 5012 */ 16, 4, 37, 1, 13, 4, 13, 4, 0,
+  /* 5021 */ 0, 37, 1, 4, 4, 13, 4, 13, 4, 0,
+  /* 5031 */ 16, 4, 16, 4, 13, 4, 13, 4, 0,
+  /* 5040 */ 0, 4, 4, 16, 4, 13, 4, 0,
+  /* 5048 */ 0, 37, 1, 4, 4, 16, 4, 13, 4, 0,
+  /* 5058 */ 16, 4, 16, 4, 13, 4, 0,
+  /* 5065 */ 40, 4, 4, 4, 4, 4, 4, 4, 4, 15, 4, 0,
+  /* 5077 */ 23, 4, 4, 4, 4, 15, 4, 0,
+  /* 5085 */ 21, 4, 4, 15, 4, 0,
+  /* 5091 */ 0, 14, 20, 5, 15, 4, 0,
+  /* 5098 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
+  /* 5118 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
+  /* 5130 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 0,
+  /* 5142 */ 0, 15, 4, 15, 11, 15, 15, 15, 15, 4, 0,
+  /* 5153 */ 0, 15, 4, 15, 11, 15, 15, 15, 15, 15, 15, 4, 0,
+  /* 5166 */ 5, 19, 15, 4, 0,
+  /* 5171 */ 0, 14, 2, 37, 1, 4, 4, 16, 4, 0,
+  /* 5181 */ 0, 14, 2, 4, 4, 16, 4, 0,
+  /* 5189 */ 13, 4, 16, 4, 0,
+  /* 5194 */ 16, 4, 16, 4, 16, 4, 0,
+  /* 5201 */ 4, 17, 4, 0,
+  /* 5205 */ 0, 15, 4, 15, 12, 15, 17, 4, 0,
+  /* 5214 */ 17, 17, 4, 0,
+  /* 5218 */ 0, 18, 4, 0,
+  /* 5222 */ 21, 5, 1, 4, 5, 0,
+  /* 5228 */ 16, 4, 16, 4, 13, 4, 5, 0,
+  /* 5236 */ 21, 2, 5, 2, 5, 5, 0,
+  /* 5243 */ 21, 5, 4, 5, 5, 0,
+  /* 5249 */ 21, 5, 4, 5, 5, 5, 0,
+  /* 5256 */ 21, 9, 1, 9, 1, 9, 5, 9, 5, 0,
+  /* 5266 */ 21, 10, 4, 4, 9, 5, 9, 5, 0,
+  /* 5275 */ 21, 9, 5, 4, 9, 5, 9, 5, 0,
+  /* 5284 */ 21, 10, 1, 10, 1, 10, 5, 10, 5, 0,
+  /* 5294 */ 21, 11, 1, 11, 1, 11, 5, 11, 5, 0,
+  /* 5304 */ 41, 41, 5, 0,
+  /* 5308 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 0,
+  /* 5320 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
+  /* 5370 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
+  /* 5420 */ 23, 4, 4, 4, 4, 5, 4, 7, 0,
+  /* 5429 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 0,
+  /* 5439 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 0,
+  /* 5449 */ 23, 7, 7, 7, 7, 5, 4, 7, 0,
+  /* 5458 */ 21, 7, 4, 7, 0,
+  /* 5463 */ 23, 4, 4, 4, 4, 5, 7, 0,
+  /* 5471 */ 23, 4, 4, 4, 4, 5, 5, 7, 0,
+  /* 5480 */ 23, 7, 7, 7, 7, 5, 5, 7, 0,
+  /* 5489 */ 23, 7, 7, 7, 7, 5, 7, 0,
+  /* 5497 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 0,
+  /* 5507 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 0,
+  /* 5518 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 0,
+  /* 5529 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 0,
+  /* 5539 */ 21, 7, 4, 7, 7, 0,
+  /* 5545 */ 23, 4, 4, 4, 4, 5, 7, 7, 0,
+  /* 5554 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 0,
+  /* 5564 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 0,
+  /* 5574 */ 23, 7, 7, 7, 7, 5, 7, 7, 0,
+  /* 5583 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 0,
+  /* 5594 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 0,
+  /* 5606 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 0,
+  /* 5618 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 0,
+  /* 5629 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 0,
+  /* 5639 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 0,
+  /* 5650 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 0,
+  /* 5661 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 0,
+  /* 5671 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 0,
+  /* 5683 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 0,
+  /* 5696 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 0,
+  /* 5709 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 0,
+  /* 5721 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 0,
+  /* 5732 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 0,
+  /* 5744 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 0,
+  /* 5756 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 0,
+  /* 5767 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 5781 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 5796 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 5811 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 5825 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 5838 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 5852 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 5866 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 5879 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5891 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5941 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5991 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 6007 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 6024 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 6041 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 6057 */ 21, 10, 4, 4, 10, 7, 10, 7, 0,
+  /* 6066 */ 17, 10, 7, 0,
+  /* 6070 */ 15, 3, 34, 1, 0, 4, 31, 3, 1, 15, 7, 0,
+  /* 6082 */ 15, 3, 15, 12, 4, 31, 3, 1, 15, 7, 0,
+  /* 6093 */ 15, 3, 33, 7, 31, 3, 1, 15, 7, 0,
+  /* 6103 */ 15, 3, 12, 2, 12, 2, 12, 2, 12, 2, 15, 7, 0,
+  /* 6116 */ 15, 3, 15, 7, 12, 2, 12, 2, 12, 2, 12, 2, 15, 7, 0,
+  /* 6131 */ 15, 3, 12, 2, 12, 2, 12, 2, 15, 7, 0,
+  /* 6142 */ 15, 3, 15, 7, 12, 2, 12, 2, 12, 2, 15, 7, 0,
+  /* 6155 */ 15, 3, 15, 7, 12, 2, 12, 2, 15, 7, 0,
+  /* 6166 */ 21, 15, 1, 31, 1, 1, 15, 7, 15, 7, 0,
+  /* 6177 */ 15, 1, 25, 7, 0,
+  /* 6182 */ 15, 3, 25, 7, 0,
+  /* 6187 */ 15, 3, 25, 7, 25, 7, 0,
+  /* 6194 */ 15, 3, 26, 7, 0,
+  /* 6199 */ 15, 3, 26, 7, 26, 7, 0,
+  /* 6206 */ 9, 8, 9, 8, 9, 5, 9, 8, 0,
+  /* 6215 */ 21, 9, 5, 4, 9, 8, 9, 8, 0,
+  /* 6224 */ 9, 8, 9, 8, 9, 8, 9, 8, 0,
+  /* 6233 */ 17, 9, 8, 0,
+  /* 6237 */ 10, 8, 10, 8, 10, 5, 10, 8, 0,
+  /* 6246 */ 10, 8, 10, 8, 10, 8, 10, 8, 0,
+  /* 6255 */ 11, 8, 11, 8, 11, 5, 11, 8, 0,
+  /* 6264 */ 21, 1, 15, 1, 15, 9, 0,
+  /* 6271 */ 23, 15, 7, 15, 7, 15, 7, 15, 3, 15, 12, 0,
+  /* 6283 */ 22, 15, 7, 15, 7, 15, 3, 15, 12, 0,
+  /* 6293 */ 21, 15, 7, 15, 3, 15, 12, 0,
+  /* 6301 */ 23, 15, 7, 15, 7, 15, 7, 15, 7, 15, 7, 15, 7, 15, 7, 15, 3, 5, 15, 12, 0,
+  /* 6322 */ 22, 15, 7, 15, 7, 15, 7, 15, 7, 15, 7, 15, 3, 5, 15, 12, 0,
+  /* 6339 */ 21, 15, 7, 15, 7, 15, 7, 15, 3, 5, 15, 12, 0,
+  /* 6352 */ 0, 15, 3, 15, 7, 5, 15, 12, 0,
+  /* 6361 */ 0, 15, 3, 15, 7, 15, 7, 5, 15, 12, 0,
+  /* 6372 */ 0, 15, 3, 15, 7, 15, 7, 15, 7, 5, 15, 12, 0,
+  /* 6385 */ 21, 15, 3, 15, 7, 15, 12, 0,
+  /* 6393 */ 0, 15, 3, 15, 7, 15, 7, 15, 12, 0,
+  /* 6403 */ 22, 15, 3, 15, 7, 15, 7, 15, 12, 0,
+  /* 6413 */ 0, 15, 3, 15, 7, 15, 7, 15, 7, 15, 12, 0,
+  /* 6425 */ 23, 15, 3, 15, 7, 15, 7, 15, 7, 15, 12, 0,
+  /* 6437 */ 15, 3, 15, 7, 15, 11, 15, 15, 0,
+  /* 6446 */ 0, 15, 4, 15, 11, 15, 15, 15, 15, 0,
+  /* 6456 */ 0, 15, 4, 15, 11, 15, 15, 15, 15, 15, 15, 0,
+  /* 6468 */ 4, 17, 0,
+  /* 6471 */ 10, 7, 10, 7, 17, 0,
+  /* 6477 */ 9, 8, 17, 0,
+  /* 6481 */ 15, 1, 15, 9, 15, 17, 0,
+  /* 6488 */ 0, 14, 17, 17, 0,
+  /* 6493 */ 17, 17, 17, 0,
+  /* 6497 */ 15, 0, 18, 0,
+  /* 6501 */ 1, 18, 0,
+  /* 6504 */ 14, 2, 18, 0,
+  /* 6508 */ 15, 4, 18, 0,
+  /* 6512 */ 0, 19, 0,
+  /* 6515 */ 15, 1, 19, 0,
+  /* 6519 */ 1, 14, 2, 19, 0,
+  /* 6524 */ 21, 14, 2, 1, 14, 2, 4, 19, 0,
+  /* 6533 */ 15, 2, 15, 10, 19, 0,
+  /* 6539 */ 15, 2, 15, 7, 4, 19, 19, 0,
+  /* 6547 */ 15, 2, 15, 7, 19, 19, 0,
+  /* 6554 */ 15, 2, 15, 7, 15, 7, 19, 19, 0,
+  /* 6563 */ 15, 2, 15, 7, 15, 7, 15, 7, 19, 19, 0,
+  /* 6574 */ 15, 2, 15, 10, 19, 19, 0,
+  /* 6581 */ 0, 19, 19, 19, 0,
+  /* 6586 */ 15, 0, 29, 0,
+  /* 6590 */ 0, 1, 29, 0,
+  /* 6594 */ 0, 5, 4, 14, 2, 4, 29, 0,
+  /* 6602 */ 5, 5, 4, 14, 2, 4, 29, 0,
+  /* 6610 */ 18, 5, 4, 15, 4, 4, 4, 29, 0,
+  /* 6619 */ 0, 5, 4, 29, 0,
+  /* 6624 */ 28, 35, 28, 35, 28, 35, 28, 35, 0,
+  /* 6633 */ 5, 41, 0,
+  /* 6636 */ 8, 41, 0,
+  /* 6639 */ 41, 41, 41, 41, 0,
   255
 };
 
@@ -9083,9 +9423,9 @@
     13, // llvm.coro.subfn.addr
     3, // llvm.coro.suspend
     4, // llvm.cos
-    4, // llvm.ctlz
+    14, // llvm.ctlz
     4, // llvm.ctpop
-    4, // llvm.cttz
+    14, // llvm.cttz
     4, // llvm.dbg.addr
     4, // llvm.dbg.declare
     4, // llvm.dbg.label
@@ -9100,7 +9440,7 @@
     3, // llvm.eh.return.i64
     1, // llvm.eh.sjlj.callsite
     3, // llvm.eh.sjlj.functioncontext
-    14, // llvm.eh.sjlj.longjmp
+    15, // llvm.eh.sjlj.longjmp
     1, // llvm.eh.sjlj.lsda
     3, // llvm.eh.sjlj.setjmp
     3, // llvm.eh.sjlj.setup.dispatch
@@ -9109,98 +9449,106 @@
     4, // llvm.exp
     4, // llvm.exp2
     1, // llvm.expect
-    15, // llvm.experimental.constrained.ceil
-    15, // llvm.experimental.constrained.cos
-    15, // llvm.experimental.constrained.exp
-    15, // llvm.experimental.constrained.exp2
-    15, // llvm.experimental.constrained.fadd
-    15, // llvm.experimental.constrained.fdiv
-    15, // llvm.experimental.constrained.floor
-    15, // llvm.experimental.constrained.fma
-    15, // llvm.experimental.constrained.fmul
-    15, // llvm.experimental.constrained.frem
-    15, // llvm.experimental.constrained.fsub
-    15, // llvm.experimental.constrained.log
-    15, // llvm.experimental.constrained.log10
-    15, // llvm.experimental.constrained.log2
-    15, // llvm.experimental.constrained.maxnum
-    15, // llvm.experimental.constrained.minnum
-    15, // llvm.experimental.constrained.nearbyint
-    15, // llvm.experimental.constrained.pow
-    15, // llvm.experimental.constrained.powi
-    15, // llvm.experimental.constrained.rint
-    15, // llvm.experimental.constrained.round
-    15, // llvm.experimental.constrained.sin
-    15, // llvm.experimental.constrained.sqrt
-    15, // llvm.experimental.constrained.trunc
+    16, // llvm.experimental.constrained.ceil
+    16, // llvm.experimental.constrained.cos
+    16, // llvm.experimental.constrained.exp
+    16, // llvm.experimental.constrained.exp2
+    16, // llvm.experimental.constrained.fadd
+    16, // llvm.experimental.constrained.fdiv
+    16, // llvm.experimental.constrained.floor
+    16, // llvm.experimental.constrained.fma
+    16, // llvm.experimental.constrained.fmul
+    16, // llvm.experimental.constrained.fpext
+    16, // llvm.experimental.constrained.fptrunc
+    16, // llvm.experimental.constrained.frem
+    16, // llvm.experimental.constrained.fsub
+    16, // llvm.experimental.constrained.log
+    16, // llvm.experimental.constrained.log10
+    16, // llvm.experimental.constrained.log2
+    16, // llvm.experimental.constrained.maxnum
+    16, // llvm.experimental.constrained.minnum
+    16, // llvm.experimental.constrained.nearbyint
+    16, // llvm.experimental.constrained.pow
+    16, // llvm.experimental.constrained.powi
+    16, // llvm.experimental.constrained.rint
+    16, // llvm.experimental.constrained.round
+    16, // llvm.experimental.constrained.sin
+    16, // llvm.experimental.constrained.sqrt
+    16, // llvm.experimental.constrained.trunc
     7, // llvm.experimental.deoptimize
-    16, // llvm.experimental.gc.relocate
-    16, // llvm.experimental.gc.result
-    7, // llvm.experimental.gc.statepoint
+    17, // llvm.experimental.gc.relocate
+    18, // llvm.experimental.gc.result
+    19, // llvm.experimental.gc.statepoint
     7, // llvm.experimental.guard
     7, // llvm.experimental.patchpoint.i64
     7, // llvm.experimental.patchpoint.void
     7, // llvm.experimental.stackmap
     1, // llvm.experimental.vector.reduce.add
     1, // llvm.experimental.vector.reduce.and
-    1, // llvm.experimental.vector.reduce.fadd
     1, // llvm.experimental.vector.reduce.fmax
     1, // llvm.experimental.vector.reduce.fmin
-    1, // llvm.experimental.vector.reduce.fmul
     1, // llvm.experimental.vector.reduce.mul
     1, // llvm.experimental.vector.reduce.or
     1, // llvm.experimental.vector.reduce.smax
     1, // llvm.experimental.vector.reduce.smin
     1, // llvm.experimental.vector.reduce.umax
     1, // llvm.experimental.vector.reduce.umin
+    1, // llvm.experimental.vector.reduce.v2.fadd
+    1, // llvm.experimental.vector.reduce.v2.fmul
     1, // llvm.experimental.vector.reduce.xor
-    15, // llvm.experimental.widenable.condition
+    16, // llvm.experimental.widenable.condition
     4, // llvm.fabs
     4, // llvm.floor
     3, // llvm.flt.rounds
     4, // llvm.fma
     4, // llvm.fmuladd
-    1, // llvm.frameaddress
+    20, // llvm.frameaddress
     4, // llvm.fshl
     4, // llvm.fshr
     2, // llvm.gcread
     3, // llvm.gcroot
-    17, // llvm.gcwrite
+    21, // llvm.gcwrite
     3, // llvm.get.dynamic.area.offset
-    15, // llvm.hwasan.check.memaccess
+    22, // llvm.hwasan.check.memaccess
     3, // llvm.icall.branch.funnel
-    18, // llvm.init.trampoline
+    23, // llvm.init.trampoline
     3, // llvm.instrprof.increment
     3, // llvm.instrprof.increment.step
     3, // llvm.instrprof.value.profile
-    19, // llvm.invariant.end
-    20, // llvm.invariant.start
+    24, // llvm.invariant.end
+    25, // llvm.invariant.start
     1, // llvm.is.constant
-    21, // llvm.launder.invariant.group
-    20, // llvm.lifetime.end
-    20, // llvm.lifetime.start
+    26, // llvm.launder.invariant.group
+    25, // llvm.lifetime.end
+    25, // llvm.lifetime.start
+    4, // llvm.llrint
+    4, // llvm.llround
     2, // llvm.load.relative
     1, // llvm.localaddress
     3, // llvm.localescape
-    1, // llvm.localrecover
+    27, // llvm.localrecover
     4, // llvm.log
     4, // llvm.log10
     4, // llvm.log2
-    14, // llvm.longjmp
-    22, // llvm.masked.compressstore
-    16, // llvm.masked.expandload
-    16, // llvm.masked.gather
-    2, // llvm.masked.load
-    3, // llvm.masked.scatter
-    22, // llvm.masked.store
+    15, // llvm.longjmp
+    28, // llvm.loop.decrement
+    28, // llvm.loop.decrement.reg
+    4, // llvm.lrint
+    4, // llvm.lround
+    29, // llvm.masked.compressstore
+    18, // llvm.masked.expandload
+    30, // llvm.masked.gather
+    31, // llvm.masked.load
+    32, // llvm.masked.scatter
+    33, // llvm.masked.store
     4, // llvm.maximum
     4, // llvm.maxnum
-    23, // llvm.memcpy
-    23, // llvm.memcpy.element.unordered.atomic
-    24, // llvm.memmove
-    23, // llvm.memmove.element.unordered.atomic
-    25, // llvm.memset
-    25, // llvm.memset.element.unordered.atomic
+    34, // llvm.memcpy
+    34, // llvm.memcpy.element.unordered.atomic
+    35, // llvm.memmove
+    34, // llvm.memmove.element.unordered.atomic
+    36, // llvm.memset
+    36, // llvm.memset.element.unordered.atomic
     4, // llvm.minimum
     4, // llvm.minnum
     4, // llvm.nearbyint
@@ -9234,29 +9582,34 @@
     3, // llvm.objc.unretainedObject
     3, // llvm.objc.unretainedPointer
     3, // llvm.objc.unsafeClaimAutoreleasedReturnValue
-    4, // llvm.objectsize
+    37, // llvm.objectsize
     3, // llvm.pcmarker
     4, // llvm.pow
     4, // llvm.powi
-    26, // llvm.prefetch
+    38, // llvm.prefetch
+    39, // llvm.preserve.array.access.index
+    39, // llvm.preserve.struct.access.index
+    40, // llvm.preserve.union.access.index
     3, // llvm.ptr.annotation
-    16, // llvm.read_register
+    18, // llvm.read_register
     3, // llvm.readcyclecounter
-    1, // llvm.returnaddress
+    20, // llvm.returnaddress
     4, // llvm.rint
     4, // llvm.round
     4, // llvm.sadd.sat
     4, // llvm.sadd.with.overflow
+    28, // llvm.set.loop.iterations
     3, // llvm.setjmp
-    15, // llvm.sideeffect
-    14, // llvm.siglongjmp
+    16, // llvm.sideeffect
+    15, // llvm.siglongjmp
     3, // llvm.sigsetjmp
     4, // llvm.sin
-    4, // llvm.smul.fix
+    41, // llvm.smul.fix
+    41, // llvm.smul.fix.sat
     4, // llvm.smul.with.overflow
     1, // llvm.sponentry
     4, // llvm.sqrt
-    27, // llvm.ssa.copy
+    42, // llvm.ssa.copy
     4, // llvm.ssub.sat
     4, // llvm.ssub.with.overflow
     3, // llvm.stackguard
@@ -9264,14 +9617,15 @@
     3, // llvm.stackrestore
     3, // llvm.stacksave
     4, // llvm.strip.invariant.group
+    28, // llvm.test.set.loop.iterations
     1, // llvm.thread.pointer
-    28, // llvm.trap
+    43, // llvm.trap
     4, // llvm.trunc
     1, // llvm.type.checked.load
     1, // llvm.type.test
     4, // llvm.uadd.sat
     4, // llvm.uadd.with.overflow
-    4, // llvm.umul.fix
+    41, // llvm.umul.fix
     4, // llvm.umul.with.overflow
     4, // llvm.usub.sat
     4, // llvm.usub.with.overflow
@@ -9280,8 +9634,9 @@
     3, // llvm.va_start
     3, // llvm.var.annotation
     3, // llvm.write_register
-    29, // llvm.xray.customevent
-    30, // llvm.xray.typedevent
+    44, // llvm.xray.customevent
+    45, // llvm.xray.typedevent
+    1, // llvm.aarch64.addg
     3, // llvm.aarch64.clrex
     1, // llvm.aarch64.crc32b
     1, // llvm.aarch64.crc32cb
@@ -9308,10 +9663,13 @@
     3, // llvm.aarch64.dmb
     3, // llvm.aarch64.dsb
     1, // llvm.aarch64.get.fpcr
+    1, // llvm.aarch64.gmi
     3, // llvm.aarch64.hint
+    16, // llvm.aarch64.irg
     3, // llvm.aarch64.isb
     3, // llvm.aarch64.ldaxp
     3, // llvm.aarch64.ldaxr
+    18, // llvm.aarch64.ldg
     3, // llvm.aarch64.ldxp
     3, // llvm.aarch64.ldxr
     1, // llvm.aarch64.neon.abs
@@ -9321,6 +9679,7 @@
     1, // llvm.aarch64.neon.fabd
     1, // llvm.aarch64.neon.facge
     1, // llvm.aarch64.neon.facgt
+    1, // llvm.aarch64.neon.faddp
     1, // llvm.aarch64.neon.faddv
     1, // llvm.aarch64.neon.fcvtas
     1, // llvm.aarch64.neon.fcvtau
@@ -9414,15 +9773,15 @@
     1, // llvm.aarch64.neon.srshl
     1, // llvm.aarch64.neon.sshl
     1, // llvm.aarch64.neon.sshll
-    19, // llvm.aarch64.neon.st1x2
-    31, // llvm.aarch64.neon.st1x3
-    32, // llvm.aarch64.neon.st1x4
-    19, // llvm.aarch64.neon.st2
-    31, // llvm.aarch64.neon.st2lane
-    31, // llvm.aarch64.neon.st3
-    32, // llvm.aarch64.neon.st3lane
-    32, // llvm.aarch64.neon.st4
-    33, // llvm.aarch64.neon.st4lane
+    46, // llvm.aarch64.neon.st1x2
+    47, // llvm.aarch64.neon.st1x3
+    48, // llvm.aarch64.neon.st1x4
+    46, // llvm.aarch64.neon.st2
+    47, // llvm.aarch64.neon.st2lane
+    47, // llvm.aarch64.neon.st3
+    48, // llvm.aarch64.neon.st3lane
+    48, // llvm.aarch64.neon.st4
+    49, // llvm.aarch64.neon.st4lane
     1, // llvm.aarch64.neon.subhn
     1, // llvm.aarch64.neon.suqadd
     1, // llvm.aarch64.neon.tbl1
@@ -9474,30 +9833,32 @@
     1, // llvm.aarch64.sisd.fabd
     1, // llvm.aarch64.sisd.fcvtxn
     3, // llvm.aarch64.space
+    50, // llvm.aarch64.stg
     3, // llvm.aarch64.stlxp
     3, // llvm.aarch64.stlxr
     3, // llvm.aarch64.stxp
     3, // llvm.aarch64.stxr
+    1, // llvm.aarch64.subp
     1, // llvm.aarch64.udiv
     4, // llvm.amdgcn.alignbit
     4, // llvm.amdgcn.alignbyte
-    18, // llvm.amdgcn.atomic.dec
-    18, // llvm.amdgcn.atomic.inc
-    3, // llvm.amdgcn.buffer.atomic.add
-    3, // llvm.amdgcn.buffer.atomic.and
-    3, // llvm.amdgcn.buffer.atomic.cmpswap
-    3, // llvm.amdgcn.buffer.atomic.or
-    3, // llvm.amdgcn.buffer.atomic.smax
-    3, // llvm.amdgcn.buffer.atomic.smin
-    3, // llvm.amdgcn.buffer.atomic.sub
-    3, // llvm.amdgcn.buffer.atomic.swap
-    3, // llvm.amdgcn.buffer.atomic.umax
-    3, // llvm.amdgcn.buffer.atomic.umin
-    3, // llvm.amdgcn.buffer.atomic.xor
-    16, // llvm.amdgcn.buffer.load
-    16, // llvm.amdgcn.buffer.load.format
-    34, // llvm.amdgcn.buffer.store
-    34, // llvm.amdgcn.buffer.store.format
+    51, // llvm.amdgcn.atomic.dec
+    51, // llvm.amdgcn.atomic.inc
+    52, // llvm.amdgcn.buffer.atomic.add
+    52, // llvm.amdgcn.buffer.atomic.and
+    53, // llvm.amdgcn.buffer.atomic.cmpswap
+    52, // llvm.amdgcn.buffer.atomic.or
+    52, // llvm.amdgcn.buffer.atomic.smax
+    52, // llvm.amdgcn.buffer.atomic.smin
+    52, // llvm.amdgcn.buffer.atomic.sub
+    52, // llvm.amdgcn.buffer.atomic.swap
+    52, // llvm.amdgcn.buffer.atomic.umax
+    52, // llvm.amdgcn.buffer.atomic.umin
+    52, // llvm.amdgcn.buffer.atomic.xor
+    54, // llvm.amdgcn.buffer.load
+    54, // llvm.amdgcn.buffer.load.format
+    55, // llvm.amdgcn.buffer.store
+    55, // llvm.amdgcn.buffer.store.format
     3, // llvm.amdgcn.buffer.wbinvl1
     3, // llvm.amdgcn.buffer.wbinvl1.sc
     3, // llvm.amdgcn.buffer.wbinvl1.vol
@@ -9517,24 +9878,30 @@
     4, // llvm.amdgcn.dispatch.ptr
     4, // llvm.amdgcn.div.fixup
     4, // llvm.amdgcn.div.fmas
-    4, // llvm.amdgcn.div.scale
-    35, // llvm.amdgcn.ds.append
-    36, // llvm.amdgcn.ds.bpermute
-    35, // llvm.amdgcn.ds.consume
-    18, // llvm.amdgcn.ds.fadd
-    18, // llvm.amdgcn.ds.fmax
-    18, // llvm.amdgcn.ds.fmin
-    37, // llvm.amdgcn.ds.ordered.add
-    37, // llvm.amdgcn.ds.ordered.swap
-    36, // llvm.amdgcn.ds.permute
-    36, // llvm.amdgcn.ds.swizzle
-    38, // llvm.amdgcn.else
-    38, // llvm.amdgcn.end.cf
-    3, // llvm.amdgcn.exp
-    3, // llvm.amdgcn.exp.compr
-    36, // llvm.amdgcn.fcmp
+    41, // llvm.amdgcn.div.scale
+    56, // llvm.amdgcn.ds.append
+    57, // llvm.amdgcn.ds.bpermute
+    56, // llvm.amdgcn.ds.consume
+    51, // llvm.amdgcn.ds.fadd
+    51, // llvm.amdgcn.ds.fmax
+    51, // llvm.amdgcn.ds.fmin
+    58, // llvm.amdgcn.ds.gws.barrier
+    59, // llvm.amdgcn.ds.gws.init
+    58, // llvm.amdgcn.ds.gws.sema.br
+    58, // llvm.amdgcn.ds.gws.sema.p
+    58, // llvm.amdgcn.ds.gws.sema.release.all
+    58, // llvm.amdgcn.ds.gws.sema.v
+    60, // llvm.amdgcn.ds.ordered.add
+    60, // llvm.amdgcn.ds.ordered.swap
+    57, // llvm.amdgcn.ds.permute
+    61, // llvm.amdgcn.ds.swizzle
+    62, // llvm.amdgcn.else
+    62, // llvm.amdgcn.end.cf
+    63, // llvm.amdgcn.exp
+    64, // llvm.amdgcn.exp.compr
+    65, // llvm.amdgcn.fcmp
     4, // llvm.amdgcn.fdiv.fast
-    4, // llvm.amdgcn.fdot2
+    66, // llvm.amdgcn.fdot2
     4, // llvm.amdgcn.fmad.ftz
     4, // llvm.amdgcn.fmed3
     4, // llvm.amdgcn.fmul.legacy
@@ -9542,471 +9909,471 @@
     4, // llvm.amdgcn.frexp.exp
     4, // llvm.amdgcn.frexp.mant
     4, // llvm.amdgcn.groupstaticsize
-    36, // llvm.amdgcn.icmp
-    38, // llvm.amdgcn.if
-    36, // llvm.amdgcn.if.break
-    3, // llvm.amdgcn.image.atomic.add.1d
-    3, // llvm.amdgcn.image.atomic.add.1darray
-    3, // llvm.amdgcn.image.atomic.add.2d
-    3, // llvm.amdgcn.image.atomic.add.2darray
-    3, // llvm.amdgcn.image.atomic.add.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.add.2dmsaa
-    3, // llvm.amdgcn.image.atomic.add.3d
-    3, // llvm.amdgcn.image.atomic.add.cube
-    3, // llvm.amdgcn.image.atomic.and.1d
-    3, // llvm.amdgcn.image.atomic.and.1darray
-    3, // llvm.amdgcn.image.atomic.and.2d
-    3, // llvm.amdgcn.image.atomic.and.2darray
-    3, // llvm.amdgcn.image.atomic.and.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.and.2dmsaa
-    3, // llvm.amdgcn.image.atomic.and.3d
-    3, // llvm.amdgcn.image.atomic.and.cube
-    3, // llvm.amdgcn.image.atomic.cmpswap.1d
-    3, // llvm.amdgcn.image.atomic.cmpswap.1darray
-    3, // llvm.amdgcn.image.atomic.cmpswap.2d
-    3, // llvm.amdgcn.image.atomic.cmpswap.2darray
-    3, // llvm.amdgcn.image.atomic.cmpswap.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.cmpswap.2dmsaa
-    3, // llvm.amdgcn.image.atomic.cmpswap.3d
-    3, // llvm.amdgcn.image.atomic.cmpswap.cube
-    3, // llvm.amdgcn.image.atomic.dec.1d
-    3, // llvm.amdgcn.image.atomic.dec.1darray
-    3, // llvm.amdgcn.image.atomic.dec.2d
-    3, // llvm.amdgcn.image.atomic.dec.2darray
-    3, // llvm.amdgcn.image.atomic.dec.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.dec.2dmsaa
-    3, // llvm.amdgcn.image.atomic.dec.3d
-    3, // llvm.amdgcn.image.atomic.dec.cube
-    3, // llvm.amdgcn.image.atomic.inc.1d
-    3, // llvm.amdgcn.image.atomic.inc.1darray
-    3, // llvm.amdgcn.image.atomic.inc.2d
-    3, // llvm.amdgcn.image.atomic.inc.2darray
-    3, // llvm.amdgcn.image.atomic.inc.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.inc.2dmsaa
-    3, // llvm.amdgcn.image.atomic.inc.3d
-    3, // llvm.amdgcn.image.atomic.inc.cube
-    3, // llvm.amdgcn.image.atomic.or.1d
-    3, // llvm.amdgcn.image.atomic.or.1darray
-    3, // llvm.amdgcn.image.atomic.or.2d
-    3, // llvm.amdgcn.image.atomic.or.2darray
-    3, // llvm.amdgcn.image.atomic.or.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.or.2dmsaa
-    3, // llvm.amdgcn.image.atomic.or.3d
-    3, // llvm.amdgcn.image.atomic.or.cube
-    3, // llvm.amdgcn.image.atomic.smax.1d
-    3, // llvm.amdgcn.image.atomic.smax.1darray
-    3, // llvm.amdgcn.image.atomic.smax.2d
-    3, // llvm.amdgcn.image.atomic.smax.2darray
-    3, // llvm.amdgcn.image.atomic.smax.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.smax.2dmsaa
-    3, // llvm.amdgcn.image.atomic.smax.3d
-    3, // llvm.amdgcn.image.atomic.smax.cube
-    3, // llvm.amdgcn.image.atomic.smin.1d
-    3, // llvm.amdgcn.image.atomic.smin.1darray
-    3, // llvm.amdgcn.image.atomic.smin.2d
-    3, // llvm.amdgcn.image.atomic.smin.2darray
-    3, // llvm.amdgcn.image.atomic.smin.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.smin.2dmsaa
-    3, // llvm.amdgcn.image.atomic.smin.3d
-    3, // llvm.amdgcn.image.atomic.smin.cube
-    3, // llvm.amdgcn.image.atomic.sub.1d
-    3, // llvm.amdgcn.image.atomic.sub.1darray
-    3, // llvm.amdgcn.image.atomic.sub.2d
-    3, // llvm.amdgcn.image.atomic.sub.2darray
-    3, // llvm.amdgcn.image.atomic.sub.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.sub.2dmsaa
-    3, // llvm.amdgcn.image.atomic.sub.3d
-    3, // llvm.amdgcn.image.atomic.sub.cube
-    3, // llvm.amdgcn.image.atomic.swap.1d
-    3, // llvm.amdgcn.image.atomic.swap.1darray
-    3, // llvm.amdgcn.image.atomic.swap.2d
-    3, // llvm.amdgcn.image.atomic.swap.2darray
-    3, // llvm.amdgcn.image.atomic.swap.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.swap.2dmsaa
-    3, // llvm.amdgcn.image.atomic.swap.3d
-    3, // llvm.amdgcn.image.atomic.swap.cube
-    3, // llvm.amdgcn.image.atomic.umax.1d
-    3, // llvm.amdgcn.image.atomic.umax.1darray
-    3, // llvm.amdgcn.image.atomic.umax.2d
-    3, // llvm.amdgcn.image.atomic.umax.2darray
-    3, // llvm.amdgcn.image.atomic.umax.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.umax.2dmsaa
-    3, // llvm.amdgcn.image.atomic.umax.3d
-    3, // llvm.amdgcn.image.atomic.umax.cube
-    3, // llvm.amdgcn.image.atomic.umin.1d
-    3, // llvm.amdgcn.image.atomic.umin.1darray
-    3, // llvm.amdgcn.image.atomic.umin.2d
-    3, // llvm.amdgcn.image.atomic.umin.2darray
-    3, // llvm.amdgcn.image.atomic.umin.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.umin.2dmsaa
-    3, // llvm.amdgcn.image.atomic.umin.3d
-    3, // llvm.amdgcn.image.atomic.umin.cube
-    3, // llvm.amdgcn.image.atomic.xor.1d
-    3, // llvm.amdgcn.image.atomic.xor.1darray
-    3, // llvm.amdgcn.image.atomic.xor.2d
-    3, // llvm.amdgcn.image.atomic.xor.2darray
-    3, // llvm.amdgcn.image.atomic.xor.2darraymsaa
-    3, // llvm.amdgcn.image.atomic.xor.2dmsaa
-    3, // llvm.amdgcn.image.atomic.xor.3d
-    3, // llvm.amdgcn.image.atomic.xor.cube
-    16, // llvm.amdgcn.image.gather4.2d
-    16, // llvm.amdgcn.image.gather4.2darray
-    16, // llvm.amdgcn.image.gather4.b.2d
-    16, // llvm.amdgcn.image.gather4.b.2darray
-    16, // llvm.amdgcn.image.gather4.b.cl.2d
-    16, // llvm.amdgcn.image.gather4.b.cl.2darray
-    16, // llvm.amdgcn.image.gather4.b.cl.cube
-    16, // llvm.amdgcn.image.gather4.b.cl.o.2d
-    16, // llvm.amdgcn.image.gather4.b.cl.o.2darray
-    16, // llvm.amdgcn.image.gather4.b.cl.o.cube
-    16, // llvm.amdgcn.image.gather4.b.cube
-    16, // llvm.amdgcn.image.gather4.b.o.2d
-    16, // llvm.amdgcn.image.gather4.b.o.2darray
-    16, // llvm.amdgcn.image.gather4.b.o.cube
-    16, // llvm.amdgcn.image.gather4.c.2d
-    16, // llvm.amdgcn.image.gather4.c.2darray
-    16, // llvm.amdgcn.image.gather4.c.b.2d
-    16, // llvm.amdgcn.image.gather4.c.b.2darray
-    16, // llvm.amdgcn.image.gather4.c.b.cl.2d
-    16, // llvm.amdgcn.image.gather4.c.b.cl.2darray
-    16, // llvm.amdgcn.image.gather4.c.b.cl.cube
-    16, // llvm.amdgcn.image.gather4.c.b.cl.o.2d
-    16, // llvm.amdgcn.image.gather4.c.b.cl.o.2darray
-    16, // llvm.amdgcn.image.gather4.c.b.cl.o.cube
-    16, // llvm.amdgcn.image.gather4.c.b.cube
-    16, // llvm.amdgcn.image.gather4.c.b.o.2d
-    16, // llvm.amdgcn.image.gather4.c.b.o.2darray
-    16, // llvm.amdgcn.image.gather4.c.b.o.cube
-    16, // llvm.amdgcn.image.gather4.c.cl.2d
-    16, // llvm.amdgcn.image.gather4.c.cl.2darray
-    16, // llvm.amdgcn.image.gather4.c.cl.cube
-    16, // llvm.amdgcn.image.gather4.c.cl.o.2d
-    16, // llvm.amdgcn.image.gather4.c.cl.o.2darray
-    16, // llvm.amdgcn.image.gather4.c.cl.o.cube
-    16, // llvm.amdgcn.image.gather4.c.cube
-    16, // llvm.amdgcn.image.gather4.c.l.2d
-    16, // llvm.amdgcn.image.gather4.c.l.2darray
-    16, // llvm.amdgcn.image.gather4.c.l.cube
-    16, // llvm.amdgcn.image.gather4.c.l.o.2d
-    16, // llvm.amdgcn.image.gather4.c.l.o.2darray
-    16, // llvm.amdgcn.image.gather4.c.l.o.cube
-    16, // llvm.amdgcn.image.gather4.c.lz.2d
-    16, // llvm.amdgcn.image.gather4.c.lz.2darray
-    16, // llvm.amdgcn.image.gather4.c.lz.cube
-    16, // llvm.amdgcn.image.gather4.c.lz.o.2d
-    16, // llvm.amdgcn.image.gather4.c.lz.o.2darray
-    16, // llvm.amdgcn.image.gather4.c.lz.o.cube
-    16, // llvm.amdgcn.image.gather4.c.o.2d
-    16, // llvm.amdgcn.image.gather4.c.o.2darray
-    16, // llvm.amdgcn.image.gather4.c.o.cube
-    16, // llvm.amdgcn.image.gather4.cl.2d
-    16, // llvm.amdgcn.image.gather4.cl.2darray
-    16, // llvm.amdgcn.image.gather4.cl.cube
-    16, // llvm.amdgcn.image.gather4.cl.o.2d
-    16, // llvm.amdgcn.image.gather4.cl.o.2darray
-    16, // llvm.amdgcn.image.gather4.cl.o.cube
-    16, // llvm.amdgcn.image.gather4.cube
-    16, // llvm.amdgcn.image.gather4.l.2d
-    16, // llvm.amdgcn.image.gather4.l.2darray
-    16, // llvm.amdgcn.image.gather4.l.cube
-    16, // llvm.amdgcn.image.gather4.l.o.2d
-    16, // llvm.amdgcn.image.gather4.l.o.2darray
-    16, // llvm.amdgcn.image.gather4.l.o.cube
-    16, // llvm.amdgcn.image.gather4.lz.2d
-    16, // llvm.amdgcn.image.gather4.lz.2darray
-    16, // llvm.amdgcn.image.gather4.lz.cube
-    16, // llvm.amdgcn.image.gather4.lz.o.2d
-    16, // llvm.amdgcn.image.gather4.lz.o.2darray
-    16, // llvm.amdgcn.image.gather4.lz.o.cube
-    16, // llvm.amdgcn.image.gather4.o.2d
-    16, // llvm.amdgcn.image.gather4.o.2darray
-    16, // llvm.amdgcn.image.gather4.o.cube
-    1, // llvm.amdgcn.image.getlod.1d
-    1, // llvm.amdgcn.image.getlod.1darray
-    1, // llvm.amdgcn.image.getlod.2d
-    1, // llvm.amdgcn.image.getlod.2darray
-    1, // llvm.amdgcn.image.getlod.3d
-    1, // llvm.amdgcn.image.getlod.cube
-    1, // llvm.amdgcn.image.getresinfo.1d
-    1, // llvm.amdgcn.image.getresinfo.1darray
-    1, // llvm.amdgcn.image.getresinfo.2d
-    1, // llvm.amdgcn.image.getresinfo.2darray
-    1, // llvm.amdgcn.image.getresinfo.2darraymsaa
-    1, // llvm.amdgcn.image.getresinfo.2dmsaa
-    1, // llvm.amdgcn.image.getresinfo.3d
-    1, // llvm.amdgcn.image.getresinfo.cube
-    16, // llvm.amdgcn.image.load.1d
-    16, // llvm.amdgcn.image.load.1darray
-    16, // llvm.amdgcn.image.load.2d
-    16, // llvm.amdgcn.image.load.2darray
-    16, // llvm.amdgcn.image.load.2darraymsaa
-    16, // llvm.amdgcn.image.load.2dmsaa
-    16, // llvm.amdgcn.image.load.3d
-    16, // llvm.amdgcn.image.load.cube
-    16, // llvm.amdgcn.image.load.mip.1d
-    16, // llvm.amdgcn.image.load.mip.1darray
-    16, // llvm.amdgcn.image.load.mip.2d
-    16, // llvm.amdgcn.image.load.mip.2darray
-    16, // llvm.amdgcn.image.load.mip.3d
-    16, // llvm.amdgcn.image.load.mip.cube
-    16, // llvm.amdgcn.image.sample.1d
-    16, // llvm.amdgcn.image.sample.1darray
-    16, // llvm.amdgcn.image.sample.2d
-    16, // llvm.amdgcn.image.sample.2darray
-    16, // llvm.amdgcn.image.sample.3d
-    16, // llvm.amdgcn.image.sample.b.1d
-    16, // llvm.amdgcn.image.sample.b.1darray
-    16, // llvm.amdgcn.image.sample.b.2d
-    16, // llvm.amdgcn.image.sample.b.2darray
-    16, // llvm.amdgcn.image.sample.b.3d
-    16, // llvm.amdgcn.image.sample.b.cl.1d
-    16, // llvm.amdgcn.image.sample.b.cl.1darray
-    16, // llvm.amdgcn.image.sample.b.cl.2d
-    16, // llvm.amdgcn.image.sample.b.cl.2darray
-    16, // llvm.amdgcn.image.sample.b.cl.3d
-    16, // llvm.amdgcn.image.sample.b.cl.cube
-    16, // llvm.amdgcn.image.sample.b.cl.o.1d
-    16, // llvm.amdgcn.image.sample.b.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.b.cl.o.2d
-    16, // llvm.amdgcn.image.sample.b.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.b.cl.o.3d
-    16, // llvm.amdgcn.image.sample.b.cl.o.cube
-    16, // llvm.amdgcn.image.sample.b.cube
-    16, // llvm.amdgcn.image.sample.b.o.1d
-    16, // llvm.amdgcn.image.sample.b.o.1darray
-    16, // llvm.amdgcn.image.sample.b.o.2d
-    16, // llvm.amdgcn.image.sample.b.o.2darray
-    16, // llvm.amdgcn.image.sample.b.o.3d
-    16, // llvm.amdgcn.image.sample.b.o.cube
-    16, // llvm.amdgcn.image.sample.c.1d
-    16, // llvm.amdgcn.image.sample.c.1darray
-    16, // llvm.amdgcn.image.sample.c.2d
-    16, // llvm.amdgcn.image.sample.c.2darray
-    16, // llvm.amdgcn.image.sample.c.3d
-    16, // llvm.amdgcn.image.sample.c.b.1d
-    16, // llvm.amdgcn.image.sample.c.b.1darray
-    16, // llvm.amdgcn.image.sample.c.b.2d
-    16, // llvm.amdgcn.image.sample.c.b.2darray
-    16, // llvm.amdgcn.image.sample.c.b.3d
-    16, // llvm.amdgcn.image.sample.c.b.cl.1d
-    16, // llvm.amdgcn.image.sample.c.b.cl.1darray
-    16, // llvm.amdgcn.image.sample.c.b.cl.2d
-    16, // llvm.amdgcn.image.sample.c.b.cl.2darray
-    16, // llvm.amdgcn.image.sample.c.b.cl.3d
-    16, // llvm.amdgcn.image.sample.c.b.cl.cube
-    16, // llvm.amdgcn.image.sample.c.b.cl.o.1d
-    16, // llvm.amdgcn.image.sample.c.b.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.c.b.cl.o.2d
-    16, // llvm.amdgcn.image.sample.c.b.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.c.b.cl.o.3d
-    16, // llvm.amdgcn.image.sample.c.b.cl.o.cube
-    16, // llvm.amdgcn.image.sample.c.b.cube
-    16, // llvm.amdgcn.image.sample.c.b.o.1d
-    16, // llvm.amdgcn.image.sample.c.b.o.1darray
-    16, // llvm.amdgcn.image.sample.c.b.o.2d
-    16, // llvm.amdgcn.image.sample.c.b.o.2darray
-    16, // llvm.amdgcn.image.sample.c.b.o.3d
-    16, // llvm.amdgcn.image.sample.c.b.o.cube
-    16, // llvm.amdgcn.image.sample.c.cd.1d
-    16, // llvm.amdgcn.image.sample.c.cd.1darray
-    16, // llvm.amdgcn.image.sample.c.cd.2d
-    16, // llvm.amdgcn.image.sample.c.cd.2darray
-    16, // llvm.amdgcn.image.sample.c.cd.3d
-    16, // llvm.amdgcn.image.sample.c.cd.cl.1d
-    16, // llvm.amdgcn.image.sample.c.cd.cl.1darray
-    16, // llvm.amdgcn.image.sample.c.cd.cl.2d
-    16, // llvm.amdgcn.image.sample.c.cd.cl.2darray
-    16, // llvm.amdgcn.image.sample.c.cd.cl.3d
-    16, // llvm.amdgcn.image.sample.c.cd.cl.cube
-    16, // llvm.amdgcn.image.sample.c.cd.cl.o.1d
-    16, // llvm.amdgcn.image.sample.c.cd.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.c.cd.cl.o.2d
-    16, // llvm.amdgcn.image.sample.c.cd.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.c.cd.cl.o.3d
-    16, // llvm.amdgcn.image.sample.c.cd.cl.o.cube
-    16, // llvm.amdgcn.image.sample.c.cd.cube
-    16, // llvm.amdgcn.image.sample.c.cd.o.1d
-    16, // llvm.amdgcn.image.sample.c.cd.o.1darray
-    16, // llvm.amdgcn.image.sample.c.cd.o.2d
-    16, // llvm.amdgcn.image.sample.c.cd.o.2darray
-    16, // llvm.amdgcn.image.sample.c.cd.o.3d
-    16, // llvm.amdgcn.image.sample.c.cd.o.cube
-    16, // llvm.amdgcn.image.sample.c.cl.1d
-    16, // llvm.amdgcn.image.sample.c.cl.1darray
-    16, // llvm.amdgcn.image.sample.c.cl.2d
-    16, // llvm.amdgcn.image.sample.c.cl.2darray
-    16, // llvm.amdgcn.image.sample.c.cl.3d
-    16, // llvm.amdgcn.image.sample.c.cl.cube
-    16, // llvm.amdgcn.image.sample.c.cl.o.1d
-    16, // llvm.amdgcn.image.sample.c.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.c.cl.o.2d
-    16, // llvm.amdgcn.image.sample.c.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.c.cl.o.3d
-    16, // llvm.amdgcn.image.sample.c.cl.o.cube
-    16, // llvm.amdgcn.image.sample.c.cube
-    16, // llvm.amdgcn.image.sample.c.d.1d
-    16, // llvm.amdgcn.image.sample.c.d.1darray
-    16, // llvm.amdgcn.image.sample.c.d.2d
-    16, // llvm.amdgcn.image.sample.c.d.2darray
-    16, // llvm.amdgcn.image.sample.c.d.3d
-    16, // llvm.amdgcn.image.sample.c.d.cl.1d
-    16, // llvm.amdgcn.image.sample.c.d.cl.1darray
-    16, // llvm.amdgcn.image.sample.c.d.cl.2d
-    16, // llvm.amdgcn.image.sample.c.d.cl.2darray
-    16, // llvm.amdgcn.image.sample.c.d.cl.3d
-    16, // llvm.amdgcn.image.sample.c.d.cl.cube
-    16, // llvm.amdgcn.image.sample.c.d.cl.o.1d
-    16, // llvm.amdgcn.image.sample.c.d.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.c.d.cl.o.2d
-    16, // llvm.amdgcn.image.sample.c.d.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.c.d.cl.o.3d
-    16, // llvm.amdgcn.image.sample.c.d.cl.o.cube
-    16, // llvm.amdgcn.image.sample.c.d.cube
-    16, // llvm.amdgcn.image.sample.c.d.o.1d
-    16, // llvm.amdgcn.image.sample.c.d.o.1darray
-    16, // llvm.amdgcn.image.sample.c.d.o.2d
-    16, // llvm.amdgcn.image.sample.c.d.o.2darray
-    16, // llvm.amdgcn.image.sample.c.d.o.3d
-    16, // llvm.amdgcn.image.sample.c.d.o.cube
-    16, // llvm.amdgcn.image.sample.c.l.1d
-    16, // llvm.amdgcn.image.sample.c.l.1darray
-    16, // llvm.amdgcn.image.sample.c.l.2d
-    16, // llvm.amdgcn.image.sample.c.l.2darray
-    16, // llvm.amdgcn.image.sample.c.l.3d
-    16, // llvm.amdgcn.image.sample.c.l.cube
-    16, // llvm.amdgcn.image.sample.c.l.o.1d
-    16, // llvm.amdgcn.image.sample.c.l.o.1darray
-    16, // llvm.amdgcn.image.sample.c.l.o.2d
-    16, // llvm.amdgcn.image.sample.c.l.o.2darray
-    16, // llvm.amdgcn.image.sample.c.l.o.3d
-    16, // llvm.amdgcn.image.sample.c.l.o.cube
-    16, // llvm.amdgcn.image.sample.c.lz.1d
-    16, // llvm.amdgcn.image.sample.c.lz.1darray
-    16, // llvm.amdgcn.image.sample.c.lz.2d
-    16, // llvm.amdgcn.image.sample.c.lz.2darray
-    16, // llvm.amdgcn.image.sample.c.lz.3d
-    16, // llvm.amdgcn.image.sample.c.lz.cube
-    16, // llvm.amdgcn.image.sample.c.lz.o.1d
-    16, // llvm.amdgcn.image.sample.c.lz.o.1darray
-    16, // llvm.amdgcn.image.sample.c.lz.o.2d
-    16, // llvm.amdgcn.image.sample.c.lz.o.2darray
-    16, // llvm.amdgcn.image.sample.c.lz.o.3d
-    16, // llvm.amdgcn.image.sample.c.lz.o.cube
-    16, // llvm.amdgcn.image.sample.c.o.1d
-    16, // llvm.amdgcn.image.sample.c.o.1darray
-    16, // llvm.amdgcn.image.sample.c.o.2d
-    16, // llvm.amdgcn.image.sample.c.o.2darray
-    16, // llvm.amdgcn.image.sample.c.o.3d
-    16, // llvm.amdgcn.image.sample.c.o.cube
-    16, // llvm.amdgcn.image.sample.cd.1d
-    16, // llvm.amdgcn.image.sample.cd.1darray
-    16, // llvm.amdgcn.image.sample.cd.2d
-    16, // llvm.amdgcn.image.sample.cd.2darray
-    16, // llvm.amdgcn.image.sample.cd.3d
-    16, // llvm.amdgcn.image.sample.cd.cl.1d
-    16, // llvm.amdgcn.image.sample.cd.cl.1darray
-    16, // llvm.amdgcn.image.sample.cd.cl.2d
-    16, // llvm.amdgcn.image.sample.cd.cl.2darray
-    16, // llvm.amdgcn.image.sample.cd.cl.3d
-    16, // llvm.amdgcn.image.sample.cd.cl.cube
-    16, // llvm.amdgcn.image.sample.cd.cl.o.1d
-    16, // llvm.amdgcn.image.sample.cd.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.cd.cl.o.2d
-    16, // llvm.amdgcn.image.sample.cd.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.cd.cl.o.3d
-    16, // llvm.amdgcn.image.sample.cd.cl.o.cube
-    16, // llvm.amdgcn.image.sample.cd.cube
-    16, // llvm.amdgcn.image.sample.cd.o.1d
-    16, // llvm.amdgcn.image.sample.cd.o.1darray
-    16, // llvm.amdgcn.image.sample.cd.o.2d
-    16, // llvm.amdgcn.image.sample.cd.o.2darray
-    16, // llvm.amdgcn.image.sample.cd.o.3d
-    16, // llvm.amdgcn.image.sample.cd.o.cube
-    16, // llvm.amdgcn.image.sample.cl.1d
-    16, // llvm.amdgcn.image.sample.cl.1darray
-    16, // llvm.amdgcn.image.sample.cl.2d
-    16, // llvm.amdgcn.image.sample.cl.2darray
-    16, // llvm.amdgcn.image.sample.cl.3d
-    16, // llvm.amdgcn.image.sample.cl.cube
-    16, // llvm.amdgcn.image.sample.cl.o.1d
-    16, // llvm.amdgcn.image.sample.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.cl.o.2d
-    16, // llvm.amdgcn.image.sample.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.cl.o.3d
-    16, // llvm.amdgcn.image.sample.cl.o.cube
-    16, // llvm.amdgcn.image.sample.cube
-    16, // llvm.amdgcn.image.sample.d.1d
-    16, // llvm.amdgcn.image.sample.d.1darray
-    16, // llvm.amdgcn.image.sample.d.2d
-    16, // llvm.amdgcn.image.sample.d.2darray
-    16, // llvm.amdgcn.image.sample.d.3d
-    16, // llvm.amdgcn.image.sample.d.cl.1d
-    16, // llvm.amdgcn.image.sample.d.cl.1darray
-    16, // llvm.amdgcn.image.sample.d.cl.2d
-    16, // llvm.amdgcn.image.sample.d.cl.2darray
-    16, // llvm.amdgcn.image.sample.d.cl.3d
-    16, // llvm.amdgcn.image.sample.d.cl.cube
-    16, // llvm.amdgcn.image.sample.d.cl.o.1d
-    16, // llvm.amdgcn.image.sample.d.cl.o.1darray
-    16, // llvm.amdgcn.image.sample.d.cl.o.2d
-    16, // llvm.amdgcn.image.sample.d.cl.o.2darray
-    16, // llvm.amdgcn.image.sample.d.cl.o.3d
-    16, // llvm.amdgcn.image.sample.d.cl.o.cube
-    16, // llvm.amdgcn.image.sample.d.cube
-    16, // llvm.amdgcn.image.sample.d.o.1d
-    16, // llvm.amdgcn.image.sample.d.o.1darray
-    16, // llvm.amdgcn.image.sample.d.o.2d
-    16, // llvm.amdgcn.image.sample.d.o.2darray
-    16, // llvm.amdgcn.image.sample.d.o.3d
-    16, // llvm.amdgcn.image.sample.d.o.cube
-    16, // llvm.amdgcn.image.sample.l.1d
-    16, // llvm.amdgcn.image.sample.l.1darray
-    16, // llvm.amdgcn.image.sample.l.2d
-    16, // llvm.amdgcn.image.sample.l.2darray
-    16, // llvm.amdgcn.image.sample.l.3d
-    16, // llvm.amdgcn.image.sample.l.cube
-    16, // llvm.amdgcn.image.sample.l.o.1d
-    16, // llvm.amdgcn.image.sample.l.o.1darray
-    16, // llvm.amdgcn.image.sample.l.o.2d
-    16, // llvm.amdgcn.image.sample.l.o.2darray
-    16, // llvm.amdgcn.image.sample.l.o.3d
-    16, // llvm.amdgcn.image.sample.l.o.cube
-    16, // llvm.amdgcn.image.sample.lz.1d
-    16, // llvm.amdgcn.image.sample.lz.1darray
-    16, // llvm.amdgcn.image.sample.lz.2d
-    16, // llvm.amdgcn.image.sample.lz.2darray
-    16, // llvm.amdgcn.image.sample.lz.3d
-    16, // llvm.amdgcn.image.sample.lz.cube
-    16, // llvm.amdgcn.image.sample.lz.o.1d
-    16, // llvm.amdgcn.image.sample.lz.o.1darray
-    16, // llvm.amdgcn.image.sample.lz.o.2d
-    16, // llvm.amdgcn.image.sample.lz.o.2darray
-    16, // llvm.amdgcn.image.sample.lz.o.3d
-    16, // llvm.amdgcn.image.sample.lz.o.cube
-    16, // llvm.amdgcn.image.sample.o.1d
-    16, // llvm.amdgcn.image.sample.o.1darray
-    16, // llvm.amdgcn.image.sample.o.2d
-    16, // llvm.amdgcn.image.sample.o.2darray
-    16, // llvm.amdgcn.image.sample.o.3d
-    16, // llvm.amdgcn.image.sample.o.cube
-    34, // llvm.amdgcn.image.store.1d
-    34, // llvm.amdgcn.image.store.1darray
-    34, // llvm.amdgcn.image.store.2d
-    34, // llvm.amdgcn.image.store.2darray
-    34, // llvm.amdgcn.image.store.2darraymsaa
-    34, // llvm.amdgcn.image.store.2dmsaa
-    34, // llvm.amdgcn.image.store.3d
-    34, // llvm.amdgcn.image.store.cube
-    34, // llvm.amdgcn.image.store.mip.1d
-    34, // llvm.amdgcn.image.store.mip.1darray
-    34, // llvm.amdgcn.image.store.mip.2d
-    34, // llvm.amdgcn.image.store.mip.2darray
-    34, // llvm.amdgcn.image.store.mip.3d
-    34, // llvm.amdgcn.image.store.mip.cube
+    65, // llvm.amdgcn.icmp
+    62, // llvm.amdgcn.if
+    57, // llvm.amdgcn.if.break
+    67, // llvm.amdgcn.image.atomic.add.1d
+    68, // llvm.amdgcn.image.atomic.add.1darray
+    68, // llvm.amdgcn.image.atomic.add.2d
+    69, // llvm.amdgcn.image.atomic.add.2darray
+    70, // llvm.amdgcn.image.atomic.add.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.add.2dmsaa
+    69, // llvm.amdgcn.image.atomic.add.3d
+    69, // llvm.amdgcn.image.atomic.add.cube
+    67, // llvm.amdgcn.image.atomic.and.1d
+    68, // llvm.amdgcn.image.atomic.and.1darray
+    68, // llvm.amdgcn.image.atomic.and.2d
+    69, // llvm.amdgcn.image.atomic.and.2darray
+    70, // llvm.amdgcn.image.atomic.and.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.and.2dmsaa
+    69, // llvm.amdgcn.image.atomic.and.3d
+    69, // llvm.amdgcn.image.atomic.and.cube
+    68, // llvm.amdgcn.image.atomic.cmpswap.1d
+    69, // llvm.amdgcn.image.atomic.cmpswap.1darray
+    69, // llvm.amdgcn.image.atomic.cmpswap.2d
+    70, // llvm.amdgcn.image.atomic.cmpswap.2darray
+    71, // llvm.amdgcn.image.atomic.cmpswap.2darraymsaa
+    70, // llvm.amdgcn.image.atomic.cmpswap.2dmsaa
+    70, // llvm.amdgcn.image.atomic.cmpswap.3d
+    70, // llvm.amdgcn.image.atomic.cmpswap.cube
+    67, // llvm.amdgcn.image.atomic.dec.1d
+    68, // llvm.amdgcn.image.atomic.dec.1darray
+    68, // llvm.amdgcn.image.atomic.dec.2d
+    69, // llvm.amdgcn.image.atomic.dec.2darray
+    70, // llvm.amdgcn.image.atomic.dec.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.dec.2dmsaa
+    69, // llvm.amdgcn.image.atomic.dec.3d
+    69, // llvm.amdgcn.image.atomic.dec.cube
+    67, // llvm.amdgcn.image.atomic.inc.1d
+    68, // llvm.amdgcn.image.atomic.inc.1darray
+    68, // llvm.amdgcn.image.atomic.inc.2d
+    69, // llvm.amdgcn.image.atomic.inc.2darray
+    70, // llvm.amdgcn.image.atomic.inc.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.inc.2dmsaa
+    69, // llvm.amdgcn.image.atomic.inc.3d
+    69, // llvm.amdgcn.image.atomic.inc.cube
+    67, // llvm.amdgcn.image.atomic.or.1d
+    68, // llvm.amdgcn.image.atomic.or.1darray
+    68, // llvm.amdgcn.image.atomic.or.2d
+    69, // llvm.amdgcn.image.atomic.or.2darray
+    70, // llvm.amdgcn.image.atomic.or.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.or.2dmsaa
+    69, // llvm.amdgcn.image.atomic.or.3d
+    69, // llvm.amdgcn.image.atomic.or.cube
+    67, // llvm.amdgcn.image.atomic.smax.1d
+    68, // llvm.amdgcn.image.atomic.smax.1darray
+    68, // llvm.amdgcn.image.atomic.smax.2d
+    69, // llvm.amdgcn.image.atomic.smax.2darray
+    70, // llvm.amdgcn.image.atomic.smax.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.smax.2dmsaa
+    69, // llvm.amdgcn.image.atomic.smax.3d
+    69, // llvm.amdgcn.image.atomic.smax.cube
+    67, // llvm.amdgcn.image.atomic.smin.1d
+    68, // llvm.amdgcn.image.atomic.smin.1darray
+    68, // llvm.amdgcn.image.atomic.smin.2d
+    69, // llvm.amdgcn.image.atomic.smin.2darray
+    70, // llvm.amdgcn.image.atomic.smin.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.smin.2dmsaa
+    69, // llvm.amdgcn.image.atomic.smin.3d
+    69, // llvm.amdgcn.image.atomic.smin.cube
+    67, // llvm.amdgcn.image.atomic.sub.1d
+    68, // llvm.amdgcn.image.atomic.sub.1darray
+    68, // llvm.amdgcn.image.atomic.sub.2d
+    69, // llvm.amdgcn.image.atomic.sub.2darray
+    70, // llvm.amdgcn.image.atomic.sub.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.sub.2dmsaa
+    69, // llvm.amdgcn.image.atomic.sub.3d
+    69, // llvm.amdgcn.image.atomic.sub.cube
+    67, // llvm.amdgcn.image.atomic.swap.1d
+    68, // llvm.amdgcn.image.atomic.swap.1darray
+    68, // llvm.amdgcn.image.atomic.swap.2d
+    69, // llvm.amdgcn.image.atomic.swap.2darray
+    70, // llvm.amdgcn.image.atomic.swap.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.swap.2dmsaa
+    69, // llvm.amdgcn.image.atomic.swap.3d
+    69, // llvm.amdgcn.image.atomic.swap.cube
+    67, // llvm.amdgcn.image.atomic.umax.1d
+    68, // llvm.amdgcn.image.atomic.umax.1darray
+    68, // llvm.amdgcn.image.atomic.umax.2d
+    69, // llvm.amdgcn.image.atomic.umax.2darray
+    70, // llvm.amdgcn.image.atomic.umax.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.umax.2dmsaa
+    69, // llvm.amdgcn.image.atomic.umax.3d
+    69, // llvm.amdgcn.image.atomic.umax.cube
+    67, // llvm.amdgcn.image.atomic.umin.1d
+    68, // llvm.amdgcn.image.atomic.umin.1darray
+    68, // llvm.amdgcn.image.atomic.umin.2d
+    69, // llvm.amdgcn.image.atomic.umin.2darray
+    70, // llvm.amdgcn.image.atomic.umin.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.umin.2dmsaa
+    69, // llvm.amdgcn.image.atomic.umin.3d
+    69, // llvm.amdgcn.image.atomic.umin.cube
+    67, // llvm.amdgcn.image.atomic.xor.1d
+    68, // llvm.amdgcn.image.atomic.xor.1darray
+    68, // llvm.amdgcn.image.atomic.xor.2d
+    69, // llvm.amdgcn.image.atomic.xor.2darray
+    70, // llvm.amdgcn.image.atomic.xor.2darraymsaa
+    69, // llvm.amdgcn.image.atomic.xor.2dmsaa
+    69, // llvm.amdgcn.image.atomic.xor.3d
+    69, // llvm.amdgcn.image.atomic.xor.cube
+    72, // llvm.amdgcn.image.gather4.2d
+    73, // llvm.amdgcn.image.gather4.2darray
+    73, // llvm.amdgcn.image.gather4.b.2d
+    74, // llvm.amdgcn.image.gather4.b.2darray
+    74, // llvm.amdgcn.image.gather4.b.cl.2d
+    75, // llvm.amdgcn.image.gather4.b.cl.2darray
+    75, // llvm.amdgcn.image.gather4.b.cl.cube
+    75, // llvm.amdgcn.image.gather4.b.cl.o.2d
+    76, // llvm.amdgcn.image.gather4.b.cl.o.2darray
+    76, // llvm.amdgcn.image.gather4.b.cl.o.cube
+    74, // llvm.amdgcn.image.gather4.b.cube
+    74, // llvm.amdgcn.image.gather4.b.o.2d
+    75, // llvm.amdgcn.image.gather4.b.o.2darray
+    75, // llvm.amdgcn.image.gather4.b.o.cube
+    73, // llvm.amdgcn.image.gather4.c.2d
+    74, // llvm.amdgcn.image.gather4.c.2darray
+    74, // llvm.amdgcn.image.gather4.c.b.2d
+    75, // llvm.amdgcn.image.gather4.c.b.2darray
+    75, // llvm.amdgcn.image.gather4.c.b.cl.2d
+    76, // llvm.amdgcn.image.gather4.c.b.cl.2darray
+    76, // llvm.amdgcn.image.gather4.c.b.cl.cube
+    76, // llvm.amdgcn.image.gather4.c.b.cl.o.2d
+    77, // llvm.amdgcn.image.gather4.c.b.cl.o.2darray
+    77, // llvm.amdgcn.image.gather4.c.b.cl.o.cube
+    75, // llvm.amdgcn.image.gather4.c.b.cube
+    75, // llvm.amdgcn.image.gather4.c.b.o.2d
+    76, // llvm.amdgcn.image.gather4.c.b.o.2darray
+    76, // llvm.amdgcn.image.gather4.c.b.o.cube
+    74, // llvm.amdgcn.image.gather4.c.cl.2d
+    75, // llvm.amdgcn.image.gather4.c.cl.2darray
+    75, // llvm.amdgcn.image.gather4.c.cl.cube
+    75, // llvm.amdgcn.image.gather4.c.cl.o.2d
+    76, // llvm.amdgcn.image.gather4.c.cl.o.2darray
+    76, // llvm.amdgcn.image.gather4.c.cl.o.cube
+    74, // llvm.amdgcn.image.gather4.c.cube
+    74, // llvm.amdgcn.image.gather4.c.l.2d
+    75, // llvm.amdgcn.image.gather4.c.l.2darray
+    75, // llvm.amdgcn.image.gather4.c.l.cube
+    75, // llvm.amdgcn.image.gather4.c.l.o.2d
+    76, // llvm.amdgcn.image.gather4.c.l.o.2darray
+    76, // llvm.amdgcn.image.gather4.c.l.o.cube
+    73, // llvm.amdgcn.image.gather4.c.lz.2d
+    74, // llvm.amdgcn.image.gather4.c.lz.2darray
+    74, // llvm.amdgcn.image.gather4.c.lz.cube
+    74, // llvm.amdgcn.image.gather4.c.lz.o.2d
+    75, // llvm.amdgcn.image.gather4.c.lz.o.2darray
+    75, // llvm.amdgcn.image.gather4.c.lz.o.cube
+    74, // llvm.amdgcn.image.gather4.c.o.2d
+    75, // llvm.amdgcn.image.gather4.c.o.2darray
+    75, // llvm.amdgcn.image.gather4.c.o.cube
+    73, // llvm.amdgcn.image.gather4.cl.2d
+    74, // llvm.amdgcn.image.gather4.cl.2darray
+    74, // llvm.amdgcn.image.gather4.cl.cube
+    74, // llvm.amdgcn.image.gather4.cl.o.2d
+    75, // llvm.amdgcn.image.gather4.cl.o.2darray
+    75, // llvm.amdgcn.image.gather4.cl.o.cube
+    73, // llvm.amdgcn.image.gather4.cube
+    73, // llvm.amdgcn.image.gather4.l.2d
+    74, // llvm.amdgcn.image.gather4.l.2darray
+    74, // llvm.amdgcn.image.gather4.l.cube
+    74, // llvm.amdgcn.image.gather4.l.o.2d
+    75, // llvm.amdgcn.image.gather4.l.o.2darray
+    75, // llvm.amdgcn.image.gather4.l.o.cube
+    72, // llvm.amdgcn.image.gather4.lz.2d
+    73, // llvm.amdgcn.image.gather4.lz.2darray
+    73, // llvm.amdgcn.image.gather4.lz.cube
+    73, // llvm.amdgcn.image.gather4.lz.o.2d
+    74, // llvm.amdgcn.image.gather4.lz.o.2darray
+    74, // llvm.amdgcn.image.gather4.lz.o.cube
+    73, // llvm.amdgcn.image.gather4.o.2d
+    74, // llvm.amdgcn.image.gather4.o.2darray
+    74, // llvm.amdgcn.image.gather4.o.cube
+    78, // llvm.amdgcn.image.getlod.1d
+    79, // llvm.amdgcn.image.getlod.1darray
+    79, // llvm.amdgcn.image.getlod.2d
+    80, // llvm.amdgcn.image.getlod.2darray
+    80, // llvm.amdgcn.image.getlod.3d
+    80, // llvm.amdgcn.image.getlod.cube
+    81, // llvm.amdgcn.image.getresinfo.1d
+    81, // llvm.amdgcn.image.getresinfo.1darray
+    81, // llvm.amdgcn.image.getresinfo.2d
+    81, // llvm.amdgcn.image.getresinfo.2darray
+    81, // llvm.amdgcn.image.getresinfo.2darraymsaa
+    81, // llvm.amdgcn.image.getresinfo.2dmsaa
+    81, // llvm.amdgcn.image.getresinfo.3d
+    81, // llvm.amdgcn.image.getresinfo.cube
+    82, // llvm.amdgcn.image.load.1d
+    83, // llvm.amdgcn.image.load.1darray
+    83, // llvm.amdgcn.image.load.2d
+    84, // llvm.amdgcn.image.load.2darray
+    85, // llvm.amdgcn.image.load.2darraymsaa
+    84, // llvm.amdgcn.image.load.2dmsaa
+    84, // llvm.amdgcn.image.load.3d
+    84, // llvm.amdgcn.image.load.cube
+    83, // llvm.amdgcn.image.load.mip.1d
+    84, // llvm.amdgcn.image.load.mip.1darray
+    84, // llvm.amdgcn.image.load.mip.2d
+    85, // llvm.amdgcn.image.load.mip.2darray
+    85, // llvm.amdgcn.image.load.mip.3d
+    85, // llvm.amdgcn.image.load.mip.cube
+    86, // llvm.amdgcn.image.sample.1d
+    72, // llvm.amdgcn.image.sample.1darray
+    72, // llvm.amdgcn.image.sample.2d
+    73, // llvm.amdgcn.image.sample.2darray
+    73, // llvm.amdgcn.image.sample.3d
+    72, // llvm.amdgcn.image.sample.b.1d
+    73, // llvm.amdgcn.image.sample.b.1darray
+    73, // llvm.amdgcn.image.sample.b.2d
+    74, // llvm.amdgcn.image.sample.b.2darray
+    74, // llvm.amdgcn.image.sample.b.3d
+    73, // llvm.amdgcn.image.sample.b.cl.1d
+    74, // llvm.amdgcn.image.sample.b.cl.1darray
+    74, // llvm.amdgcn.image.sample.b.cl.2d
+    75, // llvm.amdgcn.image.sample.b.cl.2darray
+    75, // llvm.amdgcn.image.sample.b.cl.3d
+    75, // llvm.amdgcn.image.sample.b.cl.cube
+    74, // llvm.amdgcn.image.sample.b.cl.o.1d
+    75, // llvm.amdgcn.image.sample.b.cl.o.1darray
+    75, // llvm.amdgcn.image.sample.b.cl.o.2d
+    76, // llvm.amdgcn.image.sample.b.cl.o.2darray
+    76, // llvm.amdgcn.image.sample.b.cl.o.3d
+    76, // llvm.amdgcn.image.sample.b.cl.o.cube
+    74, // llvm.amdgcn.image.sample.b.cube
+    73, // llvm.amdgcn.image.sample.b.o.1d
+    74, // llvm.amdgcn.image.sample.b.o.1darray
+    74, // llvm.amdgcn.image.sample.b.o.2d
+    75, // llvm.amdgcn.image.sample.b.o.2darray
+    75, // llvm.amdgcn.image.sample.b.o.3d
+    75, // llvm.amdgcn.image.sample.b.o.cube
+    72, // llvm.amdgcn.image.sample.c.1d
+    73, // llvm.amdgcn.image.sample.c.1darray
+    73, // llvm.amdgcn.image.sample.c.2d
+    74, // llvm.amdgcn.image.sample.c.2darray
+    74, // llvm.amdgcn.image.sample.c.3d
+    73, // llvm.amdgcn.image.sample.c.b.1d
+    74, // llvm.amdgcn.image.sample.c.b.1darray
+    74, // llvm.amdgcn.image.sample.c.b.2d
+    75, // llvm.amdgcn.image.sample.c.b.2darray
+    75, // llvm.amdgcn.image.sample.c.b.3d
+    74, // llvm.amdgcn.image.sample.c.b.cl.1d
+    75, // llvm.amdgcn.image.sample.c.b.cl.1darray
+    75, // llvm.amdgcn.image.sample.c.b.cl.2d
+    76, // llvm.amdgcn.image.sample.c.b.cl.2darray
+    76, // llvm.amdgcn.image.sample.c.b.cl.3d
+    76, // llvm.amdgcn.image.sample.c.b.cl.cube
+    75, // llvm.amdgcn.image.sample.c.b.cl.o.1d
+    76, // llvm.amdgcn.image.sample.c.b.cl.o.1darray
+    76, // llvm.amdgcn.image.sample.c.b.cl.o.2d
+    77, // llvm.amdgcn.image.sample.c.b.cl.o.2darray
+    77, // llvm.amdgcn.image.sample.c.b.cl.o.3d
+    77, // llvm.amdgcn.image.sample.c.b.cl.o.cube
+    75, // llvm.amdgcn.image.sample.c.b.cube
+    74, // llvm.amdgcn.image.sample.c.b.o.1d
+    75, // llvm.amdgcn.image.sample.c.b.o.1darray
+    75, // llvm.amdgcn.image.sample.c.b.o.2d
+    76, // llvm.amdgcn.image.sample.c.b.o.2darray
+    76, // llvm.amdgcn.image.sample.c.b.o.3d
+    76, // llvm.amdgcn.image.sample.c.b.o.cube
+    74, // llvm.amdgcn.image.sample.c.cd.1d
+    75, // llvm.amdgcn.image.sample.c.cd.1darray
+    77, // llvm.amdgcn.image.sample.c.cd.2d
+    87, // llvm.amdgcn.image.sample.c.cd.2darray
+    88, // llvm.amdgcn.image.sample.c.cd.3d
+    75, // llvm.amdgcn.image.sample.c.cd.cl.1d
+    76, // llvm.amdgcn.image.sample.c.cd.cl.1darray
+    87, // llvm.amdgcn.image.sample.c.cd.cl.2d
+    89, // llvm.amdgcn.image.sample.c.cd.cl.2darray
+    90, // llvm.amdgcn.image.sample.c.cd.cl.3d
+    89, // llvm.amdgcn.image.sample.c.cd.cl.cube
+    76, // llvm.amdgcn.image.sample.c.cd.cl.o.1d
+    77, // llvm.amdgcn.image.sample.c.cd.cl.o.1darray
+    89, // llvm.amdgcn.image.sample.c.cd.cl.o.2d
+    88, // llvm.amdgcn.image.sample.c.cd.cl.o.2darray
+    91, // llvm.amdgcn.image.sample.c.cd.cl.o.3d
+    88, // llvm.amdgcn.image.sample.c.cd.cl.o.cube
+    87, // llvm.amdgcn.image.sample.c.cd.cube
+    75, // llvm.amdgcn.image.sample.c.cd.o.1d
+    76, // llvm.amdgcn.image.sample.c.cd.o.1darray
+    87, // llvm.amdgcn.image.sample.c.cd.o.2d
+    89, // llvm.amdgcn.image.sample.c.cd.o.2darray
+    90, // llvm.amdgcn.image.sample.c.cd.o.3d
+    89, // llvm.amdgcn.image.sample.c.cd.o.cube
+    73, // llvm.amdgcn.image.sample.c.cl.1d
+    74, // llvm.amdgcn.image.sample.c.cl.1darray
+    74, // llvm.amdgcn.image.sample.c.cl.2d
+    75, // llvm.amdgcn.image.sample.c.cl.2darray
+    75, // llvm.amdgcn.image.sample.c.cl.3d
+    75, // llvm.amdgcn.image.sample.c.cl.cube
+    74, // llvm.amdgcn.image.sample.c.cl.o.1d
+    75, // llvm.amdgcn.image.sample.c.cl.o.1darray
+    75, // llvm.amdgcn.image.sample.c.cl.o.2d
+    76, // llvm.amdgcn.image.sample.c.cl.o.2darray
+    76, // llvm.amdgcn.image.sample.c.cl.o.3d
+    76, // llvm.amdgcn.image.sample.c.cl.o.cube
+    74, // llvm.amdgcn.image.sample.c.cube
+    74, // llvm.amdgcn.image.sample.c.d.1d
+    75, // llvm.amdgcn.image.sample.c.d.1darray
+    77, // llvm.amdgcn.image.sample.c.d.2d
+    87, // llvm.amdgcn.image.sample.c.d.2darray
+    88, // llvm.amdgcn.image.sample.c.d.3d
+    75, // llvm.amdgcn.image.sample.c.d.cl.1d
+    76, // llvm.amdgcn.image.sample.c.d.cl.1darray
+    87, // llvm.amdgcn.image.sample.c.d.cl.2d
+    89, // llvm.amdgcn.image.sample.c.d.cl.2darray
+    90, // llvm.amdgcn.image.sample.c.d.cl.3d
+    89, // llvm.amdgcn.image.sample.c.d.cl.cube
+    76, // llvm.amdgcn.image.sample.c.d.cl.o.1d
+    77, // llvm.amdgcn.image.sample.c.d.cl.o.1darray
+    89, // llvm.amdgcn.image.sample.c.d.cl.o.2d
+    88, // llvm.amdgcn.image.sample.c.d.cl.o.2darray
+    91, // llvm.amdgcn.image.sample.c.d.cl.o.3d
+    88, // llvm.amdgcn.image.sample.c.d.cl.o.cube
+    87, // llvm.amdgcn.image.sample.c.d.cube
+    75, // llvm.amdgcn.image.sample.c.d.o.1d
+    76, // llvm.amdgcn.image.sample.c.d.o.1darray
+    87, // llvm.amdgcn.image.sample.c.d.o.2d
+    89, // llvm.amdgcn.image.sample.c.d.o.2darray
+    90, // llvm.amdgcn.image.sample.c.d.o.3d
+    89, // llvm.amdgcn.image.sample.c.d.o.cube
+    73, // llvm.amdgcn.image.sample.c.l.1d
+    74, // llvm.amdgcn.image.sample.c.l.1darray
+    74, // llvm.amdgcn.image.sample.c.l.2d
+    75, // llvm.amdgcn.image.sample.c.l.2darray
+    75, // llvm.amdgcn.image.sample.c.l.3d
+    75, // llvm.amdgcn.image.sample.c.l.cube
+    74, // llvm.amdgcn.image.sample.c.l.o.1d
+    75, // llvm.amdgcn.image.sample.c.l.o.1darray
+    75, // llvm.amdgcn.image.sample.c.l.o.2d
+    76, // llvm.amdgcn.image.sample.c.l.o.2darray
+    76, // llvm.amdgcn.image.sample.c.l.o.3d
+    76, // llvm.amdgcn.image.sample.c.l.o.cube
+    72, // llvm.amdgcn.image.sample.c.lz.1d
+    73, // llvm.amdgcn.image.sample.c.lz.1darray
+    73, // llvm.amdgcn.image.sample.c.lz.2d
+    74, // llvm.amdgcn.image.sample.c.lz.2darray
+    74, // llvm.amdgcn.image.sample.c.lz.3d
+    74, // llvm.amdgcn.image.sample.c.lz.cube
+    73, // llvm.amdgcn.image.sample.c.lz.o.1d
+    74, // llvm.amdgcn.image.sample.c.lz.o.1darray
+    74, // llvm.amdgcn.image.sample.c.lz.o.2d
+    75, // llvm.amdgcn.image.sample.c.lz.o.2darray
+    75, // llvm.amdgcn.image.sample.c.lz.o.3d
+    75, // llvm.amdgcn.image.sample.c.lz.o.cube
+    73, // llvm.amdgcn.image.sample.c.o.1d
+    74, // llvm.amdgcn.image.sample.c.o.1darray
+    74, // llvm.amdgcn.image.sample.c.o.2d
+    75, // llvm.amdgcn.image.sample.c.o.2darray
+    75, // llvm.amdgcn.image.sample.c.o.3d
+    75, // llvm.amdgcn.image.sample.c.o.cube
+    73, // llvm.amdgcn.image.sample.cd.1d
+    74, // llvm.amdgcn.image.sample.cd.1darray
+    76, // llvm.amdgcn.image.sample.cd.2d
+    77, // llvm.amdgcn.image.sample.cd.2darray
+    89, // llvm.amdgcn.image.sample.cd.3d
+    74, // llvm.amdgcn.image.sample.cd.cl.1d
+    75, // llvm.amdgcn.image.sample.cd.cl.1darray
+    77, // llvm.amdgcn.image.sample.cd.cl.2d
+    87, // llvm.amdgcn.image.sample.cd.cl.2darray
+    88, // llvm.amdgcn.image.sample.cd.cl.3d
+    87, // llvm.amdgcn.image.sample.cd.cl.cube
+    75, // llvm.amdgcn.image.sample.cd.cl.o.1d
+    76, // llvm.amdgcn.image.sample.cd.cl.o.1darray
+    87, // llvm.amdgcn.image.sample.cd.cl.o.2d
+    89, // llvm.amdgcn.image.sample.cd.cl.o.2darray
+    90, // llvm.amdgcn.image.sample.cd.cl.o.3d
+    89, // llvm.amdgcn.image.sample.cd.cl.o.cube
+    77, // llvm.amdgcn.image.sample.cd.cube
+    74, // llvm.amdgcn.image.sample.cd.o.1d
+    75, // llvm.amdgcn.image.sample.cd.o.1darray
+    77, // llvm.amdgcn.image.sample.cd.o.2d
+    87, // llvm.amdgcn.image.sample.cd.o.2darray
+    88, // llvm.amdgcn.image.sample.cd.o.3d
+    87, // llvm.amdgcn.image.sample.cd.o.cube
+    72, // llvm.amdgcn.image.sample.cl.1d
+    73, // llvm.amdgcn.image.sample.cl.1darray
+    73, // llvm.amdgcn.image.sample.cl.2d
+    74, // llvm.amdgcn.image.sample.cl.2darray
+    74, // llvm.amdgcn.image.sample.cl.3d
+    74, // llvm.amdgcn.image.sample.cl.cube
+    73, // llvm.amdgcn.image.sample.cl.o.1d
+    74, // llvm.amdgcn.image.sample.cl.o.1darray
+    74, // llvm.amdgcn.image.sample.cl.o.2d
+    75, // llvm.amdgcn.image.sample.cl.o.2darray
+    75, // llvm.amdgcn.image.sample.cl.o.3d
+    75, // llvm.amdgcn.image.sample.cl.o.cube
+    73, // llvm.amdgcn.image.sample.cube
+    73, // llvm.amdgcn.image.sample.d.1d
+    74, // llvm.amdgcn.image.sample.d.1darray
+    76, // llvm.amdgcn.image.sample.d.2d
+    77, // llvm.amdgcn.image.sample.d.2darray
+    89, // llvm.amdgcn.image.sample.d.3d
+    74, // llvm.amdgcn.image.sample.d.cl.1d
+    75, // llvm.amdgcn.image.sample.d.cl.1darray
+    77, // llvm.amdgcn.image.sample.d.cl.2d
+    87, // llvm.amdgcn.image.sample.d.cl.2darray
+    88, // llvm.amdgcn.image.sample.d.cl.3d
+    87, // llvm.amdgcn.image.sample.d.cl.cube
+    75, // llvm.amdgcn.image.sample.d.cl.o.1d
+    76, // llvm.amdgcn.image.sample.d.cl.o.1darray
+    87, // llvm.amdgcn.image.sample.d.cl.o.2d
+    89, // llvm.amdgcn.image.sample.d.cl.o.2darray
+    90, // llvm.amdgcn.image.sample.d.cl.o.3d
+    89, // llvm.amdgcn.image.sample.d.cl.o.cube
+    77, // llvm.amdgcn.image.sample.d.cube
+    74, // llvm.amdgcn.image.sample.d.o.1d
+    75, // llvm.amdgcn.image.sample.d.o.1darray
+    77, // llvm.amdgcn.image.sample.d.o.2d
+    87, // llvm.amdgcn.image.sample.d.o.2darray
+    88, // llvm.amdgcn.image.sample.d.o.3d
+    87, // llvm.amdgcn.image.sample.d.o.cube
+    72, // llvm.amdgcn.image.sample.l.1d
+    73, // llvm.amdgcn.image.sample.l.1darray
+    73, // llvm.amdgcn.image.sample.l.2d
+    74, // llvm.amdgcn.image.sample.l.2darray
+    74, // llvm.amdgcn.image.sample.l.3d
+    74, // llvm.amdgcn.image.sample.l.cube
+    73, // llvm.amdgcn.image.sample.l.o.1d
+    74, // llvm.amdgcn.image.sample.l.o.1darray
+    74, // llvm.amdgcn.image.sample.l.o.2d
+    75, // llvm.amdgcn.image.sample.l.o.2darray
+    75, // llvm.amdgcn.image.sample.l.o.3d
+    75, // llvm.amdgcn.image.sample.l.o.cube
+    86, // llvm.amdgcn.image.sample.lz.1d
+    72, // llvm.amdgcn.image.sample.lz.1darray
+    72, // llvm.amdgcn.image.sample.lz.2d
+    73, // llvm.amdgcn.image.sample.lz.2darray
+    73, // llvm.amdgcn.image.sample.lz.3d
+    73, // llvm.amdgcn.image.sample.lz.cube
+    72, // llvm.amdgcn.image.sample.lz.o.1d
+    73, // llvm.amdgcn.image.sample.lz.o.1darray
+    73, // llvm.amdgcn.image.sample.lz.o.2d
+    74, // llvm.amdgcn.image.sample.lz.o.2darray
+    74, // llvm.amdgcn.image.sample.lz.o.3d
+    74, // llvm.amdgcn.image.sample.lz.o.cube
+    72, // llvm.amdgcn.image.sample.o.1d
+    73, // llvm.amdgcn.image.sample.o.1darray
+    73, // llvm.amdgcn.image.sample.o.2d
+    74, // llvm.amdgcn.image.sample.o.2darray
+    74, // llvm.amdgcn.image.sample.o.3d
+    74, // llvm.amdgcn.image.sample.o.cube
+    92, // llvm.amdgcn.image.store.1d
+    93, // llvm.amdgcn.image.store.1darray
+    93, // llvm.amdgcn.image.store.2d
+    94, // llvm.amdgcn.image.store.2darray
+    95, // llvm.amdgcn.image.store.2darraymsaa
+    94, // llvm.amdgcn.image.store.2dmsaa
+    94, // llvm.amdgcn.image.store.3d
+    94, // llvm.amdgcn.image.store.cube
+    93, // llvm.amdgcn.image.store.mip.1d
+    94, // llvm.amdgcn.image.store.mip.1darray
+    94, // llvm.amdgcn.image.store.mip.2d
+    95, // llvm.amdgcn.image.store.mip.2darray
+    95, // llvm.amdgcn.image.store.mip.3d
+    95, // llvm.amdgcn.image.store.mip.cube
     4, // llvm.amdgcn.implicit.buffer.ptr
     4, // llvm.amdgcn.implicitarg.ptr
-    38, // llvm.amdgcn.init.exec
-    38, // llvm.amdgcn.init.exec.from.input
+    96, // llvm.amdgcn.init.exec
+    62, // llvm.amdgcn.init.exec.from.input
     4, // llvm.amdgcn.interp.mov
     4, // llvm.amdgcn.interp.p1
     4, // llvm.amdgcn.interp.p1.f16
@@ -10017,93 +10384,118 @@
     4, // llvm.amdgcn.ldexp
     4, // llvm.amdgcn.lerp
     4, // llvm.amdgcn.log.clamp
-    38, // llvm.amdgcn.loop
+    62, // llvm.amdgcn.loop
     1, // llvm.amdgcn.mbcnt.hi
     1, // llvm.amdgcn.mbcnt.lo
-    36, // llvm.amdgcn.mov.dpp
+    57, // llvm.amdgcn.mfma.f32.16x16x16f16
+    57, // llvm.amdgcn.mfma.f32.16x16x1f32
+    57, // llvm.amdgcn.mfma.f32.16x16x2bf16
+    57, // llvm.amdgcn.mfma.f32.16x16x4f16
+    57, // llvm.amdgcn.mfma.f32.16x16x4f32
+    57, // llvm.amdgcn.mfma.f32.16x16x8bf16
+    57, // llvm.amdgcn.mfma.f32.32x32x1f32
+    57, // llvm.amdgcn.mfma.f32.32x32x2bf16
+    57, // llvm.amdgcn.mfma.f32.32x32x2f32
+    57, // llvm.amdgcn.mfma.f32.32x32x4bf16
+    57, // llvm.amdgcn.mfma.f32.32x32x4f16
+    57, // llvm.amdgcn.mfma.f32.32x32x8f16
+    57, // llvm.amdgcn.mfma.f32.4x4x1f32
+    57, // llvm.amdgcn.mfma.f32.4x4x2bf16
+    57, // llvm.amdgcn.mfma.f32.4x4x4f16
+    57, // llvm.amdgcn.mfma.i32.16x16x16i8
+    57, // llvm.amdgcn.mfma.i32.16x16x4i8
+    57, // llvm.amdgcn.mfma.i32.32x32x4i8
+    57, // llvm.amdgcn.mfma.i32.32x32x8i8
+    57, // llvm.amdgcn.mfma.i32.4x4x4i8
+    97, // llvm.amdgcn.mov.dpp
+    61, // llvm.amdgcn.mov.dpp8
     4, // llvm.amdgcn.mqsad.pk.u16.u8
     4, // llvm.amdgcn.mqsad.u32.u8
     4, // llvm.amdgcn.msad.u8
+    98, // llvm.amdgcn.permlane16
+    98, // llvm.amdgcn.permlanex16
     1, // llvm.amdgcn.ps.live
     4, // llvm.amdgcn.qsad.pk.u16.u8
     4, // llvm.amdgcn.queue.ptr
-    3, // llvm.amdgcn.raw.buffer.atomic.add
-    3, // llvm.amdgcn.raw.buffer.atomic.and
-    3, // llvm.amdgcn.raw.buffer.atomic.cmpswap
-    3, // llvm.amdgcn.raw.buffer.atomic.or
-    3, // llvm.amdgcn.raw.buffer.atomic.smax
-    3, // llvm.amdgcn.raw.buffer.atomic.smin
-    3, // llvm.amdgcn.raw.buffer.atomic.sub
-    3, // llvm.amdgcn.raw.buffer.atomic.swap
-    3, // llvm.amdgcn.raw.buffer.atomic.umax
-    3, // llvm.amdgcn.raw.buffer.atomic.umin
-    3, // llvm.amdgcn.raw.buffer.atomic.xor
-    16, // llvm.amdgcn.raw.buffer.load
-    16, // llvm.amdgcn.raw.buffer.load.format
-    34, // llvm.amdgcn.raw.buffer.store
-    34, // llvm.amdgcn.raw.buffer.store.format
-    16, // llvm.amdgcn.raw.tbuffer.load
-    34, // llvm.amdgcn.raw.tbuffer.store
+    52, // llvm.amdgcn.raw.buffer.atomic.add
+    52, // llvm.amdgcn.raw.buffer.atomic.and
+    53, // llvm.amdgcn.raw.buffer.atomic.cmpswap
+    52, // llvm.amdgcn.raw.buffer.atomic.or
+    52, // llvm.amdgcn.raw.buffer.atomic.smax
+    52, // llvm.amdgcn.raw.buffer.atomic.smin
+    52, // llvm.amdgcn.raw.buffer.atomic.sub
+    52, // llvm.amdgcn.raw.buffer.atomic.swap
+    52, // llvm.amdgcn.raw.buffer.atomic.umax
+    52, // llvm.amdgcn.raw.buffer.atomic.umin
+    52, // llvm.amdgcn.raw.buffer.atomic.xor
+    99, // llvm.amdgcn.raw.buffer.load
+    99, // llvm.amdgcn.raw.buffer.load.format
+    100, // llvm.amdgcn.raw.buffer.store
+    100, // llvm.amdgcn.raw.buffer.store.format
+    54, // llvm.amdgcn.raw.tbuffer.load
+    55, // llvm.amdgcn.raw.tbuffer.store
     4, // llvm.amdgcn.rcp
     4, // llvm.amdgcn.rcp.legacy
-    36, // llvm.amdgcn.readfirstlane
-    36, // llvm.amdgcn.readlane
+    57, // llvm.amdgcn.readfirstlane
+    57, // llvm.amdgcn.readlane
     4, // llvm.amdgcn.rsq
     4, // llvm.amdgcn.rsq.clamp
     4, // llvm.amdgcn.rsq.legacy
-    38, // llvm.amdgcn.s.barrier
-    1, // llvm.amdgcn.s.buffer.load
+    62, // llvm.amdgcn.s.barrier
+    27, // llvm.amdgcn.s.buffer.load
     3, // llvm.amdgcn.s.dcache.inv
     3, // llvm.amdgcn.s.dcache.inv.vol
     3, // llvm.amdgcn.s.dcache.wb
     3, // llvm.amdgcn.s.dcache.wb.vol
-    3, // llvm.amdgcn.s.decperflevel
+    101, // llvm.amdgcn.s.decperflevel
+    102, // llvm.amdgcn.s.get.waveid.in.workgroup
     4, // llvm.amdgcn.s.getpc
-    39, // llvm.amdgcn.s.getreg
-    3, // llvm.amdgcn.s.incperflevel
-    16, // llvm.amdgcn.s.memrealtime
-    16, // llvm.amdgcn.s.memtime
-    3, // llvm.amdgcn.s.sendmsg
-    3, // llvm.amdgcn.s.sendmsghalt
-    3, // llvm.amdgcn.s.sleep
-    3, // llvm.amdgcn.s.waitcnt
+    103, // llvm.amdgcn.s.getreg
+    101, // llvm.amdgcn.s.incperflevel
+    3, // llvm.amdgcn.s.memrealtime
+    3, // llvm.amdgcn.s.memtime
+    101, // llvm.amdgcn.s.sendmsg
+    101, // llvm.amdgcn.s.sendmsghalt
+    101, // llvm.amdgcn.s.sleep
+    101, // llvm.amdgcn.s.waitcnt
     4, // llvm.amdgcn.sad.hi.u8
     4, // llvm.amdgcn.sad.u16
     4, // llvm.amdgcn.sad.u8
     4, // llvm.amdgcn.sbfe
-    4, // llvm.amdgcn.sdot2
-    4, // llvm.amdgcn.sdot4
-    4, // llvm.amdgcn.sdot8
-    36, // llvm.amdgcn.set.inactive
+    66, // llvm.amdgcn.sdot2
+    66, // llvm.amdgcn.sdot4
+    66, // llvm.amdgcn.sdot8
+    57, // llvm.amdgcn.set.inactive
     4, // llvm.amdgcn.sffbh
     4, // llvm.amdgcn.sin
-    3, // llvm.amdgcn.struct.buffer.atomic.add
-    3, // llvm.amdgcn.struct.buffer.atomic.and
-    3, // llvm.amdgcn.struct.buffer.atomic.cmpswap
-    3, // llvm.amdgcn.struct.buffer.atomic.or
-    3, // llvm.amdgcn.struct.buffer.atomic.smax
-    3, // llvm.amdgcn.struct.buffer.atomic.smin
-    3, // llvm.amdgcn.struct.buffer.atomic.sub
-    3, // llvm.amdgcn.struct.buffer.atomic.swap
-    3, // llvm.amdgcn.struct.buffer.atomic.umax
-    3, // llvm.amdgcn.struct.buffer.atomic.umin
-    3, // llvm.amdgcn.struct.buffer.atomic.xor
-    16, // llvm.amdgcn.struct.buffer.load
-    16, // llvm.amdgcn.struct.buffer.load.format
-    34, // llvm.amdgcn.struct.buffer.store
-    34, // llvm.amdgcn.struct.buffer.store.format
-    16, // llvm.amdgcn.struct.tbuffer.load
-    34, // llvm.amdgcn.struct.tbuffer.store
-    16, // llvm.amdgcn.tbuffer.load
-    34, // llvm.amdgcn.tbuffer.store
+    53, // llvm.amdgcn.struct.buffer.atomic.add
+    53, // llvm.amdgcn.struct.buffer.atomic.and
+    104, // llvm.amdgcn.struct.buffer.atomic.cmpswap
+    53, // llvm.amdgcn.struct.buffer.atomic.or
+    53, // llvm.amdgcn.struct.buffer.atomic.smax
+    53, // llvm.amdgcn.struct.buffer.atomic.smin
+    53, // llvm.amdgcn.struct.buffer.atomic.sub
+    53, // llvm.amdgcn.struct.buffer.atomic.swap
+    53, // llvm.amdgcn.struct.buffer.atomic.umax
+    53, // llvm.amdgcn.struct.buffer.atomic.umin
+    53, // llvm.amdgcn.struct.buffer.atomic.xor
+    105, // llvm.amdgcn.struct.buffer.load
+    105, // llvm.amdgcn.struct.buffer.load.format
+    106, // llvm.amdgcn.struct.buffer.store
+    106, // llvm.amdgcn.struct.buffer.store.format
+    107, // llvm.amdgcn.struct.tbuffer.load
+    108, // llvm.amdgcn.struct.tbuffer.store
+    109, // llvm.amdgcn.tbuffer.load
+    110, // llvm.amdgcn.tbuffer.store
     4, // llvm.amdgcn.trig.preop
     4, // llvm.amdgcn.ubfe
-    4, // llvm.amdgcn.udot2
-    4, // llvm.amdgcn.udot4
-    4, // llvm.amdgcn.udot8
-    38, // llvm.amdgcn.unreachable
-    36, // llvm.amdgcn.update.dpp
-    38, // llvm.amdgcn.wave.barrier
+    66, // llvm.amdgcn.udot2
+    66, // llvm.amdgcn.udot4
+    66, // llvm.amdgcn.udot8
+    62, // llvm.amdgcn.unreachable
+    111, // llvm.amdgcn.update.dpp
+    62, // llvm.amdgcn.wave.barrier
+    4, // llvm.amdgcn.wavefrontsize
     4, // llvm.amdgcn.workgroup.id.x
     4, // llvm.amdgcn.workgroup.id.y
     4, // llvm.amdgcn.workgroup.id.z
@@ -10111,12 +10503,16 @@
     4, // llvm.amdgcn.workitem.id.y
     4, // llvm.amdgcn.workitem.id.z
     4, // llvm.amdgcn.wqm
-    36, // llvm.amdgcn.wqm.vote
-    36, // llvm.amdgcn.writelane
-    4, // llvm.amdgcn.wwm
-    3, // llvm.arm.cdp
-    3, // llvm.arm.cdp2
+    57, // llvm.amdgcn.wqm.vote
+    57, // llvm.amdgcn.writelane
+    112, // llvm.amdgcn.wwm
+    113, // llvm.arm.cdp
+    113, // llvm.arm.cdp2
     3, // llvm.arm.clrex
+    1, // llvm.arm.cmse.tt
+    1, // llvm.arm.cmse.tta
+    1, // llvm.arm.cmse.ttat
+    1, // llvm.arm.cmse.ttt
     1, // llvm.arm.crc32b
     1, // llvm.arm.crc32cb
     1, // llvm.arm.crc32ch
@@ -10127,24 +10523,25 @@
     3, // llvm.arm.dmb
     3, // llvm.arm.dsb
     3, // llvm.arm.get.fpscr
+    114, // llvm.arm.gnu.eabi.mcount
     3, // llvm.arm.hint
     3, // llvm.arm.isb
     3, // llvm.arm.ldaex
     3, // llvm.arm.ldaexd
-    3, // llvm.arm.ldc
-    3, // llvm.arm.ldc2
-    3, // llvm.arm.ldc2l
-    3, // llvm.arm.ldcl
+    115, // llvm.arm.ldc
+    115, // llvm.arm.ldc2
+    115, // llvm.arm.ldc2l
+    115, // llvm.arm.ldcl
     3, // llvm.arm.ldrex
     3, // llvm.arm.ldrexd
-    3, // llvm.arm.mcr
-    3, // llvm.arm.mcr2
-    3, // llvm.arm.mcrr
-    3, // llvm.arm.mcrr2
-    3, // llvm.arm.mrc
-    3, // llvm.arm.mrc2
-    3, // llvm.arm.mrrc
-    3, // llvm.arm.mrrc2
+    116, // llvm.arm.mcr
+    116, // llvm.arm.mcr2
+    117, // llvm.arm.mcrr
+    117, // llvm.arm.mcrr2
+    118, // llvm.arm.mrc
+    118, // llvm.arm.mrc2
+    119, // llvm.arm.mrrc
+    119, // llvm.arm.mrrc2
     1, // llvm.arm.neon.aesd
     1, // llvm.arm.neon.aese
     1, // llvm.arm.neon.aesimc
@@ -10261,16 +10658,16 @@
     1, // llvm.arm.neon.vshiftins
     1, // llvm.arm.neon.vshifts
     1, // llvm.arm.neon.vshiftu
-    22, // llvm.arm.neon.vst1
-    18, // llvm.arm.neon.vst1x2
-    18, // llvm.arm.neon.vst1x3
-    18, // llvm.arm.neon.vst1x4
-    22, // llvm.arm.neon.vst2
-    22, // llvm.arm.neon.vst2lane
-    22, // llvm.arm.neon.vst3
-    22, // llvm.arm.neon.vst3lane
-    22, // llvm.arm.neon.vst4
-    22, // llvm.arm.neon.vst4lane
+    29, // llvm.arm.neon.vst1
+    23, // llvm.arm.neon.vst1x2
+    23, // llvm.arm.neon.vst1x3
+    23, // llvm.arm.neon.vst1x4
+    29, // llvm.arm.neon.vst2
+    29, // llvm.arm.neon.vst2lane
+    29, // llvm.arm.neon.vst3
+    29, // llvm.arm.neon.vst3lane
+    29, // llvm.arm.neon.vst4
+    29, // llvm.arm.neon.vst4lane
     1, // llvm.arm.neon.vtbl1
     1, // llvm.arm.neon.vtbl2
     1, // llvm.arm.neon.vtbl3
@@ -10290,7 +10687,7 @@
     3, // llvm.arm.sadd16
     3, // llvm.arm.sadd8
     3, // llvm.arm.sasx
-    16, // llvm.arm.sel
+    18, // llvm.arm.sel
     3, // llvm.arm.set.fpscr
     1, // llvm.arm.shadd16
     1, // llvm.arm.shadd8
@@ -10328,10 +10725,10 @@
     3, // llvm.arm.ssax
     3, // llvm.arm.ssub16
     3, // llvm.arm.ssub8
-    3, // llvm.arm.stc
-    3, // llvm.arm.stc2
-    3, // llvm.arm.stc2l
-    3, // llvm.arm.stcl
+    115, // llvm.arm.stc
+    115, // llvm.arm.stc2
+    115, // llvm.arm.stc2l
+    115, // llvm.arm.stcl
     3, // llvm.arm.stlex
     3, // llvm.arm.stlexd
     3, // llvm.arm.strex
@@ -10365,9 +10762,9 @@
     1, // llvm.arm.uxtb16
     1, // llvm.arm.vcvtr
     1, // llvm.arm.vcvtru
-    16, // llvm.bpf.load.byte
-    16, // llvm.bpf.load.half
-    16, // llvm.bpf.load.word
+    18, // llvm.bpf.load.byte
+    18, // llvm.bpf.load.half
+    18, // llvm.bpf.load.word
     3, // llvm.bpf.pseudo
     1, // llvm.hexagon.A2.abs
     1, // llvm.hexagon.A2.absp
@@ -10385,13 +10782,13 @@
     1, // llvm.hexagon.A2.addh.l16.ll
     1, // llvm.hexagon.A2.addh.l16.sat.hl
     1, // llvm.hexagon.A2.addh.l16.sat.ll
-    1, // llvm.hexagon.A2.addi
+    40, // llvm.hexagon.A2.addi
     1, // llvm.hexagon.A2.addp
     1, // llvm.hexagon.A2.addpsat
     1, // llvm.hexagon.A2.addsat
     1, // llvm.hexagon.A2.addsp
     1, // llvm.hexagon.A2.and
-    1, // llvm.hexagon.A2.andir
+    40, // llvm.hexagon.A2.andir
     1, // llvm.hexagon.A2.andp
     1, // llvm.hexagon.A2.aslh
     1, // llvm.hexagon.A2.asrh
@@ -10399,7 +10796,7 @@
     1, // llvm.hexagon.A2.combine.hl
     1, // llvm.hexagon.A2.combine.lh
     1, // llvm.hexagon.A2.combine.ll
-    1, // llvm.hexagon.A2.combineii
+    120, // llvm.hexagon.A2.combineii
     1, // llvm.hexagon.A2.combinew
     1, // llvm.hexagon.A2.max
     1, // llvm.hexagon.A2.maxp
@@ -10415,7 +10812,7 @@
     1, // llvm.hexagon.A2.not
     1, // llvm.hexagon.A2.notp
     1, // llvm.hexagon.A2.or
-    1, // llvm.hexagon.A2.orir
+    40, // llvm.hexagon.A2.orir
     1, // llvm.hexagon.A2.orp
     1, // llvm.hexagon.A2.pxorf
     1, // llvm.hexagon.A2.roundsat
@@ -10438,7 +10835,7 @@
     1, // llvm.hexagon.A2.subh.l16.sat.hl
     1, // llvm.hexagon.A2.subh.l16.sat.ll
     1, // llvm.hexagon.A2.subp
-    1, // llvm.hexagon.A2.subri
+    20, // llvm.hexagon.A2.subri
     1, // llvm.hexagon.A2.subsat
     1, // llvm.hexagon.A2.svaddh
     1, // llvm.hexagon.A2.svaddhs
@@ -10455,12 +10852,12 @@
     1, // llvm.hexagon.A2.sxtw
     1, // llvm.hexagon.A2.tfr
     1, // llvm.hexagon.A2.tfrcrr
-    1, // llvm.hexagon.A2.tfrih
-    1, // llvm.hexagon.A2.tfril
+    40, // llvm.hexagon.A2.tfrih
+    40, // llvm.hexagon.A2.tfril
     1, // llvm.hexagon.A2.tfrp
-    1, // llvm.hexagon.A2.tfrpi
+    20, // llvm.hexagon.A2.tfrpi
     1, // llvm.hexagon.A2.tfrrcr
-    1, // llvm.hexagon.A2.tfrsi
+    20, // llvm.hexagon.A2.tfrsi
     1, // llvm.hexagon.A2.vabsh
     1, // llvm.hexagon.A2.vabshsat
     1, // llvm.hexagon.A2.vabsw
@@ -10532,34 +10929,34 @@
     1, // llvm.hexagon.A4.andn
     1, // llvm.hexagon.A4.andnp
     1, // llvm.hexagon.A4.bitsplit
-    1, // llvm.hexagon.A4.bitspliti
+    40, // llvm.hexagon.A4.bitspliti
     1, // llvm.hexagon.A4.boundscheck
     1, // llvm.hexagon.A4.cmpbeq
-    1, // llvm.hexagon.A4.cmpbeqi
+    40, // llvm.hexagon.A4.cmpbeqi
     1, // llvm.hexagon.A4.cmpbgt
-    1, // llvm.hexagon.A4.cmpbgti
+    40, // llvm.hexagon.A4.cmpbgti
     1, // llvm.hexagon.A4.cmpbgtu
-    1, // llvm.hexagon.A4.cmpbgtui
+    40, // llvm.hexagon.A4.cmpbgtui
     1, // llvm.hexagon.A4.cmpheq
-    1, // llvm.hexagon.A4.cmpheqi
+    40, // llvm.hexagon.A4.cmpheqi
     1, // llvm.hexagon.A4.cmphgt
-    1, // llvm.hexagon.A4.cmphgti
+    40, // llvm.hexagon.A4.cmphgti
     1, // llvm.hexagon.A4.cmphgtu
-    1, // llvm.hexagon.A4.cmphgtui
-    1, // llvm.hexagon.A4.combineii
-    1, // llvm.hexagon.A4.combineir
-    1, // llvm.hexagon.A4.combineri
-    1, // llvm.hexagon.A4.cround.ri
+    40, // llvm.hexagon.A4.cmphgtui
+    120, // llvm.hexagon.A4.combineii
+    20, // llvm.hexagon.A4.combineir
+    40, // llvm.hexagon.A4.combineri
+    40, // llvm.hexagon.A4.cround.ri
     1, // llvm.hexagon.A4.cround.rr
     1, // llvm.hexagon.A4.modwrapu
     1, // llvm.hexagon.A4.orn
     1, // llvm.hexagon.A4.ornp
     1, // llvm.hexagon.A4.rcmpeq
-    1, // llvm.hexagon.A4.rcmpeqi
+    40, // llvm.hexagon.A4.rcmpeqi
     1, // llvm.hexagon.A4.rcmpneq
-    1, // llvm.hexagon.A4.rcmpneqi
-    1, // llvm.hexagon.A4.round.ri
-    1, // llvm.hexagon.A4.round.ri.sat
+    40, // llvm.hexagon.A4.rcmpneqi
+    40, // llvm.hexagon.A4.round.ri
+    40, // llvm.hexagon.A4.round.ri.sat
     1, // llvm.hexagon.A4.round.rr
     1, // llvm.hexagon.A4.round.rr.sat
     1, // llvm.hexagon.A4.subp.c
@@ -10567,16 +10964,16 @@
     1, // llvm.hexagon.A4.tfrpcp
     1, // llvm.hexagon.A4.tlbmatch
     1, // llvm.hexagon.A4.vcmpbeq.any
-    1, // llvm.hexagon.A4.vcmpbeqi
+    40, // llvm.hexagon.A4.vcmpbeqi
     1, // llvm.hexagon.A4.vcmpbgt
-    1, // llvm.hexagon.A4.vcmpbgti
-    1, // llvm.hexagon.A4.vcmpbgtui
-    1, // llvm.hexagon.A4.vcmpheqi
-    1, // llvm.hexagon.A4.vcmphgti
-    1, // llvm.hexagon.A4.vcmphgtui
-    1, // llvm.hexagon.A4.vcmpweqi
-    1, // llvm.hexagon.A4.vcmpwgti
-    1, // llvm.hexagon.A4.vcmpwgtui
+    40, // llvm.hexagon.A4.vcmpbgti
+    40, // llvm.hexagon.A4.vcmpbgtui
+    40, // llvm.hexagon.A4.vcmpheqi
+    40, // llvm.hexagon.A4.vcmphgti
+    40, // llvm.hexagon.A4.vcmphgtui
+    40, // llvm.hexagon.A4.vcmpweqi
+    40, // llvm.hexagon.A4.vcmpwgti
+    40, // llvm.hexagon.A4.vcmpwgtui
     1, // llvm.hexagon.A4.vrmaxh
     1, // llvm.hexagon.A4.vrmaxuh
     1, // llvm.hexagon.A4.vrmaxuw
@@ -10594,26 +10991,26 @@
     1, // llvm.hexagon.C2.andn
     1, // llvm.hexagon.C2.any8
     1, // llvm.hexagon.C2.bitsclr
-    1, // llvm.hexagon.C2.bitsclri
+    40, // llvm.hexagon.C2.bitsclri
     1, // llvm.hexagon.C2.bitsset
     1, // llvm.hexagon.C2.cmpeq
-    1, // llvm.hexagon.C2.cmpeqi
+    40, // llvm.hexagon.C2.cmpeqi
     1, // llvm.hexagon.C2.cmpeqp
-    1, // llvm.hexagon.C2.cmpgei
-    1, // llvm.hexagon.C2.cmpgeui
+    40, // llvm.hexagon.C2.cmpgei
+    40, // llvm.hexagon.C2.cmpgeui
     1, // llvm.hexagon.C2.cmpgt
-    1, // llvm.hexagon.C2.cmpgti
+    40, // llvm.hexagon.C2.cmpgti
     1, // llvm.hexagon.C2.cmpgtp
     1, // llvm.hexagon.C2.cmpgtu
-    1, // llvm.hexagon.C2.cmpgtui
+    40, // llvm.hexagon.C2.cmpgtui
     1, // llvm.hexagon.C2.cmpgtup
     1, // llvm.hexagon.C2.cmplt
     1, // llvm.hexagon.C2.cmpltu
     1, // llvm.hexagon.C2.mask
     1, // llvm.hexagon.C2.mux
-    1, // llvm.hexagon.C2.muxii
-    1, // llvm.hexagon.C2.muxir
-    1, // llvm.hexagon.C2.muxri
+    39, // llvm.hexagon.C2.muxii
+    27, // llvm.hexagon.C2.muxir
+    40, // llvm.hexagon.C2.muxri
     1, // llvm.hexagon.C2.not
     1, // llvm.hexagon.C2.or
     1, // llvm.hexagon.C2.orn
@@ -10628,15 +11025,15 @@
     1, // llvm.hexagon.C4.and.or
     1, // llvm.hexagon.C4.and.orn
     1, // llvm.hexagon.C4.cmplte
-    1, // llvm.hexagon.C4.cmpltei
+    40, // llvm.hexagon.C4.cmpltei
     1, // llvm.hexagon.C4.cmplteu
-    1, // llvm.hexagon.C4.cmplteui
+    40, // llvm.hexagon.C4.cmplteui
     1, // llvm.hexagon.C4.cmpneq
-    1, // llvm.hexagon.C4.cmpneqi
+    40, // llvm.hexagon.C4.cmpneqi
     1, // llvm.hexagon.C4.fastcorner9
     1, // llvm.hexagon.C4.fastcorner9.not
     1, // llvm.hexagon.C4.nbitsclr
-    1, // llvm.hexagon.C4.nbitsclri
+    40, // llvm.hexagon.C4.nbitsclri
     1, // llvm.hexagon.C4.nbitsset
     1, // llvm.hexagon.C4.or.and
     1, // llvm.hexagon.C4.or.andn
@@ -10668,59 +11065,59 @@
     1, // llvm.hexagon.F2.conv.uw2sf
     1, // llvm.hexagon.F2.conv.w2df
     1, // llvm.hexagon.F2.conv.w2sf
-    40, // llvm.hexagon.F2.dfadd
-    40, // llvm.hexagon.F2.dfclass
-    40, // llvm.hexagon.F2.dfcmpeq
-    40, // llvm.hexagon.F2.dfcmpge
-    40, // llvm.hexagon.F2.dfcmpgt
-    40, // llvm.hexagon.F2.dfcmpuo
-    1, // llvm.hexagon.F2.dfimm.n
-    1, // llvm.hexagon.F2.dfimm.p
-    40, // llvm.hexagon.F2.dfsub
-    40, // llvm.hexagon.F2.sfadd
-    40, // llvm.hexagon.F2.sfclass
-    40, // llvm.hexagon.F2.sfcmpeq
-    40, // llvm.hexagon.F2.sfcmpge
-    40, // llvm.hexagon.F2.sfcmpgt
-    40, // llvm.hexagon.F2.sfcmpuo
-    40, // llvm.hexagon.F2.sffixupd
-    40, // llvm.hexagon.F2.sffixupn
-    40, // llvm.hexagon.F2.sffixupr
-    40, // llvm.hexagon.F2.sffma
-    40, // llvm.hexagon.F2.sffma.lib
-    40, // llvm.hexagon.F2.sffma.sc
-    40, // llvm.hexagon.F2.sffms
-    40, // llvm.hexagon.F2.sffms.lib
-    1, // llvm.hexagon.F2.sfimm.n
-    1, // llvm.hexagon.F2.sfimm.p
-    40, // llvm.hexagon.F2.sfinvsqrta
-    40, // llvm.hexagon.F2.sfmax
-    40, // llvm.hexagon.F2.sfmin
-    40, // llvm.hexagon.F2.sfmpy
-    40, // llvm.hexagon.F2.sfrecipa
-    40, // llvm.hexagon.F2.sfsub
-    16, // llvm.hexagon.L2.loadrb.pbr
-    31, // llvm.hexagon.L2.loadrb.pci
-    19, // llvm.hexagon.L2.loadrb.pcr
-    16, // llvm.hexagon.L2.loadrd.pbr
-    31, // llvm.hexagon.L2.loadrd.pci
-    19, // llvm.hexagon.L2.loadrd.pcr
-    16, // llvm.hexagon.L2.loadrh.pbr
-    31, // llvm.hexagon.L2.loadrh.pci
-    19, // llvm.hexagon.L2.loadrh.pcr
-    16, // llvm.hexagon.L2.loadri.pbr
-    31, // llvm.hexagon.L2.loadri.pci
-    19, // llvm.hexagon.L2.loadri.pcr
-    16, // llvm.hexagon.L2.loadrub.pbr
-    31, // llvm.hexagon.L2.loadrub.pci
-    19, // llvm.hexagon.L2.loadrub.pcr
-    16, // llvm.hexagon.L2.loadruh.pbr
-    31, // llvm.hexagon.L2.loadruh.pci
-    19, // llvm.hexagon.L2.loadruh.pcr
-    18, // llvm.hexagon.L2.loadw.locked
-    18, // llvm.hexagon.L4.loadd.locked
+    121, // llvm.hexagon.F2.dfadd
+    122, // llvm.hexagon.F2.dfclass
+    121, // llvm.hexagon.F2.dfcmpeq
+    121, // llvm.hexagon.F2.dfcmpge
+    121, // llvm.hexagon.F2.dfcmpgt
+    121, // llvm.hexagon.F2.dfcmpuo
+    20, // llvm.hexagon.F2.dfimm.n
+    20, // llvm.hexagon.F2.dfimm.p
+    121, // llvm.hexagon.F2.dfsub
+    121, // llvm.hexagon.F2.sfadd
+    122, // llvm.hexagon.F2.sfclass
+    121, // llvm.hexagon.F2.sfcmpeq
+    121, // llvm.hexagon.F2.sfcmpge
+    121, // llvm.hexagon.F2.sfcmpgt
+    121, // llvm.hexagon.F2.sfcmpuo
+    121, // llvm.hexagon.F2.sffixupd
+    121, // llvm.hexagon.F2.sffixupn
+    121, // llvm.hexagon.F2.sffixupr
+    121, // llvm.hexagon.F2.sffma
+    121, // llvm.hexagon.F2.sffma.lib
+    121, // llvm.hexagon.F2.sffma.sc
+    121, // llvm.hexagon.F2.sffms
+    121, // llvm.hexagon.F2.sffms.lib
+    20, // llvm.hexagon.F2.sfimm.n
+    20, // llvm.hexagon.F2.sfimm.p
+    121, // llvm.hexagon.F2.sfinvsqrta
+    121, // llvm.hexagon.F2.sfmax
+    121, // llvm.hexagon.F2.sfmin
+    121, // llvm.hexagon.F2.sfmpy
+    121, // llvm.hexagon.F2.sfrecipa
+    121, // llvm.hexagon.F2.sfsub
+    18, // llvm.hexagon.L2.loadrb.pbr
+    47, // llvm.hexagon.L2.loadrb.pci
+    46, // llvm.hexagon.L2.loadrb.pcr
+    18, // llvm.hexagon.L2.loadrd.pbr
+    47, // llvm.hexagon.L2.loadrd.pci
+    46, // llvm.hexagon.L2.loadrd.pcr
+    18, // llvm.hexagon.L2.loadrh.pbr
+    47, // llvm.hexagon.L2.loadrh.pci
+    46, // llvm.hexagon.L2.loadrh.pcr
+    18, // llvm.hexagon.L2.loadri.pbr
+    47, // llvm.hexagon.L2.loadri.pci
+    46, // llvm.hexagon.L2.loadri.pcr
+    18, // llvm.hexagon.L2.loadrub.pbr
+    47, // llvm.hexagon.L2.loadrub.pci
+    46, // llvm.hexagon.L2.loadrub.pcr
+    18, // llvm.hexagon.L2.loadruh.pbr
+    47, // llvm.hexagon.L2.loadruh.pci
+    46, // llvm.hexagon.L2.loadruh.pcr
+    23, // llvm.hexagon.L2.loadw.locked
+    23, // llvm.hexagon.L4.loadd.locked
     1, // llvm.hexagon.M2.acci
-    1, // llvm.hexagon.M2.accii
+    27, // llvm.hexagon.M2.accii
     1, // llvm.hexagon.M2.cmaci.s0
     1, // llvm.hexagon.M2.cmacr.s0
     1, // llvm.hexagon.M2.cmacs.s0
@@ -10753,8 +11150,8 @@
     1, // llvm.hexagon.M2.hmmpyl.rs1
     1, // llvm.hexagon.M2.hmmpyl.s1
     1, // llvm.hexagon.M2.maci
-    1, // llvm.hexagon.M2.macsin
-    1, // llvm.hexagon.M2.macsip
+    27, // llvm.hexagon.M2.macsin
+    27, // llvm.hexagon.M2.macsip
     1, // llvm.hexagon.M2.mmachs.rs0
     1, // llvm.hexagon.M2.mmachs.rs1
     1, // llvm.hexagon.M2.mmachs.s0
@@ -10888,9 +11285,9 @@
     1, // llvm.hexagon.M2.mpyd.rnd.ll.s0
     1, // llvm.hexagon.M2.mpyd.rnd.ll.s1
     1, // llvm.hexagon.M2.mpyi
-    1, // llvm.hexagon.M2.mpysin
-    1, // llvm.hexagon.M2.mpysip
-    1, // llvm.hexagon.M2.mpysmi
+    40, // llvm.hexagon.M2.mpysin
+    40, // llvm.hexagon.M2.mpysip
+    40, // llvm.hexagon.M2.mpysmi
     1, // llvm.hexagon.M2.mpysu.up
     1, // llvm.hexagon.M2.mpyu.acc.hh.s0
     1, // llvm.hexagon.M2.mpyu.acc.hh.s1
@@ -10943,7 +11340,7 @@
     1, // llvm.hexagon.M2.mpyud.nac.ll.s1
     1, // llvm.hexagon.M2.mpyui
     1, // llvm.hexagon.M2.nacci
-    1, // llvm.hexagon.M2.naccii
+    27, // llvm.hexagon.M2.naccii
     1, // llvm.hexagon.M2.subacc
     1, // llvm.hexagon.M2.vabsdiffh
     1, // llvm.hexagon.M2.vabsdiffw
@@ -11000,10 +11397,10 @@
     1, // llvm.hexagon.M4.cmpyr.wh
     1, // llvm.hexagon.M4.cmpyr.whc
     1, // llvm.hexagon.M4.mac.up.s1.sat
-    1, // llvm.hexagon.M4.mpyri.addi
-    1, // llvm.hexagon.M4.mpyri.addr
-    1, // llvm.hexagon.M4.mpyri.addr.u2
-    1, // llvm.hexagon.M4.mpyrr.addi
+    123, // llvm.hexagon.M4.mpyri.addi
+    27, // llvm.hexagon.M4.mpyri.addr
+    40, // llvm.hexagon.M4.mpyri.addr.u2
+    20, // llvm.hexagon.M4.mpyrr.addi
     1, // llvm.hexagon.M4.mpyrr.addr
     1, // llvm.hexagon.M4.nac.up.s1.sat
     1, // llvm.hexagon.M4.or.and
@@ -11038,22 +11435,22 @@
     1, // llvm.hexagon.M5.vrmpybuu
     1, // llvm.hexagon.M6.vabsdiffb
     1, // llvm.hexagon.M6.vabsdiffub
-    1, // llvm.hexagon.S2.addasl.rrri
-    1, // llvm.hexagon.S2.asl.i.p
-    1, // llvm.hexagon.S2.asl.i.p.acc
-    1, // llvm.hexagon.S2.asl.i.p.and
-    1, // llvm.hexagon.S2.asl.i.p.nac
-    1, // llvm.hexagon.S2.asl.i.p.or
-    1, // llvm.hexagon.S2.asl.i.p.xacc
-    1, // llvm.hexagon.S2.asl.i.r
-    1, // llvm.hexagon.S2.asl.i.r.acc
-    1, // llvm.hexagon.S2.asl.i.r.and
-    1, // llvm.hexagon.S2.asl.i.r.nac
-    1, // llvm.hexagon.S2.asl.i.r.or
-    1, // llvm.hexagon.S2.asl.i.r.sat
-    1, // llvm.hexagon.S2.asl.i.r.xacc
-    1, // llvm.hexagon.S2.asl.i.vh
-    1, // llvm.hexagon.S2.asl.i.vw
+    27, // llvm.hexagon.S2.addasl.rrri
+    40, // llvm.hexagon.S2.asl.i.p
+    27, // llvm.hexagon.S2.asl.i.p.acc
+    27, // llvm.hexagon.S2.asl.i.p.and
+    27, // llvm.hexagon.S2.asl.i.p.nac
+    27, // llvm.hexagon.S2.asl.i.p.or
+    27, // llvm.hexagon.S2.asl.i.p.xacc
+    40, // llvm.hexagon.S2.asl.i.r
+    27, // llvm.hexagon.S2.asl.i.r.acc
+    27, // llvm.hexagon.S2.asl.i.r.and
+    27, // llvm.hexagon.S2.asl.i.r.nac
+    27, // llvm.hexagon.S2.asl.i.r.or
+    40, // llvm.hexagon.S2.asl.i.r.sat
+    27, // llvm.hexagon.S2.asl.i.r.xacc
+    40, // llvm.hexagon.S2.asl.i.vh
+    40, // llvm.hexagon.S2.asl.i.vw
     1, // llvm.hexagon.S2.asl.r.p
     1, // llvm.hexagon.S2.asl.r.p.acc
     1, // llvm.hexagon.S2.asl.r.p.and
@@ -11068,23 +11465,23 @@
     1, // llvm.hexagon.S2.asl.r.r.sat
     1, // llvm.hexagon.S2.asl.r.vh
     1, // llvm.hexagon.S2.asl.r.vw
-    1, // llvm.hexagon.S2.asr.i.p
-    1, // llvm.hexagon.S2.asr.i.p.acc
-    1, // llvm.hexagon.S2.asr.i.p.and
-    1, // llvm.hexagon.S2.asr.i.p.nac
-    1, // llvm.hexagon.S2.asr.i.p.or
-    1, // llvm.hexagon.S2.asr.i.p.rnd
-    1, // llvm.hexagon.S2.asr.i.p.rnd.goodsyntax
-    1, // llvm.hexagon.S2.asr.i.r
-    1, // llvm.hexagon.S2.asr.i.r.acc
-    1, // llvm.hexagon.S2.asr.i.r.and
-    1, // llvm.hexagon.S2.asr.i.r.nac
-    1, // llvm.hexagon.S2.asr.i.r.or
-    1, // llvm.hexagon.S2.asr.i.r.rnd
-    1, // llvm.hexagon.S2.asr.i.r.rnd.goodsyntax
-    1, // llvm.hexagon.S2.asr.i.svw.trun
-    1, // llvm.hexagon.S2.asr.i.vh
-    1, // llvm.hexagon.S2.asr.i.vw
+    40, // llvm.hexagon.S2.asr.i.p
+    27, // llvm.hexagon.S2.asr.i.p.acc
+    27, // llvm.hexagon.S2.asr.i.p.and
+    27, // llvm.hexagon.S2.asr.i.p.nac
+    27, // llvm.hexagon.S2.asr.i.p.or
+    40, // llvm.hexagon.S2.asr.i.p.rnd
+    40, // llvm.hexagon.S2.asr.i.p.rnd.goodsyntax
+    40, // llvm.hexagon.S2.asr.i.r
+    27, // llvm.hexagon.S2.asr.i.r.acc
+    27, // llvm.hexagon.S2.asr.i.r.and
+    27, // llvm.hexagon.S2.asr.i.r.nac
+    27, // llvm.hexagon.S2.asr.i.r.or
+    40, // llvm.hexagon.S2.asr.i.r.rnd
+    40, // llvm.hexagon.S2.asr.i.r.rnd.goodsyntax
+    40, // llvm.hexagon.S2.asr.i.svw.trun
+    40, // llvm.hexagon.S2.asr.i.vh
+    40, // llvm.hexagon.S2.asr.i.vw
     1, // llvm.hexagon.S2.asr.r.p
     1, // llvm.hexagon.S2.asr.r.p.acc
     1, // llvm.hexagon.S2.asr.r.p.and
@@ -11109,20 +11506,20 @@
     1, // llvm.hexagon.S2.clb
     1, // llvm.hexagon.S2.clbnorm
     1, // llvm.hexagon.S2.clbp
-    1, // llvm.hexagon.S2.clrbit.i
+    40, // llvm.hexagon.S2.clrbit.i
     1, // llvm.hexagon.S2.clrbit.r
     1, // llvm.hexagon.S2.ct0
     1, // llvm.hexagon.S2.ct0p
     1, // llvm.hexagon.S2.ct1
     1, // llvm.hexagon.S2.ct1p
     1, // llvm.hexagon.S2.deinterleave
-    1, // llvm.hexagon.S2.extractu
+    39, // llvm.hexagon.S2.extractu
     1, // llvm.hexagon.S2.extractu.rp
-    1, // llvm.hexagon.S2.extractup
+    39, // llvm.hexagon.S2.extractup
     1, // llvm.hexagon.S2.extractup.rp
-    1, // llvm.hexagon.S2.insert
+    124, // llvm.hexagon.S2.insert
     1, // llvm.hexagon.S2.insert.rp
-    1, // llvm.hexagon.S2.insertp
+    124, // llvm.hexagon.S2.insertp
     1, // llvm.hexagon.S2.insertp.rp
     1, // llvm.hexagon.S2.interleave
     1, // llvm.hexagon.S2.lfsp
@@ -11139,20 +11536,20 @@
     1, // llvm.hexagon.S2.lsl.r.r.or
     1, // llvm.hexagon.S2.lsl.r.vh
     1, // llvm.hexagon.S2.lsl.r.vw
-    1, // llvm.hexagon.S2.lsr.i.p
-    1, // llvm.hexagon.S2.lsr.i.p.acc
-    1, // llvm.hexagon.S2.lsr.i.p.and
-    1, // llvm.hexagon.S2.lsr.i.p.nac
-    1, // llvm.hexagon.S2.lsr.i.p.or
-    1, // llvm.hexagon.S2.lsr.i.p.xacc
-    1, // llvm.hexagon.S2.lsr.i.r
-    1, // llvm.hexagon.S2.lsr.i.r.acc
-    1, // llvm.hexagon.S2.lsr.i.r.and
-    1, // llvm.hexagon.S2.lsr.i.r.nac
-    1, // llvm.hexagon.S2.lsr.i.r.or
-    1, // llvm.hexagon.S2.lsr.i.r.xacc
-    1, // llvm.hexagon.S2.lsr.i.vh
-    1, // llvm.hexagon.S2.lsr.i.vw
+    40, // llvm.hexagon.S2.lsr.i.p
+    27, // llvm.hexagon.S2.lsr.i.p.acc
+    27, // llvm.hexagon.S2.lsr.i.p.and
+    27, // llvm.hexagon.S2.lsr.i.p.nac
+    27, // llvm.hexagon.S2.lsr.i.p.or
+    27, // llvm.hexagon.S2.lsr.i.p.xacc
+    40, // llvm.hexagon.S2.lsr.i.r
+    27, // llvm.hexagon.S2.lsr.i.r.acc
+    27, // llvm.hexagon.S2.lsr.i.r.and
+    27, // llvm.hexagon.S2.lsr.i.r.nac
+    27, // llvm.hexagon.S2.lsr.i.r.or
+    27, // llvm.hexagon.S2.lsr.i.r.xacc
+    40, // llvm.hexagon.S2.lsr.i.vh
+    40, // llvm.hexagon.S2.lsr.i.vw
     1, // llvm.hexagon.S2.lsr.r.p
     1, // llvm.hexagon.S2.lsr.r.p.acc
     1, // llvm.hexagon.S2.lsr.r.p.and
@@ -11166,42 +11563,42 @@
     1, // llvm.hexagon.S2.lsr.r.r.or
     1, // llvm.hexagon.S2.lsr.r.vh
     1, // llvm.hexagon.S2.lsr.r.vw
-    1, // llvm.hexagon.S2.mask
+    120, // llvm.hexagon.S2.mask
     1, // llvm.hexagon.S2.packhl
     1, // llvm.hexagon.S2.parityp
-    1, // llvm.hexagon.S2.setbit.i
+    40, // llvm.hexagon.S2.setbit.i
     1, // llvm.hexagon.S2.setbit.r
     1, // llvm.hexagon.S2.shuffeb
     1, // llvm.hexagon.S2.shuffeh
     1, // llvm.hexagon.S2.shuffob
     1, // llvm.hexagon.S2.shuffoh
-    34, // llvm.hexagon.S2.storerb.pbr
-    32, // llvm.hexagon.S2.storerb.pci
-    31, // llvm.hexagon.S2.storerb.pcr
-    34, // llvm.hexagon.S2.storerd.pbr
-    32, // llvm.hexagon.S2.storerd.pci
-    31, // llvm.hexagon.S2.storerd.pcr
-    34, // llvm.hexagon.S2.storerf.pbr
-    32, // llvm.hexagon.S2.storerf.pci
-    31, // llvm.hexagon.S2.storerf.pcr
-    34, // llvm.hexagon.S2.storerh.pbr
-    32, // llvm.hexagon.S2.storerh.pci
-    31, // llvm.hexagon.S2.storerh.pcr
-    34, // llvm.hexagon.S2.storeri.pbr
-    32, // llvm.hexagon.S2.storeri.pci
-    31, // llvm.hexagon.S2.storeri.pcr
-    18, // llvm.hexagon.S2.storew.locked
+    50, // llvm.hexagon.S2.storerb.pbr
+    48, // llvm.hexagon.S2.storerb.pci
+    47, // llvm.hexagon.S2.storerb.pcr
+    50, // llvm.hexagon.S2.storerd.pbr
+    48, // llvm.hexagon.S2.storerd.pci
+    47, // llvm.hexagon.S2.storerd.pcr
+    50, // llvm.hexagon.S2.storerf.pbr
+    48, // llvm.hexagon.S2.storerf.pci
+    47, // llvm.hexagon.S2.storerf.pcr
+    50, // llvm.hexagon.S2.storerh.pbr
+    48, // llvm.hexagon.S2.storerh.pci
+    47, // llvm.hexagon.S2.storerh.pcr
+    50, // llvm.hexagon.S2.storeri.pbr
+    48, // llvm.hexagon.S2.storeri.pci
+    47, // llvm.hexagon.S2.storeri.pcr
+    23, // llvm.hexagon.S2.storew.locked
     1, // llvm.hexagon.S2.svsathb
     1, // llvm.hexagon.S2.svsathub
-    1, // llvm.hexagon.S2.tableidxb.goodsyntax
-    1, // llvm.hexagon.S2.tableidxd.goodsyntax
-    1, // llvm.hexagon.S2.tableidxh.goodsyntax
-    1, // llvm.hexagon.S2.tableidxw.goodsyntax
-    1, // llvm.hexagon.S2.togglebit.i
+    124, // llvm.hexagon.S2.tableidxb.goodsyntax
+    124, // llvm.hexagon.S2.tableidxd.goodsyntax
+    124, // llvm.hexagon.S2.tableidxh.goodsyntax
+    124, // llvm.hexagon.S2.tableidxw.goodsyntax
+    40, // llvm.hexagon.S2.togglebit.i
     1, // llvm.hexagon.S2.togglebit.r
-    1, // llvm.hexagon.S2.tstbit.i
+    40, // llvm.hexagon.S2.tstbit.i
     1, // llvm.hexagon.S2.tstbit.r
-    1, // llvm.hexagon.S2.valignib
+    27, // llvm.hexagon.S2.valignib
     1, // llvm.hexagon.S2.valignrb
     1, // llvm.hexagon.S2.vcnegh
     1, // llvm.hexagon.S2.vcrotate
@@ -11218,7 +11615,7 @@
     1, // llvm.hexagon.S2.vsatwuh.nopack
     1, // llvm.hexagon.S2.vsplatrb
     1, // llvm.hexagon.S2.vsplatrh
-    1, // llvm.hexagon.S2.vspliceib
+    27, // llvm.hexagon.S2.vspliceib
     1, // llvm.hexagon.S2.vsplicerb
     1, // llvm.hexagon.S2.vsxtbh
     1, // llvm.hexagon.S2.vsxthw
@@ -11228,55 +11625,55 @@
     1, // llvm.hexagon.S2.vtrunowh
     1, // llvm.hexagon.S2.vzxtbh
     1, // llvm.hexagon.S2.vzxthw
-    1, // llvm.hexagon.S4.addaddi
-    1, // llvm.hexagon.S4.addi.asl.ri
-    1, // llvm.hexagon.S4.addi.lsr.ri
-    1, // llvm.hexagon.S4.andi.asl.ri
-    1, // llvm.hexagon.S4.andi.lsr.ri
-    1, // llvm.hexagon.S4.clbaddi
-    1, // llvm.hexagon.S4.clbpaddi
+    27, // llvm.hexagon.S4.addaddi
+    123, // llvm.hexagon.S4.addi.asl.ri
+    123, // llvm.hexagon.S4.addi.lsr.ri
+    123, // llvm.hexagon.S4.andi.asl.ri
+    123, // llvm.hexagon.S4.andi.lsr.ri
+    40, // llvm.hexagon.S4.clbaddi
+    40, // llvm.hexagon.S4.clbpaddi
     1, // llvm.hexagon.S4.clbpnorm
-    1, // llvm.hexagon.S4.extract
+    39, // llvm.hexagon.S4.extract
     1, // llvm.hexagon.S4.extract.rp
-    1, // llvm.hexagon.S4.extractp
+    39, // llvm.hexagon.S4.extractp
     1, // llvm.hexagon.S4.extractp.rp
-    1, // llvm.hexagon.S4.lsli
-    1, // llvm.hexagon.S4.ntstbit.i
+    20, // llvm.hexagon.S4.lsli
+    40, // llvm.hexagon.S4.ntstbit.i
     1, // llvm.hexagon.S4.ntstbit.r
-    1, // llvm.hexagon.S4.or.andi
-    1, // llvm.hexagon.S4.or.andix
-    1, // llvm.hexagon.S4.or.ori
-    1, // llvm.hexagon.S4.ori.asl.ri
-    1, // llvm.hexagon.S4.ori.lsr.ri
+    27, // llvm.hexagon.S4.or.andi
+    27, // llvm.hexagon.S4.or.andix
+    27, // llvm.hexagon.S4.or.ori
+    123, // llvm.hexagon.S4.ori.asl.ri
+    123, // llvm.hexagon.S4.ori.lsr.ri
     1, // llvm.hexagon.S4.parity
-    18, // llvm.hexagon.S4.stored.locked
-    1, // llvm.hexagon.S4.subaddi
-    1, // llvm.hexagon.S4.subi.asl.ri
-    1, // llvm.hexagon.S4.subi.lsr.ri
-    1, // llvm.hexagon.S4.vrcrotate
-    1, // llvm.hexagon.S4.vrcrotate.acc
+    23, // llvm.hexagon.S4.stored.locked
+    40, // llvm.hexagon.S4.subaddi
+    123, // llvm.hexagon.S4.subi.asl.ri
+    123, // llvm.hexagon.S4.subi.lsr.ri
+    27, // llvm.hexagon.S4.vrcrotate
+    125, // llvm.hexagon.S4.vrcrotate.acc
     1, // llvm.hexagon.S4.vxaddsubh
     1, // llvm.hexagon.S4.vxaddsubhr
     1, // llvm.hexagon.S4.vxaddsubw
     1, // llvm.hexagon.S4.vxsubaddh
     1, // llvm.hexagon.S4.vxsubaddhr
     1, // llvm.hexagon.S4.vxsubaddw
-    1, // llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax
-    1, // llvm.hexagon.S5.asrhub.sat
+    40, // llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax
+    40, // llvm.hexagon.S5.asrhub.sat
     1, // llvm.hexagon.S5.popcountp
-    1, // llvm.hexagon.S5.vasrhrnd.goodsyntax
-    1, // llvm.hexagon.S6.rol.i.p
-    1, // llvm.hexagon.S6.rol.i.p.acc
-    1, // llvm.hexagon.S6.rol.i.p.and
-    1, // llvm.hexagon.S6.rol.i.p.nac
-    1, // llvm.hexagon.S6.rol.i.p.or
-    1, // llvm.hexagon.S6.rol.i.p.xacc
-    1, // llvm.hexagon.S6.rol.i.r
-    1, // llvm.hexagon.S6.rol.i.r.acc
-    1, // llvm.hexagon.S6.rol.i.r.and
-    1, // llvm.hexagon.S6.rol.i.r.nac
-    1, // llvm.hexagon.S6.rol.i.r.or
-    1, // llvm.hexagon.S6.rol.i.r.xacc
+    40, // llvm.hexagon.S5.vasrhrnd.goodsyntax
+    40, // llvm.hexagon.S6.rol.i.p
+    27, // llvm.hexagon.S6.rol.i.p.acc
+    27, // llvm.hexagon.S6.rol.i.p.and
+    27, // llvm.hexagon.S6.rol.i.p.nac
+    27, // llvm.hexagon.S6.rol.i.p.or
+    27, // llvm.hexagon.S6.rol.i.p.xacc
+    40, // llvm.hexagon.S6.rol.i.r
+    27, // llvm.hexagon.S6.rol.i.r.acc
+    27, // llvm.hexagon.S6.rol.i.r.and
+    27, // llvm.hexagon.S6.rol.i.r.nac
+    27, // llvm.hexagon.S6.rol.i.r.or
+    27, // llvm.hexagon.S6.rol.i.r.xacc
     1, // llvm.hexagon.S6.vsplatrbp
     1, // llvm.hexagon.S6.vtrunehb.ppp
     1, // llvm.hexagon.S6.vtrunohb.ppp
@@ -11343,14 +11740,14 @@
     1, // llvm.hexagon.V6.shuffeqh.128B
     1, // llvm.hexagon.V6.shuffeqw
     1, // llvm.hexagon.V6.shuffeqw.128B
-    22, // llvm.hexagon.V6.vS32b.nqpred.ai
-    22, // llvm.hexagon.V6.vS32b.nqpred.ai.128B
-    22, // llvm.hexagon.V6.vS32b.nt.nqpred.ai
-    22, // llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B
-    22, // llvm.hexagon.V6.vS32b.nt.qpred.ai
-    22, // llvm.hexagon.V6.vS32b.nt.qpred.ai.128B
-    22, // llvm.hexagon.V6.vS32b.qpred.ai
-    22, // llvm.hexagon.V6.vS32b.qpred.ai.128B
+    29, // llvm.hexagon.V6.vS32b.nqpred.ai
+    29, // llvm.hexagon.V6.vS32b.nqpred.ai.128B
+    29, // llvm.hexagon.V6.vS32b.nt.nqpred.ai
+    29, // llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B
+    29, // llvm.hexagon.V6.vS32b.nt.qpred.ai
+    29, // llvm.hexagon.V6.vS32b.nt.qpred.ai.128B
+    29, // llvm.hexagon.V6.vS32b.qpred.ai
+    29, // llvm.hexagon.V6.vS32b.qpred.ai.128B
     1, // llvm.hexagon.V6.vabsb
     1, // llvm.hexagon.V6.vabsb.128B
     1, // llvm.hexagon.V6.vabsb.sat
@@ -11443,8 +11840,8 @@
     1, // llvm.hexagon.V6.vaddwsat.dv.128B
     1, // llvm.hexagon.V6.valignb
     1, // llvm.hexagon.V6.valignb.128B
-    1, // llvm.hexagon.V6.valignbi
-    1, // llvm.hexagon.V6.valignbi.128B
+    27, // llvm.hexagon.V6.valignbi
+    27, // llvm.hexagon.V6.valignbi.128B
     1, // llvm.hexagon.V6.vand
     1, // llvm.hexagon.V6.vand.128B
     1, // llvm.hexagon.V6.vandnqrt
@@ -11627,18 +12024,18 @@
     1, // llvm.hexagon.V6.veqw.or.128B
     1, // llvm.hexagon.V6.veqw.xor
     1, // llvm.hexagon.V6.veqw.xor.128B
-    22, // llvm.hexagon.V6.vgathermh
-    22, // llvm.hexagon.V6.vgathermh.128B
-    22, // llvm.hexagon.V6.vgathermhq
-    22, // llvm.hexagon.V6.vgathermhq.128B
-    22, // llvm.hexagon.V6.vgathermhw
-    22, // llvm.hexagon.V6.vgathermhw.128B
-    22, // llvm.hexagon.V6.vgathermhwq
-    22, // llvm.hexagon.V6.vgathermhwq.128B
-    22, // llvm.hexagon.V6.vgathermw
-    22, // llvm.hexagon.V6.vgathermw.128B
-    22, // llvm.hexagon.V6.vgathermwq
-    22, // llvm.hexagon.V6.vgathermwq.128B
+    29, // llvm.hexagon.V6.vgathermh
+    29, // llvm.hexagon.V6.vgathermh.128B
+    29, // llvm.hexagon.V6.vgathermhq
+    29, // llvm.hexagon.V6.vgathermhq.128B
+    29, // llvm.hexagon.V6.vgathermhw
+    29, // llvm.hexagon.V6.vgathermhw.128B
+    29, // llvm.hexagon.V6.vgathermhwq
+    29, // llvm.hexagon.V6.vgathermhwq.128B
+    29, // llvm.hexagon.V6.vgathermw
+    29, // llvm.hexagon.V6.vgathermw.128B
+    29, // llvm.hexagon.V6.vgathermwq
+    29, // llvm.hexagon.V6.vgathermwq.128B
     1, // llvm.hexagon.V6.vgtb
     1, // llvm.hexagon.V6.vgtb.128B
     1, // llvm.hexagon.V6.vgtb.and
@@ -11691,8 +12088,8 @@
     1, // llvm.hexagon.V6.vinsertwr.128B
     1, // llvm.hexagon.V6.vlalignb
     1, // llvm.hexagon.V6.vlalignb.128B
-    1, // llvm.hexagon.V6.vlalignbi
-    1, // llvm.hexagon.V6.vlalignbi.128B
+    27, // llvm.hexagon.V6.vlalignbi
+    27, // llvm.hexagon.V6.vlalignbi.128B
     1, // llvm.hexagon.V6.vlsrb
     1, // llvm.hexagon.V6.vlsrb.128B
     1, // llvm.hexagon.V6.vlsrh
@@ -11711,28 +12108,28 @@
     1, // llvm.hexagon.V6.vlutvvb.nm.128B
     1, // llvm.hexagon.V6.vlutvvb.oracc
     1, // llvm.hexagon.V6.vlutvvb.oracc.128B
-    1, // llvm.hexagon.V6.vlutvvb.oracci
-    1, // llvm.hexagon.V6.vlutvvb.oracci.128B
-    1, // llvm.hexagon.V6.vlutvvbi
-    1, // llvm.hexagon.V6.vlutvvbi.128B
+    125, // llvm.hexagon.V6.vlutvvb.oracci
+    125, // llvm.hexagon.V6.vlutvvb.oracci.128B
+    27, // llvm.hexagon.V6.vlutvvbi
+    27, // llvm.hexagon.V6.vlutvvbi.128B
     1, // llvm.hexagon.V6.vlutvwh
     1, // llvm.hexagon.V6.vlutvwh.128B
     1, // llvm.hexagon.V6.vlutvwh.nm
     1, // llvm.hexagon.V6.vlutvwh.nm.128B
     1, // llvm.hexagon.V6.vlutvwh.oracc
     1, // llvm.hexagon.V6.vlutvwh.oracc.128B
-    1, // llvm.hexagon.V6.vlutvwh.oracci
-    1, // llvm.hexagon.V6.vlutvwh.oracci.128B
-    1, // llvm.hexagon.V6.vlutvwhi
-    1, // llvm.hexagon.V6.vlutvwhi.128B
-    22, // llvm.hexagon.V6.vmaskedstorenq
-    22, // llvm.hexagon.V6.vmaskedstorenq.128B
-    22, // llvm.hexagon.V6.vmaskedstorentnq
-    22, // llvm.hexagon.V6.vmaskedstorentnq.128B
-    22, // llvm.hexagon.V6.vmaskedstorentq
-    22, // llvm.hexagon.V6.vmaskedstorentq.128B
-    22, // llvm.hexagon.V6.vmaskedstoreq
-    22, // llvm.hexagon.V6.vmaskedstoreq.128B
+    125, // llvm.hexagon.V6.vlutvwh.oracci
+    125, // llvm.hexagon.V6.vlutvwh.oracci.128B
+    27, // llvm.hexagon.V6.vlutvwhi
+    27, // llvm.hexagon.V6.vlutvwhi.128B
+    29, // llvm.hexagon.V6.vmaskedstorenq
+    29, // llvm.hexagon.V6.vmaskedstorenq.128B
+    29, // llvm.hexagon.V6.vmaskedstorentnq
+    29, // llvm.hexagon.V6.vmaskedstorentnq.128B
+    29, // llvm.hexagon.V6.vmaskedstorentq
+    29, // llvm.hexagon.V6.vmaskedstorentq.128B
+    29, // llvm.hexagon.V6.vmaskedstoreq
+    29, // llvm.hexagon.V6.vmaskedstoreq.128B
     1, // llvm.hexagon.V6.vmaxb
     1, // llvm.hexagon.V6.vmaxb.128B
     1, // llvm.hexagon.V6.vmaxh
@@ -11927,10 +12324,10 @@
     1, // llvm.hexagon.V6.vrmpybus.128B
     1, // llvm.hexagon.V6.vrmpybus.acc
     1, // llvm.hexagon.V6.vrmpybus.acc.128B
-    1, // llvm.hexagon.V6.vrmpybusi
-    1, // llvm.hexagon.V6.vrmpybusi.128B
-    1, // llvm.hexagon.V6.vrmpybusi.acc
-    1, // llvm.hexagon.V6.vrmpybusi.acc.128B
+    27, // llvm.hexagon.V6.vrmpybusi
+    27, // llvm.hexagon.V6.vrmpybusi.128B
+    125, // llvm.hexagon.V6.vrmpybusi.acc
+    125, // llvm.hexagon.V6.vrmpybusi.acc.128B
     1, // llvm.hexagon.V6.vrmpybusv
     1, // llvm.hexagon.V6.vrmpybusv.128B
     1, // llvm.hexagon.V6.vrmpybusv.acc
@@ -11947,10 +12344,10 @@
     1, // llvm.hexagon.V6.vrmpyub.rtt.128B
     1, // llvm.hexagon.V6.vrmpyub.rtt.acc
     1, // llvm.hexagon.V6.vrmpyub.rtt.acc.128B
-    1, // llvm.hexagon.V6.vrmpyubi
-    1, // llvm.hexagon.V6.vrmpyubi.128B
-    1, // llvm.hexagon.V6.vrmpyubi.acc
-    1, // llvm.hexagon.V6.vrmpyubi.acc.128B
+    27, // llvm.hexagon.V6.vrmpyubi
+    27, // llvm.hexagon.V6.vrmpyubi.128B
+    125, // llvm.hexagon.V6.vrmpyubi.acc
+    125, // llvm.hexagon.V6.vrmpyubi.acc.128B
     1, // llvm.hexagon.V6.vrmpyubv
     1, // llvm.hexagon.V6.vrmpyubv.128B
     1, // llvm.hexagon.V6.vrmpyubv.acc
@@ -11971,10 +12368,10 @@
     1, // llvm.hexagon.V6.vroundwh.128B
     1, // llvm.hexagon.V6.vroundwuh
     1, // llvm.hexagon.V6.vroundwuh.128B
-    1, // llvm.hexagon.V6.vrsadubi
-    1, // llvm.hexagon.V6.vrsadubi.128B
-    1, // llvm.hexagon.V6.vrsadubi.acc
-    1, // llvm.hexagon.V6.vrsadubi.acc.128B
+    27, // llvm.hexagon.V6.vrsadubi
+    27, // llvm.hexagon.V6.vrsadubi.128B
+    125, // llvm.hexagon.V6.vrsadubi.acc
+    125, // llvm.hexagon.V6.vrsadubi.acc.128B
     1, // llvm.hexagon.V6.vsatdw
     1, // llvm.hexagon.V6.vsatdw.128B
     1, // llvm.hexagon.V6.vsathub
@@ -11985,24 +12382,24 @@
     1, // llvm.hexagon.V6.vsatwh.128B
     1, // llvm.hexagon.V6.vsb
     1, // llvm.hexagon.V6.vsb.128B
-    34, // llvm.hexagon.V6.vscattermh
-    34, // llvm.hexagon.V6.vscattermh.128B
-    34, // llvm.hexagon.V6.vscattermh.add
-    34, // llvm.hexagon.V6.vscattermh.add.128B
-    34, // llvm.hexagon.V6.vscattermhq
-    34, // llvm.hexagon.V6.vscattermhq.128B
-    34, // llvm.hexagon.V6.vscattermhw
-    34, // llvm.hexagon.V6.vscattermhw.128B
-    34, // llvm.hexagon.V6.vscattermhw.add
-    34, // llvm.hexagon.V6.vscattermhw.add.128B
-    34, // llvm.hexagon.V6.vscattermhwq
-    34, // llvm.hexagon.V6.vscattermhwq.128B
-    34, // llvm.hexagon.V6.vscattermw
-    34, // llvm.hexagon.V6.vscattermw.128B
-    34, // llvm.hexagon.V6.vscattermw.add
-    34, // llvm.hexagon.V6.vscattermw.add.128B
-    34, // llvm.hexagon.V6.vscattermwq
-    34, // llvm.hexagon.V6.vscattermwq.128B
+    50, // llvm.hexagon.V6.vscattermh
+    50, // llvm.hexagon.V6.vscattermh.128B
+    50, // llvm.hexagon.V6.vscattermh.add
+    50, // llvm.hexagon.V6.vscattermh.add.128B
+    50, // llvm.hexagon.V6.vscattermhq
+    50, // llvm.hexagon.V6.vscattermhq.128B
+    50, // llvm.hexagon.V6.vscattermhw
+    50, // llvm.hexagon.V6.vscattermhw.128B
+    50, // llvm.hexagon.V6.vscattermhw.add
+    50, // llvm.hexagon.V6.vscattermhw.add.128B
+    50, // llvm.hexagon.V6.vscattermhwq
+    50, // llvm.hexagon.V6.vscattermhwq.128B
+    50, // llvm.hexagon.V6.vscattermw
+    50, // llvm.hexagon.V6.vscattermw.128B
+    50, // llvm.hexagon.V6.vscattermw.add
+    50, // llvm.hexagon.V6.vscattermw.add.128B
+    50, // llvm.hexagon.V6.vscattermwq
+    50, // llvm.hexagon.V6.vscattermwq.128B
     1, // llvm.hexagon.V6.vsh
     1, // llvm.hexagon.V6.vsh.128B
     1, // llvm.hexagon.V6.vshufeh
@@ -12118,23 +12515,23 @@
     3, // llvm.hexagon.Y2.dccleana
     3, // llvm.hexagon.Y2.dccleaninva
     3, // llvm.hexagon.Y2.dcinva
-    41, // llvm.hexagon.Y2.dczeroa
+    126, // llvm.hexagon.Y2.dczeroa
     3, // llvm.hexagon.Y4.l2fetch
     3, // llvm.hexagon.Y5.l2fetch
-    22, // llvm.hexagon.circ.ldb
-    22, // llvm.hexagon.circ.ldd
-    22, // llvm.hexagon.circ.ldh
-    22, // llvm.hexagon.circ.ldub
-    22, // llvm.hexagon.circ.lduh
-    22, // llvm.hexagon.circ.ldw
-    34, // llvm.hexagon.circ.stb
-    34, // llvm.hexagon.circ.std
-    34, // llvm.hexagon.circ.sth
-    34, // llvm.hexagon.circ.sthhi
-    34, // llvm.hexagon.circ.stw
+    127, // llvm.hexagon.circ.ldb
+    127, // llvm.hexagon.circ.ldd
+    127, // llvm.hexagon.circ.ldh
+    127, // llvm.hexagon.circ.ldub
+    127, // llvm.hexagon.circ.lduh
+    127, // llvm.hexagon.circ.ldw
+    128, // llvm.hexagon.circ.stb
+    128, // llvm.hexagon.circ.std
+    128, // llvm.hexagon.circ.sth
+    128, // llvm.hexagon.circ.sthhi
+    128, // llvm.hexagon.circ.stw
     3, // llvm.hexagon.prefetch
-    23, // llvm.hexagon.vmemcpy
-    25, // llvm.hexagon.vmemset
+    129, // llvm.hexagon.vmemcpy
+    130, // llvm.hexagon.vmemset
     3, // llvm.mips.absq.s.ph
     3, // llvm.mips.absq.s.qb
     3, // llvm.mips.absq.s.w
@@ -12172,14 +12569,14 @@
     1, // llvm.mips.addv.d
     1, // llvm.mips.addv.h
     1, // llvm.mips.addv.w
-    1, // llvm.mips.addvi.b
-    1, // llvm.mips.addvi.d
-    1, // llvm.mips.addvi.h
-    1, // llvm.mips.addvi.w
+    40, // llvm.mips.addvi.b
+    40, // llvm.mips.addvi.d
+    40, // llvm.mips.addvi.h
+    40, // llvm.mips.addvi.w
     3, // llvm.mips.addwc
     1, // llvm.mips.and.v
-    1, // llvm.mips.andi.b
-    1, // llvm.mips.append
+    40, // llvm.mips.andi.b
+    27, // llvm.mips.append
     1, // llvm.mips.asub.s.b
     1, // llvm.mips.asub.s.d
     1, // llvm.mips.asub.s.h
@@ -12204,60 +12601,60 @@
     1, // llvm.mips.aver.u.d
     1, // llvm.mips.aver.u.h
     1, // llvm.mips.aver.u.w
-    1, // llvm.mips.balign
+    27, // llvm.mips.balign
     1, // llvm.mips.bclr.b
     1, // llvm.mips.bclr.d
     1, // llvm.mips.bclr.h
     1, // llvm.mips.bclr.w
-    1, // llvm.mips.bclri.b
-    1, // llvm.mips.bclri.d
-    1, // llvm.mips.bclri.h
-    1, // llvm.mips.bclri.w
+    40, // llvm.mips.bclri.b
+    40, // llvm.mips.bclri.d
+    40, // llvm.mips.bclri.h
+    40, // llvm.mips.bclri.w
     1, // llvm.mips.binsl.b
     1, // llvm.mips.binsl.d
     1, // llvm.mips.binsl.h
     1, // llvm.mips.binsl.w
-    1, // llvm.mips.binsli.b
-    1, // llvm.mips.binsli.d
-    1, // llvm.mips.binsli.h
-    1, // llvm.mips.binsli.w
+    27, // llvm.mips.binsli.b
+    27, // llvm.mips.binsli.d
+    27, // llvm.mips.binsli.h
+    27, // llvm.mips.binsli.w
     1, // llvm.mips.binsr.b
     1, // llvm.mips.binsr.d
     1, // llvm.mips.binsr.h
     1, // llvm.mips.binsr.w
-    1, // llvm.mips.binsri.b
-    1, // llvm.mips.binsri.d
-    1, // llvm.mips.binsri.h
-    1, // llvm.mips.binsri.w
+    27, // llvm.mips.binsri.b
+    27, // llvm.mips.binsri.d
+    27, // llvm.mips.binsri.h
+    27, // llvm.mips.binsri.w
     1, // llvm.mips.bitrev
     1, // llvm.mips.bmnz.v
-    1, // llvm.mips.bmnzi.b
+    27, // llvm.mips.bmnzi.b
     1, // llvm.mips.bmz.v
-    1, // llvm.mips.bmzi.b
+    27, // llvm.mips.bmzi.b
     1, // llvm.mips.bneg.b
     1, // llvm.mips.bneg.d
     1, // llvm.mips.bneg.h
     1, // llvm.mips.bneg.w
-    1, // llvm.mips.bnegi.b
-    1, // llvm.mips.bnegi.d
-    1, // llvm.mips.bnegi.h
-    1, // llvm.mips.bnegi.w
+    40, // llvm.mips.bnegi.b
+    40, // llvm.mips.bnegi.d
+    40, // llvm.mips.bnegi.h
+    40, // llvm.mips.bnegi.w
     1, // llvm.mips.bnz.b
     1, // llvm.mips.bnz.d
     1, // llvm.mips.bnz.h
     1, // llvm.mips.bnz.v
     1, // llvm.mips.bnz.w
-    16, // llvm.mips.bposge32
+    18, // llvm.mips.bposge32
     1, // llvm.mips.bsel.v
-    1, // llvm.mips.bseli.b
+    27, // llvm.mips.bseli.b
     1, // llvm.mips.bset.b
     1, // llvm.mips.bset.d
     1, // llvm.mips.bset.h
     1, // llvm.mips.bset.w
-    1, // llvm.mips.bseti.b
-    1, // llvm.mips.bseti.d
-    1, // llvm.mips.bseti.h
-    1, // llvm.mips.bseti.w
+    40, // llvm.mips.bseti.b
+    40, // llvm.mips.bseti.d
+    40, // llvm.mips.bseti.h
+    40, // llvm.mips.bseti.w
     1, // llvm.mips.bz.b
     1, // llvm.mips.bz.d
     1, // llvm.mips.bz.h
@@ -12267,11 +12664,11 @@
     1, // llvm.mips.ceq.d
     1, // llvm.mips.ceq.h
     1, // llvm.mips.ceq.w
-    1, // llvm.mips.ceqi.b
-    1, // llvm.mips.ceqi.d
-    1, // llvm.mips.ceqi.h
-    1, // llvm.mips.ceqi.w
-    3, // llvm.mips.cfcmsa
+    40, // llvm.mips.ceqi.b
+    40, // llvm.mips.ceqi.d
+    40, // llvm.mips.ceqi.h
+    40, // llvm.mips.ceqi.w
+    101, // llvm.mips.cfcmsa
     1, // llvm.mips.cle.s.b
     1, // llvm.mips.cle.s.d
     1, // llvm.mips.cle.s.h
@@ -12280,14 +12677,14 @@
     1, // llvm.mips.cle.u.d
     1, // llvm.mips.cle.u.h
     1, // llvm.mips.cle.u.w
-    1, // llvm.mips.clei.s.b
-    1, // llvm.mips.clei.s.d
-    1, // llvm.mips.clei.s.h
-    1, // llvm.mips.clei.s.w
-    1, // llvm.mips.clei.u.b
-    1, // llvm.mips.clei.u.d
-    1, // llvm.mips.clei.u.h
-    1, // llvm.mips.clei.u.w
+    40, // llvm.mips.clei.s.b
+    40, // llvm.mips.clei.s.d
+    40, // llvm.mips.clei.s.h
+    40, // llvm.mips.clei.s.w
+    40, // llvm.mips.clei.u.b
+    40, // llvm.mips.clei.u.d
+    40, // llvm.mips.clei.u.h
+    40, // llvm.mips.clei.u.w
     1, // llvm.mips.clt.s.b
     1, // llvm.mips.clt.s.d
     1, // llvm.mips.clt.s.h
@@ -12296,14 +12693,14 @@
     1, // llvm.mips.clt.u.d
     1, // llvm.mips.clt.u.h
     1, // llvm.mips.clt.u.w
-    1, // llvm.mips.clti.s.b
-    1, // llvm.mips.clti.s.d
-    1, // llvm.mips.clti.s.h
-    1, // llvm.mips.clti.s.w
-    1, // llvm.mips.clti.u.b
-    1, // llvm.mips.clti.u.d
-    1, // llvm.mips.clti.u.h
-    1, // llvm.mips.clti.u.w
+    40, // llvm.mips.clti.s.b
+    40, // llvm.mips.clti.s.d
+    40, // llvm.mips.clti.s.h
+    40, // llvm.mips.clti.s.w
+    40, // llvm.mips.clti.u.b
+    40, // llvm.mips.clti.u.d
+    40, // llvm.mips.clti.u.h
+    40, // llvm.mips.clti.u.w
     3, // llvm.mips.cmp.eq.ph
     3, // llvm.mips.cmp.le.ph
     3, // llvm.mips.cmp.lt.ph
@@ -12316,15 +12713,15 @@
     3, // llvm.mips.cmpu.eq.qb
     3, // llvm.mips.cmpu.le.qb
     3, // llvm.mips.cmpu.lt.qb
-    1, // llvm.mips.copy.s.b
-    1, // llvm.mips.copy.s.d
-    1, // llvm.mips.copy.s.h
-    1, // llvm.mips.copy.s.w
-    1, // llvm.mips.copy.u.b
-    1, // llvm.mips.copy.u.d
-    1, // llvm.mips.copy.u.h
-    1, // llvm.mips.copy.u.w
-    3, // llvm.mips.ctcmsa
+    40, // llvm.mips.copy.s.b
+    40, // llvm.mips.copy.s.d
+    40, // llvm.mips.copy.s.h
+    40, // llvm.mips.copy.s.w
+    40, // llvm.mips.copy.u.b
+    40, // llvm.mips.copy.u.d
+    40, // llvm.mips.copy.u.h
+    40, // llvm.mips.copy.u.w
+    101, // llvm.mips.ctcmsa
     1, // llvm.mips.div.s.b
     1, // llvm.mips.div.s.d
     1, // llvm.mips.div.s.h
@@ -12508,24 +12905,24 @@
     1, // llvm.mips.ilvr.d
     1, // llvm.mips.ilvr.h
     1, // llvm.mips.ilvr.w
-    1, // llvm.mips.insert.b
-    1, // llvm.mips.insert.d
-    1, // llvm.mips.insert.h
-    1, // llvm.mips.insert.w
-    16, // llvm.mips.insv
-    1, // llvm.mips.insve.b
-    1, // llvm.mips.insve.d
-    1, // llvm.mips.insve.h
-    1, // llvm.mips.insve.w
+    40, // llvm.mips.insert.b
+    40, // llvm.mips.insert.d
+    40, // llvm.mips.insert.h
+    40, // llvm.mips.insert.w
+    18, // llvm.mips.insv
+    40, // llvm.mips.insve.b
+    40, // llvm.mips.insve.d
+    40, // llvm.mips.insve.h
+    40, // llvm.mips.insve.w
     2, // llvm.mips.lbux
-    2, // llvm.mips.ld.b
-    2, // llvm.mips.ld.d
-    2, // llvm.mips.ld.h
-    2, // llvm.mips.ld.w
-    1, // llvm.mips.ldi.b
-    1, // llvm.mips.ldi.d
-    1, // llvm.mips.ldi.h
-    1, // llvm.mips.ldi.w
+    31, // llvm.mips.ld.b
+    31, // llvm.mips.ld.d
+    31, // llvm.mips.ld.h
+    31, // llvm.mips.ld.w
+    20, // llvm.mips.ldi.b
+    20, // llvm.mips.ldi.d
+    20, // llvm.mips.ldi.h
+    20, // llvm.mips.ldi.w
     2, // llvm.mips.lhx
     1, // llvm.mips.lsa
     2, // llvm.mips.lwx
@@ -12555,14 +12952,14 @@
     1, // llvm.mips.max.u.d
     1, // llvm.mips.max.u.h
     1, // llvm.mips.max.u.w
-    1, // llvm.mips.maxi.s.b
-    1, // llvm.mips.maxi.s.d
-    1, // llvm.mips.maxi.s.h
-    1, // llvm.mips.maxi.s.w
-    1, // llvm.mips.maxi.u.b
-    1, // llvm.mips.maxi.u.d
-    1, // llvm.mips.maxi.u.h
-    1, // llvm.mips.maxi.u.w
+    40, // llvm.mips.maxi.s.b
+    40, // llvm.mips.maxi.s.d
+    40, // llvm.mips.maxi.s.h
+    40, // llvm.mips.maxi.s.w
+    40, // llvm.mips.maxi.u.b
+    40, // llvm.mips.maxi.u.d
+    40, // llvm.mips.maxi.u.h
+    40, // llvm.mips.maxi.u.w
     1, // llvm.mips.min.a.b
     1, // llvm.mips.min.a.d
     1, // llvm.mips.min.a.h
@@ -12575,14 +12972,14 @@
     1, // llvm.mips.min.u.d
     1, // llvm.mips.min.u.h
     1, // llvm.mips.min.u.w
-    1, // llvm.mips.mini.s.b
-    1, // llvm.mips.mini.s.d
-    1, // llvm.mips.mini.s.h
-    1, // llvm.mips.mini.s.w
-    1, // llvm.mips.mini.u.b
-    1, // llvm.mips.mini.u.d
-    1, // llvm.mips.mini.u.h
-    1, // llvm.mips.mini.u.w
+    40, // llvm.mips.mini.s.b
+    40, // llvm.mips.mini.s.d
+    40, // llvm.mips.mini.s.h
+    40, // llvm.mips.mini.s.w
+    40, // llvm.mips.mini.u.b
+    40, // llvm.mips.mini.u.d
+    40, // llvm.mips.mini.u.h
+    40, // llvm.mips.mini.u.w
     1, // llvm.mips.mod.s.b
     1, // llvm.mips.mod.s.d
     1, // llvm.mips.mod.s.h
@@ -12635,9 +13032,9 @@
     1, // llvm.mips.nlzc.h
     1, // llvm.mips.nlzc.w
     1, // llvm.mips.nor.v
-    1, // llvm.mips.nori.b
+    40, // llvm.mips.nori.b
     1, // llvm.mips.or.v
-    1, // llvm.mips.ori.b
+    40, // llvm.mips.ori.b
     1, // llvm.mips.packrl.ph
     1, // llvm.mips.pckev.b
     1, // llvm.mips.pckev.d
@@ -12651,8 +13048,8 @@
     1, // llvm.mips.pcnt.d
     1, // llvm.mips.pcnt.h
     1, // llvm.mips.pcnt.w
-    16, // llvm.mips.pick.ph
-    16, // llvm.mips.pick.qb
+    18, // llvm.mips.pick.ph
+    18, // llvm.mips.pick.qb
     1, // llvm.mips.preceq.w.phl
     1, // llvm.mips.preceq.w.phr
     1, // llvm.mips.precequ.ph.qbl
@@ -12664,28 +13061,28 @@
     1, // llvm.mips.preceu.ph.qbr
     1, // llvm.mips.preceu.ph.qbra
     3, // llvm.mips.precr.qb.ph
-    1, // llvm.mips.precr.sra.ph.w
-    1, // llvm.mips.precr.sra.r.ph.w
+    27, // llvm.mips.precr.sra.ph.w
+    27, // llvm.mips.precr.sra.r.ph.w
     1, // llvm.mips.precrq.ph.w
     1, // llvm.mips.precrq.qb.ph
     3, // llvm.mips.precrq.rs.ph.w
     3, // llvm.mips.precrqu.s.qb.ph
-    1, // llvm.mips.prepend
+    27, // llvm.mips.prepend
     1, // llvm.mips.raddu.w.qb
-    16, // llvm.mips.rddsp
+    131, // llvm.mips.rddsp
     1, // llvm.mips.repl.ph
     1, // llvm.mips.repl.qb
-    1, // llvm.mips.sat.s.b
-    1, // llvm.mips.sat.s.d
-    1, // llvm.mips.sat.s.h
-    1, // llvm.mips.sat.s.w
-    1, // llvm.mips.sat.u.b
-    1, // llvm.mips.sat.u.d
-    1, // llvm.mips.sat.u.h
-    1, // llvm.mips.sat.u.w
-    1, // llvm.mips.shf.b
-    1, // llvm.mips.shf.h
-    1, // llvm.mips.shf.w
+    40, // llvm.mips.sat.s.b
+    40, // llvm.mips.sat.s.d
+    40, // llvm.mips.sat.s.h
+    40, // llvm.mips.sat.s.w
+    40, // llvm.mips.sat.u.b
+    40, // llvm.mips.sat.u.d
+    40, // llvm.mips.sat.u.h
+    40, // llvm.mips.sat.u.w
+    40, // llvm.mips.shf.b
+    40, // llvm.mips.shf.h
+    40, // llvm.mips.shf.w
     1, // llvm.mips.shilo
     3, // llvm.mips.shll.ph
     3, // llvm.mips.shll.qb
@@ -12702,62 +13099,62 @@
     1, // llvm.mips.sld.d
     1, // llvm.mips.sld.h
     1, // llvm.mips.sld.w
-    1, // llvm.mips.sldi.b
-    1, // llvm.mips.sldi.d
-    1, // llvm.mips.sldi.h
-    1, // llvm.mips.sldi.w
+    27, // llvm.mips.sldi.b
+    27, // llvm.mips.sldi.d
+    27, // llvm.mips.sldi.h
+    27, // llvm.mips.sldi.w
     1, // llvm.mips.sll.b
     1, // llvm.mips.sll.d
     1, // llvm.mips.sll.h
     1, // llvm.mips.sll.w
-    1, // llvm.mips.slli.b
-    1, // llvm.mips.slli.d
-    1, // llvm.mips.slli.h
-    1, // llvm.mips.slli.w
+    40, // llvm.mips.slli.b
+    40, // llvm.mips.slli.d
+    40, // llvm.mips.slli.h
+    40, // llvm.mips.slli.w
     1, // llvm.mips.splat.b
     1, // llvm.mips.splat.d
     1, // llvm.mips.splat.h
     1, // llvm.mips.splat.w
-    1, // llvm.mips.splati.b
-    1, // llvm.mips.splati.d
-    1, // llvm.mips.splati.h
-    1, // llvm.mips.splati.w
+    40, // llvm.mips.splati.b
+    40, // llvm.mips.splati.d
+    40, // llvm.mips.splati.h
+    40, // llvm.mips.splati.w
     1, // llvm.mips.sra.b
     1, // llvm.mips.sra.d
     1, // llvm.mips.sra.h
     1, // llvm.mips.sra.w
-    1, // llvm.mips.srai.b
-    1, // llvm.mips.srai.d
-    1, // llvm.mips.srai.h
-    1, // llvm.mips.srai.w
+    40, // llvm.mips.srai.b
+    40, // llvm.mips.srai.d
+    40, // llvm.mips.srai.h
+    40, // llvm.mips.srai.w
     1, // llvm.mips.srar.b
     1, // llvm.mips.srar.d
     1, // llvm.mips.srar.h
     1, // llvm.mips.srar.w
-    1, // llvm.mips.srari.b
-    1, // llvm.mips.srari.d
-    1, // llvm.mips.srari.h
-    1, // llvm.mips.srari.w
+    40, // llvm.mips.srari.b
+    40, // llvm.mips.srari.d
+    40, // llvm.mips.srari.h
+    40, // llvm.mips.srari.w
     1, // llvm.mips.srl.b
     1, // llvm.mips.srl.d
     1, // llvm.mips.srl.h
     1, // llvm.mips.srl.w
-    1, // llvm.mips.srli.b
-    1, // llvm.mips.srli.d
-    1, // llvm.mips.srli.h
-    1, // llvm.mips.srli.w
+    40, // llvm.mips.srli.b
+    40, // llvm.mips.srli.d
+    40, // llvm.mips.srli.h
+    40, // llvm.mips.srli.w
     1, // llvm.mips.srlr.b
     1, // llvm.mips.srlr.d
     1, // llvm.mips.srlr.h
     1, // llvm.mips.srlr.w
-    1, // llvm.mips.srlri.b
-    1, // llvm.mips.srlri.d
-    1, // llvm.mips.srlri.h
-    1, // llvm.mips.srlri.w
-    22, // llvm.mips.st.b
-    22, // llvm.mips.st.d
-    22, // llvm.mips.st.h
-    22, // llvm.mips.st.w
+    40, // llvm.mips.srlri.b
+    40, // llvm.mips.srlri.d
+    40, // llvm.mips.srlri.h
+    40, // llvm.mips.srlri.w
+    33, // llvm.mips.st.b
+    33, // llvm.mips.st.d
+    33, // llvm.mips.st.h
+    33, // llvm.mips.st.w
     1, // llvm.mips.subq.ph
     1, // llvm.mips.subq.s.ph
     3, // llvm.mips.subq.s.w
@@ -12791,17 +13188,17 @@
     1, // llvm.mips.subv.d
     1, // llvm.mips.subv.h
     1, // llvm.mips.subv.w
-    1, // llvm.mips.subvi.b
-    1, // llvm.mips.subvi.d
-    1, // llvm.mips.subvi.h
-    1, // llvm.mips.subvi.w
+    40, // llvm.mips.subvi.b
+    40, // llvm.mips.subvi.d
+    40, // llvm.mips.subvi.h
+    40, // llvm.mips.subvi.w
     1, // llvm.mips.vshf.b
     1, // llvm.mips.vshf.d
     1, // llvm.mips.vshf.h
     1, // llvm.mips.vshf.w
-    3, // llvm.mips.wrdsp
+    132, // llvm.mips.wrdsp
     1, // llvm.mips.xor.v
-    1, // llvm.mips.xori.b
+    40, // llvm.mips.xori.b
     1, // llvm.nvvm.add.rm.d
     1, // llvm.nvvm.add.rm.f
     1, // llvm.nvvm.add.rm.ftz.f
@@ -12814,42 +13211,42 @@
     1, // llvm.nvvm.add.rz.d
     1, // llvm.nvvm.add.rz.f
     1, // llvm.nvvm.add.rz.ftz.f
-    18, // llvm.nvvm.atomic.add.gen.f.cta
-    18, // llvm.nvvm.atomic.add.gen.f.sys
-    18, // llvm.nvvm.atomic.add.gen.i.cta
-    18, // llvm.nvvm.atomic.add.gen.i.sys
-    18, // llvm.nvvm.atomic.and.gen.i.cta
-    18, // llvm.nvvm.atomic.and.gen.i.sys
-    18, // llvm.nvvm.atomic.cas.gen.i.cta
-    18, // llvm.nvvm.atomic.cas.gen.i.sys
-    18, // llvm.nvvm.atomic.dec.gen.i.cta
-    18, // llvm.nvvm.atomic.dec.gen.i.sys
-    18, // llvm.nvvm.atomic.exch.gen.i.cta
-    18, // llvm.nvvm.atomic.exch.gen.i.sys
-    18, // llvm.nvvm.atomic.inc.gen.i.cta
-    18, // llvm.nvvm.atomic.inc.gen.i.sys
-    18, // llvm.nvvm.atomic.load.add.f32
-    18, // llvm.nvvm.atomic.load.add.f64
-    18, // llvm.nvvm.atomic.load.dec.32
-    18, // llvm.nvvm.atomic.load.inc.32
-    18, // llvm.nvvm.atomic.max.gen.i.cta
-    18, // llvm.nvvm.atomic.max.gen.i.sys
-    18, // llvm.nvvm.atomic.min.gen.i.cta
-    18, // llvm.nvvm.atomic.min.gen.i.sys
-    18, // llvm.nvvm.atomic.or.gen.i.cta
-    18, // llvm.nvvm.atomic.or.gen.i.sys
-    18, // llvm.nvvm.atomic.xor.gen.i.cta
-    18, // llvm.nvvm.atomic.xor.gen.i.sys
-    38, // llvm.nvvm.bar.sync
-    38, // llvm.nvvm.bar.warp.sync
-    38, // llvm.nvvm.barrier
-    38, // llvm.nvvm.barrier.n
-    38, // llvm.nvvm.barrier.sync
-    38, // llvm.nvvm.barrier.sync.cnt
-    38, // llvm.nvvm.barrier0
-    38, // llvm.nvvm.barrier0.and
-    38, // llvm.nvvm.barrier0.or
-    38, // llvm.nvvm.barrier0.popc
+    23, // llvm.nvvm.atomic.add.gen.f.cta
+    23, // llvm.nvvm.atomic.add.gen.f.sys
+    23, // llvm.nvvm.atomic.add.gen.i.cta
+    23, // llvm.nvvm.atomic.add.gen.i.sys
+    23, // llvm.nvvm.atomic.and.gen.i.cta
+    23, // llvm.nvvm.atomic.and.gen.i.sys
+    23, // llvm.nvvm.atomic.cas.gen.i.cta
+    23, // llvm.nvvm.atomic.cas.gen.i.sys
+    23, // llvm.nvvm.atomic.dec.gen.i.cta
+    23, // llvm.nvvm.atomic.dec.gen.i.sys
+    23, // llvm.nvvm.atomic.exch.gen.i.cta
+    23, // llvm.nvvm.atomic.exch.gen.i.sys
+    23, // llvm.nvvm.atomic.inc.gen.i.cta
+    23, // llvm.nvvm.atomic.inc.gen.i.sys
+    23, // llvm.nvvm.atomic.load.add.f32
+    23, // llvm.nvvm.atomic.load.add.f64
+    23, // llvm.nvvm.atomic.load.dec.32
+    23, // llvm.nvvm.atomic.load.inc.32
+    23, // llvm.nvvm.atomic.max.gen.i.cta
+    23, // llvm.nvvm.atomic.max.gen.i.sys
+    23, // llvm.nvvm.atomic.min.gen.i.cta
+    23, // llvm.nvvm.atomic.min.gen.i.sys
+    23, // llvm.nvvm.atomic.or.gen.i.cta
+    23, // llvm.nvvm.atomic.or.gen.i.sys
+    23, // llvm.nvvm.atomic.xor.gen.i.cta
+    23, // llvm.nvvm.atomic.xor.gen.i.sys
+    62, // llvm.nvvm.bar.sync
+    62, // llvm.nvvm.bar.warp.sync
+    62, // llvm.nvvm.barrier
+    62, // llvm.nvvm.barrier.n
+    62, // llvm.nvvm.barrier.sync
+    62, // llvm.nvvm.barrier.sync.cnt
+    62, // llvm.nvvm.barrier0
+    62, // llvm.nvvm.barrier0.and
+    62, // llvm.nvvm.barrier0.or
+    62, // llvm.nvvm.barrier0.popc
     1, // llvm.nvvm.bitcast.d2ll
     1, // llvm.nvvm.bitcast.f2i
     1, // llvm.nvvm.bitcast.i2f
@@ -12978,12 +13375,12 @@
     1, // llvm.nvvm.istypep.sampler
     1, // llvm.nvvm.istypep.surface
     1, // llvm.nvvm.istypep.texture
-    42, // llvm.nvvm.ldg.global.f
-    42, // llvm.nvvm.ldg.global.i
-    42, // llvm.nvvm.ldg.global.p
-    42, // llvm.nvvm.ldu.global.f
-    42, // llvm.nvvm.ldu.global.i
-    42, // llvm.nvvm.ldu.global.p
+    133, // llvm.nvvm.ldg.global.f
+    133, // llvm.nvvm.ldg.global.i
+    133, // llvm.nvvm.ldg.global.p
+    133, // llvm.nvvm.ldu.global.f
+    133, // llvm.nvvm.ldu.global.i
+    133, // llvm.nvvm.ldu.global.p
     1, // llvm.nvvm.lg2.approx.d
     1, // llvm.nvvm.lg2.approx.f
     1, // llvm.nvvm.lg2.approx.ftz.f
@@ -12996,10 +13393,10 @@
     1, // llvm.nvvm.ll2f.rp
     1, // llvm.nvvm.ll2f.rz
     1, // llvm.nvvm.lohi.i2d
-    43, // llvm.nvvm.match.all.sync.i32p
-    43, // llvm.nvvm.match.all.sync.i64p
-    43, // llvm.nvvm.match.any.sync.i32
-    43, // llvm.nvvm.match.any.sync.i64
+    58, // llvm.nvvm.match.all.sync.i32p
+    58, // llvm.nvvm.match.all.sync.i64p
+    58, // llvm.nvvm.match.any.sync.i32
+    58, // llvm.nvvm.match.any.sync.i64
     3, // llvm.nvvm.membar.cta
     3, // llvm.nvvm.membar.gl
     3, // llvm.nvvm.membar.sys
@@ -13050,8 +13447,8 @@
     1, // llvm.nvvm.rcp.rz.d
     1, // llvm.nvvm.rcp.rz.f
     1, // llvm.nvvm.rcp.rz.ftz.f
-    15, // llvm.nvvm.read.ptx.sreg.clock
-    15, // llvm.nvvm.read.ptx.sreg.clock64
+    16, // llvm.nvvm.read.ptx.sreg.clock
+    16, // llvm.nvvm.read.ptx.sreg.clock64
     1, // llvm.nvvm.read.ptx.sreg.ctaid.w
     1, // llvm.nvvm.read.ptx.sreg.ctaid.x
     1, // llvm.nvvm.read.ptx.sreg.ctaid.y
@@ -13105,10 +13502,10 @@
     1, // llvm.nvvm.read.ptx.sreg.ntid.y
     1, // llvm.nvvm.read.ptx.sreg.ntid.z
     1, // llvm.nvvm.read.ptx.sreg.nwarpid
-    15, // llvm.nvvm.read.ptx.sreg.pm0
-    15, // llvm.nvvm.read.ptx.sreg.pm1
-    15, // llvm.nvvm.read.ptx.sreg.pm2
-    15, // llvm.nvvm.read.ptx.sreg.pm3
+    16, // llvm.nvvm.read.ptx.sreg.pm0
+    16, // llvm.nvvm.read.ptx.sreg.pm1
+    16, // llvm.nvvm.read.ptx.sreg.pm2
+    16, // llvm.nvvm.read.ptx.sreg.pm3
     1, // llvm.nvvm.read.ptx.sreg.smid
     1, // llvm.nvvm.read.ptx.sreg.tid.w
     1, // llvm.nvvm.read.ptx.sreg.tid.x
@@ -13131,22 +13528,22 @@
     1, // llvm.nvvm.saturate.d
     1, // llvm.nvvm.saturate.f
     1, // llvm.nvvm.saturate.ftz.f
-    43, // llvm.nvvm.shfl.bfly.f32
-    43, // llvm.nvvm.shfl.bfly.i32
-    43, // llvm.nvvm.shfl.down.f32
-    43, // llvm.nvvm.shfl.down.i32
-    43, // llvm.nvvm.shfl.idx.f32
-    43, // llvm.nvvm.shfl.idx.i32
-    43, // llvm.nvvm.shfl.sync.bfly.f32
-    43, // llvm.nvvm.shfl.sync.bfly.i32
-    43, // llvm.nvvm.shfl.sync.down.f32
-    43, // llvm.nvvm.shfl.sync.down.i32
-    43, // llvm.nvvm.shfl.sync.idx.f32
-    43, // llvm.nvvm.shfl.sync.idx.i32
-    43, // llvm.nvvm.shfl.sync.up.f32
-    43, // llvm.nvvm.shfl.sync.up.i32
-    43, // llvm.nvvm.shfl.up.f32
-    43, // llvm.nvvm.shfl.up.i32
+    58, // llvm.nvvm.shfl.bfly.f32
+    58, // llvm.nvvm.shfl.bfly.i32
+    58, // llvm.nvvm.shfl.down.f32
+    58, // llvm.nvvm.shfl.down.i32
+    58, // llvm.nvvm.shfl.idx.f32
+    58, // llvm.nvvm.shfl.idx.i32
+    58, // llvm.nvvm.shfl.sync.bfly.f32
+    58, // llvm.nvvm.shfl.sync.bfly.i32
+    58, // llvm.nvvm.shfl.sync.down.f32
+    58, // llvm.nvvm.shfl.sync.down.i32
+    58, // llvm.nvvm.shfl.sync.idx.f32
+    58, // llvm.nvvm.shfl.sync.idx.i32
+    58, // llvm.nvvm.shfl.sync.up.f32
+    58, // llvm.nvvm.shfl.sync.up.i32
+    58, // llvm.nvvm.shfl.up.f32
+    58, // llvm.nvvm.shfl.up.i32
     1, // llvm.nvvm.sin.approx.f
     1, // llvm.nvvm.sin.approx.ftz.f
     1, // llvm.nvvm.sqrt.approx.f
@@ -13743,30 +14140,50 @@
     1, // llvm.nvvm.ull2f.rn
     1, // llvm.nvvm.ull2f.rp
     1, // llvm.nvvm.ull2f.rz
-    43, // llvm.nvvm.vote.all
-    43, // llvm.nvvm.vote.all.sync
-    43, // llvm.nvvm.vote.any
-    43, // llvm.nvvm.vote.any.sync
-    43, // llvm.nvvm.vote.ballot
-    43, // llvm.nvvm.vote.ballot.sync
-    43, // llvm.nvvm.vote.uni
-    43, // llvm.nvvm.vote.uni.sync
+    58, // llvm.nvvm.vote.all
+    58, // llvm.nvvm.vote.all.sync
+    58, // llvm.nvvm.vote.any
+    58, // llvm.nvvm.vote.any.sync
+    58, // llvm.nvvm.vote.ballot
+    58, // llvm.nvvm.vote.ballot.sync
+    58, // llvm.nvvm.vote.uni
+    58, // llvm.nvvm.vote.uni.sync
     13, // llvm.nvvm.wmma.m16n16k16.load.a.col.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.s8
     13, // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.s8
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.u8
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.u8
     13, // llvm.nvvm.wmma.m16n16k16.load.a.row.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.s8
     13, // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.s8
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.u8
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.u8
     13, // llvm.nvvm.wmma.m16n16k16.load.b.col.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.s8
     13, // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.s8
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.u8
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.u8
     13, // llvm.nvvm.wmma.m16n16k16.load.b.row.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.s8
     13, // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.s8
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.u8
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.u8
     13, // llvm.nvvm.wmma.m16n16k16.load.c.col.f16
     13, // llvm.nvvm.wmma.m16n16k16.load.c.col.f32
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.s32
     13, // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16
     13, // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.s32
     13, // llvm.nvvm.wmma.m16n16k16.load.c.row.f16
     13, // llvm.nvvm.wmma.m16n16k16.load.c.row.f32
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.s32
     13, // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16
     13, // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.s32
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32
@@ -13775,6 +14192,10 @@
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.s8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.s8.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.u8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.u8.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32
@@ -13783,6 +14204,10 @@
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32
     1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.s8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.s8.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.u8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.u8.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32
@@ -13791,6 +14216,10 @@
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.s8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.s8.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.u8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.u8.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32
@@ -13799,30 +14228,58 @@
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32
     1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.col.f16
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.col.f32
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.row.f16
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.row.f32
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16
-    44, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.s8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.s8.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.u8
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.u8.satfinite
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.col.f16
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.col.f32
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.col.s32
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.s32
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.row.f16
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.row.f32
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.row.s32
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32
+    134, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.s32
     13, // llvm.nvvm.wmma.m32n8k16.load.a.col.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.col.s8
     13, // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.s8
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.u8
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.col.u8
     13, // llvm.nvvm.wmma.m32n8k16.load.a.row.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.row.s8
     13, // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.s8
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.u8
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.row.u8
     13, // llvm.nvvm.wmma.m32n8k16.load.b.col.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.col.s8
     13, // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.s8
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.u8
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.col.u8
     13, // llvm.nvvm.wmma.m32n8k16.load.b.row.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.row.s8
     13, // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.s8
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.u8
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.row.u8
     13, // llvm.nvvm.wmma.m32n8k16.load.c.col.f16
     13, // llvm.nvvm.wmma.m32n8k16.load.c.col.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.col.s32
     13, // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f16
     13, // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.s32
     13, // llvm.nvvm.wmma.m32n8k16.load.c.row.f16
     13, // llvm.nvvm.wmma.m32n8k16.load.c.row.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.row.s32
     13, // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f16
     13, // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.s32
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32
@@ -13831,6 +14288,10 @@
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.s8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.s8.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.u8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.u8.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32
@@ -13839,6 +14300,10 @@
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32
     1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.s8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.s8.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.u8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.u8.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32
@@ -13847,6 +14312,10 @@
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.s8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.s8.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.u8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.u8.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32
@@ -13855,30 +14324,58 @@
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32
     1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32.satfinite
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.col.f16
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.col.f32
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f16
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f32
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.row.f16
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.row.f32
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f16
-    44, // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.s8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.s8.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.u8
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.u8.satfinite
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.col.f16
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.col.f32
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.col.s32
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f16
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f32
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.s32
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.row.f16
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.row.f32
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.row.s32
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f16
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f32
+    134, // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.s32
     13, // llvm.nvvm.wmma.m8n32k16.load.a.col.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.col.s8
     13, // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.s8
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.u8
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.col.u8
     13, // llvm.nvvm.wmma.m8n32k16.load.a.row.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.row.s8
     13, // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.s8
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.u8
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.row.u8
     13, // llvm.nvvm.wmma.m8n32k16.load.b.col.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.col.s8
     13, // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.s8
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.u8
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.col.u8
     13, // llvm.nvvm.wmma.m8n32k16.load.b.row.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.row.s8
     13, // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.s8
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.u8
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.row.u8
     13, // llvm.nvvm.wmma.m8n32k16.load.c.col.f16
     13, // llvm.nvvm.wmma.m8n32k16.load.c.col.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.col.s32
     13, // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f16
     13, // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.s32
     13, // llvm.nvvm.wmma.m8n32k16.load.c.row.f16
     13, // llvm.nvvm.wmma.m8n32k16.load.c.row.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.row.s32
     13, // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f16
     13, // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.s32
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32
@@ -13887,6 +14384,10 @@
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.s8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.s8.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.u8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.u8.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32
@@ -13895,6 +14396,10 @@
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32
     1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.s8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.s8.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.u8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.u8.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32
@@ -13903,6 +14408,10 @@
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.s8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.s8.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.u8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.u8.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32
@@ -13911,14 +14420,55 @@
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16.satfinite
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32
     1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32.satfinite
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.col.f16
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.col.f32
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f16
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f32
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.row.f16
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.row.f32
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f16
-    44, // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.s8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.s8.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.u8
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.u8.satfinite
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.col.f16
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.col.f32
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.col.s32
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f16
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f32
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.s32
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.row.f16
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.row.f32
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.row.s32
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f16
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f32
+    134, // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.s32
+    13, // llvm.nvvm.wmma.m8n8k128.load.a.row.b1
+    13, // llvm.nvvm.wmma.m8n8k128.load.a.row.stride.b1
+    13, // llvm.nvvm.wmma.m8n8k128.load.b.col.b1
+    13, // llvm.nvvm.wmma.m8n8k128.load.b.col.stride.b1
+    13, // llvm.nvvm.wmma.m8n8k128.load.c.col.s32
+    13, // llvm.nvvm.wmma.m8n8k128.load.c.col.stride.s32
+    13, // llvm.nvvm.wmma.m8n8k128.load.c.row.s32
+    13, // llvm.nvvm.wmma.m8n8k128.load.c.row.stride.s32
+    1, // llvm.nvvm.wmma.m8n8k128.mma.row.col.b1
+    134, // llvm.nvvm.wmma.m8n8k128.store.d.col.s32
+    134, // llvm.nvvm.wmma.m8n8k128.store.d.col.stride.s32
+    134, // llvm.nvvm.wmma.m8n8k128.store.d.row.s32
+    134, // llvm.nvvm.wmma.m8n8k128.store.d.row.stride.s32
+    13, // llvm.nvvm.wmma.m8n8k32.load.a.row.s4
+    13, // llvm.nvvm.wmma.m8n8k32.load.a.row.stride.s4
+    13, // llvm.nvvm.wmma.m8n8k32.load.a.row.stride.u4
+    13, // llvm.nvvm.wmma.m8n8k32.load.a.row.u4
+    13, // llvm.nvvm.wmma.m8n8k32.load.b.col.s4
+    13, // llvm.nvvm.wmma.m8n8k32.load.b.col.stride.s4
+    13, // llvm.nvvm.wmma.m8n8k32.load.b.col.stride.u4
+    13, // llvm.nvvm.wmma.m8n8k32.load.b.col.u4
+    13, // llvm.nvvm.wmma.m8n8k32.load.c.col.s32
+    13, // llvm.nvvm.wmma.m8n8k32.load.c.col.stride.s32
+    13, // llvm.nvvm.wmma.m8n8k32.load.c.row.s32
+    13, // llvm.nvvm.wmma.m8n8k32.load.c.row.stride.s32
+    1, // llvm.nvvm.wmma.m8n8k32.mma.row.col.s4
+    1, // llvm.nvvm.wmma.m8n8k32.mma.row.col.s4.satfinite
+    1, // llvm.nvvm.wmma.m8n8k32.mma.row.col.u4
+    1, // llvm.nvvm.wmma.m8n8k32.mma.row.col.u4.satfinite
+    134, // llvm.nvvm.wmma.m8n8k32.store.d.col.s32
+    134, // llvm.nvvm.wmma.m8n8k32.store.d.col.stride.s32
+    134, // llvm.nvvm.wmma.m8n8k32.store.d.row.s32
+    134, // llvm.nvvm.wmma.m8n8k32.store.d.row.stride.s32
     1, // llvm.ppc.addf128.round.to.odd
     1, // llvm.ppc.altivec.crypto.vcipher
     1, // llvm.ppc.altivec.crypto.vcipherlast
@@ -13930,8 +14480,8 @@
     1, // llvm.ppc.altivec.crypto.vpmsumh
     1, // llvm.ppc.altivec.crypto.vpmsumw
     1, // llvm.ppc.altivec.crypto.vsbox
-    1, // llvm.ppc.altivec.crypto.vshasigmad
-    1, // llvm.ppc.altivec.crypto.vshasigmaw
+    39, // llvm.ppc.altivec.crypto.vshasigmad
+    39, // llvm.ppc.altivec.crypto.vshasigmaw
     3, // llvm.ppc.altivec.dss
     3, // llvm.ppc.altivec.dssall
     3, // llvm.ppc.altivec.dst
@@ -13945,13 +14495,13 @@
     1, // llvm.ppc.altivec.lvsr
     2, // llvm.ppc.altivec.lvx
     2, // llvm.ppc.altivec.lvxl
-    16, // llvm.ppc.altivec.mfvscr
+    18, // llvm.ppc.altivec.mfvscr
     3, // llvm.ppc.altivec.mtvscr
-    45, // llvm.ppc.altivec.stvebx
-    45, // llvm.ppc.altivec.stvehx
-    45, // llvm.ppc.altivec.stvewx
-    45, // llvm.ppc.altivec.stvx
-    45, // llvm.ppc.altivec.stvxl
+    135, // llvm.ppc.altivec.stvebx
+    135, // llvm.ppc.altivec.stvehx
+    135, // llvm.ppc.altivec.stvewx
+    135, // llvm.ppc.altivec.stvx
+    135, // llvm.ppc.altivec.stvxl
     1, // llvm.ppc.altivec.vabsdub
     1, // llvm.ppc.altivec.vabsduh
     1, // llvm.ppc.altivec.vabsduw
@@ -13972,8 +14522,8 @@
     1, // llvm.ppc.altivec.vavguh
     1, // llvm.ppc.altivec.vavguw
     1, // llvm.ppc.altivec.vbpermq
-    1, // llvm.ppc.altivec.vcfsx
-    1, // llvm.ppc.altivec.vcfux
+    40, // llvm.ppc.altivec.vcfsx
+    40, // llvm.ppc.altivec.vcfux
     1, // llvm.ppc.altivec.vclzlsbb
     1, // llvm.ppc.altivec.vcmpbfp
     1, // llvm.ppc.altivec.vcmpbfp.p
@@ -14019,8 +14569,8 @@
     1, // llvm.ppc.altivec.vcmpnezh.p
     1, // llvm.ppc.altivec.vcmpnezw
     1, // llvm.ppc.altivec.vcmpnezw.p
-    1, // llvm.ppc.altivec.vctsxs
-    1, // llvm.ppc.altivec.vctuxs
+    40, // llvm.ppc.altivec.vctsxs
+    40, // llvm.ppc.altivec.vctuxs
     1, // llvm.ppc.altivec.vctzlsbb
     1, // llvm.ppc.altivec.vexptefp
     1, // llvm.ppc.altivec.vgbbd
@@ -14139,8 +14689,8 @@
     3, // llvm.ppc.dcbf
     3, // llvm.ppc.dcbi
     3, // llvm.ppc.dcbst
-    18, // llvm.ppc.dcbt
-    18, // llvm.ppc.dcbtst
+    23, // llvm.ppc.dcbt
+    23, // llvm.ppc.dcbtst
     3, // llvm.ppc.dcbz
     3, // llvm.ppc.dcbzl
     1, // llvm.ppc.divde
@@ -14153,7 +14703,7 @@
     3, // llvm.ppc.get.texasru
     3, // llvm.ppc.get.tfhar
     3, // llvm.ppc.get.tfiar
-    46, // llvm.ppc.is.decremented.ctr.nonzero
+    28, // llvm.ppc.is.decremented.ctr.nonzero
     3, // llvm.ppc.lwsync
     3, // llvm.ppc.mtctr
     1, // llvm.ppc.mulf128.round.to.odd
@@ -14230,22 +14780,23 @@
     1, // llvm.ppc.qpx.qvlpcls
     1, // llvm.ppc.qpx.qvlpcrd
     1, // llvm.ppc.qpx.qvlpcrs
-    45, // llvm.ppc.qpx.qvstfcd
-    45, // llvm.ppc.qpx.qvstfcda
-    45, // llvm.ppc.qpx.qvstfcs
-    45, // llvm.ppc.qpx.qvstfcsa
-    45, // llvm.ppc.qpx.qvstfd
-    45, // llvm.ppc.qpx.qvstfda
-    45, // llvm.ppc.qpx.qvstfiw
-    45, // llvm.ppc.qpx.qvstfiwa
-    45, // llvm.ppc.qpx.qvstfs
-    45, // llvm.ppc.qpx.qvstfsa
+    135, // llvm.ppc.qpx.qvstfcd
+    135, // llvm.ppc.qpx.qvstfcda
+    135, // llvm.ppc.qpx.qvstfcs
+    135, // llvm.ppc.qpx.qvstfcsa
+    135, // llvm.ppc.qpx.qvstfd
+    135, // llvm.ppc.qpx.qvstfda
+    135, // llvm.ppc.qpx.qvstfiw
+    135, // llvm.ppc.qpx.qvstfiwa
+    135, // llvm.ppc.qpx.qvstfs
+    135, // llvm.ppc.qpx.qvstfsa
     1, // llvm.ppc.scalar.extract.expq
     1, // llvm.ppc.scalar.insert.exp.qp
     3, // llvm.ppc.set.texasr
     3, // llvm.ppc.set.texasru
     3, // llvm.ppc.set.tfhar
     3, // llvm.ppc.set.tfiar
+    3, // llvm.ppc.setrnd
     1, // llvm.ppc.sqrtf128.round.to.odd
     1, // llvm.ppc.subf128.round.to.odd
     3, // llvm.ppc.sync
@@ -14254,9 +14805,9 @@
     3, // llvm.ppc.tabortdci
     3, // llvm.ppc.tabortwc
     3, // llvm.ppc.tabortwci
-    3, // llvm.ppc.tbegin
+    101, // llvm.ppc.tbegin
     3, // llvm.ppc.tcheck
-    3, // llvm.ppc.tend
+    101, // llvm.ppc.tend
     3, // llvm.ppc.tendall
     3, // llvm.ppc.trechkpt
     3, // llvm.ppc.treclaim
@@ -14271,12 +14822,12 @@
     2, // llvm.ppc.vsx.lxvll
     2, // llvm.ppc.vsx.lxvw4x
     2, // llvm.ppc.vsx.lxvw4x.be
-    45, // llvm.ppc.vsx.stxvd2x
-    45, // llvm.ppc.vsx.stxvd2x.be
-    45, // llvm.ppc.vsx.stxvl
-    45, // llvm.ppc.vsx.stxvll
-    45, // llvm.ppc.vsx.stxvw4x
-    45, // llvm.ppc.vsx.stxvw4x.be
+    135, // llvm.ppc.vsx.stxvd2x
+    135, // llvm.ppc.vsx.stxvd2x.be
+    135, // llvm.ppc.vsx.stxvl
+    135, // llvm.ppc.vsx.stxvll
+    135, // llvm.ppc.vsx.stxvw4x
+    135, // llvm.ppc.vsx.stxvw4x.be
     1, // llvm.ppc.vsx.xsmaxdp
     1, // llvm.ppc.vsx.xsmindp
     1, // llvm.ppc.vsx.xvcmpeqdp
@@ -14315,8 +14866,8 @@
     1, // llvm.ppc.vsx.xvrspip
     1, // llvm.ppc.vsx.xvrsqrtedp
     1, // llvm.ppc.vsx.xvrsqrtesp
-    1, // llvm.ppc.vsx.xvtstdcdp
-    1, // llvm.ppc.vsx.xvtstdcsp
+    40, // llvm.ppc.vsx.xvtstdcdp
+    40, // llvm.ppc.vsx.xvtstdcsp
     1, // llvm.ppc.vsx.xvxexpdp
     1, // llvm.ppc.vsx.xvxexpsp
     1, // llvm.ppc.vsx.xvxsigdp
@@ -14328,7 +14879,7 @@
     1, // llvm.r600.ddx
     1, // llvm.r600.ddy
     4, // llvm.r600.dot4
-    38, // llvm.r600.group.barrier
+    62, // llvm.r600.group.barrier
     4, // llvm.r600.implicitarg.ptr
     3, // llvm.r600.kill
     3, // llvm.r600.rat.store.typed
@@ -14359,34 +14910,34 @@
     1, // llvm.r600.txl
     1, // llvm.r600.txlc
     1, // llvm.r600.txq
-    18, // llvm.riscv.masked.atomicrmw.add.i32
-    18, // llvm.riscv.masked.atomicrmw.add.i64
-    18, // llvm.riscv.masked.atomicrmw.max.i32
-    18, // llvm.riscv.masked.atomicrmw.max.i64
-    18, // llvm.riscv.masked.atomicrmw.min.i32
-    18, // llvm.riscv.masked.atomicrmw.min.i64
-    18, // llvm.riscv.masked.atomicrmw.nand.i32
-    18, // llvm.riscv.masked.atomicrmw.nand.i64
-    18, // llvm.riscv.masked.atomicrmw.sub.i32
-    18, // llvm.riscv.masked.atomicrmw.sub.i64
-    18, // llvm.riscv.masked.atomicrmw.umax.i32
-    18, // llvm.riscv.masked.atomicrmw.umax.i64
-    18, // llvm.riscv.masked.atomicrmw.umin.i32
-    18, // llvm.riscv.masked.atomicrmw.umin.i64
-    18, // llvm.riscv.masked.atomicrmw.xchg.i32
-    18, // llvm.riscv.masked.atomicrmw.xchg.i64
-    18, // llvm.riscv.masked.cmpxchg.i32
-    18, // llvm.riscv.masked.cmpxchg.i64
+    136, // llvm.riscv.masked.atomicrmw.add.i32
+    136, // llvm.riscv.masked.atomicrmw.add.i64
+    137, // llvm.riscv.masked.atomicrmw.max.i32
+    137, // llvm.riscv.masked.atomicrmw.max.i64
+    137, // llvm.riscv.masked.atomicrmw.min.i32
+    137, // llvm.riscv.masked.atomicrmw.min.i64
+    136, // llvm.riscv.masked.atomicrmw.nand.i32
+    136, // llvm.riscv.masked.atomicrmw.nand.i64
+    136, // llvm.riscv.masked.atomicrmw.sub.i32
+    136, // llvm.riscv.masked.atomicrmw.sub.i64
+    136, // llvm.riscv.masked.atomicrmw.umax.i32
+    136, // llvm.riscv.masked.atomicrmw.umax.i64
+    136, // llvm.riscv.masked.atomicrmw.umin.i32
+    136, // llvm.riscv.masked.atomicrmw.umin.i64
+    136, // llvm.riscv.masked.atomicrmw.xchg.i32
+    136, // llvm.riscv.masked.atomicrmw.xchg.i64
+    137, // llvm.riscv.masked.cmpxchg.i32
+    137, // llvm.riscv.masked.cmpxchg.i64
     3, // llvm.s390.efpc
     1, // llvm.s390.etnd
-    1, // llvm.s390.lcbb
-    45, // llvm.s390.ntstg
+    40, // llvm.s390.lcbb
+    135, // llvm.s390.ntstg
     3, // llvm.s390.ppa.txassist
     3, // llvm.s390.sfpc
-    47, // llvm.s390.tabort
-    48, // llvm.s390.tbegin
-    48, // llvm.s390.tbegin.nofloat
-    48, // llvm.s390.tbeginc
+    138, // llvm.s390.tabort
+    139, // llvm.s390.tbegin
+    139, // llvm.s390.tbegin.nofloat
+    139, // llvm.s390.tbeginc
     1, // llvm.s390.tdc
     3, // llvm.s390.tend
     1, // llvm.s390.vaccb
@@ -14419,10 +14970,10 @@
     1, // llvm.s390.vchlgs
     1, // llvm.s390.vchlhs
     1, // llvm.s390.vcksm
-    1, // llvm.s390.verimb
-    1, // llvm.s390.verimf
-    1, // llvm.s390.verimg
-    1, // llvm.s390.verimh
+    125, // llvm.s390.verimb
+    125, // llvm.s390.verimf
+    125, // llvm.s390.verimg
+    125, // llvm.s390.verimh
     1, // llvm.s390.verllb
     1, // llvm.s390.verllf
     1, // llvm.s390.verllg
@@ -14431,18 +14982,18 @@
     1, // llvm.s390.verllvf
     1, // llvm.s390.verllvg
     1, // llvm.s390.verllvh
-    1, // llvm.s390.vfaeb
-    1, // llvm.s390.vfaebs
-    1, // llvm.s390.vfaef
-    1, // llvm.s390.vfaefs
-    1, // llvm.s390.vfaeh
-    1, // llvm.s390.vfaehs
-    1, // llvm.s390.vfaezb
-    1, // llvm.s390.vfaezbs
-    1, // llvm.s390.vfaezf
-    1, // llvm.s390.vfaezfs
-    1, // llvm.s390.vfaezh
-    1, // llvm.s390.vfaezhs
+    27, // llvm.s390.vfaeb
+    27, // llvm.s390.vfaebs
+    27, // llvm.s390.vfaef
+    27, // llvm.s390.vfaefs
+    27, // llvm.s390.vfaeh
+    27, // llvm.s390.vfaehs
+    27, // llvm.s390.vfaezb
+    27, // llvm.s390.vfaezbs
+    27, // llvm.s390.vfaezf
+    27, // llvm.s390.vfaezfs
+    27, // llvm.s390.vfaezh
+    27, // llvm.s390.vfaezhs
     1, // llvm.s390.vfcedbs
     1, // llvm.s390.vfcesbs
     1, // llvm.s390.vfchdbs
@@ -14473,14 +15024,14 @@
     1, // llvm.s390.vfenezfs
     1, // llvm.s390.vfenezh
     1, // llvm.s390.vfenezhs
-    1, // llvm.s390.vfidb
-    1, // llvm.s390.vfisb
-    1, // llvm.s390.vfmaxdb
-    1, // llvm.s390.vfmaxsb
-    1, // llvm.s390.vfmindb
-    1, // llvm.s390.vfminsb
-    1, // llvm.s390.vftcidb
-    1, // llvm.s390.vftcisb
+    39, // llvm.s390.vfidb
+    39, // llvm.s390.vfisb
+    27, // llvm.s390.vfmaxdb
+    27, // llvm.s390.vfmaxsb
+    27, // llvm.s390.vfmindb
+    27, // llvm.s390.vfminsb
+    40, // llvm.s390.vftcidb
+    40, // llvm.s390.vftcisb
     1, // llvm.s390.vgfmab
     1, // llvm.s390.vgfmaf
     1, // llvm.s390.vgfmag
@@ -14495,7 +15046,7 @@
     1, // llvm.s390.vistrfs
     1, // llvm.s390.vistrh
     1, // llvm.s390.vistrhs
-    2, // llvm.s390.vlbb
+    31, // llvm.s390.vlbb
     2, // llvm.s390.vll
     2, // llvm.s390.vlrl
     1, // llvm.s390.vmaeb
@@ -14534,8 +15085,8 @@
     1, // llvm.s390.vmob
     1, // llvm.s390.vmof
     1, // llvm.s390.vmoh
-    1, // llvm.s390.vmslg
-    1, // llvm.s390.vpdi
+    125, // llvm.s390.vmslg
+    27, // llvm.s390.vpdi
     1, // llvm.s390.vperm
     1, // llvm.s390.vpklsf
     1, // llvm.s390.vpklsfs
@@ -14558,26 +15109,26 @@
     1, // llvm.s390.vscbiq
     1, // llvm.s390.vsl
     1, // llvm.s390.vslb
-    1, // llvm.s390.vsldb
+    27, // llvm.s390.vsldb
     1, // llvm.s390.vsq
     1, // llvm.s390.vsra
     1, // llvm.s390.vsrab
     1, // llvm.s390.vsrl
     1, // llvm.s390.vsrlb
-    45, // llvm.s390.vstl
-    1, // llvm.s390.vstrcb
-    1, // llvm.s390.vstrcbs
-    1, // llvm.s390.vstrcf
-    1, // llvm.s390.vstrcfs
-    1, // llvm.s390.vstrch
-    1, // llvm.s390.vstrchs
-    1, // llvm.s390.vstrczb
-    1, // llvm.s390.vstrczbs
-    1, // llvm.s390.vstrczf
-    1, // llvm.s390.vstrczfs
-    1, // llvm.s390.vstrczh
-    1, // llvm.s390.vstrczhs
-    45, // llvm.s390.vstrl
+    135, // llvm.s390.vstl
+    125, // llvm.s390.vstrcb
+    125, // llvm.s390.vstrcbs
+    125, // llvm.s390.vstrcf
+    125, // llvm.s390.vstrcfs
+    125, // llvm.s390.vstrch
+    125, // llvm.s390.vstrchs
+    125, // llvm.s390.vstrczb
+    125, // llvm.s390.vstrczbs
+    125, // llvm.s390.vstrczf
+    125, // llvm.s390.vstrczfs
+    125, // llvm.s390.vstrczh
+    125, // llvm.s390.vstrczhs
+    135, // llvm.s390.vstrl
     1, // llvm.s390.vsumb
     1, // llvm.s390.vsumgf
     1, // llvm.s390.vsumgh
@@ -14599,23 +15150,23 @@
     1, // llvm.s390.vupllh
     4, // llvm.wasm.alltrue
     4, // llvm.wasm.anytrue
-    49, // llvm.wasm.atomic.notify
-    50, // llvm.wasm.atomic.wait.i32
-    50, // llvm.wasm.atomic.wait.i64
+    140, // llvm.wasm.atomic.notify
+    141, // llvm.wasm.atomic.wait.i32
+    141, // llvm.wasm.atomic.wait.i64
     4, // llvm.wasm.bitselect
-    51, // llvm.wasm.data.drop
-    52, // llvm.wasm.extract.exception
-    52, // llvm.wasm.get.ehselector
-    52, // llvm.wasm.get.exception
-    1, // llvm.wasm.landingpad.index
+    142, // llvm.wasm.data.drop
+    143, // llvm.wasm.extract.exception
+    143, // llvm.wasm.get.ehselector
+    143, // llvm.wasm.get.exception
+    40, // llvm.wasm.landingpad.index
     1, // llvm.wasm.lsda
     3, // llvm.wasm.memory.grow
-    53, // llvm.wasm.memory.init
-    16, // llvm.wasm.memory.size
-    54, // llvm.wasm.rethrow
+    144, // llvm.wasm.memory.init
+    18, // llvm.wasm.memory.size
+    145, // llvm.wasm.rethrow.in.catch
     4, // llvm.wasm.sub.saturate.signed
     4, // llvm.wasm.sub.saturate.unsigned
-    54, // llvm.wasm.throw
+    146, // llvm.wasm.throw
     4, // llvm.wasm.trunc.saturate.signed
     4, // llvm.wasm.trunc.saturate.unsigned
     1, // llvm.x86.3dnow.pavgusb
@@ -14657,32 +15208,32 @@
     1, // llvm.x86.aesni.aesenclast.256
     1, // llvm.x86.aesni.aesenclast.512
     1, // llvm.x86.aesni.aesimc
-    1, // llvm.x86.aesni.aeskeygenassist
+    40, // llvm.x86.aesni.aeskeygenassist
     1, // llvm.x86.avx.addsub.pd.256
     1, // llvm.x86.avx.addsub.ps.256
     1, // llvm.x86.avx.blendv.pd.256
     1, // llvm.x86.avx.blendv.ps.256
-    1, // llvm.x86.avx.cmp.pd.256
-    1, // llvm.x86.avx.cmp.ps.256
+    27, // llvm.x86.avx.cmp.pd.256
+    27, // llvm.x86.avx.cmp.ps.256
     1, // llvm.x86.avx.cvt.pd2.ps.256
     1, // llvm.x86.avx.cvt.pd2dq.256
     1, // llvm.x86.avx.cvt.ps2dq.256
     1, // llvm.x86.avx.cvtt.pd2dq.256
     1, // llvm.x86.avx.cvtt.ps2dq.256
-    1, // llvm.x86.avx.dp.ps.256
+    27, // llvm.x86.avx.dp.ps.256
     1, // llvm.x86.avx.hadd.pd.256
     1, // llvm.x86.avx.hadd.ps.256
     1, // llvm.x86.avx.hsub.pd.256
     1, // llvm.x86.avx.hsub.ps.256
-    16, // llvm.x86.avx.ldu.dq.256
+    18, // llvm.x86.avx.ldu.dq.256
     2, // llvm.x86.avx.maskload.pd
     2, // llvm.x86.avx.maskload.pd.256
     2, // llvm.x86.avx.maskload.ps
     2, // llvm.x86.avx.maskload.ps.256
-    22, // llvm.x86.avx.maskstore.pd
-    22, // llvm.x86.avx.maskstore.pd.256
-    22, // llvm.x86.avx.maskstore.ps
-    22, // llvm.x86.avx.maskstore.ps.256
+    29, // llvm.x86.avx.maskstore.pd
+    29, // llvm.x86.avx.maskstore.pd.256
+    29, // llvm.x86.avx.maskstore.ps
+    29, // llvm.x86.avx.maskstore.ps.256
     1, // llvm.x86.avx.max.pd.256
     1, // llvm.x86.avx.max.ps.256
     1, // llvm.x86.avx.min.pd.256
@@ -14693,8 +15244,8 @@
     1, // llvm.x86.avx.ptestnzc.256
     1, // llvm.x86.avx.ptestz.256
     1, // llvm.x86.avx.rcp.ps.256
-    1, // llvm.x86.avx.round.pd.256
-    1, // llvm.x86.avx.round.ps.256
+    40, // llvm.x86.avx.round.pd.256
+    40, // llvm.x86.avx.round.ps.256
     1, // llvm.x86.avx.rsqrt.ps.256
     1, // llvm.x86.avx.vpermilvar.pd
     1, // llvm.x86.avx.vpermilvar.pd.256
@@ -14714,35 +15265,37 @@
     1, // llvm.x86.avx.vtestz.ps.256
     3, // llvm.x86.avx.vzeroall
     3, // llvm.x86.avx.vzeroupper
-    2, // llvm.x86.avx2.gather.d.d
-    2, // llvm.x86.avx2.gather.d.d.256
-    2, // llvm.x86.avx2.gather.d.pd
-    2, // llvm.x86.avx2.gather.d.pd.256
-    2, // llvm.x86.avx2.gather.d.ps
-    2, // llvm.x86.avx2.gather.d.ps.256
-    2, // llvm.x86.avx2.gather.d.q
-    2, // llvm.x86.avx2.gather.d.q.256
-    2, // llvm.x86.avx2.gather.q.d
-    2, // llvm.x86.avx2.gather.q.d.256
-    2, // llvm.x86.avx2.gather.q.pd
-    2, // llvm.x86.avx2.gather.q.pd.256
-    2, // llvm.x86.avx2.gather.q.ps
-    2, // llvm.x86.avx2.gather.q.ps.256
-    2, // llvm.x86.avx2.gather.q.q
-    2, // llvm.x86.avx2.gather.q.q.256
+    105, // llvm.x86.avx2.gather.d.d
+    105, // llvm.x86.avx2.gather.d.d.256
+    105, // llvm.x86.avx2.gather.d.pd
+    105, // llvm.x86.avx2.gather.d.pd.256
+    105, // llvm.x86.avx2.gather.d.ps
+    105, // llvm.x86.avx2.gather.d.ps.256
+    105, // llvm.x86.avx2.gather.d.q
+    105, // llvm.x86.avx2.gather.d.q.256
+    105, // llvm.x86.avx2.gather.q.d
+    105, // llvm.x86.avx2.gather.q.d.256
+    105, // llvm.x86.avx2.gather.q.pd
+    105, // llvm.x86.avx2.gather.q.pd.256
+    105, // llvm.x86.avx2.gather.q.ps
+    105, // llvm.x86.avx2.gather.q.ps.256
+    105, // llvm.x86.avx2.gather.q.q
+    105, // llvm.x86.avx2.gather.q.q.256
     2, // llvm.x86.avx2.maskload.d
     2, // llvm.x86.avx2.maskload.d.256
     2, // llvm.x86.avx2.maskload.q
     2, // llvm.x86.avx2.maskload.q.256
-    22, // llvm.x86.avx2.maskstore.d
-    22, // llvm.x86.avx2.maskstore.d.256
-    22, // llvm.x86.avx2.maskstore.q
-    22, // llvm.x86.avx2.maskstore.q.256
-    1, // llvm.x86.avx2.mpsadbw
+    29, // llvm.x86.avx2.maskstore.d
+    29, // llvm.x86.avx2.maskstore.d.256
+    29, // llvm.x86.avx2.maskstore.q
+    29, // llvm.x86.avx2.maskstore.q.256
+    27, // llvm.x86.avx2.mpsadbw
     1, // llvm.x86.avx2.packssdw
     1, // llvm.x86.avx2.packsswb
     1, // llvm.x86.avx2.packusdw
     1, // llvm.x86.avx2.packuswb
+    1, // llvm.x86.avx2.pavg.b
+    1, // llvm.x86.avx2.pavg.w
     1, // llvm.x86.avx2.pblendvb
     1, // llvm.x86.avx2.permd
     1, // llvm.x86.avx2.permps
@@ -14789,81 +15342,81 @@
     1, // llvm.x86.avx2.psrlv.d.256
     1, // llvm.x86.avx2.psrlv.q
     1, // llvm.x86.avx2.psrlv.q.256
-    1, // llvm.x86.avx512.add.pd.512
-    1, // llvm.x86.avx512.add.ps.512
+    27, // llvm.x86.avx512.add.pd.512
+    27, // llvm.x86.avx512.add.ps.512
     1, // llvm.x86.avx512.broadcastmb.128
     1, // llvm.x86.avx512.broadcastmb.256
     1, // llvm.x86.avx512.broadcastmb.512
     1, // llvm.x86.avx512.broadcastmw.128
     1, // llvm.x86.avx512.broadcastmw.256
     1, // llvm.x86.avx512.broadcastmw.512
-    1, // llvm.x86.avx512.cmp.pd.128
-    1, // llvm.x86.avx512.cmp.pd.256
-    1, // llvm.x86.avx512.cmp.pd.512
-    1, // llvm.x86.avx512.cmp.ps.128
-    1, // llvm.x86.avx512.cmp.ps.256
-    1, // llvm.x86.avx512.cmp.ps.512
+    27, // llvm.x86.avx512.cmp.pd.128
+    27, // llvm.x86.avx512.cmp.pd.256
+    124, // llvm.x86.avx512.cmp.pd.512
+    27, // llvm.x86.avx512.cmp.ps.128
+    27, // llvm.x86.avx512.cmp.ps.256
+    124, // llvm.x86.avx512.cmp.ps.512
     1, // llvm.x86.avx512.conflict.d.128
     1, // llvm.x86.avx512.conflict.d.256
     1, // llvm.x86.avx512.conflict.d.512
     1, // llvm.x86.avx512.conflict.q.128
     1, // llvm.x86.avx512.conflict.q.256
     1, // llvm.x86.avx512.conflict.q.512
-    1, // llvm.x86.avx512.cvtsi2sd64
-    1, // llvm.x86.avx512.cvtsi2ss32
-    1, // llvm.x86.avx512.cvtsi2ss64
-    1, // llvm.x86.avx512.cvttsd2si
-    1, // llvm.x86.avx512.cvttsd2si64
-    1, // llvm.x86.avx512.cvttsd2usi
-    1, // llvm.x86.avx512.cvttsd2usi64
-    1, // llvm.x86.avx512.cvttss2si
-    1, // llvm.x86.avx512.cvttss2si64
-    1, // llvm.x86.avx512.cvttss2usi
-    1, // llvm.x86.avx512.cvttss2usi64
-    1, // llvm.x86.avx512.cvtusi2ss
-    1, // llvm.x86.avx512.cvtusi642sd
-    1, // llvm.x86.avx512.cvtusi642ss
-    1, // llvm.x86.avx512.dbpsadbw.128
-    1, // llvm.x86.avx512.dbpsadbw.256
-    1, // llvm.x86.avx512.dbpsadbw.512
-    1, // llvm.x86.avx512.div.pd.512
-    1, // llvm.x86.avx512.div.ps.512
-    1, // llvm.x86.avx512.exp2.pd
-    1, // llvm.x86.avx512.exp2.ps
-    1, // llvm.x86.avx512.fpclass.pd.128
-    1, // llvm.x86.avx512.fpclass.pd.256
-    1, // llvm.x86.avx512.fpclass.pd.512
-    1, // llvm.x86.avx512.fpclass.ps.128
-    1, // llvm.x86.avx512.fpclass.ps.256
-    1, // llvm.x86.avx512.fpclass.ps.512
-    2, // llvm.x86.avx512.gather.dpd.512
-    2, // llvm.x86.avx512.gather.dpi.512
-    2, // llvm.x86.avx512.gather.dpq.512
-    2, // llvm.x86.avx512.gather.dps.512
-    2, // llvm.x86.avx512.gather.qpd.512
-    2, // llvm.x86.avx512.gather.qpi.512
-    2, // llvm.x86.avx512.gather.qpq.512
-    2, // llvm.x86.avx512.gather.qps.512
-    2, // llvm.x86.avx512.gather3div2.df
-    2, // llvm.x86.avx512.gather3div2.di
-    2, // llvm.x86.avx512.gather3div4.df
-    2, // llvm.x86.avx512.gather3div4.di
-    2, // llvm.x86.avx512.gather3div4.sf
-    2, // llvm.x86.avx512.gather3div4.si
-    2, // llvm.x86.avx512.gather3div8.sf
-    2, // llvm.x86.avx512.gather3div8.si
-    2, // llvm.x86.avx512.gather3siv2.df
-    2, // llvm.x86.avx512.gather3siv2.di
-    2, // llvm.x86.avx512.gather3siv4.df
-    2, // llvm.x86.avx512.gather3siv4.di
-    2, // llvm.x86.avx512.gather3siv4.sf
-    2, // llvm.x86.avx512.gather3siv4.si
-    2, // llvm.x86.avx512.gather3siv8.sf
-    2, // llvm.x86.avx512.gather3siv8.si
-    22, // llvm.x86.avx512.gatherpf.dpd.512
-    22, // llvm.x86.avx512.gatherpf.dps.512
-    22, // llvm.x86.avx512.gatherpf.qpd.512
-    22, // llvm.x86.avx512.gatherpf.qps.512
+    27, // llvm.x86.avx512.cvtsi2sd64
+    27, // llvm.x86.avx512.cvtsi2ss32
+    27, // llvm.x86.avx512.cvtsi2ss64
+    40, // llvm.x86.avx512.cvttsd2si
+    40, // llvm.x86.avx512.cvttsd2si64
+    40, // llvm.x86.avx512.cvttsd2usi
+    40, // llvm.x86.avx512.cvttsd2usi64
+    40, // llvm.x86.avx512.cvttss2si
+    40, // llvm.x86.avx512.cvttss2si64
+    40, // llvm.x86.avx512.cvttss2usi
+    40, // llvm.x86.avx512.cvttss2usi64
+    27, // llvm.x86.avx512.cvtusi2ss
+    27, // llvm.x86.avx512.cvtusi642sd
+    27, // llvm.x86.avx512.cvtusi642ss
+    27, // llvm.x86.avx512.dbpsadbw.128
+    27, // llvm.x86.avx512.dbpsadbw.256
+    27, // llvm.x86.avx512.dbpsadbw.512
+    27, // llvm.x86.avx512.div.pd.512
+    27, // llvm.x86.avx512.div.ps.512
+    125, // llvm.x86.avx512.exp2.pd
+    125, // llvm.x86.avx512.exp2.ps
+    40, // llvm.x86.avx512.fpclass.pd.128
+    40, // llvm.x86.avx512.fpclass.pd.256
+    40, // llvm.x86.avx512.fpclass.pd.512
+    40, // llvm.x86.avx512.fpclass.ps.128
+    40, // llvm.x86.avx512.fpclass.ps.256
+    40, // llvm.x86.avx512.fpclass.ps.512
+    105, // llvm.x86.avx512.gather.dpd.512
+    105, // llvm.x86.avx512.gather.dpi.512
+    105, // llvm.x86.avx512.gather.dpq.512
+    105, // llvm.x86.avx512.gather.dps.512
+    105, // llvm.x86.avx512.gather.qpd.512
+    105, // llvm.x86.avx512.gather.qpi.512
+    105, // llvm.x86.avx512.gather.qpq.512
+    105, // llvm.x86.avx512.gather.qps.512
+    105, // llvm.x86.avx512.gather3div2.df
+    105, // llvm.x86.avx512.gather3div2.di
+    105, // llvm.x86.avx512.gather3div4.df
+    105, // llvm.x86.avx512.gather3div4.di
+    105, // llvm.x86.avx512.gather3div4.sf
+    105, // llvm.x86.avx512.gather3div4.si
+    105, // llvm.x86.avx512.gather3div8.sf
+    105, // llvm.x86.avx512.gather3div8.si
+    105, // llvm.x86.avx512.gather3siv2.df
+    105, // llvm.x86.avx512.gather3siv2.di
+    105, // llvm.x86.avx512.gather3siv4.df
+    105, // llvm.x86.avx512.gather3siv4.di
+    105, // llvm.x86.avx512.gather3siv4.sf
+    105, // llvm.x86.avx512.gather3siv4.si
+    105, // llvm.x86.avx512.gather3siv8.sf
+    105, // llvm.x86.avx512.gather3siv8.si
+    67, // llvm.x86.avx512.gatherpf.dpd.512
+    67, // llvm.x86.avx512.gatherpf.dps.512
+    67, // llvm.x86.avx512.gatherpf.qpd.512
+    67, // llvm.x86.avx512.gatherpf.qps.512
     1, // llvm.x86.avx512.kadd.b
     1, // llvm.x86.avx512.kadd.d
     1, // llvm.x86.avx512.kadd.q
@@ -14876,309 +15429,311 @@
     1, // llvm.x86.avx512.ktestz.d
     1, // llvm.x86.avx512.ktestz.q
     1, // llvm.x86.avx512.ktestz.w
-    1, // llvm.x86.avx512.mask.add.sd.round
-    1, // llvm.x86.avx512.mask.add.ss.round
-    1, // llvm.x86.avx512.mask.cmp.sd
-    1, // llvm.x86.avx512.mask.cmp.ss
+    147, // llvm.x86.avx512.mask.add.sd.round
+    147, // llvm.x86.avx512.mask.add.ss.round
+    148, // llvm.x86.avx512.mask.cmp.sd
+    148, // llvm.x86.avx512.mask.cmp.ss
     1, // llvm.x86.avx512.mask.compress
     1, // llvm.x86.avx512.mask.cvtpd2dq.128
-    1, // llvm.x86.avx512.mask.cvtpd2dq.512
+    125, // llvm.x86.avx512.mask.cvtpd2dq.512
     1, // llvm.x86.avx512.mask.cvtpd2ps
-    1, // llvm.x86.avx512.mask.cvtpd2ps.512
+    125, // llvm.x86.avx512.mask.cvtpd2ps.512
     1, // llvm.x86.avx512.mask.cvtpd2qq.128
     1, // llvm.x86.avx512.mask.cvtpd2qq.256
-    1, // llvm.x86.avx512.mask.cvtpd2qq.512
+    125, // llvm.x86.avx512.mask.cvtpd2qq.512
     1, // llvm.x86.avx512.mask.cvtpd2udq.128
     1, // llvm.x86.avx512.mask.cvtpd2udq.256
-    1, // llvm.x86.avx512.mask.cvtpd2udq.512
+    125, // llvm.x86.avx512.mask.cvtpd2udq.512
     1, // llvm.x86.avx512.mask.cvtpd2uqq.128
     1, // llvm.x86.avx512.mask.cvtpd2uqq.256
-    1, // llvm.x86.avx512.mask.cvtpd2uqq.512
+    125, // llvm.x86.avx512.mask.cvtpd2uqq.512
     1, // llvm.x86.avx512.mask.cvtps2dq.128
     1, // llvm.x86.avx512.mask.cvtps2dq.256
-    1, // llvm.x86.avx512.mask.cvtps2dq.512
-    1, // llvm.x86.avx512.mask.cvtps2pd.512
+    125, // llvm.x86.avx512.mask.cvtps2dq.512
+    125, // llvm.x86.avx512.mask.cvtps2pd.512
     1, // llvm.x86.avx512.mask.cvtps2qq.128
     1, // llvm.x86.avx512.mask.cvtps2qq.256
-    1, // llvm.x86.avx512.mask.cvtps2qq.512
+    125, // llvm.x86.avx512.mask.cvtps2qq.512
     1, // llvm.x86.avx512.mask.cvtps2udq.128
     1, // llvm.x86.avx512.mask.cvtps2udq.256
-    1, // llvm.x86.avx512.mask.cvtps2udq.512
+    125, // llvm.x86.avx512.mask.cvtps2udq.512
     1, // llvm.x86.avx512.mask.cvtps2uqq.128
     1, // llvm.x86.avx512.mask.cvtps2uqq.256
-    1, // llvm.x86.avx512.mask.cvtps2uqq.512
+    125, // llvm.x86.avx512.mask.cvtps2uqq.512
     1, // llvm.x86.avx512.mask.cvtqq2ps.128
-    1, // llvm.x86.avx512.mask.cvtsd2ss.round
-    1, // llvm.x86.avx512.mask.cvtss2sd.round
+    147, // llvm.x86.avx512.mask.cvtsd2ss.round
+    147, // llvm.x86.avx512.mask.cvtss2sd.round
     1, // llvm.x86.avx512.mask.cvttpd2dq.128
-    1, // llvm.x86.avx512.mask.cvttpd2dq.512
+    125, // llvm.x86.avx512.mask.cvttpd2dq.512
     1, // llvm.x86.avx512.mask.cvttpd2qq.128
     1, // llvm.x86.avx512.mask.cvttpd2qq.256
-    1, // llvm.x86.avx512.mask.cvttpd2qq.512
+    125, // llvm.x86.avx512.mask.cvttpd2qq.512
     1, // llvm.x86.avx512.mask.cvttpd2udq.128
     1, // llvm.x86.avx512.mask.cvttpd2udq.256
-    1, // llvm.x86.avx512.mask.cvttpd2udq.512
+    125, // llvm.x86.avx512.mask.cvttpd2udq.512
     1, // llvm.x86.avx512.mask.cvttpd2uqq.128
     1, // llvm.x86.avx512.mask.cvttpd2uqq.256
-    1, // llvm.x86.avx512.mask.cvttpd2uqq.512
-    1, // llvm.x86.avx512.mask.cvttps2dq.512
+    125, // llvm.x86.avx512.mask.cvttpd2uqq.512
+    125, // llvm.x86.avx512.mask.cvttps2dq.512
     1, // llvm.x86.avx512.mask.cvttps2qq.128
     1, // llvm.x86.avx512.mask.cvttps2qq.256
-    1, // llvm.x86.avx512.mask.cvttps2qq.512
+    125, // llvm.x86.avx512.mask.cvttps2qq.512
     1, // llvm.x86.avx512.mask.cvttps2udq.128
     1, // llvm.x86.avx512.mask.cvttps2udq.256
-    1, // llvm.x86.avx512.mask.cvttps2udq.512
+    125, // llvm.x86.avx512.mask.cvttps2udq.512
     1, // llvm.x86.avx512.mask.cvttps2uqq.128
     1, // llvm.x86.avx512.mask.cvttps2uqq.256
-    1, // llvm.x86.avx512.mask.cvttps2uqq.512
+    125, // llvm.x86.avx512.mask.cvttps2uqq.512
     1, // llvm.x86.avx512.mask.cvtuqq2ps.128
-    1, // llvm.x86.avx512.mask.div.sd.round
-    1, // llvm.x86.avx512.mask.div.ss.round
+    147, // llvm.x86.avx512.mask.div.sd.round
+    147, // llvm.x86.avx512.mask.div.ss.round
     1, // llvm.x86.avx512.mask.expand
-    1, // llvm.x86.avx512.mask.fixupimm.pd.128
-    1, // llvm.x86.avx512.mask.fixupimm.pd.256
-    1, // llvm.x86.avx512.mask.fixupimm.pd.512
-    1, // llvm.x86.avx512.mask.fixupimm.ps.128
-    1, // llvm.x86.avx512.mask.fixupimm.ps.256
-    1, // llvm.x86.avx512.mask.fixupimm.ps.512
-    1, // llvm.x86.avx512.mask.fixupimm.sd
-    1, // llvm.x86.avx512.mask.fixupimm.ss
-    1, // llvm.x86.avx512.mask.fpclass.sd
-    1, // llvm.x86.avx512.mask.fpclass.ss
-    2, // llvm.x86.avx512.mask.gather.dpd.512
-    2, // llvm.x86.avx512.mask.gather.dpi.512
-    2, // llvm.x86.avx512.mask.gather.dpq.512
-    2, // llvm.x86.avx512.mask.gather.dps.512
-    2, // llvm.x86.avx512.mask.gather.qpd.512
-    2, // llvm.x86.avx512.mask.gather.qpi.512
-    2, // llvm.x86.avx512.mask.gather.qpq.512
-    2, // llvm.x86.avx512.mask.gather.qps.512
-    2, // llvm.x86.avx512.mask.gather3div2.df
-    2, // llvm.x86.avx512.mask.gather3div2.di
-    2, // llvm.x86.avx512.mask.gather3div4.df
-    2, // llvm.x86.avx512.mask.gather3div4.di
-    2, // llvm.x86.avx512.mask.gather3div4.sf
-    2, // llvm.x86.avx512.mask.gather3div4.si
-    2, // llvm.x86.avx512.mask.gather3div8.sf
-    2, // llvm.x86.avx512.mask.gather3div8.si
-    2, // llvm.x86.avx512.mask.gather3siv2.df
-    2, // llvm.x86.avx512.mask.gather3siv2.di
-    2, // llvm.x86.avx512.mask.gather3siv4.df
-    2, // llvm.x86.avx512.mask.gather3siv4.di
-    2, // llvm.x86.avx512.mask.gather3siv4.sf
-    2, // llvm.x86.avx512.mask.gather3siv4.si
-    2, // llvm.x86.avx512.mask.gather3siv8.sf
-    2, // llvm.x86.avx512.mask.gather3siv8.si
+    125, // llvm.x86.avx512.mask.fixupimm.pd.128
+    125, // llvm.x86.avx512.mask.fixupimm.pd.256
+    149, // llvm.x86.avx512.mask.fixupimm.pd.512
+    125, // llvm.x86.avx512.mask.fixupimm.ps.128
+    125, // llvm.x86.avx512.mask.fixupimm.ps.256
+    149, // llvm.x86.avx512.mask.fixupimm.ps.512
+    149, // llvm.x86.avx512.mask.fixupimm.sd
+    149, // llvm.x86.avx512.mask.fixupimm.ss
+    40, // llvm.x86.avx512.mask.fpclass.sd
+    40, // llvm.x86.avx512.mask.fpclass.ss
+    105, // llvm.x86.avx512.mask.gather.dpd.512
+    105, // llvm.x86.avx512.mask.gather.dpi.512
+    105, // llvm.x86.avx512.mask.gather.dpq.512
+    105, // llvm.x86.avx512.mask.gather.dps.512
+    105, // llvm.x86.avx512.mask.gather.qpd.512
+    105, // llvm.x86.avx512.mask.gather.qpi.512
+    105, // llvm.x86.avx512.mask.gather.qpq.512
+    105, // llvm.x86.avx512.mask.gather.qps.512
+    105, // llvm.x86.avx512.mask.gather3div2.df
+    105, // llvm.x86.avx512.mask.gather3div2.di
+    105, // llvm.x86.avx512.mask.gather3div4.df
+    105, // llvm.x86.avx512.mask.gather3div4.di
+    105, // llvm.x86.avx512.mask.gather3div4.sf
+    105, // llvm.x86.avx512.mask.gather3div4.si
+    105, // llvm.x86.avx512.mask.gather3div8.sf
+    105, // llvm.x86.avx512.mask.gather3div8.si
+    105, // llvm.x86.avx512.mask.gather3siv2.df
+    105, // llvm.x86.avx512.mask.gather3siv2.di
+    105, // llvm.x86.avx512.mask.gather3siv4.df
+    105, // llvm.x86.avx512.mask.gather3siv4.di
+    105, // llvm.x86.avx512.mask.gather3siv4.sf
+    105, // llvm.x86.avx512.mask.gather3siv4.si
+    105, // llvm.x86.avx512.mask.gather3siv8.sf
+    105, // llvm.x86.avx512.mask.gather3siv8.si
     1, // llvm.x86.avx512.mask.getexp.pd.128
     1, // llvm.x86.avx512.mask.getexp.pd.256
-    1, // llvm.x86.avx512.mask.getexp.pd.512
+    125, // llvm.x86.avx512.mask.getexp.pd.512
     1, // llvm.x86.avx512.mask.getexp.ps.128
     1, // llvm.x86.avx512.mask.getexp.ps.256
-    1, // llvm.x86.avx512.mask.getexp.ps.512
-    1, // llvm.x86.avx512.mask.getexp.sd
-    1, // llvm.x86.avx512.mask.getexp.ss
-    1, // llvm.x86.avx512.mask.getmant.pd.128
-    1, // llvm.x86.avx512.mask.getmant.pd.256
-    1, // llvm.x86.avx512.mask.getmant.pd.512
-    1, // llvm.x86.avx512.mask.getmant.ps.128
-    1, // llvm.x86.avx512.mask.getmant.ps.256
-    1, // llvm.x86.avx512.mask.getmant.ps.512
-    1, // llvm.x86.avx512.mask.getmant.sd
-    1, // llvm.x86.avx512.mask.getmant.ss
-    1, // llvm.x86.avx512.mask.max.sd.round
-    1, // llvm.x86.avx512.mask.max.ss.round
-    1, // llvm.x86.avx512.mask.min.sd.round
-    1, // llvm.x86.avx512.mask.min.ss.round
-    1, // llvm.x86.avx512.mask.mul.sd.round
-    1, // llvm.x86.avx512.mask.mul.ss.round
+    125, // llvm.x86.avx512.mask.getexp.ps.512
+    147, // llvm.x86.avx512.mask.getexp.sd
+    147, // llvm.x86.avx512.mask.getexp.ss
+    40, // llvm.x86.avx512.mask.getmant.pd.128
+    40, // llvm.x86.avx512.mask.getmant.pd.256
+    150, // llvm.x86.avx512.mask.getmant.pd.512
+    40, // llvm.x86.avx512.mask.getmant.ps.128
+    40, // llvm.x86.avx512.mask.getmant.ps.256
+    150, // llvm.x86.avx512.mask.getmant.ps.512
+    151, // llvm.x86.avx512.mask.getmant.sd
+    151, // llvm.x86.avx512.mask.getmant.ss
+    147, // llvm.x86.avx512.mask.max.sd.round
+    147, // llvm.x86.avx512.mask.max.ss.round
+    147, // llvm.x86.avx512.mask.min.sd.round
+    147, // llvm.x86.avx512.mask.min.ss.round
+    147, // llvm.x86.avx512.mask.mul.sd.round
+    147, // llvm.x86.avx512.mask.mul.ss.round
     1, // llvm.x86.avx512.mask.pmov.db.128
     1, // llvm.x86.avx512.mask.pmov.db.256
     1, // llvm.x86.avx512.mask.pmov.db.512
-    22, // llvm.x86.avx512.mask.pmov.db.mem.128
-    22, // llvm.x86.avx512.mask.pmov.db.mem.256
-    22, // llvm.x86.avx512.mask.pmov.db.mem.512
+    29, // llvm.x86.avx512.mask.pmov.db.mem.128
+    29, // llvm.x86.avx512.mask.pmov.db.mem.256
+    29, // llvm.x86.avx512.mask.pmov.db.mem.512
     1, // llvm.x86.avx512.mask.pmov.dw.128
     1, // llvm.x86.avx512.mask.pmov.dw.256
     1, // llvm.x86.avx512.mask.pmov.dw.512
-    22, // llvm.x86.avx512.mask.pmov.dw.mem.128
-    22, // llvm.x86.avx512.mask.pmov.dw.mem.256
-    22, // llvm.x86.avx512.mask.pmov.dw.mem.512
+    29, // llvm.x86.avx512.mask.pmov.dw.mem.128
+    29, // llvm.x86.avx512.mask.pmov.dw.mem.256
+    29, // llvm.x86.avx512.mask.pmov.dw.mem.512
     1, // llvm.x86.avx512.mask.pmov.qb.128
     1, // llvm.x86.avx512.mask.pmov.qb.256
     1, // llvm.x86.avx512.mask.pmov.qb.512
-    22, // llvm.x86.avx512.mask.pmov.qb.mem.128
-    22, // llvm.x86.avx512.mask.pmov.qb.mem.256
-    22, // llvm.x86.avx512.mask.pmov.qb.mem.512
+    29, // llvm.x86.avx512.mask.pmov.qb.mem.128
+    29, // llvm.x86.avx512.mask.pmov.qb.mem.256
+    29, // llvm.x86.avx512.mask.pmov.qb.mem.512
     1, // llvm.x86.avx512.mask.pmov.qd.128
-    22, // llvm.x86.avx512.mask.pmov.qd.mem.128
-    22, // llvm.x86.avx512.mask.pmov.qd.mem.256
-    22, // llvm.x86.avx512.mask.pmov.qd.mem.512
+    29, // llvm.x86.avx512.mask.pmov.qd.mem.128
+    29, // llvm.x86.avx512.mask.pmov.qd.mem.256
+    29, // llvm.x86.avx512.mask.pmov.qd.mem.512
     1, // llvm.x86.avx512.mask.pmov.qw.128
     1, // llvm.x86.avx512.mask.pmov.qw.256
     1, // llvm.x86.avx512.mask.pmov.qw.512
-    22, // llvm.x86.avx512.mask.pmov.qw.mem.128
-    22, // llvm.x86.avx512.mask.pmov.qw.mem.256
-    22, // llvm.x86.avx512.mask.pmov.qw.mem.512
+    29, // llvm.x86.avx512.mask.pmov.qw.mem.128
+    29, // llvm.x86.avx512.mask.pmov.qw.mem.256
+    29, // llvm.x86.avx512.mask.pmov.qw.mem.512
     1, // llvm.x86.avx512.mask.pmov.wb.128
-    22, // llvm.x86.avx512.mask.pmov.wb.mem.128
-    22, // llvm.x86.avx512.mask.pmov.wb.mem.256
-    22, // llvm.x86.avx512.mask.pmov.wb.mem.512
+    29, // llvm.x86.avx512.mask.pmov.wb.mem.128
+    29, // llvm.x86.avx512.mask.pmov.wb.mem.256
+    29, // llvm.x86.avx512.mask.pmov.wb.mem.512
     1, // llvm.x86.avx512.mask.pmovs.db.128
     1, // llvm.x86.avx512.mask.pmovs.db.256
     1, // llvm.x86.avx512.mask.pmovs.db.512
-    22, // llvm.x86.avx512.mask.pmovs.db.mem.128
-    22, // llvm.x86.avx512.mask.pmovs.db.mem.256
-    22, // llvm.x86.avx512.mask.pmovs.db.mem.512
+    29, // llvm.x86.avx512.mask.pmovs.db.mem.128
+    29, // llvm.x86.avx512.mask.pmovs.db.mem.256
+    29, // llvm.x86.avx512.mask.pmovs.db.mem.512
     1, // llvm.x86.avx512.mask.pmovs.dw.128
     1, // llvm.x86.avx512.mask.pmovs.dw.256
     1, // llvm.x86.avx512.mask.pmovs.dw.512
-    22, // llvm.x86.avx512.mask.pmovs.dw.mem.128
-    22, // llvm.x86.avx512.mask.pmovs.dw.mem.256
-    22, // llvm.x86.avx512.mask.pmovs.dw.mem.512
+    29, // llvm.x86.avx512.mask.pmovs.dw.mem.128
+    29, // llvm.x86.avx512.mask.pmovs.dw.mem.256
+    29, // llvm.x86.avx512.mask.pmovs.dw.mem.512
     1, // llvm.x86.avx512.mask.pmovs.qb.128
     1, // llvm.x86.avx512.mask.pmovs.qb.256
     1, // llvm.x86.avx512.mask.pmovs.qb.512
-    22, // llvm.x86.avx512.mask.pmovs.qb.mem.128
-    22, // llvm.x86.avx512.mask.pmovs.qb.mem.256
-    22, // llvm.x86.avx512.mask.pmovs.qb.mem.512
+    29, // llvm.x86.avx512.mask.pmovs.qb.mem.128
+    29, // llvm.x86.avx512.mask.pmovs.qb.mem.256
+    29, // llvm.x86.avx512.mask.pmovs.qb.mem.512
     1, // llvm.x86.avx512.mask.pmovs.qd.128
     1, // llvm.x86.avx512.mask.pmovs.qd.256
     1, // llvm.x86.avx512.mask.pmovs.qd.512
-    22, // llvm.x86.avx512.mask.pmovs.qd.mem.128
-    22, // llvm.x86.avx512.mask.pmovs.qd.mem.256
-    22, // llvm.x86.avx512.mask.pmovs.qd.mem.512
+    29, // llvm.x86.avx512.mask.pmovs.qd.mem.128
+    29, // llvm.x86.avx512.mask.pmovs.qd.mem.256
+    29, // llvm.x86.avx512.mask.pmovs.qd.mem.512
     1, // llvm.x86.avx512.mask.pmovs.qw.128
     1, // llvm.x86.avx512.mask.pmovs.qw.256
     1, // llvm.x86.avx512.mask.pmovs.qw.512
-    22, // llvm.x86.avx512.mask.pmovs.qw.mem.128
-    22, // llvm.x86.avx512.mask.pmovs.qw.mem.256
-    22, // llvm.x86.avx512.mask.pmovs.qw.mem.512
+    29, // llvm.x86.avx512.mask.pmovs.qw.mem.128
+    29, // llvm.x86.avx512.mask.pmovs.qw.mem.256
+    29, // llvm.x86.avx512.mask.pmovs.qw.mem.512
     1, // llvm.x86.avx512.mask.pmovs.wb.128
     1, // llvm.x86.avx512.mask.pmovs.wb.256
     1, // llvm.x86.avx512.mask.pmovs.wb.512
-    22, // llvm.x86.avx512.mask.pmovs.wb.mem.128
-    22, // llvm.x86.avx512.mask.pmovs.wb.mem.256
-    22, // llvm.x86.avx512.mask.pmovs.wb.mem.512
+    29, // llvm.x86.avx512.mask.pmovs.wb.mem.128
+    29, // llvm.x86.avx512.mask.pmovs.wb.mem.256
+    29, // llvm.x86.avx512.mask.pmovs.wb.mem.512
     1, // llvm.x86.avx512.mask.pmovus.db.128
     1, // llvm.x86.avx512.mask.pmovus.db.256
     1, // llvm.x86.avx512.mask.pmovus.db.512
-    22, // llvm.x86.avx512.mask.pmovus.db.mem.128
-    22, // llvm.x86.avx512.mask.pmovus.db.mem.256
-    22, // llvm.x86.avx512.mask.pmovus.db.mem.512
+    29, // llvm.x86.avx512.mask.pmovus.db.mem.128
+    29, // llvm.x86.avx512.mask.pmovus.db.mem.256
+    29, // llvm.x86.avx512.mask.pmovus.db.mem.512
     1, // llvm.x86.avx512.mask.pmovus.dw.128
     1, // llvm.x86.avx512.mask.pmovus.dw.256
     1, // llvm.x86.avx512.mask.pmovus.dw.512
-    22, // llvm.x86.avx512.mask.pmovus.dw.mem.128
-    22, // llvm.x86.avx512.mask.pmovus.dw.mem.256
-    22, // llvm.x86.avx512.mask.pmovus.dw.mem.512
+    29, // llvm.x86.avx512.mask.pmovus.dw.mem.128
+    29, // llvm.x86.avx512.mask.pmovus.dw.mem.256
+    29, // llvm.x86.avx512.mask.pmovus.dw.mem.512
     1, // llvm.x86.avx512.mask.pmovus.qb.128
     1, // llvm.x86.avx512.mask.pmovus.qb.256
     1, // llvm.x86.avx512.mask.pmovus.qb.512
-    22, // llvm.x86.avx512.mask.pmovus.qb.mem.128
-    22, // llvm.x86.avx512.mask.pmovus.qb.mem.256
-    22, // llvm.x86.avx512.mask.pmovus.qb.mem.512
+    29, // llvm.x86.avx512.mask.pmovus.qb.mem.128
+    29, // llvm.x86.avx512.mask.pmovus.qb.mem.256
+    29, // llvm.x86.avx512.mask.pmovus.qb.mem.512
     1, // llvm.x86.avx512.mask.pmovus.qd.128
     1, // llvm.x86.avx512.mask.pmovus.qd.256
     1, // llvm.x86.avx512.mask.pmovus.qd.512
-    22, // llvm.x86.avx512.mask.pmovus.qd.mem.128
-    22, // llvm.x86.avx512.mask.pmovus.qd.mem.256
-    22, // llvm.x86.avx512.mask.pmovus.qd.mem.512
+    29, // llvm.x86.avx512.mask.pmovus.qd.mem.128
+    29, // llvm.x86.avx512.mask.pmovus.qd.mem.256
+    29, // llvm.x86.avx512.mask.pmovus.qd.mem.512
     1, // llvm.x86.avx512.mask.pmovus.qw.128
     1, // llvm.x86.avx512.mask.pmovus.qw.256
     1, // llvm.x86.avx512.mask.pmovus.qw.512
-    22, // llvm.x86.avx512.mask.pmovus.qw.mem.128
-    22, // llvm.x86.avx512.mask.pmovus.qw.mem.256
-    22, // llvm.x86.avx512.mask.pmovus.qw.mem.512
+    29, // llvm.x86.avx512.mask.pmovus.qw.mem.128
+    29, // llvm.x86.avx512.mask.pmovus.qw.mem.256
+    29, // llvm.x86.avx512.mask.pmovus.qw.mem.512
     1, // llvm.x86.avx512.mask.pmovus.wb.128
     1, // llvm.x86.avx512.mask.pmovus.wb.256
     1, // llvm.x86.avx512.mask.pmovus.wb.512
-    22, // llvm.x86.avx512.mask.pmovus.wb.mem.128
-    22, // llvm.x86.avx512.mask.pmovus.wb.mem.256
-    22, // llvm.x86.avx512.mask.pmovus.wb.mem.512
-    1, // llvm.x86.avx512.mask.range.pd.128
-    1, // llvm.x86.avx512.mask.range.pd.256
-    1, // llvm.x86.avx512.mask.range.pd.512
-    1, // llvm.x86.avx512.mask.range.ps.128
-    1, // llvm.x86.avx512.mask.range.ps.256
-    1, // llvm.x86.avx512.mask.range.ps.512
-    1, // llvm.x86.avx512.mask.range.sd
-    1, // llvm.x86.avx512.mask.range.ss
-    1, // llvm.x86.avx512.mask.reduce.pd.128
-    1, // llvm.x86.avx512.mask.reduce.pd.256
-    1, // llvm.x86.avx512.mask.reduce.pd.512
-    1, // llvm.x86.avx512.mask.reduce.ps.128
-    1, // llvm.x86.avx512.mask.reduce.ps.256
-    1, // llvm.x86.avx512.mask.reduce.ps.512
-    1, // llvm.x86.avx512.mask.reduce.sd
-    1, // llvm.x86.avx512.mask.reduce.ss
-    1, // llvm.x86.avx512.mask.rndscale.pd.128
-    1, // llvm.x86.avx512.mask.rndscale.pd.256
-    1, // llvm.x86.avx512.mask.rndscale.pd.512
-    1, // llvm.x86.avx512.mask.rndscale.ps.128
-    1, // llvm.x86.avx512.mask.rndscale.ps.256
-    1, // llvm.x86.avx512.mask.rndscale.ps.512
-    1, // llvm.x86.avx512.mask.rndscale.sd
-    1, // llvm.x86.avx512.mask.rndscale.ss
+    29, // llvm.x86.avx512.mask.pmovus.wb.mem.128
+    29, // llvm.x86.avx512.mask.pmovus.wb.mem.256
+    29, // llvm.x86.avx512.mask.pmovus.wb.mem.512
+    27, // llvm.x86.avx512.mask.range.pd.128
+    27, // llvm.x86.avx512.mask.range.pd.256
+    151, // llvm.x86.avx512.mask.range.pd.512
+    27, // llvm.x86.avx512.mask.range.ps.128
+    27, // llvm.x86.avx512.mask.range.ps.256
+    151, // llvm.x86.avx512.mask.range.ps.512
+    152, // llvm.x86.avx512.mask.range.sd
+    152, // llvm.x86.avx512.mask.range.ss
+    40, // llvm.x86.avx512.mask.reduce.pd.128
+    40, // llvm.x86.avx512.mask.reduce.pd.256
+    150, // llvm.x86.avx512.mask.reduce.pd.512
+    40, // llvm.x86.avx512.mask.reduce.ps.128
+    40, // llvm.x86.avx512.mask.reduce.ps.256
+    150, // llvm.x86.avx512.mask.reduce.ps.512
+    152, // llvm.x86.avx512.mask.reduce.sd
+    152, // llvm.x86.avx512.mask.reduce.ss
+    40, // llvm.x86.avx512.mask.rndscale.pd.128
+    40, // llvm.x86.avx512.mask.rndscale.pd.256
+    150, // llvm.x86.avx512.mask.rndscale.pd.512
+    40, // llvm.x86.avx512.mask.rndscale.ps.128
+    40, // llvm.x86.avx512.mask.rndscale.ps.256
+    150, // llvm.x86.avx512.mask.rndscale.ps.512
+    152, // llvm.x86.avx512.mask.rndscale.sd
+    152, // llvm.x86.avx512.mask.rndscale.ss
     1, // llvm.x86.avx512.mask.scalef.pd.128
     1, // llvm.x86.avx512.mask.scalef.pd.256
-    1, // llvm.x86.avx512.mask.scalef.pd.512
+    147, // llvm.x86.avx512.mask.scalef.pd.512
     1, // llvm.x86.avx512.mask.scalef.ps.128
     1, // llvm.x86.avx512.mask.scalef.ps.256
-    1, // llvm.x86.avx512.mask.scalef.ps.512
-    1, // llvm.x86.avx512.mask.scalef.sd
-    1, // llvm.x86.avx512.mask.scalef.ss
-    22, // llvm.x86.avx512.mask.scatter.dpd.512
-    22, // llvm.x86.avx512.mask.scatter.dpi.512
-    22, // llvm.x86.avx512.mask.scatter.dpq.512
-    22, // llvm.x86.avx512.mask.scatter.dps.512
-    22, // llvm.x86.avx512.mask.scatter.qpd.512
-    22, // llvm.x86.avx512.mask.scatter.qpi.512
-    22, // llvm.x86.avx512.mask.scatter.qpq.512
-    22, // llvm.x86.avx512.mask.scatter.qps.512
-    22, // llvm.x86.avx512.mask.scatterdiv2.df
-    22, // llvm.x86.avx512.mask.scatterdiv2.di
-    22, // llvm.x86.avx512.mask.scatterdiv4.df
-    22, // llvm.x86.avx512.mask.scatterdiv4.di
-    22, // llvm.x86.avx512.mask.scatterdiv4.sf
-    22, // llvm.x86.avx512.mask.scatterdiv4.si
-    22, // llvm.x86.avx512.mask.scatterdiv8.sf
-    22, // llvm.x86.avx512.mask.scatterdiv8.si
-    22, // llvm.x86.avx512.mask.scattersiv2.df
-    22, // llvm.x86.avx512.mask.scattersiv2.di
-    22, // llvm.x86.avx512.mask.scattersiv4.df
-    22, // llvm.x86.avx512.mask.scattersiv4.di
-    22, // llvm.x86.avx512.mask.scattersiv4.sf
-    22, // llvm.x86.avx512.mask.scattersiv4.si
-    22, // llvm.x86.avx512.mask.scattersiv8.sf
-    22, // llvm.x86.avx512.mask.scattersiv8.si
-    1, // llvm.x86.avx512.mask.sqrt.sd
-    1, // llvm.x86.avx512.mask.sqrt.ss
-    1, // llvm.x86.avx512.mask.sub.sd.round
-    1, // llvm.x86.avx512.mask.sub.ss.round
+    147, // llvm.x86.avx512.mask.scalef.ps.512
+    147, // llvm.x86.avx512.mask.scalef.sd
+    147, // llvm.x86.avx512.mask.scalef.ss
+    52, // llvm.x86.avx512.mask.scatter.dpd.512
+    52, // llvm.x86.avx512.mask.scatter.dpi.512
+    52, // llvm.x86.avx512.mask.scatter.dpq.512
+    52, // llvm.x86.avx512.mask.scatter.dps.512
+    52, // llvm.x86.avx512.mask.scatter.qpd.512
+    52, // llvm.x86.avx512.mask.scatter.qpi.512
+    52, // llvm.x86.avx512.mask.scatter.qpq.512
+    52, // llvm.x86.avx512.mask.scatter.qps.512
+    52, // llvm.x86.avx512.mask.scatterdiv2.df
+    52, // llvm.x86.avx512.mask.scatterdiv2.di
+    52, // llvm.x86.avx512.mask.scatterdiv4.df
+    52, // llvm.x86.avx512.mask.scatterdiv4.di
+    52, // llvm.x86.avx512.mask.scatterdiv4.sf
+    52, // llvm.x86.avx512.mask.scatterdiv4.si
+    52, // llvm.x86.avx512.mask.scatterdiv8.sf
+    52, // llvm.x86.avx512.mask.scatterdiv8.si
+    52, // llvm.x86.avx512.mask.scattersiv2.df
+    52, // llvm.x86.avx512.mask.scattersiv2.di
+    52, // llvm.x86.avx512.mask.scattersiv4.df
+    52, // llvm.x86.avx512.mask.scattersiv4.di
+    52, // llvm.x86.avx512.mask.scattersiv4.sf
+    52, // llvm.x86.avx512.mask.scattersiv4.si
+    52, // llvm.x86.avx512.mask.scattersiv8.sf
+    52, // llvm.x86.avx512.mask.scattersiv8.si
+    147, // llvm.x86.avx512.mask.sqrt.sd
+    147, // llvm.x86.avx512.mask.sqrt.ss
+    147, // llvm.x86.avx512.mask.sub.sd.round
+    147, // llvm.x86.avx512.mask.sub.ss.round
     1, // llvm.x86.avx512.mask.vcvtph2ps.128
     1, // llvm.x86.avx512.mask.vcvtph2ps.256
-    1, // llvm.x86.avx512.mask.vcvtph2ps.512
-    1, // llvm.x86.avx512.mask.vcvtps2ph.128
-    1, // llvm.x86.avx512.mask.vcvtps2ph.256
-    1, // llvm.x86.avx512.mask.vcvtps2ph.512
-    1, // llvm.x86.avx512.maskz.fixupimm.pd.128
-    1, // llvm.x86.avx512.maskz.fixupimm.pd.256
-    1, // llvm.x86.avx512.maskz.fixupimm.pd.512
-    1, // llvm.x86.avx512.maskz.fixupimm.ps.128
-    1, // llvm.x86.avx512.maskz.fixupimm.ps.256
-    1, // llvm.x86.avx512.maskz.fixupimm.ps.512
-    1, // llvm.x86.avx512.maskz.fixupimm.sd
-    1, // llvm.x86.avx512.maskz.fixupimm.ss
-    1, // llvm.x86.avx512.max.pd.512
-    1, // llvm.x86.avx512.max.ps.512
-    1, // llvm.x86.avx512.min.pd.512
-    1, // llvm.x86.avx512.min.ps.512
-    1, // llvm.x86.avx512.mul.pd.512
-    1, // llvm.x86.avx512.mul.ps.512
+    125, // llvm.x86.avx512.mask.vcvtph2ps.512
+    40, // llvm.x86.avx512.mask.vcvtps2ph.128
+    40, // llvm.x86.avx512.mask.vcvtps2ph.256
+    40, // llvm.x86.avx512.mask.vcvtps2ph.512
+    125, // llvm.x86.avx512.maskz.fixupimm.pd.128
+    125, // llvm.x86.avx512.maskz.fixupimm.pd.256
+    149, // llvm.x86.avx512.maskz.fixupimm.pd.512
+    125, // llvm.x86.avx512.maskz.fixupimm.ps.128
+    125, // llvm.x86.avx512.maskz.fixupimm.ps.256
+    149, // llvm.x86.avx512.maskz.fixupimm.ps.512
+    149, // llvm.x86.avx512.maskz.fixupimm.sd
+    149, // llvm.x86.avx512.maskz.fixupimm.ss
+    27, // llvm.x86.avx512.max.pd.512
+    27, // llvm.x86.avx512.max.ps.512
+    27, // llvm.x86.avx512.min.pd.512
+    27, // llvm.x86.avx512.min.ps.512
+    27, // llvm.x86.avx512.mul.pd.512
+    27, // llvm.x86.avx512.mul.ps.512
     1, // llvm.x86.avx512.packssdw.512
     1, // llvm.x86.avx512.packsswb.512
     1, // llvm.x86.avx512.packusdw.512
     1, // llvm.x86.avx512.packuswb.512
+    1, // llvm.x86.avx512.pavg.b.512
+    1, // llvm.x86.avx512.pavg.w.512
     1, // llvm.x86.avx512.permvar.df.256
     1, // llvm.x86.avx512.permvar.df.512
     1, // llvm.x86.avx512.permvar.di.256
@@ -15240,12 +15795,12 @@
     1, // llvm.x86.avx512.psrlv.w.128
     1, // llvm.x86.avx512.psrlv.w.256
     1, // llvm.x86.avx512.psrlv.w.512
-    1, // llvm.x86.avx512.pternlog.d.128
-    1, // llvm.x86.avx512.pternlog.d.256
-    1, // llvm.x86.avx512.pternlog.d.512
-    1, // llvm.x86.avx512.pternlog.q.128
-    1, // llvm.x86.avx512.pternlog.q.256
-    1, // llvm.x86.avx512.pternlog.q.512
+    125, // llvm.x86.avx512.pternlog.d.128
+    125, // llvm.x86.avx512.pternlog.d.256
+    125, // llvm.x86.avx512.pternlog.d.512
+    125, // llvm.x86.avx512.pternlog.q.128
+    125, // llvm.x86.avx512.pternlog.q.256
+    125, // llvm.x86.avx512.pternlog.q.512
     1, // llvm.x86.avx512.rcp14.pd.128
     1, // llvm.x86.avx512.rcp14.pd.256
     1, // llvm.x86.avx512.rcp14.pd.512
@@ -15254,10 +15809,10 @@
     1, // llvm.x86.avx512.rcp14.ps.512
     1, // llvm.x86.avx512.rcp14.sd
     1, // llvm.x86.avx512.rcp14.ss
-    1, // llvm.x86.avx512.rcp28.pd
-    1, // llvm.x86.avx512.rcp28.ps
-    1, // llvm.x86.avx512.rcp28.sd
-    1, // llvm.x86.avx512.rcp28.ss
+    125, // llvm.x86.avx512.rcp28.pd
+    125, // llvm.x86.avx512.rcp28.ps
+    147, // llvm.x86.avx512.rcp28.sd
+    147, // llvm.x86.avx512.rcp28.ss
     1, // llvm.x86.avx512.rsqrt14.pd.128
     1, // llvm.x86.avx512.rsqrt14.pd.256
     1, // llvm.x86.avx512.rsqrt14.pd.512
@@ -15266,60 +15821,66 @@
     1, // llvm.x86.avx512.rsqrt14.ps.512
     1, // llvm.x86.avx512.rsqrt14.sd
     1, // llvm.x86.avx512.rsqrt14.ss
-    1, // llvm.x86.avx512.rsqrt28.pd
-    1, // llvm.x86.avx512.rsqrt28.ps
-    1, // llvm.x86.avx512.rsqrt28.sd
-    1, // llvm.x86.avx512.rsqrt28.ss
-    22, // llvm.x86.avx512.scatter.dpd.512
-    22, // llvm.x86.avx512.scatter.dpi.512
-    22, // llvm.x86.avx512.scatter.dpq.512
-    22, // llvm.x86.avx512.scatter.dps.512
-    22, // llvm.x86.avx512.scatter.qpd.512
-    22, // llvm.x86.avx512.scatter.qpi.512
-    22, // llvm.x86.avx512.scatter.qpq.512
-    22, // llvm.x86.avx512.scatter.qps.512
-    22, // llvm.x86.avx512.scatterdiv2.df
-    22, // llvm.x86.avx512.scatterdiv2.di
-    22, // llvm.x86.avx512.scatterdiv4.df
-    22, // llvm.x86.avx512.scatterdiv4.di
-    22, // llvm.x86.avx512.scatterdiv4.sf
-    22, // llvm.x86.avx512.scatterdiv4.si
-    22, // llvm.x86.avx512.scatterdiv8.sf
-    22, // llvm.x86.avx512.scatterdiv8.si
-    22, // llvm.x86.avx512.scatterpf.dpd.512
-    22, // llvm.x86.avx512.scatterpf.dps.512
-    22, // llvm.x86.avx512.scatterpf.qpd.512
-    22, // llvm.x86.avx512.scatterpf.qps.512
-    22, // llvm.x86.avx512.scattersiv2.df
-    22, // llvm.x86.avx512.scattersiv2.di
-    22, // llvm.x86.avx512.scattersiv4.df
-    22, // llvm.x86.avx512.scattersiv4.di
-    22, // llvm.x86.avx512.scattersiv4.sf
-    22, // llvm.x86.avx512.scattersiv4.si
-    22, // llvm.x86.avx512.scattersiv8.sf
-    22, // llvm.x86.avx512.scattersiv8.si
-    1, // llvm.x86.avx512.sitofp.round
-    1, // llvm.x86.avx512.sqrt.pd.512
-    1, // llvm.x86.avx512.sqrt.ps.512
-    1, // llvm.x86.avx512.sub.pd.512
-    1, // llvm.x86.avx512.sub.ps.512
-    1, // llvm.x86.avx512.uitofp.round
-    1, // llvm.x86.avx512.vcomi.sd
-    1, // llvm.x86.avx512.vcomi.ss
-    1, // llvm.x86.avx512.vcvtsd2si32
-    1, // llvm.x86.avx512.vcvtsd2si64
-    1, // llvm.x86.avx512.vcvtsd2usi32
-    1, // llvm.x86.avx512.vcvtsd2usi64
-    1, // llvm.x86.avx512.vcvtss2si32
-    1, // llvm.x86.avx512.vcvtss2si64
-    1, // llvm.x86.avx512.vcvtss2usi32
-    1, // llvm.x86.avx512.vcvtss2usi64
-    1, // llvm.x86.avx512.vfmadd.f32
-    1, // llvm.x86.avx512.vfmadd.f64
-    1, // llvm.x86.avx512.vfmadd.pd.512
-    1, // llvm.x86.avx512.vfmadd.ps.512
-    1, // llvm.x86.avx512.vfmaddsub.pd.512
-    1, // llvm.x86.avx512.vfmaddsub.ps.512
+    125, // llvm.x86.avx512.rsqrt28.pd
+    125, // llvm.x86.avx512.rsqrt28.ps
+    147, // llvm.x86.avx512.rsqrt28.sd
+    147, // llvm.x86.avx512.rsqrt28.ss
+    52, // llvm.x86.avx512.scatter.dpd.512
+    52, // llvm.x86.avx512.scatter.dpi.512
+    52, // llvm.x86.avx512.scatter.dpq.512
+    52, // llvm.x86.avx512.scatter.dps.512
+    52, // llvm.x86.avx512.scatter.qpd.512
+    52, // llvm.x86.avx512.scatter.qpi.512
+    52, // llvm.x86.avx512.scatter.qpq.512
+    52, // llvm.x86.avx512.scatter.qps.512
+    52, // llvm.x86.avx512.scatterdiv2.df
+    52, // llvm.x86.avx512.scatterdiv2.di
+    52, // llvm.x86.avx512.scatterdiv4.df
+    52, // llvm.x86.avx512.scatterdiv4.di
+    52, // llvm.x86.avx512.scatterdiv4.sf
+    52, // llvm.x86.avx512.scatterdiv4.si
+    52, // llvm.x86.avx512.scatterdiv8.sf
+    52, // llvm.x86.avx512.scatterdiv8.si
+    67, // llvm.x86.avx512.scatterpf.dpd.512
+    67, // llvm.x86.avx512.scatterpf.dps.512
+    67, // llvm.x86.avx512.scatterpf.qpd.512
+    67, // llvm.x86.avx512.scatterpf.qps.512
+    52, // llvm.x86.avx512.scattersiv2.df
+    52, // llvm.x86.avx512.scattersiv2.di
+    52, // llvm.x86.avx512.scattersiv4.df
+    52, // llvm.x86.avx512.scattersiv4.di
+    52, // llvm.x86.avx512.scattersiv4.sf
+    52, // llvm.x86.avx512.scattersiv4.si
+    52, // llvm.x86.avx512.scattersiv8.sf
+    52, // llvm.x86.avx512.scattersiv8.si
+    40, // llvm.x86.avx512.sitofp.round
+    40, // llvm.x86.avx512.sqrt.pd.512
+    40, // llvm.x86.avx512.sqrt.ps.512
+    27, // llvm.x86.avx512.sub.pd.512
+    27, // llvm.x86.avx512.sub.ps.512
+    40, // llvm.x86.avx512.uitofp.round
+    124, // llvm.x86.avx512.vcomi.sd
+    124, // llvm.x86.avx512.vcomi.ss
+    40, // llvm.x86.avx512.vcvtsd2si32
+    40, // llvm.x86.avx512.vcvtsd2si64
+    40, // llvm.x86.avx512.vcvtsd2usi32
+    40, // llvm.x86.avx512.vcvtsd2usi64
+    40, // llvm.x86.avx512.vcvtss2si32
+    40, // llvm.x86.avx512.vcvtss2si64
+    40, // llvm.x86.avx512.vcvtss2usi32
+    40, // llvm.x86.avx512.vcvtss2usi64
+    125, // llvm.x86.avx512.vfmadd.f32
+    125, // llvm.x86.avx512.vfmadd.f64
+    125, // llvm.x86.avx512.vfmadd.pd.512
+    125, // llvm.x86.avx512.vfmadd.ps.512
+    125, // llvm.x86.avx512.vfmaddsub.pd.512
+    125, // llvm.x86.avx512.vfmaddsub.ps.512
+    1, // llvm.x86.avx512.vp2intersect.d.128
+    1, // llvm.x86.avx512.vp2intersect.d.256
+    1, // llvm.x86.avx512.vp2intersect.d.512
+    1, // llvm.x86.avx512.vp2intersect.q.128
+    1, // llvm.x86.avx512.vp2intersect.q.256
+    1, // llvm.x86.avx512.vp2intersect.q.512
     1, // llvm.x86.avx512.vpdpbusd.128
     1, // llvm.x86.avx512.vpdpbusd.256
     1, // llvm.x86.avx512.vpdpbusd.512
@@ -15361,6 +15922,15 @@
     1, // llvm.x86.avx512.vpshufbitqmb.128
     1, // llvm.x86.avx512.vpshufbitqmb.256
     1, // llvm.x86.avx512.vpshufbitqmb.512
+    1, // llvm.x86.avx512bf16.cvtne2ps2bf16.128
+    1, // llvm.x86.avx512bf16.cvtne2ps2bf16.256
+    1, // llvm.x86.avx512bf16.cvtne2ps2bf16.512
+    1, // llvm.x86.avx512bf16.cvtneps2bf16.256
+    1, // llvm.x86.avx512bf16.cvtneps2bf16.512
+    1, // llvm.x86.avx512bf16.dpbf16ps.128
+    1, // llvm.x86.avx512bf16.dpbf16ps.256
+    1, // llvm.x86.avx512bf16.dpbf16ps.512
+    1, // llvm.x86.avx512bf16.mask.cvtneps2bf16.128
     1, // llvm.x86.bmi.bextr.32
     1, // llvm.x86.bmi.bextr.64
     1, // llvm.x86.bmi.bzhi.32
@@ -15376,6 +15946,8 @@
     3, // llvm.x86.clzero
     3, // llvm.x86.directstore32
     3, // llvm.x86.directstore64
+    3, // llvm.x86.enqcmd
+    3, // llvm.x86.enqcmds
     3, // llvm.x86.flags.read.u32
     3, // llvm.x86.flags.read.u64
     3, // llvm.x86.flags.write.u32
@@ -15386,7 +15958,7 @@
     3, // llvm.x86.fxsave64
     3, // llvm.x86.incsspd
     3, // llvm.x86.incsspq
-    3, // llvm.x86.int
+    101, // llvm.x86.int
     3, // llvm.x86.invpcid
     3, // llvm.x86.llwpcb
     3, // llvm.x86.lwpins32
@@ -15408,7 +15980,7 @@
     1, // llvm.x86.mmx.padds.w
     1, // llvm.x86.mmx.paddus.b
     1, // llvm.x86.mmx.paddus.w
-    1, // llvm.x86.mmx.palignr.b
+    27, // llvm.x86.mmx.palignr.b
     1, // llvm.x86.mmx.pand
     1, // llvm.x86.mmx.pandn
     1, // llvm.x86.mmx.pavg.b
@@ -15419,8 +15991,8 @@
     1, // llvm.x86.mmx.pcmpgt.b
     1, // llvm.x86.mmx.pcmpgt.d
     1, // llvm.x86.mmx.pcmpgt.w
-    1, // llvm.x86.mmx.pextr.w
-    1, // llvm.x86.mmx.pinsr.w
+    40, // llvm.x86.mmx.pextr.w
+    27, // llvm.x86.mmx.pinsr.w
     1, // llvm.x86.mmx.pmadd.wd
     1, // llvm.x86.mmx.pmaxs.w
     1, // llvm.x86.mmx.pmaxu.b
@@ -15467,9 +16039,9 @@
     3, // llvm.x86.monitorx
     3, // llvm.x86.movdir64b
     3, // llvm.x86.mwaitx
-    1, // llvm.x86.pclmulqdq
-    1, // llvm.x86.pclmulqdq.256
-    1, // llvm.x86.pclmulqdq.512
+    27, // llvm.x86.pclmulqdq
+    27, // llvm.x86.pclmulqdq.256
+    27, // llvm.x86.pclmulqdq.512
     3, // llvm.x86.ptwrite32
     3, // llvm.x86.ptwrite64
     3, // llvm.x86.rdfsbase.32
@@ -15498,13 +16070,13 @@
     1, // llvm.x86.sha1msg1
     1, // llvm.x86.sha1msg2
     1, // llvm.x86.sha1nexte
-    1, // llvm.x86.sha1rnds4
+    27, // llvm.x86.sha1rnds4
     1, // llvm.x86.sha256msg1
     1, // llvm.x86.sha256msg2
     1, // llvm.x86.sha256rnds2
     3, // llvm.x86.slwpcb
-    1, // llvm.x86.sse.cmp.ps
-    1, // llvm.x86.sse.cmp.ss
+    27, // llvm.x86.sse.cmp.ps
+    27, // llvm.x86.sse.cmp.ss
     1, // llvm.x86.sse.comieq.ss
     1, // llvm.x86.sse.comige.ss
     1, // llvm.x86.sse.comigt.ss
@@ -15521,19 +16093,19 @@
     1, // llvm.x86.sse.cvttps2pi
     1, // llvm.x86.sse.cvttss2si
     1, // llvm.x86.sse.cvttss2si64
-    3, // llvm.x86.sse.ldmxcsr
+    153, // llvm.x86.sse.ldmxcsr
     1, // llvm.x86.sse.max.ps
     1, // llvm.x86.sse.max.ss
     1, // llvm.x86.sse.min.ps
     1, // llvm.x86.sse.min.ss
     1, // llvm.x86.sse.movmsk.ps
-    1, // llvm.x86.sse.pshuf.w
+    40, // llvm.x86.sse.pshuf.w
     1, // llvm.x86.sse.rcp.ps
     1, // llvm.x86.sse.rcp.ss
     1, // llvm.x86.sse.rsqrt.ps
     1, // llvm.x86.sse.rsqrt.ss
     3, // llvm.x86.sse.sfence
-    3, // llvm.x86.sse.stmxcsr
+    126, // llvm.x86.sse.stmxcsr
     1, // llvm.x86.sse.ucomieq.ss
     1, // llvm.x86.sse.ucomige.ss
     1, // llvm.x86.sse.ucomigt.ss
@@ -15541,8 +16113,8 @@
     1, // llvm.x86.sse.ucomilt.ss
     1, // llvm.x86.sse.ucomineq.ss
     3, // llvm.x86.sse2.clflush
-    1, // llvm.x86.sse2.cmp.pd
-    1, // llvm.x86.sse2.cmp.sd
+    27, // llvm.x86.sse2.cmp.pd
+    27, // llvm.x86.sse2.cmp.sd
     1, // llvm.x86.sse2.comieq.sd
     1, // llvm.x86.sse2.comige.sd
     1, // llvm.x86.sse2.comigt.sd
@@ -15571,6 +16143,8 @@
     1, // llvm.x86.sse2.packsswb.128
     1, // llvm.x86.sse2.packuswb.128
     3, // llvm.x86.sse2.pause
+    1, // llvm.x86.sse2.pavg.b
+    1, // llvm.x86.sse2.pavg.w
     1, // llvm.x86.sse2.pmadd.wd
     1, // llvm.x86.sse2.pmovmskb.128
     1, // llvm.x86.sse2.pmulh.w
@@ -15604,47 +16178,47 @@
     1, // llvm.x86.sse3.hadd.ps
     1, // llvm.x86.sse3.hsub.pd
     1, // llvm.x86.sse3.hsub.ps
-    16, // llvm.x86.sse3.ldu.dq
+    18, // llvm.x86.sse3.ldu.dq
     3, // llvm.x86.sse3.monitor
     3, // llvm.x86.sse3.mwait
     1, // llvm.x86.sse41.blendvpd
     1, // llvm.x86.sse41.blendvps
-    1, // llvm.x86.sse41.dppd
-    1, // llvm.x86.sse41.dpps
-    1, // llvm.x86.sse41.insertps
-    1, // llvm.x86.sse41.mpsadbw
+    27, // llvm.x86.sse41.dppd
+    27, // llvm.x86.sse41.dpps
+    27, // llvm.x86.sse41.insertps
+    27, // llvm.x86.sse41.mpsadbw
     1, // llvm.x86.sse41.packusdw
     1, // llvm.x86.sse41.pblendvb
     1, // llvm.x86.sse41.phminposuw
     1, // llvm.x86.sse41.ptestc
     1, // llvm.x86.sse41.ptestnzc
     1, // llvm.x86.sse41.ptestz
-    1, // llvm.x86.sse41.round.pd
-    1, // llvm.x86.sse41.round.ps
-    1, // llvm.x86.sse41.round.sd
-    1, // llvm.x86.sse41.round.ss
+    40, // llvm.x86.sse41.round.pd
+    40, // llvm.x86.sse41.round.ps
+    27, // llvm.x86.sse41.round.sd
+    27, // llvm.x86.sse41.round.ss
     1, // llvm.x86.sse42.crc32.32.16
     1, // llvm.x86.sse42.crc32.32.32
     1, // llvm.x86.sse42.crc32.32.8
     1, // llvm.x86.sse42.crc32.64.64
-    1, // llvm.x86.sse42.pcmpestri128
-    1, // llvm.x86.sse42.pcmpestria128
-    1, // llvm.x86.sse42.pcmpestric128
-    1, // llvm.x86.sse42.pcmpestrio128
-    1, // llvm.x86.sse42.pcmpestris128
-    1, // llvm.x86.sse42.pcmpestriz128
-    1, // llvm.x86.sse42.pcmpestrm128
-    1, // llvm.x86.sse42.pcmpistri128
-    1, // llvm.x86.sse42.pcmpistria128
-    1, // llvm.x86.sse42.pcmpistric128
-    1, // llvm.x86.sse42.pcmpistrio128
-    1, // llvm.x86.sse42.pcmpistris128
-    1, // llvm.x86.sse42.pcmpistriz128
-    1, // llvm.x86.sse42.pcmpistrm128
+    147, // llvm.x86.sse42.pcmpestri128
+    147, // llvm.x86.sse42.pcmpestria128
+    147, // llvm.x86.sse42.pcmpestric128
+    147, // llvm.x86.sse42.pcmpestrio128
+    147, // llvm.x86.sse42.pcmpestris128
+    147, // llvm.x86.sse42.pcmpestriz128
+    147, // llvm.x86.sse42.pcmpestrm128
+    27, // llvm.x86.sse42.pcmpistri128
+    27, // llvm.x86.sse42.pcmpistria128
+    27, // llvm.x86.sse42.pcmpistric128
+    27, // llvm.x86.sse42.pcmpistrio128
+    27, // llvm.x86.sse42.pcmpistris128
+    27, // llvm.x86.sse42.pcmpistriz128
+    27, // llvm.x86.sse42.pcmpistrm128
     1, // llvm.x86.sse4a.extrq
-    1, // llvm.x86.sse4a.extrqi
+    39, // llvm.x86.sse4a.extrqi
     1, // llvm.x86.sse4a.insertq
-    1, // llvm.x86.sse4a.insertqi
+    124, // llvm.x86.sse4a.insertqi
     1, // llvm.x86.ssse3.pabs.b
     1, // llvm.x86.ssse3.pabs.d
     1, // llvm.x86.ssse3.pabs.w
@@ -15674,21 +16248,21 @@
     1, // llvm.x86.ssse3.psign.w.128
     1, // llvm.x86.subborrow.32
     1, // llvm.x86.subborrow.64
-    1, // llvm.x86.tbm.bextri.u32
-    1, // llvm.x86.tbm.bextri.u64
+    40, // llvm.x86.tbm.bextri.u32
+    40, // llvm.x86.tbm.bextri.u64
     3, // llvm.x86.tpause
     3, // llvm.x86.umonitor
     3, // llvm.x86.umwait
     1, // llvm.x86.vcvtph2ps.128
     1, // llvm.x86.vcvtph2ps.256
-    1, // llvm.x86.vcvtps2ph.128
-    1, // llvm.x86.vcvtps2ph.256
-    1, // llvm.x86.vgf2p8affineinvqb.128
-    1, // llvm.x86.vgf2p8affineinvqb.256
-    1, // llvm.x86.vgf2p8affineinvqb.512
-    1, // llvm.x86.vgf2p8affineqb.128
-    1, // llvm.x86.vgf2p8affineqb.256
-    1, // llvm.x86.vgf2p8affineqb.512
+    40, // llvm.x86.vcvtps2ph.128
+    40, // llvm.x86.vcvtps2ph.256
+    27, // llvm.x86.vgf2p8affineinvqb.128
+    27, // llvm.x86.vgf2p8affineinvqb.256
+    27, // llvm.x86.vgf2p8affineinvqb.512
+    27, // llvm.x86.vgf2p8affineqb.128
+    27, // llvm.x86.vgf2p8affineqb.256
+    27, // llvm.x86.vgf2p8affineqb.512
     1, // llvm.x86.vgf2p8mulb.128
     1, // llvm.x86.vgf2p8mulb.256
     1, // llvm.x86.vgf2p8mulb.512
@@ -15703,7 +16277,7 @@
     3, // llvm.x86.wrssq
     3, // llvm.x86.wrussd
     3, // llvm.x86.wrussq
-    3, // llvm.x86.xabort
+    101, // llvm.x86.xabort
     3, // llvm.x86.xbegin
     3, // llvm.x86.xend
     3, // llvm.x86.xgetbv
@@ -15713,10 +16287,10 @@
     1, // llvm.x86.xop.vfrcz.ps.256
     1, // llvm.x86.xop.vfrcz.sd
     1, // llvm.x86.xop.vfrcz.ss
-    1, // llvm.x86.xop.vpermil2pd
-    1, // llvm.x86.xop.vpermil2pd.256
-    1, // llvm.x86.xop.vpermil2ps
-    1, // llvm.x86.xop.vpermil2ps.256
+    125, // llvm.x86.xop.vpermil2pd
+    125, // llvm.x86.xop.vpermil2pd.256
+    125, // llvm.x86.xop.vpermil2ps
+    125, // llvm.x86.xop.vpermil2ps.256
     1, // llvm.x86.xop.vphaddbd
     1, // llvm.x86.xop.vphaddbq
     1, // llvm.x86.xop.vphaddbw
@@ -15769,60 +16343,60 @@
     3, // llvm.x86.xtest
     1, // llvm.xcore.bitrev
     3, // llvm.xcore.checkevent
-    37, // llvm.xcore.chkct
+    154, // llvm.xcore.chkct
     3, // llvm.xcore.clre
-    37, // llvm.xcore.clrpt
+    154, // llvm.xcore.clrpt
     3, // llvm.xcore.clrsr
     1, // llvm.xcore.crc32
     1, // llvm.xcore.crc8
-    37, // llvm.xcore.edu
-    37, // llvm.xcore.eeu
-    37, // llvm.xcore.endin
-    37, // llvm.xcore.freer
+    154, // llvm.xcore.edu
+    154, // llvm.xcore.eeu
+    154, // llvm.xcore.endin
+    154, // llvm.xcore.freer
     3, // llvm.xcore.geted
     3, // llvm.xcore.getet
     1, // llvm.xcore.getid
     3, // llvm.xcore.getps
     3, // llvm.xcore.getr
-    37, // llvm.xcore.getst
-    37, // llvm.xcore.getts
-    37, // llvm.xcore.in
-    37, // llvm.xcore.inct
-    37, // llvm.xcore.initcp
-    37, // llvm.xcore.initdp
-    37, // llvm.xcore.initlr
-    37, // llvm.xcore.initpc
-    37, // llvm.xcore.initsp
-    37, // llvm.xcore.inshr
-    37, // llvm.xcore.int
-    37, // llvm.xcore.mjoin
-    37, // llvm.xcore.msync
-    37, // llvm.xcore.out
-    37, // llvm.xcore.outct
-    37, // llvm.xcore.outshr
-    37, // llvm.xcore.outt
-    37, // llvm.xcore.peek
-    37, // llvm.xcore.setc
-    55, // llvm.xcore.setclk
-    37, // llvm.xcore.setd
-    37, // llvm.xcore.setev
+    154, // llvm.xcore.getst
+    154, // llvm.xcore.getts
+    154, // llvm.xcore.in
+    154, // llvm.xcore.inct
+    154, // llvm.xcore.initcp
+    154, // llvm.xcore.initdp
+    154, // llvm.xcore.initlr
+    154, // llvm.xcore.initpc
+    154, // llvm.xcore.initsp
+    154, // llvm.xcore.inshr
+    154, // llvm.xcore.int
+    154, // llvm.xcore.mjoin
+    154, // llvm.xcore.msync
+    154, // llvm.xcore.out
+    154, // llvm.xcore.outct
+    154, // llvm.xcore.outshr
+    154, // llvm.xcore.outt
+    154, // llvm.xcore.peek
+    154, // llvm.xcore.setc
+    155, // llvm.xcore.setclk
+    154, // llvm.xcore.setd
+    154, // llvm.xcore.setev
     3, // llvm.xcore.setps
-    37, // llvm.xcore.setpsc
-    37, // llvm.xcore.setpt
-    55, // llvm.xcore.setrdy
+    154, // llvm.xcore.setpsc
+    154, // llvm.xcore.setpt
+    155, // llvm.xcore.setrdy
     3, // llvm.xcore.setsr
-    37, // llvm.xcore.settw
-    37, // llvm.xcore.setv
+    154, // llvm.xcore.settw
+    154, // llvm.xcore.setv
     1, // llvm.xcore.sext
     3, // llvm.xcore.ssync
-    37, // llvm.xcore.syncr
-    37, // llvm.xcore.testct
-    37, // llvm.xcore.testwct
-    16, // llvm.xcore.waitevent
+    154, // llvm.xcore.syncr
+    154, // llvm.xcore.testct
+    154, // llvm.xcore.testwct
+    18, // llvm.xcore.waitevent
     1, // llvm.xcore.zext
   };
 
-  AttributeList AS[5];
+  AttributeList AS[8];
   unsigned NumAttrs = 0;
   if (id != 0) {
     switch(IntrinsicsToAttributesMap[id - 1]) {
@@ -15833,7 +16407,7 @@
       NumAttrs = 1;
       break;
       }
-    case 37: {
+    case 154: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
@@ -15841,7 +16415,7 @@
       NumAttrs = 2;
       break;
       }
-    case 55: {
+    case 155: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
@@ -15851,6 +16425,118 @@
       NumAttrs = 3;
       break;
       }
+    case 60: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[4] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[5] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[6] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[7] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 8;
+      break;
+      }
+    case 101: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 115: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 119: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 118: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[4] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[5] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 6;
+      break;
+      }
+    case 113: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[4] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[5] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[6] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 7;
+      break;
+      }
+    case 116: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[4] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[5] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 6;
+      break;
+      }
+    case 117: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
     case 6: {
       const Attribute::AttrKind AttrParam2[]= {Attribute::WriteOnly};
       AS[0] = AttributeList::get(C, 2, AttrParam2);
@@ -15859,21 +16545,115 @@
       NumAttrs = 2;
       break;
       }
-    case 26: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOrArgMemOnly};
+    case 132: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
       AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 2;
       break;
       }
-    case 22: {
+    case 32: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 67: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 52: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 68: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 53: {
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 69: {
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 104: {
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 70: {
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 71: {
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 38: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOrArgMemOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 29: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 18: {
+    case 23: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
@@ -15889,7 +16669,7 @@
       NumAttrs = 2;
       break;
       }
-    case 25: {
+    case 130: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
@@ -15897,7 +16677,7 @@
       NumAttrs = 2;
       break;
       }
-    case 23: {
+    case 129: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
@@ -15907,25 +16687,85 @@
       NumAttrs = 3;
       break;
       }
-    case 24: {
+    case 34: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 36: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 35: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
       AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 51: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 136: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 4, AttrParam4);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
       AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 3;
       break;
       }
-    case 20: {
-      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 2, AttrParam2);
+    case 137: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
       break;
       }
-    case 17: {
+    case 25: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 21: {
       const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 2, AttrParam2);
       const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture};
@@ -15935,7 +16775,17 @@
       NumAttrs = 3;
       break;
       }
-    case 19: {
+    case 24: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 46: {
       const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 3, AttrParam3);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
@@ -15943,7 +16793,15 @@
       NumAttrs = 2;
       break;
       }
-    case 31: {
+    case 33: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 47: {
       const Attribute::AttrKind AttrParam4[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 4, AttrParam4);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
@@ -15951,7 +16809,15 @@
       NumAttrs = 2;
       break;
       }
-    case 32: {
+    case 127: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 48: {
       const Attribute::AttrKind AttrParam5[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 5, AttrParam5);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
@@ -15959,7 +16825,7 @@
       NumAttrs = 2;
       break;
       }
-    case 33: {
+    case 49: {
       const Attribute::AttrKind AttrParam6[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 6, AttrParam6);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
@@ -15967,19 +16833,55 @@
       NumAttrs = 2;
       break;
       }
-    case 15: {
+    case 16: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 34: {
+    case 64: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 63: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 22: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 50: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 29: {
+    case 44: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
@@ -15987,7 +16889,7 @@
       NumAttrs = 2;
       break;
       }
-    case 30: {
+    case 45: {
       const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
       AS[0] = AttributeList::get(C, 2, AttrParam2);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
@@ -15995,13 +16897,121 @@
       NumAttrs = 2;
       break;
       }
-    case 45: {
+    case 92: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 93: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 94: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 95: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 128: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 100: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 55: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 106: {
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 108: {
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 110: {
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind AttrParam10[]= {Attribute::ImmArg};
+      AS[4] = AttributeList::get(C, 10, AttrParam10);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[5] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 6;
+      break;
+      }
+    case 135: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 44: {
+    case 134: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
@@ -16009,19 +17019,313 @@
       NumAttrs = 2;
       break;
       }
-    case 16: {
+    case 18: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
+    case 131: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 82: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 83: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 86: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 84: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 72: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 85: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 73: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 74: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind AttrParam10[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 10, AttrParam10);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 75: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind AttrParam10[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 10, AttrParam10);
+      const Attribute::AttrKind AttrParam11[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 11, AttrParam11);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 76: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam10[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 10, AttrParam10);
+      const Attribute::AttrKind AttrParam11[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 11, AttrParam11);
+      const Attribute::AttrKind AttrParam12[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 12, AttrParam12);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 77: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam11[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 11, AttrParam11);
+      const Attribute::AttrKind AttrParam12[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 12, AttrParam12);
+      const Attribute::AttrKind AttrParam13[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 13, AttrParam13);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 87: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam12[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 12, AttrParam12);
+      const Attribute::AttrKind AttrParam13[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 13, AttrParam13);
+      const Attribute::AttrKind AttrParam14[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 14, AttrParam14);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 89: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam13[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 13, AttrParam13);
+      const Attribute::AttrKind AttrParam14[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 14, AttrParam14);
+      const Attribute::AttrKind AttrParam15[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 15, AttrParam15);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 88: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam14[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 14, AttrParam14);
+      const Attribute::AttrKind AttrParam15[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 15, AttrParam15);
+      const Attribute::AttrKind AttrParam16[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 16, AttrParam16);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 90: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam15[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 15, AttrParam15);
+      const Attribute::AttrKind AttrParam16[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 16, AttrParam16);
+      const Attribute::AttrKind AttrParam17[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 17, AttrParam17);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 91: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam16[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 16, AttrParam16);
+      const Attribute::AttrKind AttrParam17[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 17, AttrParam17);
+      const Attribute::AttrKind AttrParam18[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 18, AttrParam18);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 30: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 17: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 99: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 54: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 105: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 107: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 109: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[4] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[5] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 6;
+      break;
+      }
     case 2: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 42: {
+    case 133: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
@@ -16055,6 +17359,26 @@
       NumAttrs = 3;
       break;
       }
+    case 31: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 102: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::InaccessibleMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 114: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
     case 1: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
@@ -16069,7 +17393,7 @@
       NumAttrs = 2;
       break;
       }
-    case 27: {
+    case 42: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::Returned};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
@@ -16087,13 +17411,197 @@
       NumAttrs = 3;
       break;
       }
-    case 52: {
+    case 20: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 120: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 123: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 81: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 78: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 79: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 80: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam7[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 7, AttrParam7);
+      const Attribute::AttrKind AttrParam8[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 8, AttrParam8);
+      const Attribute::AttrKind AttrParam9[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 9, AttrParam9);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 40: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 39: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 150: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 27: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 124: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 148: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 151: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 125: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 149: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 147: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 152: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 143: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 50: {
+    case 141: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOrArgMemOnly};
@@ -16101,7 +17609,7 @@
       NumAttrs = 2;
       break;
       }
-    case 49: {
+    case 140: {
       const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
@@ -16109,30 +17617,42 @@
       NumAttrs = 2;
       break;
       }
-    case 53: {
+    case 144: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
       const Attribute::AttrKind AttrParam3[]= {Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      AS[2] = AttributeList::get(C, 3, AttrParam3);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::InaccessibleMemOrArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
       break;
       }
-    case 41: {
+    case 126: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 21: {
+    case 153: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 26: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::InaccessibleMemOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 39: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
+    case 103: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadOnly,Attribute::InaccessibleMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
       break;
       }
     case 4: {
@@ -16141,45 +17661,157 @@
       NumAttrs = 1;
       break;
       }
-    case 38: {
+    case 14: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 37: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadNone};
+      AS[3] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 4;
+      break;
+      }
+    case 41: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 66: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 62: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 35: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+    case 96: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
       AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ArgMemOnly};
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent};
       AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 2;
       break;
       }
-    case 43: {
+    case 56: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 58: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::InaccessibleMemOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 36: {
+    case 59: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::WriteOnly,Attribute::InaccessibleMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 57: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 14: {
+    case 61: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 97: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 65: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 111: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
+      AS[4] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 5;
+      break;
+      }
+    case 98: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind AttrParam6[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 112: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::Speculatable,Attribute::ReadNone};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 15: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoReturn};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 28: {
+    case 43: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoReturn,Attribute::Cold};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 46: {
+    case 28: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
@@ -16191,34 +17823,64 @@
       NumAttrs = 1;
       break;
       }
-    case 48: {
+    case 139: {
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate,Attribute::WriteOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 51: {
+    case 142: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
       const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
       break;
       }
     case 7: {
       return AttributeList();
       }
-    case 40: {
+    case 19: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam4[]= {Attribute::ImmArg};
+      AS[2] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind AttrParam5[]= {Attribute::ImmArg};
+      AS[3] = AttributeList::get(C, 5, AttrParam5);
+      NumAttrs = 4;
+      break;
+      }
+    case 121: {
       const Attribute::AttrKind Atts[] = {Attribute::ReadNone};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 54: {
+    case 122: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 145: {
       const Attribute::AttrKind Atts[] = {Attribute::NoReturn};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
       break;
       }
-    case 47: {
+    case 146: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ImmArg};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoReturn};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 138: {
       const Attribute::AttrKind Atts[] = {Attribute::NoReturn,Attribute::WriteOnly};
       AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
       NumAttrs = 1;
@@ -16283,101 +17945,119 @@
   'x', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
   'd', 'g', 'c', 'n', '_', 'd', 's', '_', 'f', 'm', 'i', 'n', 'f', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
-  '_', 'd', 's', '_', 'p', 'e', 'r', 'm', 'u', 't', 'e', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd',
-  's', '_', 's', 'w', 'i', 'z', 'z', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'f', 'd', 'o',
-  't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 'f', 'm', 'e', 'd', '3', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'f', 'm',
-  'u', 'l', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'g', 'r', 'o',
-  'u', 'p', 's', 't', 'a', 't', 'i', 'c', 's', 'i', 'z', 'e', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  'i', 'm', 'p', 'l', 'i', 'c', 'i', 't', '_', 'b', 'u', 'f', 'f', 'e', 'r',
-  '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'm', 'p', 'l', 'i', 'c', 'i', 't',
-  'a', 'r', 'g', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r',
-  'p', '_', 'm', 'o', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_',
-  'p', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_', 'p', '1', '_',
-  'f', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_', 'p', '2',
+  '_', 'd', 's', '_', 'g', 'w', 's', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
-  'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_', 'p', '2', '_', 'f', '1',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
-  'g', 'c', 'n', '_', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g',
-  'm', 'e', 'n', 't', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'l', 'e', 'r', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
-  'c', 'n', '_', 'm', 'b', 'c', 'n', 't', '_', 'h', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm',
-  'b', 'c', 'n', 't', '_', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 'q', 's', 'a', 'd',
-  '_', 'p', 'k', '_', 'u', '1', '6', '_', 'u', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 'q',
-  's', 'a', 'd', '_', 'u', '3', '2', '_', 'u', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 's',
-  'a', 'd', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'q', 's', 'a', 'd', '_', 'p', 'k',
-  '_', 'u', '1', '6', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'q', 'u', 'e', 'u', 'e',
-  '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'm', 'd', 'g', 'c', 'n', '_', 'r', 'c', 'p', '_', 'l', 'e', 'g', 'a',
-  'c', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 'r', 'e', 'a', 'd', 'f', 'i', 'r', 's', 't', 'l',
-  'a', 'n', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'm', 'd', 'g', 'c', 'n', '_', 'r', 'e', 'a', 'd', 'l', 'a', 'n', 'e', '\000',
+  'c', 'n', '_', 'd', 's', '_', 'g', 'w', 's', '_', 'i', 'n', 'i', 't', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 'r', 's', 'q', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  's', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'd',
-  'c', 'a', 'c', 'h', 'e', '_', 'i', 'n', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'd',
-  'c', 'a', 'c', 'h', 'e', '_', 'i', 'n', 'v', '_', 'v', 'o', 'l', '\000', '_',
+  'n', '_', 'd', 's', '_', 'g', 'w', 's', '_', 's', 'e', 'm', 'a', '_', 'b',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
+  'g', 'c', 'n', '_', 'd', 's', '_', 'g', 'w', 's', '_', 's', 'e', 'm', 'a',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'd', 's', '_', 'g', 'w', 's', '_', 's', 'e', 'm',
+  'a', '_', 'r', 'e', 'l', 'e', 'a', 's', 'e', '_', 'a', 'l', 'l', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
-  '_', 's', '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  's', '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '_', 'v', 'o', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
-  'c', 'n', '_', 's', '_', 'd', 'e', 'c', 'p', 'e', 'r', 'f', 'l', 'e', 'v',
-  'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 's', '_', 'g', 'e', 't', 'p', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  's', '_', 'g', 'e', 't', 'r', 'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'i', 'n',
-  'c', 'p', 'e', 'r', 'f', 'l', 'e', 'v', 'e', 'l', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
-  'm', 'e', 'm', 'r', 'e', 'a', 'l', 't', 'i', 'm', 'e', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's',
-  '_', 'm', 'e', 'm', 't', 'i', 'm', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'e',
-  'n', 'd', 'm', 's', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'e', 'n', 'd', 'm',
-  's', 'g', 'h', 'a', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'l', 'e', 'e',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
-  'g', 'c', 'n', '_', 's', '_', 'w', 'a', 'i', 't', 'c', 'n', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
-  '_', 's', 'a', 'd', '_', 'h', 'i', '_', 'u', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'a',
-  'd', '_', 'u', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'a', 'd', '_', 'u', '8', '\000',
+  '_', 'd', 's', '_', 'g', 'w', 's', '_', 's', 'e', 'm', 'a', '_', 'v', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 's', 'd', 'o', 't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'd', 'o', 't', '4',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
-  'c', 'n', '_', 's', 'd', 'o', 't', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'u', 'd', 'o', 't',
+  'n', '_', 'd', 's', '_', 'p', 'e', 'r', 'm', 'u', 't', 'e', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
+  'd', 's', '_', 's', 'w', 'i', 'z', 'z', 'l', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'f', 'd',
+  'o', 't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'm', 'd', 'g', 'c', 'n', '_', 'f', 'm', 'e', 'd', '3', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'f',
+  'm', 'u', 'l', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'g', 'r',
+  'o', 'u', 'p', 's', 't', 'a', 't', 'i', 'c', 's', 'i', 'z', 'e', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 'i', 'm', 'p', 'l', 'i', 'c', 'i', 't', '_', 'b', 'u', 'f', 'f', 'e',
+  'r', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'm', 'p', 'l', 'i', 'c', 'i',
+  't', 'a', 'r', 'g', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e',
+  'r', 'p', '_', 'm', 'o', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p',
+  '_', 'p', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_', 'p', '1',
+  '_', 'f', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_', 'p',
   '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
-  'g', 'c', 'n', '_', 'u', 'd', 'o', 't', '4', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'u', 'd', 'o',
-  't', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 'w', 'a', 'v', 'e', '_', 'b', 'a', 'r', 'r', 'i',
-  'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_', 'p', '2', '_', 'f',
+  '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e',
+  'g', 'm', 'e', 'n', 't', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'l', 'e', 'r',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
+  'g', 'c', 'n', '_', 'm', 'b', 'c', 'n', 't', '_', 'h', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
+  'm', 'b', 'c', 'n', 't', '_', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 'q', 's', 'a',
+  'd', '_', 'p', 'k', '_', 'u', '1', '6', '_', 'u', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm',
+  'q', 's', 'a', 'd', '_', 'u', '3', '2', '_', 'u', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm',
+  's', 'a', 'd', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'q', 's', 'a', 'd', '_', 'p',
+  'k', '_', 'u', '1', '6', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'q', 'u', 'e', 'u',
+  'e', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'r', 'c', 'p', '_', 'l', 'e', 'g',
+  'a', 'c', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'm', 'd', 'g', 'c', 'n', '_', 'r', 'e', 'a', 'd', 'f', 'i', 'r', 's', 't',
+  'l', 'a', 'n', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'm', 'd', 'g', 'c', 'n', '_', 'r', 'e', 'a', 'd', 'l', 'a', 'n', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
+  'c', 'n', '_', 'r', 's', 'q', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 's', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
+  'd', 'c', 'a', 'c', 'h', 'e', '_', 'i', 'n', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
+  'd', 'c', 'a', 'c', 'h', 'e', '_', 'i', 'n', 'v', '_', 'v', 'o', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
+  'n', '_', 's', '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 's', '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '_', 'v', 'o',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
+  'g', 'c', 'n', '_', 's', '_', 'd', 'e', 'c', 'p', 'e', 'r', 'f', 'l', 'e',
+  'v', 'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'g', 'e', 't', '_', 'w', 'a', 'v',
+  'e', 'i', 'd', '_', 'i', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
+  'g', 'c', 'n', '_', 's', '_', 'g', 'e', 't', 'p', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's',
+  '_', 'g', 'e', 't', 'r', 'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'i', 'n', 'c',
+  'p', 'e', 'r', 'f', 'l', 'e', 'v', 'e', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'm',
+  'e', 'm', 'r', 'e', 'a', 'l', 't', 'i', 'm', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
+  'm', 'e', 'm', 't', 'i', 'm', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'e', 'n',
+  'd', 'm', 's', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'e', 'n', 'd', 'm', 's',
+  'g', 'h', 'a', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'l', 'e', 'e', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
+  'c', 'n', '_', 's', '_', 'w', 'a', 'i', 't', 'c', 'n', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
+  's', 'a', 'd', '_', 'h', 'i', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'a', 'd',
+  '_', 'u', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'a', 'd', '_', 'u', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 's', 'd', 'o', 't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'd', 'o', 't', '4', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
+  'n', '_', 's', 'd', 'o', 't', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'u', 'd', 'o', 't', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
+  'c', 'n', '_', 'u', 'd', 'o', 't', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'u', 'd', 'o', 't',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
+  'g', 'c', 'n', '_', 'w', 'a', 'v', 'e', '_', 'b', 'a', 'r', 'r', 'i', 'e',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
+  'g', 'c', 'n', '_', 'w', 'a', 'v', 'e', 'f', 'r', 'o', 'n', 't', 's', 'i',
+  'z', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
   'd', 'g', 'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_',
   'i', 'd', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'a', 'm', 'd', 'g', 'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u',
@@ -16388,8329 +18068,8367 @@
   'e', 'l', 'a', 'n', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
   '_', 'a', 'r', 'm', '_', 'c', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'c', 'd', 'p', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'g', 'e', 't',
-  '_', 'f', 'p', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd',
-  'c', '2', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 'l', 'd', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'c', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'c', 'r', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm',
-  'r', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 'm', 'r', 'c', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 'd', 'd', '1',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 'q', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 's', 'x', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'a', 'x', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q',
-  's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'u', 'b', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
-  'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 's', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'a', 's', 'x', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
-  'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 's', 'e', 't', '_', 'f', 'p', 's', 'c', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 'd',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'c', 'm', 's',
+  'e', '_', 'T', 'T', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'c', 'm', 's', 'e', '_', 'T', 'T', 'A', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'c', 'm', 's',
+  'e', '_', 'T', 'T', 'A', 'T', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 'c', 'm', 's', 'e', '_', 'T', 'T', 'T', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'g',
+  'e', 't', '_', 'f', 'p', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  'l', 'd', 'c', '2', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'c', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'c', 'r',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'm', 'r', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'm', 'r', 'c', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 'd',
   'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 'h', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 's', 'x', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
-  'h', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 'h', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 's', 'u',
-  'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 's', 'm', 'l', 'a', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'b', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
-  'm', 'l', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'd', 'x', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'l',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 's', 'm', 'l', 'a', 'l', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 't', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
-  'm', 'l', 'a', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'w', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a',
-  'w', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 's', 'm', 'l', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 's', 'd', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm',
-  'l', 's', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 'm', 'l', 's', 'l', 'd', 'x', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'a',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 's', 'm', 'u', 'a', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'b', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm',
-  'u', 'l', 'b', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 't', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 't',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 's', 'm', 'u', 'l', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'w', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm',
-  'u', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 'm', 'u', 's', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's',
-  'a', 't', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'u', 'b', '1', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
-  's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 't', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 't', 'c', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 't', 'c', '2',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 's', 't', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 's', 'x', 't', 'a', 'b', '1', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'x', 't',
-  'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 'u', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'a', 'd', 'd', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u',
-  'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 'u', 'h', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 'a', 'd', 'd',
+  'r', 'm', '_', 'q', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 's', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'a',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'q', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'u', 'b',
   '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 'u', 'h', 'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 's', 'a', 'x', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 's', 'u',
+  '_', 's', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'a', 'd', 'd', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'a', 's',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 's', 'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 's', 'e', 't', '_', 'f', 'p', 's', 'c', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h',
+  'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 'd', 'd', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 's',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 's', 'h', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 'h', 's', 'u', 'b', '1', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h',
+  's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'b', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'b',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 's', 'm', 'l', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'd', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l',
+  'a', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 's', 'm', 'l', 'a', 'l', 'd', 'x', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 't',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 's', 'm', 'l', 'a', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'w', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm',
+  'l', 'a', 'w', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 's', 'm', 'l', 's', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 's', 'd', 'x',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  's', 'm', 'l', 's', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 's', 'l', 'd', 'x', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm',
+  'u', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 's', 'm', 'u', 'a', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'b', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  's', 'm', 'u', 'l', 'b', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 't', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u',
+  'l', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 's', 'm', 'u', 'l', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'w', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  's', 'm', 'u', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 's', 'd', 'x', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  's', 's', 'a', 't', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 's', 'a', 'x', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'u', 'b', '1',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 's', 's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 't', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 't', 'c', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 't',
+  'c', '2', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 's', 't', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'x', 't', 'a', 'b', '1', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
+  'x', 't', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 'u', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'a', 'd', 'd',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'u', 'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 'u', 'h', 'a', 'd', 'd', '1', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 'a',
+  'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 'u', 'h', 'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 's', 'a', 'x', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h',
+  's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 'u', 'h', 's', 'u', 'b', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 'd',
+  'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 'u', 'q', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 's', 'x', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u',
+  'q', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'u', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 's', 'u',
+  'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 'u', 's', 'a', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 'd', 'a', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 'u', 's', 'a', 't', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'u',
   'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 'u', 'h', 's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 'd', 'd', '1',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 'u', 'q', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 's', 'x', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 's',
-  'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 'u', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 's', 'u', 'b', '8',
+  'r', 'm', '_', 'u', 's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'x', 't', 'a', 'b', '1', '6',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  'u', 's', 'a', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 'd', 'a', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  'u', 's', 'a', 't', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 'x', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'u', 'b', '1',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 'u', 's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'u', 'x', 't', 'a', 'b', '1', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'x',
-  't', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'b', 'p', 'f', '_', 'l', 'o', 'a', 'd', '_', 'b', 'y', 't', 'e', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'f', '_', 'l', 'o',
-  'a', 'd', '_', 'h', 'a', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'b', 'p', 'f', '_', 'l', 'o', 'a', 'd', '_', 'w', 'o', 'r',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'f',
-  '_', 'p', 's', 'e', 'u', 'd', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a',
-  'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'b', 's', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'a', 'b', 's', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd',
-  'd', 'h', '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'u', 'x', 't', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'b', 'p', 'f', '_', 'l', 'o', 'a', 'd', '_', 'b', 'y', 't', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'f', '_',
+  'l', 'o', 'a', 'd', '_', 'h', 'a', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'b', 'p', 'f', '_', 'l', 'o', 'a', 'd', '_', 'w',
+  'o', 'r', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b',
+  'p', 'f', '_', 'p', 's', 'e', 'u', 'd', 'o', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'h', 'l', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'l', 'h',
+  '_', 'a', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'b', 's', 'p',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'b', 's', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'h', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_',
+  'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h',
+  '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd',
+  'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a',
+  't', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h',
+  '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't',
   '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_',
-  'h', '1', '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_',
-  'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h',
-  '1', '6', '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', '1', '6', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd',
+  'd', 'h', '_', 'l', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'l',
+  '_', 'a', 'd', 'd', 'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_', 'h',
   'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
   'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'l', '1',
-  '6', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h',
-  '_', 'l', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a',
-  'd', 'd', 'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_', 'h', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'l', '1', '6', '_',
-  's', 'a', 't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd',
-  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'p', 's', 'a', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'a', 'd', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'a', 'd', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'n', 'd', 'i', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'a', 'n', 'd', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'a', 's', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 's',
-  'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b', 'i', 'n',
-  'e', '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b',
-  'i', 'n', 'e', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o',
-  'm', 'b', 'i', 'n', 'e', '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '6', '_', 's', 'a', 't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'c', 'o', 'm', 'b', 'i', 'n', 'e', '_', 'l', 'l', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'i', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'm', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a',
-  'x', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a', 'x', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'm', 'a', 'x', 'u', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n', 'u', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'm', 'i', 'n', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'n', 'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'e', 'g', 'p',
+  'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'p',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'e', 'g', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'n', 'o', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'o', 'r', 'i', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'o', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'p', 'x', 'o', 'r',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'r', 'o', 'u', 'n', 'd', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 's', 'a', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
-  'a', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', 'u', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', 'u', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
-  'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'l', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'l',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1',
-  '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h',
-  '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't',
-  '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_',
-  'h', '1', '6', '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_',
-  'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'l',
-  '1', '6', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b',
-  'h', '_', 'l', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  's', 'u', 'b', 'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_', 'h', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'l', '1', '6',
-  '_', 's', 'a', 't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
-  'u', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'r', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 's', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 's', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  's', 'v', 'a', 'v', 'g', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
-  'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v',
-  's', 'u', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 's', 'u',
-  'b', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 's', 'u', 'b',
-  'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'w', 'i', 'z', '\000',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'p', 's', 'a', 't', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 's', 'x', 't', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 's', 'x', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'x',
-  't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', '\000', '_', '_',
+  'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 's', 'a', 't', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 't', 'f', 'r', 'c', 'r', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 't', 'f', 'r', 'i', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't',
-  'f', 'r', 'i', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'p', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 't', 'f', 'r', 'r', 'c', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 't', 'f', 'r', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'a', 'b', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'b', 's',
-  'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'b', 's',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'b', 's', 'w', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'b', '_', 'm',
-  'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'h', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i',
+  '_', 'A', '2', '_', 'a', 'd', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd',
-  'd', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'h', 'c', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'h', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'a', 'v', 'g', 'u', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'a', 'v', 'g', 'u', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
-  'v', 'g', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g',
-  'u', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'w', 'c', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'w', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', 'u', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'e', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'c', 'm', 'p', 'w', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'v', 'c', 'm', 'p', 'w', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'c', 'm', 'p', 'w', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'c', 'o', 'n', 'j', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'm', 'i', 'n', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'm', 'i', 'n', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v',
-  'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g', 'h',
-  'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g', 'h',
+  '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'n', 'd', 'i',
   'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g', 'w', 'c', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g', 'w', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u', 'b', '\000', '_', '_',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'n', 'd', 'p', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u', 'b', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', '_', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'b', '_',
-  'm', 'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'h', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', '\000', '_', '_', 'b', 'u',
+  '_', 'A', '2', '_', 'a', 's', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'a', 's', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b',
+  'i', 'n', 'e', '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o',
+  'm', 'b', 'i', 'n', 'e', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'c', 'o', 'm', 'b', 'i', 'n', 'e', '_', 'l', 'h', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i',
+  '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', '_', 'l', 'l', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'i', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'm', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'm', 'a', 'x', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a', 'x', 'u',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a', 'x', 'u', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm',
+  'i', 'n', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n', 'u', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n', 'u', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'n', 'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'e',
+  'g', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'e', 'g', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 'n', 'o', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'o', 'r', 'i', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'o', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'p', 'x',
+  'o', 'r', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'r', 'o', 'u', 'n', 'd',
+  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 's', 'a', 't', 'b', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 's', 'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's',
-  'u', 'b', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'x', 'o', 'r', '\000',
+  '_', 's', 'a', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't',
+  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', 'u', 'h', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'x', 'o', 'r', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'z', 'x', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'z', 'x',
-  't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'a', 'd', 'd', 'p', '_', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '4', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '4', '_', 'a', 'n', 'd', 'n', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'b', 'i', 't', 's', 'p', 'l', 'i', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'b', 'i', 't', 's', 'p', 'l', 'i', 't', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'b', 'o', 'u', 'n', 'd', 's', 'c', 'h', 'e', 'c', 'k', '\000', '_', '_',
+  'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6',
+  '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_',
+  'h', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u',
+  'b', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's',
+  'a', 't', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b',
+  'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's', 'a',
+  't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h',
+  '_', 'l', '1', '6', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
+  'u', 'b', 'h', '_', 'l', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'c', 'm', 'p', 'b', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'c', 'm', 'p', 'b', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c',
-  'm', 'p', 'b', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm',
-  'p', 'b', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p',
-  'b', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p',
-  'h', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'e',
-  'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'g', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'g', 't', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'g', 't', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'g', 't', 'u', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '4', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'i', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '4', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'i', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'r',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'r', 'o', 'u', 'n', 'd', '_',
+  '2', '_', 's', 'u', 'b', 'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_',
+  'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'l',
+  '1', '6', '_', 's', 'a', 't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 's', 'u', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b',
   'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'r', 'o', 'u', 'n', 'd',
-  '_', 'r', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'm', 'o', 'd', 'w', 'r',
-  'a', 'p', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'o', 'r', 'n', '\000', '_',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '4', '_', 'o', 'r', 'n', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'r', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r',
-  'c', 'm', 'p', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'c',
-  'm', 'p', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'c', 'm',
-  'p', 'n', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'o', 'u',
-  'n', 'd', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'o', 'u',
-  'n', 'd', '_', 'r', 'i', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r', '_', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '4', '_', 's', 'u', 'b', 'p', '_', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '4', '_', 't', 'f', 'r', 'c', 'p', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 't', 'f', 'r', 'p', 'c', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 't',
-  'l', 'b', 'm', 'a', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
-  'c', 'm', 'p', 'b', 'e', 'q', '_', 'a', 'n', 'y', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'v', 'c', 'm', 'p', 'h', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'u', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '4', '_', 'v', 'c', 'm', 'p', 'w', 'e', 'q', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '4', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '4', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'u', 'i', '\000', '_', '_',
+  'N', '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', 's', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '4', '_', 'v', 'r', 'm', 'a', 'x', 'h', '\000', '_', '_', 'b', 'u',
+  '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 's', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'v', 'r', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  '2', '_', 's', 'v', 'a', 'v', 'g', 'h', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 's', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  's', 'v', 's', 'u', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v',
+  's', 'u', 'b', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 's',
+  'u', 'b', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'w', 'i',
+  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'x', 't', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 's', 'x', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  's', 'x', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'c', 'r', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 't', 'f', 'r', 'i', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 't', 'f', 'r', 'i', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f',
+  'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'p', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'r', 'c', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 't', 'f', 'r', 's', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'a', 'b', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
+  'b', 's', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
+  'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'b', 's', 'w',
+  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'b',
+  '_', 'm', 'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'h', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
+  'a', 'd', 'd', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v',
+  'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'h', 'c',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'h', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'b', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'v', 'a', 'v', 'g', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
+  'v', 'g', 'u', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v',
+  'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'w', 'c',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'w', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', 'u', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'e', 'q', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'u', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 'c', 'm', 'p', 'w', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'c', 'o', 'n', 'j', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm',
+  'a', 'x', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm',
+  'i', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'm', 'i', 'n', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n',
+  'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v',
+  'g', 'h', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v',
+  'g', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g', 'w', 'c',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v', 'g', 'w', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u', 'b', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 's', 'a', 'd', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b',
+  'b', '_', 'm', 'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u',
+  'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'h', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 's', 'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'v', 's', 'u', 'b', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'x', 'o',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'x', 'o', 'r', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'z', 'x', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'z', 'x', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'a', 'd', 'd', 'p',
+  '_', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'a', 'n', 'd', 'n', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '4', '_', 'a', 'n', 'd', 'n', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '4', '_', 'b', 'i', 't', 's', 'p', 'l', 'i', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '4', '_', 'b', 'i', 't', 's', 'p', 'l', 'i', 't', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'b', 'o', 'u', 'n', 'd', 's', 'c', 'h', 'e', 'c', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'e', 'q', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'e', 'q', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'v', 'r', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '_', 'c', 'm', 'p', 'b', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'v', 'r', 'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'c', 'm', 'p', 'b', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c',
+  'm', 'p', 'b', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c',
+  'm', 'p', 'h', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p',
+  'h', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h',
+  'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'g', 't',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'g', 't', 'u',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'g', 't', 'u', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'i',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e',
+  'i', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'o', 'm', 'b', 'i', 'n',
+  'e', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'r', 'o', 'u', 'n',
+  'd', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'r', 'o', 'u',
+  'n', 'd', '_', 'r', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'm', 'o', 'd',
+  'w', 'r', 'a', 'p', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'o', 'r', 'n',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'o', 'r', 'n', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'r', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
+  '_', 'r', 'c', 'm', 'p', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
+  'r', 'c', 'm', 'p', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r',
+  'c', 'm', 'p', 'n', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 'r', 'i', '_', 's', 'a', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r', '_', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 's', 'u', 'b', 'p', '_', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '4', '_', 't', 'f', 'r', 'c', 'p', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 't', 'f', 'r', 'p', 'c', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
+  '_', 't', 'l', 'b', 'm', 'a', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
+  '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', '_', 'a', 'n', 'y', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'v', 'c', 'm', 'p', 'b', 'g', 't', 'u', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'h', 'e', 'q', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'u', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'w', 'e', 'q', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '4', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'u', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'a', 'x', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'v', 'r', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'v', 'r', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '4', '_', 'v', 'r', 'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
+  'v', 'r', 'm', 'i', 'n', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r',
-  'm', 'i', 'n', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm',
+  'i', 'n', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i',
-  'n', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n',
-  'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '5', '_', 'A', 'C', 'S', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '5', '_', 'v', 'a', 'd', 'd', 'h', 'u', 'b', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '6', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', '_', 'n', 'o', 't', 'a', 'n',
-  'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '6', '_', 'v', 'm', 'i', 'n', 'u', 'b', '_',
-  'R', 'd', 'P', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'l', 'l', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '2', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
-  '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'n', 'y',
+  'n', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '5', '_', 'A', 'C', 'S', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '5', '_', 'v', 'a', 'd', 'd', 'h', 'u', 'b', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '6', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', '_', 'n', 'o', 't',
+  'a', 'n', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '6', '_', 'v', 'm', 'i', 'n', 'u',
+  'b', '_', 'R', 'd', 'P', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'l', 'l',
   '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'b', 'i', 't', 's', 'c', 'l', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '2', '_', 'b', 'i', 't', 's', 'c', 'l', 'r', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '2', '_', 'b', 'i', 't', 's', 's', 'e', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '2', '_', 'c', 'm', 'p', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
-  '_', 'c', 'm', 'p', 'e', 'q', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c',
-  'm', 'p', 'g', 'e', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p',
-  'g', 'e', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g',
+  'C', '2', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a',
+  'n', 'y', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'b', 'i', 't', 's', 'c',
+  'l', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'b', 'i', 't', 's', 'c', 'l',
+  'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'b', 'i', 't', 's', 's', 'e',
   't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
-  '2', '_', 'c', 'm', 'p', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
-  '_', 'c', 'm', 'p', 'g', 't', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_',
-  'c', 'm', 'p', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p',
-  'l', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
-  '_', 'm', 'u', 'x', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u',
-  'x', 'i', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x', 'r', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '2', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
-  '2', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'o', 'r', 'n', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '2', '_', 'p', 'x', 'f', 'e', 'r', '_', 'm', 'a', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '2', '_', 't', 'f', 'r', 'p', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'C', '2', '_', 't', 'f', 'r', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
-  '_', 'v', 'i', 't', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_',
-  'v', 'm', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'x', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', '\000', '_',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'e', 'q', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'C', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', 'n', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'C', '4', '_', 'a', 'n', 'd', '_', 'o', 'r', '\000', '_', '_', 'b',
+  'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'e', 'q', 'i', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '4', '_', 'a', 'n', 'd', '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
-  '4', '_', 'c', 'm', 'p', 'l', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_',
-  'c', 'm', 'p', 'l', 't', 'e', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c',
-  'm', 'p', 'l', 't', 'e', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm',
-  'p', 'l', 't', 'e', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm',
-  'p', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'n',
-  'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'f', 'a', 's', 't', 'c',
-  'o', 'r', 'n', 'e', 'r', '9', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'f', 'a',
-  's', 't', 'c', 'o', 'r', 'n', 'e', 'r', '9', '_', 'n', 'o', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'C', '4', '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'C', '4', '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r', 'i', '\000',
+  'C', '2', '_', 'c', 'm', 'p', 'e', 'q', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
+  '_', 'c', 'm', 'p', 'g', 'e', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c',
+  'm', 'p', 'g', 'e', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm',
+  'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'p', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '4', '_', 'n', 'b', 'i', 't', 's', 's', 'e', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'C', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', '\000', '_', '_',
+  'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'u', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'C', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b',
+  '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'u', 'i', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '4', '_', 'o', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'u', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '2', '_', 'c', 'm', 'p', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c',
+  'm', 'p', 'l', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'C', '2', '_', 'm', 'u', 'x', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_',
+  'm', 'u', 'x', 'i', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x',
+  'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'n', 'o', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'C', '2', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'o', 'r',
+  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'p', 'x', 'f', 'e', 'r', '_', 'm',
+  'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 't', 'f', 'r', 'p', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'C', '2', '_', 't', 'f', 'r', 'r', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'C', '2', '_', 'v', 'i', 't', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '2', '_', 'v', 'm', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'x', 'o',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', 'n',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '4', '_', 'a', 'n', 'd', '_', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'C', '4', '_', 'a', 'n', 'd', '_', 'o', 'r', 'n', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'C', '4', '_', 'c', 'm', 'p', 'l', 't', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '4', '_', 'c', 'm', 'p', 'l', 't', 'e', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4',
+  '_', 'c', 'm', 'p', 'l', 't', 'e', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_',
-  'o', 'r', '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
-  'n', 'v', '_', 'd', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c',
-  'o', 'n', 'v', '_', 'd', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'c', 'm', 'p', 'l', 't', 'e', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_',
+  'c', 'm', 'p', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm',
+  'p', 'n', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'f', 'a', 's',
+  't', 'c', 'o', 'r', 'n', 'e', 'r', '9', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_',
+  'f', 'a', 's', 't', 'c', 'o', 'r', 'n', 'e', 'r', '9', '_', 'n', 'o', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '4', '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '4', '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'n', 'b', 'i', 't', 's', 's', 'e',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'C', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'n', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'C', '4', '_', 'o', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '4', '_', 'o', 'r', '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'c', 'o', 'n', 'v', '_', 'd', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
-  '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'd', '_', 'c', 'h', 'o', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2',
-  's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd',
-  'f', '2', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
-  '_', 'd', 'f', '2', 'u', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b',
+  '_', 'c', 'o', 'n', 'v', '_', 'd', '2', 's', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
+  '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'd', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'u', 'w', '\000', '_',
+  'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'd', '_', 'c', 'h',
+  'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd',
+  'f', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
+  '_', 'd', 'f', '2', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
+  'n', 'v', '_', 'd', 'f', '2', 'u', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
   'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'u', 'w',
-  '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n',
-  'v', '_', 'd', 'f', '2', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
-  'n', 'v', '_', 'd', 'f', '2', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'd', '_',
-  'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
-  '_', 's', 'f', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
-  'n', 'v', '_', 's', 'f', '2', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2',
+  'u', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c',
+  'o', 'n', 'v', '_', 'd', 'f', '2', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'u', 'd', '_', 'c', 'h', 'o', 'p',
+  'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'w', '_', 'c', 'h', 'o', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'd',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
   'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2',
-  'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
+  'n', 'v', '_', 's', 'f', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
+  'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'u', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
+  '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'u', 'd', '_', 'c', 'h',
+  'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
   'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's',
-  'f', '2', 'u', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
-  '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
-  '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'w', '_', 'c', 'h', 'o',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'u', 'd',
-  '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'f', '2', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
+  '_', 's', 'f', '2', 'u', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'w', '_', 'c',
+  'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_',
-  'u', 'd', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  'u', 'd', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
   '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n',
-  'v', '_', 'u', 'w', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'v', '_', 'u', 'd', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c',
-  'o', 'n', 'v', '_', 'u', 'w', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'o', 'n', 'v', '_', 'u', 'w', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
-  '_', 'c', 'o', 'n', 'v', '_', 'w', '2', 'd', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
-  '2', '_', 'c', 'o', 'n', 'v', '_', 'w', '2', 's', 'f', '\000', '_', '_', 'b',
+  '_', 'c', 'o', 'n', 'v', '_', 'u', 'w', '2', 's', 'f', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'F', '2', '_', 'd', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'w', '2', 'd', 'f', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'w', '2', 's', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'F', '2', '_', 'd', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
+  '2', '_', 'd', 'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
+  '_', 'd', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  'd', 'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'd', 'f', 'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd',
-  'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f',
-  'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'c',
-  'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'c', 'm',
-  'p', 'u', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i', 'm', 'm',
-  '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i', 'm', 'm', '_',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 's', 'u', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'F', '2', '_', 's', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
-  '2', '_', 's', 'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
-  '_', 's', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  's', 'f', 'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
   'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f',
   'c', 'm', 'p', 'u', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
-  'i', 'x', 'u', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
-  'i', 'x', 'u', 'p', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
-  'i', 'x', 'u', 'p', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
-  'm', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm', 'a', '_',
-  'l', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm', 'a',
-  '_', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm', 's',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i',
+  'm', 'm', '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i', 'm',
+  'm', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 's', 'u', 'b',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm', 's', '_', 'l', 'i',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm', 'm', '_', 'n',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm', 'm', '_', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'n', 'v', 's', 'q', 'r', 't',
-  'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'm', 'a', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'F', '2', '_', 's', 'f', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u',
+  'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'a', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'F', '2', '_', 's', 'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'F', '2', '_', 's', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
-  '2', '_', 's', 'f', 'm', 'p', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  '2', '_', 's', 'f', 'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
+  '_', 's', 'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
+  's', 'f', 'c', 'm', 'p', 'u', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
-  'f', 'r', 'e', 'c', 'i', 'p', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'f', 'f', 'i', 'x', 'u', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
-  'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L', '2', '_', 'l', 'o', 'a', 'd',
-  'w', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L', '4', '_',
-  'l', 'o', 'a', 'd', 'd', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_',
+  'f', 'f', 'i', 'x', 'u', 'p', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
+  'f', 'f', 'i', 'x', 'u', 'p', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
+  'f', 'f', 'm', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm',
+  'a', '_', 'l', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
+  'm', 'a', '_', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
+  'm', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm', 's', '_',
+  'l', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm', 'm',
+  '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm', 'm', '_',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'n', 'v', 's', 'q',
+  'r', 't', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'm', 'a', 'x',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'm', 'i', 'n', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'a', 'c', 'c', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
-  'c', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
-  'c', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
-  'c', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
-  'c', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
-  'c', 's', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm',
-  'a', 'c', 's', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
-  'm', 'p', 'y', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
-  'm', 'p', 'y', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
-  'm', 'p', 'y', 'r', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'c', 'm', 'p', 'y', 'r', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_', 's', '0', '\000',
+  '_', 'F', '2', '_', 's', 'f', 'm', 'p', 'y', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
+  '_', 's', 'f', 'r', 'e', 'c', 'i', 'p', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
+  '_', 's', 'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L', '2', '_', 'l', 'o',
+  'a', 'd', 'w', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L',
+  '4', '_', 'l', 'o', 'a', 'd', 'd', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_', 's', '1',
+  'O', 'N', '_', 'M', '2', '_', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'a', 'c', 'c', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'a', 'c', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'a', 'c', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'a', 'c', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'a', 'c', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'a', 'c', 's', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'c', 'm', 'a', 'c', 's', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'c', 'm', 'p', 'y', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'c', 'm', 'p', 'y', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'c', 'm', 'p', 'y', 'r', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'c', 'm', 'p', 'y', 'r', 's', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '1',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_', 's', '0',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '0',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_', 's', '1',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '1',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', 'c', '_', 's',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_', 's',
   '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', 'c', '_',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_',
   's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 's',
-  's', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'd', 'p', 'm', 'p', 'y', 's', 's', '_', 'n', 'a', 'c', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 's', 's', '_', 'r',
-  'n', 'd', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm',
-  'p', 'y', 's', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd',
-  'p', 'm', 'p', 'y', 'u', 'u', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 'u', 'u', '_', 'n', 'a',
-  'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', 'c',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's',
+  'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p',
-  'y', 'u', 'u', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'h', 'm',
-  'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'h', 'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'y', 's', 's', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'd', 'p', 'm', 'p', 'y', 's', 's', '_', 'n', 'a', 'c', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 's', 's',
+  '_', 'r', 'n', 'd', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd',
+  'p', 'm', 'p', 'y', 's', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'a', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '_', 'd', 'p', 'm', 'p', 'y', 'u', 'u', '_', 'a', 'c', 'c', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 'u', 'u', '_',
+  'n', 'a', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p',
+  'm', 'p', 'y', 'u', 'u', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'a', 'c', 's', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'a',
-  'c', 's', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c',
+  'h', 'm', 'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'h', 'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'a', 'c', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'a', 'c', 's', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'a', 'c', 's', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
+  'a', 'c', 'h', 's', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'm', 'a', 'c', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'a', 'c', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'm', 'a', 'c', 'h', 's', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u',
   'h', 's', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
-  'a', 'c', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'm', 'a', 'c', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'a', 'c', 'u', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'm', 'a', 'c', 'h', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'h', 's',
-  '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c',
-  'u', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'm', 'a', 'c', 'u', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'm', 'a', 'c', 'u', 'h', 's', '_', 's', '1', '\000', '_', '_', 'b',
+  '_', 'm', 'm', 'a', 'c', 'u', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's', '_', 'r', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's', '_', 'r',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l',
-  's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c',
-  'u', 'l', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
-  'p', 'y', 'h', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'm', 'p', 'y', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'l', '_',
-  'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u',
-  'l', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p',
-  'y', 'u', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
-  'p', 'y', 'u', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'n', 'a', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'h',
-  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l',
-  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's',
-  'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'h', 'h', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c',
-  'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_',
-  'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's',
-  'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_',
-  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c',
-  'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_', 's', '1', '\000', '_',
+  'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'h', 's', '_', 's', '1', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'l', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'l', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'l', 'h', '_', 's',
+  'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's', '_', 'r', 's',
   '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'l', 'h', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'l', 'l',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'l',
-  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'h',
-  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l',
-  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's',
-  'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's',
+  '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c',
+  'u', 'l', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
+  'a', 'c', 'u', 'l', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'h', 'h', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a',
-  'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'm', 'm', 'p', 'y', 'h', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'p', 'y', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '0', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_',
-  'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '0', '\000',
+  'M', '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's', '0', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's',
-  'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_',
   's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a',
-  'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd',
-  '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u',
+  'l', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p',
+  'y', 'u', 'l', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'm', 'p', 'y', 'u', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'm', 'p', 'y', 'u', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'n', 'a', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'y', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's',
   '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd',
-  '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd',
-  '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c',
   '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b',
+  'y', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's',
   '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c',
   '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'y', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's',
   '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't',
-  '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c',
+  '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'h',
+  '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'h',
   'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  's', 'a', 't', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0', '\000', '_',
+  'a', 'c', 'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n',
-  'd', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a',
+  't', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's',
+  'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's',
   '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't',
-  '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c',
+  '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l',
+  '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l',
   'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_',
+  'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_', 's', '1', '_', 's',
-  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a',
-  'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '1', '\000',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_', 's', '0', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_',
-  'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'l', 'h', '_',
-  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a',
-  'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_',
-  'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'l', 'h', '_', 's', '0',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_', 's', '1',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'l', 'h', '_',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'l', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'l', '_',
   's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'l',
-  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'l', 'h',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'l',
+  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
   '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
-  'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c',
-  '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'y', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c',
+  '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'l', 'l',
+  'y', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c',
+  '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c',
+  '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'h',
+  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  'n', 'a', 'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a',
+  't', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c',
+  '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l',
+  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h', 'h',
   '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
-  'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r',
+  'n', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h', 'l',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r',
+  'n', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'l', 'l',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r',
+  'n', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'h',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's',
+  'a', 't', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l', 'h',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's',
+  'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l', 'l',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's',
+  'a', 't', '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd',
   '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'l',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
-  'r', 'n', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1',
+  'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_',
+  'r', 'n', 'd', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'h',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's',
+  'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd',
   '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 's', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 's', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 's',
-  'm', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 's', 'u', '_',
-  'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a',
-  'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_',
-  'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'l', 'h', '_',
-  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a',
-  'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_',
-  'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'u', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'u', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'l', '_', 's', '1', '\000', '_',
+  'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'l', 'h', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'l', 'h', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'l',
-  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
-  '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'u', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'h', 'h',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_',
-  'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c',
-  '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'u', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'l', 'l',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_',
-  'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'u', '_', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c',
-  'c', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '0', '\000',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_', 's', '1', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c',
-  '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_',
-  'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', 'd', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'l',
-  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
-  'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'u', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_', 's', '1',
+  '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
+  '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'l', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'l', '_', 's',
+  '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's',
   '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'l',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c',
+  'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'l',
+  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
+  '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c',
+  'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'l', 'h', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'l',
+  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
+  '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_',
+  'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n',
+  'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_',
+  'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'd', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'h', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r',
+  'n', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_',
+  'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'd', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'h', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r',
+  'n', 'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 's', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 's', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 's', 'm', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 's',
+  'u', '_', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
+  '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c',
+  'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'l',
   'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
-  'd', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c',
+  'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'u', 'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_',
-  'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'h',
-  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
-  'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b',
+  'p', 'y', 'u', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'u', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd',
-  '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'l', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'l', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'l', 'h', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'l',
+  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
+  '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'u', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_',
+  'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'u', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'h', 'l', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n',
+  'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_',
+  'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'u', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'u', 'p', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'l', 'l', '_',
+  '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_',
   's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
   'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_',
-  'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'a', 'c', 'c', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'n', 'a',
-  'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'n', 'a', 'c', 'c', 'i',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 's', 'u', 'b', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'a', 'c', '_', 's',
-  '0', '_', 's', 'a', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
-  'c', 'm', 'a', 'c', '_', 's', '0', '_', 's', 'a', 't', '_', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y', '_', 's', '0', '_', 's',
-  'a', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'p',
-  'y', '_', 's', '0', '_', 's', 'a', 't', '_', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'c', 'm', 'p', 'y', '_', 's', '1', '_', 's', 'a', 't', '_',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y', '_', 's',
-  '1', '_', 's', 'a', 't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
-  'd', 'm', 'a', 'c', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'd', 'm', 'a', 'c', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'v', 'd', 'm', 'p', 'y', 'r', 's', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 'r', 's', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 's', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 's', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 'e', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'v', 'm', 'a', 'c', '2', 'e', 's', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 'e', 's', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 's', '_', 's',
+  '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's',
   '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 's', '_',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a',
+  'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c',
+  'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c',
+  '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'u', 'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'l', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'l',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd',
+  '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'u', 'd', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'l', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a',
+  'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c',
+  '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_',
+  'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'u', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'l',
+  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
+  'd', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'n', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'n', 'a', 'c',
+  'c', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 's', 'u', 'b', 'a', 'c',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f',
+  'f', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'a', 'b', 's', 'd', 'i',
+  'f', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'a', 'c',
+  '_', 's', '0', '_', 's', 'a', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'v', 'c', 'm', 'a', 'c', '_', 's', '0', '_', 's', 'a', 't', '_', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y', '_', 's', '0',
+  '_', 's', 'a', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c',
+  'm', 'p', 'y', '_', 's', '0', '_', 's', 'a', 't', '_', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y', '_', 's', '1', '_', 's', 'a',
+  't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y',
+  '_', 's', '1', '_', 's', 'a', 't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'v', 'd', 'm', 'a', 'c', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'v', 'd', 'm', 'a', 'c', 's', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 'r', 's', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 'r', 's', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 's', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 's', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 'e', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 'e', 's', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 'e', 's', '_',
   's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
   'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 's',
-  'u', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2',
+  's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c',
-  '2', 's', 'u', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  '2', 's', 'u', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm',
-  'p', 'y', '2', 'e', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'a', 'c', '2', 's', 'u', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'm', 'p', 'y', '2', 'e', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'v', 'm', 'p', 'y', '2', 'e', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'm', 'p', 'y', '2', 's', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', '_', 's', '0', 'p', 'a', 'c',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's',
-  '_', 's', '1', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
-  'm', 'p', 'y', '2', 's', 'u', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'v', 'm', 'p', 'y', '2', 's', 'u', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'v', 'r', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'v', 'r', 'a', 'd', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'r', 'c', 'm', 'a', 'c', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'r', 'c', 'm', 'a', 'c', 'i', '_', 's', '0', 'c', '\000', '_',
+  '2', '_', 'v', 'm', 'p', 'y', '2', 'e', 's', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', '_', 's', '0', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a', 'c', 'r', '_', 's', '0',
+  'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', '_', 's', '0', 'p',
+  'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2',
+  's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y',
+  '2', 's', '_', 's', '1', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'v', 'm', 'p', 'y', '2', 's', 'u', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', 'u', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'v', 'r', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'v', 'r', 'c', 'm', 'a', 'c', 'i', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a', 'c', 'i', '_', 's', '0', 'c',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
   'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a', 'c', 'r', '_',
-  's', '0', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p',
-  'y', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a', 'c',
+  'r', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
   '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c',
-  'm', 'p', 'y', 'i', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'r', 'c', 'm', 'p', 'y', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'm', 'p', 'y', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
+  'r', 'c', 'm', 'p', 'y', 'i', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'r', '_', 's', '0', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 's', '_', 'a', 'c',
-  'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm',
-  'p', 'y', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'r', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'r', '_', 's', '0', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 's', '_',
+  'a', 'c', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r',
-  'c', 'm', 'p', 'y', 's', '_', 's', '1', 'r', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'r', 'm', 'a', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'r', 'm', 'p', 'y', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'x', 'o', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'c', 'm', 'p', 'y', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'v', 'r', 'c', 'm', 'p', 'y', 's', '_', 's', '1', 'r', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'v', 'r', 'm', 'a', 'c', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'v', 'r', 'm', 'p', 'y', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'x', 'o', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '4', '_', 'a', 'n', 'd', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
-  '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
-  '_', 'a', 'n', 'd', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'a',
-  'n', 'd', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'c', 'm',
-  'p', 'y', 'i', '_', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'c', 'm',
-  'p', 'y', 'i', '_', 'w', 'h', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'c',
-  'm', 'p', 'y', 'r', '_', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'c',
-  'm', 'p', 'y', 'r', '_', 'w', 'h', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '_', 'a', 'n', 'd', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
-  'm', 'a', 'c', '_', 'u', 'p', '_', 's', '1', '_', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r', 'i', '_', 'a', 'd', 'd', 'i',
+  'c', 'm', 'p', 'y', 'i', '_', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
+  'c', 'm', 'p', 'y', 'i', '_', 'w', 'h', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
+  '_', 'c', 'm', 'p', 'y', 'r', '_', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
+  '_', 'c', 'm', 'p', 'y', 'r', '_', 'w', 'h', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '4', '_', 'm', 'a', 'c', '_', 'u', 'p', '_', 's', '1', '_', 's', 'a', 't',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
   'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r', 'i', '_', 'a', 'd',
-  'd', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
   'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r', 'i', '_',
-  'a', 'd', 'd', 'r', '_', 'u', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm',
-  'p', 'y', 'r', 'r', '_', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'a', 'd', 'd', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r',
+  'i', '_', 'a', 'd', 'd', 'r', '_', 'u', '2', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
-  '_', 'm', 'p', 'y', 'r', 'r', '_', 'a', 'd', 'd', 'r', '\000', '_', '_', 'b',
+  '_', 'm', 'p', 'y', 'r', 'r', '_', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '4', '_', 'n', 'a', 'c', '_', 'u', 'p', '_', 's', '1', '_', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'n', '\000', '_',
+  'M', '4', '_', 'm', 'p', 'y', 'r', 'r', '_', 'a', 'd', 'd', 'r', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '4', '_', 'o', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '4', '_', 'o', 'r', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
-  'p', 'm', 'p', 'y', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'p', 'm', 'p',
-  'y', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'p',
-  'm', 'p', 'y', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'p', 'm', 'p',
-  'y', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r',
-  'm', 'p', 'y', 'e', 'h', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 'a', 'c', 'c',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y',
-  'e', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm',
-  'p', 'y', 'e', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v',
-  'r', 'm', 'p', 'y', 'o', 'h', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 'a', 'c',
-  'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p',
-  'y', 'o', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r',
-  'm', 'p', 'y', 'o', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
-  'x', 'o', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'x',
-  'o', 'r', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'x',
-  'o', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'x', 'o', 'r',
-  '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'd', 'm',
-  'a', 'c', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'd', 'm',
-  'p', 'y', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'm', 'a',
-  'c', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'm', 'a', 'c',
-  'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'm', 'p', 'y', 'b',
-  's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'm', 'p', 'y', 'b', 'u',
-  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'a', 'c', 'b', 's',
-  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'a', 'c', 'b', 'u',
-  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'p', 'y', 'b', 's',
-  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u',
-  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f',
-  'f', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '6', '_', 'v', 'a', 'b', 's', 'd', 'i',
-  'f', 'f', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 'd', 'd', 'a',
-  's', 'l', '_', 'r', 'r', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'l', '_', 'i', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'l', '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'n', 'a', 'c',
+  'N', '_', 'M', '4', '_', 'n', 'a', 'c', '_', 'u', 'p', '_', 's', '1', '_',
+  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_', 'a', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'n',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_',
-  'p', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'l', '_', 'i', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l',
-  '_', 'i', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'l', '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000',
+  'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '4', '_', 'o', 'r', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '4', '_', 'p', 'm', 'p', 'y', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'p',
+  'm', 'p', 'y', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
+  'v', 'p', 'm', 'p', 'y', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'p',
+  'm', 'p', 'y', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
+  'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 'a', 'c', 'c', '_', 's', '0', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r',
-  '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 'a',
+  'c', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm',
+  'p', 'y', 'e', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v',
+  'r', 'm', 'p', 'y', 'e', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
+  '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 'a', 'c', 'c', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_',
+  'a', 'c', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r',
+  'm', 'p', 'y', 'o', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
+  'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '4', '_', 'x', 'o', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
+  '_', 'x', 'o', 'r', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
+  '_', 'x', 'o', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'x',
+  'o', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v',
+  'd', 'm', 'a', 'c', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v',
+  'd', 'm', 'p', 'y', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v',
+  'm', 'a', 'c', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'm',
+  'a', 'c', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'm', 'p',
+  'y', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'm', 'p', 'y',
+  'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'a', 'c',
+  'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'a', 'c',
+  'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'p', 'y',
+  'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_', 'v', 'r', 'm', 'p', 'y',
+  'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '6', '_', 'v', 'a', 'b', 's', 'd',
+  'i', 'f', 'f', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '6', '_', 'v', 'a', 'b', 's',
+  'd', 'i', 'f', 'f', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 'd',
+  'd', 'a', 's', 'l', '_', 'r', 'r', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'a', 's', 'l', '_', 'i', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'l', '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'n',
+  'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_',
+  'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_',
-  'i', '_', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'i', '_', 'p', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'l', '_', 'i', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'l', '_', 'i', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'l', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'a', 's', 'l', '_', 'i', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'l', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  's', 'l', '_', 'i', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'a', 'n', 'd', '\000', '_',
+  '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'n', 'a',
+  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'n', 'a',
   'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r',
+  '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i',
+  '_', 'r', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'l', '_', 'i', '_', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'l', '_', 'i', '_', 'v', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'l', '_', 'i', '_', 'v', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_',
+  'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r',
+  '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l',
+  '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'l', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
+  's', 'l', '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_', 'n', 'a',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r',
   '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r',
-  '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  '_', 'r', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'l', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l',
-  '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'l', '_', 'r', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'l', '_', 'r', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'r', '_', 'i', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r',
+  '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'l', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
+  'a', 's', 'r', '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_', 'n', 'a', 'c', '\000',
+  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_', 'o',
+  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'o',
   'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r',
-  '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_',
-  'r', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_',
-  'r', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p',
+  '_', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
-  'i', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'i', '_', 'p', '_', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n',
+  't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i',
-  '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'r', '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'r',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
   'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_',
-  'p', '_', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i',
-  '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'r', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b',
+  'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r',
+  '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'r', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'r', 'n', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'r',
-  'n', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_',
+  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 's', 'v', 'w', '_',
-  't', 'r', 'u', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
-  'i', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
-  'i', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
-  'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r',
-  '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'r', '_', 'r', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'x',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
-  'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'r', '_', 'r', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 's', 'a', 't',
+  'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'r', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r',
+  '_', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 's', 'v',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 's', 'v',
   'w', '_', 't', 'r', 'u', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'r', '_', 'r', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'r', '_', 'i', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'r', '_', 'r', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'b', 'r',
-  'e', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'b', 'r', 'e', 'v', 'p', '\000',
+  'r', '_', 'i', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'r', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r',
+  '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'n', 'a', 'c', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'c', 'l', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'c', 'l', '0', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '1', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'c', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l',
-  'b', 'n', 'o', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'b',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'r', 'b', 'i', 't', '_',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'r', 'b', 'i', 't', '_',
+  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'o',
   'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 't', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'c', 't', '0', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c',
-  't', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 't', '1', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'd', 'e', 'i', 'n', 't', 'e', 'r', 'l', 'e', 'a',
-  'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c',
-  't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c',
-  't', 'u', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't',
-  'r', 'a', 'c', 't', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x',
-  't', 'r', 'a', 'c', 't', 'u', 'p', '_', 'r', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'i', 'n', 's', 'e', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'i', 'n', 's', 'e', 'r', 't', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p',
+  '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
+  'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r',
+  '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'r', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'i', 'n', 's', 'e', 'r', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'i', 'n', 's', 'e', 'r', 't', 'p', '_', 'r', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'i', 'n', 't', 'e', 'r', 'l', 'e', 'a', 'v', 'e', '\000', '_', '_',
+  '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'l', 'f', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 'o', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_',
+  's', 'v', 'w', '_', 't', 'r', 'u', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'l', 's', 'l', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
-  's', 'l', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'a', 'n', 'd', '\000', '_',
+  'a', 's', 'r', '_', 'r', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'r', '_', 'r', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'b', 'r', 'e', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'b', 'r', 'e', 'v',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'c', 'l', '0', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c',
+  'l', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '1', 'p', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'n', 'a',
+  'N', '_', 'S', '2', '_', 'c', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'c', 'l', 'b', 'n', 'o', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c',
+  'l', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'r', 'b', 'i',
+  't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'r', 'b', 'i',
+  't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 't', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'c', 't', '0', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'c', 't', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 't', '1', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'd', 'e', 'i', 'n', 't', 'e', 'r', 'l',
+  'e', 'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r',
+  'a', 'c', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r',
+  'a', 'c', 't', 'u', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e',
+  'x', 't', 'r', 'a', 'c', 't', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'e', 'x', 't', 'r', 'a', 'c', 't', 'u', 'p', '_', 'r', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'i', 'n', 's', 'e', 'r', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'r', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'i', 'n', 's', 'e', 'r', 't', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'i', 'n', 's', 'e', 'r', 't', 'p', '_', 'r', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'i', 'n', 't', 'e', 'r', 'l', 'e', 'a', 'v', 'e', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'l', 'f', 's', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_',
+  'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r',
+  '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l',
+  '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'l', 's', 'l', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
+  's', 'l', '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r', '_', 'n', 'a',
   'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r',
   '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r',
-  '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
-  'l', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l',
-  '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'l', 's', 'l', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r', '_', 'n', 'a', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r', '_', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'v',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'v',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r',
+  '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i',
-  '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
-  'r', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_',
+  'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r',
+  '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'l', 's', 'r', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'x', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'a',
+  'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'x', 'a',
   'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
   'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_',
-  'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r',
-  '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'l', 's', 'r', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_',
+  'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
+  's', 'r', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'x', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'v', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'v', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'c',
+  '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'x', 'a', 'c',
   'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'v',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'v',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
   'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r',
+  '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
+  'r', '_', 'r', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'c',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r',
   '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_',
-  'r', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'r', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
-  's', 'r', '_', 'r', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  's', 'r', '_', 'r', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000',
+  '_', 'l', 's', 'r', '_', 'r', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'r', '_', 'r', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'c',
+  'k', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'r', 'i', 't',
+  'y', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't',
+  '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't',
+  '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'b', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_',
-  'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r',
-  '_', 'r', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
-  's', 'r', '_', 'r', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
-  's', 'r', '_', 'r', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'c', 'k', 'h',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'r', 'i', 't', 'y', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't', '_', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't', '_', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v',
-  '_', 's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'b', 'r', 'e', 'v', '_', 's', 't', 'h', 'h', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_',
-  's', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 't', 'o', 'r', 'e',
-  'w', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  's', 'v', 's', 'a', 't', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's',
-  'v', 's', 'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't',
-  'a', 'b', 'l', 'e', 'i', 'd', 'x', 'b', '_', 'g', 'o', 'o', 'd', 's', 'y',
-  'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l',
-  'e', 'i', 'd', 'x', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e', 'i', 'd',
-  'x', 'h', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e', 'i', 'd', 'x', 'w', '_',
-  'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u',
+  'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's',
+  't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r',
+  'e', 'v', '_', 's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't', 'h', 'h', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e',
+  'v', '_', 's', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 't', 'o',
+  'r', 'e', 'w', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i', 't', '_', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i', 't', '_',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i', 't', '_',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i', 't', '_',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'i',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'r',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'c', 'n', 'e', 'g', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'v', 'c', 'r', 'o', 't', 'a', 't', 'e', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'v', 'r', 'c', 'n', 'e', 'g', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'v', 'r', 'n', 'd', 'p', 'a', 'c', 'k', 'w', 'h',
+  '2', '_', 's', 'v', 's', 'a', 't', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 's', 'v', 's', 'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 't', 'a', 'b', 'l', 'e', 'i', 'd', 'x', 'b', '_', 'g', 'o', 'o', 'd',
+  's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a',
+  'b', 'l', 'e', 'i', 'd', 'x', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n',
+  't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e',
+  'i', 'd', 'x', 'h', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e', 'i', 'd', 'x',
+  'w', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i', 't', '_', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i',
+  't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i',
+  't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i',
+  't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g',
+  'n', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g',
+  'n', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'c', 'n', 'e', 'g',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'c', 'r', 'o', 't', 'a', 't',
+  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'r', 'c', 'n', 'e', 'g', 'h',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
   'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'r', 'n', 'd', 'p', 'a', 'c', 'k',
-  'w', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'r', 'n', 'd', 'p', 'a',
+  'c', 'k', 'w', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a',
+  't', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'h',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'h', 'b', '_',
+  'b', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'v', 's', 'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v',
+  's', 'a', 't', 'h', 'u', 'b', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'v', 's', 'a', 't', 'w', 'h', '_', 'n', 'o', 'p', 'a', 'c',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h', '_',
   'n', 'o', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's',
-  'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a',
-  't', 'h', 'u', 'b', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'v', 's', 'a', 't', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'v', 's', 'a', 't', 'w', 'h', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h', '_', 'n', 'o',
-  'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l',
-  'a', 't', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l',
-  'a', 't', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l',
-  'i', 'c', 'e', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p',
-  'l', 'i', 'c', 'e', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'p', 'l', 'a', 't', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's',
-  'x', 't', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'x', 't',
-  'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'e',
-  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'e',
-  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'o',
-  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'o',
-  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't', 'b', 'h',
+  'p', 'l', 'a', 't', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's',
+  'p', 'l', 'i', 'c', 'e', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v',
+  's', 'p', 'l', 'i', 'c', 'e', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'v', 's', 'x', 't', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's',
+  'x', 't', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u',
+  'n', 'e', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u',
+  'n', 'e', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u',
+  'n', 'o', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u',
+  'n', 'o', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't',
+  'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't', 'h', 'w',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't', 'h', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'a', 'd', 'd', 'i', '\000', '_', '_',
+  'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'a', 'd', 'd', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'a', 's', 'l', '_',
+  'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'l',
+  's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'n', 'd',
+  'i', '_', 'a', 's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'a', 'n', 'd', 'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'c', 'l', 'b', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '4', '_', 'c', 'l', 'b', 'p', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '4', '_', 'c', 'l', 'b', 'p', 'n', 'o', 'r', 'm', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '4', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
+  '_', 'e', 'x', 't', 'r', 'a', 'c', 't', '_', 'r', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '_', 'r', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '4', '_', 'l', 's', 'l', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '4', '_', 'n', 't', 's', 't', 'b', 'i', 't', '_', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'n', 't', 's', 't', 'b', 'i', 't', '_', 'r', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'a', 's', 'l', '_', 'r', 'i',
+  '_', 'S', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'i', 'x', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'o', 'r', '_', 'o', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
+  '_', 'o', 'r', 'i', '_', 'a', 's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'o', 'r', 'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '4', '_', 'p', 'a', 'r', 'i', 't', 'y', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 's', 't', 'o', 'r', 'e', 'd', '_', 'l', 'o', 'c', 'k', 'e',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'a', 'd', 'd', 'i',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'l', 's', 'r',
+  'G', 'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_', 'a', 's', 'l',
   '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'n', 'd', 'i', '_',
-  'a', 's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'n',
-  'd', 'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'c', 'l', 'b', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'c', 'l', 'b', 'p', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'c', 'l', 'b', 'p', 'n', 'o', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'e', 'x', 't', 'r', 'a', 'c', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'e',
-  'x', 't', 'r', 'a', 'c', 't', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '_', 'r', 'p', '\000', '_', '_',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_',
+  'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'r',
+  'c', 'r', 'o', 't', 'a', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v',
+  'r', 'c', 'r', 'o', 't', 'a', 't', 'e', '_', 'a', 'c', 'c', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '4', '_', 'l', 's', 'l', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'n', 't', 's', 't', 'b', 'i', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'n', 't', 's', 't', 'b', 'i', 't', '_', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'o', 'r', '_', 'a', 'n', 'd', 'i', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'o', 'r', '_', 'o', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'o',
-  'r', 'i', '_', 'a', 's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'o', 'r', 'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '4', '_', 'p', 'a', 'r', 'i', 't', 'y', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 's', 't', 'o', 'r', 'e', 'd', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'a', 'd', 'd', 'i', '\000', '_',
+  '_', 'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_', 'a', 's', 'l', '_', 'r',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_', 'l', 's',
-  'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'r', 'c', 'r',
-  'o', 't', 'a', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'r', 'c',
-  'r', 'o', 't', 'a', 't', 'e', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd', 'd', 'h',
+  'N', '_', 'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', 'r',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd', 'd',
-  'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd',
+  'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
   'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a',
-  'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'a', 's', 'r', 'h', 'u',
-  'b', '_', 'r', 'n', 'd', '_', 's', 'a', 't', '_', 'g', 'o', 'o', 'd', 's',
-  'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  'd', 'd', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u',
+  'b', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
   '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'a', 's', 'r',
-  'h', 'u', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'p',
-  'o', 'p', 'c', 'o', 'u', 'n', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_',
-  'v', 'a', 's', 'r', 'h', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y',
-  'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_',
-  'i', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i',
-  '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'h', 'u', 'b', '_', 'r', 'n', 'd', '_', 's', 'a', 't', '_', 'g', 'o', 'o',
+  'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'a',
+  's', 'r', 'h', 'u', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5',
+  '_', 'p', 'o', 'p', 'c', 'o', 'u', 'n', 't', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '5', '_', 'v', 'a', 's', 'r', 'h', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd',
+  's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o',
-  'l', '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6',
-  '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'x',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i',
-  '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_',
-  'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  'l', '_', 'i', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
   '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l',
-  '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_',
-  'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b',
+  'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_',
+  'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'o',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p',
+  '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l',
+  '_', 'i', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_',
+  'i', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r',
+  'o', 'l', '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'x', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 's', 'p', 'l', 'a', 't',
-  'r', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 't', 'r', 'u', 'n',
-  'e', 'h', 'b', '_', 'p', 'p', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v',
-  't', 'r', 'u', 'n', 'o', 'h', 'b', '_', 'p', 'p', 'p', '\000', '_', '_', 'b',
+  'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_',
+  'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 's', 'p', 'l',
+  'a', 't', 'r', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 't', 'r',
+  'u', 'n', 'e', 'h', 'b', '_', 'p', 'p', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6',
+  '_', 'v', 't', 'r', 'u', 'n', 'o', 'h', 'b', '_', 'p', 'p', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'h', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'h', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'h', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'h', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'l', 'd', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', '0', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'V', '6', '_', 'l', 'd', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd',
+  '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd',
+  'c', 'n', 'p', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
   'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'c', 'n',
-  'p', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'c', 'n', 'p', '0',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'c',
-  'n', 'p', 'n', 't', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'c',
-  'n', 'p', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'l', 'd', 'c', 'p', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'p', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l',
-  'd', 'c', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'l', 'd', 'c', 'p', 'n', 't', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'l', 'd', 'c', 'p', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'd', 'c', 'n', 'p', 'n', 't', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l',
+  'd', 'c', 'n', 'p', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'l', 'd', 'n', 'p', '0', '\000', '_', '_', 'b', 'u', 'i',
+  '_', 'V', '6', '_', 'l', 'd', 'c', 'p', '0', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'l', 'd', 'n', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  '_', 'l', 'd', 'c', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'l', 'd', 'n', 'p', 'n', 't', '0', '\000', '_', '_', 'b', 'u',
+  'V', '6', '_', 'l', 'd', 'c', 'p', 'n', 't', '0', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'l', 'd', 'n', 'p', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000',
+  '6', '_', 'l', 'd', 'c', 'p', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'n', 't', '0', '\000', '_', '_', 'b',
+  'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'n', 'p', '0', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'l', 'd', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000', '_',
+  'V', '6', '_', 'l', 'd', 'n', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'l', 'd', 'n', 't', 'n', 't', '0', '\000', '_', '_',
+  'N', '_', 'V', '6', '_', 'l', 'd', 'n', 'p', 'n', 't', '0', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'l', 'd', 'p', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'l', 'd', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'l', 'd', 'p', 'n', 't', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l',
-  'd', 'p', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'l', 'd', 't', 'n', 'p', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'l', 'd', 't', 'n', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'l', 'd', 't', 'n', 'p', 'n', 't', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'l', 'd', 't', 'n', 'p', 'n', 't', '0', '_', '1', '2', '8',
+  '_', 'V', '6', '_', 'l', 'd', 'n', 'p', 'n', 't', '0', '_', '1', '2', '8',
   'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', '0', '\000', '_',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'n', 't', '0', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', '0', '_', '1', '2', '8', 'B',
+  'N', '_', 'V', '6', '_', 'l', 'd', 'n', 't', '0', '_', '1', '2', '8', 'B',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', 'n', 't', '0', '\000',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'n', 't', 'n', 't', '0', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', 'n', 't', '0', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'u', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'u', '0', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i',
+  'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'p', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'l', 'd', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'l', 'd', 'p', 'n', 't', '0', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'l', 'o', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'l', 'v', 's', 'p', 'l', 'a', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'l', 'v', 's', 'p', 'l', 'a', 't', 'b', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'l', 'd', 'p', 'n', 't', '0', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'l', 'd', 't', 'n', 'p', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'l', 'd', 't', 'n', 'p', '0', '_', '1', '2', '8', 'B', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'h', '\000', '_',
+  'N', '_', 'V', '6', '_', 'l', 'd', 't', 'n', 'p', 'n', 't', '0', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'h', '_', '1',
+  'N', '_', 'V', '6', '_', 'l', 'd', 't', 'n', 'p', 'n', 't', '0', '_', '1',
   '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l',
-  'a', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l',
-  'a', 't', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'p', 'r', 'e', 'd', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'p', 'r', 'e', 'd', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'a', 'n', 'd', '_', 'n',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', '0', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', 'n', 't',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 't', 'p', 'n', 't', '0',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'u',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'd', 'u', '0', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'o', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'l', 'o', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's',
+  'p', 'l', 'a', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's',
+  'p', 'l', 'a', 't', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'p', 'r', 'e', 'd', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'p', 'r', 'e', 'd', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
   'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'a', 'n', 'd',
-  '_', 'n', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p',
-  'r', 'e', 'd', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p',
-  'r', 'e', 'd', '_', 'n', 'o', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '_',
-  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'o', 'r',
-  '_', 'n', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p',
-  'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e',
-  'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2', 'v', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2',
-  'v', '2', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p',
-  'r', 'e', 'd', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p',
-  'r', 'e', 'd', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e',
-  'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e',
-  'q', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'S', '3', '2', 'b', '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000',
+  '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'a',
+  'n', 'd', '_', 'n', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'p', 'r', 'e', 'd', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'p', 'r', 'e', 'd', '_', 'n', 'o', 't', '_', '1', '2', '8', 'B', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 'q', 'p',
-  'r', 'e', 'd', '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't', '_', 'n', 'q', 'p',
-  'r', 'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S',
-  '3', '2', 'b', '_', 'n', 't', '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a',
-  'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S',
-  '3', '2', 'b', '_', 'n', 't', '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't',
-  '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'q', 'p', 'r',
-  'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3',
-  '2', 'b', '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b', '\000', '_',
+  'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b', '_', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b', '_', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'b', 's', 'd', 'i', 'f', 'f', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f',
-  'f', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'h', '_', '1', '2',
+  'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '_', '1', '2',
   '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i',
-  'f', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd',
-  'i', 'f', 'f', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'o',
+  'r', '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_',
+  'o', 'r', '_', 'n', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'b', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'b', 's', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'b', 's', 'h', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'b', 's', 'h', '_', 's', 'a', 't', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '_', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '_', 's', 'a',
-  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'b', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'b', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'd', 'd', 'b', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'b', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 'q', '_', '1', '2', '8', 'B', '\000',
+  'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a',
+  'r', '2', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p',
+  'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2', 'v', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a',
+  'r', '2', 'v', '2', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'p', 'r', 'e', 'd', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'p', 'r', 'e', 'd', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a', 't', '\000',
+  'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'h', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a', 't', '_',
+  'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'h', '_',
   '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'd', 'd', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'a', 'r', 'r',
-  'y', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'c', 'a', 'r', 'r', 'y', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u', 'f',
+  'f', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u', 'f',
+  'f', 'e', 'q', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'S', '3', '2', 'b', '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n',
+  'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c',
-  'l', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c',
-  'l', 'b', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't', '_', 'n',
+  'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'd', 'd', 'h', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'd', 'd', 'h', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'q', '_', '1', '2', '8',
+  'v', 'S', '3', '2', 'b', '_', 'n', 't', '_', 'n', 'q', 'p', 'r', 'e', 'd',
+  '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'S', '3', '2', 'b', '_', 'n', 't', '_', 'q', 'p', 'r', 'e', 'd', '_',
+  'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_',
+  'n', 't', '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_', '1', '2', '8',
   'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 's', 'a',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'q',
+  'p', 'r', 'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'S', '3', '2', 'b', '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b', '_',
+  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'b',
+  '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f',
+  'f', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd',
+  'i', 'f', 'f', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's',
+  'd', 'i', 'f', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b',
+  's', 'd', 'i', 'f', 'f', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'b', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'b', 's', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'b', 's', 'h', '_', 's', 'a', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'b', 's', 'h', '_', 's', 'a', 't', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '_', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'w', '_',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'd', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'b', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'b', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 'n', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 'n', 'q', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 'q', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a',
   't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 's', 'a',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a',
   't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'd', 'd', 'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2',
+  '_', 'v', 'a', 'd', 'd', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2',
   '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'w',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'a',
+  'r', 'r', 'y', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'd', 'd', 'c', 'a', 'r', 'r', 'y', 's', 'a', 't', '_', '1', '2', '8', 'B',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'w', '_', '1',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'c', 'l', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'c', 'l', 'b', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'd', 'd', 'h', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'd', 'd', 'h', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'q', '_', '1',
   '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h',
-  'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
+  'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'w',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
   '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'h', 'w', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
-  'b', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '_', '1',
+  'd', 'h', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'h', 'w', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b',
+  'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'u', 'b', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1',
   '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
   'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
-  'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'u',
-  'b', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's',
-  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h',
-  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'b', 'u', 'b', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'u', 'h', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', 'a', 't', '_', 'd',
-  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'u', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'u', 'h', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', 'a', 'c', 'c',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'u', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'u', 'w', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'w', 's', 'a', 't', '_', 'd',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'w', 's',
-  'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'd', 'd', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n', 'q', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'q', '_', '1',
+  'v', 'a', 'd', 'd', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '_', '1',
   '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w',
-  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_', 'd', 'v', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'l', 'i',
-  'g', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'l', 'i', 'g',
-  'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'l', 'i', 'g', 'n', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'l', 'i', 'g', 'n', 'b', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '_', '1', '2', '8', 'B', '\000',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
+  'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
+  'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', 'a', 't', '_', 'd', 'v', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'n',
-  'q', 'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q',
-  'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'q', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'q', 'v', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd',
-  'v', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v',
-  'r', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c', 'c', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h',
-  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 's', 'l', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 's', 'l', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 's', 'l', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', 'v', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', 'v', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', '_', 'i',
-  'n', 't', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', '_',
-  'i', 'n', 't', 'o', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 's', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 'r', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 's', 'r', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 's', 'r', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 'r', 'n',
-  'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
-  'h', 'b', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 's', 'a', 't',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
-  'r', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'r', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a', 't',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
-  'r', 'h', 'u', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 's', 'r', 'h', 'u', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'v', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u', 'b',
-  'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 'r', 'u', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h',
-  'u', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
-  'r', 'u', 'h', 'u', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 'r', 'n',
-  'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
-  'u', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u',
-  'w', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 's', 'r', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'r', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 's', 'r', 'w', '_', 'a', 'c', 'c', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w',
-  'h', 'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 's', 'r', 'w', 'h', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', 's',
-  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h',
-  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 's', 'r', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'u', 'h', 'r', 'n', 'd',
-  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 's', 'r', 'w', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'r', 'w', 'u', 'h', 's', 'a', 't', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'v', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i',
-  'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g',
-  'n', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 's', 'i', 'g', 'n', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 's', 'i', 'g', 'n', 'p', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'v', 'g', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'v', 'g', 'b', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'v', 'g', 'b', 'r', 'n', 'd', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n', 'd', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v',
-  'g', 'u', 'b', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'v', 'g', 'u', 'b', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', 'n', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', 'n', 'd',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v',
-  'g', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u',
-  'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'v', 'g', 'u', 'w', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'v', 'g', 'u', 'w', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'v', 'g', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'w', 'r', 'n', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'w', 'r', 'n', 'd', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'h', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'w', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'o', 'm', 'b', 'i', 'n', 'e',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'o', 'm', 'b', 'i', 'n', 'e',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', '0', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'd', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'd', '0', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '4', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '4', 'w', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'h', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a',
-  'l', 'v', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a',
-  'l', 'v', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'e', 'l', 't', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'd', 'e', 'l', 't', 'a', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
-  'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u',
-  's', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v', '_', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u',
-  's', '_', 'd', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
-  'y', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd',
-  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
-  'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '_',
-  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
-  'i', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
-  'y', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
-  'p', 'y', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's',
-  'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u',
-  'i', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't', '_', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
-  's', 'u', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
-  'h', 's', 'u', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's', 'a', 't', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
-  'h', 's', 'u', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's',
-  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
-  'v', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's',
-  'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '_', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u',
-  'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'e', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e',
-  'q', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'e', 'q', 'b', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'e', 'q', 'b', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'o', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'o', 'r', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'x', 'o', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'x', 'o', 'r',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'a',
-  'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'e', 'q', 'h', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e',
-  'q', 'h', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'e', 'q', 'h', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'e', 'q', 'h', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'e', 'q', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'a', 'n', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'a', 'n', 'd', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'o', 'r',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q',
-  'w', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q',
-  'w', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e',
-  'r', 'm', 'h', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't',
-  'h', 'e', 'r', 'm', 'h', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a',
-  't', 'h', 'e', 'r', 'm', 'h', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', 'q', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r',
-  'm', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e',
-  'r', 'm', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', 'q', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'a', 'n', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'a', 'n', 'd', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b',
-  '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_',
-  'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 't', 'b', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 't', 'b', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'g', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'g', 't', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'h', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'h', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'o', 'r', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'x',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'x',
-  'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 't', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'u', 'b', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 't', 'u', 'b', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'o', 'r', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b',
-  '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u',
-  'b', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 't', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 't', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'u', 'h', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'a', 'n', 'd', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'o',
-  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'u', 'h', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 't', 'u', 'h', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 't', 'u', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'a', 'n', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'a', 'n', 'd', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u',
-  'w', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u',
-  'w', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'u', 'w', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'x', 'o', 'r', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'a', 'n', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'a', 'n', 'd', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'o',
-  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'w', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'w', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'i', 'n', 's', 'e', 'r', 't', 'w', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'i', 'n', 's', 'e', 'r', 't', 'w', 'r', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l', 'i',
-  'g', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l', 'i',
-  'g', 'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'b', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'l', 's', 'r', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'h', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'l', 's', 'r', 'h', 'v', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'l', 's', 'r', 'w', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'w', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'l', 's', 'r', 'w', 'v', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', '4', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'l', 'u', 't', '4', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b',
-  '_', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v',
-  'v', 'b', '_', 'n', 'm', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_',
-  'o', 'r', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c', 'c',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b',
-  '_', 'o', 'r', 'a', 'c', 'c', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', 'i', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u',
-  't', 'v', 'w', 'h', '_', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'l', 'u', 't', 'v', 'w', 'h', '_', 'n', 'm', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'o',
-  'r', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't',
-  'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'o',
-  'r', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u',
-  't', 'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c', 'i', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h',
-  'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r',
-  'e', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 't', 'n',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd',
-  's', 't', 'o', 'r', 'e', 'n', 't', 'n', 'q', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't',
-  'o', 'r', 'e', 'n', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 't', 'q', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k',
-  'e', 'd', 's', 't', 'o', 'r', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'q', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'h', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'w', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'w', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
-  'b', 'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'a', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', 'v',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'a', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
-  'b', 'u', 'u', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'a', 'b', 'u', 'u', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
-  'b', 'u', 'u', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
-  'b', 'u', 'u', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'a', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'a', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'a', 'h', 'b', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'b', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
-  'h', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'a', 'h', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '_', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h',
-  'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'u', 'h', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'u', 'h', 's', 'a',
-  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 's', 'u', 'h', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 's', 'u', 'h', 'u', 'h', 's', 'a', 't', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's',
-  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'e', 'w', 'u', 'h', '_', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'e', 'w', 'u', 'h', '_', '6', '4', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '_', 'a', 'c',
-  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'h', 's', 'r', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'h', 's', 'r', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'h', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'h', 's', 's', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h',
-  'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '_', 'a', 'c',
-  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'h', 'v', 's', 'r', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'h', 'v', 's', 'r', 's', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i',
-  'e', 'w', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'i', 'e', 'w', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w',
-  'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e',
-  'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '_',
-  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'i', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'i', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'i', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', '_', 'a', 'c', 'c', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i',
-  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'i', 'h', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'i', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'o',
-  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'o',
-  'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'i', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'i', 'w', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'b', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'b', '_', 'a', 'c',
-  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'i', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'i', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'i', 'w', 'h', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'h', '_', 'a', 'c', 'c',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'i', 'w', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'i', 'w', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u', 'b', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u', 'b', '_',
-  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'o', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'o', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', '6', '4', '_', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w',
-  'h', '_', '6', '4', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h',
-  '_', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n', 'd', '_', 's', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w',
-  'h', '_', 'r', 'n', 'd', '_', 's', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_',
-  's', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'o', 'w', 'h', '_', 's', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_',
-  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'u', 'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'u', 'b', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a',
-  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'u', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', '_', 'a', 'c', 'c', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'u', 'h', 'e', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'u', 'h', 'e', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'u', 'h', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'u', 'h', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'u', 'x', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'u', 'x', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'n', 'a', 'v', 'g', 'b', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'u', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'u', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'w', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 'r', 'm',
-  'a', 'm', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 'r',
-  'm', 'a', 'm', 't', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't', 'w', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'n', 'o', 't', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'p', 'a', 'c', 'k', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'p', 'a', 'c', 'k', 'e', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'e', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'e', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'b', '_',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k',
-  'h', 'b', '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'u', 'b', '_', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'u', 'b',
-  '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'p', 'a', 'c', 'k', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'p', 'a', 'c', 'k', 'o', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'o', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'o', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'h', '_',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k',
-  'w', 'h', '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'u', 'h', '_', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'u', 'h',
-  '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'p', 'o', 'p', 'c', 'o', 'u', 'n', 't', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'o', 'p', 'c', 'o', 'u', 'n', 't', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f',
-  'i', 'x', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e',
-  'f', 'i', 'x', 'q', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i',
-  'x', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f',
-  'i', 'x', 'q', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 'd', 'e', 'l', 't', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'd', 'e', 'l', 't', 'a', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u',
-  'b', '_', 'r', 't', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't', 't', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
-  'b', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u',
-  's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
-  'y', 'b', 'u', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
-  'p', 'y', 'b', 'u', 's', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'i', '_', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u',
-  's', 'i', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
-  'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
-  'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b',
-  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'm', 'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 'm', 'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
-  'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b',
-  '_', 'r', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
-  'y', 'u', 'b', '_', 'r', 't', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'r', 't', 't',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
-  'y', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b',
-  'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'm', 'p', 'y', 'u', 'b', 'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'i', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
-  'y', 'u', 'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
-  'y', 'u', 'b', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a',
-  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'r', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'r', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 't',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 't', 'r', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n',
-  'd', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n',
-  'd', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'o', 'u', 'n', 'd', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 'o', 'u', 'n', 'd', 'h', 'u', 'b', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'h',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd',
-  'u', 'h', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'w', 'u', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'w', 'u', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n',
-  'd', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n',
-  'd', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'o', 'u', 'n', 'd', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 'o', 'u', 'n', 'd', 'w', 'u', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's',
-  'a', 'd', 'u', 'b', 'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i', '_', 'a', 'c', 'c', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'd',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'd', 'w', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't',
-  'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'h',
-  'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'a', 't', 'u', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'a', 't', 'u', 'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'a', 't', 'w', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'a', 't', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't',
-  'e', 'r', 'm', 'h', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '_', 'a', 'd', 'd', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a',
-  't', 't', 'e', 'r', 'm', 'h', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'q', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r',
-  'm', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't',
-  't', 'e', 'r', 'm', 'h', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', '_',
-  'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't',
-  't', 'e', 'r', 'm', 'h', 'w', '_', 'a', 'd', 'd', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r',
-  'm', 'h', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a',
-  't', 't', 'e', 'r', 'm', 'h', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r',
-  'm', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '_', 'a', 'd', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w',
-  '_', 'a', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', 'q',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'e', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'e', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f',
-  'f', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'h', 'u', 'f', 'f', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'h', 'u', 'f', 'f', 'e', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'o', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'o', 'b', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u',
-  'f', 'f', 'v', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h',
-  'u', 'f', 'f', 'v', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e',
-  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'h', 'u', 'f', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h',
-  'u', 'f', 'o', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'u', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'u', 'b', 'b', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'u', 'b', 'b', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'n', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'n', 'q', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'q', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's',
-  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'u', 'b', 'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', '_',
-  'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', '_',
-  'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'u', 'b', 'h', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'h', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'h', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'u', 'b', 'h', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a',
-  't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
-  'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's',
-  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b',
-  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'u', 'b', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', 'a', 't', '_', 'd',
-  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a',
-  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'u', 'b', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', 'a', 't', '_',
-  'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h',
-  's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', 'a',
-  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'u', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't', '_', 'd', 'v', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w',
-  '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', 'a', 't',
   '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'u', 'b', 'w', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'v', 'a', 'd', 'd', 'u', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'u', 'b', 'w', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'a', 'd', 'd', 'u', 'h', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'u', 'b', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's',
-  'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
-  'b', 'w', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'w', 'a', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'w', 'a', 'p', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', 'a',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', 'a',
   'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  't', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  't', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'a', 'd', 'd', 'u', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'd', 'd', 'u', 'w', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'w', 's', 'a', 't',
+  '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
+  'w', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', 'u',
-  's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'v', 'a', 'd', 'd', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n', 'q', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
+  'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'q',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'w', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '_', 'a', 'c',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_', 'd',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'l', 'i', 'g', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'l',
+  'i', 'g', 'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r',
+  't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n',
+  'd', 'n', 'q', 'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r',
+  't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n',
+  'd', 'q', 'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v',
+  'q', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'q',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'n', 'd', 'v', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n',
+  'd', 'v', 'r', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l',
+  'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'l', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 's', 'l', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'l', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'l', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w',
+  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', 'v', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
+  '_', 'i', 'n', 't', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'r', '_', 'i', 'n', 't', 'o', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 's', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 's', 'r', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 's', 'r', 'h', '_', 'a', 'c', 'c', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b',
+  'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  's', 'r', 'h', 'b', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 's', 'a',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 's',
+  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 's', 'r', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'u', 'b', 'r', 'n', 'd', 's',
+  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 's', 'r', 'h', 'u', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'r', 'h', 'u', 'b', 's', 'a', 't', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'v', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h',
+  'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 's', 'r', 'u', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
+  'u', 'h', 'u', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 's', 'r', 'u', 'h', 'u', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h',
+  'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  's', 'r', 'u', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w',
+  'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'r', 'u', 'w', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', '_', 'a', 'c', 'c', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
+  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'r', 'w', 'h', 'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'r', 'w', 'h', 'r', 'n', 'd', 's', 'a', 't', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w',
+  'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
+  'w', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'u', 'h', 'r',
+  'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'w', 'u', 'h', 's', 'a', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'u', 'h', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
+  'w', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'v',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  's', 'i', 'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's',
+  'i', 'g', 'n', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 's', 's', 'i', 'g', 'n', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 's', 's', 'i', 'g', 'n', 'p', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'v', 'g', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'b', 'r', 'n', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'b', 'r', 'n', 'd', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n',
+  'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'v', 'g', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g',
+  'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'v', 'g', 'u', 'b', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'v', 'g', 'u', 'b', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r',
+  'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'v', 'g', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v',
+  'g', 'u', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'v', 'g', 'u', 'w', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'v', 'g', 'u', 'w', 'r', 'n', 'd', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'w', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'w', 'r', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'w', 'r', 'n', 'd', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'w', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'o', 'm', 'b', 'i',
+  'n', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'c', 'o', 'm', 'b', 'i',
+  'n', 'e', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'd', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', '0', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'd', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 'd', '0', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '4', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'b', '4', 'w',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e',
+  'a', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l',
+  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'e', 'a', 'l', 'v', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'e', 'a', 'l', 'v', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'e', 'l', 't', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'd', 'e', 'l', 't', 'a', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b',
+  'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's',
+  '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
+  'b', 'u', 's', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
+  'b', 'u', 's', '_', 'd', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
+  'h', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'm', 'p', 'y', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd',
+  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b',
+  '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd',
+  'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
+  'y', 'h', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'm', 'p', 'y', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'd', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'a', 't', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
+  'h', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
+  's', 'u', 'i', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
+  'y', 'h', 's', 'u', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
+  's', 'u', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
+  'p', 'y', 'h', 's', 'u', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's', 'a',
+  't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
+  'p', 'y', 'h', 's', 'u', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
+  'v', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
+  'y', 'h', 'v', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
+  'v', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 's', 'a',
+  'd', 'u', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'e', 'q', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'e', 'q', 'b', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'e', 'q', 'b', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'o', 'r', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'x',
+  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'x',
+  'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'e', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h',
+  '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h',
+  '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'e', 'q', 'h', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'e', 'q', 'h', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'x', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'x', 'o', 'r', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'a', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'a', 'n', 'd', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w',
+  '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_',
+  'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'e', 'q', 'w', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'e', 'q', 'w', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't',
+  'h', 'e', 'r', 'm', 'h', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  'a', 't', 'h', 'e', 'r', 'm', 'h', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm',
+  'h', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', 'q', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h',
+  'e', 'r', 'm', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't',
+  'h', 'e', 'r', 'm', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', 'q', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', 'q', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'a', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'a', 'n',
+  'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  't', 'b', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
+  'b', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'b', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'b', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'g', 't', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 't', 'h', '_', 'a', 'n', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 't', 'h', '_', 'a', 'n', 'd', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'o', 'r', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h',
+  '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h',
+  '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  't', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'u', 'b', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'u', 'b', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'o', 'r',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
+  'u', 'b', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  't', 'u', 'b', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'a', 'n', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'a', 'n', 'd', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h',
+  '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h',
+  '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'u', 'h', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'u', 'h', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'a', 'n',
+  'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  't', 'u', 'w', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  't', 'u', 'w', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'x', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'x', 'o', 'r', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'a', 'n', 'd',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
+  'w', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w',
+  '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'w', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'w', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'i', 'n', 's', 'e', 'r', 't', 'w', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'i', 'n', 's', 'e', 'r', 't', 'w', 'r',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a',
+  'l', 'i', 'g', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a',
+  'l', 'i', 'g', 'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'h', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'h', 'v', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'h', 'v', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'w', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'w', 'v', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 's', 'r', 'w', 'v', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', '4', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', '4', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v',
+  'v', 'b', '_', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u',
+  't', 'v', 'v', 'b', '_', 'n', 'm', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v',
+  'b', '_', 'o', 'r', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a',
+  'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v',
+  'v', 'b', '_', 'o', 'r', 'a', 'c', 'c', 'i', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', 'i', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't',
+  'v', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v',
+  'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'l', 'u', 't', 'v', 'w', 'h', '_', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'n', 'm', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h',
+  '_', 'o', 'r', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
+  'u', 't', 'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h',
+  '_', 'o', 'r', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'l', 'u', 't', 'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c', 'i', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v',
+  'w', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v',
+  'w', 'h', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't',
+  'o', 'r', 'e', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n',
+  't', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k',
+  'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 't', 'n', 'q', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd',
+  's', 't', 'o', 'r', 'e', 'n', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 't', 'q',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a',
+  's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'q',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a',
+  'x', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'b', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'b', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x',
+  'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a',
+  'x', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'w', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'w', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b',
+  'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u',
+  's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'a', 'b', 'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u',
+  's', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u',
+  's', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'a', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'a', 'b', 'u', 'u', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'a', 'b', 'u', 'u', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'a', 'b', 'u', 'u', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'a', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'b', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'b', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'a', 'h', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'a', 'h', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
+  'u', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'u', 'h', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'u', 'h',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 's', 'u', 'h', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 's', 'u', 'h', 'u', 'h', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'b', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b',
+  'u', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b',
+  'u', 's', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b',
+  'u', 's', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'b', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u',
+  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'e', 'w', 'u', 'h', '_', '6', '4', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '_', '6', '4', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '_',
+  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'h', 's', 'r', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'h', 's', 'r', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 's', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u',
+  's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'h', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '_', 'a', 'c',
   'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '_',
+  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'h', 'v', 's', 'r', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'h', 'v', 's', 'r', 's', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'i', 'e', 'w', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'h', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i',
+  'e', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'i', 'e', 'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '_', 'a', 'c', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u',
+  'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', '_', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'i', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'i', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'h', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', 'b', '_', 'a', 'c', 'c', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'i', 'o', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'i', 'o', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'i', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'w', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'b', '_', 'a', 'c', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'b', '_',
+  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'i', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'h', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'h', '_', 'a',
+  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'i', 'w', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'i', 'w', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u', 'b', '_', 'a', 'c',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u',
+  'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', '6', '4',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'o', 'w', 'h', '_', '6', '4', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_',
+  'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o',
+  'w', 'h', '_', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n', 'd', '_',
+  's', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'o', 'w', 'h', '_', 'r', 'n', 'd', '_', 's', 'a', 'c', 'c', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w',
+  'h', '_', 's', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'o', 'w', 'h', '_', 's', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
+  'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v',
   '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 't', 'r', 'a', 'n', '2', 'x', '2', '_', 'm', 'a', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 't', 'r', 'a', 'n', '2', 'x', '2', '_', 'm',
-  'a', 'p', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  '_', 'v', 'm', 'p', 'y', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'u', 'n', 'p', 'a', 'c', 'k', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'u', 'n', 'p', 'a', 'c', 'k', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c',
-  'k', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a',
-  'c', 'k', 'o', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'h', '\000', '_', '_', 'b', 'u',
+  'm', 'p', 'y', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'h', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c',
-  'k', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'x', 'o', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', '_', 'a', 'c', 'c', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', '_', 'a', 'c', 'c', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'u', 'h', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
+  'h', 'e', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'z', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'z', 'h', '_', '1', '2',
+  'm', 'p', 'y', 'u', 'h', 'e', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
+  'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'u', 'h', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '_', 'a', 'c', 'c', '_', '1', '2',
   '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c', 'c', 'l', 'e', 'a',
-  'n', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c', 'c', 'l', 'e', 'a',
-  'n', 'i', 'n', 'v', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c', 'i',
-  'n', 'v', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c', 'z', 'e', 'r',
-  'o', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'Y', '4', '_', 'l', '2', 'f', 'e', 't', 'c',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'u', 'x', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'u', 'x', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'u', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'u', 'b', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v',
+  'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'w',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o',
+  'r', 'm', 'a', 'm', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n',
+  'o', 'r', 'm', 'a', 'm', 't', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't', 'w', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 't', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'o', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'e', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'p', 'a', 'c', 'k', 'e', 'b', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'e', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'e', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h',
+  'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a',
+  'c', 'k', 'h', 'b', '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'u', 'b', '_', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h',
+  'u', 'b', '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'o', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'p', 'a', 'c', 'k', 'o', 'b', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'o', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'o', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w',
+  'h', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a',
+  'c', 'k', 'w', 'h', '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'u', 'h', '_', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w',
+  'u', 'h', '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'p', 'o', 'p', 'c', 'o', 'u', 'n', 't', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'o', 'p', 'c', 'o', 'u', 'n', 't', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r',
+  'e', 'f', 'i', 'x', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
+  'r', 'e', 'f', 'i', 'x', 'q', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e',
+  'f', 'i', 'x', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r',
+  'e', 'f', 'i', 'x', 'q', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'd', 'e', 'l', 't', 'a', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'r', 'd', 'e', 'l', 't', 'a', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_',
+  'r', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'b', 'u', 'b', '_', 'r', 't', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't',
+  't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
+  'p', 'y', 'b', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'b', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'b', 'u', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'm', 'p', 'y', 'b', 'u', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'r', 'm', 'p', 'y', 'b', 'u', 's', 'i', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'i', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'b', 'u', 's', 'i', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
+  'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
+  'p', 'y', 'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
+  'y', 'b', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'r', 'm', 'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
+  'y', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'r', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'u', 'b', '_', 'r', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'm', 'p', 'y', 'u', 'b', '_', 'r', 't', 't', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'r',
+  't', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'm', 'p', 'y', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'u', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'u', 'b', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'r', 'm', 'p', 'y', 'u', 'b', 'i', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'i', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'm', 'p', 'y', 'u', 'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'm', 'p', 'y', 'u', 'b', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v',
+  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'r', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'o', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 't', 'r',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'u', 'n', 'd', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'u', 'n', 'd', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'h', 'u', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'h', 'u', 'b', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd',
+  'u', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u',
+  'n', 'd', 'u', 'h', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'w', 'u', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'w', 'u', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'u', 'n', 'd', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'u', 'n', 'd', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'w', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'w', 'u', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u',
+  'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u',
+  'b', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'r', 's', 'a', 'd', 'u', 'b', 'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i', '_', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a',
+  't', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'd',
+  'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a',
+  't', 'h', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'a', 't', 'u', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'a', 't', 'u', 'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'w', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'a', 't', 'w', 'h', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a',
+  't', 't', 'e', 'r', 'm', 'h', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '_', 'a', 'd',
+  'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'q', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't',
+  'e', 'r', 'm', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c',
+  'a', 't', 't', 'e', 'r', 'm', 'h', 'w', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h',
+  'w', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c',
+  'a', 't', 't', 'e', 'r', 'm', 'h', 'w', '_', 'a', 'd', 'd', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't',
+  'e', 'r', 'm', 'h', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', 'q', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r',
+  'm', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't',
+  'e', 'r', 'm', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '_', 'a', 'd', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r',
+  'm', 'w', '_', 'a', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm',
+  'w', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'e',
   'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'Y', '5', '_', 'l', '2', 'f', 'e', 't', 'c', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c',
-  '_', 'l', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'c', 'i', 'r', 'c', '_', 'l', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i',
-  'r', 'c', '_', 'l', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's', 't', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c',
-  '_', 's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'c', 'i', 'r', 'c', '_', 's', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's', 't', 'h', 'h', 'i', '\000',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'e', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h',
+  'u', 'f', 'f', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u',
+  'f', 'f', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'h', 'u', 'f', 'f', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'h', 'u', 'f', 'f', 'e', 'b', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'o',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'o',
+  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'h', 'u', 'f', 'f', 'v', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'h', 'u', 'f', 'f', 'v', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f',
+  'o', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f',
+  'o', 'e', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'h', 'u', 'f', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'h', 'u', 'f', 'o', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 's', 'u', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'b', '_', 'd', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'b', '_', 'd', 'v', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'n', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'n', 'q', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'q', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's', 'a', 't', '_', 'd', 'v',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
+  'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'h', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'h', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'h', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'h', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'h', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h',
+  's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'u', 'b', 'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u',
+  'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'u', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', 'a', 't',
+  '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'u', 'b', 'b', '_',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', 'a',
+  't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'u', 'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't', '_', 'd',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
+  'b', 'w', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
+  'b', 'w', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'w', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'w', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'q', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'u', 'b', 'w', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'w', 'a', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'w', 'a', 'p', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b',
+  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y',
+  'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y',
+  'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 't', 'r', 'a', 'n', '2', 'x', '2', '_', 'm', 'a', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'r', 'a', 'n', '2', 'x', '2',
+  '_', 'm', 'a', 'p', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'b', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p',
+  'a', 'c', 'k', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n',
+  'p', 'a', 'c', 'k', 'o', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a',
+  'c', 'k', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p',
+  'a', 'c', 'k', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'x', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'z', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'z', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c', 'c', 'l',
+  'e', 'a', 'n', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c', 'c', 'l',
+  'e', 'a', 'n', 'i', 'n', 'v', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd',
+  'c', 'i', 'n', 'v', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c', 'z',
+  'e', 'r', 'o', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '4', '_', 'l', '2', 'f', 'e',
+  't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '5', '_', 'l', '2', 'f', 'e', 't',
+  'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i',
+  'r', 'c', '_', 'l', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'h', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_',
-  's', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'p', 'r', 'e', 'f', 'e', 't', 'c', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'h', 'e', 'x', 'a',
-  'g', 'o', 'n', '_', 'v', 'm', 'e', 'm', 'c', 'p', 'y', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'h', 'e', 'x', 'a', 'g', 'o', 'n', '_',
-  'v', 'm', 'e', 'm', 's', 'e', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'b', 's', 'q', '_', 's', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'a', 'b', 's', 'q', '_', 's', '_', 'q', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'b',
-  's', 'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd',
-  'd', '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
-  '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', '_', 'p', 'h', '\000', '_', '_',
+  'l', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'c', 'i', 'r', 'c', '_', 'l', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's',
+  't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i',
+  'r', 'c', '_', 's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'c', 'i', 'r', 'c', '_', 's', 't', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's', 't', 'h', 'h',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r',
+  'c', '_', 's', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'p', 'r', 'e', 'f', 'e', 't',
+  'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'h', 'e',
+  'x', 'a', 'g', 'o', 'n', '_', 'v', 'm', 'e', 'm', 'c', 'p', 'y', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'h', 'e', 'x', 'a', 'g', 'o',
+  'n', '_', 'v', 'm', 'e', 'm', 's', 'e', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'b', 's', 'q', '_',
+  's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'a', 'b', 's', 'q', '_', 's', '_', 'q', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'a', 'b', 's', 'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'a', 'd', 'd', '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
+  'd', 'd', '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'a', 'd', 'd', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'p', 'h', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd',
-  'd', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q',
-  'h', '_', 'r', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'r', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'a',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'a', 'd', 'd', 's', '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_',
-  'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 'd', 'd', 's', '_', 'a', '_', 'w', '\000', '_', '_', 'b',
+  'd', 'q', 'h', '_', 'r', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_',
+  'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'w', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's',
-  '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'd', '\000', '_', '_',
+  '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'a', '_', 'd', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
-  's', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'w', '\000', '_',
+  's', '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'a', '_', 'w', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd',
-  'd', 's', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u', '_', 'd', '\000',
+  'd', 's', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'd', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
-  'd', 'd', 's', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'a', 'd', 'd', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_', 'p', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'a', 'd', 'd', 'u', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_', 's', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'a', 'd', 'd', 'u', '_', 's', '_', 'q', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd',
-  'd', 'u', 'h', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', 'h', '_', 'r', '_',
-  'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'a', 'd', 'd', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
-  'd', 'd', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v',
-  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', 'i',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'w', 'c',
+  'd', 'd', 's', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'w',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'a', 'n', 'd', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'n', 'd', 'i', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'p', 'p',
-  'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b',
-  '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u',
-  'b', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'b', '\000', '_',
+  'a', 'd', 'd', 's', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'a', 'd', 'd', 's', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 'a', 'd', 'd', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_', 'p',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'a', 'd', 'd', 'u', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_',
+  's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_', 's', '_', 'q', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'a', 'd', 'd', 'u', 'h', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', 'h', '_',
+  'r', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'a', 'd', 'd', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd',
+  'd', 'v', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
+  'v', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd',
+  'w', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'a', 'n', 'd', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'n', 'd', 'i', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a',
+  'p', 'p', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'b', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's',
-  'u', 'b', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'h', '\000',
+  'u', 'b', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'h', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
-  's', 'u', 'b', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
-  'v', 'e', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v',
-  'e', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e',
-  '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_',
-  'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r',
-  '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e',
-  'r', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v',
-  'e', 'r', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
-  'v', 'e', 'r', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b', 'a', 'l', 'i', 'g', 'n', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  'c', 'l', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'b', 'c', 'l', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i', '_', 'b',
+  's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'b',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'b', 'c', 'l', 'r', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i', '_', 'h', '\000',
+  'a', 's', 'u', 'b', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'a', 'v', 'e', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'a', 'v', 'e', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
+  'v', 'e', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v',
+  'e', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v',
+  'e', 'r', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
+  'v', 'e', 'r', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'a', 'v', 'e', 'r', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b', 'a', 'l', 'i', 'g',
+  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'b', 'c', 'l', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c',
+  'l', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'b', 'c', 'l', 'r', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'b', 'c', 'l', 'r', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 'i', 'n', 's', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'h', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  'c', 'l', 'r', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i',
-  'n', 's', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'l', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i',
-  'n', 's', 'l', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i',
-  'n', 's', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'r', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i',
-  'n', 's', 'r', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'b', 'i', 't', 'r', 'e', 'v', '\000', '_',
+  'i', 'n', 's', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
+  'i', 'n', 's', 'l', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 'i', 'n', 's', 'l', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 'i', 'n', 's', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
+  'i', 'n', 's', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
+  'i', 'n', 's', 'r', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 'i', 'n', 's', 'r', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b', 'i', 't', 'r', 'e', 'v',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 'm', 'n', 'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'm', 'n', 'z', 'i', '_', 'b', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'm',
-  'n', 'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'm', 'n', 'z', 'i', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'm', 'z', '_',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 'm', 'z', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n',
-  'e', 'g', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 'n', 'e', 'g', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'd',
+  'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'm', 'z', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_', 'b',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'b', 'n', 'e', 'g', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  'n', 'z', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  'n', 'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b', 'p', 'o', 's', 'g',
-  'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'b', 's', 'e', 'l', '_', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 'l', 'i', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 's', 'e', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's',
-  'e', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', 'i',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'b', 's', 'e', 't', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', 'i', '_',
+  'b', 'n', 'e', 'g', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e',
+  'g', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'b', 'n', 'z', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_',
   'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 's', 'e', 't', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 'z', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e',
-  'q', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'c', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e',
-  'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'd',
+  '_', 'b', 'n', 'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b', 'p', 'o',
+  's', 'g', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'b', 's', 'e', 'l', '_', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 'l',
+  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 's', 'e', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'd',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'e', 'q', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'f', 'c',
-  'm', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'c', 'l', 'e', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 'e', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 'e', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'd',
+  'b', 's', 'e', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e',
+  't', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 's', 'e', 't', 'i', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't',
+  'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 's', 'e', 't', 'i', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
+  'z', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'z', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'w',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 'e', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'l', 'e', 'i', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 's', '_', 'd',
+  'c', 'e', 'q', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'h',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 'e', 'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 'u',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_',
-  'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'c', 'l', 't', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 's',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 't', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 't', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 't', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'l', 't', 'i', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 't', 'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 'u',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_',
-  'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'c', 'm', 'p', '_', 'e', 'q', '_', 'p', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c',
-  'm', 'p', '_', 'l', 'e', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', '_', 'l', 't',
-  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_', 'e', 'q', '_', 'q',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_', 'l', 'e', '_', 'q', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'c', 'm', 'p', 'g', 'd', 'u', '_', 'l', 't', '_', 'q', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm',
-  'p', 'g', 'u', '_', 'e', 'q', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'u',
-  '_', 'l', 'e', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'u', '_', 'l', 't',
-  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'c', 'm', 'p', 'u', '_', 'e', 'q', '_', 'q', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'c', 'm', 'p', 'u', '_', 'l', 'e', '_', 'q', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'u',
-  '_', 'l', 't', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'o', 'p', 'y', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'o', 'p', 'y', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'o', 'p', 'y', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'o', 'p', 'y', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 't', 'c', 'm', 's',
-  'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'd', 'i', 'v', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'd', 'i', 'v', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
-  'i', 'v', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i',
-  'v', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'l',
-  's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'd', 'o', 't', 'p', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_',
-  's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'd', 'o', 't', 'p', '_', 's', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p',
-  '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 'u', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't',
-  'p', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', '_', 'w', '_', 'p', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
-  'p', 'a', 'd', 'd', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 's',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 's', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd',
-  'd', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 'u', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
-  'p', 'a', 'd', 'd', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', '_', 's',
-  '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', '_', 's', 'a', '_', 'l',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'd', 'p', 'a', 'q', 'x', '_', 's', '_', 'w', '_', 'p', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'd', 'p', 'a', 'q', 'x', '_', 's', 'a', '_', 'w', '_', 'p', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'd', 'p', 'a', 'u', '_', 'h', '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'u',
-  '_', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'x', '_', 'w', '_', 'p',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'd', 'p', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q',
-  '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q', '_', 's', 'a',
-  '_', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q', 'x', '_', 's', '_', 'w', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'd', 'p', 's', 'q', 'x', '_', 's', 'a', '_', 'w', '_', 'p',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'd', 'p', 's', 'u', '_', 'h', '_', 'q', 'b', 'l', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p',
-  's', 'u', '_', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 's',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'd', 'p', 's', 'u', 'b', '_', 's', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u',
-  'b', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 'u', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
-  'p', 's', 'u', 'b', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 'u',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'd', 'p', 's', 'x', '_', 'w', '_', 'p', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x',
-  't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'e', 'x', 't', 'p', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_',
-  'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_', 'r', 's', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e',
-  'x', 't', 'r', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'a', 'd', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'a', 'd', 'd', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'a', 'f',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'c', 'a', 'f', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'e', 'q', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
   'c', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 'a', 's', 's', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c',
-  'l', 'a', 's', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 'e', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l',
-  'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'c', 'l', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 't', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'c', 'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'n', 'e', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'o',
-  'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'c', 'o', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'e', 'q', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 'c', 'u', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 'e', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'c', 'u', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 't', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'c', 'u', 'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'n', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u',
-  'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'c', 'u', 'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'n', 'e',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'd', 'i', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'd', 'i', 'v', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'e', 'x', 'd', 'o', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'd', 'o', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e',
-  'x', 'p', '2', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'p', '2', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x',
-  'u', 'p', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'l', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e',
-  'x', 'u', 'p', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'r', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'f', 'i', 'n', 't', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'i', 'n', 't', '_', 's',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'f', 'i', 'n', 't', '_', 'u', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'i', 'n',
-  't', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'l', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'l',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'f', 'q', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'r', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'i', 'l', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'i', 'l', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'l', 'o', 'g', '2', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'l', 'o', 'g', '2', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'd', 'd', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'm', 'a', 'd', 'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'a', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'm', 'a', 'x', '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm',
-  'a', 'x', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 'm', 'i', 'n', '_', 'a', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i',
-  'n', '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'm', 'i', 'n', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i', 'n',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'm', 's', 'u', 'b', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 's', 'u', 'b', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 'm', 'u', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'u', 'l', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r',
-  'c', 'p', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 'r', 'c', 'p', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 'i', 'n', 't',
+  '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i',
   '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'r', 'i', 'n', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 's', 'q', 'r', 't',
+  'a', '_', 'c', 'e', 'q', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
+  'f', 'c', 'm', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e',
+  '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u',
   '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'r', 's', 'q', 'r', 't', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'a', 'f', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 's', 'a', 'f', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'e', 'q', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's',
-  'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 's', 'l', 'e', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 'e', '_',
+  'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_',
   'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 's', 'l', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 't', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's',
-  'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 's', 'n', 'e', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'o', 'r', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 's', 'o', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'q', 'r', 't', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  's', 'q', 'r', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'b', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u',
-  'b', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 's', 'u', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'e', 'q',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 's', 'u', 'l', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l', 'e', '_',
+  '_', 'c', 'l', 'e', 'i', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 's',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'c', 'l', 'e', 'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i',
+  '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e',
+  'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 's', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't',
+  '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'c', 'l', 't', '_', 's', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'c', 'l', 't', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'c', 'l', 't', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u', '_',
   'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 's', 'u', 'l', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l', 't', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 's', 'u', 'n', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'n', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u',
-  'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 's', 'u', 'n', 'e', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n',
-  't', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n', 't', '_', 's', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  't', 'i', 'n', 't', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n', 't', '_', 'u',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 't', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'q', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'r',
-  'u', 'n', 'c', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_', 's',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_', 'u', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'r',
-  'u', 'n', 'c', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'h', 'a', 'd', 'd', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'h', 'a', 'd', 'd', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 'u',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'h', 'a', 'd', 'd', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_',
-  's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'h', 's', 'u', 'b', '_', 's', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b',
-  '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_', 'u', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u',
-  'b', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_', 'u', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l',
-  'v', 'e', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v',
-  'e', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'l',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'i', 'l', 'v', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'l', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i',
-  'l', 'v', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v',
-  'o', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'o',
-  'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'i', 'l', 'v', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's',
-  'e', 'r', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n',
-  's', 'e', 'r', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'i', 'n', 's', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'i', 'n', 's', 'v', 'e', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v',
-  'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'i', 'n', 's', 'v', 'e', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v', 'e',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'l', 'b', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'l', 'd', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'l', 'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd',
-  'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'l', 'd', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l',
-  'h', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'l', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'l', 'w', 'x', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'd', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'a', 'd', 'd', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', '_', 'q', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'a', 'd', 'd', 'r', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'r',
-  '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'm', 'a', 'd', 'd', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'v',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'a', 'd', 'd', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'v', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'a', 'd', 'd', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's', '_',
-  'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's', '_', 'w', '_', 'p',
-  'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'm', 'a', 'q', '_', 's', 'a', '_', 'w', '_', 'p', 'h', 'l',
+  '_', 'c', 'l', 't', 'i', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 's',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'c', 'l', 't', 'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i',
+  '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't',
+  'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', '_', 'e', 'q', '_', 'p', 'h',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'm', 'a', 'q', '_', 's', 'a', '_', 'w', '_', 'p', 'h', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a',
-  'x', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x',
-  '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_',
-  's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 'a', 'x', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 's',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'a', 'x', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'u', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'a', 'x', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'u', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'a', 'x', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'a', 'x', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'a', 'x', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 'u',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'a', 'x', 'i', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_',
-  'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 'a', 'x', 'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_',
-  'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'a',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 's', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'i', 'n', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 's', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'i', 'n', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'i', 'n', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i',
-  'n', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i',
-  'n', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'i', 'n', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'i', 'n', 'i', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'i', 'n', 'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 's', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'o', 'd', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 's', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'o', 'd', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'o', 'd', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o',
-  'd', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'm', 'o', 'd', 's', 'u', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'v',
-  'e', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'm', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', '_', 'q', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 's', 'u', 'b', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'r', '_',
-  'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 's', 'u', 'b', 'r', '_', 'q', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 's',
-  'u', 'b', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 's', 'u', 'b', 'v', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 's', 'u', 'b', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'm', 't', 'h', 'l', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', '_', 'p', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'u', 'l', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', '_', 'q', '_', 'w', '\000',
+  '_', 'c', 'm', 'p', '_', 'l', 'e', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', '_',
+  'l', 't', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_', 'e', 'q',
+  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_', 'l', 'e', '_', 'q',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_', 'l', 't', '_', 'q', 'b', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'm', 'u', 'l', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e', 'q', '_',
-  's', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e', 'q', '_', 's',
-  '_', 'w', '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e', 'u', '_', 's', '_',
-  'p', 'h', '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e', 'u', '_', 's', '_',
-  'p', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_', 'r', 's', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'm', 'u', 'l', 'q', '_', 'r', 's', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u',
-  'l', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'u', 'l', 'r', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'r', '_', 'q',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'm', 'u', 'l', 's', 'a', '_', 'w', '_', 'p', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm',
-  'u', 'l', 's', 'a', 'q', '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u',
-  'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'm', 'u', 'l', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'u', 'l', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'n', 'l', 'o', 'c', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n',
-  'l', 'o', 'c', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'z', 'c',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'n', 'l', 'z', 'c', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'z', 'c', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n',
-  'l', 'z', 'c', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'n', 'o', 'r', '_', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'o', 'r', 'i', '_',
+  'c', 'm', 'p', 'g', 'u', '_', 'e', 'q', '_', 'q', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p',
+  'g', 'u', '_', 'l', 'e', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'u', '_',
+  'l', 't', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'u', '_', 'e', 'q', '_', 'q',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'c', 'm', 'p', 'u', '_', 'l', 'e', '_', 'q', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm',
+  'p', 'u', '_', 'l', 't', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_',
   'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'o', 'r', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'o', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'a', 'c', 'k',
-  'r', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k',
-  'e', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'e',
-  'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'p', 'c', 'k', 'o', 'd', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'p', 'c', 'k', 'o', 'd', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'p', 'c', 'n', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c',
-  'n', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'i', 'c', 'k',
-  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'p', 'i', 'c', 'k', '_', 'q', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e',
-  'c', 'e', 'q', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e',
-  'q', '_', 'w', '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'q', 'u',
-  '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'q', 'u',
-  '_', 'p', 'h', '_', 'q', 'b', 'l', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'q',
-  'u', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'q',
-  'u', '_', 'p', 'h', '_', 'q', 'b', 'r', 'a', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e',
-  'u', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'u',
-  '_', 'p', 'h', '_', 'q', 'b', 'l', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'u',
-  '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'u', '_',
-  'p', 'h', '_', 'q', 'b', 'r', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', '_', 'q',
-  'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', '_', 's', 'r', 'a', '_',
-  'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', '_', 's', 'r', 'a', '_',
-  'r', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q', '_', 'p',
-  'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q', '_', 'q', 'b', '_', 'p',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'p', 'r', 'e', 'c', 'r', 'q', '_', 'r', 's', '_', 'p', 'h', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'p', 'r', 'e', 'c', 'r', 'q', 'u', '_', 's', '_', 'q', 'b', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'p', 'r', 'e', 'p', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'a', 'd', 'd',
-  'u', '_', 'w', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'd', 'd', 's', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'e',
-  'p', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'r', 'e', 'p', 'l', '_', 'q', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a',
-  't', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't',
-  '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_',
+  '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_',
   'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'a', 't', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 'u',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'a', 't', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'h', 'f', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
-  'h', 'f', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'h', 'f', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'i', 'l', 'o',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 's', 'h', 'l', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'l', 'l', '_', 'q',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 's', 'h', 'l', 'l', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'l',
-  'l', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'p', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's',
-  'h', 'r', 'a', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'r', '_', 'p',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 's', 'h', 'r', 'a', '_', 'r', '_', 'q', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r',
-  'a', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'l', '_', 'p', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's',
-  'h', 'r', 'l', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'l', 'd', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', 'i',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'l', 'd', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', 'i', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
-  'l', 'd', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'l', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', 'i', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'l', 'l', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', 'i', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l',
-  'l', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a',
-  't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'p', 'l', 'a', 't', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't',
-  'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a',
-  't', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'r', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
-  'r', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'r', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'i', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'r', 'a', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'i', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a',
-  'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'r', 'a', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'r', 'a', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a',
-  'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r',
-  'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'r', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'r', 'l', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'r', 'l', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
-  'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'r', 'l', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'r', 'l', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
-  'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'r', 'l', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i',
+  's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y',
+  '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 't', 'c',
+  'm', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'd', 'i', 'v', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's',
   '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'r', 'l', 'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i', '_',
+  'a', '_', 'd', 'i', 'v', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's', '_',
   'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 't', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 't',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 's', 'u', 'b', 'q', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q',
-  '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', '_', 's', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  's', 'u', 'b', 'q', 'h', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', 'h', '_',
-  'r', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', 'h', '_', 'r', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  's', 'u', 'b', 'q', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 's', '_', 'b',
+  '_', 'd', 'i', 'v', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'd',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'u', 'b', 's', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 's', '_',
+  'd', 'i', 'v', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'd', 'l', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 's', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't',
+  'p', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 's', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o',
+  't', 'p', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 'u', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
+  'o', 't', 'p', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', '_', 'w', '_', 'p',
   'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'u', 'b', 's', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 'u',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'u', 'b', 's', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_',
-  'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'u', 'b', 's', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's',
-  'u', 's', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u', '_',
+  '_', 'd', 'p', 'a', 'd', 'd', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd',
+  '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 's', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p',
+  'a', 'd', 'd', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 'u', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'd', 'p', 'a', 'd', 'd', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q',
+  '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', '_', 's', 'a',
+  '_', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', 'x', '_', 's', '_', 'w', '_',
+  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 'd', 'p', 'a', 'q', 'x', '_', 's', 'a', '_', 'w', '_', 'p',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'd', 'p', 'a', 'u', '_', 'h', '_', 'q', 'b', 'l', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p',
+  'a', 'u', '_', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'x', '_', 'w',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'd', 'p', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p',
+  's', 'q', '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q', '_',
+  's', 'a', '_', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q', 'x', '_', 's', '_',
+  'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q', 'x', '_', 's', 'a', '_', 'w',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'd', 'p', 's', 'u', '_', 'h', '_', 'q', 'b', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'd', 'p', 's', 'u', '_', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b',
+  '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 's', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p',
+  's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 'u', '_',
   'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's',
-  'u', 's', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_', 's', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'u', 'b', 's', 'u', 'u', '_', 's', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's',
-  'u', 'u', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 's', 'u', 'b', 'u', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_',
-  'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 's', 'u', 'b', 'u', '_', 's', '_', 'p', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u',
-  'b', 'u', '_', 's', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', 'h', '_', 'q',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 's', 'u', 'b', 'u', 'h', '_', 'r', '_', 'q', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
-  'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'u', 'b', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', '_', 'h',
+  '_', 'd', 'p', 's', 'u', 'b', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b',
+  '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'x', '_', 'w', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'e', 'x', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'p', 'd', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't',
+  'r', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_', 'r', 's', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'e', 'x', 't', 'r', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'a', 'd', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'a', 'd', 'd', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c',
+  'a', 'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'c', 'a', 'f', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'e', 'q', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'c', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 'a', 's', 's', '_', 'd',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'u', 'b', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
-  'b', 'v', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
-  'v', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_',
+  'f', 'c', 'l', 'a', 's', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 'e', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'c', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 't', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 't',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'c', 'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'n', 'e', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'c', 'o', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'c', 'o', 'r', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'e',
+  'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 'c', 'u', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 'e',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'c', 'u', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 't', '_',
   'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'v', 's', 'h', 'f', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'w',
-  'r', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'x', 'o', 'r', '_', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'x', 'o', 'r', 'i', '_', 'b',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'm', '_',
-  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'm',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r',
-  'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'a', 'd', 'd', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'p', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'p', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'p',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a',
-  'd', 'd', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'a', 'd', 'd', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '_', 's', 'y', 'n', 'c', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '_', 'w', 'a', 'r', 'p',
-  '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a',
-  'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '_', 'n', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '_',
-  's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r',
-  'r', 'i', 'e', 'r', '_', 's', 'y', 'n', 'c', '_', 'c', 'n', 't', '\000', '_',
-  '_', 's', 'y', 'n', 'c', 't', 'h', 'r', 'e', 'a', 'd', 's', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '0', '_', 'a', 'n', 'd', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '0', '_', 'o', 'r', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '0', '_', 'p', 'o', 'p', 'c',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't',
-  '_', 'd', '2', 'l', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i',
-  't', 'c', 'a', 's', 't', '_', 'f', '2', 'i', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't', '_', 'i', '2', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't', '_', 'l',
-  'l', '2', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'e', 'i', 'l',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'e', 'i', 'l', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'e', 'i', 'l', '_', 'f',
-  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'o', 's',
-  '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'c', 'o', 's', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't',
-  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_',
-  'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r',
-  'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f',
-  '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'd', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
-  '2', 'f', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'd', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'd', '2', 'f', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'h', 'i', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'd', '2', 'i', '_', 'l', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'd', '2', 'i', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'd', '2', 'i', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'd', '2', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
-  '2', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'u', 'i', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'u', 'i', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'u', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'u', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
-  'u', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
-  '2', 'u', 'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'd', '2', 'u', 'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'd', 'i', 'v', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'a', 'p', 'p', 'r',
-  'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'd', 'i', 'v', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'n', '_',
-  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'n',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r',
-  'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'd', 'i', 'v', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'z', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'z', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'z',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'e',
-  'x', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'd', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'e', 'x', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'e', 'x', '2', '_', 'a', 'p',
-  'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', '2', 'h', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', '2', 'h', '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'm', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'm', '_', 'f', 't', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'n', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'n', '_', 'f', 't',
-  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'p', '_',
-  'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_',
-  'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r',
-  'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
-  'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
-  'l', 'l', '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'p', '_', 'f',
-  't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_',
-  'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_',
-  'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  '2', 'u', 'i', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  '2', 'u', 'i', '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'n', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'n', '_', 'f', 't', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'p', '_',
-  'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i',
-  '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i',
-  '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'f', '2', 'u', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'n', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'n',
-  '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u',
-  'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
-  'u', 'l', 'l', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'z', '_', 'f', 't',
-  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'a', 'b', 's', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'a', 'b', 's', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'a', 'b', 's', '_', 'f', 't', 'z',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'l', 'o', 'o', 'r',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'l', 'o', 'o', 'r',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'l', 'o', 'o', 'r',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  'm', 'a', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'f', 'm', 'a', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'n', '_', 'd', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'n', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'n', '_',
-  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
-  'a', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  'm', 'a', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'f', 'm', 'a', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'z', '_', 'd', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'z', '_', 'f',
-  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a',
-  'x', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', 'x',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', 'x', '_',
-  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
-  'i', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'i',
-  'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'i', 'n',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  'n', 's', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd', '_', 'r',
-  'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd', '_', 'r', 'n',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd', '_', 'r', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd', '_', 'r', 'z', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'm', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 'c', 'o', 'n', 's',
-  't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c',
-  'e', 'p', '_', 'g', 'l', 'o', 'b', 'a', 'l', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 'l', 'o', 'c', 'a',
-  'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c',
-  'e', 'p', '_', 's', 'h', 'a', 'r', 'e', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'i', 's', 't', 'y', 'p', 'e', 'p', '_', 's', 'a', 'm', 'p', 'l',
-  'e', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 't', 'y', 'p',
-  'e', 'p', '_', 's', 'u', 'r', 'f', 'a', 'c', 'e', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'i', 's', 't', 'y', 'p', 'e', 'p', '_', 't', 'e', 'x', 't',
-  'u', 'r', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'g', '2', '_',
-  'a', 'p', 'p', 'r', 'o', 'x', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'l', 'g', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'l', 'g', '2', '_', 'a', 'p', 'p', 'r', 'o',
-  'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'l', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'l', 'o', 'h', 'i', '_', 'i', '2', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'm', 'a', 't', 'c', 'h', '_', 'a', 'n', 'y', '_', 's', 'y', 'n', 'c',
-  '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'a', 't',
-  'c', 'h', '_', 'a', 'n', 'y', '_', 's', 'y', 'n', 'c', '_', 'i', '6', '4',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'e', 'm', 'b', 'a', 'r', '_',
-  'c', 't', 'a', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'e', 'm', 'b',
-  'a', 'r', '_', 'g', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'e',
-  'm', 'b', 'a', 'r', '_', 's', 'y', 's', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'm', 'u', 'l', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'n', '_',
-  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'n',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r',
-  'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'm', 'u', 'l', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'z', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'z', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'z',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm',
-  'u', 'l', '2', '4', '_', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm',
-  'u', 'l', '2', '4', '_', 'u', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'm', 'u', 'l', 'h', 'i', '_', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'm', 'u', 'l', 'h', 'i', '_', 'l', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'm', 'u', 'l', 'h', 'i', '_', 'u', 'i', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'u', 'l', 'l', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'p', 'r', 'm', 't', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'c', 'p', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r',
-  'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_',
-  'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p',
+  '_', 'f', 'c', 'u', 'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'n', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'c', 'u', 'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'n', 'e', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u',
+  'n', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'd', 'i', 'v', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'd', 'i', 'v', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'e', 'x', 'd', 'o', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'd', 'o', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'e', 'x', 'p', '2', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'p', '2', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'e', 'x', 'u', 'p', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'l', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'e', 'x', 'u', 'p', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'r', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'f', 'i', 'n', 't', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'i', 'n', 't',
+  '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'f', 'i', 'n', 't', '_', 'u', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f',
+  'i', 'n', 't', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'l', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f',
+  'q', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'f', 'q', 'r', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'r', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'i', 'l', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'i',
+  'l', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'l', 'o', 'g', '2',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'l', 'o', 'g', '2', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'd', 'd', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'm', 'a', 'd', 'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'a', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'm', 'a', 'x', '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'm', 'a', 'x', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i', 'n', '_', 'a', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'm', 'i', 'n', '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i', 'n', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm',
+  'i', 'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'm', 's', 'u', 'b', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 's', 'u',
+  'b', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 'm', 'u', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'u', 'l', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'r', 'c', 'p', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 'r', 'c', 'p', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 'i',
+  'n', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'r', 'i', 'n', 't', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 's', 'q',
+  'r', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'r', 's', 'q', 'r', 't', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'a',
+  'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 's', 'a', 'f', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'e', 'q', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 's', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 'e', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l',
+  'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 's', 'l', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 't', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 's', 'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 's', 'n', 'e', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'o',
+  'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 's', 'o', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'q', 'r', 't', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 's', 'q', 'r', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'b', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  's', 'u', 'b', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'e', 'q', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u',
+  'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 's', 'u', 'l', 'e', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l',
+  'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 's', 'u', 'l', 't', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l', 't',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 's', 'u', 'n', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'n', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  's', 'u', 'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'n', 'e', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't',
+  'i', 'n', 't', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n', 't', '_', 's', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 't', 'i', 'n', 't', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n', 't',
+  '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 't', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'q', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  't', 'r', 'u', 'n', 'c', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c',
+  '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_', 'u', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  't', 'r', 'u', 'n', 'c', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 's',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'h', 'a', 'd', 'd', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'h', 'a', 'd', 'd', '_', 'u', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd',
+  '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 'u', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u',
+  'b', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_', 's', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's',
+  'u', 'b', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_', 'u', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h',
+  's', 'u', 'b', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_', 'u', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'i', 'l', 'v', 'e', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i',
+  'l', 'v', 'e', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l',
+  'v', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'i', 'l', 'v', 'l', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'l', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'i', 'l', 'v', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i',
+  'l', 'v', 'o', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l',
+  'v', 'o', 'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'i', 'l', 'v', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i',
+  'n', 's', 'e', 'r', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'i', 'n', 's', 'e', 'r', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'i', 'n', 's', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v', 'e', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n',
+  's', 'v', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v', 'e', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's',
+  'v', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'l', 'b', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'l', 'd', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'l', 'd', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'l', 'h', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'l', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l', 'w', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a',
+  'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'a', 'd', 'd', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', '_',
+  'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'a', 'd', 'd', 'r', '_', 'q', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd',
+  'd', 'r', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'd', 'd', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd',
+  'd', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'v', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd',
+  'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'a', 'd', 'd', 'v', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_',
+  's', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's', '_', 'w',
+  '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's', 'a', '_', 'w', '_', 'p',
+  'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 'm', 'a', 'q', '_', 's', 'a', '_', 'w', '_', 'p', 'h', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'a', 'x', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'a', 'x', '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a',
+  'x', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 's', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x',
+  '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'a', 'x', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_',
+  'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'a', 'x', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'u',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'a', 'x', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_',
+  's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i',
+  '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 'u', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x',
+  'i', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 'u', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i',
+  'n', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n',
+  '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_',
+  's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'i', 'n', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 's',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'i', 'n', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'i', 'n', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'i', 'n', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'i', 'n', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_',
+  'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_',
+  's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'o', 'd', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 's',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'o', 'd', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'o', 'd', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'o', 'd', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'o', 'd', 's', 'u', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'o', 'v', 'e', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'm', 's', 'u', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', '_',
+  'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 's', 'u', 'b', '_', 'q', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b',
+  'r', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'r', '_', 'q', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'm', 's', 'u', 'b', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u',
+  'b', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b',
+  'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'm', 't', 'h', 'l', 'i', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', '_',
+  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'u', 'l', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', '_', 'q', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'm', 'u', 'l', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e',
+  'q', '_', 's', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e', 'q',
+  '_', 's', '_', 'w', '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e', 'u', '_',
+  's', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'e', 'u', '_',
+  's', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_', 'r',
+  's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_', 'r', 's', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'm', 'u', 'l', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'u', 'l', 'r', '_', 'q', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'r',
+  '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 's', 'a', '_', 'w', '_', 'p', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'm', 'u', 'l', 's', 'a', 'q', '_', 's', '_', 'w', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'm', 'u', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 't', 'u', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'u', 'l', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u',
+  'l', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'n', 'l', 'o', 'c', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l',
+  'z', 'c', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'n', 'l', 'z', 'c', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'z', 'c', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'n', 'l', 'z', 'c', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'o', 'r', '_', 'v', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'o', 'r',
+  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'o', 'r', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'o', 'r', 'i', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'a',
+  'c', 'k', 'r', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p',
+  'c', 'k', 'e', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c',
+  'k', 'e', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k',
+  'o', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o',
+  'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'p', 'c', 'n', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'p', 'c', 'n', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'i',
+  'c', 'k', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'p', 'i', 'c', 'k', '_', 'q', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p',
+  'r', 'e', 'c', 'e', 'q', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e',
+  'c', 'e', 'q', '_', 'w', '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e',
+  'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e',
+  'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', 'a', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c',
+  'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c',
+  'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', 'a', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e',
+  'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c',
+  'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', 'a', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c',
+  'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e',
+  'u', '_', 'p', 'h', '_', 'q', 'b', 'r', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r',
+  '_', 'q', 'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', '_', 's', 'r',
+  'a', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', '_', 's', 'r',
+  'a', '_', 'r', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q',
+  '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q', '_', 'q', 'b',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q', '_', 'r', 's', '_', 'p',
+  'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q', 'u', '_', 's', '_', 'q',
+  'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'p', 'e', 'n', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'a',
+  'd', 'd', 'u', '_', 'w', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'd', 'd', 's', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'r', 'e', 'p', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'e', 'p', 'l', '_', 'q', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'a', 't', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'a', 't', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a',
+  't', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 'u', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't',
+  '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'a', 't', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'h', 'f', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'h', 'f', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'h', 'f', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'i',
+  'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 's', 'h', 'l', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'l', 'l',
+  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 's', 'h', 'l', 'l', '_', 's', '_', 'p', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's',
+  'h', 'l', 'l', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'p', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 's', 'h', 'r', 'a', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'r',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'r', '_', 'q', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's',
+  'h', 'r', 'a', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'l', '_', 'p', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 's', 'h', 'r', 'l', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l',
+  'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'l', 'd', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l',
+  'd', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'l', 'd', 'i', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', 'i', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'l', 'd', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'l', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l',
+  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'l', 'l', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', 'i', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'l', 'l', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p',
+  'l', 'a', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l',
+  'a', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l',
+  'a', 't', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p',
+  'l', 'a', 't', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'r', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'i',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'r', 'a', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'i', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'r', 'a', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'r', 'a', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'r', 'a', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r',
+  'a', 'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'r', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'r', 'l', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'r', 'l', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'r', 'l', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'r', 'l', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
+  'r', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r',
+  'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 't', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 't', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', '_', 'p', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u',
+  'b', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', '_', 's', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 's', 'u', 'b', 'q', 'h', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q',
+  'h', '_', 'r', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', 'h', '_', 'r', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 's', 'u', 'b', 'q', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 's',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'u', 'b', 's', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_',
+  's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'u', 'b', 's', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's',
+  '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 'u', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
+  's', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 'u', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
+  'b', 's', 'u', 's', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 's', '_',
+  'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
+  'b', 's', 'u', 's', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_',
+  's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_', 's', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
+  'b', 's', 'u', 'u', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_', 'p', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b',
+  'u', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_', 's', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  's', 'u', 'b', 'u', '_', 's', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', 'h',
+  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 's', 'u', 'b', 'u', 'h', '_', 'r', '_', 'q', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'u', 'b', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'u', 'b', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'u', 'b', 'v', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'u', 'b', 'v', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h',
+  'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'v', 's', 'h', 'f', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'w', 'r', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'x', 'o', 'r', '_', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'x', 'o', 'r', 'i',
+  '_', 'b', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r',
+  'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_',
+  'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd',
   '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'c', 'p', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n', '_', 'f', 't', 'z', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'p',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r',
-  'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_',
+  'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'f', 't', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'p',
+  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r',
+  'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_',
   'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'c', 'p', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'c', 'l', 'o', 'c', 'k', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'c', 'l', 'o', 'c', 'k', '6', '4', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
-  'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'x', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
-  '_', 'c', 't', 'a', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'c', 't', 'a', 'i', 'd', '_', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
-  'n', 'v', 'r', 'e', 'g', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
-  'v', 'r', 'e', 'g', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '3', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '5', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '6', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '7', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '8', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '1', '9', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '3', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '5', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '6', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '7', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '8', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '2', '9', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
-  'e', 'g', '3', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e',
-  'g', '3', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e',
-  'g', '3', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e',
-  'g', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
-  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g',
-  '5', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
-  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '6',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '7', '\000',
+  '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '_', 's', 'y', 'n',
+  'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '_', 'w', 'a',
+  'r', 'p', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'b', 'a', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '_',
+  'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', 'r', 'i', 'e',
+  'r', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b',
+  'a', 'r', 'r', 'i', 'e', 'r', '_', 's', 'y', 'n', 'c', '_', 'c', 'n', 't',
+  '\000', '_', '_', 's', 'y', 'n', 'c', 't', 'h', 'r', 'e', 'a', 'd', 's', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '0', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '0', '_', 'o', 'r',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '0', '_', 'p', 'o',
+  'p', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a',
+  's', 't', '_', 'd', '2', 'l', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'b', 'i', 't', 'c', 'a', 's', 't', '_', 'f', '2', 'i', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't', '_', 'i', '2', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't',
+  '_', 'l', 'l', '2', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'e',
+  'i', 'l', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'e', 'i',
+  'l', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'e', 'i', 'l',
+  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c',
+  'o', 's', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'c', 'o', 's', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_',
+  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2',
+  'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f',
+  '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
+  '2', 'f', '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'd', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'd', '2', 'f', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'h', 'i', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'l', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'm', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'd', '2', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'd', '2', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'u', 'i', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'u', 'i', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'u', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'u', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', '2', 'u', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'a', 'p',
+  'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_', 'f', 't', 'z',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r',
+  'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_',
+  'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v',
+  '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'f', 't', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'z',
+  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r',
+  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_',
+  'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'e', 'x', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'd', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'e', 'x', '2', '_', 'a', 'p', 'p', 'r', 'o',
+  'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'e', 'x', '2', '_',
+  'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', '2', 'h', '_', 'r', 'n', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', '2', 'h', '_', 'r', 'n', '_', 'f', 't', 'z', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'm', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'm', '_', 'f', 't',
+  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'n',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'n', '_',
+  'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_',
+  'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r',
+  'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
+  'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i',
+  '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'f', '2', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'f', '2', 'l', 'l', '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'n', '_', 'f', 't', 'z',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'p',
+  '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l',
+  'l', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l',
+  'l', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', '2', 'u', 'i', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', '2', 'u', 'i', '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'n', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'n', '_', 'f', 't',
+  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r',
+  'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
+  'u', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
+  'u', 'i', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'm', '_', 'f', 't', 'z',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r',
+  'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_',
+  'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
+  '2', 'u', 'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'f', '2', 'u', 'l', 'l', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'z', '_',
+  'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'a', 'b', 's',
+  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'a', 'b', 's', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'a', 'b', 's', '_', 'f',
+  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'l', 'o',
+  'o', 'r', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'l', 'o',
+  'o', 'r', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'l', 'o',
+  'o', 'r', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'n', '_',
+  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'n',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r',
+  'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'f', 'm', 'a', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'z', '_', 'd',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'z',
+  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
+  'm', 'a', 'x', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
+  'a', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a',
+  'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'f', 'm', 'i', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
+  'm', 'i', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
+  'i', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', 'n', 's', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd',
+  '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd', '_',
+  'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd', '_', 'r',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'd', '_', 'r', 'z',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'm', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'n', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 'c', 'o',
+  'n', 's', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p',
+  'a', 'c', 'e', 'p', '_', 'g', 'l', 'o', 'b', 'a', 'l', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 'l', 'o',
+  'c', 'a', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p',
+  'a', 'c', 'e', 'p', '_', 's', 'h', 'a', 'r', 'e', 'd', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'i', 's', 't', 'y', 'p', 'e', 'p', '_', 's', 'a', 'm',
+  'p', 'l', 'e', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 't',
+  'y', 'p', 'e', 'p', '_', 's', 'u', 'r', 'f', 'a', 'c', 'e', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'i', 's', 't', 'y', 'p', 'e', 'p', '_', 't', 'e',
+  'x', 't', 'u', 'r', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'g',
+  '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'd', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'l', 'g', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'g', '2', '_', 'a', 'p', 'p',
+  'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'o', 'h', 'i', '_', 'i', '2', 'd', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'm', 'a', 't', 'c', 'h', '_', 'a', 'n', 'y', '_', 's', 'y',
+  'n', 'c', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm',
+  'a', 't', 'c', 'h', '_', 'a', 'n', 'y', '_', 's', 'y', 'n', 'c', '_', 'i',
+  '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'e', 'm', 'b', 'a',
+  'r', '_', 'c', 't', 'a', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'e',
+  'm', 'b', 'a', 'r', '_', 'g', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'm', 'e', 'm', 'b', 'a', 'r', '_', 's', 'y', 's', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_', 'f', 't', 'z',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r',
+  'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_',
+  'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l',
+  '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'f', 't', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'z',
+  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r',
+  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_',
+  'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'm', 'u', 'l', '2', '4', '_', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'm', 'u', 'l', '2', '4', '_', 'u', 'i', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'i', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'l', 'l', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'u', 'i', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'u', 'l', 'l', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'p', 'r', 'm', 't', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'c', 'p', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f',
+  't', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p',
+  '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c',
+  'p', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'c', 'p', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n', '_', 'd', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n', '_', 'f', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n', '_', 'f', 't',
+  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_',
+  'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p',
+  '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c',
+  'p', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_', 'f', 't', 'z',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
+  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 'l', 'o', 'c', 'k', '\000',
   '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
-  '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '8', '\000', '_',
+  '_', 's', 'r', 'e', 'g', '_', 'c', 'l', 'o', 'c', 'k', '6', '4', '\000', '_',
   '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
-  's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '9', '\000', '_', '_',
+  's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'w', '\000', '_', '_',
   'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'g', 'r', 'i', 'd', 'i', 'd', '\000', '_', '_', 'n', 'v',
+  'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'x', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v',
   'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
-  'g', '_', 'l', 'a', 'n', 'e', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
+  '_', 'e', 'n', 'v', 'r', 'e', 'g', '0', '\000', '_', '_', 'n', 'v', 'v', 'm',
   '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'e', 'q', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'g', 'e', '\000',
+  'e', 'n', 'v', 'r', 'e', 'g', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '3', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '5', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '6', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '7', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '8', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '1', '9', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '3', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '5', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '6', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '7', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '8', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '2', '9', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '3', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
+  'r', 'e', 'g', '3', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
+  'r', 'e', 'g', '3', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
+  'r', 'e', 'g', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
+  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
+  'e', 'g', '5', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
+  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e',
+  'g', '6', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
+  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g',
+  '7', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
+  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '8',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
+  'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '9', '\000',
   '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
-  '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_',
-  'g', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
-  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a',
-  's', 'k', '_', 'l', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n',
-  'e', 'm', 'a', 's', 'k', '_', 'l', 't', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'n', 'c', 't', 'a', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'n', 'c', 't', 'a', 'i', 'd', '_', 'x', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'n', 'c', 't', 'a', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'n', 'c', 't', 'a', 'i', 'd', '_', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'n', 's', 'm', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i',
-  'd', '_', 'w', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i', 'd', '_',
-  'x', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
-  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i', 'd', '_', 'y', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
-  '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i', 'd', '_', 'z', '\000', '_', '_',
+  '_', 's', 'r', 'e', 'g', '_', 'g', 'r', 'i', 'd', 'i', 'd', '\000', '_', '_',
   'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'n', 'w', 'a', 'r', 'p', 'i', 'd', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'p', 'm', '0', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p', 'm',
-  '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
-  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p', 'm', '2', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'p', 'm', '3', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 's', 'm',
-  'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
-  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'w', '\000',
+  'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'i', 'd', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'e', 'q', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
+  's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'g',
+  'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
+  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's',
+  'k', '_', 'g', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
+  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e',
+  'm', 'a', 's', 'k', '_', 'l', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l',
+  'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'l', 't', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'x', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'z', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'n', 's', 'm', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n',
+  't', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i',
+  'd', '_', 'x', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
+  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i', 'd', '_',
+  'y', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
+  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i', 'd', '_', 'z', '\000',
   '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
-  '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'x', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 't', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'r', 'e', 'g', '_', 'n', 'w', 'a', 'r', 'p', 'i', 'd', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
+  's', 'r', 'e', 'g', '_', 'p', 'm', '0', '\000', '_', '_', 'n', 'v', 'v', 'm',
   '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  't', 'i', 'd', '_', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'p', 'm', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
+  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p', 'm', '2', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
+  's', 'r', 'e', 'g', '_', 'p', 'm', '3', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
+  's', 'm', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
+  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_',
+  'w', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
+  't', 'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'x', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
+  's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 't', 'i', 'd', '_', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'w',
+  'a', 'r', 'p', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
   'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'w', 'a', 'r',
-  'p', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'w', 'a', 'r', 'p', 's',
-  'i', 'z', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o', 't', 'a',
-  't', 'e', '_', 'b', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'o', 't', 'a', 't', 'e', '_', 'b', '6', '4', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'o', 't', 'a', 't', 'e', '_', 'r', 'i', 'g', 'h', 't', '_',
-  'b', '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'r', 's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'd', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 's', 'q', 'r', 't', '_', 'a', 'p',
-  'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 'd', '_', 'i',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 'd', '_', 'u', 'i', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 't', 'u', 'r', 'a', 't', 'e',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 't', 'u', 'r',
-  'a', 't', 'e', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a',
-  't', 'u', 'r', 'a', 't', 'e', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'b', 'f', 'l', 'y', '_',
-  'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l',
-  '_', 'b', 'f', 'l', 'y', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'h', 'f', 'l', '_', 'd', 'o', 'w', 'n', '_', 'f', '3', '2',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'd', 'o',
-  'w', 'n', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'h', 'f', 'l', '_', 'i', 'd', 'x', '_', 'f', '3', '2', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'i', 'd', 'x', '_', 'i', '3',
-  '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's',
-  'y', 'n', 'c', '_', 'b', 'f', 'l', 'y', '_', 'f', '3', '2', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_',
-  'b', 'f', 'l', 'y', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'd', 'o', 'w', 'n',
-  '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f',
-  'l', '_', 's', 'y', 'n', 'c', '_', 'd', 'o', 'w', 'n', '_', 'i', '3', '2',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y',
-  'n', 'c', '_', 'i', 'd', 'x', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'i', 'd',
-  'x', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h',
-  'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'u', 'p', '_', 'f', '3', '2', '\000',
+  'p', 's', 'i', 'z', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o',
+  't', 'a', 't', 'e', '_', 'b', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 'o', 't', 'a', 't', 'e', '_', 'b', '6', '4', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'o', 't', 'a', 't', 'e', '_', 'r', 'i', 'g', 'h',
+  't', '_', 'b', '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o',
+  'u', 'n', 'd', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o',
+  'u', 'n', 'd', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o',
+  'u', 'n', 'd', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_',
+  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 's', 'q', 'r', 't', '_',
+  'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f',
+  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 'd',
+  '_', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 'd', '_', 'u',
+  'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 't', 'u', 'r', 'a',
+  't', 'e', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a', 't',
+  'u', 'r', 'a', 't', 'e', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'a', 't', 'u', 'r', 'a', 't', 'e', '_', 'f', 't', 'z', '_', 'f', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'b', 'f', 'l',
+  'y', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h',
+  'f', 'l', '_', 'b', 'f', 'l', 'y', '_', 'i', '3', '2', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'd', 'o', 'w', 'n', '_', 'f',
+  '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_',
+  'd', 'o', 'w', 'n', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'h', 'f', 'l', '_', 'i', 'd', 'x', '_', 'f', '3', '2', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'i', 'd', 'x', '_',
+  'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l',
+  '_', 's', 'y', 'n', 'c', '_', 'b', 'f', 'l', 'y', '_', 'f', '3', '2', '\000',
   '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n',
-  'c', '_', 'u', 'p', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'h', 'f', 'l', '_', 'u', 'p', '_', 'f', '3', '2', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'u', 'p', '_', 'i', '3',
-  '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'i', 'n', '_', 'a', 'p',
-  'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'i', 'n', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'a', 'p',
-  'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'm',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_',
-  'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r',
-  't', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'n', '_', 'd', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'n', '_', 'f', '\000',
+  'c', '_', 'b', 'f', 'l', 'y', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'd', 'o',
+  'w', 'n', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'd', 'o', 'w', 'n', '_', 'i',
+  '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_',
+  's', 'y', 'n', 'c', '_', 'i', 'd', 'x', '_', 'f', '3', '2', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_',
+  'i', 'd', 'x', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'u', 'p', '_', 'f', '3',
+  '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's',
+  'y', 'n', 'c', '_', 'u', 'p', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'u', 'p', '_', 'f', '3', '2', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'u', 'p', '_',
+  'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'i', 'n', '_',
+  'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'i', 'n', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_',
+  'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't',
+  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_',
+  'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r',
+  't', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'q', 'r', 't', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'n', '_', 'd', '\000',
   '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'n', '_',
-  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q',
-  'r', 't', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'q', 'r', 't', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'z',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_',
-  'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r',
-  't', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 'q', '_', 'a', 'r', 'r', 'a', 'y', '_', 's', 'i',
-  'z', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'c',
-  'h', 'a', 'n', 'n', 'e', 'l', '_', 'd', 'a', 't', 'a', '_', 't', 'y', 'p',
-  'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'c', 'h',
-  'a', 'n', 'n', 'e', 'l', '_', 'o', 'r', 'd', 'e', 'r', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'd', 'e', 'p', 't', 'h', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'h', 'e', 'i', 'g', 'h',
-  't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'w', 'i',
-  'd', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r',
+  'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'q', 'r', 't', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p', '_', 'f', 't', 'z',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_',
+  'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r',
+  't', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'q', 'r', 't', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'a', 'r', 'r', 'a', 'y', '_',
+  's', 'i', 'z', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q',
+  '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l', '_', 'd', 'a', 't', 'a', '_', 't',
+  'y', 'p', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_',
+  'c', 'h', 'a', 'n', 'n', 'e', 'l', '_', 'o', 'r', 'd', 'e', 'r', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'd', 'e', 'p', 't', 'h',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'h', 'e', 'i',
+  'g', 'h', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_',
+  'w', 'i', 'd', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
   's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i',
-  '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
   'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6',
+  '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
   '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l',
   'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
   '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
-  '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
   's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
-  '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1',
-  '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a',
-  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '1', '6', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '3', '2',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '3', '2', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '6', '4',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '8', '_', 'c', 'l', 'a', 'm',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i',
-  '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '1', '6', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
   '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v',
-  '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2',
-  'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '6',
-  '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm',
   'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4',
-  'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '3',
-  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '3', '2',
+  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4',
   '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'z',
-  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
+  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
   '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 'z', 'e',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4',
+  'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e',
   'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_',
+  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3',
+  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'c',
+  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4',
+  'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '1',
+  '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '1', '6', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
+  'd', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i',
+  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '3', '2', '_', 'z',
+  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i',
+  '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '8', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '1',
+  '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '1', '6',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'z',
+  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a',
+  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
+  'v', '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2',
+  'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '8',
+  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
+  'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
+  'v', '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4',
+  'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i',
+  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '3', '2',
+  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '8', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3',
+  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 'z',
+  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_',
   'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
   's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i',
-  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 'c', 'l',
-  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 'z',
-  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
-  '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'v', '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 'c', 'l',
-  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
   '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
   'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i',
-  '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
   's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '1', '6', '_',
-  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '6', '4', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '6', '4', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '8', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '2', 'd', '_', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
   '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
   'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2',
-  'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '3',
-  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '3', '2',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'z',
-  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a',
-  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
-  '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v',
-  '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '8',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4',
-  'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '8',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '8', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '1',
-  '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '3', '2', '_', 'c', 'l',
-  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '3', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '6',
-  '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '6', '4', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '3', 'd', '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '8',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '8', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '3', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
-  'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2',
-  'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i',
-  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '3', '2',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '3', 'd', '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd',
-  '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2',
-  'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '1', '6',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '1', '6', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm',
+  'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a',
   'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
+  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6',
+  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'z',
+  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
+  '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r',
+  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i',
+  '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'z', 'e',
+  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '2', 'd', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '1',
+  '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '3', '2', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '6',
+  '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '6', '4', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '8',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '8', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
+  'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2',
+  'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i',
+  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '3', '2',
+  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'c',
+  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '2', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '2', 'd', '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
+  '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2',
+  'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6',
+  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e',
+  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
   'd', '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
   'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4',
   'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '8', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '8', '_',
   'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1',
-  '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8',
+  't', '_', 'b', '_', '3', 'd', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '3', '2', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '6', '4',
   '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '1', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_',
-  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'i', '8', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1',
-  'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v',
-  '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '4', 'i',
-  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '4', 'i', '8', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1',
-  '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '2', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_',
-  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'i', '8', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '2', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2',
-  'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v',
-  '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '4', 'i',
-  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '4', 'i', '8', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'p', '_', '3', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
-  '3', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'i',
-  '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'p', '_', '3', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'p', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3',
-  'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_',
-  'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '4',
+  's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '6', '4', '_', 'z', 'e', 'r',
+  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
   'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'w', 'a', 'p', '_', 'l', 'o', '_', 'h', 'i', '_', 'b', '6', '4', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r', 'u', 'n', 'c', '_', 'd', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r', 'u', 'n', 'c', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r', 'u', 'n', 'c', '_', 'f', 't',
-  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 's', 'i', 'z', 'e', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 't', 'x', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l', '_',
-  'd', 'a', 't', 'a', '_', 't', 'y', 'p', 'e', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 't', 'x', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l', '_', 'o',
-  'r', 'd', 'e', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q',
-  '_', 'd', 'e', 'p', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't',
-  'x', 'q', '_', 'h', 'e', 'i', 'g', 'h', 't', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 't', 'x', 'q', '_', 'n', 'u', 'm', '_', 'm', 'i', 'p', 'm', 'a',
-  'p', '_', 'l', 'e', 'v', 'e', 'l', 's', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 't', 'x', 'q', '_', 'n', 'u', 'm', '_', 's', 'a', 'm', 'p', 'l', 'e',
-  's', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'w', 'i',
-  'd', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'd',
-  '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'd',
-  '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'd',
-  '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'd',
-  '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'f',
-  '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'f',
-  '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'f',
-  '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i', '2', 'f',
-  '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2',
-  'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l',
-  '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l',
-  'l', '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u',
-  'l', 'l', '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'u', 'l', 'l', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'l', 'l', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'l', 'l', '_', 's',
-  'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e',
-  '_', 'a', 'n', 'y', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't',
-  'e', '_', 'a', 'n', 'y', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'b', 'a', 'l', 'l', 'o', 't', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'b', 'a', 'l',
-  'l', 'o', 't', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'v', 'o', 't', 'e', '_', 'u', 'n', 'i', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'v', 'o', 't', 'e', '_', 'u', 'n', 'i', '_', 's', 'y', 'n', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'd', 'd', 'f',
-  '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'c', 'i',
-  'p', 'h', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_',
-  'v', 'c', 'i', 'p', 'h', 'e', 'r', 'l', 'a', 's', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'n', 'c', 'i', 'p', 'h', 'e', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'n', 'c', 'i',
-  'p', 'h', 'e', 'r', 'l', 'a', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y',
-  'p', 't', 'o', '_', 'v', 'p', 'e', 'r', 'm', 'x', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'm', 's',
-  'u', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '8', '_', 'z', 'e',
+  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
+  'd', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v',
+  '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i',
+  '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '6', '4',
+  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '6', '4', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e',
+  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '3', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i',
+  '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '1',
+  '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '1', '6', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
+  'd', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i',
+  '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
+  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2',
+  'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'p', '_', '1', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1',
+  'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'i', '8',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
+  '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd',
+  '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v',
+  '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '4', 'i',
+  '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
+  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2',
+  'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'p', '_', '2', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2',
+  'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'i', '8',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
+  '_', '2', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd',
+  '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v',
+  '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '4', 'i',
+  '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'i', '1', '6', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'p', '_', '3', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd',
+  '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '2', 'i', '1',
+  '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '2', 'i', '3', '2', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'p', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
+  '_', '3', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3',
+  'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_',
+  'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'w', 'a', 'p', '_', 'l', 'o', '_', 'h', 'i', '_', 'b', '6',
+  '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r', 'u', 'n', 'c', '_',
+  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r', 'u', 'n', 'c', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r', 'u', 'n', 'c', '_',
+  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x',
+  'q', '_', 'a', 'r', 'r', 'a', 'y', '_', 's', 'i', 'z', 'e', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e',
+  'l', '_', 'd', 'a', 't', 'a', '_', 't', 'y', 'p', 'e', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l',
+  '_', 'o', 'r', 'd', 'e', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't',
+  'x', 'q', '_', 'd', 'e', 'p', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 't', 'x', 'q', '_', 'h', 'e', 'i', 'g', 'h', 't', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'n', 'u', 'm', '_', 'm', 'i', 'p',
+  'm', 'a', 'p', '_', 'l', 'e', 'v', 'e', 'l', 's', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 't', 'x', 'q', '_', 'n', 'u', 'm', '_', 's', 'a', 'm', 'p',
+  'l', 'e', 's', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_',
+  'w', 'i', 'd', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'i',
+  '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l',
+  'l', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u',
+  'l', 'l', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'u', 'l', 'l', '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'l', 'l', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'l', 'l',
+  '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o',
+  't', 'e', '_', 'a', 'n', 'y', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v',
+  'o', 't', 'e', '_', 'a', 'n', 'y', '_', 's', 'y', 'n', 'c', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'b', 'a', 'l', 'l', 'o',
+  't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'b',
+  'a', 'l', 'l', 'o', 't', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'u', 'n', 'i', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'u', 'n', 'i', '_', 's', 'y',
+  'n', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'd',
+  'd', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_',
+  'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
   'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v',
-  'p', 'm', 's', 'u', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'c', 'i', 'p', 'h', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't',
-  'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r',
-  'y', 'p', 't', 'o', '_', 'v', 's', 'b', 'o', 'x', '\000', '_', '_', 'b', 'u',
+  'o', '_', 'v', 'c', 'i', 'p', 'h', 'e', 'r', 'l', 'a', 's', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'n', 'c', 'i', 'p', 'h',
+  'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'n',
+  'c', 'i', 'p', 'h', 'e', 'r', 'l', 'a', 's', 't', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c',
-  'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'h', 'a', 's', 'i', 'g', 'm', 'a',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'h',
-  'a', 's', 'i', 'g', 'm', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 's', '\000',
+  'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'e', 'r', 'm', 'x', 'o', 'r', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'd', 's', 's', 'a', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'm', 's', 'u',
+  'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p',
+  'm', 's', 'u', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o',
+  '_', 'v', 'p', 'm', 's', 'u', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y',
+  'p', 't', 'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'b', 'o', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'h', 'a', 's', 'i', 'g',
+  'm', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v',
+  's', 'h', 'a', 's', 'i', 'g', 'm', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'd', 's', 't', 's', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd',
-  's', 't', 's', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 't', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'm', 'f', 'v', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'm', 't', 'v',
-  's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'a', 'b', 's', 'd', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'c',
-  'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'c', 'u', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'a', 'd', 'd', 'e', 'c', 'u', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'a', 'd', 'd', 'e', 'u', 'q', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd',
-  's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 's', 'h', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'a', 'd', 'd', 's', 'w', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'a', 'd', 'd', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'u',
-  'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'u', 'w', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'a', 'v', 'g', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v',
-  'g', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 's', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v',
-  'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 'u', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'b', 'p', 'e', 'r', 'm', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'f', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'f', 'u', 'x', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'l', 'z', 'l', 's', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'm', 'p', 'b', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'b', 'f',
-  'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'f', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'f', 'p', '_', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'b', '\000', '_', '_', 'b',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'd', 's', 's', 'a', 'l', 'l', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'c', 'm', 'p', 'e', 'q', 'u', 'b', '_', 'p', '\000', '_', '_', 'b', 'u',
+  'd', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 't', 's', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'd', 's', 't', 's', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 't', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'm', 'f', 'v', 's', 'c', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'm',
+  't', 'v', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'a', 'b', 's', 'd', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd',
+  'd', 'c', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'c', 'u', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'e', 'c', 'u', 'q', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'a', 'd', 'd', 'e', 'u', 'q', 'm', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
+  'd', 'd', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 's', 'h',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 's', 'w', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd',
+  'd', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'u', 'w', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 's', 'b', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'c', 'm', 'p', 'e', 'q', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
-  'e', 'q', 'u', 'd', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e',
-  'q', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'h',
-  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'w', '\000',
+  'a', 'v', 'g', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 's', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 'u', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'b', 'p', 'e', 'r', 'm', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'c', 'f', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'f', 'u', 'x', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'w', '_', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'c', 'm', 'p', 'g', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'c', 'm', 'p', 'g', 'e', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'm', 'p', 'g', 't', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g',
-  't', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't',
-  's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'b', '_',
+  'e', 'c', '_', 'v', 'c', 'l', 'z', 'l', 's', 'b', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'c', 'm', 'p', 'b', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
+  'b', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q',
+  'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'f', 'p', '_',
   'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'd', '\000', '_',
+  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'b', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'd', '_', 'p', '\000', '_', '_',
+  'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'b', '_', 'p', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'm', 'p', 'g', 't', 's', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'm', 'p', 'e', 'q', 'u', 'd', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
-  'p', 'g', 't', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't',
-  's', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'b', '_', 'p',
+  'p', 'e', 'q', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q',
+  'u', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'w', '_', 'p',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'd', '\000', '_', '_',
+  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 'e', 'f', 'p', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'd', '_', 'p', '\000', '_', '_', 'b',
+  '_', 'v', 'c', 'm', 'p', 'g', 'e', 'f', 'p', '_', 'p', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'c', 'm', 'p', 'g', 't', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'v', 'c', 'm', 'p', 'g', 't', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
-  'p', 'g', 't', 'u', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'p', 'g', 't', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
   'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
-  'g', 't', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u',
-  'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'b', '\000',
+  'g', 't', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's',
+  'b', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'd', '_', 'p', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'b', '_', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'm', 'p', 'n', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'c', 'm', 'p', 'g', 't', 's', 'h', '_', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'c', 'm', 'p', 'g', 't', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
+  'g', 't', 's', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g',
+  't', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'b',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'd', '_', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'c', 'm', 'p', 'g', 't', 'u', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
+  'm', 'p', 'g', 't', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g',
+  't', 'u', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'b', '_', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'c', 'm', 'p', 'n', 'e', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
-  'p', 'n', 'e', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'p', 'n', 'e', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'w',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'b', '_', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'c', 'm', 'p', 'n', 'e', 'z', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
+  'm', 'p', 'n', 'e', 'z', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
   'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n',
-  'e', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'w', '_', 'p',
+  'e', 'z', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 't', 's', 'x', 's',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'b', '_', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'c', 'm', 'p', 'n', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
-  'p', 'n', 'e', 'z', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
-  'n', 'e', 'z', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z',
-  'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 't', 's', 'x', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'c', 't', 'u', 'x', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 't',
-  'z', 'l', 's', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'e', 'x', 'p', 't', 'e',
-  'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'g', 'b', 'b', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'l', 'o', 'g', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'd',
-  'd', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 'f', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 'a', 'x', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a',
-  'x', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 'a', 'x', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a',
-  'x', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a',
-  'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'h', 'a', 'd', 'd', 's', 'h',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 'h', 'r', 'a', 'd', 'd', 's', 'h', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'f', 'p', '\000', '_', '_', 'b', 'u',
+  'v', 'e', 'c', '_', 'v', 'c', 't', 'u', 'x', 's', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'm', 'i', 'n', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'm', 'l', 'a', 'd', 'd', 'u', 'h', 'm', '\000', '_',
+  'c', 't', 'z', 'l', 's', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'e', 'x', 'p',
+  't', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'g', 'b', 'b', 'd', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 's', 'u', 'm', 'm', 'b', 'm', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'm', 's', 'u', 'm', 's', 'h', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u',
-  'm', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'u', 'b',
-  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'u', 'h', 'm', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 's', 'u', 'm', 'u', 'h', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'm', 'u', 'l', 'e', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e',
-  's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 's', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 'u', 'l', 'e', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'c', '_', 'v', 'l', 'o', 'g', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
-  'u', 'l', 'e', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 'u',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 's', 'b', '\000', '_', '_',
+  'a', 'd', 'd', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 'f', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'm', 'a', 'x', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'm', 'a', 'x', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'h', 'a', 'd', 'd',
+  's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'h', 'r', 'a', 'd', 'd', 's',
+  'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'f', 'p', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'm', 'u', 'l', 'o', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  '_', 'v', 'm', 'i', 'n', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n',
+  's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n',
+  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n',
+  'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'l', 'a', 'd', 'd', 'u', 'h', 'm',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'm', 'b', 'm', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'm', 's', 'u', 'm', 's', 'h', 'm', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
+  's', 'u', 'm', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm',
+  'u', 'b', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'u', 'h', 'm',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'u', 'h', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'm', 'u', 'l', 'e', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
   't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u',
-  'l', 'o', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 'u', 'b',
+  'l', 'e', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 's', 'w',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 'u', 'h', '\000', '_', '_', 'b',
+  'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 'u', 'b', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'm', 'u', 'l', 'o', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'n', 'm', 's',
-  'u', 'b', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'e', 'r', 'm', '_', '4',
-  's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 'p', 'x', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'p', 'k', 's', 'd', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's',
-  'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'h', 's', 's', '\000',
+  'v', 'm', 'u', 'l', 'e', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l',
+  'e', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 's', 'b', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'p', 'k', 's', 'h', 'u', 's', '\000', '_', '_', 'b', 'u',
+  'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 's', 'h', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'p', 'k', 's', 'w', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'w',
-  'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 'u', 'd', 'u', 's', '\000', '_',
+  'm', 'u', 'l', 'o', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o',
+  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 'u', 'h', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'p', 'k', 'u', 'h', 'u', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'c', '_', 'v', 'm', 'u', 'l', 'o', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'n',
+  'm', 's', 'u', 'b', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'e', 'r', 'm',
+  '_', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 'p', 'x', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'p', 'k', 's', 'd', 's', 's', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p',
-  'k', 'u', 'w', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't', 'y', 'b',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't', 'y', 'b', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'p', 'r', 't', 'y', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'e',
-  'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'm', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'r', 'f', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'r', 'f', 'i', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r',
-  'l', 'd', 'm', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'd', 'n', 'm', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'r', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'r', 'l', 'w', 'm', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'r', 'l', 'w', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 's', 'q', 'r', 't',
-  'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'e', 'l', '_', '4', 's', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 's', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 's', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l',
-  'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
-  'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
-  'r', 'a', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'a', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 's', 'r', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 's', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'o',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 's', 'r', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'c', 'u', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 's', 'u', 'b', 'c', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u',
-  'b', 'e', 'c', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'e', 'u',
-  'q', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 's', 'b', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 's', 'u', 'b', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
-  'u', 'b', 's', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'u', 'b',
+  'k', 's', 'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'h', 's',
   's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', '\000', '_', '_',
+  'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'h', 'u', 's', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 's', 'u', 'b', 'u', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u',
-  'm', '2', 's', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', '4', 's',
-  'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', '4', 's', 'h', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 's', 'u', 'm', '4', 'u', 'b', 's', '\000', '_', '_', 'b',
+  '_', 'v', 'p', 'k', 's', 'w', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k',
+  's', 'w', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 'u', 'd', 'u', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'p', 'k', 'u', 'h', 'u', 's', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 's', 'u', 'm', 's', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k',
-  'h', 'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's', 'b', '\000',
+  'v', 'p', 'k', 'u', 'w', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't',
+  'y', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't', 'y', 'b', 'q', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's', 'h', '\000', '_', '_', 'b', 'u',
+  'e', 'c', '_', 'v', 'p', 'r', 't', 'y', 'b', 'w', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'u', 'p', 'k', 'h', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l',
-  'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'b', '\000', '_',
+  'r', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'm', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'c', '_', 'v', 'r', 'f', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'z', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'r', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'r', 'l', 'd', 'm', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'd', 'n',
+  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r',
+  'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'w', 'm', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'r', 'l', 'w', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 's', 'q',
+  'r', 't', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'e', 'l', '_', '4',
+  's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
+  'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  's', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 's', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 's', 'r', 'a', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'a', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 's', 'r', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
+  'r', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'c', 'u', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 's', 'u', 'b', 'c', 'u', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  's', 'u', 'b', 'e', 'c', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b',
+  'e', 'u', 'q', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 's', 'b', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 's', 'h', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 's', 'u', 'b', 's', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b',
+  'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  's', 'u', 'm', '2', 's', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm',
+  '4', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', '4', 's', 'h',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', '4', 'u', 'b', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 's', 'u', 'm', 's', 'w', 's', '\000', '_', '_', 'b', 'u', 'i',
   'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u',
-  'p', 'k', 'l', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'b', 'p', 'e', 'r', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'd', 'i', 'v', 'd', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'd', 'i', 'v', 'd', 'e', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'f', '1', '2', '8', '_', 'r',
-  'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'w', 'e', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'w', 'e', 'u', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'f', 'm', 'a', 'f', '1',
-  '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd',
+  'p', 'k', 'h', 'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'u', 'p', 'k', 'h', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p',
+  'k', 'l', 'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'u', 'p', 'k', 'l', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'b', 'p', 'e', 'r', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'd', 'c', 'b', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'd', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'd', 'e', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'f', '1', '2', '8',
+  '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'w', 'e', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'w', 'e',
+  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'f', 'm', 'a',
+  'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o',
+  'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e',
+  't', '_', 't', 'e', 'x', 'a', 's', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'g', 'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r', 'u',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', '_',
-  't', 'e', 'x', 'a', 's', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'g', 'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', '_', 't', 'f',
-  'h', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g',
-  'e', 't', '_', 't', 'f', 'i', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'u', 'l', 'f', '1', '2', '8', '_', 'r', 'o', 'u',
-  'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'a', 'b', 's',
+  't', 'f', 'h', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'g', 'e', 't', '_', 't', 'f', 'i', 'a', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'u', 'l', 'f', '1', '2', '8', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'a',
+  'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'a', 'd', 'd', 's',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'a', 'd', 'd', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'f', 'c', 'f', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'f', 'c', 'f', 'i', 'd', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd', 'u', 's',
+  'q', 'v', 'f', 'c', 'f', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd', 's',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'm', 'p', 'g',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'c', 'm', 'p', 'l', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'p', 's',
-  'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i',
-  'd', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd', 'u', 'z', '\000', '_', '_', 'b',
+  'q', 'v', 'f', 'c', 'f', 'i', 'd', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd',
+  'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'm',
+  'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 'c', 'm', 'p', 'l', 't', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c',
-  't', 'i', 'd', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', '\000', '_', '_', 'b',
+  'p', 's', 'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c',
-  't', 'i', 'w', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', 'u', 'z', '\000', '_',
+  't', 'i', 'd', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd', 'u', 'z', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'f', 'c', 't', 'i', 'w', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'l', 'o', 'g', 'i', 'c', 'a',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'a', 'd', 'd',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'm', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 's', 'u', 'b',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'm', 'u', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'u', 'l', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 'f', 'n', 'a', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'e', 'g', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
-  'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'm', 'a', 'd', 'd', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 'f', 'n', 'm', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'm', 's', 'u', 'b',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'e', '\000', '_',
+  'f', 'c', 't', 'i', 'd', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'f', 'r', 'e', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'm', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i',
-  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'r', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'z', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'f', 'r', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 's', 'q', 'r', 't', 'e', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'f', 'r', 's', 'q', 'r', 't', 'e', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's', 'e', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's', 'u', 'b', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
-  't', 's', 't', 'n', 'a', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'm', 'a', 'd', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 'f', 'x', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'm', 'u', 'l',
+  'f', 'c', 't', 'i', 'w', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', 'u', 'z',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'f', 'x', 'm', 'u', 'l', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'c', 'p',
-  'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'c', 'p', 'n', 'm', 'a',
+  'q', 'v', 'f', 'c', 't', 'i', 'w', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'l', 'o', 'g', 'i',
+  'c', 'a', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'a',
   'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'm', 'a', 'd', 'd', '\000', '_', '_',
+  'p', 'x', '_', 'q', 'v', 'f', 'm', 's', 'u', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 's',
+  'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 'm', 'u', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'u', 'l',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
+  '_', 'q', 'v', 'f', 'n', 'a', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'e', 'g', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'm', 'a', 'd', 'd',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
+  '_', 'q', 'v', 'f', 'n', 'm', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'm', 's',
+  'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'f', 'r', 'e', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'm', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
-  'x', 'x', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'n', 'p', 'm',
-  'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'n', 'p', 'm', 'a', 'd', 'd', 's',
+  'r', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'z',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'g', 'p', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l',
-  'f', 'c', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c',
-  's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 'l', 'f', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'd', 'a', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'l', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'a', 'a', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'l', 'f', 'i', 'w', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'z', 'a', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'l', 'f', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'l', 'f', 's', 'a', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'p', 'c', 'l',
+  'q', 'v', 'f', 'r', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 's', 'q', 'r', 't', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'f', 'r', 's', 'q', 'r', 't', 'e', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's', 'e',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
+  '_', 'q', 'v', 'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's', 'u', 'b', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 't', 's', 't', 'n', 'a', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'm', 'a', 'd',
   'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'l', 'p', 'c', 'l', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'p', 'c', 'r', 'd',
+  '_', 'q', 'v', 'f', 'x', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'm',
+  'u', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 'f', 'x', 'm', 'u', 'l', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x',
+  'c', 'p', 'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'c', 'p', 'n',
+  'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'm', 'a', 'd', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'x', 'x', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'n',
+  'p', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'n', 'p', 'm', 'a', 'd',
+  'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 'g', 'p', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'l', 'f', 'c', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l',
+  'f', 'c', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'd', 'a',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'l', 'p', 'c', 'r', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'c', 'd', '\000',
+  'q', 'v', 'l', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'a', 'a',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'l', 'f', 'i', 'w', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'z', 'a',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'l', 'f', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 's', 'a', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'p',
+  'c', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'l', 'p', 'c', 'l', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'p', 'c',
+  'r', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 'l', 'p', 'c', 'r', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'c',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
+  '_', 'q', 'v', 's', 't', 'f', 'c', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'c',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
+  '_', 'q', 'v', 's', 't', 'f', 'c', 's', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 's', 't', 'f', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'i', 'w', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 's', 't', 'f', 'c', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'c', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 's', 't', 'f', 'c', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'd', '\000', '_',
+  'v', 's', 't', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 's', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  's', 't', 'f', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'i', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's',
-  't', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't',
-  'f', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
-  's', 'x', '_', 's', 'c', 'a', 'l', 'a', 'r', '_', 'e', 'x', 't', 'r', 'a',
-  'c', 't', '_', 'e', 'x', 'p', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'v', 's', 'x', '_', 's', 'c', 'a', 'l', 'a', 'r', '_', 'i',
-  'n', 's', 'e', 'r', 't', '_', 'e', 'x', 'p', '_', 'q', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't', 'e', 'x',
-  'a', 's', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't', 'f', 'h', 'a', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_',
-  't', 'f', 'i', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', 'q', 'r', 't', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd',
-  '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', 'u', 'b', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', 'd', 'c', '\000',
+  's', 't', 'f', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'v', 's', 'x', '_', 's', 'c', 'a', 'l', 'a', 'r', '_', 'e', 'x', 't',
+  'r', 'a', 'c', 't', '_', 'e', 'x', 'p', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 's', 'c', 'a', 'l', 'a', 'r',
+  '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'e', 'x', 'p', '_', 'q', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't',
+  'e', 'x', 'a', 's', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', 'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't', 'f', 'h',
+  'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e',
+  't', '_', 't', 'f', 'i', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', 'e', 't', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', 'q', 'r', 't', 'f', '1', '2', '8', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'u', 'b', 'f', '1', '2', '8', '_',
+  'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r',
-  't', 'd', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  't', 'a', 'b', 'o', 'r', 't', 'w', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', 'w', 'c', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'b', 'e', 'g', 'i', 'n',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'c', 'h', 'e',
-  'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'e',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'e',
-  'n', 'd', 'a', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 't', 'r', 'e', 'c', 'h', 'k', 'p', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 't', 'r', 'e', 'c', 'l', 'a', 'i', 'm', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'e', 's', 'u', 'm',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'u',
-  'n', 'c', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o',
-  '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  't', 's', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't',
-  's', 'u', 's', 'p', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 't', 't', 'e', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 's', 'm', 'a', 'x', 'd', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 's', 'm', 'i', 'n', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 'd',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
-  '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 'd', 'p', '_', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c',
-  'm', 'p', 'e', 'q', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 's', 'p',
-  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
-  'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 'd', 'p', '\000', '_', '_', 'b',
+  't', 'd', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't',
+  'a', 'b', 'o', 'r', 't', 'd', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', 'w', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', 'w',
+  'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'b',
+  'e', 'g', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  't', 'c', 'h', 'e', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 't', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 't', 'e', 'n', 'd', 'a', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 't', 'r', 'e', 'c', 'h', 'k', 'p', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'e', 'c', 'l', 'a',
+  'i', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r',
+  'e', 's', 'u', 'm', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 't', 'r', 'u', 'n', 'c', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n',
+  'd', '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 't', 's', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 't', 's', 'u', 's', 'p', 'e', 'n', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 't', 't', 'e', 's', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 's', 'm',
+  'a', 'x', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'v', 's', 'x', '_', 'x', 's', 'm', 'i', 'n', 'd', 'p', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm',
-  'p', 'g', 'e', 'd', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 's',
+  'p', 'e', 'q', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 'd', 'p', '_',
   'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
-  '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 's', 'p', '_', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c',
-  'm', 'p', 'g', 't', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 't', 'd', 'p',
-  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
-  'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 't', 's', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm',
-  'p', 'g', 't', 's', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'd', 'p', 's', 'p',
+  '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 's', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p',
+  'e', 'q', 's', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 'd', 'p',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'v', 'c', 'v', 'd', 'p', 's', 'x', 'w', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'd',
-  'p', 'u', 'x', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'h', 'p', 's', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
-  'c', 'v', 's', 'p', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 's', 'p', 'h', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
-  'v', 'c', 'v', 's', 'x', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 's', 'x', 'w',
-  'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
-  'x', '_', 'x', 'v', 'c', 'v', 'u', 'x', 'd', 's', 'p', '\000', '_', '_', 'b',
+  'x', 'v', 'c', 'm', 'p', 'g', 'e', 'd', 'p', '_', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm',
+  'p', 'g', 'e', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 's', 'p', '_',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
+  '_', 'x', 'v', 'c', 'm', 'p', 'g', 't', 'd', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p',
+  'g', 't', 'd', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 't', 's', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
+  'x', 'v', 'c', 'm', 'p', 'g', 't', 's', 'p', '_', 'p', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v',
-  'u', 'x', 'w', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 'd', 'i', 'v', 'd', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'd',
-  'i', 'v', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'v', 's', 'x', '_', 'x', 'v', 'i', 'e', 'x', 'p', 'd', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'i',
-  'e', 'x', 'p', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'a', 'x', 'd', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm',
-  'a', 'x', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'v', 's', 'x', '_', 'x', 'v', 'm', 'i', 'n', 'd', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'i',
-  'n', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
-  's', 'x', '_', 'x', 'v', 'r', 'e', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r', 'e', 's', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'v', 'r', 's', 'q', 'r', 't', 'e', 'd', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r', 's', 'q',
-  'r', 't', 'e', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 't', 's', 't', 'd', 'c', 'd', 'p', '\000',
+  'd', 'p', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'd', 'p', 's', 'x', 'w', 's', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
-  'v', 't', 's', 't', 'd', 'c', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 'e', 'x', 'p', 'd',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
-  '_', 'x', 'v', 'x', 'e', 'x', 'p', 's', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 's', 'i', 'g',
-  'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
-  'x', '_', 'x', 'v', 'x', 's', 'i', 'g', 's', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'x', 'e', 'x', 't',
-  'r', 'a', 'c', 't', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'v', 's', 'x', '_', 'x', 'x', 'i', 'n', 's', 'e', 'r', 't', 'w',
+  'v', 'c', 'v', 'd', 'p', 'u', 'x', 'w', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'h', 'p',
+  's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
+  'x', '_', 'x', 'v', 'c', 'v', 's', 'p', 'd', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 's',
+  'p', 'h', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
+  's', 'x', '_', 'x', 'v', 'c', 'v', 's', 'x', 'd', 's', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c',
+  'v', 's', 'x', 'w', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'u', 'x', 'd', 's', 'p',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'x', 'l', 'e', 'q', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'r', '6', '0', '0', '_', 'g', 'r', 'o', 'u', 'p', '_', 'b', 'a',
-  'r', 'r', 'i', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'r', '6', '0', '0', '_', 'i', 'm', 'p', 'l', 'i', 'c', 'i', 't', 'a',
-  'r', 'g', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'r', '6', '0', '0', '_', 'r', 'a', 't', '_', 's', 't', 'o', 'r',
-  'e', '_', 't', 'y', 'p', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'g', 'l',
-  'o', 'b', 'a', 'l', '_', 's', 'i', 'z', 'e', '_', 'x', '\000', '_', '_', 'b',
+  'x', 'v', 'c', 'v', 'u', 'x', 'w', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'd', 'i', 'v', 'd',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
+  '_', 'x', 'v', 'd', 'i', 'v', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'i', 'e', 'x', 'p', 'd',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
+  '_', 'x', 'v', 'i', 'e', 'x', 'p', 's', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'a', 'x', 'd',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
+  '_', 'x', 'v', 'm', 'a', 'x', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'i', 'n', 'd', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
+  'x', 'v', 'm', 'i', 'n', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r', 'e', 'd', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
+  'r', 'e', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'v', 's', 'x', '_', 'x', 'v', 'r', 's', 'q', 'r', 't', 'e', 'd', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
+  'v', 'r', 's', 'q', 'r', 't', 'e', 's', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 't', 's', 't', 'd',
+  'c', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
+  's', 'x', '_', 'x', 'v', 't', 's', 't', 'd', 'c', 's', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'x',
+  'e', 'x', 'p', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 'e', 'x', 'p', 's', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
+  'x', 's', 'i', 'g', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 's', 'i', 'g', 's', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
+  'x', 'e', 'x', 't', 'r', 'a', 'c', 't', 'u', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'x', 'i', 'n', 's',
+  'e', 'r', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'v', 's', 'x', '_', 'x', 'x', 'l', 'e', 'q', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'g', 'r', 'o', 'u',
+  'p', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'i', 'm', 'p', 'l', 'i',
+  'c', 'i', 't', 'a', 'r', 'g', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'a', 't', '_',
+  's', 't', 'o', 'r', 'e', '_', 't', 'y', 'p', 'e', 'd', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a',
-  'd', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_', 's', 'i', 'z', 'e', '_', 'y',
+  'd', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_', 's', 'i', 'z', 'e', '_', 'x',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0',
   '_', 'r', 'e', 'a', 'd', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_', 's', 'i',
-  'z', 'e', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g', 'r', 'o', 'u',
-  'p', 's', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g', 'r', 'o', 'u',
-  'p', 's', '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g', 'r', 'o', 'u',
-  'p', 's', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0',
-  '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_', 'y', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r',
-  'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_', 'z', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'e', 'f', 'p', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'x', '_', 'n',
-  'e', 's', 't', 'i', 'n', 'g', '_', 'd', 'e', 'p', 't', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'l', 'c',
-  'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'x',
-  '_', 'a', 's', 's', 'i', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 's', 'f', 'p', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a',
-  'c', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'c', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'a', 'c', 'c', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'h', '\000', '_',
+  'z', 'e', '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'g', 'l', 'o', 'b', 'a',
+  'l', '_', 's', 'i', 'z', 'e', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n',
+  'g', 'r', 'o', 'u', 'p', 's', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n',
+  'g', 'r', 'o', 'u', 'p', 's', '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n',
+  'g', 'r', 'o', 'u', 'p', 's', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 't',
+  'g', 'i', 'd', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g', 'i', 'd',
+  '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6',
+  '0', '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'e', 'f', 'p', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  't', 'x', '_', 'n', 'e', 's', 't', 'i', 'n', 'g', '_', 'd', 'e', 'p', 't',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'l', 'c', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 't', 'x', '_', 'a', 's', 's', 'i', 's', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 's', 'f', 'p',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'a', 'c', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'c', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'a', 'c', 'c', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'g', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c',
+  'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'a', 'c', 'c', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'q', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'a', 'c', 'c', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'a', 'c', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'f', '\000', '_', '_', 'b', 'u',
+  'a', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'a', 'v', 'g', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v',
+  'g', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'l', 'f', '\000', '_', '_', 'b', 'u',
   'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g',
-  'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'l', 'b', '\000',
+  'l', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'a', 'v', 'g', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'b', 'p', 'e', 'r',
+  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'c', 'k', 's', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'b', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'a', 'v', 'g', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'l', 'g', '\000', '_',
+  'v', 'e', 'r', 'i', 'm', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'g', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'a', 'v', 'g', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'b', 'p', 'e', 'r', 'm', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'c',
-  'k', 's', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i',
-  'm', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'g', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'e', 'r', 'l', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'e', 'r', 'l', 'l', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'e', 'r', 'l', 'l', 'v', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'e', 'r', 'l', 'l', 'v', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'f', 'a', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'f', 'a', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'z', 'b', '\000', '_', '_', 'b',
+  'e', 'r', 'i', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e',
+  'r', 'l', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'g', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r',
+  'l', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r',
+  'l', 'l', 'v', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v', 'g', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e',
+  'r', 'l', 'l', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'b', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a',
-  'e', 'z', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'f', 'e', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'f', 'e', 'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'z', 'f', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f',
-  'e', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e',
-  'n', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n',
-  'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'z', 'f', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e',
-  'n', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f',
-  'm', 'a', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'g', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm',
-  'a', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'g', 'f', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'f', '\000',
+  'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'f', 'a', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'z', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'f', 'a', 'e', 'z', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'z', 'h', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'g', 'f', 'm', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'i', 's',
-  't', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'i', 's', 't', 'r', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'i', 's', 't',
-  'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'l', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'l', 'l', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'l', 'r',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'a', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'e', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'a', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'a', 'h', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'h',
+  'v', 'f', 'e', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'f', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e',
+  'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'f', 'e', 'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'z',
   'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'a', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'e', 'b', '\000',
+  '0', '_', 'v', 'f', 'e', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'f', 'e', 'n', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'h', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'm', 'a', 'l', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'e', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'a', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'h', 'f', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm',
-  'a', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'o', 'b', '\000', '_', '_', 'b',
+  'v', 'f', 'e', 'n', 'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'z', 'f',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'f', 'e', 'n', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'g', 'f', 'm', 'a', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'g', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'g', 'f', 'm', 'a', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g',
+  'f', 'm', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'g', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'i', 's', 't', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'i', 's', 't', 'r', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'i', 's', 't', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 'l', 'b', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'l', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'l', 'r', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'e', 'b', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a',
-  'l', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'o', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'o',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'a', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'o', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'm', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'e', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'm', 'h', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'h', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'l', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'l', 'e', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'e',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'h', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'l', 'o', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'o',
+  'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'm', 'a', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'h', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'm', 'a', 'h', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'h', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a',
+  'l', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'e', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l',
+  'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'm', 'a', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'h',
   'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'l', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'o', 'b', '\000', '_', '_',
+  '0', '_', 'v', 'm', 'a', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'o', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'm', 'a', 'l', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'o', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'm', 'a', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'o', 'f', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a',
+  'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'm', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'e', 'f', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm',
-  'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'm', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 's', 'l', 'g', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'p', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 'l', 's',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'p', 'k', 'l', 's', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 'l', 's', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'p', 'k', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 's', 'g', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p',
-  'k', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 's', 'b', 'c', 'b', 'i', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'b',
-  'i', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 's', 'c', 'b', 'i', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 's', 'c', 'b', 'i', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'l', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'l',
+  'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'm', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'h', 'f', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm',
+  'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'm', 'l', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'e', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'm', 'l', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'h', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l',
+  'h', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'm', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'o', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'm', 'l', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'o', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'o',
   'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 's', 'l', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'q', '\000', '_', '_', 'b',
+  '0', '_', 'v', 'm', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'o', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 's',
+  'l', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'p', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'e', 'r', 'm', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'p', 'k', 'l', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 'l', 's', 'g', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p',
+  'k', 'l', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'p', 'k', 's', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 's',
+  'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'p', 'k', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'b', 'c', 'b', 'i', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 's', 'b', 'i', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  's', 'c', 'b', 'i', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'g', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's',
+  'c', 'b', 'i', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 's', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 's', 'l', 'd', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 's', 'r', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 's', 'r', 'a', 'b', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'r',
-  'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 's', 'r', 'a', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'r', 'l', '\000', '_', '_',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 's', 'r', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'l', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's',
-  'r', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 's', 't', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 's', 't', 'r', 'c', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 's', 't', 'r', 'c', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'z', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 's', 't', 'r', 'c', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 's', 'u', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'g', 'f', '\000', '_', '_',
+  't', 'r', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'f', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't',
+  'r', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'z', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't',
+  'r', 'c', 'z', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'z', 'h', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's',
-  'u', 'm', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm',
-  'q', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 's', 'u', 'm', 'q', 'g', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 't', 'm', '\000', '_',
+  't', 'r', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 's', 'u', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'g',
+  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 's', 'u', 'm', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 's', 'u', 'm', 'q', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'q', 'g', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'u', 'p', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'u', 'p', 'h', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'h',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'u', 'p', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'u', 'p', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'h', 'f', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u',
-  'p', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'h', 'w', '\000', '_', '_', 'b',
+  't', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'u', 'p', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'h', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'u', 'p', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'b', '\000', '_', '_', 'b',
   'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p',
-  'l', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'l', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l',
-  'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'v', 'g', 'u', 's', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', '2', 'i',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'f', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'a', 'd', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'c', 'm', 'p', 'g', 'e', '\000',
+  'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'u', 'p', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'h',
+  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'u', 'p', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'h', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'u', 'p', 'l', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'l', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'u', 'p', 'l', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'u', 's', 'b', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'm', 'a', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'f', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'f', 'm', 'u', 'l', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 'c',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'f', 'r', 'c', 'p', 'i', 't', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 'c',
-  'p', 'i', 't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'f', 'r', 's', 'q', 'i', 't', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'f', 'r', 's', 'q', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 's', 'u', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f',
-  's', 'u', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'i', '2', 'f', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
-  'h', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'f', '2', 'i', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'n', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'f', 'p', 'n', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'i', '2', 'f', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'a', 'e', 's', 'd', 'e', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd',
-  'e', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'a', 'e', 's', 'd', 'e', 'c', 'l', 'a', 's', 't', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'a', 'e', 's', 'd', 'e', 'c', 'l', 'a', 's', 't', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a',
-  'e', 's', 'd', 'e', 'c', 'l', 'a', 's', 't', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e',
-  's', 'e', 'n', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e',
-  's', 'e', 'n', 'c', 'l', 'a', 's', 't', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's',
-  'e', 'n', 'c', 'l', 'a', 's', 't', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e',
-  'n', 'c', 'l', 'a', 's', 't', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'i', 'm',
-  'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'a', 'e', 's', 'k', 'e', 'y', 'g', 'e', 'n', 'a',
-  's', 's', 'i', 's', 't', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b',
-  'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 'd', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'b', 'l', 'e', 'n', 'd', 'v', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'p', 'd', '2', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2',
-  'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd', 'q', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 't', 'p', 's', '2', 'd', 'q', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd',
-  'p', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd', 'p', 'd', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'h', 'a', 'd', 'd', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 's', 'u',
-  'b', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'h', 's', 'u', 'b', 'p', 's', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'l', 'd', 'd', 'q', 'u', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k',
-  'l', 'o', 'a', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd',
-  'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p', 's', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a',
-  's', 'k', 's', 't', 'o', 'r', 'e', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a',
-  's', 'k', 's', 't', 'o', 'r', 'e', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's',
-  't', 'o', 'r', 'e', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 'd',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'a', 'x', 'p', 's', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i',
-  'n', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 's', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o',
-  'v', 'm', 's', 'k', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't',
-  'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'n', 'z', 'c', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 't', 'e', 's', 't', 'z', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p',
-  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 'd', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 's', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's',
-  'q', 'r', 't', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i',
-  'l', 'v', 'a', 'r', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v',
-  'a', 'r', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l',
-  'v', 'a', 'r', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a',
-  'r', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 't', 'e', 's', 't', 'c', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't',
-  'e', 's', 't', 'c', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 's',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p', 'd', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  't', 'e', 's', 't', 'n', 'z', 'c', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't',
-  'n', 'z', 'c', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z',
-  'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 't', 'e', 's', 't', 'z', 'p', 'd', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 't', 'e', 's', 't', 'z', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z',
-  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'z', 'e', 'r', 'o', 'a', 'l', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'z', 'e', 'r', 'o', 'u', 'p', 'p', 'e', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h',
-  'e', 'r', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'd',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 'd', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
-  'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
-  'r', 'd', '_', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
-  'd', '_', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'q', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't',
-  'h', 'e', 'r', 'q', '_', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
-  'r', 'q', '_', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p',
-  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 's', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
-  'r', 'q', '_', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a',
+  'p', 'f', '2', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'a',
   'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'd', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k',
-  'l', 'o', 'a', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't',
-  'o', 'r', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'd',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'q', '\000',
+  '3', '2', '_', 'p', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'c', 'm',
+  'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'm',
+  'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'f', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'm', 'u', 'l', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'q', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
-  'p', 's', 'a', 'd', 'b', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's',
-  's', 'd', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'w', 'b',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd', 'w', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'b',
-  'l', 'e', 'n', 'd', 'v', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v',
-  'a', 'r', 's', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r',
-  's', 'f', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'd', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'h', 'a', 'd', 'd', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a',
-  'd', 'd', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'd', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'h', 's', 'u', 'b', 's', 'w', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h',
-  's', 'u', 'b', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b',
-  's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w', 'd', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '2', '5', '6', '\000', '_',
+  'p', 'f', 'r', 'c', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 'c', 'p', 'i', 't', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'f', 'r', 'c', 'p', 'i', 't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 's', 'q', 'i',
+  't', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'f', 'r', 's', 'q', 'r', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 's', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'f', 's', 'u', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'i', '2', 'f', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'm', 'u', 'l', 'h', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', '2', 'i', 'w', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'u', 'l', 'h', 'r', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
-  'h', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'a', 'd', 'b', 'w', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h',
-  'u', 'f', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'b', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'i', 'g', 'n', 'd', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i',
-  'g', 'n', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'l', 'l', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '2', '5', '6', '\000', '_',
+  'f', 'n', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'p', 'n', 'a', 'c', 'c', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'l', 'l', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', 'i',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '4', 's', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'l', 'l', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '2', 'd', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'l', 'l', 'v', '4', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'a', 'd', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '2',
+  'i', '2', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'a', 'e', 's', 'd', 'e', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e',
+  'c', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', 'l', 'a', 's', 't',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', 'l', 'a', 's', 't', '2',
   '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'a', 'v', '4', 's', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'a', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'l', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'l', 'd', 'i', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'l', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', 'i', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'l', 'v', '4', 's', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'l', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '2', 'd', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'l', 'v', '4', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 'p', 'd', '5',
-  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'a', 'd', 'd', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
-  'a', 'd', 'c', 'a', 's', 't', 'm', 'b', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
-  'a', 'd', 'c', 'a', 's', 't', 'm', 'b', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
-  'a', 'd', 'c', 'a', 's', 't', 'm', 'b', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
-  'a', 'd', 'c', 'a', 's', 't', 'm', 'w', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
-  'a', 'd', 'c', 'a', 's', 't', 'm', 'w', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
-  'a', 'd', 'c', 'a', 's', 't', 'm', 'w', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c',
-  'o', 'n', 'f', 'l', 'i', 'c', 't', 's', 'i', '_', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', 'i', '_', '2', '5', '6',
+  '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', 'l', 'a', 's', 't', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'a', 'e', 's', 'e', 'n', 'c', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's',
+  'e', 'n', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'a', 'e', 's', 'e', 'n', 'c', 'l', 'a', 's', 't', '1', '2', '8',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', 'i', '_', '5',
-  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 'd', 'i',
-  '_', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't',
-  'd', 'i', '_', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i',
-  'c', 't', 'd', 'i', '_', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'i', '2',
-  's', 'd', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'i', '2', 's', 's', '3', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 's', 'i', '2', 's', 's', '6', '4', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v',
-  't', 't', 's', 'd', '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't',
-  's', 'd', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 'd',
-  '2', 'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 'd', '2',
-  'u', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 's',
-  'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 's', 'i', '6',
-  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 'u', 's', 'i', '3', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 'u', 's', 'i', '6', '4', '\000',
+  '_', 'a', 'e', 's', 'e', 'n', 'c', 'l', 'a', 's', 't', '2', '5', '6', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 'u', 's', 'i', '2', 's', 's', '3', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'u', 's', 'i', '2', 's', 'd', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 's', 'i',
-  '2', 's', 's', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p', 's', 'a', 'd', 'b', 'w', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'd', 'b', 'p', 's', 'a', 'd', 'b', 'w', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'd', 'b', 'p', 's', 'a', 'd', 'b', 'w', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'v',
-  'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'v', 'p', 's', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'e', 'x', 'p', '2', 'p', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p',
-  '2', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
-  'p', 'f', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'p', 'f', 'd',
-  'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'p', 'f', 'q', 'p', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'a', 't', 'h', 'e', 'r', 'p', 'f', 'q', 'p', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd',
-  's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
+  'a', 'e', 's', 'e', 'n', 'c', 'l', 'a', 's', 't', '5', '1', '2', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a',
-  'd', 'd', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
+  'e', 's', 'i', 'm', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'k', 'e', 'y',
+  'g', 'e', 'n', 'a', 's', 's', 'i', 's', 't', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd',
+  'd', 's', 'u', 'b', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u',
+  'b', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 's', '2', '5', '6',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'm', 'p', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'm', 'p',
-  's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd',
-  'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd',
-  '2', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'p', 'd', '2', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
-  'd', '2', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's', '2', '5', '6', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 'p', 'd', '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
+  't', 'p', 'd', '2', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's',
+  '2', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd',
+  'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'd', 'q', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'd', 'p', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd',
+  'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd', 'p', 's', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'h', 's', 'u', 'b', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 's', 'u', 'b',
+  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'l', 'd', 'd', 'q', 'u', '2', '5', '6', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 'p', 'd', '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's',
+  'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k',
+  'l', 'o', 'a', 'd', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l',
+  'o', 'a', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p',
+  's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 'd', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
+  'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 's', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
+  'a', 'x', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 's', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'i', 'n', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p',
+  's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 'd', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 's', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  't', 'e', 's', 't', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'n',
+  'z', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'z', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'c', 'p', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd',
+  'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 's', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 's', 'q', 'r', 't', 'p', 's', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
+  'm', 'i', 'l', 'v', 'a', 'r', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
+  'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
+  'i', 'l', 'v', 'a', 'r', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's',
+  't', 'c', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 'd', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's',
+  't', 'c', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'n', 'z',
+  'c', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p', 'd', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  't', 'e', 's', 't', 'n', 'z', 'c', 'p', 's', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't',
+  'e', 's', 't', 'z', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z', 'p', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z', 'p', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't',
+  'e', 's', 't', 'z', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'z', 'e', 'r', 'o',
+  'a', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'z', 'e', 'r', 'o', 'u', 'p', 'p', 'e', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
+  'r', 'd', '_', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd',
+  '_', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 'd', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 's', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a',
+  't', 'h', 'e', 'r', 'd', '_', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd',
+  '_', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'd', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
+  'r', 'q', '_', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
+  'q', '_', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 's',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'a', 't', 'h', 'e', 'r', 'q', '_', 'q', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's',
+  'k', 'l', 'o', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd',
+  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a',
+  's', 'k', 's', 't', 'o', 'r', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't',
+  'o', 'r', 'e', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o',
+  'r', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'q', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'm', 'p', 's', 'a', 'd', 'b', 'w', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'c', 'k', 's', 's', 'd', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k',
+  's', 's', 'w', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd',
+  'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'a', 'v', 'g', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g',
+  'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'b', 'l', 'e', 'n', 'd', 'v', 'b', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 's', 'i', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'e', 'r', 'm', 'v', 'a', 'r', 's', 'f', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h',
+  'a', 'd', 'd', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 's', 'w',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'w', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'h', 's', 'u', 'b', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 's',
+  'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'w', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'a', 'd', 'd', 'w', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'm', 's',
+  'k', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'w', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'u', 'l', 'h', 'u', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'a', 'd', 'b', 'w',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'b', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'i', 'g', 'n', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'w', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'l', 'l', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'l', 'l', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
+  'd', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'l', 'l', 'w', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
+  'v', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '8', 's', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'l', 'l', 'v', '2', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '4', 'd',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'r', 'a', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', 'i', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'a', 'w', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v',
+  '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '8', 's', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'r', 'l', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd',
+  'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'l', 'w', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v',
+  '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '8', 's', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'r', 'l', 'v', '2', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '4', 'd', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'a', 'd', 'd', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 'p', 's',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a', 's', 't', 'm', 'b',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a', 's', 't', 'm', 'b',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a', 's', 't', 'm', 'b',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a', 's', 't', 'm', 'w',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a', 's', 't', 'm', 'w',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a', 's', 't', 'm', 'w',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's',
+  'i', '_', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c',
+  't', 's', 'i', '_', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l',
+  'i', 'c', 't', 's', 'i', '_', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n',
+  'f', 'l', 'i', 'c', 't', 'd', 'i', '_', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c',
+  'o', 'n', 'f', 'l', 'i', 'c', 't', 'd', 'i', '_', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 'd', 'i', '_', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 's', 'i', '2', 's', 'd', '6', '4', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  's', 'i', '2', 's', 's', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'i', '2', 's',
+  's', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 'd', '2', 's', 'i', '3',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'c', 'v', 't', 't', 's', 'd', '2', 's', 'i', '6', '4', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'c', 'v', 't', 't', 's', 'd', '2', 'u', 's', 'i', '3', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'c', 'v', 't', 't', 's', 'd', '2', 'u', 's', 'i', '6', '4', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c',
+  'v', 't', 't', 's', 's', '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't',
+  't', 's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's',
+  's', '2', 'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's',
+  '2', 'u', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 's', 'i', '2', 's',
+  's', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 'u', 's', 'i', '2', 's', 'd', '6', '4',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'u', 's', 'i', '2', 's', 's', '6', '4', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'b',
+  'p', 's', 'a', 'd', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p', 's', 'a',
+  'd', 'b', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p', 's', 'a', 'd', 'b', 'w',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'd', 'i', 'v', 'p', 'd', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i',
+  'v', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', '2', 'p', 'd', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'e', 'x', 'p', '2', 'p', 's', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'a', 't', 'h', 'e', 'r', 'p', 'f', 'd', 'p', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a',
+  't', 'h', 'e', 'r', 'p', 'f', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
+  'r', 'p', 'f', 'q', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'p', 'f',
+  'q', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'a', 'd', 'd', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 's', '_', 'r', 'o', 'u',
+  'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'm', 'p', 's', 'd', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'm', 'p', 's', 's', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's',
   'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'q', 'q', '5', '1', '2', '_', 'm',
+  '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '5', '1', '2', '_', 'm',
   'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'd', 'q', '1', '2',
+  'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'q', 'q', '1', '2',
   '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'd',
-  'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd',
-  '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 'p', 'd', '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'q', 'q', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2',
-  'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
-  's', '2', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 'p', 's', '2', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 'p', 's', '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 'p', 's', '2', 'q', 'q', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'q', 'q', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'd', 'q',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2',
-  'u', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'p', 's', '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 'p', 's', '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'q', 'q', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'q', 'q',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'q', 'q', '2',
-  'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's',
-  'd', '2', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 's', 's', '2', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd', 'q',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd',
-  '2', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  't', 'p', 'd', '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 't', 'p', 'd', '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'q', 'q', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'd',
-  'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
-  'd', '2', 'u', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 't', 'p', 'd', '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'q', 'q', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u',
-  'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't',
-  'p', 'd', '2', 'u', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 't', 'p', 's', '2', 'd', 'q', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'q', 'q', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'q', 'q',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'q', 'q',
   '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's',
-  '2', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2',
+  'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
+  'd', '2', 'u', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 'p', 'd', '2', 'u', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'd', 'q', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'q', 'q', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u',
+  'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
+  'd', '2', 'u', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 'p', 's', '2', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'p', 'd', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'q', 'q',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2',
+  'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
+  's', '2', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
   't', 'p', 's', '2', 'u', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'd', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'd', 'q',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's',
-  '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'd', 'q', '2', '5', '6', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'd', 'q', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'q',
+  'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's',
+  '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 't', 'p', 's', '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'q', 'q', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 'q', 'q', '2', 'p', 's',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'v', 's', 'd', '_',
-  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'v', 's',
-  's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i',
-  'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
-  'i', 'm', 'm', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f',
-  'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '2', '5', '6', '_', 'm', 'a',
+  't', 'p', 's', '2', 'u', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'q', 'q', '2', 'p', 's', '1', '2', '8', '_', 'm', 'a',
   's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm',
-  's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm',
-  'm', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's',
-  's', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's',
-  's', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p',
-  'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e',
-  'x', 'p', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e',
-  't', 'e', 'x', 'p', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'e', 't', 'e', 'x', 'p', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 's', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 's', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 's', 'd', '1',
-  '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
-  'e', 't', 'e', 'x', 'p', 's', 's', '1', '2', '8', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p',
-  'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a',
-  'n', 't', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e',
-  't', 'm', 'a', 'n', 't', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 's', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 's', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p',
-  's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a',
-  'n', 't', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 's', 's', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 'd', '_', 'r', 'o',
-  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 's', '_',
-  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's',
+  '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's', 's', '_', 'r', 'o', 'u',
+  'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 's', '2', 's',
   'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i',
-  'n', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'm', 'u', 'l', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'm', 'u', 'l', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'b', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'b', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'b', '1', '2', '8', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'b', '2', '5',
-  '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
-  'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'd', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'd', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'd', 'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 'p', 'd', '2', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'd', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm',
+  '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd', 'q', '5', '1', '2', '_', 'm',
   'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '5', '1', '2', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '1', '2',
+  'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'q', 'q', '1', '2',
   '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '1', '2',
-  '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q',
-  'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'q', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'd', '1', '2', '8', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '2', '5', '6', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '5', '1',
-  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q',
-  'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q',
-  'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q',
-  'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'q', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w', 'b', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w', 'b', '1', '2', '8', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w', 'b', '2', '5',
-  '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w',
-  'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 's', 'd', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 's', 'd', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'd', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '1', '2', '8', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '2', '5', '6',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd',
-  'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 's', 'd', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 's', 'd', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'd', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '1', '2', '8', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '2', '5', '6',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd',
-  'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 's', 'q', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 's', 'q', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'q', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '1', '2', '8', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '2', '5', '6',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q',
-  'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 's', 'q', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 's', 'q', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'q', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '1', '2', '8', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '2', '5', '6',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q',
-  'd', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 's', 'q', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 's', 'q', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'q', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '1', '2', '8', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '2', '5', '6',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q',
-  'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 's', 'w', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 's', 'w', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'w', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '1', '2', '8', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '2', '5', '6',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w',
-  'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'u', 's', 'd', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '2', '5', '6', '_', 'm', 'a', 's',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'q',
+  'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
+  'd', '2', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 'p', 'd', '2', 'u', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's',
   'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '1', '2', '8',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
-  'd', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 'u', 's', 'd', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '1', '2', '8',
+  '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'd', 'q', '2', '5', '6',
   '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd',
-  'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
-  's', 'd', 'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '2', '5', '6', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '5', '1',
-  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
-  's', 'q', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
-  'v', 'u', 's', 'q', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 'u', 's', 'q', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '1', '2', '8', 'm', 'e', 'm',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '2',
-  '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  'u', 's', 'q', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '1', '2', '8', '_', 'm', 'a',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'd',
+  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
+  'd', '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 't', 'p', 'd', '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm', 'a',
   's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '5', '1',
+  '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'q', 'q', '5', '1',
   '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd',
-  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
-  'v', 'u', 's', 'q', 'd', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '5', '1', '2', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
-  'q', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  'u', 's', 'q', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'u', 's', 'q', 'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '2', '5', '6', 'm',
-  'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q',
-  'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'u', 's', 'w', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '5', '1', '2', '_', 'm',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'd',
+  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
+  's', '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 'p', 's', '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 't', 'p', 's', '2', 'q', 'q', '5', '1', '2', '_', 'm',
   'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '1', '2', '8',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
-  'w', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 'u', 's', 'w', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 'p', 'd', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 'p', 'd', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 'p', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 'p', 's', '1',
+  'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'd', 'q', '1',
   '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 'p', 's',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 'p',
-  's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e',
-  's', 'd', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'a', 'n', 'g', 'e', 's', 's', '1', '2', '8', '_', 'r', 'o',
-  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e',
-  'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u',
-  'c', 'e', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e',
-  'd', 'u', 'c', 'e', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 'e', 'd', 'u', 'c', 'e', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 's', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 's', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 's', 'd', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 's', 's', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 'd', '_',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a',
-  'l', 'e', 'p', 'd', '_', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
-  'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 'd', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 's', '_', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 's',
-  '_', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c',
-  'a', 'l', 'e', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's',
-  'c', 'a', 'l', 'e', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 's', 's', '_', 'r',
-  'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e',
-  'f', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a',
-  'l', 'e', 'f', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
-  'c', 'a', 'l', 'e', 'f', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2',
+  'u', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  't', 'p', 's', '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 's', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 's', '2', '5', '6', '_',
+  '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'q', 'q', '1', '2', '8', '_',
   'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 's', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 's', 'd',
-  '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a',
-  'l', 'e', 'f', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 's', 'u', 'b', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 's', 'u', 'b', 's', 's', '_', 'r', 'o', 'u', 'n', 'd',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'q', 'q',
   '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 'h',
-  '2', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v',
-  't', 'p', 's', '2', 'p', 'h', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v',
-  't', 'p', 's', '2', 'p', 'h', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '5', '1', '2', '_', 'm', 'a',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's',
+  '2', 'u', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 'u', 'q', 'q', '2', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'd', 'i', 'v', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
   's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm',
-  'm', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_',
+  '3', '2', '_', 'd', 'i', 'v', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i',
+  'm', 'm', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i',
   'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm',
-  'm', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i',
-  'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 'd', '_', 'm',
-  'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 's',
-  '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 'd', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'm', 'a', 'x', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd',
-  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'i', 'n', 'p', 's', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u',
-  'l', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 'p', 's', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'c', 'k', 's', 's', 'w', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u',
-  's', 'd', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b',
-  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'd', 'f', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'd', 'f', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'e', 'r', 'm', 'v', 'a', 'r', 'd', 'i', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e',
-  'r', 'm', 'v', 'a', 'r', 'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm',
-  'v', 'a', 'r', 'h', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a',
-  'r', 'h', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h',
-  'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'q', 'i', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'q', 'i', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'q', 'i', '5', '1', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'e', 'r', 'm', 'v', 'a', 'r', 's', 'f', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r',
-  'm', 'v', 'a', 'r', 's', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd',
-  'u', 'b', 's', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w', 'd',
-  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'u', 'l', 'h', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
-  'h', 'u', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'u', 'l', 't', 'i', 's',
-  'h', 'i', 'f', 't', 'q', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'u', 'l',
-  't', 'i', 's', 'h', 'i', 'f', 't', 'q', 'b', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'm', 'u', 'l', 't', 'i', 's', 'h', 'i', 'f', 't', 'q', 'b', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'a', 'd', 'b', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u',
-  'f', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'l', 'l', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', '5',
-  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'l', 'l', 'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', 'i', '5',
-  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'l', 'l', 'v', '1', '6', 's', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'l', 'l', 'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '8', 'h', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'l', 'l', 'v', '1', '6', 'h', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
-  'v', '3', '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'a', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'a', 'q', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'a', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', 'i', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'r', 'a', 'q', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
-  'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', 'i', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'r', 'a', 'w', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
-  'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', 'q', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'r', 'a', 'v', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
-  'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '8', 'h', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'a', 'v', '1', '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '3',
-  '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'l', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'r', 'l', 'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
-  'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', 'i', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'r', 'l', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
-  'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '8', 'h', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'l', 'v', '1', '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '3',
-  '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't',
-  'e', 'r', 'n', 'l', 'o', 'g', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r',
-  'n', 'l', 'o', 'g', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l',
-  'o', 'g', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4',
-  'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1',
-  '4', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p',
-  '1', '4', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c',
-  'p', '1', '4', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1',
-  '4', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 'p',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 'p', 's', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 's', 'd', '_', 'r', 'o',
-  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 's',
-  's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's',
-  'q', 'r', 't', '1', '4', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 'd', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p',
-  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't',
-  '1', '4', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's',
-  'q', 'r', 't', '1', '4', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 's', 'q', 'r', 't', '1', '4', 's', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 's', 'q', 'r', 't', '1', '4', 's', 's', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 's', 'q', 'r', 't', '2', '8', 'p', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 's', 'q', 'r', 't', '2', '8', 'p', 's', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 's', 'q', 'r', 't', '2', '8', 's', 'd', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '2', '8', 's',
-  's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c',
-  'a', 't', 't', 'e', 'r', 'p', 'f', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't',
-  't', 'e', 'r', 'p', 'f', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e',
-  'r', 'p', 'f', 'q', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p',
-  'f', 'q', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 's', 'u', 'b', 'p', 'd', '5', '1', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
-  'u', 'b', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'o', 'm', 'i', 's', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'c', 'o', 'm', 'i', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd',
-  '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd', '2', 's', 'i',
-  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd', '2', 'u', 's', 'i', '3', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'c', 'v', 't', 's', 'd', '2', 'u', 's', 'i', '6', '4', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'c', 'v', 't', 's', 's', '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't',
-  's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 's', '2',
-  'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 's', '2', 'u', 's',
-  'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'd', 'p', 'b', 'u', 's', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b',
-  'u', 's', 'd', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's',
-  'd', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', 's',
-  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'd', 'p', 'w', 's', 's', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w',
-  's', 's', 'd', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's',
-  'd', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', 's',
-  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd',
-  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'h',
-  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r',
-  'h', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a',
-  'r', 'h', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v',
-  'a', 'r', 'p', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2',
-  'v', 'a', 'r', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i',
-  '2', 'v', 'a', 'r', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
-  'i', '2', 'v', 'a', 'r', 'p', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
-  'm', 'i', '2', 'v', 'a', 'r', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
-  'r', 'm', 'i', '2', 'v', 'a', 'r', 'p', 's', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', '1', '2', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', 'i', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', 'i', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', 'i', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 'd', '5', '1',
-  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 's', '5',
-  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '5',
-  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '5',
-  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'b', 'e', 'x', 't', 'r', '_', 'u', '3', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'e',
-  'x', 't', 'r', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'z', 'h', 'i', '_', 's', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'b', 'z', 'h', 'i', '_', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'd', 'e', 'p', '_', 's',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'd', 'e', 'p', '_', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'x', 't', '_',
-  's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'e', 'x', 't', '_', 'd', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'd', 'e',
-  'm', 'o', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'l', 'f', 'l', 'u', 's', 'h', 'o', 'p', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'l', 'r', 's', 's', 'b', 's', 'y', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'w', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'l', 'z', 'e', 'r', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'r', 'e', 'c', 't', 's', 't',
-  'o', 'r', 'e', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'r', 'e', 'c', 't', 's',
-  't', 'o', 'r', 'e', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'a', 'd', 'e', 'f',
-  'l', 'a', 'g', 's', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'a', 'd', 'e', 'f',
-  'l', 'a', 'g', 's', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'i', 't', 'e', 'e',
-  'f', 'l', 'a', 'g', 's', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'i', 't', 'e',
-  'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'x', 'r', 's',
-  't', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'f', 'x', 'r', 's', 't', 'o', 'r', '6', '4', '\000', '_',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p',
+  's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
+  'i', 'm', 'm', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f',
-  'x', 's', 'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'f', 'x', 's', 'a', 'v', 'e', '6', '4', '\000',
+  'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 'd', '_', 'm', 'a', 's', 'k', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'i', 'n', 'c', 's', 's', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 'c', 's', 's', 'p', 'q',
+  'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 's', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'i', 'n', 'v', 'p', 'c', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'l', 'w', 'p', 'c', 'b',
+  '_', 'f', 'p', 'c', 'l', 'a', 's', 's', 's', 'd', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'l', 'w', 'p', 'i', 'n', 's', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'w', 'p', 'i', 'n',
-  's', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'l', 'w', 'p', 'v', 'a', 'l', '3', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'w',
-  'p', 'v', 'a', 'l', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'm', 'm', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'e', 'm',
-  'm', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'm', 'a', 's', 'k', 'm', 'o', 'v', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'v',
-  'n', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'c', 'k', 's', 's', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b',
+  '_', 'f', 'p', 'c', 'l', 'a', 's', 's', 's', 's', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'a', 'd', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'd', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 's',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'a', 'd', 'd', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'l', 'i', 'g',
-  'n', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'n', 'd', 'n', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p',
-  'e', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 'q', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm',
-  'p', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
-  'm', 'p', 'g', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'e', 'c', '_', 'e', 'x', 't', '_', 'v', '4', 'h', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'e', 'c',
-  '_', 's', 'e', 't', '_', 'v', '4', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd',
-  'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'a', 'x', 's', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'x', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'i', 'n', 'u', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'l',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'u', 'l', 'u', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'a', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
-  'l', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'l', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'l', 'l', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'a', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'r', 'l', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'l', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'l', 'w', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'u', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'u', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'u', 'b', 'u', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'u', 'n', 'p', 'c', 'k', 'h', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k',
-  'h', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'h', 'w', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'u', 'n', 'p', 'c', 'k', 'l', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k',
-  'l', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'l', 'w', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'x', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o',
-  'v', 'd', 'i', 'r', '6', '4', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'w', 'a', 'i', 't', 'x', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '1', '2', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
-  'l', 'm', 'u', 'l', 'q', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'l', 'm',
-  'u', 'l', 'q', 'd', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'w', 'r', 'i', 't',
-  'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 't', 'w', 'r', 'i', 't', 'e', '6', '4', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
-  'd', 'f', 's', 'b', 'a', 's', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'f', 's', 'b',
-  'a', 's', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'g', 's', 'b', 'a', 's', 'e', '3',
-  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'd', 'g', 's', 'b', 'a', 's', 'e', '6', '4', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd',
-  'p', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'd', 'p', 'k', 'r', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'p', 'm',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'd', 's', 's', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 's', 's', 'p', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 'd', 't', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 't', 'o', 'r', 's', 's', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 'a', 'v', 'e', 'p', 'r', 'e', 'v', 's', 's', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'e',
-  't', 's', 's', 'b', 's', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '1', 'm', 's', 'g', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 'h', 'a', '1', 'm', 's', 'g', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '1', 'n',
-  'e', 'x', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 's', 'h', 'a', '1', 'r', 'n', 'd', 's', '4', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  's', 'h', 'a', '2', '5', '6', 'm', 's', 'g', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '2',
-  '5', '6', 'm', 's', 'g', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '2', '5', '6', 'r', 'n',
-  'd', 's', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 's', 'l', 'w', 'p', 'c', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'm', 'p', 's',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'o', 'm', 'i', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'g', 'e',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'o', 'm', 'i', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'l', 'e', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'o', 'm', 'i', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'n', 'e', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 'p', 'd', '2', 'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'i', '2',
-  'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 'p', 'i', '2', 'p', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'p', 's', '2', 'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 's', '2', 's', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't',
-  'p', 'd', '2', 'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'p', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 't', 's', 's', '2', 's', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't',
-  's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 's', '\000', '_',
+  '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 'd', '1', '2', '8', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 'd', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 'd', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 's',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p',
+  'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e',
+  'x', 'p', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e',
+  't', 'e', 'x', 'p', 's', 'd', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 's', 's', '1',
+  '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'e', 't', 'm', 'a', 'n', 't', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 'd', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 'd', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't',
+  'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm',
+  'a', 'n', 't', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'e', 't', 'm', 'a', 'n', 't', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 's', 'd', '_', 'r', 'o', 'u',
+  'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't',
+  's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
-  'a', 'x', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u',
-  'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'c', 'p', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', 's', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 's', 'q', 'r', 't', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', 's', 's',
+  'a', 'x', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'e', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'u', 'c', 'o', 'm', 'i', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'g',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'u', 'c', 'o', 'm', 'i', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
-  'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'n', 'e', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'f',
-  'l', 'u', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'm', 'p', 's', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i',
-  's', 'd', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'g', 'e', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'o', 'm', 'i', 's', 'd', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'l',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'l', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i',
-  's', 'd', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 'p', 'd', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2',
-  'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  's', 'd', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  't', 'p', 's', '2', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 's', 'd', '2', 's',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 't', 's', 'd', '2', 's', 'i', '6', '4', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l',
-  'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'm', 'o', 'v', 'd', 'q',
-  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'm', 'a', 'x', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
-  'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n',
-  's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c',
-  'k', 's', 's', 'd', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's',
-  'w', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'u', 's', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w',
-  'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'u', 'l', 'h', 'w', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u',
-  'l', 'h', 'u', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'a', 'd', 'b', 'w', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'l', 'l', 'd', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
-  'l', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'l', 'l', 'd', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q',
-  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', 'i', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'a', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'a', 'd', 'i', '1', '2', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'a', 'w', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'r', 'l', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
-  'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', 'i', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'l', 'q', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w',
-  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'e', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'u', 'c', 'o', 'm', 'i', 's', 'd', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
-  's', 'd', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'l', 'e', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'u', 'c', 'o', 'm', 'i', 's', 'd', 'l', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
-  's', 'd', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd', 'p', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'h', 'a', 'd', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 's', 'u', 'b', 'p', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'h', 's', 'u', 'b', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'l', 'd', 'd', 'q', 'u', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o',
-  'n', 'i', 't', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'm', 'w', 'a', 'i', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e',
-  'n', 'd', 'v', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'd', 'p', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'd', 'p', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 's', 'e', 'r',
-  't', 'p', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'p', 's', 'a', 'd', 'b', 'w', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd', 'w', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'b', 'l', 'e', 'n', 'd', 'v', 'b', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'm',
-  'i', 'n', 'p', 'o', 's', 'u', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's',
-  't', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'n', 'z', 'c', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 't', 'e', 's', 't', 'z', '1', '2', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o',
-  'u', 'n', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
-  'o', 'u', 'n', 'd', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 's', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'r', 'c', '3', '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 's', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'r', 'c', '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'a', '1', '2', '8', '\000', '_',
+  '_', 'm', 'a', 'x', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'm', 'i', 'n', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's', 's', '_', 'r', 'o', 'u', 'n',
+  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 's', 'd', '_', 'r', 'o',
+  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 's', 's', '_',
+  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'd', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'd', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'd', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'c', '1', '2', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
-  'm', 'p', 'e', 's', 't', 'r', 'i', 'o', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm',
-  'p', 'e', 's', 't', 'r', 'i', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p',
-  'e', 's', 't', 'r', 'i', 'z', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e',
-  's', 't', 'r', 'm', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't',
-  'r', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i',
-  'a', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 'c',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 'o', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 's', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 'z', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'm', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e',
-  'x', 't', 'r', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'e', 'x', 't', 'r', 'q', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 's',
-  'e', 'r', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'i', 'n', 's', 'e', 'r', 't', 'q', 'i', '\000', '_',
+  'm', 'o', 'v', 'd', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'd', 'b', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '1', '2', '8', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '1', '2', '8', 'm',
+  'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '2',
+  '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'd', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'a', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'a', 'b', 's', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'b', 's',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'h', 'a', 'd', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'd',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 's', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a',
-  'd', 'd', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'h', 'a', 'd', 'd', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'h', 's', 'u', 'b', 'd', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's',
-  'u', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 's', 'w', '1', '2', '8',
+  'm', 'o', 'v', 'q', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'q', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'q', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'q', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '2', '5', '6', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '5', '1', '2', 'm',
+  'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '1',
+  '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'q', 'd', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'q', 'd', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '1', '2', '8', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '2', '5', '6', 'm',
+  'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '5',
+  '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'w', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'w', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'w', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'w', 'b', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b',
+  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'd', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
   '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'h', 's', 'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'w', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w', '\000', '_', '_',
+  '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w',
+  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'd', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b',
+  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'q', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd',
+  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'q', 'd', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w',
+  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'q', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b',
+  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'w', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '1', '2',
+  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
+  'd', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'u', 's', 'd', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '5',
+  '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'u', 's', 'd', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'a', 'd', 'd', 'u', 'b', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
-  'h', 'r', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'h', 'u', 'f', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'b',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g',
-  'n', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'i', 'g', 'n', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'w', '\000',
+  'o', 'v', 'u', 's', 'd', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'i', 'g', 'n', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r',
-  'i', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', 'i', '_', 'u', '6',
-  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 't', 'p', 'a', 'u', 's', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'm', 'o', 'n', 'i', 't',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'u', 'm', 'w', 'a', 'i', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p',
-  'h', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '\000', '_', '_',
+  'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '1', '2', '8', 'm', 'e',
+  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w',
+  '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 'u', 's', 'd', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q',
+  'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 'u', 's', 'q', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '5', '1', '2', 'm',
+  'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q',
+  'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
+  's', 'q', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 'u', 's', 'q', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'u', 's', 'q', 'd', '1', '2', '8', 'm', 'e', 'm', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '2', '5', '6',
+  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
+  'q', 'd', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'u', 's', 'q', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '1', '2',
+  '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
+  's', 'q', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '5', '1', '2', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '1', '2',
+  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
+  'w', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'u', 's', 'w', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '5',
+  '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g',
+  'e', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n',
+  'g', 'e', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a',
+  'n', 'g', 'e', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  'a', 'n', 'g', 'e', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'r', 'a', 'n', 'g', 'e', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'a', 'n', 'g', 'e', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'a', 'n', 'g', 'e', 's', 'd', '1', '2', '8', '_', 'r', 'o',
+  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 's',
+  's', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '1', '2', '8', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 's',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e',
+  'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u',
+  'c', 'e', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e',
+  'd', 'u', 'c', 'e', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd',
+  'u', 'c', 'e', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's',
+  'c', 'a', 'l', 'e', 'p', 'd', '_', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 'd', '_', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p',
+  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e',
+  'p', 's', '_', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd',
+  's', 'c', 'a', 'l', 'e', 'p', 's', '_', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 's', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 's', 'd', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c',
+  'a', 'l', 'e', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p',
+  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e',
+  'f', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a',
+  'l', 'e', 'f', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
+  'c', 'a', 'l', 'e', 'f', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 's', 's', '_', 'r', 'o',
+  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b', 's', 'd', '_',
+  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b', 's',
+  's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c',
-  'v', 't', 'p', 's', '2', 'p', 'h', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2',
-  'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n', 'v', 'q', 'b', '_', 'v',
-  '1', '6', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i',
-  'n', 'e', 'i', 'n', 'v', 'q', 'b', '_', 'v', '3', '2', 'q', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n', 'v', 'q',
-  'b', '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a',
-  'f', 'f', 'i', 'n', 'e', 'q', 'b', '_', 'v', '1', '6', 'q', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'q', 'b', '_', 'v',
-  '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i',
-  'n', 'e', 'q', 'b', '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2',
-  'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '1', '6', 'q', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g',
-  'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '3', '2', 'q', 'i', '\000',
+  'v', 't', 'p', 'h', '2', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c',
+  'v', 't', 'p', 'h', '2', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p',
+  'h', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
+  'i', 'm', 'm', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '6', '4', 'q',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'w', 'b', 'i', 'n', 'v', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'b', 'n', 'o', 'i', 'n',
-  'v', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'w', 'r', 'f', 's', 'b', 'a', 's', 'e', '3', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w',
-  'r', 'f', 's', 'b', 'a', 's', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'g', 's', 'b',
-  'a', 's', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'g', 's', 'b', 'a', 's', 'e', '6',
-  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'w', 'r', 'p', 'k', 'r', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 's', 's', 'd', '\000',
+  'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '2', '5', '6', '_', 'm',
+  'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd',
+  '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
+  'i', 'm', 'm', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'w', 'r', 's', 's', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'u', 's', 's', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r',
-  'u', 's', 's', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'x', 'a', 'b', 'o', 'r', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'x', 'b', 'e',
-  'g', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'x', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 'p',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'r', 'c', 'z', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 's', '2', '5',
+  'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '2', '5', '6', '_', 'm',
+  'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's',
+  '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
+  'i', 'm', 'm', 's', 'd', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x',
+  'u', 'p', 'i', 'm', 'm', 's', 's', '_', 'm', 'a', 's', 'k', 'z', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
+  'a', 'x', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 's', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'i', 'n', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p',
+  's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'u', 'l', 'p', 'd', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
+  'u', 'l', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'd',
+  'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'w', 'b', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd', 'w', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'c', 'k', 'u', 's', 'w', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g',
+  'b', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'w', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'e', 'r', 'm', 'v', 'a', 'r', 'd', 'f', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r',
+  'm', 'v', 'a', 'r', 'd', 'f', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v',
+  'a', 'r', 'd', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r',
+  'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h', 'i',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h', 'i', '2', '5',
   '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'f', 'r', 'c', 'z', 's', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z',
-  's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', 'l', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i',
-  'l', '2', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'b',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'b', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a',
-  'd', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'd', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'h', 'a', 'd', 'd', 'u', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd',
-  'u', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'b', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'h', 'a', 'd', 'd', 'u', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd',
-  'u', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'w', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'h', 'a', 'd', 'd', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'w',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'h', 's', 'u', 'b', 'b', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 's',
-  'u', 'b', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'h', 's', 'u', 'b', 'w', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'm', 'a', 'c', 's', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'd',
-  'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'd', 'q', 'l', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'm', 'a', 'c', 's', 's', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's',
-  'd', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's', 'd', 'q', 'l', '\000',
+  '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h', 'i', '5', '1', '2', '\000',
   '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'm', 'a', 'c', 's', 's', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c',
-  's', 's', 'w', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'w', 'd', '\000', '_',
+  'p', 'e', 'r', 'm', 'v', 'a', 'r', 'q', 'i', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e',
+  'r', 'm', 'v', 'a', 'r', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm',
+  'v', 'a', 'r', 'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a',
+  'r', 's', 'f', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 's',
+  'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w', 'd', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'u', 'l', 'h', 'r', 's', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
+  'h', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 'm', 'u', 'l', 't', 'i', 's', 'h', 'i', 'f', 't', 'q',
+  'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'u', 'l', 't', 'i', 's', 'h', 'i',
+  'f', 't', 'q', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'u', 'l', 't', 'i',
+  's', 'h', 'i', 'f', 't', 'q', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'a', 'd',
+  'b', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'b', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'l', 'l', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'l', 'l', 'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'l', 'l', 'w', 'i', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'l', 'l', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '8', 'd',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'l', 'l', 'v', '8', 'h', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
+  'v', '1', '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '3', '2', 'h', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'r', 'a', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'q', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', 'i', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'w', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '1', '6', 's', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'v', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'v', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '8', 'd', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'a', 'v', '8', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '1',
+  '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '3', '2', 'h', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'r', 'l', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'r', 'l', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
+  'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'w', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
+  'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '8', 'd', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'l', 'v', '8', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '1',
+  '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '3', '2', 'h', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e',
+  'r', 'n', 'l', 'o', 'g', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n',
+  'l', 'o', 'g', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o',
+  'g', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd', '1', '2', '8', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd', '2', '5', '6', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 's', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 's', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 's', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 's', 'd',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 's', 's', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 'p', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'c', 'p', '2', '8', 'p', 's', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'r', 'c', 'p', '2', '8', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 's', 's', '_', 'r', 'o', 'u',
+  'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4',
+  'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r',
+  't', '1', '4', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  's', 'q', 'r', 't', '1', '4', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 's', '1', '2', '8', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 's', '2',
+  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4',
+  'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r',
+  't', '1', '4', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r',
+  't', '1', '4', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r',
+  't', '2', '8', 'p', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r',
+  't', '2', '8', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r',
+  't', '2', '8', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 's', 'q', 'r', 't', '2', '8', 's', 's', '_', 'r', 'o', 'u',
+  'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r',
+  'p', 'f', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f',
+  'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f', 'q', 'p',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f', 'q', 'p', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  's', 'u', 'b', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b', 'p', 's', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'c', 'o', 'm', 'i', 's', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'o', 'm',
+  'i', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd', '2', 's', 'i', '3', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'c', 'v', 't', 's', 'd', '2', 's', 'i', '6', '4', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c',
+  'v', 't', 's', 'd', '2', 'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't',
+  's', 'd', '2', 'u', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 's',
+  '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 's', '2', 's', 'i',
+  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'c', 'v', 't', 's', 's', '2', 'u', 's', 'i', '3', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'c', 'v', 't', 's', 's', '2', 'u', 's', 'i', '6', '4', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'm', 'a', 'c', 's', 'w', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'c', 's',
-  's', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'c', 's', 'w', 'd', '\000', '_',
+  'p', 'd', 'p', 'b', 'u', 's', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p',
+  'b', 'u', 's', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's',
+  'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', 's', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', 's', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', 's', '5', '1', '2', '\000', '_',
   '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'a', 'b', '\000', '_', '_',
+  'p', 'd', 'p', 'w', 's', 's', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p',
+  'w', 's', 's', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's',
+  'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', 's', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', 's', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', 's', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'h', 'i', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'h', 'i', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'h', 'i', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'p', 'd', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'p', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'p',
+  'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r',
+  'p', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a',
+  'r', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v',
+  'a', 'r', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2',
+  'v', 'a', 'r', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2',
+  'v', 'a', 'r', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2',
+  'v', 'a', 'r', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2',
+  'v', 'a', 'r', 'q', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i',
+  '2', 'v', 'a', 'r', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
+  'i', '2', 'v', 'a', 'r', 'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
+  'm', 'i', 'l', 'v', 'a', 'r', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
+  'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 's', '5', '1', '2', '\000', '_', '_',
   'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  's', 'h', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'a', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
-  'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l',
+  'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 'n', 'e', '2', 'p', 's', '2', 'b', 'f', '1', '6', '_', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'n', 'e', '2', 'p', 's', '2', 'b', 'f', '1', '6', '_',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 'n', 'e', '2', 'p', 's', '2', 'b', 'f',
+  '1', '6', '_', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'n', 'e', 'p', 's', '2',
+  'b', 'f', '1', '6', '_', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'n', 'e', 'p',
+  's', '2', 'b', 'f', '1', '6', '_', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'p', 'b', 'f',
+  '1', '6', 'p', 's', '_', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'p', 'b', 'f', '1', '6',
+  'p', 's', '_', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'd', 'p', 'b', 'f', '1', '6', 'p', 's',
+  '_', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', '_', 'u', '3', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'b', 'e', 'x', 't', 'r', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'z', 'h', 'i', '_',
+  's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'b', 'z', 'h', 'i', '_', 'd', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'd', 'e', 'p',
+  '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'd', 'e', 'p', '_', 'd', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'x',
+  't', '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'e', 'x', 't', '_', 'd', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l',
+  'd', 'e', 'm', 'o', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'f', 'l', 'u', 's', 'h', 'o',
+  'p', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'l', 'r', 's', 's', 'b', 's', 'y', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'w',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'l', 'z', 'e', 'r', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'r', 'e', 'c', 't',
+  's', 't', 'o', 'r', 'e', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'r', 'e', 'c',
+  't', 's', 't', 'o', 'r', 'e', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'n', 'q', 'c',
+  'm', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'e', 'n', 'q', 'c', 'm', 'd', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'a', 'd',
+  'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'a', 'd',
+  'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'i', 't',
+  'e', 'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '3', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'i',
+  't', 'e', 'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '6', '4', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'x',
+  'r', 's', 't', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'f', 'x', 'r', 's', 't', 'o', 'r', '6', '4',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'f', 'x', 's', 'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'x', 's', 'a', 'v', 'e', '6',
+  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'i', 'n', 'c', 's', 's', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 'c', 's', 's',
+  'p', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'i', 'n', 'v', 'p', 'c', 'i', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'l', 'w', 'p',
+  'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'l', 'w', 'p', 'i', 'n', 's', '3', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'w', 'p',
+  'i', 'n', 's', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'l', 'w', 'p', 'v', 'a', 'l', '3', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'l', 'w', 'p', 'v', 'a', 'l', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'm', 'm', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f',
+  'e', 'm', 'm', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'm', 'o', 'v', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
+  'o', 'v', 'n', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'a', 'c', 'k', 's', 's', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's',
+  'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'a', 'd', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'a', 'd', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd',
+  'd', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'a', 'd', 'd', 's', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd',
+  'u', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'l',
+  'i', 'g', 'n', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'n', 'd', 'n',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
+  'm', 'p', 'e', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 'q', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'c', 'm', 'p', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'c', 'm', 'p', 'g', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'e', 'c', '_', 'e', 'x', 't', '_', 'v', '4', 'h', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'e', 'c', '_', 's', 'e', 't', '_', 'v', '4', 'h', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a',
+  'd', 'd', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'x', 's', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a',
+  'x', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'i', 'n',
+  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u',
+  'l', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u',
+  'l', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'u', 'd', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'a', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'l', 'l', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
+  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'r', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'r', 'a', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'r', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'l', 'w', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'u', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'u', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'u', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'u', 'b', 'u', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'u', 'n', 'p', 'c', 'k', 'h', 'b', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p',
+  'c', 'k', 'h', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'h', 'w', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'u', 'n', 'p', 'c', 'k', 'l', 'b', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p',
+  'c', 'k', 'l', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'l', 'w', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'x', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'm', 'o', 'v', 'd', 'i', 'r', '6', '4', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'w', 'a', 'i', 't',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
+  'l', 'm', 'u', 'l', 'q', 'd', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'w', 'r',
+  'i', 't', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 't', 'w', 'r', 'i', 't', 'e', '6', '4',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'd', 'f', 's', 'b', 'a', 's', 'e', '3', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'f',
+  's', 'b', 'a', 's', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'g', 's', 'b', 'a', 's',
+  'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'd', 'g', 's', 'b', 'a', 's', 'e', '6', '4', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'r', 'd', 'p', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'p', 'k', 'r', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd',
+  'p', 'm', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'd', 's', 's', 'p', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 's', 's',
+  'p', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'd', 't', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 't', 'o', 'r', 's',
+  's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 's', 'a', 'v', 'e', 'p', 'r', 'e', 'v', 's', 's', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  's', 'e', 't', 's', 's', 'b', 's', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '1', 'm', 's',
+  'g', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 's', 'h', 'a', '1', 'm', 's', 'g', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a',
+  '1', 'n', 'e', 'x', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '1', 'r', 'n', 'd', 's',
+  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'h', 'a', '2', '5', '6', 'm', 's', 'g', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h',
+  'a', '2', '5', '6', 'm', 's', 'g', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '2', '5', '6',
+  'r', 'n', 'd', 's', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 's', 'l', 'w', 'p', 'c', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'm',
+  'p', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i',
+  'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'o', 'm', 'i', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'l',
+  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'o', 'm', 'i', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'n', 'e',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
+  'i', '2', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'i', '2', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 'p', 's', '2', 'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 's', '2', 's',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'v', 't', 's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 'p', 'd', '2', 'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2',
+  'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 't', 's', 's', '2', 's', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'm', 'a', 'x', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i',
+  'n', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'h', 'u', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'r', 'c', 'p', 'p', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', 's',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 's', 'q', 'r', 't', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't',
+  's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 's', 'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
+  'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'g', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm',
+  'i', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'l', 'e', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o',
+  'm', 'i', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'n', 'e', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'l', 'f', 'l', 'u', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'm', 'p', 's', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
+  'm', 'i', 's', 'd', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'g', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'o', 'm', 'i', 's', 'd', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's',
+  'd', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'l', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
+  'm', 'i', 's', 'd', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
+  's', '2', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 's', 'd', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'd',
+  '2', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 't', 'p', 's', '2', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 's', 'd',
+  '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 't', 's', 'd', '2', 's', 'i', '6', '4',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'l', 'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'm', 'o', 'v',
+  'd', 'q', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'a', 'x', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'm', 'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
+  'i', 'n', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'c', 'k', 's', 's', 'd', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k',
+  's', 's', 'w', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w',
+  'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'u', 's', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g',
+  'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'w', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'a', 'd', 'd', 'w', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'm',
+  's', 'k', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'w', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'a', 'd', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'l', 'l', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
+  'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'l', 'l', 'q', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w',
+  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'r', 'a', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', 'i', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'r', 'l', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd',
+  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'l', 'w', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
+  's', 'd', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'g', 'e', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'u', 'c', 'o', 'm', 'i', 's', 'd', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
+  's', 'd', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'l', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'u', 'c', 'o', 'm', 'i', 's', 'd', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's',
+  'u', 'b', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h',
+  'a', 'd', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd', 'p', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 's',
+  'u', 'b', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'h', 's', 'u', 'b', 'p', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'd', 'd',
+  'q', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'm', 'o', 'n', 'i', 't', 'o', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'w', 'a', 'i',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e', 'n',
+  'd', 'v', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'd', 'p', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'p', 'p', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'i', 'n', 's', 'e', 'r', 't', 'p', 's', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'p', 's',
+  'a', 'd', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd',
+  'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'b', 'l', 'e', 'n', 'd', 'v', 'b', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'h', 'm', 'i', 'n', 'p', 'o', 's', 'u', 'w', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 't', 'e', 's', 't', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's',
+  't', 'n', 'z', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'z', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n',
+  'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 's', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u',
+  'n', 'd', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 'h', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'r',
+  'c', '3', '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 'q', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'r', 'c', '3', '2', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r',
+  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'a',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'c', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'o', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 's', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'z', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'm', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
+  'm', 'p', 'i', 's', 't', 'r', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p',
+  'i', 's', 't', 'r', 'i', 'a', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i',
+  's', 't', 'r', 'i', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's',
+  't', 'r', 'i', 'o', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't',
+  'r', 'i', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r',
+  'i', 'z', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'm',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'e', 'x', 't', 'r', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 't', 'r', 'q',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'i', 'n', 's', 'e', 'r', 't', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 's', 'e', 'r',
+  't', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'a', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'b', 's', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'a', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'h', 'a', 'd', 'd', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 's',
   'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'x', 't', 'e', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'b', 'i', 't', 'r', 'e', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'i', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'p', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', 'p', 's', '\000',
+  '2', '_', 'p', 'h', 'a', 'd', 'd', 's', 'w', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h',
+  'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'w', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'h', 's', 'u', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'd', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'h', 's', 'u', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b',
+  's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h',
+  's', 'u', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b',
+  's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h',
+  'r', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'h', 'u', 'f', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'i', 'g', 'n', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g',
+  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'd', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'i', 'g', 'n', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'w', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'b', 'e', 'x', 't', 'r', 'i', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't',
+  'r', 'i', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 't', 'p', 'a', 'u', 's', 'e', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u',
+  'm', 'o', 'n', 'i', 't', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'm', 'w', 'a', 'i', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p',
+  'h', '2', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2',
+  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n',
+  'v', 'q', 'b', '_', 'v', '1', '6', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p',
+  '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n', 'v', 'q', 'b', '_', 'v', '3',
+  '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n',
+  'e', 'i', 'n', 'v', 'q', 'b', '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g',
+  'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'q', 'b', '_', 'v', '1',
+  '6', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n',
+  'e', 'q', 'b', '_', 'v', '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p',
+  '8', 'a', 'f', 'f', 'i', 'n', 'e', 'q', 'b', '_', 'v', '6', '4', 'q', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '1', '6',
+  'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v',
+  '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b',
+  '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'w', 'b', 'i', 'n', 'v', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w',
+  'b', 'n', 'o', 'i', 'n', 'v', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'f', 's', 'b', 'a', 's',
+  'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'w', 'r', 'f', 's', 'b', 'a', 's', 'e', '6', '4', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'w', 'r', 'g', 's', 'b', 'a', 's', 'e', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'g', 's',
+  'b', 'a', 's', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'p', 'k', 'r', 'u', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w',
+  'r', 's', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'w', 'r', 's', 's', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'u', 's',
+  's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'w', 'r', 'u', 's', 's', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'x', 'a', 'b', 'o', 'r',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'x', 'b', 'e', 'g', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'x', 'e', 'n', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'f', 'r', 'c', 'z', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 'd', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c',
+  'z', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 's', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'f', 'r', 'c', 'z', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l',
+  '2', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 'd', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 's', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'h', 'a', 'd', 'd', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'b', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'h', 'a', 'd', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd',
+  'd', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'b', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'h', 'a', 'd', 'd', 'u', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd',
+  'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'd', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'h', 'a', 'd', 'd', 'u', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd',
+  'u', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'w', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'h', 'a', 'd', 'd', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 's', 'u', 'b', 'b', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'h', 's', 'u', 'b', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 's', 'u',
+  'b', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'c', 's', 'd', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'd',
+  'q', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'c', 's', 's', 'd', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's',
+  's', 'd', 'q', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's', 'w', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'm', 'a', 'c', 's', 's', 'w', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c',
+  's', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'w', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'm', 'a', 'd', 'c', 's', 's', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'c',
+  's', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
+  'a', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 's', 'h', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'a',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 's', 'h', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 's', 'h', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'x', 't', 'e', 's', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'i', 't', 'r', 'e', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'i', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'p',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't',
+  'p', 's', '\000',
   };
 
   struct BuiltinEntry {
@@ -24774,61 +26492,69 @@
       {Intrinsic::amdgcn_ds_fadd, 596}, // __builtin_amdgcn_ds_faddf
       {Intrinsic::amdgcn_ds_fmax, 622}, // __builtin_amdgcn_ds_fmaxf
       {Intrinsic::amdgcn_ds_fmin, 648}, // __builtin_amdgcn_ds_fminf
-      {Intrinsic::amdgcn_ds_permute, 674}, // __builtin_amdgcn_ds_permute
-      {Intrinsic::amdgcn_ds_swizzle, 702}, // __builtin_amdgcn_ds_swizzle
-      {Intrinsic::amdgcn_fdot2, 730}, // __builtin_amdgcn_fdot2
-      {Intrinsic::amdgcn_fmed3, 753}, // __builtin_amdgcn_fmed3
-      {Intrinsic::amdgcn_fmul_legacy, 776}, // __builtin_amdgcn_fmul_legacy
-      {Intrinsic::amdgcn_groupstaticsize, 805}, // __builtin_amdgcn_groupstaticsize
-      {Intrinsic::amdgcn_implicit_buffer_ptr, 838}, // __builtin_amdgcn_implicit_buffer_ptr
-      {Intrinsic::amdgcn_implicitarg_ptr, 875}, // __builtin_amdgcn_implicitarg_ptr
-      {Intrinsic::amdgcn_interp_mov, 908}, // __builtin_amdgcn_interp_mov
-      {Intrinsic::amdgcn_interp_p1, 936}, // __builtin_amdgcn_interp_p1
-      {Intrinsic::amdgcn_interp_p1_f16, 963}, // __builtin_amdgcn_interp_p1_f16
-      {Intrinsic::amdgcn_interp_p2, 994}, // __builtin_amdgcn_interp_p2
-      {Intrinsic::amdgcn_interp_p2_f16, 1021}, // __builtin_amdgcn_interp_p2_f16
-      {Intrinsic::amdgcn_kernarg_segment_ptr, 1052}, // __builtin_amdgcn_kernarg_segment_ptr
-      {Intrinsic::amdgcn_lerp, 1089}, // __builtin_amdgcn_lerp
-      {Intrinsic::amdgcn_mbcnt_hi, 1111}, // __builtin_amdgcn_mbcnt_hi
-      {Intrinsic::amdgcn_mbcnt_lo, 1137}, // __builtin_amdgcn_mbcnt_lo
-      {Intrinsic::amdgcn_mqsad_pk_u16_u8, 1163}, // __builtin_amdgcn_mqsad_pk_u16_u8
-      {Intrinsic::amdgcn_mqsad_u32_u8, 1196}, // __builtin_amdgcn_mqsad_u32_u8
-      {Intrinsic::amdgcn_msad_u8, 1226}, // __builtin_amdgcn_msad_u8
-      {Intrinsic::amdgcn_qsad_pk_u16_u8, 1251}, // __builtin_amdgcn_qsad_pk_u16_u8
-      {Intrinsic::amdgcn_queue_ptr, 1283}, // __builtin_amdgcn_queue_ptr
-      {Intrinsic::amdgcn_rcp_legacy, 1310}, // __builtin_amdgcn_rcp_legacy
-      {Intrinsic::amdgcn_readfirstlane, 1338}, // __builtin_amdgcn_readfirstlane
-      {Intrinsic::amdgcn_readlane, 1369}, // __builtin_amdgcn_readlane
-      {Intrinsic::amdgcn_rsq_legacy, 1395}, // __builtin_amdgcn_rsq_legacy
-      {Intrinsic::amdgcn_s_barrier, 1423}, // __builtin_amdgcn_s_barrier
-      {Intrinsic::amdgcn_s_dcache_inv, 1450}, // __builtin_amdgcn_s_dcache_inv
-      {Intrinsic::amdgcn_s_dcache_inv_vol, 1480}, // __builtin_amdgcn_s_dcache_inv_vol
-      {Intrinsic::amdgcn_s_dcache_wb, 1514}, // __builtin_amdgcn_s_dcache_wb
-      {Intrinsic::amdgcn_s_dcache_wb_vol, 1543}, // __builtin_amdgcn_s_dcache_wb_vol
-      {Intrinsic::amdgcn_s_decperflevel, 1576}, // __builtin_amdgcn_s_decperflevel
-      {Intrinsic::amdgcn_s_getpc, 1608}, // __builtin_amdgcn_s_getpc
-      {Intrinsic::amdgcn_s_getreg, 1633}, // __builtin_amdgcn_s_getreg
-      {Intrinsic::amdgcn_s_incperflevel, 1659}, // __builtin_amdgcn_s_incperflevel
-      {Intrinsic::amdgcn_s_memrealtime, 1691}, // __builtin_amdgcn_s_memrealtime
-      {Intrinsic::amdgcn_s_memtime, 1722}, // __builtin_amdgcn_s_memtime
-      {Intrinsic::amdgcn_s_sendmsg, 1749}, // __builtin_amdgcn_s_sendmsg
-      {Intrinsic::amdgcn_s_sendmsghalt, 1776}, // __builtin_amdgcn_s_sendmsghalt
-      {Intrinsic::amdgcn_s_sleep, 1807}, // __builtin_amdgcn_s_sleep
-      {Intrinsic::amdgcn_s_waitcnt, 1832}, // __builtin_amdgcn_s_waitcnt
-      {Intrinsic::amdgcn_sad_hi_u8, 1859}, // __builtin_amdgcn_sad_hi_u8
-      {Intrinsic::amdgcn_sad_u16, 1886}, // __builtin_amdgcn_sad_u16
-      {Intrinsic::amdgcn_sad_u8, 1911}, // __builtin_amdgcn_sad_u8
-      {Intrinsic::amdgcn_sdot2, 1935}, // __builtin_amdgcn_sdot2
-      {Intrinsic::amdgcn_sdot4, 1958}, // __builtin_amdgcn_sdot4
-      {Intrinsic::amdgcn_sdot8, 1981}, // __builtin_amdgcn_sdot8
-      {Intrinsic::amdgcn_udot2, 2004}, // __builtin_amdgcn_udot2
-      {Intrinsic::amdgcn_udot4, 2027}, // __builtin_amdgcn_udot4
-      {Intrinsic::amdgcn_udot8, 2050}, // __builtin_amdgcn_udot8
-      {Intrinsic::amdgcn_wave_barrier, 2073}, // __builtin_amdgcn_wave_barrier
-      {Intrinsic::amdgcn_workgroup_id_x, 2103}, // __builtin_amdgcn_workgroup_id_x
-      {Intrinsic::amdgcn_workgroup_id_y, 2135}, // __builtin_amdgcn_workgroup_id_y
-      {Intrinsic::amdgcn_workgroup_id_z, 2167}, // __builtin_amdgcn_workgroup_id_z
-      {Intrinsic::amdgcn_writelane, 2199}, // __builtin_amdgcn_writelane
+      {Intrinsic::amdgcn_ds_gws_barrier, 674}, // __builtin_amdgcn_ds_gws_barrier
+      {Intrinsic::amdgcn_ds_gws_init, 706}, // __builtin_amdgcn_ds_gws_init
+      {Intrinsic::amdgcn_ds_gws_sema_br, 735}, // __builtin_amdgcn_ds_gws_sema_br
+      {Intrinsic::amdgcn_ds_gws_sema_p, 767}, // __builtin_amdgcn_ds_gws_sema_p
+      {Intrinsic::amdgcn_ds_gws_sema_release_all, 798}, // __builtin_amdgcn_ds_gws_sema_release_all
+      {Intrinsic::amdgcn_ds_gws_sema_v, 839}, // __builtin_amdgcn_ds_gws_sema_v
+      {Intrinsic::amdgcn_ds_permute, 870}, // __builtin_amdgcn_ds_permute
+      {Intrinsic::amdgcn_ds_swizzle, 898}, // __builtin_amdgcn_ds_swizzle
+      {Intrinsic::amdgcn_fdot2, 926}, // __builtin_amdgcn_fdot2
+      {Intrinsic::amdgcn_fmed3, 949}, // __builtin_amdgcn_fmed3
+      {Intrinsic::amdgcn_fmul_legacy, 972}, // __builtin_amdgcn_fmul_legacy
+      {Intrinsic::amdgcn_groupstaticsize, 1001}, // __builtin_amdgcn_groupstaticsize
+      {Intrinsic::amdgcn_implicit_buffer_ptr, 1034}, // __builtin_amdgcn_implicit_buffer_ptr
+      {Intrinsic::amdgcn_implicitarg_ptr, 1071}, // __builtin_amdgcn_implicitarg_ptr
+      {Intrinsic::amdgcn_interp_mov, 1104}, // __builtin_amdgcn_interp_mov
+      {Intrinsic::amdgcn_interp_p1, 1132}, // __builtin_amdgcn_interp_p1
+      {Intrinsic::amdgcn_interp_p1_f16, 1159}, // __builtin_amdgcn_interp_p1_f16
+      {Intrinsic::amdgcn_interp_p2, 1190}, // __builtin_amdgcn_interp_p2
+      {Intrinsic::amdgcn_interp_p2_f16, 1217}, // __builtin_amdgcn_interp_p2_f16
+      {Intrinsic::amdgcn_kernarg_segment_ptr, 1248}, // __builtin_amdgcn_kernarg_segment_ptr
+      {Intrinsic::amdgcn_lerp, 1285}, // __builtin_amdgcn_lerp
+      {Intrinsic::amdgcn_mbcnt_hi, 1307}, // __builtin_amdgcn_mbcnt_hi
+      {Intrinsic::amdgcn_mbcnt_lo, 1333}, // __builtin_amdgcn_mbcnt_lo
+      {Intrinsic::amdgcn_mqsad_pk_u16_u8, 1359}, // __builtin_amdgcn_mqsad_pk_u16_u8
+      {Intrinsic::amdgcn_mqsad_u32_u8, 1392}, // __builtin_amdgcn_mqsad_u32_u8
+      {Intrinsic::amdgcn_msad_u8, 1422}, // __builtin_amdgcn_msad_u8
+      {Intrinsic::amdgcn_qsad_pk_u16_u8, 1447}, // __builtin_amdgcn_qsad_pk_u16_u8
+      {Intrinsic::amdgcn_queue_ptr, 1479}, // __builtin_amdgcn_queue_ptr
+      {Intrinsic::amdgcn_rcp_legacy, 1506}, // __builtin_amdgcn_rcp_legacy
+      {Intrinsic::amdgcn_readfirstlane, 1534}, // __builtin_amdgcn_readfirstlane
+      {Intrinsic::amdgcn_readlane, 1565}, // __builtin_amdgcn_readlane
+      {Intrinsic::amdgcn_rsq_legacy, 1591}, // __builtin_amdgcn_rsq_legacy
+      {Intrinsic::amdgcn_s_barrier, 1619}, // __builtin_amdgcn_s_barrier
+      {Intrinsic::amdgcn_s_dcache_inv, 1646}, // __builtin_amdgcn_s_dcache_inv
+      {Intrinsic::amdgcn_s_dcache_inv_vol, 1676}, // __builtin_amdgcn_s_dcache_inv_vol
+      {Intrinsic::amdgcn_s_dcache_wb, 1710}, // __builtin_amdgcn_s_dcache_wb
+      {Intrinsic::amdgcn_s_dcache_wb_vol, 1739}, // __builtin_amdgcn_s_dcache_wb_vol
+      {Intrinsic::amdgcn_s_decperflevel, 1772}, // __builtin_amdgcn_s_decperflevel
+      {Intrinsic::amdgcn_s_get_waveid_in_workgroup, 1804}, // __builtin_amdgcn_s_get_waveid_in_workgroup
+      {Intrinsic::amdgcn_s_getpc, 1847}, // __builtin_amdgcn_s_getpc
+      {Intrinsic::amdgcn_s_getreg, 1872}, // __builtin_amdgcn_s_getreg
+      {Intrinsic::amdgcn_s_incperflevel, 1898}, // __builtin_amdgcn_s_incperflevel
+      {Intrinsic::amdgcn_s_memrealtime, 1930}, // __builtin_amdgcn_s_memrealtime
+      {Intrinsic::amdgcn_s_memtime, 1961}, // __builtin_amdgcn_s_memtime
+      {Intrinsic::amdgcn_s_sendmsg, 1988}, // __builtin_amdgcn_s_sendmsg
+      {Intrinsic::amdgcn_s_sendmsghalt, 2015}, // __builtin_amdgcn_s_sendmsghalt
+      {Intrinsic::amdgcn_s_sleep, 2046}, // __builtin_amdgcn_s_sleep
+      {Intrinsic::amdgcn_s_waitcnt, 2071}, // __builtin_amdgcn_s_waitcnt
+      {Intrinsic::amdgcn_sad_hi_u8, 2098}, // __builtin_amdgcn_sad_hi_u8
+      {Intrinsic::amdgcn_sad_u16, 2125}, // __builtin_amdgcn_sad_u16
+      {Intrinsic::amdgcn_sad_u8, 2150}, // __builtin_amdgcn_sad_u8
+      {Intrinsic::amdgcn_sdot2, 2174}, // __builtin_amdgcn_sdot2
+      {Intrinsic::amdgcn_sdot4, 2197}, // __builtin_amdgcn_sdot4
+      {Intrinsic::amdgcn_sdot8, 2220}, // __builtin_amdgcn_sdot8
+      {Intrinsic::amdgcn_udot2, 2243}, // __builtin_amdgcn_udot2
+      {Intrinsic::amdgcn_udot4, 2266}, // __builtin_amdgcn_udot4
+      {Intrinsic::amdgcn_udot8, 2289}, // __builtin_amdgcn_udot8
+      {Intrinsic::amdgcn_wave_barrier, 2312}, // __builtin_amdgcn_wave_barrier
+      {Intrinsic::amdgcn_wavefrontsize, 2342}, // __builtin_amdgcn_wavefrontsize
+      {Intrinsic::amdgcn_workgroup_id_x, 2373}, // __builtin_amdgcn_workgroup_id_x
+      {Intrinsic::amdgcn_workgroup_id_y, 2405}, // __builtin_amdgcn_workgroup_id_y
+      {Intrinsic::amdgcn_workgroup_id_z, 2437}, // __builtin_amdgcn_workgroup_id_z
+      {Intrinsic::amdgcn_writelane, 2469}, // __builtin_amdgcn_writelane
     };
     auto I = std::lower_bound(std::begin(amdgcnNames),
                               std::end(amdgcnNames),
@@ -24839,98 +26565,102 @@
   }
   if (TargetPrefix == "arm") {
     static const BuiltinEntry armNames[] = {
-      {Intrinsic::arm_cdp, 2226}, // __builtin_arm_cdp
-      {Intrinsic::arm_cdp2, 2244}, // __builtin_arm_cdp2
+      {Intrinsic::arm_cdp, 2496}, // __builtin_arm_cdp
+      {Intrinsic::arm_cdp2, 2514}, // __builtin_arm_cdp2
+      {Intrinsic::arm_cmse_tt, 2533}, // __builtin_arm_cmse_TT
+      {Intrinsic::arm_cmse_tta, 2555}, // __builtin_arm_cmse_TTA
+      {Intrinsic::arm_cmse_ttat, 2578}, // __builtin_arm_cmse_TTAT
+      {Intrinsic::arm_cmse_ttt, 2602}, // __builtin_arm_cmse_TTT
       {Intrinsic::arm_dmb, 224}, // __builtin_arm_dmb
       {Intrinsic::arm_dsb, 242}, // __builtin_arm_dsb
-      {Intrinsic::arm_get_fpscr, 2263}, // __builtin_arm_get_fpscr
+      {Intrinsic::arm_get_fpscr, 2625}, // __builtin_arm_get_fpscr
       {Intrinsic::arm_isb, 260}, // __builtin_arm_isb
-      {Intrinsic::arm_ldc, 2287}, // __builtin_arm_ldc
-      {Intrinsic::arm_ldc2, 2305}, // __builtin_arm_ldc2
-      {Intrinsic::arm_ldc2l, 2324}, // __builtin_arm_ldc2l
-      {Intrinsic::arm_ldcl, 2344}, // __builtin_arm_ldcl
-      {Intrinsic::arm_mcr, 2363}, // __builtin_arm_mcr
-      {Intrinsic::arm_mcr2, 2381}, // __builtin_arm_mcr2
-      {Intrinsic::arm_mrc, 2400}, // __builtin_arm_mrc
-      {Intrinsic::arm_mrc2, 2418}, // __builtin_arm_mrc2
-      {Intrinsic::arm_qadd, 2437}, // __builtin_arm_qadd
-      {Intrinsic::arm_qadd16, 2456}, // __builtin_arm_qadd16
-      {Intrinsic::arm_qadd8, 2477}, // __builtin_arm_qadd8
-      {Intrinsic::arm_qasx, 2497}, // __builtin_arm_qasx
-      {Intrinsic::arm_qsax, 2516}, // __builtin_arm_qsax
-      {Intrinsic::arm_qsub, 2535}, // __builtin_arm_qsub
-      {Intrinsic::arm_qsub16, 2554}, // __builtin_arm_qsub16
-      {Intrinsic::arm_qsub8, 2575}, // __builtin_arm_qsub8
-      {Intrinsic::arm_sadd16, 2595}, // __builtin_arm_sadd16
-      {Intrinsic::arm_sadd8, 2616}, // __builtin_arm_sadd8
-      {Intrinsic::arm_sasx, 2636}, // __builtin_arm_sasx
-      {Intrinsic::arm_sel, 2655}, // __builtin_arm_sel
-      {Intrinsic::arm_set_fpscr, 2673}, // __builtin_arm_set_fpscr
-      {Intrinsic::arm_shadd16, 2697}, // __builtin_arm_shadd16
-      {Intrinsic::arm_shadd8, 2719}, // __builtin_arm_shadd8
-      {Intrinsic::arm_shasx, 2740}, // __builtin_arm_shasx
-      {Intrinsic::arm_shsax, 2760}, // __builtin_arm_shsax
-      {Intrinsic::arm_shsub16, 2780}, // __builtin_arm_shsub16
-      {Intrinsic::arm_shsub8, 2802}, // __builtin_arm_shsub8
-      {Intrinsic::arm_smlabb, 2823}, // __builtin_arm_smlabb
-      {Intrinsic::arm_smlabt, 2844}, // __builtin_arm_smlabt
-      {Intrinsic::arm_smlad, 2865}, // __builtin_arm_smlad
-      {Intrinsic::arm_smladx, 2885}, // __builtin_arm_smladx
-      {Intrinsic::arm_smlald, 2906}, // __builtin_arm_smlald
-      {Intrinsic::arm_smlaldx, 2927}, // __builtin_arm_smlaldx
-      {Intrinsic::arm_smlatb, 2949}, // __builtin_arm_smlatb
-      {Intrinsic::arm_smlatt, 2970}, // __builtin_arm_smlatt
-      {Intrinsic::arm_smlawb, 2991}, // __builtin_arm_smlawb
-      {Intrinsic::arm_smlawt, 3012}, // __builtin_arm_smlawt
-      {Intrinsic::arm_smlsd, 3033}, // __builtin_arm_smlsd
-      {Intrinsic::arm_smlsdx, 3053}, // __builtin_arm_smlsdx
-      {Intrinsic::arm_smlsld, 3074}, // __builtin_arm_smlsld
-      {Intrinsic::arm_smlsldx, 3095}, // __builtin_arm_smlsldx
-      {Intrinsic::arm_smuad, 3117}, // __builtin_arm_smuad
-      {Intrinsic::arm_smuadx, 3137}, // __builtin_arm_smuadx
-      {Intrinsic::arm_smulbb, 3158}, // __builtin_arm_smulbb
-      {Intrinsic::arm_smulbt, 3179}, // __builtin_arm_smulbt
-      {Intrinsic::arm_smultb, 3200}, // __builtin_arm_smultb
-      {Intrinsic::arm_smultt, 3221}, // __builtin_arm_smultt
-      {Intrinsic::arm_smulwb, 3242}, // __builtin_arm_smulwb
-      {Intrinsic::arm_smulwt, 3263}, // __builtin_arm_smulwt
-      {Intrinsic::arm_smusd, 3284}, // __builtin_arm_smusd
-      {Intrinsic::arm_smusdx, 3304}, // __builtin_arm_smusdx
-      {Intrinsic::arm_ssat, 3325}, // __builtin_arm_ssat
-      {Intrinsic::arm_ssat16, 3344}, // __builtin_arm_ssat16
-      {Intrinsic::arm_ssax, 3365}, // __builtin_arm_ssax
-      {Intrinsic::arm_ssub16, 3384}, // __builtin_arm_ssub16
-      {Intrinsic::arm_ssub8, 3405}, // __builtin_arm_ssub8
-      {Intrinsic::arm_stc, 3425}, // __builtin_arm_stc
-      {Intrinsic::arm_stc2, 3443}, // __builtin_arm_stc2
-      {Intrinsic::arm_stc2l, 3462}, // __builtin_arm_stc2l
-      {Intrinsic::arm_stcl, 3482}, // __builtin_arm_stcl
-      {Intrinsic::arm_sxtab16, 3501}, // __builtin_arm_sxtab16
-      {Intrinsic::arm_sxtb16, 3523}, // __builtin_arm_sxtb16
-      {Intrinsic::arm_uadd16, 3544}, // __builtin_arm_uadd16
-      {Intrinsic::arm_uadd8, 3565}, // __builtin_arm_uadd8
-      {Intrinsic::arm_uasx, 3585}, // __builtin_arm_uasx
-      {Intrinsic::arm_uhadd16, 3604}, // __builtin_arm_uhadd16
-      {Intrinsic::arm_uhadd8, 3626}, // __builtin_arm_uhadd8
-      {Intrinsic::arm_uhasx, 3647}, // __builtin_arm_uhasx
-      {Intrinsic::arm_uhsax, 3667}, // __builtin_arm_uhsax
-      {Intrinsic::arm_uhsub16, 3687}, // __builtin_arm_uhsub16
-      {Intrinsic::arm_uhsub8, 3709}, // __builtin_arm_uhsub8
-      {Intrinsic::arm_uqadd16, 3730}, // __builtin_arm_uqadd16
-      {Intrinsic::arm_uqadd8, 3752}, // __builtin_arm_uqadd8
-      {Intrinsic::arm_uqasx, 3773}, // __builtin_arm_uqasx
-      {Intrinsic::arm_uqsax, 3793}, // __builtin_arm_uqsax
-      {Intrinsic::arm_uqsub16, 3813}, // __builtin_arm_uqsub16
-      {Intrinsic::arm_uqsub8, 3835}, // __builtin_arm_uqsub8
-      {Intrinsic::arm_usad8, 3856}, // __builtin_arm_usad8
-      {Intrinsic::arm_usada8, 3876}, // __builtin_arm_usada8
-      {Intrinsic::arm_usat, 3897}, // __builtin_arm_usat
-      {Intrinsic::arm_usat16, 3916}, // __builtin_arm_usat16
-      {Intrinsic::arm_usax, 3937}, // __builtin_arm_usax
-      {Intrinsic::arm_usub16, 3956}, // __builtin_arm_usub16
-      {Intrinsic::arm_usub8, 3977}, // __builtin_arm_usub8
-      {Intrinsic::arm_uxtab16, 3997}, // __builtin_arm_uxtab16
-      {Intrinsic::arm_uxtb16, 4019}, // __builtin_arm_uxtb16
+      {Intrinsic::arm_ldc, 2649}, // __builtin_arm_ldc
+      {Intrinsic::arm_ldc2, 2667}, // __builtin_arm_ldc2
+      {Intrinsic::arm_ldc2l, 2686}, // __builtin_arm_ldc2l
+      {Intrinsic::arm_ldcl, 2706}, // __builtin_arm_ldcl
+      {Intrinsic::arm_mcr, 2725}, // __builtin_arm_mcr
+      {Intrinsic::arm_mcr2, 2743}, // __builtin_arm_mcr2
+      {Intrinsic::arm_mrc, 2762}, // __builtin_arm_mrc
+      {Intrinsic::arm_mrc2, 2780}, // __builtin_arm_mrc2
+      {Intrinsic::arm_qadd, 2799}, // __builtin_arm_qadd
+      {Intrinsic::arm_qadd16, 2818}, // __builtin_arm_qadd16
+      {Intrinsic::arm_qadd8, 2839}, // __builtin_arm_qadd8
+      {Intrinsic::arm_qasx, 2859}, // __builtin_arm_qasx
+      {Intrinsic::arm_qsax, 2878}, // __builtin_arm_qsax
+      {Intrinsic::arm_qsub, 2897}, // __builtin_arm_qsub
+      {Intrinsic::arm_qsub16, 2916}, // __builtin_arm_qsub16
+      {Intrinsic::arm_qsub8, 2937}, // __builtin_arm_qsub8
+      {Intrinsic::arm_sadd16, 2957}, // __builtin_arm_sadd16
+      {Intrinsic::arm_sadd8, 2978}, // __builtin_arm_sadd8
+      {Intrinsic::arm_sasx, 2998}, // __builtin_arm_sasx
+      {Intrinsic::arm_sel, 3017}, // __builtin_arm_sel
+      {Intrinsic::arm_set_fpscr, 3035}, // __builtin_arm_set_fpscr
+      {Intrinsic::arm_shadd16, 3059}, // __builtin_arm_shadd16
+      {Intrinsic::arm_shadd8, 3081}, // __builtin_arm_shadd8
+      {Intrinsic::arm_shasx, 3102}, // __builtin_arm_shasx
+      {Intrinsic::arm_shsax, 3122}, // __builtin_arm_shsax
+      {Intrinsic::arm_shsub16, 3142}, // __builtin_arm_shsub16
+      {Intrinsic::arm_shsub8, 3164}, // __builtin_arm_shsub8
+      {Intrinsic::arm_smlabb, 3185}, // __builtin_arm_smlabb
+      {Intrinsic::arm_smlabt, 3206}, // __builtin_arm_smlabt
+      {Intrinsic::arm_smlad, 3227}, // __builtin_arm_smlad
+      {Intrinsic::arm_smladx, 3247}, // __builtin_arm_smladx
+      {Intrinsic::arm_smlald, 3268}, // __builtin_arm_smlald
+      {Intrinsic::arm_smlaldx, 3289}, // __builtin_arm_smlaldx
+      {Intrinsic::arm_smlatb, 3311}, // __builtin_arm_smlatb
+      {Intrinsic::arm_smlatt, 3332}, // __builtin_arm_smlatt
+      {Intrinsic::arm_smlawb, 3353}, // __builtin_arm_smlawb
+      {Intrinsic::arm_smlawt, 3374}, // __builtin_arm_smlawt
+      {Intrinsic::arm_smlsd, 3395}, // __builtin_arm_smlsd
+      {Intrinsic::arm_smlsdx, 3415}, // __builtin_arm_smlsdx
+      {Intrinsic::arm_smlsld, 3436}, // __builtin_arm_smlsld
+      {Intrinsic::arm_smlsldx, 3457}, // __builtin_arm_smlsldx
+      {Intrinsic::arm_smuad, 3479}, // __builtin_arm_smuad
+      {Intrinsic::arm_smuadx, 3499}, // __builtin_arm_smuadx
+      {Intrinsic::arm_smulbb, 3520}, // __builtin_arm_smulbb
+      {Intrinsic::arm_smulbt, 3541}, // __builtin_arm_smulbt
+      {Intrinsic::arm_smultb, 3562}, // __builtin_arm_smultb
+      {Intrinsic::arm_smultt, 3583}, // __builtin_arm_smultt
+      {Intrinsic::arm_smulwb, 3604}, // __builtin_arm_smulwb
+      {Intrinsic::arm_smulwt, 3625}, // __builtin_arm_smulwt
+      {Intrinsic::arm_smusd, 3646}, // __builtin_arm_smusd
+      {Intrinsic::arm_smusdx, 3666}, // __builtin_arm_smusdx
+      {Intrinsic::arm_ssat, 3687}, // __builtin_arm_ssat
+      {Intrinsic::arm_ssat16, 3706}, // __builtin_arm_ssat16
+      {Intrinsic::arm_ssax, 3727}, // __builtin_arm_ssax
+      {Intrinsic::arm_ssub16, 3746}, // __builtin_arm_ssub16
+      {Intrinsic::arm_ssub8, 3767}, // __builtin_arm_ssub8
+      {Intrinsic::arm_stc, 3787}, // __builtin_arm_stc
+      {Intrinsic::arm_stc2, 3805}, // __builtin_arm_stc2
+      {Intrinsic::arm_stc2l, 3824}, // __builtin_arm_stc2l
+      {Intrinsic::arm_stcl, 3844}, // __builtin_arm_stcl
+      {Intrinsic::arm_sxtab16, 3863}, // __builtin_arm_sxtab16
+      {Intrinsic::arm_sxtb16, 3885}, // __builtin_arm_sxtb16
+      {Intrinsic::arm_uadd16, 3906}, // __builtin_arm_uadd16
+      {Intrinsic::arm_uadd8, 3927}, // __builtin_arm_uadd8
+      {Intrinsic::arm_uasx, 3947}, // __builtin_arm_uasx
+      {Intrinsic::arm_uhadd16, 3966}, // __builtin_arm_uhadd16
+      {Intrinsic::arm_uhadd8, 3988}, // __builtin_arm_uhadd8
+      {Intrinsic::arm_uhasx, 4009}, // __builtin_arm_uhasx
+      {Intrinsic::arm_uhsax, 4029}, // __builtin_arm_uhsax
+      {Intrinsic::arm_uhsub16, 4049}, // __builtin_arm_uhsub16
+      {Intrinsic::arm_uhsub8, 4071}, // __builtin_arm_uhsub8
+      {Intrinsic::arm_uqadd16, 4092}, // __builtin_arm_uqadd16
+      {Intrinsic::arm_uqadd8, 4114}, // __builtin_arm_uqadd8
+      {Intrinsic::arm_uqasx, 4135}, // __builtin_arm_uqasx
+      {Intrinsic::arm_uqsax, 4155}, // __builtin_arm_uqsax
+      {Intrinsic::arm_uqsub16, 4175}, // __builtin_arm_uqsub16
+      {Intrinsic::arm_uqsub8, 4197}, // __builtin_arm_uqsub8
+      {Intrinsic::arm_usad8, 4218}, // __builtin_arm_usad8
+      {Intrinsic::arm_usada8, 4238}, // __builtin_arm_usada8
+      {Intrinsic::arm_usat, 4259}, // __builtin_arm_usat
+      {Intrinsic::arm_usat16, 4278}, // __builtin_arm_usat16
+      {Intrinsic::arm_usax, 4299}, // __builtin_arm_usax
+      {Intrinsic::arm_usub16, 4318}, // __builtin_arm_usub16
+      {Intrinsic::arm_usub8, 4339}, // __builtin_arm_usub8
+      {Intrinsic::arm_uxtab16, 4359}, // __builtin_arm_uxtab16
+      {Intrinsic::arm_uxtb16, 4381}, // __builtin_arm_uxtb16
     };
     auto I = std::lower_bound(std::begin(armNames),
                               std::end(armNames),
@@ -24941,10 +26671,10 @@
   }
   if (TargetPrefix == "bpf") {
     static const BuiltinEntry bpfNames[] = {
-      {Intrinsic::bpf_load_byte, 4040}, // __builtin_bpf_load_byte
-      {Intrinsic::bpf_load_half, 4064}, // __builtin_bpf_load_half
-      {Intrinsic::bpf_load_word, 4088}, // __builtin_bpf_load_word
-      {Intrinsic::bpf_pseudo, 4112}, // __builtin_bpf_pseudo
+      {Intrinsic::bpf_load_byte, 4402}, // __builtin_bpf_load_byte
+      {Intrinsic::bpf_load_half, 4426}, // __builtin_bpf_load_half
+      {Intrinsic::bpf_load_word, 4450}, // __builtin_bpf_load_word
+      {Intrinsic::bpf_pseudo, 4474}, // __builtin_bpf_pseudo
     };
     auto I = std::lower_bound(std::begin(bpfNames),
                               std::end(bpfNames),
@@ -24955,1740 +26685,1740 @@
   }
   if (TargetPrefix == "hexagon") {
     static const BuiltinEntry hexagonNames[] = {
-      {Intrinsic::hexagon_A2_abs, 4133}, // __builtin_HEXAGON_A2_abs
-      {Intrinsic::hexagon_A2_absp, 4158}, // __builtin_HEXAGON_A2_absp
-      {Intrinsic::hexagon_A2_abssat, 4184}, // __builtin_HEXAGON_A2_abssat
-      {Intrinsic::hexagon_A2_add, 4212}, // __builtin_HEXAGON_A2_add
-      {Intrinsic::hexagon_A2_addh_h16_hh, 4237}, // __builtin_HEXAGON_A2_addh_h16_hh
-      {Intrinsic::hexagon_A2_addh_h16_hl, 4270}, // __builtin_HEXAGON_A2_addh_h16_hl
-      {Intrinsic::hexagon_A2_addh_h16_lh, 4303}, // __builtin_HEXAGON_A2_addh_h16_lh
-      {Intrinsic::hexagon_A2_addh_h16_ll, 4336}, // __builtin_HEXAGON_A2_addh_h16_ll
-      {Intrinsic::hexagon_A2_addh_h16_sat_hh, 4369}, // __builtin_HEXAGON_A2_addh_h16_sat_hh
-      {Intrinsic::hexagon_A2_addh_h16_sat_hl, 4406}, // __builtin_HEXAGON_A2_addh_h16_sat_hl
-      {Intrinsic::hexagon_A2_addh_h16_sat_lh, 4443}, // __builtin_HEXAGON_A2_addh_h16_sat_lh
-      {Intrinsic::hexagon_A2_addh_h16_sat_ll, 4480}, // __builtin_HEXAGON_A2_addh_h16_sat_ll
-      {Intrinsic::hexagon_A2_addh_l16_hl, 4517}, // __builtin_HEXAGON_A2_addh_l16_hl
-      {Intrinsic::hexagon_A2_addh_l16_ll, 4550}, // __builtin_HEXAGON_A2_addh_l16_ll
-      {Intrinsic::hexagon_A2_addh_l16_sat_hl, 4583}, // __builtin_HEXAGON_A2_addh_l16_sat_hl
-      {Intrinsic::hexagon_A2_addh_l16_sat_ll, 4620}, // __builtin_HEXAGON_A2_addh_l16_sat_ll
-      {Intrinsic::hexagon_A2_addi, 4657}, // __builtin_HEXAGON_A2_addi
-      {Intrinsic::hexagon_A2_addp, 4683}, // __builtin_HEXAGON_A2_addp
-      {Intrinsic::hexagon_A2_addpsat, 4709}, // __builtin_HEXAGON_A2_addpsat
-      {Intrinsic::hexagon_A2_addsat, 4738}, // __builtin_HEXAGON_A2_addsat
-      {Intrinsic::hexagon_A2_addsp, 4766}, // __builtin_HEXAGON_A2_addsp
-      {Intrinsic::hexagon_A2_and, 4793}, // __builtin_HEXAGON_A2_and
-      {Intrinsic::hexagon_A2_andir, 4818}, // __builtin_HEXAGON_A2_andir
-      {Intrinsic::hexagon_A2_andp, 4845}, // __builtin_HEXAGON_A2_andp
-      {Intrinsic::hexagon_A2_aslh, 4871}, // __builtin_HEXAGON_A2_aslh
-      {Intrinsic::hexagon_A2_asrh, 4897}, // __builtin_HEXAGON_A2_asrh
-      {Intrinsic::hexagon_A2_combine_hh, 4923}, // __builtin_HEXAGON_A2_combine_hh
-      {Intrinsic::hexagon_A2_combine_hl, 4955}, // __builtin_HEXAGON_A2_combine_hl
-      {Intrinsic::hexagon_A2_combine_lh, 4987}, // __builtin_HEXAGON_A2_combine_lh
-      {Intrinsic::hexagon_A2_combine_ll, 5019}, // __builtin_HEXAGON_A2_combine_ll
-      {Intrinsic::hexagon_A2_combineii, 5051}, // __builtin_HEXAGON_A2_combineii
-      {Intrinsic::hexagon_A2_combinew, 5082}, // __builtin_HEXAGON_A2_combinew
-      {Intrinsic::hexagon_A2_max, 5112}, // __builtin_HEXAGON_A2_max
-      {Intrinsic::hexagon_A2_maxp, 5137}, // __builtin_HEXAGON_A2_maxp
-      {Intrinsic::hexagon_A2_maxu, 5163}, // __builtin_HEXAGON_A2_maxu
-      {Intrinsic::hexagon_A2_maxup, 5189}, // __builtin_HEXAGON_A2_maxup
-      {Intrinsic::hexagon_A2_min, 5216}, // __builtin_HEXAGON_A2_min
-      {Intrinsic::hexagon_A2_minp, 5241}, // __builtin_HEXAGON_A2_minp
-      {Intrinsic::hexagon_A2_minu, 5267}, // __builtin_HEXAGON_A2_minu
-      {Intrinsic::hexagon_A2_minup, 5293}, // __builtin_HEXAGON_A2_minup
-      {Intrinsic::hexagon_A2_neg, 5320}, // __builtin_HEXAGON_A2_neg
-      {Intrinsic::hexagon_A2_negp, 5345}, // __builtin_HEXAGON_A2_negp
-      {Intrinsic::hexagon_A2_negsat, 5371}, // __builtin_HEXAGON_A2_negsat
-      {Intrinsic::hexagon_A2_not, 5399}, // __builtin_HEXAGON_A2_not
-      {Intrinsic::hexagon_A2_notp, 5424}, // __builtin_HEXAGON_A2_notp
-      {Intrinsic::hexagon_A2_or, 5450}, // __builtin_HEXAGON_A2_or
-      {Intrinsic::hexagon_A2_orir, 5474}, // __builtin_HEXAGON_A2_orir
-      {Intrinsic::hexagon_A2_orp, 5500}, // __builtin_HEXAGON_A2_orp
-      {Intrinsic::hexagon_A2_pxorf, 5525}, // __builtin_HEXAGON_A2_pxorf
-      {Intrinsic::hexagon_A2_roundsat, 5552}, // __builtin_HEXAGON_A2_roundsat
-      {Intrinsic::hexagon_A2_sat, 5582}, // __builtin_HEXAGON_A2_sat
-      {Intrinsic::hexagon_A2_satb, 5607}, // __builtin_HEXAGON_A2_satb
-      {Intrinsic::hexagon_A2_sath, 5633}, // __builtin_HEXAGON_A2_sath
-      {Intrinsic::hexagon_A2_satub, 5659}, // __builtin_HEXAGON_A2_satub
-      {Intrinsic::hexagon_A2_satuh, 5686}, // __builtin_HEXAGON_A2_satuh
-      {Intrinsic::hexagon_A2_sub, 5713}, // __builtin_HEXAGON_A2_sub
-      {Intrinsic::hexagon_A2_subh_h16_hh, 5738}, // __builtin_HEXAGON_A2_subh_h16_hh
-      {Intrinsic::hexagon_A2_subh_h16_hl, 5771}, // __builtin_HEXAGON_A2_subh_h16_hl
-      {Intrinsic::hexagon_A2_subh_h16_lh, 5804}, // __builtin_HEXAGON_A2_subh_h16_lh
-      {Intrinsic::hexagon_A2_subh_h16_ll, 5837}, // __builtin_HEXAGON_A2_subh_h16_ll
-      {Intrinsic::hexagon_A2_subh_h16_sat_hh, 5870}, // __builtin_HEXAGON_A2_subh_h16_sat_hh
-      {Intrinsic::hexagon_A2_subh_h16_sat_hl, 5907}, // __builtin_HEXAGON_A2_subh_h16_sat_hl
-      {Intrinsic::hexagon_A2_subh_h16_sat_lh, 5944}, // __builtin_HEXAGON_A2_subh_h16_sat_lh
-      {Intrinsic::hexagon_A2_subh_h16_sat_ll, 5981}, // __builtin_HEXAGON_A2_subh_h16_sat_ll
-      {Intrinsic::hexagon_A2_subh_l16_hl, 6018}, // __builtin_HEXAGON_A2_subh_l16_hl
-      {Intrinsic::hexagon_A2_subh_l16_ll, 6051}, // __builtin_HEXAGON_A2_subh_l16_ll
-      {Intrinsic::hexagon_A2_subh_l16_sat_hl, 6084}, // __builtin_HEXAGON_A2_subh_l16_sat_hl
-      {Intrinsic::hexagon_A2_subh_l16_sat_ll, 6121}, // __builtin_HEXAGON_A2_subh_l16_sat_ll
-      {Intrinsic::hexagon_A2_subp, 6158}, // __builtin_HEXAGON_A2_subp
-      {Intrinsic::hexagon_A2_subri, 6184}, // __builtin_HEXAGON_A2_subri
-      {Intrinsic::hexagon_A2_subsat, 6211}, // __builtin_HEXAGON_A2_subsat
-      {Intrinsic::hexagon_A2_svaddh, 6239}, // __builtin_HEXAGON_A2_svaddh
-      {Intrinsic::hexagon_A2_svaddhs, 6267}, // __builtin_HEXAGON_A2_svaddhs
-      {Intrinsic::hexagon_A2_svadduhs, 6296}, // __builtin_HEXAGON_A2_svadduhs
-      {Intrinsic::hexagon_A2_svavgh, 6326}, // __builtin_HEXAGON_A2_svavgh
-      {Intrinsic::hexagon_A2_svavghs, 6354}, // __builtin_HEXAGON_A2_svavghs
-      {Intrinsic::hexagon_A2_svnavgh, 6383}, // __builtin_HEXAGON_A2_svnavgh
-      {Intrinsic::hexagon_A2_svsubh, 6412}, // __builtin_HEXAGON_A2_svsubh
-      {Intrinsic::hexagon_A2_svsubhs, 6440}, // __builtin_HEXAGON_A2_svsubhs
-      {Intrinsic::hexagon_A2_svsubuhs, 6469}, // __builtin_HEXAGON_A2_svsubuhs
-      {Intrinsic::hexagon_A2_swiz, 6499}, // __builtin_HEXAGON_A2_swiz
-      {Intrinsic::hexagon_A2_sxtb, 6525}, // __builtin_HEXAGON_A2_sxtb
-      {Intrinsic::hexagon_A2_sxth, 6551}, // __builtin_HEXAGON_A2_sxth
-      {Intrinsic::hexagon_A2_sxtw, 6577}, // __builtin_HEXAGON_A2_sxtw
-      {Intrinsic::hexagon_A2_tfr, 6603}, // __builtin_HEXAGON_A2_tfr
-      {Intrinsic::hexagon_A2_tfrcrr, 6628}, // __builtin_HEXAGON_A2_tfrcrr
-      {Intrinsic::hexagon_A2_tfrih, 6656}, // __builtin_HEXAGON_A2_tfrih
-      {Intrinsic::hexagon_A2_tfril, 6683}, // __builtin_HEXAGON_A2_tfril
-      {Intrinsic::hexagon_A2_tfrp, 6710}, // __builtin_HEXAGON_A2_tfrp
-      {Intrinsic::hexagon_A2_tfrpi, 6736}, // __builtin_HEXAGON_A2_tfrpi
-      {Intrinsic::hexagon_A2_tfrrcr, 6763}, // __builtin_HEXAGON_A2_tfrrcr
-      {Intrinsic::hexagon_A2_tfrsi, 6791}, // __builtin_HEXAGON_A2_tfrsi
-      {Intrinsic::hexagon_A2_vabsh, 6818}, // __builtin_HEXAGON_A2_vabsh
-      {Intrinsic::hexagon_A2_vabshsat, 6845}, // __builtin_HEXAGON_A2_vabshsat
-      {Intrinsic::hexagon_A2_vabsw, 6875}, // __builtin_HEXAGON_A2_vabsw
-      {Intrinsic::hexagon_A2_vabswsat, 6902}, // __builtin_HEXAGON_A2_vabswsat
-      {Intrinsic::hexagon_A2_vaddb_map, 6932}, // __builtin_HEXAGON_A2_vaddb_map
-      {Intrinsic::hexagon_A2_vaddh, 6963}, // __builtin_HEXAGON_A2_vaddh
-      {Intrinsic::hexagon_A2_vaddhs, 6990}, // __builtin_HEXAGON_A2_vaddhs
-      {Intrinsic::hexagon_A2_vaddub, 7018}, // __builtin_HEXAGON_A2_vaddub
-      {Intrinsic::hexagon_A2_vaddubs, 7046}, // __builtin_HEXAGON_A2_vaddubs
-      {Intrinsic::hexagon_A2_vadduhs, 7075}, // __builtin_HEXAGON_A2_vadduhs
-      {Intrinsic::hexagon_A2_vaddw, 7104}, // __builtin_HEXAGON_A2_vaddw
-      {Intrinsic::hexagon_A2_vaddws, 7131}, // __builtin_HEXAGON_A2_vaddws
-      {Intrinsic::hexagon_A2_vavgh, 7159}, // __builtin_HEXAGON_A2_vavgh
-      {Intrinsic::hexagon_A2_vavghcr, 7186}, // __builtin_HEXAGON_A2_vavghcr
-      {Intrinsic::hexagon_A2_vavghr, 7215}, // __builtin_HEXAGON_A2_vavghr
-      {Intrinsic::hexagon_A2_vavgub, 7243}, // __builtin_HEXAGON_A2_vavgub
-      {Intrinsic::hexagon_A2_vavgubr, 7271}, // __builtin_HEXAGON_A2_vavgubr
-      {Intrinsic::hexagon_A2_vavguh, 7300}, // __builtin_HEXAGON_A2_vavguh
-      {Intrinsic::hexagon_A2_vavguhr, 7328}, // __builtin_HEXAGON_A2_vavguhr
-      {Intrinsic::hexagon_A2_vavguw, 7357}, // __builtin_HEXAGON_A2_vavguw
-      {Intrinsic::hexagon_A2_vavguwr, 7385}, // __builtin_HEXAGON_A2_vavguwr
-      {Intrinsic::hexagon_A2_vavgw, 7414}, // __builtin_HEXAGON_A2_vavgw
-      {Intrinsic::hexagon_A2_vavgwcr, 7441}, // __builtin_HEXAGON_A2_vavgwcr
-      {Intrinsic::hexagon_A2_vavgwr, 7470}, // __builtin_HEXAGON_A2_vavgwr
-      {Intrinsic::hexagon_A2_vcmpbeq, 7498}, // __builtin_HEXAGON_A2_vcmpbeq
-      {Intrinsic::hexagon_A2_vcmpbgtu, 7527}, // __builtin_HEXAGON_A2_vcmpbgtu
-      {Intrinsic::hexagon_A2_vcmpheq, 7557}, // __builtin_HEXAGON_A2_vcmpheq
-      {Intrinsic::hexagon_A2_vcmphgt, 7586}, // __builtin_HEXAGON_A2_vcmphgt
-      {Intrinsic::hexagon_A2_vcmphgtu, 7615}, // __builtin_HEXAGON_A2_vcmphgtu
-      {Intrinsic::hexagon_A2_vcmpweq, 7645}, // __builtin_HEXAGON_A2_vcmpweq
-      {Intrinsic::hexagon_A2_vcmpwgt, 7674}, // __builtin_HEXAGON_A2_vcmpwgt
-      {Intrinsic::hexagon_A2_vcmpwgtu, 7703}, // __builtin_HEXAGON_A2_vcmpwgtu
-      {Intrinsic::hexagon_A2_vconj, 7733}, // __builtin_HEXAGON_A2_vconj
-      {Intrinsic::hexagon_A2_vmaxb, 7760}, // __builtin_HEXAGON_A2_vmaxb
-      {Intrinsic::hexagon_A2_vmaxh, 7787}, // __builtin_HEXAGON_A2_vmaxh
-      {Intrinsic::hexagon_A2_vmaxub, 7814}, // __builtin_HEXAGON_A2_vmaxub
-      {Intrinsic::hexagon_A2_vmaxuh, 7842}, // __builtin_HEXAGON_A2_vmaxuh
-      {Intrinsic::hexagon_A2_vmaxuw, 7870}, // __builtin_HEXAGON_A2_vmaxuw
-      {Intrinsic::hexagon_A2_vmaxw, 7898}, // __builtin_HEXAGON_A2_vmaxw
-      {Intrinsic::hexagon_A2_vminb, 7925}, // __builtin_HEXAGON_A2_vminb
-      {Intrinsic::hexagon_A2_vminh, 7952}, // __builtin_HEXAGON_A2_vminh
-      {Intrinsic::hexagon_A2_vminub, 7979}, // __builtin_HEXAGON_A2_vminub
-      {Intrinsic::hexagon_A2_vminuh, 8007}, // __builtin_HEXAGON_A2_vminuh
-      {Intrinsic::hexagon_A2_vminuw, 8035}, // __builtin_HEXAGON_A2_vminuw
-      {Intrinsic::hexagon_A2_vminw, 8063}, // __builtin_HEXAGON_A2_vminw
-      {Intrinsic::hexagon_A2_vnavgh, 8090}, // __builtin_HEXAGON_A2_vnavgh
-      {Intrinsic::hexagon_A2_vnavghcr, 8118}, // __builtin_HEXAGON_A2_vnavghcr
-      {Intrinsic::hexagon_A2_vnavghr, 8148}, // __builtin_HEXAGON_A2_vnavghr
-      {Intrinsic::hexagon_A2_vnavgw, 8177}, // __builtin_HEXAGON_A2_vnavgw
-      {Intrinsic::hexagon_A2_vnavgwcr, 8205}, // __builtin_HEXAGON_A2_vnavgwcr
-      {Intrinsic::hexagon_A2_vnavgwr, 8235}, // __builtin_HEXAGON_A2_vnavgwr
-      {Intrinsic::hexagon_A2_vraddub, 8264}, // __builtin_HEXAGON_A2_vraddub
-      {Intrinsic::hexagon_A2_vraddub_acc, 8293}, // __builtin_HEXAGON_A2_vraddub_acc
-      {Intrinsic::hexagon_A2_vrsadub, 8326}, // __builtin_HEXAGON_A2_vrsadub
-      {Intrinsic::hexagon_A2_vrsadub_acc, 8355}, // __builtin_HEXAGON_A2_vrsadub_acc
-      {Intrinsic::hexagon_A2_vsubb_map, 8388}, // __builtin_HEXAGON_A2_vsubb_map
-      {Intrinsic::hexagon_A2_vsubh, 8419}, // __builtin_HEXAGON_A2_vsubh
-      {Intrinsic::hexagon_A2_vsubhs, 8446}, // __builtin_HEXAGON_A2_vsubhs
-      {Intrinsic::hexagon_A2_vsubub, 8474}, // __builtin_HEXAGON_A2_vsubub
-      {Intrinsic::hexagon_A2_vsububs, 8502}, // __builtin_HEXAGON_A2_vsububs
-      {Intrinsic::hexagon_A2_vsubuhs, 8531}, // __builtin_HEXAGON_A2_vsubuhs
-      {Intrinsic::hexagon_A2_vsubw, 8560}, // __builtin_HEXAGON_A2_vsubw
-      {Intrinsic::hexagon_A2_vsubws, 8587}, // __builtin_HEXAGON_A2_vsubws
-      {Intrinsic::hexagon_A2_xor, 8615}, // __builtin_HEXAGON_A2_xor
-      {Intrinsic::hexagon_A2_xorp, 8640}, // __builtin_HEXAGON_A2_xorp
-      {Intrinsic::hexagon_A2_zxtb, 8666}, // __builtin_HEXAGON_A2_zxtb
-      {Intrinsic::hexagon_A2_zxth, 8692}, // __builtin_HEXAGON_A2_zxth
-      {Intrinsic::hexagon_A4_addp_c, 8718}, // __builtin_HEXAGON_A4_addp_c
-      {Intrinsic::hexagon_A4_andn, 8746}, // __builtin_HEXAGON_A4_andn
-      {Intrinsic::hexagon_A4_andnp, 8772}, // __builtin_HEXAGON_A4_andnp
-      {Intrinsic::hexagon_A4_bitsplit, 8799}, // __builtin_HEXAGON_A4_bitsplit
-      {Intrinsic::hexagon_A4_bitspliti, 8829}, // __builtin_HEXAGON_A4_bitspliti
-      {Intrinsic::hexagon_A4_boundscheck, 8860}, // __builtin_HEXAGON_A4_boundscheck
-      {Intrinsic::hexagon_A4_cmpbeq, 8893}, // __builtin_HEXAGON_A4_cmpbeq
-      {Intrinsic::hexagon_A4_cmpbeqi, 8921}, // __builtin_HEXAGON_A4_cmpbeqi
-      {Intrinsic::hexagon_A4_cmpbgt, 8950}, // __builtin_HEXAGON_A4_cmpbgt
-      {Intrinsic::hexagon_A4_cmpbgti, 8978}, // __builtin_HEXAGON_A4_cmpbgti
-      {Intrinsic::hexagon_A4_cmpbgtu, 9007}, // __builtin_HEXAGON_A4_cmpbgtu
-      {Intrinsic::hexagon_A4_cmpbgtui, 9036}, // __builtin_HEXAGON_A4_cmpbgtui
-      {Intrinsic::hexagon_A4_cmpheq, 9066}, // __builtin_HEXAGON_A4_cmpheq
-      {Intrinsic::hexagon_A4_cmpheqi, 9094}, // __builtin_HEXAGON_A4_cmpheqi
-      {Intrinsic::hexagon_A4_cmphgt, 9123}, // __builtin_HEXAGON_A4_cmphgt
-      {Intrinsic::hexagon_A4_cmphgti, 9151}, // __builtin_HEXAGON_A4_cmphgti
-      {Intrinsic::hexagon_A4_cmphgtu, 9180}, // __builtin_HEXAGON_A4_cmphgtu
-      {Intrinsic::hexagon_A4_cmphgtui, 9209}, // __builtin_HEXAGON_A4_cmphgtui
-      {Intrinsic::hexagon_A4_combineii, 9239}, // __builtin_HEXAGON_A4_combineii
-      {Intrinsic::hexagon_A4_combineir, 9270}, // __builtin_HEXAGON_A4_combineir
-      {Intrinsic::hexagon_A4_combineri, 9301}, // __builtin_HEXAGON_A4_combineri
-      {Intrinsic::hexagon_A4_cround_ri, 9332}, // __builtin_HEXAGON_A4_cround_ri
-      {Intrinsic::hexagon_A4_cround_rr, 9363}, // __builtin_HEXAGON_A4_cround_rr
-      {Intrinsic::hexagon_A4_modwrapu, 9394}, // __builtin_HEXAGON_A4_modwrapu
-      {Intrinsic::hexagon_A4_orn, 9424}, // __builtin_HEXAGON_A4_orn
-      {Intrinsic::hexagon_A4_ornp, 9449}, // __builtin_HEXAGON_A4_ornp
-      {Intrinsic::hexagon_A4_rcmpeq, 9475}, // __builtin_HEXAGON_A4_rcmpeq
-      {Intrinsic::hexagon_A4_rcmpeqi, 9503}, // __builtin_HEXAGON_A4_rcmpeqi
-      {Intrinsic::hexagon_A4_rcmpneq, 9532}, // __builtin_HEXAGON_A4_rcmpneq
-      {Intrinsic::hexagon_A4_rcmpneqi, 9561}, // __builtin_HEXAGON_A4_rcmpneqi
-      {Intrinsic::hexagon_A4_round_ri, 9591}, // __builtin_HEXAGON_A4_round_ri
-      {Intrinsic::hexagon_A4_round_ri_sat, 9621}, // __builtin_HEXAGON_A4_round_ri_sat
-      {Intrinsic::hexagon_A4_round_rr, 9655}, // __builtin_HEXAGON_A4_round_rr
-      {Intrinsic::hexagon_A4_round_rr_sat, 9685}, // __builtin_HEXAGON_A4_round_rr_sat
-      {Intrinsic::hexagon_A4_subp_c, 9719}, // __builtin_HEXAGON_A4_subp_c
-      {Intrinsic::hexagon_A4_tfrcpp, 9747}, // __builtin_HEXAGON_A4_tfrcpp
-      {Intrinsic::hexagon_A4_tfrpcp, 9775}, // __builtin_HEXAGON_A4_tfrpcp
-      {Intrinsic::hexagon_A4_tlbmatch, 9803}, // __builtin_HEXAGON_A4_tlbmatch
-      {Intrinsic::hexagon_A4_vcmpbeq_any, 9833}, // __builtin_HEXAGON_A4_vcmpbeq_any
-      {Intrinsic::hexagon_A4_vcmpbeqi, 9866}, // __builtin_HEXAGON_A4_vcmpbeqi
-      {Intrinsic::hexagon_A4_vcmpbgt, 9896}, // __builtin_HEXAGON_A4_vcmpbgt
-      {Intrinsic::hexagon_A4_vcmpbgti, 9925}, // __builtin_HEXAGON_A4_vcmpbgti
-      {Intrinsic::hexagon_A4_vcmpbgtui, 9955}, // __builtin_HEXAGON_A4_vcmpbgtui
-      {Intrinsic::hexagon_A4_vcmpheqi, 9986}, // __builtin_HEXAGON_A4_vcmpheqi
-      {Intrinsic::hexagon_A4_vcmphgti, 10016}, // __builtin_HEXAGON_A4_vcmphgti
-      {Intrinsic::hexagon_A4_vcmphgtui, 10046}, // __builtin_HEXAGON_A4_vcmphgtui
-      {Intrinsic::hexagon_A4_vcmpweqi, 10077}, // __builtin_HEXAGON_A4_vcmpweqi
-      {Intrinsic::hexagon_A4_vcmpwgti, 10107}, // __builtin_HEXAGON_A4_vcmpwgti
-      {Intrinsic::hexagon_A4_vcmpwgtui, 10137}, // __builtin_HEXAGON_A4_vcmpwgtui
-      {Intrinsic::hexagon_A4_vrmaxh, 10168}, // __builtin_HEXAGON_A4_vrmaxh
-      {Intrinsic::hexagon_A4_vrmaxuh, 10196}, // __builtin_HEXAGON_A4_vrmaxuh
-      {Intrinsic::hexagon_A4_vrmaxuw, 10225}, // __builtin_HEXAGON_A4_vrmaxuw
-      {Intrinsic::hexagon_A4_vrmaxw, 10254}, // __builtin_HEXAGON_A4_vrmaxw
-      {Intrinsic::hexagon_A4_vrminh, 10282}, // __builtin_HEXAGON_A4_vrminh
-      {Intrinsic::hexagon_A4_vrminuh, 10310}, // __builtin_HEXAGON_A4_vrminuh
-      {Intrinsic::hexagon_A4_vrminuw, 10339}, // __builtin_HEXAGON_A4_vrminuw
-      {Intrinsic::hexagon_A4_vrminw, 10368}, // __builtin_HEXAGON_A4_vrminw
-      {Intrinsic::hexagon_A5_ACS, 10396}, // __builtin_HEXAGON_A5_ACS
-      {Intrinsic::hexagon_A5_vaddhubs, 10421}, // __builtin_HEXAGON_A5_vaddhubs
-      {Intrinsic::hexagon_A6_vcmpbeq_notany, 10451}, // __builtin_HEXAGON_A6_vcmpbeq_notany
-      {Intrinsic::hexagon_A6_vminub_RdP, 10487}, // __builtin_HEXAGON_A6_vminub_RdP
-      {Intrinsic::hexagon_C2_all8, 10519}, // __builtin_HEXAGON_C2_all8
-      {Intrinsic::hexagon_C2_and, 10545}, // __builtin_HEXAGON_C2_and
-      {Intrinsic::hexagon_C2_andn, 10570}, // __builtin_HEXAGON_C2_andn
-      {Intrinsic::hexagon_C2_any8, 10596}, // __builtin_HEXAGON_C2_any8
-      {Intrinsic::hexagon_C2_bitsclr, 10622}, // __builtin_HEXAGON_C2_bitsclr
-      {Intrinsic::hexagon_C2_bitsclri, 10651}, // __builtin_HEXAGON_C2_bitsclri
-      {Intrinsic::hexagon_C2_bitsset, 10681}, // __builtin_HEXAGON_C2_bitsset
-      {Intrinsic::hexagon_C2_cmpeq, 10710}, // __builtin_HEXAGON_C2_cmpeq
-      {Intrinsic::hexagon_C2_cmpeqi, 10737}, // __builtin_HEXAGON_C2_cmpeqi
-      {Intrinsic::hexagon_C2_cmpeqp, 10765}, // __builtin_HEXAGON_C2_cmpeqp
-      {Intrinsic::hexagon_C2_cmpgei, 10793}, // __builtin_HEXAGON_C2_cmpgei
-      {Intrinsic::hexagon_C2_cmpgeui, 10821}, // __builtin_HEXAGON_C2_cmpgeui
-      {Intrinsic::hexagon_C2_cmpgt, 10850}, // __builtin_HEXAGON_C2_cmpgt
-      {Intrinsic::hexagon_C2_cmpgti, 10877}, // __builtin_HEXAGON_C2_cmpgti
-      {Intrinsic::hexagon_C2_cmpgtp, 10905}, // __builtin_HEXAGON_C2_cmpgtp
-      {Intrinsic::hexagon_C2_cmpgtu, 10933}, // __builtin_HEXAGON_C2_cmpgtu
-      {Intrinsic::hexagon_C2_cmpgtui, 10961}, // __builtin_HEXAGON_C2_cmpgtui
-      {Intrinsic::hexagon_C2_cmpgtup, 10990}, // __builtin_HEXAGON_C2_cmpgtup
-      {Intrinsic::hexagon_C2_cmplt, 11019}, // __builtin_HEXAGON_C2_cmplt
-      {Intrinsic::hexagon_C2_cmpltu, 11046}, // __builtin_HEXAGON_C2_cmpltu
-      {Intrinsic::hexagon_C2_mask, 11074}, // __builtin_HEXAGON_C2_mask
-      {Intrinsic::hexagon_C2_mux, 11100}, // __builtin_HEXAGON_C2_mux
-      {Intrinsic::hexagon_C2_muxii, 11125}, // __builtin_HEXAGON_C2_muxii
-      {Intrinsic::hexagon_C2_muxir, 11152}, // __builtin_HEXAGON_C2_muxir
-      {Intrinsic::hexagon_C2_muxri, 11179}, // __builtin_HEXAGON_C2_muxri
-      {Intrinsic::hexagon_C2_not, 11206}, // __builtin_HEXAGON_C2_not
-      {Intrinsic::hexagon_C2_or, 11231}, // __builtin_HEXAGON_C2_or
-      {Intrinsic::hexagon_C2_orn, 11255}, // __builtin_HEXAGON_C2_orn
-      {Intrinsic::hexagon_C2_pxfer_map, 11280}, // __builtin_HEXAGON_C2_pxfer_map
-      {Intrinsic::hexagon_C2_tfrpr, 11311}, // __builtin_HEXAGON_C2_tfrpr
-      {Intrinsic::hexagon_C2_tfrrp, 11338}, // __builtin_HEXAGON_C2_tfrrp
-      {Intrinsic::hexagon_C2_vitpack, 11365}, // __builtin_HEXAGON_C2_vitpack
-      {Intrinsic::hexagon_C2_vmux, 11394}, // __builtin_HEXAGON_C2_vmux
-      {Intrinsic::hexagon_C2_xor, 11420}, // __builtin_HEXAGON_C2_xor
-      {Intrinsic::hexagon_C4_and_and, 11445}, // __builtin_HEXAGON_C4_and_and
-      {Intrinsic::hexagon_C4_and_andn, 11474}, // __builtin_HEXAGON_C4_and_andn
-      {Intrinsic::hexagon_C4_and_or, 11504}, // __builtin_HEXAGON_C4_and_or
-      {Intrinsic::hexagon_C4_and_orn, 11532}, // __builtin_HEXAGON_C4_and_orn
-      {Intrinsic::hexagon_C4_cmplte, 11561}, // __builtin_HEXAGON_C4_cmplte
-      {Intrinsic::hexagon_C4_cmpltei, 11589}, // __builtin_HEXAGON_C4_cmpltei
-      {Intrinsic::hexagon_C4_cmplteu, 11618}, // __builtin_HEXAGON_C4_cmplteu
-      {Intrinsic::hexagon_C4_cmplteui, 11647}, // __builtin_HEXAGON_C4_cmplteui
-      {Intrinsic::hexagon_C4_cmpneq, 11677}, // __builtin_HEXAGON_C4_cmpneq
-      {Intrinsic::hexagon_C4_cmpneqi, 11705}, // __builtin_HEXAGON_C4_cmpneqi
-      {Intrinsic::hexagon_C4_fastcorner9, 11734}, // __builtin_HEXAGON_C4_fastcorner9
-      {Intrinsic::hexagon_C4_fastcorner9_not, 11767}, // __builtin_HEXAGON_C4_fastcorner9_not
-      {Intrinsic::hexagon_C4_nbitsclr, 11804}, // __builtin_HEXAGON_C4_nbitsclr
-      {Intrinsic::hexagon_C4_nbitsclri, 11834}, // __builtin_HEXAGON_C4_nbitsclri
-      {Intrinsic::hexagon_C4_nbitsset, 11865}, // __builtin_HEXAGON_C4_nbitsset
-      {Intrinsic::hexagon_C4_or_and, 11895}, // __builtin_HEXAGON_C4_or_and
-      {Intrinsic::hexagon_C4_or_andn, 11923}, // __builtin_HEXAGON_C4_or_andn
-      {Intrinsic::hexagon_C4_or_or, 11952}, // __builtin_HEXAGON_C4_or_or
-      {Intrinsic::hexagon_C4_or_orn, 11979}, // __builtin_HEXAGON_C4_or_orn
-      {Intrinsic::hexagon_F2_conv_d2df, 12007}, // __builtin_HEXAGON_F2_conv_d2df
-      {Intrinsic::hexagon_F2_conv_d2sf, 12038}, // __builtin_HEXAGON_F2_conv_d2sf
-      {Intrinsic::hexagon_F2_conv_df2d, 12069}, // __builtin_HEXAGON_F2_conv_df2d
-      {Intrinsic::hexagon_F2_conv_df2d_chop, 12100}, // __builtin_HEXAGON_F2_conv_df2d_chop
-      {Intrinsic::hexagon_F2_conv_df2sf, 12136}, // __builtin_HEXAGON_F2_conv_df2sf
-      {Intrinsic::hexagon_F2_conv_df2ud, 12168}, // __builtin_HEXAGON_F2_conv_df2ud
-      {Intrinsic::hexagon_F2_conv_df2ud_chop, 12200}, // __builtin_HEXAGON_F2_conv_df2ud_chop
-      {Intrinsic::hexagon_F2_conv_df2uw, 12237}, // __builtin_HEXAGON_F2_conv_df2uw
-      {Intrinsic::hexagon_F2_conv_df2uw_chop, 12269}, // __builtin_HEXAGON_F2_conv_df2uw_chop
-      {Intrinsic::hexagon_F2_conv_df2w, 12306}, // __builtin_HEXAGON_F2_conv_df2w
-      {Intrinsic::hexagon_F2_conv_df2w_chop, 12337}, // __builtin_HEXAGON_F2_conv_df2w_chop
-      {Intrinsic::hexagon_F2_conv_sf2d, 12373}, // __builtin_HEXAGON_F2_conv_sf2d
-      {Intrinsic::hexagon_F2_conv_sf2d_chop, 12404}, // __builtin_HEXAGON_F2_conv_sf2d_chop
-      {Intrinsic::hexagon_F2_conv_sf2df, 12440}, // __builtin_HEXAGON_F2_conv_sf2df
-      {Intrinsic::hexagon_F2_conv_sf2ud, 12472}, // __builtin_HEXAGON_F2_conv_sf2ud
-      {Intrinsic::hexagon_F2_conv_sf2ud_chop, 12504}, // __builtin_HEXAGON_F2_conv_sf2ud_chop
-      {Intrinsic::hexagon_F2_conv_sf2uw, 12541}, // __builtin_HEXAGON_F2_conv_sf2uw
-      {Intrinsic::hexagon_F2_conv_sf2uw_chop, 12573}, // __builtin_HEXAGON_F2_conv_sf2uw_chop
-      {Intrinsic::hexagon_F2_conv_sf2w, 12610}, // __builtin_HEXAGON_F2_conv_sf2w
-      {Intrinsic::hexagon_F2_conv_sf2w_chop, 12641}, // __builtin_HEXAGON_F2_conv_sf2w_chop
-      {Intrinsic::hexagon_F2_conv_ud2df, 12677}, // __builtin_HEXAGON_F2_conv_ud2df
-      {Intrinsic::hexagon_F2_conv_ud2sf, 12709}, // __builtin_HEXAGON_F2_conv_ud2sf
-      {Intrinsic::hexagon_F2_conv_uw2df, 12741}, // __builtin_HEXAGON_F2_conv_uw2df
-      {Intrinsic::hexagon_F2_conv_uw2sf, 12773}, // __builtin_HEXAGON_F2_conv_uw2sf
-      {Intrinsic::hexagon_F2_conv_w2df, 12805}, // __builtin_HEXAGON_F2_conv_w2df
-      {Intrinsic::hexagon_F2_conv_w2sf, 12836}, // __builtin_HEXAGON_F2_conv_w2sf
-      {Intrinsic::hexagon_F2_dfadd, 12867}, // __builtin_HEXAGON_F2_dfadd
-      {Intrinsic::hexagon_F2_dfclass, 12894}, // __builtin_HEXAGON_F2_dfclass
-      {Intrinsic::hexagon_F2_dfcmpeq, 12923}, // __builtin_HEXAGON_F2_dfcmpeq
-      {Intrinsic::hexagon_F2_dfcmpge, 12952}, // __builtin_HEXAGON_F2_dfcmpge
-      {Intrinsic::hexagon_F2_dfcmpgt, 12981}, // __builtin_HEXAGON_F2_dfcmpgt
-      {Intrinsic::hexagon_F2_dfcmpuo, 13010}, // __builtin_HEXAGON_F2_dfcmpuo
-      {Intrinsic::hexagon_F2_dfimm_n, 13039}, // __builtin_HEXAGON_F2_dfimm_n
-      {Intrinsic::hexagon_F2_dfimm_p, 13068}, // __builtin_HEXAGON_F2_dfimm_p
-      {Intrinsic::hexagon_F2_dfsub, 13097}, // __builtin_HEXAGON_F2_dfsub
-      {Intrinsic::hexagon_F2_sfadd, 13124}, // __builtin_HEXAGON_F2_sfadd
-      {Intrinsic::hexagon_F2_sfclass, 13151}, // __builtin_HEXAGON_F2_sfclass
-      {Intrinsic::hexagon_F2_sfcmpeq, 13180}, // __builtin_HEXAGON_F2_sfcmpeq
-      {Intrinsic::hexagon_F2_sfcmpge, 13209}, // __builtin_HEXAGON_F2_sfcmpge
-      {Intrinsic::hexagon_F2_sfcmpgt, 13238}, // __builtin_HEXAGON_F2_sfcmpgt
-      {Intrinsic::hexagon_F2_sfcmpuo, 13267}, // __builtin_HEXAGON_F2_sfcmpuo
-      {Intrinsic::hexagon_F2_sffixupd, 13296}, // __builtin_HEXAGON_F2_sffixupd
-      {Intrinsic::hexagon_F2_sffixupn, 13326}, // __builtin_HEXAGON_F2_sffixupn
-      {Intrinsic::hexagon_F2_sffixupr, 13356}, // __builtin_HEXAGON_F2_sffixupr
-      {Intrinsic::hexagon_F2_sffma, 13386}, // __builtin_HEXAGON_F2_sffma
-      {Intrinsic::hexagon_F2_sffma_lib, 13413}, // __builtin_HEXAGON_F2_sffma_lib
-      {Intrinsic::hexagon_F2_sffma_sc, 13444}, // __builtin_HEXAGON_F2_sffma_sc
-      {Intrinsic::hexagon_F2_sffms, 13474}, // __builtin_HEXAGON_F2_sffms
-      {Intrinsic::hexagon_F2_sffms_lib, 13501}, // __builtin_HEXAGON_F2_sffms_lib
-      {Intrinsic::hexagon_F2_sfimm_n, 13532}, // __builtin_HEXAGON_F2_sfimm_n
-      {Intrinsic::hexagon_F2_sfimm_p, 13561}, // __builtin_HEXAGON_F2_sfimm_p
-      {Intrinsic::hexagon_F2_sfinvsqrta, 13590}, // __builtin_HEXAGON_F2_sfinvsqrta
-      {Intrinsic::hexagon_F2_sfmax, 13622}, // __builtin_HEXAGON_F2_sfmax
-      {Intrinsic::hexagon_F2_sfmin, 13649}, // __builtin_HEXAGON_F2_sfmin
-      {Intrinsic::hexagon_F2_sfmpy, 13676}, // __builtin_HEXAGON_F2_sfmpy
-      {Intrinsic::hexagon_F2_sfrecipa, 13703}, // __builtin_HEXAGON_F2_sfrecipa
-      {Intrinsic::hexagon_F2_sfsub, 13733}, // __builtin_HEXAGON_F2_sfsub
-      {Intrinsic::hexagon_L2_loadw_locked, 13760}, // __builtin_HEXAGON_L2_loadw_locked
-      {Intrinsic::hexagon_L4_loadd_locked, 13794}, // __builtin_HEXAGON_L4_loadd_locked
-      {Intrinsic::hexagon_M2_acci, 13828}, // __builtin_HEXAGON_M2_acci
-      {Intrinsic::hexagon_M2_accii, 13854}, // __builtin_HEXAGON_M2_accii
-      {Intrinsic::hexagon_M2_cmaci_s0, 13881}, // __builtin_HEXAGON_M2_cmaci_s0
-      {Intrinsic::hexagon_M2_cmacr_s0, 13911}, // __builtin_HEXAGON_M2_cmacr_s0
-      {Intrinsic::hexagon_M2_cmacs_s0, 13941}, // __builtin_HEXAGON_M2_cmacs_s0
-      {Intrinsic::hexagon_M2_cmacs_s1, 13971}, // __builtin_HEXAGON_M2_cmacs_s1
-      {Intrinsic::hexagon_M2_cmacsc_s0, 14001}, // __builtin_HEXAGON_M2_cmacsc_s0
-      {Intrinsic::hexagon_M2_cmacsc_s1, 14032}, // __builtin_HEXAGON_M2_cmacsc_s1
-      {Intrinsic::hexagon_M2_cmpyi_s0, 14063}, // __builtin_HEXAGON_M2_cmpyi_s0
-      {Intrinsic::hexagon_M2_cmpyr_s0, 14093}, // __builtin_HEXAGON_M2_cmpyr_s0
-      {Intrinsic::hexagon_M2_cmpyrs_s0, 14123}, // __builtin_HEXAGON_M2_cmpyrs_s0
-      {Intrinsic::hexagon_M2_cmpyrs_s1, 14154}, // __builtin_HEXAGON_M2_cmpyrs_s1
-      {Intrinsic::hexagon_M2_cmpyrsc_s0, 14185}, // __builtin_HEXAGON_M2_cmpyrsc_s0
-      {Intrinsic::hexagon_M2_cmpyrsc_s1, 14217}, // __builtin_HEXAGON_M2_cmpyrsc_s1
-      {Intrinsic::hexagon_M2_cmpys_s0, 14249}, // __builtin_HEXAGON_M2_cmpys_s0
-      {Intrinsic::hexagon_M2_cmpys_s1, 14279}, // __builtin_HEXAGON_M2_cmpys_s1
-      {Intrinsic::hexagon_M2_cmpysc_s0, 14309}, // __builtin_HEXAGON_M2_cmpysc_s0
-      {Intrinsic::hexagon_M2_cmpysc_s1, 14340}, // __builtin_HEXAGON_M2_cmpysc_s1
-      {Intrinsic::hexagon_M2_cnacs_s0, 14371}, // __builtin_HEXAGON_M2_cnacs_s0
-      {Intrinsic::hexagon_M2_cnacs_s1, 14401}, // __builtin_HEXAGON_M2_cnacs_s1
-      {Intrinsic::hexagon_M2_cnacsc_s0, 14431}, // __builtin_HEXAGON_M2_cnacsc_s0
-      {Intrinsic::hexagon_M2_cnacsc_s1, 14462}, // __builtin_HEXAGON_M2_cnacsc_s1
-      {Intrinsic::hexagon_M2_dpmpyss_acc_s0, 14493}, // __builtin_HEXAGON_M2_dpmpyss_acc_s0
-      {Intrinsic::hexagon_M2_dpmpyss_nac_s0, 14529}, // __builtin_HEXAGON_M2_dpmpyss_nac_s0
-      {Intrinsic::hexagon_M2_dpmpyss_rnd_s0, 14565}, // __builtin_HEXAGON_M2_dpmpyss_rnd_s0
-      {Intrinsic::hexagon_M2_dpmpyss_s0, 14601}, // __builtin_HEXAGON_M2_dpmpyss_s0
-      {Intrinsic::hexagon_M2_dpmpyuu_acc_s0, 14633}, // __builtin_HEXAGON_M2_dpmpyuu_acc_s0
-      {Intrinsic::hexagon_M2_dpmpyuu_nac_s0, 14669}, // __builtin_HEXAGON_M2_dpmpyuu_nac_s0
-      {Intrinsic::hexagon_M2_dpmpyuu_s0, 14705}, // __builtin_HEXAGON_M2_dpmpyuu_s0
-      {Intrinsic::hexagon_M2_hmmpyh_rs1, 14737}, // __builtin_HEXAGON_M2_hmmpyh_rs1
-      {Intrinsic::hexagon_M2_hmmpyh_s1, 14769}, // __builtin_HEXAGON_M2_hmmpyh_s1
-      {Intrinsic::hexagon_M2_hmmpyl_rs1, 14800}, // __builtin_HEXAGON_M2_hmmpyl_rs1
-      {Intrinsic::hexagon_M2_hmmpyl_s1, 14832}, // __builtin_HEXAGON_M2_hmmpyl_s1
-      {Intrinsic::hexagon_M2_maci, 14863}, // __builtin_HEXAGON_M2_maci
-      {Intrinsic::hexagon_M2_macsin, 14889}, // __builtin_HEXAGON_M2_macsin
-      {Intrinsic::hexagon_M2_macsip, 14917}, // __builtin_HEXAGON_M2_macsip
-      {Intrinsic::hexagon_M2_mmachs_rs0, 14945}, // __builtin_HEXAGON_M2_mmachs_rs0
-      {Intrinsic::hexagon_M2_mmachs_rs1, 14977}, // __builtin_HEXAGON_M2_mmachs_rs1
-      {Intrinsic::hexagon_M2_mmachs_s0, 15009}, // __builtin_HEXAGON_M2_mmachs_s0
-      {Intrinsic::hexagon_M2_mmachs_s1, 15040}, // __builtin_HEXAGON_M2_mmachs_s1
-      {Intrinsic::hexagon_M2_mmacls_rs0, 15071}, // __builtin_HEXAGON_M2_mmacls_rs0
-      {Intrinsic::hexagon_M2_mmacls_rs1, 15103}, // __builtin_HEXAGON_M2_mmacls_rs1
-      {Intrinsic::hexagon_M2_mmacls_s0, 15135}, // __builtin_HEXAGON_M2_mmacls_s0
-      {Intrinsic::hexagon_M2_mmacls_s1, 15166}, // __builtin_HEXAGON_M2_mmacls_s1
-      {Intrinsic::hexagon_M2_mmacuhs_rs0, 15197}, // __builtin_HEXAGON_M2_mmacuhs_rs0
-      {Intrinsic::hexagon_M2_mmacuhs_rs1, 15230}, // __builtin_HEXAGON_M2_mmacuhs_rs1
-      {Intrinsic::hexagon_M2_mmacuhs_s0, 15263}, // __builtin_HEXAGON_M2_mmacuhs_s0
-      {Intrinsic::hexagon_M2_mmacuhs_s1, 15295}, // __builtin_HEXAGON_M2_mmacuhs_s1
-      {Intrinsic::hexagon_M2_mmaculs_rs0, 15327}, // __builtin_HEXAGON_M2_mmaculs_rs0
-      {Intrinsic::hexagon_M2_mmaculs_rs1, 15360}, // __builtin_HEXAGON_M2_mmaculs_rs1
-      {Intrinsic::hexagon_M2_mmaculs_s0, 15393}, // __builtin_HEXAGON_M2_mmaculs_s0
-      {Intrinsic::hexagon_M2_mmaculs_s1, 15425}, // __builtin_HEXAGON_M2_mmaculs_s1
-      {Intrinsic::hexagon_M2_mmpyh_rs0, 15457}, // __builtin_HEXAGON_M2_mmpyh_rs0
-      {Intrinsic::hexagon_M2_mmpyh_rs1, 15488}, // __builtin_HEXAGON_M2_mmpyh_rs1
-      {Intrinsic::hexagon_M2_mmpyh_s0, 15519}, // __builtin_HEXAGON_M2_mmpyh_s0
-      {Intrinsic::hexagon_M2_mmpyh_s1, 15549}, // __builtin_HEXAGON_M2_mmpyh_s1
-      {Intrinsic::hexagon_M2_mmpyl_rs0, 15579}, // __builtin_HEXAGON_M2_mmpyl_rs0
-      {Intrinsic::hexagon_M2_mmpyl_rs1, 15610}, // __builtin_HEXAGON_M2_mmpyl_rs1
-      {Intrinsic::hexagon_M2_mmpyl_s0, 15641}, // __builtin_HEXAGON_M2_mmpyl_s0
-      {Intrinsic::hexagon_M2_mmpyl_s1, 15671}, // __builtin_HEXAGON_M2_mmpyl_s1
-      {Intrinsic::hexagon_M2_mmpyuh_rs0, 15701}, // __builtin_HEXAGON_M2_mmpyuh_rs0
-      {Intrinsic::hexagon_M2_mmpyuh_rs1, 15733}, // __builtin_HEXAGON_M2_mmpyuh_rs1
-      {Intrinsic::hexagon_M2_mmpyuh_s0, 15765}, // __builtin_HEXAGON_M2_mmpyuh_s0
-      {Intrinsic::hexagon_M2_mmpyuh_s1, 15796}, // __builtin_HEXAGON_M2_mmpyuh_s1
-      {Intrinsic::hexagon_M2_mmpyul_rs0, 15827}, // __builtin_HEXAGON_M2_mmpyul_rs0
-      {Intrinsic::hexagon_M2_mmpyul_rs1, 15859}, // __builtin_HEXAGON_M2_mmpyul_rs1
-      {Intrinsic::hexagon_M2_mmpyul_s0, 15891}, // __builtin_HEXAGON_M2_mmpyul_s0
-      {Intrinsic::hexagon_M2_mmpyul_s1, 15922}, // __builtin_HEXAGON_M2_mmpyul_s1
-      {Intrinsic::hexagon_M2_mnaci, 15953}, // __builtin_HEXAGON_M2_mnaci
-      {Intrinsic::hexagon_M2_mpy_acc_hh_s0, 15980}, // __builtin_HEXAGON_M2_mpy_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_hh_s1, 16015}, // __builtin_HEXAGON_M2_mpy_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_hl_s0, 16050}, // __builtin_HEXAGON_M2_mpy_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpy_acc_hl_s1, 16085}, // __builtin_HEXAGON_M2_mpy_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpy_acc_lh_s0, 16120}, // __builtin_HEXAGON_M2_mpy_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_lh_s1, 16155}, // __builtin_HEXAGON_M2_mpy_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_ll_s0, 16190}, // __builtin_HEXAGON_M2_mpy_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpy_acc_ll_s1, 16225}, // __builtin_HEXAGON_M2_mpy_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s0, 16260}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s1, 16299}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s0, 16338}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s1, 16377}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s0, 16416}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s1, 16455}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s0, 16494}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s1, 16533}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s1
-      {Intrinsic::hexagon_M2_mpy_hh_s0, 16572}, // __builtin_HEXAGON_M2_mpy_hh_s0
-      {Intrinsic::hexagon_M2_mpy_hh_s1, 16603}, // __builtin_HEXAGON_M2_mpy_hh_s1
-      {Intrinsic::hexagon_M2_mpy_hl_s0, 16634}, // __builtin_HEXAGON_M2_mpy_hl_s0
-      {Intrinsic::hexagon_M2_mpy_hl_s1, 16665}, // __builtin_HEXAGON_M2_mpy_hl_s1
-      {Intrinsic::hexagon_M2_mpy_lh_s0, 16696}, // __builtin_HEXAGON_M2_mpy_lh_s0
-      {Intrinsic::hexagon_M2_mpy_lh_s1, 16727}, // __builtin_HEXAGON_M2_mpy_lh_s1
-      {Intrinsic::hexagon_M2_mpy_ll_s0, 16758}, // __builtin_HEXAGON_M2_mpy_ll_s0
-      {Intrinsic::hexagon_M2_mpy_ll_s1, 16789}, // __builtin_HEXAGON_M2_mpy_ll_s1
-      {Intrinsic::hexagon_M2_mpy_nac_hh_s0, 16820}, // __builtin_HEXAGON_M2_mpy_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_hh_s1, 16855}, // __builtin_HEXAGON_M2_mpy_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_hl_s0, 16890}, // __builtin_HEXAGON_M2_mpy_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpy_nac_hl_s1, 16925}, // __builtin_HEXAGON_M2_mpy_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpy_nac_lh_s0, 16960}, // __builtin_HEXAGON_M2_mpy_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_lh_s1, 16995}, // __builtin_HEXAGON_M2_mpy_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_ll_s0, 17030}, // __builtin_HEXAGON_M2_mpy_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpy_nac_ll_s1, 17065}, // __builtin_HEXAGON_M2_mpy_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s0, 17100}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s1, 17139}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s0, 17178}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s1, 17217}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s0, 17256}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s1, 17295}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s0, 17334}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s1, 17373}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_hh_s0, 17412}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_hh_s1, 17447}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_hl_s0, 17482}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_hl_s1, 17517}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_lh_s0, 17552}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_lh_s1, 17587}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_ll_s0, 17622}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_ll_s1, 17657}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s1
-      {Intrinsic::hexagon_M2_mpy_sat_hh_s0, 17692}, // __builtin_HEXAGON_M2_mpy_sat_hh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_hh_s1, 17727}, // __builtin_HEXAGON_M2_mpy_sat_hh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_hl_s0, 17762}, // __builtin_HEXAGON_M2_mpy_sat_hl_s0
-      {Intrinsic::hexagon_M2_mpy_sat_hl_s1, 17797}, // __builtin_HEXAGON_M2_mpy_sat_hl_s1
-      {Intrinsic::hexagon_M2_mpy_sat_lh_s0, 17832}, // __builtin_HEXAGON_M2_mpy_sat_lh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_lh_s1, 17867}, // __builtin_HEXAGON_M2_mpy_sat_lh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_ll_s0, 17902}, // __builtin_HEXAGON_M2_mpy_sat_ll_s0
-      {Intrinsic::hexagon_M2_mpy_sat_ll_s1, 17937}, // __builtin_HEXAGON_M2_mpy_sat_ll_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s0, 17972}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s1, 18011}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s0, 18050}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s1, 18089}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s0, 18128}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s1, 18167}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s0, 18206}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s1, 18245}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s1
-      {Intrinsic::hexagon_M2_mpy_up, 18284}, // __builtin_HEXAGON_M2_mpy_up
-      {Intrinsic::hexagon_M2_mpy_up_s1, 18312}, // __builtin_HEXAGON_M2_mpy_up_s1
-      {Intrinsic::hexagon_M2_mpy_up_s1_sat, 18343}, // __builtin_HEXAGON_M2_mpy_up_s1_sat
-      {Intrinsic::hexagon_M2_mpyd_acc_hh_s0, 18378}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_hh_s1, 18414}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_acc_hl_s0, 18450}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_hl_s1, 18486}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_acc_lh_s0, 18522}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_lh_s1, 18558}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_acc_ll_s0, 18594}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_ll_s1, 18630}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpyd_hh_s0, 18666}, // __builtin_HEXAGON_M2_mpyd_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_hh_s1, 18698}, // __builtin_HEXAGON_M2_mpyd_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_hl_s0, 18730}, // __builtin_HEXAGON_M2_mpyd_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_hl_s1, 18762}, // __builtin_HEXAGON_M2_mpyd_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_lh_s0, 18794}, // __builtin_HEXAGON_M2_mpyd_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_lh_s1, 18826}, // __builtin_HEXAGON_M2_mpyd_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_ll_s0, 18858}, // __builtin_HEXAGON_M2_mpyd_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_ll_s1, 18890}, // __builtin_HEXAGON_M2_mpyd_ll_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_hh_s0, 18922}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_hh_s1, 18958}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_hl_s0, 18994}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_hl_s1, 19030}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_lh_s0, 19066}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_lh_s1, 19102}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_ll_s0, 19138}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_ll_s1, 19174}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s0, 19210}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s1, 19246}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s0, 19282}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s1, 19318}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s0, 19354}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s1, 19390}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s0, 19426}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s1, 19462}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s1
-      {Intrinsic::hexagon_M2_mpyi, 19498}, // __builtin_HEXAGON_M2_mpyi
-      {Intrinsic::hexagon_M2_mpysin, 19524}, // __builtin_HEXAGON_M2_mpysin
-      {Intrinsic::hexagon_M2_mpysip, 19552}, // __builtin_HEXAGON_M2_mpysip
-      {Intrinsic::hexagon_M2_mpysmi, 19580}, // __builtin_HEXAGON_M2_mpysmi
-      {Intrinsic::hexagon_M2_mpysu_up, 19608}, // __builtin_HEXAGON_M2_mpysu_up
-      {Intrinsic::hexagon_M2_mpyu_acc_hh_s0, 19638}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_hh_s1, 19674}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpyu_acc_hl_s0, 19710}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_hl_s1, 19746}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpyu_acc_lh_s0, 19782}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_lh_s1, 19818}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpyu_acc_ll_s0, 19854}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_ll_s1, 19890}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpyu_hh_s0, 19926}, // __builtin_HEXAGON_M2_mpyu_hh_s0
-      {Intrinsic::hexagon_M2_mpyu_hh_s1, 19958}, // __builtin_HEXAGON_M2_mpyu_hh_s1
-      {Intrinsic::hexagon_M2_mpyu_hl_s0, 19990}, // __builtin_HEXAGON_M2_mpyu_hl_s0
-      {Intrinsic::hexagon_M2_mpyu_hl_s1, 20022}, // __builtin_HEXAGON_M2_mpyu_hl_s1
-      {Intrinsic::hexagon_M2_mpyu_lh_s0, 20054}, // __builtin_HEXAGON_M2_mpyu_lh_s0
-      {Intrinsic::hexagon_M2_mpyu_lh_s1, 20086}, // __builtin_HEXAGON_M2_mpyu_lh_s1
-      {Intrinsic::hexagon_M2_mpyu_ll_s0, 20118}, // __builtin_HEXAGON_M2_mpyu_ll_s0
-      {Intrinsic::hexagon_M2_mpyu_ll_s1, 20150}, // __builtin_HEXAGON_M2_mpyu_ll_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_hh_s0, 20182}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_hh_s1, 20218}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_hl_s0, 20254}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_hl_s1, 20290}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_lh_s0, 20326}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_lh_s1, 20362}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_ll_s0, 20398}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_ll_s1, 20434}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpyu_up, 20470}, // __builtin_HEXAGON_M2_mpyu_up
-      {Intrinsic::hexagon_M2_mpyud_acc_hh_s0, 20499}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_hh_s1, 20536}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpyud_acc_hl_s0, 20573}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_hl_s1, 20610}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpyud_acc_lh_s0, 20647}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_lh_s1, 20684}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpyud_acc_ll_s0, 20721}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_ll_s1, 20758}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpyud_hh_s0, 20795}, // __builtin_HEXAGON_M2_mpyud_hh_s0
-      {Intrinsic::hexagon_M2_mpyud_hh_s1, 20828}, // __builtin_HEXAGON_M2_mpyud_hh_s1
-      {Intrinsic::hexagon_M2_mpyud_hl_s0, 20861}, // __builtin_HEXAGON_M2_mpyud_hl_s0
-      {Intrinsic::hexagon_M2_mpyud_hl_s1, 20894}, // __builtin_HEXAGON_M2_mpyud_hl_s1
-      {Intrinsic::hexagon_M2_mpyud_lh_s0, 20927}, // __builtin_HEXAGON_M2_mpyud_lh_s0
-      {Intrinsic::hexagon_M2_mpyud_lh_s1, 20960}, // __builtin_HEXAGON_M2_mpyud_lh_s1
-      {Intrinsic::hexagon_M2_mpyud_ll_s0, 20993}, // __builtin_HEXAGON_M2_mpyud_ll_s0
-      {Intrinsic::hexagon_M2_mpyud_ll_s1, 21026}, // __builtin_HEXAGON_M2_mpyud_ll_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_hh_s0, 21059}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_hh_s1, 21096}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_hl_s0, 21133}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_hl_s1, 21170}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_lh_s0, 21207}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_lh_s1, 21244}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_ll_s0, 21281}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_ll_s1, 21318}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpyui, 21355}, // __builtin_HEXAGON_M2_mpyui
-      {Intrinsic::hexagon_M2_nacci, 21382}, // __builtin_HEXAGON_M2_nacci
-      {Intrinsic::hexagon_M2_naccii, 21409}, // __builtin_HEXAGON_M2_naccii
-      {Intrinsic::hexagon_M2_subacc, 21437}, // __builtin_HEXAGON_M2_subacc
-      {Intrinsic::hexagon_M2_vabsdiffh, 21465}, // __builtin_HEXAGON_M2_vabsdiffh
-      {Intrinsic::hexagon_M2_vabsdiffw, 21496}, // __builtin_HEXAGON_M2_vabsdiffw
-      {Intrinsic::hexagon_M2_vcmac_s0_sat_i, 21527}, // __builtin_HEXAGON_M2_vcmac_s0_sat_i
-      {Intrinsic::hexagon_M2_vcmac_s0_sat_r, 21563}, // __builtin_HEXAGON_M2_vcmac_s0_sat_r
-      {Intrinsic::hexagon_M2_vcmpy_s0_sat_i, 21599}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_i
-      {Intrinsic::hexagon_M2_vcmpy_s0_sat_r, 21635}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_r
-      {Intrinsic::hexagon_M2_vcmpy_s1_sat_i, 21671}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_i
-      {Intrinsic::hexagon_M2_vcmpy_s1_sat_r, 21707}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_r
-      {Intrinsic::hexagon_M2_vdmacs_s0, 21743}, // __builtin_HEXAGON_M2_vdmacs_s0
-      {Intrinsic::hexagon_M2_vdmacs_s1, 21774}, // __builtin_HEXAGON_M2_vdmacs_s1
-      {Intrinsic::hexagon_M2_vdmpyrs_s0, 21805}, // __builtin_HEXAGON_M2_vdmpyrs_s0
-      {Intrinsic::hexagon_M2_vdmpyrs_s1, 21837}, // __builtin_HEXAGON_M2_vdmpyrs_s1
-      {Intrinsic::hexagon_M2_vdmpys_s0, 21869}, // __builtin_HEXAGON_M2_vdmpys_s0
-      {Intrinsic::hexagon_M2_vdmpys_s1, 21900}, // __builtin_HEXAGON_M2_vdmpys_s1
-      {Intrinsic::hexagon_M2_vmac2, 21931}, // __builtin_HEXAGON_M2_vmac2
-      {Intrinsic::hexagon_M2_vmac2es, 21958}, // __builtin_HEXAGON_M2_vmac2es
-      {Intrinsic::hexagon_M2_vmac2es_s0, 21987}, // __builtin_HEXAGON_M2_vmac2es_s0
-      {Intrinsic::hexagon_M2_vmac2es_s1, 22019}, // __builtin_HEXAGON_M2_vmac2es_s1
-      {Intrinsic::hexagon_M2_vmac2s_s0, 22051}, // __builtin_HEXAGON_M2_vmac2s_s0
-      {Intrinsic::hexagon_M2_vmac2s_s1, 22082}, // __builtin_HEXAGON_M2_vmac2s_s1
-      {Intrinsic::hexagon_M2_vmac2su_s0, 22113}, // __builtin_HEXAGON_M2_vmac2su_s0
-      {Intrinsic::hexagon_M2_vmac2su_s1, 22145}, // __builtin_HEXAGON_M2_vmac2su_s1
-      {Intrinsic::hexagon_M2_vmpy2es_s0, 22177}, // __builtin_HEXAGON_M2_vmpy2es_s0
-      {Intrinsic::hexagon_M2_vmpy2es_s1, 22209}, // __builtin_HEXAGON_M2_vmpy2es_s1
-      {Intrinsic::hexagon_M2_vmpy2s_s0, 22241}, // __builtin_HEXAGON_M2_vmpy2s_s0
-      {Intrinsic::hexagon_M2_vmpy2s_s0pack, 22272}, // __builtin_HEXAGON_M2_vmpy2s_s0pack
-      {Intrinsic::hexagon_M2_vmpy2s_s1, 22307}, // __builtin_HEXAGON_M2_vmpy2s_s1
-      {Intrinsic::hexagon_M2_vmpy2s_s1pack, 22338}, // __builtin_HEXAGON_M2_vmpy2s_s1pack
-      {Intrinsic::hexagon_M2_vmpy2su_s0, 22373}, // __builtin_HEXAGON_M2_vmpy2su_s0
-      {Intrinsic::hexagon_M2_vmpy2su_s1, 22405}, // __builtin_HEXAGON_M2_vmpy2su_s1
-      {Intrinsic::hexagon_M2_vraddh, 22437}, // __builtin_HEXAGON_M2_vraddh
-      {Intrinsic::hexagon_M2_vradduh, 22465}, // __builtin_HEXAGON_M2_vradduh
-      {Intrinsic::hexagon_M2_vrcmaci_s0, 22494}, // __builtin_HEXAGON_M2_vrcmaci_s0
-      {Intrinsic::hexagon_M2_vrcmaci_s0c, 22526}, // __builtin_HEXAGON_M2_vrcmaci_s0c
-      {Intrinsic::hexagon_M2_vrcmacr_s0, 22559}, // __builtin_HEXAGON_M2_vrcmacr_s0
-      {Intrinsic::hexagon_M2_vrcmacr_s0c, 22591}, // __builtin_HEXAGON_M2_vrcmacr_s0c
-      {Intrinsic::hexagon_M2_vrcmpyi_s0, 22624}, // __builtin_HEXAGON_M2_vrcmpyi_s0
-      {Intrinsic::hexagon_M2_vrcmpyi_s0c, 22656}, // __builtin_HEXAGON_M2_vrcmpyi_s0c
-      {Intrinsic::hexagon_M2_vrcmpyr_s0, 22689}, // __builtin_HEXAGON_M2_vrcmpyr_s0
-      {Intrinsic::hexagon_M2_vrcmpyr_s0c, 22721}, // __builtin_HEXAGON_M2_vrcmpyr_s0c
-      {Intrinsic::hexagon_M2_vrcmpys_acc_s1, 22754}, // __builtin_HEXAGON_M2_vrcmpys_acc_s1
-      {Intrinsic::hexagon_M2_vrcmpys_s1, 22790}, // __builtin_HEXAGON_M2_vrcmpys_s1
-      {Intrinsic::hexagon_M2_vrcmpys_s1rp, 22822}, // __builtin_HEXAGON_M2_vrcmpys_s1rp
-      {Intrinsic::hexagon_M2_vrmac_s0, 22856}, // __builtin_HEXAGON_M2_vrmac_s0
-      {Intrinsic::hexagon_M2_vrmpy_s0, 22886}, // __builtin_HEXAGON_M2_vrmpy_s0
-      {Intrinsic::hexagon_M2_xor_xacc, 22916}, // __builtin_HEXAGON_M2_xor_xacc
-      {Intrinsic::hexagon_M4_and_and, 22946}, // __builtin_HEXAGON_M4_and_and
-      {Intrinsic::hexagon_M4_and_andn, 22975}, // __builtin_HEXAGON_M4_and_andn
-      {Intrinsic::hexagon_M4_and_or, 23005}, // __builtin_HEXAGON_M4_and_or
-      {Intrinsic::hexagon_M4_and_xor, 23033}, // __builtin_HEXAGON_M4_and_xor
-      {Intrinsic::hexagon_M4_cmpyi_wh, 23062}, // __builtin_HEXAGON_M4_cmpyi_wh
-      {Intrinsic::hexagon_M4_cmpyi_whc, 23092}, // __builtin_HEXAGON_M4_cmpyi_whc
-      {Intrinsic::hexagon_M4_cmpyr_wh, 23123}, // __builtin_HEXAGON_M4_cmpyr_wh
-      {Intrinsic::hexagon_M4_cmpyr_whc, 23153}, // __builtin_HEXAGON_M4_cmpyr_whc
-      {Intrinsic::hexagon_M4_mac_up_s1_sat, 23184}, // __builtin_HEXAGON_M4_mac_up_s1_sat
-      {Intrinsic::hexagon_M4_mpyri_addi, 23219}, // __builtin_HEXAGON_M4_mpyri_addi
-      {Intrinsic::hexagon_M4_mpyri_addr, 23251}, // __builtin_HEXAGON_M4_mpyri_addr
-      {Intrinsic::hexagon_M4_mpyri_addr_u2, 23283}, // __builtin_HEXAGON_M4_mpyri_addr_u2
-      {Intrinsic::hexagon_M4_mpyrr_addi, 23318}, // __builtin_HEXAGON_M4_mpyrr_addi
-      {Intrinsic::hexagon_M4_mpyrr_addr, 23350}, // __builtin_HEXAGON_M4_mpyrr_addr
-      {Intrinsic::hexagon_M4_nac_up_s1_sat, 23382}, // __builtin_HEXAGON_M4_nac_up_s1_sat
-      {Intrinsic::hexagon_M4_or_and, 23417}, // __builtin_HEXAGON_M4_or_and
-      {Intrinsic::hexagon_M4_or_andn, 23445}, // __builtin_HEXAGON_M4_or_andn
-      {Intrinsic::hexagon_M4_or_or, 23474}, // __builtin_HEXAGON_M4_or_or
-      {Intrinsic::hexagon_M4_or_xor, 23501}, // __builtin_HEXAGON_M4_or_xor
-      {Intrinsic::hexagon_M4_pmpyw, 23529}, // __builtin_HEXAGON_M4_pmpyw
-      {Intrinsic::hexagon_M4_pmpyw_acc, 23556}, // __builtin_HEXAGON_M4_pmpyw_acc
-      {Intrinsic::hexagon_M4_vpmpyh, 23587}, // __builtin_HEXAGON_M4_vpmpyh
-      {Intrinsic::hexagon_M4_vpmpyh_acc, 23615}, // __builtin_HEXAGON_M4_vpmpyh_acc
-      {Intrinsic::hexagon_M4_vrmpyeh_acc_s0, 23647}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s0
-      {Intrinsic::hexagon_M4_vrmpyeh_acc_s1, 23683}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s1
-      {Intrinsic::hexagon_M4_vrmpyeh_s0, 23719}, // __builtin_HEXAGON_M4_vrmpyeh_s0
-      {Intrinsic::hexagon_M4_vrmpyeh_s1, 23751}, // __builtin_HEXAGON_M4_vrmpyeh_s1
-      {Intrinsic::hexagon_M4_vrmpyoh_acc_s0, 23783}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s0
-      {Intrinsic::hexagon_M4_vrmpyoh_acc_s1, 23819}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s1
-      {Intrinsic::hexagon_M4_vrmpyoh_s0, 23855}, // __builtin_HEXAGON_M4_vrmpyoh_s0
-      {Intrinsic::hexagon_M4_vrmpyoh_s1, 23887}, // __builtin_HEXAGON_M4_vrmpyoh_s1
-      {Intrinsic::hexagon_M4_xor_and, 23919}, // __builtin_HEXAGON_M4_xor_and
-      {Intrinsic::hexagon_M4_xor_andn, 23948}, // __builtin_HEXAGON_M4_xor_andn
-      {Intrinsic::hexagon_M4_xor_or, 23978}, // __builtin_HEXAGON_M4_xor_or
-      {Intrinsic::hexagon_M4_xor_xacc, 24006}, // __builtin_HEXAGON_M4_xor_xacc
-      {Intrinsic::hexagon_M5_vdmacbsu, 24036}, // __builtin_HEXAGON_M5_vdmacbsu
-      {Intrinsic::hexagon_M5_vdmpybsu, 24066}, // __builtin_HEXAGON_M5_vdmpybsu
-      {Intrinsic::hexagon_M5_vmacbsu, 24096}, // __builtin_HEXAGON_M5_vmacbsu
-      {Intrinsic::hexagon_M5_vmacbuu, 24125}, // __builtin_HEXAGON_M5_vmacbuu
-      {Intrinsic::hexagon_M5_vmpybsu, 24154}, // __builtin_HEXAGON_M5_vmpybsu
-      {Intrinsic::hexagon_M5_vmpybuu, 24183}, // __builtin_HEXAGON_M5_vmpybuu
-      {Intrinsic::hexagon_M5_vrmacbsu, 24212}, // __builtin_HEXAGON_M5_vrmacbsu
-      {Intrinsic::hexagon_M5_vrmacbuu, 24242}, // __builtin_HEXAGON_M5_vrmacbuu
-      {Intrinsic::hexagon_M5_vrmpybsu, 24272}, // __builtin_HEXAGON_M5_vrmpybsu
-      {Intrinsic::hexagon_M5_vrmpybuu, 24302}, // __builtin_HEXAGON_M5_vrmpybuu
-      {Intrinsic::hexagon_M6_vabsdiffb, 24332}, // __builtin_HEXAGON_M6_vabsdiffb
-      {Intrinsic::hexagon_M6_vabsdiffub, 24363}, // __builtin_HEXAGON_M6_vabsdiffub
-      {Intrinsic::hexagon_S2_addasl_rrri, 24395}, // __builtin_HEXAGON_S2_addasl_rrri
-      {Intrinsic::hexagon_S2_asl_i_p, 24428}, // __builtin_HEXAGON_S2_asl_i_p
-      {Intrinsic::hexagon_S2_asl_i_p_acc, 24457}, // __builtin_HEXAGON_S2_asl_i_p_acc
-      {Intrinsic::hexagon_S2_asl_i_p_and, 24490}, // __builtin_HEXAGON_S2_asl_i_p_and
-      {Intrinsic::hexagon_S2_asl_i_p_nac, 24523}, // __builtin_HEXAGON_S2_asl_i_p_nac
-      {Intrinsic::hexagon_S2_asl_i_p_or, 24556}, // __builtin_HEXAGON_S2_asl_i_p_or
-      {Intrinsic::hexagon_S2_asl_i_p_xacc, 24588}, // __builtin_HEXAGON_S2_asl_i_p_xacc
-      {Intrinsic::hexagon_S2_asl_i_r, 24622}, // __builtin_HEXAGON_S2_asl_i_r
-      {Intrinsic::hexagon_S2_asl_i_r_acc, 24651}, // __builtin_HEXAGON_S2_asl_i_r_acc
-      {Intrinsic::hexagon_S2_asl_i_r_and, 24684}, // __builtin_HEXAGON_S2_asl_i_r_and
-      {Intrinsic::hexagon_S2_asl_i_r_nac, 24717}, // __builtin_HEXAGON_S2_asl_i_r_nac
-      {Intrinsic::hexagon_S2_asl_i_r_or, 24750}, // __builtin_HEXAGON_S2_asl_i_r_or
-      {Intrinsic::hexagon_S2_asl_i_r_sat, 24782}, // __builtin_HEXAGON_S2_asl_i_r_sat
-      {Intrinsic::hexagon_S2_asl_i_r_xacc, 24815}, // __builtin_HEXAGON_S2_asl_i_r_xacc
-      {Intrinsic::hexagon_S2_asl_i_vh, 24849}, // __builtin_HEXAGON_S2_asl_i_vh
-      {Intrinsic::hexagon_S2_asl_i_vw, 24879}, // __builtin_HEXAGON_S2_asl_i_vw
-      {Intrinsic::hexagon_S2_asl_r_p, 24909}, // __builtin_HEXAGON_S2_asl_r_p
-      {Intrinsic::hexagon_S2_asl_r_p_acc, 24938}, // __builtin_HEXAGON_S2_asl_r_p_acc
-      {Intrinsic::hexagon_S2_asl_r_p_and, 24971}, // __builtin_HEXAGON_S2_asl_r_p_and
-      {Intrinsic::hexagon_S2_asl_r_p_nac, 25004}, // __builtin_HEXAGON_S2_asl_r_p_nac
-      {Intrinsic::hexagon_S2_asl_r_p_or, 25037}, // __builtin_HEXAGON_S2_asl_r_p_or
-      {Intrinsic::hexagon_S2_asl_r_p_xor, 25069}, // __builtin_HEXAGON_S2_asl_r_p_xor
-      {Intrinsic::hexagon_S2_asl_r_r, 25102}, // __builtin_HEXAGON_S2_asl_r_r
-      {Intrinsic::hexagon_S2_asl_r_r_acc, 25131}, // __builtin_HEXAGON_S2_asl_r_r_acc
-      {Intrinsic::hexagon_S2_asl_r_r_and, 25164}, // __builtin_HEXAGON_S2_asl_r_r_and
-      {Intrinsic::hexagon_S2_asl_r_r_nac, 25197}, // __builtin_HEXAGON_S2_asl_r_r_nac
-      {Intrinsic::hexagon_S2_asl_r_r_or, 25230}, // __builtin_HEXAGON_S2_asl_r_r_or
-      {Intrinsic::hexagon_S2_asl_r_r_sat, 25262}, // __builtin_HEXAGON_S2_asl_r_r_sat
-      {Intrinsic::hexagon_S2_asl_r_vh, 25295}, // __builtin_HEXAGON_S2_asl_r_vh
-      {Intrinsic::hexagon_S2_asl_r_vw, 25325}, // __builtin_HEXAGON_S2_asl_r_vw
-      {Intrinsic::hexagon_S2_asr_i_p, 25355}, // __builtin_HEXAGON_S2_asr_i_p
-      {Intrinsic::hexagon_S2_asr_i_p_acc, 25384}, // __builtin_HEXAGON_S2_asr_i_p_acc
-      {Intrinsic::hexagon_S2_asr_i_p_and, 25417}, // __builtin_HEXAGON_S2_asr_i_p_and
-      {Intrinsic::hexagon_S2_asr_i_p_nac, 25450}, // __builtin_HEXAGON_S2_asr_i_p_nac
-      {Intrinsic::hexagon_S2_asr_i_p_or, 25483}, // __builtin_HEXAGON_S2_asr_i_p_or
-      {Intrinsic::hexagon_S2_asr_i_p_rnd, 25515}, // __builtin_HEXAGON_S2_asr_i_p_rnd
-      {Intrinsic::hexagon_S2_asr_i_p_rnd_goodsyntax, 25548}, // __builtin_HEXAGON_S2_asr_i_p_rnd_goodsyntax
-      {Intrinsic::hexagon_S2_asr_i_r, 25592}, // __builtin_HEXAGON_S2_asr_i_r
-      {Intrinsic::hexagon_S2_asr_i_r_acc, 25621}, // __builtin_HEXAGON_S2_asr_i_r_acc
-      {Intrinsic::hexagon_S2_asr_i_r_and, 25654}, // __builtin_HEXAGON_S2_asr_i_r_and
-      {Intrinsic::hexagon_S2_asr_i_r_nac, 25687}, // __builtin_HEXAGON_S2_asr_i_r_nac
-      {Intrinsic::hexagon_S2_asr_i_r_or, 25720}, // __builtin_HEXAGON_S2_asr_i_r_or
-      {Intrinsic::hexagon_S2_asr_i_r_rnd, 25752}, // __builtin_HEXAGON_S2_asr_i_r_rnd
-      {Intrinsic::hexagon_S2_asr_i_r_rnd_goodsyntax, 25785}, // __builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax
-      {Intrinsic::hexagon_S2_asr_i_svw_trun, 25829}, // __builtin_HEXAGON_S2_asr_i_svw_trun
-      {Intrinsic::hexagon_S2_asr_i_vh, 25865}, // __builtin_HEXAGON_S2_asr_i_vh
-      {Intrinsic::hexagon_S2_asr_i_vw, 25895}, // __builtin_HEXAGON_S2_asr_i_vw
-      {Intrinsic::hexagon_S2_asr_r_p, 25925}, // __builtin_HEXAGON_S2_asr_r_p
-      {Intrinsic::hexagon_S2_asr_r_p_acc, 25954}, // __builtin_HEXAGON_S2_asr_r_p_acc
-      {Intrinsic::hexagon_S2_asr_r_p_and, 25987}, // __builtin_HEXAGON_S2_asr_r_p_and
-      {Intrinsic::hexagon_S2_asr_r_p_nac, 26020}, // __builtin_HEXAGON_S2_asr_r_p_nac
-      {Intrinsic::hexagon_S2_asr_r_p_or, 26053}, // __builtin_HEXAGON_S2_asr_r_p_or
-      {Intrinsic::hexagon_S2_asr_r_p_xor, 26085}, // __builtin_HEXAGON_S2_asr_r_p_xor
-      {Intrinsic::hexagon_S2_asr_r_r, 26118}, // __builtin_HEXAGON_S2_asr_r_r
-      {Intrinsic::hexagon_S2_asr_r_r_acc, 26147}, // __builtin_HEXAGON_S2_asr_r_r_acc
-      {Intrinsic::hexagon_S2_asr_r_r_and, 26180}, // __builtin_HEXAGON_S2_asr_r_r_and
-      {Intrinsic::hexagon_S2_asr_r_r_nac, 26213}, // __builtin_HEXAGON_S2_asr_r_r_nac
-      {Intrinsic::hexagon_S2_asr_r_r_or, 26246}, // __builtin_HEXAGON_S2_asr_r_r_or
-      {Intrinsic::hexagon_S2_asr_r_r_sat, 26278}, // __builtin_HEXAGON_S2_asr_r_r_sat
-      {Intrinsic::hexagon_S2_asr_r_svw_trun, 26311}, // __builtin_HEXAGON_S2_asr_r_svw_trun
-      {Intrinsic::hexagon_S2_asr_r_vh, 26347}, // __builtin_HEXAGON_S2_asr_r_vh
-      {Intrinsic::hexagon_S2_asr_r_vw, 26377}, // __builtin_HEXAGON_S2_asr_r_vw
-      {Intrinsic::hexagon_S2_brev, 26407}, // __builtin_HEXAGON_S2_brev
-      {Intrinsic::hexagon_S2_brevp, 26433}, // __builtin_HEXAGON_S2_brevp
-      {Intrinsic::hexagon_S2_cl0, 26460}, // __builtin_HEXAGON_S2_cl0
-      {Intrinsic::hexagon_S2_cl0p, 26485}, // __builtin_HEXAGON_S2_cl0p
-      {Intrinsic::hexagon_S2_cl1, 26511}, // __builtin_HEXAGON_S2_cl1
-      {Intrinsic::hexagon_S2_cl1p, 26536}, // __builtin_HEXAGON_S2_cl1p
-      {Intrinsic::hexagon_S2_clb, 26562}, // __builtin_HEXAGON_S2_clb
-      {Intrinsic::hexagon_S2_clbnorm, 26587}, // __builtin_HEXAGON_S2_clbnorm
-      {Intrinsic::hexagon_S2_clbp, 26616}, // __builtin_HEXAGON_S2_clbp
-      {Intrinsic::hexagon_S2_clrbit_i, 26642}, // __builtin_HEXAGON_S2_clrbit_i
-      {Intrinsic::hexagon_S2_clrbit_r, 26672}, // __builtin_HEXAGON_S2_clrbit_r
-      {Intrinsic::hexagon_S2_ct0, 26702}, // __builtin_HEXAGON_S2_ct0
-      {Intrinsic::hexagon_S2_ct0p, 26727}, // __builtin_HEXAGON_S2_ct0p
-      {Intrinsic::hexagon_S2_ct1, 26753}, // __builtin_HEXAGON_S2_ct1
-      {Intrinsic::hexagon_S2_ct1p, 26778}, // __builtin_HEXAGON_S2_ct1p
-      {Intrinsic::hexagon_S2_deinterleave, 26804}, // __builtin_HEXAGON_S2_deinterleave
-      {Intrinsic::hexagon_S2_extractu, 26838}, // __builtin_HEXAGON_S2_extractu
-      {Intrinsic::hexagon_S2_extractu_rp, 26868}, // __builtin_HEXAGON_S2_extractu_rp
-      {Intrinsic::hexagon_S2_extractup, 26901}, // __builtin_HEXAGON_S2_extractup
-      {Intrinsic::hexagon_S2_extractup_rp, 26932}, // __builtin_HEXAGON_S2_extractup_rp
-      {Intrinsic::hexagon_S2_insert, 26966}, // __builtin_HEXAGON_S2_insert
-      {Intrinsic::hexagon_S2_insert_rp, 26994}, // __builtin_HEXAGON_S2_insert_rp
-      {Intrinsic::hexagon_S2_insertp, 27025}, // __builtin_HEXAGON_S2_insertp
-      {Intrinsic::hexagon_S2_insertp_rp, 27054}, // __builtin_HEXAGON_S2_insertp_rp
-      {Intrinsic::hexagon_S2_interleave, 27086}, // __builtin_HEXAGON_S2_interleave
-      {Intrinsic::hexagon_S2_lfsp, 27118}, // __builtin_HEXAGON_S2_lfsp
-      {Intrinsic::hexagon_S2_lsl_r_p, 27144}, // __builtin_HEXAGON_S2_lsl_r_p
-      {Intrinsic::hexagon_S2_lsl_r_p_acc, 27173}, // __builtin_HEXAGON_S2_lsl_r_p_acc
-      {Intrinsic::hexagon_S2_lsl_r_p_and, 27206}, // __builtin_HEXAGON_S2_lsl_r_p_and
-      {Intrinsic::hexagon_S2_lsl_r_p_nac, 27239}, // __builtin_HEXAGON_S2_lsl_r_p_nac
-      {Intrinsic::hexagon_S2_lsl_r_p_or, 27272}, // __builtin_HEXAGON_S2_lsl_r_p_or
-      {Intrinsic::hexagon_S2_lsl_r_p_xor, 27304}, // __builtin_HEXAGON_S2_lsl_r_p_xor
-      {Intrinsic::hexagon_S2_lsl_r_r, 27337}, // __builtin_HEXAGON_S2_lsl_r_r
-      {Intrinsic::hexagon_S2_lsl_r_r_acc, 27366}, // __builtin_HEXAGON_S2_lsl_r_r_acc
-      {Intrinsic::hexagon_S2_lsl_r_r_and, 27399}, // __builtin_HEXAGON_S2_lsl_r_r_and
-      {Intrinsic::hexagon_S2_lsl_r_r_nac, 27432}, // __builtin_HEXAGON_S2_lsl_r_r_nac
-      {Intrinsic::hexagon_S2_lsl_r_r_or, 27465}, // __builtin_HEXAGON_S2_lsl_r_r_or
-      {Intrinsic::hexagon_S2_lsl_r_vh, 27497}, // __builtin_HEXAGON_S2_lsl_r_vh
-      {Intrinsic::hexagon_S2_lsl_r_vw, 27527}, // __builtin_HEXAGON_S2_lsl_r_vw
-      {Intrinsic::hexagon_S2_lsr_i_p, 27557}, // __builtin_HEXAGON_S2_lsr_i_p
-      {Intrinsic::hexagon_S2_lsr_i_p_acc, 27586}, // __builtin_HEXAGON_S2_lsr_i_p_acc
-      {Intrinsic::hexagon_S2_lsr_i_p_and, 27619}, // __builtin_HEXAGON_S2_lsr_i_p_and
-      {Intrinsic::hexagon_S2_lsr_i_p_nac, 27652}, // __builtin_HEXAGON_S2_lsr_i_p_nac
-      {Intrinsic::hexagon_S2_lsr_i_p_or, 27685}, // __builtin_HEXAGON_S2_lsr_i_p_or
-      {Intrinsic::hexagon_S2_lsr_i_p_xacc, 27717}, // __builtin_HEXAGON_S2_lsr_i_p_xacc
-      {Intrinsic::hexagon_S2_lsr_i_r, 27751}, // __builtin_HEXAGON_S2_lsr_i_r
-      {Intrinsic::hexagon_S2_lsr_i_r_acc, 27780}, // __builtin_HEXAGON_S2_lsr_i_r_acc
-      {Intrinsic::hexagon_S2_lsr_i_r_and, 27813}, // __builtin_HEXAGON_S2_lsr_i_r_and
-      {Intrinsic::hexagon_S2_lsr_i_r_nac, 27846}, // __builtin_HEXAGON_S2_lsr_i_r_nac
-      {Intrinsic::hexagon_S2_lsr_i_r_or, 27879}, // __builtin_HEXAGON_S2_lsr_i_r_or
-      {Intrinsic::hexagon_S2_lsr_i_r_xacc, 27911}, // __builtin_HEXAGON_S2_lsr_i_r_xacc
-      {Intrinsic::hexagon_S2_lsr_i_vh, 27945}, // __builtin_HEXAGON_S2_lsr_i_vh
-      {Intrinsic::hexagon_S2_lsr_i_vw, 27975}, // __builtin_HEXAGON_S2_lsr_i_vw
-      {Intrinsic::hexagon_S2_lsr_r_p, 28005}, // __builtin_HEXAGON_S2_lsr_r_p
-      {Intrinsic::hexagon_S2_lsr_r_p_acc, 28034}, // __builtin_HEXAGON_S2_lsr_r_p_acc
-      {Intrinsic::hexagon_S2_lsr_r_p_and, 28067}, // __builtin_HEXAGON_S2_lsr_r_p_and
-      {Intrinsic::hexagon_S2_lsr_r_p_nac, 28100}, // __builtin_HEXAGON_S2_lsr_r_p_nac
-      {Intrinsic::hexagon_S2_lsr_r_p_or, 28133}, // __builtin_HEXAGON_S2_lsr_r_p_or
-      {Intrinsic::hexagon_S2_lsr_r_p_xor, 28165}, // __builtin_HEXAGON_S2_lsr_r_p_xor
-      {Intrinsic::hexagon_S2_lsr_r_r, 28198}, // __builtin_HEXAGON_S2_lsr_r_r
-      {Intrinsic::hexagon_S2_lsr_r_r_acc, 28227}, // __builtin_HEXAGON_S2_lsr_r_r_acc
-      {Intrinsic::hexagon_S2_lsr_r_r_and, 28260}, // __builtin_HEXAGON_S2_lsr_r_r_and
-      {Intrinsic::hexagon_S2_lsr_r_r_nac, 28293}, // __builtin_HEXAGON_S2_lsr_r_r_nac
-      {Intrinsic::hexagon_S2_lsr_r_r_or, 28326}, // __builtin_HEXAGON_S2_lsr_r_r_or
-      {Intrinsic::hexagon_S2_lsr_r_vh, 28358}, // __builtin_HEXAGON_S2_lsr_r_vh
-      {Intrinsic::hexagon_S2_lsr_r_vw, 28388}, // __builtin_HEXAGON_S2_lsr_r_vw
-      {Intrinsic::hexagon_S2_mask, 28418}, // __builtin_HEXAGON_S2_mask
-      {Intrinsic::hexagon_S2_packhl, 28444}, // __builtin_HEXAGON_S2_packhl
-      {Intrinsic::hexagon_S2_parityp, 28472}, // __builtin_HEXAGON_S2_parityp
-      {Intrinsic::hexagon_S2_setbit_i, 28501}, // __builtin_HEXAGON_S2_setbit_i
-      {Intrinsic::hexagon_S2_setbit_r, 28531}, // __builtin_HEXAGON_S2_setbit_r
-      {Intrinsic::hexagon_S2_shuffeb, 28561}, // __builtin_HEXAGON_S2_shuffeb
-      {Intrinsic::hexagon_S2_shuffeh, 28590}, // __builtin_HEXAGON_S2_shuffeh
-      {Intrinsic::hexagon_S2_shuffob, 28619}, // __builtin_HEXAGON_S2_shuffob
-      {Intrinsic::hexagon_S2_shuffoh, 28648}, // __builtin_HEXAGON_S2_shuffoh
-      {Intrinsic::hexagon_S2_storew_locked, 28774}, // __builtin_HEXAGON_S2_storew_locked
-      {Intrinsic::hexagon_S2_svsathb, 28809}, // __builtin_HEXAGON_S2_svsathb
-      {Intrinsic::hexagon_S2_svsathub, 28838}, // __builtin_HEXAGON_S2_svsathub
-      {Intrinsic::hexagon_S2_tableidxb_goodsyntax, 28868}, // __builtin_HEXAGON_S2_tableidxb_goodsyntax
-      {Intrinsic::hexagon_S2_tableidxd_goodsyntax, 28910}, // __builtin_HEXAGON_S2_tableidxd_goodsyntax
-      {Intrinsic::hexagon_S2_tableidxh_goodsyntax, 28952}, // __builtin_HEXAGON_S2_tableidxh_goodsyntax
-      {Intrinsic::hexagon_S2_tableidxw_goodsyntax, 28994}, // __builtin_HEXAGON_S2_tableidxw_goodsyntax
-      {Intrinsic::hexagon_S2_togglebit_i, 29036}, // __builtin_HEXAGON_S2_togglebit_i
-      {Intrinsic::hexagon_S2_togglebit_r, 29069}, // __builtin_HEXAGON_S2_togglebit_r
-      {Intrinsic::hexagon_S2_tstbit_i, 29102}, // __builtin_HEXAGON_S2_tstbit_i
-      {Intrinsic::hexagon_S2_tstbit_r, 29132}, // __builtin_HEXAGON_S2_tstbit_r
-      {Intrinsic::hexagon_S2_valignib, 29162}, // __builtin_HEXAGON_S2_valignib
-      {Intrinsic::hexagon_S2_valignrb, 29192}, // __builtin_HEXAGON_S2_valignrb
-      {Intrinsic::hexagon_S2_vcnegh, 29222}, // __builtin_HEXAGON_S2_vcnegh
-      {Intrinsic::hexagon_S2_vcrotate, 29250}, // __builtin_HEXAGON_S2_vcrotate
-      {Intrinsic::hexagon_S2_vrcnegh, 29280}, // __builtin_HEXAGON_S2_vrcnegh
-      {Intrinsic::hexagon_S2_vrndpackwh, 29309}, // __builtin_HEXAGON_S2_vrndpackwh
-      {Intrinsic::hexagon_S2_vrndpackwhs, 29341}, // __builtin_HEXAGON_S2_vrndpackwhs
-      {Intrinsic::hexagon_S2_vsathb, 29374}, // __builtin_HEXAGON_S2_vsathb
-      {Intrinsic::hexagon_S2_vsathb_nopack, 29402}, // __builtin_HEXAGON_S2_vsathb_nopack
-      {Intrinsic::hexagon_S2_vsathub, 29437}, // __builtin_HEXAGON_S2_vsathub
-      {Intrinsic::hexagon_S2_vsathub_nopack, 29466}, // __builtin_HEXAGON_S2_vsathub_nopack
-      {Intrinsic::hexagon_S2_vsatwh, 29502}, // __builtin_HEXAGON_S2_vsatwh
-      {Intrinsic::hexagon_S2_vsatwh_nopack, 29530}, // __builtin_HEXAGON_S2_vsatwh_nopack
-      {Intrinsic::hexagon_S2_vsatwuh, 29565}, // __builtin_HEXAGON_S2_vsatwuh
-      {Intrinsic::hexagon_S2_vsatwuh_nopack, 29594}, // __builtin_HEXAGON_S2_vsatwuh_nopack
-      {Intrinsic::hexagon_S2_vsplatrb, 29630}, // __builtin_HEXAGON_S2_vsplatrb
-      {Intrinsic::hexagon_S2_vsplatrh, 29660}, // __builtin_HEXAGON_S2_vsplatrh
-      {Intrinsic::hexagon_S2_vspliceib, 29690}, // __builtin_HEXAGON_S2_vspliceib
-      {Intrinsic::hexagon_S2_vsplicerb, 29721}, // __builtin_HEXAGON_S2_vsplicerb
-      {Intrinsic::hexagon_S2_vsxtbh, 29752}, // __builtin_HEXAGON_S2_vsxtbh
-      {Intrinsic::hexagon_S2_vsxthw, 29780}, // __builtin_HEXAGON_S2_vsxthw
-      {Intrinsic::hexagon_S2_vtrunehb, 29808}, // __builtin_HEXAGON_S2_vtrunehb
-      {Intrinsic::hexagon_S2_vtrunewh, 29838}, // __builtin_HEXAGON_S2_vtrunewh
-      {Intrinsic::hexagon_S2_vtrunohb, 29868}, // __builtin_HEXAGON_S2_vtrunohb
-      {Intrinsic::hexagon_S2_vtrunowh, 29898}, // __builtin_HEXAGON_S2_vtrunowh
-      {Intrinsic::hexagon_S2_vzxtbh, 29928}, // __builtin_HEXAGON_S2_vzxtbh
-      {Intrinsic::hexagon_S2_vzxthw, 29956}, // __builtin_HEXAGON_S2_vzxthw
-      {Intrinsic::hexagon_S4_addaddi, 29984}, // __builtin_HEXAGON_S4_addaddi
-      {Intrinsic::hexagon_S4_addi_asl_ri, 30013}, // __builtin_HEXAGON_S4_addi_asl_ri
-      {Intrinsic::hexagon_S4_addi_lsr_ri, 30046}, // __builtin_HEXAGON_S4_addi_lsr_ri
-      {Intrinsic::hexagon_S4_andi_asl_ri, 30079}, // __builtin_HEXAGON_S4_andi_asl_ri
-      {Intrinsic::hexagon_S4_andi_lsr_ri, 30112}, // __builtin_HEXAGON_S4_andi_lsr_ri
-      {Intrinsic::hexagon_S4_clbaddi, 30145}, // __builtin_HEXAGON_S4_clbaddi
-      {Intrinsic::hexagon_S4_clbpaddi, 30174}, // __builtin_HEXAGON_S4_clbpaddi
-      {Intrinsic::hexagon_S4_clbpnorm, 30204}, // __builtin_HEXAGON_S4_clbpnorm
-      {Intrinsic::hexagon_S4_extract, 30234}, // __builtin_HEXAGON_S4_extract
-      {Intrinsic::hexagon_S4_extract_rp, 30263}, // __builtin_HEXAGON_S4_extract_rp
-      {Intrinsic::hexagon_S4_extractp, 30295}, // __builtin_HEXAGON_S4_extractp
-      {Intrinsic::hexagon_S4_extractp_rp, 30325}, // __builtin_HEXAGON_S4_extractp_rp
-      {Intrinsic::hexagon_S4_lsli, 30358}, // __builtin_HEXAGON_S4_lsli
-      {Intrinsic::hexagon_S4_ntstbit_i, 30384}, // __builtin_HEXAGON_S4_ntstbit_i
-      {Intrinsic::hexagon_S4_ntstbit_r, 30415}, // __builtin_HEXAGON_S4_ntstbit_r
-      {Intrinsic::hexagon_S4_or_andi, 30446}, // __builtin_HEXAGON_S4_or_andi
-      {Intrinsic::hexagon_S4_or_andix, 30475}, // __builtin_HEXAGON_S4_or_andix
-      {Intrinsic::hexagon_S4_or_ori, 30505}, // __builtin_HEXAGON_S4_or_ori
-      {Intrinsic::hexagon_S4_ori_asl_ri, 30533}, // __builtin_HEXAGON_S4_ori_asl_ri
-      {Intrinsic::hexagon_S4_ori_lsr_ri, 30565}, // __builtin_HEXAGON_S4_ori_lsr_ri
-      {Intrinsic::hexagon_S4_parity, 30597}, // __builtin_HEXAGON_S4_parity
-      {Intrinsic::hexagon_S4_stored_locked, 30625}, // __builtin_HEXAGON_S4_stored_locked
-      {Intrinsic::hexagon_S4_subaddi, 30660}, // __builtin_HEXAGON_S4_subaddi
-      {Intrinsic::hexagon_S4_subi_asl_ri, 30689}, // __builtin_HEXAGON_S4_subi_asl_ri
-      {Intrinsic::hexagon_S4_subi_lsr_ri, 30722}, // __builtin_HEXAGON_S4_subi_lsr_ri
-      {Intrinsic::hexagon_S4_vrcrotate, 30755}, // __builtin_HEXAGON_S4_vrcrotate
-      {Intrinsic::hexagon_S4_vrcrotate_acc, 30786}, // __builtin_HEXAGON_S4_vrcrotate_acc
-      {Intrinsic::hexagon_S4_vxaddsubh, 30821}, // __builtin_HEXAGON_S4_vxaddsubh
-      {Intrinsic::hexagon_S4_vxaddsubhr, 30852}, // __builtin_HEXAGON_S4_vxaddsubhr
-      {Intrinsic::hexagon_S4_vxaddsubw, 30884}, // __builtin_HEXAGON_S4_vxaddsubw
-      {Intrinsic::hexagon_S4_vxsubaddh, 30915}, // __builtin_HEXAGON_S4_vxsubaddh
-      {Intrinsic::hexagon_S4_vxsubaddhr, 30946}, // __builtin_HEXAGON_S4_vxsubaddhr
-      {Intrinsic::hexagon_S4_vxsubaddw, 30978}, // __builtin_HEXAGON_S4_vxsubaddw
-      {Intrinsic::hexagon_S5_asrhub_rnd_sat_goodsyntax, 31009}, // __builtin_HEXAGON_S5_asrhub_rnd_sat_goodsyntax
-      {Intrinsic::hexagon_S5_asrhub_sat, 31056}, // __builtin_HEXAGON_S5_asrhub_sat
-      {Intrinsic::hexagon_S5_popcountp, 31088}, // __builtin_HEXAGON_S5_popcountp
-      {Intrinsic::hexagon_S5_vasrhrnd_goodsyntax, 31119}, // __builtin_HEXAGON_S5_vasrhrnd_goodsyntax
-      {Intrinsic::hexagon_S6_rol_i_p, 31160}, // __builtin_HEXAGON_S6_rol_i_p
-      {Intrinsic::hexagon_S6_rol_i_p_acc, 31189}, // __builtin_HEXAGON_S6_rol_i_p_acc
-      {Intrinsic::hexagon_S6_rol_i_p_and, 31222}, // __builtin_HEXAGON_S6_rol_i_p_and
-      {Intrinsic::hexagon_S6_rol_i_p_nac, 31255}, // __builtin_HEXAGON_S6_rol_i_p_nac
-      {Intrinsic::hexagon_S6_rol_i_p_or, 31288}, // __builtin_HEXAGON_S6_rol_i_p_or
-      {Intrinsic::hexagon_S6_rol_i_p_xacc, 31320}, // __builtin_HEXAGON_S6_rol_i_p_xacc
-      {Intrinsic::hexagon_S6_rol_i_r, 31354}, // __builtin_HEXAGON_S6_rol_i_r
-      {Intrinsic::hexagon_S6_rol_i_r_acc, 31383}, // __builtin_HEXAGON_S6_rol_i_r_acc
-      {Intrinsic::hexagon_S6_rol_i_r_and, 31416}, // __builtin_HEXAGON_S6_rol_i_r_and
-      {Intrinsic::hexagon_S6_rol_i_r_nac, 31449}, // __builtin_HEXAGON_S6_rol_i_r_nac
-      {Intrinsic::hexagon_S6_rol_i_r_or, 31482}, // __builtin_HEXAGON_S6_rol_i_r_or
-      {Intrinsic::hexagon_S6_rol_i_r_xacc, 31514}, // __builtin_HEXAGON_S6_rol_i_r_xacc
-      {Intrinsic::hexagon_S6_vsplatrbp, 31548}, // __builtin_HEXAGON_S6_vsplatrbp
-      {Intrinsic::hexagon_S6_vtrunehb_ppp, 31579}, // __builtin_HEXAGON_S6_vtrunehb_ppp
-      {Intrinsic::hexagon_S6_vtrunohb_ppp, 31613}, // __builtin_HEXAGON_S6_vtrunohb_ppp
-      {Intrinsic::hexagon_V6_extractw, 31647}, // __builtin_HEXAGON_V6_extractw
-      {Intrinsic::hexagon_V6_extractw_128B, 31677}, // __builtin_HEXAGON_V6_extractw_128B
-      {Intrinsic::hexagon_V6_hi, 31712}, // __builtin_HEXAGON_V6_hi
-      {Intrinsic::hexagon_V6_hi_128B, 31736}, // __builtin_HEXAGON_V6_hi_128B
-      {Intrinsic::hexagon_V6_ld0, 31765}, // __builtin_HEXAGON_V6_ld0
-      {Intrinsic::hexagon_V6_ld0_128B, 31790}, // __builtin_HEXAGON_V6_ld0_128B
-      {Intrinsic::hexagon_V6_ldcnp0, 31820}, // __builtin_HEXAGON_V6_ldcnp0
-      {Intrinsic::hexagon_V6_ldcnp0_128B, 31848}, // __builtin_HEXAGON_V6_ldcnp0_128B
-      {Intrinsic::hexagon_V6_ldcnpnt0, 31881}, // __builtin_HEXAGON_V6_ldcnpnt0
-      {Intrinsic::hexagon_V6_ldcnpnt0_128B, 31911}, // __builtin_HEXAGON_V6_ldcnpnt0_128B
-      {Intrinsic::hexagon_V6_ldcp0, 31946}, // __builtin_HEXAGON_V6_ldcp0
-      {Intrinsic::hexagon_V6_ldcp0_128B, 31973}, // __builtin_HEXAGON_V6_ldcp0_128B
-      {Intrinsic::hexagon_V6_ldcpnt0, 32005}, // __builtin_HEXAGON_V6_ldcpnt0
-      {Intrinsic::hexagon_V6_ldcpnt0_128B, 32034}, // __builtin_HEXAGON_V6_ldcpnt0_128B
-      {Intrinsic::hexagon_V6_ldnp0, 32068}, // __builtin_HEXAGON_V6_ldnp0
-      {Intrinsic::hexagon_V6_ldnp0_128B, 32095}, // __builtin_HEXAGON_V6_ldnp0_128B
-      {Intrinsic::hexagon_V6_ldnpnt0, 32127}, // __builtin_HEXAGON_V6_ldnpnt0
-      {Intrinsic::hexagon_V6_ldnpnt0_128B, 32156}, // __builtin_HEXAGON_V6_ldnpnt0_128B
-      {Intrinsic::hexagon_V6_ldnt0, 32190}, // __builtin_HEXAGON_V6_ldnt0
-      {Intrinsic::hexagon_V6_ldnt0_128B, 32217}, // __builtin_HEXAGON_V6_ldnt0_128B
-      {Intrinsic::hexagon_V6_ldntnt0, 32249}, // __builtin_HEXAGON_V6_ldntnt0
-      {Intrinsic::hexagon_V6_ldp0, 32278}, // __builtin_HEXAGON_V6_ldp0
-      {Intrinsic::hexagon_V6_ldp0_128B, 32304}, // __builtin_HEXAGON_V6_ldp0_128B
-      {Intrinsic::hexagon_V6_ldpnt0, 32335}, // __builtin_HEXAGON_V6_ldpnt0
-      {Intrinsic::hexagon_V6_ldpnt0_128B, 32363}, // __builtin_HEXAGON_V6_ldpnt0_128B
-      {Intrinsic::hexagon_V6_ldtnp0, 32396}, // __builtin_HEXAGON_V6_ldtnp0
-      {Intrinsic::hexagon_V6_ldtnp0_128B, 32424}, // __builtin_HEXAGON_V6_ldtnp0_128B
-      {Intrinsic::hexagon_V6_ldtnpnt0, 32457}, // __builtin_HEXAGON_V6_ldtnpnt0
-      {Intrinsic::hexagon_V6_ldtnpnt0_128B, 32487}, // __builtin_HEXAGON_V6_ldtnpnt0_128B
-      {Intrinsic::hexagon_V6_ldtp0, 32522}, // __builtin_HEXAGON_V6_ldtp0
-      {Intrinsic::hexagon_V6_ldtp0_128B, 32549}, // __builtin_HEXAGON_V6_ldtp0_128B
-      {Intrinsic::hexagon_V6_ldtpnt0, 32581}, // __builtin_HEXAGON_V6_ldtpnt0
-      {Intrinsic::hexagon_V6_ldtpnt0_128B, 32610}, // __builtin_HEXAGON_V6_ldtpnt0_128B
-      {Intrinsic::hexagon_V6_ldu0, 32644}, // __builtin_HEXAGON_V6_ldu0
-      {Intrinsic::hexagon_V6_ldu0_128B, 32670}, // __builtin_HEXAGON_V6_ldu0_128B
-      {Intrinsic::hexagon_V6_lo, 32701}, // __builtin_HEXAGON_V6_lo
-      {Intrinsic::hexagon_V6_lo_128B, 32725}, // __builtin_HEXAGON_V6_lo_128B
-      {Intrinsic::hexagon_V6_lvsplatb, 32754}, // __builtin_HEXAGON_V6_lvsplatb
-      {Intrinsic::hexagon_V6_lvsplatb_128B, 32784}, // __builtin_HEXAGON_V6_lvsplatb_128B
-      {Intrinsic::hexagon_V6_lvsplath, 32819}, // __builtin_HEXAGON_V6_lvsplath
-      {Intrinsic::hexagon_V6_lvsplath_128B, 32849}, // __builtin_HEXAGON_V6_lvsplath_128B
-      {Intrinsic::hexagon_V6_lvsplatw, 32884}, // __builtin_HEXAGON_V6_lvsplatw
-      {Intrinsic::hexagon_V6_lvsplatw_128B, 32914}, // __builtin_HEXAGON_V6_lvsplatw_128B
-      {Intrinsic::hexagon_V6_pred_and, 32949}, // __builtin_HEXAGON_V6_pred_and
-      {Intrinsic::hexagon_V6_pred_and_128B, 32979}, // __builtin_HEXAGON_V6_pred_and_128B
-      {Intrinsic::hexagon_V6_pred_and_n, 33014}, // __builtin_HEXAGON_V6_pred_and_n
-      {Intrinsic::hexagon_V6_pred_and_n_128B, 33046}, // __builtin_HEXAGON_V6_pred_and_n_128B
-      {Intrinsic::hexagon_V6_pred_not, 33083}, // __builtin_HEXAGON_V6_pred_not
-      {Intrinsic::hexagon_V6_pred_not_128B, 33113}, // __builtin_HEXAGON_V6_pred_not_128B
-      {Intrinsic::hexagon_V6_pred_or, 33148}, // __builtin_HEXAGON_V6_pred_or
-      {Intrinsic::hexagon_V6_pred_or_128B, 33177}, // __builtin_HEXAGON_V6_pred_or_128B
-      {Intrinsic::hexagon_V6_pred_or_n, 33211}, // __builtin_HEXAGON_V6_pred_or_n
-      {Intrinsic::hexagon_V6_pred_or_n_128B, 33242}, // __builtin_HEXAGON_V6_pred_or_n_128B
-      {Intrinsic::hexagon_V6_pred_scalar2, 33278}, // __builtin_HEXAGON_V6_pred_scalar2
-      {Intrinsic::hexagon_V6_pred_scalar2_128B, 33312}, // __builtin_HEXAGON_V6_pred_scalar2_128B
-      {Intrinsic::hexagon_V6_pred_scalar2v2, 33351}, // __builtin_HEXAGON_V6_pred_scalar2v2
-      {Intrinsic::hexagon_V6_pred_scalar2v2_128B, 33387}, // __builtin_HEXAGON_V6_pred_scalar2v2_128B
-      {Intrinsic::hexagon_V6_pred_xor, 33428}, // __builtin_HEXAGON_V6_pred_xor
-      {Intrinsic::hexagon_V6_pred_xor_128B, 33458}, // __builtin_HEXAGON_V6_pred_xor_128B
-      {Intrinsic::hexagon_V6_shuffeqh, 33493}, // __builtin_HEXAGON_V6_shuffeqh
-      {Intrinsic::hexagon_V6_shuffeqh_128B, 33523}, // __builtin_HEXAGON_V6_shuffeqh_128B
-      {Intrinsic::hexagon_V6_shuffeqw, 33558}, // __builtin_HEXAGON_V6_shuffeqw
-      {Intrinsic::hexagon_V6_shuffeqw_128B, 33588}, // __builtin_HEXAGON_V6_shuffeqw_128B
-      {Intrinsic::hexagon_V6_vS32b_nqpred_ai, 33623}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai
-      {Intrinsic::hexagon_V6_vS32b_nqpred_ai_128B, 33660}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai_128B
-      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai, 33702}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai
-      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai_128B, 33742}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai_128B
-      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai, 33787}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai
-      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai_128B, 33826}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai_128B
-      {Intrinsic::hexagon_V6_vS32b_qpred_ai, 33870}, // __builtin_HEXAGON_V6_vS32b_qpred_ai
-      {Intrinsic::hexagon_V6_vS32b_qpred_ai_128B, 33906}, // __builtin_HEXAGON_V6_vS32b_qpred_ai_128B
-      {Intrinsic::hexagon_V6_vabsb, 33947}, // __builtin_HEXAGON_V6_vabsb
-      {Intrinsic::hexagon_V6_vabsb_128B, 33974}, // __builtin_HEXAGON_V6_vabsb_128B
-      {Intrinsic::hexagon_V6_vabsb_sat, 34006}, // __builtin_HEXAGON_V6_vabsb_sat
-      {Intrinsic::hexagon_V6_vabsb_sat_128B, 34037}, // __builtin_HEXAGON_V6_vabsb_sat_128B
-      {Intrinsic::hexagon_V6_vabsdiffh, 34073}, // __builtin_HEXAGON_V6_vabsdiffh
-      {Intrinsic::hexagon_V6_vabsdiffh_128B, 34104}, // __builtin_HEXAGON_V6_vabsdiffh_128B
-      {Intrinsic::hexagon_V6_vabsdiffub, 34140}, // __builtin_HEXAGON_V6_vabsdiffub
-      {Intrinsic::hexagon_V6_vabsdiffub_128B, 34172}, // __builtin_HEXAGON_V6_vabsdiffub_128B
-      {Intrinsic::hexagon_V6_vabsdiffuh, 34209}, // __builtin_HEXAGON_V6_vabsdiffuh
-      {Intrinsic::hexagon_V6_vabsdiffuh_128B, 34241}, // __builtin_HEXAGON_V6_vabsdiffuh_128B
-      {Intrinsic::hexagon_V6_vabsdiffw, 34278}, // __builtin_HEXAGON_V6_vabsdiffw
-      {Intrinsic::hexagon_V6_vabsdiffw_128B, 34309}, // __builtin_HEXAGON_V6_vabsdiffw_128B
-      {Intrinsic::hexagon_V6_vabsh, 34345}, // __builtin_HEXAGON_V6_vabsh
-      {Intrinsic::hexagon_V6_vabsh_128B, 34372}, // __builtin_HEXAGON_V6_vabsh_128B
-      {Intrinsic::hexagon_V6_vabsh_sat, 34404}, // __builtin_HEXAGON_V6_vabsh_sat
-      {Intrinsic::hexagon_V6_vabsh_sat_128B, 34435}, // __builtin_HEXAGON_V6_vabsh_sat_128B
-      {Intrinsic::hexagon_V6_vabsw, 34471}, // __builtin_HEXAGON_V6_vabsw
-      {Intrinsic::hexagon_V6_vabsw_128B, 34498}, // __builtin_HEXAGON_V6_vabsw_128B
-      {Intrinsic::hexagon_V6_vabsw_sat, 34530}, // __builtin_HEXAGON_V6_vabsw_sat
-      {Intrinsic::hexagon_V6_vabsw_sat_128B, 34561}, // __builtin_HEXAGON_V6_vabsw_sat_128B
-      {Intrinsic::hexagon_V6_vaddb, 34597}, // __builtin_HEXAGON_V6_vaddb
-      {Intrinsic::hexagon_V6_vaddb_128B, 34624}, // __builtin_HEXAGON_V6_vaddb_128B
-      {Intrinsic::hexagon_V6_vaddb_dv, 34656}, // __builtin_HEXAGON_V6_vaddb_dv
-      {Intrinsic::hexagon_V6_vaddb_dv_128B, 34686}, // __builtin_HEXAGON_V6_vaddb_dv_128B
-      {Intrinsic::hexagon_V6_vaddbnq, 34721}, // __builtin_HEXAGON_V6_vaddbnq
-      {Intrinsic::hexagon_V6_vaddbnq_128B, 34750}, // __builtin_HEXAGON_V6_vaddbnq_128B
-      {Intrinsic::hexagon_V6_vaddbq, 34784}, // __builtin_HEXAGON_V6_vaddbq
-      {Intrinsic::hexagon_V6_vaddbq_128B, 34812}, // __builtin_HEXAGON_V6_vaddbq_128B
-      {Intrinsic::hexagon_V6_vaddbsat, 34845}, // __builtin_HEXAGON_V6_vaddbsat
-      {Intrinsic::hexagon_V6_vaddbsat_128B, 34875}, // __builtin_HEXAGON_V6_vaddbsat_128B
-      {Intrinsic::hexagon_V6_vaddbsat_dv, 34910}, // __builtin_HEXAGON_V6_vaddbsat_dv
-      {Intrinsic::hexagon_V6_vaddbsat_dv_128B, 34943}, // __builtin_HEXAGON_V6_vaddbsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddcarrysat, 34981}, // __builtin_HEXAGON_V6_vaddcarrysat
-      {Intrinsic::hexagon_V6_vaddcarrysat_128B, 35015}, // __builtin_HEXAGON_V6_vaddcarrysat_128B
-      {Intrinsic::hexagon_V6_vaddclbh, 35054}, // __builtin_HEXAGON_V6_vaddclbh
-      {Intrinsic::hexagon_V6_vaddclbh_128B, 35084}, // __builtin_HEXAGON_V6_vaddclbh_128B
-      {Intrinsic::hexagon_V6_vaddclbw, 35119}, // __builtin_HEXAGON_V6_vaddclbw
-      {Intrinsic::hexagon_V6_vaddclbw_128B, 35149}, // __builtin_HEXAGON_V6_vaddclbw_128B
-      {Intrinsic::hexagon_V6_vaddh, 35184}, // __builtin_HEXAGON_V6_vaddh
-      {Intrinsic::hexagon_V6_vaddh_128B, 35211}, // __builtin_HEXAGON_V6_vaddh_128B
-      {Intrinsic::hexagon_V6_vaddh_dv, 35243}, // __builtin_HEXAGON_V6_vaddh_dv
-      {Intrinsic::hexagon_V6_vaddh_dv_128B, 35273}, // __builtin_HEXAGON_V6_vaddh_dv_128B
-      {Intrinsic::hexagon_V6_vaddhnq, 35308}, // __builtin_HEXAGON_V6_vaddhnq
-      {Intrinsic::hexagon_V6_vaddhnq_128B, 35337}, // __builtin_HEXAGON_V6_vaddhnq_128B
-      {Intrinsic::hexagon_V6_vaddhq, 35371}, // __builtin_HEXAGON_V6_vaddhq
-      {Intrinsic::hexagon_V6_vaddhq_128B, 35399}, // __builtin_HEXAGON_V6_vaddhq_128B
-      {Intrinsic::hexagon_V6_vaddhsat, 35432}, // __builtin_HEXAGON_V6_vaddhsat
-      {Intrinsic::hexagon_V6_vaddhsat_128B, 35462}, // __builtin_HEXAGON_V6_vaddhsat_128B
-      {Intrinsic::hexagon_V6_vaddhsat_dv, 35497}, // __builtin_HEXAGON_V6_vaddhsat_dv
-      {Intrinsic::hexagon_V6_vaddhsat_dv_128B, 35530}, // __builtin_HEXAGON_V6_vaddhsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddhw, 35568}, // __builtin_HEXAGON_V6_vaddhw
-      {Intrinsic::hexagon_V6_vaddhw_128B, 35596}, // __builtin_HEXAGON_V6_vaddhw_128B
-      {Intrinsic::hexagon_V6_vaddhw_acc, 35629}, // __builtin_HEXAGON_V6_vaddhw_acc
-      {Intrinsic::hexagon_V6_vaddhw_acc_128B, 35661}, // __builtin_HEXAGON_V6_vaddhw_acc_128B
-      {Intrinsic::hexagon_V6_vaddubh, 35698}, // __builtin_HEXAGON_V6_vaddubh
-      {Intrinsic::hexagon_V6_vaddubh_128B, 35727}, // __builtin_HEXAGON_V6_vaddubh_128B
-      {Intrinsic::hexagon_V6_vaddubh_acc, 35761}, // __builtin_HEXAGON_V6_vaddubh_acc
-      {Intrinsic::hexagon_V6_vaddubh_acc_128B, 35794}, // __builtin_HEXAGON_V6_vaddubh_acc_128B
-      {Intrinsic::hexagon_V6_vaddubsat, 35832}, // __builtin_HEXAGON_V6_vaddubsat
-      {Intrinsic::hexagon_V6_vaddubsat_128B, 35863}, // __builtin_HEXAGON_V6_vaddubsat_128B
-      {Intrinsic::hexagon_V6_vaddubsat_dv, 35899}, // __builtin_HEXAGON_V6_vaddubsat_dv
-      {Intrinsic::hexagon_V6_vaddubsat_dv_128B, 35933}, // __builtin_HEXAGON_V6_vaddubsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddububb_sat, 35972}, // __builtin_HEXAGON_V6_vaddububb_sat
-      {Intrinsic::hexagon_V6_vaddububb_sat_128B, 36007}, // __builtin_HEXAGON_V6_vaddububb_sat_128B
-      {Intrinsic::hexagon_V6_vadduhsat, 36047}, // __builtin_HEXAGON_V6_vadduhsat
-      {Intrinsic::hexagon_V6_vadduhsat_128B, 36078}, // __builtin_HEXAGON_V6_vadduhsat_128B
-      {Intrinsic::hexagon_V6_vadduhsat_dv, 36114}, // __builtin_HEXAGON_V6_vadduhsat_dv
-      {Intrinsic::hexagon_V6_vadduhsat_dv_128B, 36148}, // __builtin_HEXAGON_V6_vadduhsat_dv_128B
-      {Intrinsic::hexagon_V6_vadduhw, 36187}, // __builtin_HEXAGON_V6_vadduhw
-      {Intrinsic::hexagon_V6_vadduhw_128B, 36216}, // __builtin_HEXAGON_V6_vadduhw_128B
-      {Intrinsic::hexagon_V6_vadduhw_acc, 36250}, // __builtin_HEXAGON_V6_vadduhw_acc
-      {Intrinsic::hexagon_V6_vadduhw_acc_128B, 36283}, // __builtin_HEXAGON_V6_vadduhw_acc_128B
-      {Intrinsic::hexagon_V6_vadduwsat, 36321}, // __builtin_HEXAGON_V6_vadduwsat
-      {Intrinsic::hexagon_V6_vadduwsat_128B, 36352}, // __builtin_HEXAGON_V6_vadduwsat_128B
-      {Intrinsic::hexagon_V6_vadduwsat_dv, 36388}, // __builtin_HEXAGON_V6_vadduwsat_dv
-      {Intrinsic::hexagon_V6_vadduwsat_dv_128B, 36422}, // __builtin_HEXAGON_V6_vadduwsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddw, 36461}, // __builtin_HEXAGON_V6_vaddw
-      {Intrinsic::hexagon_V6_vaddw_128B, 36488}, // __builtin_HEXAGON_V6_vaddw_128B
-      {Intrinsic::hexagon_V6_vaddw_dv, 36520}, // __builtin_HEXAGON_V6_vaddw_dv
-      {Intrinsic::hexagon_V6_vaddw_dv_128B, 36550}, // __builtin_HEXAGON_V6_vaddw_dv_128B
-      {Intrinsic::hexagon_V6_vaddwnq, 36585}, // __builtin_HEXAGON_V6_vaddwnq
-      {Intrinsic::hexagon_V6_vaddwnq_128B, 36614}, // __builtin_HEXAGON_V6_vaddwnq_128B
-      {Intrinsic::hexagon_V6_vaddwq, 36648}, // __builtin_HEXAGON_V6_vaddwq
-      {Intrinsic::hexagon_V6_vaddwq_128B, 36676}, // __builtin_HEXAGON_V6_vaddwq_128B
-      {Intrinsic::hexagon_V6_vaddwsat, 36709}, // __builtin_HEXAGON_V6_vaddwsat
-      {Intrinsic::hexagon_V6_vaddwsat_128B, 36739}, // __builtin_HEXAGON_V6_vaddwsat_128B
-      {Intrinsic::hexagon_V6_vaddwsat_dv, 36774}, // __builtin_HEXAGON_V6_vaddwsat_dv
-      {Intrinsic::hexagon_V6_vaddwsat_dv_128B, 36807}, // __builtin_HEXAGON_V6_vaddwsat_dv_128B
-      {Intrinsic::hexagon_V6_valignb, 36845}, // __builtin_HEXAGON_V6_valignb
-      {Intrinsic::hexagon_V6_valignb_128B, 36874}, // __builtin_HEXAGON_V6_valignb_128B
-      {Intrinsic::hexagon_V6_valignbi, 36908}, // __builtin_HEXAGON_V6_valignbi
-      {Intrinsic::hexagon_V6_valignbi_128B, 36938}, // __builtin_HEXAGON_V6_valignbi_128B
-      {Intrinsic::hexagon_V6_vand, 36973}, // __builtin_HEXAGON_V6_vand
-      {Intrinsic::hexagon_V6_vand_128B, 36999}, // __builtin_HEXAGON_V6_vand_128B
-      {Intrinsic::hexagon_V6_vandnqrt, 37030}, // __builtin_HEXAGON_V6_vandnqrt
-      {Intrinsic::hexagon_V6_vandnqrt_128B, 37060}, // __builtin_HEXAGON_V6_vandnqrt_128B
-      {Intrinsic::hexagon_V6_vandnqrt_acc, 37095}, // __builtin_HEXAGON_V6_vandnqrt_acc
-      {Intrinsic::hexagon_V6_vandnqrt_acc_128B, 37129}, // __builtin_HEXAGON_V6_vandnqrt_acc_128B
-      {Intrinsic::hexagon_V6_vandqrt, 37168}, // __builtin_HEXAGON_V6_vandqrt
-      {Intrinsic::hexagon_V6_vandqrt_128B, 37197}, // __builtin_HEXAGON_V6_vandqrt_128B
-      {Intrinsic::hexagon_V6_vandqrt_acc, 37231}, // __builtin_HEXAGON_V6_vandqrt_acc
-      {Intrinsic::hexagon_V6_vandqrt_acc_128B, 37264}, // __builtin_HEXAGON_V6_vandqrt_acc_128B
-      {Intrinsic::hexagon_V6_vandvnqv, 37302}, // __builtin_HEXAGON_V6_vandvnqv
-      {Intrinsic::hexagon_V6_vandvnqv_128B, 37332}, // __builtin_HEXAGON_V6_vandvnqv_128B
-      {Intrinsic::hexagon_V6_vandvqv, 37367}, // __builtin_HEXAGON_V6_vandvqv
-      {Intrinsic::hexagon_V6_vandvqv_128B, 37396}, // __builtin_HEXAGON_V6_vandvqv_128B
-      {Intrinsic::hexagon_V6_vandvrt, 37430}, // __builtin_HEXAGON_V6_vandvrt
-      {Intrinsic::hexagon_V6_vandvrt_128B, 37459}, // __builtin_HEXAGON_V6_vandvrt_128B
-      {Intrinsic::hexagon_V6_vandvrt_acc, 37493}, // __builtin_HEXAGON_V6_vandvrt_acc
-      {Intrinsic::hexagon_V6_vandvrt_acc_128B, 37526}, // __builtin_HEXAGON_V6_vandvrt_acc_128B
-      {Intrinsic::hexagon_V6_vaslh, 37564}, // __builtin_HEXAGON_V6_vaslh
-      {Intrinsic::hexagon_V6_vaslh_128B, 37591}, // __builtin_HEXAGON_V6_vaslh_128B
-      {Intrinsic::hexagon_V6_vaslh_acc, 37623}, // __builtin_HEXAGON_V6_vaslh_acc
-      {Intrinsic::hexagon_V6_vaslh_acc_128B, 37654}, // __builtin_HEXAGON_V6_vaslh_acc_128B
-      {Intrinsic::hexagon_V6_vaslhv, 37690}, // __builtin_HEXAGON_V6_vaslhv
-      {Intrinsic::hexagon_V6_vaslhv_128B, 37718}, // __builtin_HEXAGON_V6_vaslhv_128B
-      {Intrinsic::hexagon_V6_vaslw, 37751}, // __builtin_HEXAGON_V6_vaslw
-      {Intrinsic::hexagon_V6_vaslw_128B, 37778}, // __builtin_HEXAGON_V6_vaslw_128B
-      {Intrinsic::hexagon_V6_vaslw_acc, 37810}, // __builtin_HEXAGON_V6_vaslw_acc
-      {Intrinsic::hexagon_V6_vaslw_acc_128B, 37841}, // __builtin_HEXAGON_V6_vaslw_acc_128B
-      {Intrinsic::hexagon_V6_vaslwv, 37877}, // __builtin_HEXAGON_V6_vaslwv
-      {Intrinsic::hexagon_V6_vaslwv_128B, 37905}, // __builtin_HEXAGON_V6_vaslwv_128B
-      {Intrinsic::hexagon_V6_vasr_into, 37938}, // __builtin_HEXAGON_V6_vasr_into
-      {Intrinsic::hexagon_V6_vasr_into_128B, 37969}, // __builtin_HEXAGON_V6_vasr_into_128B
-      {Intrinsic::hexagon_V6_vasrh, 38005}, // __builtin_HEXAGON_V6_vasrh
-      {Intrinsic::hexagon_V6_vasrh_128B, 38032}, // __builtin_HEXAGON_V6_vasrh_128B
-      {Intrinsic::hexagon_V6_vasrh_acc, 38064}, // __builtin_HEXAGON_V6_vasrh_acc
-      {Intrinsic::hexagon_V6_vasrh_acc_128B, 38095}, // __builtin_HEXAGON_V6_vasrh_acc_128B
-      {Intrinsic::hexagon_V6_vasrhbrndsat, 38131}, // __builtin_HEXAGON_V6_vasrhbrndsat
-      {Intrinsic::hexagon_V6_vasrhbrndsat_128B, 38165}, // __builtin_HEXAGON_V6_vasrhbrndsat_128B
-      {Intrinsic::hexagon_V6_vasrhbsat, 38204}, // __builtin_HEXAGON_V6_vasrhbsat
-      {Intrinsic::hexagon_V6_vasrhbsat_128B, 38235}, // __builtin_HEXAGON_V6_vasrhbsat_128B
-      {Intrinsic::hexagon_V6_vasrhubrndsat, 38271}, // __builtin_HEXAGON_V6_vasrhubrndsat
-      {Intrinsic::hexagon_V6_vasrhubrndsat_128B, 38306}, // __builtin_HEXAGON_V6_vasrhubrndsat_128B
-      {Intrinsic::hexagon_V6_vasrhubsat, 38346}, // __builtin_HEXAGON_V6_vasrhubsat
-      {Intrinsic::hexagon_V6_vasrhubsat_128B, 38378}, // __builtin_HEXAGON_V6_vasrhubsat_128B
-      {Intrinsic::hexagon_V6_vasrhv, 38415}, // __builtin_HEXAGON_V6_vasrhv
-      {Intrinsic::hexagon_V6_vasrhv_128B, 38443}, // __builtin_HEXAGON_V6_vasrhv_128B
-      {Intrinsic::hexagon_V6_vasruhubrndsat, 38476}, // __builtin_HEXAGON_V6_vasruhubrndsat
-      {Intrinsic::hexagon_V6_vasruhubrndsat_128B, 38512}, // __builtin_HEXAGON_V6_vasruhubrndsat_128B
-      {Intrinsic::hexagon_V6_vasruhubsat, 38553}, // __builtin_HEXAGON_V6_vasruhubsat
-      {Intrinsic::hexagon_V6_vasruhubsat_128B, 38586}, // __builtin_HEXAGON_V6_vasruhubsat_128B
-      {Intrinsic::hexagon_V6_vasruwuhrndsat, 38624}, // __builtin_HEXAGON_V6_vasruwuhrndsat
-      {Intrinsic::hexagon_V6_vasruwuhrndsat_128B, 38660}, // __builtin_HEXAGON_V6_vasruwuhrndsat_128B
-      {Intrinsic::hexagon_V6_vasruwuhsat, 38701}, // __builtin_HEXAGON_V6_vasruwuhsat
-      {Intrinsic::hexagon_V6_vasruwuhsat_128B, 38734}, // __builtin_HEXAGON_V6_vasruwuhsat_128B
-      {Intrinsic::hexagon_V6_vasrw, 38772}, // __builtin_HEXAGON_V6_vasrw
-      {Intrinsic::hexagon_V6_vasrw_128B, 38799}, // __builtin_HEXAGON_V6_vasrw_128B
-      {Intrinsic::hexagon_V6_vasrw_acc, 38831}, // __builtin_HEXAGON_V6_vasrw_acc
-      {Intrinsic::hexagon_V6_vasrw_acc_128B, 38862}, // __builtin_HEXAGON_V6_vasrw_acc_128B
-      {Intrinsic::hexagon_V6_vasrwh, 38898}, // __builtin_HEXAGON_V6_vasrwh
-      {Intrinsic::hexagon_V6_vasrwh_128B, 38926}, // __builtin_HEXAGON_V6_vasrwh_128B
-      {Intrinsic::hexagon_V6_vasrwhrndsat, 38959}, // __builtin_HEXAGON_V6_vasrwhrndsat
-      {Intrinsic::hexagon_V6_vasrwhrndsat_128B, 38993}, // __builtin_HEXAGON_V6_vasrwhrndsat_128B
-      {Intrinsic::hexagon_V6_vasrwhsat, 39032}, // __builtin_HEXAGON_V6_vasrwhsat
-      {Intrinsic::hexagon_V6_vasrwhsat_128B, 39063}, // __builtin_HEXAGON_V6_vasrwhsat_128B
-      {Intrinsic::hexagon_V6_vasrwuhrndsat, 39099}, // __builtin_HEXAGON_V6_vasrwuhrndsat
-      {Intrinsic::hexagon_V6_vasrwuhrndsat_128B, 39134}, // __builtin_HEXAGON_V6_vasrwuhrndsat_128B
-      {Intrinsic::hexagon_V6_vasrwuhsat, 39174}, // __builtin_HEXAGON_V6_vasrwuhsat
-      {Intrinsic::hexagon_V6_vasrwuhsat_128B, 39206}, // __builtin_HEXAGON_V6_vasrwuhsat_128B
-      {Intrinsic::hexagon_V6_vasrwv, 39243}, // __builtin_HEXAGON_V6_vasrwv
-      {Intrinsic::hexagon_V6_vasrwv_128B, 39271}, // __builtin_HEXAGON_V6_vasrwv_128B
-      {Intrinsic::hexagon_V6_vassign, 39304}, // __builtin_HEXAGON_V6_vassign
-      {Intrinsic::hexagon_V6_vassign_128B, 39333}, // __builtin_HEXAGON_V6_vassign_128B
-      {Intrinsic::hexagon_V6_vassignp, 39367}, // __builtin_HEXAGON_V6_vassignp
-      {Intrinsic::hexagon_V6_vassignp_128B, 39397}, // __builtin_HEXAGON_V6_vassignp_128B
-      {Intrinsic::hexagon_V6_vavgb, 39432}, // __builtin_HEXAGON_V6_vavgb
-      {Intrinsic::hexagon_V6_vavgb_128B, 39459}, // __builtin_HEXAGON_V6_vavgb_128B
-      {Intrinsic::hexagon_V6_vavgbrnd, 39491}, // __builtin_HEXAGON_V6_vavgbrnd
-      {Intrinsic::hexagon_V6_vavgbrnd_128B, 39521}, // __builtin_HEXAGON_V6_vavgbrnd_128B
-      {Intrinsic::hexagon_V6_vavgh, 39556}, // __builtin_HEXAGON_V6_vavgh
-      {Intrinsic::hexagon_V6_vavgh_128B, 39583}, // __builtin_HEXAGON_V6_vavgh_128B
-      {Intrinsic::hexagon_V6_vavghrnd, 39615}, // __builtin_HEXAGON_V6_vavghrnd
-      {Intrinsic::hexagon_V6_vavghrnd_128B, 39645}, // __builtin_HEXAGON_V6_vavghrnd_128B
-      {Intrinsic::hexagon_V6_vavgub, 39680}, // __builtin_HEXAGON_V6_vavgub
-      {Intrinsic::hexagon_V6_vavgub_128B, 39708}, // __builtin_HEXAGON_V6_vavgub_128B
-      {Intrinsic::hexagon_V6_vavgubrnd, 39741}, // __builtin_HEXAGON_V6_vavgubrnd
-      {Intrinsic::hexagon_V6_vavgubrnd_128B, 39772}, // __builtin_HEXAGON_V6_vavgubrnd_128B
-      {Intrinsic::hexagon_V6_vavguh, 39808}, // __builtin_HEXAGON_V6_vavguh
-      {Intrinsic::hexagon_V6_vavguh_128B, 39836}, // __builtin_HEXAGON_V6_vavguh_128B
-      {Intrinsic::hexagon_V6_vavguhrnd, 39869}, // __builtin_HEXAGON_V6_vavguhrnd
-      {Intrinsic::hexagon_V6_vavguhrnd_128B, 39900}, // __builtin_HEXAGON_V6_vavguhrnd_128B
-      {Intrinsic::hexagon_V6_vavguw, 39936}, // __builtin_HEXAGON_V6_vavguw
-      {Intrinsic::hexagon_V6_vavguw_128B, 39964}, // __builtin_HEXAGON_V6_vavguw_128B
-      {Intrinsic::hexagon_V6_vavguwrnd, 39997}, // __builtin_HEXAGON_V6_vavguwrnd
-      {Intrinsic::hexagon_V6_vavguwrnd_128B, 40028}, // __builtin_HEXAGON_V6_vavguwrnd_128B
-      {Intrinsic::hexagon_V6_vavgw, 40064}, // __builtin_HEXAGON_V6_vavgw
-      {Intrinsic::hexagon_V6_vavgw_128B, 40091}, // __builtin_HEXAGON_V6_vavgw_128B
-      {Intrinsic::hexagon_V6_vavgwrnd, 40123}, // __builtin_HEXAGON_V6_vavgwrnd
-      {Intrinsic::hexagon_V6_vavgwrnd_128B, 40153}, // __builtin_HEXAGON_V6_vavgwrnd_128B
-      {Intrinsic::hexagon_V6_vcl0h, 40188}, // __builtin_HEXAGON_V6_vcl0h
-      {Intrinsic::hexagon_V6_vcl0h_128B, 40215}, // __builtin_HEXAGON_V6_vcl0h_128B
-      {Intrinsic::hexagon_V6_vcl0w, 40247}, // __builtin_HEXAGON_V6_vcl0w
-      {Intrinsic::hexagon_V6_vcl0w_128B, 40274}, // __builtin_HEXAGON_V6_vcl0w_128B
-      {Intrinsic::hexagon_V6_vcombine, 40306}, // __builtin_HEXAGON_V6_vcombine
-      {Intrinsic::hexagon_V6_vcombine_128B, 40336}, // __builtin_HEXAGON_V6_vcombine_128B
-      {Intrinsic::hexagon_V6_vd0, 40371}, // __builtin_HEXAGON_V6_vd0
-      {Intrinsic::hexagon_V6_vd0_128B, 40396}, // __builtin_HEXAGON_V6_vd0_128B
-      {Intrinsic::hexagon_V6_vdd0, 40426}, // __builtin_HEXAGON_V6_vdd0
-      {Intrinsic::hexagon_V6_vdd0_128B, 40452}, // __builtin_HEXAGON_V6_vdd0_128B
-      {Intrinsic::hexagon_V6_vdealb, 40483}, // __builtin_HEXAGON_V6_vdealb
-      {Intrinsic::hexagon_V6_vdealb4w, 40544}, // __builtin_HEXAGON_V6_vdealb4w
-      {Intrinsic::hexagon_V6_vdealb4w_128B, 40574}, // __builtin_HEXAGON_V6_vdealb4w_128B
-      {Intrinsic::hexagon_V6_vdealb_128B, 40511}, // __builtin_HEXAGON_V6_vdealb_128B
-      {Intrinsic::hexagon_V6_vdealh, 40609}, // __builtin_HEXAGON_V6_vdealh
-      {Intrinsic::hexagon_V6_vdealh_128B, 40637}, // __builtin_HEXAGON_V6_vdealh_128B
-      {Intrinsic::hexagon_V6_vdealvdd, 40670}, // __builtin_HEXAGON_V6_vdealvdd
-      {Intrinsic::hexagon_V6_vdealvdd_128B, 40700}, // __builtin_HEXAGON_V6_vdealvdd_128B
-      {Intrinsic::hexagon_V6_vdelta, 40735}, // __builtin_HEXAGON_V6_vdelta
-      {Intrinsic::hexagon_V6_vdelta_128B, 40763}, // __builtin_HEXAGON_V6_vdelta_128B
-      {Intrinsic::hexagon_V6_vdmpybus, 40796}, // __builtin_HEXAGON_V6_vdmpybus
-      {Intrinsic::hexagon_V6_vdmpybus_128B, 40826}, // __builtin_HEXAGON_V6_vdmpybus_128B
-      {Intrinsic::hexagon_V6_vdmpybus_acc, 40861}, // __builtin_HEXAGON_V6_vdmpybus_acc
-      {Intrinsic::hexagon_V6_vdmpybus_acc_128B, 40895}, // __builtin_HEXAGON_V6_vdmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vdmpybus_dv, 40934}, // __builtin_HEXAGON_V6_vdmpybus_dv
-      {Intrinsic::hexagon_V6_vdmpybus_dv_128B, 40967}, // __builtin_HEXAGON_V6_vdmpybus_dv_128B
-      {Intrinsic::hexagon_V6_vdmpybus_dv_acc, 41005}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc
-      {Intrinsic::hexagon_V6_vdmpybus_dv_acc_128B, 41042}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhb, 41084}, // __builtin_HEXAGON_V6_vdmpyhb
-      {Intrinsic::hexagon_V6_vdmpyhb_128B, 41113}, // __builtin_HEXAGON_V6_vdmpyhb_128B
-      {Intrinsic::hexagon_V6_vdmpyhb_acc, 41147}, // __builtin_HEXAGON_V6_vdmpyhb_acc
-      {Intrinsic::hexagon_V6_vdmpyhb_acc_128B, 41180}, // __builtin_HEXAGON_V6_vdmpyhb_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhb_dv, 41218}, // __builtin_HEXAGON_V6_vdmpyhb_dv
-      {Intrinsic::hexagon_V6_vdmpyhb_dv_128B, 41250}, // __builtin_HEXAGON_V6_vdmpyhb_dv_128B
-      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc, 41287}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc
-      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc_128B, 41323}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhisat, 41364}, // __builtin_HEXAGON_V6_vdmpyhisat
-      {Intrinsic::hexagon_V6_vdmpyhisat_128B, 41396}, // __builtin_HEXAGON_V6_vdmpyhisat_128B
-      {Intrinsic::hexagon_V6_vdmpyhisat_acc, 41433}, // __builtin_HEXAGON_V6_vdmpyhisat_acc
-      {Intrinsic::hexagon_V6_vdmpyhisat_acc_128B, 41469}, // __builtin_HEXAGON_V6_vdmpyhisat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhsat, 41510}, // __builtin_HEXAGON_V6_vdmpyhsat
-      {Intrinsic::hexagon_V6_vdmpyhsat_128B, 41541}, // __builtin_HEXAGON_V6_vdmpyhsat_128B
-      {Intrinsic::hexagon_V6_vdmpyhsat_acc, 41577}, // __builtin_HEXAGON_V6_vdmpyhsat_acc
-      {Intrinsic::hexagon_V6_vdmpyhsat_acc_128B, 41612}, // __builtin_HEXAGON_V6_vdmpyhsat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhsuisat, 41652}, // __builtin_HEXAGON_V6_vdmpyhsuisat
-      {Intrinsic::hexagon_V6_vdmpyhsuisat_128B, 41686}, // __builtin_HEXAGON_V6_vdmpyhsuisat_128B
-      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc, 41725}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc
-      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc_128B, 41763}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhsusat, 41806}, // __builtin_HEXAGON_V6_vdmpyhsusat
-      {Intrinsic::hexagon_V6_vdmpyhsusat_128B, 41839}, // __builtin_HEXAGON_V6_vdmpyhsusat_128B
-      {Intrinsic::hexagon_V6_vdmpyhsusat_acc, 41877}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc
-      {Intrinsic::hexagon_V6_vdmpyhsusat_acc_128B, 41914}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhvsat, 41956}, // __builtin_HEXAGON_V6_vdmpyhvsat
-      {Intrinsic::hexagon_V6_vdmpyhvsat_128B, 41988}, // __builtin_HEXAGON_V6_vdmpyhvsat_128B
-      {Intrinsic::hexagon_V6_vdmpyhvsat_acc, 42025}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc
-      {Intrinsic::hexagon_V6_vdmpyhvsat_acc_128B, 42061}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc_128B
-      {Intrinsic::hexagon_V6_vdsaduh, 42102}, // __builtin_HEXAGON_V6_vdsaduh
-      {Intrinsic::hexagon_V6_vdsaduh_128B, 42131}, // __builtin_HEXAGON_V6_vdsaduh_128B
-      {Intrinsic::hexagon_V6_vdsaduh_acc, 42165}, // __builtin_HEXAGON_V6_vdsaduh_acc
-      {Intrinsic::hexagon_V6_vdsaduh_acc_128B, 42198}, // __builtin_HEXAGON_V6_vdsaduh_acc_128B
-      {Intrinsic::hexagon_V6_veqb, 42236}, // __builtin_HEXAGON_V6_veqb
-      {Intrinsic::hexagon_V6_veqb_128B, 42262}, // __builtin_HEXAGON_V6_veqb_128B
-      {Intrinsic::hexagon_V6_veqb_and, 42293}, // __builtin_HEXAGON_V6_veqb_and
-      {Intrinsic::hexagon_V6_veqb_and_128B, 42323}, // __builtin_HEXAGON_V6_veqb_and_128B
-      {Intrinsic::hexagon_V6_veqb_or, 42358}, // __builtin_HEXAGON_V6_veqb_or
-      {Intrinsic::hexagon_V6_veqb_or_128B, 42387}, // __builtin_HEXAGON_V6_veqb_or_128B
-      {Intrinsic::hexagon_V6_veqb_xor, 42421}, // __builtin_HEXAGON_V6_veqb_xor
-      {Intrinsic::hexagon_V6_veqb_xor_128B, 42451}, // __builtin_HEXAGON_V6_veqb_xor_128B
-      {Intrinsic::hexagon_V6_veqh, 42486}, // __builtin_HEXAGON_V6_veqh
-      {Intrinsic::hexagon_V6_veqh_128B, 42512}, // __builtin_HEXAGON_V6_veqh_128B
-      {Intrinsic::hexagon_V6_veqh_and, 42543}, // __builtin_HEXAGON_V6_veqh_and
-      {Intrinsic::hexagon_V6_veqh_and_128B, 42573}, // __builtin_HEXAGON_V6_veqh_and_128B
-      {Intrinsic::hexagon_V6_veqh_or, 42608}, // __builtin_HEXAGON_V6_veqh_or
-      {Intrinsic::hexagon_V6_veqh_or_128B, 42637}, // __builtin_HEXAGON_V6_veqh_or_128B
-      {Intrinsic::hexagon_V6_veqh_xor, 42671}, // __builtin_HEXAGON_V6_veqh_xor
-      {Intrinsic::hexagon_V6_veqh_xor_128B, 42701}, // __builtin_HEXAGON_V6_veqh_xor_128B
-      {Intrinsic::hexagon_V6_veqw, 42736}, // __builtin_HEXAGON_V6_veqw
-      {Intrinsic::hexagon_V6_veqw_128B, 42762}, // __builtin_HEXAGON_V6_veqw_128B
-      {Intrinsic::hexagon_V6_veqw_and, 42793}, // __builtin_HEXAGON_V6_veqw_and
-      {Intrinsic::hexagon_V6_veqw_and_128B, 42823}, // __builtin_HEXAGON_V6_veqw_and_128B
-      {Intrinsic::hexagon_V6_veqw_or, 42858}, // __builtin_HEXAGON_V6_veqw_or
-      {Intrinsic::hexagon_V6_veqw_or_128B, 42887}, // __builtin_HEXAGON_V6_veqw_or_128B
-      {Intrinsic::hexagon_V6_veqw_xor, 42921}, // __builtin_HEXAGON_V6_veqw_xor
-      {Intrinsic::hexagon_V6_veqw_xor_128B, 42951}, // __builtin_HEXAGON_V6_veqw_xor_128B
-      {Intrinsic::hexagon_V6_vgathermh, 42986}, // __builtin_HEXAGON_V6_vgathermh
-      {Intrinsic::hexagon_V6_vgathermh_128B, 43017}, // __builtin_HEXAGON_V6_vgathermh_128B
-      {Intrinsic::hexagon_V6_vgathermhq, 43053}, // __builtin_HEXAGON_V6_vgathermhq
-      {Intrinsic::hexagon_V6_vgathermhq_128B, 43085}, // __builtin_HEXAGON_V6_vgathermhq_128B
-      {Intrinsic::hexagon_V6_vgathermhw, 43122}, // __builtin_HEXAGON_V6_vgathermhw
-      {Intrinsic::hexagon_V6_vgathermhw_128B, 43154}, // __builtin_HEXAGON_V6_vgathermhw_128B
-      {Intrinsic::hexagon_V6_vgathermhwq, 43191}, // __builtin_HEXAGON_V6_vgathermhwq
-      {Intrinsic::hexagon_V6_vgathermhwq_128B, 43224}, // __builtin_HEXAGON_V6_vgathermhwq_128B
-      {Intrinsic::hexagon_V6_vgathermw, 43262}, // __builtin_HEXAGON_V6_vgathermw
-      {Intrinsic::hexagon_V6_vgathermw_128B, 43293}, // __builtin_HEXAGON_V6_vgathermw_128B
-      {Intrinsic::hexagon_V6_vgathermwq, 43329}, // __builtin_HEXAGON_V6_vgathermwq
-      {Intrinsic::hexagon_V6_vgathermwq_128B, 43361}, // __builtin_HEXAGON_V6_vgathermwq_128B
-      {Intrinsic::hexagon_V6_vgtb, 43398}, // __builtin_HEXAGON_V6_vgtb
-      {Intrinsic::hexagon_V6_vgtb_128B, 43424}, // __builtin_HEXAGON_V6_vgtb_128B
-      {Intrinsic::hexagon_V6_vgtb_and, 43455}, // __builtin_HEXAGON_V6_vgtb_and
-      {Intrinsic::hexagon_V6_vgtb_and_128B, 43485}, // __builtin_HEXAGON_V6_vgtb_and_128B
-      {Intrinsic::hexagon_V6_vgtb_or, 43520}, // __builtin_HEXAGON_V6_vgtb_or
-      {Intrinsic::hexagon_V6_vgtb_or_128B, 43549}, // __builtin_HEXAGON_V6_vgtb_or_128B
-      {Intrinsic::hexagon_V6_vgtb_xor, 43583}, // __builtin_HEXAGON_V6_vgtb_xor
-      {Intrinsic::hexagon_V6_vgtb_xor_128B, 43613}, // __builtin_HEXAGON_V6_vgtb_xor_128B
-      {Intrinsic::hexagon_V6_vgth, 43648}, // __builtin_HEXAGON_V6_vgth
-      {Intrinsic::hexagon_V6_vgth_128B, 43674}, // __builtin_HEXAGON_V6_vgth_128B
-      {Intrinsic::hexagon_V6_vgth_and, 43705}, // __builtin_HEXAGON_V6_vgth_and
-      {Intrinsic::hexagon_V6_vgth_and_128B, 43735}, // __builtin_HEXAGON_V6_vgth_and_128B
-      {Intrinsic::hexagon_V6_vgth_or, 43770}, // __builtin_HEXAGON_V6_vgth_or
-      {Intrinsic::hexagon_V6_vgth_or_128B, 43799}, // __builtin_HEXAGON_V6_vgth_or_128B
-      {Intrinsic::hexagon_V6_vgth_xor, 43833}, // __builtin_HEXAGON_V6_vgth_xor
-      {Intrinsic::hexagon_V6_vgth_xor_128B, 43863}, // __builtin_HEXAGON_V6_vgth_xor_128B
-      {Intrinsic::hexagon_V6_vgtub, 43898}, // __builtin_HEXAGON_V6_vgtub
-      {Intrinsic::hexagon_V6_vgtub_128B, 43925}, // __builtin_HEXAGON_V6_vgtub_128B
-      {Intrinsic::hexagon_V6_vgtub_and, 43957}, // __builtin_HEXAGON_V6_vgtub_and
-      {Intrinsic::hexagon_V6_vgtub_and_128B, 43988}, // __builtin_HEXAGON_V6_vgtub_and_128B
-      {Intrinsic::hexagon_V6_vgtub_or, 44024}, // __builtin_HEXAGON_V6_vgtub_or
-      {Intrinsic::hexagon_V6_vgtub_or_128B, 44054}, // __builtin_HEXAGON_V6_vgtub_or_128B
-      {Intrinsic::hexagon_V6_vgtub_xor, 44089}, // __builtin_HEXAGON_V6_vgtub_xor
-      {Intrinsic::hexagon_V6_vgtub_xor_128B, 44120}, // __builtin_HEXAGON_V6_vgtub_xor_128B
-      {Intrinsic::hexagon_V6_vgtuh, 44156}, // __builtin_HEXAGON_V6_vgtuh
-      {Intrinsic::hexagon_V6_vgtuh_128B, 44183}, // __builtin_HEXAGON_V6_vgtuh_128B
-      {Intrinsic::hexagon_V6_vgtuh_and, 44215}, // __builtin_HEXAGON_V6_vgtuh_and
-      {Intrinsic::hexagon_V6_vgtuh_and_128B, 44246}, // __builtin_HEXAGON_V6_vgtuh_and_128B
-      {Intrinsic::hexagon_V6_vgtuh_or, 44282}, // __builtin_HEXAGON_V6_vgtuh_or
-      {Intrinsic::hexagon_V6_vgtuh_or_128B, 44312}, // __builtin_HEXAGON_V6_vgtuh_or_128B
-      {Intrinsic::hexagon_V6_vgtuh_xor, 44347}, // __builtin_HEXAGON_V6_vgtuh_xor
-      {Intrinsic::hexagon_V6_vgtuh_xor_128B, 44378}, // __builtin_HEXAGON_V6_vgtuh_xor_128B
-      {Intrinsic::hexagon_V6_vgtuw, 44414}, // __builtin_HEXAGON_V6_vgtuw
-      {Intrinsic::hexagon_V6_vgtuw_128B, 44441}, // __builtin_HEXAGON_V6_vgtuw_128B
-      {Intrinsic::hexagon_V6_vgtuw_and, 44473}, // __builtin_HEXAGON_V6_vgtuw_and
-      {Intrinsic::hexagon_V6_vgtuw_and_128B, 44504}, // __builtin_HEXAGON_V6_vgtuw_and_128B
-      {Intrinsic::hexagon_V6_vgtuw_or, 44540}, // __builtin_HEXAGON_V6_vgtuw_or
-      {Intrinsic::hexagon_V6_vgtuw_or_128B, 44570}, // __builtin_HEXAGON_V6_vgtuw_or_128B
-      {Intrinsic::hexagon_V6_vgtuw_xor, 44605}, // __builtin_HEXAGON_V6_vgtuw_xor
-      {Intrinsic::hexagon_V6_vgtuw_xor_128B, 44636}, // __builtin_HEXAGON_V6_vgtuw_xor_128B
-      {Intrinsic::hexagon_V6_vgtw, 44672}, // __builtin_HEXAGON_V6_vgtw
-      {Intrinsic::hexagon_V6_vgtw_128B, 44698}, // __builtin_HEXAGON_V6_vgtw_128B
-      {Intrinsic::hexagon_V6_vgtw_and, 44729}, // __builtin_HEXAGON_V6_vgtw_and
-      {Intrinsic::hexagon_V6_vgtw_and_128B, 44759}, // __builtin_HEXAGON_V6_vgtw_and_128B
-      {Intrinsic::hexagon_V6_vgtw_or, 44794}, // __builtin_HEXAGON_V6_vgtw_or
-      {Intrinsic::hexagon_V6_vgtw_or_128B, 44823}, // __builtin_HEXAGON_V6_vgtw_or_128B
-      {Intrinsic::hexagon_V6_vgtw_xor, 44857}, // __builtin_HEXAGON_V6_vgtw_xor
-      {Intrinsic::hexagon_V6_vgtw_xor_128B, 44887}, // __builtin_HEXAGON_V6_vgtw_xor_128B
-      {Intrinsic::hexagon_V6_vinsertwr, 44922}, // __builtin_HEXAGON_V6_vinsertwr
-      {Intrinsic::hexagon_V6_vinsertwr_128B, 44953}, // __builtin_HEXAGON_V6_vinsertwr_128B
-      {Intrinsic::hexagon_V6_vlalignb, 44989}, // __builtin_HEXAGON_V6_vlalignb
-      {Intrinsic::hexagon_V6_vlalignb_128B, 45019}, // __builtin_HEXAGON_V6_vlalignb_128B
-      {Intrinsic::hexagon_V6_vlalignbi, 45054}, // __builtin_HEXAGON_V6_vlalignbi
-      {Intrinsic::hexagon_V6_vlalignbi_128B, 45085}, // __builtin_HEXAGON_V6_vlalignbi_128B
-      {Intrinsic::hexagon_V6_vlsrb, 45121}, // __builtin_HEXAGON_V6_vlsrb
-      {Intrinsic::hexagon_V6_vlsrb_128B, 45148}, // __builtin_HEXAGON_V6_vlsrb_128B
-      {Intrinsic::hexagon_V6_vlsrh, 45180}, // __builtin_HEXAGON_V6_vlsrh
-      {Intrinsic::hexagon_V6_vlsrh_128B, 45207}, // __builtin_HEXAGON_V6_vlsrh_128B
-      {Intrinsic::hexagon_V6_vlsrhv, 45239}, // __builtin_HEXAGON_V6_vlsrhv
-      {Intrinsic::hexagon_V6_vlsrhv_128B, 45267}, // __builtin_HEXAGON_V6_vlsrhv_128B
-      {Intrinsic::hexagon_V6_vlsrw, 45300}, // __builtin_HEXAGON_V6_vlsrw
-      {Intrinsic::hexagon_V6_vlsrw_128B, 45327}, // __builtin_HEXAGON_V6_vlsrw_128B
-      {Intrinsic::hexagon_V6_vlsrwv, 45359}, // __builtin_HEXAGON_V6_vlsrwv
-      {Intrinsic::hexagon_V6_vlsrwv_128B, 45387}, // __builtin_HEXAGON_V6_vlsrwv_128B
-      {Intrinsic::hexagon_V6_vlut4, 45420}, // __builtin_HEXAGON_V6_vlut4
-      {Intrinsic::hexagon_V6_vlut4_128B, 45447}, // __builtin_HEXAGON_V6_vlut4_128B
-      {Intrinsic::hexagon_V6_vlutvvb, 45479}, // __builtin_HEXAGON_V6_vlutvvb
-      {Intrinsic::hexagon_V6_vlutvvb_128B, 45508}, // __builtin_HEXAGON_V6_vlutvvb_128B
-      {Intrinsic::hexagon_V6_vlutvvb_nm, 45542}, // __builtin_HEXAGON_V6_vlutvvb_nm
-      {Intrinsic::hexagon_V6_vlutvvb_nm_128B, 45574}, // __builtin_HEXAGON_V6_vlutvvb_nm_128B
-      {Intrinsic::hexagon_V6_vlutvvb_oracc, 45611}, // __builtin_HEXAGON_V6_vlutvvb_oracc
-      {Intrinsic::hexagon_V6_vlutvvb_oracc_128B, 45646}, // __builtin_HEXAGON_V6_vlutvvb_oracc_128B
-      {Intrinsic::hexagon_V6_vlutvvb_oracci, 45686}, // __builtin_HEXAGON_V6_vlutvvb_oracci
-      {Intrinsic::hexagon_V6_vlutvvb_oracci_128B, 45722}, // __builtin_HEXAGON_V6_vlutvvb_oracci_128B
-      {Intrinsic::hexagon_V6_vlutvvbi, 45763}, // __builtin_HEXAGON_V6_vlutvvbi
-      {Intrinsic::hexagon_V6_vlutvvbi_128B, 45793}, // __builtin_HEXAGON_V6_vlutvvbi_128B
-      {Intrinsic::hexagon_V6_vlutvwh, 45828}, // __builtin_HEXAGON_V6_vlutvwh
-      {Intrinsic::hexagon_V6_vlutvwh_128B, 45857}, // __builtin_HEXAGON_V6_vlutvwh_128B
-      {Intrinsic::hexagon_V6_vlutvwh_nm, 45891}, // __builtin_HEXAGON_V6_vlutvwh_nm
-      {Intrinsic::hexagon_V6_vlutvwh_nm_128B, 45923}, // __builtin_HEXAGON_V6_vlutvwh_nm_128B
-      {Intrinsic::hexagon_V6_vlutvwh_oracc, 45960}, // __builtin_HEXAGON_V6_vlutvwh_oracc
-      {Intrinsic::hexagon_V6_vlutvwh_oracc_128B, 45995}, // __builtin_HEXAGON_V6_vlutvwh_oracc_128B
-      {Intrinsic::hexagon_V6_vlutvwh_oracci, 46035}, // __builtin_HEXAGON_V6_vlutvwh_oracci
-      {Intrinsic::hexagon_V6_vlutvwh_oracci_128B, 46071}, // __builtin_HEXAGON_V6_vlutvwh_oracci_128B
-      {Intrinsic::hexagon_V6_vlutvwhi, 46112}, // __builtin_HEXAGON_V6_vlutvwhi
-      {Intrinsic::hexagon_V6_vlutvwhi_128B, 46142}, // __builtin_HEXAGON_V6_vlutvwhi_128B
-      {Intrinsic::hexagon_V6_vmaskedstorenq, 46177}, // __builtin_HEXAGON_V6_vmaskedstorenq
-      {Intrinsic::hexagon_V6_vmaskedstorenq_128B, 46213}, // __builtin_HEXAGON_V6_vmaskedstorenq_128B
-      {Intrinsic::hexagon_V6_vmaskedstorentnq, 46254}, // __builtin_HEXAGON_V6_vmaskedstorentnq
-      {Intrinsic::hexagon_V6_vmaskedstorentnq_128B, 46292}, // __builtin_HEXAGON_V6_vmaskedstorentnq_128B
-      {Intrinsic::hexagon_V6_vmaskedstorentq, 46335}, // __builtin_HEXAGON_V6_vmaskedstorentq
-      {Intrinsic::hexagon_V6_vmaskedstorentq_128B, 46372}, // __builtin_HEXAGON_V6_vmaskedstorentq_128B
-      {Intrinsic::hexagon_V6_vmaskedstoreq, 46414}, // __builtin_HEXAGON_V6_vmaskedstoreq
-      {Intrinsic::hexagon_V6_vmaskedstoreq_128B, 46449}, // __builtin_HEXAGON_V6_vmaskedstoreq_128B
-      {Intrinsic::hexagon_V6_vmaxb, 46489}, // __builtin_HEXAGON_V6_vmaxb
-      {Intrinsic::hexagon_V6_vmaxb_128B, 46516}, // __builtin_HEXAGON_V6_vmaxb_128B
-      {Intrinsic::hexagon_V6_vmaxh, 46548}, // __builtin_HEXAGON_V6_vmaxh
-      {Intrinsic::hexagon_V6_vmaxh_128B, 46575}, // __builtin_HEXAGON_V6_vmaxh_128B
-      {Intrinsic::hexagon_V6_vmaxub, 46607}, // __builtin_HEXAGON_V6_vmaxub
-      {Intrinsic::hexagon_V6_vmaxub_128B, 46635}, // __builtin_HEXAGON_V6_vmaxub_128B
-      {Intrinsic::hexagon_V6_vmaxuh, 46668}, // __builtin_HEXAGON_V6_vmaxuh
-      {Intrinsic::hexagon_V6_vmaxuh_128B, 46696}, // __builtin_HEXAGON_V6_vmaxuh_128B
-      {Intrinsic::hexagon_V6_vmaxw, 46729}, // __builtin_HEXAGON_V6_vmaxw
-      {Intrinsic::hexagon_V6_vmaxw_128B, 46756}, // __builtin_HEXAGON_V6_vmaxw_128B
-      {Intrinsic::hexagon_V6_vminb, 46788}, // __builtin_HEXAGON_V6_vminb
-      {Intrinsic::hexagon_V6_vminb_128B, 46815}, // __builtin_HEXAGON_V6_vminb_128B
-      {Intrinsic::hexagon_V6_vminh, 46847}, // __builtin_HEXAGON_V6_vminh
-      {Intrinsic::hexagon_V6_vminh_128B, 46874}, // __builtin_HEXAGON_V6_vminh_128B
-      {Intrinsic::hexagon_V6_vminub, 46906}, // __builtin_HEXAGON_V6_vminub
-      {Intrinsic::hexagon_V6_vminub_128B, 46934}, // __builtin_HEXAGON_V6_vminub_128B
-      {Intrinsic::hexagon_V6_vminuh, 46967}, // __builtin_HEXAGON_V6_vminuh
-      {Intrinsic::hexagon_V6_vminuh_128B, 46995}, // __builtin_HEXAGON_V6_vminuh_128B
-      {Intrinsic::hexagon_V6_vminw, 47028}, // __builtin_HEXAGON_V6_vminw
-      {Intrinsic::hexagon_V6_vminw_128B, 47055}, // __builtin_HEXAGON_V6_vminw_128B
-      {Intrinsic::hexagon_V6_vmpabus, 47087}, // __builtin_HEXAGON_V6_vmpabus
-      {Intrinsic::hexagon_V6_vmpabus_128B, 47116}, // __builtin_HEXAGON_V6_vmpabus_128B
-      {Intrinsic::hexagon_V6_vmpabus_acc, 47150}, // __builtin_HEXAGON_V6_vmpabus_acc
-      {Intrinsic::hexagon_V6_vmpabus_acc_128B, 47183}, // __builtin_HEXAGON_V6_vmpabus_acc_128B
-      {Intrinsic::hexagon_V6_vmpabusv, 47221}, // __builtin_HEXAGON_V6_vmpabusv
-      {Intrinsic::hexagon_V6_vmpabusv_128B, 47251}, // __builtin_HEXAGON_V6_vmpabusv_128B
-      {Intrinsic::hexagon_V6_vmpabuu, 47286}, // __builtin_HEXAGON_V6_vmpabuu
-      {Intrinsic::hexagon_V6_vmpabuu_128B, 47315}, // __builtin_HEXAGON_V6_vmpabuu_128B
-      {Intrinsic::hexagon_V6_vmpabuu_acc, 47349}, // __builtin_HEXAGON_V6_vmpabuu_acc
-      {Intrinsic::hexagon_V6_vmpabuu_acc_128B, 47382}, // __builtin_HEXAGON_V6_vmpabuu_acc_128B
-      {Intrinsic::hexagon_V6_vmpabuuv, 47420}, // __builtin_HEXAGON_V6_vmpabuuv
-      {Intrinsic::hexagon_V6_vmpabuuv_128B, 47450}, // __builtin_HEXAGON_V6_vmpabuuv_128B
-      {Intrinsic::hexagon_V6_vmpahb, 47485}, // __builtin_HEXAGON_V6_vmpahb
-      {Intrinsic::hexagon_V6_vmpahb_128B, 47513}, // __builtin_HEXAGON_V6_vmpahb_128B
-      {Intrinsic::hexagon_V6_vmpahb_acc, 47546}, // __builtin_HEXAGON_V6_vmpahb_acc
-      {Intrinsic::hexagon_V6_vmpahb_acc_128B, 47578}, // __builtin_HEXAGON_V6_vmpahb_acc_128B
-      {Intrinsic::hexagon_V6_vmpahhsat, 47615}, // __builtin_HEXAGON_V6_vmpahhsat
-      {Intrinsic::hexagon_V6_vmpahhsat_128B, 47646}, // __builtin_HEXAGON_V6_vmpahhsat_128B
-      {Intrinsic::hexagon_V6_vmpauhb, 47682}, // __builtin_HEXAGON_V6_vmpauhb
-      {Intrinsic::hexagon_V6_vmpauhb_128B, 47711}, // __builtin_HEXAGON_V6_vmpauhb_128B
-      {Intrinsic::hexagon_V6_vmpauhb_acc, 47745}, // __builtin_HEXAGON_V6_vmpauhb_acc
-      {Intrinsic::hexagon_V6_vmpauhb_acc_128B, 47778}, // __builtin_HEXAGON_V6_vmpauhb_acc_128B
-      {Intrinsic::hexagon_V6_vmpauhuhsat, 47816}, // __builtin_HEXAGON_V6_vmpauhuhsat
-      {Intrinsic::hexagon_V6_vmpauhuhsat_128B, 47849}, // __builtin_HEXAGON_V6_vmpauhuhsat_128B
-      {Intrinsic::hexagon_V6_vmpsuhuhsat, 47887}, // __builtin_HEXAGON_V6_vmpsuhuhsat
-      {Intrinsic::hexagon_V6_vmpsuhuhsat_128B, 47920}, // __builtin_HEXAGON_V6_vmpsuhuhsat_128B
-      {Intrinsic::hexagon_V6_vmpybus, 47958}, // __builtin_HEXAGON_V6_vmpybus
-      {Intrinsic::hexagon_V6_vmpybus_128B, 47987}, // __builtin_HEXAGON_V6_vmpybus_128B
-      {Intrinsic::hexagon_V6_vmpybus_acc, 48021}, // __builtin_HEXAGON_V6_vmpybus_acc
-      {Intrinsic::hexagon_V6_vmpybus_acc_128B, 48054}, // __builtin_HEXAGON_V6_vmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vmpybusv, 48092}, // __builtin_HEXAGON_V6_vmpybusv
-      {Intrinsic::hexagon_V6_vmpybusv_128B, 48122}, // __builtin_HEXAGON_V6_vmpybusv_128B
-      {Intrinsic::hexagon_V6_vmpybusv_acc, 48157}, // __builtin_HEXAGON_V6_vmpybusv_acc
-      {Intrinsic::hexagon_V6_vmpybusv_acc_128B, 48191}, // __builtin_HEXAGON_V6_vmpybusv_acc_128B
-      {Intrinsic::hexagon_V6_vmpybv, 48230}, // __builtin_HEXAGON_V6_vmpybv
-      {Intrinsic::hexagon_V6_vmpybv_128B, 48258}, // __builtin_HEXAGON_V6_vmpybv_128B
-      {Intrinsic::hexagon_V6_vmpybv_acc, 48291}, // __builtin_HEXAGON_V6_vmpybv_acc
-      {Intrinsic::hexagon_V6_vmpybv_acc_128B, 48323}, // __builtin_HEXAGON_V6_vmpybv_acc_128B
-      {Intrinsic::hexagon_V6_vmpyewuh, 48360}, // __builtin_HEXAGON_V6_vmpyewuh
-      {Intrinsic::hexagon_V6_vmpyewuh_128B, 48390}, // __builtin_HEXAGON_V6_vmpyewuh_128B
-      {Intrinsic::hexagon_V6_vmpyewuh_64, 48425}, // __builtin_HEXAGON_V6_vmpyewuh_64
-      {Intrinsic::hexagon_V6_vmpyewuh_64_128B, 48458}, // __builtin_HEXAGON_V6_vmpyewuh_64_128B
-      {Intrinsic::hexagon_V6_vmpyh, 48496}, // __builtin_HEXAGON_V6_vmpyh
-      {Intrinsic::hexagon_V6_vmpyh_128B, 48523}, // __builtin_HEXAGON_V6_vmpyh_128B
-      {Intrinsic::hexagon_V6_vmpyh_acc, 48555}, // __builtin_HEXAGON_V6_vmpyh_acc
-      {Intrinsic::hexagon_V6_vmpyh_acc_128B, 48586}, // __builtin_HEXAGON_V6_vmpyh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhsat_acc, 48622}, // __builtin_HEXAGON_V6_vmpyhsat_acc
-      {Intrinsic::hexagon_V6_vmpyhsat_acc_128B, 48656}, // __builtin_HEXAGON_V6_vmpyhsat_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhsrs, 48695}, // __builtin_HEXAGON_V6_vmpyhsrs
-      {Intrinsic::hexagon_V6_vmpyhsrs_128B, 48725}, // __builtin_HEXAGON_V6_vmpyhsrs_128B
-      {Intrinsic::hexagon_V6_vmpyhss, 48760}, // __builtin_HEXAGON_V6_vmpyhss
-      {Intrinsic::hexagon_V6_vmpyhss_128B, 48789}, // __builtin_HEXAGON_V6_vmpyhss_128B
-      {Intrinsic::hexagon_V6_vmpyhus, 48823}, // __builtin_HEXAGON_V6_vmpyhus
-      {Intrinsic::hexagon_V6_vmpyhus_128B, 48852}, // __builtin_HEXAGON_V6_vmpyhus_128B
-      {Intrinsic::hexagon_V6_vmpyhus_acc, 48886}, // __builtin_HEXAGON_V6_vmpyhus_acc
-      {Intrinsic::hexagon_V6_vmpyhus_acc_128B, 48919}, // __builtin_HEXAGON_V6_vmpyhus_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhv, 48957}, // __builtin_HEXAGON_V6_vmpyhv
-      {Intrinsic::hexagon_V6_vmpyhv_128B, 48985}, // __builtin_HEXAGON_V6_vmpyhv_128B
-      {Intrinsic::hexagon_V6_vmpyhv_acc, 49018}, // __builtin_HEXAGON_V6_vmpyhv_acc
-      {Intrinsic::hexagon_V6_vmpyhv_acc_128B, 49050}, // __builtin_HEXAGON_V6_vmpyhv_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhvsrs, 49087}, // __builtin_HEXAGON_V6_vmpyhvsrs
-      {Intrinsic::hexagon_V6_vmpyhvsrs_128B, 49118}, // __builtin_HEXAGON_V6_vmpyhvsrs_128B
-      {Intrinsic::hexagon_V6_vmpyieoh, 49154}, // __builtin_HEXAGON_V6_vmpyieoh
-      {Intrinsic::hexagon_V6_vmpyieoh_128B, 49184}, // __builtin_HEXAGON_V6_vmpyieoh_128B
-      {Intrinsic::hexagon_V6_vmpyiewh_acc, 49219}, // __builtin_HEXAGON_V6_vmpyiewh_acc
-      {Intrinsic::hexagon_V6_vmpyiewh_acc_128B, 49253}, // __builtin_HEXAGON_V6_vmpyiewh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiewuh, 49292}, // __builtin_HEXAGON_V6_vmpyiewuh
-      {Intrinsic::hexagon_V6_vmpyiewuh_128B, 49323}, // __builtin_HEXAGON_V6_vmpyiewuh_128B
-      {Intrinsic::hexagon_V6_vmpyiewuh_acc, 49359}, // __builtin_HEXAGON_V6_vmpyiewuh_acc
-      {Intrinsic::hexagon_V6_vmpyiewuh_acc_128B, 49394}, // __builtin_HEXAGON_V6_vmpyiewuh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyih, 49434}, // __builtin_HEXAGON_V6_vmpyih
-      {Intrinsic::hexagon_V6_vmpyih_128B, 49462}, // __builtin_HEXAGON_V6_vmpyih_128B
-      {Intrinsic::hexagon_V6_vmpyih_acc, 49495}, // __builtin_HEXAGON_V6_vmpyih_acc
-      {Intrinsic::hexagon_V6_vmpyih_acc_128B, 49527}, // __builtin_HEXAGON_V6_vmpyih_acc_128B
-      {Intrinsic::hexagon_V6_vmpyihb, 49564}, // __builtin_HEXAGON_V6_vmpyihb
-      {Intrinsic::hexagon_V6_vmpyihb_128B, 49593}, // __builtin_HEXAGON_V6_vmpyihb_128B
-      {Intrinsic::hexagon_V6_vmpyihb_acc, 49627}, // __builtin_HEXAGON_V6_vmpyihb_acc
-      {Intrinsic::hexagon_V6_vmpyihb_acc_128B, 49660}, // __builtin_HEXAGON_V6_vmpyihb_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiowh, 49698}, // __builtin_HEXAGON_V6_vmpyiowh
-      {Intrinsic::hexagon_V6_vmpyiowh_128B, 49728}, // __builtin_HEXAGON_V6_vmpyiowh_128B
-      {Intrinsic::hexagon_V6_vmpyiwb, 49763}, // __builtin_HEXAGON_V6_vmpyiwb
-      {Intrinsic::hexagon_V6_vmpyiwb_128B, 49792}, // __builtin_HEXAGON_V6_vmpyiwb_128B
-      {Intrinsic::hexagon_V6_vmpyiwb_acc, 49826}, // __builtin_HEXAGON_V6_vmpyiwb_acc
-      {Intrinsic::hexagon_V6_vmpyiwb_acc_128B, 49859}, // __builtin_HEXAGON_V6_vmpyiwb_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiwh, 49897}, // __builtin_HEXAGON_V6_vmpyiwh
-      {Intrinsic::hexagon_V6_vmpyiwh_128B, 49926}, // __builtin_HEXAGON_V6_vmpyiwh_128B
-      {Intrinsic::hexagon_V6_vmpyiwh_acc, 49960}, // __builtin_HEXAGON_V6_vmpyiwh_acc
-      {Intrinsic::hexagon_V6_vmpyiwh_acc_128B, 49993}, // __builtin_HEXAGON_V6_vmpyiwh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiwub, 50031}, // __builtin_HEXAGON_V6_vmpyiwub
-      {Intrinsic::hexagon_V6_vmpyiwub_128B, 50061}, // __builtin_HEXAGON_V6_vmpyiwub_128B
-      {Intrinsic::hexagon_V6_vmpyiwub_acc, 50096}, // __builtin_HEXAGON_V6_vmpyiwub_acc
-      {Intrinsic::hexagon_V6_vmpyiwub_acc_128B, 50130}, // __builtin_HEXAGON_V6_vmpyiwub_acc_128B
-      {Intrinsic::hexagon_V6_vmpyowh, 50169}, // __builtin_HEXAGON_V6_vmpyowh
-      {Intrinsic::hexagon_V6_vmpyowh_128B, 50198}, // __builtin_HEXAGON_V6_vmpyowh_128B
-      {Intrinsic::hexagon_V6_vmpyowh_64_acc, 50232}, // __builtin_HEXAGON_V6_vmpyowh_64_acc
-      {Intrinsic::hexagon_V6_vmpyowh_64_acc_128B, 50268}, // __builtin_HEXAGON_V6_vmpyowh_64_acc_128B
-      {Intrinsic::hexagon_V6_vmpyowh_rnd, 50309}, // __builtin_HEXAGON_V6_vmpyowh_rnd
-      {Intrinsic::hexagon_V6_vmpyowh_rnd_128B, 50342}, // __builtin_HEXAGON_V6_vmpyowh_rnd_128B
-      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc, 50380}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc
-      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc_128B, 50418}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc_128B
-      {Intrinsic::hexagon_V6_vmpyowh_sacc, 50461}, // __builtin_HEXAGON_V6_vmpyowh_sacc
-      {Intrinsic::hexagon_V6_vmpyowh_sacc_128B, 50495}, // __builtin_HEXAGON_V6_vmpyowh_sacc_128B
-      {Intrinsic::hexagon_V6_vmpyub, 50534}, // __builtin_HEXAGON_V6_vmpyub
-      {Intrinsic::hexagon_V6_vmpyub_128B, 50562}, // __builtin_HEXAGON_V6_vmpyub_128B
-      {Intrinsic::hexagon_V6_vmpyub_acc, 50595}, // __builtin_HEXAGON_V6_vmpyub_acc
-      {Intrinsic::hexagon_V6_vmpyub_acc_128B, 50627}, // __builtin_HEXAGON_V6_vmpyub_acc_128B
-      {Intrinsic::hexagon_V6_vmpyubv, 50664}, // __builtin_HEXAGON_V6_vmpyubv
-      {Intrinsic::hexagon_V6_vmpyubv_128B, 50693}, // __builtin_HEXAGON_V6_vmpyubv_128B
-      {Intrinsic::hexagon_V6_vmpyubv_acc, 50727}, // __builtin_HEXAGON_V6_vmpyubv_acc
-      {Intrinsic::hexagon_V6_vmpyubv_acc_128B, 50760}, // __builtin_HEXAGON_V6_vmpyubv_acc_128B
-      {Intrinsic::hexagon_V6_vmpyuh, 50798}, // __builtin_HEXAGON_V6_vmpyuh
-      {Intrinsic::hexagon_V6_vmpyuh_128B, 50826}, // __builtin_HEXAGON_V6_vmpyuh_128B
-      {Intrinsic::hexagon_V6_vmpyuh_acc, 50859}, // __builtin_HEXAGON_V6_vmpyuh_acc
-      {Intrinsic::hexagon_V6_vmpyuh_acc_128B, 50891}, // __builtin_HEXAGON_V6_vmpyuh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyuhe, 50928}, // __builtin_HEXAGON_V6_vmpyuhe
-      {Intrinsic::hexagon_V6_vmpyuhe_128B, 50957}, // __builtin_HEXAGON_V6_vmpyuhe_128B
-      {Intrinsic::hexagon_V6_vmpyuhe_acc, 50991}, // __builtin_HEXAGON_V6_vmpyuhe_acc
-      {Intrinsic::hexagon_V6_vmpyuhe_acc_128B, 51024}, // __builtin_HEXAGON_V6_vmpyuhe_acc_128B
-      {Intrinsic::hexagon_V6_vmpyuhv, 51062}, // __builtin_HEXAGON_V6_vmpyuhv
-      {Intrinsic::hexagon_V6_vmpyuhv_128B, 51091}, // __builtin_HEXAGON_V6_vmpyuhv_128B
-      {Intrinsic::hexagon_V6_vmpyuhv_acc, 51125}, // __builtin_HEXAGON_V6_vmpyuhv_acc
-      {Intrinsic::hexagon_V6_vmpyuhv_acc_128B, 51158}, // __builtin_HEXAGON_V6_vmpyuhv_acc_128B
-      {Intrinsic::hexagon_V6_vmux, 51196}, // __builtin_HEXAGON_V6_vmux
-      {Intrinsic::hexagon_V6_vmux_128B, 51222}, // __builtin_HEXAGON_V6_vmux_128B
-      {Intrinsic::hexagon_V6_vnavgb, 51253}, // __builtin_HEXAGON_V6_vnavgb
-      {Intrinsic::hexagon_V6_vnavgb_128B, 51281}, // __builtin_HEXAGON_V6_vnavgb_128B
-      {Intrinsic::hexagon_V6_vnavgh, 51314}, // __builtin_HEXAGON_V6_vnavgh
-      {Intrinsic::hexagon_V6_vnavgh_128B, 51342}, // __builtin_HEXAGON_V6_vnavgh_128B
-      {Intrinsic::hexagon_V6_vnavgub, 51375}, // __builtin_HEXAGON_V6_vnavgub
-      {Intrinsic::hexagon_V6_vnavgub_128B, 51404}, // __builtin_HEXAGON_V6_vnavgub_128B
-      {Intrinsic::hexagon_V6_vnavgw, 51438}, // __builtin_HEXAGON_V6_vnavgw
-      {Intrinsic::hexagon_V6_vnavgw_128B, 51466}, // __builtin_HEXAGON_V6_vnavgw_128B
-      {Intrinsic::hexagon_V6_vnormamth, 51499}, // __builtin_HEXAGON_V6_vnormamth
-      {Intrinsic::hexagon_V6_vnormamth_128B, 51530}, // __builtin_HEXAGON_V6_vnormamth_128B
-      {Intrinsic::hexagon_V6_vnormamtw, 51566}, // __builtin_HEXAGON_V6_vnormamtw
-      {Intrinsic::hexagon_V6_vnormamtw_128B, 51597}, // __builtin_HEXAGON_V6_vnormamtw_128B
-      {Intrinsic::hexagon_V6_vnot, 51633}, // __builtin_HEXAGON_V6_vnot
-      {Intrinsic::hexagon_V6_vnot_128B, 51659}, // __builtin_HEXAGON_V6_vnot_128B
-      {Intrinsic::hexagon_V6_vor, 51690}, // __builtin_HEXAGON_V6_vor
-      {Intrinsic::hexagon_V6_vor_128B, 51715}, // __builtin_HEXAGON_V6_vor_128B
-      {Intrinsic::hexagon_V6_vpackeb, 51745}, // __builtin_HEXAGON_V6_vpackeb
-      {Intrinsic::hexagon_V6_vpackeb_128B, 51774}, // __builtin_HEXAGON_V6_vpackeb_128B
-      {Intrinsic::hexagon_V6_vpackeh, 51808}, // __builtin_HEXAGON_V6_vpackeh
-      {Intrinsic::hexagon_V6_vpackeh_128B, 51837}, // __builtin_HEXAGON_V6_vpackeh_128B
-      {Intrinsic::hexagon_V6_vpackhb_sat, 51871}, // __builtin_HEXAGON_V6_vpackhb_sat
-      {Intrinsic::hexagon_V6_vpackhb_sat_128B, 51904}, // __builtin_HEXAGON_V6_vpackhb_sat_128B
-      {Intrinsic::hexagon_V6_vpackhub_sat, 51942}, // __builtin_HEXAGON_V6_vpackhub_sat
-      {Intrinsic::hexagon_V6_vpackhub_sat_128B, 51976}, // __builtin_HEXAGON_V6_vpackhub_sat_128B
-      {Intrinsic::hexagon_V6_vpackob, 52015}, // __builtin_HEXAGON_V6_vpackob
-      {Intrinsic::hexagon_V6_vpackob_128B, 52044}, // __builtin_HEXAGON_V6_vpackob_128B
-      {Intrinsic::hexagon_V6_vpackoh, 52078}, // __builtin_HEXAGON_V6_vpackoh
-      {Intrinsic::hexagon_V6_vpackoh_128B, 52107}, // __builtin_HEXAGON_V6_vpackoh_128B
-      {Intrinsic::hexagon_V6_vpackwh_sat, 52141}, // __builtin_HEXAGON_V6_vpackwh_sat
-      {Intrinsic::hexagon_V6_vpackwh_sat_128B, 52174}, // __builtin_HEXAGON_V6_vpackwh_sat_128B
-      {Intrinsic::hexagon_V6_vpackwuh_sat, 52212}, // __builtin_HEXAGON_V6_vpackwuh_sat
-      {Intrinsic::hexagon_V6_vpackwuh_sat_128B, 52246}, // __builtin_HEXAGON_V6_vpackwuh_sat_128B
-      {Intrinsic::hexagon_V6_vpopcounth, 52285}, // __builtin_HEXAGON_V6_vpopcounth
-      {Intrinsic::hexagon_V6_vpopcounth_128B, 52317}, // __builtin_HEXAGON_V6_vpopcounth_128B
-      {Intrinsic::hexagon_V6_vprefixqb, 52354}, // __builtin_HEXAGON_V6_vprefixqb
-      {Intrinsic::hexagon_V6_vprefixqb_128B, 52385}, // __builtin_HEXAGON_V6_vprefixqb_128B
-      {Intrinsic::hexagon_V6_vprefixqh, 52421}, // __builtin_HEXAGON_V6_vprefixqh
-      {Intrinsic::hexagon_V6_vprefixqh_128B, 52452}, // __builtin_HEXAGON_V6_vprefixqh_128B
-      {Intrinsic::hexagon_V6_vprefixqw, 52488}, // __builtin_HEXAGON_V6_vprefixqw
-      {Intrinsic::hexagon_V6_vprefixqw_128B, 52519}, // __builtin_HEXAGON_V6_vprefixqw_128B
-      {Intrinsic::hexagon_V6_vrdelta, 52555}, // __builtin_HEXAGON_V6_vrdelta
-      {Intrinsic::hexagon_V6_vrdelta_128B, 52584}, // __builtin_HEXAGON_V6_vrdelta_128B
-      {Intrinsic::hexagon_V6_vrmpybub_rtt, 52618}, // __builtin_HEXAGON_V6_vrmpybub_rtt
-      {Intrinsic::hexagon_V6_vrmpybub_rtt_128B, 52652}, // __builtin_HEXAGON_V6_vrmpybub_rtt_128B
-      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc, 52691}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc
-      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc_128B, 52729}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybus, 52772}, // __builtin_HEXAGON_V6_vrmpybus
-      {Intrinsic::hexagon_V6_vrmpybus_128B, 52802}, // __builtin_HEXAGON_V6_vrmpybus_128B
-      {Intrinsic::hexagon_V6_vrmpybus_acc, 52837}, // __builtin_HEXAGON_V6_vrmpybus_acc
-      {Intrinsic::hexagon_V6_vrmpybus_acc_128B, 52871}, // __builtin_HEXAGON_V6_vrmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybusi, 52910}, // __builtin_HEXAGON_V6_vrmpybusi
-      {Intrinsic::hexagon_V6_vrmpybusi_128B, 52941}, // __builtin_HEXAGON_V6_vrmpybusi_128B
-      {Intrinsic::hexagon_V6_vrmpybusi_acc, 52977}, // __builtin_HEXAGON_V6_vrmpybusi_acc
-      {Intrinsic::hexagon_V6_vrmpybusi_acc_128B, 53012}, // __builtin_HEXAGON_V6_vrmpybusi_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybusv, 53052}, // __builtin_HEXAGON_V6_vrmpybusv
-      {Intrinsic::hexagon_V6_vrmpybusv_128B, 53083}, // __builtin_HEXAGON_V6_vrmpybusv_128B
-      {Intrinsic::hexagon_V6_vrmpybusv_acc, 53119}, // __builtin_HEXAGON_V6_vrmpybusv_acc
-      {Intrinsic::hexagon_V6_vrmpybusv_acc_128B, 53154}, // __builtin_HEXAGON_V6_vrmpybusv_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybv, 53194}, // __builtin_HEXAGON_V6_vrmpybv
-      {Intrinsic::hexagon_V6_vrmpybv_128B, 53223}, // __builtin_HEXAGON_V6_vrmpybv_128B
-      {Intrinsic::hexagon_V6_vrmpybv_acc, 53257}, // __builtin_HEXAGON_V6_vrmpybv_acc
-      {Intrinsic::hexagon_V6_vrmpybv_acc_128B, 53290}, // __builtin_HEXAGON_V6_vrmpybv_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyub, 53328}, // __builtin_HEXAGON_V6_vrmpyub
-      {Intrinsic::hexagon_V6_vrmpyub_128B, 53357}, // __builtin_HEXAGON_V6_vrmpyub_128B
-      {Intrinsic::hexagon_V6_vrmpyub_acc, 53391}, // __builtin_HEXAGON_V6_vrmpyub_acc
-      {Intrinsic::hexagon_V6_vrmpyub_acc_128B, 53424}, // __builtin_HEXAGON_V6_vrmpyub_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyub_rtt, 53462}, // __builtin_HEXAGON_V6_vrmpyub_rtt
-      {Intrinsic::hexagon_V6_vrmpyub_rtt_128B, 53495}, // __builtin_HEXAGON_V6_vrmpyub_rtt_128B
-      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc, 53533}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc
-      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc_128B, 53570}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyubi, 53612}, // __builtin_HEXAGON_V6_vrmpyubi
-      {Intrinsic::hexagon_V6_vrmpyubi_128B, 53642}, // __builtin_HEXAGON_V6_vrmpyubi_128B
-      {Intrinsic::hexagon_V6_vrmpyubi_acc, 53677}, // __builtin_HEXAGON_V6_vrmpyubi_acc
-      {Intrinsic::hexagon_V6_vrmpyubi_acc_128B, 53711}, // __builtin_HEXAGON_V6_vrmpyubi_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyubv, 53750}, // __builtin_HEXAGON_V6_vrmpyubv
-      {Intrinsic::hexagon_V6_vrmpyubv_128B, 53780}, // __builtin_HEXAGON_V6_vrmpyubv_128B
-      {Intrinsic::hexagon_V6_vrmpyubv_acc, 53815}, // __builtin_HEXAGON_V6_vrmpyubv_acc
-      {Intrinsic::hexagon_V6_vrmpyubv_acc_128B, 53849}, // __builtin_HEXAGON_V6_vrmpyubv_acc_128B
-      {Intrinsic::hexagon_V6_vror, 53888}, // __builtin_HEXAGON_V6_vror
-      {Intrinsic::hexagon_V6_vror_128B, 53914}, // __builtin_HEXAGON_V6_vror_128B
-      {Intrinsic::hexagon_V6_vrotr, 53945}, // __builtin_HEXAGON_V6_vrotr
-      {Intrinsic::hexagon_V6_vrotr_128B, 53972}, // __builtin_HEXAGON_V6_vrotr_128B
-      {Intrinsic::hexagon_V6_vroundhb, 54004}, // __builtin_HEXAGON_V6_vroundhb
-      {Intrinsic::hexagon_V6_vroundhb_128B, 54034}, // __builtin_HEXAGON_V6_vroundhb_128B
-      {Intrinsic::hexagon_V6_vroundhub, 54069}, // __builtin_HEXAGON_V6_vroundhub
-      {Intrinsic::hexagon_V6_vroundhub_128B, 54100}, // __builtin_HEXAGON_V6_vroundhub_128B
-      {Intrinsic::hexagon_V6_vrounduhub, 54136}, // __builtin_HEXAGON_V6_vrounduhub
-      {Intrinsic::hexagon_V6_vrounduhub_128B, 54168}, // __builtin_HEXAGON_V6_vrounduhub_128B
-      {Intrinsic::hexagon_V6_vrounduwuh, 54205}, // __builtin_HEXAGON_V6_vrounduwuh
-      {Intrinsic::hexagon_V6_vrounduwuh_128B, 54237}, // __builtin_HEXAGON_V6_vrounduwuh_128B
-      {Intrinsic::hexagon_V6_vroundwh, 54274}, // __builtin_HEXAGON_V6_vroundwh
-      {Intrinsic::hexagon_V6_vroundwh_128B, 54304}, // __builtin_HEXAGON_V6_vroundwh_128B
-      {Intrinsic::hexagon_V6_vroundwuh, 54339}, // __builtin_HEXAGON_V6_vroundwuh
-      {Intrinsic::hexagon_V6_vroundwuh_128B, 54370}, // __builtin_HEXAGON_V6_vroundwuh_128B
-      {Intrinsic::hexagon_V6_vrsadubi, 54406}, // __builtin_HEXAGON_V6_vrsadubi
-      {Intrinsic::hexagon_V6_vrsadubi_128B, 54436}, // __builtin_HEXAGON_V6_vrsadubi_128B
-      {Intrinsic::hexagon_V6_vrsadubi_acc, 54471}, // __builtin_HEXAGON_V6_vrsadubi_acc
-      {Intrinsic::hexagon_V6_vrsadubi_acc_128B, 54505}, // __builtin_HEXAGON_V6_vrsadubi_acc_128B
-      {Intrinsic::hexagon_V6_vsatdw, 54544}, // __builtin_HEXAGON_V6_vsatdw
-      {Intrinsic::hexagon_V6_vsatdw_128B, 54572}, // __builtin_HEXAGON_V6_vsatdw_128B
-      {Intrinsic::hexagon_V6_vsathub, 54605}, // __builtin_HEXAGON_V6_vsathub
-      {Intrinsic::hexagon_V6_vsathub_128B, 54634}, // __builtin_HEXAGON_V6_vsathub_128B
-      {Intrinsic::hexagon_V6_vsatuwuh, 54668}, // __builtin_HEXAGON_V6_vsatuwuh
-      {Intrinsic::hexagon_V6_vsatuwuh_128B, 54698}, // __builtin_HEXAGON_V6_vsatuwuh_128B
-      {Intrinsic::hexagon_V6_vsatwh, 54733}, // __builtin_HEXAGON_V6_vsatwh
-      {Intrinsic::hexagon_V6_vsatwh_128B, 54761}, // __builtin_HEXAGON_V6_vsatwh_128B
-      {Intrinsic::hexagon_V6_vsb, 54794}, // __builtin_HEXAGON_V6_vsb
-      {Intrinsic::hexagon_V6_vsb_128B, 54819}, // __builtin_HEXAGON_V6_vsb_128B
-      {Intrinsic::hexagon_V6_vscattermh, 54849}, // __builtin_HEXAGON_V6_vscattermh
-      {Intrinsic::hexagon_V6_vscattermh_128B, 54881}, // __builtin_HEXAGON_V6_vscattermh_128B
-      {Intrinsic::hexagon_V6_vscattermh_add, 54918}, // __builtin_HEXAGON_V6_vscattermh_add
-      {Intrinsic::hexagon_V6_vscattermh_add_128B, 54954}, // __builtin_HEXAGON_V6_vscattermh_add_128B
-      {Intrinsic::hexagon_V6_vscattermhq, 54995}, // __builtin_HEXAGON_V6_vscattermhq
-      {Intrinsic::hexagon_V6_vscattermhq_128B, 55028}, // __builtin_HEXAGON_V6_vscattermhq_128B
-      {Intrinsic::hexagon_V6_vscattermhw, 55066}, // __builtin_HEXAGON_V6_vscattermhw
-      {Intrinsic::hexagon_V6_vscattermhw_128B, 55099}, // __builtin_HEXAGON_V6_vscattermhw_128B
-      {Intrinsic::hexagon_V6_vscattermhw_add, 55137}, // __builtin_HEXAGON_V6_vscattermhw_add
-      {Intrinsic::hexagon_V6_vscattermhw_add_128B, 55174}, // __builtin_HEXAGON_V6_vscattermhw_add_128B
-      {Intrinsic::hexagon_V6_vscattermhwq, 55216}, // __builtin_HEXAGON_V6_vscattermhwq
-      {Intrinsic::hexagon_V6_vscattermhwq_128B, 55250}, // __builtin_HEXAGON_V6_vscattermhwq_128B
-      {Intrinsic::hexagon_V6_vscattermw, 55289}, // __builtin_HEXAGON_V6_vscattermw
-      {Intrinsic::hexagon_V6_vscattermw_128B, 55321}, // __builtin_HEXAGON_V6_vscattermw_128B
-      {Intrinsic::hexagon_V6_vscattermw_add, 55358}, // __builtin_HEXAGON_V6_vscattermw_add
-      {Intrinsic::hexagon_V6_vscattermw_add_128B, 55394}, // __builtin_HEXAGON_V6_vscattermw_add_128B
-      {Intrinsic::hexagon_V6_vscattermwq, 55435}, // __builtin_HEXAGON_V6_vscattermwq
-      {Intrinsic::hexagon_V6_vscattermwq_128B, 55468}, // __builtin_HEXAGON_V6_vscattermwq_128B
-      {Intrinsic::hexagon_V6_vsh, 55506}, // __builtin_HEXAGON_V6_vsh
-      {Intrinsic::hexagon_V6_vsh_128B, 55531}, // __builtin_HEXAGON_V6_vsh_128B
-      {Intrinsic::hexagon_V6_vshufeh, 55561}, // __builtin_HEXAGON_V6_vshufeh
-      {Intrinsic::hexagon_V6_vshufeh_128B, 55590}, // __builtin_HEXAGON_V6_vshufeh_128B
-      {Intrinsic::hexagon_V6_vshuffb, 55624}, // __builtin_HEXAGON_V6_vshuffb
-      {Intrinsic::hexagon_V6_vshuffb_128B, 55653}, // __builtin_HEXAGON_V6_vshuffb_128B
-      {Intrinsic::hexagon_V6_vshuffeb, 55687}, // __builtin_HEXAGON_V6_vshuffeb
-      {Intrinsic::hexagon_V6_vshuffeb_128B, 55717}, // __builtin_HEXAGON_V6_vshuffeb_128B
-      {Intrinsic::hexagon_V6_vshuffh, 55752}, // __builtin_HEXAGON_V6_vshuffh
-      {Intrinsic::hexagon_V6_vshuffh_128B, 55781}, // __builtin_HEXAGON_V6_vshuffh_128B
-      {Intrinsic::hexagon_V6_vshuffob, 55815}, // __builtin_HEXAGON_V6_vshuffob
-      {Intrinsic::hexagon_V6_vshuffob_128B, 55845}, // __builtin_HEXAGON_V6_vshuffob_128B
-      {Intrinsic::hexagon_V6_vshuffvdd, 55880}, // __builtin_HEXAGON_V6_vshuffvdd
-      {Intrinsic::hexagon_V6_vshuffvdd_128B, 55911}, // __builtin_HEXAGON_V6_vshuffvdd_128B
-      {Intrinsic::hexagon_V6_vshufoeb, 55947}, // __builtin_HEXAGON_V6_vshufoeb
-      {Intrinsic::hexagon_V6_vshufoeb_128B, 55977}, // __builtin_HEXAGON_V6_vshufoeb_128B
-      {Intrinsic::hexagon_V6_vshufoeh, 56012}, // __builtin_HEXAGON_V6_vshufoeh
-      {Intrinsic::hexagon_V6_vshufoeh_128B, 56042}, // __builtin_HEXAGON_V6_vshufoeh_128B
-      {Intrinsic::hexagon_V6_vshufoh, 56077}, // __builtin_HEXAGON_V6_vshufoh
-      {Intrinsic::hexagon_V6_vshufoh_128B, 56106}, // __builtin_HEXAGON_V6_vshufoh_128B
-      {Intrinsic::hexagon_V6_vsubb, 56140}, // __builtin_HEXAGON_V6_vsubb
-      {Intrinsic::hexagon_V6_vsubb_128B, 56167}, // __builtin_HEXAGON_V6_vsubb_128B
-      {Intrinsic::hexagon_V6_vsubb_dv, 56199}, // __builtin_HEXAGON_V6_vsubb_dv
-      {Intrinsic::hexagon_V6_vsubb_dv_128B, 56229}, // __builtin_HEXAGON_V6_vsubb_dv_128B
-      {Intrinsic::hexagon_V6_vsubbnq, 56264}, // __builtin_HEXAGON_V6_vsubbnq
-      {Intrinsic::hexagon_V6_vsubbnq_128B, 56293}, // __builtin_HEXAGON_V6_vsubbnq_128B
-      {Intrinsic::hexagon_V6_vsubbq, 56327}, // __builtin_HEXAGON_V6_vsubbq
-      {Intrinsic::hexagon_V6_vsubbq_128B, 56355}, // __builtin_HEXAGON_V6_vsubbq_128B
-      {Intrinsic::hexagon_V6_vsubbsat, 56388}, // __builtin_HEXAGON_V6_vsubbsat
-      {Intrinsic::hexagon_V6_vsubbsat_128B, 56418}, // __builtin_HEXAGON_V6_vsubbsat_128B
-      {Intrinsic::hexagon_V6_vsubbsat_dv, 56453}, // __builtin_HEXAGON_V6_vsubbsat_dv
-      {Intrinsic::hexagon_V6_vsubbsat_dv_128B, 56486}, // __builtin_HEXAGON_V6_vsubbsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubh, 56524}, // __builtin_HEXAGON_V6_vsubh
-      {Intrinsic::hexagon_V6_vsubh_128B, 56551}, // __builtin_HEXAGON_V6_vsubh_128B
-      {Intrinsic::hexagon_V6_vsubh_dv, 56583}, // __builtin_HEXAGON_V6_vsubh_dv
-      {Intrinsic::hexagon_V6_vsubh_dv_128B, 56613}, // __builtin_HEXAGON_V6_vsubh_dv_128B
-      {Intrinsic::hexagon_V6_vsubhnq, 56648}, // __builtin_HEXAGON_V6_vsubhnq
-      {Intrinsic::hexagon_V6_vsubhnq_128B, 56677}, // __builtin_HEXAGON_V6_vsubhnq_128B
-      {Intrinsic::hexagon_V6_vsubhq, 56711}, // __builtin_HEXAGON_V6_vsubhq
-      {Intrinsic::hexagon_V6_vsubhq_128B, 56739}, // __builtin_HEXAGON_V6_vsubhq_128B
-      {Intrinsic::hexagon_V6_vsubhsat, 56772}, // __builtin_HEXAGON_V6_vsubhsat
-      {Intrinsic::hexagon_V6_vsubhsat_128B, 56802}, // __builtin_HEXAGON_V6_vsubhsat_128B
-      {Intrinsic::hexagon_V6_vsubhsat_dv, 56837}, // __builtin_HEXAGON_V6_vsubhsat_dv
-      {Intrinsic::hexagon_V6_vsubhsat_dv_128B, 56870}, // __builtin_HEXAGON_V6_vsubhsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubhw, 56908}, // __builtin_HEXAGON_V6_vsubhw
-      {Intrinsic::hexagon_V6_vsubhw_128B, 56936}, // __builtin_HEXAGON_V6_vsubhw_128B
-      {Intrinsic::hexagon_V6_vsububh, 56969}, // __builtin_HEXAGON_V6_vsububh
-      {Intrinsic::hexagon_V6_vsububh_128B, 56998}, // __builtin_HEXAGON_V6_vsububh_128B
-      {Intrinsic::hexagon_V6_vsububsat, 57032}, // __builtin_HEXAGON_V6_vsububsat
-      {Intrinsic::hexagon_V6_vsububsat_128B, 57063}, // __builtin_HEXAGON_V6_vsububsat_128B
-      {Intrinsic::hexagon_V6_vsububsat_dv, 57099}, // __builtin_HEXAGON_V6_vsububsat_dv
-      {Intrinsic::hexagon_V6_vsububsat_dv_128B, 57133}, // __builtin_HEXAGON_V6_vsububsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubububb_sat, 57172}, // __builtin_HEXAGON_V6_vsubububb_sat
-      {Intrinsic::hexagon_V6_vsubububb_sat_128B, 57207}, // __builtin_HEXAGON_V6_vsubububb_sat_128B
-      {Intrinsic::hexagon_V6_vsubuhsat, 57247}, // __builtin_HEXAGON_V6_vsubuhsat
-      {Intrinsic::hexagon_V6_vsubuhsat_128B, 57278}, // __builtin_HEXAGON_V6_vsubuhsat_128B
-      {Intrinsic::hexagon_V6_vsubuhsat_dv, 57314}, // __builtin_HEXAGON_V6_vsubuhsat_dv
-      {Intrinsic::hexagon_V6_vsubuhsat_dv_128B, 57348}, // __builtin_HEXAGON_V6_vsubuhsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubuhw, 57387}, // __builtin_HEXAGON_V6_vsubuhw
-      {Intrinsic::hexagon_V6_vsubuhw_128B, 57416}, // __builtin_HEXAGON_V6_vsubuhw_128B
-      {Intrinsic::hexagon_V6_vsubuwsat, 57450}, // __builtin_HEXAGON_V6_vsubuwsat
-      {Intrinsic::hexagon_V6_vsubuwsat_128B, 57481}, // __builtin_HEXAGON_V6_vsubuwsat_128B
-      {Intrinsic::hexagon_V6_vsubuwsat_dv, 57517}, // __builtin_HEXAGON_V6_vsubuwsat_dv
-      {Intrinsic::hexagon_V6_vsubuwsat_dv_128B, 57551}, // __builtin_HEXAGON_V6_vsubuwsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubw, 57590}, // __builtin_HEXAGON_V6_vsubw
-      {Intrinsic::hexagon_V6_vsubw_128B, 57617}, // __builtin_HEXAGON_V6_vsubw_128B
-      {Intrinsic::hexagon_V6_vsubw_dv, 57649}, // __builtin_HEXAGON_V6_vsubw_dv
-      {Intrinsic::hexagon_V6_vsubw_dv_128B, 57679}, // __builtin_HEXAGON_V6_vsubw_dv_128B
-      {Intrinsic::hexagon_V6_vsubwnq, 57714}, // __builtin_HEXAGON_V6_vsubwnq
-      {Intrinsic::hexagon_V6_vsubwnq_128B, 57743}, // __builtin_HEXAGON_V6_vsubwnq_128B
-      {Intrinsic::hexagon_V6_vsubwq, 57777}, // __builtin_HEXAGON_V6_vsubwq
-      {Intrinsic::hexagon_V6_vsubwq_128B, 57805}, // __builtin_HEXAGON_V6_vsubwq_128B
-      {Intrinsic::hexagon_V6_vsubwsat, 57838}, // __builtin_HEXAGON_V6_vsubwsat
-      {Intrinsic::hexagon_V6_vsubwsat_128B, 57868}, // __builtin_HEXAGON_V6_vsubwsat_128B
-      {Intrinsic::hexagon_V6_vsubwsat_dv, 57903}, // __builtin_HEXAGON_V6_vsubwsat_dv
-      {Intrinsic::hexagon_V6_vsubwsat_dv_128B, 57936}, // __builtin_HEXAGON_V6_vsubwsat_dv_128B
-      {Intrinsic::hexagon_V6_vswap, 57974}, // __builtin_HEXAGON_V6_vswap
-      {Intrinsic::hexagon_V6_vswap_128B, 58001}, // __builtin_HEXAGON_V6_vswap_128B
-      {Intrinsic::hexagon_V6_vtmpyb, 58033}, // __builtin_HEXAGON_V6_vtmpyb
-      {Intrinsic::hexagon_V6_vtmpyb_128B, 58061}, // __builtin_HEXAGON_V6_vtmpyb_128B
-      {Intrinsic::hexagon_V6_vtmpyb_acc, 58094}, // __builtin_HEXAGON_V6_vtmpyb_acc
-      {Intrinsic::hexagon_V6_vtmpyb_acc_128B, 58126}, // __builtin_HEXAGON_V6_vtmpyb_acc_128B
-      {Intrinsic::hexagon_V6_vtmpybus, 58163}, // __builtin_HEXAGON_V6_vtmpybus
-      {Intrinsic::hexagon_V6_vtmpybus_128B, 58193}, // __builtin_HEXAGON_V6_vtmpybus_128B
-      {Intrinsic::hexagon_V6_vtmpybus_acc, 58228}, // __builtin_HEXAGON_V6_vtmpybus_acc
-      {Intrinsic::hexagon_V6_vtmpybus_acc_128B, 58262}, // __builtin_HEXAGON_V6_vtmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vtmpyhb, 58301}, // __builtin_HEXAGON_V6_vtmpyhb
-      {Intrinsic::hexagon_V6_vtmpyhb_128B, 58330}, // __builtin_HEXAGON_V6_vtmpyhb_128B
-      {Intrinsic::hexagon_V6_vtmpyhb_acc, 58364}, // __builtin_HEXAGON_V6_vtmpyhb_acc
-      {Intrinsic::hexagon_V6_vtmpyhb_acc_128B, 58397}, // __builtin_HEXAGON_V6_vtmpyhb_acc_128B
-      {Intrinsic::hexagon_V6_vtran2x2_map, 58435}, // __builtin_HEXAGON_V6_vtran2x2_map
-      {Intrinsic::hexagon_V6_vtran2x2_map_128B, 58469}, // __builtin_HEXAGON_V6_vtran2x2_map_128B
-      {Intrinsic::hexagon_V6_vunpackb, 58508}, // __builtin_HEXAGON_V6_vunpackb
-      {Intrinsic::hexagon_V6_vunpackb_128B, 58538}, // __builtin_HEXAGON_V6_vunpackb_128B
-      {Intrinsic::hexagon_V6_vunpackh, 58573}, // __builtin_HEXAGON_V6_vunpackh
-      {Intrinsic::hexagon_V6_vunpackh_128B, 58603}, // __builtin_HEXAGON_V6_vunpackh_128B
-      {Intrinsic::hexagon_V6_vunpackob, 58638}, // __builtin_HEXAGON_V6_vunpackob
-      {Intrinsic::hexagon_V6_vunpackob_128B, 58669}, // __builtin_HEXAGON_V6_vunpackob_128B
-      {Intrinsic::hexagon_V6_vunpackoh, 58705}, // __builtin_HEXAGON_V6_vunpackoh
-      {Intrinsic::hexagon_V6_vunpackoh_128B, 58736}, // __builtin_HEXAGON_V6_vunpackoh_128B
-      {Intrinsic::hexagon_V6_vunpackub, 58772}, // __builtin_HEXAGON_V6_vunpackub
-      {Intrinsic::hexagon_V6_vunpackub_128B, 58803}, // __builtin_HEXAGON_V6_vunpackub_128B
-      {Intrinsic::hexagon_V6_vunpackuh, 58839}, // __builtin_HEXAGON_V6_vunpackuh
-      {Intrinsic::hexagon_V6_vunpackuh_128B, 58870}, // __builtin_HEXAGON_V6_vunpackuh_128B
-      {Intrinsic::hexagon_V6_vxor, 58906}, // __builtin_HEXAGON_V6_vxor
-      {Intrinsic::hexagon_V6_vxor_128B, 58932}, // __builtin_HEXAGON_V6_vxor_128B
-      {Intrinsic::hexagon_V6_vzb, 58963}, // __builtin_HEXAGON_V6_vzb
-      {Intrinsic::hexagon_V6_vzb_128B, 58988}, // __builtin_HEXAGON_V6_vzb_128B
-      {Intrinsic::hexagon_V6_vzh, 59018}, // __builtin_HEXAGON_V6_vzh
-      {Intrinsic::hexagon_V6_vzh_128B, 59043}, // __builtin_HEXAGON_V6_vzh_128B
-      {Intrinsic::hexagon_Y2_dccleana, 59073}, // __builtin_HEXAGON_Y2_dccleana
-      {Intrinsic::hexagon_Y2_dccleaninva, 59103}, // __builtin_HEXAGON_Y2_dccleaninva
-      {Intrinsic::hexagon_Y2_dcinva, 59136}, // __builtin_HEXAGON_Y2_dcinva
-      {Intrinsic::hexagon_Y2_dczeroa, 59164}, // __builtin_HEXAGON_Y2_dczeroa
-      {Intrinsic::hexagon_Y4_l2fetch, 59193}, // __builtin_HEXAGON_Y4_l2fetch
-      {Intrinsic::hexagon_Y5_l2fetch, 59222}, // __builtin_HEXAGON_Y5_l2fetch
-      {Intrinsic::hexagon_prefetch, 59464}, // __builtin_HEXAGON_prefetch
-      {Intrinsic::hexagon_S2_storerb_pbr, 28677}, // __builtin_brev_stb
-      {Intrinsic::hexagon_S2_storerd_pbr, 28696}, // __builtin_brev_std
-      {Intrinsic::hexagon_S2_storerh_pbr, 28736}, // __builtin_brev_sth
-      {Intrinsic::hexagon_S2_storerf_pbr, 28715}, // __builtin_brev_sthhi
-      {Intrinsic::hexagon_S2_storeri_pbr, 28755}, // __builtin_brev_stw
-      {Intrinsic::hexagon_circ_ldb, 59251}, // __builtin_circ_ldb
-      {Intrinsic::hexagon_circ_ldd, 59270}, // __builtin_circ_ldd
-      {Intrinsic::hexagon_circ_ldh, 59289}, // __builtin_circ_ldh
-      {Intrinsic::hexagon_circ_ldub, 59308}, // __builtin_circ_ldub
-      {Intrinsic::hexagon_circ_lduh, 59328}, // __builtin_circ_lduh
-      {Intrinsic::hexagon_circ_ldw, 59348}, // __builtin_circ_ldw
-      {Intrinsic::hexagon_circ_stb, 59367}, // __builtin_circ_stb
-      {Intrinsic::hexagon_circ_std, 59386}, // __builtin_circ_std
-      {Intrinsic::hexagon_circ_sth, 59405}, // __builtin_circ_sth
-      {Intrinsic::hexagon_circ_sthhi, 59424}, // __builtin_circ_sthhi
-      {Intrinsic::hexagon_circ_stw, 59445}, // __builtin_circ_stw
-      {Intrinsic::hexagon_vmemcpy, 59491}, // __builtin_hexagon_vmemcpy
-      {Intrinsic::hexagon_vmemset, 59517}, // __builtin_hexagon_vmemset
+      {Intrinsic::hexagon_A2_abs, 4495}, // __builtin_HEXAGON_A2_abs
+      {Intrinsic::hexagon_A2_absp, 4520}, // __builtin_HEXAGON_A2_absp
+      {Intrinsic::hexagon_A2_abssat, 4546}, // __builtin_HEXAGON_A2_abssat
+      {Intrinsic::hexagon_A2_add, 4574}, // __builtin_HEXAGON_A2_add
+      {Intrinsic::hexagon_A2_addh_h16_hh, 4599}, // __builtin_HEXAGON_A2_addh_h16_hh
+      {Intrinsic::hexagon_A2_addh_h16_hl, 4632}, // __builtin_HEXAGON_A2_addh_h16_hl
+      {Intrinsic::hexagon_A2_addh_h16_lh, 4665}, // __builtin_HEXAGON_A2_addh_h16_lh
+      {Intrinsic::hexagon_A2_addh_h16_ll, 4698}, // __builtin_HEXAGON_A2_addh_h16_ll
+      {Intrinsic::hexagon_A2_addh_h16_sat_hh, 4731}, // __builtin_HEXAGON_A2_addh_h16_sat_hh
+      {Intrinsic::hexagon_A2_addh_h16_sat_hl, 4768}, // __builtin_HEXAGON_A2_addh_h16_sat_hl
+      {Intrinsic::hexagon_A2_addh_h16_sat_lh, 4805}, // __builtin_HEXAGON_A2_addh_h16_sat_lh
+      {Intrinsic::hexagon_A2_addh_h16_sat_ll, 4842}, // __builtin_HEXAGON_A2_addh_h16_sat_ll
+      {Intrinsic::hexagon_A2_addh_l16_hl, 4879}, // __builtin_HEXAGON_A2_addh_l16_hl
+      {Intrinsic::hexagon_A2_addh_l16_ll, 4912}, // __builtin_HEXAGON_A2_addh_l16_ll
+      {Intrinsic::hexagon_A2_addh_l16_sat_hl, 4945}, // __builtin_HEXAGON_A2_addh_l16_sat_hl
+      {Intrinsic::hexagon_A2_addh_l16_sat_ll, 4982}, // __builtin_HEXAGON_A2_addh_l16_sat_ll
+      {Intrinsic::hexagon_A2_addi, 5019}, // __builtin_HEXAGON_A2_addi
+      {Intrinsic::hexagon_A2_addp, 5045}, // __builtin_HEXAGON_A2_addp
+      {Intrinsic::hexagon_A2_addpsat, 5071}, // __builtin_HEXAGON_A2_addpsat
+      {Intrinsic::hexagon_A2_addsat, 5100}, // __builtin_HEXAGON_A2_addsat
+      {Intrinsic::hexagon_A2_addsp, 5128}, // __builtin_HEXAGON_A2_addsp
+      {Intrinsic::hexagon_A2_and, 5155}, // __builtin_HEXAGON_A2_and
+      {Intrinsic::hexagon_A2_andir, 5180}, // __builtin_HEXAGON_A2_andir
+      {Intrinsic::hexagon_A2_andp, 5207}, // __builtin_HEXAGON_A2_andp
+      {Intrinsic::hexagon_A2_aslh, 5233}, // __builtin_HEXAGON_A2_aslh
+      {Intrinsic::hexagon_A2_asrh, 5259}, // __builtin_HEXAGON_A2_asrh
+      {Intrinsic::hexagon_A2_combine_hh, 5285}, // __builtin_HEXAGON_A2_combine_hh
+      {Intrinsic::hexagon_A2_combine_hl, 5317}, // __builtin_HEXAGON_A2_combine_hl
+      {Intrinsic::hexagon_A2_combine_lh, 5349}, // __builtin_HEXAGON_A2_combine_lh
+      {Intrinsic::hexagon_A2_combine_ll, 5381}, // __builtin_HEXAGON_A2_combine_ll
+      {Intrinsic::hexagon_A2_combineii, 5413}, // __builtin_HEXAGON_A2_combineii
+      {Intrinsic::hexagon_A2_combinew, 5444}, // __builtin_HEXAGON_A2_combinew
+      {Intrinsic::hexagon_A2_max, 5474}, // __builtin_HEXAGON_A2_max
+      {Intrinsic::hexagon_A2_maxp, 5499}, // __builtin_HEXAGON_A2_maxp
+      {Intrinsic::hexagon_A2_maxu, 5525}, // __builtin_HEXAGON_A2_maxu
+      {Intrinsic::hexagon_A2_maxup, 5551}, // __builtin_HEXAGON_A2_maxup
+      {Intrinsic::hexagon_A2_min, 5578}, // __builtin_HEXAGON_A2_min
+      {Intrinsic::hexagon_A2_minp, 5603}, // __builtin_HEXAGON_A2_minp
+      {Intrinsic::hexagon_A2_minu, 5629}, // __builtin_HEXAGON_A2_minu
+      {Intrinsic::hexagon_A2_minup, 5655}, // __builtin_HEXAGON_A2_minup
+      {Intrinsic::hexagon_A2_neg, 5682}, // __builtin_HEXAGON_A2_neg
+      {Intrinsic::hexagon_A2_negp, 5707}, // __builtin_HEXAGON_A2_negp
+      {Intrinsic::hexagon_A2_negsat, 5733}, // __builtin_HEXAGON_A2_negsat
+      {Intrinsic::hexagon_A2_not, 5761}, // __builtin_HEXAGON_A2_not
+      {Intrinsic::hexagon_A2_notp, 5786}, // __builtin_HEXAGON_A2_notp
+      {Intrinsic::hexagon_A2_or, 5812}, // __builtin_HEXAGON_A2_or
+      {Intrinsic::hexagon_A2_orir, 5836}, // __builtin_HEXAGON_A2_orir
+      {Intrinsic::hexagon_A2_orp, 5862}, // __builtin_HEXAGON_A2_orp
+      {Intrinsic::hexagon_A2_pxorf, 5887}, // __builtin_HEXAGON_A2_pxorf
+      {Intrinsic::hexagon_A2_roundsat, 5914}, // __builtin_HEXAGON_A2_roundsat
+      {Intrinsic::hexagon_A2_sat, 5944}, // __builtin_HEXAGON_A2_sat
+      {Intrinsic::hexagon_A2_satb, 5969}, // __builtin_HEXAGON_A2_satb
+      {Intrinsic::hexagon_A2_sath, 5995}, // __builtin_HEXAGON_A2_sath
+      {Intrinsic::hexagon_A2_satub, 6021}, // __builtin_HEXAGON_A2_satub
+      {Intrinsic::hexagon_A2_satuh, 6048}, // __builtin_HEXAGON_A2_satuh
+      {Intrinsic::hexagon_A2_sub, 6075}, // __builtin_HEXAGON_A2_sub
+      {Intrinsic::hexagon_A2_subh_h16_hh, 6100}, // __builtin_HEXAGON_A2_subh_h16_hh
+      {Intrinsic::hexagon_A2_subh_h16_hl, 6133}, // __builtin_HEXAGON_A2_subh_h16_hl
+      {Intrinsic::hexagon_A2_subh_h16_lh, 6166}, // __builtin_HEXAGON_A2_subh_h16_lh
+      {Intrinsic::hexagon_A2_subh_h16_ll, 6199}, // __builtin_HEXAGON_A2_subh_h16_ll
+      {Intrinsic::hexagon_A2_subh_h16_sat_hh, 6232}, // __builtin_HEXAGON_A2_subh_h16_sat_hh
+      {Intrinsic::hexagon_A2_subh_h16_sat_hl, 6269}, // __builtin_HEXAGON_A2_subh_h16_sat_hl
+      {Intrinsic::hexagon_A2_subh_h16_sat_lh, 6306}, // __builtin_HEXAGON_A2_subh_h16_sat_lh
+      {Intrinsic::hexagon_A2_subh_h16_sat_ll, 6343}, // __builtin_HEXAGON_A2_subh_h16_sat_ll
+      {Intrinsic::hexagon_A2_subh_l16_hl, 6380}, // __builtin_HEXAGON_A2_subh_l16_hl
+      {Intrinsic::hexagon_A2_subh_l16_ll, 6413}, // __builtin_HEXAGON_A2_subh_l16_ll
+      {Intrinsic::hexagon_A2_subh_l16_sat_hl, 6446}, // __builtin_HEXAGON_A2_subh_l16_sat_hl
+      {Intrinsic::hexagon_A2_subh_l16_sat_ll, 6483}, // __builtin_HEXAGON_A2_subh_l16_sat_ll
+      {Intrinsic::hexagon_A2_subp, 6520}, // __builtin_HEXAGON_A2_subp
+      {Intrinsic::hexagon_A2_subri, 6546}, // __builtin_HEXAGON_A2_subri
+      {Intrinsic::hexagon_A2_subsat, 6573}, // __builtin_HEXAGON_A2_subsat
+      {Intrinsic::hexagon_A2_svaddh, 6601}, // __builtin_HEXAGON_A2_svaddh
+      {Intrinsic::hexagon_A2_svaddhs, 6629}, // __builtin_HEXAGON_A2_svaddhs
+      {Intrinsic::hexagon_A2_svadduhs, 6658}, // __builtin_HEXAGON_A2_svadduhs
+      {Intrinsic::hexagon_A2_svavgh, 6688}, // __builtin_HEXAGON_A2_svavgh
+      {Intrinsic::hexagon_A2_svavghs, 6716}, // __builtin_HEXAGON_A2_svavghs
+      {Intrinsic::hexagon_A2_svnavgh, 6745}, // __builtin_HEXAGON_A2_svnavgh
+      {Intrinsic::hexagon_A2_svsubh, 6774}, // __builtin_HEXAGON_A2_svsubh
+      {Intrinsic::hexagon_A2_svsubhs, 6802}, // __builtin_HEXAGON_A2_svsubhs
+      {Intrinsic::hexagon_A2_svsubuhs, 6831}, // __builtin_HEXAGON_A2_svsubuhs
+      {Intrinsic::hexagon_A2_swiz, 6861}, // __builtin_HEXAGON_A2_swiz
+      {Intrinsic::hexagon_A2_sxtb, 6887}, // __builtin_HEXAGON_A2_sxtb
+      {Intrinsic::hexagon_A2_sxth, 6913}, // __builtin_HEXAGON_A2_sxth
+      {Intrinsic::hexagon_A2_sxtw, 6939}, // __builtin_HEXAGON_A2_sxtw
+      {Intrinsic::hexagon_A2_tfr, 6965}, // __builtin_HEXAGON_A2_tfr
+      {Intrinsic::hexagon_A2_tfrcrr, 6990}, // __builtin_HEXAGON_A2_tfrcrr
+      {Intrinsic::hexagon_A2_tfrih, 7018}, // __builtin_HEXAGON_A2_tfrih
+      {Intrinsic::hexagon_A2_tfril, 7045}, // __builtin_HEXAGON_A2_tfril
+      {Intrinsic::hexagon_A2_tfrp, 7072}, // __builtin_HEXAGON_A2_tfrp
+      {Intrinsic::hexagon_A2_tfrpi, 7098}, // __builtin_HEXAGON_A2_tfrpi
+      {Intrinsic::hexagon_A2_tfrrcr, 7125}, // __builtin_HEXAGON_A2_tfrrcr
+      {Intrinsic::hexagon_A2_tfrsi, 7153}, // __builtin_HEXAGON_A2_tfrsi
+      {Intrinsic::hexagon_A2_vabsh, 7180}, // __builtin_HEXAGON_A2_vabsh
+      {Intrinsic::hexagon_A2_vabshsat, 7207}, // __builtin_HEXAGON_A2_vabshsat
+      {Intrinsic::hexagon_A2_vabsw, 7237}, // __builtin_HEXAGON_A2_vabsw
+      {Intrinsic::hexagon_A2_vabswsat, 7264}, // __builtin_HEXAGON_A2_vabswsat
+      {Intrinsic::hexagon_A2_vaddb_map, 7294}, // __builtin_HEXAGON_A2_vaddb_map
+      {Intrinsic::hexagon_A2_vaddh, 7325}, // __builtin_HEXAGON_A2_vaddh
+      {Intrinsic::hexagon_A2_vaddhs, 7352}, // __builtin_HEXAGON_A2_vaddhs
+      {Intrinsic::hexagon_A2_vaddub, 7380}, // __builtin_HEXAGON_A2_vaddub
+      {Intrinsic::hexagon_A2_vaddubs, 7408}, // __builtin_HEXAGON_A2_vaddubs
+      {Intrinsic::hexagon_A2_vadduhs, 7437}, // __builtin_HEXAGON_A2_vadduhs
+      {Intrinsic::hexagon_A2_vaddw, 7466}, // __builtin_HEXAGON_A2_vaddw
+      {Intrinsic::hexagon_A2_vaddws, 7493}, // __builtin_HEXAGON_A2_vaddws
+      {Intrinsic::hexagon_A2_vavgh, 7521}, // __builtin_HEXAGON_A2_vavgh
+      {Intrinsic::hexagon_A2_vavghcr, 7548}, // __builtin_HEXAGON_A2_vavghcr
+      {Intrinsic::hexagon_A2_vavghr, 7577}, // __builtin_HEXAGON_A2_vavghr
+      {Intrinsic::hexagon_A2_vavgub, 7605}, // __builtin_HEXAGON_A2_vavgub
+      {Intrinsic::hexagon_A2_vavgubr, 7633}, // __builtin_HEXAGON_A2_vavgubr
+      {Intrinsic::hexagon_A2_vavguh, 7662}, // __builtin_HEXAGON_A2_vavguh
+      {Intrinsic::hexagon_A2_vavguhr, 7690}, // __builtin_HEXAGON_A2_vavguhr
+      {Intrinsic::hexagon_A2_vavguw, 7719}, // __builtin_HEXAGON_A2_vavguw
+      {Intrinsic::hexagon_A2_vavguwr, 7747}, // __builtin_HEXAGON_A2_vavguwr
+      {Intrinsic::hexagon_A2_vavgw, 7776}, // __builtin_HEXAGON_A2_vavgw
+      {Intrinsic::hexagon_A2_vavgwcr, 7803}, // __builtin_HEXAGON_A2_vavgwcr
+      {Intrinsic::hexagon_A2_vavgwr, 7832}, // __builtin_HEXAGON_A2_vavgwr
+      {Intrinsic::hexagon_A2_vcmpbeq, 7860}, // __builtin_HEXAGON_A2_vcmpbeq
+      {Intrinsic::hexagon_A2_vcmpbgtu, 7889}, // __builtin_HEXAGON_A2_vcmpbgtu
+      {Intrinsic::hexagon_A2_vcmpheq, 7919}, // __builtin_HEXAGON_A2_vcmpheq
+      {Intrinsic::hexagon_A2_vcmphgt, 7948}, // __builtin_HEXAGON_A2_vcmphgt
+      {Intrinsic::hexagon_A2_vcmphgtu, 7977}, // __builtin_HEXAGON_A2_vcmphgtu
+      {Intrinsic::hexagon_A2_vcmpweq, 8007}, // __builtin_HEXAGON_A2_vcmpweq
+      {Intrinsic::hexagon_A2_vcmpwgt, 8036}, // __builtin_HEXAGON_A2_vcmpwgt
+      {Intrinsic::hexagon_A2_vcmpwgtu, 8065}, // __builtin_HEXAGON_A2_vcmpwgtu
+      {Intrinsic::hexagon_A2_vconj, 8095}, // __builtin_HEXAGON_A2_vconj
+      {Intrinsic::hexagon_A2_vmaxb, 8122}, // __builtin_HEXAGON_A2_vmaxb
+      {Intrinsic::hexagon_A2_vmaxh, 8149}, // __builtin_HEXAGON_A2_vmaxh
+      {Intrinsic::hexagon_A2_vmaxub, 8176}, // __builtin_HEXAGON_A2_vmaxub
+      {Intrinsic::hexagon_A2_vmaxuh, 8204}, // __builtin_HEXAGON_A2_vmaxuh
+      {Intrinsic::hexagon_A2_vmaxuw, 8232}, // __builtin_HEXAGON_A2_vmaxuw
+      {Intrinsic::hexagon_A2_vmaxw, 8260}, // __builtin_HEXAGON_A2_vmaxw
+      {Intrinsic::hexagon_A2_vminb, 8287}, // __builtin_HEXAGON_A2_vminb
+      {Intrinsic::hexagon_A2_vminh, 8314}, // __builtin_HEXAGON_A2_vminh
+      {Intrinsic::hexagon_A2_vminub, 8341}, // __builtin_HEXAGON_A2_vminub
+      {Intrinsic::hexagon_A2_vminuh, 8369}, // __builtin_HEXAGON_A2_vminuh
+      {Intrinsic::hexagon_A2_vminuw, 8397}, // __builtin_HEXAGON_A2_vminuw
+      {Intrinsic::hexagon_A2_vminw, 8425}, // __builtin_HEXAGON_A2_vminw
+      {Intrinsic::hexagon_A2_vnavgh, 8452}, // __builtin_HEXAGON_A2_vnavgh
+      {Intrinsic::hexagon_A2_vnavghcr, 8480}, // __builtin_HEXAGON_A2_vnavghcr
+      {Intrinsic::hexagon_A2_vnavghr, 8510}, // __builtin_HEXAGON_A2_vnavghr
+      {Intrinsic::hexagon_A2_vnavgw, 8539}, // __builtin_HEXAGON_A2_vnavgw
+      {Intrinsic::hexagon_A2_vnavgwcr, 8567}, // __builtin_HEXAGON_A2_vnavgwcr
+      {Intrinsic::hexagon_A2_vnavgwr, 8597}, // __builtin_HEXAGON_A2_vnavgwr
+      {Intrinsic::hexagon_A2_vraddub, 8626}, // __builtin_HEXAGON_A2_vraddub
+      {Intrinsic::hexagon_A2_vraddub_acc, 8655}, // __builtin_HEXAGON_A2_vraddub_acc
+      {Intrinsic::hexagon_A2_vrsadub, 8688}, // __builtin_HEXAGON_A2_vrsadub
+      {Intrinsic::hexagon_A2_vrsadub_acc, 8717}, // __builtin_HEXAGON_A2_vrsadub_acc
+      {Intrinsic::hexagon_A2_vsubb_map, 8750}, // __builtin_HEXAGON_A2_vsubb_map
+      {Intrinsic::hexagon_A2_vsubh, 8781}, // __builtin_HEXAGON_A2_vsubh
+      {Intrinsic::hexagon_A2_vsubhs, 8808}, // __builtin_HEXAGON_A2_vsubhs
+      {Intrinsic::hexagon_A2_vsubub, 8836}, // __builtin_HEXAGON_A2_vsubub
+      {Intrinsic::hexagon_A2_vsububs, 8864}, // __builtin_HEXAGON_A2_vsububs
+      {Intrinsic::hexagon_A2_vsubuhs, 8893}, // __builtin_HEXAGON_A2_vsubuhs
+      {Intrinsic::hexagon_A2_vsubw, 8922}, // __builtin_HEXAGON_A2_vsubw
+      {Intrinsic::hexagon_A2_vsubws, 8949}, // __builtin_HEXAGON_A2_vsubws
+      {Intrinsic::hexagon_A2_xor, 8977}, // __builtin_HEXAGON_A2_xor
+      {Intrinsic::hexagon_A2_xorp, 9002}, // __builtin_HEXAGON_A2_xorp
+      {Intrinsic::hexagon_A2_zxtb, 9028}, // __builtin_HEXAGON_A2_zxtb
+      {Intrinsic::hexagon_A2_zxth, 9054}, // __builtin_HEXAGON_A2_zxth
+      {Intrinsic::hexagon_A4_addp_c, 9080}, // __builtin_HEXAGON_A4_addp_c
+      {Intrinsic::hexagon_A4_andn, 9108}, // __builtin_HEXAGON_A4_andn
+      {Intrinsic::hexagon_A4_andnp, 9134}, // __builtin_HEXAGON_A4_andnp
+      {Intrinsic::hexagon_A4_bitsplit, 9161}, // __builtin_HEXAGON_A4_bitsplit
+      {Intrinsic::hexagon_A4_bitspliti, 9191}, // __builtin_HEXAGON_A4_bitspliti
+      {Intrinsic::hexagon_A4_boundscheck, 9222}, // __builtin_HEXAGON_A4_boundscheck
+      {Intrinsic::hexagon_A4_cmpbeq, 9255}, // __builtin_HEXAGON_A4_cmpbeq
+      {Intrinsic::hexagon_A4_cmpbeqi, 9283}, // __builtin_HEXAGON_A4_cmpbeqi
+      {Intrinsic::hexagon_A4_cmpbgt, 9312}, // __builtin_HEXAGON_A4_cmpbgt
+      {Intrinsic::hexagon_A4_cmpbgti, 9340}, // __builtin_HEXAGON_A4_cmpbgti
+      {Intrinsic::hexagon_A4_cmpbgtu, 9369}, // __builtin_HEXAGON_A4_cmpbgtu
+      {Intrinsic::hexagon_A4_cmpbgtui, 9398}, // __builtin_HEXAGON_A4_cmpbgtui
+      {Intrinsic::hexagon_A4_cmpheq, 9428}, // __builtin_HEXAGON_A4_cmpheq
+      {Intrinsic::hexagon_A4_cmpheqi, 9456}, // __builtin_HEXAGON_A4_cmpheqi
+      {Intrinsic::hexagon_A4_cmphgt, 9485}, // __builtin_HEXAGON_A4_cmphgt
+      {Intrinsic::hexagon_A4_cmphgti, 9513}, // __builtin_HEXAGON_A4_cmphgti
+      {Intrinsic::hexagon_A4_cmphgtu, 9542}, // __builtin_HEXAGON_A4_cmphgtu
+      {Intrinsic::hexagon_A4_cmphgtui, 9571}, // __builtin_HEXAGON_A4_cmphgtui
+      {Intrinsic::hexagon_A4_combineii, 9601}, // __builtin_HEXAGON_A4_combineii
+      {Intrinsic::hexagon_A4_combineir, 9632}, // __builtin_HEXAGON_A4_combineir
+      {Intrinsic::hexagon_A4_combineri, 9663}, // __builtin_HEXAGON_A4_combineri
+      {Intrinsic::hexagon_A4_cround_ri, 9694}, // __builtin_HEXAGON_A4_cround_ri
+      {Intrinsic::hexagon_A4_cround_rr, 9725}, // __builtin_HEXAGON_A4_cround_rr
+      {Intrinsic::hexagon_A4_modwrapu, 9756}, // __builtin_HEXAGON_A4_modwrapu
+      {Intrinsic::hexagon_A4_orn, 9786}, // __builtin_HEXAGON_A4_orn
+      {Intrinsic::hexagon_A4_ornp, 9811}, // __builtin_HEXAGON_A4_ornp
+      {Intrinsic::hexagon_A4_rcmpeq, 9837}, // __builtin_HEXAGON_A4_rcmpeq
+      {Intrinsic::hexagon_A4_rcmpeqi, 9865}, // __builtin_HEXAGON_A4_rcmpeqi
+      {Intrinsic::hexagon_A4_rcmpneq, 9894}, // __builtin_HEXAGON_A4_rcmpneq
+      {Intrinsic::hexagon_A4_rcmpneqi, 9923}, // __builtin_HEXAGON_A4_rcmpneqi
+      {Intrinsic::hexagon_A4_round_ri, 9953}, // __builtin_HEXAGON_A4_round_ri
+      {Intrinsic::hexagon_A4_round_ri_sat, 9983}, // __builtin_HEXAGON_A4_round_ri_sat
+      {Intrinsic::hexagon_A4_round_rr, 10017}, // __builtin_HEXAGON_A4_round_rr
+      {Intrinsic::hexagon_A4_round_rr_sat, 10047}, // __builtin_HEXAGON_A4_round_rr_sat
+      {Intrinsic::hexagon_A4_subp_c, 10081}, // __builtin_HEXAGON_A4_subp_c
+      {Intrinsic::hexagon_A4_tfrcpp, 10109}, // __builtin_HEXAGON_A4_tfrcpp
+      {Intrinsic::hexagon_A4_tfrpcp, 10137}, // __builtin_HEXAGON_A4_tfrpcp
+      {Intrinsic::hexagon_A4_tlbmatch, 10165}, // __builtin_HEXAGON_A4_tlbmatch
+      {Intrinsic::hexagon_A4_vcmpbeq_any, 10195}, // __builtin_HEXAGON_A4_vcmpbeq_any
+      {Intrinsic::hexagon_A4_vcmpbeqi, 10228}, // __builtin_HEXAGON_A4_vcmpbeqi
+      {Intrinsic::hexagon_A4_vcmpbgt, 10258}, // __builtin_HEXAGON_A4_vcmpbgt
+      {Intrinsic::hexagon_A4_vcmpbgti, 10287}, // __builtin_HEXAGON_A4_vcmpbgti
+      {Intrinsic::hexagon_A4_vcmpbgtui, 10317}, // __builtin_HEXAGON_A4_vcmpbgtui
+      {Intrinsic::hexagon_A4_vcmpheqi, 10348}, // __builtin_HEXAGON_A4_vcmpheqi
+      {Intrinsic::hexagon_A4_vcmphgti, 10378}, // __builtin_HEXAGON_A4_vcmphgti
+      {Intrinsic::hexagon_A4_vcmphgtui, 10408}, // __builtin_HEXAGON_A4_vcmphgtui
+      {Intrinsic::hexagon_A4_vcmpweqi, 10439}, // __builtin_HEXAGON_A4_vcmpweqi
+      {Intrinsic::hexagon_A4_vcmpwgti, 10469}, // __builtin_HEXAGON_A4_vcmpwgti
+      {Intrinsic::hexagon_A4_vcmpwgtui, 10499}, // __builtin_HEXAGON_A4_vcmpwgtui
+      {Intrinsic::hexagon_A4_vrmaxh, 10530}, // __builtin_HEXAGON_A4_vrmaxh
+      {Intrinsic::hexagon_A4_vrmaxuh, 10558}, // __builtin_HEXAGON_A4_vrmaxuh
+      {Intrinsic::hexagon_A4_vrmaxuw, 10587}, // __builtin_HEXAGON_A4_vrmaxuw
+      {Intrinsic::hexagon_A4_vrmaxw, 10616}, // __builtin_HEXAGON_A4_vrmaxw
+      {Intrinsic::hexagon_A4_vrminh, 10644}, // __builtin_HEXAGON_A4_vrminh
+      {Intrinsic::hexagon_A4_vrminuh, 10672}, // __builtin_HEXAGON_A4_vrminuh
+      {Intrinsic::hexagon_A4_vrminuw, 10701}, // __builtin_HEXAGON_A4_vrminuw
+      {Intrinsic::hexagon_A4_vrminw, 10730}, // __builtin_HEXAGON_A4_vrminw
+      {Intrinsic::hexagon_A5_ACS, 10758}, // __builtin_HEXAGON_A5_ACS
+      {Intrinsic::hexagon_A5_vaddhubs, 10783}, // __builtin_HEXAGON_A5_vaddhubs
+      {Intrinsic::hexagon_A6_vcmpbeq_notany, 10813}, // __builtin_HEXAGON_A6_vcmpbeq_notany
+      {Intrinsic::hexagon_A6_vminub_RdP, 10849}, // __builtin_HEXAGON_A6_vminub_RdP
+      {Intrinsic::hexagon_C2_all8, 10881}, // __builtin_HEXAGON_C2_all8
+      {Intrinsic::hexagon_C2_and, 10907}, // __builtin_HEXAGON_C2_and
+      {Intrinsic::hexagon_C2_andn, 10932}, // __builtin_HEXAGON_C2_andn
+      {Intrinsic::hexagon_C2_any8, 10958}, // __builtin_HEXAGON_C2_any8
+      {Intrinsic::hexagon_C2_bitsclr, 10984}, // __builtin_HEXAGON_C2_bitsclr
+      {Intrinsic::hexagon_C2_bitsclri, 11013}, // __builtin_HEXAGON_C2_bitsclri
+      {Intrinsic::hexagon_C2_bitsset, 11043}, // __builtin_HEXAGON_C2_bitsset
+      {Intrinsic::hexagon_C2_cmpeq, 11072}, // __builtin_HEXAGON_C2_cmpeq
+      {Intrinsic::hexagon_C2_cmpeqi, 11099}, // __builtin_HEXAGON_C2_cmpeqi
+      {Intrinsic::hexagon_C2_cmpeqp, 11127}, // __builtin_HEXAGON_C2_cmpeqp
+      {Intrinsic::hexagon_C2_cmpgei, 11155}, // __builtin_HEXAGON_C2_cmpgei
+      {Intrinsic::hexagon_C2_cmpgeui, 11183}, // __builtin_HEXAGON_C2_cmpgeui
+      {Intrinsic::hexagon_C2_cmpgt, 11212}, // __builtin_HEXAGON_C2_cmpgt
+      {Intrinsic::hexagon_C2_cmpgti, 11239}, // __builtin_HEXAGON_C2_cmpgti
+      {Intrinsic::hexagon_C2_cmpgtp, 11267}, // __builtin_HEXAGON_C2_cmpgtp
+      {Intrinsic::hexagon_C2_cmpgtu, 11295}, // __builtin_HEXAGON_C2_cmpgtu
+      {Intrinsic::hexagon_C2_cmpgtui, 11323}, // __builtin_HEXAGON_C2_cmpgtui
+      {Intrinsic::hexagon_C2_cmpgtup, 11352}, // __builtin_HEXAGON_C2_cmpgtup
+      {Intrinsic::hexagon_C2_cmplt, 11381}, // __builtin_HEXAGON_C2_cmplt
+      {Intrinsic::hexagon_C2_cmpltu, 11408}, // __builtin_HEXAGON_C2_cmpltu
+      {Intrinsic::hexagon_C2_mask, 11436}, // __builtin_HEXAGON_C2_mask
+      {Intrinsic::hexagon_C2_mux, 11462}, // __builtin_HEXAGON_C2_mux
+      {Intrinsic::hexagon_C2_muxii, 11487}, // __builtin_HEXAGON_C2_muxii
+      {Intrinsic::hexagon_C2_muxir, 11514}, // __builtin_HEXAGON_C2_muxir
+      {Intrinsic::hexagon_C2_muxri, 11541}, // __builtin_HEXAGON_C2_muxri
+      {Intrinsic::hexagon_C2_not, 11568}, // __builtin_HEXAGON_C2_not
+      {Intrinsic::hexagon_C2_or, 11593}, // __builtin_HEXAGON_C2_or
+      {Intrinsic::hexagon_C2_orn, 11617}, // __builtin_HEXAGON_C2_orn
+      {Intrinsic::hexagon_C2_pxfer_map, 11642}, // __builtin_HEXAGON_C2_pxfer_map
+      {Intrinsic::hexagon_C2_tfrpr, 11673}, // __builtin_HEXAGON_C2_tfrpr
+      {Intrinsic::hexagon_C2_tfrrp, 11700}, // __builtin_HEXAGON_C2_tfrrp
+      {Intrinsic::hexagon_C2_vitpack, 11727}, // __builtin_HEXAGON_C2_vitpack
+      {Intrinsic::hexagon_C2_vmux, 11756}, // __builtin_HEXAGON_C2_vmux
+      {Intrinsic::hexagon_C2_xor, 11782}, // __builtin_HEXAGON_C2_xor
+      {Intrinsic::hexagon_C4_and_and, 11807}, // __builtin_HEXAGON_C4_and_and
+      {Intrinsic::hexagon_C4_and_andn, 11836}, // __builtin_HEXAGON_C4_and_andn
+      {Intrinsic::hexagon_C4_and_or, 11866}, // __builtin_HEXAGON_C4_and_or
+      {Intrinsic::hexagon_C4_and_orn, 11894}, // __builtin_HEXAGON_C4_and_orn
+      {Intrinsic::hexagon_C4_cmplte, 11923}, // __builtin_HEXAGON_C4_cmplte
+      {Intrinsic::hexagon_C4_cmpltei, 11951}, // __builtin_HEXAGON_C4_cmpltei
+      {Intrinsic::hexagon_C4_cmplteu, 11980}, // __builtin_HEXAGON_C4_cmplteu
+      {Intrinsic::hexagon_C4_cmplteui, 12009}, // __builtin_HEXAGON_C4_cmplteui
+      {Intrinsic::hexagon_C4_cmpneq, 12039}, // __builtin_HEXAGON_C4_cmpneq
+      {Intrinsic::hexagon_C4_cmpneqi, 12067}, // __builtin_HEXAGON_C4_cmpneqi
+      {Intrinsic::hexagon_C4_fastcorner9, 12096}, // __builtin_HEXAGON_C4_fastcorner9
+      {Intrinsic::hexagon_C4_fastcorner9_not, 12129}, // __builtin_HEXAGON_C4_fastcorner9_not
+      {Intrinsic::hexagon_C4_nbitsclr, 12166}, // __builtin_HEXAGON_C4_nbitsclr
+      {Intrinsic::hexagon_C4_nbitsclri, 12196}, // __builtin_HEXAGON_C4_nbitsclri
+      {Intrinsic::hexagon_C4_nbitsset, 12227}, // __builtin_HEXAGON_C4_nbitsset
+      {Intrinsic::hexagon_C4_or_and, 12257}, // __builtin_HEXAGON_C4_or_and
+      {Intrinsic::hexagon_C4_or_andn, 12285}, // __builtin_HEXAGON_C4_or_andn
+      {Intrinsic::hexagon_C4_or_or, 12314}, // __builtin_HEXAGON_C4_or_or
+      {Intrinsic::hexagon_C4_or_orn, 12341}, // __builtin_HEXAGON_C4_or_orn
+      {Intrinsic::hexagon_F2_conv_d2df, 12369}, // __builtin_HEXAGON_F2_conv_d2df
+      {Intrinsic::hexagon_F2_conv_d2sf, 12400}, // __builtin_HEXAGON_F2_conv_d2sf
+      {Intrinsic::hexagon_F2_conv_df2d, 12431}, // __builtin_HEXAGON_F2_conv_df2d
+      {Intrinsic::hexagon_F2_conv_df2d_chop, 12462}, // __builtin_HEXAGON_F2_conv_df2d_chop
+      {Intrinsic::hexagon_F2_conv_df2sf, 12498}, // __builtin_HEXAGON_F2_conv_df2sf
+      {Intrinsic::hexagon_F2_conv_df2ud, 12530}, // __builtin_HEXAGON_F2_conv_df2ud
+      {Intrinsic::hexagon_F2_conv_df2ud_chop, 12562}, // __builtin_HEXAGON_F2_conv_df2ud_chop
+      {Intrinsic::hexagon_F2_conv_df2uw, 12599}, // __builtin_HEXAGON_F2_conv_df2uw
+      {Intrinsic::hexagon_F2_conv_df2uw_chop, 12631}, // __builtin_HEXAGON_F2_conv_df2uw_chop
+      {Intrinsic::hexagon_F2_conv_df2w, 12668}, // __builtin_HEXAGON_F2_conv_df2w
+      {Intrinsic::hexagon_F2_conv_df2w_chop, 12699}, // __builtin_HEXAGON_F2_conv_df2w_chop
+      {Intrinsic::hexagon_F2_conv_sf2d, 12735}, // __builtin_HEXAGON_F2_conv_sf2d
+      {Intrinsic::hexagon_F2_conv_sf2d_chop, 12766}, // __builtin_HEXAGON_F2_conv_sf2d_chop
+      {Intrinsic::hexagon_F2_conv_sf2df, 12802}, // __builtin_HEXAGON_F2_conv_sf2df
+      {Intrinsic::hexagon_F2_conv_sf2ud, 12834}, // __builtin_HEXAGON_F2_conv_sf2ud
+      {Intrinsic::hexagon_F2_conv_sf2ud_chop, 12866}, // __builtin_HEXAGON_F2_conv_sf2ud_chop
+      {Intrinsic::hexagon_F2_conv_sf2uw, 12903}, // __builtin_HEXAGON_F2_conv_sf2uw
+      {Intrinsic::hexagon_F2_conv_sf2uw_chop, 12935}, // __builtin_HEXAGON_F2_conv_sf2uw_chop
+      {Intrinsic::hexagon_F2_conv_sf2w, 12972}, // __builtin_HEXAGON_F2_conv_sf2w
+      {Intrinsic::hexagon_F2_conv_sf2w_chop, 13003}, // __builtin_HEXAGON_F2_conv_sf2w_chop
+      {Intrinsic::hexagon_F2_conv_ud2df, 13039}, // __builtin_HEXAGON_F2_conv_ud2df
+      {Intrinsic::hexagon_F2_conv_ud2sf, 13071}, // __builtin_HEXAGON_F2_conv_ud2sf
+      {Intrinsic::hexagon_F2_conv_uw2df, 13103}, // __builtin_HEXAGON_F2_conv_uw2df
+      {Intrinsic::hexagon_F2_conv_uw2sf, 13135}, // __builtin_HEXAGON_F2_conv_uw2sf
+      {Intrinsic::hexagon_F2_conv_w2df, 13167}, // __builtin_HEXAGON_F2_conv_w2df
+      {Intrinsic::hexagon_F2_conv_w2sf, 13198}, // __builtin_HEXAGON_F2_conv_w2sf
+      {Intrinsic::hexagon_F2_dfadd, 13229}, // __builtin_HEXAGON_F2_dfadd
+      {Intrinsic::hexagon_F2_dfclass, 13256}, // __builtin_HEXAGON_F2_dfclass
+      {Intrinsic::hexagon_F2_dfcmpeq, 13285}, // __builtin_HEXAGON_F2_dfcmpeq
+      {Intrinsic::hexagon_F2_dfcmpge, 13314}, // __builtin_HEXAGON_F2_dfcmpge
+      {Intrinsic::hexagon_F2_dfcmpgt, 13343}, // __builtin_HEXAGON_F2_dfcmpgt
+      {Intrinsic::hexagon_F2_dfcmpuo, 13372}, // __builtin_HEXAGON_F2_dfcmpuo
+      {Intrinsic::hexagon_F2_dfimm_n, 13401}, // __builtin_HEXAGON_F2_dfimm_n
+      {Intrinsic::hexagon_F2_dfimm_p, 13430}, // __builtin_HEXAGON_F2_dfimm_p
+      {Intrinsic::hexagon_F2_dfsub, 13459}, // __builtin_HEXAGON_F2_dfsub
+      {Intrinsic::hexagon_F2_sfadd, 13486}, // __builtin_HEXAGON_F2_sfadd
+      {Intrinsic::hexagon_F2_sfclass, 13513}, // __builtin_HEXAGON_F2_sfclass
+      {Intrinsic::hexagon_F2_sfcmpeq, 13542}, // __builtin_HEXAGON_F2_sfcmpeq
+      {Intrinsic::hexagon_F2_sfcmpge, 13571}, // __builtin_HEXAGON_F2_sfcmpge
+      {Intrinsic::hexagon_F2_sfcmpgt, 13600}, // __builtin_HEXAGON_F2_sfcmpgt
+      {Intrinsic::hexagon_F2_sfcmpuo, 13629}, // __builtin_HEXAGON_F2_sfcmpuo
+      {Intrinsic::hexagon_F2_sffixupd, 13658}, // __builtin_HEXAGON_F2_sffixupd
+      {Intrinsic::hexagon_F2_sffixupn, 13688}, // __builtin_HEXAGON_F2_sffixupn
+      {Intrinsic::hexagon_F2_sffixupr, 13718}, // __builtin_HEXAGON_F2_sffixupr
+      {Intrinsic::hexagon_F2_sffma, 13748}, // __builtin_HEXAGON_F2_sffma
+      {Intrinsic::hexagon_F2_sffma_lib, 13775}, // __builtin_HEXAGON_F2_sffma_lib
+      {Intrinsic::hexagon_F2_sffma_sc, 13806}, // __builtin_HEXAGON_F2_sffma_sc
+      {Intrinsic::hexagon_F2_sffms, 13836}, // __builtin_HEXAGON_F2_sffms
+      {Intrinsic::hexagon_F2_sffms_lib, 13863}, // __builtin_HEXAGON_F2_sffms_lib
+      {Intrinsic::hexagon_F2_sfimm_n, 13894}, // __builtin_HEXAGON_F2_sfimm_n
+      {Intrinsic::hexagon_F2_sfimm_p, 13923}, // __builtin_HEXAGON_F2_sfimm_p
+      {Intrinsic::hexagon_F2_sfinvsqrta, 13952}, // __builtin_HEXAGON_F2_sfinvsqrta
+      {Intrinsic::hexagon_F2_sfmax, 13984}, // __builtin_HEXAGON_F2_sfmax
+      {Intrinsic::hexagon_F2_sfmin, 14011}, // __builtin_HEXAGON_F2_sfmin
+      {Intrinsic::hexagon_F2_sfmpy, 14038}, // __builtin_HEXAGON_F2_sfmpy
+      {Intrinsic::hexagon_F2_sfrecipa, 14065}, // __builtin_HEXAGON_F2_sfrecipa
+      {Intrinsic::hexagon_F2_sfsub, 14095}, // __builtin_HEXAGON_F2_sfsub
+      {Intrinsic::hexagon_L2_loadw_locked, 14122}, // __builtin_HEXAGON_L2_loadw_locked
+      {Intrinsic::hexagon_L4_loadd_locked, 14156}, // __builtin_HEXAGON_L4_loadd_locked
+      {Intrinsic::hexagon_M2_acci, 14190}, // __builtin_HEXAGON_M2_acci
+      {Intrinsic::hexagon_M2_accii, 14216}, // __builtin_HEXAGON_M2_accii
+      {Intrinsic::hexagon_M2_cmaci_s0, 14243}, // __builtin_HEXAGON_M2_cmaci_s0
+      {Intrinsic::hexagon_M2_cmacr_s0, 14273}, // __builtin_HEXAGON_M2_cmacr_s0
+      {Intrinsic::hexagon_M2_cmacs_s0, 14303}, // __builtin_HEXAGON_M2_cmacs_s0
+      {Intrinsic::hexagon_M2_cmacs_s1, 14333}, // __builtin_HEXAGON_M2_cmacs_s1
+      {Intrinsic::hexagon_M2_cmacsc_s0, 14363}, // __builtin_HEXAGON_M2_cmacsc_s0
+      {Intrinsic::hexagon_M2_cmacsc_s1, 14394}, // __builtin_HEXAGON_M2_cmacsc_s1
+      {Intrinsic::hexagon_M2_cmpyi_s0, 14425}, // __builtin_HEXAGON_M2_cmpyi_s0
+      {Intrinsic::hexagon_M2_cmpyr_s0, 14455}, // __builtin_HEXAGON_M2_cmpyr_s0
+      {Intrinsic::hexagon_M2_cmpyrs_s0, 14485}, // __builtin_HEXAGON_M2_cmpyrs_s0
+      {Intrinsic::hexagon_M2_cmpyrs_s1, 14516}, // __builtin_HEXAGON_M2_cmpyrs_s1
+      {Intrinsic::hexagon_M2_cmpyrsc_s0, 14547}, // __builtin_HEXAGON_M2_cmpyrsc_s0
+      {Intrinsic::hexagon_M2_cmpyrsc_s1, 14579}, // __builtin_HEXAGON_M2_cmpyrsc_s1
+      {Intrinsic::hexagon_M2_cmpys_s0, 14611}, // __builtin_HEXAGON_M2_cmpys_s0
+      {Intrinsic::hexagon_M2_cmpys_s1, 14641}, // __builtin_HEXAGON_M2_cmpys_s1
+      {Intrinsic::hexagon_M2_cmpysc_s0, 14671}, // __builtin_HEXAGON_M2_cmpysc_s0
+      {Intrinsic::hexagon_M2_cmpysc_s1, 14702}, // __builtin_HEXAGON_M2_cmpysc_s1
+      {Intrinsic::hexagon_M2_cnacs_s0, 14733}, // __builtin_HEXAGON_M2_cnacs_s0
+      {Intrinsic::hexagon_M2_cnacs_s1, 14763}, // __builtin_HEXAGON_M2_cnacs_s1
+      {Intrinsic::hexagon_M2_cnacsc_s0, 14793}, // __builtin_HEXAGON_M2_cnacsc_s0
+      {Intrinsic::hexagon_M2_cnacsc_s1, 14824}, // __builtin_HEXAGON_M2_cnacsc_s1
+      {Intrinsic::hexagon_M2_dpmpyss_acc_s0, 14855}, // __builtin_HEXAGON_M2_dpmpyss_acc_s0
+      {Intrinsic::hexagon_M2_dpmpyss_nac_s0, 14891}, // __builtin_HEXAGON_M2_dpmpyss_nac_s0
+      {Intrinsic::hexagon_M2_dpmpyss_rnd_s0, 14927}, // __builtin_HEXAGON_M2_dpmpyss_rnd_s0
+      {Intrinsic::hexagon_M2_dpmpyss_s0, 14963}, // __builtin_HEXAGON_M2_dpmpyss_s0
+      {Intrinsic::hexagon_M2_dpmpyuu_acc_s0, 14995}, // __builtin_HEXAGON_M2_dpmpyuu_acc_s0
+      {Intrinsic::hexagon_M2_dpmpyuu_nac_s0, 15031}, // __builtin_HEXAGON_M2_dpmpyuu_nac_s0
+      {Intrinsic::hexagon_M2_dpmpyuu_s0, 15067}, // __builtin_HEXAGON_M2_dpmpyuu_s0
+      {Intrinsic::hexagon_M2_hmmpyh_rs1, 15099}, // __builtin_HEXAGON_M2_hmmpyh_rs1
+      {Intrinsic::hexagon_M2_hmmpyh_s1, 15131}, // __builtin_HEXAGON_M2_hmmpyh_s1
+      {Intrinsic::hexagon_M2_hmmpyl_rs1, 15162}, // __builtin_HEXAGON_M2_hmmpyl_rs1
+      {Intrinsic::hexagon_M2_hmmpyl_s1, 15194}, // __builtin_HEXAGON_M2_hmmpyl_s1
+      {Intrinsic::hexagon_M2_maci, 15225}, // __builtin_HEXAGON_M2_maci
+      {Intrinsic::hexagon_M2_macsin, 15251}, // __builtin_HEXAGON_M2_macsin
+      {Intrinsic::hexagon_M2_macsip, 15279}, // __builtin_HEXAGON_M2_macsip
+      {Intrinsic::hexagon_M2_mmachs_rs0, 15307}, // __builtin_HEXAGON_M2_mmachs_rs0
+      {Intrinsic::hexagon_M2_mmachs_rs1, 15339}, // __builtin_HEXAGON_M2_mmachs_rs1
+      {Intrinsic::hexagon_M2_mmachs_s0, 15371}, // __builtin_HEXAGON_M2_mmachs_s0
+      {Intrinsic::hexagon_M2_mmachs_s1, 15402}, // __builtin_HEXAGON_M2_mmachs_s1
+      {Intrinsic::hexagon_M2_mmacls_rs0, 15433}, // __builtin_HEXAGON_M2_mmacls_rs0
+      {Intrinsic::hexagon_M2_mmacls_rs1, 15465}, // __builtin_HEXAGON_M2_mmacls_rs1
+      {Intrinsic::hexagon_M2_mmacls_s0, 15497}, // __builtin_HEXAGON_M2_mmacls_s0
+      {Intrinsic::hexagon_M2_mmacls_s1, 15528}, // __builtin_HEXAGON_M2_mmacls_s1
+      {Intrinsic::hexagon_M2_mmacuhs_rs0, 15559}, // __builtin_HEXAGON_M2_mmacuhs_rs0
+      {Intrinsic::hexagon_M2_mmacuhs_rs1, 15592}, // __builtin_HEXAGON_M2_mmacuhs_rs1
+      {Intrinsic::hexagon_M2_mmacuhs_s0, 15625}, // __builtin_HEXAGON_M2_mmacuhs_s0
+      {Intrinsic::hexagon_M2_mmacuhs_s1, 15657}, // __builtin_HEXAGON_M2_mmacuhs_s1
+      {Intrinsic::hexagon_M2_mmaculs_rs0, 15689}, // __builtin_HEXAGON_M2_mmaculs_rs0
+      {Intrinsic::hexagon_M2_mmaculs_rs1, 15722}, // __builtin_HEXAGON_M2_mmaculs_rs1
+      {Intrinsic::hexagon_M2_mmaculs_s0, 15755}, // __builtin_HEXAGON_M2_mmaculs_s0
+      {Intrinsic::hexagon_M2_mmaculs_s1, 15787}, // __builtin_HEXAGON_M2_mmaculs_s1
+      {Intrinsic::hexagon_M2_mmpyh_rs0, 15819}, // __builtin_HEXAGON_M2_mmpyh_rs0
+      {Intrinsic::hexagon_M2_mmpyh_rs1, 15850}, // __builtin_HEXAGON_M2_mmpyh_rs1
+      {Intrinsic::hexagon_M2_mmpyh_s0, 15881}, // __builtin_HEXAGON_M2_mmpyh_s0
+      {Intrinsic::hexagon_M2_mmpyh_s1, 15911}, // __builtin_HEXAGON_M2_mmpyh_s1
+      {Intrinsic::hexagon_M2_mmpyl_rs0, 15941}, // __builtin_HEXAGON_M2_mmpyl_rs0
+      {Intrinsic::hexagon_M2_mmpyl_rs1, 15972}, // __builtin_HEXAGON_M2_mmpyl_rs1
+      {Intrinsic::hexagon_M2_mmpyl_s0, 16003}, // __builtin_HEXAGON_M2_mmpyl_s0
+      {Intrinsic::hexagon_M2_mmpyl_s1, 16033}, // __builtin_HEXAGON_M2_mmpyl_s1
+      {Intrinsic::hexagon_M2_mmpyuh_rs0, 16063}, // __builtin_HEXAGON_M2_mmpyuh_rs0
+      {Intrinsic::hexagon_M2_mmpyuh_rs1, 16095}, // __builtin_HEXAGON_M2_mmpyuh_rs1
+      {Intrinsic::hexagon_M2_mmpyuh_s0, 16127}, // __builtin_HEXAGON_M2_mmpyuh_s0
+      {Intrinsic::hexagon_M2_mmpyuh_s1, 16158}, // __builtin_HEXAGON_M2_mmpyuh_s1
+      {Intrinsic::hexagon_M2_mmpyul_rs0, 16189}, // __builtin_HEXAGON_M2_mmpyul_rs0
+      {Intrinsic::hexagon_M2_mmpyul_rs1, 16221}, // __builtin_HEXAGON_M2_mmpyul_rs1
+      {Intrinsic::hexagon_M2_mmpyul_s0, 16253}, // __builtin_HEXAGON_M2_mmpyul_s0
+      {Intrinsic::hexagon_M2_mmpyul_s1, 16284}, // __builtin_HEXAGON_M2_mmpyul_s1
+      {Intrinsic::hexagon_M2_mnaci, 16315}, // __builtin_HEXAGON_M2_mnaci
+      {Intrinsic::hexagon_M2_mpy_acc_hh_s0, 16342}, // __builtin_HEXAGON_M2_mpy_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_hh_s1, 16377}, // __builtin_HEXAGON_M2_mpy_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_hl_s0, 16412}, // __builtin_HEXAGON_M2_mpy_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpy_acc_hl_s1, 16447}, // __builtin_HEXAGON_M2_mpy_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpy_acc_lh_s0, 16482}, // __builtin_HEXAGON_M2_mpy_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_lh_s1, 16517}, // __builtin_HEXAGON_M2_mpy_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_ll_s0, 16552}, // __builtin_HEXAGON_M2_mpy_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpy_acc_ll_s1, 16587}, // __builtin_HEXAGON_M2_mpy_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s0, 16622}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s1, 16661}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s0, 16700}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s1, 16739}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s0, 16778}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s1, 16817}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s0, 16856}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s1, 16895}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s1
+      {Intrinsic::hexagon_M2_mpy_hh_s0, 16934}, // __builtin_HEXAGON_M2_mpy_hh_s0
+      {Intrinsic::hexagon_M2_mpy_hh_s1, 16965}, // __builtin_HEXAGON_M2_mpy_hh_s1
+      {Intrinsic::hexagon_M2_mpy_hl_s0, 16996}, // __builtin_HEXAGON_M2_mpy_hl_s0
+      {Intrinsic::hexagon_M2_mpy_hl_s1, 17027}, // __builtin_HEXAGON_M2_mpy_hl_s1
+      {Intrinsic::hexagon_M2_mpy_lh_s0, 17058}, // __builtin_HEXAGON_M2_mpy_lh_s0
+      {Intrinsic::hexagon_M2_mpy_lh_s1, 17089}, // __builtin_HEXAGON_M2_mpy_lh_s1
+      {Intrinsic::hexagon_M2_mpy_ll_s0, 17120}, // __builtin_HEXAGON_M2_mpy_ll_s0
+      {Intrinsic::hexagon_M2_mpy_ll_s1, 17151}, // __builtin_HEXAGON_M2_mpy_ll_s1
+      {Intrinsic::hexagon_M2_mpy_nac_hh_s0, 17182}, // __builtin_HEXAGON_M2_mpy_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_hh_s1, 17217}, // __builtin_HEXAGON_M2_mpy_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_hl_s0, 17252}, // __builtin_HEXAGON_M2_mpy_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpy_nac_hl_s1, 17287}, // __builtin_HEXAGON_M2_mpy_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpy_nac_lh_s0, 17322}, // __builtin_HEXAGON_M2_mpy_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_lh_s1, 17357}, // __builtin_HEXAGON_M2_mpy_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_ll_s0, 17392}, // __builtin_HEXAGON_M2_mpy_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpy_nac_ll_s1, 17427}, // __builtin_HEXAGON_M2_mpy_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s0, 17462}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s1, 17501}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s0, 17540}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s1, 17579}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s0, 17618}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s1, 17657}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s0, 17696}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s1, 17735}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_hh_s0, 17774}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_hh_s1, 17809}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_hl_s0, 17844}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_hl_s1, 17879}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_lh_s0, 17914}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_lh_s1, 17949}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_ll_s0, 17984}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_ll_s1, 18019}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s1
+      {Intrinsic::hexagon_M2_mpy_sat_hh_s0, 18054}, // __builtin_HEXAGON_M2_mpy_sat_hh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_hh_s1, 18089}, // __builtin_HEXAGON_M2_mpy_sat_hh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_hl_s0, 18124}, // __builtin_HEXAGON_M2_mpy_sat_hl_s0
+      {Intrinsic::hexagon_M2_mpy_sat_hl_s1, 18159}, // __builtin_HEXAGON_M2_mpy_sat_hl_s1
+      {Intrinsic::hexagon_M2_mpy_sat_lh_s0, 18194}, // __builtin_HEXAGON_M2_mpy_sat_lh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_lh_s1, 18229}, // __builtin_HEXAGON_M2_mpy_sat_lh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_ll_s0, 18264}, // __builtin_HEXAGON_M2_mpy_sat_ll_s0
+      {Intrinsic::hexagon_M2_mpy_sat_ll_s1, 18299}, // __builtin_HEXAGON_M2_mpy_sat_ll_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s0, 18334}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s1, 18373}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s0, 18412}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s1, 18451}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s0, 18490}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s1, 18529}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s0, 18568}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s1, 18607}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s1
+      {Intrinsic::hexagon_M2_mpy_up, 18646}, // __builtin_HEXAGON_M2_mpy_up
+      {Intrinsic::hexagon_M2_mpy_up_s1, 18674}, // __builtin_HEXAGON_M2_mpy_up_s1
+      {Intrinsic::hexagon_M2_mpy_up_s1_sat, 18705}, // __builtin_HEXAGON_M2_mpy_up_s1_sat
+      {Intrinsic::hexagon_M2_mpyd_acc_hh_s0, 18740}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_hh_s1, 18776}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_acc_hl_s0, 18812}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_hl_s1, 18848}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_acc_lh_s0, 18884}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_lh_s1, 18920}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_acc_ll_s0, 18956}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_ll_s1, 18992}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpyd_hh_s0, 19028}, // __builtin_HEXAGON_M2_mpyd_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_hh_s1, 19060}, // __builtin_HEXAGON_M2_mpyd_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_hl_s0, 19092}, // __builtin_HEXAGON_M2_mpyd_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_hl_s1, 19124}, // __builtin_HEXAGON_M2_mpyd_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_lh_s0, 19156}, // __builtin_HEXAGON_M2_mpyd_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_lh_s1, 19188}, // __builtin_HEXAGON_M2_mpyd_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_ll_s0, 19220}, // __builtin_HEXAGON_M2_mpyd_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_ll_s1, 19252}, // __builtin_HEXAGON_M2_mpyd_ll_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_hh_s0, 19284}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_hh_s1, 19320}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_hl_s0, 19356}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_hl_s1, 19392}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_lh_s0, 19428}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_lh_s1, 19464}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_ll_s0, 19500}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_ll_s1, 19536}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s0, 19572}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s1, 19608}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s0, 19644}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s1, 19680}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s0, 19716}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s1, 19752}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s0, 19788}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s1, 19824}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s1
+      {Intrinsic::hexagon_M2_mpyi, 19860}, // __builtin_HEXAGON_M2_mpyi
+      {Intrinsic::hexagon_M2_mpysin, 19886}, // __builtin_HEXAGON_M2_mpysin
+      {Intrinsic::hexagon_M2_mpysip, 19914}, // __builtin_HEXAGON_M2_mpysip
+      {Intrinsic::hexagon_M2_mpysmi, 19942}, // __builtin_HEXAGON_M2_mpysmi
+      {Intrinsic::hexagon_M2_mpysu_up, 19970}, // __builtin_HEXAGON_M2_mpysu_up
+      {Intrinsic::hexagon_M2_mpyu_acc_hh_s0, 20000}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_hh_s1, 20036}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpyu_acc_hl_s0, 20072}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_hl_s1, 20108}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpyu_acc_lh_s0, 20144}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_lh_s1, 20180}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpyu_acc_ll_s0, 20216}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_ll_s1, 20252}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpyu_hh_s0, 20288}, // __builtin_HEXAGON_M2_mpyu_hh_s0
+      {Intrinsic::hexagon_M2_mpyu_hh_s1, 20320}, // __builtin_HEXAGON_M2_mpyu_hh_s1
+      {Intrinsic::hexagon_M2_mpyu_hl_s0, 20352}, // __builtin_HEXAGON_M2_mpyu_hl_s0
+      {Intrinsic::hexagon_M2_mpyu_hl_s1, 20384}, // __builtin_HEXAGON_M2_mpyu_hl_s1
+      {Intrinsic::hexagon_M2_mpyu_lh_s0, 20416}, // __builtin_HEXAGON_M2_mpyu_lh_s0
+      {Intrinsic::hexagon_M2_mpyu_lh_s1, 20448}, // __builtin_HEXAGON_M2_mpyu_lh_s1
+      {Intrinsic::hexagon_M2_mpyu_ll_s0, 20480}, // __builtin_HEXAGON_M2_mpyu_ll_s0
+      {Intrinsic::hexagon_M2_mpyu_ll_s1, 20512}, // __builtin_HEXAGON_M2_mpyu_ll_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_hh_s0, 20544}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_hh_s1, 20580}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_hl_s0, 20616}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_hl_s1, 20652}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_lh_s0, 20688}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_lh_s1, 20724}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_ll_s0, 20760}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_ll_s1, 20796}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpyu_up, 20832}, // __builtin_HEXAGON_M2_mpyu_up
+      {Intrinsic::hexagon_M2_mpyud_acc_hh_s0, 20861}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_hh_s1, 20898}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpyud_acc_hl_s0, 20935}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_hl_s1, 20972}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpyud_acc_lh_s0, 21009}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_lh_s1, 21046}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpyud_acc_ll_s0, 21083}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_ll_s1, 21120}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpyud_hh_s0, 21157}, // __builtin_HEXAGON_M2_mpyud_hh_s0
+      {Intrinsic::hexagon_M2_mpyud_hh_s1, 21190}, // __builtin_HEXAGON_M2_mpyud_hh_s1
+      {Intrinsic::hexagon_M2_mpyud_hl_s0, 21223}, // __builtin_HEXAGON_M2_mpyud_hl_s0
+      {Intrinsic::hexagon_M2_mpyud_hl_s1, 21256}, // __builtin_HEXAGON_M2_mpyud_hl_s1
+      {Intrinsic::hexagon_M2_mpyud_lh_s0, 21289}, // __builtin_HEXAGON_M2_mpyud_lh_s0
+      {Intrinsic::hexagon_M2_mpyud_lh_s1, 21322}, // __builtin_HEXAGON_M2_mpyud_lh_s1
+      {Intrinsic::hexagon_M2_mpyud_ll_s0, 21355}, // __builtin_HEXAGON_M2_mpyud_ll_s0
+      {Intrinsic::hexagon_M2_mpyud_ll_s1, 21388}, // __builtin_HEXAGON_M2_mpyud_ll_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_hh_s0, 21421}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_hh_s1, 21458}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_hl_s0, 21495}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_hl_s1, 21532}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_lh_s0, 21569}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_lh_s1, 21606}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_ll_s0, 21643}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_ll_s1, 21680}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpyui, 21717}, // __builtin_HEXAGON_M2_mpyui
+      {Intrinsic::hexagon_M2_nacci, 21744}, // __builtin_HEXAGON_M2_nacci
+      {Intrinsic::hexagon_M2_naccii, 21771}, // __builtin_HEXAGON_M2_naccii
+      {Intrinsic::hexagon_M2_subacc, 21799}, // __builtin_HEXAGON_M2_subacc
+      {Intrinsic::hexagon_M2_vabsdiffh, 21827}, // __builtin_HEXAGON_M2_vabsdiffh
+      {Intrinsic::hexagon_M2_vabsdiffw, 21858}, // __builtin_HEXAGON_M2_vabsdiffw
+      {Intrinsic::hexagon_M2_vcmac_s0_sat_i, 21889}, // __builtin_HEXAGON_M2_vcmac_s0_sat_i
+      {Intrinsic::hexagon_M2_vcmac_s0_sat_r, 21925}, // __builtin_HEXAGON_M2_vcmac_s0_sat_r
+      {Intrinsic::hexagon_M2_vcmpy_s0_sat_i, 21961}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_i
+      {Intrinsic::hexagon_M2_vcmpy_s0_sat_r, 21997}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_r
+      {Intrinsic::hexagon_M2_vcmpy_s1_sat_i, 22033}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_i
+      {Intrinsic::hexagon_M2_vcmpy_s1_sat_r, 22069}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_r
+      {Intrinsic::hexagon_M2_vdmacs_s0, 22105}, // __builtin_HEXAGON_M2_vdmacs_s0
+      {Intrinsic::hexagon_M2_vdmacs_s1, 22136}, // __builtin_HEXAGON_M2_vdmacs_s1
+      {Intrinsic::hexagon_M2_vdmpyrs_s0, 22167}, // __builtin_HEXAGON_M2_vdmpyrs_s0
+      {Intrinsic::hexagon_M2_vdmpyrs_s1, 22199}, // __builtin_HEXAGON_M2_vdmpyrs_s1
+      {Intrinsic::hexagon_M2_vdmpys_s0, 22231}, // __builtin_HEXAGON_M2_vdmpys_s0
+      {Intrinsic::hexagon_M2_vdmpys_s1, 22262}, // __builtin_HEXAGON_M2_vdmpys_s1
+      {Intrinsic::hexagon_M2_vmac2, 22293}, // __builtin_HEXAGON_M2_vmac2
+      {Intrinsic::hexagon_M2_vmac2es, 22320}, // __builtin_HEXAGON_M2_vmac2es
+      {Intrinsic::hexagon_M2_vmac2es_s0, 22349}, // __builtin_HEXAGON_M2_vmac2es_s0
+      {Intrinsic::hexagon_M2_vmac2es_s1, 22381}, // __builtin_HEXAGON_M2_vmac2es_s1
+      {Intrinsic::hexagon_M2_vmac2s_s0, 22413}, // __builtin_HEXAGON_M2_vmac2s_s0
+      {Intrinsic::hexagon_M2_vmac2s_s1, 22444}, // __builtin_HEXAGON_M2_vmac2s_s1
+      {Intrinsic::hexagon_M2_vmac2su_s0, 22475}, // __builtin_HEXAGON_M2_vmac2su_s0
+      {Intrinsic::hexagon_M2_vmac2su_s1, 22507}, // __builtin_HEXAGON_M2_vmac2su_s1
+      {Intrinsic::hexagon_M2_vmpy2es_s0, 22539}, // __builtin_HEXAGON_M2_vmpy2es_s0
+      {Intrinsic::hexagon_M2_vmpy2es_s1, 22571}, // __builtin_HEXAGON_M2_vmpy2es_s1
+      {Intrinsic::hexagon_M2_vmpy2s_s0, 22603}, // __builtin_HEXAGON_M2_vmpy2s_s0
+      {Intrinsic::hexagon_M2_vmpy2s_s0pack, 22634}, // __builtin_HEXAGON_M2_vmpy2s_s0pack
+      {Intrinsic::hexagon_M2_vmpy2s_s1, 22669}, // __builtin_HEXAGON_M2_vmpy2s_s1
+      {Intrinsic::hexagon_M2_vmpy2s_s1pack, 22700}, // __builtin_HEXAGON_M2_vmpy2s_s1pack
+      {Intrinsic::hexagon_M2_vmpy2su_s0, 22735}, // __builtin_HEXAGON_M2_vmpy2su_s0
+      {Intrinsic::hexagon_M2_vmpy2su_s1, 22767}, // __builtin_HEXAGON_M2_vmpy2su_s1
+      {Intrinsic::hexagon_M2_vraddh, 22799}, // __builtin_HEXAGON_M2_vraddh
+      {Intrinsic::hexagon_M2_vradduh, 22827}, // __builtin_HEXAGON_M2_vradduh
+      {Intrinsic::hexagon_M2_vrcmaci_s0, 22856}, // __builtin_HEXAGON_M2_vrcmaci_s0
+      {Intrinsic::hexagon_M2_vrcmaci_s0c, 22888}, // __builtin_HEXAGON_M2_vrcmaci_s0c
+      {Intrinsic::hexagon_M2_vrcmacr_s0, 22921}, // __builtin_HEXAGON_M2_vrcmacr_s0
+      {Intrinsic::hexagon_M2_vrcmacr_s0c, 22953}, // __builtin_HEXAGON_M2_vrcmacr_s0c
+      {Intrinsic::hexagon_M2_vrcmpyi_s0, 22986}, // __builtin_HEXAGON_M2_vrcmpyi_s0
+      {Intrinsic::hexagon_M2_vrcmpyi_s0c, 23018}, // __builtin_HEXAGON_M2_vrcmpyi_s0c
+      {Intrinsic::hexagon_M2_vrcmpyr_s0, 23051}, // __builtin_HEXAGON_M2_vrcmpyr_s0
+      {Intrinsic::hexagon_M2_vrcmpyr_s0c, 23083}, // __builtin_HEXAGON_M2_vrcmpyr_s0c
+      {Intrinsic::hexagon_M2_vrcmpys_acc_s1, 23116}, // __builtin_HEXAGON_M2_vrcmpys_acc_s1
+      {Intrinsic::hexagon_M2_vrcmpys_s1, 23152}, // __builtin_HEXAGON_M2_vrcmpys_s1
+      {Intrinsic::hexagon_M2_vrcmpys_s1rp, 23184}, // __builtin_HEXAGON_M2_vrcmpys_s1rp
+      {Intrinsic::hexagon_M2_vrmac_s0, 23218}, // __builtin_HEXAGON_M2_vrmac_s0
+      {Intrinsic::hexagon_M2_vrmpy_s0, 23248}, // __builtin_HEXAGON_M2_vrmpy_s0
+      {Intrinsic::hexagon_M2_xor_xacc, 23278}, // __builtin_HEXAGON_M2_xor_xacc
+      {Intrinsic::hexagon_M4_and_and, 23308}, // __builtin_HEXAGON_M4_and_and
+      {Intrinsic::hexagon_M4_and_andn, 23337}, // __builtin_HEXAGON_M4_and_andn
+      {Intrinsic::hexagon_M4_and_or, 23367}, // __builtin_HEXAGON_M4_and_or
+      {Intrinsic::hexagon_M4_and_xor, 23395}, // __builtin_HEXAGON_M4_and_xor
+      {Intrinsic::hexagon_M4_cmpyi_wh, 23424}, // __builtin_HEXAGON_M4_cmpyi_wh
+      {Intrinsic::hexagon_M4_cmpyi_whc, 23454}, // __builtin_HEXAGON_M4_cmpyi_whc
+      {Intrinsic::hexagon_M4_cmpyr_wh, 23485}, // __builtin_HEXAGON_M4_cmpyr_wh
+      {Intrinsic::hexagon_M4_cmpyr_whc, 23515}, // __builtin_HEXAGON_M4_cmpyr_whc
+      {Intrinsic::hexagon_M4_mac_up_s1_sat, 23546}, // __builtin_HEXAGON_M4_mac_up_s1_sat
+      {Intrinsic::hexagon_M4_mpyri_addi, 23581}, // __builtin_HEXAGON_M4_mpyri_addi
+      {Intrinsic::hexagon_M4_mpyri_addr, 23613}, // __builtin_HEXAGON_M4_mpyri_addr
+      {Intrinsic::hexagon_M4_mpyri_addr_u2, 23645}, // __builtin_HEXAGON_M4_mpyri_addr_u2
+      {Intrinsic::hexagon_M4_mpyrr_addi, 23680}, // __builtin_HEXAGON_M4_mpyrr_addi
+      {Intrinsic::hexagon_M4_mpyrr_addr, 23712}, // __builtin_HEXAGON_M4_mpyrr_addr
+      {Intrinsic::hexagon_M4_nac_up_s1_sat, 23744}, // __builtin_HEXAGON_M4_nac_up_s1_sat
+      {Intrinsic::hexagon_M4_or_and, 23779}, // __builtin_HEXAGON_M4_or_and
+      {Intrinsic::hexagon_M4_or_andn, 23807}, // __builtin_HEXAGON_M4_or_andn
+      {Intrinsic::hexagon_M4_or_or, 23836}, // __builtin_HEXAGON_M4_or_or
+      {Intrinsic::hexagon_M4_or_xor, 23863}, // __builtin_HEXAGON_M4_or_xor
+      {Intrinsic::hexagon_M4_pmpyw, 23891}, // __builtin_HEXAGON_M4_pmpyw
+      {Intrinsic::hexagon_M4_pmpyw_acc, 23918}, // __builtin_HEXAGON_M4_pmpyw_acc
+      {Intrinsic::hexagon_M4_vpmpyh, 23949}, // __builtin_HEXAGON_M4_vpmpyh
+      {Intrinsic::hexagon_M4_vpmpyh_acc, 23977}, // __builtin_HEXAGON_M4_vpmpyh_acc
+      {Intrinsic::hexagon_M4_vrmpyeh_acc_s0, 24009}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s0
+      {Intrinsic::hexagon_M4_vrmpyeh_acc_s1, 24045}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s1
+      {Intrinsic::hexagon_M4_vrmpyeh_s0, 24081}, // __builtin_HEXAGON_M4_vrmpyeh_s0
+      {Intrinsic::hexagon_M4_vrmpyeh_s1, 24113}, // __builtin_HEXAGON_M4_vrmpyeh_s1
+      {Intrinsic::hexagon_M4_vrmpyoh_acc_s0, 24145}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s0
+      {Intrinsic::hexagon_M4_vrmpyoh_acc_s1, 24181}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s1
+      {Intrinsic::hexagon_M4_vrmpyoh_s0, 24217}, // __builtin_HEXAGON_M4_vrmpyoh_s0
+      {Intrinsic::hexagon_M4_vrmpyoh_s1, 24249}, // __builtin_HEXAGON_M4_vrmpyoh_s1
+      {Intrinsic::hexagon_M4_xor_and, 24281}, // __builtin_HEXAGON_M4_xor_and
+      {Intrinsic::hexagon_M4_xor_andn, 24310}, // __builtin_HEXAGON_M4_xor_andn
+      {Intrinsic::hexagon_M4_xor_or, 24340}, // __builtin_HEXAGON_M4_xor_or
+      {Intrinsic::hexagon_M4_xor_xacc, 24368}, // __builtin_HEXAGON_M4_xor_xacc
+      {Intrinsic::hexagon_M5_vdmacbsu, 24398}, // __builtin_HEXAGON_M5_vdmacbsu
+      {Intrinsic::hexagon_M5_vdmpybsu, 24428}, // __builtin_HEXAGON_M5_vdmpybsu
+      {Intrinsic::hexagon_M5_vmacbsu, 24458}, // __builtin_HEXAGON_M5_vmacbsu
+      {Intrinsic::hexagon_M5_vmacbuu, 24487}, // __builtin_HEXAGON_M5_vmacbuu
+      {Intrinsic::hexagon_M5_vmpybsu, 24516}, // __builtin_HEXAGON_M5_vmpybsu
+      {Intrinsic::hexagon_M5_vmpybuu, 24545}, // __builtin_HEXAGON_M5_vmpybuu
+      {Intrinsic::hexagon_M5_vrmacbsu, 24574}, // __builtin_HEXAGON_M5_vrmacbsu
+      {Intrinsic::hexagon_M5_vrmacbuu, 24604}, // __builtin_HEXAGON_M5_vrmacbuu
+      {Intrinsic::hexagon_M5_vrmpybsu, 24634}, // __builtin_HEXAGON_M5_vrmpybsu
+      {Intrinsic::hexagon_M5_vrmpybuu, 24664}, // __builtin_HEXAGON_M5_vrmpybuu
+      {Intrinsic::hexagon_M6_vabsdiffb, 24694}, // __builtin_HEXAGON_M6_vabsdiffb
+      {Intrinsic::hexagon_M6_vabsdiffub, 24725}, // __builtin_HEXAGON_M6_vabsdiffub
+      {Intrinsic::hexagon_S2_addasl_rrri, 24757}, // __builtin_HEXAGON_S2_addasl_rrri
+      {Intrinsic::hexagon_S2_asl_i_p, 24790}, // __builtin_HEXAGON_S2_asl_i_p
+      {Intrinsic::hexagon_S2_asl_i_p_acc, 24819}, // __builtin_HEXAGON_S2_asl_i_p_acc
+      {Intrinsic::hexagon_S2_asl_i_p_and, 24852}, // __builtin_HEXAGON_S2_asl_i_p_and
+      {Intrinsic::hexagon_S2_asl_i_p_nac, 24885}, // __builtin_HEXAGON_S2_asl_i_p_nac
+      {Intrinsic::hexagon_S2_asl_i_p_or, 24918}, // __builtin_HEXAGON_S2_asl_i_p_or
+      {Intrinsic::hexagon_S2_asl_i_p_xacc, 24950}, // __builtin_HEXAGON_S2_asl_i_p_xacc
+      {Intrinsic::hexagon_S2_asl_i_r, 24984}, // __builtin_HEXAGON_S2_asl_i_r
+      {Intrinsic::hexagon_S2_asl_i_r_acc, 25013}, // __builtin_HEXAGON_S2_asl_i_r_acc
+      {Intrinsic::hexagon_S2_asl_i_r_and, 25046}, // __builtin_HEXAGON_S2_asl_i_r_and
+      {Intrinsic::hexagon_S2_asl_i_r_nac, 25079}, // __builtin_HEXAGON_S2_asl_i_r_nac
+      {Intrinsic::hexagon_S2_asl_i_r_or, 25112}, // __builtin_HEXAGON_S2_asl_i_r_or
+      {Intrinsic::hexagon_S2_asl_i_r_sat, 25144}, // __builtin_HEXAGON_S2_asl_i_r_sat
+      {Intrinsic::hexagon_S2_asl_i_r_xacc, 25177}, // __builtin_HEXAGON_S2_asl_i_r_xacc
+      {Intrinsic::hexagon_S2_asl_i_vh, 25211}, // __builtin_HEXAGON_S2_asl_i_vh
+      {Intrinsic::hexagon_S2_asl_i_vw, 25241}, // __builtin_HEXAGON_S2_asl_i_vw
+      {Intrinsic::hexagon_S2_asl_r_p, 25271}, // __builtin_HEXAGON_S2_asl_r_p
+      {Intrinsic::hexagon_S2_asl_r_p_acc, 25300}, // __builtin_HEXAGON_S2_asl_r_p_acc
+      {Intrinsic::hexagon_S2_asl_r_p_and, 25333}, // __builtin_HEXAGON_S2_asl_r_p_and
+      {Intrinsic::hexagon_S2_asl_r_p_nac, 25366}, // __builtin_HEXAGON_S2_asl_r_p_nac
+      {Intrinsic::hexagon_S2_asl_r_p_or, 25399}, // __builtin_HEXAGON_S2_asl_r_p_or
+      {Intrinsic::hexagon_S2_asl_r_p_xor, 25431}, // __builtin_HEXAGON_S2_asl_r_p_xor
+      {Intrinsic::hexagon_S2_asl_r_r, 25464}, // __builtin_HEXAGON_S2_asl_r_r
+      {Intrinsic::hexagon_S2_asl_r_r_acc, 25493}, // __builtin_HEXAGON_S2_asl_r_r_acc
+      {Intrinsic::hexagon_S2_asl_r_r_and, 25526}, // __builtin_HEXAGON_S2_asl_r_r_and
+      {Intrinsic::hexagon_S2_asl_r_r_nac, 25559}, // __builtin_HEXAGON_S2_asl_r_r_nac
+      {Intrinsic::hexagon_S2_asl_r_r_or, 25592}, // __builtin_HEXAGON_S2_asl_r_r_or
+      {Intrinsic::hexagon_S2_asl_r_r_sat, 25624}, // __builtin_HEXAGON_S2_asl_r_r_sat
+      {Intrinsic::hexagon_S2_asl_r_vh, 25657}, // __builtin_HEXAGON_S2_asl_r_vh
+      {Intrinsic::hexagon_S2_asl_r_vw, 25687}, // __builtin_HEXAGON_S2_asl_r_vw
+      {Intrinsic::hexagon_S2_asr_i_p, 25717}, // __builtin_HEXAGON_S2_asr_i_p
+      {Intrinsic::hexagon_S2_asr_i_p_acc, 25746}, // __builtin_HEXAGON_S2_asr_i_p_acc
+      {Intrinsic::hexagon_S2_asr_i_p_and, 25779}, // __builtin_HEXAGON_S2_asr_i_p_and
+      {Intrinsic::hexagon_S2_asr_i_p_nac, 25812}, // __builtin_HEXAGON_S2_asr_i_p_nac
+      {Intrinsic::hexagon_S2_asr_i_p_or, 25845}, // __builtin_HEXAGON_S2_asr_i_p_or
+      {Intrinsic::hexagon_S2_asr_i_p_rnd, 25877}, // __builtin_HEXAGON_S2_asr_i_p_rnd
+      {Intrinsic::hexagon_S2_asr_i_p_rnd_goodsyntax, 25910}, // __builtin_HEXAGON_S2_asr_i_p_rnd_goodsyntax
+      {Intrinsic::hexagon_S2_asr_i_r, 25954}, // __builtin_HEXAGON_S2_asr_i_r
+      {Intrinsic::hexagon_S2_asr_i_r_acc, 25983}, // __builtin_HEXAGON_S2_asr_i_r_acc
+      {Intrinsic::hexagon_S2_asr_i_r_and, 26016}, // __builtin_HEXAGON_S2_asr_i_r_and
+      {Intrinsic::hexagon_S2_asr_i_r_nac, 26049}, // __builtin_HEXAGON_S2_asr_i_r_nac
+      {Intrinsic::hexagon_S2_asr_i_r_or, 26082}, // __builtin_HEXAGON_S2_asr_i_r_or
+      {Intrinsic::hexagon_S2_asr_i_r_rnd, 26114}, // __builtin_HEXAGON_S2_asr_i_r_rnd
+      {Intrinsic::hexagon_S2_asr_i_r_rnd_goodsyntax, 26147}, // __builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax
+      {Intrinsic::hexagon_S2_asr_i_svw_trun, 26191}, // __builtin_HEXAGON_S2_asr_i_svw_trun
+      {Intrinsic::hexagon_S2_asr_i_vh, 26227}, // __builtin_HEXAGON_S2_asr_i_vh
+      {Intrinsic::hexagon_S2_asr_i_vw, 26257}, // __builtin_HEXAGON_S2_asr_i_vw
+      {Intrinsic::hexagon_S2_asr_r_p, 26287}, // __builtin_HEXAGON_S2_asr_r_p
+      {Intrinsic::hexagon_S2_asr_r_p_acc, 26316}, // __builtin_HEXAGON_S2_asr_r_p_acc
+      {Intrinsic::hexagon_S2_asr_r_p_and, 26349}, // __builtin_HEXAGON_S2_asr_r_p_and
+      {Intrinsic::hexagon_S2_asr_r_p_nac, 26382}, // __builtin_HEXAGON_S2_asr_r_p_nac
+      {Intrinsic::hexagon_S2_asr_r_p_or, 26415}, // __builtin_HEXAGON_S2_asr_r_p_or
+      {Intrinsic::hexagon_S2_asr_r_p_xor, 26447}, // __builtin_HEXAGON_S2_asr_r_p_xor
+      {Intrinsic::hexagon_S2_asr_r_r, 26480}, // __builtin_HEXAGON_S2_asr_r_r
+      {Intrinsic::hexagon_S2_asr_r_r_acc, 26509}, // __builtin_HEXAGON_S2_asr_r_r_acc
+      {Intrinsic::hexagon_S2_asr_r_r_and, 26542}, // __builtin_HEXAGON_S2_asr_r_r_and
+      {Intrinsic::hexagon_S2_asr_r_r_nac, 26575}, // __builtin_HEXAGON_S2_asr_r_r_nac
+      {Intrinsic::hexagon_S2_asr_r_r_or, 26608}, // __builtin_HEXAGON_S2_asr_r_r_or
+      {Intrinsic::hexagon_S2_asr_r_r_sat, 26640}, // __builtin_HEXAGON_S2_asr_r_r_sat
+      {Intrinsic::hexagon_S2_asr_r_svw_trun, 26673}, // __builtin_HEXAGON_S2_asr_r_svw_trun
+      {Intrinsic::hexagon_S2_asr_r_vh, 26709}, // __builtin_HEXAGON_S2_asr_r_vh
+      {Intrinsic::hexagon_S2_asr_r_vw, 26739}, // __builtin_HEXAGON_S2_asr_r_vw
+      {Intrinsic::hexagon_S2_brev, 26769}, // __builtin_HEXAGON_S2_brev
+      {Intrinsic::hexagon_S2_brevp, 26795}, // __builtin_HEXAGON_S2_brevp
+      {Intrinsic::hexagon_S2_cl0, 26822}, // __builtin_HEXAGON_S2_cl0
+      {Intrinsic::hexagon_S2_cl0p, 26847}, // __builtin_HEXAGON_S2_cl0p
+      {Intrinsic::hexagon_S2_cl1, 26873}, // __builtin_HEXAGON_S2_cl1
+      {Intrinsic::hexagon_S2_cl1p, 26898}, // __builtin_HEXAGON_S2_cl1p
+      {Intrinsic::hexagon_S2_clb, 26924}, // __builtin_HEXAGON_S2_clb
+      {Intrinsic::hexagon_S2_clbnorm, 26949}, // __builtin_HEXAGON_S2_clbnorm
+      {Intrinsic::hexagon_S2_clbp, 26978}, // __builtin_HEXAGON_S2_clbp
+      {Intrinsic::hexagon_S2_clrbit_i, 27004}, // __builtin_HEXAGON_S2_clrbit_i
+      {Intrinsic::hexagon_S2_clrbit_r, 27034}, // __builtin_HEXAGON_S2_clrbit_r
+      {Intrinsic::hexagon_S2_ct0, 27064}, // __builtin_HEXAGON_S2_ct0
+      {Intrinsic::hexagon_S2_ct0p, 27089}, // __builtin_HEXAGON_S2_ct0p
+      {Intrinsic::hexagon_S2_ct1, 27115}, // __builtin_HEXAGON_S2_ct1
+      {Intrinsic::hexagon_S2_ct1p, 27140}, // __builtin_HEXAGON_S2_ct1p
+      {Intrinsic::hexagon_S2_deinterleave, 27166}, // __builtin_HEXAGON_S2_deinterleave
+      {Intrinsic::hexagon_S2_extractu, 27200}, // __builtin_HEXAGON_S2_extractu
+      {Intrinsic::hexagon_S2_extractu_rp, 27230}, // __builtin_HEXAGON_S2_extractu_rp
+      {Intrinsic::hexagon_S2_extractup, 27263}, // __builtin_HEXAGON_S2_extractup
+      {Intrinsic::hexagon_S2_extractup_rp, 27294}, // __builtin_HEXAGON_S2_extractup_rp
+      {Intrinsic::hexagon_S2_insert, 27328}, // __builtin_HEXAGON_S2_insert
+      {Intrinsic::hexagon_S2_insert_rp, 27356}, // __builtin_HEXAGON_S2_insert_rp
+      {Intrinsic::hexagon_S2_insertp, 27387}, // __builtin_HEXAGON_S2_insertp
+      {Intrinsic::hexagon_S2_insertp_rp, 27416}, // __builtin_HEXAGON_S2_insertp_rp
+      {Intrinsic::hexagon_S2_interleave, 27448}, // __builtin_HEXAGON_S2_interleave
+      {Intrinsic::hexagon_S2_lfsp, 27480}, // __builtin_HEXAGON_S2_lfsp
+      {Intrinsic::hexagon_S2_lsl_r_p, 27506}, // __builtin_HEXAGON_S2_lsl_r_p
+      {Intrinsic::hexagon_S2_lsl_r_p_acc, 27535}, // __builtin_HEXAGON_S2_lsl_r_p_acc
+      {Intrinsic::hexagon_S2_lsl_r_p_and, 27568}, // __builtin_HEXAGON_S2_lsl_r_p_and
+      {Intrinsic::hexagon_S2_lsl_r_p_nac, 27601}, // __builtin_HEXAGON_S2_lsl_r_p_nac
+      {Intrinsic::hexagon_S2_lsl_r_p_or, 27634}, // __builtin_HEXAGON_S2_lsl_r_p_or
+      {Intrinsic::hexagon_S2_lsl_r_p_xor, 27666}, // __builtin_HEXAGON_S2_lsl_r_p_xor
+      {Intrinsic::hexagon_S2_lsl_r_r, 27699}, // __builtin_HEXAGON_S2_lsl_r_r
+      {Intrinsic::hexagon_S2_lsl_r_r_acc, 27728}, // __builtin_HEXAGON_S2_lsl_r_r_acc
+      {Intrinsic::hexagon_S2_lsl_r_r_and, 27761}, // __builtin_HEXAGON_S2_lsl_r_r_and
+      {Intrinsic::hexagon_S2_lsl_r_r_nac, 27794}, // __builtin_HEXAGON_S2_lsl_r_r_nac
+      {Intrinsic::hexagon_S2_lsl_r_r_or, 27827}, // __builtin_HEXAGON_S2_lsl_r_r_or
+      {Intrinsic::hexagon_S2_lsl_r_vh, 27859}, // __builtin_HEXAGON_S2_lsl_r_vh
+      {Intrinsic::hexagon_S2_lsl_r_vw, 27889}, // __builtin_HEXAGON_S2_lsl_r_vw
+      {Intrinsic::hexagon_S2_lsr_i_p, 27919}, // __builtin_HEXAGON_S2_lsr_i_p
+      {Intrinsic::hexagon_S2_lsr_i_p_acc, 27948}, // __builtin_HEXAGON_S2_lsr_i_p_acc
+      {Intrinsic::hexagon_S2_lsr_i_p_and, 27981}, // __builtin_HEXAGON_S2_lsr_i_p_and
+      {Intrinsic::hexagon_S2_lsr_i_p_nac, 28014}, // __builtin_HEXAGON_S2_lsr_i_p_nac
+      {Intrinsic::hexagon_S2_lsr_i_p_or, 28047}, // __builtin_HEXAGON_S2_lsr_i_p_or
+      {Intrinsic::hexagon_S2_lsr_i_p_xacc, 28079}, // __builtin_HEXAGON_S2_lsr_i_p_xacc
+      {Intrinsic::hexagon_S2_lsr_i_r, 28113}, // __builtin_HEXAGON_S2_lsr_i_r
+      {Intrinsic::hexagon_S2_lsr_i_r_acc, 28142}, // __builtin_HEXAGON_S2_lsr_i_r_acc
+      {Intrinsic::hexagon_S2_lsr_i_r_and, 28175}, // __builtin_HEXAGON_S2_lsr_i_r_and
+      {Intrinsic::hexagon_S2_lsr_i_r_nac, 28208}, // __builtin_HEXAGON_S2_lsr_i_r_nac
+      {Intrinsic::hexagon_S2_lsr_i_r_or, 28241}, // __builtin_HEXAGON_S2_lsr_i_r_or
+      {Intrinsic::hexagon_S2_lsr_i_r_xacc, 28273}, // __builtin_HEXAGON_S2_lsr_i_r_xacc
+      {Intrinsic::hexagon_S2_lsr_i_vh, 28307}, // __builtin_HEXAGON_S2_lsr_i_vh
+      {Intrinsic::hexagon_S2_lsr_i_vw, 28337}, // __builtin_HEXAGON_S2_lsr_i_vw
+      {Intrinsic::hexagon_S2_lsr_r_p, 28367}, // __builtin_HEXAGON_S2_lsr_r_p
+      {Intrinsic::hexagon_S2_lsr_r_p_acc, 28396}, // __builtin_HEXAGON_S2_lsr_r_p_acc
+      {Intrinsic::hexagon_S2_lsr_r_p_and, 28429}, // __builtin_HEXAGON_S2_lsr_r_p_and
+      {Intrinsic::hexagon_S2_lsr_r_p_nac, 28462}, // __builtin_HEXAGON_S2_lsr_r_p_nac
+      {Intrinsic::hexagon_S2_lsr_r_p_or, 28495}, // __builtin_HEXAGON_S2_lsr_r_p_or
+      {Intrinsic::hexagon_S2_lsr_r_p_xor, 28527}, // __builtin_HEXAGON_S2_lsr_r_p_xor
+      {Intrinsic::hexagon_S2_lsr_r_r, 28560}, // __builtin_HEXAGON_S2_lsr_r_r
+      {Intrinsic::hexagon_S2_lsr_r_r_acc, 28589}, // __builtin_HEXAGON_S2_lsr_r_r_acc
+      {Intrinsic::hexagon_S2_lsr_r_r_and, 28622}, // __builtin_HEXAGON_S2_lsr_r_r_and
+      {Intrinsic::hexagon_S2_lsr_r_r_nac, 28655}, // __builtin_HEXAGON_S2_lsr_r_r_nac
+      {Intrinsic::hexagon_S2_lsr_r_r_or, 28688}, // __builtin_HEXAGON_S2_lsr_r_r_or
+      {Intrinsic::hexagon_S2_lsr_r_vh, 28720}, // __builtin_HEXAGON_S2_lsr_r_vh
+      {Intrinsic::hexagon_S2_lsr_r_vw, 28750}, // __builtin_HEXAGON_S2_lsr_r_vw
+      {Intrinsic::hexagon_S2_mask, 28780}, // __builtin_HEXAGON_S2_mask
+      {Intrinsic::hexagon_S2_packhl, 28806}, // __builtin_HEXAGON_S2_packhl
+      {Intrinsic::hexagon_S2_parityp, 28834}, // __builtin_HEXAGON_S2_parityp
+      {Intrinsic::hexagon_S2_setbit_i, 28863}, // __builtin_HEXAGON_S2_setbit_i
+      {Intrinsic::hexagon_S2_setbit_r, 28893}, // __builtin_HEXAGON_S2_setbit_r
+      {Intrinsic::hexagon_S2_shuffeb, 28923}, // __builtin_HEXAGON_S2_shuffeb
+      {Intrinsic::hexagon_S2_shuffeh, 28952}, // __builtin_HEXAGON_S2_shuffeh
+      {Intrinsic::hexagon_S2_shuffob, 28981}, // __builtin_HEXAGON_S2_shuffob
+      {Intrinsic::hexagon_S2_shuffoh, 29010}, // __builtin_HEXAGON_S2_shuffoh
+      {Intrinsic::hexagon_S2_storew_locked, 29136}, // __builtin_HEXAGON_S2_storew_locked
+      {Intrinsic::hexagon_S2_svsathb, 29171}, // __builtin_HEXAGON_S2_svsathb
+      {Intrinsic::hexagon_S2_svsathub, 29200}, // __builtin_HEXAGON_S2_svsathub
+      {Intrinsic::hexagon_S2_tableidxb_goodsyntax, 29230}, // __builtin_HEXAGON_S2_tableidxb_goodsyntax
+      {Intrinsic::hexagon_S2_tableidxd_goodsyntax, 29272}, // __builtin_HEXAGON_S2_tableidxd_goodsyntax
+      {Intrinsic::hexagon_S2_tableidxh_goodsyntax, 29314}, // __builtin_HEXAGON_S2_tableidxh_goodsyntax
+      {Intrinsic::hexagon_S2_tableidxw_goodsyntax, 29356}, // __builtin_HEXAGON_S2_tableidxw_goodsyntax
+      {Intrinsic::hexagon_S2_togglebit_i, 29398}, // __builtin_HEXAGON_S2_togglebit_i
+      {Intrinsic::hexagon_S2_togglebit_r, 29431}, // __builtin_HEXAGON_S2_togglebit_r
+      {Intrinsic::hexagon_S2_tstbit_i, 29464}, // __builtin_HEXAGON_S2_tstbit_i
+      {Intrinsic::hexagon_S2_tstbit_r, 29494}, // __builtin_HEXAGON_S2_tstbit_r
+      {Intrinsic::hexagon_S2_valignib, 29524}, // __builtin_HEXAGON_S2_valignib
+      {Intrinsic::hexagon_S2_valignrb, 29554}, // __builtin_HEXAGON_S2_valignrb
+      {Intrinsic::hexagon_S2_vcnegh, 29584}, // __builtin_HEXAGON_S2_vcnegh
+      {Intrinsic::hexagon_S2_vcrotate, 29612}, // __builtin_HEXAGON_S2_vcrotate
+      {Intrinsic::hexagon_S2_vrcnegh, 29642}, // __builtin_HEXAGON_S2_vrcnegh
+      {Intrinsic::hexagon_S2_vrndpackwh, 29671}, // __builtin_HEXAGON_S2_vrndpackwh
+      {Intrinsic::hexagon_S2_vrndpackwhs, 29703}, // __builtin_HEXAGON_S2_vrndpackwhs
+      {Intrinsic::hexagon_S2_vsathb, 29736}, // __builtin_HEXAGON_S2_vsathb
+      {Intrinsic::hexagon_S2_vsathb_nopack, 29764}, // __builtin_HEXAGON_S2_vsathb_nopack
+      {Intrinsic::hexagon_S2_vsathub, 29799}, // __builtin_HEXAGON_S2_vsathub
+      {Intrinsic::hexagon_S2_vsathub_nopack, 29828}, // __builtin_HEXAGON_S2_vsathub_nopack
+      {Intrinsic::hexagon_S2_vsatwh, 29864}, // __builtin_HEXAGON_S2_vsatwh
+      {Intrinsic::hexagon_S2_vsatwh_nopack, 29892}, // __builtin_HEXAGON_S2_vsatwh_nopack
+      {Intrinsic::hexagon_S2_vsatwuh, 29927}, // __builtin_HEXAGON_S2_vsatwuh
+      {Intrinsic::hexagon_S2_vsatwuh_nopack, 29956}, // __builtin_HEXAGON_S2_vsatwuh_nopack
+      {Intrinsic::hexagon_S2_vsplatrb, 29992}, // __builtin_HEXAGON_S2_vsplatrb
+      {Intrinsic::hexagon_S2_vsplatrh, 30022}, // __builtin_HEXAGON_S2_vsplatrh
+      {Intrinsic::hexagon_S2_vspliceib, 30052}, // __builtin_HEXAGON_S2_vspliceib
+      {Intrinsic::hexagon_S2_vsplicerb, 30083}, // __builtin_HEXAGON_S2_vsplicerb
+      {Intrinsic::hexagon_S2_vsxtbh, 30114}, // __builtin_HEXAGON_S2_vsxtbh
+      {Intrinsic::hexagon_S2_vsxthw, 30142}, // __builtin_HEXAGON_S2_vsxthw
+      {Intrinsic::hexagon_S2_vtrunehb, 30170}, // __builtin_HEXAGON_S2_vtrunehb
+      {Intrinsic::hexagon_S2_vtrunewh, 30200}, // __builtin_HEXAGON_S2_vtrunewh
+      {Intrinsic::hexagon_S2_vtrunohb, 30230}, // __builtin_HEXAGON_S2_vtrunohb
+      {Intrinsic::hexagon_S2_vtrunowh, 30260}, // __builtin_HEXAGON_S2_vtrunowh
+      {Intrinsic::hexagon_S2_vzxtbh, 30290}, // __builtin_HEXAGON_S2_vzxtbh
+      {Intrinsic::hexagon_S2_vzxthw, 30318}, // __builtin_HEXAGON_S2_vzxthw
+      {Intrinsic::hexagon_S4_addaddi, 30346}, // __builtin_HEXAGON_S4_addaddi
+      {Intrinsic::hexagon_S4_addi_asl_ri, 30375}, // __builtin_HEXAGON_S4_addi_asl_ri
+      {Intrinsic::hexagon_S4_addi_lsr_ri, 30408}, // __builtin_HEXAGON_S4_addi_lsr_ri
+      {Intrinsic::hexagon_S4_andi_asl_ri, 30441}, // __builtin_HEXAGON_S4_andi_asl_ri
+      {Intrinsic::hexagon_S4_andi_lsr_ri, 30474}, // __builtin_HEXAGON_S4_andi_lsr_ri
+      {Intrinsic::hexagon_S4_clbaddi, 30507}, // __builtin_HEXAGON_S4_clbaddi
+      {Intrinsic::hexagon_S4_clbpaddi, 30536}, // __builtin_HEXAGON_S4_clbpaddi
+      {Intrinsic::hexagon_S4_clbpnorm, 30566}, // __builtin_HEXAGON_S4_clbpnorm
+      {Intrinsic::hexagon_S4_extract, 30596}, // __builtin_HEXAGON_S4_extract
+      {Intrinsic::hexagon_S4_extract_rp, 30625}, // __builtin_HEXAGON_S4_extract_rp
+      {Intrinsic::hexagon_S4_extractp, 30657}, // __builtin_HEXAGON_S4_extractp
+      {Intrinsic::hexagon_S4_extractp_rp, 30687}, // __builtin_HEXAGON_S4_extractp_rp
+      {Intrinsic::hexagon_S4_lsli, 30720}, // __builtin_HEXAGON_S4_lsli
+      {Intrinsic::hexagon_S4_ntstbit_i, 30746}, // __builtin_HEXAGON_S4_ntstbit_i
+      {Intrinsic::hexagon_S4_ntstbit_r, 30777}, // __builtin_HEXAGON_S4_ntstbit_r
+      {Intrinsic::hexagon_S4_or_andi, 30808}, // __builtin_HEXAGON_S4_or_andi
+      {Intrinsic::hexagon_S4_or_andix, 30837}, // __builtin_HEXAGON_S4_or_andix
+      {Intrinsic::hexagon_S4_or_ori, 30867}, // __builtin_HEXAGON_S4_or_ori
+      {Intrinsic::hexagon_S4_ori_asl_ri, 30895}, // __builtin_HEXAGON_S4_ori_asl_ri
+      {Intrinsic::hexagon_S4_ori_lsr_ri, 30927}, // __builtin_HEXAGON_S4_ori_lsr_ri
+      {Intrinsic::hexagon_S4_parity, 30959}, // __builtin_HEXAGON_S4_parity
+      {Intrinsic::hexagon_S4_stored_locked, 30987}, // __builtin_HEXAGON_S4_stored_locked
+      {Intrinsic::hexagon_S4_subaddi, 31022}, // __builtin_HEXAGON_S4_subaddi
+      {Intrinsic::hexagon_S4_subi_asl_ri, 31051}, // __builtin_HEXAGON_S4_subi_asl_ri
+      {Intrinsic::hexagon_S4_subi_lsr_ri, 31084}, // __builtin_HEXAGON_S4_subi_lsr_ri
+      {Intrinsic::hexagon_S4_vrcrotate, 31117}, // __builtin_HEXAGON_S4_vrcrotate
+      {Intrinsic::hexagon_S4_vrcrotate_acc, 31148}, // __builtin_HEXAGON_S4_vrcrotate_acc
+      {Intrinsic::hexagon_S4_vxaddsubh, 31183}, // __builtin_HEXAGON_S4_vxaddsubh
+      {Intrinsic::hexagon_S4_vxaddsubhr, 31214}, // __builtin_HEXAGON_S4_vxaddsubhr
+      {Intrinsic::hexagon_S4_vxaddsubw, 31246}, // __builtin_HEXAGON_S4_vxaddsubw
+      {Intrinsic::hexagon_S4_vxsubaddh, 31277}, // __builtin_HEXAGON_S4_vxsubaddh
+      {Intrinsic::hexagon_S4_vxsubaddhr, 31308}, // __builtin_HEXAGON_S4_vxsubaddhr
+      {Intrinsic::hexagon_S4_vxsubaddw, 31340}, // __builtin_HEXAGON_S4_vxsubaddw
+      {Intrinsic::hexagon_S5_asrhub_rnd_sat_goodsyntax, 31371}, // __builtin_HEXAGON_S5_asrhub_rnd_sat_goodsyntax
+      {Intrinsic::hexagon_S5_asrhub_sat, 31418}, // __builtin_HEXAGON_S5_asrhub_sat
+      {Intrinsic::hexagon_S5_popcountp, 31450}, // __builtin_HEXAGON_S5_popcountp
+      {Intrinsic::hexagon_S5_vasrhrnd_goodsyntax, 31481}, // __builtin_HEXAGON_S5_vasrhrnd_goodsyntax
+      {Intrinsic::hexagon_S6_rol_i_p, 31522}, // __builtin_HEXAGON_S6_rol_i_p
+      {Intrinsic::hexagon_S6_rol_i_p_acc, 31551}, // __builtin_HEXAGON_S6_rol_i_p_acc
+      {Intrinsic::hexagon_S6_rol_i_p_and, 31584}, // __builtin_HEXAGON_S6_rol_i_p_and
+      {Intrinsic::hexagon_S6_rol_i_p_nac, 31617}, // __builtin_HEXAGON_S6_rol_i_p_nac
+      {Intrinsic::hexagon_S6_rol_i_p_or, 31650}, // __builtin_HEXAGON_S6_rol_i_p_or
+      {Intrinsic::hexagon_S6_rol_i_p_xacc, 31682}, // __builtin_HEXAGON_S6_rol_i_p_xacc
+      {Intrinsic::hexagon_S6_rol_i_r, 31716}, // __builtin_HEXAGON_S6_rol_i_r
+      {Intrinsic::hexagon_S6_rol_i_r_acc, 31745}, // __builtin_HEXAGON_S6_rol_i_r_acc
+      {Intrinsic::hexagon_S6_rol_i_r_and, 31778}, // __builtin_HEXAGON_S6_rol_i_r_and
+      {Intrinsic::hexagon_S6_rol_i_r_nac, 31811}, // __builtin_HEXAGON_S6_rol_i_r_nac
+      {Intrinsic::hexagon_S6_rol_i_r_or, 31844}, // __builtin_HEXAGON_S6_rol_i_r_or
+      {Intrinsic::hexagon_S6_rol_i_r_xacc, 31876}, // __builtin_HEXAGON_S6_rol_i_r_xacc
+      {Intrinsic::hexagon_S6_vsplatrbp, 31910}, // __builtin_HEXAGON_S6_vsplatrbp
+      {Intrinsic::hexagon_S6_vtrunehb_ppp, 31941}, // __builtin_HEXAGON_S6_vtrunehb_ppp
+      {Intrinsic::hexagon_S6_vtrunohb_ppp, 31975}, // __builtin_HEXAGON_S6_vtrunohb_ppp
+      {Intrinsic::hexagon_V6_extractw, 32009}, // __builtin_HEXAGON_V6_extractw
+      {Intrinsic::hexagon_V6_extractw_128B, 32039}, // __builtin_HEXAGON_V6_extractw_128B
+      {Intrinsic::hexagon_V6_hi, 32074}, // __builtin_HEXAGON_V6_hi
+      {Intrinsic::hexagon_V6_hi_128B, 32098}, // __builtin_HEXAGON_V6_hi_128B
+      {Intrinsic::hexagon_V6_ld0, 32127}, // __builtin_HEXAGON_V6_ld0
+      {Intrinsic::hexagon_V6_ld0_128B, 32152}, // __builtin_HEXAGON_V6_ld0_128B
+      {Intrinsic::hexagon_V6_ldcnp0, 32182}, // __builtin_HEXAGON_V6_ldcnp0
+      {Intrinsic::hexagon_V6_ldcnp0_128B, 32210}, // __builtin_HEXAGON_V6_ldcnp0_128B
+      {Intrinsic::hexagon_V6_ldcnpnt0, 32243}, // __builtin_HEXAGON_V6_ldcnpnt0
+      {Intrinsic::hexagon_V6_ldcnpnt0_128B, 32273}, // __builtin_HEXAGON_V6_ldcnpnt0_128B
+      {Intrinsic::hexagon_V6_ldcp0, 32308}, // __builtin_HEXAGON_V6_ldcp0
+      {Intrinsic::hexagon_V6_ldcp0_128B, 32335}, // __builtin_HEXAGON_V6_ldcp0_128B
+      {Intrinsic::hexagon_V6_ldcpnt0, 32367}, // __builtin_HEXAGON_V6_ldcpnt0
+      {Intrinsic::hexagon_V6_ldcpnt0_128B, 32396}, // __builtin_HEXAGON_V6_ldcpnt0_128B
+      {Intrinsic::hexagon_V6_ldnp0, 32430}, // __builtin_HEXAGON_V6_ldnp0
+      {Intrinsic::hexagon_V6_ldnp0_128B, 32457}, // __builtin_HEXAGON_V6_ldnp0_128B
+      {Intrinsic::hexagon_V6_ldnpnt0, 32489}, // __builtin_HEXAGON_V6_ldnpnt0
+      {Intrinsic::hexagon_V6_ldnpnt0_128B, 32518}, // __builtin_HEXAGON_V6_ldnpnt0_128B
+      {Intrinsic::hexagon_V6_ldnt0, 32552}, // __builtin_HEXAGON_V6_ldnt0
+      {Intrinsic::hexagon_V6_ldnt0_128B, 32579}, // __builtin_HEXAGON_V6_ldnt0_128B
+      {Intrinsic::hexagon_V6_ldntnt0, 32611}, // __builtin_HEXAGON_V6_ldntnt0
+      {Intrinsic::hexagon_V6_ldp0, 32640}, // __builtin_HEXAGON_V6_ldp0
+      {Intrinsic::hexagon_V6_ldp0_128B, 32666}, // __builtin_HEXAGON_V6_ldp0_128B
+      {Intrinsic::hexagon_V6_ldpnt0, 32697}, // __builtin_HEXAGON_V6_ldpnt0
+      {Intrinsic::hexagon_V6_ldpnt0_128B, 32725}, // __builtin_HEXAGON_V6_ldpnt0_128B
+      {Intrinsic::hexagon_V6_ldtnp0, 32758}, // __builtin_HEXAGON_V6_ldtnp0
+      {Intrinsic::hexagon_V6_ldtnp0_128B, 32786}, // __builtin_HEXAGON_V6_ldtnp0_128B
+      {Intrinsic::hexagon_V6_ldtnpnt0, 32819}, // __builtin_HEXAGON_V6_ldtnpnt0
+      {Intrinsic::hexagon_V6_ldtnpnt0_128B, 32849}, // __builtin_HEXAGON_V6_ldtnpnt0_128B
+      {Intrinsic::hexagon_V6_ldtp0, 32884}, // __builtin_HEXAGON_V6_ldtp0
+      {Intrinsic::hexagon_V6_ldtp0_128B, 32911}, // __builtin_HEXAGON_V6_ldtp0_128B
+      {Intrinsic::hexagon_V6_ldtpnt0, 32943}, // __builtin_HEXAGON_V6_ldtpnt0
+      {Intrinsic::hexagon_V6_ldtpnt0_128B, 32972}, // __builtin_HEXAGON_V6_ldtpnt0_128B
+      {Intrinsic::hexagon_V6_ldu0, 33006}, // __builtin_HEXAGON_V6_ldu0
+      {Intrinsic::hexagon_V6_ldu0_128B, 33032}, // __builtin_HEXAGON_V6_ldu0_128B
+      {Intrinsic::hexagon_V6_lo, 33063}, // __builtin_HEXAGON_V6_lo
+      {Intrinsic::hexagon_V6_lo_128B, 33087}, // __builtin_HEXAGON_V6_lo_128B
+      {Intrinsic::hexagon_V6_lvsplatb, 33116}, // __builtin_HEXAGON_V6_lvsplatb
+      {Intrinsic::hexagon_V6_lvsplatb_128B, 33146}, // __builtin_HEXAGON_V6_lvsplatb_128B
+      {Intrinsic::hexagon_V6_lvsplath, 33181}, // __builtin_HEXAGON_V6_lvsplath
+      {Intrinsic::hexagon_V6_lvsplath_128B, 33211}, // __builtin_HEXAGON_V6_lvsplath_128B
+      {Intrinsic::hexagon_V6_lvsplatw, 33246}, // __builtin_HEXAGON_V6_lvsplatw
+      {Intrinsic::hexagon_V6_lvsplatw_128B, 33276}, // __builtin_HEXAGON_V6_lvsplatw_128B
+      {Intrinsic::hexagon_V6_pred_and, 33311}, // __builtin_HEXAGON_V6_pred_and
+      {Intrinsic::hexagon_V6_pred_and_128B, 33341}, // __builtin_HEXAGON_V6_pred_and_128B
+      {Intrinsic::hexagon_V6_pred_and_n, 33376}, // __builtin_HEXAGON_V6_pred_and_n
+      {Intrinsic::hexagon_V6_pred_and_n_128B, 33408}, // __builtin_HEXAGON_V6_pred_and_n_128B
+      {Intrinsic::hexagon_V6_pred_not, 33445}, // __builtin_HEXAGON_V6_pred_not
+      {Intrinsic::hexagon_V6_pred_not_128B, 33475}, // __builtin_HEXAGON_V6_pred_not_128B
+      {Intrinsic::hexagon_V6_pred_or, 33510}, // __builtin_HEXAGON_V6_pred_or
+      {Intrinsic::hexagon_V6_pred_or_128B, 33539}, // __builtin_HEXAGON_V6_pred_or_128B
+      {Intrinsic::hexagon_V6_pred_or_n, 33573}, // __builtin_HEXAGON_V6_pred_or_n
+      {Intrinsic::hexagon_V6_pred_or_n_128B, 33604}, // __builtin_HEXAGON_V6_pred_or_n_128B
+      {Intrinsic::hexagon_V6_pred_scalar2, 33640}, // __builtin_HEXAGON_V6_pred_scalar2
+      {Intrinsic::hexagon_V6_pred_scalar2_128B, 33674}, // __builtin_HEXAGON_V6_pred_scalar2_128B
+      {Intrinsic::hexagon_V6_pred_scalar2v2, 33713}, // __builtin_HEXAGON_V6_pred_scalar2v2
+      {Intrinsic::hexagon_V6_pred_scalar2v2_128B, 33749}, // __builtin_HEXAGON_V6_pred_scalar2v2_128B
+      {Intrinsic::hexagon_V6_pred_xor, 33790}, // __builtin_HEXAGON_V6_pred_xor
+      {Intrinsic::hexagon_V6_pred_xor_128B, 33820}, // __builtin_HEXAGON_V6_pred_xor_128B
+      {Intrinsic::hexagon_V6_shuffeqh, 33855}, // __builtin_HEXAGON_V6_shuffeqh
+      {Intrinsic::hexagon_V6_shuffeqh_128B, 33885}, // __builtin_HEXAGON_V6_shuffeqh_128B
+      {Intrinsic::hexagon_V6_shuffeqw, 33920}, // __builtin_HEXAGON_V6_shuffeqw
+      {Intrinsic::hexagon_V6_shuffeqw_128B, 33950}, // __builtin_HEXAGON_V6_shuffeqw_128B
+      {Intrinsic::hexagon_V6_vS32b_nqpred_ai, 33985}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai
+      {Intrinsic::hexagon_V6_vS32b_nqpred_ai_128B, 34022}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai_128B
+      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai, 34064}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai
+      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai_128B, 34104}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai_128B
+      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai, 34149}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai
+      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai_128B, 34188}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai_128B
+      {Intrinsic::hexagon_V6_vS32b_qpred_ai, 34232}, // __builtin_HEXAGON_V6_vS32b_qpred_ai
+      {Intrinsic::hexagon_V6_vS32b_qpred_ai_128B, 34268}, // __builtin_HEXAGON_V6_vS32b_qpred_ai_128B
+      {Intrinsic::hexagon_V6_vabsb, 34309}, // __builtin_HEXAGON_V6_vabsb
+      {Intrinsic::hexagon_V6_vabsb_128B, 34336}, // __builtin_HEXAGON_V6_vabsb_128B
+      {Intrinsic::hexagon_V6_vabsb_sat, 34368}, // __builtin_HEXAGON_V6_vabsb_sat
+      {Intrinsic::hexagon_V6_vabsb_sat_128B, 34399}, // __builtin_HEXAGON_V6_vabsb_sat_128B
+      {Intrinsic::hexagon_V6_vabsdiffh, 34435}, // __builtin_HEXAGON_V6_vabsdiffh
+      {Intrinsic::hexagon_V6_vabsdiffh_128B, 34466}, // __builtin_HEXAGON_V6_vabsdiffh_128B
+      {Intrinsic::hexagon_V6_vabsdiffub, 34502}, // __builtin_HEXAGON_V6_vabsdiffub
+      {Intrinsic::hexagon_V6_vabsdiffub_128B, 34534}, // __builtin_HEXAGON_V6_vabsdiffub_128B
+      {Intrinsic::hexagon_V6_vabsdiffuh, 34571}, // __builtin_HEXAGON_V6_vabsdiffuh
+      {Intrinsic::hexagon_V6_vabsdiffuh_128B, 34603}, // __builtin_HEXAGON_V6_vabsdiffuh_128B
+      {Intrinsic::hexagon_V6_vabsdiffw, 34640}, // __builtin_HEXAGON_V6_vabsdiffw
+      {Intrinsic::hexagon_V6_vabsdiffw_128B, 34671}, // __builtin_HEXAGON_V6_vabsdiffw_128B
+      {Intrinsic::hexagon_V6_vabsh, 34707}, // __builtin_HEXAGON_V6_vabsh
+      {Intrinsic::hexagon_V6_vabsh_128B, 34734}, // __builtin_HEXAGON_V6_vabsh_128B
+      {Intrinsic::hexagon_V6_vabsh_sat, 34766}, // __builtin_HEXAGON_V6_vabsh_sat
+      {Intrinsic::hexagon_V6_vabsh_sat_128B, 34797}, // __builtin_HEXAGON_V6_vabsh_sat_128B
+      {Intrinsic::hexagon_V6_vabsw, 34833}, // __builtin_HEXAGON_V6_vabsw
+      {Intrinsic::hexagon_V6_vabsw_128B, 34860}, // __builtin_HEXAGON_V6_vabsw_128B
+      {Intrinsic::hexagon_V6_vabsw_sat, 34892}, // __builtin_HEXAGON_V6_vabsw_sat
+      {Intrinsic::hexagon_V6_vabsw_sat_128B, 34923}, // __builtin_HEXAGON_V6_vabsw_sat_128B
+      {Intrinsic::hexagon_V6_vaddb, 34959}, // __builtin_HEXAGON_V6_vaddb
+      {Intrinsic::hexagon_V6_vaddb_128B, 34986}, // __builtin_HEXAGON_V6_vaddb_128B
+      {Intrinsic::hexagon_V6_vaddb_dv, 35018}, // __builtin_HEXAGON_V6_vaddb_dv
+      {Intrinsic::hexagon_V6_vaddb_dv_128B, 35048}, // __builtin_HEXAGON_V6_vaddb_dv_128B
+      {Intrinsic::hexagon_V6_vaddbnq, 35083}, // __builtin_HEXAGON_V6_vaddbnq
+      {Intrinsic::hexagon_V6_vaddbnq_128B, 35112}, // __builtin_HEXAGON_V6_vaddbnq_128B
+      {Intrinsic::hexagon_V6_vaddbq, 35146}, // __builtin_HEXAGON_V6_vaddbq
+      {Intrinsic::hexagon_V6_vaddbq_128B, 35174}, // __builtin_HEXAGON_V6_vaddbq_128B
+      {Intrinsic::hexagon_V6_vaddbsat, 35207}, // __builtin_HEXAGON_V6_vaddbsat
+      {Intrinsic::hexagon_V6_vaddbsat_128B, 35237}, // __builtin_HEXAGON_V6_vaddbsat_128B
+      {Intrinsic::hexagon_V6_vaddbsat_dv, 35272}, // __builtin_HEXAGON_V6_vaddbsat_dv
+      {Intrinsic::hexagon_V6_vaddbsat_dv_128B, 35305}, // __builtin_HEXAGON_V6_vaddbsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddcarrysat, 35343}, // __builtin_HEXAGON_V6_vaddcarrysat
+      {Intrinsic::hexagon_V6_vaddcarrysat_128B, 35377}, // __builtin_HEXAGON_V6_vaddcarrysat_128B
+      {Intrinsic::hexagon_V6_vaddclbh, 35416}, // __builtin_HEXAGON_V6_vaddclbh
+      {Intrinsic::hexagon_V6_vaddclbh_128B, 35446}, // __builtin_HEXAGON_V6_vaddclbh_128B
+      {Intrinsic::hexagon_V6_vaddclbw, 35481}, // __builtin_HEXAGON_V6_vaddclbw
+      {Intrinsic::hexagon_V6_vaddclbw_128B, 35511}, // __builtin_HEXAGON_V6_vaddclbw_128B
+      {Intrinsic::hexagon_V6_vaddh, 35546}, // __builtin_HEXAGON_V6_vaddh
+      {Intrinsic::hexagon_V6_vaddh_128B, 35573}, // __builtin_HEXAGON_V6_vaddh_128B
+      {Intrinsic::hexagon_V6_vaddh_dv, 35605}, // __builtin_HEXAGON_V6_vaddh_dv
+      {Intrinsic::hexagon_V6_vaddh_dv_128B, 35635}, // __builtin_HEXAGON_V6_vaddh_dv_128B
+      {Intrinsic::hexagon_V6_vaddhnq, 35670}, // __builtin_HEXAGON_V6_vaddhnq
+      {Intrinsic::hexagon_V6_vaddhnq_128B, 35699}, // __builtin_HEXAGON_V6_vaddhnq_128B
+      {Intrinsic::hexagon_V6_vaddhq, 35733}, // __builtin_HEXAGON_V6_vaddhq
+      {Intrinsic::hexagon_V6_vaddhq_128B, 35761}, // __builtin_HEXAGON_V6_vaddhq_128B
+      {Intrinsic::hexagon_V6_vaddhsat, 35794}, // __builtin_HEXAGON_V6_vaddhsat
+      {Intrinsic::hexagon_V6_vaddhsat_128B, 35824}, // __builtin_HEXAGON_V6_vaddhsat_128B
+      {Intrinsic::hexagon_V6_vaddhsat_dv, 35859}, // __builtin_HEXAGON_V6_vaddhsat_dv
+      {Intrinsic::hexagon_V6_vaddhsat_dv_128B, 35892}, // __builtin_HEXAGON_V6_vaddhsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddhw, 35930}, // __builtin_HEXAGON_V6_vaddhw
+      {Intrinsic::hexagon_V6_vaddhw_128B, 35958}, // __builtin_HEXAGON_V6_vaddhw_128B
+      {Intrinsic::hexagon_V6_vaddhw_acc, 35991}, // __builtin_HEXAGON_V6_vaddhw_acc
+      {Intrinsic::hexagon_V6_vaddhw_acc_128B, 36023}, // __builtin_HEXAGON_V6_vaddhw_acc_128B
+      {Intrinsic::hexagon_V6_vaddubh, 36060}, // __builtin_HEXAGON_V6_vaddubh
+      {Intrinsic::hexagon_V6_vaddubh_128B, 36089}, // __builtin_HEXAGON_V6_vaddubh_128B
+      {Intrinsic::hexagon_V6_vaddubh_acc, 36123}, // __builtin_HEXAGON_V6_vaddubh_acc
+      {Intrinsic::hexagon_V6_vaddubh_acc_128B, 36156}, // __builtin_HEXAGON_V6_vaddubh_acc_128B
+      {Intrinsic::hexagon_V6_vaddubsat, 36194}, // __builtin_HEXAGON_V6_vaddubsat
+      {Intrinsic::hexagon_V6_vaddubsat_128B, 36225}, // __builtin_HEXAGON_V6_vaddubsat_128B
+      {Intrinsic::hexagon_V6_vaddubsat_dv, 36261}, // __builtin_HEXAGON_V6_vaddubsat_dv
+      {Intrinsic::hexagon_V6_vaddubsat_dv_128B, 36295}, // __builtin_HEXAGON_V6_vaddubsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddububb_sat, 36334}, // __builtin_HEXAGON_V6_vaddububb_sat
+      {Intrinsic::hexagon_V6_vaddububb_sat_128B, 36369}, // __builtin_HEXAGON_V6_vaddububb_sat_128B
+      {Intrinsic::hexagon_V6_vadduhsat, 36409}, // __builtin_HEXAGON_V6_vadduhsat
+      {Intrinsic::hexagon_V6_vadduhsat_128B, 36440}, // __builtin_HEXAGON_V6_vadduhsat_128B
+      {Intrinsic::hexagon_V6_vadduhsat_dv, 36476}, // __builtin_HEXAGON_V6_vadduhsat_dv
+      {Intrinsic::hexagon_V6_vadduhsat_dv_128B, 36510}, // __builtin_HEXAGON_V6_vadduhsat_dv_128B
+      {Intrinsic::hexagon_V6_vadduhw, 36549}, // __builtin_HEXAGON_V6_vadduhw
+      {Intrinsic::hexagon_V6_vadduhw_128B, 36578}, // __builtin_HEXAGON_V6_vadduhw_128B
+      {Intrinsic::hexagon_V6_vadduhw_acc, 36612}, // __builtin_HEXAGON_V6_vadduhw_acc
+      {Intrinsic::hexagon_V6_vadduhw_acc_128B, 36645}, // __builtin_HEXAGON_V6_vadduhw_acc_128B
+      {Intrinsic::hexagon_V6_vadduwsat, 36683}, // __builtin_HEXAGON_V6_vadduwsat
+      {Intrinsic::hexagon_V6_vadduwsat_128B, 36714}, // __builtin_HEXAGON_V6_vadduwsat_128B
+      {Intrinsic::hexagon_V6_vadduwsat_dv, 36750}, // __builtin_HEXAGON_V6_vadduwsat_dv
+      {Intrinsic::hexagon_V6_vadduwsat_dv_128B, 36784}, // __builtin_HEXAGON_V6_vadduwsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddw, 36823}, // __builtin_HEXAGON_V6_vaddw
+      {Intrinsic::hexagon_V6_vaddw_128B, 36850}, // __builtin_HEXAGON_V6_vaddw_128B
+      {Intrinsic::hexagon_V6_vaddw_dv, 36882}, // __builtin_HEXAGON_V6_vaddw_dv
+      {Intrinsic::hexagon_V6_vaddw_dv_128B, 36912}, // __builtin_HEXAGON_V6_vaddw_dv_128B
+      {Intrinsic::hexagon_V6_vaddwnq, 36947}, // __builtin_HEXAGON_V6_vaddwnq
+      {Intrinsic::hexagon_V6_vaddwnq_128B, 36976}, // __builtin_HEXAGON_V6_vaddwnq_128B
+      {Intrinsic::hexagon_V6_vaddwq, 37010}, // __builtin_HEXAGON_V6_vaddwq
+      {Intrinsic::hexagon_V6_vaddwq_128B, 37038}, // __builtin_HEXAGON_V6_vaddwq_128B
+      {Intrinsic::hexagon_V6_vaddwsat, 37071}, // __builtin_HEXAGON_V6_vaddwsat
+      {Intrinsic::hexagon_V6_vaddwsat_128B, 37101}, // __builtin_HEXAGON_V6_vaddwsat_128B
+      {Intrinsic::hexagon_V6_vaddwsat_dv, 37136}, // __builtin_HEXAGON_V6_vaddwsat_dv
+      {Intrinsic::hexagon_V6_vaddwsat_dv_128B, 37169}, // __builtin_HEXAGON_V6_vaddwsat_dv_128B
+      {Intrinsic::hexagon_V6_valignb, 37207}, // __builtin_HEXAGON_V6_valignb
+      {Intrinsic::hexagon_V6_valignb_128B, 37236}, // __builtin_HEXAGON_V6_valignb_128B
+      {Intrinsic::hexagon_V6_valignbi, 37270}, // __builtin_HEXAGON_V6_valignbi
+      {Intrinsic::hexagon_V6_valignbi_128B, 37300}, // __builtin_HEXAGON_V6_valignbi_128B
+      {Intrinsic::hexagon_V6_vand, 37335}, // __builtin_HEXAGON_V6_vand
+      {Intrinsic::hexagon_V6_vand_128B, 37361}, // __builtin_HEXAGON_V6_vand_128B
+      {Intrinsic::hexagon_V6_vandnqrt, 37392}, // __builtin_HEXAGON_V6_vandnqrt
+      {Intrinsic::hexagon_V6_vandnqrt_128B, 37422}, // __builtin_HEXAGON_V6_vandnqrt_128B
+      {Intrinsic::hexagon_V6_vandnqrt_acc, 37457}, // __builtin_HEXAGON_V6_vandnqrt_acc
+      {Intrinsic::hexagon_V6_vandnqrt_acc_128B, 37491}, // __builtin_HEXAGON_V6_vandnqrt_acc_128B
+      {Intrinsic::hexagon_V6_vandqrt, 37530}, // __builtin_HEXAGON_V6_vandqrt
+      {Intrinsic::hexagon_V6_vandqrt_128B, 37559}, // __builtin_HEXAGON_V6_vandqrt_128B
+      {Intrinsic::hexagon_V6_vandqrt_acc, 37593}, // __builtin_HEXAGON_V6_vandqrt_acc
+      {Intrinsic::hexagon_V6_vandqrt_acc_128B, 37626}, // __builtin_HEXAGON_V6_vandqrt_acc_128B
+      {Intrinsic::hexagon_V6_vandvnqv, 37664}, // __builtin_HEXAGON_V6_vandvnqv
+      {Intrinsic::hexagon_V6_vandvnqv_128B, 37694}, // __builtin_HEXAGON_V6_vandvnqv_128B
+      {Intrinsic::hexagon_V6_vandvqv, 37729}, // __builtin_HEXAGON_V6_vandvqv
+      {Intrinsic::hexagon_V6_vandvqv_128B, 37758}, // __builtin_HEXAGON_V6_vandvqv_128B
+      {Intrinsic::hexagon_V6_vandvrt, 37792}, // __builtin_HEXAGON_V6_vandvrt
+      {Intrinsic::hexagon_V6_vandvrt_128B, 37821}, // __builtin_HEXAGON_V6_vandvrt_128B
+      {Intrinsic::hexagon_V6_vandvrt_acc, 37855}, // __builtin_HEXAGON_V6_vandvrt_acc
+      {Intrinsic::hexagon_V6_vandvrt_acc_128B, 37888}, // __builtin_HEXAGON_V6_vandvrt_acc_128B
+      {Intrinsic::hexagon_V6_vaslh, 37926}, // __builtin_HEXAGON_V6_vaslh
+      {Intrinsic::hexagon_V6_vaslh_128B, 37953}, // __builtin_HEXAGON_V6_vaslh_128B
+      {Intrinsic::hexagon_V6_vaslh_acc, 37985}, // __builtin_HEXAGON_V6_vaslh_acc
+      {Intrinsic::hexagon_V6_vaslh_acc_128B, 38016}, // __builtin_HEXAGON_V6_vaslh_acc_128B
+      {Intrinsic::hexagon_V6_vaslhv, 38052}, // __builtin_HEXAGON_V6_vaslhv
+      {Intrinsic::hexagon_V6_vaslhv_128B, 38080}, // __builtin_HEXAGON_V6_vaslhv_128B
+      {Intrinsic::hexagon_V6_vaslw, 38113}, // __builtin_HEXAGON_V6_vaslw
+      {Intrinsic::hexagon_V6_vaslw_128B, 38140}, // __builtin_HEXAGON_V6_vaslw_128B
+      {Intrinsic::hexagon_V6_vaslw_acc, 38172}, // __builtin_HEXAGON_V6_vaslw_acc
+      {Intrinsic::hexagon_V6_vaslw_acc_128B, 38203}, // __builtin_HEXAGON_V6_vaslw_acc_128B
+      {Intrinsic::hexagon_V6_vaslwv, 38239}, // __builtin_HEXAGON_V6_vaslwv
+      {Intrinsic::hexagon_V6_vaslwv_128B, 38267}, // __builtin_HEXAGON_V6_vaslwv_128B
+      {Intrinsic::hexagon_V6_vasr_into, 38300}, // __builtin_HEXAGON_V6_vasr_into
+      {Intrinsic::hexagon_V6_vasr_into_128B, 38331}, // __builtin_HEXAGON_V6_vasr_into_128B
+      {Intrinsic::hexagon_V6_vasrh, 38367}, // __builtin_HEXAGON_V6_vasrh
+      {Intrinsic::hexagon_V6_vasrh_128B, 38394}, // __builtin_HEXAGON_V6_vasrh_128B
+      {Intrinsic::hexagon_V6_vasrh_acc, 38426}, // __builtin_HEXAGON_V6_vasrh_acc
+      {Intrinsic::hexagon_V6_vasrh_acc_128B, 38457}, // __builtin_HEXAGON_V6_vasrh_acc_128B
+      {Intrinsic::hexagon_V6_vasrhbrndsat, 38493}, // __builtin_HEXAGON_V6_vasrhbrndsat
+      {Intrinsic::hexagon_V6_vasrhbrndsat_128B, 38527}, // __builtin_HEXAGON_V6_vasrhbrndsat_128B
+      {Intrinsic::hexagon_V6_vasrhbsat, 38566}, // __builtin_HEXAGON_V6_vasrhbsat
+      {Intrinsic::hexagon_V6_vasrhbsat_128B, 38597}, // __builtin_HEXAGON_V6_vasrhbsat_128B
+      {Intrinsic::hexagon_V6_vasrhubrndsat, 38633}, // __builtin_HEXAGON_V6_vasrhubrndsat
+      {Intrinsic::hexagon_V6_vasrhubrndsat_128B, 38668}, // __builtin_HEXAGON_V6_vasrhubrndsat_128B
+      {Intrinsic::hexagon_V6_vasrhubsat, 38708}, // __builtin_HEXAGON_V6_vasrhubsat
+      {Intrinsic::hexagon_V6_vasrhubsat_128B, 38740}, // __builtin_HEXAGON_V6_vasrhubsat_128B
+      {Intrinsic::hexagon_V6_vasrhv, 38777}, // __builtin_HEXAGON_V6_vasrhv
+      {Intrinsic::hexagon_V6_vasrhv_128B, 38805}, // __builtin_HEXAGON_V6_vasrhv_128B
+      {Intrinsic::hexagon_V6_vasruhubrndsat, 38838}, // __builtin_HEXAGON_V6_vasruhubrndsat
+      {Intrinsic::hexagon_V6_vasruhubrndsat_128B, 38874}, // __builtin_HEXAGON_V6_vasruhubrndsat_128B
+      {Intrinsic::hexagon_V6_vasruhubsat, 38915}, // __builtin_HEXAGON_V6_vasruhubsat
+      {Intrinsic::hexagon_V6_vasruhubsat_128B, 38948}, // __builtin_HEXAGON_V6_vasruhubsat_128B
+      {Intrinsic::hexagon_V6_vasruwuhrndsat, 38986}, // __builtin_HEXAGON_V6_vasruwuhrndsat
+      {Intrinsic::hexagon_V6_vasruwuhrndsat_128B, 39022}, // __builtin_HEXAGON_V6_vasruwuhrndsat_128B
+      {Intrinsic::hexagon_V6_vasruwuhsat, 39063}, // __builtin_HEXAGON_V6_vasruwuhsat
+      {Intrinsic::hexagon_V6_vasruwuhsat_128B, 39096}, // __builtin_HEXAGON_V6_vasruwuhsat_128B
+      {Intrinsic::hexagon_V6_vasrw, 39134}, // __builtin_HEXAGON_V6_vasrw
+      {Intrinsic::hexagon_V6_vasrw_128B, 39161}, // __builtin_HEXAGON_V6_vasrw_128B
+      {Intrinsic::hexagon_V6_vasrw_acc, 39193}, // __builtin_HEXAGON_V6_vasrw_acc
+      {Intrinsic::hexagon_V6_vasrw_acc_128B, 39224}, // __builtin_HEXAGON_V6_vasrw_acc_128B
+      {Intrinsic::hexagon_V6_vasrwh, 39260}, // __builtin_HEXAGON_V6_vasrwh
+      {Intrinsic::hexagon_V6_vasrwh_128B, 39288}, // __builtin_HEXAGON_V6_vasrwh_128B
+      {Intrinsic::hexagon_V6_vasrwhrndsat, 39321}, // __builtin_HEXAGON_V6_vasrwhrndsat
+      {Intrinsic::hexagon_V6_vasrwhrndsat_128B, 39355}, // __builtin_HEXAGON_V6_vasrwhrndsat_128B
+      {Intrinsic::hexagon_V6_vasrwhsat, 39394}, // __builtin_HEXAGON_V6_vasrwhsat
+      {Intrinsic::hexagon_V6_vasrwhsat_128B, 39425}, // __builtin_HEXAGON_V6_vasrwhsat_128B
+      {Intrinsic::hexagon_V6_vasrwuhrndsat, 39461}, // __builtin_HEXAGON_V6_vasrwuhrndsat
+      {Intrinsic::hexagon_V6_vasrwuhrndsat_128B, 39496}, // __builtin_HEXAGON_V6_vasrwuhrndsat_128B
+      {Intrinsic::hexagon_V6_vasrwuhsat, 39536}, // __builtin_HEXAGON_V6_vasrwuhsat
+      {Intrinsic::hexagon_V6_vasrwuhsat_128B, 39568}, // __builtin_HEXAGON_V6_vasrwuhsat_128B
+      {Intrinsic::hexagon_V6_vasrwv, 39605}, // __builtin_HEXAGON_V6_vasrwv
+      {Intrinsic::hexagon_V6_vasrwv_128B, 39633}, // __builtin_HEXAGON_V6_vasrwv_128B
+      {Intrinsic::hexagon_V6_vassign, 39666}, // __builtin_HEXAGON_V6_vassign
+      {Intrinsic::hexagon_V6_vassign_128B, 39695}, // __builtin_HEXAGON_V6_vassign_128B
+      {Intrinsic::hexagon_V6_vassignp, 39729}, // __builtin_HEXAGON_V6_vassignp
+      {Intrinsic::hexagon_V6_vassignp_128B, 39759}, // __builtin_HEXAGON_V6_vassignp_128B
+      {Intrinsic::hexagon_V6_vavgb, 39794}, // __builtin_HEXAGON_V6_vavgb
+      {Intrinsic::hexagon_V6_vavgb_128B, 39821}, // __builtin_HEXAGON_V6_vavgb_128B
+      {Intrinsic::hexagon_V6_vavgbrnd, 39853}, // __builtin_HEXAGON_V6_vavgbrnd
+      {Intrinsic::hexagon_V6_vavgbrnd_128B, 39883}, // __builtin_HEXAGON_V6_vavgbrnd_128B
+      {Intrinsic::hexagon_V6_vavgh, 39918}, // __builtin_HEXAGON_V6_vavgh
+      {Intrinsic::hexagon_V6_vavgh_128B, 39945}, // __builtin_HEXAGON_V6_vavgh_128B
+      {Intrinsic::hexagon_V6_vavghrnd, 39977}, // __builtin_HEXAGON_V6_vavghrnd
+      {Intrinsic::hexagon_V6_vavghrnd_128B, 40007}, // __builtin_HEXAGON_V6_vavghrnd_128B
+      {Intrinsic::hexagon_V6_vavgub, 40042}, // __builtin_HEXAGON_V6_vavgub
+      {Intrinsic::hexagon_V6_vavgub_128B, 40070}, // __builtin_HEXAGON_V6_vavgub_128B
+      {Intrinsic::hexagon_V6_vavgubrnd, 40103}, // __builtin_HEXAGON_V6_vavgubrnd
+      {Intrinsic::hexagon_V6_vavgubrnd_128B, 40134}, // __builtin_HEXAGON_V6_vavgubrnd_128B
+      {Intrinsic::hexagon_V6_vavguh, 40170}, // __builtin_HEXAGON_V6_vavguh
+      {Intrinsic::hexagon_V6_vavguh_128B, 40198}, // __builtin_HEXAGON_V6_vavguh_128B
+      {Intrinsic::hexagon_V6_vavguhrnd, 40231}, // __builtin_HEXAGON_V6_vavguhrnd
+      {Intrinsic::hexagon_V6_vavguhrnd_128B, 40262}, // __builtin_HEXAGON_V6_vavguhrnd_128B
+      {Intrinsic::hexagon_V6_vavguw, 40298}, // __builtin_HEXAGON_V6_vavguw
+      {Intrinsic::hexagon_V6_vavguw_128B, 40326}, // __builtin_HEXAGON_V6_vavguw_128B
+      {Intrinsic::hexagon_V6_vavguwrnd, 40359}, // __builtin_HEXAGON_V6_vavguwrnd
+      {Intrinsic::hexagon_V6_vavguwrnd_128B, 40390}, // __builtin_HEXAGON_V6_vavguwrnd_128B
+      {Intrinsic::hexagon_V6_vavgw, 40426}, // __builtin_HEXAGON_V6_vavgw
+      {Intrinsic::hexagon_V6_vavgw_128B, 40453}, // __builtin_HEXAGON_V6_vavgw_128B
+      {Intrinsic::hexagon_V6_vavgwrnd, 40485}, // __builtin_HEXAGON_V6_vavgwrnd
+      {Intrinsic::hexagon_V6_vavgwrnd_128B, 40515}, // __builtin_HEXAGON_V6_vavgwrnd_128B
+      {Intrinsic::hexagon_V6_vcl0h, 40550}, // __builtin_HEXAGON_V6_vcl0h
+      {Intrinsic::hexagon_V6_vcl0h_128B, 40577}, // __builtin_HEXAGON_V6_vcl0h_128B
+      {Intrinsic::hexagon_V6_vcl0w, 40609}, // __builtin_HEXAGON_V6_vcl0w
+      {Intrinsic::hexagon_V6_vcl0w_128B, 40636}, // __builtin_HEXAGON_V6_vcl0w_128B
+      {Intrinsic::hexagon_V6_vcombine, 40668}, // __builtin_HEXAGON_V6_vcombine
+      {Intrinsic::hexagon_V6_vcombine_128B, 40698}, // __builtin_HEXAGON_V6_vcombine_128B
+      {Intrinsic::hexagon_V6_vd0, 40733}, // __builtin_HEXAGON_V6_vd0
+      {Intrinsic::hexagon_V6_vd0_128B, 40758}, // __builtin_HEXAGON_V6_vd0_128B
+      {Intrinsic::hexagon_V6_vdd0, 40788}, // __builtin_HEXAGON_V6_vdd0
+      {Intrinsic::hexagon_V6_vdd0_128B, 40814}, // __builtin_HEXAGON_V6_vdd0_128B
+      {Intrinsic::hexagon_V6_vdealb, 40845}, // __builtin_HEXAGON_V6_vdealb
+      {Intrinsic::hexagon_V6_vdealb4w, 40906}, // __builtin_HEXAGON_V6_vdealb4w
+      {Intrinsic::hexagon_V6_vdealb4w_128B, 40936}, // __builtin_HEXAGON_V6_vdealb4w_128B
+      {Intrinsic::hexagon_V6_vdealb_128B, 40873}, // __builtin_HEXAGON_V6_vdealb_128B
+      {Intrinsic::hexagon_V6_vdealh, 40971}, // __builtin_HEXAGON_V6_vdealh
+      {Intrinsic::hexagon_V6_vdealh_128B, 40999}, // __builtin_HEXAGON_V6_vdealh_128B
+      {Intrinsic::hexagon_V6_vdealvdd, 41032}, // __builtin_HEXAGON_V6_vdealvdd
+      {Intrinsic::hexagon_V6_vdealvdd_128B, 41062}, // __builtin_HEXAGON_V6_vdealvdd_128B
+      {Intrinsic::hexagon_V6_vdelta, 41097}, // __builtin_HEXAGON_V6_vdelta
+      {Intrinsic::hexagon_V6_vdelta_128B, 41125}, // __builtin_HEXAGON_V6_vdelta_128B
+      {Intrinsic::hexagon_V6_vdmpybus, 41158}, // __builtin_HEXAGON_V6_vdmpybus
+      {Intrinsic::hexagon_V6_vdmpybus_128B, 41188}, // __builtin_HEXAGON_V6_vdmpybus_128B
+      {Intrinsic::hexagon_V6_vdmpybus_acc, 41223}, // __builtin_HEXAGON_V6_vdmpybus_acc
+      {Intrinsic::hexagon_V6_vdmpybus_acc_128B, 41257}, // __builtin_HEXAGON_V6_vdmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vdmpybus_dv, 41296}, // __builtin_HEXAGON_V6_vdmpybus_dv
+      {Intrinsic::hexagon_V6_vdmpybus_dv_128B, 41329}, // __builtin_HEXAGON_V6_vdmpybus_dv_128B
+      {Intrinsic::hexagon_V6_vdmpybus_dv_acc, 41367}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc
+      {Intrinsic::hexagon_V6_vdmpybus_dv_acc_128B, 41404}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhb, 41446}, // __builtin_HEXAGON_V6_vdmpyhb
+      {Intrinsic::hexagon_V6_vdmpyhb_128B, 41475}, // __builtin_HEXAGON_V6_vdmpyhb_128B
+      {Intrinsic::hexagon_V6_vdmpyhb_acc, 41509}, // __builtin_HEXAGON_V6_vdmpyhb_acc
+      {Intrinsic::hexagon_V6_vdmpyhb_acc_128B, 41542}, // __builtin_HEXAGON_V6_vdmpyhb_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhb_dv, 41580}, // __builtin_HEXAGON_V6_vdmpyhb_dv
+      {Intrinsic::hexagon_V6_vdmpyhb_dv_128B, 41612}, // __builtin_HEXAGON_V6_vdmpyhb_dv_128B
+      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc, 41649}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc
+      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc_128B, 41685}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhisat, 41726}, // __builtin_HEXAGON_V6_vdmpyhisat
+      {Intrinsic::hexagon_V6_vdmpyhisat_128B, 41758}, // __builtin_HEXAGON_V6_vdmpyhisat_128B
+      {Intrinsic::hexagon_V6_vdmpyhisat_acc, 41795}, // __builtin_HEXAGON_V6_vdmpyhisat_acc
+      {Intrinsic::hexagon_V6_vdmpyhisat_acc_128B, 41831}, // __builtin_HEXAGON_V6_vdmpyhisat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhsat, 41872}, // __builtin_HEXAGON_V6_vdmpyhsat
+      {Intrinsic::hexagon_V6_vdmpyhsat_128B, 41903}, // __builtin_HEXAGON_V6_vdmpyhsat_128B
+      {Intrinsic::hexagon_V6_vdmpyhsat_acc, 41939}, // __builtin_HEXAGON_V6_vdmpyhsat_acc
+      {Intrinsic::hexagon_V6_vdmpyhsat_acc_128B, 41974}, // __builtin_HEXAGON_V6_vdmpyhsat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhsuisat, 42014}, // __builtin_HEXAGON_V6_vdmpyhsuisat
+      {Intrinsic::hexagon_V6_vdmpyhsuisat_128B, 42048}, // __builtin_HEXAGON_V6_vdmpyhsuisat_128B
+      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc, 42087}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc
+      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc_128B, 42125}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhsusat, 42168}, // __builtin_HEXAGON_V6_vdmpyhsusat
+      {Intrinsic::hexagon_V6_vdmpyhsusat_128B, 42201}, // __builtin_HEXAGON_V6_vdmpyhsusat_128B
+      {Intrinsic::hexagon_V6_vdmpyhsusat_acc, 42239}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc
+      {Intrinsic::hexagon_V6_vdmpyhsusat_acc_128B, 42276}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhvsat, 42318}, // __builtin_HEXAGON_V6_vdmpyhvsat
+      {Intrinsic::hexagon_V6_vdmpyhvsat_128B, 42350}, // __builtin_HEXAGON_V6_vdmpyhvsat_128B
+      {Intrinsic::hexagon_V6_vdmpyhvsat_acc, 42387}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc
+      {Intrinsic::hexagon_V6_vdmpyhvsat_acc_128B, 42423}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc_128B
+      {Intrinsic::hexagon_V6_vdsaduh, 42464}, // __builtin_HEXAGON_V6_vdsaduh
+      {Intrinsic::hexagon_V6_vdsaduh_128B, 42493}, // __builtin_HEXAGON_V6_vdsaduh_128B
+      {Intrinsic::hexagon_V6_vdsaduh_acc, 42527}, // __builtin_HEXAGON_V6_vdsaduh_acc
+      {Intrinsic::hexagon_V6_vdsaduh_acc_128B, 42560}, // __builtin_HEXAGON_V6_vdsaduh_acc_128B
+      {Intrinsic::hexagon_V6_veqb, 42598}, // __builtin_HEXAGON_V6_veqb
+      {Intrinsic::hexagon_V6_veqb_128B, 42624}, // __builtin_HEXAGON_V6_veqb_128B
+      {Intrinsic::hexagon_V6_veqb_and, 42655}, // __builtin_HEXAGON_V6_veqb_and
+      {Intrinsic::hexagon_V6_veqb_and_128B, 42685}, // __builtin_HEXAGON_V6_veqb_and_128B
+      {Intrinsic::hexagon_V6_veqb_or, 42720}, // __builtin_HEXAGON_V6_veqb_or
+      {Intrinsic::hexagon_V6_veqb_or_128B, 42749}, // __builtin_HEXAGON_V6_veqb_or_128B
+      {Intrinsic::hexagon_V6_veqb_xor, 42783}, // __builtin_HEXAGON_V6_veqb_xor
+      {Intrinsic::hexagon_V6_veqb_xor_128B, 42813}, // __builtin_HEXAGON_V6_veqb_xor_128B
+      {Intrinsic::hexagon_V6_veqh, 42848}, // __builtin_HEXAGON_V6_veqh
+      {Intrinsic::hexagon_V6_veqh_128B, 42874}, // __builtin_HEXAGON_V6_veqh_128B
+      {Intrinsic::hexagon_V6_veqh_and, 42905}, // __builtin_HEXAGON_V6_veqh_and
+      {Intrinsic::hexagon_V6_veqh_and_128B, 42935}, // __builtin_HEXAGON_V6_veqh_and_128B
+      {Intrinsic::hexagon_V6_veqh_or, 42970}, // __builtin_HEXAGON_V6_veqh_or
+      {Intrinsic::hexagon_V6_veqh_or_128B, 42999}, // __builtin_HEXAGON_V6_veqh_or_128B
+      {Intrinsic::hexagon_V6_veqh_xor, 43033}, // __builtin_HEXAGON_V6_veqh_xor
+      {Intrinsic::hexagon_V6_veqh_xor_128B, 43063}, // __builtin_HEXAGON_V6_veqh_xor_128B
+      {Intrinsic::hexagon_V6_veqw, 43098}, // __builtin_HEXAGON_V6_veqw
+      {Intrinsic::hexagon_V6_veqw_128B, 43124}, // __builtin_HEXAGON_V6_veqw_128B
+      {Intrinsic::hexagon_V6_veqw_and, 43155}, // __builtin_HEXAGON_V6_veqw_and
+      {Intrinsic::hexagon_V6_veqw_and_128B, 43185}, // __builtin_HEXAGON_V6_veqw_and_128B
+      {Intrinsic::hexagon_V6_veqw_or, 43220}, // __builtin_HEXAGON_V6_veqw_or
+      {Intrinsic::hexagon_V6_veqw_or_128B, 43249}, // __builtin_HEXAGON_V6_veqw_or_128B
+      {Intrinsic::hexagon_V6_veqw_xor, 43283}, // __builtin_HEXAGON_V6_veqw_xor
+      {Intrinsic::hexagon_V6_veqw_xor_128B, 43313}, // __builtin_HEXAGON_V6_veqw_xor_128B
+      {Intrinsic::hexagon_V6_vgathermh, 43348}, // __builtin_HEXAGON_V6_vgathermh
+      {Intrinsic::hexagon_V6_vgathermh_128B, 43379}, // __builtin_HEXAGON_V6_vgathermh_128B
+      {Intrinsic::hexagon_V6_vgathermhq, 43415}, // __builtin_HEXAGON_V6_vgathermhq
+      {Intrinsic::hexagon_V6_vgathermhq_128B, 43447}, // __builtin_HEXAGON_V6_vgathermhq_128B
+      {Intrinsic::hexagon_V6_vgathermhw, 43484}, // __builtin_HEXAGON_V6_vgathermhw
+      {Intrinsic::hexagon_V6_vgathermhw_128B, 43516}, // __builtin_HEXAGON_V6_vgathermhw_128B
+      {Intrinsic::hexagon_V6_vgathermhwq, 43553}, // __builtin_HEXAGON_V6_vgathermhwq
+      {Intrinsic::hexagon_V6_vgathermhwq_128B, 43586}, // __builtin_HEXAGON_V6_vgathermhwq_128B
+      {Intrinsic::hexagon_V6_vgathermw, 43624}, // __builtin_HEXAGON_V6_vgathermw
+      {Intrinsic::hexagon_V6_vgathermw_128B, 43655}, // __builtin_HEXAGON_V6_vgathermw_128B
+      {Intrinsic::hexagon_V6_vgathermwq, 43691}, // __builtin_HEXAGON_V6_vgathermwq
+      {Intrinsic::hexagon_V6_vgathermwq_128B, 43723}, // __builtin_HEXAGON_V6_vgathermwq_128B
+      {Intrinsic::hexagon_V6_vgtb, 43760}, // __builtin_HEXAGON_V6_vgtb
+      {Intrinsic::hexagon_V6_vgtb_128B, 43786}, // __builtin_HEXAGON_V6_vgtb_128B
+      {Intrinsic::hexagon_V6_vgtb_and, 43817}, // __builtin_HEXAGON_V6_vgtb_and
+      {Intrinsic::hexagon_V6_vgtb_and_128B, 43847}, // __builtin_HEXAGON_V6_vgtb_and_128B
+      {Intrinsic::hexagon_V6_vgtb_or, 43882}, // __builtin_HEXAGON_V6_vgtb_or
+      {Intrinsic::hexagon_V6_vgtb_or_128B, 43911}, // __builtin_HEXAGON_V6_vgtb_or_128B
+      {Intrinsic::hexagon_V6_vgtb_xor, 43945}, // __builtin_HEXAGON_V6_vgtb_xor
+      {Intrinsic::hexagon_V6_vgtb_xor_128B, 43975}, // __builtin_HEXAGON_V6_vgtb_xor_128B
+      {Intrinsic::hexagon_V6_vgth, 44010}, // __builtin_HEXAGON_V6_vgth
+      {Intrinsic::hexagon_V6_vgth_128B, 44036}, // __builtin_HEXAGON_V6_vgth_128B
+      {Intrinsic::hexagon_V6_vgth_and, 44067}, // __builtin_HEXAGON_V6_vgth_and
+      {Intrinsic::hexagon_V6_vgth_and_128B, 44097}, // __builtin_HEXAGON_V6_vgth_and_128B
+      {Intrinsic::hexagon_V6_vgth_or, 44132}, // __builtin_HEXAGON_V6_vgth_or
+      {Intrinsic::hexagon_V6_vgth_or_128B, 44161}, // __builtin_HEXAGON_V6_vgth_or_128B
+      {Intrinsic::hexagon_V6_vgth_xor, 44195}, // __builtin_HEXAGON_V6_vgth_xor
+      {Intrinsic::hexagon_V6_vgth_xor_128B, 44225}, // __builtin_HEXAGON_V6_vgth_xor_128B
+      {Intrinsic::hexagon_V6_vgtub, 44260}, // __builtin_HEXAGON_V6_vgtub
+      {Intrinsic::hexagon_V6_vgtub_128B, 44287}, // __builtin_HEXAGON_V6_vgtub_128B
+      {Intrinsic::hexagon_V6_vgtub_and, 44319}, // __builtin_HEXAGON_V6_vgtub_and
+      {Intrinsic::hexagon_V6_vgtub_and_128B, 44350}, // __builtin_HEXAGON_V6_vgtub_and_128B
+      {Intrinsic::hexagon_V6_vgtub_or, 44386}, // __builtin_HEXAGON_V6_vgtub_or
+      {Intrinsic::hexagon_V6_vgtub_or_128B, 44416}, // __builtin_HEXAGON_V6_vgtub_or_128B
+      {Intrinsic::hexagon_V6_vgtub_xor, 44451}, // __builtin_HEXAGON_V6_vgtub_xor
+      {Intrinsic::hexagon_V6_vgtub_xor_128B, 44482}, // __builtin_HEXAGON_V6_vgtub_xor_128B
+      {Intrinsic::hexagon_V6_vgtuh, 44518}, // __builtin_HEXAGON_V6_vgtuh
+      {Intrinsic::hexagon_V6_vgtuh_128B, 44545}, // __builtin_HEXAGON_V6_vgtuh_128B
+      {Intrinsic::hexagon_V6_vgtuh_and, 44577}, // __builtin_HEXAGON_V6_vgtuh_and
+      {Intrinsic::hexagon_V6_vgtuh_and_128B, 44608}, // __builtin_HEXAGON_V6_vgtuh_and_128B
+      {Intrinsic::hexagon_V6_vgtuh_or, 44644}, // __builtin_HEXAGON_V6_vgtuh_or
+      {Intrinsic::hexagon_V6_vgtuh_or_128B, 44674}, // __builtin_HEXAGON_V6_vgtuh_or_128B
+      {Intrinsic::hexagon_V6_vgtuh_xor, 44709}, // __builtin_HEXAGON_V6_vgtuh_xor
+      {Intrinsic::hexagon_V6_vgtuh_xor_128B, 44740}, // __builtin_HEXAGON_V6_vgtuh_xor_128B
+      {Intrinsic::hexagon_V6_vgtuw, 44776}, // __builtin_HEXAGON_V6_vgtuw
+      {Intrinsic::hexagon_V6_vgtuw_128B, 44803}, // __builtin_HEXAGON_V6_vgtuw_128B
+      {Intrinsic::hexagon_V6_vgtuw_and, 44835}, // __builtin_HEXAGON_V6_vgtuw_and
+      {Intrinsic::hexagon_V6_vgtuw_and_128B, 44866}, // __builtin_HEXAGON_V6_vgtuw_and_128B
+      {Intrinsic::hexagon_V6_vgtuw_or, 44902}, // __builtin_HEXAGON_V6_vgtuw_or
+      {Intrinsic::hexagon_V6_vgtuw_or_128B, 44932}, // __builtin_HEXAGON_V6_vgtuw_or_128B
+      {Intrinsic::hexagon_V6_vgtuw_xor, 44967}, // __builtin_HEXAGON_V6_vgtuw_xor
+      {Intrinsic::hexagon_V6_vgtuw_xor_128B, 44998}, // __builtin_HEXAGON_V6_vgtuw_xor_128B
+      {Intrinsic::hexagon_V6_vgtw, 45034}, // __builtin_HEXAGON_V6_vgtw
+      {Intrinsic::hexagon_V6_vgtw_128B, 45060}, // __builtin_HEXAGON_V6_vgtw_128B
+      {Intrinsic::hexagon_V6_vgtw_and, 45091}, // __builtin_HEXAGON_V6_vgtw_and
+      {Intrinsic::hexagon_V6_vgtw_and_128B, 45121}, // __builtin_HEXAGON_V6_vgtw_and_128B
+      {Intrinsic::hexagon_V6_vgtw_or, 45156}, // __builtin_HEXAGON_V6_vgtw_or
+      {Intrinsic::hexagon_V6_vgtw_or_128B, 45185}, // __builtin_HEXAGON_V6_vgtw_or_128B
+      {Intrinsic::hexagon_V6_vgtw_xor, 45219}, // __builtin_HEXAGON_V6_vgtw_xor
+      {Intrinsic::hexagon_V6_vgtw_xor_128B, 45249}, // __builtin_HEXAGON_V6_vgtw_xor_128B
+      {Intrinsic::hexagon_V6_vinsertwr, 45284}, // __builtin_HEXAGON_V6_vinsertwr
+      {Intrinsic::hexagon_V6_vinsertwr_128B, 45315}, // __builtin_HEXAGON_V6_vinsertwr_128B
+      {Intrinsic::hexagon_V6_vlalignb, 45351}, // __builtin_HEXAGON_V6_vlalignb
+      {Intrinsic::hexagon_V6_vlalignb_128B, 45381}, // __builtin_HEXAGON_V6_vlalignb_128B
+      {Intrinsic::hexagon_V6_vlalignbi, 45416}, // __builtin_HEXAGON_V6_vlalignbi
+      {Intrinsic::hexagon_V6_vlalignbi_128B, 45447}, // __builtin_HEXAGON_V6_vlalignbi_128B
+      {Intrinsic::hexagon_V6_vlsrb, 45483}, // __builtin_HEXAGON_V6_vlsrb
+      {Intrinsic::hexagon_V6_vlsrb_128B, 45510}, // __builtin_HEXAGON_V6_vlsrb_128B
+      {Intrinsic::hexagon_V6_vlsrh, 45542}, // __builtin_HEXAGON_V6_vlsrh
+      {Intrinsic::hexagon_V6_vlsrh_128B, 45569}, // __builtin_HEXAGON_V6_vlsrh_128B
+      {Intrinsic::hexagon_V6_vlsrhv, 45601}, // __builtin_HEXAGON_V6_vlsrhv
+      {Intrinsic::hexagon_V6_vlsrhv_128B, 45629}, // __builtin_HEXAGON_V6_vlsrhv_128B
+      {Intrinsic::hexagon_V6_vlsrw, 45662}, // __builtin_HEXAGON_V6_vlsrw
+      {Intrinsic::hexagon_V6_vlsrw_128B, 45689}, // __builtin_HEXAGON_V6_vlsrw_128B
+      {Intrinsic::hexagon_V6_vlsrwv, 45721}, // __builtin_HEXAGON_V6_vlsrwv
+      {Intrinsic::hexagon_V6_vlsrwv_128B, 45749}, // __builtin_HEXAGON_V6_vlsrwv_128B
+      {Intrinsic::hexagon_V6_vlut4, 45782}, // __builtin_HEXAGON_V6_vlut4
+      {Intrinsic::hexagon_V6_vlut4_128B, 45809}, // __builtin_HEXAGON_V6_vlut4_128B
+      {Intrinsic::hexagon_V6_vlutvvb, 45841}, // __builtin_HEXAGON_V6_vlutvvb
+      {Intrinsic::hexagon_V6_vlutvvb_128B, 45870}, // __builtin_HEXAGON_V6_vlutvvb_128B
+      {Intrinsic::hexagon_V6_vlutvvb_nm, 45904}, // __builtin_HEXAGON_V6_vlutvvb_nm
+      {Intrinsic::hexagon_V6_vlutvvb_nm_128B, 45936}, // __builtin_HEXAGON_V6_vlutvvb_nm_128B
+      {Intrinsic::hexagon_V6_vlutvvb_oracc, 45973}, // __builtin_HEXAGON_V6_vlutvvb_oracc
+      {Intrinsic::hexagon_V6_vlutvvb_oracc_128B, 46008}, // __builtin_HEXAGON_V6_vlutvvb_oracc_128B
+      {Intrinsic::hexagon_V6_vlutvvb_oracci, 46048}, // __builtin_HEXAGON_V6_vlutvvb_oracci
+      {Intrinsic::hexagon_V6_vlutvvb_oracci_128B, 46084}, // __builtin_HEXAGON_V6_vlutvvb_oracci_128B
+      {Intrinsic::hexagon_V6_vlutvvbi, 46125}, // __builtin_HEXAGON_V6_vlutvvbi
+      {Intrinsic::hexagon_V6_vlutvvbi_128B, 46155}, // __builtin_HEXAGON_V6_vlutvvbi_128B
+      {Intrinsic::hexagon_V6_vlutvwh, 46190}, // __builtin_HEXAGON_V6_vlutvwh
+      {Intrinsic::hexagon_V6_vlutvwh_128B, 46219}, // __builtin_HEXAGON_V6_vlutvwh_128B
+      {Intrinsic::hexagon_V6_vlutvwh_nm, 46253}, // __builtin_HEXAGON_V6_vlutvwh_nm
+      {Intrinsic::hexagon_V6_vlutvwh_nm_128B, 46285}, // __builtin_HEXAGON_V6_vlutvwh_nm_128B
+      {Intrinsic::hexagon_V6_vlutvwh_oracc, 46322}, // __builtin_HEXAGON_V6_vlutvwh_oracc
+      {Intrinsic::hexagon_V6_vlutvwh_oracc_128B, 46357}, // __builtin_HEXAGON_V6_vlutvwh_oracc_128B
+      {Intrinsic::hexagon_V6_vlutvwh_oracci, 46397}, // __builtin_HEXAGON_V6_vlutvwh_oracci
+      {Intrinsic::hexagon_V6_vlutvwh_oracci_128B, 46433}, // __builtin_HEXAGON_V6_vlutvwh_oracci_128B
+      {Intrinsic::hexagon_V6_vlutvwhi, 46474}, // __builtin_HEXAGON_V6_vlutvwhi
+      {Intrinsic::hexagon_V6_vlutvwhi_128B, 46504}, // __builtin_HEXAGON_V6_vlutvwhi_128B
+      {Intrinsic::hexagon_V6_vmaskedstorenq, 46539}, // __builtin_HEXAGON_V6_vmaskedstorenq
+      {Intrinsic::hexagon_V6_vmaskedstorenq_128B, 46575}, // __builtin_HEXAGON_V6_vmaskedstorenq_128B
+      {Intrinsic::hexagon_V6_vmaskedstorentnq, 46616}, // __builtin_HEXAGON_V6_vmaskedstorentnq
+      {Intrinsic::hexagon_V6_vmaskedstorentnq_128B, 46654}, // __builtin_HEXAGON_V6_vmaskedstorentnq_128B
+      {Intrinsic::hexagon_V6_vmaskedstorentq, 46697}, // __builtin_HEXAGON_V6_vmaskedstorentq
+      {Intrinsic::hexagon_V6_vmaskedstorentq_128B, 46734}, // __builtin_HEXAGON_V6_vmaskedstorentq_128B
+      {Intrinsic::hexagon_V6_vmaskedstoreq, 46776}, // __builtin_HEXAGON_V6_vmaskedstoreq
+      {Intrinsic::hexagon_V6_vmaskedstoreq_128B, 46811}, // __builtin_HEXAGON_V6_vmaskedstoreq_128B
+      {Intrinsic::hexagon_V6_vmaxb, 46851}, // __builtin_HEXAGON_V6_vmaxb
+      {Intrinsic::hexagon_V6_vmaxb_128B, 46878}, // __builtin_HEXAGON_V6_vmaxb_128B
+      {Intrinsic::hexagon_V6_vmaxh, 46910}, // __builtin_HEXAGON_V6_vmaxh
+      {Intrinsic::hexagon_V6_vmaxh_128B, 46937}, // __builtin_HEXAGON_V6_vmaxh_128B
+      {Intrinsic::hexagon_V6_vmaxub, 46969}, // __builtin_HEXAGON_V6_vmaxub
+      {Intrinsic::hexagon_V6_vmaxub_128B, 46997}, // __builtin_HEXAGON_V6_vmaxub_128B
+      {Intrinsic::hexagon_V6_vmaxuh, 47030}, // __builtin_HEXAGON_V6_vmaxuh
+      {Intrinsic::hexagon_V6_vmaxuh_128B, 47058}, // __builtin_HEXAGON_V6_vmaxuh_128B
+      {Intrinsic::hexagon_V6_vmaxw, 47091}, // __builtin_HEXAGON_V6_vmaxw
+      {Intrinsic::hexagon_V6_vmaxw_128B, 47118}, // __builtin_HEXAGON_V6_vmaxw_128B
+      {Intrinsic::hexagon_V6_vminb, 47150}, // __builtin_HEXAGON_V6_vminb
+      {Intrinsic::hexagon_V6_vminb_128B, 47177}, // __builtin_HEXAGON_V6_vminb_128B
+      {Intrinsic::hexagon_V6_vminh, 47209}, // __builtin_HEXAGON_V6_vminh
+      {Intrinsic::hexagon_V6_vminh_128B, 47236}, // __builtin_HEXAGON_V6_vminh_128B
+      {Intrinsic::hexagon_V6_vminub, 47268}, // __builtin_HEXAGON_V6_vminub
+      {Intrinsic::hexagon_V6_vminub_128B, 47296}, // __builtin_HEXAGON_V6_vminub_128B
+      {Intrinsic::hexagon_V6_vminuh, 47329}, // __builtin_HEXAGON_V6_vminuh
+      {Intrinsic::hexagon_V6_vminuh_128B, 47357}, // __builtin_HEXAGON_V6_vminuh_128B
+      {Intrinsic::hexagon_V6_vminw, 47390}, // __builtin_HEXAGON_V6_vminw
+      {Intrinsic::hexagon_V6_vminw_128B, 47417}, // __builtin_HEXAGON_V6_vminw_128B
+      {Intrinsic::hexagon_V6_vmpabus, 47449}, // __builtin_HEXAGON_V6_vmpabus
+      {Intrinsic::hexagon_V6_vmpabus_128B, 47478}, // __builtin_HEXAGON_V6_vmpabus_128B
+      {Intrinsic::hexagon_V6_vmpabus_acc, 47512}, // __builtin_HEXAGON_V6_vmpabus_acc
+      {Intrinsic::hexagon_V6_vmpabus_acc_128B, 47545}, // __builtin_HEXAGON_V6_vmpabus_acc_128B
+      {Intrinsic::hexagon_V6_vmpabusv, 47583}, // __builtin_HEXAGON_V6_vmpabusv
+      {Intrinsic::hexagon_V6_vmpabusv_128B, 47613}, // __builtin_HEXAGON_V6_vmpabusv_128B
+      {Intrinsic::hexagon_V6_vmpabuu, 47648}, // __builtin_HEXAGON_V6_vmpabuu
+      {Intrinsic::hexagon_V6_vmpabuu_128B, 47677}, // __builtin_HEXAGON_V6_vmpabuu_128B
+      {Intrinsic::hexagon_V6_vmpabuu_acc, 47711}, // __builtin_HEXAGON_V6_vmpabuu_acc
+      {Intrinsic::hexagon_V6_vmpabuu_acc_128B, 47744}, // __builtin_HEXAGON_V6_vmpabuu_acc_128B
+      {Intrinsic::hexagon_V6_vmpabuuv, 47782}, // __builtin_HEXAGON_V6_vmpabuuv
+      {Intrinsic::hexagon_V6_vmpabuuv_128B, 47812}, // __builtin_HEXAGON_V6_vmpabuuv_128B
+      {Intrinsic::hexagon_V6_vmpahb, 47847}, // __builtin_HEXAGON_V6_vmpahb
+      {Intrinsic::hexagon_V6_vmpahb_128B, 47875}, // __builtin_HEXAGON_V6_vmpahb_128B
+      {Intrinsic::hexagon_V6_vmpahb_acc, 47908}, // __builtin_HEXAGON_V6_vmpahb_acc
+      {Intrinsic::hexagon_V6_vmpahb_acc_128B, 47940}, // __builtin_HEXAGON_V6_vmpahb_acc_128B
+      {Intrinsic::hexagon_V6_vmpahhsat, 47977}, // __builtin_HEXAGON_V6_vmpahhsat
+      {Intrinsic::hexagon_V6_vmpahhsat_128B, 48008}, // __builtin_HEXAGON_V6_vmpahhsat_128B
+      {Intrinsic::hexagon_V6_vmpauhb, 48044}, // __builtin_HEXAGON_V6_vmpauhb
+      {Intrinsic::hexagon_V6_vmpauhb_128B, 48073}, // __builtin_HEXAGON_V6_vmpauhb_128B
+      {Intrinsic::hexagon_V6_vmpauhb_acc, 48107}, // __builtin_HEXAGON_V6_vmpauhb_acc
+      {Intrinsic::hexagon_V6_vmpauhb_acc_128B, 48140}, // __builtin_HEXAGON_V6_vmpauhb_acc_128B
+      {Intrinsic::hexagon_V6_vmpauhuhsat, 48178}, // __builtin_HEXAGON_V6_vmpauhuhsat
+      {Intrinsic::hexagon_V6_vmpauhuhsat_128B, 48211}, // __builtin_HEXAGON_V6_vmpauhuhsat_128B
+      {Intrinsic::hexagon_V6_vmpsuhuhsat, 48249}, // __builtin_HEXAGON_V6_vmpsuhuhsat
+      {Intrinsic::hexagon_V6_vmpsuhuhsat_128B, 48282}, // __builtin_HEXAGON_V6_vmpsuhuhsat_128B
+      {Intrinsic::hexagon_V6_vmpybus, 48320}, // __builtin_HEXAGON_V6_vmpybus
+      {Intrinsic::hexagon_V6_vmpybus_128B, 48349}, // __builtin_HEXAGON_V6_vmpybus_128B
+      {Intrinsic::hexagon_V6_vmpybus_acc, 48383}, // __builtin_HEXAGON_V6_vmpybus_acc
+      {Intrinsic::hexagon_V6_vmpybus_acc_128B, 48416}, // __builtin_HEXAGON_V6_vmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vmpybusv, 48454}, // __builtin_HEXAGON_V6_vmpybusv
+      {Intrinsic::hexagon_V6_vmpybusv_128B, 48484}, // __builtin_HEXAGON_V6_vmpybusv_128B
+      {Intrinsic::hexagon_V6_vmpybusv_acc, 48519}, // __builtin_HEXAGON_V6_vmpybusv_acc
+      {Intrinsic::hexagon_V6_vmpybusv_acc_128B, 48553}, // __builtin_HEXAGON_V6_vmpybusv_acc_128B
+      {Intrinsic::hexagon_V6_vmpybv, 48592}, // __builtin_HEXAGON_V6_vmpybv
+      {Intrinsic::hexagon_V6_vmpybv_128B, 48620}, // __builtin_HEXAGON_V6_vmpybv_128B
+      {Intrinsic::hexagon_V6_vmpybv_acc, 48653}, // __builtin_HEXAGON_V6_vmpybv_acc
+      {Intrinsic::hexagon_V6_vmpybv_acc_128B, 48685}, // __builtin_HEXAGON_V6_vmpybv_acc_128B
+      {Intrinsic::hexagon_V6_vmpyewuh, 48722}, // __builtin_HEXAGON_V6_vmpyewuh
+      {Intrinsic::hexagon_V6_vmpyewuh_128B, 48752}, // __builtin_HEXAGON_V6_vmpyewuh_128B
+      {Intrinsic::hexagon_V6_vmpyewuh_64, 48787}, // __builtin_HEXAGON_V6_vmpyewuh_64
+      {Intrinsic::hexagon_V6_vmpyewuh_64_128B, 48820}, // __builtin_HEXAGON_V6_vmpyewuh_64_128B
+      {Intrinsic::hexagon_V6_vmpyh, 48858}, // __builtin_HEXAGON_V6_vmpyh
+      {Intrinsic::hexagon_V6_vmpyh_128B, 48885}, // __builtin_HEXAGON_V6_vmpyh_128B
+      {Intrinsic::hexagon_V6_vmpyh_acc, 48917}, // __builtin_HEXAGON_V6_vmpyh_acc
+      {Intrinsic::hexagon_V6_vmpyh_acc_128B, 48948}, // __builtin_HEXAGON_V6_vmpyh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhsat_acc, 48984}, // __builtin_HEXAGON_V6_vmpyhsat_acc
+      {Intrinsic::hexagon_V6_vmpyhsat_acc_128B, 49018}, // __builtin_HEXAGON_V6_vmpyhsat_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhsrs, 49057}, // __builtin_HEXAGON_V6_vmpyhsrs
+      {Intrinsic::hexagon_V6_vmpyhsrs_128B, 49087}, // __builtin_HEXAGON_V6_vmpyhsrs_128B
+      {Intrinsic::hexagon_V6_vmpyhss, 49122}, // __builtin_HEXAGON_V6_vmpyhss
+      {Intrinsic::hexagon_V6_vmpyhss_128B, 49151}, // __builtin_HEXAGON_V6_vmpyhss_128B
+      {Intrinsic::hexagon_V6_vmpyhus, 49185}, // __builtin_HEXAGON_V6_vmpyhus
+      {Intrinsic::hexagon_V6_vmpyhus_128B, 49214}, // __builtin_HEXAGON_V6_vmpyhus_128B
+      {Intrinsic::hexagon_V6_vmpyhus_acc, 49248}, // __builtin_HEXAGON_V6_vmpyhus_acc
+      {Intrinsic::hexagon_V6_vmpyhus_acc_128B, 49281}, // __builtin_HEXAGON_V6_vmpyhus_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhv, 49319}, // __builtin_HEXAGON_V6_vmpyhv
+      {Intrinsic::hexagon_V6_vmpyhv_128B, 49347}, // __builtin_HEXAGON_V6_vmpyhv_128B
+      {Intrinsic::hexagon_V6_vmpyhv_acc, 49380}, // __builtin_HEXAGON_V6_vmpyhv_acc
+      {Intrinsic::hexagon_V6_vmpyhv_acc_128B, 49412}, // __builtin_HEXAGON_V6_vmpyhv_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhvsrs, 49449}, // __builtin_HEXAGON_V6_vmpyhvsrs
+      {Intrinsic::hexagon_V6_vmpyhvsrs_128B, 49480}, // __builtin_HEXAGON_V6_vmpyhvsrs_128B
+      {Intrinsic::hexagon_V6_vmpyieoh, 49516}, // __builtin_HEXAGON_V6_vmpyieoh
+      {Intrinsic::hexagon_V6_vmpyieoh_128B, 49546}, // __builtin_HEXAGON_V6_vmpyieoh_128B
+      {Intrinsic::hexagon_V6_vmpyiewh_acc, 49581}, // __builtin_HEXAGON_V6_vmpyiewh_acc
+      {Intrinsic::hexagon_V6_vmpyiewh_acc_128B, 49615}, // __builtin_HEXAGON_V6_vmpyiewh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiewuh, 49654}, // __builtin_HEXAGON_V6_vmpyiewuh
+      {Intrinsic::hexagon_V6_vmpyiewuh_128B, 49685}, // __builtin_HEXAGON_V6_vmpyiewuh_128B
+      {Intrinsic::hexagon_V6_vmpyiewuh_acc, 49721}, // __builtin_HEXAGON_V6_vmpyiewuh_acc
+      {Intrinsic::hexagon_V6_vmpyiewuh_acc_128B, 49756}, // __builtin_HEXAGON_V6_vmpyiewuh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyih, 49796}, // __builtin_HEXAGON_V6_vmpyih
+      {Intrinsic::hexagon_V6_vmpyih_128B, 49824}, // __builtin_HEXAGON_V6_vmpyih_128B
+      {Intrinsic::hexagon_V6_vmpyih_acc, 49857}, // __builtin_HEXAGON_V6_vmpyih_acc
+      {Intrinsic::hexagon_V6_vmpyih_acc_128B, 49889}, // __builtin_HEXAGON_V6_vmpyih_acc_128B
+      {Intrinsic::hexagon_V6_vmpyihb, 49926}, // __builtin_HEXAGON_V6_vmpyihb
+      {Intrinsic::hexagon_V6_vmpyihb_128B, 49955}, // __builtin_HEXAGON_V6_vmpyihb_128B
+      {Intrinsic::hexagon_V6_vmpyihb_acc, 49989}, // __builtin_HEXAGON_V6_vmpyihb_acc
+      {Intrinsic::hexagon_V6_vmpyihb_acc_128B, 50022}, // __builtin_HEXAGON_V6_vmpyihb_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiowh, 50060}, // __builtin_HEXAGON_V6_vmpyiowh
+      {Intrinsic::hexagon_V6_vmpyiowh_128B, 50090}, // __builtin_HEXAGON_V6_vmpyiowh_128B
+      {Intrinsic::hexagon_V6_vmpyiwb, 50125}, // __builtin_HEXAGON_V6_vmpyiwb
+      {Intrinsic::hexagon_V6_vmpyiwb_128B, 50154}, // __builtin_HEXAGON_V6_vmpyiwb_128B
+      {Intrinsic::hexagon_V6_vmpyiwb_acc, 50188}, // __builtin_HEXAGON_V6_vmpyiwb_acc
+      {Intrinsic::hexagon_V6_vmpyiwb_acc_128B, 50221}, // __builtin_HEXAGON_V6_vmpyiwb_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiwh, 50259}, // __builtin_HEXAGON_V6_vmpyiwh
+      {Intrinsic::hexagon_V6_vmpyiwh_128B, 50288}, // __builtin_HEXAGON_V6_vmpyiwh_128B
+      {Intrinsic::hexagon_V6_vmpyiwh_acc, 50322}, // __builtin_HEXAGON_V6_vmpyiwh_acc
+      {Intrinsic::hexagon_V6_vmpyiwh_acc_128B, 50355}, // __builtin_HEXAGON_V6_vmpyiwh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiwub, 50393}, // __builtin_HEXAGON_V6_vmpyiwub
+      {Intrinsic::hexagon_V6_vmpyiwub_128B, 50423}, // __builtin_HEXAGON_V6_vmpyiwub_128B
+      {Intrinsic::hexagon_V6_vmpyiwub_acc, 50458}, // __builtin_HEXAGON_V6_vmpyiwub_acc
+      {Intrinsic::hexagon_V6_vmpyiwub_acc_128B, 50492}, // __builtin_HEXAGON_V6_vmpyiwub_acc_128B
+      {Intrinsic::hexagon_V6_vmpyowh, 50531}, // __builtin_HEXAGON_V6_vmpyowh
+      {Intrinsic::hexagon_V6_vmpyowh_128B, 50560}, // __builtin_HEXAGON_V6_vmpyowh_128B
+      {Intrinsic::hexagon_V6_vmpyowh_64_acc, 50594}, // __builtin_HEXAGON_V6_vmpyowh_64_acc
+      {Intrinsic::hexagon_V6_vmpyowh_64_acc_128B, 50630}, // __builtin_HEXAGON_V6_vmpyowh_64_acc_128B
+      {Intrinsic::hexagon_V6_vmpyowh_rnd, 50671}, // __builtin_HEXAGON_V6_vmpyowh_rnd
+      {Intrinsic::hexagon_V6_vmpyowh_rnd_128B, 50704}, // __builtin_HEXAGON_V6_vmpyowh_rnd_128B
+      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc, 50742}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc
+      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc_128B, 50780}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc_128B
+      {Intrinsic::hexagon_V6_vmpyowh_sacc, 50823}, // __builtin_HEXAGON_V6_vmpyowh_sacc
+      {Intrinsic::hexagon_V6_vmpyowh_sacc_128B, 50857}, // __builtin_HEXAGON_V6_vmpyowh_sacc_128B
+      {Intrinsic::hexagon_V6_vmpyub, 50896}, // __builtin_HEXAGON_V6_vmpyub
+      {Intrinsic::hexagon_V6_vmpyub_128B, 50924}, // __builtin_HEXAGON_V6_vmpyub_128B
+      {Intrinsic::hexagon_V6_vmpyub_acc, 50957}, // __builtin_HEXAGON_V6_vmpyub_acc
+      {Intrinsic::hexagon_V6_vmpyub_acc_128B, 50989}, // __builtin_HEXAGON_V6_vmpyub_acc_128B
+      {Intrinsic::hexagon_V6_vmpyubv, 51026}, // __builtin_HEXAGON_V6_vmpyubv
+      {Intrinsic::hexagon_V6_vmpyubv_128B, 51055}, // __builtin_HEXAGON_V6_vmpyubv_128B
+      {Intrinsic::hexagon_V6_vmpyubv_acc, 51089}, // __builtin_HEXAGON_V6_vmpyubv_acc
+      {Intrinsic::hexagon_V6_vmpyubv_acc_128B, 51122}, // __builtin_HEXAGON_V6_vmpyubv_acc_128B
+      {Intrinsic::hexagon_V6_vmpyuh, 51160}, // __builtin_HEXAGON_V6_vmpyuh
+      {Intrinsic::hexagon_V6_vmpyuh_128B, 51188}, // __builtin_HEXAGON_V6_vmpyuh_128B
+      {Intrinsic::hexagon_V6_vmpyuh_acc, 51221}, // __builtin_HEXAGON_V6_vmpyuh_acc
+      {Intrinsic::hexagon_V6_vmpyuh_acc_128B, 51253}, // __builtin_HEXAGON_V6_vmpyuh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyuhe, 51290}, // __builtin_HEXAGON_V6_vmpyuhe
+      {Intrinsic::hexagon_V6_vmpyuhe_128B, 51319}, // __builtin_HEXAGON_V6_vmpyuhe_128B
+      {Intrinsic::hexagon_V6_vmpyuhe_acc, 51353}, // __builtin_HEXAGON_V6_vmpyuhe_acc
+      {Intrinsic::hexagon_V6_vmpyuhe_acc_128B, 51386}, // __builtin_HEXAGON_V6_vmpyuhe_acc_128B
+      {Intrinsic::hexagon_V6_vmpyuhv, 51424}, // __builtin_HEXAGON_V6_vmpyuhv
+      {Intrinsic::hexagon_V6_vmpyuhv_128B, 51453}, // __builtin_HEXAGON_V6_vmpyuhv_128B
+      {Intrinsic::hexagon_V6_vmpyuhv_acc, 51487}, // __builtin_HEXAGON_V6_vmpyuhv_acc
+      {Intrinsic::hexagon_V6_vmpyuhv_acc_128B, 51520}, // __builtin_HEXAGON_V6_vmpyuhv_acc_128B
+      {Intrinsic::hexagon_V6_vmux, 51558}, // __builtin_HEXAGON_V6_vmux
+      {Intrinsic::hexagon_V6_vmux_128B, 51584}, // __builtin_HEXAGON_V6_vmux_128B
+      {Intrinsic::hexagon_V6_vnavgb, 51615}, // __builtin_HEXAGON_V6_vnavgb
+      {Intrinsic::hexagon_V6_vnavgb_128B, 51643}, // __builtin_HEXAGON_V6_vnavgb_128B
+      {Intrinsic::hexagon_V6_vnavgh, 51676}, // __builtin_HEXAGON_V6_vnavgh
+      {Intrinsic::hexagon_V6_vnavgh_128B, 51704}, // __builtin_HEXAGON_V6_vnavgh_128B
+      {Intrinsic::hexagon_V6_vnavgub, 51737}, // __builtin_HEXAGON_V6_vnavgub
+      {Intrinsic::hexagon_V6_vnavgub_128B, 51766}, // __builtin_HEXAGON_V6_vnavgub_128B
+      {Intrinsic::hexagon_V6_vnavgw, 51800}, // __builtin_HEXAGON_V6_vnavgw
+      {Intrinsic::hexagon_V6_vnavgw_128B, 51828}, // __builtin_HEXAGON_V6_vnavgw_128B
+      {Intrinsic::hexagon_V6_vnormamth, 51861}, // __builtin_HEXAGON_V6_vnormamth
+      {Intrinsic::hexagon_V6_vnormamth_128B, 51892}, // __builtin_HEXAGON_V6_vnormamth_128B
+      {Intrinsic::hexagon_V6_vnormamtw, 51928}, // __builtin_HEXAGON_V6_vnormamtw
+      {Intrinsic::hexagon_V6_vnormamtw_128B, 51959}, // __builtin_HEXAGON_V6_vnormamtw_128B
+      {Intrinsic::hexagon_V6_vnot, 51995}, // __builtin_HEXAGON_V6_vnot
+      {Intrinsic::hexagon_V6_vnot_128B, 52021}, // __builtin_HEXAGON_V6_vnot_128B
+      {Intrinsic::hexagon_V6_vor, 52052}, // __builtin_HEXAGON_V6_vor
+      {Intrinsic::hexagon_V6_vor_128B, 52077}, // __builtin_HEXAGON_V6_vor_128B
+      {Intrinsic::hexagon_V6_vpackeb, 52107}, // __builtin_HEXAGON_V6_vpackeb
+      {Intrinsic::hexagon_V6_vpackeb_128B, 52136}, // __builtin_HEXAGON_V6_vpackeb_128B
+      {Intrinsic::hexagon_V6_vpackeh, 52170}, // __builtin_HEXAGON_V6_vpackeh
+      {Intrinsic::hexagon_V6_vpackeh_128B, 52199}, // __builtin_HEXAGON_V6_vpackeh_128B
+      {Intrinsic::hexagon_V6_vpackhb_sat, 52233}, // __builtin_HEXAGON_V6_vpackhb_sat
+      {Intrinsic::hexagon_V6_vpackhb_sat_128B, 52266}, // __builtin_HEXAGON_V6_vpackhb_sat_128B
+      {Intrinsic::hexagon_V6_vpackhub_sat, 52304}, // __builtin_HEXAGON_V6_vpackhub_sat
+      {Intrinsic::hexagon_V6_vpackhub_sat_128B, 52338}, // __builtin_HEXAGON_V6_vpackhub_sat_128B
+      {Intrinsic::hexagon_V6_vpackob, 52377}, // __builtin_HEXAGON_V6_vpackob
+      {Intrinsic::hexagon_V6_vpackob_128B, 52406}, // __builtin_HEXAGON_V6_vpackob_128B
+      {Intrinsic::hexagon_V6_vpackoh, 52440}, // __builtin_HEXAGON_V6_vpackoh
+      {Intrinsic::hexagon_V6_vpackoh_128B, 52469}, // __builtin_HEXAGON_V6_vpackoh_128B
+      {Intrinsic::hexagon_V6_vpackwh_sat, 52503}, // __builtin_HEXAGON_V6_vpackwh_sat
+      {Intrinsic::hexagon_V6_vpackwh_sat_128B, 52536}, // __builtin_HEXAGON_V6_vpackwh_sat_128B
+      {Intrinsic::hexagon_V6_vpackwuh_sat, 52574}, // __builtin_HEXAGON_V6_vpackwuh_sat
+      {Intrinsic::hexagon_V6_vpackwuh_sat_128B, 52608}, // __builtin_HEXAGON_V6_vpackwuh_sat_128B
+      {Intrinsic::hexagon_V6_vpopcounth, 52647}, // __builtin_HEXAGON_V6_vpopcounth
+      {Intrinsic::hexagon_V6_vpopcounth_128B, 52679}, // __builtin_HEXAGON_V6_vpopcounth_128B
+      {Intrinsic::hexagon_V6_vprefixqb, 52716}, // __builtin_HEXAGON_V6_vprefixqb
+      {Intrinsic::hexagon_V6_vprefixqb_128B, 52747}, // __builtin_HEXAGON_V6_vprefixqb_128B
+      {Intrinsic::hexagon_V6_vprefixqh, 52783}, // __builtin_HEXAGON_V6_vprefixqh
+      {Intrinsic::hexagon_V6_vprefixqh_128B, 52814}, // __builtin_HEXAGON_V6_vprefixqh_128B
+      {Intrinsic::hexagon_V6_vprefixqw, 52850}, // __builtin_HEXAGON_V6_vprefixqw
+      {Intrinsic::hexagon_V6_vprefixqw_128B, 52881}, // __builtin_HEXAGON_V6_vprefixqw_128B
+      {Intrinsic::hexagon_V6_vrdelta, 52917}, // __builtin_HEXAGON_V6_vrdelta
+      {Intrinsic::hexagon_V6_vrdelta_128B, 52946}, // __builtin_HEXAGON_V6_vrdelta_128B
+      {Intrinsic::hexagon_V6_vrmpybub_rtt, 52980}, // __builtin_HEXAGON_V6_vrmpybub_rtt
+      {Intrinsic::hexagon_V6_vrmpybub_rtt_128B, 53014}, // __builtin_HEXAGON_V6_vrmpybub_rtt_128B
+      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc, 53053}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc
+      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc_128B, 53091}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybus, 53134}, // __builtin_HEXAGON_V6_vrmpybus
+      {Intrinsic::hexagon_V6_vrmpybus_128B, 53164}, // __builtin_HEXAGON_V6_vrmpybus_128B
+      {Intrinsic::hexagon_V6_vrmpybus_acc, 53199}, // __builtin_HEXAGON_V6_vrmpybus_acc
+      {Intrinsic::hexagon_V6_vrmpybus_acc_128B, 53233}, // __builtin_HEXAGON_V6_vrmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybusi, 53272}, // __builtin_HEXAGON_V6_vrmpybusi
+      {Intrinsic::hexagon_V6_vrmpybusi_128B, 53303}, // __builtin_HEXAGON_V6_vrmpybusi_128B
+      {Intrinsic::hexagon_V6_vrmpybusi_acc, 53339}, // __builtin_HEXAGON_V6_vrmpybusi_acc
+      {Intrinsic::hexagon_V6_vrmpybusi_acc_128B, 53374}, // __builtin_HEXAGON_V6_vrmpybusi_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybusv, 53414}, // __builtin_HEXAGON_V6_vrmpybusv
+      {Intrinsic::hexagon_V6_vrmpybusv_128B, 53445}, // __builtin_HEXAGON_V6_vrmpybusv_128B
+      {Intrinsic::hexagon_V6_vrmpybusv_acc, 53481}, // __builtin_HEXAGON_V6_vrmpybusv_acc
+      {Intrinsic::hexagon_V6_vrmpybusv_acc_128B, 53516}, // __builtin_HEXAGON_V6_vrmpybusv_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybv, 53556}, // __builtin_HEXAGON_V6_vrmpybv
+      {Intrinsic::hexagon_V6_vrmpybv_128B, 53585}, // __builtin_HEXAGON_V6_vrmpybv_128B
+      {Intrinsic::hexagon_V6_vrmpybv_acc, 53619}, // __builtin_HEXAGON_V6_vrmpybv_acc
+      {Intrinsic::hexagon_V6_vrmpybv_acc_128B, 53652}, // __builtin_HEXAGON_V6_vrmpybv_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyub, 53690}, // __builtin_HEXAGON_V6_vrmpyub
+      {Intrinsic::hexagon_V6_vrmpyub_128B, 53719}, // __builtin_HEXAGON_V6_vrmpyub_128B
+      {Intrinsic::hexagon_V6_vrmpyub_acc, 53753}, // __builtin_HEXAGON_V6_vrmpyub_acc
+      {Intrinsic::hexagon_V6_vrmpyub_acc_128B, 53786}, // __builtin_HEXAGON_V6_vrmpyub_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyub_rtt, 53824}, // __builtin_HEXAGON_V6_vrmpyub_rtt
+      {Intrinsic::hexagon_V6_vrmpyub_rtt_128B, 53857}, // __builtin_HEXAGON_V6_vrmpyub_rtt_128B
+      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc, 53895}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc
+      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc_128B, 53932}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyubi, 53974}, // __builtin_HEXAGON_V6_vrmpyubi
+      {Intrinsic::hexagon_V6_vrmpyubi_128B, 54004}, // __builtin_HEXAGON_V6_vrmpyubi_128B
+      {Intrinsic::hexagon_V6_vrmpyubi_acc, 54039}, // __builtin_HEXAGON_V6_vrmpyubi_acc
+      {Intrinsic::hexagon_V6_vrmpyubi_acc_128B, 54073}, // __builtin_HEXAGON_V6_vrmpyubi_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyubv, 54112}, // __builtin_HEXAGON_V6_vrmpyubv
+      {Intrinsic::hexagon_V6_vrmpyubv_128B, 54142}, // __builtin_HEXAGON_V6_vrmpyubv_128B
+      {Intrinsic::hexagon_V6_vrmpyubv_acc, 54177}, // __builtin_HEXAGON_V6_vrmpyubv_acc
+      {Intrinsic::hexagon_V6_vrmpyubv_acc_128B, 54211}, // __builtin_HEXAGON_V6_vrmpyubv_acc_128B
+      {Intrinsic::hexagon_V6_vror, 54250}, // __builtin_HEXAGON_V6_vror
+      {Intrinsic::hexagon_V6_vror_128B, 54276}, // __builtin_HEXAGON_V6_vror_128B
+      {Intrinsic::hexagon_V6_vrotr, 54307}, // __builtin_HEXAGON_V6_vrotr
+      {Intrinsic::hexagon_V6_vrotr_128B, 54334}, // __builtin_HEXAGON_V6_vrotr_128B
+      {Intrinsic::hexagon_V6_vroundhb, 54366}, // __builtin_HEXAGON_V6_vroundhb
+      {Intrinsic::hexagon_V6_vroundhb_128B, 54396}, // __builtin_HEXAGON_V6_vroundhb_128B
+      {Intrinsic::hexagon_V6_vroundhub, 54431}, // __builtin_HEXAGON_V6_vroundhub
+      {Intrinsic::hexagon_V6_vroundhub_128B, 54462}, // __builtin_HEXAGON_V6_vroundhub_128B
+      {Intrinsic::hexagon_V6_vrounduhub, 54498}, // __builtin_HEXAGON_V6_vrounduhub
+      {Intrinsic::hexagon_V6_vrounduhub_128B, 54530}, // __builtin_HEXAGON_V6_vrounduhub_128B
+      {Intrinsic::hexagon_V6_vrounduwuh, 54567}, // __builtin_HEXAGON_V6_vrounduwuh
+      {Intrinsic::hexagon_V6_vrounduwuh_128B, 54599}, // __builtin_HEXAGON_V6_vrounduwuh_128B
+      {Intrinsic::hexagon_V6_vroundwh, 54636}, // __builtin_HEXAGON_V6_vroundwh
+      {Intrinsic::hexagon_V6_vroundwh_128B, 54666}, // __builtin_HEXAGON_V6_vroundwh_128B
+      {Intrinsic::hexagon_V6_vroundwuh, 54701}, // __builtin_HEXAGON_V6_vroundwuh
+      {Intrinsic::hexagon_V6_vroundwuh_128B, 54732}, // __builtin_HEXAGON_V6_vroundwuh_128B
+      {Intrinsic::hexagon_V6_vrsadubi, 54768}, // __builtin_HEXAGON_V6_vrsadubi
+      {Intrinsic::hexagon_V6_vrsadubi_128B, 54798}, // __builtin_HEXAGON_V6_vrsadubi_128B
+      {Intrinsic::hexagon_V6_vrsadubi_acc, 54833}, // __builtin_HEXAGON_V6_vrsadubi_acc
+      {Intrinsic::hexagon_V6_vrsadubi_acc_128B, 54867}, // __builtin_HEXAGON_V6_vrsadubi_acc_128B
+      {Intrinsic::hexagon_V6_vsatdw, 54906}, // __builtin_HEXAGON_V6_vsatdw
+      {Intrinsic::hexagon_V6_vsatdw_128B, 54934}, // __builtin_HEXAGON_V6_vsatdw_128B
+      {Intrinsic::hexagon_V6_vsathub, 54967}, // __builtin_HEXAGON_V6_vsathub
+      {Intrinsic::hexagon_V6_vsathub_128B, 54996}, // __builtin_HEXAGON_V6_vsathub_128B
+      {Intrinsic::hexagon_V6_vsatuwuh, 55030}, // __builtin_HEXAGON_V6_vsatuwuh
+      {Intrinsic::hexagon_V6_vsatuwuh_128B, 55060}, // __builtin_HEXAGON_V6_vsatuwuh_128B
+      {Intrinsic::hexagon_V6_vsatwh, 55095}, // __builtin_HEXAGON_V6_vsatwh
+      {Intrinsic::hexagon_V6_vsatwh_128B, 55123}, // __builtin_HEXAGON_V6_vsatwh_128B
+      {Intrinsic::hexagon_V6_vsb, 55156}, // __builtin_HEXAGON_V6_vsb
+      {Intrinsic::hexagon_V6_vsb_128B, 55181}, // __builtin_HEXAGON_V6_vsb_128B
+      {Intrinsic::hexagon_V6_vscattermh, 55211}, // __builtin_HEXAGON_V6_vscattermh
+      {Intrinsic::hexagon_V6_vscattermh_128B, 55243}, // __builtin_HEXAGON_V6_vscattermh_128B
+      {Intrinsic::hexagon_V6_vscattermh_add, 55280}, // __builtin_HEXAGON_V6_vscattermh_add
+      {Intrinsic::hexagon_V6_vscattermh_add_128B, 55316}, // __builtin_HEXAGON_V6_vscattermh_add_128B
+      {Intrinsic::hexagon_V6_vscattermhq, 55357}, // __builtin_HEXAGON_V6_vscattermhq
+      {Intrinsic::hexagon_V6_vscattermhq_128B, 55390}, // __builtin_HEXAGON_V6_vscattermhq_128B
+      {Intrinsic::hexagon_V6_vscattermhw, 55428}, // __builtin_HEXAGON_V6_vscattermhw
+      {Intrinsic::hexagon_V6_vscattermhw_128B, 55461}, // __builtin_HEXAGON_V6_vscattermhw_128B
+      {Intrinsic::hexagon_V6_vscattermhw_add, 55499}, // __builtin_HEXAGON_V6_vscattermhw_add
+      {Intrinsic::hexagon_V6_vscattermhw_add_128B, 55536}, // __builtin_HEXAGON_V6_vscattermhw_add_128B
+      {Intrinsic::hexagon_V6_vscattermhwq, 55578}, // __builtin_HEXAGON_V6_vscattermhwq
+      {Intrinsic::hexagon_V6_vscattermhwq_128B, 55612}, // __builtin_HEXAGON_V6_vscattermhwq_128B
+      {Intrinsic::hexagon_V6_vscattermw, 55651}, // __builtin_HEXAGON_V6_vscattermw
+      {Intrinsic::hexagon_V6_vscattermw_128B, 55683}, // __builtin_HEXAGON_V6_vscattermw_128B
+      {Intrinsic::hexagon_V6_vscattermw_add, 55720}, // __builtin_HEXAGON_V6_vscattermw_add
+      {Intrinsic::hexagon_V6_vscattermw_add_128B, 55756}, // __builtin_HEXAGON_V6_vscattermw_add_128B
+      {Intrinsic::hexagon_V6_vscattermwq, 55797}, // __builtin_HEXAGON_V6_vscattermwq
+      {Intrinsic::hexagon_V6_vscattermwq_128B, 55830}, // __builtin_HEXAGON_V6_vscattermwq_128B
+      {Intrinsic::hexagon_V6_vsh, 55868}, // __builtin_HEXAGON_V6_vsh
+      {Intrinsic::hexagon_V6_vsh_128B, 55893}, // __builtin_HEXAGON_V6_vsh_128B
+      {Intrinsic::hexagon_V6_vshufeh, 55923}, // __builtin_HEXAGON_V6_vshufeh
+      {Intrinsic::hexagon_V6_vshufeh_128B, 55952}, // __builtin_HEXAGON_V6_vshufeh_128B
+      {Intrinsic::hexagon_V6_vshuffb, 55986}, // __builtin_HEXAGON_V6_vshuffb
+      {Intrinsic::hexagon_V6_vshuffb_128B, 56015}, // __builtin_HEXAGON_V6_vshuffb_128B
+      {Intrinsic::hexagon_V6_vshuffeb, 56049}, // __builtin_HEXAGON_V6_vshuffeb
+      {Intrinsic::hexagon_V6_vshuffeb_128B, 56079}, // __builtin_HEXAGON_V6_vshuffeb_128B
+      {Intrinsic::hexagon_V6_vshuffh, 56114}, // __builtin_HEXAGON_V6_vshuffh
+      {Intrinsic::hexagon_V6_vshuffh_128B, 56143}, // __builtin_HEXAGON_V6_vshuffh_128B
+      {Intrinsic::hexagon_V6_vshuffob, 56177}, // __builtin_HEXAGON_V6_vshuffob
+      {Intrinsic::hexagon_V6_vshuffob_128B, 56207}, // __builtin_HEXAGON_V6_vshuffob_128B
+      {Intrinsic::hexagon_V6_vshuffvdd, 56242}, // __builtin_HEXAGON_V6_vshuffvdd
+      {Intrinsic::hexagon_V6_vshuffvdd_128B, 56273}, // __builtin_HEXAGON_V6_vshuffvdd_128B
+      {Intrinsic::hexagon_V6_vshufoeb, 56309}, // __builtin_HEXAGON_V6_vshufoeb
+      {Intrinsic::hexagon_V6_vshufoeb_128B, 56339}, // __builtin_HEXAGON_V6_vshufoeb_128B
+      {Intrinsic::hexagon_V6_vshufoeh, 56374}, // __builtin_HEXAGON_V6_vshufoeh
+      {Intrinsic::hexagon_V6_vshufoeh_128B, 56404}, // __builtin_HEXAGON_V6_vshufoeh_128B
+      {Intrinsic::hexagon_V6_vshufoh, 56439}, // __builtin_HEXAGON_V6_vshufoh
+      {Intrinsic::hexagon_V6_vshufoh_128B, 56468}, // __builtin_HEXAGON_V6_vshufoh_128B
+      {Intrinsic::hexagon_V6_vsubb, 56502}, // __builtin_HEXAGON_V6_vsubb
+      {Intrinsic::hexagon_V6_vsubb_128B, 56529}, // __builtin_HEXAGON_V6_vsubb_128B
+      {Intrinsic::hexagon_V6_vsubb_dv, 56561}, // __builtin_HEXAGON_V6_vsubb_dv
+      {Intrinsic::hexagon_V6_vsubb_dv_128B, 56591}, // __builtin_HEXAGON_V6_vsubb_dv_128B
+      {Intrinsic::hexagon_V6_vsubbnq, 56626}, // __builtin_HEXAGON_V6_vsubbnq
+      {Intrinsic::hexagon_V6_vsubbnq_128B, 56655}, // __builtin_HEXAGON_V6_vsubbnq_128B
+      {Intrinsic::hexagon_V6_vsubbq, 56689}, // __builtin_HEXAGON_V6_vsubbq
+      {Intrinsic::hexagon_V6_vsubbq_128B, 56717}, // __builtin_HEXAGON_V6_vsubbq_128B
+      {Intrinsic::hexagon_V6_vsubbsat, 56750}, // __builtin_HEXAGON_V6_vsubbsat
+      {Intrinsic::hexagon_V6_vsubbsat_128B, 56780}, // __builtin_HEXAGON_V6_vsubbsat_128B
+      {Intrinsic::hexagon_V6_vsubbsat_dv, 56815}, // __builtin_HEXAGON_V6_vsubbsat_dv
+      {Intrinsic::hexagon_V6_vsubbsat_dv_128B, 56848}, // __builtin_HEXAGON_V6_vsubbsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubh, 56886}, // __builtin_HEXAGON_V6_vsubh
+      {Intrinsic::hexagon_V6_vsubh_128B, 56913}, // __builtin_HEXAGON_V6_vsubh_128B
+      {Intrinsic::hexagon_V6_vsubh_dv, 56945}, // __builtin_HEXAGON_V6_vsubh_dv
+      {Intrinsic::hexagon_V6_vsubh_dv_128B, 56975}, // __builtin_HEXAGON_V6_vsubh_dv_128B
+      {Intrinsic::hexagon_V6_vsubhnq, 57010}, // __builtin_HEXAGON_V6_vsubhnq
+      {Intrinsic::hexagon_V6_vsubhnq_128B, 57039}, // __builtin_HEXAGON_V6_vsubhnq_128B
+      {Intrinsic::hexagon_V6_vsubhq, 57073}, // __builtin_HEXAGON_V6_vsubhq
+      {Intrinsic::hexagon_V6_vsubhq_128B, 57101}, // __builtin_HEXAGON_V6_vsubhq_128B
+      {Intrinsic::hexagon_V6_vsubhsat, 57134}, // __builtin_HEXAGON_V6_vsubhsat
+      {Intrinsic::hexagon_V6_vsubhsat_128B, 57164}, // __builtin_HEXAGON_V6_vsubhsat_128B
+      {Intrinsic::hexagon_V6_vsubhsat_dv, 57199}, // __builtin_HEXAGON_V6_vsubhsat_dv
+      {Intrinsic::hexagon_V6_vsubhsat_dv_128B, 57232}, // __builtin_HEXAGON_V6_vsubhsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubhw, 57270}, // __builtin_HEXAGON_V6_vsubhw
+      {Intrinsic::hexagon_V6_vsubhw_128B, 57298}, // __builtin_HEXAGON_V6_vsubhw_128B
+      {Intrinsic::hexagon_V6_vsububh, 57331}, // __builtin_HEXAGON_V6_vsububh
+      {Intrinsic::hexagon_V6_vsububh_128B, 57360}, // __builtin_HEXAGON_V6_vsububh_128B
+      {Intrinsic::hexagon_V6_vsububsat, 57394}, // __builtin_HEXAGON_V6_vsububsat
+      {Intrinsic::hexagon_V6_vsububsat_128B, 57425}, // __builtin_HEXAGON_V6_vsububsat_128B
+      {Intrinsic::hexagon_V6_vsububsat_dv, 57461}, // __builtin_HEXAGON_V6_vsububsat_dv
+      {Intrinsic::hexagon_V6_vsububsat_dv_128B, 57495}, // __builtin_HEXAGON_V6_vsububsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubububb_sat, 57534}, // __builtin_HEXAGON_V6_vsubububb_sat
+      {Intrinsic::hexagon_V6_vsubububb_sat_128B, 57569}, // __builtin_HEXAGON_V6_vsubububb_sat_128B
+      {Intrinsic::hexagon_V6_vsubuhsat, 57609}, // __builtin_HEXAGON_V6_vsubuhsat
+      {Intrinsic::hexagon_V6_vsubuhsat_128B, 57640}, // __builtin_HEXAGON_V6_vsubuhsat_128B
+      {Intrinsic::hexagon_V6_vsubuhsat_dv, 57676}, // __builtin_HEXAGON_V6_vsubuhsat_dv
+      {Intrinsic::hexagon_V6_vsubuhsat_dv_128B, 57710}, // __builtin_HEXAGON_V6_vsubuhsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubuhw, 57749}, // __builtin_HEXAGON_V6_vsubuhw
+      {Intrinsic::hexagon_V6_vsubuhw_128B, 57778}, // __builtin_HEXAGON_V6_vsubuhw_128B
+      {Intrinsic::hexagon_V6_vsubuwsat, 57812}, // __builtin_HEXAGON_V6_vsubuwsat
+      {Intrinsic::hexagon_V6_vsubuwsat_128B, 57843}, // __builtin_HEXAGON_V6_vsubuwsat_128B
+      {Intrinsic::hexagon_V6_vsubuwsat_dv, 57879}, // __builtin_HEXAGON_V6_vsubuwsat_dv
+      {Intrinsic::hexagon_V6_vsubuwsat_dv_128B, 57913}, // __builtin_HEXAGON_V6_vsubuwsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubw, 57952}, // __builtin_HEXAGON_V6_vsubw
+      {Intrinsic::hexagon_V6_vsubw_128B, 57979}, // __builtin_HEXAGON_V6_vsubw_128B
+      {Intrinsic::hexagon_V6_vsubw_dv, 58011}, // __builtin_HEXAGON_V6_vsubw_dv
+      {Intrinsic::hexagon_V6_vsubw_dv_128B, 58041}, // __builtin_HEXAGON_V6_vsubw_dv_128B
+      {Intrinsic::hexagon_V6_vsubwnq, 58076}, // __builtin_HEXAGON_V6_vsubwnq
+      {Intrinsic::hexagon_V6_vsubwnq_128B, 58105}, // __builtin_HEXAGON_V6_vsubwnq_128B
+      {Intrinsic::hexagon_V6_vsubwq, 58139}, // __builtin_HEXAGON_V6_vsubwq
+      {Intrinsic::hexagon_V6_vsubwq_128B, 58167}, // __builtin_HEXAGON_V6_vsubwq_128B
+      {Intrinsic::hexagon_V6_vsubwsat, 58200}, // __builtin_HEXAGON_V6_vsubwsat
+      {Intrinsic::hexagon_V6_vsubwsat_128B, 58230}, // __builtin_HEXAGON_V6_vsubwsat_128B
+      {Intrinsic::hexagon_V6_vsubwsat_dv, 58265}, // __builtin_HEXAGON_V6_vsubwsat_dv
+      {Intrinsic::hexagon_V6_vsubwsat_dv_128B, 58298}, // __builtin_HEXAGON_V6_vsubwsat_dv_128B
+      {Intrinsic::hexagon_V6_vswap, 58336}, // __builtin_HEXAGON_V6_vswap
+      {Intrinsic::hexagon_V6_vswap_128B, 58363}, // __builtin_HEXAGON_V6_vswap_128B
+      {Intrinsic::hexagon_V6_vtmpyb, 58395}, // __builtin_HEXAGON_V6_vtmpyb
+      {Intrinsic::hexagon_V6_vtmpyb_128B, 58423}, // __builtin_HEXAGON_V6_vtmpyb_128B
+      {Intrinsic::hexagon_V6_vtmpyb_acc, 58456}, // __builtin_HEXAGON_V6_vtmpyb_acc
+      {Intrinsic::hexagon_V6_vtmpyb_acc_128B, 58488}, // __builtin_HEXAGON_V6_vtmpyb_acc_128B
+      {Intrinsic::hexagon_V6_vtmpybus, 58525}, // __builtin_HEXAGON_V6_vtmpybus
+      {Intrinsic::hexagon_V6_vtmpybus_128B, 58555}, // __builtin_HEXAGON_V6_vtmpybus_128B
+      {Intrinsic::hexagon_V6_vtmpybus_acc, 58590}, // __builtin_HEXAGON_V6_vtmpybus_acc
+      {Intrinsic::hexagon_V6_vtmpybus_acc_128B, 58624}, // __builtin_HEXAGON_V6_vtmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vtmpyhb, 58663}, // __builtin_HEXAGON_V6_vtmpyhb
+      {Intrinsic::hexagon_V6_vtmpyhb_128B, 58692}, // __builtin_HEXAGON_V6_vtmpyhb_128B
+      {Intrinsic::hexagon_V6_vtmpyhb_acc, 58726}, // __builtin_HEXAGON_V6_vtmpyhb_acc
+      {Intrinsic::hexagon_V6_vtmpyhb_acc_128B, 58759}, // __builtin_HEXAGON_V6_vtmpyhb_acc_128B
+      {Intrinsic::hexagon_V6_vtran2x2_map, 58797}, // __builtin_HEXAGON_V6_vtran2x2_map
+      {Intrinsic::hexagon_V6_vtran2x2_map_128B, 58831}, // __builtin_HEXAGON_V6_vtran2x2_map_128B
+      {Intrinsic::hexagon_V6_vunpackb, 58870}, // __builtin_HEXAGON_V6_vunpackb
+      {Intrinsic::hexagon_V6_vunpackb_128B, 58900}, // __builtin_HEXAGON_V6_vunpackb_128B
+      {Intrinsic::hexagon_V6_vunpackh, 58935}, // __builtin_HEXAGON_V6_vunpackh
+      {Intrinsic::hexagon_V6_vunpackh_128B, 58965}, // __builtin_HEXAGON_V6_vunpackh_128B
+      {Intrinsic::hexagon_V6_vunpackob, 59000}, // __builtin_HEXAGON_V6_vunpackob
+      {Intrinsic::hexagon_V6_vunpackob_128B, 59031}, // __builtin_HEXAGON_V6_vunpackob_128B
+      {Intrinsic::hexagon_V6_vunpackoh, 59067}, // __builtin_HEXAGON_V6_vunpackoh
+      {Intrinsic::hexagon_V6_vunpackoh_128B, 59098}, // __builtin_HEXAGON_V6_vunpackoh_128B
+      {Intrinsic::hexagon_V6_vunpackub, 59134}, // __builtin_HEXAGON_V6_vunpackub
+      {Intrinsic::hexagon_V6_vunpackub_128B, 59165}, // __builtin_HEXAGON_V6_vunpackub_128B
+      {Intrinsic::hexagon_V6_vunpackuh, 59201}, // __builtin_HEXAGON_V6_vunpackuh
+      {Intrinsic::hexagon_V6_vunpackuh_128B, 59232}, // __builtin_HEXAGON_V6_vunpackuh_128B
+      {Intrinsic::hexagon_V6_vxor, 59268}, // __builtin_HEXAGON_V6_vxor
+      {Intrinsic::hexagon_V6_vxor_128B, 59294}, // __builtin_HEXAGON_V6_vxor_128B
+      {Intrinsic::hexagon_V6_vzb, 59325}, // __builtin_HEXAGON_V6_vzb
+      {Intrinsic::hexagon_V6_vzb_128B, 59350}, // __builtin_HEXAGON_V6_vzb_128B
+      {Intrinsic::hexagon_V6_vzh, 59380}, // __builtin_HEXAGON_V6_vzh
+      {Intrinsic::hexagon_V6_vzh_128B, 59405}, // __builtin_HEXAGON_V6_vzh_128B
+      {Intrinsic::hexagon_Y2_dccleana, 59435}, // __builtin_HEXAGON_Y2_dccleana
+      {Intrinsic::hexagon_Y2_dccleaninva, 59465}, // __builtin_HEXAGON_Y2_dccleaninva
+      {Intrinsic::hexagon_Y2_dcinva, 59498}, // __builtin_HEXAGON_Y2_dcinva
+      {Intrinsic::hexagon_Y2_dczeroa, 59526}, // __builtin_HEXAGON_Y2_dczeroa
+      {Intrinsic::hexagon_Y4_l2fetch, 59555}, // __builtin_HEXAGON_Y4_l2fetch
+      {Intrinsic::hexagon_Y5_l2fetch, 59584}, // __builtin_HEXAGON_Y5_l2fetch
+      {Intrinsic::hexagon_prefetch, 59826}, // __builtin_HEXAGON_prefetch
+      {Intrinsic::hexagon_S2_storerb_pbr, 29039}, // __builtin_brev_stb
+      {Intrinsic::hexagon_S2_storerd_pbr, 29058}, // __builtin_brev_std
+      {Intrinsic::hexagon_S2_storerh_pbr, 29098}, // __builtin_brev_sth
+      {Intrinsic::hexagon_S2_storerf_pbr, 29077}, // __builtin_brev_sthhi
+      {Intrinsic::hexagon_S2_storeri_pbr, 29117}, // __builtin_brev_stw
+      {Intrinsic::hexagon_circ_ldb, 59613}, // __builtin_circ_ldb
+      {Intrinsic::hexagon_circ_ldd, 59632}, // __builtin_circ_ldd
+      {Intrinsic::hexagon_circ_ldh, 59651}, // __builtin_circ_ldh
+      {Intrinsic::hexagon_circ_ldub, 59670}, // __builtin_circ_ldub
+      {Intrinsic::hexagon_circ_lduh, 59690}, // __builtin_circ_lduh
+      {Intrinsic::hexagon_circ_ldw, 59710}, // __builtin_circ_ldw
+      {Intrinsic::hexagon_circ_stb, 59729}, // __builtin_circ_stb
+      {Intrinsic::hexagon_circ_std, 59748}, // __builtin_circ_std
+      {Intrinsic::hexagon_circ_sth, 59767}, // __builtin_circ_sth
+      {Intrinsic::hexagon_circ_sthhi, 59786}, // __builtin_circ_sthhi
+      {Intrinsic::hexagon_circ_stw, 59807}, // __builtin_circ_stw
+      {Intrinsic::hexagon_vmemcpy, 59853}, // __builtin_hexagon_vmemcpy
+      {Intrinsic::hexagon_vmemset, 59879}, // __builtin_hexagon_vmemset
     };
     auto I = std::lower_bound(std::begin(hexagonNames),
                               std::end(hexagonNames),
@@ -26699,673 +28429,673 @@
   }
   if (TargetPrefix == "mips") {
     static const BuiltinEntry mipsNames[] = {
-      {Intrinsic::mips_absq_s_ph, 59543}, // __builtin_mips_absq_s_ph
-      {Intrinsic::mips_absq_s_qb, 59568}, // __builtin_mips_absq_s_qb
-      {Intrinsic::mips_absq_s_w, 59593}, // __builtin_mips_absq_s_w
-      {Intrinsic::mips_addq_ph, 59705}, // __builtin_mips_addq_ph
-      {Intrinsic::mips_addq_s_ph, 59728}, // __builtin_mips_addq_s_ph
-      {Intrinsic::mips_addq_s_w, 59753}, // __builtin_mips_addq_s_w
-      {Intrinsic::mips_addqh_ph, 59777}, // __builtin_mips_addqh_ph
-      {Intrinsic::mips_addqh_r_ph, 59801}, // __builtin_mips_addqh_r_ph
-      {Intrinsic::mips_addqh_r_w, 59827}, // __builtin_mips_addqh_r_w
-      {Intrinsic::mips_addqh_w, 59852}, // __builtin_mips_addqh_w
-      {Intrinsic::mips_addsc, 60151}, // __builtin_mips_addsc
-      {Intrinsic::mips_addu_ph, 60172}, // __builtin_mips_addu_ph
-      {Intrinsic::mips_addu_qb, 60195}, // __builtin_mips_addu_qb
-      {Intrinsic::mips_addu_s_ph, 60218}, // __builtin_mips_addu_s_ph
-      {Intrinsic::mips_addu_s_qb, 60243}, // __builtin_mips_addu_s_qb
-      {Intrinsic::mips_adduh_qb, 60268}, // __builtin_mips_adduh_qb
-      {Intrinsic::mips_adduh_r_qb, 60292}, // __builtin_mips_adduh_r_qb
-      {Intrinsic::mips_addwc, 60490}, // __builtin_mips_addwc
-      {Intrinsic::mips_append, 60552}, // __builtin_mips_append
-      {Intrinsic::mips_balign, 61118}, // __builtin_mips_balign
-      {Intrinsic::mips_bitrev, 61672}, // __builtin_mips_bitrev
-      {Intrinsic::mips_bposge32, 62050}, // __builtin_mips_bposge32
-      {Intrinsic::mips_cmp_eq_ph, 63289}, // __builtin_mips_cmp_eq_ph
-      {Intrinsic::mips_cmp_le_ph, 63314}, // __builtin_mips_cmp_le_ph
-      {Intrinsic::mips_cmp_lt_ph, 63339}, // __builtin_mips_cmp_lt_ph
-      {Intrinsic::mips_cmpgdu_eq_qb, 63364}, // __builtin_mips_cmpgdu_eq_qb
-      {Intrinsic::mips_cmpgdu_le_qb, 63392}, // __builtin_mips_cmpgdu_le_qb
-      {Intrinsic::mips_cmpgdu_lt_qb, 63420}, // __builtin_mips_cmpgdu_lt_qb
-      {Intrinsic::mips_cmpgu_eq_qb, 63448}, // __builtin_mips_cmpgu_eq_qb
-      {Intrinsic::mips_cmpgu_le_qb, 63475}, // __builtin_mips_cmpgu_le_qb
-      {Intrinsic::mips_cmpgu_lt_qb, 63502}, // __builtin_mips_cmpgu_lt_qb
-      {Intrinsic::mips_cmpu_eq_qb, 63529}, // __builtin_mips_cmpu_eq_qb
-      {Intrinsic::mips_cmpu_le_qb, 63555}, // __builtin_mips_cmpu_le_qb
-      {Intrinsic::mips_cmpu_lt_qb, 63581}, // __builtin_mips_cmpu_lt_qb
-      {Intrinsic::mips_dlsa, 63988}, // __builtin_mips_dlsa
-      {Intrinsic::mips_dpa_w_ph, 64146}, // __builtin_mips_dpa_w_ph
-      {Intrinsic::mips_dpaq_s_w_ph, 64314}, // __builtin_mips_dpaq_s_w_ph
-      {Intrinsic::mips_dpaq_sa_l_w, 64341}, // __builtin_mips_dpaq_sa_l_w
-      {Intrinsic::mips_dpaqx_s_w_ph, 64368}, // __builtin_mips_dpaqx_s_w_ph
-      {Intrinsic::mips_dpaqx_sa_w_ph, 64396}, // __builtin_mips_dpaqx_sa_w_ph
-      {Intrinsic::mips_dpau_h_qbl, 64425}, // __builtin_mips_dpau_h_qbl
-      {Intrinsic::mips_dpau_h_qbr, 64451}, // __builtin_mips_dpau_h_qbr
-      {Intrinsic::mips_dpax_w_ph, 64477}, // __builtin_mips_dpax_w_ph
-      {Intrinsic::mips_dps_w_ph, 64502}, // __builtin_mips_dps_w_ph
-      {Intrinsic::mips_dpsq_s_w_ph, 64526}, // __builtin_mips_dpsq_s_w_ph
-      {Intrinsic::mips_dpsq_sa_l_w, 64553}, // __builtin_mips_dpsq_sa_l_w
-      {Intrinsic::mips_dpsqx_s_w_ph, 64580}, // __builtin_mips_dpsqx_s_w_ph
-      {Intrinsic::mips_dpsqx_sa_w_ph, 64608}, // __builtin_mips_dpsqx_sa_w_ph
-      {Intrinsic::mips_dpsu_h_qbl, 64637}, // __builtin_mips_dpsu_h_qbl
-      {Intrinsic::mips_dpsu_h_qbr, 64663}, // __builtin_mips_dpsu_h_qbr
-      {Intrinsic::mips_dpsx_w_ph, 64833}, // __builtin_mips_dpsx_w_ph
-      {Intrinsic::mips_extp, 64858}, // __builtin_mips_extp
-      {Intrinsic::mips_extpdp, 64878}, // __builtin_mips_extpdp
-      {Intrinsic::mips_extr_r_w, 64900}, // __builtin_mips_extr_r_w
-      {Intrinsic::mips_extr_rs_w, 64924}, // __builtin_mips_extr_rs_w
-      {Intrinsic::mips_extr_s_h, 64949}, // __builtin_mips_extr_s_h
-      {Intrinsic::mips_extr_w, 64973}, // __builtin_mips_extr_w
-      {Intrinsic::mips_insv, 68025}, // __builtin_mips_insv
-      {Intrinsic::mips_lbux, 68133}, // __builtin_mips_lbux
-      {Intrinsic::mips_lhx, 68309}, // __builtin_mips_lhx
-      {Intrinsic::mips_lsa, 68328}, // __builtin_mips_lsa
-      {Intrinsic::mips_lwx, 68347}, // __builtin_mips_lwx
-      {Intrinsic::mips_madd, 68366}, // __builtin_mips_madd
-      {Intrinsic::mips_maddu, 68480}, // __builtin_mips_maddu
-      {Intrinsic::mips_maq_s_w_phl, 68589}, // __builtin_mips_maq_s_w_phl
-      {Intrinsic::mips_maq_s_w_phr, 68616}, // __builtin_mips_maq_s_w_phr
-      {Intrinsic::mips_maq_sa_w_phl, 68643}, // __builtin_mips_maq_sa_w_phl
-      {Intrinsic::mips_maq_sa_w_phr, 68671}, // __builtin_mips_maq_sa_w_phr
-      {Intrinsic::mips_modsub, 69771}, // __builtin_mips_modsub
-      {Intrinsic::mips_msub, 69814}, // __builtin_mips_msub
-      {Intrinsic::mips_msubu, 69928}, // __builtin_mips_msubu
-      {Intrinsic::mips_mthlip, 70037}, // __builtin_mips_mthlip
-      {Intrinsic::mips_mul_ph, 70059}, // __builtin_mips_mul_ph
-      {Intrinsic::mips_mul_s_ph, 70125}, // __builtin_mips_mul_s_ph
-      {Intrinsic::mips_muleq_s_w_phl, 70149}, // __builtin_mips_muleq_s_w_phl
-      {Intrinsic::mips_muleq_s_w_phr, 70178}, // __builtin_mips_muleq_s_w_phr
-      {Intrinsic::mips_muleu_s_ph_qbl, 70207}, // __builtin_mips_muleu_s_ph_qbl
-      {Intrinsic::mips_muleu_s_ph_qbr, 70237}, // __builtin_mips_muleu_s_ph_qbr
-      {Intrinsic::mips_mulq_rs_ph, 70267}, // __builtin_mips_mulq_rs_ph
-      {Intrinsic::mips_mulq_rs_w, 70293}, // __builtin_mips_mulq_rs_w
-      {Intrinsic::mips_mulq_s_ph, 70318}, // __builtin_mips_mulq_s_ph
-      {Intrinsic::mips_mulq_s_w, 70343}, // __builtin_mips_mulq_s_w
-      {Intrinsic::mips_mulsa_w_ph, 70413}, // __builtin_mips_mulsa_w_ph
-      {Intrinsic::mips_mulsaq_s_w_ph, 70439}, // __builtin_mips_mulsaq_s_w_ph
-      {Intrinsic::mips_mult, 70468}, // __builtin_mips_mult
-      {Intrinsic::mips_multu, 70488}, // __builtin_mips_multu
-      {Intrinsic::mips_packrl_ph, 70841}, // __builtin_mips_packrl_ph
-      {Intrinsic::mips_pick_ph, 71126}, // __builtin_mips_pick_ph
-      {Intrinsic::mips_pick_qb, 71149}, // __builtin_mips_pick_qb
-      {Intrinsic::mips_preceq_w_phl, 71172}, // __builtin_mips_preceq_w_phl
-      {Intrinsic::mips_preceq_w_phr, 71200}, // __builtin_mips_preceq_w_phr
-      {Intrinsic::mips_precequ_ph_qbl, 71228}, // __builtin_mips_precequ_ph_qbl
-      {Intrinsic::mips_precequ_ph_qbla, 71258}, // __builtin_mips_precequ_ph_qbla
-      {Intrinsic::mips_precequ_ph_qbr, 71289}, // __builtin_mips_precequ_ph_qbr
-      {Intrinsic::mips_precequ_ph_qbra, 71319}, // __builtin_mips_precequ_ph_qbra
-      {Intrinsic::mips_preceu_ph_qbl, 71350}, // __builtin_mips_preceu_ph_qbl
-      {Intrinsic::mips_preceu_ph_qbla, 71379}, // __builtin_mips_preceu_ph_qbla
-      {Intrinsic::mips_preceu_ph_qbr, 71409}, // __builtin_mips_preceu_ph_qbr
-      {Intrinsic::mips_preceu_ph_qbra, 71438}, // __builtin_mips_preceu_ph_qbra
-      {Intrinsic::mips_precr_qb_ph, 71468}, // __builtin_mips_precr_qb_ph
-      {Intrinsic::mips_precr_sra_ph_w, 71495}, // __builtin_mips_precr_sra_ph_w
-      {Intrinsic::mips_precr_sra_r_ph_w, 71525}, // __builtin_mips_precr_sra_r_ph_w
-      {Intrinsic::mips_precrq_ph_w, 71557}, // __builtin_mips_precrq_ph_w
-      {Intrinsic::mips_precrq_qb_ph, 71584}, // __builtin_mips_precrq_qb_ph
-      {Intrinsic::mips_precrq_rs_ph_w, 71612}, // __builtin_mips_precrq_rs_ph_w
-      {Intrinsic::mips_precrqu_s_qb_ph, 71642}, // __builtin_mips_precrqu_s_qb_ph
-      {Intrinsic::mips_prepend, 71673}, // __builtin_mips_prepend
-      {Intrinsic::mips_raddu_w_qb, 71696}, // __builtin_mips_raddu_w_qb
-      {Intrinsic::mips_rddsp, 71722}, // __builtin_mips_rddsp
-      {Intrinsic::mips_repl_ph, 71743}, // __builtin_mips_repl_ph
-      {Intrinsic::mips_repl_qb, 71766}, // __builtin_mips_repl_qb
-      {Intrinsic::mips_shilo, 72025}, // __builtin_mips_shilo
-      {Intrinsic::mips_shll_ph, 72046}, // __builtin_mips_shll_ph
-      {Intrinsic::mips_shll_qb, 72069}, // __builtin_mips_shll_qb
-      {Intrinsic::mips_shll_s_ph, 72092}, // __builtin_mips_shll_s_ph
-      {Intrinsic::mips_shll_s_w, 72117}, // __builtin_mips_shll_s_w
-      {Intrinsic::mips_shra_ph, 72141}, // __builtin_mips_shra_ph
-      {Intrinsic::mips_shra_qb, 72164}, // __builtin_mips_shra_qb
-      {Intrinsic::mips_shra_r_ph, 72187}, // __builtin_mips_shra_r_ph
-      {Intrinsic::mips_shra_r_qb, 72212}, // __builtin_mips_shra_r_qb
-      {Intrinsic::mips_shra_r_w, 72237}, // __builtin_mips_shra_r_w
-      {Intrinsic::mips_shrl_ph, 72261}, // __builtin_mips_shrl_ph
-      {Intrinsic::mips_shrl_qb, 72284}, // __builtin_mips_shrl_qb
-      {Intrinsic::mips_subq_ph, 73563}, // __builtin_mips_subq_ph
-      {Intrinsic::mips_subq_s_ph, 73586}, // __builtin_mips_subq_s_ph
-      {Intrinsic::mips_subq_s_w, 73611}, // __builtin_mips_subq_s_w
-      {Intrinsic::mips_subqh_ph, 73635}, // __builtin_mips_subqh_ph
-      {Intrinsic::mips_subqh_r_ph, 73659}, // __builtin_mips_subqh_r_ph
-      {Intrinsic::mips_subqh_r_w, 73685}, // __builtin_mips_subqh_r_w
-      {Intrinsic::mips_subqh_w, 73710}, // __builtin_mips_subqh_w
-      {Intrinsic::mips_subu_ph, 74117}, // __builtin_mips_subu_ph
-      {Intrinsic::mips_subu_qb, 74140}, // __builtin_mips_subu_qb
-      {Intrinsic::mips_subu_s_ph, 74163}, // __builtin_mips_subu_s_ph
-      {Intrinsic::mips_subu_s_qb, 74188}, // __builtin_mips_subu_s_qb
-      {Intrinsic::mips_subuh_qb, 74213}, // __builtin_mips_subuh_qb
-      {Intrinsic::mips_subuh_r_qb, 74237}, // __builtin_mips_subuh_r_qb
-      {Intrinsic::mips_wrdsp, 74519}, // __builtin_mips_wrdsp
-      {Intrinsic::mips_add_a_b, 59617}, // __builtin_msa_add_a_b
-      {Intrinsic::mips_add_a_d, 59639}, // __builtin_msa_add_a_d
-      {Intrinsic::mips_add_a_h, 59661}, // __builtin_msa_add_a_h
-      {Intrinsic::mips_add_a_w, 59683}, // __builtin_msa_add_a_w
-      {Intrinsic::mips_adds_a_b, 59875}, // __builtin_msa_adds_a_b
-      {Intrinsic::mips_adds_a_d, 59898}, // __builtin_msa_adds_a_d
-      {Intrinsic::mips_adds_a_h, 59921}, // __builtin_msa_adds_a_h
-      {Intrinsic::mips_adds_a_w, 59944}, // __builtin_msa_adds_a_w
-      {Intrinsic::mips_adds_s_b, 59967}, // __builtin_msa_adds_s_b
-      {Intrinsic::mips_adds_s_d, 59990}, // __builtin_msa_adds_s_d
-      {Intrinsic::mips_adds_s_h, 60013}, // __builtin_msa_adds_s_h
-      {Intrinsic::mips_adds_s_w, 60036}, // __builtin_msa_adds_s_w
-      {Intrinsic::mips_adds_u_b, 60059}, // __builtin_msa_adds_u_b
-      {Intrinsic::mips_adds_u_d, 60082}, // __builtin_msa_adds_u_d
-      {Intrinsic::mips_adds_u_h, 60105}, // __builtin_msa_adds_u_h
-      {Intrinsic::mips_adds_u_w, 60128}, // __builtin_msa_adds_u_w
-      {Intrinsic::mips_addv_b, 60318}, // __builtin_msa_addv_b
-      {Intrinsic::mips_addv_d, 60339}, // __builtin_msa_addv_d
-      {Intrinsic::mips_addv_h, 60360}, // __builtin_msa_addv_h
-      {Intrinsic::mips_addv_w, 60381}, // __builtin_msa_addv_w
-      {Intrinsic::mips_addvi_b, 60402}, // __builtin_msa_addvi_b
-      {Intrinsic::mips_addvi_d, 60424}, // __builtin_msa_addvi_d
-      {Intrinsic::mips_addvi_h, 60446}, // __builtin_msa_addvi_h
-      {Intrinsic::mips_addvi_w, 60468}, // __builtin_msa_addvi_w
-      {Intrinsic::mips_and_v, 60511}, // __builtin_msa_and_v
-      {Intrinsic::mips_andi_b, 60531}, // __builtin_msa_andi_b
-      {Intrinsic::mips_asub_s_b, 60574}, // __builtin_msa_asub_s_b
-      {Intrinsic::mips_asub_s_d, 60597}, // __builtin_msa_asub_s_d
-      {Intrinsic::mips_asub_s_h, 60620}, // __builtin_msa_asub_s_h
-      {Intrinsic::mips_asub_s_w, 60643}, // __builtin_msa_asub_s_w
-      {Intrinsic::mips_asub_u_b, 60666}, // __builtin_msa_asub_u_b
-      {Intrinsic::mips_asub_u_d, 60689}, // __builtin_msa_asub_u_d
-      {Intrinsic::mips_asub_u_h, 60712}, // __builtin_msa_asub_u_h
-      {Intrinsic::mips_asub_u_w, 60735}, // __builtin_msa_asub_u_w
-      {Intrinsic::mips_ave_s_b, 60758}, // __builtin_msa_ave_s_b
-      {Intrinsic::mips_ave_s_d, 60780}, // __builtin_msa_ave_s_d
-      {Intrinsic::mips_ave_s_h, 60802}, // __builtin_msa_ave_s_h
-      {Intrinsic::mips_ave_s_w, 60824}, // __builtin_msa_ave_s_w
-      {Intrinsic::mips_ave_u_b, 60846}, // __builtin_msa_ave_u_b
-      {Intrinsic::mips_ave_u_d, 60868}, // __builtin_msa_ave_u_d
-      {Intrinsic::mips_ave_u_h, 60890}, // __builtin_msa_ave_u_h
-      {Intrinsic::mips_ave_u_w, 60912}, // __builtin_msa_ave_u_w
-      {Intrinsic::mips_aver_s_b, 60934}, // __builtin_msa_aver_s_b
-      {Intrinsic::mips_aver_s_d, 60957}, // __builtin_msa_aver_s_d
-      {Intrinsic::mips_aver_s_h, 60980}, // __builtin_msa_aver_s_h
-      {Intrinsic::mips_aver_s_w, 61003}, // __builtin_msa_aver_s_w
-      {Intrinsic::mips_aver_u_b, 61026}, // __builtin_msa_aver_u_b
-      {Intrinsic::mips_aver_u_d, 61049}, // __builtin_msa_aver_u_d
-      {Intrinsic::mips_aver_u_h, 61072}, // __builtin_msa_aver_u_h
-      {Intrinsic::mips_aver_u_w, 61095}, // __builtin_msa_aver_u_w
-      {Intrinsic::mips_bclr_b, 61140}, // __builtin_msa_bclr_b
-      {Intrinsic::mips_bclr_d, 61161}, // __builtin_msa_bclr_d
-      {Intrinsic::mips_bclr_h, 61182}, // __builtin_msa_bclr_h
-      {Intrinsic::mips_bclr_w, 61203}, // __builtin_msa_bclr_w
-      {Intrinsic::mips_bclri_b, 61224}, // __builtin_msa_bclri_b
-      {Intrinsic::mips_bclri_d, 61246}, // __builtin_msa_bclri_d
-      {Intrinsic::mips_bclri_h, 61268}, // __builtin_msa_bclri_h
-      {Intrinsic::mips_bclri_w, 61290}, // __builtin_msa_bclri_w
-      {Intrinsic::mips_binsl_b, 61312}, // __builtin_msa_binsl_b
-      {Intrinsic::mips_binsl_d, 61334}, // __builtin_msa_binsl_d
-      {Intrinsic::mips_binsl_h, 61356}, // __builtin_msa_binsl_h
-      {Intrinsic::mips_binsl_w, 61378}, // __builtin_msa_binsl_w
-      {Intrinsic::mips_binsli_b, 61400}, // __builtin_msa_binsli_b
-      {Intrinsic::mips_binsli_d, 61423}, // __builtin_msa_binsli_d
-      {Intrinsic::mips_binsli_h, 61446}, // __builtin_msa_binsli_h
-      {Intrinsic::mips_binsli_w, 61469}, // __builtin_msa_binsli_w
-      {Intrinsic::mips_binsr_b, 61492}, // __builtin_msa_binsr_b
-      {Intrinsic::mips_binsr_d, 61514}, // __builtin_msa_binsr_d
-      {Intrinsic::mips_binsr_h, 61536}, // __builtin_msa_binsr_h
-      {Intrinsic::mips_binsr_w, 61558}, // __builtin_msa_binsr_w
-      {Intrinsic::mips_binsri_b, 61580}, // __builtin_msa_binsri_b
-      {Intrinsic::mips_binsri_d, 61603}, // __builtin_msa_binsri_d
-      {Intrinsic::mips_binsri_h, 61626}, // __builtin_msa_binsri_h
-      {Intrinsic::mips_binsri_w, 61649}, // __builtin_msa_binsri_w
-      {Intrinsic::mips_bmnz_v, 61694}, // __builtin_msa_bmnz_v
-      {Intrinsic::mips_bmnzi_b, 61715}, // __builtin_msa_bmnzi_b
-      {Intrinsic::mips_bmz_v, 61737}, // __builtin_msa_bmz_v
-      {Intrinsic::mips_bmzi_b, 61757}, // __builtin_msa_bmzi_b
-      {Intrinsic::mips_bneg_b, 61778}, // __builtin_msa_bneg_b
-      {Intrinsic::mips_bneg_d, 61799}, // __builtin_msa_bneg_d
-      {Intrinsic::mips_bneg_h, 61820}, // __builtin_msa_bneg_h
-      {Intrinsic::mips_bneg_w, 61841}, // __builtin_msa_bneg_w
-      {Intrinsic::mips_bnegi_b, 61862}, // __builtin_msa_bnegi_b
-      {Intrinsic::mips_bnegi_d, 61884}, // __builtin_msa_bnegi_d
-      {Intrinsic::mips_bnegi_h, 61906}, // __builtin_msa_bnegi_h
-      {Intrinsic::mips_bnegi_w, 61928}, // __builtin_msa_bnegi_w
-      {Intrinsic::mips_bnz_b, 61950}, // __builtin_msa_bnz_b
-      {Intrinsic::mips_bnz_d, 61970}, // __builtin_msa_bnz_d
-      {Intrinsic::mips_bnz_h, 61990}, // __builtin_msa_bnz_h
-      {Intrinsic::mips_bnz_v, 62010}, // __builtin_msa_bnz_v
-      {Intrinsic::mips_bnz_w, 62030}, // __builtin_msa_bnz_w
-      {Intrinsic::mips_bsel_v, 62074}, // __builtin_msa_bsel_v
-      {Intrinsic::mips_bseli_b, 62095}, // __builtin_msa_bseli_b
-      {Intrinsic::mips_bset_b, 62117}, // __builtin_msa_bset_b
-      {Intrinsic::mips_bset_d, 62138}, // __builtin_msa_bset_d
-      {Intrinsic::mips_bset_h, 62159}, // __builtin_msa_bset_h
-      {Intrinsic::mips_bset_w, 62180}, // __builtin_msa_bset_w
-      {Intrinsic::mips_bseti_b, 62201}, // __builtin_msa_bseti_b
-      {Intrinsic::mips_bseti_d, 62223}, // __builtin_msa_bseti_d
-      {Intrinsic::mips_bseti_h, 62245}, // __builtin_msa_bseti_h
-      {Intrinsic::mips_bseti_w, 62267}, // __builtin_msa_bseti_w
-      {Intrinsic::mips_bz_b, 62289}, // __builtin_msa_bz_b
-      {Intrinsic::mips_bz_d, 62308}, // __builtin_msa_bz_d
-      {Intrinsic::mips_bz_h, 62327}, // __builtin_msa_bz_h
-      {Intrinsic::mips_bz_v, 62346}, // __builtin_msa_bz_v
-      {Intrinsic::mips_bz_w, 62365}, // __builtin_msa_bz_w
-      {Intrinsic::mips_ceq_b, 62384}, // __builtin_msa_ceq_b
-      {Intrinsic::mips_ceq_d, 62404}, // __builtin_msa_ceq_d
-      {Intrinsic::mips_ceq_h, 62424}, // __builtin_msa_ceq_h
-      {Intrinsic::mips_ceq_w, 62444}, // __builtin_msa_ceq_w
-      {Intrinsic::mips_ceqi_b, 62464}, // __builtin_msa_ceqi_b
-      {Intrinsic::mips_ceqi_d, 62485}, // __builtin_msa_ceqi_d
-      {Intrinsic::mips_ceqi_h, 62506}, // __builtin_msa_ceqi_h
-      {Intrinsic::mips_ceqi_w, 62527}, // __builtin_msa_ceqi_w
-      {Intrinsic::mips_cfcmsa, 62548}, // __builtin_msa_cfcmsa
-      {Intrinsic::mips_cle_s_b, 62569}, // __builtin_msa_cle_s_b
-      {Intrinsic::mips_cle_s_d, 62591}, // __builtin_msa_cle_s_d
-      {Intrinsic::mips_cle_s_h, 62613}, // __builtin_msa_cle_s_h
-      {Intrinsic::mips_cle_s_w, 62635}, // __builtin_msa_cle_s_w
-      {Intrinsic::mips_cle_u_b, 62657}, // __builtin_msa_cle_u_b
-      {Intrinsic::mips_cle_u_d, 62679}, // __builtin_msa_cle_u_d
-      {Intrinsic::mips_cle_u_h, 62701}, // __builtin_msa_cle_u_h
-      {Intrinsic::mips_cle_u_w, 62723}, // __builtin_msa_cle_u_w
-      {Intrinsic::mips_clei_s_b, 62745}, // __builtin_msa_clei_s_b
-      {Intrinsic::mips_clei_s_d, 62768}, // __builtin_msa_clei_s_d
-      {Intrinsic::mips_clei_s_h, 62791}, // __builtin_msa_clei_s_h
-      {Intrinsic::mips_clei_s_w, 62814}, // __builtin_msa_clei_s_w
-      {Intrinsic::mips_clei_u_b, 62837}, // __builtin_msa_clei_u_b
-      {Intrinsic::mips_clei_u_d, 62860}, // __builtin_msa_clei_u_d
-      {Intrinsic::mips_clei_u_h, 62883}, // __builtin_msa_clei_u_h
-      {Intrinsic::mips_clei_u_w, 62906}, // __builtin_msa_clei_u_w
-      {Intrinsic::mips_clt_s_b, 62929}, // __builtin_msa_clt_s_b
-      {Intrinsic::mips_clt_s_d, 62951}, // __builtin_msa_clt_s_d
-      {Intrinsic::mips_clt_s_h, 62973}, // __builtin_msa_clt_s_h
-      {Intrinsic::mips_clt_s_w, 62995}, // __builtin_msa_clt_s_w
-      {Intrinsic::mips_clt_u_b, 63017}, // __builtin_msa_clt_u_b
-      {Intrinsic::mips_clt_u_d, 63039}, // __builtin_msa_clt_u_d
-      {Intrinsic::mips_clt_u_h, 63061}, // __builtin_msa_clt_u_h
-      {Intrinsic::mips_clt_u_w, 63083}, // __builtin_msa_clt_u_w
-      {Intrinsic::mips_clti_s_b, 63105}, // __builtin_msa_clti_s_b
-      {Intrinsic::mips_clti_s_d, 63128}, // __builtin_msa_clti_s_d
-      {Intrinsic::mips_clti_s_h, 63151}, // __builtin_msa_clti_s_h
-      {Intrinsic::mips_clti_s_w, 63174}, // __builtin_msa_clti_s_w
-      {Intrinsic::mips_clti_u_b, 63197}, // __builtin_msa_clti_u_b
-      {Intrinsic::mips_clti_u_d, 63220}, // __builtin_msa_clti_u_d
-      {Intrinsic::mips_clti_u_h, 63243}, // __builtin_msa_clti_u_h
-      {Intrinsic::mips_clti_u_w, 63266}, // __builtin_msa_clti_u_w
-      {Intrinsic::mips_copy_s_b, 63607}, // __builtin_msa_copy_s_b
-      {Intrinsic::mips_copy_s_d, 63630}, // __builtin_msa_copy_s_d
-      {Intrinsic::mips_copy_s_h, 63653}, // __builtin_msa_copy_s_h
-      {Intrinsic::mips_copy_s_w, 63676}, // __builtin_msa_copy_s_w
-      {Intrinsic::mips_copy_u_b, 63699}, // __builtin_msa_copy_u_b
-      {Intrinsic::mips_copy_u_d, 63722}, // __builtin_msa_copy_u_d
-      {Intrinsic::mips_copy_u_h, 63745}, // __builtin_msa_copy_u_h
-      {Intrinsic::mips_copy_u_w, 63768}, // __builtin_msa_copy_u_w
-      {Intrinsic::mips_ctcmsa, 63791}, // __builtin_msa_ctcmsa
-      {Intrinsic::mips_div_s_b, 63812}, // __builtin_msa_div_s_b
-      {Intrinsic::mips_div_s_d, 63834}, // __builtin_msa_div_s_d
-      {Intrinsic::mips_div_s_h, 63856}, // __builtin_msa_div_s_h
-      {Intrinsic::mips_div_s_w, 63878}, // __builtin_msa_div_s_w
-      {Intrinsic::mips_div_u_b, 63900}, // __builtin_msa_div_u_b
-      {Intrinsic::mips_div_u_d, 63922}, // __builtin_msa_div_u_d
-      {Intrinsic::mips_div_u_h, 63944}, // __builtin_msa_div_u_h
-      {Intrinsic::mips_div_u_w, 63966}, // __builtin_msa_div_u_w
-      {Intrinsic::mips_dotp_s_d, 64008}, // __builtin_msa_dotp_s_d
-      {Intrinsic::mips_dotp_s_h, 64031}, // __builtin_msa_dotp_s_h
-      {Intrinsic::mips_dotp_s_w, 64054}, // __builtin_msa_dotp_s_w
-      {Intrinsic::mips_dotp_u_d, 64077}, // __builtin_msa_dotp_u_d
-      {Intrinsic::mips_dotp_u_h, 64100}, // __builtin_msa_dotp_u_h
-      {Intrinsic::mips_dotp_u_w, 64123}, // __builtin_msa_dotp_u_w
-      {Intrinsic::mips_dpadd_s_d, 64170}, // __builtin_msa_dpadd_s_d
-      {Intrinsic::mips_dpadd_s_h, 64194}, // __builtin_msa_dpadd_s_h
-      {Intrinsic::mips_dpadd_s_w, 64218}, // __builtin_msa_dpadd_s_w
-      {Intrinsic::mips_dpadd_u_d, 64242}, // __builtin_msa_dpadd_u_d
-      {Intrinsic::mips_dpadd_u_h, 64266}, // __builtin_msa_dpadd_u_h
-      {Intrinsic::mips_dpadd_u_w, 64290}, // __builtin_msa_dpadd_u_w
-      {Intrinsic::mips_dpsub_s_d, 64689}, // __builtin_msa_dpsub_s_d
-      {Intrinsic::mips_dpsub_s_h, 64713}, // __builtin_msa_dpsub_s_h
-      {Intrinsic::mips_dpsub_s_w, 64737}, // __builtin_msa_dpsub_s_w
-      {Intrinsic::mips_dpsub_u_d, 64761}, // __builtin_msa_dpsub_u_d
-      {Intrinsic::mips_dpsub_u_h, 64785}, // __builtin_msa_dpsub_u_h
-      {Intrinsic::mips_dpsub_u_w, 64809}, // __builtin_msa_dpsub_u_w
-      {Intrinsic::mips_fadd_d, 64995}, // __builtin_msa_fadd_d
-      {Intrinsic::mips_fadd_w, 65016}, // __builtin_msa_fadd_w
-      {Intrinsic::mips_fcaf_d, 65037}, // __builtin_msa_fcaf_d
-      {Intrinsic::mips_fcaf_w, 65058}, // __builtin_msa_fcaf_w
-      {Intrinsic::mips_fceq_d, 65079}, // __builtin_msa_fceq_d
-      {Intrinsic::mips_fceq_w, 65100}, // __builtin_msa_fceq_w
-      {Intrinsic::mips_fclass_d, 65121}, // __builtin_msa_fclass_d
-      {Intrinsic::mips_fclass_w, 65144}, // __builtin_msa_fclass_w
-      {Intrinsic::mips_fcle_d, 65167}, // __builtin_msa_fcle_d
-      {Intrinsic::mips_fcle_w, 65188}, // __builtin_msa_fcle_w
-      {Intrinsic::mips_fclt_d, 65209}, // __builtin_msa_fclt_d
-      {Intrinsic::mips_fclt_w, 65230}, // __builtin_msa_fclt_w
-      {Intrinsic::mips_fcne_d, 65251}, // __builtin_msa_fcne_d
-      {Intrinsic::mips_fcne_w, 65272}, // __builtin_msa_fcne_w
-      {Intrinsic::mips_fcor_d, 65293}, // __builtin_msa_fcor_d
-      {Intrinsic::mips_fcor_w, 65314}, // __builtin_msa_fcor_w
-      {Intrinsic::mips_fcueq_d, 65335}, // __builtin_msa_fcueq_d
-      {Intrinsic::mips_fcueq_w, 65357}, // __builtin_msa_fcueq_w
-      {Intrinsic::mips_fcule_d, 65379}, // __builtin_msa_fcule_d
-      {Intrinsic::mips_fcule_w, 65401}, // __builtin_msa_fcule_w
-      {Intrinsic::mips_fcult_d, 65423}, // __builtin_msa_fcult_d
-      {Intrinsic::mips_fcult_w, 65445}, // __builtin_msa_fcult_w
-      {Intrinsic::mips_fcun_d, 65467}, // __builtin_msa_fcun_d
-      {Intrinsic::mips_fcun_w, 65488}, // __builtin_msa_fcun_w
-      {Intrinsic::mips_fcune_d, 65509}, // __builtin_msa_fcune_d
-      {Intrinsic::mips_fcune_w, 65531}, // __builtin_msa_fcune_w
-      {Intrinsic::mips_fdiv_d, 65553}, // __builtin_msa_fdiv_d
-      {Intrinsic::mips_fdiv_w, 65574}, // __builtin_msa_fdiv_w
-      {Intrinsic::mips_fexdo_h, 65595}, // __builtin_msa_fexdo_h
-      {Intrinsic::mips_fexdo_w, 65617}, // __builtin_msa_fexdo_w
-      {Intrinsic::mips_fexp2_d, 65639}, // __builtin_msa_fexp2_d
-      {Intrinsic::mips_fexp2_w, 65661}, // __builtin_msa_fexp2_w
-      {Intrinsic::mips_fexupl_d, 65683}, // __builtin_msa_fexupl_d
-      {Intrinsic::mips_fexupl_w, 65706}, // __builtin_msa_fexupl_w
-      {Intrinsic::mips_fexupr_d, 65729}, // __builtin_msa_fexupr_d
-      {Intrinsic::mips_fexupr_w, 65752}, // __builtin_msa_fexupr_w
-      {Intrinsic::mips_ffint_s_d, 65775}, // __builtin_msa_ffint_s_d
-      {Intrinsic::mips_ffint_s_w, 65799}, // __builtin_msa_ffint_s_w
-      {Intrinsic::mips_ffint_u_d, 65823}, // __builtin_msa_ffint_u_d
-      {Intrinsic::mips_ffint_u_w, 65847}, // __builtin_msa_ffint_u_w
-      {Intrinsic::mips_ffql_d, 65871}, // __builtin_msa_ffql_d
-      {Intrinsic::mips_ffql_w, 65892}, // __builtin_msa_ffql_w
-      {Intrinsic::mips_ffqr_d, 65913}, // __builtin_msa_ffqr_d
-      {Intrinsic::mips_ffqr_w, 65934}, // __builtin_msa_ffqr_w
-      {Intrinsic::mips_fill_b, 65955}, // __builtin_msa_fill_b
-      {Intrinsic::mips_fill_d, 65976}, // __builtin_msa_fill_d
-      {Intrinsic::mips_fill_h, 65997}, // __builtin_msa_fill_h
-      {Intrinsic::mips_fill_w, 66018}, // __builtin_msa_fill_w
-      {Intrinsic::mips_flog2_d, 66039}, // __builtin_msa_flog2_d
-      {Intrinsic::mips_flog2_w, 66061}, // __builtin_msa_flog2_w
-      {Intrinsic::mips_fmadd_d, 66083}, // __builtin_msa_fmadd_d
-      {Intrinsic::mips_fmadd_w, 66105}, // __builtin_msa_fmadd_w
-      {Intrinsic::mips_fmax_a_d, 66127}, // __builtin_msa_fmax_a_d
-      {Intrinsic::mips_fmax_a_w, 66150}, // __builtin_msa_fmax_a_w
-      {Intrinsic::mips_fmax_d, 66173}, // __builtin_msa_fmax_d
-      {Intrinsic::mips_fmax_w, 66194}, // __builtin_msa_fmax_w
-      {Intrinsic::mips_fmin_a_d, 66215}, // __builtin_msa_fmin_a_d
-      {Intrinsic::mips_fmin_a_w, 66238}, // __builtin_msa_fmin_a_w
-      {Intrinsic::mips_fmin_d, 66261}, // __builtin_msa_fmin_d
-      {Intrinsic::mips_fmin_w, 66282}, // __builtin_msa_fmin_w
-      {Intrinsic::mips_fmsub_d, 66303}, // __builtin_msa_fmsub_d
-      {Intrinsic::mips_fmsub_w, 66325}, // __builtin_msa_fmsub_w
-      {Intrinsic::mips_fmul_d, 66347}, // __builtin_msa_fmul_d
-      {Intrinsic::mips_fmul_w, 66368}, // __builtin_msa_fmul_w
-      {Intrinsic::mips_frcp_d, 66389}, // __builtin_msa_frcp_d
-      {Intrinsic::mips_frcp_w, 66410}, // __builtin_msa_frcp_w
-      {Intrinsic::mips_frint_d, 66431}, // __builtin_msa_frint_d
-      {Intrinsic::mips_frint_w, 66453}, // __builtin_msa_frint_w
-      {Intrinsic::mips_frsqrt_d, 66475}, // __builtin_msa_frsqrt_d
-      {Intrinsic::mips_frsqrt_w, 66498}, // __builtin_msa_frsqrt_w
-      {Intrinsic::mips_fsaf_d, 66521}, // __builtin_msa_fsaf_d
-      {Intrinsic::mips_fsaf_w, 66542}, // __builtin_msa_fsaf_w
-      {Intrinsic::mips_fseq_d, 66563}, // __builtin_msa_fseq_d
-      {Intrinsic::mips_fseq_w, 66584}, // __builtin_msa_fseq_w
-      {Intrinsic::mips_fsle_d, 66605}, // __builtin_msa_fsle_d
-      {Intrinsic::mips_fsle_w, 66626}, // __builtin_msa_fsle_w
-      {Intrinsic::mips_fslt_d, 66647}, // __builtin_msa_fslt_d
-      {Intrinsic::mips_fslt_w, 66668}, // __builtin_msa_fslt_w
-      {Intrinsic::mips_fsne_d, 66689}, // __builtin_msa_fsne_d
-      {Intrinsic::mips_fsne_w, 66710}, // __builtin_msa_fsne_w
-      {Intrinsic::mips_fsor_d, 66731}, // __builtin_msa_fsor_d
-      {Intrinsic::mips_fsor_w, 66752}, // __builtin_msa_fsor_w
-      {Intrinsic::mips_fsqrt_d, 66773}, // __builtin_msa_fsqrt_d
-      {Intrinsic::mips_fsqrt_w, 66795}, // __builtin_msa_fsqrt_w
-      {Intrinsic::mips_fsub_d, 66817}, // __builtin_msa_fsub_d
-      {Intrinsic::mips_fsub_w, 66838}, // __builtin_msa_fsub_w
-      {Intrinsic::mips_fsueq_d, 66859}, // __builtin_msa_fsueq_d
-      {Intrinsic::mips_fsueq_w, 66881}, // __builtin_msa_fsueq_w
-      {Intrinsic::mips_fsule_d, 66903}, // __builtin_msa_fsule_d
-      {Intrinsic::mips_fsule_w, 66925}, // __builtin_msa_fsule_w
-      {Intrinsic::mips_fsult_d, 66947}, // __builtin_msa_fsult_d
-      {Intrinsic::mips_fsult_w, 66969}, // __builtin_msa_fsult_w
-      {Intrinsic::mips_fsun_d, 66991}, // __builtin_msa_fsun_d
-      {Intrinsic::mips_fsun_w, 67012}, // __builtin_msa_fsun_w
-      {Intrinsic::mips_fsune_d, 67033}, // __builtin_msa_fsune_d
-      {Intrinsic::mips_fsune_w, 67055}, // __builtin_msa_fsune_w
-      {Intrinsic::mips_ftint_s_d, 67077}, // __builtin_msa_ftint_s_d
-      {Intrinsic::mips_ftint_s_w, 67101}, // __builtin_msa_ftint_s_w
-      {Intrinsic::mips_ftint_u_d, 67125}, // __builtin_msa_ftint_u_d
-      {Intrinsic::mips_ftint_u_w, 67149}, // __builtin_msa_ftint_u_w
-      {Intrinsic::mips_ftq_h, 67173}, // __builtin_msa_ftq_h
-      {Intrinsic::mips_ftq_w, 67193}, // __builtin_msa_ftq_w
-      {Intrinsic::mips_ftrunc_s_d, 67213}, // __builtin_msa_ftrunc_s_d
-      {Intrinsic::mips_ftrunc_s_w, 67238}, // __builtin_msa_ftrunc_s_w
-      {Intrinsic::mips_ftrunc_u_d, 67263}, // __builtin_msa_ftrunc_u_d
-      {Intrinsic::mips_ftrunc_u_w, 67288}, // __builtin_msa_ftrunc_u_w
-      {Intrinsic::mips_hadd_s_d, 67313}, // __builtin_msa_hadd_s_d
-      {Intrinsic::mips_hadd_s_h, 67336}, // __builtin_msa_hadd_s_h
-      {Intrinsic::mips_hadd_s_w, 67359}, // __builtin_msa_hadd_s_w
-      {Intrinsic::mips_hadd_u_d, 67382}, // __builtin_msa_hadd_u_d
-      {Intrinsic::mips_hadd_u_h, 67405}, // __builtin_msa_hadd_u_h
-      {Intrinsic::mips_hadd_u_w, 67428}, // __builtin_msa_hadd_u_w
-      {Intrinsic::mips_hsub_s_d, 67451}, // __builtin_msa_hsub_s_d
-      {Intrinsic::mips_hsub_s_h, 67474}, // __builtin_msa_hsub_s_h
-      {Intrinsic::mips_hsub_s_w, 67497}, // __builtin_msa_hsub_s_w
-      {Intrinsic::mips_hsub_u_d, 67520}, // __builtin_msa_hsub_u_d
-      {Intrinsic::mips_hsub_u_h, 67543}, // __builtin_msa_hsub_u_h
-      {Intrinsic::mips_hsub_u_w, 67566}, // __builtin_msa_hsub_u_w
-      {Intrinsic::mips_ilvev_b, 67589}, // __builtin_msa_ilvev_b
-      {Intrinsic::mips_ilvev_d, 67611}, // __builtin_msa_ilvev_d
-      {Intrinsic::mips_ilvev_h, 67633}, // __builtin_msa_ilvev_h
-      {Intrinsic::mips_ilvev_w, 67655}, // __builtin_msa_ilvev_w
-      {Intrinsic::mips_ilvl_b, 67677}, // __builtin_msa_ilvl_b
-      {Intrinsic::mips_ilvl_d, 67698}, // __builtin_msa_ilvl_d
-      {Intrinsic::mips_ilvl_h, 67719}, // __builtin_msa_ilvl_h
-      {Intrinsic::mips_ilvl_w, 67740}, // __builtin_msa_ilvl_w
-      {Intrinsic::mips_ilvod_b, 67761}, // __builtin_msa_ilvod_b
-      {Intrinsic::mips_ilvod_d, 67783}, // __builtin_msa_ilvod_d
-      {Intrinsic::mips_ilvod_h, 67805}, // __builtin_msa_ilvod_h
-      {Intrinsic::mips_ilvod_w, 67827}, // __builtin_msa_ilvod_w
-      {Intrinsic::mips_ilvr_b, 67849}, // __builtin_msa_ilvr_b
-      {Intrinsic::mips_ilvr_d, 67870}, // __builtin_msa_ilvr_d
-      {Intrinsic::mips_ilvr_h, 67891}, // __builtin_msa_ilvr_h
-      {Intrinsic::mips_ilvr_w, 67912}, // __builtin_msa_ilvr_w
-      {Intrinsic::mips_insert_b, 67933}, // __builtin_msa_insert_b
-      {Intrinsic::mips_insert_d, 67956}, // __builtin_msa_insert_d
-      {Intrinsic::mips_insert_h, 67979}, // __builtin_msa_insert_h
-      {Intrinsic::mips_insert_w, 68002}, // __builtin_msa_insert_w
-      {Intrinsic::mips_insve_b, 68045}, // __builtin_msa_insve_b
-      {Intrinsic::mips_insve_d, 68067}, // __builtin_msa_insve_d
-      {Intrinsic::mips_insve_h, 68089}, // __builtin_msa_insve_h
-      {Intrinsic::mips_insve_w, 68111}, // __builtin_msa_insve_w
-      {Intrinsic::mips_ld_b, 68153}, // __builtin_msa_ld_b
-      {Intrinsic::mips_ld_d, 68172}, // __builtin_msa_ld_d
-      {Intrinsic::mips_ld_h, 68191}, // __builtin_msa_ld_h
-      {Intrinsic::mips_ld_w, 68210}, // __builtin_msa_ld_w
-      {Intrinsic::mips_ldi_b, 68229}, // __builtin_msa_ldi_b
-      {Intrinsic::mips_ldi_d, 68249}, // __builtin_msa_ldi_d
-      {Intrinsic::mips_ldi_h, 68269}, // __builtin_msa_ldi_h
-      {Intrinsic::mips_ldi_w, 68289}, // __builtin_msa_ldi_w
-      {Intrinsic::mips_madd_q_h, 68386}, // __builtin_msa_madd_q_h
-      {Intrinsic::mips_madd_q_w, 68409}, // __builtin_msa_madd_q_w
-      {Intrinsic::mips_maddr_q_h, 68432}, // __builtin_msa_maddr_q_h
-      {Intrinsic::mips_maddr_q_w, 68456}, // __builtin_msa_maddr_q_w
-      {Intrinsic::mips_maddv_b, 68501}, // __builtin_msa_maddv_b
-      {Intrinsic::mips_maddv_d, 68523}, // __builtin_msa_maddv_d
-      {Intrinsic::mips_maddv_h, 68545}, // __builtin_msa_maddv_h
-      {Intrinsic::mips_maddv_w, 68567}, // __builtin_msa_maddv_w
-      {Intrinsic::mips_max_a_b, 68699}, // __builtin_msa_max_a_b
-      {Intrinsic::mips_max_a_d, 68721}, // __builtin_msa_max_a_d
-      {Intrinsic::mips_max_a_h, 68743}, // __builtin_msa_max_a_h
-      {Intrinsic::mips_max_a_w, 68765}, // __builtin_msa_max_a_w
-      {Intrinsic::mips_max_s_b, 68787}, // __builtin_msa_max_s_b
-      {Intrinsic::mips_max_s_d, 68809}, // __builtin_msa_max_s_d
-      {Intrinsic::mips_max_s_h, 68831}, // __builtin_msa_max_s_h
-      {Intrinsic::mips_max_s_w, 68853}, // __builtin_msa_max_s_w
-      {Intrinsic::mips_max_u_b, 68875}, // __builtin_msa_max_u_b
-      {Intrinsic::mips_max_u_d, 68897}, // __builtin_msa_max_u_d
-      {Intrinsic::mips_max_u_h, 68919}, // __builtin_msa_max_u_h
-      {Intrinsic::mips_max_u_w, 68941}, // __builtin_msa_max_u_w
-      {Intrinsic::mips_maxi_s_b, 68963}, // __builtin_msa_maxi_s_b
-      {Intrinsic::mips_maxi_s_d, 68986}, // __builtin_msa_maxi_s_d
-      {Intrinsic::mips_maxi_s_h, 69009}, // __builtin_msa_maxi_s_h
-      {Intrinsic::mips_maxi_s_w, 69032}, // __builtin_msa_maxi_s_w
-      {Intrinsic::mips_maxi_u_b, 69055}, // __builtin_msa_maxi_u_b
-      {Intrinsic::mips_maxi_u_d, 69078}, // __builtin_msa_maxi_u_d
-      {Intrinsic::mips_maxi_u_h, 69101}, // __builtin_msa_maxi_u_h
-      {Intrinsic::mips_maxi_u_w, 69124}, // __builtin_msa_maxi_u_w
-      {Intrinsic::mips_min_a_b, 69147}, // __builtin_msa_min_a_b
-      {Intrinsic::mips_min_a_d, 69169}, // __builtin_msa_min_a_d
-      {Intrinsic::mips_min_a_h, 69191}, // __builtin_msa_min_a_h
-      {Intrinsic::mips_min_a_w, 69213}, // __builtin_msa_min_a_w
-      {Intrinsic::mips_min_s_b, 69235}, // __builtin_msa_min_s_b
-      {Intrinsic::mips_min_s_d, 69257}, // __builtin_msa_min_s_d
-      {Intrinsic::mips_min_s_h, 69279}, // __builtin_msa_min_s_h
-      {Intrinsic::mips_min_s_w, 69301}, // __builtin_msa_min_s_w
-      {Intrinsic::mips_min_u_b, 69323}, // __builtin_msa_min_u_b
-      {Intrinsic::mips_min_u_d, 69345}, // __builtin_msa_min_u_d
-      {Intrinsic::mips_min_u_h, 69367}, // __builtin_msa_min_u_h
-      {Intrinsic::mips_min_u_w, 69389}, // __builtin_msa_min_u_w
-      {Intrinsic::mips_mini_s_b, 69411}, // __builtin_msa_mini_s_b
-      {Intrinsic::mips_mini_s_d, 69434}, // __builtin_msa_mini_s_d
-      {Intrinsic::mips_mini_s_h, 69457}, // __builtin_msa_mini_s_h
-      {Intrinsic::mips_mini_s_w, 69480}, // __builtin_msa_mini_s_w
-      {Intrinsic::mips_mini_u_b, 69503}, // __builtin_msa_mini_u_b
-      {Intrinsic::mips_mini_u_d, 69526}, // __builtin_msa_mini_u_d
-      {Intrinsic::mips_mini_u_h, 69549}, // __builtin_msa_mini_u_h
-      {Intrinsic::mips_mini_u_w, 69572}, // __builtin_msa_mini_u_w
-      {Intrinsic::mips_mod_s_b, 69595}, // __builtin_msa_mod_s_b
-      {Intrinsic::mips_mod_s_d, 69617}, // __builtin_msa_mod_s_d
-      {Intrinsic::mips_mod_s_h, 69639}, // __builtin_msa_mod_s_h
-      {Intrinsic::mips_mod_s_w, 69661}, // __builtin_msa_mod_s_w
-      {Intrinsic::mips_mod_u_b, 69683}, // __builtin_msa_mod_u_b
-      {Intrinsic::mips_mod_u_d, 69705}, // __builtin_msa_mod_u_d
-      {Intrinsic::mips_mod_u_h, 69727}, // __builtin_msa_mod_u_h
-      {Intrinsic::mips_mod_u_w, 69749}, // __builtin_msa_mod_u_w
-      {Intrinsic::mips_move_v, 69793}, // __builtin_msa_move_v
-      {Intrinsic::mips_msub_q_h, 69834}, // __builtin_msa_msub_q_h
-      {Intrinsic::mips_msub_q_w, 69857}, // __builtin_msa_msub_q_w
-      {Intrinsic::mips_msubr_q_h, 69880}, // __builtin_msa_msubr_q_h
-      {Intrinsic::mips_msubr_q_w, 69904}, // __builtin_msa_msubr_q_w
-      {Intrinsic::mips_msubv_b, 69949}, // __builtin_msa_msubv_b
-      {Intrinsic::mips_msubv_d, 69971}, // __builtin_msa_msubv_d
-      {Intrinsic::mips_msubv_h, 69993}, // __builtin_msa_msubv_h
-      {Intrinsic::mips_msubv_w, 70015}, // __builtin_msa_msubv_w
-      {Intrinsic::mips_mul_q_h, 70081}, // __builtin_msa_mul_q_h
-      {Intrinsic::mips_mul_q_w, 70103}, // __builtin_msa_mul_q_w
-      {Intrinsic::mips_mulr_q_h, 70367}, // __builtin_msa_mulr_q_h
-      {Intrinsic::mips_mulr_q_w, 70390}, // __builtin_msa_mulr_q_w
-      {Intrinsic::mips_mulv_b, 70509}, // __builtin_msa_mulv_b
-      {Intrinsic::mips_mulv_d, 70530}, // __builtin_msa_mulv_d
-      {Intrinsic::mips_mulv_h, 70551}, // __builtin_msa_mulv_h
-      {Intrinsic::mips_mulv_w, 70572}, // __builtin_msa_mulv_w
-      {Intrinsic::mips_nloc_b, 70593}, // __builtin_msa_nloc_b
-      {Intrinsic::mips_nloc_d, 70614}, // __builtin_msa_nloc_d
-      {Intrinsic::mips_nloc_h, 70635}, // __builtin_msa_nloc_h
-      {Intrinsic::mips_nloc_w, 70656}, // __builtin_msa_nloc_w
-      {Intrinsic::mips_nlzc_b, 70677}, // __builtin_msa_nlzc_b
-      {Intrinsic::mips_nlzc_d, 70698}, // __builtin_msa_nlzc_d
-      {Intrinsic::mips_nlzc_h, 70719}, // __builtin_msa_nlzc_h
-      {Intrinsic::mips_nlzc_w, 70740}, // __builtin_msa_nlzc_w
-      {Intrinsic::mips_nor_v, 70761}, // __builtin_msa_nor_v
-      {Intrinsic::mips_nori_b, 70781}, // __builtin_msa_nori_b
-      {Intrinsic::mips_or_v, 70802}, // __builtin_msa_or_v
-      {Intrinsic::mips_ori_b, 70821}, // __builtin_msa_ori_b
-      {Intrinsic::mips_pckev_b, 70866}, // __builtin_msa_pckev_b
-      {Intrinsic::mips_pckev_d, 70888}, // __builtin_msa_pckev_d
-      {Intrinsic::mips_pckev_h, 70910}, // __builtin_msa_pckev_h
-      {Intrinsic::mips_pckev_w, 70932}, // __builtin_msa_pckev_w
-      {Intrinsic::mips_pckod_b, 70954}, // __builtin_msa_pckod_b
-      {Intrinsic::mips_pckod_d, 70976}, // __builtin_msa_pckod_d
-      {Intrinsic::mips_pckod_h, 70998}, // __builtin_msa_pckod_h
-      {Intrinsic::mips_pckod_w, 71020}, // __builtin_msa_pckod_w
-      {Intrinsic::mips_pcnt_b, 71042}, // __builtin_msa_pcnt_b
-      {Intrinsic::mips_pcnt_d, 71063}, // __builtin_msa_pcnt_d
-      {Intrinsic::mips_pcnt_h, 71084}, // __builtin_msa_pcnt_h
-      {Intrinsic::mips_pcnt_w, 71105}, // __builtin_msa_pcnt_w
-      {Intrinsic::mips_sat_s_b, 71789}, // __builtin_msa_sat_s_b
-      {Intrinsic::mips_sat_s_d, 71811}, // __builtin_msa_sat_s_d
-      {Intrinsic::mips_sat_s_h, 71833}, // __builtin_msa_sat_s_h
-      {Intrinsic::mips_sat_s_w, 71855}, // __builtin_msa_sat_s_w
-      {Intrinsic::mips_sat_u_b, 71877}, // __builtin_msa_sat_u_b
-      {Intrinsic::mips_sat_u_d, 71899}, // __builtin_msa_sat_u_d
-      {Intrinsic::mips_sat_u_h, 71921}, // __builtin_msa_sat_u_h
-      {Intrinsic::mips_sat_u_w, 71943}, // __builtin_msa_sat_u_w
-      {Intrinsic::mips_shf_b, 71965}, // __builtin_msa_shf_b
-      {Intrinsic::mips_shf_h, 71985}, // __builtin_msa_shf_h
-      {Intrinsic::mips_shf_w, 72005}, // __builtin_msa_shf_w
-      {Intrinsic::mips_sld_b, 72307}, // __builtin_msa_sld_b
-      {Intrinsic::mips_sld_d, 72327}, // __builtin_msa_sld_d
-      {Intrinsic::mips_sld_h, 72347}, // __builtin_msa_sld_h
-      {Intrinsic::mips_sld_w, 72367}, // __builtin_msa_sld_w
-      {Intrinsic::mips_sldi_b, 72387}, // __builtin_msa_sldi_b
-      {Intrinsic::mips_sldi_d, 72408}, // __builtin_msa_sldi_d
-      {Intrinsic::mips_sldi_h, 72429}, // __builtin_msa_sldi_h
-      {Intrinsic::mips_sldi_w, 72450}, // __builtin_msa_sldi_w
-      {Intrinsic::mips_sll_b, 72471}, // __builtin_msa_sll_b
-      {Intrinsic::mips_sll_d, 72491}, // __builtin_msa_sll_d
-      {Intrinsic::mips_sll_h, 72511}, // __builtin_msa_sll_h
-      {Intrinsic::mips_sll_w, 72531}, // __builtin_msa_sll_w
-      {Intrinsic::mips_slli_b, 72551}, // __builtin_msa_slli_b
-      {Intrinsic::mips_slli_d, 72572}, // __builtin_msa_slli_d
-      {Intrinsic::mips_slli_h, 72593}, // __builtin_msa_slli_h
-      {Intrinsic::mips_slli_w, 72614}, // __builtin_msa_slli_w
-      {Intrinsic::mips_splat_b, 72635}, // __builtin_msa_splat_b
-      {Intrinsic::mips_splat_d, 72657}, // __builtin_msa_splat_d
-      {Intrinsic::mips_splat_h, 72679}, // __builtin_msa_splat_h
-      {Intrinsic::mips_splat_w, 72701}, // __builtin_msa_splat_w
-      {Intrinsic::mips_splati_b, 72723}, // __builtin_msa_splati_b
-      {Intrinsic::mips_splati_d, 72746}, // __builtin_msa_splati_d
-      {Intrinsic::mips_splati_h, 72769}, // __builtin_msa_splati_h
-      {Intrinsic::mips_splati_w, 72792}, // __builtin_msa_splati_w
-      {Intrinsic::mips_sra_b, 72815}, // __builtin_msa_sra_b
-      {Intrinsic::mips_sra_d, 72835}, // __builtin_msa_sra_d
-      {Intrinsic::mips_sra_h, 72855}, // __builtin_msa_sra_h
-      {Intrinsic::mips_sra_w, 72875}, // __builtin_msa_sra_w
-      {Intrinsic::mips_srai_b, 72895}, // __builtin_msa_srai_b
-      {Intrinsic::mips_srai_d, 72916}, // __builtin_msa_srai_d
-      {Intrinsic::mips_srai_h, 72937}, // __builtin_msa_srai_h
-      {Intrinsic::mips_srai_w, 72958}, // __builtin_msa_srai_w
-      {Intrinsic::mips_srar_b, 72979}, // __builtin_msa_srar_b
-      {Intrinsic::mips_srar_d, 73000}, // __builtin_msa_srar_d
-      {Intrinsic::mips_srar_h, 73021}, // __builtin_msa_srar_h
-      {Intrinsic::mips_srar_w, 73042}, // __builtin_msa_srar_w
-      {Intrinsic::mips_srari_b, 73063}, // __builtin_msa_srari_b
-      {Intrinsic::mips_srari_d, 73085}, // __builtin_msa_srari_d
-      {Intrinsic::mips_srari_h, 73107}, // __builtin_msa_srari_h
-      {Intrinsic::mips_srari_w, 73129}, // __builtin_msa_srari_w
-      {Intrinsic::mips_srl_b, 73151}, // __builtin_msa_srl_b
-      {Intrinsic::mips_srl_d, 73171}, // __builtin_msa_srl_d
-      {Intrinsic::mips_srl_h, 73191}, // __builtin_msa_srl_h
-      {Intrinsic::mips_srl_w, 73211}, // __builtin_msa_srl_w
-      {Intrinsic::mips_srli_b, 73231}, // __builtin_msa_srli_b
-      {Intrinsic::mips_srli_d, 73252}, // __builtin_msa_srli_d
-      {Intrinsic::mips_srli_h, 73273}, // __builtin_msa_srli_h
-      {Intrinsic::mips_srli_w, 73294}, // __builtin_msa_srli_w
-      {Intrinsic::mips_srlr_b, 73315}, // __builtin_msa_srlr_b
-      {Intrinsic::mips_srlr_d, 73336}, // __builtin_msa_srlr_d
-      {Intrinsic::mips_srlr_h, 73357}, // __builtin_msa_srlr_h
-      {Intrinsic::mips_srlr_w, 73378}, // __builtin_msa_srlr_w
-      {Intrinsic::mips_srlri_b, 73399}, // __builtin_msa_srlri_b
-      {Intrinsic::mips_srlri_d, 73421}, // __builtin_msa_srlri_d
-      {Intrinsic::mips_srlri_h, 73443}, // __builtin_msa_srlri_h
-      {Intrinsic::mips_srlri_w, 73465}, // __builtin_msa_srlri_w
-      {Intrinsic::mips_st_b, 73487}, // __builtin_msa_st_b
-      {Intrinsic::mips_st_d, 73506}, // __builtin_msa_st_d
-      {Intrinsic::mips_st_h, 73525}, // __builtin_msa_st_h
-      {Intrinsic::mips_st_w, 73544}, // __builtin_msa_st_w
-      {Intrinsic::mips_subs_s_b, 73733}, // __builtin_msa_subs_s_b
-      {Intrinsic::mips_subs_s_d, 73756}, // __builtin_msa_subs_s_d
-      {Intrinsic::mips_subs_s_h, 73779}, // __builtin_msa_subs_s_h
-      {Intrinsic::mips_subs_s_w, 73802}, // __builtin_msa_subs_s_w
-      {Intrinsic::mips_subs_u_b, 73825}, // __builtin_msa_subs_u_b
-      {Intrinsic::mips_subs_u_d, 73848}, // __builtin_msa_subs_u_d
-      {Intrinsic::mips_subs_u_h, 73871}, // __builtin_msa_subs_u_h
-      {Intrinsic::mips_subs_u_w, 73894}, // __builtin_msa_subs_u_w
-      {Intrinsic::mips_subsus_u_b, 73917}, // __builtin_msa_subsus_u_b
-      {Intrinsic::mips_subsus_u_d, 73942}, // __builtin_msa_subsus_u_d
-      {Intrinsic::mips_subsus_u_h, 73967}, // __builtin_msa_subsus_u_h
-      {Intrinsic::mips_subsus_u_w, 73992}, // __builtin_msa_subsus_u_w
-      {Intrinsic::mips_subsuu_s_b, 74017}, // __builtin_msa_subsuu_s_b
-      {Intrinsic::mips_subsuu_s_d, 74042}, // __builtin_msa_subsuu_s_d
-      {Intrinsic::mips_subsuu_s_h, 74067}, // __builtin_msa_subsuu_s_h
-      {Intrinsic::mips_subsuu_s_w, 74092}, // __builtin_msa_subsuu_s_w
-      {Intrinsic::mips_subv_b, 74263}, // __builtin_msa_subv_b
-      {Intrinsic::mips_subv_d, 74284}, // __builtin_msa_subv_d
-      {Intrinsic::mips_subv_h, 74305}, // __builtin_msa_subv_h
-      {Intrinsic::mips_subv_w, 74326}, // __builtin_msa_subv_w
-      {Intrinsic::mips_subvi_b, 74347}, // __builtin_msa_subvi_b
-      {Intrinsic::mips_subvi_d, 74369}, // __builtin_msa_subvi_d
-      {Intrinsic::mips_subvi_h, 74391}, // __builtin_msa_subvi_h
-      {Intrinsic::mips_subvi_w, 74413}, // __builtin_msa_subvi_w
-      {Intrinsic::mips_vshf_b, 74435}, // __builtin_msa_vshf_b
-      {Intrinsic::mips_vshf_d, 74456}, // __builtin_msa_vshf_d
-      {Intrinsic::mips_vshf_h, 74477}, // __builtin_msa_vshf_h
-      {Intrinsic::mips_vshf_w, 74498}, // __builtin_msa_vshf_w
-      {Intrinsic::mips_xor_v, 74540}, // __builtin_msa_xor_v
-      {Intrinsic::mips_xori_b, 74560}, // __builtin_msa_xori_b
+      {Intrinsic::mips_absq_s_ph, 59905}, // __builtin_mips_absq_s_ph
+      {Intrinsic::mips_absq_s_qb, 59930}, // __builtin_mips_absq_s_qb
+      {Intrinsic::mips_absq_s_w, 59955}, // __builtin_mips_absq_s_w
+      {Intrinsic::mips_addq_ph, 60067}, // __builtin_mips_addq_ph
+      {Intrinsic::mips_addq_s_ph, 60090}, // __builtin_mips_addq_s_ph
+      {Intrinsic::mips_addq_s_w, 60115}, // __builtin_mips_addq_s_w
+      {Intrinsic::mips_addqh_ph, 60139}, // __builtin_mips_addqh_ph
+      {Intrinsic::mips_addqh_r_ph, 60163}, // __builtin_mips_addqh_r_ph
+      {Intrinsic::mips_addqh_r_w, 60189}, // __builtin_mips_addqh_r_w
+      {Intrinsic::mips_addqh_w, 60214}, // __builtin_mips_addqh_w
+      {Intrinsic::mips_addsc, 60513}, // __builtin_mips_addsc
+      {Intrinsic::mips_addu_ph, 60534}, // __builtin_mips_addu_ph
+      {Intrinsic::mips_addu_qb, 60557}, // __builtin_mips_addu_qb
+      {Intrinsic::mips_addu_s_ph, 60580}, // __builtin_mips_addu_s_ph
+      {Intrinsic::mips_addu_s_qb, 60605}, // __builtin_mips_addu_s_qb
+      {Intrinsic::mips_adduh_qb, 60630}, // __builtin_mips_adduh_qb
+      {Intrinsic::mips_adduh_r_qb, 60654}, // __builtin_mips_adduh_r_qb
+      {Intrinsic::mips_addwc, 60852}, // __builtin_mips_addwc
+      {Intrinsic::mips_append, 60914}, // __builtin_mips_append
+      {Intrinsic::mips_balign, 61480}, // __builtin_mips_balign
+      {Intrinsic::mips_bitrev, 62034}, // __builtin_mips_bitrev
+      {Intrinsic::mips_bposge32, 62412}, // __builtin_mips_bposge32
+      {Intrinsic::mips_cmp_eq_ph, 63651}, // __builtin_mips_cmp_eq_ph
+      {Intrinsic::mips_cmp_le_ph, 63676}, // __builtin_mips_cmp_le_ph
+      {Intrinsic::mips_cmp_lt_ph, 63701}, // __builtin_mips_cmp_lt_ph
+      {Intrinsic::mips_cmpgdu_eq_qb, 63726}, // __builtin_mips_cmpgdu_eq_qb
+      {Intrinsic::mips_cmpgdu_le_qb, 63754}, // __builtin_mips_cmpgdu_le_qb
+      {Intrinsic::mips_cmpgdu_lt_qb, 63782}, // __builtin_mips_cmpgdu_lt_qb
+      {Intrinsic::mips_cmpgu_eq_qb, 63810}, // __builtin_mips_cmpgu_eq_qb
+      {Intrinsic::mips_cmpgu_le_qb, 63837}, // __builtin_mips_cmpgu_le_qb
+      {Intrinsic::mips_cmpgu_lt_qb, 63864}, // __builtin_mips_cmpgu_lt_qb
+      {Intrinsic::mips_cmpu_eq_qb, 63891}, // __builtin_mips_cmpu_eq_qb
+      {Intrinsic::mips_cmpu_le_qb, 63917}, // __builtin_mips_cmpu_le_qb
+      {Intrinsic::mips_cmpu_lt_qb, 63943}, // __builtin_mips_cmpu_lt_qb
+      {Intrinsic::mips_dlsa, 64350}, // __builtin_mips_dlsa
+      {Intrinsic::mips_dpa_w_ph, 64508}, // __builtin_mips_dpa_w_ph
+      {Intrinsic::mips_dpaq_s_w_ph, 64676}, // __builtin_mips_dpaq_s_w_ph
+      {Intrinsic::mips_dpaq_sa_l_w, 64703}, // __builtin_mips_dpaq_sa_l_w
+      {Intrinsic::mips_dpaqx_s_w_ph, 64730}, // __builtin_mips_dpaqx_s_w_ph
+      {Intrinsic::mips_dpaqx_sa_w_ph, 64758}, // __builtin_mips_dpaqx_sa_w_ph
+      {Intrinsic::mips_dpau_h_qbl, 64787}, // __builtin_mips_dpau_h_qbl
+      {Intrinsic::mips_dpau_h_qbr, 64813}, // __builtin_mips_dpau_h_qbr
+      {Intrinsic::mips_dpax_w_ph, 64839}, // __builtin_mips_dpax_w_ph
+      {Intrinsic::mips_dps_w_ph, 64864}, // __builtin_mips_dps_w_ph
+      {Intrinsic::mips_dpsq_s_w_ph, 64888}, // __builtin_mips_dpsq_s_w_ph
+      {Intrinsic::mips_dpsq_sa_l_w, 64915}, // __builtin_mips_dpsq_sa_l_w
+      {Intrinsic::mips_dpsqx_s_w_ph, 64942}, // __builtin_mips_dpsqx_s_w_ph
+      {Intrinsic::mips_dpsqx_sa_w_ph, 64970}, // __builtin_mips_dpsqx_sa_w_ph
+      {Intrinsic::mips_dpsu_h_qbl, 64999}, // __builtin_mips_dpsu_h_qbl
+      {Intrinsic::mips_dpsu_h_qbr, 65025}, // __builtin_mips_dpsu_h_qbr
+      {Intrinsic::mips_dpsx_w_ph, 65195}, // __builtin_mips_dpsx_w_ph
+      {Intrinsic::mips_extp, 65220}, // __builtin_mips_extp
+      {Intrinsic::mips_extpdp, 65240}, // __builtin_mips_extpdp
+      {Intrinsic::mips_extr_r_w, 65262}, // __builtin_mips_extr_r_w
+      {Intrinsic::mips_extr_rs_w, 65286}, // __builtin_mips_extr_rs_w
+      {Intrinsic::mips_extr_s_h, 65311}, // __builtin_mips_extr_s_h
+      {Intrinsic::mips_extr_w, 65335}, // __builtin_mips_extr_w
+      {Intrinsic::mips_insv, 68387}, // __builtin_mips_insv
+      {Intrinsic::mips_lbux, 68495}, // __builtin_mips_lbux
+      {Intrinsic::mips_lhx, 68671}, // __builtin_mips_lhx
+      {Intrinsic::mips_lsa, 68690}, // __builtin_mips_lsa
+      {Intrinsic::mips_lwx, 68709}, // __builtin_mips_lwx
+      {Intrinsic::mips_madd, 68728}, // __builtin_mips_madd
+      {Intrinsic::mips_maddu, 68842}, // __builtin_mips_maddu
+      {Intrinsic::mips_maq_s_w_phl, 68951}, // __builtin_mips_maq_s_w_phl
+      {Intrinsic::mips_maq_s_w_phr, 68978}, // __builtin_mips_maq_s_w_phr
+      {Intrinsic::mips_maq_sa_w_phl, 69005}, // __builtin_mips_maq_sa_w_phl
+      {Intrinsic::mips_maq_sa_w_phr, 69033}, // __builtin_mips_maq_sa_w_phr
+      {Intrinsic::mips_modsub, 70133}, // __builtin_mips_modsub
+      {Intrinsic::mips_msub, 70176}, // __builtin_mips_msub
+      {Intrinsic::mips_msubu, 70290}, // __builtin_mips_msubu
+      {Intrinsic::mips_mthlip, 70399}, // __builtin_mips_mthlip
+      {Intrinsic::mips_mul_ph, 70421}, // __builtin_mips_mul_ph
+      {Intrinsic::mips_mul_s_ph, 70487}, // __builtin_mips_mul_s_ph
+      {Intrinsic::mips_muleq_s_w_phl, 70511}, // __builtin_mips_muleq_s_w_phl
+      {Intrinsic::mips_muleq_s_w_phr, 70540}, // __builtin_mips_muleq_s_w_phr
+      {Intrinsic::mips_muleu_s_ph_qbl, 70569}, // __builtin_mips_muleu_s_ph_qbl
+      {Intrinsic::mips_muleu_s_ph_qbr, 70599}, // __builtin_mips_muleu_s_ph_qbr
+      {Intrinsic::mips_mulq_rs_ph, 70629}, // __builtin_mips_mulq_rs_ph
+      {Intrinsic::mips_mulq_rs_w, 70655}, // __builtin_mips_mulq_rs_w
+      {Intrinsic::mips_mulq_s_ph, 70680}, // __builtin_mips_mulq_s_ph
+      {Intrinsic::mips_mulq_s_w, 70705}, // __builtin_mips_mulq_s_w
+      {Intrinsic::mips_mulsa_w_ph, 70775}, // __builtin_mips_mulsa_w_ph
+      {Intrinsic::mips_mulsaq_s_w_ph, 70801}, // __builtin_mips_mulsaq_s_w_ph
+      {Intrinsic::mips_mult, 70830}, // __builtin_mips_mult
+      {Intrinsic::mips_multu, 70850}, // __builtin_mips_multu
+      {Intrinsic::mips_packrl_ph, 71203}, // __builtin_mips_packrl_ph
+      {Intrinsic::mips_pick_ph, 71488}, // __builtin_mips_pick_ph
+      {Intrinsic::mips_pick_qb, 71511}, // __builtin_mips_pick_qb
+      {Intrinsic::mips_preceq_w_phl, 71534}, // __builtin_mips_preceq_w_phl
+      {Intrinsic::mips_preceq_w_phr, 71562}, // __builtin_mips_preceq_w_phr
+      {Intrinsic::mips_precequ_ph_qbl, 71590}, // __builtin_mips_precequ_ph_qbl
+      {Intrinsic::mips_precequ_ph_qbla, 71620}, // __builtin_mips_precequ_ph_qbla
+      {Intrinsic::mips_precequ_ph_qbr, 71651}, // __builtin_mips_precequ_ph_qbr
+      {Intrinsic::mips_precequ_ph_qbra, 71681}, // __builtin_mips_precequ_ph_qbra
+      {Intrinsic::mips_preceu_ph_qbl, 71712}, // __builtin_mips_preceu_ph_qbl
+      {Intrinsic::mips_preceu_ph_qbla, 71741}, // __builtin_mips_preceu_ph_qbla
+      {Intrinsic::mips_preceu_ph_qbr, 71771}, // __builtin_mips_preceu_ph_qbr
+      {Intrinsic::mips_preceu_ph_qbra, 71800}, // __builtin_mips_preceu_ph_qbra
+      {Intrinsic::mips_precr_qb_ph, 71830}, // __builtin_mips_precr_qb_ph
+      {Intrinsic::mips_precr_sra_ph_w, 71857}, // __builtin_mips_precr_sra_ph_w
+      {Intrinsic::mips_precr_sra_r_ph_w, 71887}, // __builtin_mips_precr_sra_r_ph_w
+      {Intrinsic::mips_precrq_ph_w, 71919}, // __builtin_mips_precrq_ph_w
+      {Intrinsic::mips_precrq_qb_ph, 71946}, // __builtin_mips_precrq_qb_ph
+      {Intrinsic::mips_precrq_rs_ph_w, 71974}, // __builtin_mips_precrq_rs_ph_w
+      {Intrinsic::mips_precrqu_s_qb_ph, 72004}, // __builtin_mips_precrqu_s_qb_ph
+      {Intrinsic::mips_prepend, 72035}, // __builtin_mips_prepend
+      {Intrinsic::mips_raddu_w_qb, 72058}, // __builtin_mips_raddu_w_qb
+      {Intrinsic::mips_rddsp, 72084}, // __builtin_mips_rddsp
+      {Intrinsic::mips_repl_ph, 72105}, // __builtin_mips_repl_ph
+      {Intrinsic::mips_repl_qb, 72128}, // __builtin_mips_repl_qb
+      {Intrinsic::mips_shilo, 72387}, // __builtin_mips_shilo
+      {Intrinsic::mips_shll_ph, 72408}, // __builtin_mips_shll_ph
+      {Intrinsic::mips_shll_qb, 72431}, // __builtin_mips_shll_qb
+      {Intrinsic::mips_shll_s_ph, 72454}, // __builtin_mips_shll_s_ph
+      {Intrinsic::mips_shll_s_w, 72479}, // __builtin_mips_shll_s_w
+      {Intrinsic::mips_shra_ph, 72503}, // __builtin_mips_shra_ph
+      {Intrinsic::mips_shra_qb, 72526}, // __builtin_mips_shra_qb
+      {Intrinsic::mips_shra_r_ph, 72549}, // __builtin_mips_shra_r_ph
+      {Intrinsic::mips_shra_r_qb, 72574}, // __builtin_mips_shra_r_qb
+      {Intrinsic::mips_shra_r_w, 72599}, // __builtin_mips_shra_r_w
+      {Intrinsic::mips_shrl_ph, 72623}, // __builtin_mips_shrl_ph
+      {Intrinsic::mips_shrl_qb, 72646}, // __builtin_mips_shrl_qb
+      {Intrinsic::mips_subq_ph, 73925}, // __builtin_mips_subq_ph
+      {Intrinsic::mips_subq_s_ph, 73948}, // __builtin_mips_subq_s_ph
+      {Intrinsic::mips_subq_s_w, 73973}, // __builtin_mips_subq_s_w
+      {Intrinsic::mips_subqh_ph, 73997}, // __builtin_mips_subqh_ph
+      {Intrinsic::mips_subqh_r_ph, 74021}, // __builtin_mips_subqh_r_ph
+      {Intrinsic::mips_subqh_r_w, 74047}, // __builtin_mips_subqh_r_w
+      {Intrinsic::mips_subqh_w, 74072}, // __builtin_mips_subqh_w
+      {Intrinsic::mips_subu_ph, 74479}, // __builtin_mips_subu_ph
+      {Intrinsic::mips_subu_qb, 74502}, // __builtin_mips_subu_qb
+      {Intrinsic::mips_subu_s_ph, 74525}, // __builtin_mips_subu_s_ph
+      {Intrinsic::mips_subu_s_qb, 74550}, // __builtin_mips_subu_s_qb
+      {Intrinsic::mips_subuh_qb, 74575}, // __builtin_mips_subuh_qb
+      {Intrinsic::mips_subuh_r_qb, 74599}, // __builtin_mips_subuh_r_qb
+      {Intrinsic::mips_wrdsp, 74881}, // __builtin_mips_wrdsp
+      {Intrinsic::mips_add_a_b, 59979}, // __builtin_msa_add_a_b
+      {Intrinsic::mips_add_a_d, 60001}, // __builtin_msa_add_a_d
+      {Intrinsic::mips_add_a_h, 60023}, // __builtin_msa_add_a_h
+      {Intrinsic::mips_add_a_w, 60045}, // __builtin_msa_add_a_w
+      {Intrinsic::mips_adds_a_b, 60237}, // __builtin_msa_adds_a_b
+      {Intrinsic::mips_adds_a_d, 60260}, // __builtin_msa_adds_a_d
+      {Intrinsic::mips_adds_a_h, 60283}, // __builtin_msa_adds_a_h
+      {Intrinsic::mips_adds_a_w, 60306}, // __builtin_msa_adds_a_w
+      {Intrinsic::mips_adds_s_b, 60329}, // __builtin_msa_adds_s_b
+      {Intrinsic::mips_adds_s_d, 60352}, // __builtin_msa_adds_s_d
+      {Intrinsic::mips_adds_s_h, 60375}, // __builtin_msa_adds_s_h
+      {Intrinsic::mips_adds_s_w, 60398}, // __builtin_msa_adds_s_w
+      {Intrinsic::mips_adds_u_b, 60421}, // __builtin_msa_adds_u_b
+      {Intrinsic::mips_adds_u_d, 60444}, // __builtin_msa_adds_u_d
+      {Intrinsic::mips_adds_u_h, 60467}, // __builtin_msa_adds_u_h
+      {Intrinsic::mips_adds_u_w, 60490}, // __builtin_msa_adds_u_w
+      {Intrinsic::mips_addv_b, 60680}, // __builtin_msa_addv_b
+      {Intrinsic::mips_addv_d, 60701}, // __builtin_msa_addv_d
+      {Intrinsic::mips_addv_h, 60722}, // __builtin_msa_addv_h
+      {Intrinsic::mips_addv_w, 60743}, // __builtin_msa_addv_w
+      {Intrinsic::mips_addvi_b, 60764}, // __builtin_msa_addvi_b
+      {Intrinsic::mips_addvi_d, 60786}, // __builtin_msa_addvi_d
+      {Intrinsic::mips_addvi_h, 60808}, // __builtin_msa_addvi_h
+      {Intrinsic::mips_addvi_w, 60830}, // __builtin_msa_addvi_w
+      {Intrinsic::mips_and_v, 60873}, // __builtin_msa_and_v
+      {Intrinsic::mips_andi_b, 60893}, // __builtin_msa_andi_b
+      {Intrinsic::mips_asub_s_b, 60936}, // __builtin_msa_asub_s_b
+      {Intrinsic::mips_asub_s_d, 60959}, // __builtin_msa_asub_s_d
+      {Intrinsic::mips_asub_s_h, 60982}, // __builtin_msa_asub_s_h
+      {Intrinsic::mips_asub_s_w, 61005}, // __builtin_msa_asub_s_w
+      {Intrinsic::mips_asub_u_b, 61028}, // __builtin_msa_asub_u_b
+      {Intrinsic::mips_asub_u_d, 61051}, // __builtin_msa_asub_u_d
+      {Intrinsic::mips_asub_u_h, 61074}, // __builtin_msa_asub_u_h
+      {Intrinsic::mips_asub_u_w, 61097}, // __builtin_msa_asub_u_w
+      {Intrinsic::mips_ave_s_b, 61120}, // __builtin_msa_ave_s_b
+      {Intrinsic::mips_ave_s_d, 61142}, // __builtin_msa_ave_s_d
+      {Intrinsic::mips_ave_s_h, 61164}, // __builtin_msa_ave_s_h
+      {Intrinsic::mips_ave_s_w, 61186}, // __builtin_msa_ave_s_w
+      {Intrinsic::mips_ave_u_b, 61208}, // __builtin_msa_ave_u_b
+      {Intrinsic::mips_ave_u_d, 61230}, // __builtin_msa_ave_u_d
+      {Intrinsic::mips_ave_u_h, 61252}, // __builtin_msa_ave_u_h
+      {Intrinsic::mips_ave_u_w, 61274}, // __builtin_msa_ave_u_w
+      {Intrinsic::mips_aver_s_b, 61296}, // __builtin_msa_aver_s_b
+      {Intrinsic::mips_aver_s_d, 61319}, // __builtin_msa_aver_s_d
+      {Intrinsic::mips_aver_s_h, 61342}, // __builtin_msa_aver_s_h
+      {Intrinsic::mips_aver_s_w, 61365}, // __builtin_msa_aver_s_w
+      {Intrinsic::mips_aver_u_b, 61388}, // __builtin_msa_aver_u_b
+      {Intrinsic::mips_aver_u_d, 61411}, // __builtin_msa_aver_u_d
+      {Intrinsic::mips_aver_u_h, 61434}, // __builtin_msa_aver_u_h
+      {Intrinsic::mips_aver_u_w, 61457}, // __builtin_msa_aver_u_w
+      {Intrinsic::mips_bclr_b, 61502}, // __builtin_msa_bclr_b
+      {Intrinsic::mips_bclr_d, 61523}, // __builtin_msa_bclr_d
+      {Intrinsic::mips_bclr_h, 61544}, // __builtin_msa_bclr_h
+      {Intrinsic::mips_bclr_w, 61565}, // __builtin_msa_bclr_w
+      {Intrinsic::mips_bclri_b, 61586}, // __builtin_msa_bclri_b
+      {Intrinsic::mips_bclri_d, 61608}, // __builtin_msa_bclri_d
+      {Intrinsic::mips_bclri_h, 61630}, // __builtin_msa_bclri_h
+      {Intrinsic::mips_bclri_w, 61652}, // __builtin_msa_bclri_w
+      {Intrinsic::mips_binsl_b, 61674}, // __builtin_msa_binsl_b
+      {Intrinsic::mips_binsl_d, 61696}, // __builtin_msa_binsl_d
+      {Intrinsic::mips_binsl_h, 61718}, // __builtin_msa_binsl_h
+      {Intrinsic::mips_binsl_w, 61740}, // __builtin_msa_binsl_w
+      {Intrinsic::mips_binsli_b, 61762}, // __builtin_msa_binsli_b
+      {Intrinsic::mips_binsli_d, 61785}, // __builtin_msa_binsli_d
+      {Intrinsic::mips_binsli_h, 61808}, // __builtin_msa_binsli_h
+      {Intrinsic::mips_binsli_w, 61831}, // __builtin_msa_binsli_w
+      {Intrinsic::mips_binsr_b, 61854}, // __builtin_msa_binsr_b
+      {Intrinsic::mips_binsr_d, 61876}, // __builtin_msa_binsr_d
+      {Intrinsic::mips_binsr_h, 61898}, // __builtin_msa_binsr_h
+      {Intrinsic::mips_binsr_w, 61920}, // __builtin_msa_binsr_w
+      {Intrinsic::mips_binsri_b, 61942}, // __builtin_msa_binsri_b
+      {Intrinsic::mips_binsri_d, 61965}, // __builtin_msa_binsri_d
+      {Intrinsic::mips_binsri_h, 61988}, // __builtin_msa_binsri_h
+      {Intrinsic::mips_binsri_w, 62011}, // __builtin_msa_binsri_w
+      {Intrinsic::mips_bmnz_v, 62056}, // __builtin_msa_bmnz_v
+      {Intrinsic::mips_bmnzi_b, 62077}, // __builtin_msa_bmnzi_b
+      {Intrinsic::mips_bmz_v, 62099}, // __builtin_msa_bmz_v
+      {Intrinsic::mips_bmzi_b, 62119}, // __builtin_msa_bmzi_b
+      {Intrinsic::mips_bneg_b, 62140}, // __builtin_msa_bneg_b
+      {Intrinsic::mips_bneg_d, 62161}, // __builtin_msa_bneg_d
+      {Intrinsic::mips_bneg_h, 62182}, // __builtin_msa_bneg_h
+      {Intrinsic::mips_bneg_w, 62203}, // __builtin_msa_bneg_w
+      {Intrinsic::mips_bnegi_b, 62224}, // __builtin_msa_bnegi_b
+      {Intrinsic::mips_bnegi_d, 62246}, // __builtin_msa_bnegi_d
+      {Intrinsic::mips_bnegi_h, 62268}, // __builtin_msa_bnegi_h
+      {Intrinsic::mips_bnegi_w, 62290}, // __builtin_msa_bnegi_w
+      {Intrinsic::mips_bnz_b, 62312}, // __builtin_msa_bnz_b
+      {Intrinsic::mips_bnz_d, 62332}, // __builtin_msa_bnz_d
+      {Intrinsic::mips_bnz_h, 62352}, // __builtin_msa_bnz_h
+      {Intrinsic::mips_bnz_v, 62372}, // __builtin_msa_bnz_v
+      {Intrinsic::mips_bnz_w, 62392}, // __builtin_msa_bnz_w
+      {Intrinsic::mips_bsel_v, 62436}, // __builtin_msa_bsel_v
+      {Intrinsic::mips_bseli_b, 62457}, // __builtin_msa_bseli_b
+      {Intrinsic::mips_bset_b, 62479}, // __builtin_msa_bset_b
+      {Intrinsic::mips_bset_d, 62500}, // __builtin_msa_bset_d
+      {Intrinsic::mips_bset_h, 62521}, // __builtin_msa_bset_h
+      {Intrinsic::mips_bset_w, 62542}, // __builtin_msa_bset_w
+      {Intrinsic::mips_bseti_b, 62563}, // __builtin_msa_bseti_b
+      {Intrinsic::mips_bseti_d, 62585}, // __builtin_msa_bseti_d
+      {Intrinsic::mips_bseti_h, 62607}, // __builtin_msa_bseti_h
+      {Intrinsic::mips_bseti_w, 62629}, // __builtin_msa_bseti_w
+      {Intrinsic::mips_bz_b, 62651}, // __builtin_msa_bz_b
+      {Intrinsic::mips_bz_d, 62670}, // __builtin_msa_bz_d
+      {Intrinsic::mips_bz_h, 62689}, // __builtin_msa_bz_h
+      {Intrinsic::mips_bz_v, 62708}, // __builtin_msa_bz_v
+      {Intrinsic::mips_bz_w, 62727}, // __builtin_msa_bz_w
+      {Intrinsic::mips_ceq_b, 62746}, // __builtin_msa_ceq_b
+      {Intrinsic::mips_ceq_d, 62766}, // __builtin_msa_ceq_d
+      {Intrinsic::mips_ceq_h, 62786}, // __builtin_msa_ceq_h
+      {Intrinsic::mips_ceq_w, 62806}, // __builtin_msa_ceq_w
+      {Intrinsic::mips_ceqi_b, 62826}, // __builtin_msa_ceqi_b
+      {Intrinsic::mips_ceqi_d, 62847}, // __builtin_msa_ceqi_d
+      {Intrinsic::mips_ceqi_h, 62868}, // __builtin_msa_ceqi_h
+      {Intrinsic::mips_ceqi_w, 62889}, // __builtin_msa_ceqi_w
+      {Intrinsic::mips_cfcmsa, 62910}, // __builtin_msa_cfcmsa
+      {Intrinsic::mips_cle_s_b, 62931}, // __builtin_msa_cle_s_b
+      {Intrinsic::mips_cle_s_d, 62953}, // __builtin_msa_cle_s_d
+      {Intrinsic::mips_cle_s_h, 62975}, // __builtin_msa_cle_s_h
+      {Intrinsic::mips_cle_s_w, 62997}, // __builtin_msa_cle_s_w
+      {Intrinsic::mips_cle_u_b, 63019}, // __builtin_msa_cle_u_b
+      {Intrinsic::mips_cle_u_d, 63041}, // __builtin_msa_cle_u_d
+      {Intrinsic::mips_cle_u_h, 63063}, // __builtin_msa_cle_u_h
+      {Intrinsic::mips_cle_u_w, 63085}, // __builtin_msa_cle_u_w
+      {Intrinsic::mips_clei_s_b, 63107}, // __builtin_msa_clei_s_b
+      {Intrinsic::mips_clei_s_d, 63130}, // __builtin_msa_clei_s_d
+      {Intrinsic::mips_clei_s_h, 63153}, // __builtin_msa_clei_s_h
+      {Intrinsic::mips_clei_s_w, 63176}, // __builtin_msa_clei_s_w
+      {Intrinsic::mips_clei_u_b, 63199}, // __builtin_msa_clei_u_b
+      {Intrinsic::mips_clei_u_d, 63222}, // __builtin_msa_clei_u_d
+      {Intrinsic::mips_clei_u_h, 63245}, // __builtin_msa_clei_u_h
+      {Intrinsic::mips_clei_u_w, 63268}, // __builtin_msa_clei_u_w
+      {Intrinsic::mips_clt_s_b, 63291}, // __builtin_msa_clt_s_b
+      {Intrinsic::mips_clt_s_d, 63313}, // __builtin_msa_clt_s_d
+      {Intrinsic::mips_clt_s_h, 63335}, // __builtin_msa_clt_s_h
+      {Intrinsic::mips_clt_s_w, 63357}, // __builtin_msa_clt_s_w
+      {Intrinsic::mips_clt_u_b, 63379}, // __builtin_msa_clt_u_b
+      {Intrinsic::mips_clt_u_d, 63401}, // __builtin_msa_clt_u_d
+      {Intrinsic::mips_clt_u_h, 63423}, // __builtin_msa_clt_u_h
+      {Intrinsic::mips_clt_u_w, 63445}, // __builtin_msa_clt_u_w
+      {Intrinsic::mips_clti_s_b, 63467}, // __builtin_msa_clti_s_b
+      {Intrinsic::mips_clti_s_d, 63490}, // __builtin_msa_clti_s_d
+      {Intrinsic::mips_clti_s_h, 63513}, // __builtin_msa_clti_s_h
+      {Intrinsic::mips_clti_s_w, 63536}, // __builtin_msa_clti_s_w
+      {Intrinsic::mips_clti_u_b, 63559}, // __builtin_msa_clti_u_b
+      {Intrinsic::mips_clti_u_d, 63582}, // __builtin_msa_clti_u_d
+      {Intrinsic::mips_clti_u_h, 63605}, // __builtin_msa_clti_u_h
+      {Intrinsic::mips_clti_u_w, 63628}, // __builtin_msa_clti_u_w
+      {Intrinsic::mips_copy_s_b, 63969}, // __builtin_msa_copy_s_b
+      {Intrinsic::mips_copy_s_d, 63992}, // __builtin_msa_copy_s_d
+      {Intrinsic::mips_copy_s_h, 64015}, // __builtin_msa_copy_s_h
+      {Intrinsic::mips_copy_s_w, 64038}, // __builtin_msa_copy_s_w
+      {Intrinsic::mips_copy_u_b, 64061}, // __builtin_msa_copy_u_b
+      {Intrinsic::mips_copy_u_d, 64084}, // __builtin_msa_copy_u_d
+      {Intrinsic::mips_copy_u_h, 64107}, // __builtin_msa_copy_u_h
+      {Intrinsic::mips_copy_u_w, 64130}, // __builtin_msa_copy_u_w
+      {Intrinsic::mips_ctcmsa, 64153}, // __builtin_msa_ctcmsa
+      {Intrinsic::mips_div_s_b, 64174}, // __builtin_msa_div_s_b
+      {Intrinsic::mips_div_s_d, 64196}, // __builtin_msa_div_s_d
+      {Intrinsic::mips_div_s_h, 64218}, // __builtin_msa_div_s_h
+      {Intrinsic::mips_div_s_w, 64240}, // __builtin_msa_div_s_w
+      {Intrinsic::mips_div_u_b, 64262}, // __builtin_msa_div_u_b
+      {Intrinsic::mips_div_u_d, 64284}, // __builtin_msa_div_u_d
+      {Intrinsic::mips_div_u_h, 64306}, // __builtin_msa_div_u_h
+      {Intrinsic::mips_div_u_w, 64328}, // __builtin_msa_div_u_w
+      {Intrinsic::mips_dotp_s_d, 64370}, // __builtin_msa_dotp_s_d
+      {Intrinsic::mips_dotp_s_h, 64393}, // __builtin_msa_dotp_s_h
+      {Intrinsic::mips_dotp_s_w, 64416}, // __builtin_msa_dotp_s_w
+      {Intrinsic::mips_dotp_u_d, 64439}, // __builtin_msa_dotp_u_d
+      {Intrinsic::mips_dotp_u_h, 64462}, // __builtin_msa_dotp_u_h
+      {Intrinsic::mips_dotp_u_w, 64485}, // __builtin_msa_dotp_u_w
+      {Intrinsic::mips_dpadd_s_d, 64532}, // __builtin_msa_dpadd_s_d
+      {Intrinsic::mips_dpadd_s_h, 64556}, // __builtin_msa_dpadd_s_h
+      {Intrinsic::mips_dpadd_s_w, 64580}, // __builtin_msa_dpadd_s_w
+      {Intrinsic::mips_dpadd_u_d, 64604}, // __builtin_msa_dpadd_u_d
+      {Intrinsic::mips_dpadd_u_h, 64628}, // __builtin_msa_dpadd_u_h
+      {Intrinsic::mips_dpadd_u_w, 64652}, // __builtin_msa_dpadd_u_w
+      {Intrinsic::mips_dpsub_s_d, 65051}, // __builtin_msa_dpsub_s_d
+      {Intrinsic::mips_dpsub_s_h, 65075}, // __builtin_msa_dpsub_s_h
+      {Intrinsic::mips_dpsub_s_w, 65099}, // __builtin_msa_dpsub_s_w
+      {Intrinsic::mips_dpsub_u_d, 65123}, // __builtin_msa_dpsub_u_d
+      {Intrinsic::mips_dpsub_u_h, 65147}, // __builtin_msa_dpsub_u_h
+      {Intrinsic::mips_dpsub_u_w, 65171}, // __builtin_msa_dpsub_u_w
+      {Intrinsic::mips_fadd_d, 65357}, // __builtin_msa_fadd_d
+      {Intrinsic::mips_fadd_w, 65378}, // __builtin_msa_fadd_w
+      {Intrinsic::mips_fcaf_d, 65399}, // __builtin_msa_fcaf_d
+      {Intrinsic::mips_fcaf_w, 65420}, // __builtin_msa_fcaf_w
+      {Intrinsic::mips_fceq_d, 65441}, // __builtin_msa_fceq_d
+      {Intrinsic::mips_fceq_w, 65462}, // __builtin_msa_fceq_w
+      {Intrinsic::mips_fclass_d, 65483}, // __builtin_msa_fclass_d
+      {Intrinsic::mips_fclass_w, 65506}, // __builtin_msa_fclass_w
+      {Intrinsic::mips_fcle_d, 65529}, // __builtin_msa_fcle_d
+      {Intrinsic::mips_fcle_w, 65550}, // __builtin_msa_fcle_w
+      {Intrinsic::mips_fclt_d, 65571}, // __builtin_msa_fclt_d
+      {Intrinsic::mips_fclt_w, 65592}, // __builtin_msa_fclt_w
+      {Intrinsic::mips_fcne_d, 65613}, // __builtin_msa_fcne_d
+      {Intrinsic::mips_fcne_w, 65634}, // __builtin_msa_fcne_w
+      {Intrinsic::mips_fcor_d, 65655}, // __builtin_msa_fcor_d
+      {Intrinsic::mips_fcor_w, 65676}, // __builtin_msa_fcor_w
+      {Intrinsic::mips_fcueq_d, 65697}, // __builtin_msa_fcueq_d
+      {Intrinsic::mips_fcueq_w, 65719}, // __builtin_msa_fcueq_w
+      {Intrinsic::mips_fcule_d, 65741}, // __builtin_msa_fcule_d
+      {Intrinsic::mips_fcule_w, 65763}, // __builtin_msa_fcule_w
+      {Intrinsic::mips_fcult_d, 65785}, // __builtin_msa_fcult_d
+      {Intrinsic::mips_fcult_w, 65807}, // __builtin_msa_fcult_w
+      {Intrinsic::mips_fcun_d, 65829}, // __builtin_msa_fcun_d
+      {Intrinsic::mips_fcun_w, 65850}, // __builtin_msa_fcun_w
+      {Intrinsic::mips_fcune_d, 65871}, // __builtin_msa_fcune_d
+      {Intrinsic::mips_fcune_w, 65893}, // __builtin_msa_fcune_w
+      {Intrinsic::mips_fdiv_d, 65915}, // __builtin_msa_fdiv_d
+      {Intrinsic::mips_fdiv_w, 65936}, // __builtin_msa_fdiv_w
+      {Intrinsic::mips_fexdo_h, 65957}, // __builtin_msa_fexdo_h
+      {Intrinsic::mips_fexdo_w, 65979}, // __builtin_msa_fexdo_w
+      {Intrinsic::mips_fexp2_d, 66001}, // __builtin_msa_fexp2_d
+      {Intrinsic::mips_fexp2_w, 66023}, // __builtin_msa_fexp2_w
+      {Intrinsic::mips_fexupl_d, 66045}, // __builtin_msa_fexupl_d
+      {Intrinsic::mips_fexupl_w, 66068}, // __builtin_msa_fexupl_w
+      {Intrinsic::mips_fexupr_d, 66091}, // __builtin_msa_fexupr_d
+      {Intrinsic::mips_fexupr_w, 66114}, // __builtin_msa_fexupr_w
+      {Intrinsic::mips_ffint_s_d, 66137}, // __builtin_msa_ffint_s_d
+      {Intrinsic::mips_ffint_s_w, 66161}, // __builtin_msa_ffint_s_w
+      {Intrinsic::mips_ffint_u_d, 66185}, // __builtin_msa_ffint_u_d
+      {Intrinsic::mips_ffint_u_w, 66209}, // __builtin_msa_ffint_u_w
+      {Intrinsic::mips_ffql_d, 66233}, // __builtin_msa_ffql_d
+      {Intrinsic::mips_ffql_w, 66254}, // __builtin_msa_ffql_w
+      {Intrinsic::mips_ffqr_d, 66275}, // __builtin_msa_ffqr_d
+      {Intrinsic::mips_ffqr_w, 66296}, // __builtin_msa_ffqr_w
+      {Intrinsic::mips_fill_b, 66317}, // __builtin_msa_fill_b
+      {Intrinsic::mips_fill_d, 66338}, // __builtin_msa_fill_d
+      {Intrinsic::mips_fill_h, 66359}, // __builtin_msa_fill_h
+      {Intrinsic::mips_fill_w, 66380}, // __builtin_msa_fill_w
+      {Intrinsic::mips_flog2_d, 66401}, // __builtin_msa_flog2_d
+      {Intrinsic::mips_flog2_w, 66423}, // __builtin_msa_flog2_w
+      {Intrinsic::mips_fmadd_d, 66445}, // __builtin_msa_fmadd_d
+      {Intrinsic::mips_fmadd_w, 66467}, // __builtin_msa_fmadd_w
+      {Intrinsic::mips_fmax_a_d, 66489}, // __builtin_msa_fmax_a_d
+      {Intrinsic::mips_fmax_a_w, 66512}, // __builtin_msa_fmax_a_w
+      {Intrinsic::mips_fmax_d, 66535}, // __builtin_msa_fmax_d
+      {Intrinsic::mips_fmax_w, 66556}, // __builtin_msa_fmax_w
+      {Intrinsic::mips_fmin_a_d, 66577}, // __builtin_msa_fmin_a_d
+      {Intrinsic::mips_fmin_a_w, 66600}, // __builtin_msa_fmin_a_w
+      {Intrinsic::mips_fmin_d, 66623}, // __builtin_msa_fmin_d
+      {Intrinsic::mips_fmin_w, 66644}, // __builtin_msa_fmin_w
+      {Intrinsic::mips_fmsub_d, 66665}, // __builtin_msa_fmsub_d
+      {Intrinsic::mips_fmsub_w, 66687}, // __builtin_msa_fmsub_w
+      {Intrinsic::mips_fmul_d, 66709}, // __builtin_msa_fmul_d
+      {Intrinsic::mips_fmul_w, 66730}, // __builtin_msa_fmul_w
+      {Intrinsic::mips_frcp_d, 66751}, // __builtin_msa_frcp_d
+      {Intrinsic::mips_frcp_w, 66772}, // __builtin_msa_frcp_w
+      {Intrinsic::mips_frint_d, 66793}, // __builtin_msa_frint_d
+      {Intrinsic::mips_frint_w, 66815}, // __builtin_msa_frint_w
+      {Intrinsic::mips_frsqrt_d, 66837}, // __builtin_msa_frsqrt_d
+      {Intrinsic::mips_frsqrt_w, 66860}, // __builtin_msa_frsqrt_w
+      {Intrinsic::mips_fsaf_d, 66883}, // __builtin_msa_fsaf_d
+      {Intrinsic::mips_fsaf_w, 66904}, // __builtin_msa_fsaf_w
+      {Intrinsic::mips_fseq_d, 66925}, // __builtin_msa_fseq_d
+      {Intrinsic::mips_fseq_w, 66946}, // __builtin_msa_fseq_w
+      {Intrinsic::mips_fsle_d, 66967}, // __builtin_msa_fsle_d
+      {Intrinsic::mips_fsle_w, 66988}, // __builtin_msa_fsle_w
+      {Intrinsic::mips_fslt_d, 67009}, // __builtin_msa_fslt_d
+      {Intrinsic::mips_fslt_w, 67030}, // __builtin_msa_fslt_w
+      {Intrinsic::mips_fsne_d, 67051}, // __builtin_msa_fsne_d
+      {Intrinsic::mips_fsne_w, 67072}, // __builtin_msa_fsne_w
+      {Intrinsic::mips_fsor_d, 67093}, // __builtin_msa_fsor_d
+      {Intrinsic::mips_fsor_w, 67114}, // __builtin_msa_fsor_w
+      {Intrinsic::mips_fsqrt_d, 67135}, // __builtin_msa_fsqrt_d
+      {Intrinsic::mips_fsqrt_w, 67157}, // __builtin_msa_fsqrt_w
+      {Intrinsic::mips_fsub_d, 67179}, // __builtin_msa_fsub_d
+      {Intrinsic::mips_fsub_w, 67200}, // __builtin_msa_fsub_w
+      {Intrinsic::mips_fsueq_d, 67221}, // __builtin_msa_fsueq_d
+      {Intrinsic::mips_fsueq_w, 67243}, // __builtin_msa_fsueq_w
+      {Intrinsic::mips_fsule_d, 67265}, // __builtin_msa_fsule_d
+      {Intrinsic::mips_fsule_w, 67287}, // __builtin_msa_fsule_w
+      {Intrinsic::mips_fsult_d, 67309}, // __builtin_msa_fsult_d
+      {Intrinsic::mips_fsult_w, 67331}, // __builtin_msa_fsult_w
+      {Intrinsic::mips_fsun_d, 67353}, // __builtin_msa_fsun_d
+      {Intrinsic::mips_fsun_w, 67374}, // __builtin_msa_fsun_w
+      {Intrinsic::mips_fsune_d, 67395}, // __builtin_msa_fsune_d
+      {Intrinsic::mips_fsune_w, 67417}, // __builtin_msa_fsune_w
+      {Intrinsic::mips_ftint_s_d, 67439}, // __builtin_msa_ftint_s_d
+      {Intrinsic::mips_ftint_s_w, 67463}, // __builtin_msa_ftint_s_w
+      {Intrinsic::mips_ftint_u_d, 67487}, // __builtin_msa_ftint_u_d
+      {Intrinsic::mips_ftint_u_w, 67511}, // __builtin_msa_ftint_u_w
+      {Intrinsic::mips_ftq_h, 67535}, // __builtin_msa_ftq_h
+      {Intrinsic::mips_ftq_w, 67555}, // __builtin_msa_ftq_w
+      {Intrinsic::mips_ftrunc_s_d, 67575}, // __builtin_msa_ftrunc_s_d
+      {Intrinsic::mips_ftrunc_s_w, 67600}, // __builtin_msa_ftrunc_s_w
+      {Intrinsic::mips_ftrunc_u_d, 67625}, // __builtin_msa_ftrunc_u_d
+      {Intrinsic::mips_ftrunc_u_w, 67650}, // __builtin_msa_ftrunc_u_w
+      {Intrinsic::mips_hadd_s_d, 67675}, // __builtin_msa_hadd_s_d
+      {Intrinsic::mips_hadd_s_h, 67698}, // __builtin_msa_hadd_s_h
+      {Intrinsic::mips_hadd_s_w, 67721}, // __builtin_msa_hadd_s_w
+      {Intrinsic::mips_hadd_u_d, 67744}, // __builtin_msa_hadd_u_d
+      {Intrinsic::mips_hadd_u_h, 67767}, // __builtin_msa_hadd_u_h
+      {Intrinsic::mips_hadd_u_w, 67790}, // __builtin_msa_hadd_u_w
+      {Intrinsic::mips_hsub_s_d, 67813}, // __builtin_msa_hsub_s_d
+      {Intrinsic::mips_hsub_s_h, 67836}, // __builtin_msa_hsub_s_h
+      {Intrinsic::mips_hsub_s_w, 67859}, // __builtin_msa_hsub_s_w
+      {Intrinsic::mips_hsub_u_d, 67882}, // __builtin_msa_hsub_u_d
+      {Intrinsic::mips_hsub_u_h, 67905}, // __builtin_msa_hsub_u_h
+      {Intrinsic::mips_hsub_u_w, 67928}, // __builtin_msa_hsub_u_w
+      {Intrinsic::mips_ilvev_b, 67951}, // __builtin_msa_ilvev_b
+      {Intrinsic::mips_ilvev_d, 67973}, // __builtin_msa_ilvev_d
+      {Intrinsic::mips_ilvev_h, 67995}, // __builtin_msa_ilvev_h
+      {Intrinsic::mips_ilvev_w, 68017}, // __builtin_msa_ilvev_w
+      {Intrinsic::mips_ilvl_b, 68039}, // __builtin_msa_ilvl_b
+      {Intrinsic::mips_ilvl_d, 68060}, // __builtin_msa_ilvl_d
+      {Intrinsic::mips_ilvl_h, 68081}, // __builtin_msa_ilvl_h
+      {Intrinsic::mips_ilvl_w, 68102}, // __builtin_msa_ilvl_w
+      {Intrinsic::mips_ilvod_b, 68123}, // __builtin_msa_ilvod_b
+      {Intrinsic::mips_ilvod_d, 68145}, // __builtin_msa_ilvod_d
+      {Intrinsic::mips_ilvod_h, 68167}, // __builtin_msa_ilvod_h
+      {Intrinsic::mips_ilvod_w, 68189}, // __builtin_msa_ilvod_w
+      {Intrinsic::mips_ilvr_b, 68211}, // __builtin_msa_ilvr_b
+      {Intrinsic::mips_ilvr_d, 68232}, // __builtin_msa_ilvr_d
+      {Intrinsic::mips_ilvr_h, 68253}, // __builtin_msa_ilvr_h
+      {Intrinsic::mips_ilvr_w, 68274}, // __builtin_msa_ilvr_w
+      {Intrinsic::mips_insert_b, 68295}, // __builtin_msa_insert_b
+      {Intrinsic::mips_insert_d, 68318}, // __builtin_msa_insert_d
+      {Intrinsic::mips_insert_h, 68341}, // __builtin_msa_insert_h
+      {Intrinsic::mips_insert_w, 68364}, // __builtin_msa_insert_w
+      {Intrinsic::mips_insve_b, 68407}, // __builtin_msa_insve_b
+      {Intrinsic::mips_insve_d, 68429}, // __builtin_msa_insve_d
+      {Intrinsic::mips_insve_h, 68451}, // __builtin_msa_insve_h
+      {Intrinsic::mips_insve_w, 68473}, // __builtin_msa_insve_w
+      {Intrinsic::mips_ld_b, 68515}, // __builtin_msa_ld_b
+      {Intrinsic::mips_ld_d, 68534}, // __builtin_msa_ld_d
+      {Intrinsic::mips_ld_h, 68553}, // __builtin_msa_ld_h
+      {Intrinsic::mips_ld_w, 68572}, // __builtin_msa_ld_w
+      {Intrinsic::mips_ldi_b, 68591}, // __builtin_msa_ldi_b
+      {Intrinsic::mips_ldi_d, 68611}, // __builtin_msa_ldi_d
+      {Intrinsic::mips_ldi_h, 68631}, // __builtin_msa_ldi_h
+      {Intrinsic::mips_ldi_w, 68651}, // __builtin_msa_ldi_w
+      {Intrinsic::mips_madd_q_h, 68748}, // __builtin_msa_madd_q_h
+      {Intrinsic::mips_madd_q_w, 68771}, // __builtin_msa_madd_q_w
+      {Intrinsic::mips_maddr_q_h, 68794}, // __builtin_msa_maddr_q_h
+      {Intrinsic::mips_maddr_q_w, 68818}, // __builtin_msa_maddr_q_w
+      {Intrinsic::mips_maddv_b, 68863}, // __builtin_msa_maddv_b
+      {Intrinsic::mips_maddv_d, 68885}, // __builtin_msa_maddv_d
+      {Intrinsic::mips_maddv_h, 68907}, // __builtin_msa_maddv_h
+      {Intrinsic::mips_maddv_w, 68929}, // __builtin_msa_maddv_w
+      {Intrinsic::mips_max_a_b, 69061}, // __builtin_msa_max_a_b
+      {Intrinsic::mips_max_a_d, 69083}, // __builtin_msa_max_a_d
+      {Intrinsic::mips_max_a_h, 69105}, // __builtin_msa_max_a_h
+      {Intrinsic::mips_max_a_w, 69127}, // __builtin_msa_max_a_w
+      {Intrinsic::mips_max_s_b, 69149}, // __builtin_msa_max_s_b
+      {Intrinsic::mips_max_s_d, 69171}, // __builtin_msa_max_s_d
+      {Intrinsic::mips_max_s_h, 69193}, // __builtin_msa_max_s_h
+      {Intrinsic::mips_max_s_w, 69215}, // __builtin_msa_max_s_w
+      {Intrinsic::mips_max_u_b, 69237}, // __builtin_msa_max_u_b
+      {Intrinsic::mips_max_u_d, 69259}, // __builtin_msa_max_u_d
+      {Intrinsic::mips_max_u_h, 69281}, // __builtin_msa_max_u_h
+      {Intrinsic::mips_max_u_w, 69303}, // __builtin_msa_max_u_w
+      {Intrinsic::mips_maxi_s_b, 69325}, // __builtin_msa_maxi_s_b
+      {Intrinsic::mips_maxi_s_d, 69348}, // __builtin_msa_maxi_s_d
+      {Intrinsic::mips_maxi_s_h, 69371}, // __builtin_msa_maxi_s_h
+      {Intrinsic::mips_maxi_s_w, 69394}, // __builtin_msa_maxi_s_w
+      {Intrinsic::mips_maxi_u_b, 69417}, // __builtin_msa_maxi_u_b
+      {Intrinsic::mips_maxi_u_d, 69440}, // __builtin_msa_maxi_u_d
+      {Intrinsic::mips_maxi_u_h, 69463}, // __builtin_msa_maxi_u_h
+      {Intrinsic::mips_maxi_u_w, 69486}, // __builtin_msa_maxi_u_w
+      {Intrinsic::mips_min_a_b, 69509}, // __builtin_msa_min_a_b
+      {Intrinsic::mips_min_a_d, 69531}, // __builtin_msa_min_a_d
+      {Intrinsic::mips_min_a_h, 69553}, // __builtin_msa_min_a_h
+      {Intrinsic::mips_min_a_w, 69575}, // __builtin_msa_min_a_w
+      {Intrinsic::mips_min_s_b, 69597}, // __builtin_msa_min_s_b
+      {Intrinsic::mips_min_s_d, 69619}, // __builtin_msa_min_s_d
+      {Intrinsic::mips_min_s_h, 69641}, // __builtin_msa_min_s_h
+      {Intrinsic::mips_min_s_w, 69663}, // __builtin_msa_min_s_w
+      {Intrinsic::mips_min_u_b, 69685}, // __builtin_msa_min_u_b
+      {Intrinsic::mips_min_u_d, 69707}, // __builtin_msa_min_u_d
+      {Intrinsic::mips_min_u_h, 69729}, // __builtin_msa_min_u_h
+      {Intrinsic::mips_min_u_w, 69751}, // __builtin_msa_min_u_w
+      {Intrinsic::mips_mini_s_b, 69773}, // __builtin_msa_mini_s_b
+      {Intrinsic::mips_mini_s_d, 69796}, // __builtin_msa_mini_s_d
+      {Intrinsic::mips_mini_s_h, 69819}, // __builtin_msa_mini_s_h
+      {Intrinsic::mips_mini_s_w, 69842}, // __builtin_msa_mini_s_w
+      {Intrinsic::mips_mini_u_b, 69865}, // __builtin_msa_mini_u_b
+      {Intrinsic::mips_mini_u_d, 69888}, // __builtin_msa_mini_u_d
+      {Intrinsic::mips_mini_u_h, 69911}, // __builtin_msa_mini_u_h
+      {Intrinsic::mips_mini_u_w, 69934}, // __builtin_msa_mini_u_w
+      {Intrinsic::mips_mod_s_b, 69957}, // __builtin_msa_mod_s_b
+      {Intrinsic::mips_mod_s_d, 69979}, // __builtin_msa_mod_s_d
+      {Intrinsic::mips_mod_s_h, 70001}, // __builtin_msa_mod_s_h
+      {Intrinsic::mips_mod_s_w, 70023}, // __builtin_msa_mod_s_w
+      {Intrinsic::mips_mod_u_b, 70045}, // __builtin_msa_mod_u_b
+      {Intrinsic::mips_mod_u_d, 70067}, // __builtin_msa_mod_u_d
+      {Intrinsic::mips_mod_u_h, 70089}, // __builtin_msa_mod_u_h
+      {Intrinsic::mips_mod_u_w, 70111}, // __builtin_msa_mod_u_w
+      {Intrinsic::mips_move_v, 70155}, // __builtin_msa_move_v
+      {Intrinsic::mips_msub_q_h, 70196}, // __builtin_msa_msub_q_h
+      {Intrinsic::mips_msub_q_w, 70219}, // __builtin_msa_msub_q_w
+      {Intrinsic::mips_msubr_q_h, 70242}, // __builtin_msa_msubr_q_h
+      {Intrinsic::mips_msubr_q_w, 70266}, // __builtin_msa_msubr_q_w
+      {Intrinsic::mips_msubv_b, 70311}, // __builtin_msa_msubv_b
+      {Intrinsic::mips_msubv_d, 70333}, // __builtin_msa_msubv_d
+      {Intrinsic::mips_msubv_h, 70355}, // __builtin_msa_msubv_h
+      {Intrinsic::mips_msubv_w, 70377}, // __builtin_msa_msubv_w
+      {Intrinsic::mips_mul_q_h, 70443}, // __builtin_msa_mul_q_h
+      {Intrinsic::mips_mul_q_w, 70465}, // __builtin_msa_mul_q_w
+      {Intrinsic::mips_mulr_q_h, 70729}, // __builtin_msa_mulr_q_h
+      {Intrinsic::mips_mulr_q_w, 70752}, // __builtin_msa_mulr_q_w
+      {Intrinsic::mips_mulv_b, 70871}, // __builtin_msa_mulv_b
+      {Intrinsic::mips_mulv_d, 70892}, // __builtin_msa_mulv_d
+      {Intrinsic::mips_mulv_h, 70913}, // __builtin_msa_mulv_h
+      {Intrinsic::mips_mulv_w, 70934}, // __builtin_msa_mulv_w
+      {Intrinsic::mips_nloc_b, 70955}, // __builtin_msa_nloc_b
+      {Intrinsic::mips_nloc_d, 70976}, // __builtin_msa_nloc_d
+      {Intrinsic::mips_nloc_h, 70997}, // __builtin_msa_nloc_h
+      {Intrinsic::mips_nloc_w, 71018}, // __builtin_msa_nloc_w
+      {Intrinsic::mips_nlzc_b, 71039}, // __builtin_msa_nlzc_b
+      {Intrinsic::mips_nlzc_d, 71060}, // __builtin_msa_nlzc_d
+      {Intrinsic::mips_nlzc_h, 71081}, // __builtin_msa_nlzc_h
+      {Intrinsic::mips_nlzc_w, 71102}, // __builtin_msa_nlzc_w
+      {Intrinsic::mips_nor_v, 71123}, // __builtin_msa_nor_v
+      {Intrinsic::mips_nori_b, 71143}, // __builtin_msa_nori_b
+      {Intrinsic::mips_or_v, 71164}, // __builtin_msa_or_v
+      {Intrinsic::mips_ori_b, 71183}, // __builtin_msa_ori_b
+      {Intrinsic::mips_pckev_b, 71228}, // __builtin_msa_pckev_b
+      {Intrinsic::mips_pckev_d, 71250}, // __builtin_msa_pckev_d
+      {Intrinsic::mips_pckev_h, 71272}, // __builtin_msa_pckev_h
+      {Intrinsic::mips_pckev_w, 71294}, // __builtin_msa_pckev_w
+      {Intrinsic::mips_pckod_b, 71316}, // __builtin_msa_pckod_b
+      {Intrinsic::mips_pckod_d, 71338}, // __builtin_msa_pckod_d
+      {Intrinsic::mips_pckod_h, 71360}, // __builtin_msa_pckod_h
+      {Intrinsic::mips_pckod_w, 71382}, // __builtin_msa_pckod_w
+      {Intrinsic::mips_pcnt_b, 71404}, // __builtin_msa_pcnt_b
+      {Intrinsic::mips_pcnt_d, 71425}, // __builtin_msa_pcnt_d
+      {Intrinsic::mips_pcnt_h, 71446}, // __builtin_msa_pcnt_h
+      {Intrinsic::mips_pcnt_w, 71467}, // __builtin_msa_pcnt_w
+      {Intrinsic::mips_sat_s_b, 72151}, // __builtin_msa_sat_s_b
+      {Intrinsic::mips_sat_s_d, 72173}, // __builtin_msa_sat_s_d
+      {Intrinsic::mips_sat_s_h, 72195}, // __builtin_msa_sat_s_h
+      {Intrinsic::mips_sat_s_w, 72217}, // __builtin_msa_sat_s_w
+      {Intrinsic::mips_sat_u_b, 72239}, // __builtin_msa_sat_u_b
+      {Intrinsic::mips_sat_u_d, 72261}, // __builtin_msa_sat_u_d
+      {Intrinsic::mips_sat_u_h, 72283}, // __builtin_msa_sat_u_h
+      {Intrinsic::mips_sat_u_w, 72305}, // __builtin_msa_sat_u_w
+      {Intrinsic::mips_shf_b, 72327}, // __builtin_msa_shf_b
+      {Intrinsic::mips_shf_h, 72347}, // __builtin_msa_shf_h
+      {Intrinsic::mips_shf_w, 72367}, // __builtin_msa_shf_w
+      {Intrinsic::mips_sld_b, 72669}, // __builtin_msa_sld_b
+      {Intrinsic::mips_sld_d, 72689}, // __builtin_msa_sld_d
+      {Intrinsic::mips_sld_h, 72709}, // __builtin_msa_sld_h
+      {Intrinsic::mips_sld_w, 72729}, // __builtin_msa_sld_w
+      {Intrinsic::mips_sldi_b, 72749}, // __builtin_msa_sldi_b
+      {Intrinsic::mips_sldi_d, 72770}, // __builtin_msa_sldi_d
+      {Intrinsic::mips_sldi_h, 72791}, // __builtin_msa_sldi_h
+      {Intrinsic::mips_sldi_w, 72812}, // __builtin_msa_sldi_w
+      {Intrinsic::mips_sll_b, 72833}, // __builtin_msa_sll_b
+      {Intrinsic::mips_sll_d, 72853}, // __builtin_msa_sll_d
+      {Intrinsic::mips_sll_h, 72873}, // __builtin_msa_sll_h
+      {Intrinsic::mips_sll_w, 72893}, // __builtin_msa_sll_w
+      {Intrinsic::mips_slli_b, 72913}, // __builtin_msa_slli_b
+      {Intrinsic::mips_slli_d, 72934}, // __builtin_msa_slli_d
+      {Intrinsic::mips_slli_h, 72955}, // __builtin_msa_slli_h
+      {Intrinsic::mips_slli_w, 72976}, // __builtin_msa_slli_w
+      {Intrinsic::mips_splat_b, 72997}, // __builtin_msa_splat_b
+      {Intrinsic::mips_splat_d, 73019}, // __builtin_msa_splat_d
+      {Intrinsic::mips_splat_h, 73041}, // __builtin_msa_splat_h
+      {Intrinsic::mips_splat_w, 73063}, // __builtin_msa_splat_w
+      {Intrinsic::mips_splati_b, 73085}, // __builtin_msa_splati_b
+      {Intrinsic::mips_splati_d, 73108}, // __builtin_msa_splati_d
+      {Intrinsic::mips_splati_h, 73131}, // __builtin_msa_splati_h
+      {Intrinsic::mips_splati_w, 73154}, // __builtin_msa_splati_w
+      {Intrinsic::mips_sra_b, 73177}, // __builtin_msa_sra_b
+      {Intrinsic::mips_sra_d, 73197}, // __builtin_msa_sra_d
+      {Intrinsic::mips_sra_h, 73217}, // __builtin_msa_sra_h
+      {Intrinsic::mips_sra_w, 73237}, // __builtin_msa_sra_w
+      {Intrinsic::mips_srai_b, 73257}, // __builtin_msa_srai_b
+      {Intrinsic::mips_srai_d, 73278}, // __builtin_msa_srai_d
+      {Intrinsic::mips_srai_h, 73299}, // __builtin_msa_srai_h
+      {Intrinsic::mips_srai_w, 73320}, // __builtin_msa_srai_w
+      {Intrinsic::mips_srar_b, 73341}, // __builtin_msa_srar_b
+      {Intrinsic::mips_srar_d, 73362}, // __builtin_msa_srar_d
+      {Intrinsic::mips_srar_h, 73383}, // __builtin_msa_srar_h
+      {Intrinsic::mips_srar_w, 73404}, // __builtin_msa_srar_w
+      {Intrinsic::mips_srari_b, 73425}, // __builtin_msa_srari_b
+      {Intrinsic::mips_srari_d, 73447}, // __builtin_msa_srari_d
+      {Intrinsic::mips_srari_h, 73469}, // __builtin_msa_srari_h
+      {Intrinsic::mips_srari_w, 73491}, // __builtin_msa_srari_w
+      {Intrinsic::mips_srl_b, 73513}, // __builtin_msa_srl_b
+      {Intrinsic::mips_srl_d, 73533}, // __builtin_msa_srl_d
+      {Intrinsic::mips_srl_h, 73553}, // __builtin_msa_srl_h
+      {Intrinsic::mips_srl_w, 73573}, // __builtin_msa_srl_w
+      {Intrinsic::mips_srli_b, 73593}, // __builtin_msa_srli_b
+      {Intrinsic::mips_srli_d, 73614}, // __builtin_msa_srli_d
+      {Intrinsic::mips_srli_h, 73635}, // __builtin_msa_srli_h
+      {Intrinsic::mips_srli_w, 73656}, // __builtin_msa_srli_w
+      {Intrinsic::mips_srlr_b, 73677}, // __builtin_msa_srlr_b
+      {Intrinsic::mips_srlr_d, 73698}, // __builtin_msa_srlr_d
+      {Intrinsic::mips_srlr_h, 73719}, // __builtin_msa_srlr_h
+      {Intrinsic::mips_srlr_w, 73740}, // __builtin_msa_srlr_w
+      {Intrinsic::mips_srlri_b, 73761}, // __builtin_msa_srlri_b
+      {Intrinsic::mips_srlri_d, 73783}, // __builtin_msa_srlri_d
+      {Intrinsic::mips_srlri_h, 73805}, // __builtin_msa_srlri_h
+      {Intrinsic::mips_srlri_w, 73827}, // __builtin_msa_srlri_w
+      {Intrinsic::mips_st_b, 73849}, // __builtin_msa_st_b
+      {Intrinsic::mips_st_d, 73868}, // __builtin_msa_st_d
+      {Intrinsic::mips_st_h, 73887}, // __builtin_msa_st_h
+      {Intrinsic::mips_st_w, 73906}, // __builtin_msa_st_w
+      {Intrinsic::mips_subs_s_b, 74095}, // __builtin_msa_subs_s_b
+      {Intrinsic::mips_subs_s_d, 74118}, // __builtin_msa_subs_s_d
+      {Intrinsic::mips_subs_s_h, 74141}, // __builtin_msa_subs_s_h
+      {Intrinsic::mips_subs_s_w, 74164}, // __builtin_msa_subs_s_w
+      {Intrinsic::mips_subs_u_b, 74187}, // __builtin_msa_subs_u_b
+      {Intrinsic::mips_subs_u_d, 74210}, // __builtin_msa_subs_u_d
+      {Intrinsic::mips_subs_u_h, 74233}, // __builtin_msa_subs_u_h
+      {Intrinsic::mips_subs_u_w, 74256}, // __builtin_msa_subs_u_w
+      {Intrinsic::mips_subsus_u_b, 74279}, // __builtin_msa_subsus_u_b
+      {Intrinsic::mips_subsus_u_d, 74304}, // __builtin_msa_subsus_u_d
+      {Intrinsic::mips_subsus_u_h, 74329}, // __builtin_msa_subsus_u_h
+      {Intrinsic::mips_subsus_u_w, 74354}, // __builtin_msa_subsus_u_w
+      {Intrinsic::mips_subsuu_s_b, 74379}, // __builtin_msa_subsuu_s_b
+      {Intrinsic::mips_subsuu_s_d, 74404}, // __builtin_msa_subsuu_s_d
+      {Intrinsic::mips_subsuu_s_h, 74429}, // __builtin_msa_subsuu_s_h
+      {Intrinsic::mips_subsuu_s_w, 74454}, // __builtin_msa_subsuu_s_w
+      {Intrinsic::mips_subv_b, 74625}, // __builtin_msa_subv_b
+      {Intrinsic::mips_subv_d, 74646}, // __builtin_msa_subv_d
+      {Intrinsic::mips_subv_h, 74667}, // __builtin_msa_subv_h
+      {Intrinsic::mips_subv_w, 74688}, // __builtin_msa_subv_w
+      {Intrinsic::mips_subvi_b, 74709}, // __builtin_msa_subvi_b
+      {Intrinsic::mips_subvi_d, 74731}, // __builtin_msa_subvi_d
+      {Intrinsic::mips_subvi_h, 74753}, // __builtin_msa_subvi_h
+      {Intrinsic::mips_subvi_w, 74775}, // __builtin_msa_subvi_w
+      {Intrinsic::mips_vshf_b, 74797}, // __builtin_msa_vshf_b
+      {Intrinsic::mips_vshf_d, 74818}, // __builtin_msa_vshf_d
+      {Intrinsic::mips_vshf_h, 74839}, // __builtin_msa_vshf_h
+      {Intrinsic::mips_vshf_w, 74860}, // __builtin_msa_vshf_w
+      {Intrinsic::mips_xor_v, 74902}, // __builtin_msa_xor_v
+      {Intrinsic::mips_xori_b, 74922}, // __builtin_msa_xori_b
     };
     auto I = std::lower_bound(std::begin(mipsNames),
                               std::end(mipsNames),
@@ -27376,568 +29106,568 @@
   }
   if (TargetPrefix == "nvvm") {
     static const BuiltinEntry nvvmNames[] = {
-      {Intrinsic::nvvm_add_rm_d, 74581}, // __nvvm_add_rm_d
-      {Intrinsic::nvvm_add_rm_f, 74597}, // __nvvm_add_rm_f
-      {Intrinsic::nvvm_add_rm_ftz_f, 74613}, // __nvvm_add_rm_ftz_f
-      {Intrinsic::nvvm_add_rn_d, 74633}, // __nvvm_add_rn_d
-      {Intrinsic::nvvm_add_rn_f, 74649}, // __nvvm_add_rn_f
-      {Intrinsic::nvvm_add_rn_ftz_f, 74665}, // __nvvm_add_rn_ftz_f
-      {Intrinsic::nvvm_add_rp_d, 74685}, // __nvvm_add_rp_d
-      {Intrinsic::nvvm_add_rp_f, 74701}, // __nvvm_add_rp_f
-      {Intrinsic::nvvm_add_rp_ftz_f, 74717}, // __nvvm_add_rp_ftz_f
-      {Intrinsic::nvvm_add_rz_d, 74737}, // __nvvm_add_rz_d
-      {Intrinsic::nvvm_add_rz_f, 74753}, // __nvvm_add_rz_f
-      {Intrinsic::nvvm_add_rz_ftz_f, 74769}, // __nvvm_add_rz_ftz_f
-      {Intrinsic::nvvm_barrier, 74826}, // __nvvm_bar
-      {Intrinsic::nvvm_barrier0_and, 74908}, // __nvvm_bar0_and
-      {Intrinsic::nvvm_barrier0_or, 74924}, // __nvvm_bar0_or
-      {Intrinsic::nvvm_barrier0_popc, 74939}, // __nvvm_bar0_popc
-      {Intrinsic::nvvm_barrier_n, 74837}, // __nvvm_bar_n
-      {Intrinsic::nvvm_bar_sync, 74789}, // __nvvm_bar_sync
-      {Intrinsic::nvvm_bar_warp_sync, 74805}, // __nvvm_bar_warp_sync
-      {Intrinsic::nvvm_barrier_sync, 74850}, // __nvvm_barrier_sync
-      {Intrinsic::nvvm_barrier_sync_cnt, 74870}, // __nvvm_barrier_sync_cnt
-      {Intrinsic::nvvm_bitcast_d2ll, 74956}, // __nvvm_bitcast_d2ll
-      {Intrinsic::nvvm_bitcast_f2i, 74976}, // __nvvm_bitcast_f2i
-      {Intrinsic::nvvm_bitcast_i2f, 74995}, // __nvvm_bitcast_i2f
-      {Intrinsic::nvvm_bitcast_ll2d, 75014}, // __nvvm_bitcast_ll2d
-      {Intrinsic::nvvm_ceil_d, 75034}, // __nvvm_ceil_d
-      {Intrinsic::nvvm_ceil_f, 75048}, // __nvvm_ceil_f
-      {Intrinsic::nvvm_ceil_ftz_f, 75062}, // __nvvm_ceil_ftz_f
-      {Intrinsic::nvvm_cos_approx_f, 75080}, // __nvvm_cos_approx_f
-      {Intrinsic::nvvm_cos_approx_ftz_f, 75100}, // __nvvm_cos_approx_ftz_f
-      {Intrinsic::nvvm_d2f_rm, 75124}, // __nvvm_d2f_rm
-      {Intrinsic::nvvm_d2f_rm_ftz, 75138}, // __nvvm_d2f_rm_ftz
-      {Intrinsic::nvvm_d2f_rn, 75156}, // __nvvm_d2f_rn
-      {Intrinsic::nvvm_d2f_rn_ftz, 75170}, // __nvvm_d2f_rn_ftz
-      {Intrinsic::nvvm_d2f_rp, 75188}, // __nvvm_d2f_rp
-      {Intrinsic::nvvm_d2f_rp_ftz, 75202}, // __nvvm_d2f_rp_ftz
-      {Intrinsic::nvvm_d2f_rz, 75220}, // __nvvm_d2f_rz
-      {Intrinsic::nvvm_d2f_rz_ftz, 75234}, // __nvvm_d2f_rz_ftz
-      {Intrinsic::nvvm_d2i_hi, 75252}, // __nvvm_d2i_hi
-      {Intrinsic::nvvm_d2i_lo, 75266}, // __nvvm_d2i_lo
-      {Intrinsic::nvvm_d2i_rm, 75280}, // __nvvm_d2i_rm
-      {Intrinsic::nvvm_d2i_rn, 75294}, // __nvvm_d2i_rn
-      {Intrinsic::nvvm_d2i_rp, 75308}, // __nvvm_d2i_rp
-      {Intrinsic::nvvm_d2i_rz, 75322}, // __nvvm_d2i_rz
-      {Intrinsic::nvvm_d2ll_rm, 75336}, // __nvvm_d2ll_rm
-      {Intrinsic::nvvm_d2ll_rn, 75351}, // __nvvm_d2ll_rn
-      {Intrinsic::nvvm_d2ll_rp, 75366}, // __nvvm_d2ll_rp
-      {Intrinsic::nvvm_d2ll_rz, 75381}, // __nvvm_d2ll_rz
-      {Intrinsic::nvvm_d2ui_rm, 75396}, // __nvvm_d2ui_rm
-      {Intrinsic::nvvm_d2ui_rn, 75411}, // __nvvm_d2ui_rn
-      {Intrinsic::nvvm_d2ui_rp, 75426}, // __nvvm_d2ui_rp
-      {Intrinsic::nvvm_d2ui_rz, 75441}, // __nvvm_d2ui_rz
-      {Intrinsic::nvvm_d2ull_rm, 75456}, // __nvvm_d2ull_rm
-      {Intrinsic::nvvm_d2ull_rn, 75472}, // __nvvm_d2ull_rn
-      {Intrinsic::nvvm_d2ull_rp, 75488}, // __nvvm_d2ull_rp
-      {Intrinsic::nvvm_d2ull_rz, 75504}, // __nvvm_d2ull_rz
-      {Intrinsic::nvvm_div_approx_f, 75520}, // __nvvm_div_approx_f
-      {Intrinsic::nvvm_div_approx_ftz_f, 75540}, // __nvvm_div_approx_ftz_f
-      {Intrinsic::nvvm_div_rm_d, 75564}, // __nvvm_div_rm_d
-      {Intrinsic::nvvm_div_rm_f, 75580}, // __nvvm_div_rm_f
-      {Intrinsic::nvvm_div_rm_ftz_f, 75596}, // __nvvm_div_rm_ftz_f
-      {Intrinsic::nvvm_div_rn_d, 75616}, // __nvvm_div_rn_d
-      {Intrinsic::nvvm_div_rn_f, 75632}, // __nvvm_div_rn_f
-      {Intrinsic::nvvm_div_rn_ftz_f, 75648}, // __nvvm_div_rn_ftz_f
-      {Intrinsic::nvvm_div_rp_d, 75668}, // __nvvm_div_rp_d
-      {Intrinsic::nvvm_div_rp_f, 75684}, // __nvvm_div_rp_f
-      {Intrinsic::nvvm_div_rp_ftz_f, 75700}, // __nvvm_div_rp_ftz_f
-      {Intrinsic::nvvm_div_rz_d, 75720}, // __nvvm_div_rz_d
-      {Intrinsic::nvvm_div_rz_f, 75736}, // __nvvm_div_rz_f
-      {Intrinsic::nvvm_div_rz_ftz_f, 75752}, // __nvvm_div_rz_ftz_f
-      {Intrinsic::nvvm_ex2_approx_d, 75772}, // __nvvm_ex2_approx_d
-      {Intrinsic::nvvm_ex2_approx_f, 75792}, // __nvvm_ex2_approx_f
-      {Intrinsic::nvvm_ex2_approx_ftz_f, 75812}, // __nvvm_ex2_approx_ftz_f
-      {Intrinsic::nvvm_f2h_rn, 75836}, // __nvvm_f2h_rn
-      {Intrinsic::nvvm_f2h_rn_ftz, 75850}, // __nvvm_f2h_rn_ftz
-      {Intrinsic::nvvm_f2i_rm, 75868}, // __nvvm_f2i_rm
-      {Intrinsic::nvvm_f2i_rm_ftz, 75882}, // __nvvm_f2i_rm_ftz
-      {Intrinsic::nvvm_f2i_rn, 75900}, // __nvvm_f2i_rn
-      {Intrinsic::nvvm_f2i_rn_ftz, 75914}, // __nvvm_f2i_rn_ftz
-      {Intrinsic::nvvm_f2i_rp, 75932}, // __nvvm_f2i_rp
-      {Intrinsic::nvvm_f2i_rp_ftz, 75946}, // __nvvm_f2i_rp_ftz
-      {Intrinsic::nvvm_f2i_rz, 75964}, // __nvvm_f2i_rz
-      {Intrinsic::nvvm_f2i_rz_ftz, 75978}, // __nvvm_f2i_rz_ftz
-      {Intrinsic::nvvm_f2ll_rm, 75996}, // __nvvm_f2ll_rm
-      {Intrinsic::nvvm_f2ll_rm_ftz, 76011}, // __nvvm_f2ll_rm_ftz
-      {Intrinsic::nvvm_f2ll_rn, 76030}, // __nvvm_f2ll_rn
-      {Intrinsic::nvvm_f2ll_rn_ftz, 76045}, // __nvvm_f2ll_rn_ftz
-      {Intrinsic::nvvm_f2ll_rp, 76064}, // __nvvm_f2ll_rp
-      {Intrinsic::nvvm_f2ll_rp_ftz, 76079}, // __nvvm_f2ll_rp_ftz
-      {Intrinsic::nvvm_f2ll_rz, 76098}, // __nvvm_f2ll_rz
-      {Intrinsic::nvvm_f2ll_rz_ftz, 76113}, // __nvvm_f2ll_rz_ftz
-      {Intrinsic::nvvm_f2ui_rm, 76132}, // __nvvm_f2ui_rm
-      {Intrinsic::nvvm_f2ui_rm_ftz, 76147}, // __nvvm_f2ui_rm_ftz
-      {Intrinsic::nvvm_f2ui_rn, 76166}, // __nvvm_f2ui_rn
-      {Intrinsic::nvvm_f2ui_rn_ftz, 76181}, // __nvvm_f2ui_rn_ftz
-      {Intrinsic::nvvm_f2ui_rp, 76200}, // __nvvm_f2ui_rp
-      {Intrinsic::nvvm_f2ui_rp_ftz, 76215}, // __nvvm_f2ui_rp_ftz
-      {Intrinsic::nvvm_f2ui_rz, 76234}, // __nvvm_f2ui_rz
-      {Intrinsic::nvvm_f2ui_rz_ftz, 76249}, // __nvvm_f2ui_rz_ftz
-      {Intrinsic::nvvm_f2ull_rm, 76268}, // __nvvm_f2ull_rm
-      {Intrinsic::nvvm_f2ull_rm_ftz, 76284}, // __nvvm_f2ull_rm_ftz
-      {Intrinsic::nvvm_f2ull_rn, 76304}, // __nvvm_f2ull_rn
-      {Intrinsic::nvvm_f2ull_rn_ftz, 76320}, // __nvvm_f2ull_rn_ftz
-      {Intrinsic::nvvm_f2ull_rp, 76340}, // __nvvm_f2ull_rp
-      {Intrinsic::nvvm_f2ull_rp_ftz, 76356}, // __nvvm_f2ull_rp_ftz
-      {Intrinsic::nvvm_f2ull_rz, 76376}, // __nvvm_f2ull_rz
-      {Intrinsic::nvvm_f2ull_rz_ftz, 76392}, // __nvvm_f2ull_rz_ftz
-      {Intrinsic::nvvm_fabs_d, 76412}, // __nvvm_fabs_d
-      {Intrinsic::nvvm_fabs_f, 76426}, // __nvvm_fabs_f
-      {Intrinsic::nvvm_fabs_ftz_f, 76440}, // __nvvm_fabs_ftz_f
-      {Intrinsic::nvvm_floor_d, 76458}, // __nvvm_floor_d
-      {Intrinsic::nvvm_floor_f, 76473}, // __nvvm_floor_f
-      {Intrinsic::nvvm_floor_ftz_f, 76488}, // __nvvm_floor_ftz_f
-      {Intrinsic::nvvm_fma_rm_d, 76507}, // __nvvm_fma_rm_d
-      {Intrinsic::nvvm_fma_rm_f, 76523}, // __nvvm_fma_rm_f
-      {Intrinsic::nvvm_fma_rm_ftz_f, 76539}, // __nvvm_fma_rm_ftz_f
-      {Intrinsic::nvvm_fma_rn_d, 76559}, // __nvvm_fma_rn_d
-      {Intrinsic::nvvm_fma_rn_f, 76575}, // __nvvm_fma_rn_f
-      {Intrinsic::nvvm_fma_rn_ftz_f, 76591}, // __nvvm_fma_rn_ftz_f
-      {Intrinsic::nvvm_fma_rp_d, 76611}, // __nvvm_fma_rp_d
-      {Intrinsic::nvvm_fma_rp_f, 76627}, // __nvvm_fma_rp_f
-      {Intrinsic::nvvm_fma_rp_ftz_f, 76643}, // __nvvm_fma_rp_ftz_f
-      {Intrinsic::nvvm_fma_rz_d, 76663}, // __nvvm_fma_rz_d
-      {Intrinsic::nvvm_fma_rz_f, 76679}, // __nvvm_fma_rz_f
-      {Intrinsic::nvvm_fma_rz_ftz_f, 76695}, // __nvvm_fma_rz_ftz_f
-      {Intrinsic::nvvm_fmax_d, 76715}, // __nvvm_fmax_d
-      {Intrinsic::nvvm_fmax_f, 76729}, // __nvvm_fmax_f
-      {Intrinsic::nvvm_fmax_ftz_f, 76743}, // __nvvm_fmax_ftz_f
-      {Intrinsic::nvvm_fmin_d, 76761}, // __nvvm_fmin_d
-      {Intrinsic::nvvm_fmin_f, 76775}, // __nvvm_fmin_f
-      {Intrinsic::nvvm_fmin_ftz_f, 76789}, // __nvvm_fmin_ftz_f
-      {Intrinsic::nvvm_fns, 76807}, // __nvvm_fns
-      {Intrinsic::nvvm_i2d_rm, 76818}, // __nvvm_i2d_rm
-      {Intrinsic::nvvm_i2d_rn, 76832}, // __nvvm_i2d_rn
-      {Intrinsic::nvvm_i2d_rp, 76846}, // __nvvm_i2d_rp
-      {Intrinsic::nvvm_i2d_rz, 76860}, // __nvvm_i2d_rz
-      {Intrinsic::nvvm_i2f_rm, 76874}, // __nvvm_i2f_rm
-      {Intrinsic::nvvm_i2f_rn, 76888}, // __nvvm_i2f_rn
-      {Intrinsic::nvvm_i2f_rp, 76902}, // __nvvm_i2f_rp
-      {Intrinsic::nvvm_i2f_rz, 76916}, // __nvvm_i2f_rz
-      {Intrinsic::nvvm_isspacep_const, 76930}, // __nvvm_isspacep_const
-      {Intrinsic::nvvm_isspacep_global, 76952}, // __nvvm_isspacep_global
-      {Intrinsic::nvvm_isspacep_local, 76975}, // __nvvm_isspacep_local
-      {Intrinsic::nvvm_isspacep_shared, 76997}, // __nvvm_isspacep_shared
-      {Intrinsic::nvvm_istypep_sampler, 77020}, // __nvvm_istypep_sampler
-      {Intrinsic::nvvm_istypep_surface, 77043}, // __nvvm_istypep_surface
-      {Intrinsic::nvvm_istypep_texture, 77066}, // __nvvm_istypep_texture
-      {Intrinsic::nvvm_lg2_approx_d, 77089}, // __nvvm_lg2_approx_d
-      {Intrinsic::nvvm_lg2_approx_f, 77109}, // __nvvm_lg2_approx_f
-      {Intrinsic::nvvm_lg2_approx_ftz_f, 77129}, // __nvvm_lg2_approx_ftz_f
-      {Intrinsic::nvvm_ll2d_rm, 77153}, // __nvvm_ll2d_rm
-      {Intrinsic::nvvm_ll2d_rn, 77168}, // __nvvm_ll2d_rn
-      {Intrinsic::nvvm_ll2d_rp, 77183}, // __nvvm_ll2d_rp
-      {Intrinsic::nvvm_ll2d_rz, 77198}, // __nvvm_ll2d_rz
-      {Intrinsic::nvvm_ll2f_rm, 77213}, // __nvvm_ll2f_rm
-      {Intrinsic::nvvm_ll2f_rn, 77228}, // __nvvm_ll2f_rn
-      {Intrinsic::nvvm_ll2f_rp, 77243}, // __nvvm_ll2f_rp
-      {Intrinsic::nvvm_ll2f_rz, 77258}, // __nvvm_ll2f_rz
-      {Intrinsic::nvvm_lohi_i2d, 77273}, // __nvvm_lohi_i2d
-      {Intrinsic::nvvm_match_any_sync_i32, 77289}, // __nvvm_match_any_sync_i32
-      {Intrinsic::nvvm_match_any_sync_i64, 77315}, // __nvvm_match_any_sync_i64
-      {Intrinsic::nvvm_membar_cta, 77341}, // __nvvm_membar_cta
-      {Intrinsic::nvvm_membar_gl, 77359}, // __nvvm_membar_gl
-      {Intrinsic::nvvm_membar_sys, 77376}, // __nvvm_membar_sys
-      {Intrinsic::nvvm_mul24_i, 77602}, // __nvvm_mul24_i
-      {Intrinsic::nvvm_mul24_ui, 77617}, // __nvvm_mul24_ui
-      {Intrinsic::nvvm_mul_rm_d, 77394}, // __nvvm_mul_rm_d
-      {Intrinsic::nvvm_mul_rm_f, 77410}, // __nvvm_mul_rm_f
-      {Intrinsic::nvvm_mul_rm_ftz_f, 77426}, // __nvvm_mul_rm_ftz_f
-      {Intrinsic::nvvm_mul_rn_d, 77446}, // __nvvm_mul_rn_d
-      {Intrinsic::nvvm_mul_rn_f, 77462}, // __nvvm_mul_rn_f
-      {Intrinsic::nvvm_mul_rn_ftz_f, 77478}, // __nvvm_mul_rn_ftz_f
-      {Intrinsic::nvvm_mul_rp_d, 77498}, // __nvvm_mul_rp_d
-      {Intrinsic::nvvm_mul_rp_f, 77514}, // __nvvm_mul_rp_f
-      {Intrinsic::nvvm_mul_rp_ftz_f, 77530}, // __nvvm_mul_rp_ftz_f
-      {Intrinsic::nvvm_mul_rz_d, 77550}, // __nvvm_mul_rz_d
-      {Intrinsic::nvvm_mul_rz_f, 77566}, // __nvvm_mul_rz_f
-      {Intrinsic::nvvm_mul_rz_ftz_f, 77582}, // __nvvm_mul_rz_ftz_f
-      {Intrinsic::nvvm_mulhi_i, 77633}, // __nvvm_mulhi_i
-      {Intrinsic::nvvm_mulhi_ll, 77648}, // __nvvm_mulhi_ll
-      {Intrinsic::nvvm_mulhi_ui, 77664}, // __nvvm_mulhi_ui
-      {Intrinsic::nvvm_mulhi_ull, 77680}, // __nvvm_mulhi_ull
-      {Intrinsic::nvvm_prmt, 77697}, // __nvvm_prmt
-      {Intrinsic::nvvm_rcp_approx_ftz_d, 77709}, // __nvvm_rcp_approx_ftz_d
-      {Intrinsic::nvvm_rcp_rm_d, 77733}, // __nvvm_rcp_rm_d
-      {Intrinsic::nvvm_rcp_rm_f, 77749}, // __nvvm_rcp_rm_f
-      {Intrinsic::nvvm_rcp_rm_ftz_f, 77765}, // __nvvm_rcp_rm_ftz_f
-      {Intrinsic::nvvm_rcp_rn_d, 77785}, // __nvvm_rcp_rn_d
-      {Intrinsic::nvvm_rcp_rn_f, 77801}, // __nvvm_rcp_rn_f
-      {Intrinsic::nvvm_rcp_rn_ftz_f, 77817}, // __nvvm_rcp_rn_ftz_f
-      {Intrinsic::nvvm_rcp_rp_d, 77837}, // __nvvm_rcp_rp_d
-      {Intrinsic::nvvm_rcp_rp_f, 77853}, // __nvvm_rcp_rp_f
-      {Intrinsic::nvvm_rcp_rp_ftz_f, 77869}, // __nvvm_rcp_rp_ftz_f
-      {Intrinsic::nvvm_rcp_rz_d, 77889}, // __nvvm_rcp_rz_d
-      {Intrinsic::nvvm_rcp_rz_f, 77905}, // __nvvm_rcp_rz_f
-      {Intrinsic::nvvm_rcp_rz_ftz_f, 77921}, // __nvvm_rcp_rz_ftz_f
-      {Intrinsic::nvvm_read_ptx_sreg_clock, 77941}, // __nvvm_read_ptx_sreg_clock
-      {Intrinsic::nvvm_read_ptx_sreg_clock64, 77968}, // __nvvm_read_ptx_sreg_clock64
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_w, 77997}, // __nvvm_read_ptx_sreg_ctaid_w
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_x, 78026}, // __nvvm_read_ptx_sreg_ctaid_x
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_y, 78055}, // __nvvm_read_ptx_sreg_ctaid_y
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_z, 78084}, // __nvvm_read_ptx_sreg_ctaid_z
-      {Intrinsic::nvvm_read_ptx_sreg_envreg0, 78113}, // __nvvm_read_ptx_sreg_envreg0
-      {Intrinsic::nvvm_read_ptx_sreg_envreg1, 78142}, // __nvvm_read_ptx_sreg_envreg1
-      {Intrinsic::nvvm_read_ptx_sreg_envreg10, 78171}, // __nvvm_read_ptx_sreg_envreg10
-      {Intrinsic::nvvm_read_ptx_sreg_envreg11, 78201}, // __nvvm_read_ptx_sreg_envreg11
-      {Intrinsic::nvvm_read_ptx_sreg_envreg12, 78231}, // __nvvm_read_ptx_sreg_envreg12
-      {Intrinsic::nvvm_read_ptx_sreg_envreg13, 78261}, // __nvvm_read_ptx_sreg_envreg13
-      {Intrinsic::nvvm_read_ptx_sreg_envreg14, 78291}, // __nvvm_read_ptx_sreg_envreg14
-      {Intrinsic::nvvm_read_ptx_sreg_envreg15, 78321}, // __nvvm_read_ptx_sreg_envreg15
-      {Intrinsic::nvvm_read_ptx_sreg_envreg16, 78351}, // __nvvm_read_ptx_sreg_envreg16
-      {Intrinsic::nvvm_read_ptx_sreg_envreg17, 78381}, // __nvvm_read_ptx_sreg_envreg17
-      {Intrinsic::nvvm_read_ptx_sreg_envreg18, 78411}, // __nvvm_read_ptx_sreg_envreg18
-      {Intrinsic::nvvm_read_ptx_sreg_envreg19, 78441}, // __nvvm_read_ptx_sreg_envreg19
-      {Intrinsic::nvvm_read_ptx_sreg_envreg2, 78471}, // __nvvm_read_ptx_sreg_envreg2
-      {Intrinsic::nvvm_read_ptx_sreg_envreg20, 78500}, // __nvvm_read_ptx_sreg_envreg20
-      {Intrinsic::nvvm_read_ptx_sreg_envreg21, 78530}, // __nvvm_read_ptx_sreg_envreg21
-      {Intrinsic::nvvm_read_ptx_sreg_envreg22, 78560}, // __nvvm_read_ptx_sreg_envreg22
-      {Intrinsic::nvvm_read_ptx_sreg_envreg23, 78590}, // __nvvm_read_ptx_sreg_envreg23
-      {Intrinsic::nvvm_read_ptx_sreg_envreg24, 78620}, // __nvvm_read_ptx_sreg_envreg24
-      {Intrinsic::nvvm_read_ptx_sreg_envreg25, 78650}, // __nvvm_read_ptx_sreg_envreg25
-      {Intrinsic::nvvm_read_ptx_sreg_envreg26, 78680}, // __nvvm_read_ptx_sreg_envreg26
-      {Intrinsic::nvvm_read_ptx_sreg_envreg27, 78710}, // __nvvm_read_ptx_sreg_envreg27
-      {Intrinsic::nvvm_read_ptx_sreg_envreg28, 78740}, // __nvvm_read_ptx_sreg_envreg28
-      {Intrinsic::nvvm_read_ptx_sreg_envreg29, 78770}, // __nvvm_read_ptx_sreg_envreg29
-      {Intrinsic::nvvm_read_ptx_sreg_envreg3, 78800}, // __nvvm_read_ptx_sreg_envreg3
-      {Intrinsic::nvvm_read_ptx_sreg_envreg30, 78829}, // __nvvm_read_ptx_sreg_envreg30
-      {Intrinsic::nvvm_read_ptx_sreg_envreg31, 78859}, // __nvvm_read_ptx_sreg_envreg31
-      {Intrinsic::nvvm_read_ptx_sreg_envreg4, 78889}, // __nvvm_read_ptx_sreg_envreg4
-      {Intrinsic::nvvm_read_ptx_sreg_envreg5, 78918}, // __nvvm_read_ptx_sreg_envreg5
-      {Intrinsic::nvvm_read_ptx_sreg_envreg6, 78947}, // __nvvm_read_ptx_sreg_envreg6
-      {Intrinsic::nvvm_read_ptx_sreg_envreg7, 78976}, // __nvvm_read_ptx_sreg_envreg7
-      {Intrinsic::nvvm_read_ptx_sreg_envreg8, 79005}, // __nvvm_read_ptx_sreg_envreg8
-      {Intrinsic::nvvm_read_ptx_sreg_envreg9, 79034}, // __nvvm_read_ptx_sreg_envreg9
-      {Intrinsic::nvvm_read_ptx_sreg_gridid, 79063}, // __nvvm_read_ptx_sreg_gridid
-      {Intrinsic::nvvm_read_ptx_sreg_laneid, 79091}, // __nvvm_read_ptx_sreg_laneid
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_eq, 79119}, // __nvvm_read_ptx_sreg_lanemask_eq
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_ge, 79152}, // __nvvm_read_ptx_sreg_lanemask_ge
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_gt, 79185}, // __nvvm_read_ptx_sreg_lanemask_gt
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_le, 79218}, // __nvvm_read_ptx_sreg_lanemask_le
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_lt, 79251}, // __nvvm_read_ptx_sreg_lanemask_lt
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_w, 79284}, // __nvvm_read_ptx_sreg_nctaid_w
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_x, 79314}, // __nvvm_read_ptx_sreg_nctaid_x
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_y, 79344}, // __nvvm_read_ptx_sreg_nctaid_y
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_z, 79374}, // __nvvm_read_ptx_sreg_nctaid_z
-      {Intrinsic::nvvm_read_ptx_sreg_nsmid, 79404}, // __nvvm_read_ptx_sreg_nsmid
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_w, 79431}, // __nvvm_read_ptx_sreg_ntid_w
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_x, 79459}, // __nvvm_read_ptx_sreg_ntid_x
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_y, 79487}, // __nvvm_read_ptx_sreg_ntid_y
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_z, 79515}, // __nvvm_read_ptx_sreg_ntid_z
-      {Intrinsic::nvvm_read_ptx_sreg_nwarpid, 79543}, // __nvvm_read_ptx_sreg_nwarpid
-      {Intrinsic::nvvm_read_ptx_sreg_pm0, 79572}, // __nvvm_read_ptx_sreg_pm0
-      {Intrinsic::nvvm_read_ptx_sreg_pm1, 79597}, // __nvvm_read_ptx_sreg_pm1
-      {Intrinsic::nvvm_read_ptx_sreg_pm2, 79622}, // __nvvm_read_ptx_sreg_pm2
-      {Intrinsic::nvvm_read_ptx_sreg_pm3, 79647}, // __nvvm_read_ptx_sreg_pm3
-      {Intrinsic::nvvm_read_ptx_sreg_smid, 79672}, // __nvvm_read_ptx_sreg_smid
-      {Intrinsic::nvvm_read_ptx_sreg_tid_w, 79698}, // __nvvm_read_ptx_sreg_tid_w
-      {Intrinsic::nvvm_read_ptx_sreg_tid_x, 79725}, // __nvvm_read_ptx_sreg_tid_x
-      {Intrinsic::nvvm_read_ptx_sreg_tid_y, 79752}, // __nvvm_read_ptx_sreg_tid_y
-      {Intrinsic::nvvm_read_ptx_sreg_tid_z, 79779}, // __nvvm_read_ptx_sreg_tid_z
-      {Intrinsic::nvvm_read_ptx_sreg_warpid, 79806}, // __nvvm_read_ptx_sreg_warpid
-      {Intrinsic::nvvm_read_ptx_sreg_warpsize, 79834}, // __nvvm_read_ptx_sreg_warpsize
-      {Intrinsic::nvvm_rotate_b32, 79864}, // __nvvm_rotate_b32
-      {Intrinsic::nvvm_rotate_b64, 79882}, // __nvvm_rotate_b64
-      {Intrinsic::nvvm_rotate_right_b64, 79900}, // __nvvm_rotate_right_b64
-      {Intrinsic::nvvm_round_d, 79924}, // __nvvm_round_d
-      {Intrinsic::nvvm_round_f, 79939}, // __nvvm_round_f
-      {Intrinsic::nvvm_round_ftz_f, 79954}, // __nvvm_round_ftz_f
-      {Intrinsic::nvvm_rsqrt_approx_d, 79973}, // __nvvm_rsqrt_approx_d
-      {Intrinsic::nvvm_rsqrt_approx_f, 79995}, // __nvvm_rsqrt_approx_f
-      {Intrinsic::nvvm_rsqrt_approx_ftz_f, 80017}, // __nvvm_rsqrt_approx_ftz_f
-      {Intrinsic::nvvm_sad_i, 80043}, // __nvvm_sad_i
-      {Intrinsic::nvvm_sad_ui, 80056}, // __nvvm_sad_ui
-      {Intrinsic::nvvm_saturate_d, 80070}, // __nvvm_saturate_d
-      {Intrinsic::nvvm_saturate_f, 80088}, // __nvvm_saturate_f
-      {Intrinsic::nvvm_saturate_ftz_f, 80106}, // __nvvm_saturate_ftz_f
-      {Intrinsic::nvvm_shfl_bfly_f32, 80128}, // __nvvm_shfl_bfly_f32
-      {Intrinsic::nvvm_shfl_bfly_i32, 80149}, // __nvvm_shfl_bfly_i32
-      {Intrinsic::nvvm_shfl_down_f32, 80170}, // __nvvm_shfl_down_f32
-      {Intrinsic::nvvm_shfl_down_i32, 80191}, // __nvvm_shfl_down_i32
-      {Intrinsic::nvvm_shfl_idx_f32, 80212}, // __nvvm_shfl_idx_f32
-      {Intrinsic::nvvm_shfl_idx_i32, 80232}, // __nvvm_shfl_idx_i32
-      {Intrinsic::nvvm_shfl_sync_bfly_f32, 80252}, // __nvvm_shfl_sync_bfly_f32
-      {Intrinsic::nvvm_shfl_sync_bfly_i32, 80278}, // __nvvm_shfl_sync_bfly_i32
-      {Intrinsic::nvvm_shfl_sync_down_f32, 80304}, // __nvvm_shfl_sync_down_f32
-      {Intrinsic::nvvm_shfl_sync_down_i32, 80330}, // __nvvm_shfl_sync_down_i32
-      {Intrinsic::nvvm_shfl_sync_idx_f32, 80356}, // __nvvm_shfl_sync_idx_f32
-      {Intrinsic::nvvm_shfl_sync_idx_i32, 80381}, // __nvvm_shfl_sync_idx_i32
-      {Intrinsic::nvvm_shfl_sync_up_f32, 80406}, // __nvvm_shfl_sync_up_f32
-      {Intrinsic::nvvm_shfl_sync_up_i32, 80430}, // __nvvm_shfl_sync_up_i32
-      {Intrinsic::nvvm_shfl_up_f32, 80454}, // __nvvm_shfl_up_f32
-      {Intrinsic::nvvm_shfl_up_i32, 80473}, // __nvvm_shfl_up_i32
-      {Intrinsic::nvvm_sin_approx_f, 80492}, // __nvvm_sin_approx_f
-      {Intrinsic::nvvm_sin_approx_ftz_f, 80512}, // __nvvm_sin_approx_ftz_f
-      {Intrinsic::nvvm_sqrt_approx_f, 80536}, // __nvvm_sqrt_approx_f
-      {Intrinsic::nvvm_sqrt_approx_ftz_f, 80557}, // __nvvm_sqrt_approx_ftz_f
-      {Intrinsic::nvvm_sqrt_f, 80582}, // __nvvm_sqrt_f
-      {Intrinsic::nvvm_sqrt_rm_d, 80596}, // __nvvm_sqrt_rm_d
-      {Intrinsic::nvvm_sqrt_rm_f, 80613}, // __nvvm_sqrt_rm_f
-      {Intrinsic::nvvm_sqrt_rm_ftz_f, 80630}, // __nvvm_sqrt_rm_ftz_f
-      {Intrinsic::nvvm_sqrt_rn_d, 80651}, // __nvvm_sqrt_rn_d
-      {Intrinsic::nvvm_sqrt_rn_f, 80668}, // __nvvm_sqrt_rn_f
-      {Intrinsic::nvvm_sqrt_rn_ftz_f, 80685}, // __nvvm_sqrt_rn_ftz_f
-      {Intrinsic::nvvm_sqrt_rp_d, 80706}, // __nvvm_sqrt_rp_d
-      {Intrinsic::nvvm_sqrt_rp_f, 80723}, // __nvvm_sqrt_rp_f
-      {Intrinsic::nvvm_sqrt_rp_ftz_f, 80740}, // __nvvm_sqrt_rp_ftz_f
-      {Intrinsic::nvvm_sqrt_rz_d, 80761}, // __nvvm_sqrt_rz_d
-      {Intrinsic::nvvm_sqrt_rz_f, 80778}, // __nvvm_sqrt_rz_f
-      {Intrinsic::nvvm_sqrt_rz_ftz_f, 80795}, // __nvvm_sqrt_rz_ftz_f
-      {Intrinsic::nvvm_suq_array_size, 80816}, // __nvvm_suq_array_size
-      {Intrinsic::nvvm_suq_channel_data_type, 80838}, // __nvvm_suq_channel_data_type
-      {Intrinsic::nvvm_suq_channel_order, 80867}, // __nvvm_suq_channel_order
-      {Intrinsic::nvvm_suq_depth, 80892}, // __nvvm_suq_depth
-      {Intrinsic::nvvm_suq_height, 80909}, // __nvvm_suq_height
-      {Intrinsic::nvvm_suq_width, 80927}, // __nvvm_suq_width
-      {Intrinsic::nvvm_sust_b_1d_array_i16_clamp, 80944}, // __nvvm_sust_b_1d_array_i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i16_trap, 80977}, // __nvvm_sust_b_1d_array_i16_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i16_zero, 81009}, // __nvvm_sust_b_1d_array_i16_zero
-      {Intrinsic::nvvm_sust_b_1d_array_i32_clamp, 81041}, // __nvvm_sust_b_1d_array_i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i32_trap, 81074}, // __nvvm_sust_b_1d_array_i32_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i32_zero, 81106}, // __nvvm_sust_b_1d_array_i32_zero
-      {Intrinsic::nvvm_sust_b_1d_array_i64_clamp, 81138}, // __nvvm_sust_b_1d_array_i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i64_trap, 81171}, // __nvvm_sust_b_1d_array_i64_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i64_zero, 81203}, // __nvvm_sust_b_1d_array_i64_zero
-      {Intrinsic::nvvm_sust_b_1d_array_i8_clamp, 81235}, // __nvvm_sust_b_1d_array_i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i8_trap, 81267}, // __nvvm_sust_b_1d_array_i8_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i8_zero, 81298}, // __nvvm_sust_b_1d_array_i8_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i16_clamp, 81329}, // __nvvm_sust_b_1d_array_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i16_trap, 81364}, // __nvvm_sust_b_1d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i16_zero, 81398}, // __nvvm_sust_b_1d_array_v2i16_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i32_clamp, 81432}, // __nvvm_sust_b_1d_array_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i32_trap, 81467}, // __nvvm_sust_b_1d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i32_zero, 81501}, // __nvvm_sust_b_1d_array_v2i32_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i64_clamp, 81535}, // __nvvm_sust_b_1d_array_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i64_trap, 81570}, // __nvvm_sust_b_1d_array_v2i64_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i64_zero, 81604}, // __nvvm_sust_b_1d_array_v2i64_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i8_clamp, 81638}, // __nvvm_sust_b_1d_array_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i8_trap, 81672}, // __nvvm_sust_b_1d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i8_zero, 81705}, // __nvvm_sust_b_1d_array_v2i8_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v4i16_clamp, 81738}, // __nvvm_sust_b_1d_array_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v4i16_trap, 81773}, // __nvvm_sust_b_1d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v4i16_zero, 81807}, // __nvvm_sust_b_1d_array_v4i16_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v4i32_clamp, 81841}, // __nvvm_sust_b_1d_array_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v4i32_trap, 81876}, // __nvvm_sust_b_1d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v4i32_zero, 81910}, // __nvvm_sust_b_1d_array_v4i32_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v4i8_clamp, 81944}, // __nvvm_sust_b_1d_array_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v4i8_trap, 81978}, // __nvvm_sust_b_1d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v4i8_zero, 82011}, // __nvvm_sust_b_1d_array_v4i8_zero
-      {Intrinsic::nvvm_sust_b_1d_i16_clamp, 82044}, // __nvvm_sust_b_1d_i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_i16_trap, 82071}, // __nvvm_sust_b_1d_i16_trap
-      {Intrinsic::nvvm_sust_b_1d_i16_zero, 82097}, // __nvvm_sust_b_1d_i16_zero
-      {Intrinsic::nvvm_sust_b_1d_i32_clamp, 82123}, // __nvvm_sust_b_1d_i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_i32_trap, 82150}, // __nvvm_sust_b_1d_i32_trap
-      {Intrinsic::nvvm_sust_b_1d_i32_zero, 82176}, // __nvvm_sust_b_1d_i32_zero
-      {Intrinsic::nvvm_sust_b_1d_i64_clamp, 82202}, // __nvvm_sust_b_1d_i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_i64_trap, 82229}, // __nvvm_sust_b_1d_i64_trap
-      {Intrinsic::nvvm_sust_b_1d_i64_zero, 82255}, // __nvvm_sust_b_1d_i64_zero
-      {Intrinsic::nvvm_sust_b_1d_i8_clamp, 82281}, // __nvvm_sust_b_1d_i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_i8_trap, 82307}, // __nvvm_sust_b_1d_i8_trap
-      {Intrinsic::nvvm_sust_b_1d_i8_zero, 82332}, // __nvvm_sust_b_1d_i8_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i16_clamp, 82357}, // __nvvm_sust_b_1d_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i16_trap, 82386}, // __nvvm_sust_b_1d_v2i16_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i16_zero, 82414}, // __nvvm_sust_b_1d_v2i16_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i32_clamp, 82442}, // __nvvm_sust_b_1d_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i32_trap, 82471}, // __nvvm_sust_b_1d_v2i32_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i32_zero, 82499}, // __nvvm_sust_b_1d_v2i32_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i64_clamp, 82527}, // __nvvm_sust_b_1d_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i64_trap, 82556}, // __nvvm_sust_b_1d_v2i64_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i64_zero, 82584}, // __nvvm_sust_b_1d_v2i64_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i8_clamp, 82612}, // __nvvm_sust_b_1d_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i8_trap, 82640}, // __nvvm_sust_b_1d_v2i8_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i8_zero, 82667}, // __nvvm_sust_b_1d_v2i8_zero
-      {Intrinsic::nvvm_sust_b_1d_v4i16_clamp, 82694}, // __nvvm_sust_b_1d_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_v4i16_trap, 82723}, // __nvvm_sust_b_1d_v4i16_trap
-      {Intrinsic::nvvm_sust_b_1d_v4i16_zero, 82751}, // __nvvm_sust_b_1d_v4i16_zero
-      {Intrinsic::nvvm_sust_b_1d_v4i32_clamp, 82779}, // __nvvm_sust_b_1d_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_v4i32_trap, 82808}, // __nvvm_sust_b_1d_v4i32_trap
-      {Intrinsic::nvvm_sust_b_1d_v4i32_zero, 82836}, // __nvvm_sust_b_1d_v4i32_zero
-      {Intrinsic::nvvm_sust_b_1d_v4i8_clamp, 82864}, // __nvvm_sust_b_1d_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_v4i8_trap, 82892}, // __nvvm_sust_b_1d_v4i8_trap
-      {Intrinsic::nvvm_sust_b_1d_v4i8_zero, 82919}, // __nvvm_sust_b_1d_v4i8_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i16_clamp, 82946}, // __nvvm_sust_b_2d_array_i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i16_trap, 82979}, // __nvvm_sust_b_2d_array_i16_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i16_zero, 83011}, // __nvvm_sust_b_2d_array_i16_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i32_clamp, 83043}, // __nvvm_sust_b_2d_array_i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i32_trap, 83076}, // __nvvm_sust_b_2d_array_i32_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i32_zero, 83108}, // __nvvm_sust_b_2d_array_i32_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i64_clamp, 83140}, // __nvvm_sust_b_2d_array_i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i64_trap, 83173}, // __nvvm_sust_b_2d_array_i64_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i64_zero, 83205}, // __nvvm_sust_b_2d_array_i64_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i8_clamp, 83237}, // __nvvm_sust_b_2d_array_i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i8_trap, 83269}, // __nvvm_sust_b_2d_array_i8_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i8_zero, 83300}, // __nvvm_sust_b_2d_array_i8_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i16_clamp, 83331}, // __nvvm_sust_b_2d_array_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i16_trap, 83366}, // __nvvm_sust_b_2d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i16_zero, 83400}, // __nvvm_sust_b_2d_array_v2i16_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i32_clamp, 83434}, // __nvvm_sust_b_2d_array_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i32_trap, 83469}, // __nvvm_sust_b_2d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i32_zero, 83503}, // __nvvm_sust_b_2d_array_v2i32_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i64_clamp, 83537}, // __nvvm_sust_b_2d_array_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i64_trap, 83572}, // __nvvm_sust_b_2d_array_v2i64_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i64_zero, 83606}, // __nvvm_sust_b_2d_array_v2i64_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i8_clamp, 83640}, // __nvvm_sust_b_2d_array_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i8_trap, 83674}, // __nvvm_sust_b_2d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i8_zero, 83707}, // __nvvm_sust_b_2d_array_v2i8_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v4i16_clamp, 83740}, // __nvvm_sust_b_2d_array_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v4i16_trap, 83775}, // __nvvm_sust_b_2d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v4i16_zero, 83809}, // __nvvm_sust_b_2d_array_v4i16_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v4i32_clamp, 83843}, // __nvvm_sust_b_2d_array_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v4i32_trap, 83878}, // __nvvm_sust_b_2d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v4i32_zero, 83912}, // __nvvm_sust_b_2d_array_v4i32_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v4i8_clamp, 83946}, // __nvvm_sust_b_2d_array_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v4i8_trap, 83980}, // __nvvm_sust_b_2d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v4i8_zero, 84013}, // __nvvm_sust_b_2d_array_v4i8_zero
-      {Intrinsic::nvvm_sust_b_2d_i16_clamp, 84046}, // __nvvm_sust_b_2d_i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_i16_trap, 84073}, // __nvvm_sust_b_2d_i16_trap
-      {Intrinsic::nvvm_sust_b_2d_i16_zero, 84099}, // __nvvm_sust_b_2d_i16_zero
-      {Intrinsic::nvvm_sust_b_2d_i32_clamp, 84125}, // __nvvm_sust_b_2d_i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_i32_trap, 84152}, // __nvvm_sust_b_2d_i32_trap
-      {Intrinsic::nvvm_sust_b_2d_i32_zero, 84178}, // __nvvm_sust_b_2d_i32_zero
-      {Intrinsic::nvvm_sust_b_2d_i64_clamp, 84204}, // __nvvm_sust_b_2d_i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_i64_trap, 84231}, // __nvvm_sust_b_2d_i64_trap
-      {Intrinsic::nvvm_sust_b_2d_i64_zero, 84257}, // __nvvm_sust_b_2d_i64_zero
-      {Intrinsic::nvvm_sust_b_2d_i8_clamp, 84283}, // __nvvm_sust_b_2d_i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_i8_trap, 84309}, // __nvvm_sust_b_2d_i8_trap
-      {Intrinsic::nvvm_sust_b_2d_i8_zero, 84334}, // __nvvm_sust_b_2d_i8_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i16_clamp, 84359}, // __nvvm_sust_b_2d_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i16_trap, 84388}, // __nvvm_sust_b_2d_v2i16_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i16_zero, 84416}, // __nvvm_sust_b_2d_v2i16_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i32_clamp, 84444}, // __nvvm_sust_b_2d_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i32_trap, 84473}, // __nvvm_sust_b_2d_v2i32_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i32_zero, 84501}, // __nvvm_sust_b_2d_v2i32_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i64_clamp, 84529}, // __nvvm_sust_b_2d_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i64_trap, 84558}, // __nvvm_sust_b_2d_v2i64_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i64_zero, 84586}, // __nvvm_sust_b_2d_v2i64_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i8_clamp, 84614}, // __nvvm_sust_b_2d_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i8_trap, 84642}, // __nvvm_sust_b_2d_v2i8_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i8_zero, 84669}, // __nvvm_sust_b_2d_v2i8_zero
-      {Intrinsic::nvvm_sust_b_2d_v4i16_clamp, 84696}, // __nvvm_sust_b_2d_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_v4i16_trap, 84725}, // __nvvm_sust_b_2d_v4i16_trap
-      {Intrinsic::nvvm_sust_b_2d_v4i16_zero, 84753}, // __nvvm_sust_b_2d_v4i16_zero
-      {Intrinsic::nvvm_sust_b_2d_v4i32_clamp, 84781}, // __nvvm_sust_b_2d_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_v4i32_trap, 84810}, // __nvvm_sust_b_2d_v4i32_trap
-      {Intrinsic::nvvm_sust_b_2d_v4i32_zero, 84838}, // __nvvm_sust_b_2d_v4i32_zero
-      {Intrinsic::nvvm_sust_b_2d_v4i8_clamp, 84866}, // __nvvm_sust_b_2d_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_v4i8_trap, 84894}, // __nvvm_sust_b_2d_v4i8_trap
-      {Intrinsic::nvvm_sust_b_2d_v4i8_zero, 84921}, // __nvvm_sust_b_2d_v4i8_zero
-      {Intrinsic::nvvm_sust_b_3d_i16_clamp, 84948}, // __nvvm_sust_b_3d_i16_clamp
-      {Intrinsic::nvvm_sust_b_3d_i16_trap, 84975}, // __nvvm_sust_b_3d_i16_trap
-      {Intrinsic::nvvm_sust_b_3d_i16_zero, 85001}, // __nvvm_sust_b_3d_i16_zero
-      {Intrinsic::nvvm_sust_b_3d_i32_clamp, 85027}, // __nvvm_sust_b_3d_i32_clamp
-      {Intrinsic::nvvm_sust_b_3d_i32_trap, 85054}, // __nvvm_sust_b_3d_i32_trap
-      {Intrinsic::nvvm_sust_b_3d_i32_zero, 85080}, // __nvvm_sust_b_3d_i32_zero
-      {Intrinsic::nvvm_sust_b_3d_i64_clamp, 85106}, // __nvvm_sust_b_3d_i64_clamp
-      {Intrinsic::nvvm_sust_b_3d_i64_trap, 85133}, // __nvvm_sust_b_3d_i64_trap
-      {Intrinsic::nvvm_sust_b_3d_i64_zero, 85159}, // __nvvm_sust_b_3d_i64_zero
-      {Intrinsic::nvvm_sust_b_3d_i8_clamp, 85185}, // __nvvm_sust_b_3d_i8_clamp
-      {Intrinsic::nvvm_sust_b_3d_i8_trap, 85211}, // __nvvm_sust_b_3d_i8_trap
-      {Intrinsic::nvvm_sust_b_3d_i8_zero, 85236}, // __nvvm_sust_b_3d_i8_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i16_clamp, 85261}, // __nvvm_sust_b_3d_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i16_trap, 85290}, // __nvvm_sust_b_3d_v2i16_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i16_zero, 85318}, // __nvvm_sust_b_3d_v2i16_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i32_clamp, 85346}, // __nvvm_sust_b_3d_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i32_trap, 85375}, // __nvvm_sust_b_3d_v2i32_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i32_zero, 85403}, // __nvvm_sust_b_3d_v2i32_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i64_clamp, 85431}, // __nvvm_sust_b_3d_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i64_trap, 85460}, // __nvvm_sust_b_3d_v2i64_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i64_zero, 85488}, // __nvvm_sust_b_3d_v2i64_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i8_clamp, 85516}, // __nvvm_sust_b_3d_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i8_trap, 85544}, // __nvvm_sust_b_3d_v2i8_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i8_zero, 85571}, // __nvvm_sust_b_3d_v2i8_zero
-      {Intrinsic::nvvm_sust_b_3d_v4i16_clamp, 85598}, // __nvvm_sust_b_3d_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_3d_v4i16_trap, 85627}, // __nvvm_sust_b_3d_v4i16_trap
-      {Intrinsic::nvvm_sust_b_3d_v4i16_zero, 85655}, // __nvvm_sust_b_3d_v4i16_zero
-      {Intrinsic::nvvm_sust_b_3d_v4i32_clamp, 85683}, // __nvvm_sust_b_3d_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_3d_v4i32_trap, 85712}, // __nvvm_sust_b_3d_v4i32_trap
-      {Intrinsic::nvvm_sust_b_3d_v4i32_zero, 85740}, // __nvvm_sust_b_3d_v4i32_zero
-      {Intrinsic::nvvm_sust_b_3d_v4i8_clamp, 85768}, // __nvvm_sust_b_3d_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_3d_v4i8_trap, 85796}, // __nvvm_sust_b_3d_v4i8_trap
-      {Intrinsic::nvvm_sust_b_3d_v4i8_zero, 85823}, // __nvvm_sust_b_3d_v4i8_zero
-      {Intrinsic::nvvm_sust_p_1d_array_i16_trap, 85850}, // __nvvm_sust_p_1d_array_i16_trap
-      {Intrinsic::nvvm_sust_p_1d_array_i32_trap, 85882}, // __nvvm_sust_p_1d_array_i32_trap
-      {Intrinsic::nvvm_sust_p_1d_array_i8_trap, 85914}, // __nvvm_sust_p_1d_array_i8_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v2i16_trap, 85945}, // __nvvm_sust_p_1d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v2i32_trap, 85979}, // __nvvm_sust_p_1d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v2i8_trap, 86013}, // __nvvm_sust_p_1d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v4i16_trap, 86046}, // __nvvm_sust_p_1d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v4i32_trap, 86080}, // __nvvm_sust_p_1d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v4i8_trap, 86114}, // __nvvm_sust_p_1d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_p_1d_i16_trap, 86147}, // __nvvm_sust_p_1d_i16_trap
-      {Intrinsic::nvvm_sust_p_1d_i32_trap, 86173}, // __nvvm_sust_p_1d_i32_trap
-      {Intrinsic::nvvm_sust_p_1d_i8_trap, 86199}, // __nvvm_sust_p_1d_i8_trap
-      {Intrinsic::nvvm_sust_p_1d_v2i16_trap, 86224}, // __nvvm_sust_p_1d_v2i16_trap
-      {Intrinsic::nvvm_sust_p_1d_v2i32_trap, 86252}, // __nvvm_sust_p_1d_v2i32_trap
-      {Intrinsic::nvvm_sust_p_1d_v2i8_trap, 86280}, // __nvvm_sust_p_1d_v2i8_trap
-      {Intrinsic::nvvm_sust_p_1d_v4i16_trap, 86307}, // __nvvm_sust_p_1d_v4i16_trap
-      {Intrinsic::nvvm_sust_p_1d_v4i32_trap, 86335}, // __nvvm_sust_p_1d_v4i32_trap
-      {Intrinsic::nvvm_sust_p_1d_v4i8_trap, 86363}, // __nvvm_sust_p_1d_v4i8_trap
-      {Intrinsic::nvvm_sust_p_2d_array_i16_trap, 86390}, // __nvvm_sust_p_2d_array_i16_trap
-      {Intrinsic::nvvm_sust_p_2d_array_i32_trap, 86422}, // __nvvm_sust_p_2d_array_i32_trap
-      {Intrinsic::nvvm_sust_p_2d_array_i8_trap, 86454}, // __nvvm_sust_p_2d_array_i8_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v2i16_trap, 86485}, // __nvvm_sust_p_2d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v2i32_trap, 86519}, // __nvvm_sust_p_2d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v2i8_trap, 86553}, // __nvvm_sust_p_2d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v4i16_trap, 86586}, // __nvvm_sust_p_2d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v4i32_trap, 86620}, // __nvvm_sust_p_2d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v4i8_trap, 86654}, // __nvvm_sust_p_2d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_p_2d_i16_trap, 86687}, // __nvvm_sust_p_2d_i16_trap
-      {Intrinsic::nvvm_sust_p_2d_i32_trap, 86713}, // __nvvm_sust_p_2d_i32_trap
-      {Intrinsic::nvvm_sust_p_2d_i8_trap, 86739}, // __nvvm_sust_p_2d_i8_trap
-      {Intrinsic::nvvm_sust_p_2d_v2i16_trap, 86764}, // __nvvm_sust_p_2d_v2i16_trap
-      {Intrinsic::nvvm_sust_p_2d_v2i32_trap, 86792}, // __nvvm_sust_p_2d_v2i32_trap
-      {Intrinsic::nvvm_sust_p_2d_v2i8_trap, 86820}, // __nvvm_sust_p_2d_v2i8_trap
-      {Intrinsic::nvvm_sust_p_2d_v4i16_trap, 86847}, // __nvvm_sust_p_2d_v4i16_trap
-      {Intrinsic::nvvm_sust_p_2d_v4i32_trap, 86875}, // __nvvm_sust_p_2d_v4i32_trap
-      {Intrinsic::nvvm_sust_p_2d_v4i8_trap, 86903}, // __nvvm_sust_p_2d_v4i8_trap
-      {Intrinsic::nvvm_sust_p_3d_i16_trap, 86930}, // __nvvm_sust_p_3d_i16_trap
-      {Intrinsic::nvvm_sust_p_3d_i32_trap, 86956}, // __nvvm_sust_p_3d_i32_trap
-      {Intrinsic::nvvm_sust_p_3d_i8_trap, 86982}, // __nvvm_sust_p_3d_i8_trap
-      {Intrinsic::nvvm_sust_p_3d_v2i16_trap, 87007}, // __nvvm_sust_p_3d_v2i16_trap
-      {Intrinsic::nvvm_sust_p_3d_v2i32_trap, 87035}, // __nvvm_sust_p_3d_v2i32_trap
-      {Intrinsic::nvvm_sust_p_3d_v2i8_trap, 87063}, // __nvvm_sust_p_3d_v2i8_trap
-      {Intrinsic::nvvm_sust_p_3d_v4i16_trap, 87090}, // __nvvm_sust_p_3d_v4i16_trap
-      {Intrinsic::nvvm_sust_p_3d_v4i32_trap, 87118}, // __nvvm_sust_p_3d_v4i32_trap
-      {Intrinsic::nvvm_sust_p_3d_v4i8_trap, 87146}, // __nvvm_sust_p_3d_v4i8_trap
-      {Intrinsic::nvvm_swap_lo_hi_b64, 87173}, // __nvvm_swap_lo_hi_b64
-      {Intrinsic::nvvm_trunc_d, 87195}, // __nvvm_trunc_d
-      {Intrinsic::nvvm_trunc_f, 87210}, // __nvvm_trunc_f
-      {Intrinsic::nvvm_trunc_ftz_f, 87225}, // __nvvm_trunc_ftz_f
-      {Intrinsic::nvvm_txq_array_size, 87244}, // __nvvm_txq_array_size
-      {Intrinsic::nvvm_txq_channel_data_type, 87266}, // __nvvm_txq_channel_data_type
-      {Intrinsic::nvvm_txq_channel_order, 87295}, // __nvvm_txq_channel_order
-      {Intrinsic::nvvm_txq_depth, 87320}, // __nvvm_txq_depth
-      {Intrinsic::nvvm_txq_height, 87337}, // __nvvm_txq_height
-      {Intrinsic::nvvm_txq_num_mipmap_levels, 87355}, // __nvvm_txq_num_mipmap_levels
-      {Intrinsic::nvvm_txq_num_samples, 87384}, // __nvvm_txq_num_samples
-      {Intrinsic::nvvm_txq_width, 87407}, // __nvvm_txq_width
-      {Intrinsic::nvvm_ui2d_rm, 87424}, // __nvvm_ui2d_rm
-      {Intrinsic::nvvm_ui2d_rn, 87439}, // __nvvm_ui2d_rn
-      {Intrinsic::nvvm_ui2d_rp, 87454}, // __nvvm_ui2d_rp
-      {Intrinsic::nvvm_ui2d_rz, 87469}, // __nvvm_ui2d_rz
-      {Intrinsic::nvvm_ui2f_rm, 87484}, // __nvvm_ui2f_rm
-      {Intrinsic::nvvm_ui2f_rn, 87499}, // __nvvm_ui2f_rn
-      {Intrinsic::nvvm_ui2f_rp, 87514}, // __nvvm_ui2f_rp
-      {Intrinsic::nvvm_ui2f_rz, 87529}, // __nvvm_ui2f_rz
-      {Intrinsic::nvvm_ull2d_rm, 87544}, // __nvvm_ull2d_rm
-      {Intrinsic::nvvm_ull2d_rn, 87560}, // __nvvm_ull2d_rn
-      {Intrinsic::nvvm_ull2d_rp, 87576}, // __nvvm_ull2d_rp
-      {Intrinsic::nvvm_ull2d_rz, 87592}, // __nvvm_ull2d_rz
-      {Intrinsic::nvvm_ull2f_rm, 87608}, // __nvvm_ull2f_rm
-      {Intrinsic::nvvm_ull2f_rn, 87624}, // __nvvm_ull2f_rn
-      {Intrinsic::nvvm_ull2f_rp, 87640}, // __nvvm_ull2f_rp
-      {Intrinsic::nvvm_ull2f_rz, 87656}, // __nvvm_ull2f_rz
-      {Intrinsic::nvvm_vote_all, 87672}, // __nvvm_vote_all
-      {Intrinsic::nvvm_vote_all_sync, 87688}, // __nvvm_vote_all_sync
-      {Intrinsic::nvvm_vote_any, 87709}, // __nvvm_vote_any
-      {Intrinsic::nvvm_vote_any_sync, 87725}, // __nvvm_vote_any_sync
-      {Intrinsic::nvvm_vote_ballot, 87746}, // __nvvm_vote_ballot
-      {Intrinsic::nvvm_vote_ballot_sync, 87765}, // __nvvm_vote_ballot_sync
-      {Intrinsic::nvvm_vote_uni, 87789}, // __nvvm_vote_uni
-      {Intrinsic::nvvm_vote_uni_sync, 87805}, // __nvvm_vote_uni_sync
-      {Intrinsic::nvvm_barrier0, 74894}, // __syncthreads
+      {Intrinsic::nvvm_add_rm_d, 74943}, // __nvvm_add_rm_d
+      {Intrinsic::nvvm_add_rm_f, 74959}, // __nvvm_add_rm_f
+      {Intrinsic::nvvm_add_rm_ftz_f, 74975}, // __nvvm_add_rm_ftz_f
+      {Intrinsic::nvvm_add_rn_d, 74995}, // __nvvm_add_rn_d
+      {Intrinsic::nvvm_add_rn_f, 75011}, // __nvvm_add_rn_f
+      {Intrinsic::nvvm_add_rn_ftz_f, 75027}, // __nvvm_add_rn_ftz_f
+      {Intrinsic::nvvm_add_rp_d, 75047}, // __nvvm_add_rp_d
+      {Intrinsic::nvvm_add_rp_f, 75063}, // __nvvm_add_rp_f
+      {Intrinsic::nvvm_add_rp_ftz_f, 75079}, // __nvvm_add_rp_ftz_f
+      {Intrinsic::nvvm_add_rz_d, 75099}, // __nvvm_add_rz_d
+      {Intrinsic::nvvm_add_rz_f, 75115}, // __nvvm_add_rz_f
+      {Intrinsic::nvvm_add_rz_ftz_f, 75131}, // __nvvm_add_rz_ftz_f
+      {Intrinsic::nvvm_barrier, 75188}, // __nvvm_bar
+      {Intrinsic::nvvm_barrier0_and, 75270}, // __nvvm_bar0_and
+      {Intrinsic::nvvm_barrier0_or, 75286}, // __nvvm_bar0_or
+      {Intrinsic::nvvm_barrier0_popc, 75301}, // __nvvm_bar0_popc
+      {Intrinsic::nvvm_barrier_n, 75199}, // __nvvm_bar_n
+      {Intrinsic::nvvm_bar_sync, 75151}, // __nvvm_bar_sync
+      {Intrinsic::nvvm_bar_warp_sync, 75167}, // __nvvm_bar_warp_sync
+      {Intrinsic::nvvm_barrier_sync, 75212}, // __nvvm_barrier_sync
+      {Intrinsic::nvvm_barrier_sync_cnt, 75232}, // __nvvm_barrier_sync_cnt
+      {Intrinsic::nvvm_bitcast_d2ll, 75318}, // __nvvm_bitcast_d2ll
+      {Intrinsic::nvvm_bitcast_f2i, 75338}, // __nvvm_bitcast_f2i
+      {Intrinsic::nvvm_bitcast_i2f, 75357}, // __nvvm_bitcast_i2f
+      {Intrinsic::nvvm_bitcast_ll2d, 75376}, // __nvvm_bitcast_ll2d
+      {Intrinsic::nvvm_ceil_d, 75396}, // __nvvm_ceil_d
+      {Intrinsic::nvvm_ceil_f, 75410}, // __nvvm_ceil_f
+      {Intrinsic::nvvm_ceil_ftz_f, 75424}, // __nvvm_ceil_ftz_f
+      {Intrinsic::nvvm_cos_approx_f, 75442}, // __nvvm_cos_approx_f
+      {Intrinsic::nvvm_cos_approx_ftz_f, 75462}, // __nvvm_cos_approx_ftz_f
+      {Intrinsic::nvvm_d2f_rm, 75486}, // __nvvm_d2f_rm
+      {Intrinsic::nvvm_d2f_rm_ftz, 75500}, // __nvvm_d2f_rm_ftz
+      {Intrinsic::nvvm_d2f_rn, 75518}, // __nvvm_d2f_rn
+      {Intrinsic::nvvm_d2f_rn_ftz, 75532}, // __nvvm_d2f_rn_ftz
+      {Intrinsic::nvvm_d2f_rp, 75550}, // __nvvm_d2f_rp
+      {Intrinsic::nvvm_d2f_rp_ftz, 75564}, // __nvvm_d2f_rp_ftz
+      {Intrinsic::nvvm_d2f_rz, 75582}, // __nvvm_d2f_rz
+      {Intrinsic::nvvm_d2f_rz_ftz, 75596}, // __nvvm_d2f_rz_ftz
+      {Intrinsic::nvvm_d2i_hi, 75614}, // __nvvm_d2i_hi
+      {Intrinsic::nvvm_d2i_lo, 75628}, // __nvvm_d2i_lo
+      {Intrinsic::nvvm_d2i_rm, 75642}, // __nvvm_d2i_rm
+      {Intrinsic::nvvm_d2i_rn, 75656}, // __nvvm_d2i_rn
+      {Intrinsic::nvvm_d2i_rp, 75670}, // __nvvm_d2i_rp
+      {Intrinsic::nvvm_d2i_rz, 75684}, // __nvvm_d2i_rz
+      {Intrinsic::nvvm_d2ll_rm, 75698}, // __nvvm_d2ll_rm
+      {Intrinsic::nvvm_d2ll_rn, 75713}, // __nvvm_d2ll_rn
+      {Intrinsic::nvvm_d2ll_rp, 75728}, // __nvvm_d2ll_rp
+      {Intrinsic::nvvm_d2ll_rz, 75743}, // __nvvm_d2ll_rz
+      {Intrinsic::nvvm_d2ui_rm, 75758}, // __nvvm_d2ui_rm
+      {Intrinsic::nvvm_d2ui_rn, 75773}, // __nvvm_d2ui_rn
+      {Intrinsic::nvvm_d2ui_rp, 75788}, // __nvvm_d2ui_rp
+      {Intrinsic::nvvm_d2ui_rz, 75803}, // __nvvm_d2ui_rz
+      {Intrinsic::nvvm_d2ull_rm, 75818}, // __nvvm_d2ull_rm
+      {Intrinsic::nvvm_d2ull_rn, 75834}, // __nvvm_d2ull_rn
+      {Intrinsic::nvvm_d2ull_rp, 75850}, // __nvvm_d2ull_rp
+      {Intrinsic::nvvm_d2ull_rz, 75866}, // __nvvm_d2ull_rz
+      {Intrinsic::nvvm_div_approx_f, 75882}, // __nvvm_div_approx_f
+      {Intrinsic::nvvm_div_approx_ftz_f, 75902}, // __nvvm_div_approx_ftz_f
+      {Intrinsic::nvvm_div_rm_d, 75926}, // __nvvm_div_rm_d
+      {Intrinsic::nvvm_div_rm_f, 75942}, // __nvvm_div_rm_f
+      {Intrinsic::nvvm_div_rm_ftz_f, 75958}, // __nvvm_div_rm_ftz_f
+      {Intrinsic::nvvm_div_rn_d, 75978}, // __nvvm_div_rn_d
+      {Intrinsic::nvvm_div_rn_f, 75994}, // __nvvm_div_rn_f
+      {Intrinsic::nvvm_div_rn_ftz_f, 76010}, // __nvvm_div_rn_ftz_f
+      {Intrinsic::nvvm_div_rp_d, 76030}, // __nvvm_div_rp_d
+      {Intrinsic::nvvm_div_rp_f, 76046}, // __nvvm_div_rp_f
+      {Intrinsic::nvvm_div_rp_ftz_f, 76062}, // __nvvm_div_rp_ftz_f
+      {Intrinsic::nvvm_div_rz_d, 76082}, // __nvvm_div_rz_d
+      {Intrinsic::nvvm_div_rz_f, 76098}, // __nvvm_div_rz_f
+      {Intrinsic::nvvm_div_rz_ftz_f, 76114}, // __nvvm_div_rz_ftz_f
+      {Intrinsic::nvvm_ex2_approx_d, 76134}, // __nvvm_ex2_approx_d
+      {Intrinsic::nvvm_ex2_approx_f, 76154}, // __nvvm_ex2_approx_f
+      {Intrinsic::nvvm_ex2_approx_ftz_f, 76174}, // __nvvm_ex2_approx_ftz_f
+      {Intrinsic::nvvm_f2h_rn, 76198}, // __nvvm_f2h_rn
+      {Intrinsic::nvvm_f2h_rn_ftz, 76212}, // __nvvm_f2h_rn_ftz
+      {Intrinsic::nvvm_f2i_rm, 76230}, // __nvvm_f2i_rm
+      {Intrinsic::nvvm_f2i_rm_ftz, 76244}, // __nvvm_f2i_rm_ftz
+      {Intrinsic::nvvm_f2i_rn, 76262}, // __nvvm_f2i_rn
+      {Intrinsic::nvvm_f2i_rn_ftz, 76276}, // __nvvm_f2i_rn_ftz
+      {Intrinsic::nvvm_f2i_rp, 76294}, // __nvvm_f2i_rp
+      {Intrinsic::nvvm_f2i_rp_ftz, 76308}, // __nvvm_f2i_rp_ftz
+      {Intrinsic::nvvm_f2i_rz, 76326}, // __nvvm_f2i_rz
+      {Intrinsic::nvvm_f2i_rz_ftz, 76340}, // __nvvm_f2i_rz_ftz
+      {Intrinsic::nvvm_f2ll_rm, 76358}, // __nvvm_f2ll_rm
+      {Intrinsic::nvvm_f2ll_rm_ftz, 76373}, // __nvvm_f2ll_rm_ftz
+      {Intrinsic::nvvm_f2ll_rn, 76392}, // __nvvm_f2ll_rn
+      {Intrinsic::nvvm_f2ll_rn_ftz, 76407}, // __nvvm_f2ll_rn_ftz
+      {Intrinsic::nvvm_f2ll_rp, 76426}, // __nvvm_f2ll_rp
+      {Intrinsic::nvvm_f2ll_rp_ftz, 76441}, // __nvvm_f2ll_rp_ftz
+      {Intrinsic::nvvm_f2ll_rz, 76460}, // __nvvm_f2ll_rz
+      {Intrinsic::nvvm_f2ll_rz_ftz, 76475}, // __nvvm_f2ll_rz_ftz
+      {Intrinsic::nvvm_f2ui_rm, 76494}, // __nvvm_f2ui_rm
+      {Intrinsic::nvvm_f2ui_rm_ftz, 76509}, // __nvvm_f2ui_rm_ftz
+      {Intrinsic::nvvm_f2ui_rn, 76528}, // __nvvm_f2ui_rn
+      {Intrinsic::nvvm_f2ui_rn_ftz, 76543}, // __nvvm_f2ui_rn_ftz
+      {Intrinsic::nvvm_f2ui_rp, 76562}, // __nvvm_f2ui_rp
+      {Intrinsic::nvvm_f2ui_rp_ftz, 76577}, // __nvvm_f2ui_rp_ftz
+      {Intrinsic::nvvm_f2ui_rz, 76596}, // __nvvm_f2ui_rz
+      {Intrinsic::nvvm_f2ui_rz_ftz, 76611}, // __nvvm_f2ui_rz_ftz
+      {Intrinsic::nvvm_f2ull_rm, 76630}, // __nvvm_f2ull_rm
+      {Intrinsic::nvvm_f2ull_rm_ftz, 76646}, // __nvvm_f2ull_rm_ftz
+      {Intrinsic::nvvm_f2ull_rn, 76666}, // __nvvm_f2ull_rn
+      {Intrinsic::nvvm_f2ull_rn_ftz, 76682}, // __nvvm_f2ull_rn_ftz
+      {Intrinsic::nvvm_f2ull_rp, 76702}, // __nvvm_f2ull_rp
+      {Intrinsic::nvvm_f2ull_rp_ftz, 76718}, // __nvvm_f2ull_rp_ftz
+      {Intrinsic::nvvm_f2ull_rz, 76738}, // __nvvm_f2ull_rz
+      {Intrinsic::nvvm_f2ull_rz_ftz, 76754}, // __nvvm_f2ull_rz_ftz
+      {Intrinsic::nvvm_fabs_d, 76774}, // __nvvm_fabs_d
+      {Intrinsic::nvvm_fabs_f, 76788}, // __nvvm_fabs_f
+      {Intrinsic::nvvm_fabs_ftz_f, 76802}, // __nvvm_fabs_ftz_f
+      {Intrinsic::nvvm_floor_d, 76820}, // __nvvm_floor_d
+      {Intrinsic::nvvm_floor_f, 76835}, // __nvvm_floor_f
+      {Intrinsic::nvvm_floor_ftz_f, 76850}, // __nvvm_floor_ftz_f
+      {Intrinsic::nvvm_fma_rm_d, 76869}, // __nvvm_fma_rm_d
+      {Intrinsic::nvvm_fma_rm_f, 76885}, // __nvvm_fma_rm_f
+      {Intrinsic::nvvm_fma_rm_ftz_f, 76901}, // __nvvm_fma_rm_ftz_f
+      {Intrinsic::nvvm_fma_rn_d, 76921}, // __nvvm_fma_rn_d
+      {Intrinsic::nvvm_fma_rn_f, 76937}, // __nvvm_fma_rn_f
+      {Intrinsic::nvvm_fma_rn_ftz_f, 76953}, // __nvvm_fma_rn_ftz_f
+      {Intrinsic::nvvm_fma_rp_d, 76973}, // __nvvm_fma_rp_d
+      {Intrinsic::nvvm_fma_rp_f, 76989}, // __nvvm_fma_rp_f
+      {Intrinsic::nvvm_fma_rp_ftz_f, 77005}, // __nvvm_fma_rp_ftz_f
+      {Intrinsic::nvvm_fma_rz_d, 77025}, // __nvvm_fma_rz_d
+      {Intrinsic::nvvm_fma_rz_f, 77041}, // __nvvm_fma_rz_f
+      {Intrinsic::nvvm_fma_rz_ftz_f, 77057}, // __nvvm_fma_rz_ftz_f
+      {Intrinsic::nvvm_fmax_d, 77077}, // __nvvm_fmax_d
+      {Intrinsic::nvvm_fmax_f, 77091}, // __nvvm_fmax_f
+      {Intrinsic::nvvm_fmax_ftz_f, 77105}, // __nvvm_fmax_ftz_f
+      {Intrinsic::nvvm_fmin_d, 77123}, // __nvvm_fmin_d
+      {Intrinsic::nvvm_fmin_f, 77137}, // __nvvm_fmin_f
+      {Intrinsic::nvvm_fmin_ftz_f, 77151}, // __nvvm_fmin_ftz_f
+      {Intrinsic::nvvm_fns, 77169}, // __nvvm_fns
+      {Intrinsic::nvvm_i2d_rm, 77180}, // __nvvm_i2d_rm
+      {Intrinsic::nvvm_i2d_rn, 77194}, // __nvvm_i2d_rn
+      {Intrinsic::nvvm_i2d_rp, 77208}, // __nvvm_i2d_rp
+      {Intrinsic::nvvm_i2d_rz, 77222}, // __nvvm_i2d_rz
+      {Intrinsic::nvvm_i2f_rm, 77236}, // __nvvm_i2f_rm
+      {Intrinsic::nvvm_i2f_rn, 77250}, // __nvvm_i2f_rn
+      {Intrinsic::nvvm_i2f_rp, 77264}, // __nvvm_i2f_rp
+      {Intrinsic::nvvm_i2f_rz, 77278}, // __nvvm_i2f_rz
+      {Intrinsic::nvvm_isspacep_const, 77292}, // __nvvm_isspacep_const
+      {Intrinsic::nvvm_isspacep_global, 77314}, // __nvvm_isspacep_global
+      {Intrinsic::nvvm_isspacep_local, 77337}, // __nvvm_isspacep_local
+      {Intrinsic::nvvm_isspacep_shared, 77359}, // __nvvm_isspacep_shared
+      {Intrinsic::nvvm_istypep_sampler, 77382}, // __nvvm_istypep_sampler
+      {Intrinsic::nvvm_istypep_surface, 77405}, // __nvvm_istypep_surface
+      {Intrinsic::nvvm_istypep_texture, 77428}, // __nvvm_istypep_texture
+      {Intrinsic::nvvm_lg2_approx_d, 77451}, // __nvvm_lg2_approx_d
+      {Intrinsic::nvvm_lg2_approx_f, 77471}, // __nvvm_lg2_approx_f
+      {Intrinsic::nvvm_lg2_approx_ftz_f, 77491}, // __nvvm_lg2_approx_ftz_f
+      {Intrinsic::nvvm_ll2d_rm, 77515}, // __nvvm_ll2d_rm
+      {Intrinsic::nvvm_ll2d_rn, 77530}, // __nvvm_ll2d_rn
+      {Intrinsic::nvvm_ll2d_rp, 77545}, // __nvvm_ll2d_rp
+      {Intrinsic::nvvm_ll2d_rz, 77560}, // __nvvm_ll2d_rz
+      {Intrinsic::nvvm_ll2f_rm, 77575}, // __nvvm_ll2f_rm
+      {Intrinsic::nvvm_ll2f_rn, 77590}, // __nvvm_ll2f_rn
+      {Intrinsic::nvvm_ll2f_rp, 77605}, // __nvvm_ll2f_rp
+      {Intrinsic::nvvm_ll2f_rz, 77620}, // __nvvm_ll2f_rz
+      {Intrinsic::nvvm_lohi_i2d, 77635}, // __nvvm_lohi_i2d
+      {Intrinsic::nvvm_match_any_sync_i32, 77651}, // __nvvm_match_any_sync_i32
+      {Intrinsic::nvvm_match_any_sync_i64, 77677}, // __nvvm_match_any_sync_i64
+      {Intrinsic::nvvm_membar_cta, 77703}, // __nvvm_membar_cta
+      {Intrinsic::nvvm_membar_gl, 77721}, // __nvvm_membar_gl
+      {Intrinsic::nvvm_membar_sys, 77738}, // __nvvm_membar_sys
+      {Intrinsic::nvvm_mul24_i, 77964}, // __nvvm_mul24_i
+      {Intrinsic::nvvm_mul24_ui, 77979}, // __nvvm_mul24_ui
+      {Intrinsic::nvvm_mul_rm_d, 77756}, // __nvvm_mul_rm_d
+      {Intrinsic::nvvm_mul_rm_f, 77772}, // __nvvm_mul_rm_f
+      {Intrinsic::nvvm_mul_rm_ftz_f, 77788}, // __nvvm_mul_rm_ftz_f
+      {Intrinsic::nvvm_mul_rn_d, 77808}, // __nvvm_mul_rn_d
+      {Intrinsic::nvvm_mul_rn_f, 77824}, // __nvvm_mul_rn_f
+      {Intrinsic::nvvm_mul_rn_ftz_f, 77840}, // __nvvm_mul_rn_ftz_f
+      {Intrinsic::nvvm_mul_rp_d, 77860}, // __nvvm_mul_rp_d
+      {Intrinsic::nvvm_mul_rp_f, 77876}, // __nvvm_mul_rp_f
+      {Intrinsic::nvvm_mul_rp_ftz_f, 77892}, // __nvvm_mul_rp_ftz_f
+      {Intrinsic::nvvm_mul_rz_d, 77912}, // __nvvm_mul_rz_d
+      {Intrinsic::nvvm_mul_rz_f, 77928}, // __nvvm_mul_rz_f
+      {Intrinsic::nvvm_mul_rz_ftz_f, 77944}, // __nvvm_mul_rz_ftz_f
+      {Intrinsic::nvvm_mulhi_i, 77995}, // __nvvm_mulhi_i
+      {Intrinsic::nvvm_mulhi_ll, 78010}, // __nvvm_mulhi_ll
+      {Intrinsic::nvvm_mulhi_ui, 78026}, // __nvvm_mulhi_ui
+      {Intrinsic::nvvm_mulhi_ull, 78042}, // __nvvm_mulhi_ull
+      {Intrinsic::nvvm_prmt, 78059}, // __nvvm_prmt
+      {Intrinsic::nvvm_rcp_approx_ftz_d, 78071}, // __nvvm_rcp_approx_ftz_d
+      {Intrinsic::nvvm_rcp_rm_d, 78095}, // __nvvm_rcp_rm_d
+      {Intrinsic::nvvm_rcp_rm_f, 78111}, // __nvvm_rcp_rm_f
+      {Intrinsic::nvvm_rcp_rm_ftz_f, 78127}, // __nvvm_rcp_rm_ftz_f
+      {Intrinsic::nvvm_rcp_rn_d, 78147}, // __nvvm_rcp_rn_d
+      {Intrinsic::nvvm_rcp_rn_f, 78163}, // __nvvm_rcp_rn_f
+      {Intrinsic::nvvm_rcp_rn_ftz_f, 78179}, // __nvvm_rcp_rn_ftz_f
+      {Intrinsic::nvvm_rcp_rp_d, 78199}, // __nvvm_rcp_rp_d
+      {Intrinsic::nvvm_rcp_rp_f, 78215}, // __nvvm_rcp_rp_f
+      {Intrinsic::nvvm_rcp_rp_ftz_f, 78231}, // __nvvm_rcp_rp_ftz_f
+      {Intrinsic::nvvm_rcp_rz_d, 78251}, // __nvvm_rcp_rz_d
+      {Intrinsic::nvvm_rcp_rz_f, 78267}, // __nvvm_rcp_rz_f
+      {Intrinsic::nvvm_rcp_rz_ftz_f, 78283}, // __nvvm_rcp_rz_ftz_f
+      {Intrinsic::nvvm_read_ptx_sreg_clock, 78303}, // __nvvm_read_ptx_sreg_clock
+      {Intrinsic::nvvm_read_ptx_sreg_clock64, 78330}, // __nvvm_read_ptx_sreg_clock64
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_w, 78359}, // __nvvm_read_ptx_sreg_ctaid_w
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_x, 78388}, // __nvvm_read_ptx_sreg_ctaid_x
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_y, 78417}, // __nvvm_read_ptx_sreg_ctaid_y
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_z, 78446}, // __nvvm_read_ptx_sreg_ctaid_z
+      {Intrinsic::nvvm_read_ptx_sreg_envreg0, 78475}, // __nvvm_read_ptx_sreg_envreg0
+      {Intrinsic::nvvm_read_ptx_sreg_envreg1, 78504}, // __nvvm_read_ptx_sreg_envreg1
+      {Intrinsic::nvvm_read_ptx_sreg_envreg10, 78533}, // __nvvm_read_ptx_sreg_envreg10
+      {Intrinsic::nvvm_read_ptx_sreg_envreg11, 78563}, // __nvvm_read_ptx_sreg_envreg11
+      {Intrinsic::nvvm_read_ptx_sreg_envreg12, 78593}, // __nvvm_read_ptx_sreg_envreg12
+      {Intrinsic::nvvm_read_ptx_sreg_envreg13, 78623}, // __nvvm_read_ptx_sreg_envreg13
+      {Intrinsic::nvvm_read_ptx_sreg_envreg14, 78653}, // __nvvm_read_ptx_sreg_envreg14
+      {Intrinsic::nvvm_read_ptx_sreg_envreg15, 78683}, // __nvvm_read_ptx_sreg_envreg15
+      {Intrinsic::nvvm_read_ptx_sreg_envreg16, 78713}, // __nvvm_read_ptx_sreg_envreg16
+      {Intrinsic::nvvm_read_ptx_sreg_envreg17, 78743}, // __nvvm_read_ptx_sreg_envreg17
+      {Intrinsic::nvvm_read_ptx_sreg_envreg18, 78773}, // __nvvm_read_ptx_sreg_envreg18
+      {Intrinsic::nvvm_read_ptx_sreg_envreg19, 78803}, // __nvvm_read_ptx_sreg_envreg19
+      {Intrinsic::nvvm_read_ptx_sreg_envreg2, 78833}, // __nvvm_read_ptx_sreg_envreg2
+      {Intrinsic::nvvm_read_ptx_sreg_envreg20, 78862}, // __nvvm_read_ptx_sreg_envreg20
+      {Intrinsic::nvvm_read_ptx_sreg_envreg21, 78892}, // __nvvm_read_ptx_sreg_envreg21
+      {Intrinsic::nvvm_read_ptx_sreg_envreg22, 78922}, // __nvvm_read_ptx_sreg_envreg22
+      {Intrinsic::nvvm_read_ptx_sreg_envreg23, 78952}, // __nvvm_read_ptx_sreg_envreg23
+      {Intrinsic::nvvm_read_ptx_sreg_envreg24, 78982}, // __nvvm_read_ptx_sreg_envreg24
+      {Intrinsic::nvvm_read_ptx_sreg_envreg25, 79012}, // __nvvm_read_ptx_sreg_envreg25
+      {Intrinsic::nvvm_read_ptx_sreg_envreg26, 79042}, // __nvvm_read_ptx_sreg_envreg26
+      {Intrinsic::nvvm_read_ptx_sreg_envreg27, 79072}, // __nvvm_read_ptx_sreg_envreg27
+      {Intrinsic::nvvm_read_ptx_sreg_envreg28, 79102}, // __nvvm_read_ptx_sreg_envreg28
+      {Intrinsic::nvvm_read_ptx_sreg_envreg29, 79132}, // __nvvm_read_ptx_sreg_envreg29
+      {Intrinsic::nvvm_read_ptx_sreg_envreg3, 79162}, // __nvvm_read_ptx_sreg_envreg3
+      {Intrinsic::nvvm_read_ptx_sreg_envreg30, 79191}, // __nvvm_read_ptx_sreg_envreg30
+      {Intrinsic::nvvm_read_ptx_sreg_envreg31, 79221}, // __nvvm_read_ptx_sreg_envreg31
+      {Intrinsic::nvvm_read_ptx_sreg_envreg4, 79251}, // __nvvm_read_ptx_sreg_envreg4
+      {Intrinsic::nvvm_read_ptx_sreg_envreg5, 79280}, // __nvvm_read_ptx_sreg_envreg5
+      {Intrinsic::nvvm_read_ptx_sreg_envreg6, 79309}, // __nvvm_read_ptx_sreg_envreg6
+      {Intrinsic::nvvm_read_ptx_sreg_envreg7, 79338}, // __nvvm_read_ptx_sreg_envreg7
+      {Intrinsic::nvvm_read_ptx_sreg_envreg8, 79367}, // __nvvm_read_ptx_sreg_envreg8
+      {Intrinsic::nvvm_read_ptx_sreg_envreg9, 79396}, // __nvvm_read_ptx_sreg_envreg9
+      {Intrinsic::nvvm_read_ptx_sreg_gridid, 79425}, // __nvvm_read_ptx_sreg_gridid
+      {Intrinsic::nvvm_read_ptx_sreg_laneid, 79453}, // __nvvm_read_ptx_sreg_laneid
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_eq, 79481}, // __nvvm_read_ptx_sreg_lanemask_eq
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_ge, 79514}, // __nvvm_read_ptx_sreg_lanemask_ge
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_gt, 79547}, // __nvvm_read_ptx_sreg_lanemask_gt
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_le, 79580}, // __nvvm_read_ptx_sreg_lanemask_le
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_lt, 79613}, // __nvvm_read_ptx_sreg_lanemask_lt
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_w, 79646}, // __nvvm_read_ptx_sreg_nctaid_w
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_x, 79676}, // __nvvm_read_ptx_sreg_nctaid_x
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_y, 79706}, // __nvvm_read_ptx_sreg_nctaid_y
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_z, 79736}, // __nvvm_read_ptx_sreg_nctaid_z
+      {Intrinsic::nvvm_read_ptx_sreg_nsmid, 79766}, // __nvvm_read_ptx_sreg_nsmid
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_w, 79793}, // __nvvm_read_ptx_sreg_ntid_w
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_x, 79821}, // __nvvm_read_ptx_sreg_ntid_x
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_y, 79849}, // __nvvm_read_ptx_sreg_ntid_y
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_z, 79877}, // __nvvm_read_ptx_sreg_ntid_z
+      {Intrinsic::nvvm_read_ptx_sreg_nwarpid, 79905}, // __nvvm_read_ptx_sreg_nwarpid
+      {Intrinsic::nvvm_read_ptx_sreg_pm0, 79934}, // __nvvm_read_ptx_sreg_pm0
+      {Intrinsic::nvvm_read_ptx_sreg_pm1, 79959}, // __nvvm_read_ptx_sreg_pm1
+      {Intrinsic::nvvm_read_ptx_sreg_pm2, 79984}, // __nvvm_read_ptx_sreg_pm2
+      {Intrinsic::nvvm_read_ptx_sreg_pm3, 80009}, // __nvvm_read_ptx_sreg_pm3
+      {Intrinsic::nvvm_read_ptx_sreg_smid, 80034}, // __nvvm_read_ptx_sreg_smid
+      {Intrinsic::nvvm_read_ptx_sreg_tid_w, 80060}, // __nvvm_read_ptx_sreg_tid_w
+      {Intrinsic::nvvm_read_ptx_sreg_tid_x, 80087}, // __nvvm_read_ptx_sreg_tid_x
+      {Intrinsic::nvvm_read_ptx_sreg_tid_y, 80114}, // __nvvm_read_ptx_sreg_tid_y
+      {Intrinsic::nvvm_read_ptx_sreg_tid_z, 80141}, // __nvvm_read_ptx_sreg_tid_z
+      {Intrinsic::nvvm_read_ptx_sreg_warpid, 80168}, // __nvvm_read_ptx_sreg_warpid
+      {Intrinsic::nvvm_read_ptx_sreg_warpsize, 80196}, // __nvvm_read_ptx_sreg_warpsize
+      {Intrinsic::nvvm_rotate_b32, 80226}, // __nvvm_rotate_b32
+      {Intrinsic::nvvm_rotate_b64, 80244}, // __nvvm_rotate_b64
+      {Intrinsic::nvvm_rotate_right_b64, 80262}, // __nvvm_rotate_right_b64
+      {Intrinsic::nvvm_round_d, 80286}, // __nvvm_round_d
+      {Intrinsic::nvvm_round_f, 80301}, // __nvvm_round_f
+      {Intrinsic::nvvm_round_ftz_f, 80316}, // __nvvm_round_ftz_f
+      {Intrinsic::nvvm_rsqrt_approx_d, 80335}, // __nvvm_rsqrt_approx_d
+      {Intrinsic::nvvm_rsqrt_approx_f, 80357}, // __nvvm_rsqrt_approx_f
+      {Intrinsic::nvvm_rsqrt_approx_ftz_f, 80379}, // __nvvm_rsqrt_approx_ftz_f
+      {Intrinsic::nvvm_sad_i, 80405}, // __nvvm_sad_i
+      {Intrinsic::nvvm_sad_ui, 80418}, // __nvvm_sad_ui
+      {Intrinsic::nvvm_saturate_d, 80432}, // __nvvm_saturate_d
+      {Intrinsic::nvvm_saturate_f, 80450}, // __nvvm_saturate_f
+      {Intrinsic::nvvm_saturate_ftz_f, 80468}, // __nvvm_saturate_ftz_f
+      {Intrinsic::nvvm_shfl_bfly_f32, 80490}, // __nvvm_shfl_bfly_f32
+      {Intrinsic::nvvm_shfl_bfly_i32, 80511}, // __nvvm_shfl_bfly_i32
+      {Intrinsic::nvvm_shfl_down_f32, 80532}, // __nvvm_shfl_down_f32
+      {Intrinsic::nvvm_shfl_down_i32, 80553}, // __nvvm_shfl_down_i32
+      {Intrinsic::nvvm_shfl_idx_f32, 80574}, // __nvvm_shfl_idx_f32
+      {Intrinsic::nvvm_shfl_idx_i32, 80594}, // __nvvm_shfl_idx_i32
+      {Intrinsic::nvvm_shfl_sync_bfly_f32, 80614}, // __nvvm_shfl_sync_bfly_f32
+      {Intrinsic::nvvm_shfl_sync_bfly_i32, 80640}, // __nvvm_shfl_sync_bfly_i32
+      {Intrinsic::nvvm_shfl_sync_down_f32, 80666}, // __nvvm_shfl_sync_down_f32
+      {Intrinsic::nvvm_shfl_sync_down_i32, 80692}, // __nvvm_shfl_sync_down_i32
+      {Intrinsic::nvvm_shfl_sync_idx_f32, 80718}, // __nvvm_shfl_sync_idx_f32
+      {Intrinsic::nvvm_shfl_sync_idx_i32, 80743}, // __nvvm_shfl_sync_idx_i32
+      {Intrinsic::nvvm_shfl_sync_up_f32, 80768}, // __nvvm_shfl_sync_up_f32
+      {Intrinsic::nvvm_shfl_sync_up_i32, 80792}, // __nvvm_shfl_sync_up_i32
+      {Intrinsic::nvvm_shfl_up_f32, 80816}, // __nvvm_shfl_up_f32
+      {Intrinsic::nvvm_shfl_up_i32, 80835}, // __nvvm_shfl_up_i32
+      {Intrinsic::nvvm_sin_approx_f, 80854}, // __nvvm_sin_approx_f
+      {Intrinsic::nvvm_sin_approx_ftz_f, 80874}, // __nvvm_sin_approx_ftz_f
+      {Intrinsic::nvvm_sqrt_approx_f, 80898}, // __nvvm_sqrt_approx_f
+      {Intrinsic::nvvm_sqrt_approx_ftz_f, 80919}, // __nvvm_sqrt_approx_ftz_f
+      {Intrinsic::nvvm_sqrt_f, 80944}, // __nvvm_sqrt_f
+      {Intrinsic::nvvm_sqrt_rm_d, 80958}, // __nvvm_sqrt_rm_d
+      {Intrinsic::nvvm_sqrt_rm_f, 80975}, // __nvvm_sqrt_rm_f
+      {Intrinsic::nvvm_sqrt_rm_ftz_f, 80992}, // __nvvm_sqrt_rm_ftz_f
+      {Intrinsic::nvvm_sqrt_rn_d, 81013}, // __nvvm_sqrt_rn_d
+      {Intrinsic::nvvm_sqrt_rn_f, 81030}, // __nvvm_sqrt_rn_f
+      {Intrinsic::nvvm_sqrt_rn_ftz_f, 81047}, // __nvvm_sqrt_rn_ftz_f
+      {Intrinsic::nvvm_sqrt_rp_d, 81068}, // __nvvm_sqrt_rp_d
+      {Intrinsic::nvvm_sqrt_rp_f, 81085}, // __nvvm_sqrt_rp_f
+      {Intrinsic::nvvm_sqrt_rp_ftz_f, 81102}, // __nvvm_sqrt_rp_ftz_f
+      {Intrinsic::nvvm_sqrt_rz_d, 81123}, // __nvvm_sqrt_rz_d
+      {Intrinsic::nvvm_sqrt_rz_f, 81140}, // __nvvm_sqrt_rz_f
+      {Intrinsic::nvvm_sqrt_rz_ftz_f, 81157}, // __nvvm_sqrt_rz_ftz_f
+      {Intrinsic::nvvm_suq_array_size, 81178}, // __nvvm_suq_array_size
+      {Intrinsic::nvvm_suq_channel_data_type, 81200}, // __nvvm_suq_channel_data_type
+      {Intrinsic::nvvm_suq_channel_order, 81229}, // __nvvm_suq_channel_order
+      {Intrinsic::nvvm_suq_depth, 81254}, // __nvvm_suq_depth
+      {Intrinsic::nvvm_suq_height, 81271}, // __nvvm_suq_height
+      {Intrinsic::nvvm_suq_width, 81289}, // __nvvm_suq_width
+      {Intrinsic::nvvm_sust_b_1d_array_i16_clamp, 81306}, // __nvvm_sust_b_1d_array_i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i16_trap, 81339}, // __nvvm_sust_b_1d_array_i16_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i16_zero, 81371}, // __nvvm_sust_b_1d_array_i16_zero
+      {Intrinsic::nvvm_sust_b_1d_array_i32_clamp, 81403}, // __nvvm_sust_b_1d_array_i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i32_trap, 81436}, // __nvvm_sust_b_1d_array_i32_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i32_zero, 81468}, // __nvvm_sust_b_1d_array_i32_zero
+      {Intrinsic::nvvm_sust_b_1d_array_i64_clamp, 81500}, // __nvvm_sust_b_1d_array_i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i64_trap, 81533}, // __nvvm_sust_b_1d_array_i64_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i64_zero, 81565}, // __nvvm_sust_b_1d_array_i64_zero
+      {Intrinsic::nvvm_sust_b_1d_array_i8_clamp, 81597}, // __nvvm_sust_b_1d_array_i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i8_trap, 81629}, // __nvvm_sust_b_1d_array_i8_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i8_zero, 81660}, // __nvvm_sust_b_1d_array_i8_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i16_clamp, 81691}, // __nvvm_sust_b_1d_array_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i16_trap, 81726}, // __nvvm_sust_b_1d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i16_zero, 81760}, // __nvvm_sust_b_1d_array_v2i16_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i32_clamp, 81794}, // __nvvm_sust_b_1d_array_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i32_trap, 81829}, // __nvvm_sust_b_1d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i32_zero, 81863}, // __nvvm_sust_b_1d_array_v2i32_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i64_clamp, 81897}, // __nvvm_sust_b_1d_array_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i64_trap, 81932}, // __nvvm_sust_b_1d_array_v2i64_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i64_zero, 81966}, // __nvvm_sust_b_1d_array_v2i64_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i8_clamp, 82000}, // __nvvm_sust_b_1d_array_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i8_trap, 82034}, // __nvvm_sust_b_1d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i8_zero, 82067}, // __nvvm_sust_b_1d_array_v2i8_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v4i16_clamp, 82100}, // __nvvm_sust_b_1d_array_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v4i16_trap, 82135}, // __nvvm_sust_b_1d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v4i16_zero, 82169}, // __nvvm_sust_b_1d_array_v4i16_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v4i32_clamp, 82203}, // __nvvm_sust_b_1d_array_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v4i32_trap, 82238}, // __nvvm_sust_b_1d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v4i32_zero, 82272}, // __nvvm_sust_b_1d_array_v4i32_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v4i8_clamp, 82306}, // __nvvm_sust_b_1d_array_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v4i8_trap, 82340}, // __nvvm_sust_b_1d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v4i8_zero, 82373}, // __nvvm_sust_b_1d_array_v4i8_zero
+      {Intrinsic::nvvm_sust_b_1d_i16_clamp, 82406}, // __nvvm_sust_b_1d_i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_i16_trap, 82433}, // __nvvm_sust_b_1d_i16_trap
+      {Intrinsic::nvvm_sust_b_1d_i16_zero, 82459}, // __nvvm_sust_b_1d_i16_zero
+      {Intrinsic::nvvm_sust_b_1d_i32_clamp, 82485}, // __nvvm_sust_b_1d_i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_i32_trap, 82512}, // __nvvm_sust_b_1d_i32_trap
+      {Intrinsic::nvvm_sust_b_1d_i32_zero, 82538}, // __nvvm_sust_b_1d_i32_zero
+      {Intrinsic::nvvm_sust_b_1d_i64_clamp, 82564}, // __nvvm_sust_b_1d_i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_i64_trap, 82591}, // __nvvm_sust_b_1d_i64_trap
+      {Intrinsic::nvvm_sust_b_1d_i64_zero, 82617}, // __nvvm_sust_b_1d_i64_zero
+      {Intrinsic::nvvm_sust_b_1d_i8_clamp, 82643}, // __nvvm_sust_b_1d_i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_i8_trap, 82669}, // __nvvm_sust_b_1d_i8_trap
+      {Intrinsic::nvvm_sust_b_1d_i8_zero, 82694}, // __nvvm_sust_b_1d_i8_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i16_clamp, 82719}, // __nvvm_sust_b_1d_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i16_trap, 82748}, // __nvvm_sust_b_1d_v2i16_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i16_zero, 82776}, // __nvvm_sust_b_1d_v2i16_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i32_clamp, 82804}, // __nvvm_sust_b_1d_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i32_trap, 82833}, // __nvvm_sust_b_1d_v2i32_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i32_zero, 82861}, // __nvvm_sust_b_1d_v2i32_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i64_clamp, 82889}, // __nvvm_sust_b_1d_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i64_trap, 82918}, // __nvvm_sust_b_1d_v2i64_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i64_zero, 82946}, // __nvvm_sust_b_1d_v2i64_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i8_clamp, 82974}, // __nvvm_sust_b_1d_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i8_trap, 83002}, // __nvvm_sust_b_1d_v2i8_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i8_zero, 83029}, // __nvvm_sust_b_1d_v2i8_zero
+      {Intrinsic::nvvm_sust_b_1d_v4i16_clamp, 83056}, // __nvvm_sust_b_1d_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_v4i16_trap, 83085}, // __nvvm_sust_b_1d_v4i16_trap
+      {Intrinsic::nvvm_sust_b_1d_v4i16_zero, 83113}, // __nvvm_sust_b_1d_v4i16_zero
+      {Intrinsic::nvvm_sust_b_1d_v4i32_clamp, 83141}, // __nvvm_sust_b_1d_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_v4i32_trap, 83170}, // __nvvm_sust_b_1d_v4i32_trap
+      {Intrinsic::nvvm_sust_b_1d_v4i32_zero, 83198}, // __nvvm_sust_b_1d_v4i32_zero
+      {Intrinsic::nvvm_sust_b_1d_v4i8_clamp, 83226}, // __nvvm_sust_b_1d_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_v4i8_trap, 83254}, // __nvvm_sust_b_1d_v4i8_trap
+      {Intrinsic::nvvm_sust_b_1d_v4i8_zero, 83281}, // __nvvm_sust_b_1d_v4i8_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i16_clamp, 83308}, // __nvvm_sust_b_2d_array_i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i16_trap, 83341}, // __nvvm_sust_b_2d_array_i16_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i16_zero, 83373}, // __nvvm_sust_b_2d_array_i16_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i32_clamp, 83405}, // __nvvm_sust_b_2d_array_i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i32_trap, 83438}, // __nvvm_sust_b_2d_array_i32_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i32_zero, 83470}, // __nvvm_sust_b_2d_array_i32_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i64_clamp, 83502}, // __nvvm_sust_b_2d_array_i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i64_trap, 83535}, // __nvvm_sust_b_2d_array_i64_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i64_zero, 83567}, // __nvvm_sust_b_2d_array_i64_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i8_clamp, 83599}, // __nvvm_sust_b_2d_array_i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i8_trap, 83631}, // __nvvm_sust_b_2d_array_i8_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i8_zero, 83662}, // __nvvm_sust_b_2d_array_i8_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i16_clamp, 83693}, // __nvvm_sust_b_2d_array_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i16_trap, 83728}, // __nvvm_sust_b_2d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i16_zero, 83762}, // __nvvm_sust_b_2d_array_v2i16_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i32_clamp, 83796}, // __nvvm_sust_b_2d_array_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i32_trap, 83831}, // __nvvm_sust_b_2d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i32_zero, 83865}, // __nvvm_sust_b_2d_array_v2i32_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i64_clamp, 83899}, // __nvvm_sust_b_2d_array_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i64_trap, 83934}, // __nvvm_sust_b_2d_array_v2i64_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i64_zero, 83968}, // __nvvm_sust_b_2d_array_v2i64_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i8_clamp, 84002}, // __nvvm_sust_b_2d_array_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i8_trap, 84036}, // __nvvm_sust_b_2d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i8_zero, 84069}, // __nvvm_sust_b_2d_array_v2i8_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v4i16_clamp, 84102}, // __nvvm_sust_b_2d_array_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v4i16_trap, 84137}, // __nvvm_sust_b_2d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v4i16_zero, 84171}, // __nvvm_sust_b_2d_array_v4i16_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v4i32_clamp, 84205}, // __nvvm_sust_b_2d_array_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v4i32_trap, 84240}, // __nvvm_sust_b_2d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v4i32_zero, 84274}, // __nvvm_sust_b_2d_array_v4i32_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v4i8_clamp, 84308}, // __nvvm_sust_b_2d_array_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v4i8_trap, 84342}, // __nvvm_sust_b_2d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v4i8_zero, 84375}, // __nvvm_sust_b_2d_array_v4i8_zero
+      {Intrinsic::nvvm_sust_b_2d_i16_clamp, 84408}, // __nvvm_sust_b_2d_i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_i16_trap, 84435}, // __nvvm_sust_b_2d_i16_trap
+      {Intrinsic::nvvm_sust_b_2d_i16_zero, 84461}, // __nvvm_sust_b_2d_i16_zero
+      {Intrinsic::nvvm_sust_b_2d_i32_clamp, 84487}, // __nvvm_sust_b_2d_i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_i32_trap, 84514}, // __nvvm_sust_b_2d_i32_trap
+      {Intrinsic::nvvm_sust_b_2d_i32_zero, 84540}, // __nvvm_sust_b_2d_i32_zero
+      {Intrinsic::nvvm_sust_b_2d_i64_clamp, 84566}, // __nvvm_sust_b_2d_i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_i64_trap, 84593}, // __nvvm_sust_b_2d_i64_trap
+      {Intrinsic::nvvm_sust_b_2d_i64_zero, 84619}, // __nvvm_sust_b_2d_i64_zero
+      {Intrinsic::nvvm_sust_b_2d_i8_clamp, 84645}, // __nvvm_sust_b_2d_i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_i8_trap, 84671}, // __nvvm_sust_b_2d_i8_trap
+      {Intrinsic::nvvm_sust_b_2d_i8_zero, 84696}, // __nvvm_sust_b_2d_i8_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i16_clamp, 84721}, // __nvvm_sust_b_2d_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i16_trap, 84750}, // __nvvm_sust_b_2d_v2i16_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i16_zero, 84778}, // __nvvm_sust_b_2d_v2i16_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i32_clamp, 84806}, // __nvvm_sust_b_2d_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i32_trap, 84835}, // __nvvm_sust_b_2d_v2i32_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i32_zero, 84863}, // __nvvm_sust_b_2d_v2i32_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i64_clamp, 84891}, // __nvvm_sust_b_2d_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i64_trap, 84920}, // __nvvm_sust_b_2d_v2i64_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i64_zero, 84948}, // __nvvm_sust_b_2d_v2i64_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i8_clamp, 84976}, // __nvvm_sust_b_2d_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i8_trap, 85004}, // __nvvm_sust_b_2d_v2i8_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i8_zero, 85031}, // __nvvm_sust_b_2d_v2i8_zero
+      {Intrinsic::nvvm_sust_b_2d_v4i16_clamp, 85058}, // __nvvm_sust_b_2d_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_v4i16_trap, 85087}, // __nvvm_sust_b_2d_v4i16_trap
+      {Intrinsic::nvvm_sust_b_2d_v4i16_zero, 85115}, // __nvvm_sust_b_2d_v4i16_zero
+      {Intrinsic::nvvm_sust_b_2d_v4i32_clamp, 85143}, // __nvvm_sust_b_2d_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_v4i32_trap, 85172}, // __nvvm_sust_b_2d_v4i32_trap
+      {Intrinsic::nvvm_sust_b_2d_v4i32_zero, 85200}, // __nvvm_sust_b_2d_v4i32_zero
+      {Intrinsic::nvvm_sust_b_2d_v4i8_clamp, 85228}, // __nvvm_sust_b_2d_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_v4i8_trap, 85256}, // __nvvm_sust_b_2d_v4i8_trap
+      {Intrinsic::nvvm_sust_b_2d_v4i8_zero, 85283}, // __nvvm_sust_b_2d_v4i8_zero
+      {Intrinsic::nvvm_sust_b_3d_i16_clamp, 85310}, // __nvvm_sust_b_3d_i16_clamp
+      {Intrinsic::nvvm_sust_b_3d_i16_trap, 85337}, // __nvvm_sust_b_3d_i16_trap
+      {Intrinsic::nvvm_sust_b_3d_i16_zero, 85363}, // __nvvm_sust_b_3d_i16_zero
+      {Intrinsic::nvvm_sust_b_3d_i32_clamp, 85389}, // __nvvm_sust_b_3d_i32_clamp
+      {Intrinsic::nvvm_sust_b_3d_i32_trap, 85416}, // __nvvm_sust_b_3d_i32_trap
+      {Intrinsic::nvvm_sust_b_3d_i32_zero, 85442}, // __nvvm_sust_b_3d_i32_zero
+      {Intrinsic::nvvm_sust_b_3d_i64_clamp, 85468}, // __nvvm_sust_b_3d_i64_clamp
+      {Intrinsic::nvvm_sust_b_3d_i64_trap, 85495}, // __nvvm_sust_b_3d_i64_trap
+      {Intrinsic::nvvm_sust_b_3d_i64_zero, 85521}, // __nvvm_sust_b_3d_i64_zero
+      {Intrinsic::nvvm_sust_b_3d_i8_clamp, 85547}, // __nvvm_sust_b_3d_i8_clamp
+      {Intrinsic::nvvm_sust_b_3d_i8_trap, 85573}, // __nvvm_sust_b_3d_i8_trap
+      {Intrinsic::nvvm_sust_b_3d_i8_zero, 85598}, // __nvvm_sust_b_3d_i8_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i16_clamp, 85623}, // __nvvm_sust_b_3d_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i16_trap, 85652}, // __nvvm_sust_b_3d_v2i16_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i16_zero, 85680}, // __nvvm_sust_b_3d_v2i16_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i32_clamp, 85708}, // __nvvm_sust_b_3d_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i32_trap, 85737}, // __nvvm_sust_b_3d_v2i32_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i32_zero, 85765}, // __nvvm_sust_b_3d_v2i32_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i64_clamp, 85793}, // __nvvm_sust_b_3d_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i64_trap, 85822}, // __nvvm_sust_b_3d_v2i64_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i64_zero, 85850}, // __nvvm_sust_b_3d_v2i64_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i8_clamp, 85878}, // __nvvm_sust_b_3d_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i8_trap, 85906}, // __nvvm_sust_b_3d_v2i8_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i8_zero, 85933}, // __nvvm_sust_b_3d_v2i8_zero
+      {Intrinsic::nvvm_sust_b_3d_v4i16_clamp, 85960}, // __nvvm_sust_b_3d_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_3d_v4i16_trap, 85989}, // __nvvm_sust_b_3d_v4i16_trap
+      {Intrinsic::nvvm_sust_b_3d_v4i16_zero, 86017}, // __nvvm_sust_b_3d_v4i16_zero
+      {Intrinsic::nvvm_sust_b_3d_v4i32_clamp, 86045}, // __nvvm_sust_b_3d_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_3d_v4i32_trap, 86074}, // __nvvm_sust_b_3d_v4i32_trap
+      {Intrinsic::nvvm_sust_b_3d_v4i32_zero, 86102}, // __nvvm_sust_b_3d_v4i32_zero
+      {Intrinsic::nvvm_sust_b_3d_v4i8_clamp, 86130}, // __nvvm_sust_b_3d_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_3d_v4i8_trap, 86158}, // __nvvm_sust_b_3d_v4i8_trap
+      {Intrinsic::nvvm_sust_b_3d_v4i8_zero, 86185}, // __nvvm_sust_b_3d_v4i8_zero
+      {Intrinsic::nvvm_sust_p_1d_array_i16_trap, 86212}, // __nvvm_sust_p_1d_array_i16_trap
+      {Intrinsic::nvvm_sust_p_1d_array_i32_trap, 86244}, // __nvvm_sust_p_1d_array_i32_trap
+      {Intrinsic::nvvm_sust_p_1d_array_i8_trap, 86276}, // __nvvm_sust_p_1d_array_i8_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v2i16_trap, 86307}, // __nvvm_sust_p_1d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v2i32_trap, 86341}, // __nvvm_sust_p_1d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v2i8_trap, 86375}, // __nvvm_sust_p_1d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v4i16_trap, 86408}, // __nvvm_sust_p_1d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v4i32_trap, 86442}, // __nvvm_sust_p_1d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v4i8_trap, 86476}, // __nvvm_sust_p_1d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_p_1d_i16_trap, 86509}, // __nvvm_sust_p_1d_i16_trap
+      {Intrinsic::nvvm_sust_p_1d_i32_trap, 86535}, // __nvvm_sust_p_1d_i32_trap
+      {Intrinsic::nvvm_sust_p_1d_i8_trap, 86561}, // __nvvm_sust_p_1d_i8_trap
+      {Intrinsic::nvvm_sust_p_1d_v2i16_trap, 86586}, // __nvvm_sust_p_1d_v2i16_trap
+      {Intrinsic::nvvm_sust_p_1d_v2i32_trap, 86614}, // __nvvm_sust_p_1d_v2i32_trap
+      {Intrinsic::nvvm_sust_p_1d_v2i8_trap, 86642}, // __nvvm_sust_p_1d_v2i8_trap
+      {Intrinsic::nvvm_sust_p_1d_v4i16_trap, 86669}, // __nvvm_sust_p_1d_v4i16_trap
+      {Intrinsic::nvvm_sust_p_1d_v4i32_trap, 86697}, // __nvvm_sust_p_1d_v4i32_trap
+      {Intrinsic::nvvm_sust_p_1d_v4i8_trap, 86725}, // __nvvm_sust_p_1d_v4i8_trap
+      {Intrinsic::nvvm_sust_p_2d_array_i16_trap, 86752}, // __nvvm_sust_p_2d_array_i16_trap
+      {Intrinsic::nvvm_sust_p_2d_array_i32_trap, 86784}, // __nvvm_sust_p_2d_array_i32_trap
+      {Intrinsic::nvvm_sust_p_2d_array_i8_trap, 86816}, // __nvvm_sust_p_2d_array_i8_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v2i16_trap, 86847}, // __nvvm_sust_p_2d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v2i32_trap, 86881}, // __nvvm_sust_p_2d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v2i8_trap, 86915}, // __nvvm_sust_p_2d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v4i16_trap, 86948}, // __nvvm_sust_p_2d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v4i32_trap, 86982}, // __nvvm_sust_p_2d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v4i8_trap, 87016}, // __nvvm_sust_p_2d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_p_2d_i16_trap, 87049}, // __nvvm_sust_p_2d_i16_trap
+      {Intrinsic::nvvm_sust_p_2d_i32_trap, 87075}, // __nvvm_sust_p_2d_i32_trap
+      {Intrinsic::nvvm_sust_p_2d_i8_trap, 87101}, // __nvvm_sust_p_2d_i8_trap
+      {Intrinsic::nvvm_sust_p_2d_v2i16_trap, 87126}, // __nvvm_sust_p_2d_v2i16_trap
+      {Intrinsic::nvvm_sust_p_2d_v2i32_trap, 87154}, // __nvvm_sust_p_2d_v2i32_trap
+      {Intrinsic::nvvm_sust_p_2d_v2i8_trap, 87182}, // __nvvm_sust_p_2d_v2i8_trap
+      {Intrinsic::nvvm_sust_p_2d_v4i16_trap, 87209}, // __nvvm_sust_p_2d_v4i16_trap
+      {Intrinsic::nvvm_sust_p_2d_v4i32_trap, 87237}, // __nvvm_sust_p_2d_v4i32_trap
+      {Intrinsic::nvvm_sust_p_2d_v4i8_trap, 87265}, // __nvvm_sust_p_2d_v4i8_trap
+      {Intrinsic::nvvm_sust_p_3d_i16_trap, 87292}, // __nvvm_sust_p_3d_i16_trap
+      {Intrinsic::nvvm_sust_p_3d_i32_trap, 87318}, // __nvvm_sust_p_3d_i32_trap
+      {Intrinsic::nvvm_sust_p_3d_i8_trap, 87344}, // __nvvm_sust_p_3d_i8_trap
+      {Intrinsic::nvvm_sust_p_3d_v2i16_trap, 87369}, // __nvvm_sust_p_3d_v2i16_trap
+      {Intrinsic::nvvm_sust_p_3d_v2i32_trap, 87397}, // __nvvm_sust_p_3d_v2i32_trap
+      {Intrinsic::nvvm_sust_p_3d_v2i8_trap, 87425}, // __nvvm_sust_p_3d_v2i8_trap
+      {Intrinsic::nvvm_sust_p_3d_v4i16_trap, 87452}, // __nvvm_sust_p_3d_v4i16_trap
+      {Intrinsic::nvvm_sust_p_3d_v4i32_trap, 87480}, // __nvvm_sust_p_3d_v4i32_trap
+      {Intrinsic::nvvm_sust_p_3d_v4i8_trap, 87508}, // __nvvm_sust_p_3d_v4i8_trap
+      {Intrinsic::nvvm_swap_lo_hi_b64, 87535}, // __nvvm_swap_lo_hi_b64
+      {Intrinsic::nvvm_trunc_d, 87557}, // __nvvm_trunc_d
+      {Intrinsic::nvvm_trunc_f, 87572}, // __nvvm_trunc_f
+      {Intrinsic::nvvm_trunc_ftz_f, 87587}, // __nvvm_trunc_ftz_f
+      {Intrinsic::nvvm_txq_array_size, 87606}, // __nvvm_txq_array_size
+      {Intrinsic::nvvm_txq_channel_data_type, 87628}, // __nvvm_txq_channel_data_type
+      {Intrinsic::nvvm_txq_channel_order, 87657}, // __nvvm_txq_channel_order
+      {Intrinsic::nvvm_txq_depth, 87682}, // __nvvm_txq_depth
+      {Intrinsic::nvvm_txq_height, 87699}, // __nvvm_txq_height
+      {Intrinsic::nvvm_txq_num_mipmap_levels, 87717}, // __nvvm_txq_num_mipmap_levels
+      {Intrinsic::nvvm_txq_num_samples, 87746}, // __nvvm_txq_num_samples
+      {Intrinsic::nvvm_txq_width, 87769}, // __nvvm_txq_width
+      {Intrinsic::nvvm_ui2d_rm, 87786}, // __nvvm_ui2d_rm
+      {Intrinsic::nvvm_ui2d_rn, 87801}, // __nvvm_ui2d_rn
+      {Intrinsic::nvvm_ui2d_rp, 87816}, // __nvvm_ui2d_rp
+      {Intrinsic::nvvm_ui2d_rz, 87831}, // __nvvm_ui2d_rz
+      {Intrinsic::nvvm_ui2f_rm, 87846}, // __nvvm_ui2f_rm
+      {Intrinsic::nvvm_ui2f_rn, 87861}, // __nvvm_ui2f_rn
+      {Intrinsic::nvvm_ui2f_rp, 87876}, // __nvvm_ui2f_rp
+      {Intrinsic::nvvm_ui2f_rz, 87891}, // __nvvm_ui2f_rz
+      {Intrinsic::nvvm_ull2d_rm, 87906}, // __nvvm_ull2d_rm
+      {Intrinsic::nvvm_ull2d_rn, 87922}, // __nvvm_ull2d_rn
+      {Intrinsic::nvvm_ull2d_rp, 87938}, // __nvvm_ull2d_rp
+      {Intrinsic::nvvm_ull2d_rz, 87954}, // __nvvm_ull2d_rz
+      {Intrinsic::nvvm_ull2f_rm, 87970}, // __nvvm_ull2f_rm
+      {Intrinsic::nvvm_ull2f_rn, 87986}, // __nvvm_ull2f_rn
+      {Intrinsic::nvvm_ull2f_rp, 88002}, // __nvvm_ull2f_rp
+      {Intrinsic::nvvm_ull2f_rz, 88018}, // __nvvm_ull2f_rz
+      {Intrinsic::nvvm_vote_all, 88034}, // __nvvm_vote_all
+      {Intrinsic::nvvm_vote_all_sync, 88050}, // __nvvm_vote_all_sync
+      {Intrinsic::nvvm_vote_any, 88071}, // __nvvm_vote_any
+      {Intrinsic::nvvm_vote_any_sync, 88087}, // __nvvm_vote_any_sync
+      {Intrinsic::nvvm_vote_ballot, 88108}, // __nvvm_vote_ballot
+      {Intrinsic::nvvm_vote_ballot_sync, 88127}, // __nvvm_vote_ballot_sync
+      {Intrinsic::nvvm_vote_uni, 88151}, // __nvvm_vote_uni
+      {Intrinsic::nvvm_vote_uni_sync, 88167}, // __nvvm_vote_uni_sync
+      {Intrinsic::nvvm_barrier0, 75256}, // __syncthreads
     };
     auto I = std::lower_bound(std::begin(nvvmNames),
                               std::end(nvvmNames),
@@ -27948,372 +29678,374 @@
   }
   if (TargetPrefix == "ppc") {
     static const BuiltinEntry ppcNames[] = {
-      {Intrinsic::ppc_addf128_round_to_odd, 87826}, // __builtin_addf128_round_to_odd
-      {Intrinsic::ppc_altivec_crypto_vcipher, 87857}, // __builtin_altivec_crypto_vcipher
-      {Intrinsic::ppc_altivec_crypto_vcipherlast, 87890}, // __builtin_altivec_crypto_vcipherlast
-      {Intrinsic::ppc_altivec_crypto_vncipher, 87927}, // __builtin_altivec_crypto_vncipher
-      {Intrinsic::ppc_altivec_crypto_vncipherlast, 87961}, // __builtin_altivec_crypto_vncipherlast
-      {Intrinsic::ppc_altivec_crypto_vpermxor, 87999}, // __builtin_altivec_crypto_vpermxor
-      {Intrinsic::ppc_altivec_crypto_vpmsumb, 88033}, // __builtin_altivec_crypto_vpmsumb
-      {Intrinsic::ppc_altivec_crypto_vpmsumd, 88066}, // __builtin_altivec_crypto_vpmsumd
-      {Intrinsic::ppc_altivec_crypto_vpmsumh, 88099}, // __builtin_altivec_crypto_vpmsumh
-      {Intrinsic::ppc_altivec_crypto_vpmsumw, 88132}, // __builtin_altivec_crypto_vpmsumw
-      {Intrinsic::ppc_altivec_crypto_vsbox, 88165}, // __builtin_altivec_crypto_vsbox
-      {Intrinsic::ppc_altivec_crypto_vshasigmad, 88196}, // __builtin_altivec_crypto_vshasigmad
-      {Intrinsic::ppc_altivec_crypto_vshasigmaw, 88232}, // __builtin_altivec_crypto_vshasigmaw
-      {Intrinsic::ppc_altivec_dss, 88268}, // __builtin_altivec_dss
-      {Intrinsic::ppc_altivec_dssall, 88290}, // __builtin_altivec_dssall
-      {Intrinsic::ppc_altivec_dst, 88315}, // __builtin_altivec_dst
-      {Intrinsic::ppc_altivec_dstst, 88337}, // __builtin_altivec_dstst
-      {Intrinsic::ppc_altivec_dststt, 88361}, // __builtin_altivec_dststt
-      {Intrinsic::ppc_altivec_dstt, 88386}, // __builtin_altivec_dstt
-      {Intrinsic::ppc_altivec_mfvscr, 88409}, // __builtin_altivec_mfvscr
-      {Intrinsic::ppc_altivec_mtvscr, 88434}, // __builtin_altivec_mtvscr
-      {Intrinsic::ppc_altivec_vabsdub, 88459}, // __builtin_altivec_vabsdub
-      {Intrinsic::ppc_altivec_vabsduh, 88485}, // __builtin_altivec_vabsduh
-      {Intrinsic::ppc_altivec_vabsduw, 88511}, // __builtin_altivec_vabsduw
-      {Intrinsic::ppc_altivec_vaddcuq, 88537}, // __builtin_altivec_vaddcuq
-      {Intrinsic::ppc_altivec_vaddcuw, 88563}, // __builtin_altivec_vaddcuw
-      {Intrinsic::ppc_altivec_vaddecuq, 88589}, // __builtin_altivec_vaddecuq
-      {Intrinsic::ppc_altivec_vaddeuqm, 88616}, // __builtin_altivec_vaddeuqm
-      {Intrinsic::ppc_altivec_vaddsbs, 88643}, // __builtin_altivec_vaddsbs
-      {Intrinsic::ppc_altivec_vaddshs, 88669}, // __builtin_altivec_vaddshs
-      {Intrinsic::ppc_altivec_vaddsws, 88695}, // __builtin_altivec_vaddsws
-      {Intrinsic::ppc_altivec_vaddubs, 88721}, // __builtin_altivec_vaddubs
-      {Intrinsic::ppc_altivec_vadduhs, 88747}, // __builtin_altivec_vadduhs
-      {Intrinsic::ppc_altivec_vadduws, 88773}, // __builtin_altivec_vadduws
-      {Intrinsic::ppc_altivec_vavgsb, 88799}, // __builtin_altivec_vavgsb
-      {Intrinsic::ppc_altivec_vavgsh, 88824}, // __builtin_altivec_vavgsh
-      {Intrinsic::ppc_altivec_vavgsw, 88849}, // __builtin_altivec_vavgsw
-      {Intrinsic::ppc_altivec_vavgub, 88874}, // __builtin_altivec_vavgub
-      {Intrinsic::ppc_altivec_vavguh, 88899}, // __builtin_altivec_vavguh
-      {Intrinsic::ppc_altivec_vavguw, 88924}, // __builtin_altivec_vavguw
-      {Intrinsic::ppc_altivec_vbpermq, 88949}, // __builtin_altivec_vbpermq
-      {Intrinsic::ppc_altivec_vcfsx, 88975}, // __builtin_altivec_vcfsx
-      {Intrinsic::ppc_altivec_vcfux, 88999}, // __builtin_altivec_vcfux
-      {Intrinsic::ppc_altivec_vclzlsbb, 89023}, // __builtin_altivec_vclzlsbb
-      {Intrinsic::ppc_altivec_vcmpbfp, 89050}, // __builtin_altivec_vcmpbfp
-      {Intrinsic::ppc_altivec_vcmpbfp_p, 89076}, // __builtin_altivec_vcmpbfp_p
-      {Intrinsic::ppc_altivec_vcmpeqfp, 89104}, // __builtin_altivec_vcmpeqfp
-      {Intrinsic::ppc_altivec_vcmpeqfp_p, 89131}, // __builtin_altivec_vcmpeqfp_p
-      {Intrinsic::ppc_altivec_vcmpequb, 89160}, // __builtin_altivec_vcmpequb
-      {Intrinsic::ppc_altivec_vcmpequb_p, 89187}, // __builtin_altivec_vcmpequb_p
-      {Intrinsic::ppc_altivec_vcmpequd, 89216}, // __builtin_altivec_vcmpequd
-      {Intrinsic::ppc_altivec_vcmpequd_p, 89243}, // __builtin_altivec_vcmpequd_p
-      {Intrinsic::ppc_altivec_vcmpequh, 89272}, // __builtin_altivec_vcmpequh
-      {Intrinsic::ppc_altivec_vcmpequh_p, 89299}, // __builtin_altivec_vcmpequh_p
-      {Intrinsic::ppc_altivec_vcmpequw, 89328}, // __builtin_altivec_vcmpequw
-      {Intrinsic::ppc_altivec_vcmpequw_p, 89355}, // __builtin_altivec_vcmpequw_p
-      {Intrinsic::ppc_altivec_vcmpgefp, 89384}, // __builtin_altivec_vcmpgefp
-      {Intrinsic::ppc_altivec_vcmpgefp_p, 89411}, // __builtin_altivec_vcmpgefp_p
-      {Intrinsic::ppc_altivec_vcmpgtfp, 89440}, // __builtin_altivec_vcmpgtfp
-      {Intrinsic::ppc_altivec_vcmpgtfp_p, 89467}, // __builtin_altivec_vcmpgtfp_p
-      {Intrinsic::ppc_altivec_vcmpgtsb, 89496}, // __builtin_altivec_vcmpgtsb
-      {Intrinsic::ppc_altivec_vcmpgtsb_p, 89523}, // __builtin_altivec_vcmpgtsb_p
-      {Intrinsic::ppc_altivec_vcmpgtsd, 89552}, // __builtin_altivec_vcmpgtsd
-      {Intrinsic::ppc_altivec_vcmpgtsd_p, 89579}, // __builtin_altivec_vcmpgtsd_p
-      {Intrinsic::ppc_altivec_vcmpgtsh, 89608}, // __builtin_altivec_vcmpgtsh
-      {Intrinsic::ppc_altivec_vcmpgtsh_p, 89635}, // __builtin_altivec_vcmpgtsh_p
-      {Intrinsic::ppc_altivec_vcmpgtsw, 89664}, // __builtin_altivec_vcmpgtsw
-      {Intrinsic::ppc_altivec_vcmpgtsw_p, 89691}, // __builtin_altivec_vcmpgtsw_p
-      {Intrinsic::ppc_altivec_vcmpgtub, 89720}, // __builtin_altivec_vcmpgtub
-      {Intrinsic::ppc_altivec_vcmpgtub_p, 89747}, // __builtin_altivec_vcmpgtub_p
-      {Intrinsic::ppc_altivec_vcmpgtud, 89776}, // __builtin_altivec_vcmpgtud
-      {Intrinsic::ppc_altivec_vcmpgtud_p, 89803}, // __builtin_altivec_vcmpgtud_p
-      {Intrinsic::ppc_altivec_vcmpgtuh, 89832}, // __builtin_altivec_vcmpgtuh
-      {Intrinsic::ppc_altivec_vcmpgtuh_p, 89859}, // __builtin_altivec_vcmpgtuh_p
-      {Intrinsic::ppc_altivec_vcmpgtuw, 89888}, // __builtin_altivec_vcmpgtuw
-      {Intrinsic::ppc_altivec_vcmpgtuw_p, 89915}, // __builtin_altivec_vcmpgtuw_p
-      {Intrinsic::ppc_altivec_vcmpneb, 89944}, // __builtin_altivec_vcmpneb
-      {Intrinsic::ppc_altivec_vcmpneb_p, 89970}, // __builtin_altivec_vcmpneb_p
-      {Intrinsic::ppc_altivec_vcmpneh, 89998}, // __builtin_altivec_vcmpneh
-      {Intrinsic::ppc_altivec_vcmpneh_p, 90024}, // __builtin_altivec_vcmpneh_p
-      {Intrinsic::ppc_altivec_vcmpnew, 90052}, // __builtin_altivec_vcmpnew
-      {Intrinsic::ppc_altivec_vcmpnew_p, 90078}, // __builtin_altivec_vcmpnew_p
-      {Intrinsic::ppc_altivec_vcmpnezb, 90106}, // __builtin_altivec_vcmpnezb
-      {Intrinsic::ppc_altivec_vcmpnezb_p, 90133}, // __builtin_altivec_vcmpnezb_p
-      {Intrinsic::ppc_altivec_vcmpnezh, 90162}, // __builtin_altivec_vcmpnezh
-      {Intrinsic::ppc_altivec_vcmpnezh_p, 90189}, // __builtin_altivec_vcmpnezh_p
-      {Intrinsic::ppc_altivec_vcmpnezw, 90218}, // __builtin_altivec_vcmpnezw
-      {Intrinsic::ppc_altivec_vcmpnezw_p, 90245}, // __builtin_altivec_vcmpnezw_p
-      {Intrinsic::ppc_altivec_vctsxs, 90274}, // __builtin_altivec_vctsxs
-      {Intrinsic::ppc_altivec_vctuxs, 90299}, // __builtin_altivec_vctuxs
-      {Intrinsic::ppc_altivec_vctzlsbb, 90324}, // __builtin_altivec_vctzlsbb
-      {Intrinsic::ppc_altivec_vexptefp, 90351}, // __builtin_altivec_vexptefp
-      {Intrinsic::ppc_altivec_vgbbd, 90378}, // __builtin_altivec_vgbbd
-      {Intrinsic::ppc_altivec_vlogefp, 90402}, // __builtin_altivec_vlogefp
-      {Intrinsic::ppc_altivec_vmaddfp, 90428}, // __builtin_altivec_vmaddfp
-      {Intrinsic::ppc_altivec_vmaxfp, 90454}, // __builtin_altivec_vmaxfp
-      {Intrinsic::ppc_altivec_vmaxsb, 90479}, // __builtin_altivec_vmaxsb
-      {Intrinsic::ppc_altivec_vmaxsd, 90504}, // __builtin_altivec_vmaxsd
-      {Intrinsic::ppc_altivec_vmaxsh, 90529}, // __builtin_altivec_vmaxsh
-      {Intrinsic::ppc_altivec_vmaxsw, 90554}, // __builtin_altivec_vmaxsw
-      {Intrinsic::ppc_altivec_vmaxub, 90579}, // __builtin_altivec_vmaxub
-      {Intrinsic::ppc_altivec_vmaxud, 90604}, // __builtin_altivec_vmaxud
-      {Intrinsic::ppc_altivec_vmaxuh, 90629}, // __builtin_altivec_vmaxuh
-      {Intrinsic::ppc_altivec_vmaxuw, 90654}, // __builtin_altivec_vmaxuw
-      {Intrinsic::ppc_altivec_vmhaddshs, 90679}, // __builtin_altivec_vmhaddshs
-      {Intrinsic::ppc_altivec_vmhraddshs, 90707}, // __builtin_altivec_vmhraddshs
-      {Intrinsic::ppc_altivec_vminfp, 90736}, // __builtin_altivec_vminfp
-      {Intrinsic::ppc_altivec_vminsb, 90761}, // __builtin_altivec_vminsb
-      {Intrinsic::ppc_altivec_vminsd, 90786}, // __builtin_altivec_vminsd
-      {Intrinsic::ppc_altivec_vminsh, 90811}, // __builtin_altivec_vminsh
-      {Intrinsic::ppc_altivec_vminsw, 90836}, // __builtin_altivec_vminsw
-      {Intrinsic::ppc_altivec_vminub, 90861}, // __builtin_altivec_vminub
-      {Intrinsic::ppc_altivec_vminud, 90886}, // __builtin_altivec_vminud
-      {Intrinsic::ppc_altivec_vminuh, 90911}, // __builtin_altivec_vminuh
-      {Intrinsic::ppc_altivec_vminuw, 90936}, // __builtin_altivec_vminuw
-      {Intrinsic::ppc_altivec_vmladduhm, 90961}, // __builtin_altivec_vmladduhm
-      {Intrinsic::ppc_altivec_vmsummbm, 90989}, // __builtin_altivec_vmsummbm
-      {Intrinsic::ppc_altivec_vmsumshm, 91016}, // __builtin_altivec_vmsumshm
-      {Intrinsic::ppc_altivec_vmsumshs, 91043}, // __builtin_altivec_vmsumshs
-      {Intrinsic::ppc_altivec_vmsumubm, 91070}, // __builtin_altivec_vmsumubm
-      {Intrinsic::ppc_altivec_vmsumuhm, 91097}, // __builtin_altivec_vmsumuhm
-      {Intrinsic::ppc_altivec_vmsumuhs, 91124}, // __builtin_altivec_vmsumuhs
-      {Intrinsic::ppc_altivec_vmulesb, 91151}, // __builtin_altivec_vmulesb
-      {Intrinsic::ppc_altivec_vmulesh, 91177}, // __builtin_altivec_vmulesh
-      {Intrinsic::ppc_altivec_vmulesw, 91203}, // __builtin_altivec_vmulesw
-      {Intrinsic::ppc_altivec_vmuleub, 91229}, // __builtin_altivec_vmuleub
-      {Intrinsic::ppc_altivec_vmuleuh, 91255}, // __builtin_altivec_vmuleuh
-      {Intrinsic::ppc_altivec_vmuleuw, 91281}, // __builtin_altivec_vmuleuw
-      {Intrinsic::ppc_altivec_vmulosb, 91307}, // __builtin_altivec_vmulosb
-      {Intrinsic::ppc_altivec_vmulosh, 91333}, // __builtin_altivec_vmulosh
-      {Intrinsic::ppc_altivec_vmulosw, 91359}, // __builtin_altivec_vmulosw
-      {Intrinsic::ppc_altivec_vmuloub, 91385}, // __builtin_altivec_vmuloub
-      {Intrinsic::ppc_altivec_vmulouh, 91411}, // __builtin_altivec_vmulouh
-      {Intrinsic::ppc_altivec_vmulouw, 91437}, // __builtin_altivec_vmulouw
-      {Intrinsic::ppc_altivec_vnmsubfp, 91463}, // __builtin_altivec_vnmsubfp
-      {Intrinsic::ppc_altivec_vperm, 91490}, // __builtin_altivec_vperm_4si
-      {Intrinsic::ppc_altivec_vpkpx, 91518}, // __builtin_altivec_vpkpx
-      {Intrinsic::ppc_altivec_vpksdss, 91542}, // __builtin_altivec_vpksdss
-      {Intrinsic::ppc_altivec_vpksdus, 91568}, // __builtin_altivec_vpksdus
-      {Intrinsic::ppc_altivec_vpkshss, 91594}, // __builtin_altivec_vpkshss
-      {Intrinsic::ppc_altivec_vpkshus, 91620}, // __builtin_altivec_vpkshus
-      {Intrinsic::ppc_altivec_vpkswss, 91646}, // __builtin_altivec_vpkswss
-      {Intrinsic::ppc_altivec_vpkswus, 91672}, // __builtin_altivec_vpkswus
-      {Intrinsic::ppc_altivec_vpkudus, 91698}, // __builtin_altivec_vpkudus
-      {Intrinsic::ppc_altivec_vpkuhus, 91724}, // __builtin_altivec_vpkuhus
-      {Intrinsic::ppc_altivec_vpkuwus, 91750}, // __builtin_altivec_vpkuwus
-      {Intrinsic::ppc_altivec_vprtybd, 91776}, // __builtin_altivec_vprtybd
-      {Intrinsic::ppc_altivec_vprtybq, 91802}, // __builtin_altivec_vprtybq
-      {Intrinsic::ppc_altivec_vprtybw, 91828}, // __builtin_altivec_vprtybw
-      {Intrinsic::ppc_altivec_vrefp, 91854}, // __builtin_altivec_vrefp
-      {Intrinsic::ppc_altivec_vrfim, 91878}, // __builtin_altivec_vrfim
-      {Intrinsic::ppc_altivec_vrfin, 91902}, // __builtin_altivec_vrfin
-      {Intrinsic::ppc_altivec_vrfip, 91926}, // __builtin_altivec_vrfip
-      {Intrinsic::ppc_altivec_vrfiz, 91950}, // __builtin_altivec_vrfiz
-      {Intrinsic::ppc_altivec_vrlb, 91974}, // __builtin_altivec_vrlb
-      {Intrinsic::ppc_altivec_vrld, 91997}, // __builtin_altivec_vrld
-      {Intrinsic::ppc_altivec_vrldmi, 92020}, // __builtin_altivec_vrldmi
-      {Intrinsic::ppc_altivec_vrldnm, 92045}, // __builtin_altivec_vrldnm
-      {Intrinsic::ppc_altivec_vrlh, 92070}, // __builtin_altivec_vrlh
-      {Intrinsic::ppc_altivec_vrlw, 92093}, // __builtin_altivec_vrlw
-      {Intrinsic::ppc_altivec_vrlwmi, 92116}, // __builtin_altivec_vrlwmi
-      {Intrinsic::ppc_altivec_vrlwnm, 92141}, // __builtin_altivec_vrlwnm
-      {Intrinsic::ppc_altivec_vrsqrtefp, 92166}, // __builtin_altivec_vrsqrtefp
-      {Intrinsic::ppc_altivec_vsel, 92194}, // __builtin_altivec_vsel_4si
-      {Intrinsic::ppc_altivec_vsl, 92221}, // __builtin_altivec_vsl
-      {Intrinsic::ppc_altivec_vslb, 92243}, // __builtin_altivec_vslb
-      {Intrinsic::ppc_altivec_vslh, 92266}, // __builtin_altivec_vslh
-      {Intrinsic::ppc_altivec_vslo, 92289}, // __builtin_altivec_vslo
-      {Intrinsic::ppc_altivec_vslv, 92312}, // __builtin_altivec_vslv
-      {Intrinsic::ppc_altivec_vslw, 92335}, // __builtin_altivec_vslw
-      {Intrinsic::ppc_altivec_vsr, 92358}, // __builtin_altivec_vsr
-      {Intrinsic::ppc_altivec_vsrab, 92380}, // __builtin_altivec_vsrab
-      {Intrinsic::ppc_altivec_vsrah, 92404}, // __builtin_altivec_vsrah
-      {Intrinsic::ppc_altivec_vsraw, 92428}, // __builtin_altivec_vsraw
-      {Intrinsic::ppc_altivec_vsrb, 92452}, // __builtin_altivec_vsrb
-      {Intrinsic::ppc_altivec_vsrh, 92475}, // __builtin_altivec_vsrh
-      {Intrinsic::ppc_altivec_vsro, 92498}, // __builtin_altivec_vsro
-      {Intrinsic::ppc_altivec_vsrv, 92521}, // __builtin_altivec_vsrv
-      {Intrinsic::ppc_altivec_vsrw, 92544}, // __builtin_altivec_vsrw
-      {Intrinsic::ppc_altivec_vsubcuq, 92567}, // __builtin_altivec_vsubcuq
-      {Intrinsic::ppc_altivec_vsubcuw, 92593}, // __builtin_altivec_vsubcuw
-      {Intrinsic::ppc_altivec_vsubecuq, 92619}, // __builtin_altivec_vsubecuq
-      {Intrinsic::ppc_altivec_vsubeuqm, 92646}, // __builtin_altivec_vsubeuqm
-      {Intrinsic::ppc_altivec_vsubsbs, 92673}, // __builtin_altivec_vsubsbs
-      {Intrinsic::ppc_altivec_vsubshs, 92699}, // __builtin_altivec_vsubshs
-      {Intrinsic::ppc_altivec_vsubsws, 92725}, // __builtin_altivec_vsubsws
-      {Intrinsic::ppc_altivec_vsububs, 92751}, // __builtin_altivec_vsububs
-      {Intrinsic::ppc_altivec_vsubuhs, 92777}, // __builtin_altivec_vsubuhs
-      {Intrinsic::ppc_altivec_vsubuws, 92803}, // __builtin_altivec_vsubuws
-      {Intrinsic::ppc_altivec_vsum2sws, 92829}, // __builtin_altivec_vsum2sws
-      {Intrinsic::ppc_altivec_vsum4sbs, 92856}, // __builtin_altivec_vsum4sbs
-      {Intrinsic::ppc_altivec_vsum4shs, 92883}, // __builtin_altivec_vsum4shs
-      {Intrinsic::ppc_altivec_vsum4ubs, 92910}, // __builtin_altivec_vsum4ubs
-      {Intrinsic::ppc_altivec_vsumsws, 92937}, // __builtin_altivec_vsumsws
-      {Intrinsic::ppc_altivec_vupkhpx, 92963}, // __builtin_altivec_vupkhpx
-      {Intrinsic::ppc_altivec_vupkhsb, 92989}, // __builtin_altivec_vupkhsb
-      {Intrinsic::ppc_altivec_vupkhsh, 93015}, // __builtin_altivec_vupkhsh
-      {Intrinsic::ppc_altivec_vupkhsw, 93041}, // __builtin_altivec_vupkhsw
-      {Intrinsic::ppc_altivec_vupklpx, 93067}, // __builtin_altivec_vupklpx
-      {Intrinsic::ppc_altivec_vupklsb, 93093}, // __builtin_altivec_vupklsb
-      {Intrinsic::ppc_altivec_vupklsh, 93119}, // __builtin_altivec_vupklsh
-      {Intrinsic::ppc_altivec_vupklsw, 93145}, // __builtin_altivec_vupklsw
-      {Intrinsic::ppc_bpermd, 93171}, // __builtin_bpermd
-      {Intrinsic::ppc_divde, 93188}, // __builtin_divde
-      {Intrinsic::ppc_divdeu, 93204}, // __builtin_divdeu
-      {Intrinsic::ppc_divf128_round_to_odd, 93221}, // __builtin_divf128_round_to_odd
-      {Intrinsic::ppc_divwe, 93252}, // __builtin_divwe
-      {Intrinsic::ppc_divweu, 93268}, // __builtin_divweu
-      {Intrinsic::ppc_fmaf128_round_to_odd, 93285}, // __builtin_fmaf128_round_to_odd
-      {Intrinsic::ppc_get_texasr, 93316}, // __builtin_get_texasr
-      {Intrinsic::ppc_get_texasru, 93337}, // __builtin_get_texasru
-      {Intrinsic::ppc_get_tfhar, 93359}, // __builtin_get_tfhar
-      {Intrinsic::ppc_get_tfiar, 93379}, // __builtin_get_tfiar
-      {Intrinsic::ppc_mulf128_round_to_odd, 93399}, // __builtin_mulf128_round_to_odd
-      {Intrinsic::ppc_qpx_qvfabs, 93430}, // __builtin_qpx_qvfabs
-      {Intrinsic::ppc_qpx_qvfadd, 93451}, // __builtin_qpx_qvfadd
-      {Intrinsic::ppc_qpx_qvfadds, 93472}, // __builtin_qpx_qvfadds
-      {Intrinsic::ppc_qpx_qvfcfid, 93494}, // __builtin_qpx_qvfcfid
-      {Intrinsic::ppc_qpx_qvfcfids, 93516}, // __builtin_qpx_qvfcfids
-      {Intrinsic::ppc_qpx_qvfcfidu, 93539}, // __builtin_qpx_qvfcfidu
-      {Intrinsic::ppc_qpx_qvfcfidus, 93562}, // __builtin_qpx_qvfcfidus
-      {Intrinsic::ppc_qpx_qvfcmpeq, 93586}, // __builtin_qpx_qvfcmpeq
-      {Intrinsic::ppc_qpx_qvfcmpgt, 93609}, // __builtin_qpx_qvfcmpgt
-      {Intrinsic::ppc_qpx_qvfcmplt, 93632}, // __builtin_qpx_qvfcmplt
-      {Intrinsic::ppc_qpx_qvfcpsgn, 93655}, // __builtin_qpx_qvfcpsgn
-      {Intrinsic::ppc_qpx_qvfctid, 93678}, // __builtin_qpx_qvfctid
-      {Intrinsic::ppc_qpx_qvfctidu, 93700}, // __builtin_qpx_qvfctidu
-      {Intrinsic::ppc_qpx_qvfctiduz, 93723}, // __builtin_qpx_qvfctiduz
-      {Intrinsic::ppc_qpx_qvfctidz, 93747}, // __builtin_qpx_qvfctidz
-      {Intrinsic::ppc_qpx_qvfctiw, 93770}, // __builtin_qpx_qvfctiw
-      {Intrinsic::ppc_qpx_qvfctiwu, 93792}, // __builtin_qpx_qvfctiwu
-      {Intrinsic::ppc_qpx_qvfctiwuz, 93815}, // __builtin_qpx_qvfctiwuz
-      {Intrinsic::ppc_qpx_qvfctiwz, 93839}, // __builtin_qpx_qvfctiwz
-      {Intrinsic::ppc_qpx_qvflogical, 93862}, // __builtin_qpx_qvflogical
-      {Intrinsic::ppc_qpx_qvfmadd, 93887}, // __builtin_qpx_qvfmadd
-      {Intrinsic::ppc_qpx_qvfmadds, 93909}, // __builtin_qpx_qvfmadds
-      {Intrinsic::ppc_qpx_qvfmsub, 93932}, // __builtin_qpx_qvfmsub
-      {Intrinsic::ppc_qpx_qvfmsubs, 93954}, // __builtin_qpx_qvfmsubs
-      {Intrinsic::ppc_qpx_qvfmul, 93977}, // __builtin_qpx_qvfmul
-      {Intrinsic::ppc_qpx_qvfmuls, 93998}, // __builtin_qpx_qvfmuls
-      {Intrinsic::ppc_qpx_qvfnabs, 94020}, // __builtin_qpx_qvfnabs
-      {Intrinsic::ppc_qpx_qvfneg, 94042}, // __builtin_qpx_qvfneg
-      {Intrinsic::ppc_qpx_qvfnmadd, 94063}, // __builtin_qpx_qvfnmadd
-      {Intrinsic::ppc_qpx_qvfnmadds, 94086}, // __builtin_qpx_qvfnmadds
-      {Intrinsic::ppc_qpx_qvfnmsub, 94110}, // __builtin_qpx_qvfnmsub
-      {Intrinsic::ppc_qpx_qvfnmsubs, 94133}, // __builtin_qpx_qvfnmsubs
-      {Intrinsic::ppc_qpx_qvfperm, 94157}, // __builtin_qpx_qvfperm
-      {Intrinsic::ppc_qpx_qvfre, 94179}, // __builtin_qpx_qvfre
-      {Intrinsic::ppc_qpx_qvfres, 94199}, // __builtin_qpx_qvfres
-      {Intrinsic::ppc_qpx_qvfrim, 94220}, // __builtin_qpx_qvfrim
-      {Intrinsic::ppc_qpx_qvfrin, 94241}, // __builtin_qpx_qvfrin
-      {Intrinsic::ppc_qpx_qvfrip, 94262}, // __builtin_qpx_qvfrip
-      {Intrinsic::ppc_qpx_qvfriz, 94283}, // __builtin_qpx_qvfriz
-      {Intrinsic::ppc_qpx_qvfrsp, 94304}, // __builtin_qpx_qvfrsp
-      {Intrinsic::ppc_qpx_qvfrsqrte, 94325}, // __builtin_qpx_qvfrsqrte
-      {Intrinsic::ppc_qpx_qvfrsqrtes, 94349}, // __builtin_qpx_qvfrsqrtes
-      {Intrinsic::ppc_qpx_qvfsel, 94374}, // __builtin_qpx_qvfsel
-      {Intrinsic::ppc_qpx_qvfsub, 94395}, // __builtin_qpx_qvfsub
-      {Intrinsic::ppc_qpx_qvfsubs, 94416}, // __builtin_qpx_qvfsubs
-      {Intrinsic::ppc_qpx_qvftstnan, 94438}, // __builtin_qpx_qvftstnan
-      {Intrinsic::ppc_qpx_qvfxmadd, 94462}, // __builtin_qpx_qvfxmadd
-      {Intrinsic::ppc_qpx_qvfxmadds, 94485}, // __builtin_qpx_qvfxmadds
-      {Intrinsic::ppc_qpx_qvfxmul, 94509}, // __builtin_qpx_qvfxmul
-      {Intrinsic::ppc_qpx_qvfxmuls, 94531}, // __builtin_qpx_qvfxmuls
-      {Intrinsic::ppc_qpx_qvfxxcpnmadd, 94554}, // __builtin_qpx_qvfxxcpnmadd
-      {Intrinsic::ppc_qpx_qvfxxcpnmadds, 94581}, // __builtin_qpx_qvfxxcpnmadds
-      {Intrinsic::ppc_qpx_qvfxxmadd, 94609}, // __builtin_qpx_qvfxxmadd
-      {Intrinsic::ppc_qpx_qvfxxmadds, 94633}, // __builtin_qpx_qvfxxmadds
-      {Intrinsic::ppc_qpx_qvfxxnpmadd, 94658}, // __builtin_qpx_qvfxxnpmadd
-      {Intrinsic::ppc_qpx_qvfxxnpmadds, 94684}, // __builtin_qpx_qvfxxnpmadds
-      {Intrinsic::ppc_qpx_qvgpci, 94711}, // __builtin_qpx_qvgpci
-      {Intrinsic::ppc_qpx_qvlfcd, 94732}, // __builtin_qpx_qvlfcd
-      {Intrinsic::ppc_qpx_qvlfcda, 94753}, // __builtin_qpx_qvlfcda
-      {Intrinsic::ppc_qpx_qvlfcs, 94775}, // __builtin_qpx_qvlfcs
-      {Intrinsic::ppc_qpx_qvlfcsa, 94796}, // __builtin_qpx_qvlfcsa
-      {Intrinsic::ppc_qpx_qvlfd, 94818}, // __builtin_qpx_qvlfd
-      {Intrinsic::ppc_qpx_qvlfda, 94838}, // __builtin_qpx_qvlfda
-      {Intrinsic::ppc_qpx_qvlfiwa, 94859}, // __builtin_qpx_qvlfiwa
-      {Intrinsic::ppc_qpx_qvlfiwaa, 94881}, // __builtin_qpx_qvlfiwaa
-      {Intrinsic::ppc_qpx_qvlfiwz, 94904}, // __builtin_qpx_qvlfiwz
-      {Intrinsic::ppc_qpx_qvlfiwza, 94926}, // __builtin_qpx_qvlfiwza
-      {Intrinsic::ppc_qpx_qvlfs, 94949}, // __builtin_qpx_qvlfs
-      {Intrinsic::ppc_qpx_qvlfsa, 94969}, // __builtin_qpx_qvlfsa
-      {Intrinsic::ppc_qpx_qvlpcld, 94990}, // __builtin_qpx_qvlpcld
-      {Intrinsic::ppc_qpx_qvlpcls, 95012}, // __builtin_qpx_qvlpcls
-      {Intrinsic::ppc_qpx_qvlpcrd, 95034}, // __builtin_qpx_qvlpcrd
-      {Intrinsic::ppc_qpx_qvlpcrs, 95056}, // __builtin_qpx_qvlpcrs
-      {Intrinsic::ppc_qpx_qvstfcd, 95078}, // __builtin_qpx_qvstfcd
-      {Intrinsic::ppc_qpx_qvstfcda, 95100}, // __builtin_qpx_qvstfcda
-      {Intrinsic::ppc_qpx_qvstfcs, 95123}, // __builtin_qpx_qvstfcs
-      {Intrinsic::ppc_qpx_qvstfcsa, 95145}, // __builtin_qpx_qvstfcsa
-      {Intrinsic::ppc_qpx_qvstfd, 95168}, // __builtin_qpx_qvstfd
-      {Intrinsic::ppc_qpx_qvstfda, 95189}, // __builtin_qpx_qvstfda
-      {Intrinsic::ppc_qpx_qvstfiw, 95211}, // __builtin_qpx_qvstfiw
-      {Intrinsic::ppc_qpx_qvstfiwa, 95233}, // __builtin_qpx_qvstfiwa
-      {Intrinsic::ppc_qpx_qvstfs, 95256}, // __builtin_qpx_qvstfs
-      {Intrinsic::ppc_qpx_qvstfsa, 95277}, // __builtin_qpx_qvstfsa
-      {Intrinsic::ppc_set_texasr, 95368}, // __builtin_set_texasr
-      {Intrinsic::ppc_set_texasru, 95389}, // __builtin_set_texasru
-      {Intrinsic::ppc_set_tfhar, 95411}, // __builtin_set_tfhar
-      {Intrinsic::ppc_set_tfiar, 95431}, // __builtin_set_tfiar
-      {Intrinsic::ppc_sqrtf128_round_to_odd, 95451}, // __builtin_sqrtf128_round_to_odd
-      {Intrinsic::ppc_subf128_round_to_odd, 95483}, // __builtin_subf128_round_to_odd
-      {Intrinsic::ppc_tabort, 95514}, // __builtin_tabort
-      {Intrinsic::ppc_tabortdc, 95531}, // __builtin_tabortdc
-      {Intrinsic::ppc_tabortdci, 95550}, // __builtin_tabortdci
-      {Intrinsic::ppc_tabortwc, 95570}, // __builtin_tabortwc
-      {Intrinsic::ppc_tabortwci, 95589}, // __builtin_tabortwci
-      {Intrinsic::ppc_tbegin, 95609}, // __builtin_tbegin
-      {Intrinsic::ppc_tcheck, 95626}, // __builtin_tcheck
-      {Intrinsic::ppc_tend, 95643}, // __builtin_tend
-      {Intrinsic::ppc_tendall, 95658}, // __builtin_tendall
-      {Intrinsic::ppc_trechkpt, 95676}, // __builtin_trechkpt
-      {Intrinsic::ppc_treclaim, 95695}, // __builtin_treclaim
-      {Intrinsic::ppc_tresume, 95714}, // __builtin_tresume
-      {Intrinsic::ppc_truncf128_round_to_odd, 95732}, // __builtin_truncf128_round_to_odd
-      {Intrinsic::ppc_tsr, 95765}, // __builtin_tsr
-      {Intrinsic::ppc_tsuspend, 95779}, // __builtin_tsuspend
-      {Intrinsic::ppc_ttest, 95798}, // __builtin_ttest
-      {Intrinsic::ppc_scalar_extract_expq, 95299}, // __builtin_vsx_scalar_extract_expq
-      {Intrinsic::ppc_scalar_insert_exp_qp, 95333}, // __builtin_vsx_scalar_insert_exp_qp
-      {Intrinsic::ppc_vsx_xsmaxdp, 95814}, // __builtin_vsx_xsmaxdp
-      {Intrinsic::ppc_vsx_xsmindp, 95836}, // __builtin_vsx_xsmindp
-      {Intrinsic::ppc_vsx_xvcmpeqdp, 95858}, // __builtin_vsx_xvcmpeqdp
-      {Intrinsic::ppc_vsx_xvcmpeqdp_p, 95882}, // __builtin_vsx_xvcmpeqdp_p
-      {Intrinsic::ppc_vsx_xvcmpeqsp, 95908}, // __builtin_vsx_xvcmpeqsp
-      {Intrinsic::ppc_vsx_xvcmpeqsp_p, 95932}, // __builtin_vsx_xvcmpeqsp_p
-      {Intrinsic::ppc_vsx_xvcmpgedp, 95958}, // __builtin_vsx_xvcmpgedp
-      {Intrinsic::ppc_vsx_xvcmpgedp_p, 95982}, // __builtin_vsx_xvcmpgedp_p
-      {Intrinsic::ppc_vsx_xvcmpgesp, 96008}, // __builtin_vsx_xvcmpgesp
-      {Intrinsic::ppc_vsx_xvcmpgesp_p, 96032}, // __builtin_vsx_xvcmpgesp_p
-      {Intrinsic::ppc_vsx_xvcmpgtdp, 96058}, // __builtin_vsx_xvcmpgtdp
-      {Intrinsic::ppc_vsx_xvcmpgtdp_p, 96082}, // __builtin_vsx_xvcmpgtdp_p
-      {Intrinsic::ppc_vsx_xvcmpgtsp, 96108}, // __builtin_vsx_xvcmpgtsp
-      {Intrinsic::ppc_vsx_xvcmpgtsp_p, 96132}, // __builtin_vsx_xvcmpgtsp_p
-      {Intrinsic::ppc_vsx_xvcvdpsp, 96158}, // __builtin_vsx_xvcvdpsp
-      {Intrinsic::ppc_vsx_xvcvdpsxws, 96181}, // __builtin_vsx_xvcvdpsxws
-      {Intrinsic::ppc_vsx_xvcvdpuxws, 96206}, // __builtin_vsx_xvcvdpuxws
-      {Intrinsic::ppc_vsx_xvcvhpsp, 96231}, // __builtin_vsx_xvcvhpsp
-      {Intrinsic::ppc_vsx_xvcvspdp, 96254}, // __builtin_vsx_xvcvspdp
-      {Intrinsic::ppc_vsx_xvcvsphp, 96277}, // __builtin_vsx_xvcvsphp
-      {Intrinsic::ppc_vsx_xvcvsxdsp, 96300}, // __builtin_vsx_xvcvsxdsp
-      {Intrinsic::ppc_vsx_xvcvsxwdp, 96324}, // __builtin_vsx_xvcvsxwdp
-      {Intrinsic::ppc_vsx_xvcvuxdsp, 96348}, // __builtin_vsx_xvcvuxdsp
-      {Intrinsic::ppc_vsx_xvcvuxwdp, 96372}, // __builtin_vsx_xvcvuxwdp
-      {Intrinsic::ppc_vsx_xvdivdp, 96396}, // __builtin_vsx_xvdivdp
-      {Intrinsic::ppc_vsx_xvdivsp, 96418}, // __builtin_vsx_xvdivsp
-      {Intrinsic::ppc_vsx_xviexpdp, 96440}, // __builtin_vsx_xviexpdp
-      {Intrinsic::ppc_vsx_xviexpsp, 96463}, // __builtin_vsx_xviexpsp
-      {Intrinsic::ppc_vsx_xvmaxdp, 96486}, // __builtin_vsx_xvmaxdp
-      {Intrinsic::ppc_vsx_xvmaxsp, 96508}, // __builtin_vsx_xvmaxsp
-      {Intrinsic::ppc_vsx_xvmindp, 96530}, // __builtin_vsx_xvmindp
-      {Intrinsic::ppc_vsx_xvminsp, 96552}, // __builtin_vsx_xvminsp
-      {Intrinsic::ppc_vsx_xvredp, 96574}, // __builtin_vsx_xvredp
-      {Intrinsic::ppc_vsx_xvresp, 96595}, // __builtin_vsx_xvresp
-      {Intrinsic::ppc_vsx_xvrsqrtedp, 96616}, // __builtin_vsx_xvrsqrtedp
-      {Intrinsic::ppc_vsx_xvrsqrtesp, 96641}, // __builtin_vsx_xvrsqrtesp
-      {Intrinsic::ppc_vsx_xvtstdcdp, 96666}, // __builtin_vsx_xvtstdcdp
-      {Intrinsic::ppc_vsx_xvtstdcsp, 96690}, // __builtin_vsx_xvtstdcsp
-      {Intrinsic::ppc_vsx_xvxexpdp, 96714}, // __builtin_vsx_xvxexpdp
-      {Intrinsic::ppc_vsx_xvxexpsp, 96737}, // __builtin_vsx_xvxexpsp
-      {Intrinsic::ppc_vsx_xvxsigdp, 96760}, // __builtin_vsx_xvxsigdp
-      {Intrinsic::ppc_vsx_xvxsigsp, 96783}, // __builtin_vsx_xvxsigsp
-      {Intrinsic::ppc_vsx_xxextractuw, 96806}, // __builtin_vsx_xxextractuw
-      {Intrinsic::ppc_vsx_xxinsertw, 96832}, // __builtin_vsx_xxinsertw
-      {Intrinsic::ppc_vsx_xxleqv, 96856}, // __builtin_vsx_xxleqv
+      {Intrinsic::ppc_addf128_round_to_odd, 88188}, // __builtin_addf128_round_to_odd
+      {Intrinsic::ppc_altivec_crypto_vcipher, 88219}, // __builtin_altivec_crypto_vcipher
+      {Intrinsic::ppc_altivec_crypto_vcipherlast, 88252}, // __builtin_altivec_crypto_vcipherlast
+      {Intrinsic::ppc_altivec_crypto_vncipher, 88289}, // __builtin_altivec_crypto_vncipher
+      {Intrinsic::ppc_altivec_crypto_vncipherlast, 88323}, // __builtin_altivec_crypto_vncipherlast
+      {Intrinsic::ppc_altivec_crypto_vpermxor, 88361}, // __builtin_altivec_crypto_vpermxor
+      {Intrinsic::ppc_altivec_crypto_vpmsumb, 88395}, // __builtin_altivec_crypto_vpmsumb
+      {Intrinsic::ppc_altivec_crypto_vpmsumd, 88428}, // __builtin_altivec_crypto_vpmsumd
+      {Intrinsic::ppc_altivec_crypto_vpmsumh, 88461}, // __builtin_altivec_crypto_vpmsumh
+      {Intrinsic::ppc_altivec_crypto_vpmsumw, 88494}, // __builtin_altivec_crypto_vpmsumw
+      {Intrinsic::ppc_altivec_crypto_vsbox, 88527}, // __builtin_altivec_crypto_vsbox
+      {Intrinsic::ppc_altivec_crypto_vshasigmad, 88558}, // __builtin_altivec_crypto_vshasigmad
+      {Intrinsic::ppc_altivec_crypto_vshasigmaw, 88594}, // __builtin_altivec_crypto_vshasigmaw
+      {Intrinsic::ppc_altivec_dss, 88630}, // __builtin_altivec_dss
+      {Intrinsic::ppc_altivec_dssall, 88652}, // __builtin_altivec_dssall
+      {Intrinsic::ppc_altivec_dst, 88677}, // __builtin_altivec_dst
+      {Intrinsic::ppc_altivec_dstst, 88699}, // __builtin_altivec_dstst
+      {Intrinsic::ppc_altivec_dststt, 88723}, // __builtin_altivec_dststt
+      {Intrinsic::ppc_altivec_dstt, 88748}, // __builtin_altivec_dstt
+      {Intrinsic::ppc_altivec_mfvscr, 88771}, // __builtin_altivec_mfvscr
+      {Intrinsic::ppc_altivec_mtvscr, 88796}, // __builtin_altivec_mtvscr
+      {Intrinsic::ppc_altivec_vabsdub, 88821}, // __builtin_altivec_vabsdub
+      {Intrinsic::ppc_altivec_vabsduh, 88847}, // __builtin_altivec_vabsduh
+      {Intrinsic::ppc_altivec_vabsduw, 88873}, // __builtin_altivec_vabsduw
+      {Intrinsic::ppc_altivec_vaddcuq, 88899}, // __builtin_altivec_vaddcuq
+      {Intrinsic::ppc_altivec_vaddcuw, 88925}, // __builtin_altivec_vaddcuw
+      {Intrinsic::ppc_altivec_vaddecuq, 88951}, // __builtin_altivec_vaddecuq
+      {Intrinsic::ppc_altivec_vaddeuqm, 88978}, // __builtin_altivec_vaddeuqm
+      {Intrinsic::ppc_altivec_vaddsbs, 89005}, // __builtin_altivec_vaddsbs
+      {Intrinsic::ppc_altivec_vaddshs, 89031}, // __builtin_altivec_vaddshs
+      {Intrinsic::ppc_altivec_vaddsws, 89057}, // __builtin_altivec_vaddsws
+      {Intrinsic::ppc_altivec_vaddubs, 89083}, // __builtin_altivec_vaddubs
+      {Intrinsic::ppc_altivec_vadduhs, 89109}, // __builtin_altivec_vadduhs
+      {Intrinsic::ppc_altivec_vadduws, 89135}, // __builtin_altivec_vadduws
+      {Intrinsic::ppc_altivec_vavgsb, 89161}, // __builtin_altivec_vavgsb
+      {Intrinsic::ppc_altivec_vavgsh, 89186}, // __builtin_altivec_vavgsh
+      {Intrinsic::ppc_altivec_vavgsw, 89211}, // __builtin_altivec_vavgsw
+      {Intrinsic::ppc_altivec_vavgub, 89236}, // __builtin_altivec_vavgub
+      {Intrinsic::ppc_altivec_vavguh, 89261}, // __builtin_altivec_vavguh
+      {Intrinsic::ppc_altivec_vavguw, 89286}, // __builtin_altivec_vavguw
+      {Intrinsic::ppc_altivec_vbpermq, 89311}, // __builtin_altivec_vbpermq
+      {Intrinsic::ppc_altivec_vcfsx, 89337}, // __builtin_altivec_vcfsx
+      {Intrinsic::ppc_altivec_vcfux, 89361}, // __builtin_altivec_vcfux
+      {Intrinsic::ppc_altivec_vclzlsbb, 89385}, // __builtin_altivec_vclzlsbb
+      {Intrinsic::ppc_altivec_vcmpbfp, 89412}, // __builtin_altivec_vcmpbfp
+      {Intrinsic::ppc_altivec_vcmpbfp_p, 89438}, // __builtin_altivec_vcmpbfp_p
+      {Intrinsic::ppc_altivec_vcmpeqfp, 89466}, // __builtin_altivec_vcmpeqfp
+      {Intrinsic::ppc_altivec_vcmpeqfp_p, 89493}, // __builtin_altivec_vcmpeqfp_p
+      {Intrinsic::ppc_altivec_vcmpequb, 89522}, // __builtin_altivec_vcmpequb
+      {Intrinsic::ppc_altivec_vcmpequb_p, 89549}, // __builtin_altivec_vcmpequb_p
+      {Intrinsic::ppc_altivec_vcmpequd, 89578}, // __builtin_altivec_vcmpequd
+      {Intrinsic::ppc_altivec_vcmpequd_p, 89605}, // __builtin_altivec_vcmpequd_p
+      {Intrinsic::ppc_altivec_vcmpequh, 89634}, // __builtin_altivec_vcmpequh
+      {Intrinsic::ppc_altivec_vcmpequh_p, 89661}, // __builtin_altivec_vcmpequh_p
+      {Intrinsic::ppc_altivec_vcmpequw, 89690}, // __builtin_altivec_vcmpequw
+      {Intrinsic::ppc_altivec_vcmpequw_p, 89717}, // __builtin_altivec_vcmpequw_p
+      {Intrinsic::ppc_altivec_vcmpgefp, 89746}, // __builtin_altivec_vcmpgefp
+      {Intrinsic::ppc_altivec_vcmpgefp_p, 89773}, // __builtin_altivec_vcmpgefp_p
+      {Intrinsic::ppc_altivec_vcmpgtfp, 89802}, // __builtin_altivec_vcmpgtfp
+      {Intrinsic::ppc_altivec_vcmpgtfp_p, 89829}, // __builtin_altivec_vcmpgtfp_p
+      {Intrinsic::ppc_altivec_vcmpgtsb, 89858}, // __builtin_altivec_vcmpgtsb
+      {Intrinsic::ppc_altivec_vcmpgtsb_p, 89885}, // __builtin_altivec_vcmpgtsb_p
+      {Intrinsic::ppc_altivec_vcmpgtsd, 89914}, // __builtin_altivec_vcmpgtsd
+      {Intrinsic::ppc_altivec_vcmpgtsd_p, 89941}, // __builtin_altivec_vcmpgtsd_p
+      {Intrinsic::ppc_altivec_vcmpgtsh, 89970}, // __builtin_altivec_vcmpgtsh
+      {Intrinsic::ppc_altivec_vcmpgtsh_p, 89997}, // __builtin_altivec_vcmpgtsh_p
+      {Intrinsic::ppc_altivec_vcmpgtsw, 90026}, // __builtin_altivec_vcmpgtsw
+      {Intrinsic::ppc_altivec_vcmpgtsw_p, 90053}, // __builtin_altivec_vcmpgtsw_p
+      {Intrinsic::ppc_altivec_vcmpgtub, 90082}, // __builtin_altivec_vcmpgtub
+      {Intrinsic::ppc_altivec_vcmpgtub_p, 90109}, // __builtin_altivec_vcmpgtub_p
+      {Intrinsic::ppc_altivec_vcmpgtud, 90138}, // __builtin_altivec_vcmpgtud
+      {Intrinsic::ppc_altivec_vcmpgtud_p, 90165}, // __builtin_altivec_vcmpgtud_p
+      {Intrinsic::ppc_altivec_vcmpgtuh, 90194}, // __builtin_altivec_vcmpgtuh
+      {Intrinsic::ppc_altivec_vcmpgtuh_p, 90221}, // __builtin_altivec_vcmpgtuh_p
+      {Intrinsic::ppc_altivec_vcmpgtuw, 90250}, // __builtin_altivec_vcmpgtuw
+      {Intrinsic::ppc_altivec_vcmpgtuw_p, 90277}, // __builtin_altivec_vcmpgtuw_p
+      {Intrinsic::ppc_altivec_vcmpneb, 90306}, // __builtin_altivec_vcmpneb
+      {Intrinsic::ppc_altivec_vcmpneb_p, 90332}, // __builtin_altivec_vcmpneb_p
+      {Intrinsic::ppc_altivec_vcmpneh, 90360}, // __builtin_altivec_vcmpneh
+      {Intrinsic::ppc_altivec_vcmpneh_p, 90386}, // __builtin_altivec_vcmpneh_p
+      {Intrinsic::ppc_altivec_vcmpnew, 90414}, // __builtin_altivec_vcmpnew
+      {Intrinsic::ppc_altivec_vcmpnew_p, 90440}, // __builtin_altivec_vcmpnew_p
+      {Intrinsic::ppc_altivec_vcmpnezb, 90468}, // __builtin_altivec_vcmpnezb
+      {Intrinsic::ppc_altivec_vcmpnezb_p, 90495}, // __builtin_altivec_vcmpnezb_p
+      {Intrinsic::ppc_altivec_vcmpnezh, 90524}, // __builtin_altivec_vcmpnezh
+      {Intrinsic::ppc_altivec_vcmpnezh_p, 90551}, // __builtin_altivec_vcmpnezh_p
+      {Intrinsic::ppc_altivec_vcmpnezw, 90580}, // __builtin_altivec_vcmpnezw
+      {Intrinsic::ppc_altivec_vcmpnezw_p, 90607}, // __builtin_altivec_vcmpnezw_p
+      {Intrinsic::ppc_altivec_vctsxs, 90636}, // __builtin_altivec_vctsxs
+      {Intrinsic::ppc_altivec_vctuxs, 90661}, // __builtin_altivec_vctuxs
+      {Intrinsic::ppc_altivec_vctzlsbb, 90686}, // __builtin_altivec_vctzlsbb
+      {Intrinsic::ppc_altivec_vexptefp, 90713}, // __builtin_altivec_vexptefp
+      {Intrinsic::ppc_altivec_vgbbd, 90740}, // __builtin_altivec_vgbbd
+      {Intrinsic::ppc_altivec_vlogefp, 90764}, // __builtin_altivec_vlogefp
+      {Intrinsic::ppc_altivec_vmaddfp, 90790}, // __builtin_altivec_vmaddfp
+      {Intrinsic::ppc_altivec_vmaxfp, 90816}, // __builtin_altivec_vmaxfp
+      {Intrinsic::ppc_altivec_vmaxsb, 90841}, // __builtin_altivec_vmaxsb
+      {Intrinsic::ppc_altivec_vmaxsd, 90866}, // __builtin_altivec_vmaxsd
+      {Intrinsic::ppc_altivec_vmaxsh, 90891}, // __builtin_altivec_vmaxsh
+      {Intrinsic::ppc_altivec_vmaxsw, 90916}, // __builtin_altivec_vmaxsw
+      {Intrinsic::ppc_altivec_vmaxub, 90941}, // __builtin_altivec_vmaxub
+      {Intrinsic::ppc_altivec_vmaxud, 90966}, // __builtin_altivec_vmaxud
+      {Intrinsic::ppc_altivec_vmaxuh, 90991}, // __builtin_altivec_vmaxuh
+      {Intrinsic::ppc_altivec_vmaxuw, 91016}, // __builtin_altivec_vmaxuw
+      {Intrinsic::ppc_altivec_vmhaddshs, 91041}, // __builtin_altivec_vmhaddshs
+      {Intrinsic::ppc_altivec_vmhraddshs, 91069}, // __builtin_altivec_vmhraddshs
+      {Intrinsic::ppc_altivec_vminfp, 91098}, // __builtin_altivec_vminfp
+      {Intrinsic::ppc_altivec_vminsb, 91123}, // __builtin_altivec_vminsb
+      {Intrinsic::ppc_altivec_vminsd, 91148}, // __builtin_altivec_vminsd
+      {Intrinsic::ppc_altivec_vminsh, 91173}, // __builtin_altivec_vminsh
+      {Intrinsic::ppc_altivec_vminsw, 91198}, // __builtin_altivec_vminsw
+      {Intrinsic::ppc_altivec_vminub, 91223}, // __builtin_altivec_vminub
+      {Intrinsic::ppc_altivec_vminud, 91248}, // __builtin_altivec_vminud
+      {Intrinsic::ppc_altivec_vminuh, 91273}, // __builtin_altivec_vminuh
+      {Intrinsic::ppc_altivec_vminuw, 91298}, // __builtin_altivec_vminuw
+      {Intrinsic::ppc_altivec_vmladduhm, 91323}, // __builtin_altivec_vmladduhm
+      {Intrinsic::ppc_altivec_vmsummbm, 91351}, // __builtin_altivec_vmsummbm
+      {Intrinsic::ppc_altivec_vmsumshm, 91378}, // __builtin_altivec_vmsumshm
+      {Intrinsic::ppc_altivec_vmsumshs, 91405}, // __builtin_altivec_vmsumshs
+      {Intrinsic::ppc_altivec_vmsumubm, 91432}, // __builtin_altivec_vmsumubm
+      {Intrinsic::ppc_altivec_vmsumuhm, 91459}, // __builtin_altivec_vmsumuhm
+      {Intrinsic::ppc_altivec_vmsumuhs, 91486}, // __builtin_altivec_vmsumuhs
+      {Intrinsic::ppc_altivec_vmulesb, 91513}, // __builtin_altivec_vmulesb
+      {Intrinsic::ppc_altivec_vmulesh, 91539}, // __builtin_altivec_vmulesh
+      {Intrinsic::ppc_altivec_vmulesw, 91565}, // __builtin_altivec_vmulesw
+      {Intrinsic::ppc_altivec_vmuleub, 91591}, // __builtin_altivec_vmuleub
+      {Intrinsic::ppc_altivec_vmuleuh, 91617}, // __builtin_altivec_vmuleuh
+      {Intrinsic::ppc_altivec_vmuleuw, 91643}, // __builtin_altivec_vmuleuw
+      {Intrinsic::ppc_altivec_vmulosb, 91669}, // __builtin_altivec_vmulosb
+      {Intrinsic::ppc_altivec_vmulosh, 91695}, // __builtin_altivec_vmulosh
+      {Intrinsic::ppc_altivec_vmulosw, 91721}, // __builtin_altivec_vmulosw
+      {Intrinsic::ppc_altivec_vmuloub, 91747}, // __builtin_altivec_vmuloub
+      {Intrinsic::ppc_altivec_vmulouh, 91773}, // __builtin_altivec_vmulouh
+      {Intrinsic::ppc_altivec_vmulouw, 91799}, // __builtin_altivec_vmulouw
+      {Intrinsic::ppc_altivec_vnmsubfp, 91825}, // __builtin_altivec_vnmsubfp
+      {Intrinsic::ppc_altivec_vperm, 91852}, // __builtin_altivec_vperm_4si
+      {Intrinsic::ppc_altivec_vpkpx, 91880}, // __builtin_altivec_vpkpx
+      {Intrinsic::ppc_altivec_vpksdss, 91904}, // __builtin_altivec_vpksdss
+      {Intrinsic::ppc_altivec_vpksdus, 91930}, // __builtin_altivec_vpksdus
+      {Intrinsic::ppc_altivec_vpkshss, 91956}, // __builtin_altivec_vpkshss
+      {Intrinsic::ppc_altivec_vpkshus, 91982}, // __builtin_altivec_vpkshus
+      {Intrinsic::ppc_altivec_vpkswss, 92008}, // __builtin_altivec_vpkswss
+      {Intrinsic::ppc_altivec_vpkswus, 92034}, // __builtin_altivec_vpkswus
+      {Intrinsic::ppc_altivec_vpkudus, 92060}, // __builtin_altivec_vpkudus
+      {Intrinsic::ppc_altivec_vpkuhus, 92086}, // __builtin_altivec_vpkuhus
+      {Intrinsic::ppc_altivec_vpkuwus, 92112}, // __builtin_altivec_vpkuwus
+      {Intrinsic::ppc_altivec_vprtybd, 92138}, // __builtin_altivec_vprtybd
+      {Intrinsic::ppc_altivec_vprtybq, 92164}, // __builtin_altivec_vprtybq
+      {Intrinsic::ppc_altivec_vprtybw, 92190}, // __builtin_altivec_vprtybw
+      {Intrinsic::ppc_altivec_vrefp, 92216}, // __builtin_altivec_vrefp
+      {Intrinsic::ppc_altivec_vrfim, 92240}, // __builtin_altivec_vrfim
+      {Intrinsic::ppc_altivec_vrfin, 92264}, // __builtin_altivec_vrfin
+      {Intrinsic::ppc_altivec_vrfip, 92288}, // __builtin_altivec_vrfip
+      {Intrinsic::ppc_altivec_vrfiz, 92312}, // __builtin_altivec_vrfiz
+      {Intrinsic::ppc_altivec_vrlb, 92336}, // __builtin_altivec_vrlb
+      {Intrinsic::ppc_altivec_vrld, 92359}, // __builtin_altivec_vrld
+      {Intrinsic::ppc_altivec_vrldmi, 92382}, // __builtin_altivec_vrldmi
+      {Intrinsic::ppc_altivec_vrldnm, 92407}, // __builtin_altivec_vrldnm
+      {Intrinsic::ppc_altivec_vrlh, 92432}, // __builtin_altivec_vrlh
+      {Intrinsic::ppc_altivec_vrlw, 92455}, // __builtin_altivec_vrlw
+      {Intrinsic::ppc_altivec_vrlwmi, 92478}, // __builtin_altivec_vrlwmi
+      {Intrinsic::ppc_altivec_vrlwnm, 92503}, // __builtin_altivec_vrlwnm
+      {Intrinsic::ppc_altivec_vrsqrtefp, 92528}, // __builtin_altivec_vrsqrtefp
+      {Intrinsic::ppc_altivec_vsel, 92556}, // __builtin_altivec_vsel_4si
+      {Intrinsic::ppc_altivec_vsl, 92583}, // __builtin_altivec_vsl
+      {Intrinsic::ppc_altivec_vslb, 92605}, // __builtin_altivec_vslb
+      {Intrinsic::ppc_altivec_vslh, 92628}, // __builtin_altivec_vslh
+      {Intrinsic::ppc_altivec_vslo, 92651}, // __builtin_altivec_vslo
+      {Intrinsic::ppc_altivec_vslv, 92674}, // __builtin_altivec_vslv
+      {Intrinsic::ppc_altivec_vslw, 92697}, // __builtin_altivec_vslw
+      {Intrinsic::ppc_altivec_vsr, 92720}, // __builtin_altivec_vsr
+      {Intrinsic::ppc_altivec_vsrab, 92742}, // __builtin_altivec_vsrab
+      {Intrinsic::ppc_altivec_vsrah, 92766}, // __builtin_altivec_vsrah
+      {Intrinsic::ppc_altivec_vsraw, 92790}, // __builtin_altivec_vsraw
+      {Intrinsic::ppc_altivec_vsrb, 92814}, // __builtin_altivec_vsrb
+      {Intrinsic::ppc_altivec_vsrh, 92837}, // __builtin_altivec_vsrh
+      {Intrinsic::ppc_altivec_vsro, 92860}, // __builtin_altivec_vsro
+      {Intrinsic::ppc_altivec_vsrv, 92883}, // __builtin_altivec_vsrv
+      {Intrinsic::ppc_altivec_vsrw, 92906}, // __builtin_altivec_vsrw
+      {Intrinsic::ppc_altivec_vsubcuq, 92929}, // __builtin_altivec_vsubcuq
+      {Intrinsic::ppc_altivec_vsubcuw, 92955}, // __builtin_altivec_vsubcuw
+      {Intrinsic::ppc_altivec_vsubecuq, 92981}, // __builtin_altivec_vsubecuq
+      {Intrinsic::ppc_altivec_vsubeuqm, 93008}, // __builtin_altivec_vsubeuqm
+      {Intrinsic::ppc_altivec_vsubsbs, 93035}, // __builtin_altivec_vsubsbs
+      {Intrinsic::ppc_altivec_vsubshs, 93061}, // __builtin_altivec_vsubshs
+      {Intrinsic::ppc_altivec_vsubsws, 93087}, // __builtin_altivec_vsubsws
+      {Intrinsic::ppc_altivec_vsububs, 93113}, // __builtin_altivec_vsububs
+      {Intrinsic::ppc_altivec_vsubuhs, 93139}, // __builtin_altivec_vsubuhs
+      {Intrinsic::ppc_altivec_vsubuws, 93165}, // __builtin_altivec_vsubuws
+      {Intrinsic::ppc_altivec_vsum2sws, 93191}, // __builtin_altivec_vsum2sws
+      {Intrinsic::ppc_altivec_vsum4sbs, 93218}, // __builtin_altivec_vsum4sbs
+      {Intrinsic::ppc_altivec_vsum4shs, 93245}, // __builtin_altivec_vsum4shs
+      {Intrinsic::ppc_altivec_vsum4ubs, 93272}, // __builtin_altivec_vsum4ubs
+      {Intrinsic::ppc_altivec_vsumsws, 93299}, // __builtin_altivec_vsumsws
+      {Intrinsic::ppc_altivec_vupkhpx, 93325}, // __builtin_altivec_vupkhpx
+      {Intrinsic::ppc_altivec_vupkhsb, 93351}, // __builtin_altivec_vupkhsb
+      {Intrinsic::ppc_altivec_vupkhsh, 93377}, // __builtin_altivec_vupkhsh
+      {Intrinsic::ppc_altivec_vupkhsw, 93403}, // __builtin_altivec_vupkhsw
+      {Intrinsic::ppc_altivec_vupklpx, 93429}, // __builtin_altivec_vupklpx
+      {Intrinsic::ppc_altivec_vupklsb, 93455}, // __builtin_altivec_vupklsb
+      {Intrinsic::ppc_altivec_vupklsh, 93481}, // __builtin_altivec_vupklsh
+      {Intrinsic::ppc_altivec_vupklsw, 93507}, // __builtin_altivec_vupklsw
+      {Intrinsic::ppc_bpermd, 93533}, // __builtin_bpermd
+      {Intrinsic::ppc_dcbf, 93550}, // __builtin_dcbf
+      {Intrinsic::ppc_divde, 93565}, // __builtin_divde
+      {Intrinsic::ppc_divdeu, 93581}, // __builtin_divdeu
+      {Intrinsic::ppc_divf128_round_to_odd, 93598}, // __builtin_divf128_round_to_odd
+      {Intrinsic::ppc_divwe, 93629}, // __builtin_divwe
+      {Intrinsic::ppc_divweu, 93645}, // __builtin_divweu
+      {Intrinsic::ppc_fmaf128_round_to_odd, 93662}, // __builtin_fmaf128_round_to_odd
+      {Intrinsic::ppc_get_texasr, 93693}, // __builtin_get_texasr
+      {Intrinsic::ppc_get_texasru, 93714}, // __builtin_get_texasru
+      {Intrinsic::ppc_get_tfhar, 93736}, // __builtin_get_tfhar
+      {Intrinsic::ppc_get_tfiar, 93756}, // __builtin_get_tfiar
+      {Intrinsic::ppc_mulf128_round_to_odd, 93776}, // __builtin_mulf128_round_to_odd
+      {Intrinsic::ppc_qpx_qvfabs, 93807}, // __builtin_qpx_qvfabs
+      {Intrinsic::ppc_qpx_qvfadd, 93828}, // __builtin_qpx_qvfadd
+      {Intrinsic::ppc_qpx_qvfadds, 93849}, // __builtin_qpx_qvfadds
+      {Intrinsic::ppc_qpx_qvfcfid, 93871}, // __builtin_qpx_qvfcfid
+      {Intrinsic::ppc_qpx_qvfcfids, 93893}, // __builtin_qpx_qvfcfids
+      {Intrinsic::ppc_qpx_qvfcfidu, 93916}, // __builtin_qpx_qvfcfidu
+      {Intrinsic::ppc_qpx_qvfcfidus, 93939}, // __builtin_qpx_qvfcfidus
+      {Intrinsic::ppc_qpx_qvfcmpeq, 93963}, // __builtin_qpx_qvfcmpeq
+      {Intrinsic::ppc_qpx_qvfcmpgt, 93986}, // __builtin_qpx_qvfcmpgt
+      {Intrinsic::ppc_qpx_qvfcmplt, 94009}, // __builtin_qpx_qvfcmplt
+      {Intrinsic::ppc_qpx_qvfcpsgn, 94032}, // __builtin_qpx_qvfcpsgn
+      {Intrinsic::ppc_qpx_qvfctid, 94055}, // __builtin_qpx_qvfctid
+      {Intrinsic::ppc_qpx_qvfctidu, 94077}, // __builtin_qpx_qvfctidu
+      {Intrinsic::ppc_qpx_qvfctiduz, 94100}, // __builtin_qpx_qvfctiduz
+      {Intrinsic::ppc_qpx_qvfctidz, 94124}, // __builtin_qpx_qvfctidz
+      {Intrinsic::ppc_qpx_qvfctiw, 94147}, // __builtin_qpx_qvfctiw
+      {Intrinsic::ppc_qpx_qvfctiwu, 94169}, // __builtin_qpx_qvfctiwu
+      {Intrinsic::ppc_qpx_qvfctiwuz, 94192}, // __builtin_qpx_qvfctiwuz
+      {Intrinsic::ppc_qpx_qvfctiwz, 94216}, // __builtin_qpx_qvfctiwz
+      {Intrinsic::ppc_qpx_qvflogical, 94239}, // __builtin_qpx_qvflogical
+      {Intrinsic::ppc_qpx_qvfmadd, 94264}, // __builtin_qpx_qvfmadd
+      {Intrinsic::ppc_qpx_qvfmadds, 94286}, // __builtin_qpx_qvfmadds
+      {Intrinsic::ppc_qpx_qvfmsub, 94309}, // __builtin_qpx_qvfmsub
+      {Intrinsic::ppc_qpx_qvfmsubs, 94331}, // __builtin_qpx_qvfmsubs
+      {Intrinsic::ppc_qpx_qvfmul, 94354}, // __builtin_qpx_qvfmul
+      {Intrinsic::ppc_qpx_qvfmuls, 94375}, // __builtin_qpx_qvfmuls
+      {Intrinsic::ppc_qpx_qvfnabs, 94397}, // __builtin_qpx_qvfnabs
+      {Intrinsic::ppc_qpx_qvfneg, 94419}, // __builtin_qpx_qvfneg
+      {Intrinsic::ppc_qpx_qvfnmadd, 94440}, // __builtin_qpx_qvfnmadd
+      {Intrinsic::ppc_qpx_qvfnmadds, 94463}, // __builtin_qpx_qvfnmadds
+      {Intrinsic::ppc_qpx_qvfnmsub, 94487}, // __builtin_qpx_qvfnmsub
+      {Intrinsic::ppc_qpx_qvfnmsubs, 94510}, // __builtin_qpx_qvfnmsubs
+      {Intrinsic::ppc_qpx_qvfperm, 94534}, // __builtin_qpx_qvfperm
+      {Intrinsic::ppc_qpx_qvfre, 94556}, // __builtin_qpx_qvfre
+      {Intrinsic::ppc_qpx_qvfres, 94576}, // __builtin_qpx_qvfres
+      {Intrinsic::ppc_qpx_qvfrim, 94597}, // __builtin_qpx_qvfrim
+      {Intrinsic::ppc_qpx_qvfrin, 94618}, // __builtin_qpx_qvfrin
+      {Intrinsic::ppc_qpx_qvfrip, 94639}, // __builtin_qpx_qvfrip
+      {Intrinsic::ppc_qpx_qvfriz, 94660}, // __builtin_qpx_qvfriz
+      {Intrinsic::ppc_qpx_qvfrsp, 94681}, // __builtin_qpx_qvfrsp
+      {Intrinsic::ppc_qpx_qvfrsqrte, 94702}, // __builtin_qpx_qvfrsqrte
+      {Intrinsic::ppc_qpx_qvfrsqrtes, 94726}, // __builtin_qpx_qvfrsqrtes
+      {Intrinsic::ppc_qpx_qvfsel, 94751}, // __builtin_qpx_qvfsel
+      {Intrinsic::ppc_qpx_qvfsub, 94772}, // __builtin_qpx_qvfsub
+      {Intrinsic::ppc_qpx_qvfsubs, 94793}, // __builtin_qpx_qvfsubs
+      {Intrinsic::ppc_qpx_qvftstnan, 94815}, // __builtin_qpx_qvftstnan
+      {Intrinsic::ppc_qpx_qvfxmadd, 94839}, // __builtin_qpx_qvfxmadd
+      {Intrinsic::ppc_qpx_qvfxmadds, 94862}, // __builtin_qpx_qvfxmadds
+      {Intrinsic::ppc_qpx_qvfxmul, 94886}, // __builtin_qpx_qvfxmul
+      {Intrinsic::ppc_qpx_qvfxmuls, 94908}, // __builtin_qpx_qvfxmuls
+      {Intrinsic::ppc_qpx_qvfxxcpnmadd, 94931}, // __builtin_qpx_qvfxxcpnmadd
+      {Intrinsic::ppc_qpx_qvfxxcpnmadds, 94958}, // __builtin_qpx_qvfxxcpnmadds
+      {Intrinsic::ppc_qpx_qvfxxmadd, 94986}, // __builtin_qpx_qvfxxmadd
+      {Intrinsic::ppc_qpx_qvfxxmadds, 95010}, // __builtin_qpx_qvfxxmadds
+      {Intrinsic::ppc_qpx_qvfxxnpmadd, 95035}, // __builtin_qpx_qvfxxnpmadd
+      {Intrinsic::ppc_qpx_qvfxxnpmadds, 95061}, // __builtin_qpx_qvfxxnpmadds
+      {Intrinsic::ppc_qpx_qvgpci, 95088}, // __builtin_qpx_qvgpci
+      {Intrinsic::ppc_qpx_qvlfcd, 95109}, // __builtin_qpx_qvlfcd
+      {Intrinsic::ppc_qpx_qvlfcda, 95130}, // __builtin_qpx_qvlfcda
+      {Intrinsic::ppc_qpx_qvlfcs, 95152}, // __builtin_qpx_qvlfcs
+      {Intrinsic::ppc_qpx_qvlfcsa, 95173}, // __builtin_qpx_qvlfcsa
+      {Intrinsic::ppc_qpx_qvlfd, 95195}, // __builtin_qpx_qvlfd
+      {Intrinsic::ppc_qpx_qvlfda, 95215}, // __builtin_qpx_qvlfda
+      {Intrinsic::ppc_qpx_qvlfiwa, 95236}, // __builtin_qpx_qvlfiwa
+      {Intrinsic::ppc_qpx_qvlfiwaa, 95258}, // __builtin_qpx_qvlfiwaa
+      {Intrinsic::ppc_qpx_qvlfiwz, 95281}, // __builtin_qpx_qvlfiwz
+      {Intrinsic::ppc_qpx_qvlfiwza, 95303}, // __builtin_qpx_qvlfiwza
+      {Intrinsic::ppc_qpx_qvlfs, 95326}, // __builtin_qpx_qvlfs
+      {Intrinsic::ppc_qpx_qvlfsa, 95346}, // __builtin_qpx_qvlfsa
+      {Intrinsic::ppc_qpx_qvlpcld, 95367}, // __builtin_qpx_qvlpcld
+      {Intrinsic::ppc_qpx_qvlpcls, 95389}, // __builtin_qpx_qvlpcls
+      {Intrinsic::ppc_qpx_qvlpcrd, 95411}, // __builtin_qpx_qvlpcrd
+      {Intrinsic::ppc_qpx_qvlpcrs, 95433}, // __builtin_qpx_qvlpcrs
+      {Intrinsic::ppc_qpx_qvstfcd, 95455}, // __builtin_qpx_qvstfcd
+      {Intrinsic::ppc_qpx_qvstfcda, 95477}, // __builtin_qpx_qvstfcda
+      {Intrinsic::ppc_qpx_qvstfcs, 95500}, // __builtin_qpx_qvstfcs
+      {Intrinsic::ppc_qpx_qvstfcsa, 95522}, // __builtin_qpx_qvstfcsa
+      {Intrinsic::ppc_qpx_qvstfd, 95545}, // __builtin_qpx_qvstfd
+      {Intrinsic::ppc_qpx_qvstfda, 95566}, // __builtin_qpx_qvstfda
+      {Intrinsic::ppc_qpx_qvstfiw, 95588}, // __builtin_qpx_qvstfiw
+      {Intrinsic::ppc_qpx_qvstfiwa, 95610}, // __builtin_qpx_qvstfiwa
+      {Intrinsic::ppc_qpx_qvstfs, 95633}, // __builtin_qpx_qvstfs
+      {Intrinsic::ppc_qpx_qvstfsa, 95654}, // __builtin_qpx_qvstfsa
+      {Intrinsic::ppc_set_texasr, 95745}, // __builtin_set_texasr
+      {Intrinsic::ppc_set_texasru, 95766}, // __builtin_set_texasru
+      {Intrinsic::ppc_set_tfhar, 95788}, // __builtin_set_tfhar
+      {Intrinsic::ppc_set_tfiar, 95808}, // __builtin_set_tfiar
+      {Intrinsic::ppc_setrnd, 95828}, // __builtin_setrnd
+      {Intrinsic::ppc_sqrtf128_round_to_odd, 95845}, // __builtin_sqrtf128_round_to_odd
+      {Intrinsic::ppc_subf128_round_to_odd, 95877}, // __builtin_subf128_round_to_odd
+      {Intrinsic::ppc_tabort, 95908}, // __builtin_tabort
+      {Intrinsic::ppc_tabortdc, 95925}, // __builtin_tabortdc
+      {Intrinsic::ppc_tabortdci, 95944}, // __builtin_tabortdci
+      {Intrinsic::ppc_tabortwc, 95964}, // __builtin_tabortwc
+      {Intrinsic::ppc_tabortwci, 95983}, // __builtin_tabortwci
+      {Intrinsic::ppc_tbegin, 96003}, // __builtin_tbegin
+      {Intrinsic::ppc_tcheck, 96020}, // __builtin_tcheck
+      {Intrinsic::ppc_tend, 96037}, // __builtin_tend
+      {Intrinsic::ppc_tendall, 96052}, // __builtin_tendall
+      {Intrinsic::ppc_trechkpt, 96070}, // __builtin_trechkpt
+      {Intrinsic::ppc_treclaim, 96089}, // __builtin_treclaim
+      {Intrinsic::ppc_tresume, 96108}, // __builtin_tresume
+      {Intrinsic::ppc_truncf128_round_to_odd, 96126}, // __builtin_truncf128_round_to_odd
+      {Intrinsic::ppc_tsr, 96159}, // __builtin_tsr
+      {Intrinsic::ppc_tsuspend, 96173}, // __builtin_tsuspend
+      {Intrinsic::ppc_ttest, 96192}, // __builtin_ttest
+      {Intrinsic::ppc_scalar_extract_expq, 95676}, // __builtin_vsx_scalar_extract_expq
+      {Intrinsic::ppc_scalar_insert_exp_qp, 95710}, // __builtin_vsx_scalar_insert_exp_qp
+      {Intrinsic::ppc_vsx_xsmaxdp, 96208}, // __builtin_vsx_xsmaxdp
+      {Intrinsic::ppc_vsx_xsmindp, 96230}, // __builtin_vsx_xsmindp
+      {Intrinsic::ppc_vsx_xvcmpeqdp, 96252}, // __builtin_vsx_xvcmpeqdp
+      {Intrinsic::ppc_vsx_xvcmpeqdp_p, 96276}, // __builtin_vsx_xvcmpeqdp_p
+      {Intrinsic::ppc_vsx_xvcmpeqsp, 96302}, // __builtin_vsx_xvcmpeqsp
+      {Intrinsic::ppc_vsx_xvcmpeqsp_p, 96326}, // __builtin_vsx_xvcmpeqsp_p
+      {Intrinsic::ppc_vsx_xvcmpgedp, 96352}, // __builtin_vsx_xvcmpgedp
+      {Intrinsic::ppc_vsx_xvcmpgedp_p, 96376}, // __builtin_vsx_xvcmpgedp_p
+      {Intrinsic::ppc_vsx_xvcmpgesp, 96402}, // __builtin_vsx_xvcmpgesp
+      {Intrinsic::ppc_vsx_xvcmpgesp_p, 96426}, // __builtin_vsx_xvcmpgesp_p
+      {Intrinsic::ppc_vsx_xvcmpgtdp, 96452}, // __builtin_vsx_xvcmpgtdp
+      {Intrinsic::ppc_vsx_xvcmpgtdp_p, 96476}, // __builtin_vsx_xvcmpgtdp_p
+      {Intrinsic::ppc_vsx_xvcmpgtsp, 96502}, // __builtin_vsx_xvcmpgtsp
+      {Intrinsic::ppc_vsx_xvcmpgtsp_p, 96526}, // __builtin_vsx_xvcmpgtsp_p
+      {Intrinsic::ppc_vsx_xvcvdpsp, 96552}, // __builtin_vsx_xvcvdpsp
+      {Intrinsic::ppc_vsx_xvcvdpsxws, 96575}, // __builtin_vsx_xvcvdpsxws
+      {Intrinsic::ppc_vsx_xvcvdpuxws, 96600}, // __builtin_vsx_xvcvdpuxws
+      {Intrinsic::ppc_vsx_xvcvhpsp, 96625}, // __builtin_vsx_xvcvhpsp
+      {Intrinsic::ppc_vsx_xvcvspdp, 96648}, // __builtin_vsx_xvcvspdp
+      {Intrinsic::ppc_vsx_xvcvsphp, 96671}, // __builtin_vsx_xvcvsphp
+      {Intrinsic::ppc_vsx_xvcvsxdsp, 96694}, // __builtin_vsx_xvcvsxdsp
+      {Intrinsic::ppc_vsx_xvcvsxwdp, 96718}, // __builtin_vsx_xvcvsxwdp
+      {Intrinsic::ppc_vsx_xvcvuxdsp, 96742}, // __builtin_vsx_xvcvuxdsp
+      {Intrinsic::ppc_vsx_xvcvuxwdp, 96766}, // __builtin_vsx_xvcvuxwdp
+      {Intrinsic::ppc_vsx_xvdivdp, 96790}, // __builtin_vsx_xvdivdp
+      {Intrinsic::ppc_vsx_xvdivsp, 96812}, // __builtin_vsx_xvdivsp
+      {Intrinsic::ppc_vsx_xviexpdp, 96834}, // __builtin_vsx_xviexpdp
+      {Intrinsic::ppc_vsx_xviexpsp, 96857}, // __builtin_vsx_xviexpsp
+      {Intrinsic::ppc_vsx_xvmaxdp, 96880}, // __builtin_vsx_xvmaxdp
+      {Intrinsic::ppc_vsx_xvmaxsp, 96902}, // __builtin_vsx_xvmaxsp
+      {Intrinsic::ppc_vsx_xvmindp, 96924}, // __builtin_vsx_xvmindp
+      {Intrinsic::ppc_vsx_xvminsp, 96946}, // __builtin_vsx_xvminsp
+      {Intrinsic::ppc_vsx_xvredp, 96968}, // __builtin_vsx_xvredp
+      {Intrinsic::ppc_vsx_xvresp, 96989}, // __builtin_vsx_xvresp
+      {Intrinsic::ppc_vsx_xvrsqrtedp, 97010}, // __builtin_vsx_xvrsqrtedp
+      {Intrinsic::ppc_vsx_xvrsqrtesp, 97035}, // __builtin_vsx_xvrsqrtesp
+      {Intrinsic::ppc_vsx_xvtstdcdp, 97060}, // __builtin_vsx_xvtstdcdp
+      {Intrinsic::ppc_vsx_xvtstdcsp, 97084}, // __builtin_vsx_xvtstdcsp
+      {Intrinsic::ppc_vsx_xvxexpdp, 97108}, // __builtin_vsx_xvxexpdp
+      {Intrinsic::ppc_vsx_xvxexpsp, 97131}, // __builtin_vsx_xvxexpsp
+      {Intrinsic::ppc_vsx_xvxsigdp, 97154}, // __builtin_vsx_xvxsigdp
+      {Intrinsic::ppc_vsx_xvxsigsp, 97177}, // __builtin_vsx_xvxsigsp
+      {Intrinsic::ppc_vsx_xxextractuw, 97200}, // __builtin_vsx_xxextractuw
+      {Intrinsic::ppc_vsx_xxinsertw, 97226}, // __builtin_vsx_xxinsertw
+      {Intrinsic::ppc_vsx_xxleqv, 97250}, // __builtin_vsx_xxleqv
     };
     auto I = std::lower_bound(std::begin(ppcNames),
                               std::end(ppcNames),
@@ -28324,18 +30056,18 @@
   }
   if (TargetPrefix == "r600") {
     static const BuiltinEntry r600Names[] = {
-      {Intrinsic::r600_group_barrier, 96877}, // __builtin_r600_group_barrier
-      {Intrinsic::r600_implicitarg_ptr, 96906}, // __builtin_r600_implicitarg_ptr
-      {Intrinsic::r600_rat_store_typed, 96937}, // __builtin_r600_rat_store_typed
-      {Intrinsic::r600_read_global_size_x, 96968}, // __builtin_r600_read_global_size_x
-      {Intrinsic::r600_read_global_size_y, 97002}, // __builtin_r600_read_global_size_y
-      {Intrinsic::r600_read_global_size_z, 97036}, // __builtin_r600_read_global_size_z
-      {Intrinsic::r600_read_ngroups_x, 97070}, // __builtin_r600_read_ngroups_x
-      {Intrinsic::r600_read_ngroups_y, 97100}, // __builtin_r600_read_ngroups_y
-      {Intrinsic::r600_read_ngroups_z, 97130}, // __builtin_r600_read_ngroups_z
-      {Intrinsic::r600_read_tgid_x, 97160}, // __builtin_r600_read_tgid_x
-      {Intrinsic::r600_read_tgid_y, 97187}, // __builtin_r600_read_tgid_y
-      {Intrinsic::r600_read_tgid_z, 97214}, // __builtin_r600_read_tgid_z
+      {Intrinsic::r600_group_barrier, 97271}, // __builtin_r600_group_barrier
+      {Intrinsic::r600_implicitarg_ptr, 97300}, // __builtin_r600_implicitarg_ptr
+      {Intrinsic::r600_rat_store_typed, 97331}, // __builtin_r600_rat_store_typed
+      {Intrinsic::r600_read_global_size_x, 97362}, // __builtin_r600_read_global_size_x
+      {Intrinsic::r600_read_global_size_y, 97396}, // __builtin_r600_read_global_size_y
+      {Intrinsic::r600_read_global_size_z, 97430}, // __builtin_r600_read_global_size_z
+      {Intrinsic::r600_read_ngroups_x, 97464}, // __builtin_r600_read_ngroups_x
+      {Intrinsic::r600_read_ngroups_y, 97494}, // __builtin_r600_read_ngroups_y
+      {Intrinsic::r600_read_ngroups_z, 97524}, // __builtin_r600_read_ngroups_z
+      {Intrinsic::r600_read_tgid_x, 97554}, // __builtin_r600_read_tgid_x
+      {Intrinsic::r600_read_tgid_y, 97581}, // __builtin_r600_read_tgid_y
+      {Intrinsic::r600_read_tgid_z, 97608}, // __builtin_r600_read_tgid_z
     };
     auto I = std::lower_bound(std::begin(r600Names),
                               std::end(r600Names),
@@ -28346,161 +30078,161 @@
   }
   if (TargetPrefix == "s390") {
     static const BuiltinEntry s390Names[] = {
-      {Intrinsic::s390_efpc, 97241}, // __builtin_s390_efpc
-      {Intrinsic::s390_lcbb, 97288}, // __builtin_s390_lcbb
-      {Intrinsic::s390_sfpc, 97328}, // __builtin_s390_sfpc
-      {Intrinsic::s390_vaccb, 97348}, // __builtin_s390_vaccb
-      {Intrinsic::s390_vacccq, 97369}, // __builtin_s390_vacccq
-      {Intrinsic::s390_vaccf, 97391}, // __builtin_s390_vaccf
-      {Intrinsic::s390_vaccg, 97412}, // __builtin_s390_vaccg
-      {Intrinsic::s390_vacch, 97433}, // __builtin_s390_vacch
-      {Intrinsic::s390_vaccq, 97454}, // __builtin_s390_vaccq
-      {Intrinsic::s390_vacq, 97475}, // __builtin_s390_vacq
-      {Intrinsic::s390_vaq, 97495}, // __builtin_s390_vaq
-      {Intrinsic::s390_vavgb, 97514}, // __builtin_s390_vavgb
-      {Intrinsic::s390_vavgf, 97535}, // __builtin_s390_vavgf
-      {Intrinsic::s390_vavgg, 97556}, // __builtin_s390_vavgg
-      {Intrinsic::s390_vavgh, 97577}, // __builtin_s390_vavgh
-      {Intrinsic::s390_vavglb, 97598}, // __builtin_s390_vavglb
-      {Intrinsic::s390_vavglf, 97620}, // __builtin_s390_vavglf
-      {Intrinsic::s390_vavglg, 97642}, // __builtin_s390_vavglg
-      {Intrinsic::s390_vavglh, 97664}, // __builtin_s390_vavglh
-      {Intrinsic::s390_vbperm, 97686}, // __builtin_s390_vbperm
-      {Intrinsic::s390_vcksm, 97708}, // __builtin_s390_vcksm
-      {Intrinsic::s390_verimb, 97729}, // __builtin_s390_verimb
-      {Intrinsic::s390_verimf, 97751}, // __builtin_s390_verimf
-      {Intrinsic::s390_verimg, 97773}, // __builtin_s390_verimg
-      {Intrinsic::s390_verimh, 97795}, // __builtin_s390_verimh
-      {Intrinsic::s390_verllb, 97817}, // __builtin_s390_verllb
-      {Intrinsic::s390_verllf, 97839}, // __builtin_s390_verllf
-      {Intrinsic::s390_verllg, 97861}, // __builtin_s390_verllg
-      {Intrinsic::s390_verllh, 97883}, // __builtin_s390_verllh
-      {Intrinsic::s390_verllvb, 97905}, // __builtin_s390_verllvb
-      {Intrinsic::s390_verllvf, 97928}, // __builtin_s390_verllvf
-      {Intrinsic::s390_verllvg, 97951}, // __builtin_s390_verllvg
-      {Intrinsic::s390_verllvh, 97974}, // __builtin_s390_verllvh
-      {Intrinsic::s390_vfaeb, 97997}, // __builtin_s390_vfaeb
-      {Intrinsic::s390_vfaef, 98018}, // __builtin_s390_vfaef
-      {Intrinsic::s390_vfaeh, 98039}, // __builtin_s390_vfaeh
-      {Intrinsic::s390_vfaezb, 98060}, // __builtin_s390_vfaezb
-      {Intrinsic::s390_vfaezf, 98082}, // __builtin_s390_vfaezf
-      {Intrinsic::s390_vfaezh, 98104}, // __builtin_s390_vfaezh
-      {Intrinsic::s390_vfeeb, 98126}, // __builtin_s390_vfeeb
-      {Intrinsic::s390_vfeef, 98147}, // __builtin_s390_vfeef
-      {Intrinsic::s390_vfeeh, 98168}, // __builtin_s390_vfeeh
-      {Intrinsic::s390_vfeezb, 98189}, // __builtin_s390_vfeezb
-      {Intrinsic::s390_vfeezf, 98211}, // __builtin_s390_vfeezf
-      {Intrinsic::s390_vfeezh, 98233}, // __builtin_s390_vfeezh
-      {Intrinsic::s390_vfeneb, 98255}, // __builtin_s390_vfeneb
-      {Intrinsic::s390_vfenef, 98277}, // __builtin_s390_vfenef
-      {Intrinsic::s390_vfeneh, 98299}, // __builtin_s390_vfeneh
-      {Intrinsic::s390_vfenezb, 98321}, // __builtin_s390_vfenezb
-      {Intrinsic::s390_vfenezf, 98344}, // __builtin_s390_vfenezf
-      {Intrinsic::s390_vfenezh, 98367}, // __builtin_s390_vfenezh
-      {Intrinsic::s390_vgfmab, 98390}, // __builtin_s390_vgfmab
-      {Intrinsic::s390_vgfmaf, 98412}, // __builtin_s390_vgfmaf
-      {Intrinsic::s390_vgfmag, 98434}, // __builtin_s390_vgfmag
-      {Intrinsic::s390_vgfmah, 98456}, // __builtin_s390_vgfmah
-      {Intrinsic::s390_vgfmb, 98478}, // __builtin_s390_vgfmb
-      {Intrinsic::s390_vgfmf, 98499}, // __builtin_s390_vgfmf
-      {Intrinsic::s390_vgfmg, 98520}, // __builtin_s390_vgfmg
-      {Intrinsic::s390_vgfmh, 98541}, // __builtin_s390_vgfmh
-      {Intrinsic::s390_vistrb, 98562}, // __builtin_s390_vistrb
-      {Intrinsic::s390_vistrf, 98584}, // __builtin_s390_vistrf
-      {Intrinsic::s390_vistrh, 98606}, // __builtin_s390_vistrh
-      {Intrinsic::s390_vlbb, 98628}, // __builtin_s390_vlbb
-      {Intrinsic::s390_vll, 98648}, // __builtin_s390_vll
-      {Intrinsic::s390_vlrl, 98667}, // __builtin_s390_vlrl
-      {Intrinsic::s390_vmaeb, 98687}, // __builtin_s390_vmaeb
-      {Intrinsic::s390_vmaef, 98708}, // __builtin_s390_vmaef
-      {Intrinsic::s390_vmaeh, 98729}, // __builtin_s390_vmaeh
-      {Intrinsic::s390_vmahb, 98750}, // __builtin_s390_vmahb
-      {Intrinsic::s390_vmahf, 98771}, // __builtin_s390_vmahf
-      {Intrinsic::s390_vmahh, 98792}, // __builtin_s390_vmahh
-      {Intrinsic::s390_vmaleb, 98813}, // __builtin_s390_vmaleb
-      {Intrinsic::s390_vmalef, 98835}, // __builtin_s390_vmalef
-      {Intrinsic::s390_vmaleh, 98857}, // __builtin_s390_vmaleh
-      {Intrinsic::s390_vmalhb, 98879}, // __builtin_s390_vmalhb
-      {Intrinsic::s390_vmalhf, 98901}, // __builtin_s390_vmalhf
-      {Intrinsic::s390_vmalhh, 98923}, // __builtin_s390_vmalhh
-      {Intrinsic::s390_vmalob, 98945}, // __builtin_s390_vmalob
-      {Intrinsic::s390_vmalof, 98967}, // __builtin_s390_vmalof
-      {Intrinsic::s390_vmaloh, 98989}, // __builtin_s390_vmaloh
-      {Intrinsic::s390_vmaob, 99011}, // __builtin_s390_vmaob
-      {Intrinsic::s390_vmaof, 99032}, // __builtin_s390_vmaof
-      {Intrinsic::s390_vmaoh, 99053}, // __builtin_s390_vmaoh
-      {Intrinsic::s390_vmeb, 99074}, // __builtin_s390_vmeb
-      {Intrinsic::s390_vmef, 99094}, // __builtin_s390_vmef
-      {Intrinsic::s390_vmeh, 99114}, // __builtin_s390_vmeh
-      {Intrinsic::s390_vmhb, 99134}, // __builtin_s390_vmhb
-      {Intrinsic::s390_vmhf, 99154}, // __builtin_s390_vmhf
-      {Intrinsic::s390_vmhh, 99174}, // __builtin_s390_vmhh
-      {Intrinsic::s390_vmleb, 99194}, // __builtin_s390_vmleb
-      {Intrinsic::s390_vmlef, 99215}, // __builtin_s390_vmlef
-      {Intrinsic::s390_vmleh, 99236}, // __builtin_s390_vmleh
-      {Intrinsic::s390_vmlhb, 99257}, // __builtin_s390_vmlhb
-      {Intrinsic::s390_vmlhf, 99278}, // __builtin_s390_vmlhf
-      {Intrinsic::s390_vmlhh, 99299}, // __builtin_s390_vmlhh
-      {Intrinsic::s390_vmlob, 99320}, // __builtin_s390_vmlob
-      {Intrinsic::s390_vmlof, 99341}, // __builtin_s390_vmlof
-      {Intrinsic::s390_vmloh, 99362}, // __builtin_s390_vmloh
-      {Intrinsic::s390_vmob, 99383}, // __builtin_s390_vmob
-      {Intrinsic::s390_vmof, 99403}, // __builtin_s390_vmof
-      {Intrinsic::s390_vmoh, 99423}, // __builtin_s390_vmoh
-      {Intrinsic::s390_vmslg, 99443}, // __builtin_s390_vmslg
-      {Intrinsic::s390_vpdi, 99464}, // __builtin_s390_vpdi
-      {Intrinsic::s390_vperm, 99484}, // __builtin_s390_vperm
-      {Intrinsic::s390_vpklsf, 99505}, // __builtin_s390_vpklsf
-      {Intrinsic::s390_vpklsg, 99527}, // __builtin_s390_vpklsg
-      {Intrinsic::s390_vpklsh, 99549}, // __builtin_s390_vpklsh
-      {Intrinsic::s390_vpksf, 99571}, // __builtin_s390_vpksf
-      {Intrinsic::s390_vpksg, 99592}, // __builtin_s390_vpksg
-      {Intrinsic::s390_vpksh, 99613}, // __builtin_s390_vpksh
-      {Intrinsic::s390_vsbcbiq, 99634}, // __builtin_s390_vsbcbiq
-      {Intrinsic::s390_vsbiq, 99657}, // __builtin_s390_vsbiq
-      {Intrinsic::s390_vscbib, 99678}, // __builtin_s390_vscbib
-      {Intrinsic::s390_vscbif, 99700}, // __builtin_s390_vscbif
-      {Intrinsic::s390_vscbig, 99722}, // __builtin_s390_vscbig
-      {Intrinsic::s390_vscbih, 99744}, // __builtin_s390_vscbih
-      {Intrinsic::s390_vscbiq, 99766}, // __builtin_s390_vscbiq
-      {Intrinsic::s390_vsl, 99788}, // __builtin_s390_vsl
-      {Intrinsic::s390_vslb, 99807}, // __builtin_s390_vslb
-      {Intrinsic::s390_vsldb, 99827}, // __builtin_s390_vsldb
-      {Intrinsic::s390_vsq, 99848}, // __builtin_s390_vsq
-      {Intrinsic::s390_vsra, 99867}, // __builtin_s390_vsra
-      {Intrinsic::s390_vsrab, 99887}, // __builtin_s390_vsrab
-      {Intrinsic::s390_vsrl, 99908}, // __builtin_s390_vsrl
-      {Intrinsic::s390_vsrlb, 99928}, // __builtin_s390_vsrlb
-      {Intrinsic::s390_vstl, 99949}, // __builtin_s390_vstl
-      {Intrinsic::s390_vstrcb, 99969}, // __builtin_s390_vstrcb
-      {Intrinsic::s390_vstrcf, 99991}, // __builtin_s390_vstrcf
-      {Intrinsic::s390_vstrch, 100013}, // __builtin_s390_vstrch
-      {Intrinsic::s390_vstrczb, 100035}, // __builtin_s390_vstrczb
-      {Intrinsic::s390_vstrczf, 100058}, // __builtin_s390_vstrczf
-      {Intrinsic::s390_vstrczh, 100081}, // __builtin_s390_vstrczh
-      {Intrinsic::s390_vstrl, 100104}, // __builtin_s390_vstrl
-      {Intrinsic::s390_vsumb, 100125}, // __builtin_s390_vsumb
-      {Intrinsic::s390_vsumgf, 100146}, // __builtin_s390_vsumgf
-      {Intrinsic::s390_vsumgh, 100168}, // __builtin_s390_vsumgh
-      {Intrinsic::s390_vsumh, 100190}, // __builtin_s390_vsumh
-      {Intrinsic::s390_vsumqf, 100211}, // __builtin_s390_vsumqf
-      {Intrinsic::s390_vsumqg, 100233}, // __builtin_s390_vsumqg
-      {Intrinsic::s390_vtm, 100255}, // __builtin_s390_vtm
-      {Intrinsic::s390_vuphb, 100274}, // __builtin_s390_vuphb
-      {Intrinsic::s390_vuphf, 100295}, // __builtin_s390_vuphf
-      {Intrinsic::s390_vuphh, 100316}, // __builtin_s390_vuphh
-      {Intrinsic::s390_vuplb, 100337}, // __builtin_s390_vuplb
-      {Intrinsic::s390_vuplf, 100358}, // __builtin_s390_vuplf
-      {Intrinsic::s390_vuplhb, 100379}, // __builtin_s390_vuplhb
-      {Intrinsic::s390_vuplhf, 100401}, // __builtin_s390_vuplhf
-      {Intrinsic::s390_vuplhh, 100423}, // __builtin_s390_vuplhh
-      {Intrinsic::s390_vuplhw, 100445}, // __builtin_s390_vuplhw
-      {Intrinsic::s390_vupllb, 100467}, // __builtin_s390_vupllb
-      {Intrinsic::s390_vupllf, 100489}, // __builtin_s390_vupllf
-      {Intrinsic::s390_vupllh, 100511}, // __builtin_s390_vupllh
-      {Intrinsic::s390_tend, 95643}, // __builtin_tend
-      {Intrinsic::s390_ppa_txassist, 97308}, // __builtin_tx_assist
-      {Intrinsic::s390_etnd, 97261}, // __builtin_tx_nesting_depth
+      {Intrinsic::s390_efpc, 97635}, // __builtin_s390_efpc
+      {Intrinsic::s390_lcbb, 97682}, // __builtin_s390_lcbb
+      {Intrinsic::s390_sfpc, 97722}, // __builtin_s390_sfpc
+      {Intrinsic::s390_vaccb, 97742}, // __builtin_s390_vaccb
+      {Intrinsic::s390_vacccq, 97763}, // __builtin_s390_vacccq
+      {Intrinsic::s390_vaccf, 97785}, // __builtin_s390_vaccf
+      {Intrinsic::s390_vaccg, 97806}, // __builtin_s390_vaccg
+      {Intrinsic::s390_vacch, 97827}, // __builtin_s390_vacch
+      {Intrinsic::s390_vaccq, 97848}, // __builtin_s390_vaccq
+      {Intrinsic::s390_vacq, 97869}, // __builtin_s390_vacq
+      {Intrinsic::s390_vaq, 97889}, // __builtin_s390_vaq
+      {Intrinsic::s390_vavgb, 97908}, // __builtin_s390_vavgb
+      {Intrinsic::s390_vavgf, 97929}, // __builtin_s390_vavgf
+      {Intrinsic::s390_vavgg, 97950}, // __builtin_s390_vavgg
+      {Intrinsic::s390_vavgh, 97971}, // __builtin_s390_vavgh
+      {Intrinsic::s390_vavglb, 97992}, // __builtin_s390_vavglb
+      {Intrinsic::s390_vavglf, 98014}, // __builtin_s390_vavglf
+      {Intrinsic::s390_vavglg, 98036}, // __builtin_s390_vavglg
+      {Intrinsic::s390_vavglh, 98058}, // __builtin_s390_vavglh
+      {Intrinsic::s390_vbperm, 98080}, // __builtin_s390_vbperm
+      {Intrinsic::s390_vcksm, 98102}, // __builtin_s390_vcksm
+      {Intrinsic::s390_verimb, 98123}, // __builtin_s390_verimb
+      {Intrinsic::s390_verimf, 98145}, // __builtin_s390_verimf
+      {Intrinsic::s390_verimg, 98167}, // __builtin_s390_verimg
+      {Intrinsic::s390_verimh, 98189}, // __builtin_s390_verimh
+      {Intrinsic::s390_verllb, 98211}, // __builtin_s390_verllb
+      {Intrinsic::s390_verllf, 98233}, // __builtin_s390_verllf
+      {Intrinsic::s390_verllg, 98255}, // __builtin_s390_verllg
+      {Intrinsic::s390_verllh, 98277}, // __builtin_s390_verllh
+      {Intrinsic::s390_verllvb, 98299}, // __builtin_s390_verllvb
+      {Intrinsic::s390_verllvf, 98322}, // __builtin_s390_verllvf
+      {Intrinsic::s390_verllvg, 98345}, // __builtin_s390_verllvg
+      {Intrinsic::s390_verllvh, 98368}, // __builtin_s390_verllvh
+      {Intrinsic::s390_vfaeb, 98391}, // __builtin_s390_vfaeb
+      {Intrinsic::s390_vfaef, 98412}, // __builtin_s390_vfaef
+      {Intrinsic::s390_vfaeh, 98433}, // __builtin_s390_vfaeh
+      {Intrinsic::s390_vfaezb, 98454}, // __builtin_s390_vfaezb
+      {Intrinsic::s390_vfaezf, 98476}, // __builtin_s390_vfaezf
+      {Intrinsic::s390_vfaezh, 98498}, // __builtin_s390_vfaezh
+      {Intrinsic::s390_vfeeb, 98520}, // __builtin_s390_vfeeb
+      {Intrinsic::s390_vfeef, 98541}, // __builtin_s390_vfeef
+      {Intrinsic::s390_vfeeh, 98562}, // __builtin_s390_vfeeh
+      {Intrinsic::s390_vfeezb, 98583}, // __builtin_s390_vfeezb
+      {Intrinsic::s390_vfeezf, 98605}, // __builtin_s390_vfeezf
+      {Intrinsic::s390_vfeezh, 98627}, // __builtin_s390_vfeezh
+      {Intrinsic::s390_vfeneb, 98649}, // __builtin_s390_vfeneb
+      {Intrinsic::s390_vfenef, 98671}, // __builtin_s390_vfenef
+      {Intrinsic::s390_vfeneh, 98693}, // __builtin_s390_vfeneh
+      {Intrinsic::s390_vfenezb, 98715}, // __builtin_s390_vfenezb
+      {Intrinsic::s390_vfenezf, 98738}, // __builtin_s390_vfenezf
+      {Intrinsic::s390_vfenezh, 98761}, // __builtin_s390_vfenezh
+      {Intrinsic::s390_vgfmab, 98784}, // __builtin_s390_vgfmab
+      {Intrinsic::s390_vgfmaf, 98806}, // __builtin_s390_vgfmaf
+      {Intrinsic::s390_vgfmag, 98828}, // __builtin_s390_vgfmag
+      {Intrinsic::s390_vgfmah, 98850}, // __builtin_s390_vgfmah
+      {Intrinsic::s390_vgfmb, 98872}, // __builtin_s390_vgfmb
+      {Intrinsic::s390_vgfmf, 98893}, // __builtin_s390_vgfmf
+      {Intrinsic::s390_vgfmg, 98914}, // __builtin_s390_vgfmg
+      {Intrinsic::s390_vgfmh, 98935}, // __builtin_s390_vgfmh
+      {Intrinsic::s390_vistrb, 98956}, // __builtin_s390_vistrb
+      {Intrinsic::s390_vistrf, 98978}, // __builtin_s390_vistrf
+      {Intrinsic::s390_vistrh, 99000}, // __builtin_s390_vistrh
+      {Intrinsic::s390_vlbb, 99022}, // __builtin_s390_vlbb
+      {Intrinsic::s390_vll, 99042}, // __builtin_s390_vll
+      {Intrinsic::s390_vlrl, 99061}, // __builtin_s390_vlrl
+      {Intrinsic::s390_vmaeb, 99081}, // __builtin_s390_vmaeb
+      {Intrinsic::s390_vmaef, 99102}, // __builtin_s390_vmaef
+      {Intrinsic::s390_vmaeh, 99123}, // __builtin_s390_vmaeh
+      {Intrinsic::s390_vmahb, 99144}, // __builtin_s390_vmahb
+      {Intrinsic::s390_vmahf, 99165}, // __builtin_s390_vmahf
+      {Intrinsic::s390_vmahh, 99186}, // __builtin_s390_vmahh
+      {Intrinsic::s390_vmaleb, 99207}, // __builtin_s390_vmaleb
+      {Intrinsic::s390_vmalef, 99229}, // __builtin_s390_vmalef
+      {Intrinsic::s390_vmaleh, 99251}, // __builtin_s390_vmaleh
+      {Intrinsic::s390_vmalhb, 99273}, // __builtin_s390_vmalhb
+      {Intrinsic::s390_vmalhf, 99295}, // __builtin_s390_vmalhf
+      {Intrinsic::s390_vmalhh, 99317}, // __builtin_s390_vmalhh
+      {Intrinsic::s390_vmalob, 99339}, // __builtin_s390_vmalob
+      {Intrinsic::s390_vmalof, 99361}, // __builtin_s390_vmalof
+      {Intrinsic::s390_vmaloh, 99383}, // __builtin_s390_vmaloh
+      {Intrinsic::s390_vmaob, 99405}, // __builtin_s390_vmaob
+      {Intrinsic::s390_vmaof, 99426}, // __builtin_s390_vmaof
+      {Intrinsic::s390_vmaoh, 99447}, // __builtin_s390_vmaoh
+      {Intrinsic::s390_vmeb, 99468}, // __builtin_s390_vmeb
+      {Intrinsic::s390_vmef, 99488}, // __builtin_s390_vmef
+      {Intrinsic::s390_vmeh, 99508}, // __builtin_s390_vmeh
+      {Intrinsic::s390_vmhb, 99528}, // __builtin_s390_vmhb
+      {Intrinsic::s390_vmhf, 99548}, // __builtin_s390_vmhf
+      {Intrinsic::s390_vmhh, 99568}, // __builtin_s390_vmhh
+      {Intrinsic::s390_vmleb, 99588}, // __builtin_s390_vmleb
+      {Intrinsic::s390_vmlef, 99609}, // __builtin_s390_vmlef
+      {Intrinsic::s390_vmleh, 99630}, // __builtin_s390_vmleh
+      {Intrinsic::s390_vmlhb, 99651}, // __builtin_s390_vmlhb
+      {Intrinsic::s390_vmlhf, 99672}, // __builtin_s390_vmlhf
+      {Intrinsic::s390_vmlhh, 99693}, // __builtin_s390_vmlhh
+      {Intrinsic::s390_vmlob, 99714}, // __builtin_s390_vmlob
+      {Intrinsic::s390_vmlof, 99735}, // __builtin_s390_vmlof
+      {Intrinsic::s390_vmloh, 99756}, // __builtin_s390_vmloh
+      {Intrinsic::s390_vmob, 99777}, // __builtin_s390_vmob
+      {Intrinsic::s390_vmof, 99797}, // __builtin_s390_vmof
+      {Intrinsic::s390_vmoh, 99817}, // __builtin_s390_vmoh
+      {Intrinsic::s390_vmslg, 99837}, // __builtin_s390_vmslg
+      {Intrinsic::s390_vpdi, 99858}, // __builtin_s390_vpdi
+      {Intrinsic::s390_vperm, 99878}, // __builtin_s390_vperm
+      {Intrinsic::s390_vpklsf, 99899}, // __builtin_s390_vpklsf
+      {Intrinsic::s390_vpklsg, 99921}, // __builtin_s390_vpklsg
+      {Intrinsic::s390_vpklsh, 99943}, // __builtin_s390_vpklsh
+      {Intrinsic::s390_vpksf, 99965}, // __builtin_s390_vpksf
+      {Intrinsic::s390_vpksg, 99986}, // __builtin_s390_vpksg
+      {Intrinsic::s390_vpksh, 100007}, // __builtin_s390_vpksh
+      {Intrinsic::s390_vsbcbiq, 100028}, // __builtin_s390_vsbcbiq
+      {Intrinsic::s390_vsbiq, 100051}, // __builtin_s390_vsbiq
+      {Intrinsic::s390_vscbib, 100072}, // __builtin_s390_vscbib
+      {Intrinsic::s390_vscbif, 100094}, // __builtin_s390_vscbif
+      {Intrinsic::s390_vscbig, 100116}, // __builtin_s390_vscbig
+      {Intrinsic::s390_vscbih, 100138}, // __builtin_s390_vscbih
+      {Intrinsic::s390_vscbiq, 100160}, // __builtin_s390_vscbiq
+      {Intrinsic::s390_vsl, 100182}, // __builtin_s390_vsl
+      {Intrinsic::s390_vslb, 100201}, // __builtin_s390_vslb
+      {Intrinsic::s390_vsldb, 100221}, // __builtin_s390_vsldb
+      {Intrinsic::s390_vsq, 100242}, // __builtin_s390_vsq
+      {Intrinsic::s390_vsra, 100261}, // __builtin_s390_vsra
+      {Intrinsic::s390_vsrab, 100281}, // __builtin_s390_vsrab
+      {Intrinsic::s390_vsrl, 100302}, // __builtin_s390_vsrl
+      {Intrinsic::s390_vsrlb, 100322}, // __builtin_s390_vsrlb
+      {Intrinsic::s390_vstl, 100343}, // __builtin_s390_vstl
+      {Intrinsic::s390_vstrcb, 100363}, // __builtin_s390_vstrcb
+      {Intrinsic::s390_vstrcf, 100385}, // __builtin_s390_vstrcf
+      {Intrinsic::s390_vstrch, 100407}, // __builtin_s390_vstrch
+      {Intrinsic::s390_vstrczb, 100429}, // __builtin_s390_vstrczb
+      {Intrinsic::s390_vstrczf, 100452}, // __builtin_s390_vstrczf
+      {Intrinsic::s390_vstrczh, 100475}, // __builtin_s390_vstrczh
+      {Intrinsic::s390_vstrl, 100498}, // __builtin_s390_vstrl
+      {Intrinsic::s390_vsumb, 100519}, // __builtin_s390_vsumb
+      {Intrinsic::s390_vsumgf, 100540}, // __builtin_s390_vsumgf
+      {Intrinsic::s390_vsumgh, 100562}, // __builtin_s390_vsumgh
+      {Intrinsic::s390_vsumh, 100584}, // __builtin_s390_vsumh
+      {Intrinsic::s390_vsumqf, 100605}, // __builtin_s390_vsumqf
+      {Intrinsic::s390_vsumqg, 100627}, // __builtin_s390_vsumqg
+      {Intrinsic::s390_vtm, 100649}, // __builtin_s390_vtm
+      {Intrinsic::s390_vuphb, 100668}, // __builtin_s390_vuphb
+      {Intrinsic::s390_vuphf, 100689}, // __builtin_s390_vuphf
+      {Intrinsic::s390_vuphh, 100710}, // __builtin_s390_vuphh
+      {Intrinsic::s390_vuplb, 100731}, // __builtin_s390_vuplb
+      {Intrinsic::s390_vuplf, 100752}, // __builtin_s390_vuplf
+      {Intrinsic::s390_vuplhb, 100773}, // __builtin_s390_vuplhb
+      {Intrinsic::s390_vuplhf, 100795}, // __builtin_s390_vuplhf
+      {Intrinsic::s390_vuplhh, 100817}, // __builtin_s390_vuplhh
+      {Intrinsic::s390_vuplhw, 100839}, // __builtin_s390_vuplhw
+      {Intrinsic::s390_vupllb, 100861}, // __builtin_s390_vupllb
+      {Intrinsic::s390_vupllf, 100883}, // __builtin_s390_vupllf
+      {Intrinsic::s390_vupllh, 100905}, // __builtin_s390_vupllh
+      {Intrinsic::s390_tend, 96037}, // __builtin_tend
+      {Intrinsic::s390_ppa_txassist, 97702}, // __builtin_tx_assist
+      {Intrinsic::s390_etnd, 97655}, // __builtin_tx_nesting_depth
     };
     auto I = std::lower_bound(std::begin(s390Names),
                               std::end(s390Names),
@@ -28511,979 +30243,995 @@
   }
   if (TargetPrefix == "x86") {
     static const BuiltinEntry x86Names[] = {
-      {Intrinsic::x86_avx512_add_pd_512, 104784}, // __builtin_ia32_addpd512
-      {Intrinsic::x86_avx512_add_ps_512, 104808}, // __builtin_ia32_addps512
-      {Intrinsic::x86_avx512_mask_add_sd_round, 105882}, // __builtin_ia32_addsd_round_mask
-      {Intrinsic::x86_avx512_mask_add_ss_round, 105914}, // __builtin_ia32_addss_round_mask
-      {Intrinsic::x86_sse3_addsub_pd, 123216}, // __builtin_ia32_addsubpd
-      {Intrinsic::x86_avx_addsub_pd_256, 101424}, // __builtin_ia32_addsubpd256
-      {Intrinsic::x86_sse3_addsub_ps, 123240}, // __builtin_ia32_addsubps
-      {Intrinsic::x86_avx_addsub_ps_256, 101451}, // __builtin_ia32_addsubps256
-      {Intrinsic::x86_aesni_aesdec, 101041}, // __builtin_ia32_aesdec128
-      {Intrinsic::x86_aesni_aesdec_256, 101066}, // __builtin_ia32_aesdec256
-      {Intrinsic::x86_aesni_aesdec_512, 101091}, // __builtin_ia32_aesdec512
-      {Intrinsic::x86_aesni_aesdeclast, 101116}, // __builtin_ia32_aesdeclast128
-      {Intrinsic::x86_aesni_aesdeclast_256, 101145}, // __builtin_ia32_aesdeclast256
-      {Intrinsic::x86_aesni_aesdeclast_512, 101174}, // __builtin_ia32_aesdeclast512
-      {Intrinsic::x86_aesni_aesenc, 101203}, // __builtin_ia32_aesenc128
-      {Intrinsic::x86_aesni_aesenc_256, 101228}, // __builtin_ia32_aesenc256
-      {Intrinsic::x86_aesni_aesenc_512, 101253}, // __builtin_ia32_aesenc512
-      {Intrinsic::x86_aesni_aesenclast, 101278}, // __builtin_ia32_aesenclast128
-      {Intrinsic::x86_aesni_aesenclast_256, 101307}, // __builtin_ia32_aesenclast256
-      {Intrinsic::x86_aesni_aesenclast_512, 101336}, // __builtin_ia32_aesenclast512
-      {Intrinsic::x86_aesni_aesimc, 101365}, // __builtin_ia32_aesimc128
-      {Intrinsic::x86_aesni_aeskeygenassist, 101390}, // __builtin_ia32_aeskeygenassist128
-      {Intrinsic::x86_bmi_bextr_32, 117978}, // __builtin_ia32_bextr_u32
-      {Intrinsic::x86_bmi_bextr_64, 118003}, // __builtin_ia32_bextr_u64
-      {Intrinsic::x86_tbm_bextri_u32, 125035}, // __builtin_ia32_bextri_u32
-      {Intrinsic::x86_tbm_bextri_u64, 125061}, // __builtin_ia32_bextri_u64
-      {Intrinsic::x86_sse41_blendvpd, 123417}, // __builtin_ia32_blendvpd
-      {Intrinsic::x86_avx_blendv_pd_256, 101478}, // __builtin_ia32_blendvpd256
-      {Intrinsic::x86_sse41_blendvps, 123441}, // __builtin_ia32_blendvps
-      {Intrinsic::x86_avx_blendv_ps_256, 101505}, // __builtin_ia32_blendvps256
-      {Intrinsic::x86_avx512_broadcastmb_128, 104832}, // __builtin_ia32_broadcastmb128
-      {Intrinsic::x86_avx512_broadcastmb_256, 104862}, // __builtin_ia32_broadcastmb256
-      {Intrinsic::x86_avx512_broadcastmb_512, 104892}, // __builtin_ia32_broadcastmb512
-      {Intrinsic::x86_avx512_broadcastmw_128, 104922}, // __builtin_ia32_broadcastmw128
-      {Intrinsic::x86_avx512_broadcastmw_256, 104952}, // __builtin_ia32_broadcastmw256
-      {Intrinsic::x86_avx512_broadcastmw_512, 104982}, // __builtin_ia32_broadcastmw512
-      {Intrinsic::x86_bmi_bzhi_64, 118051}, // __builtin_ia32_bzhi_di
-      {Intrinsic::x86_bmi_bzhi_32, 118028}, // __builtin_ia32_bzhi_si
-      {Intrinsic::x86_cldemote, 118166}, // __builtin_ia32_cldemote
-      {Intrinsic::x86_sse2_clflush, 121827}, // __builtin_ia32_clflush
-      {Intrinsic::x86_clflushopt, 118190}, // __builtin_ia32_clflushopt
-      {Intrinsic::x86_clrssbsy, 118216}, // __builtin_ia32_clrssbsy
-      {Intrinsic::x86_clwb, 118240}, // __builtin_ia32_clwb
-      {Intrinsic::x86_clzero, 118260}, // __builtin_ia32_clzero
-      {Intrinsic::x86_sse2_cmp_sd, 121850}, // __builtin_ia32_cmpsd
-      {Intrinsic::x86_avx512_mask_cmp_sd, 105946}, // __builtin_ia32_cmpsd_mask
-      {Intrinsic::x86_sse_cmp_ss, 121046}, // __builtin_ia32_cmpss
-      {Intrinsic::x86_avx512_mask_cmp_ss, 105972}, // __builtin_ia32_cmpss_mask
-      {Intrinsic::x86_sse_comieq_ss, 121067}, // __builtin_ia32_comieq
-      {Intrinsic::x86_sse_comige_ss, 121089}, // __builtin_ia32_comige
-      {Intrinsic::x86_sse_comigt_ss, 121111}, // __builtin_ia32_comigt
-      {Intrinsic::x86_sse_comile_ss, 121133}, // __builtin_ia32_comile
-      {Intrinsic::x86_sse_comilt_ss, 121155}, // __builtin_ia32_comilt
-      {Intrinsic::x86_sse_comineq_ss, 121177}, // __builtin_ia32_comineq
-      {Intrinsic::x86_sse2_comieq_sd, 121871}, // __builtin_ia32_comisdeq
-      {Intrinsic::x86_sse2_comige_sd, 121895}, // __builtin_ia32_comisdge
-      {Intrinsic::x86_sse2_comigt_sd, 121919}, // __builtin_ia32_comisdgt
-      {Intrinsic::x86_sse2_comile_sd, 121943}, // __builtin_ia32_comisdle
-      {Intrinsic::x86_sse2_comilt_sd, 121967}, // __builtin_ia32_comisdlt
-      {Intrinsic::x86_sse2_comineq_sd, 121991}, // __builtin_ia32_comisdneq
-      {Intrinsic::x86_sse42_crc32_64_64, 123879}, // __builtin_ia32_crc32di
-      {Intrinsic::x86_sse42_crc32_32_16, 123810}, // __builtin_ia32_crc32hi
-      {Intrinsic::x86_sse42_crc32_32_8, 123856}, // __builtin_ia32_crc32qi
-      {Intrinsic::x86_sse42_crc32_32_32, 123833}, // __builtin_ia32_crc32si
-      {Intrinsic::x86_sse2_cvtpd2dq, 122016}, // __builtin_ia32_cvtpd2dq
-      {Intrinsic::x86_avx512_mask_cvtpd2dq_128, 105998}, // __builtin_ia32_cvtpd2dq128_mask
-      {Intrinsic::x86_avx_cvt_pd2dq_256, 101559}, // __builtin_ia32_cvtpd2dq256
-      {Intrinsic::x86_avx512_mask_cvtpd2dq_512, 106030}, // __builtin_ia32_cvtpd2dq512_mask
-      {Intrinsic::x86_sse_cvtpd2pi, 121200}, // __builtin_ia32_cvtpd2pi
-      {Intrinsic::x86_sse2_cvtpd2ps, 122040}, // __builtin_ia32_cvtpd2ps
-      {Intrinsic::x86_avx_cvt_pd2_ps_256, 101532}, // __builtin_ia32_cvtpd2ps256
-      {Intrinsic::x86_avx512_mask_cvtpd2ps_512, 106091}, // __builtin_ia32_cvtpd2ps512_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2ps, 106062}, // __builtin_ia32_cvtpd2ps_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2qq_128, 106123}, // __builtin_ia32_cvtpd2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2qq_256, 106155}, // __builtin_ia32_cvtpd2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2qq_512, 106187}, // __builtin_ia32_cvtpd2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2udq_128, 106219}, // __builtin_ia32_cvtpd2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2udq_256, 106252}, // __builtin_ia32_cvtpd2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2udq_512, 106285}, // __builtin_ia32_cvtpd2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2uqq_128, 106318}, // __builtin_ia32_cvtpd2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2uqq_256, 106351}, // __builtin_ia32_cvtpd2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2uqq_512, 106384}, // __builtin_ia32_cvtpd2uqq512_mask
-      {Intrinsic::x86_sse_cvtpi2pd, 121224}, // __builtin_ia32_cvtpi2pd
-      {Intrinsic::x86_sse_cvtpi2ps, 121248}, // __builtin_ia32_cvtpi2ps
-      {Intrinsic::x86_sse2_cvtps2dq, 122064}, // __builtin_ia32_cvtps2dq
-      {Intrinsic::x86_avx512_mask_cvtps2dq_128, 106417}, // __builtin_ia32_cvtps2dq128_mask
-      {Intrinsic::x86_avx_cvt_ps2dq_256, 101586}, // __builtin_ia32_cvtps2dq256
-      {Intrinsic::x86_avx512_mask_cvtps2dq_256, 106449}, // __builtin_ia32_cvtps2dq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2dq_512, 106481}, // __builtin_ia32_cvtps2dq512_mask
-      {Intrinsic::x86_avx512_mask_cvtps2pd_512, 106513}, // __builtin_ia32_cvtps2pd512_mask
-      {Intrinsic::x86_sse_cvtps2pi, 121272}, // __builtin_ia32_cvtps2pi
-      {Intrinsic::x86_avx512_mask_cvtps2qq_128, 106545}, // __builtin_ia32_cvtps2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvtps2qq_256, 106577}, // __builtin_ia32_cvtps2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2qq_512, 106609}, // __builtin_ia32_cvtps2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvtps2udq_128, 106641}, // __builtin_ia32_cvtps2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvtps2udq_256, 106674}, // __builtin_ia32_cvtps2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2udq_512, 106707}, // __builtin_ia32_cvtps2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvtps2uqq_128, 106740}, // __builtin_ia32_cvtps2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvtps2uqq_256, 106773}, // __builtin_ia32_cvtps2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2uqq_512, 106806}, // __builtin_ia32_cvtps2uqq512_mask
-      {Intrinsic::x86_avx512_mask_cvtqq2ps_128, 106839}, // __builtin_ia32_cvtqq2ps128_mask
-      {Intrinsic::x86_sse2_cvtsd2si, 122088}, // __builtin_ia32_cvtsd2si
-      {Intrinsic::x86_sse2_cvtsd2si64, 122112}, // __builtin_ia32_cvtsd2si64
-      {Intrinsic::x86_sse2_cvtsd2ss, 122138}, // __builtin_ia32_cvtsd2ss
-      {Intrinsic::x86_avx512_mask_cvtsd2ss_round, 106871}, // __builtin_ia32_cvtsd2ss_round_mask
-      {Intrinsic::x86_avx512_cvtsi2sd64, 105204}, // __builtin_ia32_cvtsi2sd64
-      {Intrinsic::x86_avx512_cvtsi2ss32, 105230}, // __builtin_ia32_cvtsi2ss32
-      {Intrinsic::x86_avx512_cvtsi2ss64, 105256}, // __builtin_ia32_cvtsi2ss64
-      {Intrinsic::x86_avx512_mask_cvtss2sd_round, 106906}, // __builtin_ia32_cvtss2sd_round_mask
-      {Intrinsic::x86_sse_cvtss2si, 121296}, // __builtin_ia32_cvtss2si
-      {Intrinsic::x86_sse_cvtss2si64, 121320}, // __builtin_ia32_cvtss2si64
-      {Intrinsic::x86_sse2_cvttpd2dq, 122162}, // __builtin_ia32_cvttpd2dq
-      {Intrinsic::x86_avx512_mask_cvttpd2dq_128, 106941}, // __builtin_ia32_cvttpd2dq128_mask
-      {Intrinsic::x86_avx_cvtt_pd2dq_256, 101613}, // __builtin_ia32_cvttpd2dq256
-      {Intrinsic::x86_avx512_mask_cvttpd2dq_512, 106974}, // __builtin_ia32_cvttpd2dq512_mask
-      {Intrinsic::x86_sse_cvttpd2pi, 121346}, // __builtin_ia32_cvttpd2pi
-      {Intrinsic::x86_avx512_mask_cvttpd2qq_128, 107007}, // __builtin_ia32_cvttpd2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2qq_256, 107040}, // __builtin_ia32_cvttpd2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2qq_512, 107073}, // __builtin_ia32_cvttpd2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2udq_128, 107106}, // __builtin_ia32_cvttpd2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2udq_256, 107140}, // __builtin_ia32_cvttpd2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2udq_512, 107174}, // __builtin_ia32_cvttpd2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2uqq_128, 107208}, // __builtin_ia32_cvttpd2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2uqq_256, 107242}, // __builtin_ia32_cvttpd2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2uqq_512, 107276}, // __builtin_ia32_cvttpd2uqq512_mask
-      {Intrinsic::x86_sse2_cvttps2dq, 122187}, // __builtin_ia32_cvttps2dq
-      {Intrinsic::x86_avx_cvtt_ps2dq_256, 101641}, // __builtin_ia32_cvttps2dq256
-      {Intrinsic::x86_avx512_mask_cvttps2dq_512, 107310}, // __builtin_ia32_cvttps2dq512_mask
-      {Intrinsic::x86_sse_cvttps2pi, 121371}, // __builtin_ia32_cvttps2pi
-      {Intrinsic::x86_avx512_mask_cvttps2qq_128, 107343}, // __builtin_ia32_cvttps2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvttps2qq_256, 107376}, // __builtin_ia32_cvttps2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvttps2qq_512, 107409}, // __builtin_ia32_cvttps2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvttps2udq_128, 107442}, // __builtin_ia32_cvttps2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvttps2udq_256, 107476}, // __builtin_ia32_cvttps2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvttps2udq_512, 107510}, // __builtin_ia32_cvttps2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvttps2uqq_128, 107544}, // __builtin_ia32_cvttps2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvttps2uqq_256, 107578}, // __builtin_ia32_cvttps2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvttps2uqq_512, 107612}, // __builtin_ia32_cvttps2uqq512_mask
-      {Intrinsic::x86_sse2_cvttsd2si, 122212}, // __builtin_ia32_cvttsd2si
-      {Intrinsic::x86_sse2_cvttsd2si64, 122237}, // __builtin_ia32_cvttsd2si64
-      {Intrinsic::x86_sse_cvttss2si, 121396}, // __builtin_ia32_cvttss2si
-      {Intrinsic::x86_sse_cvttss2si64, 121421}, // __builtin_ia32_cvttss2si64
-      {Intrinsic::x86_avx512_mask_cvtuqq2ps_128, 107646}, // __builtin_ia32_cvtuqq2ps128_mask
-      {Intrinsic::x86_avx512_cvtusi642sd, 105537}, // __builtin_ia32_cvtusi2sd64
-      {Intrinsic::x86_avx512_cvtusi2ss, 105510}, // __builtin_ia32_cvtusi2ss32
-      {Intrinsic::x86_avx512_cvtusi642ss, 105564}, // __builtin_ia32_cvtusi2ss64
-      {Intrinsic::x86_avx512_dbpsadbw_128, 105591}, // __builtin_ia32_dbpsadbw128
-      {Intrinsic::x86_avx512_dbpsadbw_256, 105618}, // __builtin_ia32_dbpsadbw256
-      {Intrinsic::x86_avx512_dbpsadbw_512, 105645}, // __builtin_ia32_dbpsadbw512
-      {Intrinsic::x86_directstore32, 118282}, // __builtin_ia32_directstore_u32
-      {Intrinsic::x86_directstore64, 118313}, // __builtin_ia32_directstore_u64
-      {Intrinsic::x86_avx512_div_pd_512, 105672}, // __builtin_ia32_divpd512
-      {Intrinsic::x86_avx512_div_ps_512, 105696}, // __builtin_ia32_divps512
-      {Intrinsic::x86_avx512_mask_div_sd_round, 107679}, // __builtin_ia32_divsd_round_mask
-      {Intrinsic::x86_avx512_mask_div_ss_round, 107711}, // __builtin_ia32_divss_round_mask
-      {Intrinsic::x86_sse41_dppd, 123465}, // __builtin_ia32_dppd
-      {Intrinsic::x86_sse41_dpps, 123485}, // __builtin_ia32_dpps
-      {Intrinsic::x86_avx_dp_ps_256, 101669}, // __builtin_ia32_dpps256
-      {Intrinsic::x86_mmx_emms, 118747}, // __builtin_ia32_emms
-      {Intrinsic::x86_avx512_exp2_pd, 105720}, // __builtin_ia32_exp2pd_mask
-      {Intrinsic::x86_avx512_exp2_ps, 105747}, // __builtin_ia32_exp2ps_mask
-      {Intrinsic::x86_sse4a_extrq, 124304}, // __builtin_ia32_extrq
-      {Intrinsic::x86_sse4a_extrqi, 124325}, // __builtin_ia32_extrqi
-      {Intrinsic::x86_mmx_femms, 118767}, // __builtin_ia32_femms
-      {Intrinsic::x86_avx512_mask_fixupimm_pd_128, 107743}, // __builtin_ia32_fixupimmpd128_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_pd_128, 113403}, // __builtin_ia32_fixupimmpd128_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_pd_256, 107777}, // __builtin_ia32_fixupimmpd256_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_pd_256, 113438}, // __builtin_ia32_fixupimmpd256_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_pd_512, 107811}, // __builtin_ia32_fixupimmpd512_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_pd_512, 113473}, // __builtin_ia32_fixupimmpd512_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ps_128, 107845}, // __builtin_ia32_fixupimmps128_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ps_128, 113508}, // __builtin_ia32_fixupimmps128_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ps_256, 107879}, // __builtin_ia32_fixupimmps256_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ps_256, 113543}, // __builtin_ia32_fixupimmps256_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ps_512, 107913}, // __builtin_ia32_fixupimmps512_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ps_512, 113578}, // __builtin_ia32_fixupimmps512_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_sd, 107947}, // __builtin_ia32_fixupimmsd_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_sd, 113613}, // __builtin_ia32_fixupimmsd_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ss, 107978}, // __builtin_ia32_fixupimmss_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ss, 113645}, // __builtin_ia32_fixupimmss_maskz
-      {Intrinsic::x86_avx512_mask_fpclass_sd, 108009}, // __builtin_ia32_fpclasssd_mask
-      {Intrinsic::x86_avx512_mask_fpclass_ss, 108039}, // __builtin_ia32_fpclassss_mask
-      {Intrinsic::x86_fxrstor, 118466}, // __builtin_ia32_fxrstor
-      {Intrinsic::x86_fxrstor64, 118489}, // __builtin_ia32_fxrstor64
-      {Intrinsic::x86_fxsave, 118514}, // __builtin_ia32_fxsave
-      {Intrinsic::x86_fxsave64, 118536}, // __builtin_ia32_fxsave64
-      {Intrinsic::x86_avx2_gather_d_d, 102851}, // __builtin_ia32_gatherd_d
-      {Intrinsic::x86_avx2_gather_d_d_256, 102876}, // __builtin_ia32_gatherd_d256
-      {Intrinsic::x86_avx2_gather_d_pd, 102904}, // __builtin_ia32_gatherd_pd
-      {Intrinsic::x86_avx2_gather_d_pd_256, 102930}, // __builtin_ia32_gatherd_pd256
-      {Intrinsic::x86_avx2_gather_d_ps, 102959}, // __builtin_ia32_gatherd_ps
-      {Intrinsic::x86_avx2_gather_d_ps_256, 102985}, // __builtin_ia32_gatherd_ps256
-      {Intrinsic::x86_avx2_gather_d_q, 103014}, // __builtin_ia32_gatherd_q
-      {Intrinsic::x86_avx2_gather_d_q_256, 103039}, // __builtin_ia32_gatherd_q256
-      {Intrinsic::x86_avx512_gatherpf_dpd_512, 105774}, // __builtin_ia32_gatherpfdpd
-      {Intrinsic::x86_avx512_gatherpf_dps_512, 105801}, // __builtin_ia32_gatherpfdps
-      {Intrinsic::x86_avx512_gatherpf_qpd_512, 105828}, // __builtin_ia32_gatherpfqpd
-      {Intrinsic::x86_avx512_gatherpf_qps_512, 105855}, // __builtin_ia32_gatherpfqps
-      {Intrinsic::x86_avx2_gather_q_d, 103067}, // __builtin_ia32_gatherq_d
-      {Intrinsic::x86_avx2_gather_q_d_256, 103092}, // __builtin_ia32_gatherq_d256
-      {Intrinsic::x86_avx2_gather_q_pd, 103120}, // __builtin_ia32_gatherq_pd
-      {Intrinsic::x86_avx2_gather_q_pd_256, 103146}, // __builtin_ia32_gatherq_pd256
-      {Intrinsic::x86_avx2_gather_q_ps, 103175}, // __builtin_ia32_gatherq_ps
-      {Intrinsic::x86_avx2_gather_q_ps_256, 103201}, // __builtin_ia32_gatherq_ps256
-      {Intrinsic::x86_avx2_gather_q_q, 103230}, // __builtin_ia32_gatherq_q
-      {Intrinsic::x86_avx2_gather_q_q_256, 103255}, // __builtin_ia32_gatherq_q256
-      {Intrinsic::x86_avx512_mask_getexp_pd_128, 108069}, // __builtin_ia32_getexppd128_mask
-      {Intrinsic::x86_avx512_mask_getexp_pd_256, 108101}, // __builtin_ia32_getexppd256_mask
-      {Intrinsic::x86_avx512_mask_getexp_pd_512, 108133}, // __builtin_ia32_getexppd512_mask
-      {Intrinsic::x86_avx512_mask_getexp_ps_128, 108165}, // __builtin_ia32_getexpps128_mask
-      {Intrinsic::x86_avx512_mask_getexp_ps_256, 108197}, // __builtin_ia32_getexpps256_mask
-      {Intrinsic::x86_avx512_mask_getexp_ps_512, 108229}, // __builtin_ia32_getexpps512_mask
-      {Intrinsic::x86_avx512_mask_getexp_sd, 108261}, // __builtin_ia32_getexpsd128_round_mask
-      {Intrinsic::x86_avx512_mask_getexp_ss, 108299}, // __builtin_ia32_getexpss128_round_mask
-      {Intrinsic::x86_avx512_mask_getmant_pd_128, 108337}, // __builtin_ia32_getmantpd128_mask
-      {Intrinsic::x86_avx512_mask_getmant_pd_256, 108370}, // __builtin_ia32_getmantpd256_mask
-      {Intrinsic::x86_avx512_mask_getmant_pd_512, 108403}, // __builtin_ia32_getmantpd512_mask
-      {Intrinsic::x86_avx512_mask_getmant_ps_128, 108436}, // __builtin_ia32_getmantps128_mask
-      {Intrinsic::x86_avx512_mask_getmant_ps_256, 108469}, // __builtin_ia32_getmantps256_mask
-      {Intrinsic::x86_avx512_mask_getmant_ps_512, 108502}, // __builtin_ia32_getmantps512_mask
-      {Intrinsic::x86_avx512_mask_getmant_sd, 108535}, // __builtin_ia32_getmantsd_round_mask
-      {Intrinsic::x86_avx512_mask_getmant_ss, 108571}, // __builtin_ia32_getmantss_round_mask
-      {Intrinsic::x86_sse3_hadd_pd, 123264}, // __builtin_ia32_haddpd
-      {Intrinsic::x86_avx_hadd_pd_256, 101692}, // __builtin_ia32_haddpd256
-      {Intrinsic::x86_sse3_hadd_ps, 123286}, // __builtin_ia32_haddps
-      {Intrinsic::x86_avx_hadd_ps_256, 101717}, // __builtin_ia32_haddps256
-      {Intrinsic::x86_sse3_hsub_pd, 123308}, // __builtin_ia32_hsubpd
-      {Intrinsic::x86_avx_hsub_pd_256, 101742}, // __builtin_ia32_hsubpd256
-      {Intrinsic::x86_sse3_hsub_ps, 123330}, // __builtin_ia32_hsubps
-      {Intrinsic::x86_avx_hsub_ps_256, 101767}, // __builtin_ia32_hsubps256
-      {Intrinsic::x86_incsspd, 118560}, // __builtin_ia32_incsspd
-      {Intrinsic::x86_incsspq, 118583}, // __builtin_ia32_incsspq
-      {Intrinsic::x86_sse41_insertps, 123505}, // __builtin_ia32_insertps128
-      {Intrinsic::x86_sse4a_insertq, 124347}, // __builtin_ia32_insertq
-      {Intrinsic::x86_sse4a_insertqi, 124370}, // __builtin_ia32_insertqi
-      {Intrinsic::x86_invpcid, 118606}, // __builtin_ia32_invpcid
-      {Intrinsic::x86_sse3_ldu_dq, 123352}, // __builtin_ia32_lddqu
-      {Intrinsic::x86_avx_ldu_dq_256, 101792}, // __builtin_ia32_lddqu256
-      {Intrinsic::x86_sse2_lfence, 122264}, // __builtin_ia32_lfence
-      {Intrinsic::x86_llwpcb, 118629}, // __builtin_ia32_llwpcb
-      {Intrinsic::x86_lwpins32, 118651}, // __builtin_ia32_lwpins32
-      {Intrinsic::x86_lwpins64, 118675}, // __builtin_ia32_lwpins64
-      {Intrinsic::x86_lwpval32, 118699}, // __builtin_ia32_lwpval32
-      {Intrinsic::x86_lwpval64, 118723}, // __builtin_ia32_lwpval64
-      {Intrinsic::x86_avx2_maskload_d, 103283}, // __builtin_ia32_maskloadd
-      {Intrinsic::x86_avx2_maskload_d_256, 103308}, // __builtin_ia32_maskloadd256
-      {Intrinsic::x86_avx_maskload_pd, 101816}, // __builtin_ia32_maskloadpd
-      {Intrinsic::x86_avx_maskload_pd_256, 101842}, // __builtin_ia32_maskloadpd256
-      {Intrinsic::x86_avx_maskload_ps, 101871}, // __builtin_ia32_maskloadps
-      {Intrinsic::x86_avx_maskload_ps_256, 101897}, // __builtin_ia32_maskloadps256
-      {Intrinsic::x86_avx2_maskload_q, 103336}, // __builtin_ia32_maskloadq
-      {Intrinsic::x86_avx2_maskload_q_256, 103361}, // __builtin_ia32_maskloadq256
-      {Intrinsic::x86_sse2_maskmov_dqu, 122286}, // __builtin_ia32_maskmovdqu
-      {Intrinsic::x86_mmx_maskmovq, 118788}, // __builtin_ia32_maskmovq
-      {Intrinsic::x86_avx2_maskstore_d, 103389}, // __builtin_ia32_maskstored
-      {Intrinsic::x86_avx2_maskstore_d_256, 103415}, // __builtin_ia32_maskstored256
-      {Intrinsic::x86_avx_maskstore_pd, 101926}, // __builtin_ia32_maskstorepd
-      {Intrinsic::x86_avx_maskstore_pd_256, 101953}, // __builtin_ia32_maskstorepd256
-      {Intrinsic::x86_avx_maskstore_ps, 101983}, // __builtin_ia32_maskstoreps
-      {Intrinsic::x86_avx_maskstore_ps_256, 102010}, // __builtin_ia32_maskstoreps256
-      {Intrinsic::x86_avx2_maskstore_q, 103444}, // __builtin_ia32_maskstoreq
-      {Intrinsic::x86_avx2_maskstore_q_256, 103470}, // __builtin_ia32_maskstoreq256
-      {Intrinsic::x86_sse2_max_pd, 122312}, // __builtin_ia32_maxpd
-      {Intrinsic::x86_avx_max_pd_256, 102040}, // __builtin_ia32_maxpd256
-      {Intrinsic::x86_avx512_max_pd_512, 113677}, // __builtin_ia32_maxpd512
-      {Intrinsic::x86_sse_max_ps, 121448}, // __builtin_ia32_maxps
-      {Intrinsic::x86_avx_max_ps_256, 102064}, // __builtin_ia32_maxps256
-      {Intrinsic::x86_avx512_max_ps_512, 113701}, // __builtin_ia32_maxps512
-      {Intrinsic::x86_sse2_max_sd, 122333}, // __builtin_ia32_maxsd
-      {Intrinsic::x86_avx512_mask_max_sd_round, 108607}, // __builtin_ia32_maxsd_round_mask
-      {Intrinsic::x86_sse_max_ss, 121469}, // __builtin_ia32_maxss
-      {Intrinsic::x86_avx512_mask_max_ss_round, 108639}, // __builtin_ia32_maxss_round_mask
-      {Intrinsic::x86_sse2_mfence, 122354}, // __builtin_ia32_mfence
-      {Intrinsic::x86_sse2_min_pd, 122376}, // __builtin_ia32_minpd
-      {Intrinsic::x86_avx_min_pd_256, 102088}, // __builtin_ia32_minpd256
-      {Intrinsic::x86_avx512_min_pd_512, 113725}, // __builtin_ia32_minpd512
-      {Intrinsic::x86_sse_min_ps, 121490}, // __builtin_ia32_minps
-      {Intrinsic::x86_avx_min_ps_256, 102112}, // __builtin_ia32_minps256
-      {Intrinsic::x86_avx512_min_ps_512, 113749}, // __builtin_ia32_minps512
-      {Intrinsic::x86_sse2_min_sd, 122397}, // __builtin_ia32_minsd
-      {Intrinsic::x86_avx512_mask_min_sd_round, 108671}, // __builtin_ia32_minsd_round_mask
-      {Intrinsic::x86_sse_min_ss, 121511}, // __builtin_ia32_minss
-      {Intrinsic::x86_avx512_mask_min_ss_round, 108703}, // __builtin_ia32_minss_round_mask
-      {Intrinsic::x86_sse3_monitor, 123373}, // __builtin_ia32_monitor
-      {Intrinsic::x86_monitorx, 120334}, // __builtin_ia32_monitorx
-      {Intrinsic::x86_movdir64b, 120358}, // __builtin_ia32_movdir64b
-      {Intrinsic::x86_sse2_movmsk_pd, 122418}, // __builtin_ia32_movmskpd
-      {Intrinsic::x86_avx_movmsk_pd_256, 102136}, // __builtin_ia32_movmskpd256
-      {Intrinsic::x86_sse_movmsk_ps, 121532}, // __builtin_ia32_movmskps
-      {Intrinsic::x86_avx_movmsk_ps_256, 102163}, // __builtin_ia32_movmskps256
-      {Intrinsic::x86_mmx_movnt_dq, 118812}, // __builtin_ia32_movntq
-      {Intrinsic::x86_sse41_mpsadbw, 123532}, // __builtin_ia32_mpsadbw128
-      {Intrinsic::x86_avx2_mpsadbw, 103499}, // __builtin_ia32_mpsadbw256
-      {Intrinsic::x86_avx512_mul_pd_512, 113773}, // __builtin_ia32_mulpd512
-      {Intrinsic::x86_avx512_mul_ps_512, 113797}, // __builtin_ia32_mulps512
-      {Intrinsic::x86_avx512_mask_mul_sd_round, 108735}, // __builtin_ia32_mulsd_round_mask
-      {Intrinsic::x86_avx512_mask_mul_ss_round, 108767}, // __builtin_ia32_mulss_round_mask
-      {Intrinsic::x86_sse3_mwait, 123396}, // __builtin_ia32_mwait
-      {Intrinsic::x86_mwaitx, 120383}, // __builtin_ia32_mwaitx
-      {Intrinsic::x86_ssse3_pabs_b, 124394}, // __builtin_ia32_pabsb
-      {Intrinsic::x86_ssse3_pabs_d, 124415}, // __builtin_ia32_pabsd
-      {Intrinsic::x86_ssse3_pabs_w, 124436}, // __builtin_ia32_pabsw
-      {Intrinsic::x86_mmx_packssdw, 118834}, // __builtin_ia32_packssdw
-      {Intrinsic::x86_sse2_packssdw_128, 122442}, // __builtin_ia32_packssdw128
-      {Intrinsic::x86_avx2_packssdw, 103525}, // __builtin_ia32_packssdw256
-      {Intrinsic::x86_avx512_packssdw_512, 113821}, // __builtin_ia32_packssdw512
-      {Intrinsic::x86_mmx_packsswb, 118858}, // __builtin_ia32_packsswb
-      {Intrinsic::x86_sse2_packsswb_128, 122469}, // __builtin_ia32_packsswb128
-      {Intrinsic::x86_avx2_packsswb, 103552}, // __builtin_ia32_packsswb256
-      {Intrinsic::x86_avx512_packsswb_512, 113848}, // __builtin_ia32_packsswb512
-      {Intrinsic::x86_sse41_packusdw, 123558}, // __builtin_ia32_packusdw128
-      {Intrinsic::x86_avx2_packusdw, 103579}, // __builtin_ia32_packusdw256
-      {Intrinsic::x86_avx512_packusdw_512, 113875}, // __builtin_ia32_packusdw512
-      {Intrinsic::x86_mmx_packuswb, 118882}, // __builtin_ia32_packuswb
-      {Intrinsic::x86_sse2_packuswb_128, 122496}, // __builtin_ia32_packuswb128
-      {Intrinsic::x86_avx2_packuswb, 103606}, // __builtin_ia32_packuswb256
-      {Intrinsic::x86_avx512_packuswb_512, 113902}, // __builtin_ia32_packuswb512
-      {Intrinsic::x86_mmx_padd_b, 118906}, // __builtin_ia32_paddb
-      {Intrinsic::x86_mmx_padd_d, 118927}, // __builtin_ia32_paddd
-      {Intrinsic::x86_mmx_padd_q, 118948}, // __builtin_ia32_paddq
-      {Intrinsic::x86_mmx_padds_b, 118990}, // __builtin_ia32_paddsb
-      {Intrinsic::x86_mmx_padds_w, 119012}, // __builtin_ia32_paddsw
-      {Intrinsic::x86_mmx_paddus_b, 119034}, // __builtin_ia32_paddusb
-      {Intrinsic::x86_mmx_paddus_w, 119057}, // __builtin_ia32_paddusw
-      {Intrinsic::x86_mmx_padd_w, 118969}, // __builtin_ia32_paddw
-      {Intrinsic::x86_mmx_palignr_b, 119080}, // __builtin_ia32_palignr
-      {Intrinsic::x86_mmx_pand, 119103}, // __builtin_ia32_pand
-      {Intrinsic::x86_mmx_pandn, 119123}, // __builtin_ia32_pandn
-      {Intrinsic::x86_sse2_pause, 122523}, // __builtin_ia32_pause
-      {Intrinsic::x86_mmx_pavg_b, 119144}, // __builtin_ia32_pavgb
-      {Intrinsic::x86_3dnow_pavgusb, 100533}, // __builtin_ia32_pavgusb
-      {Intrinsic::x86_mmx_pavg_w, 119165}, // __builtin_ia32_pavgw
-      {Intrinsic::x86_sse41_pblendvb, 123585}, // __builtin_ia32_pblendvb128
-      {Intrinsic::x86_avx2_pblendvb, 103633}, // __builtin_ia32_pblendvb256
-      {Intrinsic::x86_pclmulqdq, 120405}, // __builtin_ia32_pclmulqdq128
-      {Intrinsic::x86_pclmulqdq_256, 120433}, // __builtin_ia32_pclmulqdq256
-      {Intrinsic::x86_pclmulqdq_512, 120461}, // __builtin_ia32_pclmulqdq512
-      {Intrinsic::x86_mmx_pcmpeq_b, 119186}, // __builtin_ia32_pcmpeqb
-      {Intrinsic::x86_mmx_pcmpeq_d, 119209}, // __builtin_ia32_pcmpeqd
-      {Intrinsic::x86_mmx_pcmpeq_w, 119232}, // __builtin_ia32_pcmpeqw
-      {Intrinsic::x86_sse42_pcmpestri128, 123902}, // __builtin_ia32_pcmpestri128
-      {Intrinsic::x86_sse42_pcmpestria128, 123930}, // __builtin_ia32_pcmpestria128
-      {Intrinsic::x86_sse42_pcmpestric128, 123959}, // __builtin_ia32_pcmpestric128
-      {Intrinsic::x86_sse42_pcmpestrio128, 123988}, // __builtin_ia32_pcmpestrio128
-      {Intrinsic::x86_sse42_pcmpestris128, 124017}, // __builtin_ia32_pcmpestris128
-      {Intrinsic::x86_sse42_pcmpestriz128, 124046}, // __builtin_ia32_pcmpestriz128
-      {Intrinsic::x86_sse42_pcmpestrm128, 124075}, // __builtin_ia32_pcmpestrm128
-      {Intrinsic::x86_mmx_pcmpgt_b, 119255}, // __builtin_ia32_pcmpgtb
-      {Intrinsic::x86_mmx_pcmpgt_d, 119278}, // __builtin_ia32_pcmpgtd
-      {Intrinsic::x86_mmx_pcmpgt_w, 119301}, // __builtin_ia32_pcmpgtw
-      {Intrinsic::x86_sse42_pcmpistri128, 124103}, // __builtin_ia32_pcmpistri128
-      {Intrinsic::x86_sse42_pcmpistria128, 124131}, // __builtin_ia32_pcmpistria128
-      {Intrinsic::x86_sse42_pcmpistric128, 124160}, // __builtin_ia32_pcmpistric128
-      {Intrinsic::x86_sse42_pcmpistrio128, 124189}, // __builtin_ia32_pcmpistrio128
-      {Intrinsic::x86_sse42_pcmpistris128, 124218}, // __builtin_ia32_pcmpistris128
-      {Intrinsic::x86_sse42_pcmpistriz128, 124247}, // __builtin_ia32_pcmpistriz128
-      {Intrinsic::x86_sse42_pcmpistrm128, 124276}, // __builtin_ia32_pcmpistrm128
-      {Intrinsic::x86_bmi_pdep_64, 118097}, // __builtin_ia32_pdep_di
-      {Intrinsic::x86_bmi_pdep_32, 118074}, // __builtin_ia32_pdep_si
-      {Intrinsic::x86_avx512_permvar_df_256, 113929}, // __builtin_ia32_permvardf256
-      {Intrinsic::x86_avx512_permvar_df_512, 113957}, // __builtin_ia32_permvardf512
-      {Intrinsic::x86_avx512_permvar_di_256, 113985}, // __builtin_ia32_permvardi256
-      {Intrinsic::x86_avx512_permvar_di_512, 114013}, // __builtin_ia32_permvardi512
-      {Intrinsic::x86_avx512_permvar_hi_128, 114041}, // __builtin_ia32_permvarhi128
-      {Intrinsic::x86_avx512_permvar_hi_256, 114069}, // __builtin_ia32_permvarhi256
-      {Intrinsic::x86_avx512_permvar_hi_512, 114097}, // __builtin_ia32_permvarhi512
-      {Intrinsic::x86_avx512_permvar_qi_128, 114125}, // __builtin_ia32_permvarqi128
-      {Intrinsic::x86_avx512_permvar_qi_256, 114153}, // __builtin_ia32_permvarqi256
-      {Intrinsic::x86_avx512_permvar_qi_512, 114181}, // __builtin_ia32_permvarqi512
-      {Intrinsic::x86_avx2_permps, 103688}, // __builtin_ia32_permvarsf256
-      {Intrinsic::x86_avx512_permvar_sf_512, 114209}, // __builtin_ia32_permvarsf512
-      {Intrinsic::x86_avx2_permd, 103660}, // __builtin_ia32_permvarsi256
-      {Intrinsic::x86_avx512_permvar_si_512, 114237}, // __builtin_ia32_permvarsi512
-      {Intrinsic::x86_bmi_pext_64, 118143}, // __builtin_ia32_pext_di
-      {Intrinsic::x86_bmi_pext_32, 118120}, // __builtin_ia32_pext_si
-      {Intrinsic::x86_3dnow_pf2id, 100556}, // __builtin_ia32_pf2id
-      {Intrinsic::x86_3dnowa_pf2iw, 100954}, // __builtin_ia32_pf2iw
-      {Intrinsic::x86_3dnow_pfacc, 100577}, // __builtin_ia32_pfacc
-      {Intrinsic::x86_3dnow_pfadd, 100598}, // __builtin_ia32_pfadd
-      {Intrinsic::x86_3dnow_pfcmpeq, 100619}, // __builtin_ia32_pfcmpeq
-      {Intrinsic::x86_3dnow_pfcmpge, 100642}, // __builtin_ia32_pfcmpge
-      {Intrinsic::x86_3dnow_pfcmpgt, 100665}, // __builtin_ia32_pfcmpgt
-      {Intrinsic::x86_3dnow_pfmax, 100688}, // __builtin_ia32_pfmax
-      {Intrinsic::x86_3dnow_pfmin, 100709}, // __builtin_ia32_pfmin
-      {Intrinsic::x86_3dnow_pfmul, 100730}, // __builtin_ia32_pfmul
-      {Intrinsic::x86_3dnowa_pfnacc, 100975}, // __builtin_ia32_pfnacc
-      {Intrinsic::x86_3dnowa_pfpnacc, 100997}, // __builtin_ia32_pfpnacc
-      {Intrinsic::x86_3dnow_pfrcp, 100751}, // __builtin_ia32_pfrcp
-      {Intrinsic::x86_3dnow_pfrcpit1, 100772}, // __builtin_ia32_pfrcpit1
-      {Intrinsic::x86_3dnow_pfrcpit2, 100796}, // __builtin_ia32_pfrcpit2
-      {Intrinsic::x86_3dnow_pfrsqit1, 100820}, // __builtin_ia32_pfrsqit1
-      {Intrinsic::x86_3dnow_pfrsqrt, 100844}, // __builtin_ia32_pfrsqrt
-      {Intrinsic::x86_3dnow_pfsub, 100867}, // __builtin_ia32_pfsub
-      {Intrinsic::x86_3dnow_pfsubr, 100888}, // __builtin_ia32_pfsubr
-      {Intrinsic::x86_ssse3_phadd_d, 124457}, // __builtin_ia32_phaddd
-      {Intrinsic::x86_ssse3_phadd_d_128, 124479}, // __builtin_ia32_phaddd128
-      {Intrinsic::x86_avx2_phadd_d, 103716}, // __builtin_ia32_phaddd256
-      {Intrinsic::x86_ssse3_phadd_sw, 124504}, // __builtin_ia32_phaddsw
-      {Intrinsic::x86_ssse3_phadd_sw_128, 124527}, // __builtin_ia32_phaddsw128
-      {Intrinsic::x86_avx2_phadd_sw, 103741}, // __builtin_ia32_phaddsw256
-      {Intrinsic::x86_ssse3_phadd_w, 124553}, // __builtin_ia32_phaddw
-      {Intrinsic::x86_ssse3_phadd_w_128, 124575}, // __builtin_ia32_phaddw128
-      {Intrinsic::x86_avx2_phadd_w, 103767}, // __builtin_ia32_phaddw256
-      {Intrinsic::x86_sse41_phminposuw, 123612}, // __builtin_ia32_phminposuw128
-      {Intrinsic::x86_ssse3_phsub_d, 124600}, // __builtin_ia32_phsubd
-      {Intrinsic::x86_ssse3_phsub_d_128, 124622}, // __builtin_ia32_phsubd128
-      {Intrinsic::x86_avx2_phsub_d, 103792}, // __builtin_ia32_phsubd256
-      {Intrinsic::x86_ssse3_phsub_sw, 124647}, // __builtin_ia32_phsubsw
-      {Intrinsic::x86_ssse3_phsub_sw_128, 124670}, // __builtin_ia32_phsubsw128
-      {Intrinsic::x86_avx2_phsub_sw, 103817}, // __builtin_ia32_phsubsw256
-      {Intrinsic::x86_ssse3_phsub_w, 124696}, // __builtin_ia32_phsubw
-      {Intrinsic::x86_ssse3_phsub_w_128, 124718}, // __builtin_ia32_phsubw128
-      {Intrinsic::x86_avx2_phsub_w, 103843}, // __builtin_ia32_phsubw256
-      {Intrinsic::x86_3dnow_pi2fd, 100910}, // __builtin_ia32_pi2fd
-      {Intrinsic::x86_3dnowa_pi2fw, 101020}, // __builtin_ia32_pi2fw
-      {Intrinsic::x86_ssse3_pmadd_ub_sw, 124743}, // __builtin_ia32_pmaddubsw
-      {Intrinsic::x86_ssse3_pmadd_ub_sw_128, 124768}, // __builtin_ia32_pmaddubsw128
-      {Intrinsic::x86_avx2_pmadd_ub_sw, 103868}, // __builtin_ia32_pmaddubsw256
-      {Intrinsic::x86_avx512_pmaddubs_w_512, 114265}, // __builtin_ia32_pmaddubsw512
-      {Intrinsic::x86_mmx_pmadd_wd, 119380}, // __builtin_ia32_pmaddwd
-      {Intrinsic::x86_sse2_pmadd_wd, 122544}, // __builtin_ia32_pmaddwd128
-      {Intrinsic::x86_avx2_pmadd_wd, 103896}, // __builtin_ia32_pmaddwd256
-      {Intrinsic::x86_avx512_pmaddw_d_512, 114293}, // __builtin_ia32_pmaddwd512
-      {Intrinsic::x86_mmx_pmaxs_w, 119403}, // __builtin_ia32_pmaxsw
-      {Intrinsic::x86_mmx_pmaxu_b, 119425}, // __builtin_ia32_pmaxub
-      {Intrinsic::x86_mmx_pmins_w, 119447}, // __builtin_ia32_pminsw
-      {Intrinsic::x86_mmx_pminu_b, 119469}, // __builtin_ia32_pminub
-      {Intrinsic::x86_avx512_mask_pmov_db_128, 108799}, // __builtin_ia32_pmovdb128_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_mem_128, 108859}, // __builtin_ia32_pmovdb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_256, 108829}, // __builtin_ia32_pmovdb256_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_mem_256, 108892}, // __builtin_ia32_pmovdb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_mem_512, 108925}, // __builtin_ia32_pmovdb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_128, 108958}, // __builtin_ia32_pmovdw128_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_mem_128, 109018}, // __builtin_ia32_pmovdw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_256, 108988}, // __builtin_ia32_pmovdw256_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_mem_256, 109051}, // __builtin_ia32_pmovdw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_mem_512, 109084}, // __builtin_ia32_pmovdw512mem_mask
-      {Intrinsic::x86_mmx_pmovmskb, 119491}, // __builtin_ia32_pmovmskb
-      {Intrinsic::x86_sse2_pmovmskb_128, 122570}, // __builtin_ia32_pmovmskb128
-      {Intrinsic::x86_avx2_pmovmskb, 103922}, // __builtin_ia32_pmovmskb256
-      {Intrinsic::x86_avx512_mask_pmov_qb_128, 109117}, // __builtin_ia32_pmovqb128_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_mem_128, 109207}, // __builtin_ia32_pmovqb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_256, 109147}, // __builtin_ia32_pmovqb256_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_mem_256, 109240}, // __builtin_ia32_pmovqb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_512, 109177}, // __builtin_ia32_pmovqb512_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_mem_512, 109273}, // __builtin_ia32_pmovqb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_128, 109306}, // __builtin_ia32_pmovqd128_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_mem_128, 109336}, // __builtin_ia32_pmovqd128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_mem_256, 109369}, // __builtin_ia32_pmovqd256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_mem_512, 109402}, // __builtin_ia32_pmovqd512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_128, 109435}, // __builtin_ia32_pmovqw128_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_mem_128, 109495}, // __builtin_ia32_pmovqw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_256, 109465}, // __builtin_ia32_pmovqw256_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_mem_256, 109528}, // __builtin_ia32_pmovqw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_mem_512, 109561}, // __builtin_ia32_pmovqw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_128, 109723}, // __builtin_ia32_pmovsdb128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_mem_128, 109816}, // __builtin_ia32_pmovsdb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_256, 109754}, // __builtin_ia32_pmovsdb256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_mem_256, 109850}, // __builtin_ia32_pmovsdb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_512, 109785}, // __builtin_ia32_pmovsdb512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_mem_512, 109884}, // __builtin_ia32_pmovsdb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_128, 109918}, // __builtin_ia32_pmovsdw128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_128, 110011}, // __builtin_ia32_pmovsdw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_256, 109949}, // __builtin_ia32_pmovsdw256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_256, 110045}, // __builtin_ia32_pmovsdw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_512, 109980}, // __builtin_ia32_pmovsdw512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_512, 110079}, // __builtin_ia32_pmovsdw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_128, 110113}, // __builtin_ia32_pmovsqb128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_128, 110206}, // __builtin_ia32_pmovsqb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_256, 110144}, // __builtin_ia32_pmovsqb256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_256, 110240}, // __builtin_ia32_pmovsqb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_512, 110175}, // __builtin_ia32_pmovsqb512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_512, 110274}, // __builtin_ia32_pmovsqb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_128, 110308}, // __builtin_ia32_pmovsqd128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_128, 110401}, // __builtin_ia32_pmovsqd128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_256, 110339}, // __builtin_ia32_pmovsqd256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_256, 110435}, // __builtin_ia32_pmovsqd256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_512, 110370}, // __builtin_ia32_pmovsqd512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_512, 110469}, // __builtin_ia32_pmovsqd512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_128, 110503}, // __builtin_ia32_pmovsqw128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_128, 110596}, // __builtin_ia32_pmovsqw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_256, 110534}, // __builtin_ia32_pmovsqw256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_256, 110630}, // __builtin_ia32_pmovsqw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_512, 110565}, // __builtin_ia32_pmovsqw512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_512, 110664}, // __builtin_ia32_pmovsqw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_128, 110698}, // __builtin_ia32_pmovswb128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_128, 110791}, // __builtin_ia32_pmovswb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_256, 110729}, // __builtin_ia32_pmovswb256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_256, 110825}, // __builtin_ia32_pmovswb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_512, 110760}, // __builtin_ia32_pmovswb512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_512, 110859}, // __builtin_ia32_pmovswb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_128, 110893}, // __builtin_ia32_pmovusdb128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_mem_128, 110989}, // __builtin_ia32_pmovusdb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_256, 110925}, // __builtin_ia32_pmovusdb256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_mem_256, 111024}, // __builtin_ia32_pmovusdb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_512, 110957}, // __builtin_ia32_pmovusdb512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_mem_512, 111059}, // __builtin_ia32_pmovusdb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_128, 111094}, // __builtin_ia32_pmovusdw128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_128, 111190}, // __builtin_ia32_pmovusdw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_256, 111126}, // __builtin_ia32_pmovusdw256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_256, 111225}, // __builtin_ia32_pmovusdw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_512, 111158}, // __builtin_ia32_pmovusdw512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_512, 111260}, // __builtin_ia32_pmovusdw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_128, 111295}, // __builtin_ia32_pmovusqb128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_128, 111391}, // __builtin_ia32_pmovusqb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_256, 111327}, // __builtin_ia32_pmovusqb256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_256, 111426}, // __builtin_ia32_pmovusqb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_512, 111359}, // __builtin_ia32_pmovusqb512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_512, 111461}, // __builtin_ia32_pmovusqb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_128, 111496}, // __builtin_ia32_pmovusqd128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_128, 111592}, // __builtin_ia32_pmovusqd128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_256, 111528}, // __builtin_ia32_pmovusqd256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_256, 111627}, // __builtin_ia32_pmovusqd256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_512, 111560}, // __builtin_ia32_pmovusqd512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_512, 111662}, // __builtin_ia32_pmovusqd512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_128, 111697}, // __builtin_ia32_pmovusqw128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_128, 111793}, // __builtin_ia32_pmovusqw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_256, 111729}, // __builtin_ia32_pmovusqw256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_256, 111828}, // __builtin_ia32_pmovusqw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_512, 111761}, // __builtin_ia32_pmovusqw512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_512, 111863}, // __builtin_ia32_pmovusqw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_128, 111898}, // __builtin_ia32_pmovuswb128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_128, 111994}, // __builtin_ia32_pmovuswb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_256, 111930}, // __builtin_ia32_pmovuswb256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_256, 112029}, // __builtin_ia32_pmovuswb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_512, 111962}, // __builtin_ia32_pmovuswb512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_512, 112064}, // __builtin_ia32_pmovuswb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_128, 109594}, // __builtin_ia32_pmovwb128_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_mem_128, 109624}, // __builtin_ia32_pmovwb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_mem_256, 109657}, // __builtin_ia32_pmovwb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_mem_512, 109690}, // __builtin_ia32_pmovwb512mem_mask
-      {Intrinsic::x86_ssse3_pmul_hr_sw, 124796}, // __builtin_ia32_pmulhrsw
-      {Intrinsic::x86_ssse3_pmul_hr_sw_128, 124820}, // __builtin_ia32_pmulhrsw128
-      {Intrinsic::x86_avx2_pmul_hr_sw, 103949}, // __builtin_ia32_pmulhrsw256
-      {Intrinsic::x86_avx512_pmul_hr_sw_512, 114319}, // __builtin_ia32_pmulhrsw512
-      {Intrinsic::x86_3dnow_pmulhrw, 100931}, // __builtin_ia32_pmulhrw
-      {Intrinsic::x86_mmx_pmulhu_w, 119537}, // __builtin_ia32_pmulhuw
-      {Intrinsic::x86_sse2_pmulhu_w, 122622}, // __builtin_ia32_pmulhuw128
-      {Intrinsic::x86_avx2_pmulhu_w, 104001}, // __builtin_ia32_pmulhuw256
-      {Intrinsic::x86_avx512_pmulhu_w_512, 114371}, // __builtin_ia32_pmulhuw512
-      {Intrinsic::x86_mmx_pmulh_w, 119515}, // __builtin_ia32_pmulhw
-      {Intrinsic::x86_sse2_pmulh_w, 122597}, // __builtin_ia32_pmulhw128
-      {Intrinsic::x86_avx2_pmulh_w, 103976}, // __builtin_ia32_pmulhw256
-      {Intrinsic::x86_avx512_pmulh_w_512, 114346}, // __builtin_ia32_pmulhw512
-      {Intrinsic::x86_mmx_pmull_w, 119560}, // __builtin_ia32_pmullw
-      {Intrinsic::x86_mmx_pmulu_dq, 119582}, // __builtin_ia32_pmuludq
-      {Intrinsic::x86_mmx_por, 119605}, // __builtin_ia32_por
-      {Intrinsic::x86_mmx_psad_bw, 119624}, // __builtin_ia32_psadbw
-      {Intrinsic::x86_sse2_psad_bw, 122648}, // __builtin_ia32_psadbw128
-      {Intrinsic::x86_avx2_psad_bw, 104027}, // __builtin_ia32_psadbw256
-      {Intrinsic::x86_avx512_psad_bw_512, 114496}, // __builtin_ia32_psadbw512
-      {Intrinsic::x86_ssse3_pshuf_b, 124847}, // __builtin_ia32_pshufb
-      {Intrinsic::x86_ssse3_pshuf_b_128, 124869}, // __builtin_ia32_pshufb128
-      {Intrinsic::x86_avx2_pshuf_b, 104052}, // __builtin_ia32_pshufb256
-      {Intrinsic::x86_avx512_pshuf_b_512, 114521}, // __builtin_ia32_pshufb512
-      {Intrinsic::x86_sse_pshuf_w, 121556}, // __builtin_ia32_pshufw
-      {Intrinsic::x86_ssse3_psign_b, 124894}, // __builtin_ia32_psignb
-      {Intrinsic::x86_ssse3_psign_b_128, 124916}, // __builtin_ia32_psignb128
-      {Intrinsic::x86_avx2_psign_b, 104077}, // __builtin_ia32_psignb256
-      {Intrinsic::x86_ssse3_psign_d, 124941}, // __builtin_ia32_psignd
-      {Intrinsic::x86_ssse3_psign_d_128, 124963}, // __builtin_ia32_psignd128
-      {Intrinsic::x86_avx2_psign_d, 104102}, // __builtin_ia32_psignd256
-      {Intrinsic::x86_ssse3_psign_w, 124988}, // __builtin_ia32_psignw
-      {Intrinsic::x86_ssse3_psign_w_128, 125010}, // __builtin_ia32_psignw128
-      {Intrinsic::x86_avx2_psign_w, 104127}, // __builtin_ia32_psignw256
-      {Intrinsic::x86_mmx_psll_d, 119646}, // __builtin_ia32_pslld
-      {Intrinsic::x86_sse2_psll_d, 122673}, // __builtin_ia32_pslld128
-      {Intrinsic::x86_avx2_psll_d, 104152}, // __builtin_ia32_pslld256
-      {Intrinsic::x86_avx512_psll_d_512, 114546}, // __builtin_ia32_pslld512
-      {Intrinsic::x86_mmx_pslli_d, 119709}, // __builtin_ia32_pslldi
-      {Intrinsic::x86_sse2_pslli_d, 122745}, // __builtin_ia32_pslldi128
-      {Intrinsic::x86_avx2_pslli_d, 104224}, // __builtin_ia32_pslldi256
-      {Intrinsic::x86_avx512_pslli_d_512, 114618}, // __builtin_ia32_pslldi512
-      {Intrinsic::x86_mmx_psll_q, 119667}, // __builtin_ia32_psllq
-      {Intrinsic::x86_sse2_psll_q, 122697}, // __builtin_ia32_psllq128
-      {Intrinsic::x86_avx2_psll_q, 104176}, // __builtin_ia32_psllq256
-      {Intrinsic::x86_avx512_psll_q_512, 114570}, // __builtin_ia32_psllq512
-      {Intrinsic::x86_mmx_pslli_q, 119731}, // __builtin_ia32_psllqi
-      {Intrinsic::x86_sse2_pslli_q, 122770}, // __builtin_ia32_psllqi128
-      {Intrinsic::x86_avx2_pslli_q, 104249}, // __builtin_ia32_psllqi256
-      {Intrinsic::x86_avx512_pslli_q_512, 114643}, // __builtin_ia32_psllqi512
-      {Intrinsic::x86_avx512_psllv_w_256, 114766}, // __builtin_ia32_psllv16hi
-      {Intrinsic::x86_avx512_psllv_d_512, 114693}, // __builtin_ia32_psllv16si
-      {Intrinsic::x86_avx2_psllv_q, 104347}, // __builtin_ia32_psllv2di
-      {Intrinsic::x86_avx512_psllv_w_512, 114791}, // __builtin_ia32_psllv32hi
-      {Intrinsic::x86_avx2_psllv_q_256, 104371}, // __builtin_ia32_psllv4di
-      {Intrinsic::x86_avx2_psllv_d, 104299}, // __builtin_ia32_psllv4si
-      {Intrinsic::x86_avx512_psllv_q_512, 114718}, // __builtin_ia32_psllv8di
-      {Intrinsic::x86_avx512_psllv_w_128, 114742}, // __builtin_ia32_psllv8hi
-      {Intrinsic::x86_avx2_psllv_d_256, 104323}, // __builtin_ia32_psllv8si
-      {Intrinsic::x86_mmx_psll_w, 119688}, // __builtin_ia32_psllw
-      {Intrinsic::x86_sse2_psll_w, 122721}, // __builtin_ia32_psllw128
-      {Intrinsic::x86_avx2_psll_w, 104200}, // __builtin_ia32_psllw256
-      {Intrinsic::x86_avx512_psll_w_512, 114594}, // __builtin_ia32_psllw512
-      {Intrinsic::x86_mmx_pslli_w, 119753}, // __builtin_ia32_psllwi
-      {Intrinsic::x86_sse2_pslli_w, 122795}, // __builtin_ia32_psllwi128
-      {Intrinsic::x86_avx2_pslli_w, 104274}, // __builtin_ia32_psllwi256
-      {Intrinsic::x86_avx512_pslli_w_512, 114668}, // __builtin_ia32_psllwi512
-      {Intrinsic::x86_mmx_psra_d, 119775}, // __builtin_ia32_psrad
-      {Intrinsic::x86_sse2_psra_d, 122820}, // __builtin_ia32_psrad128
-      {Intrinsic::x86_avx2_psra_d, 104395}, // __builtin_ia32_psrad256
-      {Intrinsic::x86_avx512_psra_d_512, 114816}, // __builtin_ia32_psrad512
-      {Intrinsic::x86_mmx_psrai_d, 119817}, // __builtin_ia32_psradi
-      {Intrinsic::x86_sse2_psrai_d, 122868}, // __builtin_ia32_psradi128
-      {Intrinsic::x86_avx2_psrai_d, 104443}, // __builtin_ia32_psradi256
-      {Intrinsic::x86_avx512_psrai_d_512, 114936}, // __builtin_ia32_psradi512
-      {Intrinsic::x86_avx512_psra_q_128, 114840}, // __builtin_ia32_psraq128
-      {Intrinsic::x86_avx512_psra_q_256, 114864}, // __builtin_ia32_psraq256
-      {Intrinsic::x86_avx512_psra_q_512, 114888}, // __builtin_ia32_psraq512
-      {Intrinsic::x86_avx512_psrai_q_128, 114961}, // __builtin_ia32_psraqi128
-      {Intrinsic::x86_avx512_psrai_q_256, 114986}, // __builtin_ia32_psraqi256
-      {Intrinsic::x86_avx512_psrai_q_512, 115011}, // __builtin_ia32_psraqi512
-      {Intrinsic::x86_avx512_psrav_w_256, 115184}, // __builtin_ia32_psrav16hi
-      {Intrinsic::x86_avx512_psrav_d_512, 115061}, // __builtin_ia32_psrav16si
-      {Intrinsic::x86_avx512_psrav_w_512, 115209}, // __builtin_ia32_psrav32hi
-      {Intrinsic::x86_avx2_psrav_d, 104493}, // __builtin_ia32_psrav4si
-      {Intrinsic::x86_avx512_psrav_q_512, 115136}, // __builtin_ia32_psrav8di
-      {Intrinsic::x86_avx512_psrav_w_128, 115160}, // __builtin_ia32_psrav8hi
-      {Intrinsic::x86_avx2_psrav_d_256, 104517}, // __builtin_ia32_psrav8si
-      {Intrinsic::x86_avx512_psrav_q_128, 115086}, // __builtin_ia32_psravq128
-      {Intrinsic::x86_avx512_psrav_q_256, 115111}, // __builtin_ia32_psravq256
-      {Intrinsic::x86_mmx_psra_w, 119796}, // __builtin_ia32_psraw
-      {Intrinsic::x86_sse2_psra_w, 122844}, // __builtin_ia32_psraw128
-      {Intrinsic::x86_avx2_psra_w, 104419}, // __builtin_ia32_psraw256
-      {Intrinsic::x86_avx512_psra_w_512, 114912}, // __builtin_ia32_psraw512
-      {Intrinsic::x86_mmx_psrai_w, 119839}, // __builtin_ia32_psrawi
-      {Intrinsic::x86_sse2_psrai_w, 122893}, // __builtin_ia32_psrawi128
-      {Intrinsic::x86_avx2_psrai_w, 104468}, // __builtin_ia32_psrawi256
-      {Intrinsic::x86_avx512_psrai_w_512, 115036}, // __builtin_ia32_psrawi512
-      {Intrinsic::x86_mmx_psrl_d, 119861}, // __builtin_ia32_psrld
-      {Intrinsic::x86_sse2_psrl_d, 122918}, // __builtin_ia32_psrld128
-      {Intrinsic::x86_avx2_psrl_d, 104541}, // __builtin_ia32_psrld256
-      {Intrinsic::x86_avx512_psrl_d_512, 115234}, // __builtin_ia32_psrld512
-      {Intrinsic::x86_mmx_psrli_d, 119924}, // __builtin_ia32_psrldi
-      {Intrinsic::x86_sse2_psrli_d, 122990}, // __builtin_ia32_psrldi128
-      {Intrinsic::x86_avx2_psrli_d, 104613}, // __builtin_ia32_psrldi256
-      {Intrinsic::x86_avx512_psrli_d_512, 115306}, // __builtin_ia32_psrldi512
-      {Intrinsic::x86_mmx_psrl_q, 119882}, // __builtin_ia32_psrlq
-      {Intrinsic::x86_sse2_psrl_q, 122942}, // __builtin_ia32_psrlq128
-      {Intrinsic::x86_avx2_psrl_q, 104565}, // __builtin_ia32_psrlq256
-      {Intrinsic::x86_avx512_psrl_q_512, 115258}, // __builtin_ia32_psrlq512
-      {Intrinsic::x86_mmx_psrli_q, 119946}, // __builtin_ia32_psrlqi
-      {Intrinsic::x86_sse2_psrli_q, 123015}, // __builtin_ia32_psrlqi128
-      {Intrinsic::x86_avx2_psrli_q, 104638}, // __builtin_ia32_psrlqi256
-      {Intrinsic::x86_avx512_psrli_q_512, 115331}, // __builtin_ia32_psrlqi512
-      {Intrinsic::x86_avx512_psrlv_w_256, 115454}, // __builtin_ia32_psrlv16hi
-      {Intrinsic::x86_avx512_psrlv_d_512, 115381}, // __builtin_ia32_psrlv16si
-      {Intrinsic::x86_avx2_psrlv_q, 104736}, // __builtin_ia32_psrlv2di
-      {Intrinsic::x86_avx512_psrlv_w_512, 115479}, // __builtin_ia32_psrlv32hi
-      {Intrinsic::x86_avx2_psrlv_q_256, 104760}, // __builtin_ia32_psrlv4di
-      {Intrinsic::x86_avx2_psrlv_d, 104688}, // __builtin_ia32_psrlv4si
-      {Intrinsic::x86_avx512_psrlv_q_512, 115406}, // __builtin_ia32_psrlv8di
-      {Intrinsic::x86_avx512_psrlv_w_128, 115430}, // __builtin_ia32_psrlv8hi
-      {Intrinsic::x86_avx2_psrlv_d_256, 104712}, // __builtin_ia32_psrlv8si
-      {Intrinsic::x86_mmx_psrl_w, 119903}, // __builtin_ia32_psrlw
-      {Intrinsic::x86_sse2_psrl_w, 122966}, // __builtin_ia32_psrlw128
-      {Intrinsic::x86_avx2_psrl_w, 104589}, // __builtin_ia32_psrlw256
-      {Intrinsic::x86_avx512_psrl_w_512, 115282}, // __builtin_ia32_psrlw512
-      {Intrinsic::x86_mmx_psrli_w, 119968}, // __builtin_ia32_psrlwi
-      {Intrinsic::x86_sse2_psrli_w, 123040}, // __builtin_ia32_psrlwi128
-      {Intrinsic::x86_avx2_psrli_w, 104663}, // __builtin_ia32_psrlwi256
-      {Intrinsic::x86_avx512_psrli_w_512, 115356}, // __builtin_ia32_psrlwi512
-      {Intrinsic::x86_mmx_psub_b, 119990}, // __builtin_ia32_psubb
-      {Intrinsic::x86_mmx_psub_d, 120011}, // __builtin_ia32_psubd
-      {Intrinsic::x86_mmx_psub_q, 120032}, // __builtin_ia32_psubq
-      {Intrinsic::x86_mmx_psubs_b, 120074}, // __builtin_ia32_psubsb
-      {Intrinsic::x86_mmx_psubs_w, 120096}, // __builtin_ia32_psubsw
-      {Intrinsic::x86_mmx_psubus_b, 120118}, // __builtin_ia32_psubusb
-      {Intrinsic::x86_mmx_psubus_w, 120141}, // __builtin_ia32_psubusw
-      {Intrinsic::x86_mmx_psub_w, 120053}, // __builtin_ia32_psubw
-      {Intrinsic::x86_avx512_pternlog_d_128, 115504}, // __builtin_ia32_pternlogd128
-      {Intrinsic::x86_avx512_pternlog_d_256, 115532}, // __builtin_ia32_pternlogd256
-      {Intrinsic::x86_avx512_pternlog_d_512, 115560}, // __builtin_ia32_pternlogd512
-      {Intrinsic::x86_avx512_pternlog_q_128, 115588}, // __builtin_ia32_pternlogq128
-      {Intrinsic::x86_avx512_pternlog_q_256, 115616}, // __builtin_ia32_pternlogq256
-      {Intrinsic::x86_avx512_pternlog_q_512, 115644}, // __builtin_ia32_pternlogq512
-      {Intrinsic::x86_sse41_ptestc, 123641}, // __builtin_ia32_ptestc128
-      {Intrinsic::x86_avx_ptestc_256, 102190}, // __builtin_ia32_ptestc256
-      {Intrinsic::x86_sse41_ptestnzc, 123666}, // __builtin_ia32_ptestnzc128
-      {Intrinsic::x86_avx_ptestnzc_256, 102215}, // __builtin_ia32_ptestnzc256
-      {Intrinsic::x86_sse41_ptestz, 123693}, // __builtin_ia32_ptestz128
-      {Intrinsic::x86_avx_ptestz_256, 102242}, // __builtin_ia32_ptestz256
-      {Intrinsic::x86_ptwrite32, 120489}, // __builtin_ia32_ptwrite32
-      {Intrinsic::x86_ptwrite64, 120514}, // __builtin_ia32_ptwrite64
-      {Intrinsic::x86_mmx_punpckhbw, 120164}, // __builtin_ia32_punpckhbw
-      {Intrinsic::x86_mmx_punpckhdq, 120189}, // __builtin_ia32_punpckhdq
-      {Intrinsic::x86_mmx_punpckhwd, 120214}, // __builtin_ia32_punpckhwd
-      {Intrinsic::x86_mmx_punpcklbw, 120239}, // __builtin_ia32_punpcklbw
-      {Intrinsic::x86_mmx_punpckldq, 120264}, // __builtin_ia32_punpckldq
-      {Intrinsic::x86_mmx_punpcklwd, 120289}, // __builtin_ia32_punpcklwd
-      {Intrinsic::x86_mmx_pxor, 120314}, // __builtin_ia32_pxor
-      {Intrinsic::x86_avx512_mask_range_pd_128, 112099}, // __builtin_ia32_rangepd128_mask
-      {Intrinsic::x86_avx512_mask_range_pd_256, 112130}, // __builtin_ia32_rangepd256_mask
-      {Intrinsic::x86_avx512_mask_range_pd_512, 112161}, // __builtin_ia32_rangepd512_mask
-      {Intrinsic::x86_avx512_mask_range_ps_128, 112192}, // __builtin_ia32_rangeps128_mask
-      {Intrinsic::x86_avx512_mask_range_ps_256, 112223}, // __builtin_ia32_rangeps256_mask
-      {Intrinsic::x86_avx512_mask_range_ps_512, 112254}, // __builtin_ia32_rangeps512_mask
-      {Intrinsic::x86_avx512_mask_range_sd, 112285}, // __builtin_ia32_rangesd128_round_mask
-      {Intrinsic::x86_avx512_mask_range_ss, 112322}, // __builtin_ia32_rangess128_round_mask
-      {Intrinsic::x86_avx512_rcp14_pd_128, 115672}, // __builtin_ia32_rcp14pd128_mask
-      {Intrinsic::x86_avx512_rcp14_pd_256, 115703}, // __builtin_ia32_rcp14pd256_mask
-      {Intrinsic::x86_avx512_rcp14_pd_512, 115734}, // __builtin_ia32_rcp14pd512_mask
-      {Intrinsic::x86_avx512_rcp14_ps_128, 115765}, // __builtin_ia32_rcp14ps128_mask
-      {Intrinsic::x86_avx512_rcp14_ps_256, 115796}, // __builtin_ia32_rcp14ps256_mask
-      {Intrinsic::x86_avx512_rcp14_ps_512, 115827}, // __builtin_ia32_rcp14ps512_mask
-      {Intrinsic::x86_avx512_rcp14_sd, 115858}, // __builtin_ia32_rcp14sd_mask
-      {Intrinsic::x86_avx512_rcp14_ss, 115886}, // __builtin_ia32_rcp14ss_mask
-      {Intrinsic::x86_avx512_rcp28_pd, 115914}, // __builtin_ia32_rcp28pd_mask
-      {Intrinsic::x86_avx512_rcp28_ps, 115942}, // __builtin_ia32_rcp28ps_mask
-      {Intrinsic::x86_avx512_rcp28_sd, 115970}, // __builtin_ia32_rcp28sd_round_mask
-      {Intrinsic::x86_avx512_rcp28_ss, 116004}, // __builtin_ia32_rcp28ss_round_mask
-      {Intrinsic::x86_sse_rcp_ps, 121578}, // __builtin_ia32_rcpps
-      {Intrinsic::x86_avx_rcp_ps_256, 102267}, // __builtin_ia32_rcpps256
-      {Intrinsic::x86_sse_rcp_ss, 121599}, // __builtin_ia32_rcpss
-      {Intrinsic::x86_rdfsbase_32, 120539}, // __builtin_ia32_rdfsbase32
-      {Intrinsic::x86_rdfsbase_64, 120565}, // __builtin_ia32_rdfsbase64
-      {Intrinsic::x86_rdgsbase_32, 120591}, // __builtin_ia32_rdgsbase32
-      {Intrinsic::x86_rdgsbase_64, 120617}, // __builtin_ia32_rdgsbase64
-      {Intrinsic::x86_rdpid, 120643}, // __builtin_ia32_rdpid
-      {Intrinsic::x86_rdpkru, 120664}, // __builtin_ia32_rdpkru
-      {Intrinsic::x86_rdpmc, 120686}, // __builtin_ia32_rdpmc
-      {Intrinsic::x86_rdsspd, 120707}, // __builtin_ia32_rdsspd
-      {Intrinsic::x86_rdsspq, 120729}, // __builtin_ia32_rdsspq
-      {Intrinsic::x86_rdtsc, 120751}, // __builtin_ia32_rdtsc
-      {Intrinsic::x86_flags_read_u32, 118344}, // __builtin_ia32_readeflags_u32
-      {Intrinsic::x86_flags_read_u64, 118374}, // __builtin_ia32_readeflags_u64
-      {Intrinsic::x86_avx512_mask_reduce_pd_128, 112359}, // __builtin_ia32_reducepd128_mask
-      {Intrinsic::x86_avx512_mask_reduce_pd_256, 112391}, // __builtin_ia32_reducepd256_mask
-      {Intrinsic::x86_avx512_mask_reduce_pd_512, 112423}, // __builtin_ia32_reducepd512_mask
-      {Intrinsic::x86_avx512_mask_reduce_ps_128, 112455}, // __builtin_ia32_reduceps128_mask
-      {Intrinsic::x86_avx512_mask_reduce_ps_256, 112487}, // __builtin_ia32_reduceps256_mask
-      {Intrinsic::x86_avx512_mask_reduce_ps_512, 112519}, // __builtin_ia32_reduceps512_mask
-      {Intrinsic::x86_avx512_mask_reduce_sd, 112551}, // __builtin_ia32_reducesd_mask
-      {Intrinsic::x86_avx512_mask_reduce_ss, 112580}, // __builtin_ia32_reducess_mask
-      {Intrinsic::x86_avx512_mask_rndscale_pd_128, 112609}, // __builtin_ia32_rndscalepd_128_mask
-      {Intrinsic::x86_avx512_mask_rndscale_pd_256, 112644}, // __builtin_ia32_rndscalepd_256_mask
-      {Intrinsic::x86_avx512_mask_rndscale_pd_512, 112679}, // __builtin_ia32_rndscalepd_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ps_128, 112710}, // __builtin_ia32_rndscaleps_128_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ps_256, 112745}, // __builtin_ia32_rndscaleps_256_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ps_512, 112780}, // __builtin_ia32_rndscaleps_mask
-      {Intrinsic::x86_avx512_mask_rndscale_sd, 112811}, // __builtin_ia32_rndscalesd_round_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ss, 112848}, // __builtin_ia32_rndscaless_round_mask
-      {Intrinsic::x86_sse41_round_pd, 123718}, // __builtin_ia32_roundpd
-      {Intrinsic::x86_avx_round_pd_256, 102291}, // __builtin_ia32_roundpd256
-      {Intrinsic::x86_sse41_round_ps, 123741}, // __builtin_ia32_roundps
-      {Intrinsic::x86_avx_round_ps_256, 102317}, // __builtin_ia32_roundps256
-      {Intrinsic::x86_sse41_round_sd, 123764}, // __builtin_ia32_roundsd
-      {Intrinsic::x86_sse41_round_ss, 123787}, // __builtin_ia32_roundss
-      {Intrinsic::x86_avx512_rsqrt14_pd_128, 116038}, // __builtin_ia32_rsqrt14pd128_mask
-      {Intrinsic::x86_avx512_rsqrt14_pd_256, 116071}, // __builtin_ia32_rsqrt14pd256_mask
-      {Intrinsic::x86_avx512_rsqrt14_pd_512, 116104}, // __builtin_ia32_rsqrt14pd512_mask
-      {Intrinsic::x86_avx512_rsqrt14_ps_128, 116137}, // __builtin_ia32_rsqrt14ps128_mask
-      {Intrinsic::x86_avx512_rsqrt14_ps_256, 116170}, // __builtin_ia32_rsqrt14ps256_mask
-      {Intrinsic::x86_avx512_rsqrt14_ps_512, 116203}, // __builtin_ia32_rsqrt14ps512_mask
-      {Intrinsic::x86_avx512_rsqrt14_sd, 116236}, // __builtin_ia32_rsqrt14sd_mask
-      {Intrinsic::x86_avx512_rsqrt14_ss, 116266}, // __builtin_ia32_rsqrt14ss_mask
-      {Intrinsic::x86_avx512_rsqrt28_pd, 116296}, // __builtin_ia32_rsqrt28pd_mask
-      {Intrinsic::x86_avx512_rsqrt28_ps, 116326}, // __builtin_ia32_rsqrt28ps_mask
-      {Intrinsic::x86_avx512_rsqrt28_sd, 116356}, // __builtin_ia32_rsqrt28sd_round_mask
-      {Intrinsic::x86_avx512_rsqrt28_ss, 116392}, // __builtin_ia32_rsqrt28ss_round_mask
-      {Intrinsic::x86_sse_rsqrt_ps, 121620}, // __builtin_ia32_rsqrtps
-      {Intrinsic::x86_avx_rsqrt_ps_256, 102343}, // __builtin_ia32_rsqrtps256
-      {Intrinsic::x86_sse_rsqrt_ss, 121643}, // __builtin_ia32_rsqrtss
-      {Intrinsic::x86_rstorssp, 120772}, // __builtin_ia32_rstorssp
-      {Intrinsic::x86_saveprevssp, 120796}, // __builtin_ia32_saveprevssp
-      {Intrinsic::x86_avx512_mask_scalef_pd_128, 112885}, // __builtin_ia32_scalefpd128_mask
-      {Intrinsic::x86_avx512_mask_scalef_pd_256, 112917}, // __builtin_ia32_scalefpd256_mask
-      {Intrinsic::x86_avx512_mask_scalef_pd_512, 112949}, // __builtin_ia32_scalefpd512_mask
-      {Intrinsic::x86_avx512_mask_scalef_ps_128, 112981}, // __builtin_ia32_scalefps128_mask
-      {Intrinsic::x86_avx512_mask_scalef_ps_256, 113013}, // __builtin_ia32_scalefps256_mask
-      {Intrinsic::x86_avx512_mask_scalef_ps_512, 113045}, // __builtin_ia32_scalefps512_mask
-      {Intrinsic::x86_avx512_mask_scalef_sd, 113077}, // __builtin_ia32_scalefsd_round_mask
-      {Intrinsic::x86_avx512_mask_scalef_ss, 113112}, // __builtin_ia32_scalefss_round_mask
-      {Intrinsic::x86_avx512_scatterpf_dpd_512, 116428}, // __builtin_ia32_scatterpfdpd
-      {Intrinsic::x86_avx512_scatterpf_dps_512, 116456}, // __builtin_ia32_scatterpfdps
-      {Intrinsic::x86_avx512_scatterpf_qpd_512, 116484}, // __builtin_ia32_scatterpfqpd
-      {Intrinsic::x86_avx512_scatterpf_qps_512, 116512}, // __builtin_ia32_scatterpfqps
-      {Intrinsic::x86_setssbsy, 120823}, // __builtin_ia32_setssbsy
-      {Intrinsic::x86_sse_sfence, 121666}, // __builtin_ia32_sfence
-      {Intrinsic::x86_sha1msg1, 120847}, // __builtin_ia32_sha1msg1
-      {Intrinsic::x86_sha1msg2, 120871}, // __builtin_ia32_sha1msg2
-      {Intrinsic::x86_sha1nexte, 120895}, // __builtin_ia32_sha1nexte
-      {Intrinsic::x86_sha1rnds4, 120920}, // __builtin_ia32_sha1rnds4
-      {Intrinsic::x86_sha256msg1, 120945}, // __builtin_ia32_sha256msg1
-      {Intrinsic::x86_sha256msg2, 120971}, // __builtin_ia32_sha256msg2
-      {Intrinsic::x86_sha256rnds2, 120997}, // __builtin_ia32_sha256rnds2
-      {Intrinsic::x86_slwpcb, 121024}, // __builtin_ia32_slwpcb
-      {Intrinsic::x86_avx512_sub_pd_512, 116540}, // __builtin_ia32_subpd512
-      {Intrinsic::x86_avx512_sub_ps_512, 116564}, // __builtin_ia32_subps512
-      {Intrinsic::x86_avx512_mask_sub_sd_round, 113147}, // __builtin_ia32_subsd_round_mask
-      {Intrinsic::x86_avx512_mask_sub_ss_round, 113179}, // __builtin_ia32_subss_round_mask
-      {Intrinsic::x86_tpause, 125087}, // __builtin_ia32_tpause
-      {Intrinsic::x86_sse_ucomieq_ss, 121688}, // __builtin_ia32_ucomieq
-      {Intrinsic::x86_sse_ucomige_ss, 121711}, // __builtin_ia32_ucomige
-      {Intrinsic::x86_sse_ucomigt_ss, 121734}, // __builtin_ia32_ucomigt
-      {Intrinsic::x86_sse_ucomile_ss, 121757}, // __builtin_ia32_ucomile
-      {Intrinsic::x86_sse_ucomilt_ss, 121780}, // __builtin_ia32_ucomilt
-      {Intrinsic::x86_sse_ucomineq_ss, 121803}, // __builtin_ia32_ucomineq
-      {Intrinsic::x86_sse2_ucomieq_sd, 123065}, // __builtin_ia32_ucomisdeq
-      {Intrinsic::x86_sse2_ucomige_sd, 123090}, // __builtin_ia32_ucomisdge
-      {Intrinsic::x86_sse2_ucomigt_sd, 123115}, // __builtin_ia32_ucomisdgt
-      {Intrinsic::x86_sse2_ucomile_sd, 123140}, // __builtin_ia32_ucomisdle
-      {Intrinsic::x86_sse2_ucomilt_sd, 123165}, // __builtin_ia32_ucomisdlt
-      {Intrinsic::x86_sse2_ucomineq_sd, 123190}, // __builtin_ia32_ucomisdneq
-      {Intrinsic::x86_umonitor, 125109}, // __builtin_ia32_umonitor
-      {Intrinsic::x86_umwait, 125133}, // __builtin_ia32_umwait
-      {Intrinsic::x86_avx512_vcomi_sd, 116588}, // __builtin_ia32_vcomisd
-      {Intrinsic::x86_avx512_vcomi_ss, 116611}, // __builtin_ia32_vcomiss
-      {Intrinsic::x86_vcvtph2ps_128, 125155}, // __builtin_ia32_vcvtph2ps
-      {Intrinsic::x86_vcvtph2ps_256, 125180}, // __builtin_ia32_vcvtph2ps256
-      {Intrinsic::x86_avx512_mask_vcvtph2ps_256, 113241}, // __builtin_ia32_vcvtph2ps256_mask
-      {Intrinsic::x86_avx512_mask_vcvtph2ps_512, 113274}, // __builtin_ia32_vcvtph2ps512_mask
-      {Intrinsic::x86_avx512_mask_vcvtph2ps_128, 113211}, // __builtin_ia32_vcvtph2ps_mask
-      {Intrinsic::x86_vcvtps2ph_128, 125208}, // __builtin_ia32_vcvtps2ph
-      {Intrinsic::x86_vcvtps2ph_256, 125233}, // __builtin_ia32_vcvtps2ph256
-      {Intrinsic::x86_avx512_mask_vcvtps2ph_256, 113337}, // __builtin_ia32_vcvtps2ph256_mask
-      {Intrinsic::x86_avx512_mask_vcvtps2ph_512, 113370}, // __builtin_ia32_vcvtps2ph512_mask
-      {Intrinsic::x86_avx512_mask_vcvtps2ph_128, 113307}, // __builtin_ia32_vcvtps2ph_mask
-      {Intrinsic::x86_avx512_vcvtsd2si32, 116634}, // __builtin_ia32_vcvtsd2si32
-      {Intrinsic::x86_avx512_vcvtsd2si64, 116661}, // __builtin_ia32_vcvtsd2si64
-      {Intrinsic::x86_avx512_vcvtsd2usi32, 116688}, // __builtin_ia32_vcvtsd2usi32
-      {Intrinsic::x86_avx512_vcvtsd2usi64, 116716}, // __builtin_ia32_vcvtsd2usi64
-      {Intrinsic::x86_avx512_vcvtss2si32, 116744}, // __builtin_ia32_vcvtss2si32
-      {Intrinsic::x86_avx512_vcvtss2si64, 116771}, // __builtin_ia32_vcvtss2si64
-      {Intrinsic::x86_avx512_vcvtss2usi32, 116798}, // __builtin_ia32_vcvtss2usi32
-      {Intrinsic::x86_avx512_vcvtss2usi64, 116826}, // __builtin_ia32_vcvtss2usi64
-      {Intrinsic::x86_avx512_cvttsd2si, 105282}, // __builtin_ia32_vcvttsd2si32
-      {Intrinsic::x86_avx512_cvttsd2si64, 105310}, // __builtin_ia32_vcvttsd2si64
-      {Intrinsic::x86_avx512_cvttsd2usi, 105338}, // __builtin_ia32_vcvttsd2usi32
-      {Intrinsic::x86_avx512_cvttsd2usi64, 105367}, // __builtin_ia32_vcvttsd2usi64
-      {Intrinsic::x86_avx512_cvttss2si, 105396}, // __builtin_ia32_vcvttss2si32
-      {Intrinsic::x86_avx512_cvttss2si64, 105424}, // __builtin_ia32_vcvttss2si64
-      {Intrinsic::x86_avx512_cvttss2usi, 105452}, // __builtin_ia32_vcvttss2usi32
-      {Intrinsic::x86_avx512_cvttss2usi64, 105481}, // __builtin_ia32_vcvttss2usi64
-      {Intrinsic::x86_mmx_pextr_w, 119324}, // __builtin_ia32_vec_ext_v4hi
-      {Intrinsic::x86_mmx_pinsr_w, 119352}, // __builtin_ia32_vec_set_v4hi
-      {Intrinsic::x86_xop_vfrcz_pd, 125904}, // __builtin_ia32_vfrczpd
-      {Intrinsic::x86_xop_vfrcz_pd_256, 125927}, // __builtin_ia32_vfrczpd256
-      {Intrinsic::x86_xop_vfrcz_ps, 125953}, // __builtin_ia32_vfrczps
-      {Intrinsic::x86_xop_vfrcz_ps_256, 125976}, // __builtin_ia32_vfrczps256
-      {Intrinsic::x86_xop_vfrcz_sd, 126002}, // __builtin_ia32_vfrczsd
-      {Intrinsic::x86_xop_vfrcz_ss, 126025}, // __builtin_ia32_vfrczss
-      {Intrinsic::x86_vgf2p8affineinvqb_128, 125261}, // __builtin_ia32_vgf2p8affineinvqb_v16qi
-      {Intrinsic::x86_vgf2p8affineinvqb_256, 125300}, // __builtin_ia32_vgf2p8affineinvqb_v32qi
-      {Intrinsic::x86_vgf2p8affineinvqb_512, 125339}, // __builtin_ia32_vgf2p8affineinvqb_v64qi
-      {Intrinsic::x86_vgf2p8affineqb_128, 125378}, // __builtin_ia32_vgf2p8affineqb_v16qi
-      {Intrinsic::x86_vgf2p8affineqb_256, 125414}, // __builtin_ia32_vgf2p8affineqb_v32qi
-      {Intrinsic::x86_vgf2p8affineqb_512, 125450}, // __builtin_ia32_vgf2p8affineqb_v64qi
-      {Intrinsic::x86_vgf2p8mulb_128, 125486}, // __builtin_ia32_vgf2p8mulb_v16qi
-      {Intrinsic::x86_vgf2p8mulb_256, 125518}, // __builtin_ia32_vgf2p8mulb_v32qi
-      {Intrinsic::x86_vgf2p8mulb_512, 125550}, // __builtin_ia32_vgf2p8mulb_v64qi
-      {Intrinsic::x86_avx512_conflict_q_128, 105108}, // __builtin_ia32_vpconflictdi_128
-      {Intrinsic::x86_avx512_conflict_q_256, 105140}, // __builtin_ia32_vpconflictdi_256
-      {Intrinsic::x86_avx512_conflict_q_512, 105172}, // __builtin_ia32_vpconflictdi_512
-      {Intrinsic::x86_avx512_conflict_d_128, 105012}, // __builtin_ia32_vpconflictsi_128
-      {Intrinsic::x86_avx512_conflict_d_256, 105044}, // __builtin_ia32_vpconflictsi_256
-      {Intrinsic::x86_avx512_conflict_d_512, 105076}, // __builtin_ia32_vpconflictsi_512
-      {Intrinsic::x86_avx512_vpdpbusd_128, 116854}, // __builtin_ia32_vpdpbusd128
-      {Intrinsic::x86_avx512_vpdpbusd_256, 116881}, // __builtin_ia32_vpdpbusd256
-      {Intrinsic::x86_avx512_vpdpbusd_512, 116908}, // __builtin_ia32_vpdpbusd512
-      {Intrinsic::x86_avx512_vpdpbusds_128, 116935}, // __builtin_ia32_vpdpbusds128
-      {Intrinsic::x86_avx512_vpdpbusds_256, 116963}, // __builtin_ia32_vpdpbusds256
-      {Intrinsic::x86_avx512_vpdpbusds_512, 116991}, // __builtin_ia32_vpdpbusds512
-      {Intrinsic::x86_avx512_vpdpwssd_128, 117019}, // __builtin_ia32_vpdpwssd128
-      {Intrinsic::x86_avx512_vpdpwssd_256, 117046}, // __builtin_ia32_vpdpwssd256
-      {Intrinsic::x86_avx512_vpdpwssd_512, 117073}, // __builtin_ia32_vpdpwssd512
-      {Intrinsic::x86_avx512_vpdpwssds_128, 117100}, // __builtin_ia32_vpdpwssds128
-      {Intrinsic::x86_avx512_vpdpwssds_256, 117128}, // __builtin_ia32_vpdpwssds256
-      {Intrinsic::x86_avx512_vpdpwssds_512, 117156}, // __builtin_ia32_vpdpwssds512
-      {Intrinsic::x86_avx512_vpermi2var_d_128, 117184}, // __builtin_ia32_vpermi2vard128
-      {Intrinsic::x86_avx512_vpermi2var_d_256, 117214}, // __builtin_ia32_vpermi2vard256
-      {Intrinsic::x86_avx512_vpermi2var_d_512, 117244}, // __builtin_ia32_vpermi2vard512
-      {Intrinsic::x86_avx512_vpermi2var_hi_128, 117274}, // __builtin_ia32_vpermi2varhi128
-      {Intrinsic::x86_avx512_vpermi2var_hi_256, 117305}, // __builtin_ia32_vpermi2varhi256
-      {Intrinsic::x86_avx512_vpermi2var_hi_512, 117336}, // __builtin_ia32_vpermi2varhi512
-      {Intrinsic::x86_avx512_vpermi2var_pd_128, 117367}, // __builtin_ia32_vpermi2varpd128
-      {Intrinsic::x86_avx512_vpermi2var_pd_256, 117398}, // __builtin_ia32_vpermi2varpd256
-      {Intrinsic::x86_avx512_vpermi2var_pd_512, 117429}, // __builtin_ia32_vpermi2varpd512
-      {Intrinsic::x86_avx512_vpermi2var_ps_128, 117460}, // __builtin_ia32_vpermi2varps128
-      {Intrinsic::x86_avx512_vpermi2var_ps_256, 117491}, // __builtin_ia32_vpermi2varps256
-      {Intrinsic::x86_avx512_vpermi2var_ps_512, 117522}, // __builtin_ia32_vpermi2varps512
-      {Intrinsic::x86_avx512_vpermi2var_q_128, 117553}, // __builtin_ia32_vpermi2varq128
-      {Intrinsic::x86_avx512_vpermi2var_q_256, 117583}, // __builtin_ia32_vpermi2varq256
-      {Intrinsic::x86_avx512_vpermi2var_q_512, 117613}, // __builtin_ia32_vpermi2varq512
-      {Intrinsic::x86_avx512_vpermi2var_qi_128, 117643}, // __builtin_ia32_vpermi2varqi128
-      {Intrinsic::x86_avx512_vpermi2var_qi_256, 117674}, // __builtin_ia32_vpermi2varqi256
-      {Intrinsic::x86_avx512_vpermi2var_qi_512, 117705}, // __builtin_ia32_vpermi2varqi512
-      {Intrinsic::x86_xop_vpermil2pd, 126048}, // __builtin_ia32_vpermil2pd
-      {Intrinsic::x86_xop_vpermil2pd_256, 126074}, // __builtin_ia32_vpermil2pd256
-      {Intrinsic::x86_xop_vpermil2ps, 126103}, // __builtin_ia32_vpermil2ps
-      {Intrinsic::x86_xop_vpermil2ps_256, 126129}, // __builtin_ia32_vpermil2ps256
-      {Intrinsic::x86_avx_vpermilvar_pd, 102369}, // __builtin_ia32_vpermilvarpd
-      {Intrinsic::x86_avx_vpermilvar_pd_256, 102397}, // __builtin_ia32_vpermilvarpd256
-      {Intrinsic::x86_avx512_vpermilvar_pd_512, 117736}, // __builtin_ia32_vpermilvarpd512
-      {Intrinsic::x86_avx_vpermilvar_ps, 102428}, // __builtin_ia32_vpermilvarps
-      {Intrinsic::x86_avx_vpermilvar_ps_256, 102456}, // __builtin_ia32_vpermilvarps256
-      {Intrinsic::x86_avx512_vpermilvar_ps_512, 117767}, // __builtin_ia32_vpermilvarps512
-      {Intrinsic::x86_xop_vphaddbd, 126158}, // __builtin_ia32_vphaddbd
-      {Intrinsic::x86_xop_vphaddbq, 126182}, // __builtin_ia32_vphaddbq
-      {Intrinsic::x86_xop_vphaddbw, 126206}, // __builtin_ia32_vphaddbw
-      {Intrinsic::x86_xop_vphadddq, 126230}, // __builtin_ia32_vphadddq
-      {Intrinsic::x86_xop_vphaddubd, 126254}, // __builtin_ia32_vphaddubd
-      {Intrinsic::x86_xop_vphaddubq, 126279}, // __builtin_ia32_vphaddubq
-      {Intrinsic::x86_xop_vphaddubw, 126304}, // __builtin_ia32_vphaddubw
-      {Intrinsic::x86_xop_vphaddudq, 126329}, // __builtin_ia32_vphaddudq
-      {Intrinsic::x86_xop_vphadduwd, 126354}, // __builtin_ia32_vphadduwd
-      {Intrinsic::x86_xop_vphadduwq, 126379}, // __builtin_ia32_vphadduwq
-      {Intrinsic::x86_xop_vphaddwd, 126404}, // __builtin_ia32_vphaddwd
-      {Intrinsic::x86_xop_vphaddwq, 126428}, // __builtin_ia32_vphaddwq
-      {Intrinsic::x86_xop_vphsubbw, 126452}, // __builtin_ia32_vphsubbw
-      {Intrinsic::x86_xop_vphsubdq, 126476}, // __builtin_ia32_vphsubdq
-      {Intrinsic::x86_xop_vphsubwd, 126500}, // __builtin_ia32_vphsubwd
-      {Intrinsic::x86_xop_vpmacsdd, 126524}, // __builtin_ia32_vpmacsdd
-      {Intrinsic::x86_xop_vpmacsdqh, 126548}, // __builtin_ia32_vpmacsdqh
-      {Intrinsic::x86_xop_vpmacsdql, 126573}, // __builtin_ia32_vpmacsdql
-      {Intrinsic::x86_xop_vpmacssdd, 126598}, // __builtin_ia32_vpmacssdd
-      {Intrinsic::x86_xop_vpmacssdqh, 126623}, // __builtin_ia32_vpmacssdqh
-      {Intrinsic::x86_xop_vpmacssdql, 126649}, // __builtin_ia32_vpmacssdql
-      {Intrinsic::x86_xop_vpmacsswd, 126675}, // __builtin_ia32_vpmacsswd
-      {Intrinsic::x86_xop_vpmacssww, 126700}, // __builtin_ia32_vpmacssww
-      {Intrinsic::x86_xop_vpmacswd, 126725}, // __builtin_ia32_vpmacswd
-      {Intrinsic::x86_xop_vpmacsww, 126749}, // __builtin_ia32_vpmacsww
-      {Intrinsic::x86_xop_vpmadcsswd, 126773}, // __builtin_ia32_vpmadcsswd
-      {Intrinsic::x86_xop_vpmadcswd, 126799}, // __builtin_ia32_vpmadcswd
-      {Intrinsic::x86_avx512_vpmadd52h_uq_128, 117798}, // __builtin_ia32_vpmadd52huq128
-      {Intrinsic::x86_avx512_vpmadd52h_uq_256, 117828}, // __builtin_ia32_vpmadd52huq256
-      {Intrinsic::x86_avx512_vpmadd52h_uq_512, 117858}, // __builtin_ia32_vpmadd52huq512
-      {Intrinsic::x86_avx512_vpmadd52l_uq_128, 117888}, // __builtin_ia32_vpmadd52luq128
-      {Intrinsic::x86_avx512_vpmadd52l_uq_256, 117918}, // __builtin_ia32_vpmadd52luq256
-      {Intrinsic::x86_avx512_vpmadd52l_uq_512, 117948}, // __builtin_ia32_vpmadd52luq512
-      {Intrinsic::x86_avx512_pmultishift_qb_128, 114397}, // __builtin_ia32_vpmultishiftqb128
-      {Intrinsic::x86_avx512_pmultishift_qb_256, 114430}, // __builtin_ia32_vpmultishiftqb256
-      {Intrinsic::x86_avx512_pmultishift_qb_512, 114463}, // __builtin_ia32_vpmultishiftqb512
-      {Intrinsic::x86_xop_vpperm, 126824}, // __builtin_ia32_vpperm
-      {Intrinsic::x86_xop_vpshab, 126846}, // __builtin_ia32_vpshab
-      {Intrinsic::x86_xop_vpshad, 126868}, // __builtin_ia32_vpshad
-      {Intrinsic::x86_xop_vpshaq, 126890}, // __builtin_ia32_vpshaq
-      {Intrinsic::x86_xop_vpshaw, 126912}, // __builtin_ia32_vpshaw
-      {Intrinsic::x86_xop_vpshlb, 126934}, // __builtin_ia32_vpshlb
-      {Intrinsic::x86_xop_vpshld, 126956}, // __builtin_ia32_vpshld
-      {Intrinsic::x86_xop_vpshlq, 126978}, // __builtin_ia32_vpshlq
-      {Intrinsic::x86_xop_vpshlw, 127000}, // __builtin_ia32_vpshlw
-      {Intrinsic::x86_avx_vtestc_pd, 102487}, // __builtin_ia32_vtestcpd
-      {Intrinsic::x86_avx_vtestc_pd_256, 102511}, // __builtin_ia32_vtestcpd256
-      {Intrinsic::x86_avx_vtestc_ps, 102538}, // __builtin_ia32_vtestcps
-      {Intrinsic::x86_avx_vtestc_ps_256, 102562}, // __builtin_ia32_vtestcps256
-      {Intrinsic::x86_avx_vtestnzc_pd, 102589}, // __builtin_ia32_vtestnzcpd
-      {Intrinsic::x86_avx_vtestnzc_pd_256, 102615}, // __builtin_ia32_vtestnzcpd256
-      {Intrinsic::x86_avx_vtestnzc_ps, 102644}, // __builtin_ia32_vtestnzcps
-      {Intrinsic::x86_avx_vtestnzc_ps_256, 102670}, // __builtin_ia32_vtestnzcps256
-      {Intrinsic::x86_avx_vtestz_pd, 102699}, // __builtin_ia32_vtestzpd
-      {Intrinsic::x86_avx_vtestz_pd_256, 102723}, // __builtin_ia32_vtestzpd256
-      {Intrinsic::x86_avx_vtestz_ps, 102750}, // __builtin_ia32_vtestzps
-      {Intrinsic::x86_avx_vtestz_ps_256, 102774}, // __builtin_ia32_vtestzps256
-      {Intrinsic::x86_avx_vzeroall, 102801}, // __builtin_ia32_vzeroall
-      {Intrinsic::x86_avx_vzeroupper, 102825}, // __builtin_ia32_vzeroupper
-      {Intrinsic::x86_wbinvd, 125582}, // __builtin_ia32_wbinvd
-      {Intrinsic::x86_wbnoinvd, 125604}, // __builtin_ia32_wbnoinvd
-      {Intrinsic::x86_wrfsbase_32, 125628}, // __builtin_ia32_wrfsbase32
-      {Intrinsic::x86_wrfsbase_64, 125654}, // __builtin_ia32_wrfsbase64
-      {Intrinsic::x86_wrgsbase_32, 125680}, // __builtin_ia32_wrgsbase32
-      {Intrinsic::x86_wrgsbase_64, 125706}, // __builtin_ia32_wrgsbase64
-      {Intrinsic::x86_flags_write_u32, 118404}, // __builtin_ia32_writeeflags_u32
-      {Intrinsic::x86_flags_write_u64, 118435}, // __builtin_ia32_writeeflags_u64
-      {Intrinsic::x86_wrpkru, 125732}, // __builtin_ia32_wrpkru
-      {Intrinsic::x86_wrssd, 125754}, // __builtin_ia32_wrssd
-      {Intrinsic::x86_wrssq, 125775}, // __builtin_ia32_wrssq
-      {Intrinsic::x86_wrussd, 125796}, // __builtin_ia32_wrussd
-      {Intrinsic::x86_wrussq, 125818}, // __builtin_ia32_wrussq
-      {Intrinsic::x86_xabort, 125840}, // __builtin_ia32_xabort
-      {Intrinsic::x86_xbegin, 125862}, // __builtin_ia32_xbegin
-      {Intrinsic::x86_xend, 125884}, // __builtin_ia32_xend
-      {Intrinsic::x86_xtest, 127022}, // __builtin_ia32_xtest
+      {Intrinsic::x86_avx512_add_pd_512, 105226}, // __builtin_ia32_addpd512
+      {Intrinsic::x86_avx512_add_ps_512, 105250}, // __builtin_ia32_addps512
+      {Intrinsic::x86_avx512_mask_add_sd_round, 106324}, // __builtin_ia32_addsd_round_mask
+      {Intrinsic::x86_avx512_mask_add_ss_round, 106356}, // __builtin_ia32_addss_round_mask
+      {Intrinsic::x86_sse3_addsub_pd, 124046}, // __builtin_ia32_addsubpd
+      {Intrinsic::x86_avx_addsub_pd_256, 101818}, // __builtin_ia32_addsubpd256
+      {Intrinsic::x86_sse3_addsub_ps, 124070}, // __builtin_ia32_addsubps
+      {Intrinsic::x86_avx_addsub_ps_256, 101845}, // __builtin_ia32_addsubps256
+      {Intrinsic::x86_aesni_aesdec, 101435}, // __builtin_ia32_aesdec128
+      {Intrinsic::x86_aesni_aesdec_256, 101460}, // __builtin_ia32_aesdec256
+      {Intrinsic::x86_aesni_aesdec_512, 101485}, // __builtin_ia32_aesdec512
+      {Intrinsic::x86_aesni_aesdeclast, 101510}, // __builtin_ia32_aesdeclast128
+      {Intrinsic::x86_aesni_aesdeclast_256, 101539}, // __builtin_ia32_aesdeclast256
+      {Intrinsic::x86_aesni_aesdeclast_512, 101568}, // __builtin_ia32_aesdeclast512
+      {Intrinsic::x86_aesni_aesenc, 101597}, // __builtin_ia32_aesenc128
+      {Intrinsic::x86_aesni_aesenc_256, 101622}, // __builtin_ia32_aesenc256
+      {Intrinsic::x86_aesni_aesenc_512, 101647}, // __builtin_ia32_aesenc512
+      {Intrinsic::x86_aesni_aesenclast, 101672}, // __builtin_ia32_aesenclast128
+      {Intrinsic::x86_aesni_aesenclast_256, 101701}, // __builtin_ia32_aesenclast256
+      {Intrinsic::x86_aesni_aesenclast_512, 101730}, // __builtin_ia32_aesenclast512
+      {Intrinsic::x86_aesni_aesimc, 101759}, // __builtin_ia32_aesimc128
+      {Intrinsic::x86_aesni_aeskeygenassist, 101784}, // __builtin_ia32_aeskeygenassist128
+      {Intrinsic::x86_bmi_bextr_32, 118715}, // __builtin_ia32_bextr_u32
+      {Intrinsic::x86_bmi_bextr_64, 118740}, // __builtin_ia32_bextr_u64
+      {Intrinsic::x86_tbm_bextri_u32, 125865}, // __builtin_ia32_bextri_u32
+      {Intrinsic::x86_tbm_bextri_u64, 125891}, // __builtin_ia32_bextri_u64
+      {Intrinsic::x86_sse41_blendvpd, 124247}, // __builtin_ia32_blendvpd
+      {Intrinsic::x86_avx_blendv_pd_256, 101872}, // __builtin_ia32_blendvpd256
+      {Intrinsic::x86_sse41_blendvps, 124271}, // __builtin_ia32_blendvps
+      {Intrinsic::x86_avx_blendv_ps_256, 101899}, // __builtin_ia32_blendvps256
+      {Intrinsic::x86_avx512_broadcastmb_128, 105274}, // __builtin_ia32_broadcastmb128
+      {Intrinsic::x86_avx512_broadcastmb_256, 105304}, // __builtin_ia32_broadcastmb256
+      {Intrinsic::x86_avx512_broadcastmb_512, 105334}, // __builtin_ia32_broadcastmb512
+      {Intrinsic::x86_avx512_broadcastmw_128, 105364}, // __builtin_ia32_broadcastmw128
+      {Intrinsic::x86_avx512_broadcastmw_256, 105394}, // __builtin_ia32_broadcastmw256
+      {Intrinsic::x86_avx512_broadcastmw_512, 105424}, // __builtin_ia32_broadcastmw512
+      {Intrinsic::x86_bmi_bzhi_64, 118788}, // __builtin_ia32_bzhi_di
+      {Intrinsic::x86_bmi_bzhi_32, 118765}, // __builtin_ia32_bzhi_si
+      {Intrinsic::x86_cldemote, 118903}, // __builtin_ia32_cldemote
+      {Intrinsic::x86_sse2_clflush, 122609}, // __builtin_ia32_clflush
+      {Intrinsic::x86_clflushopt, 118927}, // __builtin_ia32_clflushopt
+      {Intrinsic::x86_clrssbsy, 118953}, // __builtin_ia32_clrssbsy
+      {Intrinsic::x86_clwb, 118977}, // __builtin_ia32_clwb
+      {Intrinsic::x86_clzero, 118997}, // __builtin_ia32_clzero
+      {Intrinsic::x86_sse2_cmp_sd, 122632}, // __builtin_ia32_cmpsd
+      {Intrinsic::x86_avx512_mask_cmp_sd, 106388}, // __builtin_ia32_cmpsd_mask
+      {Intrinsic::x86_sse_cmp_ss, 121828}, // __builtin_ia32_cmpss
+      {Intrinsic::x86_avx512_mask_cmp_ss, 106414}, // __builtin_ia32_cmpss_mask
+      {Intrinsic::x86_sse_comieq_ss, 121849}, // __builtin_ia32_comieq
+      {Intrinsic::x86_sse_comige_ss, 121871}, // __builtin_ia32_comige
+      {Intrinsic::x86_sse_comigt_ss, 121893}, // __builtin_ia32_comigt
+      {Intrinsic::x86_sse_comile_ss, 121915}, // __builtin_ia32_comile
+      {Intrinsic::x86_sse_comilt_ss, 121937}, // __builtin_ia32_comilt
+      {Intrinsic::x86_sse_comineq_ss, 121959}, // __builtin_ia32_comineq
+      {Intrinsic::x86_sse2_comieq_sd, 122653}, // __builtin_ia32_comisdeq
+      {Intrinsic::x86_sse2_comige_sd, 122677}, // __builtin_ia32_comisdge
+      {Intrinsic::x86_sse2_comigt_sd, 122701}, // __builtin_ia32_comisdgt
+      {Intrinsic::x86_sse2_comile_sd, 122725}, // __builtin_ia32_comisdle
+      {Intrinsic::x86_sse2_comilt_sd, 122749}, // __builtin_ia32_comisdlt
+      {Intrinsic::x86_sse2_comineq_sd, 122773}, // __builtin_ia32_comisdneq
+      {Intrinsic::x86_sse42_crc32_64_64, 124709}, // __builtin_ia32_crc32di
+      {Intrinsic::x86_sse42_crc32_32_16, 124640}, // __builtin_ia32_crc32hi
+      {Intrinsic::x86_sse42_crc32_32_8, 124686}, // __builtin_ia32_crc32qi
+      {Intrinsic::x86_sse42_crc32_32_32, 124663}, // __builtin_ia32_crc32si
+      {Intrinsic::x86_avx512bf16_cvtne2ps2bf16_128, 118468}, // __builtin_ia32_cvtne2ps2bf16_128
+      {Intrinsic::x86_avx512bf16_cvtne2ps2bf16_256, 118501}, // __builtin_ia32_cvtne2ps2bf16_256
+      {Intrinsic::x86_avx512bf16_cvtne2ps2bf16_512, 118534}, // __builtin_ia32_cvtne2ps2bf16_512
+      {Intrinsic::x86_avx512bf16_cvtneps2bf16_256, 118567}, // __builtin_ia32_cvtneps2bf16_256
+      {Intrinsic::x86_avx512bf16_cvtneps2bf16_512, 118599}, // __builtin_ia32_cvtneps2bf16_512
+      {Intrinsic::x86_sse2_cvtpd2dq, 122798}, // __builtin_ia32_cvtpd2dq
+      {Intrinsic::x86_avx512_mask_cvtpd2dq_128, 106440}, // __builtin_ia32_cvtpd2dq128_mask
+      {Intrinsic::x86_avx_cvt_pd2dq_256, 101953}, // __builtin_ia32_cvtpd2dq256
+      {Intrinsic::x86_avx512_mask_cvtpd2dq_512, 106472}, // __builtin_ia32_cvtpd2dq512_mask
+      {Intrinsic::x86_sse_cvtpd2pi, 121982}, // __builtin_ia32_cvtpd2pi
+      {Intrinsic::x86_sse2_cvtpd2ps, 122822}, // __builtin_ia32_cvtpd2ps
+      {Intrinsic::x86_avx_cvt_pd2_ps_256, 101926}, // __builtin_ia32_cvtpd2ps256
+      {Intrinsic::x86_avx512_mask_cvtpd2ps_512, 106533}, // __builtin_ia32_cvtpd2ps512_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2ps, 106504}, // __builtin_ia32_cvtpd2ps_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2qq_128, 106565}, // __builtin_ia32_cvtpd2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2qq_256, 106597}, // __builtin_ia32_cvtpd2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2qq_512, 106629}, // __builtin_ia32_cvtpd2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2udq_128, 106661}, // __builtin_ia32_cvtpd2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2udq_256, 106694}, // __builtin_ia32_cvtpd2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2udq_512, 106727}, // __builtin_ia32_cvtpd2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2uqq_128, 106760}, // __builtin_ia32_cvtpd2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2uqq_256, 106793}, // __builtin_ia32_cvtpd2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2uqq_512, 106826}, // __builtin_ia32_cvtpd2uqq512_mask
+      {Intrinsic::x86_sse_cvtpi2pd, 122006}, // __builtin_ia32_cvtpi2pd
+      {Intrinsic::x86_sse_cvtpi2ps, 122030}, // __builtin_ia32_cvtpi2ps
+      {Intrinsic::x86_sse2_cvtps2dq, 122846}, // __builtin_ia32_cvtps2dq
+      {Intrinsic::x86_avx512_mask_cvtps2dq_128, 106859}, // __builtin_ia32_cvtps2dq128_mask
+      {Intrinsic::x86_avx_cvt_ps2dq_256, 101980}, // __builtin_ia32_cvtps2dq256
+      {Intrinsic::x86_avx512_mask_cvtps2dq_256, 106891}, // __builtin_ia32_cvtps2dq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2dq_512, 106923}, // __builtin_ia32_cvtps2dq512_mask
+      {Intrinsic::x86_avx512_mask_cvtps2pd_512, 106955}, // __builtin_ia32_cvtps2pd512_mask
+      {Intrinsic::x86_sse_cvtps2pi, 122054}, // __builtin_ia32_cvtps2pi
+      {Intrinsic::x86_avx512_mask_cvtps2qq_128, 106987}, // __builtin_ia32_cvtps2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvtps2qq_256, 107019}, // __builtin_ia32_cvtps2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2qq_512, 107051}, // __builtin_ia32_cvtps2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvtps2udq_128, 107083}, // __builtin_ia32_cvtps2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvtps2udq_256, 107116}, // __builtin_ia32_cvtps2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2udq_512, 107149}, // __builtin_ia32_cvtps2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvtps2uqq_128, 107182}, // __builtin_ia32_cvtps2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvtps2uqq_256, 107215}, // __builtin_ia32_cvtps2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2uqq_512, 107248}, // __builtin_ia32_cvtps2uqq512_mask
+      {Intrinsic::x86_avx512_mask_cvtqq2ps_128, 107281}, // __builtin_ia32_cvtqq2ps128_mask
+      {Intrinsic::x86_sse2_cvtsd2si, 122870}, // __builtin_ia32_cvtsd2si
+      {Intrinsic::x86_sse2_cvtsd2si64, 122894}, // __builtin_ia32_cvtsd2si64
+      {Intrinsic::x86_sse2_cvtsd2ss, 122920}, // __builtin_ia32_cvtsd2ss
+      {Intrinsic::x86_avx512_mask_cvtsd2ss_round, 107313}, // __builtin_ia32_cvtsd2ss_round_mask
+      {Intrinsic::x86_avx512_cvtsi2sd64, 105646}, // __builtin_ia32_cvtsi2sd64
+      {Intrinsic::x86_avx512_cvtsi2ss32, 105672}, // __builtin_ia32_cvtsi2ss32
+      {Intrinsic::x86_avx512_cvtsi2ss64, 105698}, // __builtin_ia32_cvtsi2ss64
+      {Intrinsic::x86_avx512_mask_cvtss2sd_round, 107348}, // __builtin_ia32_cvtss2sd_round_mask
+      {Intrinsic::x86_sse_cvtss2si, 122078}, // __builtin_ia32_cvtss2si
+      {Intrinsic::x86_sse_cvtss2si64, 122102}, // __builtin_ia32_cvtss2si64
+      {Intrinsic::x86_sse2_cvttpd2dq, 122944}, // __builtin_ia32_cvttpd2dq
+      {Intrinsic::x86_avx512_mask_cvttpd2dq_128, 107383}, // __builtin_ia32_cvttpd2dq128_mask
+      {Intrinsic::x86_avx_cvtt_pd2dq_256, 102007}, // __builtin_ia32_cvttpd2dq256
+      {Intrinsic::x86_avx512_mask_cvttpd2dq_512, 107416}, // __builtin_ia32_cvttpd2dq512_mask
+      {Intrinsic::x86_sse_cvttpd2pi, 122128}, // __builtin_ia32_cvttpd2pi
+      {Intrinsic::x86_avx512_mask_cvttpd2qq_128, 107449}, // __builtin_ia32_cvttpd2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2qq_256, 107482}, // __builtin_ia32_cvttpd2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2qq_512, 107515}, // __builtin_ia32_cvttpd2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2udq_128, 107548}, // __builtin_ia32_cvttpd2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2udq_256, 107582}, // __builtin_ia32_cvttpd2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2udq_512, 107616}, // __builtin_ia32_cvttpd2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2uqq_128, 107650}, // __builtin_ia32_cvttpd2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2uqq_256, 107684}, // __builtin_ia32_cvttpd2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2uqq_512, 107718}, // __builtin_ia32_cvttpd2uqq512_mask
+      {Intrinsic::x86_sse2_cvttps2dq, 122969}, // __builtin_ia32_cvttps2dq
+      {Intrinsic::x86_avx_cvtt_ps2dq_256, 102035}, // __builtin_ia32_cvttps2dq256
+      {Intrinsic::x86_avx512_mask_cvttps2dq_512, 107752}, // __builtin_ia32_cvttps2dq512_mask
+      {Intrinsic::x86_sse_cvttps2pi, 122153}, // __builtin_ia32_cvttps2pi
+      {Intrinsic::x86_avx512_mask_cvttps2qq_128, 107785}, // __builtin_ia32_cvttps2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvttps2qq_256, 107818}, // __builtin_ia32_cvttps2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvttps2qq_512, 107851}, // __builtin_ia32_cvttps2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvttps2udq_128, 107884}, // __builtin_ia32_cvttps2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvttps2udq_256, 107918}, // __builtin_ia32_cvttps2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvttps2udq_512, 107952}, // __builtin_ia32_cvttps2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvttps2uqq_128, 107986}, // __builtin_ia32_cvttps2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvttps2uqq_256, 108020}, // __builtin_ia32_cvttps2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvttps2uqq_512, 108054}, // __builtin_ia32_cvttps2uqq512_mask
+      {Intrinsic::x86_sse2_cvttsd2si, 122994}, // __builtin_ia32_cvttsd2si
+      {Intrinsic::x86_sse2_cvttsd2si64, 123019}, // __builtin_ia32_cvttsd2si64
+      {Intrinsic::x86_sse_cvttss2si, 122178}, // __builtin_ia32_cvttss2si
+      {Intrinsic::x86_sse_cvttss2si64, 122203}, // __builtin_ia32_cvttss2si64
+      {Intrinsic::x86_avx512_mask_cvtuqq2ps_128, 108088}, // __builtin_ia32_cvtuqq2ps128_mask
+      {Intrinsic::x86_avx512_cvtusi642sd, 105979}, // __builtin_ia32_cvtusi2sd64
+      {Intrinsic::x86_avx512_cvtusi2ss, 105952}, // __builtin_ia32_cvtusi2ss32
+      {Intrinsic::x86_avx512_cvtusi642ss, 106006}, // __builtin_ia32_cvtusi2ss64
+      {Intrinsic::x86_avx512_dbpsadbw_128, 106033}, // __builtin_ia32_dbpsadbw128
+      {Intrinsic::x86_avx512_dbpsadbw_256, 106060}, // __builtin_ia32_dbpsadbw256
+      {Intrinsic::x86_avx512_dbpsadbw_512, 106087}, // __builtin_ia32_dbpsadbw512
+      {Intrinsic::x86_directstore32, 119019}, // __builtin_ia32_directstore_u32
+      {Intrinsic::x86_directstore64, 119050}, // __builtin_ia32_directstore_u64
+      {Intrinsic::x86_avx512_div_pd_512, 106114}, // __builtin_ia32_divpd512
+      {Intrinsic::x86_avx512_div_ps_512, 106138}, // __builtin_ia32_divps512
+      {Intrinsic::x86_avx512_mask_div_sd_round, 108121}, // __builtin_ia32_divsd_round_mask
+      {Intrinsic::x86_avx512_mask_div_ss_round, 108153}, // __builtin_ia32_divss_round_mask
+      {Intrinsic::x86_avx512bf16_dpbf16ps_128, 118631}, // __builtin_ia32_dpbf16ps_128
+      {Intrinsic::x86_avx512bf16_dpbf16ps_256, 118659}, // __builtin_ia32_dpbf16ps_256
+      {Intrinsic::x86_avx512bf16_dpbf16ps_512, 118687}, // __builtin_ia32_dpbf16ps_512
+      {Intrinsic::x86_sse41_dppd, 124295}, // __builtin_ia32_dppd
+      {Intrinsic::x86_sse41_dpps, 124315}, // __builtin_ia32_dpps
+      {Intrinsic::x86_avx_dp_ps_256, 102063}, // __builtin_ia32_dpps256
+      {Intrinsic::x86_mmx_emms, 119529}, // __builtin_ia32_emms
+      {Intrinsic::x86_enqcmd, 119081}, // __builtin_ia32_enqcmd
+      {Intrinsic::x86_enqcmds, 119103}, // __builtin_ia32_enqcmds
+      {Intrinsic::x86_avx512_exp2_pd, 106162}, // __builtin_ia32_exp2pd_mask
+      {Intrinsic::x86_avx512_exp2_ps, 106189}, // __builtin_ia32_exp2ps_mask
+      {Intrinsic::x86_sse4a_extrq, 125134}, // __builtin_ia32_extrq
+      {Intrinsic::x86_sse4a_extrqi, 125155}, // __builtin_ia32_extrqi
+      {Intrinsic::x86_mmx_femms, 119549}, // __builtin_ia32_femms
+      {Intrinsic::x86_avx512_mask_fixupimm_pd_128, 108185}, // __builtin_ia32_fixupimmpd128_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_pd_128, 113845}, // __builtin_ia32_fixupimmpd128_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_pd_256, 108219}, // __builtin_ia32_fixupimmpd256_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_pd_256, 113880}, // __builtin_ia32_fixupimmpd256_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_pd_512, 108253}, // __builtin_ia32_fixupimmpd512_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_pd_512, 113915}, // __builtin_ia32_fixupimmpd512_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ps_128, 108287}, // __builtin_ia32_fixupimmps128_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ps_128, 113950}, // __builtin_ia32_fixupimmps128_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ps_256, 108321}, // __builtin_ia32_fixupimmps256_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ps_256, 113985}, // __builtin_ia32_fixupimmps256_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ps_512, 108355}, // __builtin_ia32_fixupimmps512_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ps_512, 114020}, // __builtin_ia32_fixupimmps512_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_sd, 108389}, // __builtin_ia32_fixupimmsd_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_sd, 114055}, // __builtin_ia32_fixupimmsd_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ss, 108420}, // __builtin_ia32_fixupimmss_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ss, 114087}, // __builtin_ia32_fixupimmss_maskz
+      {Intrinsic::x86_avx512_mask_fpclass_sd, 108451}, // __builtin_ia32_fpclasssd_mask
+      {Intrinsic::x86_avx512_mask_fpclass_ss, 108481}, // __builtin_ia32_fpclassss_mask
+      {Intrinsic::x86_fxrstor, 119248}, // __builtin_ia32_fxrstor
+      {Intrinsic::x86_fxrstor64, 119271}, // __builtin_ia32_fxrstor64
+      {Intrinsic::x86_fxsave, 119296}, // __builtin_ia32_fxsave
+      {Intrinsic::x86_fxsave64, 119318}, // __builtin_ia32_fxsave64
+      {Intrinsic::x86_avx2_gather_d_d, 103245}, // __builtin_ia32_gatherd_d
+      {Intrinsic::x86_avx2_gather_d_d_256, 103270}, // __builtin_ia32_gatherd_d256
+      {Intrinsic::x86_avx2_gather_d_pd, 103298}, // __builtin_ia32_gatherd_pd
+      {Intrinsic::x86_avx2_gather_d_pd_256, 103324}, // __builtin_ia32_gatherd_pd256
+      {Intrinsic::x86_avx2_gather_d_ps, 103353}, // __builtin_ia32_gatherd_ps
+      {Intrinsic::x86_avx2_gather_d_ps_256, 103379}, // __builtin_ia32_gatherd_ps256
+      {Intrinsic::x86_avx2_gather_d_q, 103408}, // __builtin_ia32_gatherd_q
+      {Intrinsic::x86_avx2_gather_d_q_256, 103433}, // __builtin_ia32_gatherd_q256
+      {Intrinsic::x86_avx512_gatherpf_dpd_512, 106216}, // __builtin_ia32_gatherpfdpd
+      {Intrinsic::x86_avx512_gatherpf_dps_512, 106243}, // __builtin_ia32_gatherpfdps
+      {Intrinsic::x86_avx512_gatherpf_qpd_512, 106270}, // __builtin_ia32_gatherpfqpd
+      {Intrinsic::x86_avx512_gatherpf_qps_512, 106297}, // __builtin_ia32_gatherpfqps
+      {Intrinsic::x86_avx2_gather_q_d, 103461}, // __builtin_ia32_gatherq_d
+      {Intrinsic::x86_avx2_gather_q_d_256, 103486}, // __builtin_ia32_gatherq_d256
+      {Intrinsic::x86_avx2_gather_q_pd, 103514}, // __builtin_ia32_gatherq_pd
+      {Intrinsic::x86_avx2_gather_q_pd_256, 103540}, // __builtin_ia32_gatherq_pd256
+      {Intrinsic::x86_avx2_gather_q_ps, 103569}, // __builtin_ia32_gatherq_ps
+      {Intrinsic::x86_avx2_gather_q_ps_256, 103595}, // __builtin_ia32_gatherq_ps256
+      {Intrinsic::x86_avx2_gather_q_q, 103624}, // __builtin_ia32_gatherq_q
+      {Intrinsic::x86_avx2_gather_q_q_256, 103649}, // __builtin_ia32_gatherq_q256
+      {Intrinsic::x86_avx512_mask_getexp_pd_128, 108511}, // __builtin_ia32_getexppd128_mask
+      {Intrinsic::x86_avx512_mask_getexp_pd_256, 108543}, // __builtin_ia32_getexppd256_mask
+      {Intrinsic::x86_avx512_mask_getexp_pd_512, 108575}, // __builtin_ia32_getexppd512_mask
+      {Intrinsic::x86_avx512_mask_getexp_ps_128, 108607}, // __builtin_ia32_getexpps128_mask
+      {Intrinsic::x86_avx512_mask_getexp_ps_256, 108639}, // __builtin_ia32_getexpps256_mask
+      {Intrinsic::x86_avx512_mask_getexp_ps_512, 108671}, // __builtin_ia32_getexpps512_mask
+      {Intrinsic::x86_avx512_mask_getexp_sd, 108703}, // __builtin_ia32_getexpsd128_round_mask
+      {Intrinsic::x86_avx512_mask_getexp_ss, 108741}, // __builtin_ia32_getexpss128_round_mask
+      {Intrinsic::x86_avx512_mask_getmant_pd_128, 108779}, // __builtin_ia32_getmantpd128_mask
+      {Intrinsic::x86_avx512_mask_getmant_pd_256, 108812}, // __builtin_ia32_getmantpd256_mask
+      {Intrinsic::x86_avx512_mask_getmant_pd_512, 108845}, // __builtin_ia32_getmantpd512_mask
+      {Intrinsic::x86_avx512_mask_getmant_ps_128, 108878}, // __builtin_ia32_getmantps128_mask
+      {Intrinsic::x86_avx512_mask_getmant_ps_256, 108911}, // __builtin_ia32_getmantps256_mask
+      {Intrinsic::x86_avx512_mask_getmant_ps_512, 108944}, // __builtin_ia32_getmantps512_mask
+      {Intrinsic::x86_avx512_mask_getmant_sd, 108977}, // __builtin_ia32_getmantsd_round_mask
+      {Intrinsic::x86_avx512_mask_getmant_ss, 109013}, // __builtin_ia32_getmantss_round_mask
+      {Intrinsic::x86_sse3_hadd_pd, 124094}, // __builtin_ia32_haddpd
+      {Intrinsic::x86_avx_hadd_pd_256, 102086}, // __builtin_ia32_haddpd256
+      {Intrinsic::x86_sse3_hadd_ps, 124116}, // __builtin_ia32_haddps
+      {Intrinsic::x86_avx_hadd_ps_256, 102111}, // __builtin_ia32_haddps256
+      {Intrinsic::x86_sse3_hsub_pd, 124138}, // __builtin_ia32_hsubpd
+      {Intrinsic::x86_avx_hsub_pd_256, 102136}, // __builtin_ia32_hsubpd256
+      {Intrinsic::x86_sse3_hsub_ps, 124160}, // __builtin_ia32_hsubps
+      {Intrinsic::x86_avx_hsub_ps_256, 102161}, // __builtin_ia32_hsubps256
+      {Intrinsic::x86_incsspd, 119342}, // __builtin_ia32_incsspd
+      {Intrinsic::x86_incsspq, 119365}, // __builtin_ia32_incsspq
+      {Intrinsic::x86_sse41_insertps, 124335}, // __builtin_ia32_insertps128
+      {Intrinsic::x86_sse4a_insertq, 125177}, // __builtin_ia32_insertq
+      {Intrinsic::x86_sse4a_insertqi, 125200}, // __builtin_ia32_insertqi
+      {Intrinsic::x86_invpcid, 119388}, // __builtin_ia32_invpcid
+      {Intrinsic::x86_sse3_ldu_dq, 124182}, // __builtin_ia32_lddqu
+      {Intrinsic::x86_avx_ldu_dq_256, 102186}, // __builtin_ia32_lddqu256
+      {Intrinsic::x86_sse2_lfence, 123046}, // __builtin_ia32_lfence
+      {Intrinsic::x86_llwpcb, 119411}, // __builtin_ia32_llwpcb
+      {Intrinsic::x86_lwpins32, 119433}, // __builtin_ia32_lwpins32
+      {Intrinsic::x86_lwpins64, 119457}, // __builtin_ia32_lwpins64
+      {Intrinsic::x86_lwpval32, 119481}, // __builtin_ia32_lwpval32
+      {Intrinsic::x86_lwpval64, 119505}, // __builtin_ia32_lwpval64
+      {Intrinsic::x86_avx2_maskload_d, 103677}, // __builtin_ia32_maskloadd
+      {Intrinsic::x86_avx2_maskload_d_256, 103702}, // __builtin_ia32_maskloadd256
+      {Intrinsic::x86_avx_maskload_pd, 102210}, // __builtin_ia32_maskloadpd
+      {Intrinsic::x86_avx_maskload_pd_256, 102236}, // __builtin_ia32_maskloadpd256
+      {Intrinsic::x86_avx_maskload_ps, 102265}, // __builtin_ia32_maskloadps
+      {Intrinsic::x86_avx_maskload_ps_256, 102291}, // __builtin_ia32_maskloadps256
+      {Intrinsic::x86_avx2_maskload_q, 103730}, // __builtin_ia32_maskloadq
+      {Intrinsic::x86_avx2_maskload_q_256, 103755}, // __builtin_ia32_maskloadq256
+      {Intrinsic::x86_sse2_maskmov_dqu, 123068}, // __builtin_ia32_maskmovdqu
+      {Intrinsic::x86_mmx_maskmovq, 119570}, // __builtin_ia32_maskmovq
+      {Intrinsic::x86_avx2_maskstore_d, 103783}, // __builtin_ia32_maskstored
+      {Intrinsic::x86_avx2_maskstore_d_256, 103809}, // __builtin_ia32_maskstored256
+      {Intrinsic::x86_avx_maskstore_pd, 102320}, // __builtin_ia32_maskstorepd
+      {Intrinsic::x86_avx_maskstore_pd_256, 102347}, // __builtin_ia32_maskstorepd256
+      {Intrinsic::x86_avx_maskstore_ps, 102377}, // __builtin_ia32_maskstoreps
+      {Intrinsic::x86_avx_maskstore_ps_256, 102404}, // __builtin_ia32_maskstoreps256
+      {Intrinsic::x86_avx2_maskstore_q, 103838}, // __builtin_ia32_maskstoreq
+      {Intrinsic::x86_avx2_maskstore_q_256, 103864}, // __builtin_ia32_maskstoreq256
+      {Intrinsic::x86_sse2_max_pd, 123094}, // __builtin_ia32_maxpd
+      {Intrinsic::x86_avx_max_pd_256, 102434}, // __builtin_ia32_maxpd256
+      {Intrinsic::x86_avx512_max_pd_512, 114119}, // __builtin_ia32_maxpd512
+      {Intrinsic::x86_sse_max_ps, 122230}, // __builtin_ia32_maxps
+      {Intrinsic::x86_avx_max_ps_256, 102458}, // __builtin_ia32_maxps256
+      {Intrinsic::x86_avx512_max_ps_512, 114143}, // __builtin_ia32_maxps512
+      {Intrinsic::x86_sse2_max_sd, 123115}, // __builtin_ia32_maxsd
+      {Intrinsic::x86_avx512_mask_max_sd_round, 109049}, // __builtin_ia32_maxsd_round_mask
+      {Intrinsic::x86_sse_max_ss, 122251}, // __builtin_ia32_maxss
+      {Intrinsic::x86_avx512_mask_max_ss_round, 109081}, // __builtin_ia32_maxss_round_mask
+      {Intrinsic::x86_sse2_mfence, 123136}, // __builtin_ia32_mfence
+      {Intrinsic::x86_sse2_min_pd, 123158}, // __builtin_ia32_minpd
+      {Intrinsic::x86_avx_min_pd_256, 102482}, // __builtin_ia32_minpd256
+      {Intrinsic::x86_avx512_min_pd_512, 114167}, // __builtin_ia32_minpd512
+      {Intrinsic::x86_sse_min_ps, 122272}, // __builtin_ia32_minps
+      {Intrinsic::x86_avx_min_ps_256, 102506}, // __builtin_ia32_minps256
+      {Intrinsic::x86_avx512_min_ps_512, 114191}, // __builtin_ia32_minps512
+      {Intrinsic::x86_sse2_min_sd, 123179}, // __builtin_ia32_minsd
+      {Intrinsic::x86_avx512_mask_min_sd_round, 109113}, // __builtin_ia32_minsd_round_mask
+      {Intrinsic::x86_sse_min_ss, 122293}, // __builtin_ia32_minss
+      {Intrinsic::x86_avx512_mask_min_ss_round, 109145}, // __builtin_ia32_minss_round_mask
+      {Intrinsic::x86_sse3_monitor, 124203}, // __builtin_ia32_monitor
+      {Intrinsic::x86_monitorx, 121116}, // __builtin_ia32_monitorx
+      {Intrinsic::x86_movdir64b, 121140}, // __builtin_ia32_movdir64b
+      {Intrinsic::x86_sse2_movmsk_pd, 123200}, // __builtin_ia32_movmskpd
+      {Intrinsic::x86_avx_movmsk_pd_256, 102530}, // __builtin_ia32_movmskpd256
+      {Intrinsic::x86_sse_movmsk_ps, 122314}, // __builtin_ia32_movmskps
+      {Intrinsic::x86_avx_movmsk_ps_256, 102557}, // __builtin_ia32_movmskps256
+      {Intrinsic::x86_mmx_movnt_dq, 119594}, // __builtin_ia32_movntq
+      {Intrinsic::x86_sse41_mpsadbw, 124362}, // __builtin_ia32_mpsadbw128
+      {Intrinsic::x86_avx2_mpsadbw, 103893}, // __builtin_ia32_mpsadbw256
+      {Intrinsic::x86_avx512_mul_pd_512, 114215}, // __builtin_ia32_mulpd512
+      {Intrinsic::x86_avx512_mul_ps_512, 114239}, // __builtin_ia32_mulps512
+      {Intrinsic::x86_avx512_mask_mul_sd_round, 109177}, // __builtin_ia32_mulsd_round_mask
+      {Intrinsic::x86_avx512_mask_mul_ss_round, 109209}, // __builtin_ia32_mulss_round_mask
+      {Intrinsic::x86_sse3_mwait, 124226}, // __builtin_ia32_mwait
+      {Intrinsic::x86_mwaitx, 121165}, // __builtin_ia32_mwaitx
+      {Intrinsic::x86_ssse3_pabs_b, 125224}, // __builtin_ia32_pabsb
+      {Intrinsic::x86_ssse3_pabs_d, 125245}, // __builtin_ia32_pabsd
+      {Intrinsic::x86_ssse3_pabs_w, 125266}, // __builtin_ia32_pabsw
+      {Intrinsic::x86_mmx_packssdw, 119616}, // __builtin_ia32_packssdw
+      {Intrinsic::x86_sse2_packssdw_128, 123224}, // __builtin_ia32_packssdw128
+      {Intrinsic::x86_avx2_packssdw, 103919}, // __builtin_ia32_packssdw256
+      {Intrinsic::x86_avx512_packssdw_512, 114263}, // __builtin_ia32_packssdw512
+      {Intrinsic::x86_mmx_packsswb, 119640}, // __builtin_ia32_packsswb
+      {Intrinsic::x86_sse2_packsswb_128, 123251}, // __builtin_ia32_packsswb128
+      {Intrinsic::x86_avx2_packsswb, 103946}, // __builtin_ia32_packsswb256
+      {Intrinsic::x86_avx512_packsswb_512, 114290}, // __builtin_ia32_packsswb512
+      {Intrinsic::x86_sse41_packusdw, 124388}, // __builtin_ia32_packusdw128
+      {Intrinsic::x86_avx2_packusdw, 103973}, // __builtin_ia32_packusdw256
+      {Intrinsic::x86_avx512_packusdw_512, 114317}, // __builtin_ia32_packusdw512
+      {Intrinsic::x86_mmx_packuswb, 119664}, // __builtin_ia32_packuswb
+      {Intrinsic::x86_sse2_packuswb_128, 123278}, // __builtin_ia32_packuswb128
+      {Intrinsic::x86_avx2_packuswb, 104000}, // __builtin_ia32_packuswb256
+      {Intrinsic::x86_avx512_packuswb_512, 114344}, // __builtin_ia32_packuswb512
+      {Intrinsic::x86_mmx_padd_b, 119688}, // __builtin_ia32_paddb
+      {Intrinsic::x86_mmx_padd_d, 119709}, // __builtin_ia32_paddd
+      {Intrinsic::x86_mmx_padd_q, 119730}, // __builtin_ia32_paddq
+      {Intrinsic::x86_mmx_padds_b, 119772}, // __builtin_ia32_paddsb
+      {Intrinsic::x86_mmx_padds_w, 119794}, // __builtin_ia32_paddsw
+      {Intrinsic::x86_mmx_paddus_b, 119816}, // __builtin_ia32_paddusb
+      {Intrinsic::x86_mmx_paddus_w, 119839}, // __builtin_ia32_paddusw
+      {Intrinsic::x86_mmx_padd_w, 119751}, // __builtin_ia32_paddw
+      {Intrinsic::x86_mmx_palignr_b, 119862}, // __builtin_ia32_palignr
+      {Intrinsic::x86_mmx_pand, 119885}, // __builtin_ia32_pand
+      {Intrinsic::x86_mmx_pandn, 119905}, // __builtin_ia32_pandn
+      {Intrinsic::x86_sse2_pause, 123305}, // __builtin_ia32_pause
+      {Intrinsic::x86_mmx_pavg_b, 119926}, // __builtin_ia32_pavgb
+      {Intrinsic::x86_sse2_pavg_b, 123326}, // __builtin_ia32_pavgb128
+      {Intrinsic::x86_avx2_pavg_b, 104027}, // __builtin_ia32_pavgb256
+      {Intrinsic::x86_avx512_pavg_b_512, 114371}, // __builtin_ia32_pavgb512
+      {Intrinsic::x86_3dnow_pavgusb, 100927}, // __builtin_ia32_pavgusb
+      {Intrinsic::x86_mmx_pavg_w, 119947}, // __builtin_ia32_pavgw
+      {Intrinsic::x86_sse2_pavg_w, 123350}, // __builtin_ia32_pavgw128
+      {Intrinsic::x86_avx2_pavg_w, 104051}, // __builtin_ia32_pavgw256
+      {Intrinsic::x86_avx512_pavg_w_512, 114395}, // __builtin_ia32_pavgw512
+      {Intrinsic::x86_sse41_pblendvb, 124415}, // __builtin_ia32_pblendvb128
+      {Intrinsic::x86_avx2_pblendvb, 104075}, // __builtin_ia32_pblendvb256
+      {Intrinsic::x86_pclmulqdq, 121187}, // __builtin_ia32_pclmulqdq128
+      {Intrinsic::x86_pclmulqdq_256, 121215}, // __builtin_ia32_pclmulqdq256
+      {Intrinsic::x86_pclmulqdq_512, 121243}, // __builtin_ia32_pclmulqdq512
+      {Intrinsic::x86_mmx_pcmpeq_b, 119968}, // __builtin_ia32_pcmpeqb
+      {Intrinsic::x86_mmx_pcmpeq_d, 119991}, // __builtin_ia32_pcmpeqd
+      {Intrinsic::x86_mmx_pcmpeq_w, 120014}, // __builtin_ia32_pcmpeqw
+      {Intrinsic::x86_sse42_pcmpestri128, 124732}, // __builtin_ia32_pcmpestri128
+      {Intrinsic::x86_sse42_pcmpestria128, 124760}, // __builtin_ia32_pcmpestria128
+      {Intrinsic::x86_sse42_pcmpestric128, 124789}, // __builtin_ia32_pcmpestric128
+      {Intrinsic::x86_sse42_pcmpestrio128, 124818}, // __builtin_ia32_pcmpestrio128
+      {Intrinsic::x86_sse42_pcmpestris128, 124847}, // __builtin_ia32_pcmpestris128
+      {Intrinsic::x86_sse42_pcmpestriz128, 124876}, // __builtin_ia32_pcmpestriz128
+      {Intrinsic::x86_sse42_pcmpestrm128, 124905}, // __builtin_ia32_pcmpestrm128
+      {Intrinsic::x86_mmx_pcmpgt_b, 120037}, // __builtin_ia32_pcmpgtb
+      {Intrinsic::x86_mmx_pcmpgt_d, 120060}, // __builtin_ia32_pcmpgtd
+      {Intrinsic::x86_mmx_pcmpgt_w, 120083}, // __builtin_ia32_pcmpgtw
+      {Intrinsic::x86_sse42_pcmpistri128, 124933}, // __builtin_ia32_pcmpistri128
+      {Intrinsic::x86_sse42_pcmpistria128, 124961}, // __builtin_ia32_pcmpistria128
+      {Intrinsic::x86_sse42_pcmpistric128, 124990}, // __builtin_ia32_pcmpistric128
+      {Intrinsic::x86_sse42_pcmpistrio128, 125019}, // __builtin_ia32_pcmpistrio128
+      {Intrinsic::x86_sse42_pcmpistris128, 125048}, // __builtin_ia32_pcmpistris128
+      {Intrinsic::x86_sse42_pcmpistriz128, 125077}, // __builtin_ia32_pcmpistriz128
+      {Intrinsic::x86_sse42_pcmpistrm128, 125106}, // __builtin_ia32_pcmpistrm128
+      {Intrinsic::x86_bmi_pdep_64, 118834}, // __builtin_ia32_pdep_di
+      {Intrinsic::x86_bmi_pdep_32, 118811}, // __builtin_ia32_pdep_si
+      {Intrinsic::x86_avx512_permvar_df_256, 114419}, // __builtin_ia32_permvardf256
+      {Intrinsic::x86_avx512_permvar_df_512, 114447}, // __builtin_ia32_permvardf512
+      {Intrinsic::x86_avx512_permvar_di_256, 114475}, // __builtin_ia32_permvardi256
+      {Intrinsic::x86_avx512_permvar_di_512, 114503}, // __builtin_ia32_permvardi512
+      {Intrinsic::x86_avx512_permvar_hi_128, 114531}, // __builtin_ia32_permvarhi128
+      {Intrinsic::x86_avx512_permvar_hi_256, 114559}, // __builtin_ia32_permvarhi256
+      {Intrinsic::x86_avx512_permvar_hi_512, 114587}, // __builtin_ia32_permvarhi512
+      {Intrinsic::x86_avx512_permvar_qi_128, 114615}, // __builtin_ia32_permvarqi128
+      {Intrinsic::x86_avx512_permvar_qi_256, 114643}, // __builtin_ia32_permvarqi256
+      {Intrinsic::x86_avx512_permvar_qi_512, 114671}, // __builtin_ia32_permvarqi512
+      {Intrinsic::x86_avx2_permps, 104130}, // __builtin_ia32_permvarsf256
+      {Intrinsic::x86_avx512_permvar_sf_512, 114699}, // __builtin_ia32_permvarsf512
+      {Intrinsic::x86_avx2_permd, 104102}, // __builtin_ia32_permvarsi256
+      {Intrinsic::x86_avx512_permvar_si_512, 114727}, // __builtin_ia32_permvarsi512
+      {Intrinsic::x86_bmi_pext_64, 118880}, // __builtin_ia32_pext_di
+      {Intrinsic::x86_bmi_pext_32, 118857}, // __builtin_ia32_pext_si
+      {Intrinsic::x86_3dnow_pf2id, 100950}, // __builtin_ia32_pf2id
+      {Intrinsic::x86_3dnowa_pf2iw, 101348}, // __builtin_ia32_pf2iw
+      {Intrinsic::x86_3dnow_pfacc, 100971}, // __builtin_ia32_pfacc
+      {Intrinsic::x86_3dnow_pfadd, 100992}, // __builtin_ia32_pfadd
+      {Intrinsic::x86_3dnow_pfcmpeq, 101013}, // __builtin_ia32_pfcmpeq
+      {Intrinsic::x86_3dnow_pfcmpge, 101036}, // __builtin_ia32_pfcmpge
+      {Intrinsic::x86_3dnow_pfcmpgt, 101059}, // __builtin_ia32_pfcmpgt
+      {Intrinsic::x86_3dnow_pfmax, 101082}, // __builtin_ia32_pfmax
+      {Intrinsic::x86_3dnow_pfmin, 101103}, // __builtin_ia32_pfmin
+      {Intrinsic::x86_3dnow_pfmul, 101124}, // __builtin_ia32_pfmul
+      {Intrinsic::x86_3dnowa_pfnacc, 101369}, // __builtin_ia32_pfnacc
+      {Intrinsic::x86_3dnowa_pfpnacc, 101391}, // __builtin_ia32_pfpnacc
+      {Intrinsic::x86_3dnow_pfrcp, 101145}, // __builtin_ia32_pfrcp
+      {Intrinsic::x86_3dnow_pfrcpit1, 101166}, // __builtin_ia32_pfrcpit1
+      {Intrinsic::x86_3dnow_pfrcpit2, 101190}, // __builtin_ia32_pfrcpit2
+      {Intrinsic::x86_3dnow_pfrsqit1, 101214}, // __builtin_ia32_pfrsqit1
+      {Intrinsic::x86_3dnow_pfrsqrt, 101238}, // __builtin_ia32_pfrsqrt
+      {Intrinsic::x86_3dnow_pfsub, 101261}, // __builtin_ia32_pfsub
+      {Intrinsic::x86_3dnow_pfsubr, 101282}, // __builtin_ia32_pfsubr
+      {Intrinsic::x86_ssse3_phadd_d, 125287}, // __builtin_ia32_phaddd
+      {Intrinsic::x86_ssse3_phadd_d_128, 125309}, // __builtin_ia32_phaddd128
+      {Intrinsic::x86_avx2_phadd_d, 104158}, // __builtin_ia32_phaddd256
+      {Intrinsic::x86_ssse3_phadd_sw, 125334}, // __builtin_ia32_phaddsw
+      {Intrinsic::x86_ssse3_phadd_sw_128, 125357}, // __builtin_ia32_phaddsw128
+      {Intrinsic::x86_avx2_phadd_sw, 104183}, // __builtin_ia32_phaddsw256
+      {Intrinsic::x86_ssse3_phadd_w, 125383}, // __builtin_ia32_phaddw
+      {Intrinsic::x86_ssse3_phadd_w_128, 125405}, // __builtin_ia32_phaddw128
+      {Intrinsic::x86_avx2_phadd_w, 104209}, // __builtin_ia32_phaddw256
+      {Intrinsic::x86_sse41_phminposuw, 124442}, // __builtin_ia32_phminposuw128
+      {Intrinsic::x86_ssse3_phsub_d, 125430}, // __builtin_ia32_phsubd
+      {Intrinsic::x86_ssse3_phsub_d_128, 125452}, // __builtin_ia32_phsubd128
+      {Intrinsic::x86_avx2_phsub_d, 104234}, // __builtin_ia32_phsubd256
+      {Intrinsic::x86_ssse3_phsub_sw, 125477}, // __builtin_ia32_phsubsw
+      {Intrinsic::x86_ssse3_phsub_sw_128, 125500}, // __builtin_ia32_phsubsw128
+      {Intrinsic::x86_avx2_phsub_sw, 104259}, // __builtin_ia32_phsubsw256
+      {Intrinsic::x86_ssse3_phsub_w, 125526}, // __builtin_ia32_phsubw
+      {Intrinsic::x86_ssse3_phsub_w_128, 125548}, // __builtin_ia32_phsubw128
+      {Intrinsic::x86_avx2_phsub_w, 104285}, // __builtin_ia32_phsubw256
+      {Intrinsic::x86_3dnow_pi2fd, 101304}, // __builtin_ia32_pi2fd
+      {Intrinsic::x86_3dnowa_pi2fw, 101414}, // __builtin_ia32_pi2fw
+      {Intrinsic::x86_ssse3_pmadd_ub_sw, 125573}, // __builtin_ia32_pmaddubsw
+      {Intrinsic::x86_ssse3_pmadd_ub_sw_128, 125598}, // __builtin_ia32_pmaddubsw128
+      {Intrinsic::x86_avx2_pmadd_ub_sw, 104310}, // __builtin_ia32_pmaddubsw256
+      {Intrinsic::x86_avx512_pmaddubs_w_512, 114755}, // __builtin_ia32_pmaddubsw512
+      {Intrinsic::x86_mmx_pmadd_wd, 120162}, // __builtin_ia32_pmaddwd
+      {Intrinsic::x86_sse2_pmadd_wd, 123374}, // __builtin_ia32_pmaddwd128
+      {Intrinsic::x86_avx2_pmadd_wd, 104338}, // __builtin_ia32_pmaddwd256
+      {Intrinsic::x86_avx512_pmaddw_d_512, 114783}, // __builtin_ia32_pmaddwd512
+      {Intrinsic::x86_mmx_pmaxs_w, 120185}, // __builtin_ia32_pmaxsw
+      {Intrinsic::x86_mmx_pmaxu_b, 120207}, // __builtin_ia32_pmaxub
+      {Intrinsic::x86_mmx_pmins_w, 120229}, // __builtin_ia32_pminsw
+      {Intrinsic::x86_mmx_pminu_b, 120251}, // __builtin_ia32_pminub
+      {Intrinsic::x86_avx512_mask_pmov_db_128, 109241}, // __builtin_ia32_pmovdb128_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_mem_128, 109301}, // __builtin_ia32_pmovdb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_256, 109271}, // __builtin_ia32_pmovdb256_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_mem_256, 109334}, // __builtin_ia32_pmovdb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_mem_512, 109367}, // __builtin_ia32_pmovdb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_128, 109400}, // __builtin_ia32_pmovdw128_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_mem_128, 109460}, // __builtin_ia32_pmovdw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_256, 109430}, // __builtin_ia32_pmovdw256_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_mem_256, 109493}, // __builtin_ia32_pmovdw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_mem_512, 109526}, // __builtin_ia32_pmovdw512mem_mask
+      {Intrinsic::x86_mmx_pmovmskb, 120273}, // __builtin_ia32_pmovmskb
+      {Intrinsic::x86_sse2_pmovmskb_128, 123400}, // __builtin_ia32_pmovmskb128
+      {Intrinsic::x86_avx2_pmovmskb, 104364}, // __builtin_ia32_pmovmskb256
+      {Intrinsic::x86_avx512_mask_pmov_qb_128, 109559}, // __builtin_ia32_pmovqb128_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_mem_128, 109649}, // __builtin_ia32_pmovqb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_256, 109589}, // __builtin_ia32_pmovqb256_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_mem_256, 109682}, // __builtin_ia32_pmovqb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_512, 109619}, // __builtin_ia32_pmovqb512_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_mem_512, 109715}, // __builtin_ia32_pmovqb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_128, 109748}, // __builtin_ia32_pmovqd128_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_mem_128, 109778}, // __builtin_ia32_pmovqd128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_mem_256, 109811}, // __builtin_ia32_pmovqd256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_mem_512, 109844}, // __builtin_ia32_pmovqd512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_128, 109877}, // __builtin_ia32_pmovqw128_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_mem_128, 109937}, // __builtin_ia32_pmovqw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_256, 109907}, // __builtin_ia32_pmovqw256_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_mem_256, 109970}, // __builtin_ia32_pmovqw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_mem_512, 110003}, // __builtin_ia32_pmovqw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_128, 110165}, // __builtin_ia32_pmovsdb128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_mem_128, 110258}, // __builtin_ia32_pmovsdb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_256, 110196}, // __builtin_ia32_pmovsdb256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_mem_256, 110292}, // __builtin_ia32_pmovsdb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_512, 110227}, // __builtin_ia32_pmovsdb512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_mem_512, 110326}, // __builtin_ia32_pmovsdb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_128, 110360}, // __builtin_ia32_pmovsdw128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_128, 110453}, // __builtin_ia32_pmovsdw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_256, 110391}, // __builtin_ia32_pmovsdw256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_256, 110487}, // __builtin_ia32_pmovsdw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_512, 110422}, // __builtin_ia32_pmovsdw512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_512, 110521}, // __builtin_ia32_pmovsdw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_128, 110555}, // __builtin_ia32_pmovsqb128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_128, 110648}, // __builtin_ia32_pmovsqb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_256, 110586}, // __builtin_ia32_pmovsqb256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_256, 110682}, // __builtin_ia32_pmovsqb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_512, 110617}, // __builtin_ia32_pmovsqb512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_512, 110716}, // __builtin_ia32_pmovsqb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_128, 110750}, // __builtin_ia32_pmovsqd128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_128, 110843}, // __builtin_ia32_pmovsqd128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_256, 110781}, // __builtin_ia32_pmovsqd256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_256, 110877}, // __builtin_ia32_pmovsqd256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_512, 110812}, // __builtin_ia32_pmovsqd512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_512, 110911}, // __builtin_ia32_pmovsqd512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_128, 110945}, // __builtin_ia32_pmovsqw128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_128, 111038}, // __builtin_ia32_pmovsqw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_256, 110976}, // __builtin_ia32_pmovsqw256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_256, 111072}, // __builtin_ia32_pmovsqw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_512, 111007}, // __builtin_ia32_pmovsqw512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_512, 111106}, // __builtin_ia32_pmovsqw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_128, 111140}, // __builtin_ia32_pmovswb128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_128, 111233}, // __builtin_ia32_pmovswb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_256, 111171}, // __builtin_ia32_pmovswb256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_256, 111267}, // __builtin_ia32_pmovswb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_512, 111202}, // __builtin_ia32_pmovswb512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_512, 111301}, // __builtin_ia32_pmovswb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_128, 111335}, // __builtin_ia32_pmovusdb128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_mem_128, 111431}, // __builtin_ia32_pmovusdb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_256, 111367}, // __builtin_ia32_pmovusdb256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_mem_256, 111466}, // __builtin_ia32_pmovusdb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_512, 111399}, // __builtin_ia32_pmovusdb512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_mem_512, 111501}, // __builtin_ia32_pmovusdb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_128, 111536}, // __builtin_ia32_pmovusdw128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_128, 111632}, // __builtin_ia32_pmovusdw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_256, 111568}, // __builtin_ia32_pmovusdw256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_256, 111667}, // __builtin_ia32_pmovusdw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_512, 111600}, // __builtin_ia32_pmovusdw512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_512, 111702}, // __builtin_ia32_pmovusdw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_128, 111737}, // __builtin_ia32_pmovusqb128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_128, 111833}, // __builtin_ia32_pmovusqb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_256, 111769}, // __builtin_ia32_pmovusqb256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_256, 111868}, // __builtin_ia32_pmovusqb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_512, 111801}, // __builtin_ia32_pmovusqb512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_512, 111903}, // __builtin_ia32_pmovusqb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_128, 111938}, // __builtin_ia32_pmovusqd128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_128, 112034}, // __builtin_ia32_pmovusqd128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_256, 111970}, // __builtin_ia32_pmovusqd256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_256, 112069}, // __builtin_ia32_pmovusqd256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_512, 112002}, // __builtin_ia32_pmovusqd512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_512, 112104}, // __builtin_ia32_pmovusqd512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_128, 112139}, // __builtin_ia32_pmovusqw128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_128, 112235}, // __builtin_ia32_pmovusqw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_256, 112171}, // __builtin_ia32_pmovusqw256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_256, 112270}, // __builtin_ia32_pmovusqw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_512, 112203}, // __builtin_ia32_pmovusqw512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_512, 112305}, // __builtin_ia32_pmovusqw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_128, 112340}, // __builtin_ia32_pmovuswb128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_128, 112436}, // __builtin_ia32_pmovuswb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_256, 112372}, // __builtin_ia32_pmovuswb256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_256, 112471}, // __builtin_ia32_pmovuswb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_512, 112404}, // __builtin_ia32_pmovuswb512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_512, 112506}, // __builtin_ia32_pmovuswb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_128, 110036}, // __builtin_ia32_pmovwb128_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_mem_128, 110066}, // __builtin_ia32_pmovwb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_mem_256, 110099}, // __builtin_ia32_pmovwb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_mem_512, 110132}, // __builtin_ia32_pmovwb512mem_mask
+      {Intrinsic::x86_ssse3_pmul_hr_sw, 125626}, // __builtin_ia32_pmulhrsw
+      {Intrinsic::x86_ssse3_pmul_hr_sw_128, 125650}, // __builtin_ia32_pmulhrsw128
+      {Intrinsic::x86_avx2_pmul_hr_sw, 104391}, // __builtin_ia32_pmulhrsw256
+      {Intrinsic::x86_avx512_pmul_hr_sw_512, 114809}, // __builtin_ia32_pmulhrsw512
+      {Intrinsic::x86_3dnow_pmulhrw, 101325}, // __builtin_ia32_pmulhrw
+      {Intrinsic::x86_mmx_pmulhu_w, 120319}, // __builtin_ia32_pmulhuw
+      {Intrinsic::x86_sse2_pmulhu_w, 123452}, // __builtin_ia32_pmulhuw128
+      {Intrinsic::x86_avx2_pmulhu_w, 104443}, // __builtin_ia32_pmulhuw256
+      {Intrinsic::x86_avx512_pmulhu_w_512, 114861}, // __builtin_ia32_pmulhuw512
+      {Intrinsic::x86_mmx_pmulh_w, 120297}, // __builtin_ia32_pmulhw
+      {Intrinsic::x86_sse2_pmulh_w, 123427}, // __builtin_ia32_pmulhw128
+      {Intrinsic::x86_avx2_pmulh_w, 104418}, // __builtin_ia32_pmulhw256
+      {Intrinsic::x86_avx512_pmulh_w_512, 114836}, // __builtin_ia32_pmulhw512
+      {Intrinsic::x86_mmx_pmull_w, 120342}, // __builtin_ia32_pmullw
+      {Intrinsic::x86_mmx_pmulu_dq, 120364}, // __builtin_ia32_pmuludq
+      {Intrinsic::x86_mmx_por, 120387}, // __builtin_ia32_por
+      {Intrinsic::x86_mmx_psad_bw, 120406}, // __builtin_ia32_psadbw
+      {Intrinsic::x86_sse2_psad_bw, 123478}, // __builtin_ia32_psadbw128
+      {Intrinsic::x86_avx2_psad_bw, 104469}, // __builtin_ia32_psadbw256
+      {Intrinsic::x86_avx512_psad_bw_512, 114986}, // __builtin_ia32_psadbw512
+      {Intrinsic::x86_ssse3_pshuf_b, 125677}, // __builtin_ia32_pshufb
+      {Intrinsic::x86_ssse3_pshuf_b_128, 125699}, // __builtin_ia32_pshufb128
+      {Intrinsic::x86_avx2_pshuf_b, 104494}, // __builtin_ia32_pshufb256
+      {Intrinsic::x86_avx512_pshuf_b_512, 115011}, // __builtin_ia32_pshufb512
+      {Intrinsic::x86_sse_pshuf_w, 122338}, // __builtin_ia32_pshufw
+      {Intrinsic::x86_ssse3_psign_b, 125724}, // __builtin_ia32_psignb
+      {Intrinsic::x86_ssse3_psign_b_128, 125746}, // __builtin_ia32_psignb128
+      {Intrinsic::x86_avx2_psign_b, 104519}, // __builtin_ia32_psignb256
+      {Intrinsic::x86_ssse3_psign_d, 125771}, // __builtin_ia32_psignd
+      {Intrinsic::x86_ssse3_psign_d_128, 125793}, // __builtin_ia32_psignd128
+      {Intrinsic::x86_avx2_psign_d, 104544}, // __builtin_ia32_psignd256
+      {Intrinsic::x86_ssse3_psign_w, 125818}, // __builtin_ia32_psignw
+      {Intrinsic::x86_ssse3_psign_w_128, 125840}, // __builtin_ia32_psignw128
+      {Intrinsic::x86_avx2_psign_w, 104569}, // __builtin_ia32_psignw256
+      {Intrinsic::x86_mmx_psll_d, 120428}, // __builtin_ia32_pslld
+      {Intrinsic::x86_sse2_psll_d, 123503}, // __builtin_ia32_pslld128
+      {Intrinsic::x86_avx2_psll_d, 104594}, // __builtin_ia32_pslld256
+      {Intrinsic::x86_avx512_psll_d_512, 115036}, // __builtin_ia32_pslld512
+      {Intrinsic::x86_mmx_pslli_d, 120491}, // __builtin_ia32_pslldi
+      {Intrinsic::x86_sse2_pslli_d, 123575}, // __builtin_ia32_pslldi128
+      {Intrinsic::x86_avx2_pslli_d, 104666}, // __builtin_ia32_pslldi256
+      {Intrinsic::x86_avx512_pslli_d_512, 115108}, // __builtin_ia32_pslldi512
+      {Intrinsic::x86_mmx_psll_q, 120449}, // __builtin_ia32_psllq
+      {Intrinsic::x86_sse2_psll_q, 123527}, // __builtin_ia32_psllq128
+      {Intrinsic::x86_avx2_psll_q, 104618}, // __builtin_ia32_psllq256
+      {Intrinsic::x86_avx512_psll_q_512, 115060}, // __builtin_ia32_psllq512
+      {Intrinsic::x86_mmx_pslli_q, 120513}, // __builtin_ia32_psllqi
+      {Intrinsic::x86_sse2_pslli_q, 123600}, // __builtin_ia32_psllqi128
+      {Intrinsic::x86_avx2_pslli_q, 104691}, // __builtin_ia32_psllqi256
+      {Intrinsic::x86_avx512_pslli_q_512, 115133}, // __builtin_ia32_psllqi512
+      {Intrinsic::x86_avx512_psllv_w_256, 115256}, // __builtin_ia32_psllv16hi
+      {Intrinsic::x86_avx512_psllv_d_512, 115183}, // __builtin_ia32_psllv16si
+      {Intrinsic::x86_avx2_psllv_q, 104789}, // __builtin_ia32_psllv2di
+      {Intrinsic::x86_avx512_psllv_w_512, 115281}, // __builtin_ia32_psllv32hi
+      {Intrinsic::x86_avx2_psllv_q_256, 104813}, // __builtin_ia32_psllv4di
+      {Intrinsic::x86_avx2_psllv_d, 104741}, // __builtin_ia32_psllv4si
+      {Intrinsic::x86_avx512_psllv_q_512, 115208}, // __builtin_ia32_psllv8di
+      {Intrinsic::x86_avx512_psllv_w_128, 115232}, // __builtin_ia32_psllv8hi
+      {Intrinsic::x86_avx2_psllv_d_256, 104765}, // __builtin_ia32_psllv8si
+      {Intrinsic::x86_mmx_psll_w, 120470}, // __builtin_ia32_psllw
+      {Intrinsic::x86_sse2_psll_w, 123551}, // __builtin_ia32_psllw128
+      {Intrinsic::x86_avx2_psll_w, 104642}, // __builtin_ia32_psllw256
+      {Intrinsic::x86_avx512_psll_w_512, 115084}, // __builtin_ia32_psllw512
+      {Intrinsic::x86_mmx_pslli_w, 120535}, // __builtin_ia32_psllwi
+      {Intrinsic::x86_sse2_pslli_w, 123625}, // __builtin_ia32_psllwi128
+      {Intrinsic::x86_avx2_pslli_w, 104716}, // __builtin_ia32_psllwi256
+      {Intrinsic::x86_avx512_pslli_w_512, 115158}, // __builtin_ia32_psllwi512
+      {Intrinsic::x86_mmx_psra_d, 120557}, // __builtin_ia32_psrad
+      {Intrinsic::x86_sse2_psra_d, 123650}, // __builtin_ia32_psrad128
+      {Intrinsic::x86_avx2_psra_d, 104837}, // __builtin_ia32_psrad256
+      {Intrinsic::x86_avx512_psra_d_512, 115306}, // __builtin_ia32_psrad512
+      {Intrinsic::x86_mmx_psrai_d, 120599}, // __builtin_ia32_psradi
+      {Intrinsic::x86_sse2_psrai_d, 123698}, // __builtin_ia32_psradi128
+      {Intrinsic::x86_avx2_psrai_d, 104885}, // __builtin_ia32_psradi256
+      {Intrinsic::x86_avx512_psrai_d_512, 115426}, // __builtin_ia32_psradi512
+      {Intrinsic::x86_avx512_psra_q_128, 115330}, // __builtin_ia32_psraq128
+      {Intrinsic::x86_avx512_psra_q_256, 115354}, // __builtin_ia32_psraq256
+      {Intrinsic::x86_avx512_psra_q_512, 115378}, // __builtin_ia32_psraq512
+      {Intrinsic::x86_avx512_psrai_q_128, 115451}, // __builtin_ia32_psraqi128
+      {Intrinsic::x86_avx512_psrai_q_256, 115476}, // __builtin_ia32_psraqi256
+      {Intrinsic::x86_avx512_psrai_q_512, 115501}, // __builtin_ia32_psraqi512
+      {Intrinsic::x86_avx512_psrav_w_256, 115674}, // __builtin_ia32_psrav16hi
+      {Intrinsic::x86_avx512_psrav_d_512, 115551}, // __builtin_ia32_psrav16si
+      {Intrinsic::x86_avx512_psrav_w_512, 115699}, // __builtin_ia32_psrav32hi
+      {Intrinsic::x86_avx2_psrav_d, 104935}, // __builtin_ia32_psrav4si
+      {Intrinsic::x86_avx512_psrav_q_512, 115626}, // __builtin_ia32_psrav8di
+      {Intrinsic::x86_avx512_psrav_w_128, 115650}, // __builtin_ia32_psrav8hi
+      {Intrinsic::x86_avx2_psrav_d_256, 104959}, // __builtin_ia32_psrav8si
+      {Intrinsic::x86_avx512_psrav_q_128, 115576}, // __builtin_ia32_psravq128
+      {Intrinsic::x86_avx512_psrav_q_256, 115601}, // __builtin_ia32_psravq256
+      {Intrinsic::x86_mmx_psra_w, 120578}, // __builtin_ia32_psraw
+      {Intrinsic::x86_sse2_psra_w, 123674}, // __builtin_ia32_psraw128
+      {Intrinsic::x86_avx2_psra_w, 104861}, // __builtin_ia32_psraw256
+      {Intrinsic::x86_avx512_psra_w_512, 115402}, // __builtin_ia32_psraw512
+      {Intrinsic::x86_mmx_psrai_w, 120621}, // __builtin_ia32_psrawi
+      {Intrinsic::x86_sse2_psrai_w, 123723}, // __builtin_ia32_psrawi128
+      {Intrinsic::x86_avx2_psrai_w, 104910}, // __builtin_ia32_psrawi256
+      {Intrinsic::x86_avx512_psrai_w_512, 115526}, // __builtin_ia32_psrawi512
+      {Intrinsic::x86_mmx_psrl_d, 120643}, // __builtin_ia32_psrld
+      {Intrinsic::x86_sse2_psrl_d, 123748}, // __builtin_ia32_psrld128
+      {Intrinsic::x86_avx2_psrl_d, 104983}, // __builtin_ia32_psrld256
+      {Intrinsic::x86_avx512_psrl_d_512, 115724}, // __builtin_ia32_psrld512
+      {Intrinsic::x86_mmx_psrli_d, 120706}, // __builtin_ia32_psrldi
+      {Intrinsic::x86_sse2_psrli_d, 123820}, // __builtin_ia32_psrldi128
+      {Intrinsic::x86_avx2_psrli_d, 105055}, // __builtin_ia32_psrldi256
+      {Intrinsic::x86_avx512_psrli_d_512, 115796}, // __builtin_ia32_psrldi512
+      {Intrinsic::x86_mmx_psrl_q, 120664}, // __builtin_ia32_psrlq
+      {Intrinsic::x86_sse2_psrl_q, 123772}, // __builtin_ia32_psrlq128
+      {Intrinsic::x86_avx2_psrl_q, 105007}, // __builtin_ia32_psrlq256
+      {Intrinsic::x86_avx512_psrl_q_512, 115748}, // __builtin_ia32_psrlq512
+      {Intrinsic::x86_mmx_psrli_q, 120728}, // __builtin_ia32_psrlqi
+      {Intrinsic::x86_sse2_psrli_q, 123845}, // __builtin_ia32_psrlqi128
+      {Intrinsic::x86_avx2_psrli_q, 105080}, // __builtin_ia32_psrlqi256
+      {Intrinsic::x86_avx512_psrli_q_512, 115821}, // __builtin_ia32_psrlqi512
+      {Intrinsic::x86_avx512_psrlv_w_256, 115944}, // __builtin_ia32_psrlv16hi
+      {Intrinsic::x86_avx512_psrlv_d_512, 115871}, // __builtin_ia32_psrlv16si
+      {Intrinsic::x86_avx2_psrlv_q, 105178}, // __builtin_ia32_psrlv2di
+      {Intrinsic::x86_avx512_psrlv_w_512, 115969}, // __builtin_ia32_psrlv32hi
+      {Intrinsic::x86_avx2_psrlv_q_256, 105202}, // __builtin_ia32_psrlv4di
+      {Intrinsic::x86_avx2_psrlv_d, 105130}, // __builtin_ia32_psrlv4si
+      {Intrinsic::x86_avx512_psrlv_q_512, 115896}, // __builtin_ia32_psrlv8di
+      {Intrinsic::x86_avx512_psrlv_w_128, 115920}, // __builtin_ia32_psrlv8hi
+      {Intrinsic::x86_avx2_psrlv_d_256, 105154}, // __builtin_ia32_psrlv8si
+      {Intrinsic::x86_mmx_psrl_w, 120685}, // __builtin_ia32_psrlw
+      {Intrinsic::x86_sse2_psrl_w, 123796}, // __builtin_ia32_psrlw128
+      {Intrinsic::x86_avx2_psrl_w, 105031}, // __builtin_ia32_psrlw256
+      {Intrinsic::x86_avx512_psrl_w_512, 115772}, // __builtin_ia32_psrlw512
+      {Intrinsic::x86_mmx_psrli_w, 120750}, // __builtin_ia32_psrlwi
+      {Intrinsic::x86_sse2_psrli_w, 123870}, // __builtin_ia32_psrlwi128
+      {Intrinsic::x86_avx2_psrli_w, 105105}, // __builtin_ia32_psrlwi256
+      {Intrinsic::x86_avx512_psrli_w_512, 115846}, // __builtin_ia32_psrlwi512
+      {Intrinsic::x86_mmx_psub_b, 120772}, // __builtin_ia32_psubb
+      {Intrinsic::x86_mmx_psub_d, 120793}, // __builtin_ia32_psubd
+      {Intrinsic::x86_mmx_psub_q, 120814}, // __builtin_ia32_psubq
+      {Intrinsic::x86_mmx_psubs_b, 120856}, // __builtin_ia32_psubsb
+      {Intrinsic::x86_mmx_psubs_w, 120878}, // __builtin_ia32_psubsw
+      {Intrinsic::x86_mmx_psubus_b, 120900}, // __builtin_ia32_psubusb
+      {Intrinsic::x86_mmx_psubus_w, 120923}, // __builtin_ia32_psubusw
+      {Intrinsic::x86_mmx_psub_w, 120835}, // __builtin_ia32_psubw
+      {Intrinsic::x86_avx512_pternlog_d_128, 115994}, // __builtin_ia32_pternlogd128
+      {Intrinsic::x86_avx512_pternlog_d_256, 116022}, // __builtin_ia32_pternlogd256
+      {Intrinsic::x86_avx512_pternlog_d_512, 116050}, // __builtin_ia32_pternlogd512
+      {Intrinsic::x86_avx512_pternlog_q_128, 116078}, // __builtin_ia32_pternlogq128
+      {Intrinsic::x86_avx512_pternlog_q_256, 116106}, // __builtin_ia32_pternlogq256
+      {Intrinsic::x86_avx512_pternlog_q_512, 116134}, // __builtin_ia32_pternlogq512
+      {Intrinsic::x86_sse41_ptestc, 124471}, // __builtin_ia32_ptestc128
+      {Intrinsic::x86_avx_ptestc_256, 102584}, // __builtin_ia32_ptestc256
+      {Intrinsic::x86_sse41_ptestnzc, 124496}, // __builtin_ia32_ptestnzc128
+      {Intrinsic::x86_avx_ptestnzc_256, 102609}, // __builtin_ia32_ptestnzc256
+      {Intrinsic::x86_sse41_ptestz, 124523}, // __builtin_ia32_ptestz128
+      {Intrinsic::x86_avx_ptestz_256, 102636}, // __builtin_ia32_ptestz256
+      {Intrinsic::x86_ptwrite32, 121271}, // __builtin_ia32_ptwrite32
+      {Intrinsic::x86_ptwrite64, 121296}, // __builtin_ia32_ptwrite64
+      {Intrinsic::x86_mmx_punpckhbw, 120946}, // __builtin_ia32_punpckhbw
+      {Intrinsic::x86_mmx_punpckhdq, 120971}, // __builtin_ia32_punpckhdq
+      {Intrinsic::x86_mmx_punpckhwd, 120996}, // __builtin_ia32_punpckhwd
+      {Intrinsic::x86_mmx_punpcklbw, 121021}, // __builtin_ia32_punpcklbw
+      {Intrinsic::x86_mmx_punpckldq, 121046}, // __builtin_ia32_punpckldq
+      {Intrinsic::x86_mmx_punpcklwd, 121071}, // __builtin_ia32_punpcklwd
+      {Intrinsic::x86_mmx_pxor, 121096}, // __builtin_ia32_pxor
+      {Intrinsic::x86_avx512_mask_range_pd_128, 112541}, // __builtin_ia32_rangepd128_mask
+      {Intrinsic::x86_avx512_mask_range_pd_256, 112572}, // __builtin_ia32_rangepd256_mask
+      {Intrinsic::x86_avx512_mask_range_pd_512, 112603}, // __builtin_ia32_rangepd512_mask
+      {Intrinsic::x86_avx512_mask_range_ps_128, 112634}, // __builtin_ia32_rangeps128_mask
+      {Intrinsic::x86_avx512_mask_range_ps_256, 112665}, // __builtin_ia32_rangeps256_mask
+      {Intrinsic::x86_avx512_mask_range_ps_512, 112696}, // __builtin_ia32_rangeps512_mask
+      {Intrinsic::x86_avx512_mask_range_sd, 112727}, // __builtin_ia32_rangesd128_round_mask
+      {Intrinsic::x86_avx512_mask_range_ss, 112764}, // __builtin_ia32_rangess128_round_mask
+      {Intrinsic::x86_avx512_rcp14_pd_128, 116162}, // __builtin_ia32_rcp14pd128_mask
+      {Intrinsic::x86_avx512_rcp14_pd_256, 116193}, // __builtin_ia32_rcp14pd256_mask
+      {Intrinsic::x86_avx512_rcp14_pd_512, 116224}, // __builtin_ia32_rcp14pd512_mask
+      {Intrinsic::x86_avx512_rcp14_ps_128, 116255}, // __builtin_ia32_rcp14ps128_mask
+      {Intrinsic::x86_avx512_rcp14_ps_256, 116286}, // __builtin_ia32_rcp14ps256_mask
+      {Intrinsic::x86_avx512_rcp14_ps_512, 116317}, // __builtin_ia32_rcp14ps512_mask
+      {Intrinsic::x86_avx512_rcp14_sd, 116348}, // __builtin_ia32_rcp14sd_mask
+      {Intrinsic::x86_avx512_rcp14_ss, 116376}, // __builtin_ia32_rcp14ss_mask
+      {Intrinsic::x86_avx512_rcp28_pd, 116404}, // __builtin_ia32_rcp28pd_mask
+      {Intrinsic::x86_avx512_rcp28_ps, 116432}, // __builtin_ia32_rcp28ps_mask
+      {Intrinsic::x86_avx512_rcp28_sd, 116460}, // __builtin_ia32_rcp28sd_round_mask
+      {Intrinsic::x86_avx512_rcp28_ss, 116494}, // __builtin_ia32_rcp28ss_round_mask
+      {Intrinsic::x86_sse_rcp_ps, 122360}, // __builtin_ia32_rcpps
+      {Intrinsic::x86_avx_rcp_ps_256, 102661}, // __builtin_ia32_rcpps256
+      {Intrinsic::x86_sse_rcp_ss, 122381}, // __builtin_ia32_rcpss
+      {Intrinsic::x86_rdfsbase_32, 121321}, // __builtin_ia32_rdfsbase32
+      {Intrinsic::x86_rdfsbase_64, 121347}, // __builtin_ia32_rdfsbase64
+      {Intrinsic::x86_rdgsbase_32, 121373}, // __builtin_ia32_rdgsbase32
+      {Intrinsic::x86_rdgsbase_64, 121399}, // __builtin_ia32_rdgsbase64
+      {Intrinsic::x86_rdpid, 121425}, // __builtin_ia32_rdpid
+      {Intrinsic::x86_rdpkru, 121446}, // __builtin_ia32_rdpkru
+      {Intrinsic::x86_rdpmc, 121468}, // __builtin_ia32_rdpmc
+      {Intrinsic::x86_rdsspd, 121489}, // __builtin_ia32_rdsspd
+      {Intrinsic::x86_rdsspq, 121511}, // __builtin_ia32_rdsspq
+      {Intrinsic::x86_rdtsc, 121533}, // __builtin_ia32_rdtsc
+      {Intrinsic::x86_flags_read_u32, 119126}, // __builtin_ia32_readeflags_u32
+      {Intrinsic::x86_flags_read_u64, 119156}, // __builtin_ia32_readeflags_u64
+      {Intrinsic::x86_avx512_mask_reduce_pd_128, 112801}, // __builtin_ia32_reducepd128_mask
+      {Intrinsic::x86_avx512_mask_reduce_pd_256, 112833}, // __builtin_ia32_reducepd256_mask
+      {Intrinsic::x86_avx512_mask_reduce_pd_512, 112865}, // __builtin_ia32_reducepd512_mask
+      {Intrinsic::x86_avx512_mask_reduce_ps_128, 112897}, // __builtin_ia32_reduceps128_mask
+      {Intrinsic::x86_avx512_mask_reduce_ps_256, 112929}, // __builtin_ia32_reduceps256_mask
+      {Intrinsic::x86_avx512_mask_reduce_ps_512, 112961}, // __builtin_ia32_reduceps512_mask
+      {Intrinsic::x86_avx512_mask_reduce_sd, 112993}, // __builtin_ia32_reducesd_mask
+      {Intrinsic::x86_avx512_mask_reduce_ss, 113022}, // __builtin_ia32_reducess_mask
+      {Intrinsic::x86_avx512_mask_rndscale_pd_128, 113051}, // __builtin_ia32_rndscalepd_128_mask
+      {Intrinsic::x86_avx512_mask_rndscale_pd_256, 113086}, // __builtin_ia32_rndscalepd_256_mask
+      {Intrinsic::x86_avx512_mask_rndscale_pd_512, 113121}, // __builtin_ia32_rndscalepd_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ps_128, 113152}, // __builtin_ia32_rndscaleps_128_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ps_256, 113187}, // __builtin_ia32_rndscaleps_256_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ps_512, 113222}, // __builtin_ia32_rndscaleps_mask
+      {Intrinsic::x86_avx512_mask_rndscale_sd, 113253}, // __builtin_ia32_rndscalesd_round_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ss, 113290}, // __builtin_ia32_rndscaless_round_mask
+      {Intrinsic::x86_sse41_round_pd, 124548}, // __builtin_ia32_roundpd
+      {Intrinsic::x86_avx_round_pd_256, 102685}, // __builtin_ia32_roundpd256
+      {Intrinsic::x86_sse41_round_ps, 124571}, // __builtin_ia32_roundps
+      {Intrinsic::x86_avx_round_ps_256, 102711}, // __builtin_ia32_roundps256
+      {Intrinsic::x86_sse41_round_sd, 124594}, // __builtin_ia32_roundsd
+      {Intrinsic::x86_sse41_round_ss, 124617}, // __builtin_ia32_roundss
+      {Intrinsic::x86_avx512_rsqrt14_pd_128, 116528}, // __builtin_ia32_rsqrt14pd128_mask
+      {Intrinsic::x86_avx512_rsqrt14_pd_256, 116561}, // __builtin_ia32_rsqrt14pd256_mask
+      {Intrinsic::x86_avx512_rsqrt14_pd_512, 116594}, // __builtin_ia32_rsqrt14pd512_mask
+      {Intrinsic::x86_avx512_rsqrt14_ps_128, 116627}, // __builtin_ia32_rsqrt14ps128_mask
+      {Intrinsic::x86_avx512_rsqrt14_ps_256, 116660}, // __builtin_ia32_rsqrt14ps256_mask
+      {Intrinsic::x86_avx512_rsqrt14_ps_512, 116693}, // __builtin_ia32_rsqrt14ps512_mask
+      {Intrinsic::x86_avx512_rsqrt14_sd, 116726}, // __builtin_ia32_rsqrt14sd_mask
+      {Intrinsic::x86_avx512_rsqrt14_ss, 116756}, // __builtin_ia32_rsqrt14ss_mask
+      {Intrinsic::x86_avx512_rsqrt28_pd, 116786}, // __builtin_ia32_rsqrt28pd_mask
+      {Intrinsic::x86_avx512_rsqrt28_ps, 116816}, // __builtin_ia32_rsqrt28ps_mask
+      {Intrinsic::x86_avx512_rsqrt28_sd, 116846}, // __builtin_ia32_rsqrt28sd_round_mask
+      {Intrinsic::x86_avx512_rsqrt28_ss, 116882}, // __builtin_ia32_rsqrt28ss_round_mask
+      {Intrinsic::x86_sse_rsqrt_ps, 122402}, // __builtin_ia32_rsqrtps
+      {Intrinsic::x86_avx_rsqrt_ps_256, 102737}, // __builtin_ia32_rsqrtps256
+      {Intrinsic::x86_sse_rsqrt_ss, 122425}, // __builtin_ia32_rsqrtss
+      {Intrinsic::x86_rstorssp, 121554}, // __builtin_ia32_rstorssp
+      {Intrinsic::x86_saveprevssp, 121578}, // __builtin_ia32_saveprevssp
+      {Intrinsic::x86_avx512_mask_scalef_pd_128, 113327}, // __builtin_ia32_scalefpd128_mask
+      {Intrinsic::x86_avx512_mask_scalef_pd_256, 113359}, // __builtin_ia32_scalefpd256_mask
+      {Intrinsic::x86_avx512_mask_scalef_pd_512, 113391}, // __builtin_ia32_scalefpd512_mask
+      {Intrinsic::x86_avx512_mask_scalef_ps_128, 113423}, // __builtin_ia32_scalefps128_mask
+      {Intrinsic::x86_avx512_mask_scalef_ps_256, 113455}, // __builtin_ia32_scalefps256_mask
+      {Intrinsic::x86_avx512_mask_scalef_ps_512, 113487}, // __builtin_ia32_scalefps512_mask
+      {Intrinsic::x86_avx512_mask_scalef_sd, 113519}, // __builtin_ia32_scalefsd_round_mask
+      {Intrinsic::x86_avx512_mask_scalef_ss, 113554}, // __builtin_ia32_scalefss_round_mask
+      {Intrinsic::x86_avx512_scatterpf_dpd_512, 116918}, // __builtin_ia32_scatterpfdpd
+      {Intrinsic::x86_avx512_scatterpf_dps_512, 116946}, // __builtin_ia32_scatterpfdps
+      {Intrinsic::x86_avx512_scatterpf_qpd_512, 116974}, // __builtin_ia32_scatterpfqpd
+      {Intrinsic::x86_avx512_scatterpf_qps_512, 117002}, // __builtin_ia32_scatterpfqps
+      {Intrinsic::x86_setssbsy, 121605}, // __builtin_ia32_setssbsy
+      {Intrinsic::x86_sse_sfence, 122448}, // __builtin_ia32_sfence
+      {Intrinsic::x86_sha1msg1, 121629}, // __builtin_ia32_sha1msg1
+      {Intrinsic::x86_sha1msg2, 121653}, // __builtin_ia32_sha1msg2
+      {Intrinsic::x86_sha1nexte, 121677}, // __builtin_ia32_sha1nexte
+      {Intrinsic::x86_sha1rnds4, 121702}, // __builtin_ia32_sha1rnds4
+      {Intrinsic::x86_sha256msg1, 121727}, // __builtin_ia32_sha256msg1
+      {Intrinsic::x86_sha256msg2, 121753}, // __builtin_ia32_sha256msg2
+      {Intrinsic::x86_sha256rnds2, 121779}, // __builtin_ia32_sha256rnds2
+      {Intrinsic::x86_slwpcb, 121806}, // __builtin_ia32_slwpcb
+      {Intrinsic::x86_avx512_sub_pd_512, 117030}, // __builtin_ia32_subpd512
+      {Intrinsic::x86_avx512_sub_ps_512, 117054}, // __builtin_ia32_subps512
+      {Intrinsic::x86_avx512_mask_sub_sd_round, 113589}, // __builtin_ia32_subsd_round_mask
+      {Intrinsic::x86_avx512_mask_sub_ss_round, 113621}, // __builtin_ia32_subss_round_mask
+      {Intrinsic::x86_tpause, 125917}, // __builtin_ia32_tpause
+      {Intrinsic::x86_sse_ucomieq_ss, 122470}, // __builtin_ia32_ucomieq
+      {Intrinsic::x86_sse_ucomige_ss, 122493}, // __builtin_ia32_ucomige
+      {Intrinsic::x86_sse_ucomigt_ss, 122516}, // __builtin_ia32_ucomigt
+      {Intrinsic::x86_sse_ucomile_ss, 122539}, // __builtin_ia32_ucomile
+      {Intrinsic::x86_sse_ucomilt_ss, 122562}, // __builtin_ia32_ucomilt
+      {Intrinsic::x86_sse_ucomineq_ss, 122585}, // __builtin_ia32_ucomineq
+      {Intrinsic::x86_sse2_ucomieq_sd, 123895}, // __builtin_ia32_ucomisdeq
+      {Intrinsic::x86_sse2_ucomige_sd, 123920}, // __builtin_ia32_ucomisdge
+      {Intrinsic::x86_sse2_ucomigt_sd, 123945}, // __builtin_ia32_ucomisdgt
+      {Intrinsic::x86_sse2_ucomile_sd, 123970}, // __builtin_ia32_ucomisdle
+      {Intrinsic::x86_sse2_ucomilt_sd, 123995}, // __builtin_ia32_ucomisdlt
+      {Intrinsic::x86_sse2_ucomineq_sd, 124020}, // __builtin_ia32_ucomisdneq
+      {Intrinsic::x86_umonitor, 125939}, // __builtin_ia32_umonitor
+      {Intrinsic::x86_umwait, 125963}, // __builtin_ia32_umwait
+      {Intrinsic::x86_avx512_vcomi_sd, 117078}, // __builtin_ia32_vcomisd
+      {Intrinsic::x86_avx512_vcomi_ss, 117101}, // __builtin_ia32_vcomiss
+      {Intrinsic::x86_vcvtph2ps_128, 125985}, // __builtin_ia32_vcvtph2ps
+      {Intrinsic::x86_vcvtph2ps_256, 126010}, // __builtin_ia32_vcvtph2ps256
+      {Intrinsic::x86_avx512_mask_vcvtph2ps_256, 113683}, // __builtin_ia32_vcvtph2ps256_mask
+      {Intrinsic::x86_avx512_mask_vcvtph2ps_512, 113716}, // __builtin_ia32_vcvtph2ps512_mask
+      {Intrinsic::x86_avx512_mask_vcvtph2ps_128, 113653}, // __builtin_ia32_vcvtph2ps_mask
+      {Intrinsic::x86_vcvtps2ph_128, 126038}, // __builtin_ia32_vcvtps2ph
+      {Intrinsic::x86_vcvtps2ph_256, 126063}, // __builtin_ia32_vcvtps2ph256
+      {Intrinsic::x86_avx512_mask_vcvtps2ph_256, 113779}, // __builtin_ia32_vcvtps2ph256_mask
+      {Intrinsic::x86_avx512_mask_vcvtps2ph_512, 113812}, // __builtin_ia32_vcvtps2ph512_mask
+      {Intrinsic::x86_avx512_mask_vcvtps2ph_128, 113749}, // __builtin_ia32_vcvtps2ph_mask
+      {Intrinsic::x86_avx512_vcvtsd2si32, 117124}, // __builtin_ia32_vcvtsd2si32
+      {Intrinsic::x86_avx512_vcvtsd2si64, 117151}, // __builtin_ia32_vcvtsd2si64
+      {Intrinsic::x86_avx512_vcvtsd2usi32, 117178}, // __builtin_ia32_vcvtsd2usi32
+      {Intrinsic::x86_avx512_vcvtsd2usi64, 117206}, // __builtin_ia32_vcvtsd2usi64
+      {Intrinsic::x86_avx512_vcvtss2si32, 117234}, // __builtin_ia32_vcvtss2si32
+      {Intrinsic::x86_avx512_vcvtss2si64, 117261}, // __builtin_ia32_vcvtss2si64
+      {Intrinsic::x86_avx512_vcvtss2usi32, 117288}, // __builtin_ia32_vcvtss2usi32
+      {Intrinsic::x86_avx512_vcvtss2usi64, 117316}, // __builtin_ia32_vcvtss2usi64
+      {Intrinsic::x86_avx512_cvttsd2si, 105724}, // __builtin_ia32_vcvttsd2si32
+      {Intrinsic::x86_avx512_cvttsd2si64, 105752}, // __builtin_ia32_vcvttsd2si64
+      {Intrinsic::x86_avx512_cvttsd2usi, 105780}, // __builtin_ia32_vcvttsd2usi32
+      {Intrinsic::x86_avx512_cvttsd2usi64, 105809}, // __builtin_ia32_vcvttsd2usi64
+      {Intrinsic::x86_avx512_cvttss2si, 105838}, // __builtin_ia32_vcvttss2si32
+      {Intrinsic::x86_avx512_cvttss2si64, 105866}, // __builtin_ia32_vcvttss2si64
+      {Intrinsic::x86_avx512_cvttss2usi, 105894}, // __builtin_ia32_vcvttss2usi32
+      {Intrinsic::x86_avx512_cvttss2usi64, 105923}, // __builtin_ia32_vcvttss2usi64
+      {Intrinsic::x86_mmx_pextr_w, 120106}, // __builtin_ia32_vec_ext_v4hi
+      {Intrinsic::x86_mmx_pinsr_w, 120134}, // __builtin_ia32_vec_set_v4hi
+      {Intrinsic::x86_xop_vfrcz_pd, 126734}, // __builtin_ia32_vfrczpd
+      {Intrinsic::x86_xop_vfrcz_pd_256, 126757}, // __builtin_ia32_vfrczpd256
+      {Intrinsic::x86_xop_vfrcz_ps, 126783}, // __builtin_ia32_vfrczps
+      {Intrinsic::x86_xop_vfrcz_ps_256, 126806}, // __builtin_ia32_vfrczps256
+      {Intrinsic::x86_xop_vfrcz_sd, 126832}, // __builtin_ia32_vfrczsd
+      {Intrinsic::x86_xop_vfrcz_ss, 126855}, // __builtin_ia32_vfrczss
+      {Intrinsic::x86_vgf2p8affineinvqb_128, 126091}, // __builtin_ia32_vgf2p8affineinvqb_v16qi
+      {Intrinsic::x86_vgf2p8affineinvqb_256, 126130}, // __builtin_ia32_vgf2p8affineinvqb_v32qi
+      {Intrinsic::x86_vgf2p8affineinvqb_512, 126169}, // __builtin_ia32_vgf2p8affineinvqb_v64qi
+      {Intrinsic::x86_vgf2p8affineqb_128, 126208}, // __builtin_ia32_vgf2p8affineqb_v16qi
+      {Intrinsic::x86_vgf2p8affineqb_256, 126244}, // __builtin_ia32_vgf2p8affineqb_v32qi
+      {Intrinsic::x86_vgf2p8affineqb_512, 126280}, // __builtin_ia32_vgf2p8affineqb_v64qi
+      {Intrinsic::x86_vgf2p8mulb_128, 126316}, // __builtin_ia32_vgf2p8mulb_v16qi
+      {Intrinsic::x86_vgf2p8mulb_256, 126348}, // __builtin_ia32_vgf2p8mulb_v32qi
+      {Intrinsic::x86_vgf2p8mulb_512, 126380}, // __builtin_ia32_vgf2p8mulb_v64qi
+      {Intrinsic::x86_avx512_conflict_q_128, 105550}, // __builtin_ia32_vpconflictdi_128
+      {Intrinsic::x86_avx512_conflict_q_256, 105582}, // __builtin_ia32_vpconflictdi_256
+      {Intrinsic::x86_avx512_conflict_q_512, 105614}, // __builtin_ia32_vpconflictdi_512
+      {Intrinsic::x86_avx512_conflict_d_128, 105454}, // __builtin_ia32_vpconflictsi_128
+      {Intrinsic::x86_avx512_conflict_d_256, 105486}, // __builtin_ia32_vpconflictsi_256
+      {Intrinsic::x86_avx512_conflict_d_512, 105518}, // __builtin_ia32_vpconflictsi_512
+      {Intrinsic::x86_avx512_vpdpbusd_128, 117344}, // __builtin_ia32_vpdpbusd128
+      {Intrinsic::x86_avx512_vpdpbusd_256, 117371}, // __builtin_ia32_vpdpbusd256
+      {Intrinsic::x86_avx512_vpdpbusd_512, 117398}, // __builtin_ia32_vpdpbusd512
+      {Intrinsic::x86_avx512_vpdpbusds_128, 117425}, // __builtin_ia32_vpdpbusds128
+      {Intrinsic::x86_avx512_vpdpbusds_256, 117453}, // __builtin_ia32_vpdpbusds256
+      {Intrinsic::x86_avx512_vpdpbusds_512, 117481}, // __builtin_ia32_vpdpbusds512
+      {Intrinsic::x86_avx512_vpdpwssd_128, 117509}, // __builtin_ia32_vpdpwssd128
+      {Intrinsic::x86_avx512_vpdpwssd_256, 117536}, // __builtin_ia32_vpdpwssd256
+      {Intrinsic::x86_avx512_vpdpwssd_512, 117563}, // __builtin_ia32_vpdpwssd512
+      {Intrinsic::x86_avx512_vpdpwssds_128, 117590}, // __builtin_ia32_vpdpwssds128
+      {Intrinsic::x86_avx512_vpdpwssds_256, 117618}, // __builtin_ia32_vpdpwssds256
+      {Intrinsic::x86_avx512_vpdpwssds_512, 117646}, // __builtin_ia32_vpdpwssds512
+      {Intrinsic::x86_avx512_vpermi2var_d_128, 117674}, // __builtin_ia32_vpermi2vard128
+      {Intrinsic::x86_avx512_vpermi2var_d_256, 117704}, // __builtin_ia32_vpermi2vard256
+      {Intrinsic::x86_avx512_vpermi2var_d_512, 117734}, // __builtin_ia32_vpermi2vard512
+      {Intrinsic::x86_avx512_vpermi2var_hi_128, 117764}, // __builtin_ia32_vpermi2varhi128
+      {Intrinsic::x86_avx512_vpermi2var_hi_256, 117795}, // __builtin_ia32_vpermi2varhi256
+      {Intrinsic::x86_avx512_vpermi2var_hi_512, 117826}, // __builtin_ia32_vpermi2varhi512
+      {Intrinsic::x86_avx512_vpermi2var_pd_128, 117857}, // __builtin_ia32_vpermi2varpd128
+      {Intrinsic::x86_avx512_vpermi2var_pd_256, 117888}, // __builtin_ia32_vpermi2varpd256
+      {Intrinsic::x86_avx512_vpermi2var_pd_512, 117919}, // __builtin_ia32_vpermi2varpd512
+      {Intrinsic::x86_avx512_vpermi2var_ps_128, 117950}, // __builtin_ia32_vpermi2varps128
+      {Intrinsic::x86_avx512_vpermi2var_ps_256, 117981}, // __builtin_ia32_vpermi2varps256
+      {Intrinsic::x86_avx512_vpermi2var_ps_512, 118012}, // __builtin_ia32_vpermi2varps512
+      {Intrinsic::x86_avx512_vpermi2var_q_128, 118043}, // __builtin_ia32_vpermi2varq128
+      {Intrinsic::x86_avx512_vpermi2var_q_256, 118073}, // __builtin_ia32_vpermi2varq256
+      {Intrinsic::x86_avx512_vpermi2var_q_512, 118103}, // __builtin_ia32_vpermi2varq512
+      {Intrinsic::x86_avx512_vpermi2var_qi_128, 118133}, // __builtin_ia32_vpermi2varqi128
+      {Intrinsic::x86_avx512_vpermi2var_qi_256, 118164}, // __builtin_ia32_vpermi2varqi256
+      {Intrinsic::x86_avx512_vpermi2var_qi_512, 118195}, // __builtin_ia32_vpermi2varqi512
+      {Intrinsic::x86_xop_vpermil2pd, 126878}, // __builtin_ia32_vpermil2pd
+      {Intrinsic::x86_xop_vpermil2pd_256, 126904}, // __builtin_ia32_vpermil2pd256
+      {Intrinsic::x86_xop_vpermil2ps, 126933}, // __builtin_ia32_vpermil2ps
+      {Intrinsic::x86_xop_vpermil2ps_256, 126959}, // __builtin_ia32_vpermil2ps256
+      {Intrinsic::x86_avx_vpermilvar_pd, 102763}, // __builtin_ia32_vpermilvarpd
+      {Intrinsic::x86_avx_vpermilvar_pd_256, 102791}, // __builtin_ia32_vpermilvarpd256
+      {Intrinsic::x86_avx512_vpermilvar_pd_512, 118226}, // __builtin_ia32_vpermilvarpd512
+      {Intrinsic::x86_avx_vpermilvar_ps, 102822}, // __builtin_ia32_vpermilvarps
+      {Intrinsic::x86_avx_vpermilvar_ps_256, 102850}, // __builtin_ia32_vpermilvarps256
+      {Intrinsic::x86_avx512_vpermilvar_ps_512, 118257}, // __builtin_ia32_vpermilvarps512
+      {Intrinsic::x86_xop_vphaddbd, 126988}, // __builtin_ia32_vphaddbd
+      {Intrinsic::x86_xop_vphaddbq, 127012}, // __builtin_ia32_vphaddbq
+      {Intrinsic::x86_xop_vphaddbw, 127036}, // __builtin_ia32_vphaddbw
+      {Intrinsic::x86_xop_vphadddq, 127060}, // __builtin_ia32_vphadddq
+      {Intrinsic::x86_xop_vphaddubd, 127084}, // __builtin_ia32_vphaddubd
+      {Intrinsic::x86_xop_vphaddubq, 127109}, // __builtin_ia32_vphaddubq
+      {Intrinsic::x86_xop_vphaddubw, 127134}, // __builtin_ia32_vphaddubw
+      {Intrinsic::x86_xop_vphaddudq, 127159}, // __builtin_ia32_vphaddudq
+      {Intrinsic::x86_xop_vphadduwd, 127184}, // __builtin_ia32_vphadduwd
+      {Intrinsic::x86_xop_vphadduwq, 127209}, // __builtin_ia32_vphadduwq
+      {Intrinsic::x86_xop_vphaddwd, 127234}, // __builtin_ia32_vphaddwd
+      {Intrinsic::x86_xop_vphaddwq, 127258}, // __builtin_ia32_vphaddwq
+      {Intrinsic::x86_xop_vphsubbw, 127282}, // __builtin_ia32_vphsubbw
+      {Intrinsic::x86_xop_vphsubdq, 127306}, // __builtin_ia32_vphsubdq
+      {Intrinsic::x86_xop_vphsubwd, 127330}, // __builtin_ia32_vphsubwd
+      {Intrinsic::x86_xop_vpmacsdd, 127354}, // __builtin_ia32_vpmacsdd
+      {Intrinsic::x86_xop_vpmacsdqh, 127378}, // __builtin_ia32_vpmacsdqh
+      {Intrinsic::x86_xop_vpmacsdql, 127403}, // __builtin_ia32_vpmacsdql
+      {Intrinsic::x86_xop_vpmacssdd, 127428}, // __builtin_ia32_vpmacssdd
+      {Intrinsic::x86_xop_vpmacssdqh, 127453}, // __builtin_ia32_vpmacssdqh
+      {Intrinsic::x86_xop_vpmacssdql, 127479}, // __builtin_ia32_vpmacssdql
+      {Intrinsic::x86_xop_vpmacsswd, 127505}, // __builtin_ia32_vpmacsswd
+      {Intrinsic::x86_xop_vpmacssww, 127530}, // __builtin_ia32_vpmacssww
+      {Intrinsic::x86_xop_vpmacswd, 127555}, // __builtin_ia32_vpmacswd
+      {Intrinsic::x86_xop_vpmacsww, 127579}, // __builtin_ia32_vpmacsww
+      {Intrinsic::x86_xop_vpmadcsswd, 127603}, // __builtin_ia32_vpmadcsswd
+      {Intrinsic::x86_xop_vpmadcswd, 127629}, // __builtin_ia32_vpmadcswd
+      {Intrinsic::x86_avx512_vpmadd52h_uq_128, 118288}, // __builtin_ia32_vpmadd52huq128
+      {Intrinsic::x86_avx512_vpmadd52h_uq_256, 118318}, // __builtin_ia32_vpmadd52huq256
+      {Intrinsic::x86_avx512_vpmadd52h_uq_512, 118348}, // __builtin_ia32_vpmadd52huq512
+      {Intrinsic::x86_avx512_vpmadd52l_uq_128, 118378}, // __builtin_ia32_vpmadd52luq128
+      {Intrinsic::x86_avx512_vpmadd52l_uq_256, 118408}, // __builtin_ia32_vpmadd52luq256
+      {Intrinsic::x86_avx512_vpmadd52l_uq_512, 118438}, // __builtin_ia32_vpmadd52luq512
+      {Intrinsic::x86_avx512_pmultishift_qb_128, 114887}, // __builtin_ia32_vpmultishiftqb128
+      {Intrinsic::x86_avx512_pmultishift_qb_256, 114920}, // __builtin_ia32_vpmultishiftqb256
+      {Intrinsic::x86_avx512_pmultishift_qb_512, 114953}, // __builtin_ia32_vpmultishiftqb512
+      {Intrinsic::x86_xop_vpperm, 127654}, // __builtin_ia32_vpperm
+      {Intrinsic::x86_xop_vpshab, 127676}, // __builtin_ia32_vpshab
+      {Intrinsic::x86_xop_vpshad, 127698}, // __builtin_ia32_vpshad
+      {Intrinsic::x86_xop_vpshaq, 127720}, // __builtin_ia32_vpshaq
+      {Intrinsic::x86_xop_vpshaw, 127742}, // __builtin_ia32_vpshaw
+      {Intrinsic::x86_xop_vpshlb, 127764}, // __builtin_ia32_vpshlb
+      {Intrinsic::x86_xop_vpshld, 127786}, // __builtin_ia32_vpshld
+      {Intrinsic::x86_xop_vpshlq, 127808}, // __builtin_ia32_vpshlq
+      {Intrinsic::x86_xop_vpshlw, 127830}, // __builtin_ia32_vpshlw
+      {Intrinsic::x86_avx_vtestc_pd, 102881}, // __builtin_ia32_vtestcpd
+      {Intrinsic::x86_avx_vtestc_pd_256, 102905}, // __builtin_ia32_vtestcpd256
+      {Intrinsic::x86_avx_vtestc_ps, 102932}, // __builtin_ia32_vtestcps
+      {Intrinsic::x86_avx_vtestc_ps_256, 102956}, // __builtin_ia32_vtestcps256
+      {Intrinsic::x86_avx_vtestnzc_pd, 102983}, // __builtin_ia32_vtestnzcpd
+      {Intrinsic::x86_avx_vtestnzc_pd_256, 103009}, // __builtin_ia32_vtestnzcpd256
+      {Intrinsic::x86_avx_vtestnzc_ps, 103038}, // __builtin_ia32_vtestnzcps
+      {Intrinsic::x86_avx_vtestnzc_ps_256, 103064}, // __builtin_ia32_vtestnzcps256
+      {Intrinsic::x86_avx_vtestz_pd, 103093}, // __builtin_ia32_vtestzpd
+      {Intrinsic::x86_avx_vtestz_pd_256, 103117}, // __builtin_ia32_vtestzpd256
+      {Intrinsic::x86_avx_vtestz_ps, 103144}, // __builtin_ia32_vtestzps
+      {Intrinsic::x86_avx_vtestz_ps_256, 103168}, // __builtin_ia32_vtestzps256
+      {Intrinsic::x86_avx_vzeroall, 103195}, // __builtin_ia32_vzeroall
+      {Intrinsic::x86_avx_vzeroupper, 103219}, // __builtin_ia32_vzeroupper
+      {Intrinsic::x86_wbinvd, 126412}, // __builtin_ia32_wbinvd
+      {Intrinsic::x86_wbnoinvd, 126434}, // __builtin_ia32_wbnoinvd
+      {Intrinsic::x86_wrfsbase_32, 126458}, // __builtin_ia32_wrfsbase32
+      {Intrinsic::x86_wrfsbase_64, 126484}, // __builtin_ia32_wrfsbase64
+      {Intrinsic::x86_wrgsbase_32, 126510}, // __builtin_ia32_wrgsbase32
+      {Intrinsic::x86_wrgsbase_64, 126536}, // __builtin_ia32_wrgsbase64
+      {Intrinsic::x86_flags_write_u32, 119186}, // __builtin_ia32_writeeflags_u32
+      {Intrinsic::x86_flags_write_u64, 119217}, // __builtin_ia32_writeeflags_u64
+      {Intrinsic::x86_wrpkru, 126562}, // __builtin_ia32_wrpkru
+      {Intrinsic::x86_wrssd, 126584}, // __builtin_ia32_wrssd
+      {Intrinsic::x86_wrssq, 126605}, // __builtin_ia32_wrssq
+      {Intrinsic::x86_wrussd, 126626}, // __builtin_ia32_wrussd
+      {Intrinsic::x86_wrussq, 126648}, // __builtin_ia32_wrussq
+      {Intrinsic::x86_xabort, 126670}, // __builtin_ia32_xabort
+      {Intrinsic::x86_xbegin, 126692}, // __builtin_ia32_xbegin
+      {Intrinsic::x86_xend, 126714}, // __builtin_ia32_xend
+      {Intrinsic::x86_xtest, 127852}, // __builtin_ia32_xtest
     };
     auto I = std::lower_bound(std::begin(x86Names),
                               std::end(x86Names),
@@ -29494,10 +31242,10 @@
   }
   if (TargetPrefix == "xcore") {
     static const BuiltinEntry xcoreNames[] = {
-      {Intrinsic::xcore_bitrev, 127043}, // __builtin_bitrev
-      {Intrinsic::xcore_getid, 127060}, // __builtin_getid
-      {Intrinsic::xcore_getps, 127076}, // __builtin_getps
-      {Intrinsic::xcore_setps, 127092}, // __builtin_setps
+      {Intrinsic::xcore_bitrev, 127873}, // __builtin_bitrev
+      {Intrinsic::xcore_getid, 127890}, // __builtin_getid
+      {Intrinsic::xcore_getps, 127906}, // __builtin_getps
+      {Intrinsic::xcore_setps, 127922}, // __builtin_setps
     };
     auto I = std::lower_bound(std::begin(xcoreNames),
                               std::end(xcoreNames),
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicInst.h b/linux-x64/clang/include/llvm/IR/IntrinsicInst.h
index 62bb4fa..438bdb2 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicInst.h
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicInst.h
@@ -208,26 +208,47 @@
   /// This is the common base class for constrained floating point intrinsics.
   class ConstrainedFPIntrinsic : public IntrinsicInst {
   public:
-    enum RoundingMode {
-      rmInvalid,
-      rmDynamic,
-      rmToNearest,
-      rmDownward,
-      rmUpward,
-      rmTowardZero
+    /// Specifies the rounding mode to be assumed. This is only used when
+    /// when constrained floating point is enabled. See the LLVM Language
+    /// Reference Manual for details.
+    enum RoundingMode : uint8_t {
+      rmDynamic,         ///< This corresponds to "fpround.dynamic".
+      rmToNearest,       ///< This corresponds to "fpround.tonearest".
+      rmDownward,        ///< This corresponds to "fpround.downward".
+      rmUpward,          ///< This corresponds to "fpround.upward".
+      rmTowardZero       ///< This corresponds to "fpround.tozero".
     };
 
-    enum ExceptionBehavior {
-      ebInvalid,
-      ebIgnore,
-      ebMayTrap,
-      ebStrict
+    /// Specifies the required exception behavior. This is only used when
+    /// when constrained floating point is used. See the LLVM Language
+    /// Reference Manual for details.
+    enum ExceptionBehavior : uint8_t {
+      ebIgnore,          ///< This corresponds to "fpexcept.ignore".
+      ebMayTrap,         ///< This corresponds to "fpexcept.maytrap".
+      ebStrict           ///< This corresponds to "fpexcept.strict".
     };
 
     bool isUnaryOp() const;
     bool isTernaryOp() const;
-    RoundingMode getRoundingMode() const;
-    ExceptionBehavior getExceptionBehavior() const;
+    Optional<RoundingMode> getRoundingMode() const;
+    Optional<ExceptionBehavior> getExceptionBehavior() const;
+
+    /// Returns a valid RoundingMode enumerator when given a string
+    /// that is valid as input in constrained intrinsic rounding mode
+    /// metadata.
+    static Optional<RoundingMode> StrToRoundingMode(StringRef);
+
+    /// For any RoundingMode enumerator, returns a string valid as input in
+    /// constrained intrinsic rounding mode metadata.
+    static Optional<StringRef> RoundingModeToStr(RoundingMode);
+
+    /// Returns a valid ExceptionBehavior enumerator when given a string
+    /// valid as input in constrained intrinsic exception behavior metadata.
+    static Optional<ExceptionBehavior> StrToExceptionBehavior(StringRef);
+
+    /// For any ExceptionBehavior enumerator, returns a string valid as 
+    /// input in constrained intrinsic exception behavior metadata.
+    static Optional<StringRef> ExceptionBehaviorToStr(ExceptionBehavior);
 
     // Methods for support type inquiry through isa, cast, and dyn_cast:
     static bool classof(const IntrinsicInst *I) {
@@ -238,6 +259,8 @@
       case Intrinsic::experimental_constrained_fdiv:
       case Intrinsic::experimental_constrained_frem:
       case Intrinsic::experimental_constrained_fma:
+      case Intrinsic::experimental_constrained_fptrunc:
+      case Intrinsic::experimental_constrained_fpext:
       case Intrinsic::experimental_constrained_sqrt:
       case Intrinsic::experimental_constrained_pow:
       case Intrinsic::experimental_constrained_powi:
@@ -265,6 +288,84 @@
     }
   };
 
+  /// This class represents an intrinsic that is based on a binary operation.
+  /// This includes op.with.overflow and saturating add/sub intrinsics.
+  class BinaryOpIntrinsic : public IntrinsicInst {
+  public:
+    static bool classof(const IntrinsicInst *I) {
+      switch (I->getIntrinsicID()) {
+      case Intrinsic::uadd_with_overflow:
+      case Intrinsic::sadd_with_overflow:
+      case Intrinsic::usub_with_overflow:
+      case Intrinsic::ssub_with_overflow:
+      case Intrinsic::umul_with_overflow:
+      case Intrinsic::smul_with_overflow:
+      case Intrinsic::uadd_sat:
+      case Intrinsic::sadd_sat:
+      case Intrinsic::usub_sat:
+      case Intrinsic::ssub_sat:
+        return true;
+      default:
+        return false;
+      }
+    }
+    static bool classof(const Value *V) {
+      return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+    }
+
+    Value *getLHS() const { return const_cast<Value*>(getArgOperand(0)); }
+    Value *getRHS() const { return const_cast<Value*>(getArgOperand(1)); }
+
+    /// Returns the binary operation underlying the intrinsic.
+    Instruction::BinaryOps getBinaryOp() const;
+
+    /// Whether the intrinsic is signed or unsigned.
+    bool isSigned() const;
+
+    /// Returns one of OBO::NoSignedWrap or OBO::NoUnsignedWrap.
+    unsigned getNoWrapKind() const;
+  };
+
+  /// Represents an op.with.overflow intrinsic.
+  class WithOverflowInst : public BinaryOpIntrinsic {
+  public:
+    static bool classof(const IntrinsicInst *I) {
+      switch (I->getIntrinsicID()) {
+      case Intrinsic::uadd_with_overflow:
+      case Intrinsic::sadd_with_overflow:
+      case Intrinsic::usub_with_overflow:
+      case Intrinsic::ssub_with_overflow:
+      case Intrinsic::umul_with_overflow:
+      case Intrinsic::smul_with_overflow:
+        return true;
+      default:
+        return false;
+      }
+    }
+    static bool classof(const Value *V) {
+      return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+    }
+  };
+
+  /// Represents a saturating add/sub intrinsic.
+  class SaturatingInst : public BinaryOpIntrinsic {
+  public:
+    static bool classof(const IntrinsicInst *I) {
+      switch (I->getIntrinsicID()) {
+      case Intrinsic::uadd_sat:
+      case Intrinsic::sadd_sat:
+      case Intrinsic::usub_sat:
+      case Intrinsic::ssub_sat:
+        return true;
+      default:
+        return false;
+      }
+    }
+    static bool classof(const Value *V) {
+      return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+    }
+  };
+
   /// Common base class for all memory intrinsics. Simply provides
   /// common methods.
   /// Written as CRTP to avoid a common base class amongst the
diff --git a/linux-x64/clang/include/llvm/IR/Intrinsics.h b/linux-x64/clang/include/llvm/IR/Intrinsics.h
index ad5e7d1..f38f920 100644
--- a/linux-x64/clang/include/llvm/IR/Intrinsics.h
+++ b/linux-x64/clang/include/llvm/IR/Intrinsics.h
@@ -99,7 +99,8 @@
       Void, VarArg, MMX, Token, Metadata, Half, Float, Double, Quad,
       Integer, Vector, Pointer, Struct,
       Argument, ExtendArgument, TruncArgument, HalfVecArgument,
-      SameVecWidthArgument, PtrToArgument, PtrToElt, VecOfAnyPtrsToElt
+      SameVecWidthArgument, PtrToArgument, PtrToElt, VecOfAnyPtrsToElt,
+      VecElementArgument
     } Kind;
 
     union {
@@ -116,20 +117,22 @@
       AK_AnyInteger,
       AK_AnyFloat,
       AK_AnyVector,
-      AK_AnyPointer
+      AK_AnyPointer,
+      AK_MatchType = 7
     };
 
     unsigned getArgumentNumber() const {
       assert(Kind == Argument || Kind == ExtendArgument ||
              Kind == TruncArgument || Kind == HalfVecArgument ||
              Kind == SameVecWidthArgument || Kind == PtrToArgument ||
-             Kind == PtrToElt);
+             Kind == PtrToElt || Kind == VecElementArgument);
       return Argument_Info >> 3;
     }
     ArgKind getArgumentKind() const {
       assert(Kind == Argument || Kind == ExtendArgument ||
              Kind == TruncArgument || Kind == HalfVecArgument ||
-             Kind == SameVecWidthArgument || Kind == PtrToArgument);
+             Kind == SameVecWidthArgument || Kind == PtrToArgument ||
+             Kind == VecElementArgument);
       return (ArgKind)(Argument_Info & 7);
     }
 
@@ -161,14 +164,21 @@
   /// of IITDescriptors.
   void getIntrinsicInfoTableEntries(ID id, SmallVectorImpl<IITDescriptor> &T);
 
-  /// Match the specified type (which comes from an intrinsic argument or return
-  /// value) with the type constraints specified by the .td file. If the given
-  /// type is an overloaded type it is pushed to the ArgTys vector.
+  enum MatchIntrinsicTypesResult {
+    MatchIntrinsicTypes_Match = 0,
+    MatchIntrinsicTypes_NoMatchRet = 1,
+    MatchIntrinsicTypes_NoMatchArg = 2,
+  };
+
+  /// Match the specified function type with the type constraints specified by
+  /// the .td file. If the given type is an overloaded type it is pushed to the
+  /// ArgTys vector.
   ///
   /// Returns false if the given type matches with the constraints, true
   /// otherwise.
-  bool matchIntrinsicType(Type *Ty, ArrayRef<IITDescriptor> &Infos,
-                          SmallVectorImpl<Type*> &ArgTys);
+  MatchIntrinsicTypesResult
+  matchIntrinsicSignature(FunctionType *FTy, ArrayRef<IITDescriptor> &Infos,
+                          SmallVectorImpl<Type *> &ArgTys);
 
   /// Verify if the intrinsic has variable arguments. This method is intended to
   /// be called after all the fixed arguments have been matched first.
diff --git a/linux-x64/clang/include/llvm/IR/Intrinsics.td b/linux-x64/clang/include/llvm/IR/Intrinsics.td
index 090ee60..62e9410 100644
--- a/linux-x64/clang/include/llvm/IR/Intrinsics.td
+++ b/linux-x64/clang/include/llvm/IR/Intrinsics.td
@@ -69,6 +69,11 @@
   int ArgNo = argNo;
 }
 
+// ImmArg - The specified argument must be an immediate.
+class ImmArg<int argNo> : IntrinsicProperty {
+  int ArgNo = argNo;
+}
+
 // ReadOnly - The specified argument pointer is not written to through the
 // pointer by the intrinsic.
 class ReadOnly<int argNo> : IntrinsicProperty {
@@ -168,6 +173,7 @@
 class LLVMPointerTo<int num> : LLVMMatchType<num>;
 class LLVMPointerToElt<int num> : LLVMMatchType<num>;
 class LLVMVectorOfAnyPointersToElt<int num> : LLVMMatchType<num>;
+class LLVMVectorElementType<int num> : LLVMMatchType<num>;
 
 // Match the type of another intrinsic parameter that is expected to be a
 // vector type, but change the element count to be half as many
@@ -397,9 +403,9 @@
 
 //===--------------------- Code Generator Intrinsics ----------------------===//
 //
-def int_returnaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>;
+def int_returnaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem, ImmArg<0>]>;
 def int_addressofreturnaddress : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
-def int_frameaddress  : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>;
+def int_frameaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem, ImmArg<0>]>;
 def int_sponentry  : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
 def int_read_register  : Intrinsic<[llvm_anyint_ty], [llvm_metadata_ty],
                                    [IntrReadMem], "llvm.read_register">;
@@ -417,7 +423,7 @@
 // to an escaped allocation indicated by the index.
 def int_localrecover : Intrinsic<[llvm_ptr_ty],
                                  [llvm_ptr_ty, llvm_ptr_ty, llvm_i32_ty],
-                                 [IntrNoMem]>;
+                                 [IntrNoMem, ImmArg<2>]>;
 
 // Given the frame pointer passed into an SEH filter function, returns a
 // pointer to the local variable area suitable for use with llvm.localrecover.
@@ -443,7 +449,8 @@
 // memory while not impeding optimization.
 def int_prefetch
     : Intrinsic<[], [ llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty ],
-                [ IntrInaccessibleMemOrArgMemOnly, ReadOnly<0>, NoCapture<0> ]>;
+                [ IntrInaccessibleMemOrArgMemOnly, ReadOnly<0>, NoCapture<0>,
+                  ImmArg<1>, ImmArg<2>]>;
 def int_pcmarker      : Intrinsic<[], [llvm_i32_ty]>;
 
 def int_readcyclecounter : Intrinsic<[llvm_i64_ty]>;
@@ -484,16 +491,17 @@
                              [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
                               llvm_i1_ty],
                             [IntrArgMemOnly, NoCapture<0>, NoCapture<1>,
-                             WriteOnly<0>, ReadOnly<1>]>;
+                             WriteOnly<0>, ReadOnly<1>, ImmArg<3>]>;
 def int_memmove : Intrinsic<[],
                             [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
                              llvm_i1_ty],
                             [IntrArgMemOnly, NoCapture<0>, NoCapture<1>,
-                             ReadOnly<1>]>;
+                             ReadOnly<1>, ImmArg<3>]>;
 def int_memset  : Intrinsic<[],
                             [llvm_anyptr_ty, llvm_i8_ty, llvm_anyint_ty,
                              llvm_i1_ty],
-                            [IntrArgMemOnly, NoCapture<0>, WriteOnly<0>]>;
+                            [IntrArgMemOnly, NoCapture<0>, WriteOnly<0>,
+                            ImmArg<3>]>;
 
 // FIXME: Add version of these floating point intrinsics which allow non-default
 // rounding modes and FP exception handling.
@@ -531,6 +539,11 @@
   def int_round : Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>]>;
   def int_canonicalize : Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>],
                                    [IntrNoMem]>;
+
+  def int_lround : Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty]>;
+  def int_llround : Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty]>;
+  def int_lrint : Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty]>;
+  def int_llrint : Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty]>;
 }
 
 def int_minnum : Intrinsic<[llvm_anyfloat_ty],
@@ -560,7 +573,7 @@
 def int_objectsize : Intrinsic<[llvm_anyint_ty],
                                [llvm_anyptr_ty, llvm_i1_ty,
                                 llvm_i1_ty, llvm_i1_ty],
-                               [IntrNoMem, IntrSpeculatable]>,
+                               [IntrNoMem, IntrSpeculatable, ImmArg<1>, ImmArg<2>, ImmArg<3>]>,
                                GCCBuiltin<"__builtin_object_size">;
 
 //===--------------- Constrained Floating Point Intrinsics ----------------===//
@@ -600,6 +613,15 @@
                                                       llvm_metadata_ty,
                                                       llvm_metadata_ty ]>;
 
+  def int_experimental_constrained_fptrunc : Intrinsic<[ llvm_anyfloat_ty ],
+                                                       [ llvm_anyfloat_ty,
+                                                         llvm_metadata_ty,
+                                                         llvm_metadata_ty ]>;
+
+  def int_experimental_constrained_fpext : Intrinsic<[ llvm_anyfloat_ty ],
+                                                     [ llvm_anyfloat_ty,
+                                                       llvm_metadata_ty ]>;
+
   // These intrinsics are sensitive to the rounding mode so we need constrained
   // versions of each of them.  When strict rounding and exception control are
   // not required the non-constrained versions of these intrinsics should be
@@ -681,14 +703,12 @@
                                                        llvm_metadata_ty,
                                                        llvm_metadata_ty ]>;
 }
-// FIXME: Add intrinsics for fcmp, fptrunc, fpext, fptoui and fptosi.
-// FIXME: Add intrinsics for fabs and copysign? 
-
+// FIXME: Add intrinsics for fcmp, fptoui and fptosi.
 
 //===------------------------- Expect Intrinsics --------------------------===//
 //
-def int_expect : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>,
-                                              LLVMMatchType<0>], [IntrNoMem]>;
+def int_expect : Intrinsic<[llvm_anyint_ty],
+  [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
 
 //===-------------------- Bit Manipulation Intrinsics ---------------------===//
 //
@@ -697,8 +717,6 @@
 let IntrProperties = [IntrNoMem, IntrSpeculatable] in {
   def int_bswap: Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>]>;
   def int_ctpop: Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>]>;
-  def int_ctlz : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, llvm_i1_ty]>;
-  def int_cttz : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, llvm_i1_ty]>;
   def int_bitreverse : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>]>;
   def int_fshl : Intrinsic<[llvm_anyint_ty],
       [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
@@ -706,6 +724,11 @@
       [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
 }
 
+let IntrProperties = [IntrNoMem, IntrSpeculatable, ImmArg<1>] in {
+  def int_ctlz : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, llvm_i1_ty]>;
+  def int_cttz : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, llvm_i1_ty]>;
+}
+
 //===------------------------ Debugger Intrinsics -------------------------===//
 //
 
@@ -848,27 +871,33 @@
 //
 def int_smul_fix : Intrinsic<[llvm_anyint_ty],
                              [LLVMMatchType<0>, LLVMMatchType<0>, llvm_i32_ty],
-                             [IntrNoMem, IntrSpeculatable, Commutative]>;
+                             [IntrNoMem, IntrSpeculatable, Commutative, ImmArg<2>]>;
 
 def int_umul_fix : Intrinsic<[llvm_anyint_ty],
                              [LLVMMatchType<0>, LLVMMatchType<0>, llvm_i32_ty],
-                             [IntrNoMem, IntrSpeculatable, Commutative]>;
+                             [IntrNoMem, IntrSpeculatable, Commutative, ImmArg<2>]>;
+
+//===------------------- Fixed Point Saturation Arithmetic Intrinsics ----------------===//
+//
+def int_smul_fix_sat : Intrinsic<[llvm_anyint_ty],
+                                 [LLVMMatchType<0>, LLVMMatchType<0>, llvm_i32_ty],
+                                 [IntrNoMem, IntrSpeculatable, Commutative, ImmArg<2>]>;
 
 //===------------------------- Memory Use Markers -------------------------===//
 //
 def int_lifetime_start  : Intrinsic<[],
                                     [llvm_i64_ty, llvm_anyptr_ty],
-                                    [IntrArgMemOnly, NoCapture<1>]>;
+                                    [IntrArgMemOnly, NoCapture<1>, ImmArg<0>]>;
 def int_lifetime_end    : Intrinsic<[],
                                     [llvm_i64_ty, llvm_anyptr_ty],
-                                    [IntrArgMemOnly, NoCapture<1>]>;
+                                    [IntrArgMemOnly, NoCapture<1>, ImmArg<0>]>;
 def int_invariant_start : Intrinsic<[llvm_descriptor_ty],
                                     [llvm_i64_ty, llvm_anyptr_ty],
-                                    [IntrArgMemOnly, NoCapture<1>]>;
+                                    [IntrArgMemOnly, NoCapture<1>, ImmArg<0>]>;
 def int_invariant_end   : Intrinsic<[],
                                     [llvm_descriptor_ty, llvm_i64_ty,
                                      llvm_anyptr_ty],
-                                    [IntrArgMemOnly, NoCapture<2>]>;
+                                    [IntrArgMemOnly, NoCapture<2>, ImmArg<1>]>;
 
 // launder.invariant.group can't be marked with 'readnone' (IntrNoMem),
 // because it would cause CSE of two barriers with the same argument.
@@ -915,13 +944,13 @@
                                [llvm_i64_ty, llvm_i32_ty,
                                 llvm_anyptr_ty, llvm_i32_ty,
                                 llvm_i32_ty, llvm_vararg_ty],
-                                [Throws]>;
+                                [Throws, ImmArg<0>, ImmArg<1>, ImmArg<3>, ImmArg<4>]>;
 
 def int_experimental_gc_result   : Intrinsic<[llvm_any_ty], [llvm_token_ty],
                                              [IntrReadMem]>;
 def int_experimental_gc_relocate : Intrinsic<[llvm_any_ty],
                                 [llvm_token_ty, llvm_i32_ty, llvm_i32_ty],
-                                [IntrReadMem]>;
+                                [IntrReadMem, ImmArg<1>, ImmArg<2>]>;
 
 //===------------------------ Coroutine Intrinsics ---------------===//
 // These are documented in docs/Coroutines.rst
@@ -1011,30 +1040,30 @@
 // Intrinsic to detect whether its argument is a constant.
 def int_is_constant : Intrinsic<[llvm_i1_ty], [llvm_any_ty], [IntrNoMem], "llvm.is.constant">;
 
-
 //===-------------------------- Masked Intrinsics -------------------------===//
 //
 def int_masked_store : Intrinsic<[], [llvm_anyvector_ty,
                                       LLVMAnyPointerType<LLVMMatchType<0>>,
                                       llvm_i32_ty,
                                       LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>],
-                                 [IntrArgMemOnly]>;
+                                 [IntrArgMemOnly, ImmArg<2>]>;
 
 def int_masked_load  : Intrinsic<[llvm_anyvector_ty],
                                  [LLVMAnyPointerType<LLVMMatchType<0>>, llvm_i32_ty,
                                   LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>, LLVMMatchType<0>],
-                                 [IntrReadMem, IntrArgMemOnly]>;
+                                 [IntrReadMem, IntrArgMemOnly, ImmArg<1>]>;
 
 def int_masked_gather: Intrinsic<[llvm_anyvector_ty],
                                  [LLVMVectorOfAnyPointersToElt<0>, llvm_i32_ty,
                                   LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
                                   LLVMMatchType<0>],
-                                 [IntrReadMem]>;
+                                 [IntrReadMem, ImmArg<1>]>;
 
 def int_masked_scatter: Intrinsic<[],
                                   [llvm_anyvector_ty,
                                    LLVMVectorOfAnyPointersToElt<0>, llvm_i32_ty,
-                                   LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>]>;
+                                   LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>],
+                                   [ImmArg<2>]>;
 
 def int_masked_expandload: Intrinsic<[llvm_anyvector_ty],
                                      [LLVMPointerToElt<0>,
@@ -1065,7 +1094,7 @@
                                  [IntrReadMem, IntrArgMemOnly]>;
 
 def int_hwasan_check_memaccess :
-  Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty, llvm_i32_ty], [IntrInaccessibleMemOnly]>;
+  Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty, llvm_i32_ty], [IntrInaccessibleMemOnly, ImmArg<2>]>;
 
 // Xray intrinsics
 //===----------------------------------------------------------------------===//
@@ -1090,7 +1119,7 @@
                 ],
                 [
                   IntrArgMemOnly, NoCapture<0>, NoCapture<1>, WriteOnly<0>,
-                  ReadOnly<1>
+                  ReadOnly<1>, ImmArg<3>
                 ]>;
 
 // @llvm.memmove.element.unordered.atomic.*(dest, src, length, elementsize)
@@ -1101,62 +1130,105 @@
                 ],
                 [
                   IntrArgMemOnly, NoCapture<0>, NoCapture<1>, WriteOnly<0>,
-                  ReadOnly<1>
+                  ReadOnly<1>, ImmArg<3>
                 ]>;
 
 // @llvm.memset.element.unordered.atomic.*(dest, value, length, elementsize)
 def int_memset_element_unordered_atomic
     : Intrinsic<[], [ llvm_anyptr_ty, llvm_i8_ty, llvm_anyint_ty, llvm_i32_ty ],
-                [ IntrArgMemOnly, NoCapture<0>, WriteOnly<0> ]>;
+                [ IntrArgMemOnly, NoCapture<0>, WriteOnly<0>, ImmArg<3> ]>;
 
 //===------------------------ Reduction Intrinsics ------------------------===//
 //
-def int_experimental_vector_reduce_fadd : Intrinsic<[llvm_anyfloat_ty],
-                                                    [llvm_anyfloat_ty,
-                                                     llvm_anyvector_ty],
-                                                    [IntrNoMem]>;
-def int_experimental_vector_reduce_fmul : Intrinsic<[llvm_anyfloat_ty],
-                                                    [llvm_anyfloat_ty,
-                                                     llvm_anyvector_ty],
-                                                    [IntrNoMem]>;
-def int_experimental_vector_reduce_add : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_v2_fadd : Intrinsic<[llvm_anyfloat_ty],
+                                                       [LLVMMatchType<0>,
+                                                        llvm_anyvector_ty],
+                                                       [IntrNoMem]>;
+def int_experimental_vector_reduce_v2_fmul : Intrinsic<[llvm_anyfloat_ty],
+                                                       [LLVMMatchType<0>,
+                                                        llvm_anyvector_ty],
+                                                       [IntrNoMem]>;
+def int_experimental_vector_reduce_add : Intrinsic<[LLVMVectorElementType<0>],
                                                    [llvm_anyvector_ty],
                                                    [IntrNoMem]>;
-def int_experimental_vector_reduce_mul : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_mul : Intrinsic<[LLVMVectorElementType<0>],
                                                    [llvm_anyvector_ty],
                                                    [IntrNoMem]>;
-def int_experimental_vector_reduce_and : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_and : Intrinsic<[LLVMVectorElementType<0>],
                                                    [llvm_anyvector_ty],
                                                    [IntrNoMem]>;
-def int_experimental_vector_reduce_or : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_or : Intrinsic<[LLVMVectorElementType<0>],
                                                   [llvm_anyvector_ty],
                                                   [IntrNoMem]>;
-def int_experimental_vector_reduce_xor : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_xor : Intrinsic<[LLVMVectorElementType<0>],
                                                    [llvm_anyvector_ty],
                                                    [IntrNoMem]>;
-def int_experimental_vector_reduce_smax : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_smax : Intrinsic<[LLVMVectorElementType<0>],
                                                     [llvm_anyvector_ty],
                                                     [IntrNoMem]>;
-def int_experimental_vector_reduce_smin : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_smin : Intrinsic<[LLVMVectorElementType<0>],
                                                     [llvm_anyvector_ty],
                                                     [IntrNoMem]>;
-def int_experimental_vector_reduce_umax : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_umax : Intrinsic<[LLVMVectorElementType<0>],
                                                     [llvm_anyvector_ty],
                                                     [IntrNoMem]>;
-def int_experimental_vector_reduce_umin : Intrinsic<[llvm_anyint_ty],
+def int_experimental_vector_reduce_umin : Intrinsic<[LLVMVectorElementType<0>],
                                                     [llvm_anyvector_ty],
                                                     [IntrNoMem]>;
-def int_experimental_vector_reduce_fmax : Intrinsic<[llvm_anyfloat_ty],
+def int_experimental_vector_reduce_fmax : Intrinsic<[LLVMVectorElementType<0>],
                                                     [llvm_anyvector_ty],
                                                     [IntrNoMem]>;
-def int_experimental_vector_reduce_fmin : Intrinsic<[llvm_anyfloat_ty],
+def int_experimental_vector_reduce_fmin : Intrinsic<[LLVMVectorElementType<0>],
                                                     [llvm_anyvector_ty],
                                                     [IntrNoMem]>;
 
+//===---------- Intrinsics to control hardware supported loops ----------===//
+
+// Specify that the value given is the number of iterations that the next loop
+// will execute.
+def int_set_loop_iterations :
+  Intrinsic<[], [llvm_anyint_ty], [IntrNoDuplicate]>;
+
+// Specify that the value given is the number of iterations that the next loop
+// will execute. Also test that the given count is not zero, allowing it to
+// control entry to a 'while' loop.
+def int_test_set_loop_iterations :
+  Intrinsic<[llvm_i1_ty], [llvm_anyint_ty], [IntrNoDuplicate]>;
+
+// Decrement loop counter by the given argument. Return false if the loop
+// should exit.
+def int_loop_decrement :
+  Intrinsic<[llvm_i1_ty], [llvm_anyint_ty], [IntrNoDuplicate]>;
+
+// Decrement the first operand (the loop counter) by the second operand (the
+// maximum number of elements processed in an iteration). Return the remaining
+// number of iterations still to be executed. This is effectively a sub which
+// can be used with a phi, icmp and br to control the number of iterations
+// executed, as usual.
+def int_loop_decrement_reg :
+  Intrinsic<[llvm_anyint_ty],
+            [llvm_anyint_ty, llvm_anyint_ty], [IntrNoDuplicate]>;
+
 //===----- Intrinsics that are used to provide predicate information -----===//
 
 def int_ssa_copy : Intrinsic<[llvm_any_ty], [LLVMMatchType<0>],
                              [IntrNoMem, Returned<0>]>;
+
+//===------- Intrinsics that are used to preserve debug information -------===//
+
+def int_preserve_array_access_index : Intrinsic<[llvm_anyptr_ty],
+                                                [llvm_anyptr_ty, llvm_i32_ty,
+                                                 llvm_i32_ty],
+                                                [IntrNoMem, ImmArg<1>, ImmArg<2>]>;
+def int_preserve_union_access_index : Intrinsic<[llvm_anyptr_ty],
+                                                [llvm_anyptr_ty, llvm_i32_ty],
+                                                [IntrNoMem, ImmArg<1>]>;
+def int_preserve_struct_access_index : Intrinsic<[llvm_anyptr_ty],
+                                                 [llvm_anyptr_ty, llvm_i32_ty,
+                                                  llvm_i32_ty],
+                                                 [IntrNoMem, ImmArg<1>,
+                                                  ImmArg<2>]>;
+
 //===----------------------------------------------------------------------===//
 // Target-specific intrinsics
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td b/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td
index 3abeff4..720a7bd 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td
@@ -289,6 +289,7 @@
 
   // Pairwise Add
   def int_aarch64_neon_addp : AdvSIMD_2VectorArg_Intrinsic;
+  def int_aarch64_neon_faddp : AdvSIMD_2VectorArg_Intrinsic;
 
   // Long Pairwise Add
   // FIXME: In theory, we shouldn't need intrinsics for saddlp or
@@ -461,12 +462,12 @@
                 [IntrArgMemOnly, NoCapture<2>]>;
 
   class AdvSIMD_2Vec_Load_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
+    : Intrinsic<[LLVMMatchType<0>, llvm_anyvector_ty],
                 [LLVMAnyPointerType<LLVMMatchType<0>>],
                 [IntrReadMem, IntrArgMemOnly]>;
   class AdvSIMD_2Vec_Load_Lane_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
-                [LLVMMatchType<0>, LLVMMatchType<0>,
+    : Intrinsic<[LLVMMatchType<0>, LLVMMatchType<0>],
+                [LLVMMatchType<0>, llvm_anyvector_ty,
                  llvm_i64_ty, llvm_anyptr_ty],
                 [IntrReadMem, IntrArgMemOnly]>;
   class AdvSIMD_2Vec_Store_Intrinsic
@@ -479,12 +480,12 @@
                 [IntrArgMemOnly, NoCapture<3>]>;
 
   class AdvSIMD_3Vec_Load_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>],
+    : Intrinsic<[LLVMMatchType<0>, LLVMMatchType<0>, llvm_anyvector_ty],
                 [LLVMAnyPointerType<LLVMMatchType<0>>],
                 [IntrReadMem, IntrArgMemOnly]>;
   class AdvSIMD_3Vec_Load_Lane_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>],
-                [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>,
+    : Intrinsic<[LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
+                [LLVMMatchType<0>, LLVMMatchType<0>, llvm_anyvector_ty,
                  llvm_i64_ty, llvm_anyptr_ty],
                 [IntrReadMem, IntrArgMemOnly]>;
   class AdvSIMD_3Vec_Store_Intrinsic
@@ -498,15 +499,15 @@
                 [IntrArgMemOnly, NoCapture<4>]>;
 
   class AdvSIMD_4Vec_Load_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
-                 LLVMMatchType<0>, LLVMMatchType<0>],
+    : Intrinsic<[LLVMMatchType<0>, LLVMMatchType<0>,
+                 LLVMMatchType<0>, llvm_anyvector_ty],
                 [LLVMAnyPointerType<LLVMMatchType<0>>],
                 [IntrReadMem, IntrArgMemOnly]>;
   class AdvSIMD_4Vec_Load_Lane_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
+    : Intrinsic<[LLVMMatchType<0>, LLVMMatchType<0>,
                  LLVMMatchType<0>, LLVMMatchType<0>],
                 [LLVMMatchType<0>, LLVMMatchType<0>,
-                 LLVMMatchType<0>, LLVMMatchType<0>,
+                 LLVMMatchType<0>, llvm_anyvector_ty,
                  llvm_i64_ty, llvm_anyptr_ty],
                 [IntrReadMem, IntrArgMemOnly]>;
   class AdvSIMD_4Vec_Store_Intrinsic
@@ -683,3 +684,20 @@
 def int_aarch64_crc32cx : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i64_ty],
     [IntrNoMem]>;
 }
+
+//===----------------------------------------------------------------------===//
+// Memory Tagging Extensions (MTE) Intrinsics
+let TargetPrefix = "aarch64" in {
+def int_aarch64_irg   : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_i64_ty],
+    [IntrInaccessibleMemOnly]>;
+def int_aarch64_addg  : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_i64_ty],
+    [IntrNoMem]>;
+def int_aarch64_gmi   : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty],
+    [IntrNoMem]>;
+def int_aarch64_ldg   : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_ptr_ty],
+    [IntrReadMem]>;
+def int_aarch64_stg   : Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty],
+    [IntrWriteMem]>;
+def int_aarch64_subp :  Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_ptr_ty],
+    [IntrNoMem]>;
+}
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td b/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td
index 151329c..f546f53 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td
@@ -177,7 +177,7 @@
 // This is always moved to the beginning of the basic block.
 def int_amdgcn_init_exec : Intrinsic<[],
   [llvm_i64_ty],      // 64-bit literal constant
-  [IntrConvergent]>;
+  [IntrConvergent, ImmArg<0>]>;
 
 // Set EXEC according to a thread count packed in an SGPR input:
 //    thread_count = (input >> bitoffset) & 0x7f;
@@ -187,6 +187,10 @@
    llvm_i32_ty],      // bit offset of the thread count
   [IntrConvergent]>;
 
+def int_amdgcn_wavefrontsize :
+  GCCBuiltin<"__builtin_amdgcn_wavefrontsize">,
+  Intrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable]>;
+
 
 //===----------------------------------------------------------------------===//
 // Instruction Intrinsics
@@ -195,9 +199,9 @@
 // The first parameter is s_sendmsg immediate (i16),
 // the second one is copied to m0
 def int_amdgcn_s_sendmsg : GCCBuiltin<"__builtin_amdgcn_s_sendmsg">,
-  Intrinsic <[], [llvm_i32_ty, llvm_i32_ty], []>;
+  Intrinsic <[], [llvm_i32_ty, llvm_i32_ty], [ImmArg<0>]>;
 def int_amdgcn_s_sendmsghalt : GCCBuiltin<"__builtin_amdgcn_s_sendmsghalt">,
-  Intrinsic <[], [llvm_i32_ty, llvm_i32_ty], []>;
+  Intrinsic <[], [llvm_i32_ty, llvm_i32_ty], [ImmArg<0>]>;
 
 def int_amdgcn_s_barrier : GCCBuiltin<"__builtin_amdgcn_s_barrier">,
   Intrinsic<[], [], [IntrConvergent]>;
@@ -206,7 +210,7 @@
   Intrinsic<[], [], [IntrConvergent]>;
 
 def int_amdgcn_s_waitcnt : GCCBuiltin<"__builtin_amdgcn_s_waitcnt">,
-  Intrinsic<[], [llvm_i32_ty], []>;
+  Intrinsic<[], [llvm_i32_ty], [ImmArg<0>]>;
 
 def int_amdgcn_div_scale : Intrinsic<
   // 1st parameter: Numerator
@@ -215,7 +219,7 @@
   //                second. (0 = first, 1 = second).
   [llvm_anyfloat_ty, llvm_i1_ty],
   [LLVMMatchType<0>, LLVMMatchType<0>, llvm_i1_ty],
-  [IntrNoMem, IntrSpeculatable]
+  [IntrNoMem, IntrSpeculatable, ImmArg<2>]
 >;
 
 def int_amdgcn_div_fmas : Intrinsic<[llvm_anyfloat_ty],
@@ -373,7 +377,7 @@
   llvm_i32_ty, // ordering
   llvm_i32_ty, // scope
   llvm_i1_ty], // isVolatile
-  [IntrArgMemOnly, NoCapture<0>], "",
+  [IntrArgMemOnly, NoCapture<0>, ImmArg<2>, ImmArg<3>, ImmArg<4>], "",
   [SDNPMemOperand]
 >;
 
@@ -388,9 +392,10 @@
     llvm_i32_ty, // ordering
     llvm_i32_ty, // scope
     llvm_i1_ty], // isVolatile
-    [IntrArgMemOnly, NoCapture<0>]
+    [IntrArgMemOnly, NoCapture<0>, ImmArg<2>, ImmArg<3>, ImmArg<4>]
 >;
 
+// FIXME: The m0 argument should be moved after the normal arguments
 class AMDGPUDSOrderedIntrinsic : Intrinsic<
   [llvm_i32_ty],
   // M0 = {hi16:address, lo16:waveID}. Allow passing M0 as a pointer, so that
@@ -401,16 +406,22 @@
    llvm_i32_ty, // scope
    llvm_i1_ty,  // isVolatile
    llvm_i32_ty, // ordered count index (OA index), also added to the address
+                // gfx10: bits 24-27 indicate the number of active threads/dwords
    llvm_i1_ty,  // wave release, usually set to 1
    llvm_i1_ty], // wave done, set to 1 for the last ordered instruction
-  [NoCapture<0>]
+  [NoCapture<0>,
+   ImmArg<2>, ImmArg<3>, ImmArg<4>,
+   ImmArg<5>, ImmArg<6>, ImmArg<7>
+  ]
 >;
 
 class AMDGPUDSAppendConsumedIntrinsic : Intrinsic<
   [llvm_i32_ty],
   [llvm_anyptr_ty, // LDS or GDS ptr
    llvm_i1_ty], // isVolatile
-   [IntrConvergent, IntrArgMemOnly, NoCapture<0>]
+   [IntrConvergent, IntrArgMemOnly, NoCapture<0>, ImmArg<1>],
+   "",
+   [SDNPMemOperand]
 >;
 
 def int_amdgcn_ds_ordered_add : AMDGPUDSOrderedIntrinsic;
@@ -470,9 +481,12 @@
 }
 
 // Represent texture/image types / dimensionality.
-class AMDGPUDimProps<string name, list<string> coord_names, list<string> slice_names> {
+class AMDGPUDimProps<bits<3> enc, string name, string asmsuffix,
+                     list<string> coord_names, list<string> slice_names> {
   AMDGPUDimProps Dim = !cast<AMDGPUDimProps>(NAME);
   string Name = name; // e.g. "2darraymsaa"
+  string AsmSuffix = asmsuffix; // e.g. 2D_MSAA_ARRAY (used in assembly strings)
+  bits<3> Encoding = enc;
   bit DA = 0; // DA bit in MIMG encoding
 
   list<AMDGPUArg> CoordSliceArgs =
@@ -488,17 +502,17 @@
   bits<8> NumGradients = !size(GradientArgs);
 }
 
-def AMDGPUDim1D : AMDGPUDimProps<"1d", ["s"], []>;
-def AMDGPUDim2D : AMDGPUDimProps<"2d", ["s", "t"], []>;
-def AMDGPUDim3D : AMDGPUDimProps<"3d", ["s", "t", "r"], []>;
+def AMDGPUDim1D : AMDGPUDimProps<0x0, "1d", "1D", ["s"], []>;
+def AMDGPUDim2D : AMDGPUDimProps<0x1, "2d", "2D", ["s", "t"], []>;
+def AMDGPUDim3D : AMDGPUDimProps<0x2, "3d", "3D", ["s", "t", "r"], []>;
 let DA = 1 in {
-  def AMDGPUDimCube : AMDGPUDimProps<"cube", ["s", "t"], ["face"]>;
-  def AMDGPUDim1DArray : AMDGPUDimProps<"1darray", ["s"], ["slice"]>;
-  def AMDGPUDim2DArray : AMDGPUDimProps<"2darray", ["s", "t"], ["slice"]>;
+  def AMDGPUDimCube : AMDGPUDimProps<0x3, "cube", "CUBE", ["s", "t"], ["face"]>;
+  def AMDGPUDim1DArray : AMDGPUDimProps<0x4, "1darray", "1D_ARRAY", ["s"], ["slice"]>;
+  def AMDGPUDim2DArray : AMDGPUDimProps<0x5, "2darray", "2D_ARRAY", ["s", "t"], ["slice"]>;
 }
-def AMDGPUDim2DMsaa : AMDGPUDimProps<"2dmsaa", ["s", "t"], ["fragid"]>;
+def AMDGPUDim2DMsaa : AMDGPUDimProps<0x6, "2dmsaa", "2D_MSAA", ["s", "t"], ["fragid"]>;
 let DA = 1 in {
-  def AMDGPUDim2DArrayMsaa : AMDGPUDimProps<"2darraymsaa", ["s", "t"], ["slice", "fragid"]>;
+  def AMDGPUDim2DArrayMsaa : AMDGPUDimProps<0x7, "2darraymsaa", "2D_MSAA_ARRAY", ["s", "t"], ["slice", "fragid"]>;
 }
 
 def AMDGPUDims {
@@ -649,6 +663,19 @@
   let LodClampMip = "mip";
 }
 
+// Helper class for figuring out image intrinsic argument indexes.
+class AMDGPUImageDimIntrinsicEval<AMDGPUDimProfile P_> {
+  int NumDataArgs = !size(P_.DataArgs);
+  int NumDmaskArgs = !if(P_.IsAtomic, 0, 1);
+  int NumVAddrArgs = !size(P_.AddrArgs);
+  int NumRSrcArgs = 1;
+  int NumSampArgs = !if(P_.IsSample, 2, 0);
+  int DmaskArgIndex = NumDataArgs;
+  int UnormArgIndex = !add(NumDataArgs, NumDmaskArgs, NumVAddrArgs, NumRSrcArgs, 1);
+  int TexFailCtrlArgIndex = !add(NumDataArgs, NumDmaskArgs, NumVAddrArgs, NumRSrcArgs, NumSampArgs);
+  int CachePolicyArgIndex = !add(TexFailCtrlArgIndex, 1);
+}
+
 // All dimension-aware intrinsics are derived from this class.
 class AMDGPUImageDimIntrinsic<AMDGPUDimProfile P_,
                               list<IntrinsicProperty> props,
@@ -662,8 +689,13 @@
       !if(P_.IsSample, [llvm_v4i32_ty,           // samp(SGPR)
                         llvm_i1_ty], []),        // unorm(imm)
       [llvm_i32_ty,                              // texfailctrl(imm; bit 0 = tfe, bit 1 = lwe)
-       llvm_i32_ty]),                            // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-      props, "", sdnodeprops>,
+       llvm_i32_ty]),                            // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc)
+     !listconcat(props,
+          !if(P_.IsAtomic, [], [ImmArg<AMDGPUImageDimIntrinsicEval<P_>.DmaskArgIndex>]),
+          !if(P_.IsSample, [ImmArg<AMDGPUImageDimIntrinsicEval<P_>.UnormArgIndex>], []),
+          [ImmArg<AMDGPUImageDimIntrinsicEval<P_>.TexFailCtrlArgIndex>,
+           ImmArg<AMDGPUImageDimIntrinsicEval<P_>.CachePolicyArgIndex>]),
+      "", sdnodeprops>,
   AMDGPURsrcIntrinsic<!add(!size(P_.DataArgs), !size(P_.AddrTypes),
                            !if(P_.IsAtomic, 0, 1)), 1> {
   AMDGPUDimProfile P = P_;
@@ -819,13 +851,13 @@
 defset list<AMDGPURsrcIntrinsic> AMDGPUBufferIntrinsics = {
 
 class AMDGPUBufferLoad : Intrinsic <
-  [llvm_anyfloat_ty],
+  [llvm_any_ty],
   [llvm_v4i32_ty,     // rsrc(SGPR)
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty,        // glc(imm)
    llvm_i1_ty],       // slc(imm)
-  [IntrReadMem], "", [SDNPMemOperand]>,
+  [IntrReadMem, ImmArg<3>, ImmArg<4>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<0>;
 def int_amdgcn_buffer_load_format : AMDGPUBufferLoad;
 def int_amdgcn_buffer_load : AMDGPUBufferLoad;
@@ -833,20 +865,20 @@
 def int_amdgcn_s_buffer_load : Intrinsic <
   [llvm_any_ty],
   [llvm_v4i32_ty,     // rsrc(SGPR)
-   llvm_i32_ty,       // byte offset(SGPR/VGPR/imm)
-   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc)
-  [IntrNoMem]>,
+   llvm_i32_ty,       // byte offset(SGPR/imm)
+   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 2 = dlc)
+  [IntrNoMem, ImmArg<2>]>,
   AMDGPURsrcIntrinsic<0>;
 
 class AMDGPUBufferStore : Intrinsic <
   [],
-  [llvm_anyfloat_ty,  // vdata(VGPR) -- can currently only select f32, v2f32, v4f32
+  [llvm_any_ty,       // vdata(VGPR)
    llvm_v4i32_ty,     // rsrc(SGPR)
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty,        // glc(imm)
    llvm_i1_ty],       // slc(imm)
-  [IntrWriteMem], "", [SDNPMemOperand]>,
+  [IntrWriteMem, ImmArg<4>, ImmArg<5>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1>;
 def int_amdgcn_buffer_store_format : AMDGPUBufferStore;
 def int_amdgcn_buffer_store : AMDGPUBufferStore;
@@ -863,8 +895,8 @@
   [llvm_v4i32_ty,     // rsrc(SGPR)
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
-   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-  [IntrReadMem], "", [SDNPMemOperand]>,
+   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+  [IntrReadMem, ImmArg<3>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<0>;
 def int_amdgcn_raw_buffer_load_format : AMDGPURawBufferLoad;
 def int_amdgcn_raw_buffer_load : AMDGPURawBufferLoad;
@@ -875,8 +907,8 @@
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
-   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-  [IntrReadMem], "", [SDNPMemOperand]>,
+   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+  [IntrReadMem, ImmArg<4>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<0>;
 def int_amdgcn_struct_buffer_load_format : AMDGPUStructBufferLoad;
 def int_amdgcn_struct_buffer_load : AMDGPUStructBufferLoad;
@@ -887,8 +919,8 @@
    llvm_v4i32_ty,     // rsrc(SGPR)
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
-   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-  [IntrWriteMem], "", [SDNPMemOperand]>,
+   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+  [IntrWriteMem, ImmArg<4>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1>;
 def int_amdgcn_raw_buffer_store_format : AMDGPURawBufferStore;
 def int_amdgcn_raw_buffer_store : AMDGPURawBufferStore;
@@ -900,8 +932,8 @@
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
-   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-  [IntrWriteMem], "", [SDNPMemOperand]>,
+   llvm_i32_ty],      // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+  [IntrWriteMem, ImmArg<5>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1>;
 def int_amdgcn_struct_buffer_store_format : AMDGPUStructBufferStore;
 def int_amdgcn_struct_buffer_store : AMDGPUStructBufferStore;
@@ -913,7 +945,7 @@
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
    llvm_i32_ty],      // cachepolicy(imm; bit 1 = slc)
-  [], "", [SDNPMemOperand]>,
+  [ImmArg<4>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1, 0>;
 def int_amdgcn_raw_buffer_atomic_swap : AMDGPURawBufferAtomic;
 def int_amdgcn_raw_buffer_atomic_add : AMDGPURawBufferAtomic;
@@ -933,7 +965,7 @@
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
    llvm_i32_ty],      // cachepolicy(imm; bit 1 = slc)
-  [], "", [SDNPMemOperand]>,
+  [ImmArg<5>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<2, 0>;
 
 class AMDGPUStructBufferAtomic : Intrinsic <
@@ -944,7 +976,7 @@
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
    llvm_i32_ty],      // cachepolicy(imm; bit 1 = slc)
-  [], "", [SDNPMemOperand]>,
+  [ImmArg<5>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1, 0>;
 def int_amdgcn_struct_buffer_atomic_swap : AMDGPUStructBufferAtomic;
 def int_amdgcn_struct_buffer_atomic_add : AMDGPUStructBufferAtomic;
@@ -965,7 +997,7 @@
    llvm_i32_ty,       // offset(VGPR/imm, included in bounds checking and swizzling)
    llvm_i32_ty,       // soffset(SGPR/imm, excluded from bounds checking and swizzling)
    llvm_i32_ty],      // cachepolicy(imm; bit 1 = slc)
-  [], "", [SDNPMemOperand]>,
+  [ImmArg<6>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<2, 0>;
 
 // Obsolescent tbuffer intrinsics.
@@ -980,7 +1012,8 @@
      llvm_i32_ty,     // nfmt(imm)
      llvm_i1_ty,     // glc(imm)
      llvm_i1_ty],    // slc(imm)
-    [IntrReadMem], "", [SDNPMemOperand]>,
+    [IntrReadMem, ImmArg<4>, ImmArg<5>, ImmArg<6>,
+     ImmArg<7>, ImmArg<8>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<0>;
 
 def int_amdgcn_tbuffer_store : Intrinsic <
@@ -995,7 +1028,8 @@
      llvm_i32_ty,    // nfmt(imm)
      llvm_i1_ty,     // glc(imm)
      llvm_i1_ty],    // slc(imm)
-    [IntrWriteMem], "", [SDNPMemOperand]>,
+    [IntrWriteMem, ImmArg<5>, ImmArg<6>, ImmArg<7>,
+     ImmArg<8>, ImmArg<9>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1>;
 
 // New tbuffer intrinsics, with:
@@ -1008,8 +1042,8 @@
      llvm_i32_ty,     // offset(VGPR/imm, included in bounds checking and swizzling)
      llvm_i32_ty,     // soffset(SGPR/imm, excluded from bounds checking and swizzling)
      llvm_i32_ty,     // format(imm; bits 3..0 = dfmt, bits 6..4 = nfmt)
-     llvm_i32_ty],    // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-    [IntrReadMem], "", [SDNPMemOperand]>,
+     llvm_i32_ty],    // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+    [IntrReadMem, ImmArg<3>, ImmArg<4>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<0>;
 
 def int_amdgcn_raw_tbuffer_store : Intrinsic <
@@ -1019,8 +1053,8 @@
      llvm_i32_ty,    // offset(VGPR/imm, included in bounds checking and swizzling)
      llvm_i32_ty,    // soffset(SGPR/imm, excluded from bounds checking and swizzling)
      llvm_i32_ty,    // format(imm; bits 3..0 = dfmt, bits 6..4 = nfmt)
-     llvm_i32_ty],   // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-    [IntrWriteMem], "", [SDNPMemOperand]>,
+     llvm_i32_ty],   // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+    [IntrWriteMem, ImmArg<4>, ImmArg<5>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1>;
 
 def int_amdgcn_struct_tbuffer_load : Intrinsic <
@@ -1030,8 +1064,8 @@
      llvm_i32_ty,     // offset(VGPR/imm, included in bounds checking and swizzling)
      llvm_i32_ty,     // soffset(SGPR/imm, excluded from bounds checking and swizzling)
      llvm_i32_ty,     // format(imm; bits 3..0 = dfmt, bits 6..4 = nfmt)
-     llvm_i32_ty],    // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-    [IntrReadMem], "", [SDNPMemOperand]>,
+     llvm_i32_ty],    // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+    [IntrReadMem, ImmArg<4>, ImmArg<5>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<0>;
 
 def int_amdgcn_struct_tbuffer_store : Intrinsic <
@@ -1042,18 +1076,18 @@
      llvm_i32_ty,    // offset(VGPR/imm, included in bounds checking and swizzling)
      llvm_i32_ty,    // soffset(SGPR/imm, excluded from bounds checking and swizzling)
      llvm_i32_ty,    // format(imm; bits 3..0 = dfmt, bits 6..4 = nfmt)
-     llvm_i32_ty],   // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
-    [IntrWriteMem], "", [SDNPMemOperand]>,
+     llvm_i32_ty],   // cachepolicy(imm; bit 0 = glc, bit 1 = slc, bit 2 = dlc on gfx10+)
+    [IntrWriteMem, ImmArg<5>, ImmArg<6>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1>;
 
 class AMDGPUBufferAtomic : Intrinsic <
-  [llvm_i32_ty],
-  [llvm_i32_ty,       // vdata(VGPR)
+  [llvm_anyint_ty],
+  [LLVMMatchType<0>,       // vdata(VGPR)
    llvm_v4i32_ty,     // rsrc(SGPR)
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty],       // slc(imm)
-  [], "", [SDNPMemOperand]>,
+  [ImmArg<4>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<1, 0>;
 def int_amdgcn_buffer_atomic_swap : AMDGPUBufferAtomic;
 def int_amdgcn_buffer_atomic_add : AMDGPUBufferAtomic;
@@ -1073,7 +1107,7 @@
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty],       // slc(imm)
-  [], "", [SDNPMemOperand]>,
+  [ImmArg<5>], "", [SDNPMemOperand]>,
   AMDGPURsrcIntrinsic<2, 0>;
 
 } // defset AMDGPUBufferIntrinsics
@@ -1090,7 +1124,7 @@
   llvm_i1_ty,        // done
   llvm_i1_ty         // vm
   ],
-  []
+  [ImmArg<0>, ImmArg<1>, ImmArg<6>, ImmArg<7>, IntrInaccessibleMemOnly]
 >;
 
 // exp with compr bit set.
@@ -1101,7 +1135,7 @@
   LLVMMatchType<0>,  // src1
   llvm_i1_ty,        // done
   llvm_i1_ty],       // vm
-  []
+  [ImmArg<0>, ImmArg<1>, ImmArg<4>, ImmArg<5>, IntrInaccessibleMemOnly]
 >;
 
 def int_amdgcn_buffer_wbinvl1_sc :
@@ -1118,27 +1152,27 @@
 
 def int_amdgcn_s_memtime :
   GCCBuiltin<"__builtin_amdgcn_s_memtime">,
-  Intrinsic<[llvm_i64_ty], [], [IntrReadMem]>;
+  Intrinsic<[llvm_i64_ty], []>;
 
 def int_amdgcn_s_sleep :
   GCCBuiltin<"__builtin_amdgcn_s_sleep">,
-  Intrinsic<[], [llvm_i32_ty], []> {
+  Intrinsic<[], [llvm_i32_ty], [ImmArg<0>]> {
 }
 
 def int_amdgcn_s_incperflevel :
   GCCBuiltin<"__builtin_amdgcn_s_incperflevel">,
-  Intrinsic<[], [llvm_i32_ty], []> {
+  Intrinsic<[], [llvm_i32_ty], [ImmArg<0>]> {
 }
 
 def int_amdgcn_s_decperflevel :
   GCCBuiltin<"__builtin_amdgcn_s_decperflevel">,
-  Intrinsic<[], [llvm_i32_ty], []> {
+  Intrinsic<[], [llvm_i32_ty], [ImmArg<0>]> {
 }
 
 def int_amdgcn_s_getreg :
   GCCBuiltin<"__builtin_amdgcn_s_getreg">,
   Intrinsic<[llvm_i32_ty], [llvm_i32_ty],
-  [IntrReadMem, IntrSpeculatable]
+  [IntrInaccessibleMemOnly, IntrReadMem, IntrSpeculatable, ImmArg<0>]
 >;
 
 // int_amdgcn_s_getpc is provided to allow a specific style of position
@@ -1208,7 +1242,8 @@
 // llvm.amdgcn.ds.swizzle src offset
 def int_amdgcn_ds_swizzle :
   GCCBuiltin<"__builtin_amdgcn_ds_swizzle">,
-  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem, IntrConvergent]>;
+  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
+            [IntrNoMem, IntrConvergent, ImmArg<1>]>;
 
 def int_amdgcn_ubfe : Intrinsic<[llvm_anyint_ty],
   [LLVMMatchType<0>, llvm_i32_ty, llvm_i32_ty],
@@ -1275,12 +1310,12 @@
 >;
 
 def int_amdgcn_icmp :
-  Intrinsic<[llvm_i64_ty], [llvm_anyint_ty, LLVMMatchType<0>, llvm_i32_ty],
-            [IntrNoMem, IntrConvergent]>;
+  Intrinsic<[llvm_anyint_ty], [llvm_anyint_ty, LLVMMatchType<1>, llvm_i32_ty],
+            [IntrNoMem, IntrConvergent, ImmArg<2>]>;
 
 def int_amdgcn_fcmp :
-  Intrinsic<[llvm_i64_ty], [llvm_anyfloat_ty, LLVMMatchType<0>, llvm_i32_ty],
-            [IntrNoMem, IntrConvergent]>;
+  Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty, LLVMMatchType<1>, llvm_i32_ty],
+            [IntrNoMem, IntrConvergent, ImmArg<2>]>;
 
 def int_amdgcn_readfirstlane :
   GCCBuiltin<"__builtin_amdgcn_readfirstlane">,
@@ -1315,6 +1350,65 @@
   [IntrNoMem, IntrSpeculatable]
 >;
 
+// llvm.amdgcn.ds.gws.init(i32 bar_val, i32 resource_id)
+//
+// bar_val is the total number of waves that will wait on this
+// barrier, minus 1.
+def int_amdgcn_ds_gws_init :
+  GCCBuiltin<"__builtin_amdgcn_ds_gws_init">,
+  Intrinsic<[],
+  [llvm_i32_ty, llvm_i32_ty],
+  [IntrConvergent, IntrWriteMem, IntrInaccessibleMemOnly], "",
+  [SDNPMemOperand]
+>;
+
+// llvm.amdgcn.ds.gws.barrier(i32 vsrc0, i32 resource_id)
+// bar_val is the total number of waves that will wait on this
+// barrier, minus 1.
+def int_amdgcn_ds_gws_barrier :
+  GCCBuiltin<"__builtin_amdgcn_ds_gws_barrier">,
+  Intrinsic<[],
+  [llvm_i32_ty, llvm_i32_ty],
+  [IntrConvergent, IntrInaccessibleMemOnly], "",
+  [SDNPMemOperand]
+>;
+
+// llvm.amdgcn.ds.gws.sema.v(i32 resource_id)
+def int_amdgcn_ds_gws_sema_v :
+  GCCBuiltin<"__builtin_amdgcn_ds_gws_sema_v">,
+  Intrinsic<[],
+  [llvm_i32_ty],
+  [IntrConvergent, IntrInaccessibleMemOnly], "",
+  [SDNPMemOperand]
+>;
+
+// llvm.amdgcn.ds.gws.sema.br(i32 vsrc, i32 resource_id)
+def int_amdgcn_ds_gws_sema_br :
+  GCCBuiltin<"__builtin_amdgcn_ds_gws_sema_br">,
+  Intrinsic<[],
+  [llvm_i32_ty, llvm_i32_ty],
+  [IntrConvergent, IntrInaccessibleMemOnly], "",
+  [SDNPMemOperand]
+>;
+
+// llvm.amdgcn.ds.gws.sema.p(i32 resource_id)
+def int_amdgcn_ds_gws_sema_p :
+  GCCBuiltin<"__builtin_amdgcn_ds_gws_sema_p">,
+  Intrinsic<[],
+  [llvm_i32_ty],
+  [IntrConvergent, IntrInaccessibleMemOnly], "",
+  [SDNPMemOperand]
+>;
+
+// llvm.amdgcn.ds.gws.sema.release.all(i32 resource_id)
+def int_amdgcn_ds_gws_sema_release_all :
+  GCCBuiltin<"__builtin_amdgcn_ds_gws_sema_release_all">,
+  Intrinsic<[],
+  [llvm_i32_ty],
+  [IntrConvergent, IntrInaccessibleMemOnly], "",
+  [SDNPMemOperand]
+>;
+
 
 // Copies the source value to the destination value, with the guarantee that
 // the source value is computed as if the entire program were executed in WQM.
@@ -1337,7 +1431,7 @@
 // enabled, with a few exceptions: - Phi nodes with require WWM return an
 // undefined value.
 def int_amdgcn_wwm : Intrinsic<[llvm_any_ty],
-  [LLVMMatchType<0>], [IntrNoMem, IntrSpeculatable]
+  [LLVMMatchType<0>], [IntrNoMem, IntrSpeculatable, IntrConvergent]
 >;
 
 // Given a value, copies it while setting all the inactive lanes to a given
@@ -1370,7 +1464,8 @@
 def int_amdgcn_mov_dpp :
   Intrinsic<[llvm_anyint_ty],
             [LLVMMatchType<0>, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-             llvm_i1_ty], [IntrNoMem, IntrConvergent]>;
+             llvm_i1_ty], [IntrNoMem, IntrConvergent, ImmArg<1>,
+                           ImmArg<2>, ImmArg<3>, ImmArg<4>]>;
 
 // llvm.amdgcn.update.dpp.i32 <old> <src> <dpp_ctrl> <row_mask> <bank_mask> <bound_ctrl>
 // Should be equivalent to:
@@ -1378,8 +1473,10 @@
 // v_mov_b32 <dest> <src> <dpp_ctrl> <row_mask> <bank_mask> <bound_ctrl>
 def int_amdgcn_update_dpp :
   Intrinsic<[llvm_anyint_ty],
-            [LLVMMatchType<0>, LLVMMatchType<0>, llvm_i32_ty, llvm_i32_ty,
-             llvm_i32_ty, llvm_i1_ty], [IntrNoMem, IntrConvergent]>;
+            [LLVMMatchType<0>, LLVMMatchType<0>, llvm_i32_ty,
+            llvm_i32_ty, llvm_i32_ty, llvm_i1_ty],
+             [IntrNoMem, IntrConvergent,
+              ImmArg<2>, ImmArg<3>, ImmArg<4>, ImmArg<5>]>;
 
 def int_amdgcn_s_dcache_wb :
   GCCBuiltin<"__builtin_amdgcn_s_dcache_wb">,
@@ -1391,7 +1488,7 @@
 
 def int_amdgcn_s_memrealtime :
   GCCBuiltin<"__builtin_amdgcn_s_memrealtime">,
-  Intrinsic<[llvm_i64_ty], [], [IntrReadMem]>;
+  Intrinsic<[llvm_i64_ty]>;
 
 // llvm.amdgcn.ds.permute <index> <src>
 def int_amdgcn_ds_permute :
@@ -1404,6 +1501,34 @@
   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem, IntrConvergent]>;
 
 //===----------------------------------------------------------------------===//
+// GFX10 Intrinsics
+//===----------------------------------------------------------------------===//
+
+// llvm.amdgcn.permlane16 <old> <src0> <src1> <src2> <fi> <bound_control>
+def int_amdgcn_permlane16 :
+  Intrinsic<[llvm_i32_ty],
+            [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i1_ty, llvm_i1_ty],
+            [IntrNoMem, IntrConvergent, ImmArg<4>, ImmArg<5>]>;
+
+// llvm.amdgcn.permlanex16 <old> <src0> <src1> <src2> <fi> <bound_control>
+def int_amdgcn_permlanex16 :
+  Intrinsic<[llvm_i32_ty],
+            [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i1_ty, llvm_i1_ty],
+            [IntrNoMem, IntrConvergent, ImmArg<4>, ImmArg<5>]>;
+
+// llvm.amdgcn.mov.dpp8.i32 <src> <sel>
+// <sel> is a 32-bit constant whose high 8 bits must be zero which selects
+// the lanes to read from.
+def int_amdgcn_mov_dpp8 :
+  Intrinsic<[llvm_anyint_ty],
+            [LLVMMatchType<0>, llvm_i32_ty],
+            [IntrNoMem, IntrConvergent, ImmArg<1>]>;
+
+def int_amdgcn_s_get_waveid_in_workgroup :
+  GCCBuiltin<"__builtin_amdgcn_s_get_waveid_in_workgroup">,
+  Intrinsic<[llvm_i32_ty], [], [IntrReadMem, IntrInaccessibleMemOnly]>;
+
+//===----------------------------------------------------------------------===//
 // Deep learning intrinsics.
 //===----------------------------------------------------------------------===//
 
@@ -1419,7 +1544,7 @@
       llvm_float_ty, // %c
       llvm_i1_ty     // %clamp
     ],
-    [IntrNoMem, IntrSpeculatable]
+    [IntrNoMem, IntrSpeculatable, ImmArg<3>]
   >;
 
 // i32 %r = llvm.amdgcn.sdot2(v2i16 %a, v2i16 %b, i32 %c, i1 %clamp)
@@ -1434,7 +1559,7 @@
       llvm_i32_ty,   // %c
       llvm_i1_ty     // %clamp
     ],
-    [IntrNoMem, IntrSpeculatable]
+    [IntrNoMem, IntrSpeculatable, ImmArg<3>]
   >;
 
 // u32 %r = llvm.amdgcn.udot2(v2u16 %a, v2u16 %b, u32 %c, i1 %clamp)
@@ -1449,7 +1574,7 @@
       llvm_i32_ty,   // %c
       llvm_i1_ty     // %clamp
     ],
-    [IntrNoMem, IntrSpeculatable]
+    [IntrNoMem, IntrSpeculatable, ImmArg<3>]
   >;
 
 // i32 %r = llvm.amdgcn.sdot4(v4i8 (as i32) %a, v4i8 (as i32) %b, i32 %c, i1 %clamp)
@@ -1464,7 +1589,7 @@
       llvm_i32_ty, // %c
       llvm_i1_ty   // %clamp
     ],
-    [IntrNoMem, IntrSpeculatable]
+    [IntrNoMem, IntrSpeculatable, ImmArg<3>]
   >;
 
 // u32 %r = llvm.amdgcn.udot4(v4u8 (as u32) %a, v4u8 (as u32) %b, u32 %c, i1 %clamp)
@@ -1479,7 +1604,7 @@
       llvm_i32_ty, // %c
       llvm_i1_ty   // %clamp
     ],
-    [IntrNoMem, IntrSpeculatable]
+    [IntrNoMem, IntrSpeculatable, ImmArg<3>]
   >;
 
 // i32 %r = llvm.amdgcn.sdot8(v8i4 (as i32) %a, v8i4 (as i32) %b, i32 %c, i1 %clamp)
@@ -1495,7 +1620,7 @@
       llvm_i32_ty, // %c
       llvm_i1_ty   // %clamp
     ],
-    [IntrNoMem, IntrSpeculatable]
+    [IntrNoMem, IntrSpeculatable, ImmArg<3>]
   >;
 
 // u32 %r = llvm.amdgcn.udot8(v8u4 (as u32) %a, v8u4 (as u32) %b, u32 %c, i1 %clamp)
@@ -1511,30 +1636,114 @@
       llvm_i32_ty, // %c
       llvm_i1_ty   // %clamp
     ],
-    [IntrNoMem, IntrSpeculatable]
+    [IntrNoMem, IntrSpeculatable, ImmArg<3>]
   >;
 
 //===----------------------------------------------------------------------===//
+// MI-100 intrinsics
+// ===----------------------------------------------------------------------===//
+// llvm.amdgcn.mfma.f32.* vdst, srcA, srcB, srcC, cbsz, abid, blgp
+def int_amdgcn_mfma_f32_32x32x1f32 : Intrinsic<[llvm_v32i32_ty],
+  [llvm_float_ty, llvm_float_ty, llvm_v32i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_16x16x1f32 : Intrinsic<[llvm_v16f32_ty],
+  [llvm_float_ty, llvm_float_ty, llvm_v16f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_4x4x1f32 : Intrinsic<[llvm_v4f32_ty],
+  [llvm_float_ty, llvm_float_ty, llvm_v4f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_32x32x2f32 : Intrinsic<[llvm_v16f32_ty],
+  [llvm_float_ty, llvm_float_ty, llvm_v16f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_16x16x4f32 : Intrinsic<[llvm_v4f32_ty],
+  [llvm_float_ty, llvm_float_ty, llvm_v4f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_32x32x4f16 : Intrinsic<[llvm_v32i32_ty],
+  [llvm_v4f16_ty, llvm_v4f16_ty, llvm_v32i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_16x16x4f16 : Intrinsic<[llvm_v16f32_ty],
+  [llvm_v4f16_ty, llvm_v4f16_ty, llvm_v16f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_4x4x4f16 : Intrinsic<[llvm_v4f32_ty],
+  [llvm_v4f16_ty, llvm_v4f16_ty, llvm_v4f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_32x32x8f16 : Intrinsic<[llvm_v16f32_ty],
+  [llvm_v4f16_ty, llvm_v4f16_ty, llvm_v16f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_16x16x16f16 : Intrinsic<[llvm_v4f32_ty],
+  [llvm_v4f16_ty, llvm_v4f16_ty, llvm_v4f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_i32_32x32x4i8 : Intrinsic<[llvm_v32i32_ty],
+  [llvm_i32_ty, llvm_i32_ty, llvm_v32i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_i32_16x16x4i8 : Intrinsic<[llvm_v16i32_ty],
+  [llvm_i32_ty, llvm_i32_ty, llvm_v16i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_i32_4x4x4i8 : Intrinsic<[llvm_v4i32_ty],
+  [llvm_i32_ty, llvm_i32_ty, llvm_v4i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_i32_32x32x8i8 : Intrinsic<[llvm_v16i32_ty],
+  [llvm_i32_ty, llvm_i32_ty, llvm_v16i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_i32_16x16x16i8 : Intrinsic<[llvm_v4i32_ty],
+  [llvm_i32_ty, llvm_i32_ty, llvm_v4i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_32x32x2bf16 : Intrinsic<[llvm_v32i32_ty],
+  [llvm_v2i16_ty, llvm_v2i16_ty, llvm_v32i32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_16x16x2bf16 : Intrinsic<[llvm_v16f32_ty],
+  [llvm_v2i16_ty, llvm_v2i16_ty, llvm_v16f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_4x4x2bf16 : Intrinsic<[llvm_v4f32_ty],
+  [llvm_v2i16_ty, llvm_v2i16_ty, llvm_v4f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_32x32x4bf16 : Intrinsic<[llvm_v16f32_ty],
+  [llvm_v2i16_ty, llvm_v2i16_ty, llvm_v16f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+def int_amdgcn_mfma_f32_16x16x8bf16 : Intrinsic<[llvm_v4f32_ty],
+  [llvm_v2i16_ty, llvm_v2i16_ty, llvm_v4f32_ty,
+   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoMem]>;
+
+//===----------------------------------------------------------------------===//
 // Special Intrinsics for backend internal use only. No frontend
 // should emit calls to these.
 // ===----------------------------------------------------------------------===//
-def int_amdgcn_if : Intrinsic<[llvm_i1_ty, llvm_i64_ty],
+def int_amdgcn_if : Intrinsic<[llvm_i1_ty, llvm_anyint_ty],
   [llvm_i1_ty], [IntrConvergent]
 >;
 
-def int_amdgcn_else : Intrinsic<[llvm_i1_ty, llvm_i64_ty],
-  [llvm_i64_ty], [IntrConvergent]
+def int_amdgcn_else : Intrinsic<[llvm_i1_ty, llvm_anyint_ty],
+  [llvm_anyint_ty], [IntrConvergent]
 >;
 
-def int_amdgcn_if_break : Intrinsic<[llvm_i64_ty],
-  [llvm_i1_ty, llvm_i64_ty], [IntrNoMem, IntrConvergent]
+def int_amdgcn_if_break : Intrinsic<[llvm_anyint_ty],
+  [llvm_i1_ty, llvm_anyint_ty], [IntrNoMem, IntrConvergent]
 >;
 
 def int_amdgcn_loop : Intrinsic<[llvm_i1_ty],
-  [llvm_i64_ty], [IntrConvergent]
+  [llvm_anyint_ty], [IntrConvergent]
 >;
 
-def int_amdgcn_end_cf : Intrinsic<[], [llvm_i64_ty], [IntrConvergent]>;
+def int_amdgcn_end_cf : Intrinsic<[], [llvm_anyint_ty], [IntrConvergent]>;
 
 // Represent unreachable in a divergent region.
 def int_amdgcn_unreachable : Intrinsic<[], [], [IntrConvergent]>;
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td b/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td
index 229c20a..3d9a4fa 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td
@@ -262,59 +262,59 @@
 // Coprocessor
 
 def int_arm_ldc : GCCBuiltin<"__builtin_arm_ldc">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 def int_arm_ldcl : GCCBuiltin<"__builtin_arm_ldcl">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 def int_arm_ldc2 : GCCBuiltin<"__builtin_arm_ldc2">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 def int_arm_ldc2l : GCCBuiltin<"__builtin_arm_ldc2l">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 
 def int_arm_stc : GCCBuiltin<"__builtin_arm_stc">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 def int_arm_stcl : GCCBuiltin<"__builtin_arm_stcl">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 def int_arm_stc2 : GCCBuiltin<"__builtin_arm_stc2">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 def int_arm_stc2l : GCCBuiltin<"__builtin_arm_stc2l">,
-   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
+   Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], [ImmArg<0>, ImmArg<1>]>;
 
 // Move to coprocessor
 def int_arm_mcr : GCCBuiltin<"__builtin_arm_mcr">,
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
+                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<3>, ImmArg<4>, ImmArg<5>]>;
 def int_arm_mcr2 : GCCBuiltin<"__builtin_arm_mcr2">,
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
+                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<3>, ImmArg<4>, ImmArg<5>]>;
 
 // Move from coprocessor
 def int_arm_mrc : GCCBuiltin<"__builtin_arm_mrc">,
                   MSBuiltin<"_MoveFromCoprocessor">,
    Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                             llvm_i32_ty, llvm_i32_ty], []>;
+                             llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<2>, ImmArg<3>, ImmArg<4>]>;
 def int_arm_mrc2 : GCCBuiltin<"__builtin_arm_mrc2">,
                    MSBuiltin<"_MoveFromCoprocessor2">,
    Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                             llvm_i32_ty, llvm_i32_ty], []>;
+                             llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<2>, ImmArg<3>, ImmArg<4>]>;
 
 // Coprocessor data processing
 def int_arm_cdp : GCCBuiltin<"__builtin_arm_cdp">,
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
+                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<2>, ImmArg<3>, ImmArg<4>, ImmArg<5>]>;
 def int_arm_cdp2 : GCCBuiltin<"__builtin_arm_cdp2">,
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
+                  llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<2>, ImmArg<3>, ImmArg<4>, ImmArg<5>]>;
 
 // Move from two registers to coprocessor
 def int_arm_mcrr : Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                                  llvm_i32_ty, llvm_i32_ty], []>;
+                                  llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<4>]>;
 def int_arm_mcrr2 : Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
-                                   llvm_i32_ty, llvm_i32_ty], []>;
+                                   llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<4>]>;
 
 def int_arm_mrrc : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [llvm_i32_ty,
-                              llvm_i32_ty, llvm_i32_ty], []>;
+                              llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<2>]>;
 def int_arm_mrrc2 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [llvm_i32_ty,
-                               llvm_i32_ty, llvm_i32_ty], []>;
+                               llvm_i32_ty, llvm_i32_ty], [ImmArg<0>, ImmArg<1>, ImmArg<2>]>;
 
 //===----------------------------------------------------------------------===//
 // CRC32
@@ -333,6 +333,18 @@
     [IntrNoMem]>;
 
 //===----------------------------------------------------------------------===//
+// CMSE
+
+def int_arm_cmse_tt : GCCBuiltin<"__builtin_arm_cmse_TT">,
+    Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrNoMem]>;
+def int_arm_cmse_ttt : GCCBuiltin<"__builtin_arm_cmse_TTT">,
+    Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrNoMem]>;
+def int_arm_cmse_tta : GCCBuiltin<"__builtin_arm_cmse_TTA">,
+    Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrNoMem]>;
+def int_arm_cmse_ttat : GCCBuiltin<"__builtin_arm_cmse_TTAT">,
+    Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrNoMem]>;
+
+//===----------------------------------------------------------------------===//
 // HINT
 
 def int_arm_hint : Intrinsic<[], [llvm_i32_ty]>;
@@ -766,4 +778,9 @@
 def int_arm_neon_sdot : Neon_Dot_Intrinsic;
 
 
+// GNU eabi mcount
+def int_arm_gnu_eabi_mcount : Intrinsic<[],
+                                    [],
+                                    [IntrReadMem, IntrWriteMem]>;
+
 } // end TargetPrefix
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsHexagon.td b/linux-x64/clang/include/llvm/IR/IntrinsicsHexagon.td
index 3e3166d..2abc1dc 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsHexagon.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsHexagon.td
@@ -51,19 +51,19 @@
   : Hexagon_Intrinsic<GCCIntSuffix,
                           [llvm_ptr_ty], [llvm_ptr_ty, llvm_ptr_ty,
                            llvm_i32_ty, llvm_i32_ty],
-                          [IntrArgMemOnly]>;
+                          [IntrArgMemOnly, ImmArg<3>]>;
 
 class Hexagon_mem_memsisisi_Intrinsic<string GCCIntSuffix>
   : Hexagon_Intrinsic<GCCIntSuffix,
                           [llvm_ptr_ty], [llvm_ptr_ty, llvm_i32_ty,
                            llvm_i32_ty, llvm_i32_ty],
-                          [IntrWriteMem]>;
+                          [IntrWriteMem, ImmArg<3>]>;
 
 class Hexagon_mem_memdisisi_Intrinsic<string GCCIntSuffix>
   : Hexagon_Intrinsic<GCCIntSuffix,
                           [llvm_ptr_ty], [llvm_ptr_ty, llvm_i64_ty,
                            llvm_i32_ty, llvm_i32_ty],
-                          [IntrWriteMem]>;
+                          [IntrWriteMem, ImmArg<3>]>;
 
 //
 // BUILTIN_INFO_NONCONST(circ_ldd,PTR_ftype_PTRPTRSISI,4)
@@ -553,16 +553,18 @@
        [IntrNoMem]>;
 
 // tag : V6_vaslw_acc
-class Hexagon_v16i32_v16i32v16i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v16i32_v16i32v16i32i32_Intrinsic<string GCCIntSuffix,
+                                               list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v16i32_ty], [llvm_v16i32_ty,llvm_v16i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vaslw_acc
-class Hexagon_v32i32_v32i32v32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v32i32_v32i32v32i32i32_Intrinsic<string GCCIntSuffix,
+                                               list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v32i32_ty], [llvm_v32i32_ty,llvm_v32i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vmux
 class Hexagon_v16i32_v512i1v16i32v16i32_Intrinsic<string GCCIntSuffix>
@@ -580,7 +582,7 @@
 class Hexagon_i32_i32i32i32i32_Intrinsic<string GCCIntSuffix>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_i32_ty,llvm_i32_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       [IntrNoMem, ImmArg<2>, ImmArg<3>]>;
 
 // tag : V6_vandnqrt_acc
 class Hexagon_v16i32_v16i32v512i1i32_Intrinsic<string GCCIntSuffix>
@@ -595,58 +597,62 @@
        [IntrNoMem]>;
 
 // tag : V6_vrmpybusi
-class Hexagon_v32i32_v32i32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v32i32_v32i32i32i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v32i32_ty], [llvm_v32i32_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vrmpybusi
-class Hexagon_v64i32_v64i32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v64i32_v64i32i32i32_Intrinsic<string GCCIntSuffix,
+                                            list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v64i32_ty], [llvm_v64i32_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vsubb_dv
-class Hexagon_v64i32_v64i32v64i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v64i32_v64i32v64i32_Intrinsic<string GCCIntSuffix, list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v64i32_ty], [llvm_v64i32_ty,llvm_v64i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : M2_mpysu_up
-class Hexagon_i32_i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i32_i32i32_Intrinsic<string GCCIntSuffix,
+                                   list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : M2_mpyud_acc_ll_s0
-class Hexagon_i64_i64i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i64_i64i32i32_Intrinsic<string GCCIntSuffix, list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i64_ty], [llvm_i64_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : S2_lsr_i_r_nac
-class Hexagon_i32_i32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i32_i32i32i32_Intrinsic<string GCCIntSuffix,
+                                             list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_i32_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : M2_cmpysc_s0
-class Hexagon_i64_i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i64_i32i32_Intrinsic<string GCCIntSuffix, list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i64_ty], [llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_lo
-class Hexagon_v16i32_v32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v16i32_v32i32_Intrinsic<string GCCIntSuffix, list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v16i32_ty], [llvm_v32i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_lo
-class Hexagon_v32i32_v64i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v32i32_v64i32_Intrinsic<string GCCIntSuffix, list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v32i32_ty], [llvm_v64i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : S2_shuffoh
 class Hexagon_i64_i64i64_Intrinsic<string GCCIntSuffix>
@@ -697,10 +703,10 @@
        [IntrNoMem]>;
 
 // tag : A4_vcmphgti
-class Hexagon_i32_i64i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i32_i64i32_Intrinsic<string GCCIntSuffix, list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_i64_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag :
 class Hexagon_v32i32_v16i32i32_Intrinsic<string GCCIntSuffix>
@@ -709,10 +715,11 @@
        [IntrNoMem]>;
 
 // tag : S6_rol_i_p_or
-class Hexagon_i64_i64i64i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i64_i64i64i32_Intrinsic<string GCCIntSuffix,
+                                      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i64_ty], [llvm_i64_ty,llvm_i64_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vgtuh_and
 class Hexagon_v512i1_v512i1v16i32v16i32_Intrinsic<string GCCIntSuffix>
@@ -727,16 +734,18 @@
        [IntrNoMem]>;
 
 // tag : A2_abssat
-class Hexagon_i32_i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i32_i32_Intrinsic<string GCCIntSuffix,
+                                list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : A2_vcmpwgtu
-class Hexagon_i32_i64i64_Intrinsic<string GCCIntSuffix>
+class Hexagon_i32_i64i64_Intrinsic<string GCCIntSuffix,
+                                  list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_i64_ty,llvm_i64_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vtmpybus_acc
 class Hexagon_v64i32_v64i32v64i32i32_Intrinsic<string GCCIntSuffix>
@@ -763,16 +772,18 @@
        [IntrNoMem]>;
 
 // tag : S2_asr_i_p_rnd_goodsyntax
-class Hexagon_i64_i64i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i64_i64i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i64_ty], [llvm_i64_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : F2_conv_w2df
-class Hexagon_double_i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_double_i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_double_ty], [llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vunpackuh
 class Hexagon_v32i32_v16i32_Intrinsic<string GCCIntSuffix>
@@ -865,16 +876,18 @@
        [IntrNoMem]>;
 
 // tag : V6_vlutvwhi
-class Hexagon_v32i32_v16i32v16i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v32i32_v16i32v16i32i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v32i32_ty], [llvm_v16i32_ty,llvm_v16i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vlutvwhi
-class Hexagon_v64i32_v32i32v32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v64i32_v32i32v32i32i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v64i32_ty], [llvm_v32i32_ty,llvm_v32i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vgtuh
 class Hexagon_v512i1_v16i32v16i32_Intrinsic<string GCCIntSuffix>
@@ -901,10 +914,11 @@
        [IntrNoMem]>;
 
 // tag : S2_vzxthw
-class Hexagon_i64_i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i64_i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i64_ty], [llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vtmpyhb
 class Hexagon_v64i32_v64i32i32_Intrinsic<string GCCIntSuffix>
@@ -943,10 +957,11 @@
        [IntrNoMem]>;
 
 // tag : F2_conv_uw2sf
-class Hexagon_float_i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_float_i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_float_ty], [llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vswap
 class Hexagon_v32i32_v512i1v16i32v16i32_Intrinsic<string GCCIntSuffix>
@@ -1021,16 +1036,17 @@
        [IntrNoMem]>;
 
 // tag : V6_vlutvvb_oracc
-class Hexagon_v16i32_v16i32v16i32v16i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v16i32_v16i32v16i32v16i32i32_Intrinsic<string GCCIntSuffix,
+                                                     list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v16i32_ty], [llvm_v16i32_ty,llvm_v16i32_ty,llvm_v16i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vlutvvb_oracc
-class Hexagon_v32i32_v32i32v32i32v32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v32i32_v32i32v32i32v32i32i32_Intrinsic<string GCCIntSuffix, list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v32i32_ty], [llvm_v32i32_ty,llvm_v32i32_ty,llvm_v32i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vrmpybub_rtt
 class Hexagon_v32i32_v16i32i64_Intrinsic<string GCCIntSuffix>
@@ -1051,16 +1067,18 @@
        [IntrNoMem]>;
 
 // tag : V6_vrsadubi_acc
-class Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<string GCCIntSuffix,
+                                                  list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v32i32_ty], [llvm_v32i32_ty,llvm_v32i32_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vrsadubi_acc
-class Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v64i32_ty], [llvm_v64i32_ty,llvm_v64i32_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : F2_conv_df2sf
 class Hexagon_float_double_Intrinsic<string GCCIntSuffix>
@@ -1165,10 +1183,11 @@
        [IntrNoMem]>;
 
 // tag : S2_insertp
-class Hexagon_i64_i64i64i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i64_i64i64i32i32_Intrinsic<string GCCIntSuffix,
+                                         list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i64_ty], [llvm_i64_ty,llvm_i64_ty,llvm_i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : F2_sfinvsqrta
 class Hexagon_floati32_float_Intrinsic<string GCCIntSuffix>
@@ -1189,16 +1208,18 @@
        [IntrNoMem]>;
 
 // tag : V6_vlutvwh_oracc
-class Hexagon_v32i32_v32i32v16i32v16i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v32i32_v32i32v16i32v16i32i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v32i32_ty], [llvm_v32i32_ty,llvm_v16i32_ty,llvm_v16i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : V6_vlutvwh_oracc
-class Hexagon_v64i32_v64i32v32i32v32i32i32_Intrinsic<string GCCIntSuffix>
+class Hexagon_v64i32_v64i32v32i32v32i32i32_Intrinsic<string GCCIntSuffix,
+      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_v64i32_ty], [llvm_v64i32_ty,llvm_v32i32_ty,llvm_v32i32_ty,llvm_i32_ty],
-       [IntrNoMem]>;
+       !listconcat([IntrNoMem], intr_properties)>;
 
 // tag : F2_dfcmpge
 class Hexagon_i32_doubledouble_Intrinsic<string GCCIntSuffix>
@@ -1222,7 +1243,7 @@
 class Hexagon_i32_floati32_Intrinsic<string GCCIntSuffix>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_float_ty,llvm_i32_ty],
-       [IntrNoMem, Throws]>;
+       [IntrNoMem, Throws, ImmArg<1>]>;
 
 // tag : F2_conv_sf2ud_chop
 class Hexagon_i64_float_Intrinsic<string GCCIntSuffix>
@@ -1291,10 +1312,11 @@
        [IntrNoMem, Throws]>;
 
 // tag : F2_dfclass
-class Hexagon_i32_doublei32_Intrinsic<string GCCIntSuffix>
+class Hexagon_i32_doublei32_Intrinsic<string GCCIntSuffix,
+                                      list<IntrinsicProperty> intr_properties = []>
   : Hexagon_Intrinsic<GCCIntSuffix,
        [llvm_i32_ty], [llvm_double_ty,llvm_i32_ty],
-       [IntrNoMem, Throws]>;
+       !listconcat([IntrNoMem, Throws], intr_properties)>;
 
 // tag : V6_vd0
 class Hexagon_v16i32__Intrinsic<string GCCIntSuffix>
@@ -1392,13 +1414,13 @@
 Hexagon_i64_i64_Intrinsic<"HEXAGON_A2_vabswsat">;
 
 def int_hexagon_S2_asr_i_r :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asr_i_r">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asr_i_r", [ImmArg<1>]>;
 
 def int_hexagon_S2_asr_i_p :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_p">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_p", [ImmArg<1>]>;
 
 def int_hexagon_A4_combineri :
-Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_combineri">;
+Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_combineri", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpy_nac_sat_hl_s1 :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpy_nac_sat_hl_s1">;
@@ -1449,7 +1471,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_maxup">;
 
 def int_hexagon_A4_vcmphgti :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmphgti">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmphgti", [ImmArg<1>]>;
 
 def int_hexagon_S2_interleave :
 Hexagon_i64_i64_Intrinsic<"HEXAGON_S2_interleave">;
@@ -1470,10 +1492,10 @@
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_C2_cmpgtp">;
 
 def int_hexagon_A4_cmphgtui :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmphgtui">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmphgtui", [ImmArg<1>]>;
 
 def int_hexagon_C2_cmpgti :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgti">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgti", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpyi :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpyi">;
@@ -1491,16 +1513,16 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpy_lh_s0">;
 
 def int_hexagon_S2_lsr_i_r_xacc :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_xacc">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_xacc", [ImmArg<2>]>;
 
 def int_hexagon_S2_vrcnegh :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_vrcnegh">;
 
 def int_hexagon_S2_extractup :
-Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_S2_extractup">;
+Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_S2_extractup", [ImmArg<1>, ImmArg<2>]>;
 
 def int_hexagon_S2_asr_i_p_rnd_goodsyntax :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_rnd_goodsyntax">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_rnd_goodsyntax", [ImmArg<1>]>;
 
 def int_hexagon_S4_ntstbit_r :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S4_ntstbit_r">;
@@ -1527,10 +1549,10 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_r_r_and">;
 
 def int_hexagon_A4_rcmpneqi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_rcmpneqi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_rcmpneqi", [ImmArg<1>]>;
 
 def int_hexagon_S2_asl_i_r_nac :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_nac">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_nac", [ImmArg<2>]>;
 
 def int_hexagon_M2_subacc :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_subacc">;
@@ -1545,10 +1567,10 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpy_acc_sat_lh_s1">;
 
 def int_hexagon_S2_asr_i_vh :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_vh">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_vh", [ImmArg<1>]>;
 
 def int_hexagon_S2_asr_i_vw :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_vw">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_vw", [ImmArg<1>]>;
 
 def int_hexagon_A4_cmpbgtu :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpbgtu">;
@@ -1557,7 +1579,7 @@
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_A4_vcmpbeq_any">;
 
 def int_hexagon_A4_cmpbgti :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpbgti">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpbgti", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpyd_lh_s1 :
 Hexagon_i64_i32i32_Intrinsic<"HEXAGON_M2_mpyd_lh_s1">;
@@ -1566,7 +1588,7 @@
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_r_p_nac">;
 
 def int_hexagon_S2_lsr_i_r_nac :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_nac">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_nac", [ImmArg<2>]>;
 
 def int_hexagon_A2_addsp :
 Hexagon_i64_i32i64_Intrinsic<"HEXAGON_A2_addsp">;
@@ -1575,7 +1597,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_S4_vxsubaddw">;
 
 def int_hexagon_A4_vcmpheqi :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpheqi">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpheqi", [ImmArg<1>]>;
 
 def int_hexagon_S4_vxsubaddh :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_S4_vxsubaddh">;
@@ -1602,16 +1624,16 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_A2_pxorf">;
 
 def int_hexagon_C2_cmpgei :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgei">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgei", [ImmArg<1>]>;
 
 def int_hexagon_A2_vsubub :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vsubub">;
 
 def int_hexagon_S2_asl_i_p :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asl_i_p">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asl_i_p", [ImmArg<1>]>;
 
 def int_hexagon_S2_asl_i_r :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asl_i_r">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asl_i_r", [ImmArg<1>]>;
 
 def int_hexagon_A4_vrminuw :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_A4_vrminuw">;
@@ -1641,10 +1663,10 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_bitsset">;
 
 def int_hexagon_M2_mpysip :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpysip">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpysip", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpysin :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpysin">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpysin", [ImmArg<1>]>;
 
 def int_hexagon_A4_boundscheck :
 Hexagon_i32_i32i64_Intrinsic<"HEXAGON_A4_boundscheck">;
@@ -1683,10 +1705,10 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vnavgw">;
 
 def int_hexagon_S2_asl_i_r_acc :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_acc">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_acc", [ImmArg<2>]>;
 
 def int_hexagon_S4_subi_lsr_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_subi_lsr_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_subi_lsr_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_S2_vzxthw :
 Hexagon_i64_i32_Intrinsic<"HEXAGON_S2_vzxthw">;
@@ -1713,7 +1735,7 @@
 Hexagon_i64_i32i32_Intrinsic<"HEXAGON_S2_packhl">;
 
 def int_hexagon_A4_vcmpwgti :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpwgti">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpwgti", [ImmArg<1>]>;
 
 def int_hexagon_A2_vavguwr :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vavguwr">;
@@ -1734,7 +1756,7 @@
 Hexagon_double_i64_Intrinsic<"HEXAGON_F2_conv_d2df">;
 
 def int_hexagon_C2_cmpgtui :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgtui">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgtui", [ImmArg<1>]>;
 
 def int_hexagon_A2_vconj :
 Hexagon_i64_i64_Intrinsic<"HEXAGON_A2_vconj">;
@@ -1764,7 +1786,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_togglebit_r">;
 
 def int_hexagon_S2_togglebit_i :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_togglebit_i">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_togglebit_i", [ImmArg<1>]>;
 
 def int_hexagon_F2_conv_uw2sf :
 Hexagon_float_i32_Intrinsic<"HEXAGON_F2_conv_uw2sf">;
@@ -1800,10 +1822,10 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_r_r_nac">;
 
 def int_hexagon_S2_asl_i_p_acc :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_acc">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_acc", [ImmArg<2>]>;
 
 def int_hexagon_A4_vcmpwgtui :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpwgtui">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpwgtui", [ImmArg<1>]>;
 
 def int_hexagon_M4_vrmpyoh_acc_s0 :
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_M4_vrmpyoh_acc_s0">;
@@ -1830,7 +1852,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vavgwcr">;
 
 def int_hexagon_S2_asl_i_p_xacc :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_xacc">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_xacc", [ImmArg<2>]>;
 
 def int_hexagon_A4_vrmaxw :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_A4_vrmaxw">;
@@ -1842,22 +1864,22 @@
 Hexagon_i32_i64i32_Intrinsic<"HEXAGON_M4_cmpyi_wh">;
 
 def int_hexagon_A2_tfrsi :
-Hexagon_i32_i32_Intrinsic<"HEXAGON_A2_tfrsi">;
+Hexagon_i32_i32_Intrinsic<"HEXAGON_A2_tfrsi", [ImmArg<0>]>;
 
 def int_hexagon_S2_asr_i_r_acc :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_acc">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_acc", [ImmArg<2>]>;
 
 def int_hexagon_A2_svnavgh :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_svnavgh">;
 
 def int_hexagon_S2_lsr_i_r :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r", [ImmArg<1>]>;
 
 def int_hexagon_M2_vmac2 :
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_vmac2">;
 
 def int_hexagon_A4_vcmphgtui :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmphgtui">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmphgtui", [ImmArg<1>]>;
 
 def int_hexagon_A2_svavgh :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_svavgh">;
@@ -1869,7 +1891,7 @@
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_M4_vrmpyeh_acc_s1">;
 
 def int_hexagon_S2_lsr_i_p :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p", [ImmArg<1>]>;
 
 def int_hexagon_A2_combine_hl :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_combine_hl">;
@@ -1908,7 +1930,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_mmpyul_rs0">;
 
 def int_hexagon_S2_asr_i_r_rnd_goodsyntax :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_rnd_goodsyntax">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_rnd_goodsyntax", [ImmArg<1>]>;
 
 def int_hexagon_S2_lsr_r_p_nac :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_r_p_nac">;
@@ -1923,10 +1945,10 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_or_and">;
 
 def int_hexagon_M4_mpyrr_addi :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyrr_addi">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyrr_addi", [ImmArg<0>]>;
 
 def int_hexagon_S4_or_andi :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_or_andi">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_or_andi", [ImmArg<2>]>;
 
 def int_hexagon_M2_mpy_sat_hl_s0 :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpy_sat_hl_s0">;
@@ -2031,7 +2053,7 @@
 Hexagon_float_floatfloatfloat_Intrinsic<"HEXAGON_F2_sffms_lib">;
 
 def int_hexagon_C4_cmpneqi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_cmpneqi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_cmpneqi", [ImmArg<1>]>;
 
 def int_hexagon_M4_and_xor :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_and_xor">;
@@ -2055,7 +2077,7 @@
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_A2_vrsadub_acc">;
 
 def int_hexagon_C2_bitsclri :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_bitsclri">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_bitsclri", [ImmArg<1>]>;
 
 def int_hexagon_A2_subh_h16_sat_hh :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_subh_h16_sat_hh">;
@@ -2157,10 +2179,10 @@
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_S2_parityp">;
 
 def int_hexagon_S2_lsr_i_p_and :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_and">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_and", [ImmArg<2>]>;
 
 def int_hexagon_S2_asr_i_r_or :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_or">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_or", [ImmArg<2>]>;
 
 def int_hexagon_M2_mpyu_nac_ll_s0 :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpyu_nac_ll_s0">;
@@ -2190,7 +2212,7 @@
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_cnacsc_s0">;
 
 def int_hexagon_S4_subaddi :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_subaddi">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_subaddi", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpyud_nac_hl_s1 :
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyud_nac_hl_s1">;
@@ -2199,13 +2221,13 @@
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyud_nac_hl_s0">;
 
 def int_hexagon_S5_vasrhrnd_goodsyntax :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S5_vasrhrnd_goodsyntax">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S5_vasrhrnd_goodsyntax", [ImmArg<1>]>;
 
 def int_hexagon_S2_tstbit_r :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_tstbit_r">;
 
 def int_hexagon_S4_vrcrotate :
-Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_S4_vrcrotate">;
+Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_S4_vrcrotate", [ImmArg<2>]>;
 
 def int_hexagon_M2_mmachs_s1 :
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_M2_mmachs_s1">;
@@ -2214,7 +2236,7 @@
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_M2_mmachs_s0">;
 
 def int_hexagon_S2_tstbit_i :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_tstbit_i">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_tstbit_i", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpy_up_s1 :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpy_up_s1">;
@@ -2226,7 +2248,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_mmpyuh_rs0">;
 
 def int_hexagon_S2_lsr_i_vw :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsr_i_vw">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsr_i_vw", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpy_rnd_ll_s0 :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpy_rnd_ll_s0">;
@@ -2265,16 +2287,16 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_subh_l16_sat_hl">;
 
 def int_hexagon_C2_cmpeqi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpeqi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpeqi", [ImmArg<1>]>;
 
 def int_hexagon_S2_asl_i_r_and :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_and">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_and", [ImmArg<2>]>;
 
 def int_hexagon_S2_vcnegh :
 Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_vcnegh">;
 
 def int_hexagon_A4_vcmpweqi :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpweqi">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpweqi", [ImmArg<1>]>;
 
 def int_hexagon_M2_vdmpyrs_s0 :
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_M2_vdmpyrs_s0">;
@@ -2307,7 +2329,7 @@
 Hexagon_i32_i64_Intrinsic<"HEXAGON_S2_cl0p">;
 
 def int_hexagon_S2_valignib :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_valignib">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_valignib", [ImmArg<2>]>;
 
 def int_hexagon_F2_sffixupd :
 Hexagon_float_floatfloat_Intrinsic<"HEXAGON_F2_sffixupd">;
@@ -2337,7 +2359,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_mmpyul_rs1">;
 
 def int_hexagon_S4_ntstbit_i :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S4_ntstbit_i">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S4_ntstbit_i", [ImmArg<1>]>   ;
 
 def int_hexagon_F2_sffixupr :
 Hexagon_float_float_Intrinsic<"HEXAGON_F2_sffixupr">;
@@ -2361,7 +2383,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_vmpy2s_s0pack">;
 
 def int_hexagon_S4_addaddi :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_addaddi">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_addaddi", [ImmArg<2>]>;
 
 def int_hexagon_M2_mpyd_acc_ll_s0 :
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyd_acc_ll_s0">;
@@ -2370,13 +2392,13 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpy_acc_sat_hl_s1">;
 
 def int_hexagon_A4_rcmpeqi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_rcmpeqi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_rcmpeqi", [ImmArg<1>]>;
 
 def int_hexagon_M4_xor_and :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_xor_and">;
 
 def int_hexagon_S2_asl_i_p_and :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_and">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_and", [ImmArg<2>]>;
 
 def int_hexagon_M2_mmpyuh_rs1 :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_mmpyuh_rs1">;
@@ -2385,7 +2407,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_r_r_or">;
 
 def int_hexagon_A4_round_ri :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_round_ri">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_round_ri", [ImmArg<1>]>;
 
 def int_hexagon_A2_max :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_max">;
@@ -2394,10 +2416,10 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_round_rr">;
 
 def int_hexagon_A4_combineii :
-Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_combineii">;
+Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_combineii", [ImmArg<0>, ImmArg<1>]>;
 
 def int_hexagon_A4_combineir :
-Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_combineir">;
+Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_combineir", [ImmArg<0>]>;
 
 def int_hexagon_C4_and_orn :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C4_and_orn">;
@@ -2412,7 +2434,7 @@
 Hexagon_i32_i64i32_Intrinsic<"HEXAGON_M4_cmpyr_whc">;
 
 def int_hexagon_S2_lsr_i_r_acc :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_acc">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_acc", [ImmArg<2>]>;
 
 def int_hexagon_S2_vzxtbh :
 Hexagon_i64_i32_Intrinsic<"HEXAGON_S2_vzxtbh">;
@@ -2439,7 +2461,7 @@
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_r_p_or">;
 
 def int_hexagon_S4_ori_asl_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_ori_asl_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_ori_asl_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_C4_nbitsset :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_nbitsset">;
@@ -2475,10 +2497,10 @@
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyd_acc_hh_s1">;
 
 def int_hexagon_F2_sfimm_p :
-Hexagon_float_i32_Intrinsic<"HEXAGON_F2_sfimm_p">;
+Hexagon_float_i32_Intrinsic<"HEXAGON_F2_sfimm_p", [ImmArg<0>]>;
 
 def int_hexagon_F2_sfimm_n :
-Hexagon_float_i32_Intrinsic<"HEXAGON_F2_sfimm_n">;
+Hexagon_float_i32_Intrinsic<"HEXAGON_F2_sfimm_n", [ImmArg<0>]>;
 
 def int_hexagon_M4_cmpyr_wh :
 Hexagon_i32_i64i32_Intrinsic<"HEXAGON_M4_cmpyr_wh">;
@@ -2496,7 +2518,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vavguh">;
 
 def int_hexagon_A4_cmpbeqi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpbeqi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpbeqi", [ImmArg<1>]>;
 
 def int_hexagon_F2_sfcmpuo :
 Hexagon_i32_floatfloat_Intrinsic<"HEXAGON_F2_sfcmpuo">;
@@ -2505,7 +2527,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vavguw">;
 
 def int_hexagon_S2_asr_i_p_nac :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_nac">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_nac", [ImmArg<2>]>;
 
 def int_hexagon_S2_vsatwh_nopack :
 Hexagon_i64_i64_Intrinsic<"HEXAGON_S2_vsatwh_nopack">;
@@ -2532,7 +2554,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_minp">;
 
 def int_hexagon_S4_or_andix :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_or_andix">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_or_andix", [ImmArg<2>]>;
 
 def int_hexagon_M2_mpy_rnd_lh_s0 :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpy_rnd_lh_s0">;
@@ -2583,19 +2605,19 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsl_r_r_or">;
 
 def int_hexagon_C4_cmplteui :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_cmplteui">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_cmplteui", [ImmArg<1>]>;
 
 def int_hexagon_S4_addi_lsr_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_addi_lsr_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_addi_lsr_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_A4_tfrcpp :
 Hexagon_i64_i64_Intrinsic<"HEXAGON_A4_tfrcpp">;
 
 def int_hexagon_S2_asr_i_svw_trun :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S2_asr_i_svw_trun">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S2_asr_i_svw_trun", [ImmArg<1>]>;
 
 def int_hexagon_A4_cmphgti :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmphgti">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmphgti", [ImmArg<1>]>;
 
 def int_hexagon_A4_vrminh :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_A4_vrminh">;
@@ -2613,7 +2635,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vnavghcr">;
 
 def int_hexagon_S4_subi_asl_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_subi_asl_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_subi_asl_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_S2_lsl_r_vh :
 Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsl_r_vh">;
@@ -2637,7 +2659,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpltu">;
 
 def int_hexagon_S2_insertp :
-Hexagon_i64_i64i64i32i32_Intrinsic<"HEXAGON_S2_insertp">;
+Hexagon_i64_i64i64i32i32_Intrinsic<"HEXAGON_S2_insertp", [ImmArg<2>, ImmArg<3>]>;
 
 def int_hexagon_M2_mpyd_rnd_ll_s1 :
 Hexagon_i64_i32i32_Intrinsic<"HEXAGON_M2_mpyd_rnd_ll_s1">;
@@ -2646,7 +2668,7 @@
 Hexagon_i64_i32i32_Intrinsic<"HEXAGON_M2_mpyd_rnd_ll_s0">;
 
 def int_hexagon_S2_lsr_i_p_nac :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_nac">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_nac", [ImmArg<2>]>;
 
 def int_hexagon_S2_extractup_rp :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_S2_extractup_rp">;
@@ -2748,7 +2770,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_dpmpyss_rnd_s0">;
 
 def int_hexagon_C2_muxri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C2_muxri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C2_muxri", [ImmArg<1>]>;
 
 def int_hexagon_M2_vmac2es_s0 :
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_M2_vmac2es_s0">;
@@ -2766,7 +2788,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpyu_lh_s0">;
 
 def int_hexagon_S2_asl_i_r_or :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_or">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_or", [ImmArg<2>]>;
 
 def int_hexagon_M2_mpyd_acc_hl_s0 :
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyd_acc_hl_s0">;
@@ -2781,7 +2803,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vaddw">;
 
 def int_hexagon_S2_asr_i_r_and :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_and">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_and", [ImmArg<2>]>;
 
 def int_hexagon_A2_vaddh :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vaddh">;
@@ -2796,22 +2818,22 @@
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_C2_cmpeqp">;
 
 def int_hexagon_M4_mpyri_addi :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyri_addi">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyri_addi", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_A2_not :
 Hexagon_i32_i32_Intrinsic<"HEXAGON_A2_not">;
 
 def int_hexagon_S4_andi_lsr_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_andi_lsr_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_andi_lsr_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_M2_macsip :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_macsip">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_macsip", [ImmArg<2>]>;
 
 def int_hexagon_A2_tfrcrr :
 Hexagon_i32_i32_Intrinsic<"HEXAGON_A2_tfrcrr">;
 
 def int_hexagon_M2_macsin :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_macsin">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_macsin", [ImmArg<2>]>;
 
 def int_hexagon_C2_orn :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_orn">;
@@ -2874,7 +2896,7 @@
 Hexagon_i32_doubledouble_Intrinsic<"HEXAGON_F2_dfcmpge">;
 
 def int_hexagon_M2_accii :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_accii">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_accii", [ImmArg<2>]>;
 
 def int_hexagon_A5_vaddhubs :
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_A5_vaddhubs">;
@@ -2892,10 +2914,10 @@
 Hexagon_i64_i32_Intrinsic<"HEXAGON_S2_vsxthw">;
 
 def int_hexagon_S4_andi_asl_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_andi_asl_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_andi_asl_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_S2_asl_i_p_nac :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_nac">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_nac", [ImmArg<2>]>;
 
 def int_hexagon_S2_lsl_r_p_xor :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsl_r_p_xor">;
@@ -2928,7 +2950,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_xor_andn">;
 
 def int_hexagon_S2_addasl_rrri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_addasl_rrri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_addasl_rrri", [ImmArg<2>]>;
 
 def int_hexagon_M5_vdmpybsu :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M5_vdmpybsu">;
@@ -2940,7 +2962,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpyu_nac_hh_s1">;
 
 def int_hexagon_A2_addi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_addi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_addi", [ImmArg<1>]>;
 
 def int_hexagon_A2_addp :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_addp">;
@@ -2961,7 +2983,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_S2_shuffeh">;
 
 def int_hexagon_S2_lsr_i_r_and :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_and">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_and", [ImmArg<2>]>;
 
 def int_hexagon_M2_mpy_sat_rnd_hh_s1 :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpy_sat_rnd_hh_s1">;
@@ -3063,13 +3085,13 @@
 Hexagon_i32_i64_Intrinsic<"HEXAGON_S5_popcountp">;
 
 def int_hexagon_S4_extractp :
-Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_S4_extractp">;
+Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_S4_extractp", [ImmArg<1>, ImmArg<2>]>;
 
 def int_hexagon_S2_cl0 :
 Hexagon_i32_i32_Intrinsic<"HEXAGON_S2_cl0">;
 
 def int_hexagon_A4_vcmpbgti :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpbgti">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpbgti", [ImmArg<1>]>;
 
 def int_hexagon_M2_mmacls_s1 :
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_M2_mmacls_s1">;
@@ -3117,7 +3139,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vmaxuh">;
 
 def int_hexagon_A4_bitspliti :
-Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_bitspliti">;
+Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A4_bitspliti", [ImmArg<1>]>;
 
 def int_hexagon_A2_vmaxub :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vmaxub">;
@@ -3144,13 +3166,13 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_r_r_nac">;
 
 def int_hexagon_F2_dfimm_n :
-Hexagon_double_i32_Intrinsic<"HEXAGON_F2_dfimm_n">;
+Hexagon_double_i32_Intrinsic<"HEXAGON_F2_dfimm_n", [ImmArg<0>]>;
 
 def int_hexagon_A4_cmphgt :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmphgt">;
 
 def int_hexagon_F2_dfimm_p :
-Hexagon_double_i32_Intrinsic<"HEXAGON_F2_dfimm_p">;
+Hexagon_double_i32_Intrinsic<"HEXAGON_F2_dfimm_p", [ImmArg<0>]>;
 
 def int_hexagon_M2_mpyud_acc_lh_s1 :
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyud_acc_lh_s1">;
@@ -3159,7 +3181,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_vcmpy_s1_sat_r">;
 
 def int_hexagon_M4_mpyri_addr_u2 :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyri_addr_u2">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyri_addr_u2", [ImmArg<1>]>;
 
 def int_hexagon_M2_vcmpy_s1_sat_i :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_vcmpy_s1_sat_i">;
@@ -3171,10 +3193,10 @@
 Hexagon_i64_i64i64i64_Intrinsic<"HEXAGON_M5_vrmacbuu">;
 
 def int_hexagon_S5_asrhub_rnd_sat_goodsyntax :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S5_asrhub_rnd_sat_goodsyntax">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S5_asrhub_rnd_sat_goodsyntax", [ImmArg<1>]>;
 
 def int_hexagon_S2_vspliceib :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_vspliceib">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_vspliceib", [ImmArg<2>]>;
 
 def int_hexagon_M2_dpmpyss_acc_s0 :
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_dpmpyss_acc_s0">;
@@ -3192,25 +3214,25 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_maxp">;
 
 def int_hexagon_A2_andir :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_andir">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_andir", [ImmArg<1>]>;
 
 def int_hexagon_F2_sfrecipa :
 Hexagon_floati32_floatfloat_Intrinsic<"HEXAGON_F2_sfrecipa">;
 
 def int_hexagon_A2_combineii :
-Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A2_combineii">;
+Hexagon_i64_i32i32_Intrinsic<"HEXAGON_A2_combineii", [ImmArg<0>, ImmArg<1>]>;
 
 def int_hexagon_A4_orn :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_orn">;
 
 def int_hexagon_A4_cmpbgtui :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpbgtui">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpbgtui", [ImmArg<1>]>;
 
 def int_hexagon_S2_lsr_r_r_or :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_r_r_or">;
 
 def int_hexagon_A4_vcmpbeqi :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpbeqi">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpbeqi", [ImmArg<1>]>;
 
 def int_hexagon_S2_lsl_r_r :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_lsl_r_r">;
@@ -3246,19 +3268,19 @@
 Hexagon_i64_i64i32_Intrinsic<"HEXAGON_M2_vrcmpys_s1">;
 
 def int_hexagon_S4_or_ori :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_or_ori">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_or_ori", [ImmArg<2>]>;
 
 def int_hexagon_C4_fastcorner9_not :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_fastcorner9_not">;
 
 def int_hexagon_A2_tfrih :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_tfrih">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_tfrih", [ImmArg<1>]>;
 
 def int_hexagon_A2_tfril :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_tfril">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_tfril", [ImmArg<1>]>;
 
 def int_hexagon_M4_mpyri_addr :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyri_addr">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mpyri_addr", [ImmArg<2>]>;
 
 def int_hexagon_S2_vtrunehb :
 Hexagon_i32_i64_Intrinsic<"HEXAGON_S2_vtrunehb">;
@@ -3273,16 +3295,16 @@
 Hexagon_float_floatfloat_Intrinsic<"HEXAGON_F2_sfsub">;
 
 def int_hexagon_C2_muxii :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C2_muxii">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C2_muxii", [ImmArg<1>, ImmArg<2>]>;
 
 def int_hexagon_C2_muxir :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C2_muxir">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C2_muxir", [ImmArg<2>]>;
 
 def int_hexagon_A2_swiz :
 Hexagon_i32_i32_Intrinsic<"HEXAGON_A2_swiz">;
 
 def int_hexagon_S2_asr_i_p_and :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_and">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_and", [ImmArg<2>]>;
 
 def int_hexagon_M2_cmpyrsc_s0 :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_cmpyrsc_s0">;
@@ -3312,7 +3334,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpy_nac_sat_ll_s0">;
 
 def int_hexagon_S4_extract :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_extract">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_extract", [ImmArg<1>, ImmArg<2>]>;
 
 def int_hexagon_A2_vcmpweq :
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_A2_vcmpweq">;
@@ -3321,10 +3343,10 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_acci">;
 
 def int_hexagon_S2_lsr_i_p_acc :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_acc">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_acc", [ImmArg<2>]>;
 
 def int_hexagon_S2_lsr_i_p_or :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_or">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_or", [ImmArg<2>]>;
 
 def int_hexagon_F2_conv_ud2sf :
 Hexagon_float_i64_Intrinsic<"HEXAGON_F2_conv_ud2sf">;
@@ -3333,10 +3355,10 @@
 Hexagon_i32_i32_Intrinsic<"HEXAGON_A2_tfr">;
 
 def int_hexagon_S2_asr_i_p_or :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_or">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_or", [ImmArg<2>]>;
 
 def int_hexagon_A2_subri :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_subri">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_subri", [ImmArg<0>]>;
 
 def int_hexagon_A4_vrmaxuw :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_A4_vrmaxuw">;
@@ -3348,7 +3370,7 @@
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_A4_vrmaxuh">;
 
 def int_hexagon_S2_asl_i_vw :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asl_i_vw">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asl_i_vw", [ImmArg<1>]>;
 
 def int_hexagon_A2_vavgw :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vavgw">;
@@ -3360,13 +3382,13 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vavgh">;
 
 def int_hexagon_S2_clrbit_i :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_clrbit_i">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_clrbit_i", [ImmArg<1>]>;
 
 def int_hexagon_S2_asl_i_vh :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asl_i_vh">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asl_i_vh", [ImmArg<1>]>;
 
 def int_hexagon_S2_lsr_i_r_or :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_or">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsr_i_r_or", [ImmArg<2>]>;
 
 def int_hexagon_S2_lsl_r_r_nac :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_lsl_r_r_nac">;
@@ -3384,7 +3406,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_mmpyl_s1">;
 
 def int_hexagon_M2_naccii :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_naccii">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_naccii", [ImmArg<2>]>;
 
 def int_hexagon_S2_vrndpackwhs :
 Hexagon_i32_i64_Intrinsic<"HEXAGON_S2_vrndpackwhs">;
@@ -3405,7 +3427,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M4_mac_up_s1_sat">;
 
 def int_hexagon_S4_vrcrotate_acc :
-Hexagon_i64_i64i64i32i32_Intrinsic<"HEXAGON_S4_vrcrotate_acc">;
+Hexagon_i64_i64i64i32i32_Intrinsic<"HEXAGON_S4_vrcrotate_acc", [ImmArg<3>]>;
 
 def int_hexagon_F2_conv_uw2df :
 Hexagon_double_i32_Intrinsic<"HEXAGON_F2_conv_uw2df">;
@@ -3417,7 +3439,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_r_r_acc">;
 
 def int_hexagon_A2_orir :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_orir">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_orir", [ImmArg<1>]>;
 
 def int_hexagon_A2_andp :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_andp">;
@@ -3429,7 +3451,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_min">;
 
 def int_hexagon_M2_mpysmi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpysmi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpysmi", [ImmArg<1>]>;
 
 def int_hexagon_M2_vcmpy_s0_sat_r :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_vcmpy_s0_sat_r">;
@@ -3465,10 +3487,10 @@
 Hexagon_i32_double_Intrinsic<"HEXAGON_F2_conv_df2w">;
 
 def int_hexagon_S5_asrhub_sat :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S5_asrhub_sat">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S5_asrhub_sat", [ImmArg<1>]>;
 
 def int_hexagon_S2_asl_i_r_xacc :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_xacc">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_xacc", [ImmArg<2>]>;
 
 def int_hexagon_F2_conv_df2d :
 Hexagon_i64_double_Intrinsic<"HEXAGON_F2_conv_df2d">;
@@ -3504,7 +3526,7 @@
 Hexagon_float_floatfloatfloati32_Intrinsic<"HEXAGON_F2_sffma_sc">;
 
 def int_hexagon_F2_dfclass :
-Hexagon_i32_doublei32_Intrinsic<"HEXAGON_F2_dfclass">;
+Hexagon_i32_doublei32_Intrinsic<"HEXAGON_F2_dfclass", [ImmArg<1>]>;
 
 def int_hexagon_F2_conv_df2ud :
 Hexagon_i64_double_Intrinsic<"HEXAGON_F2_conv_df2ud">;
@@ -3519,7 +3541,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_cmpyrs_s1">;
 
 def int_hexagon_C4_cmpltei :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_cmpltei">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_cmpltei", [ImmArg<1>]>;
 
 def int_hexagon_C4_cmplteu :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_cmplteu">;
@@ -3531,7 +3553,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_subh_l16_ll">;
 
 def int_hexagon_S2_asr_i_r_rnd :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_rnd">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_rnd", [ImmArg<1>]>;
 
 def int_hexagon_M2_vrmpy_s0 :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_vrmpy_s0">;
@@ -3576,7 +3598,7 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_M2_vrcmpyi_s0c">;
 
 def int_hexagon_S2_asr_i_p_rnd :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_rnd">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_rnd", [ImmArg<1>]>;
 
 def int_hexagon_A2_addpsat :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_addpsat">;
@@ -3585,7 +3607,7 @@
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_svaddhs">;
 
 def int_hexagon_S4_ori_lsr_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_ori_lsr_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_ori_lsr_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_M2_mpy_sat_rnd_ll_s1 :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_M2_mpy_sat_rnd_ll_s1">;
@@ -3618,7 +3640,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asl_r_r_or">;
 
 def int_hexagon_S4_lsli :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S4_lsli">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S4_lsli", [ImmArg<0>]>;
 
 def int_hexagon_S2_lsl_r_vw :
 Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsl_r_vw">;
@@ -3663,7 +3685,7 @@
 Hexagon_i64_i64_Intrinsic<"HEXAGON_A2_negp">;
 
 def int_hexagon_S2_asl_i_r_sat :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_sat">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_asl_i_r_sat", [ImmArg<1>]>;
 
 def int_hexagon_A2_addh_l16_sat_hl :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_addh_l16_sat_hl">;
@@ -3681,10 +3703,10 @@
 Hexagon_i32_i64i64_Intrinsic<"HEXAGON_C2_cmpgtup">;
 
 def int_hexagon_A4_cround_ri :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cround_ri">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cround_ri", [ImmArg<1>]>;
 
 def int_hexagon_S4_clbpaddi :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S4_clbpaddi">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_S4_clbpaddi", [ImmArg<1>]>;
 
 def int_hexagon_A4_cround_rr :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cround_rr">;
@@ -3714,13 +3736,13 @@
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A2_vminub">;
 
 def int_hexagon_S2_extractu :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_extractu">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_extractu", [ImmArg<1>, ImmArg<2>]>;
 
 def int_hexagon_A2_svsubh :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A2_svsubh">;
 
 def int_hexagon_S4_clbaddi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S4_clbaddi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S4_clbaddi", [ImmArg<1>]>;
 
 def int_hexagon_F2_sffms :
 Hexagon_float_floatfloatfloat_Intrinsic<"HEXAGON_F2_sffms">;
@@ -3753,7 +3775,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpy_acc_hh_s0">;
 
 def int_hexagon_S4_addi_asl_ri :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_addi_asl_ri">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S4_addi_asl_ri", [ImmArg<0>, ImmArg<2>]>;
 
 def int_hexagon_M2_mpyd_nac_hh_s1 :
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyd_nac_hh_s1">;
@@ -3762,10 +3784,10 @@
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyd_nac_hh_s0">;
 
 def int_hexagon_S2_asr_i_r_nac :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_nac">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S2_asr_i_r_nac", [ImmArg<2>]>;
 
 def int_hexagon_A4_cmpheqi :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpheqi">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_cmpheqi", [ImmArg<1>]>;
 
 def int_hexagon_S2_lsr_r_p_xor :
 Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_r_p_xor">;
@@ -3780,7 +3802,7 @@
 Hexagon_i64_float_Intrinsic<"HEXAGON_F2_conv_sf2ud_chop">;
 
 def int_hexagon_C2_cmpgeui :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgeui">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C2_cmpgeui", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpy_acc_sat_hh_s0 :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpy_acc_sat_hh_s0">;
@@ -3807,7 +3829,7 @@
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_mpyud_nac_lh_s0">;
 
 def int_hexagon_A4_round_ri_sat :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_round_ri_sat">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_round_ri_sat", [ImmArg<1>]>;
 
 def int_hexagon_M2_mpy_nac_hl_s0 :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mpy_nac_hl_s0">;
@@ -3828,10 +3850,10 @@
 Hexagon_i64_i64i32i32_Intrinsic<"HEXAGON_M2_cmaci_s0">;
 
 def int_hexagon_S2_setbit_i :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_setbit_i">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_setbit_i", [ImmArg<1>]>;
 
 def int_hexagon_S2_asl_i_p_or :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_or">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asl_i_p_or", [ImmArg<2>]>;
 
 def int_hexagon_A4_andn :
 Hexagon_i32_i32i32_Intrinsic<"HEXAGON_A4_andn">;
@@ -3855,13 +3877,13 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_xor_xacc">;
 
 def int_hexagon_A4_vcmpbgtui :
-Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpbgtui">;
+Hexagon_i32_i64i32_Intrinsic<"HEXAGON_A4_vcmpbgtui", [ImmArg<1>]>;
 
 def int_hexagon_A4_ornp :
 Hexagon_i64_i64i64_Intrinsic<"HEXAGON_A4_ornp">;
 
 def int_hexagon_A2_tfrpi :
-Hexagon_i64_i32_Intrinsic<"HEXAGON_A2_tfrpi">;
+Hexagon_i64_i32_Intrinsic<"HEXAGON_A2_tfrpi", [ImmArg<0>]>;
 
 def int_hexagon_C4_and_or :
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_C4_and_or">;
@@ -3885,16 +3907,16 @@
 Hexagon_i64_i32i32_Intrinsic<"HEXAGON_M2_vmpy2su_s0">;
 
 def int_hexagon_S2_asr_i_p_acc :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_acc">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_asr_i_p_acc", [ImmArg<2>]>;
 
 def int_hexagon_C4_nbitsclri :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_nbitsclri">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_C4_nbitsclri", [ImmArg<1>]>;
 
 def int_hexagon_S2_lsr_i_vh :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsr_i_vh">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S2_lsr_i_vh", [ImmArg<1>]>;
 
 def int_hexagon_S2_lsr_i_p_xacc :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_xacc">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S2_lsr_i_p_xacc", [ImmArg<2>]>;
 
 // V55 Scalar Instructions.
 
@@ -3904,40 +3926,40 @@
 // V60 Scalar Instructions.
 
 def int_hexagon_S6_rol_i_p_and :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_and">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_and", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_r_xacc :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_xacc">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_xacc", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_r_and :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_and">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_and", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_r_acc :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_acc">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_acc", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_p_xacc :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_xacc">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_xacc", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_p :
-Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S6_rol_i_p">;
+Hexagon_i64_i64i32_Intrinsic<"HEXAGON_S6_rol_i_p", [ImmArg<1>]>;
 
 def int_hexagon_S6_rol_i_p_nac :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_nac">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_nac", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_p_acc :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_acc">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_acc", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_r_or :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_or">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_or", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_r :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S6_rol_i_r">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S6_rol_i_r", [ImmArg<1>]>;
 
 def int_hexagon_S6_rol_i_r_nac :
-Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_nac">;
+Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_S6_rol_i_r_nac", [ImmArg<2>]>;
 
 def int_hexagon_S6_rol_i_p_or :
-Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_or">;
+Hexagon_i64_i64i64i32_Intrinsic<"HEXAGON_S6_rol_i_p_or", [ImmArg<2>]>;
 
 // V62 Scalar Instructions.
 
@@ -3979,7 +4001,7 @@
 Hexagon_i32_i32i32i32_Intrinsic<"HEXAGON_M2_mnaci">;
 
 def int_hexagon_S2_mask :
-Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_mask">;
+Hexagon_i32_i32i32_Intrinsic<"HEXAGON_S2_mask", [ImmArg<0>, ImmArg<1>]>;
 
 // V60 HVX Instructions.
 
@@ -4020,10 +4042,10 @@
 Hexagon_v64i32_v64i32v64i32_Intrinsic<"HEXAGON_V6_vaddh_dv_128B">;
 
 def int_hexagon_V6_vrmpybusi :
-Hexagon_v32i32_v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi">;
+Hexagon_v32i32_v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi", [ImmArg<2>]>;
 
 def int_hexagon_V6_vrmpybusi_128B :
-Hexagon_v64i32_v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi_128B">;
+Hexagon_v64i32_v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi_128B", [ImmArg<2>]>;
 
 def int_hexagon_V6_vshufoh :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vshufoh">;
@@ -4044,10 +4066,10 @@
 Hexagon_v32i32_v64i32i32_Intrinsic<"HEXAGON_V6_vdmpyhsuisat_128B">;
 
 def int_hexagon_V6_vrsadubi_acc :
-Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi_acc">;
+Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi_acc", [ImmArg<3>]>;
 
 def int_hexagon_V6_vrsadubi_acc_128B :
-Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi_acc_128B">;
+Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi_acc_128B", [ImmArg<3>]>;
 
 def int_hexagon_V6_vnavgw :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vnavgw">;
@@ -4914,10 +4936,10 @@
 Hexagon_v32i32_v32i32v32i32_Intrinsic<"HEXAGON_V6_vsubhsat_128B">;
 
 def int_hexagon_V6_vrmpyubi_acc :
-Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi_acc">;
+Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi_acc", [ImmArg<3>]>;
 
 def int_hexagon_V6_vrmpyubi_acc_128B :
-Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi_acc_128B">;
+Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi_acc_128B", [ImmArg<3>]>;
 
 def int_hexagon_V6_vabsw :
 Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vabsw">;
@@ -5094,10 +5116,10 @@
 Hexagon_v64i32_v64i32v32i32v32i32_Intrinsic<"HEXAGON_V6_vmpybv_acc_128B">;
 
 def int_hexagon_V6_vrsadubi :
-Hexagon_v32i32_v32i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi">;
+Hexagon_v32i32_v32i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi", [ImmArg<2>]>;
 
 def int_hexagon_V6_vrsadubi_128B :
-Hexagon_v64i32_v64i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi_128B">;
+Hexagon_v64i32_v64i32i32i32_Intrinsic<"HEXAGON_V6_vrsadubi_128B", [ImmArg<2>]>;
 
 def int_hexagon_V6_vdmpyhb_dv_acc :
 Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vdmpyhb_dv_acc">;
@@ -5376,10 +5398,10 @@
 Hexagon_v32i32_v1024i1v32i32v32i32_Intrinsic<"HEXAGON_V6_vaddbnq_128B">;
 
 def int_hexagon_V6_vlalignbi :
-Hexagon_v16i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlalignbi">;
+Hexagon_v16i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlalignbi", [ImmArg<2>]>;
 
 def int_hexagon_V6_vlalignbi_128B :
-Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlalignbi_128B">;
+Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlalignbi_128B", [ImmArg<2>]>;
 
 def int_hexagon_V6_vsatwh :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vsatwh">;
@@ -5442,10 +5464,10 @@
 Hexagon_v1024i1_v1024i1v32i32v32i32_Intrinsic<"HEXAGON_V6_veqh_and_128B">;
 
 def int_hexagon_V6_valignbi :
-Hexagon_v16i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_valignbi">;
+Hexagon_v16i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_valignbi", [ImmArg<2>]>;
 
 def int_hexagon_V6_valignbi_128B :
-Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_valignbi_128B">;
+Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_valignbi_128B", [ImmArg<2>]>;
 
 def int_hexagon_V6_vaddwsat :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vaddwsat">;
@@ -5688,10 +5710,10 @@
 Hexagon_v32i32_v32i32v32i32_Intrinsic<"HEXAGON_V6_vsubh_128B">;
 
 def int_hexagon_V6_vrmpyubi :
-Hexagon_v32i32_v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi">;
+Hexagon_v32i32_v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi", [ImmArg<2>]>;
 
 def int_hexagon_V6_vrmpyubi_128B :
-Hexagon_v64i32_v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi_128B">;
+Hexagon_v64i32_v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpyubi_128B", [ImmArg<2>]>;
 
 def int_hexagon_V6_vminw :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vminw">;
@@ -5754,10 +5776,10 @@
 Hexagon_v64i32_v32i32v32i32_Intrinsic<"HEXAGON_V6_vsubuhw_128B">;
 
 def int_hexagon_V6_vrmpybusi_acc :
-Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi_acc">;
+Hexagon_v32i32_v32i32v32i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi_acc", [ImmArg<3>]>;
 
 def int_hexagon_V6_vrmpybusi_acc_128B :
-Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi_acc_128B">;
+Hexagon_v64i32_v64i32v64i32i32i32_Intrinsic<"HEXAGON_V6_vrmpybusi_acc_128B", [ImmArg<3>]>;
 
 def int_hexagon_V6_vasrw :
 Hexagon_v16i32_v16i32i32_Intrinsic<"HEXAGON_V6_vasrw">;
@@ -5882,10 +5904,10 @@
 Hexagon_v32i32_v32i32i32_Intrinsic<"HEXAGON_V6_vlsrb_128B">;
 
 def int_hexagon_V6_vlutvwhi :
-Hexagon_v32i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvwhi">;
+Hexagon_v32i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvwhi", [ImmArg<2>]>;
 
 def int_hexagon_V6_vlutvwhi_128B :
-Hexagon_v64i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvwhi_128B">;
+Hexagon_v64i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvwhi_128B", [ImmArg<2>]>;
 
 def int_hexagon_V6_vaddububb_sat :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vaddububb_sat">;
@@ -5906,10 +5928,10 @@
 Hexagon_v32i32_i32i32_Intrinsic<"HEXAGON_V6_ldtp0_128B">;
 
 def int_hexagon_V6_vlutvvb_oracci :
-Hexagon_v16i32_v16i32v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvvb_oracci">;
+Hexagon_v16i32_v16i32v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvvb_oracci", [ImmArg<3>]>;
 
 def int_hexagon_V6_vlutvvb_oracci_128B :
-Hexagon_v32i32_v32i32v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvvb_oracci_128B">;
+Hexagon_v32i32_v32i32v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvvb_oracci_128B", [ImmArg<3>]>;
 
 def int_hexagon_V6_vsubuwsat_dv :
 Hexagon_v32i32_v32i32v32i32_Intrinsic<"HEXAGON_V6_vsubuwsat_dv">;
@@ -6044,10 +6066,10 @@
 Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vasrwuhrndsat_128B">;
 
 def int_hexagon_V6_vlutvvbi :
-Hexagon_v16i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvvbi">;
+Hexagon_v16i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvvbi", [ImmArg<2>]>;
 
 def int_hexagon_V6_vlutvvbi_128B :
-Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvvbi_128B">;
+Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvvbi_128B", [ImmArg<2>]>;
 
 def int_hexagon_V6_vsubuwsat :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vsubuwsat">;
@@ -6140,10 +6162,10 @@
 Hexagon_v32i32_i32i32_Intrinsic<"HEXAGON_V6_ldcnp0_128B">;
 
 def int_hexagon_V6_vlutvwh_oracci :
-Hexagon_v32i32_v32i32v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvwh_oracci">;
+Hexagon_v32i32_v32i32v16i32v16i32i32_Intrinsic<"HEXAGON_V6_vlutvwh_oracci", [ImmArg<3>]>;
 
 def int_hexagon_V6_vlutvwh_oracci_128B :
-Hexagon_v64i32_v64i32v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvwh_oracci_128B">;
+Hexagon_v64i32_v64i32v32i32v32i32i32_Intrinsic<"HEXAGON_V6_vlutvwh_oracci_128B", [ImmArg<3>]>;
 
 def int_hexagon_V6_vsubbsat :
 Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vsubbsat">;
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsMips.td b/linux-x64/clang/include/llvm/IR/IntrinsicsMips.td
index 26189dc..308bec9 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsMips.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsMips.td
@@ -234,9 +234,9 @@
 // Misc
 
 def int_mips_wrdsp: GCCBuiltin<"__builtin_mips_wrdsp">,
-  Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], []>;
+  Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [ImmArg<1>]>;
 def int_mips_rddsp: GCCBuiltin<"__builtin_mips_rddsp">,
-  Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrReadMem]>;
+  Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrReadMem, ImmArg<0>]>;
 
 def int_mips_insv: GCCBuiltin<"__builtin_mips_insv">,
   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrReadMem]>;
@@ -302,10 +302,10 @@
 
 def int_mips_append: GCCBuiltin<"__builtin_mips_append">,
   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
-  [IntrNoMem]>;
+  [IntrNoMem, ImmArg<2>]>;
 def int_mips_balign: GCCBuiltin<"__builtin_mips_balign">,
   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
-  [IntrNoMem]>;
+  [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_cmpgdu_eq_qb: GCCBuiltin<"__builtin_mips_cmpgdu_eq_qb">,
   Intrinsic<[llvm_i32_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [Commutative]>;
@@ -355,14 +355,14 @@
   Intrinsic<[llvm_v4i8_ty], [llvm_v2i16_ty, llvm_v2i16_ty], []>;
 def int_mips_precr_sra_ph_w: GCCBuiltin<"__builtin_mips_precr_sra_ph_w">,
   Intrinsic<[llvm_v2i16_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_precr_sra_r_ph_w: GCCBuiltin<"__builtin_mips_precr_sra_r_ph_w">,
   Intrinsic<[llvm_v2i16_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_prepend: GCCBuiltin<"__builtin_mips_prepend">,
   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
-  [IntrNoMem]>;
+  [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_shra_qb: GCCBuiltin<"__builtin_mips_shra_qb">,
   Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_i32_ty], [IntrNoMem]>;
@@ -463,22 +463,22 @@
 
 def int_mips_addvi_b : GCCBuiltin<"__builtin_msa_addvi_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty],
-  [Commutative, IntrNoMem]>;
+  [Commutative, IntrNoMem, ImmArg<1>]>;
 def int_mips_addvi_h : GCCBuiltin<"__builtin_msa_addvi_h">,
   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty],
-  [Commutative, IntrNoMem]>;
+  [Commutative, IntrNoMem, ImmArg<1>]>;
 def int_mips_addvi_w : GCCBuiltin<"__builtin_msa_addvi_w">,
   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty],
-  [Commutative, IntrNoMem]>;
+  [Commutative, IntrNoMem, ImmArg<1>]>;
 def int_mips_addvi_d : GCCBuiltin<"__builtin_msa_addvi_d">,
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty],
-  [Commutative, IntrNoMem]>;
+  [Commutative, IntrNoMem, ImmArg<1>]>;
 
 def int_mips_and_v : GCCBuiltin<"__builtin_msa_and_v">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
 
 def int_mips_andi_b : GCCBuiltin<"__builtin_msa_andi_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_asub_s_b : GCCBuiltin<"__builtin_msa_asub_s_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -560,13 +560,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_bclri_b : GCCBuiltin<"__builtin_msa_bclri_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bclri_h : GCCBuiltin<"__builtin_msa_bclri_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bclri_w : GCCBuiltin<"__builtin_msa_bclri_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bclri_d : GCCBuiltin<"__builtin_msa_bclri_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_binsl_b : GCCBuiltin<"__builtin_msa_binsl_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
@@ -583,16 +583,16 @@
 
 def int_mips_binsli_b : GCCBuiltin<"__builtin_msa_binsli_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_binsli_h : GCCBuiltin<"__builtin_msa_binsli_h">,
   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_binsli_w : GCCBuiltin<"__builtin_msa_binsli_w">,
   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_binsli_d : GCCBuiltin<"__builtin_msa_binsli_d">,
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_binsr_b : GCCBuiltin<"__builtin_msa_binsr_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
@@ -609,16 +609,16 @@
 
 def int_mips_binsri_b : GCCBuiltin<"__builtin_msa_binsri_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_binsri_h : GCCBuiltin<"__builtin_msa_binsri_h">,
   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_binsri_w : GCCBuiltin<"__builtin_msa_binsri_w">,
   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_binsri_d : GCCBuiltin<"__builtin_msa_binsri_d">,
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_bmnz_v : GCCBuiltin<"__builtin_msa_bmnz_v">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
@@ -626,7 +626,7 @@
 
 def int_mips_bmnzi_b : GCCBuiltin<"__builtin_msa_bmnzi_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_bmz_v : GCCBuiltin<"__builtin_msa_bmz_v">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
@@ -634,7 +634,7 @@
 
 def int_mips_bmzi_b : GCCBuiltin<"__builtin_msa_bmzi_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_bneg_b : GCCBuiltin<"__builtin_msa_bneg_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -646,13 +646,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_bnegi_b : GCCBuiltin<"__builtin_msa_bnegi_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bnegi_h : GCCBuiltin<"__builtin_msa_bnegi_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bnegi_w : GCCBuiltin<"__builtin_msa_bnegi_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bnegi_d : GCCBuiltin<"__builtin_msa_bnegi_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_bnz_b : GCCBuiltin<"__builtin_msa_bnz_b">,
   Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
@@ -672,7 +672,7 @@
 
 def int_mips_bseli_b : GCCBuiltin<"__builtin_msa_bseli_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_bset_b : GCCBuiltin<"__builtin_msa_bset_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -684,13 +684,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_bseti_b : GCCBuiltin<"__builtin_msa_bseti_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bseti_h : GCCBuiltin<"__builtin_msa_bseti_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bseti_w : GCCBuiltin<"__builtin_msa_bseti_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_bseti_d : GCCBuiltin<"__builtin_msa_bseti_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_bz_b : GCCBuiltin<"__builtin_msa_bz_b">,
   Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
@@ -714,16 +714,16 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_ceqi_b : GCCBuiltin<"__builtin_msa_ceqi_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_ceqi_h : GCCBuiltin<"__builtin_msa_ceqi_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_ceqi_w : GCCBuiltin<"__builtin_msa_ceqi_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_ceqi_d : GCCBuiltin<"__builtin_msa_ceqi_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_cfcmsa : GCCBuiltin<"__builtin_msa_cfcmsa">,
-  Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
+  Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<0>]>;
 
 def int_mips_cle_s_b : GCCBuiltin<"__builtin_msa_cle_s_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -744,22 +744,22 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_clei_s_b : GCCBuiltin<"__builtin_msa_clei_s_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clei_s_h : GCCBuiltin<"__builtin_msa_clei_s_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clei_s_w : GCCBuiltin<"__builtin_msa_clei_s_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clei_s_d : GCCBuiltin<"__builtin_msa_clei_s_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_clei_u_b : GCCBuiltin<"__builtin_msa_clei_u_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clei_u_h : GCCBuiltin<"__builtin_msa_clei_u_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clei_u_w : GCCBuiltin<"__builtin_msa_clei_u_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clei_u_d : GCCBuiltin<"__builtin_msa_clei_u_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_clt_s_b : GCCBuiltin<"__builtin_msa_clt_s_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -780,43 +780,43 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_clti_s_b : GCCBuiltin<"__builtin_msa_clti_s_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clti_s_h : GCCBuiltin<"__builtin_msa_clti_s_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clti_s_w : GCCBuiltin<"__builtin_msa_clti_s_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clti_s_d : GCCBuiltin<"__builtin_msa_clti_s_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_clti_u_b : GCCBuiltin<"__builtin_msa_clti_u_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clti_u_h : GCCBuiltin<"__builtin_msa_clti_u_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clti_u_w : GCCBuiltin<"__builtin_msa_clti_u_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_clti_u_d : GCCBuiltin<"__builtin_msa_clti_u_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_copy_s_b : GCCBuiltin<"__builtin_msa_copy_s_b">,
-  Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_copy_s_h : GCCBuiltin<"__builtin_msa_copy_s_h">,
-  Intrinsic<[llvm_i32_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i32_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_copy_s_w : GCCBuiltin<"__builtin_msa_copy_s_w">,
-  Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_copy_s_d : GCCBuiltin<"__builtin_msa_copy_s_d">,
-  Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_copy_u_b : GCCBuiltin<"__builtin_msa_copy_u_b">,
-  Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_copy_u_h : GCCBuiltin<"__builtin_msa_copy_u_h">,
-  Intrinsic<[llvm_i32_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i32_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_copy_u_w : GCCBuiltin<"__builtin_msa_copy_u_w">,
-  Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_copy_u_d : GCCBuiltin<"__builtin_msa_copy_u_d">,
-  Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_ctcmsa : GCCBuiltin<"__builtin_msa_ctcmsa">,
-  Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], []>;
+  Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [ImmArg<0>]>;
 
 def int_mips_div_s_b : GCCBuiltin<"__builtin_msa_div_s_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1230,55 +1230,55 @@
 
 def int_mips_insert_b : GCCBuiltin<"__builtin_msa_insert_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty],
-  [IntrNoMem]>;
+  [IntrNoMem, ImmArg<1>]>;
 def int_mips_insert_h : GCCBuiltin<"__builtin_msa_insert_h">,
   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty, llvm_i32_ty],
-  [IntrNoMem]>;
+  [IntrNoMem, ImmArg<1>]>;
 def int_mips_insert_w : GCCBuiltin<"__builtin_msa_insert_w">,
   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty],
-  [IntrNoMem]>;
+  [IntrNoMem, ImmArg<1>]>;
 def int_mips_insert_d : GCCBuiltin<"__builtin_msa_insert_d">,
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty, llvm_i64_ty],
-  [IntrNoMem]>;
+  [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_insve_b : GCCBuiltin<"__builtin_msa_insve_b">,
   Intrinsic<[llvm_v16i8_ty],
             [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<1>]>;
 def int_mips_insve_h : GCCBuiltin<"__builtin_msa_insve_h">,
   Intrinsic<[llvm_v8i16_ty],
             [llvm_v8i16_ty, llvm_i32_ty, llvm_v8i16_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<1>]>;
 def int_mips_insve_w : GCCBuiltin<"__builtin_msa_insve_w">,
   Intrinsic<[llvm_v4i32_ty],
             [llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<1>]>;
 def int_mips_insve_d : GCCBuiltin<"__builtin_msa_insve_d">,
   Intrinsic<[llvm_v2i64_ty],
             [llvm_v2i64_ty, llvm_i32_ty, llvm_v2i64_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_ld_b : GCCBuiltin<"__builtin_msa_ld_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
-  [IntrReadMem, IntrArgMemOnly]>;
+  [IntrReadMem, IntrArgMemOnly, ImmArg<1>]>;
 def int_mips_ld_h : GCCBuiltin<"__builtin_msa_ld_h">,
   Intrinsic<[llvm_v8i16_ty], [llvm_ptr_ty, llvm_i32_ty],
-  [IntrReadMem, IntrArgMemOnly]>;
+  [IntrReadMem, IntrArgMemOnly, ImmArg<1>]>;
 def int_mips_ld_w : GCCBuiltin<"__builtin_msa_ld_w">,
   Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty],
-  [IntrReadMem, IntrArgMemOnly]>;
+  [IntrReadMem, IntrArgMemOnly, ImmArg<1>]>;
 def int_mips_ld_d : GCCBuiltin<"__builtin_msa_ld_d">,
   Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty],
-  [IntrReadMem, IntrArgMemOnly]>;
+  [IntrReadMem, IntrArgMemOnly, ImmArg<1>]>;
 
 def int_mips_ldi_b : GCCBuiltin<"__builtin_msa_ldi_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_i32_ty], [IntrNoMem, ImmArg<0>]>;
 def int_mips_ldi_h : GCCBuiltin<"__builtin_msa_ldi_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_i32_ty], [IntrNoMem, ImmArg<0>]>;
 def int_mips_ldi_w : GCCBuiltin<"__builtin_msa_ldi_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_i32_ty], [IntrNoMem, ImmArg<0>]>;
 def int_mips_ldi_d : GCCBuiltin<"__builtin_msa_ldi_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_i32_ty], [IntrNoMem, ImmArg<0>]>;
 
 // This instruction is part of the MSA spec but it does not share the
 // __builtin_msa prefix because it operates on the GPR registers.
@@ -1341,22 +1341,22 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_maxi_s_b : GCCBuiltin<"__builtin_msa_maxi_s_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_maxi_s_h : GCCBuiltin<"__builtin_msa_maxi_s_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_maxi_s_w : GCCBuiltin<"__builtin_msa_maxi_s_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_maxi_s_d : GCCBuiltin<"__builtin_msa_maxi_s_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_maxi_u_b : GCCBuiltin<"__builtin_msa_maxi_u_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_maxi_u_h : GCCBuiltin<"__builtin_msa_maxi_u_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_maxi_u_w : GCCBuiltin<"__builtin_msa_maxi_u_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_maxi_u_d : GCCBuiltin<"__builtin_msa_maxi_u_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_min_a_b : GCCBuiltin<"__builtin_msa_min_a_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1386,22 +1386,22 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_mini_s_b : GCCBuiltin<"__builtin_msa_mini_s_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_mini_s_h : GCCBuiltin<"__builtin_msa_mini_s_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_mini_s_w : GCCBuiltin<"__builtin_msa_mini_s_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_mini_s_d : GCCBuiltin<"__builtin_msa_mini_s_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_mini_u_b : GCCBuiltin<"__builtin_msa_mini_u_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_mini_u_h : GCCBuiltin<"__builtin_msa_mini_u_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_mini_u_w : GCCBuiltin<"__builtin_msa_mini_u_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_mini_u_d : GCCBuiltin<"__builtin_msa_mini_u_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_mod_s_b : GCCBuiltin<"__builtin_msa_mod_s_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1492,13 +1492,13 @@
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
 
 def int_mips_nori_b : GCCBuiltin<"__builtin_msa_nori_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_or_v : GCCBuiltin<"__builtin_msa_or_v">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
 
 def int_mips_ori_b : GCCBuiltin<"__builtin_msa_ori_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_pckev_b : GCCBuiltin<"__builtin_msa_pckev_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1528,29 +1528,29 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_sat_s_b : GCCBuiltin<"__builtin_msa_sat_s_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_sat_s_h : GCCBuiltin<"__builtin_msa_sat_s_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_sat_s_w : GCCBuiltin<"__builtin_msa_sat_s_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_sat_s_d : GCCBuiltin<"__builtin_msa_sat_s_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_sat_u_b : GCCBuiltin<"__builtin_msa_sat_u_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_sat_u_h : GCCBuiltin<"__builtin_msa_sat_u_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_sat_u_w : GCCBuiltin<"__builtin_msa_sat_u_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_sat_u_d : GCCBuiltin<"__builtin_msa_sat_u_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_shf_b : GCCBuiltin<"__builtin_msa_shf_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_shf_h : GCCBuiltin<"__builtin_msa_shf_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_shf_w : GCCBuiltin<"__builtin_msa_shf_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_sld_b : GCCBuiltin<"__builtin_msa_sld_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
@@ -1563,16 +1563,16 @@
 
 def int_mips_sldi_b : GCCBuiltin<"__builtin_msa_sldi_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_sldi_h : GCCBuiltin<"__builtin_msa_sldi_h">,
   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_sldi_w : GCCBuiltin<"__builtin_msa_sldi_w">,
   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 def int_mips_sldi_d : GCCBuiltin<"__builtin_msa_sldi_d">,
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
-            [IntrNoMem]>;
+            [IntrNoMem, ImmArg<2>]>;
 
 def int_mips_sll_b : GCCBuiltin<"__builtin_msa_sll_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1584,13 +1584,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_slli_b : GCCBuiltin<"__builtin_msa_slli_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_slli_h : GCCBuiltin<"__builtin_msa_slli_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_slli_w : GCCBuiltin<"__builtin_msa_slli_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_slli_d : GCCBuiltin<"__builtin_msa_slli_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_splat_b : GCCBuiltin<"__builtin_msa_splat_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
@@ -1602,13 +1602,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
 
 def int_mips_splati_b : GCCBuiltin<"__builtin_msa_splati_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_splati_h : GCCBuiltin<"__builtin_msa_splati_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_splati_w : GCCBuiltin<"__builtin_msa_splati_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_splati_d : GCCBuiltin<"__builtin_msa_splati_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_sra_b : GCCBuiltin<"__builtin_msa_sra_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1620,13 +1620,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_srai_b : GCCBuiltin<"__builtin_msa_srai_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srai_h : GCCBuiltin<"__builtin_msa_srai_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srai_w : GCCBuiltin<"__builtin_msa_srai_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srai_d : GCCBuiltin<"__builtin_msa_srai_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_srar_b : GCCBuiltin<"__builtin_msa_srar_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1638,13 +1638,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_srari_b : GCCBuiltin<"__builtin_msa_srari_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srari_h : GCCBuiltin<"__builtin_msa_srari_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srari_w : GCCBuiltin<"__builtin_msa_srari_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srari_d : GCCBuiltin<"__builtin_msa_srari_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_srl_b : GCCBuiltin<"__builtin_msa_srl_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1656,13 +1656,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_srli_b : GCCBuiltin<"__builtin_msa_srli_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srli_h : GCCBuiltin<"__builtin_msa_srli_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srli_w : GCCBuiltin<"__builtin_msa_srli_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srli_d : GCCBuiltin<"__builtin_msa_srli_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_srlr_b : GCCBuiltin<"__builtin_msa_srlr_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1674,26 +1674,26 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_srlri_b : GCCBuiltin<"__builtin_msa_srlri_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srlri_h : GCCBuiltin<"__builtin_msa_srlri_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srlri_w : GCCBuiltin<"__builtin_msa_srlri_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_srlri_d : GCCBuiltin<"__builtin_msa_srlri_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_st_b : GCCBuiltin<"__builtin_msa_st_b">,
   Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty, llvm_i32_ty],
-  [IntrArgMemOnly]>;
+  [IntrArgMemOnly, ImmArg<2>]>;
 def int_mips_st_h : GCCBuiltin<"__builtin_msa_st_h">,
   Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty, llvm_i32_ty],
-  [IntrArgMemOnly]>;
+  [IntrArgMemOnly, ImmArg<2>]>;
 def int_mips_st_w : GCCBuiltin<"__builtin_msa_st_w">,
   Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i32_ty],
-  [IntrArgMemOnly]>;
+  [IntrArgMemOnly, ImmArg<2>]>;
 def int_mips_st_d : GCCBuiltin<"__builtin_msa_st_d">,
   Intrinsic<[], [llvm_v2i64_ty, llvm_ptr_ty, llvm_i32_ty],
-  [IntrArgMemOnly]>;
+  [IntrArgMemOnly, ImmArg<2>]>;
 
 def int_mips_subs_s_b : GCCBuiltin<"__builtin_msa_subs_s_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
@@ -1741,13 +1741,13 @@
   Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
 def int_mips_subvi_b : GCCBuiltin<"__builtin_msa_subvi_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_subvi_h : GCCBuiltin<"__builtin_msa_subvi_h">,
-  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_subvi_w : GCCBuiltin<"__builtin_msa_subvi_w">,
-  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_mips_subvi_d : GCCBuiltin<"__builtin_msa_subvi_d">,
-  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 
 def int_mips_vshf_b : GCCBuiltin<"__builtin_msa_vshf_b">,
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
@@ -1766,5 +1766,5 @@
   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
 
 def int_mips_xori_b : GCCBuiltin<"__builtin_msa_xori_b">,
-  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+  Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 }
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td b/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td
index cf072c7..0301e37 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td
@@ -37,6 +37,245 @@
 // MISC
 //
 
+// Helper class for construction of n-element list<LLVMtype> [t,t,...,t]
+class RepLLVMType<int N, LLVMType T> {
+  list<LLVMType> ret = !if(N, !listconcat(RepLLVMType<!add(N,-1), T>.ret, [T]), []);
+}
+
+// Helper class that represents a 'fragment' of an NVPTX *MMA instruction.
+// Geom: m<M>n<N>k<K>. E.g. m8n32k16
+// Frag: [abcd]
+// PtxEltType: PTX type for the element.
+class WMMA_REGS<string Geom, string Frag, string PtxEltType> {
+  string geom = Geom;
+  string frag = Frag;
+  string ptx_elt_type = PtxEltType;
+  string gft = Geom#":"#Frag#":"#ptx_elt_type;
+  string ft = frag#":"#ptx_elt_type;
+  list<LLVMType> regs = !cond(
+    // fp16 -> fp16/fp32 @  m16n16k16/m8n32k16/m32n8k16
+    // All currently supported geometries use the same fragment format,
+    // so we only need to consider {fragment, type}.
+    !eq(ft,"a:f16") : RepLLVMType<8, llvm_v2f16_ty>.ret,
+    !eq(ft,"b:f16") : RepLLVMType<8, llvm_v2f16_ty>.ret,
+    !eq(ft,"c:f16") : RepLLVMType<4, llvm_v2f16_ty>.ret,
+    !eq(ft,"d:f16") : RepLLVMType<4, llvm_v2f16_ty>.ret,
+    !eq(ft,"c:f32") : RepLLVMType<8, llvm_float_ty>.ret,
+    !eq(ft,"d:f32") : RepLLVMType<8, llvm_float_ty>.ret,
+
+    // u8/s8 -> s32 @ m16n16k16/m8n32k16/m32n8k16
+    !eq(gft,"m16n16k16:a:u8") : RepLLVMType<2, llvm_i32_ty>.ret,
+    !eq(gft,"m16n16k16:a:s8") : RepLLVMType<2, llvm_i32_ty>.ret,
+    !eq(gft,"m16n16k16:b:u8") : RepLLVMType<2, llvm_i32_ty>.ret,
+    !eq(gft,"m16n16k16:b:s8") : RepLLVMType<2, llvm_i32_ty>.ret,
+    !eq(gft,"m16n16k16:c:s32") : RepLLVMType<8, llvm_i32_ty>.ret,
+    !eq(gft,"m16n16k16:d:s32") : RepLLVMType<8, llvm_i32_ty>.ret,
+
+    !eq(gft,"m8n32k16:a:u8") : [llvm_i32_ty],
+    !eq(gft,"m8n32k16:a:s8") : [llvm_i32_ty],
+    !eq(gft,"m8n32k16:b:u8") : RepLLVMType<4, llvm_i32_ty>.ret,
+    !eq(gft,"m8n32k16:b:s8") : RepLLVMType<4, llvm_i32_ty>.ret,
+    !eq(gft,"m8n32k16:c:s32") : RepLLVMType<8, llvm_i32_ty>.ret,
+    !eq(gft,"m8n32k16:d:s32") : RepLLVMType<8, llvm_i32_ty>.ret,
+
+    !eq(gft,"m32n8k16:a:u8") : RepLLVMType<4, llvm_i32_ty>.ret,
+    !eq(gft,"m32n8k16:a:s8") : RepLLVMType<4, llvm_i32_ty>.ret,
+    !eq(gft,"m32n8k16:b:u8") : [llvm_i32_ty],
+    !eq(gft,"m32n8k16:b:s8") : [llvm_i32_ty],
+    !eq(gft,"m32n8k16:c:s32") : RepLLVMType<8, llvm_i32_ty>.ret,
+    !eq(gft,"m32n8k16:d:s32") : RepLLVMType<8, llvm_i32_ty>.ret,
+
+    // u4/s4/b1 -> s32 @ m8n8k32 (u4/s4), m8n8k128(b1)
+    !eq(gft,"m8n8k128:a:b1") : [llvm_i32_ty],
+    !eq(gft,"m8n8k32:a:u4") : [llvm_i32_ty],
+    !eq(gft,"m8n8k32:a:s4") : [llvm_i32_ty],
+    !eq(gft,"m8n8k128:b:b1") : [llvm_i32_ty],
+    !eq(gft,"m8n8k32:b:u4") : [llvm_i32_ty],
+    !eq(gft,"m8n8k32:b:s4") : [llvm_i32_ty],
+    !eq(gft,"m8n8k128:c:s32") : RepLLVMType<2, llvm_i32_ty>.ret,
+    !eq(gft,"m8n8k128:d:s32") : RepLLVMType<2, llvm_i32_ty>.ret,
+    !eq(gft,"m8n8k32:c:s32") : RepLLVMType<2, llvm_i32_ty>.ret,
+    !eq(gft,"m8n8k32:d:s32") : RepLLVMType<2, llvm_i32_ty>.ret,
+  );
+}
+
+class WMMA_NAME_LDST<string Op, WMMA_REGS Frag, string Layout, int WithStride> {
+  string intr = "llvm.nvvm.wmma."
+                # Frag.geom
+                # "." # Op
+                # "." # Frag.frag
+                # "." # Layout
+                # !if(WithStride, ".stride", "")
+                # "." # Frag.ptx_elt_type
+                ;
+  // TODO(tra): record name should ideally use the same field order as the intrinsic.
+  // E.g. string record = !subst("llvm", "int",
+  //                      !subst(".", "_", llvm));
+  string record = "int_nvvm_wmma_"
+                # Frag.geom
+                # "_" # Op
+                # "_" # Frag.frag
+                # "_" # Frag.ptx_elt_type
+                # "_" # Layout
+                # !if(WithStride, "_stride", "");
+}
+
+class MMA_SIGNATURE<WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
+  list<WMMA_REGS> id_frags = !cond(
+     // int and sub-int ops are identified by input type.
+     !eq(A.ptx_elt_type, "s8") : [A],
+     !eq(A.ptx_elt_type, "u8") : [A],
+     !eq(A.ptx_elt_type, "s4") : [A],
+     !eq(A.ptx_elt_type, "u4") : [A],
+     !eq(A.ptx_elt_type, "b1") : [A],
+     // the rest are FP ops identified by accumulator & result type.
+     1: [D, C]
+     );
+   string ret = !foldl("", id_frags, a, b, !strconcat(a, ".", b.ptx_elt_type));
+}
+
+class WMMA_NAME_MMA<string ALayout, string BLayout, int Satfinite,
+                    WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
+  string signature = MMA_SIGNATURE<A, B, C, D>.ret;
+  string llvm = "llvm.nvvm.wmma."
+                # A.geom
+                # ".mma"
+                # "." # ALayout
+                # "." # BLayout
+                # signature
+                # !if(Satfinite, ".satfinite", "");
+
+  string record = !subst(".", "_",
+                  !subst("llvm.", "int_", llvm));
+}
+
+// Generates list of 4-tuples of WMMA_REGS representing a valid MMA op.
+//   Geom: list of supported geometries.
+//   TypeN: PTX type of the corresponding fragment's element.
+//   TypeB and TypeD may be empty if it must match that of TypeA or TypeC.
+class MMA_OPS<list<string> Geom, list<string> TypeA, list<string> TypeB,
+            list<string> TypeC, list<string> TypeD> {
+  list<list<WMMA_REGS>> ret =
+     !foldl([]<list<WMMA_REGS>>, Geom, t1, geom, !listconcat(t1,
+     !foldl([]<list<WMMA_REGS>>, TypeA, t2, type_a, !listconcat(t2,
+     !foldl([]<list<WMMA_REGS>>, !if(!size(TypeB), TypeB, [type_a]), t3, type_b, !listconcat(t3,
+     !foldl([]<list<WMMA_REGS>>, TypeC, t4, type_c, !listconcat(t4,
+     !foldl([]<list<WMMA_REGS>>, !if(!size(TypeC), TypeC, [type_c]), t5, type_d, !listconcat(t5,
+            [[WMMA_REGS<geom, "a", type_a>,
+              WMMA_REGS<geom, "b", type_b>,
+              WMMA_REGS<geom, "c", type_c>,
+              WMMA_REGS<geom, "d", type_d>]]))))))))));
+   // Debugging aid for readable representation of the list above.
+   list<list<string>> ops = !foreach(x, ret, [x[0].gft, x[1].gft, x[2].gft, x[3].gft]);
+}
+
+class MMA_LDST_OPS<list<string> Geom, list<string> Frags, list<string> Types> {
+  list<WMMA_REGS> ret =
+     !foldl([]<WMMA_REGS>, Geom, t1, geom, !listconcat(t1,
+     !foldl([]<WMMA_REGS>, Frags, t2, frag, !listconcat(t2,
+     !foldl([]<WMMA_REGS>, Types, t3, type, !listconcat(t3,
+            [WMMA_REGS<geom, frag, type>]))))));
+   // Debugging aid for readable representation of the list above.
+   list<string> ops = !foreach(x, ret, x.gft);
+}
+
+
+
+// Creates list of valid combinations of fragments. This is the master list that
+// drives generation of corresponding intrinsics and instructions.
+class NVVM_MMA_OPS<int _ = 0> {
+  list<list<WMMA_REGS>> fp_mma_ops = MMA_OPS<
+            ["m16n16k16", "m32n8k16", "m8n32k16"],
+            ["f16"], [], ["f16", "f32"], ["f16", "f32"]>.ret;
+  list<list<WMMA_REGS>> int_mma_ops = MMA_OPS<
+            ["m16n16k16", "m32n8k16", "m8n32k16"],
+            ["s8", "u8"], [], ["s32"], []>.ret;
+  list<list<WMMA_REGS>> subint_mma_ops = MMA_OPS<
+            ["m8n8k32"],
+            ["s4", "u4"], [], ["s32"], []>.ret;
+  list<list<WMMA_REGS>> bit_mma_ops = MMA_OPS<
+            ["m8n8k128"],
+            ["b1"], [], ["s32"], []>.ret;
+  list<list<WMMA_REGS>> all_mma_ops = !listconcat(fp_mma_ops, int_mma_ops,
+                                                  subint_mma_ops, bit_mma_ops);
+
+  list<WMMA_REGS> ldst_ab_ops = MMA_LDST_OPS<
+            ["m16n16k16", "m32n8k16", "m8n32k16"],
+            ["a", "b"], ["f16", "u8", "s8"]>.ret;
+  list<WMMA_REGS> ldst_cd_ops = MMA_LDST_OPS<
+            ["m16n16k16", "m32n8k16", "m8n32k16"],
+            ["c", "d"], ["f16", "f32", "s32"]>.ret;
+  list<WMMA_REGS> ldst_subint_ab_ops = MMA_LDST_OPS<
+            ["m8n8k32"], ["a", "b"], ["s4","u4"]>.ret;
+  list<WMMA_REGS> ldst_bit_ab_ops = MMA_LDST_OPS<
+            ["m8n8k128"], ["a", "b"], ["b1"]>.ret;
+  list<WMMA_REGS> ldst_subint_cd_ops = MMA_LDST_OPS<
+            ["m8n8k32", "m8n8k128"],  ["c", "d"], ["s32"]>.ret;
+  list<WMMA_REGS> all_ldst_ops = !listconcat(ldst_ab_ops, ldst_cd_ops,
+                                             ldst_subint_ab_ops,
+                                             ldst_bit_ab_ops,
+                                             ldst_subint_cd_ops);
+  // Separate A/B/C fragments (loads) from D (stores).
+  list<WMMA_REGS> all_ld_ops = !foldl([]<WMMA_REGS>, all_ldst_ops, a, b,
+                                      !listconcat(a, !if(!eq(b.frag,"d"), [],[b])));
+  list<WMMA_REGS> all_st_ops = !foldl([]<WMMA_REGS>, all_ldst_ops, a, b,
+                                      !listconcat(a, !if(!eq(b.frag,"d"), [b],[])));
+}
+
+def NVVM_MMA_OPS : NVVM_MMA_OPS;
+
+// Returns [1] if this combination of layout/satf is supported, [] otherwise.
+// MMA ops must provide all parameters. Loads and stores -- only frags and layout_a.
+// The class is used to prevent generation of records for the unsupported variants.
+// E.g.
+// foreach _ = NVVM_MMA_SUPPORTED<...>.ret in =
+//   def : FOO<>; // The record will only be defined for supported ops.
+//
+class NVVM_MMA_SUPPORTED<list<WMMA_REGS> frags, string layout_a, string layout_b="-", int satf=-1> {
+  // MMA ops check both layouts.
+  string mma = frags[0].ptx_elt_type
+               # ":" # layout_a
+               # ":" # layout_b;
+  // Load ops only need type/fragment/layout.
+  string ld = frags[0].ptx_elt_type
+               # ":" # frags[0].frag
+               # ":" # layout_a
+               ;
+  string ldf = frags[0].ptx_elt_type
+               # ":" # frags[0].frag
+               ;
+  string t = frags[0].ptx_elt_type;
+  list<int> ret = !cond(
+    // Sub-int MMA only supports fixed A/B layout.
+    // b1 does not support .satf.
+    !eq(mma#":"#satf, "b1:row:col:0") : [1],
+    !eq(mma, "s4:row:col") : [1],
+    !eq(mma, "u4:row:col") : [1],
+    !eq(mma, "s4:row:col") : [1],
+    !eq(mma, "u4:row:col") : [1],
+    // Sub-int load/stores have fixed layout for A and B.
+    !and(!eq(layout_b, "-"), // It's a Load or Store op
+         !or(!eq(ld,  "b1:a:row"),
+             !eq(ld,  "b1:b:col"),
+             !eq(ldf, "b1:c"),
+             !eq(ldf, "b1:d"),
+             !eq(ld, "s4:a:row"),
+             !eq(ld, "s4:b:col"),
+             !eq(ldf, "s4:c"),
+             !eq(ldf, "s4:d"),
+             !eq(ld, "u4:a:row"),
+             !eq(ld, "u4:b:col"),
+             !eq(ldf, "u4:c"),
+             !eq(ldf, "u4:d"))) : [1],
+    // All other sub-int ops are not supported.
+    !eq(t, "b1") : [],
+    !eq(t, "s4") : [],
+    !eq(t, "u4") : [],
+    // All other (non sub-int) are OK.
+    1: [1]
+  );
+}
+
 let TargetPrefix = "nvvm" in {
   def int_nvvm_prmt : GCCBuiltin<"__nvvm_prmt">,
       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
@@ -3889,166 +4128,59 @@
 //
 // WMMA instructions
 //
-
 // WMMA.LOAD
-class NVVM_WMMA_LD_GALSTS<string Geometry, string Abc, string Layout,
-                          string Type, LLVMType regty, int WithStride>
-  : Intrinsic<!if(!eq(Abc#Type,"cf16"),
-                  [regty, regty, regty, regty],
-                  [regty, regty, regty, regty,
-                   regty, regty, regty, regty]),
+class NVVM_WMMA_LD<WMMA_REGS Frag, string Layout, int WithStride>
+  : Intrinsic<Frag.regs,
               !if(WithStride, [llvm_anyptr_ty, llvm_i32_ty], [llvm_anyptr_ty]),
               [IntrReadMem, IntrArgMemOnly, ReadOnly<0>, NoCapture<0>],
-              "llvm.nvvm.wmma."
-                # Geometry
-                # ".load"
-                # "." # Abc
-                # "." # Layout
-                # !if(WithStride, ".stride", "")
-                # "." # Type>;
-
-multiclass NVVM_WMMA_LD_GALT<string Geometry, string Abc, string Layout,
-                             string Type, LLVMType regty> {
-  def _stride: NVVM_WMMA_LD_GALSTS<Geometry, Abc, Layout, Type, regty, 1>;
-  def NAME   : NVVM_WMMA_LD_GALSTS<Geometry, Abc, Layout, Type, regty, 0>;
-}
-
-multiclass NVVM_WMMA_LD_GAT<string Geometry, string Abc,
-                           string Type, LLVMType regty> {
-  defm _row: NVVM_WMMA_LD_GALT<Geometry, Abc, "row", Type, regty>;
-  defm _col: NVVM_WMMA_LD_GALT<Geometry, Abc, "col", Type, regty>;
-}
-
-multiclass NVVM_WMMA_LD_G<string Geometry> {
-  defm _a_f16: NVVM_WMMA_LD_GAT<Geometry, "a", "f16", llvm_v2f16_ty>;
-  defm _b_f16: NVVM_WMMA_LD_GAT<Geometry, "b", "f16", llvm_v2f16_ty>;
-  defm _c_f16: NVVM_WMMA_LD_GAT<Geometry, "c", "f16", llvm_v2f16_ty>;
-  defm _c_f32: NVVM_WMMA_LD_GAT<Geometry, "c", "f32", llvm_float_ty>;
-}
-
-multiclass NVVM_WMMA_LD {
-  defm _m32n8k16_load: NVVM_WMMA_LD_G<"m32n8k16">;
-  defm _m16n16k16_load: NVVM_WMMA_LD_G<"m16n16k16">;
-  defm _m8n32k16_load: NVVM_WMMA_LD_G<"m8n32k16">;
-}
-
-defm int_nvvm_wmma: NVVM_WMMA_LD;
+              WMMA_NAME_LDST<"load", Frag, Layout, WithStride>.intr>;
 
 // WMMA.STORE.D
-class NVVM_WMMA_STD_GLSTS<string Geometry, string Layout,
-                          string Type, LLVMType regty, int WithStride,
-                          // This is only used to create a typed empty array we
-                          // need to pass to !if below.
-                          list<LLVMType>Empty=[]>
+class NVVM_WMMA_ST<WMMA_REGS Frag, string Layout, int WithStride>
   : Intrinsic<[],
               !listconcat(
                 [llvm_anyptr_ty],
-                !if(!eq(Type,"f16"),
-                    [regty, regty, regty, regty],
-                    [regty, regty, regty, regty,
-                     regty, regty, regty, regty]),
-                !if(WithStride, [llvm_i32_ty], Empty)),
+                Frag.regs,
+                !if(WithStride, [llvm_i32_ty], [])),
               [IntrWriteMem, IntrArgMemOnly, WriteOnly<0>, NoCapture<0>],
-              "llvm.nvvm.wmma."
-                   # Geometry
-                   # ".store.d"
-                   # "." # Layout
-                   # !if(WithStride, ".stride", "")
-                   # "." # Type>;
+              WMMA_NAME_LDST<"store", Frag, Layout, WithStride>.intr>;
 
-multiclass NVVM_WMMA_STD_GLT<string Geometry, string Layout,
-                             string Type, LLVMType regty> {
-  def _stride: NVVM_WMMA_STD_GLSTS<Geometry, Layout, Type, regty, 1>;
-  def NAME:    NVVM_WMMA_STD_GLSTS<Geometry, Layout, Type, regty, 0>;
+// Create all load/store variants 
+foreach layout = ["row", "col"] in {
+  foreach stride = [0, 1] in {
+    foreach frag = NVVM_MMA_OPS.all_ld_ops in
+      foreach _ = NVVM_MMA_SUPPORTED<[frag], layout>.ret in
+        def WMMA_NAME_LDST<"load", frag, layout, stride>.record
+             : NVVM_WMMA_LD<frag, layout, stride>;
+    foreach frag = NVVM_MMA_OPS.all_st_ops in
+      foreach _ = NVVM_MMA_SUPPORTED<[frag], layout>.ret in
+        def WMMA_NAME_LDST<"store", frag, layout, stride>.record
+             : NVVM_WMMA_ST<frag, layout, stride>;
+  }
 }
 
-multiclass NVVM_WMMA_STD_GT<string Geometry, string Type, LLVMType regty> {
-  defm _row: NVVM_WMMA_STD_GLT<Geometry, "row", Type, regty>;
-  defm _col: NVVM_WMMA_STD_GLT<Geometry, "col", Type, regty>;
-}
-multiclass NVVM_WMMA_STD_G<string Geometry> {
-  defm _d_f16: NVVM_WMMA_STD_GT<Geometry, "f16", llvm_v2f16_ty>;
-  defm _d_f32: NVVM_WMMA_STD_GT<Geometry, "f32", llvm_float_ty>;
-}
-
-multiclass NVVM_WMMA_STD {
-  defm _m32n8k16_store:  NVVM_WMMA_STD_G<"m32n8k16">;
-  defm _m16n16k16_store: NVVM_WMMA_STD_G<"m16n16k16">;
-  defm _m8n32k16_store:  NVVM_WMMA_STD_G<"m8n32k16">;
-}
-
-defm int_nvvm_wmma: NVVM_WMMA_STD;
-
 // WMMA.MMA
-class NVVM_WMMA_MMA_GABDCS<string Geometry,
-                           string ALayout, string BLayout,
-                           string DType, LLVMType d_regty,
-                           string CType, LLVMType c_regty,
-                           string Satfinite = "">
-  : Intrinsic<!if(!eq(DType,"f16"),
-                      [d_regty, d_regty, d_regty, d_regty],
-                      [d_regty, d_regty, d_regty, d_regty,
-                       d_regty, d_regty, d_regty, d_regty]),
-              !listconcat(
-                [// A
-                llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty,
-                llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty,
-                // B
-                llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty,
-                llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty],
-                !if(!eq(CType,"f16"),
-                      [c_regty, c_regty, c_regty, c_regty],
-                      [c_regty, c_regty, c_regty, c_regty,
-                       c_regty, c_regty, c_regty, c_regty])),
+class NVVM_WMMA_MMA<string ALayout, string BLayout, int Satfinite,
+                    WMMA_REGS A, WMMA_REGS B,
+                    WMMA_REGS C, WMMA_REGS D>
+  : Intrinsic<D.regs,
+              !listconcat(A.regs, B.regs, C.regs),
               [IntrNoMem],
-              "llvm.nvvm.wmma."
-                # Geometry
-                # ".mma"
-                # "." # ALayout
-                # "." # BLayout
-                # "." # DType
-                # "." # CType
-                # Satfinite> {
-}
+              WMMA_NAME_MMA<ALayout, BLayout, Satfinite, A, B, C, D>.llvm>;
 
-multiclass NVVM_WMMA_MMA_GABDC<string Geometry, string ALayout, string BLayout,
-                               string DType, LLVMType d_regty,
-                               string CType, LLVMType c_regty> {
-  def NAME : NVVM_WMMA_MMA_GABDCS<Geometry, ALayout, BLayout,
-                                  DType, d_regty, CType, c_regty>;
-  def _satfinite: NVVM_WMMA_MMA_GABDCS<Geometry, ALayout, BLayout,
-                                       DType, d_regty, CType, c_regty,".satfinite">;
-}
-
-multiclass NVVM_WMMA_MMA_GABD<string Geometry, string ALayout, string BLayout,
-                              string DType, LLVMType d_regty> {
-  defm _f16: NVVM_WMMA_MMA_GABDC<Geometry, ALayout, BLayout, DType, d_regty,
-                                "f16", llvm_v2f16_ty>;
-  defm _f32: NVVM_WMMA_MMA_GABDC<Geometry, ALayout, BLayout, DType, d_regty,
-                                "f32", llvm_float_ty>;
-}
-
-multiclass NVVM_WMMA_MMA_GAB<string Geometry, string ALayout, string BLayout> {
-  defm _f16: NVVM_WMMA_MMA_GABD<Geometry, ALayout, BLayout, "f16", llvm_v2f16_ty>;
-  defm _f32: NVVM_WMMA_MMA_GABD<Geometry, ALayout, BLayout, "f32", llvm_float_ty>;
-}
-
-multiclass NVVM_WMMA_MMA_GA<string Geometry, string ALayout> {
-  defm _col: NVVM_WMMA_MMA_GAB<Geometry, ALayout, "col">;
-  defm _row: NVVM_WMMA_MMA_GAB<Geometry, ALayout, "row">;
-}
-
-multiclass NVVM_WMMA_MMA_G<string Geometry> {
-  defm _col: NVVM_WMMA_MMA_GA<Geometry, "col">;
-  defm _row: NVVM_WMMA_MMA_GA<Geometry, "row">;
-}
-
-multiclass NVVM_WMMA_MMA {
-  defm _m32n8k16_mma : NVVM_WMMA_MMA_G<"m32n8k16">;
-  defm _m16n16k16_mma : NVVM_WMMA_MMA_G<"m16n16k16">;
-  defm _m8n32k16_mma : NVVM_WMMA_MMA_G<"m8n32k16">;
-}
-
-defm int_nvvm_wmma : NVVM_WMMA_MMA;
+foreach layout_a = ["row", "col"] in {
+  foreach layout_b = ["row", "col"] in {
+    foreach satf = [0, 1] in {
+      foreach op = NVVM_MMA_OPS.all_mma_ops in {
+        foreach _ = NVVM_MMA_SUPPORTED<op, layout_a, layout_b, satf>.ret in {
+          def WMMA_NAME_MMA<layout_a, layout_b, satf,
+                            op[0], op[1], op[2], op[3]>.record
+            : NVVM_WMMA_MMA<layout_a, layout_b, satf,
+                            op[0], op[1], op[2], op[3]>;
+        }
+      }
+    } // satf
+  } // layout_b
+} // layout_a
 
 } // let TargetPrefix = "nvvm"
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td b/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td
index e6b0884..f873174 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td
@@ -18,7 +18,8 @@
 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
   // dcba/dcbf/dcbi/dcbst/dcbt/dcbz/dcbzl(PPC970) instructions.
   def int_ppc_dcba  : Intrinsic<[], [llvm_ptr_ty], []>;
-  def int_ppc_dcbf  : Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbf  : GCCBuiltin<"__builtin_dcbf">,
+                      Intrinsic<[], [llvm_ptr_ty], []>;
   def int_ppc_dcbi  : Intrinsic<[], [llvm_ptr_ty], []>;
   def int_ppc_dcbst : Intrinsic<[], [llvm_ptr_ty], []>;
   def int_ppc_dcbt  : Intrinsic<[], [llvm_ptr_ty],
@@ -609,16 +610,16 @@
   // FP <-> integer conversion.
   def int_ppc_altivec_vcfsx : GCCBuiltin<"__builtin_altivec_vcfsx">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
   def int_ppc_altivec_vcfux : GCCBuiltin<"__builtin_altivec_vcfux">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
   def int_ppc_altivec_vctsxs : GCCBuiltin<"__builtin_altivec_vctsxs">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
   def int_ppc_altivec_vctuxs : GCCBuiltin<"__builtin_altivec_vctuxs">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
 
   def int_ppc_altivec_vrfim : GCCBuiltin<"__builtin_altivec_vrfim">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
@@ -715,11 +716,11 @@
 def int_ppc_altivec_crypto_vshasigmad :
             GCCBuiltin<"__builtin_altivec_crypto_vshasigmad">,
             Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
-                       llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                       llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>, ImmArg<2>]>;
 def int_ppc_altivec_crypto_vshasigmaw :
             GCCBuiltin<"__builtin_altivec_crypto_vshasigmaw">,
             Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
-                       llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                       llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>, ImmArg<2>]>;
 }
 def int_ppc_altivec_crypto_vcipher :
             PowerPC_Vec_DDD_Intrinsic<"crypto_vcipher">;
@@ -914,10 +915,10 @@
                             [llvm_v4f32_ty], [IntrNoMem]>;
 def int_ppc_vsx_xvtstdcdp :
       PowerPC_VSX_Intrinsic<"xvtstdcdp", [llvm_v2i64_ty],
-                            [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+                            [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_ppc_vsx_xvtstdcsp :
       PowerPC_VSX_Intrinsic<"xvtstdcsp", [llvm_v4i32_ty],
-                            [llvm_v4f32_ty,llvm_i32_ty], [IntrNoMem]>;
+                            [llvm_v4f32_ty,llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 def int_ppc_vsx_xvcvhpsp :
       PowerPC_VSX_Intrinsic<"xvcvhpsp", [llvm_v4f32_ty],
                             [llvm_v8i16_ty],[IntrNoMem]>;
@@ -1112,9 +1113,9 @@
 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
 
 def int_ppc_tbegin : GCCBuiltin<"__builtin_tbegin">,
-      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
+      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<0>]>;
 def int_ppc_tend : GCCBuiltin<"__builtin_tend">,
-      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
+      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<0>]>;
 
 def int_ppc_tabort : GCCBuiltin<"__builtin_tabort">,
       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
@@ -1166,4 +1167,9 @@
       Intrinsic<[llvm_i64_ty], [], []>;
 
 def int_ppc_cfence : Intrinsic<[], [llvm_anyint_ty], []>;
+
+// PowerPC set FPSCR Intrinsic Definitions.
+def int_ppc_setrnd : GCCBuiltin<"__builtin_setrnd">,
+      Intrinsic<[llvm_double_ty], [llvm_i32_ty], []>;
+
 }
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsRISCV.td b/linux-x64/clang/include/llvm/IR/IntrinsicsRISCV.td
index 5b13fc4..6039318 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsRISCV.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsRISCV.td
@@ -18,13 +18,13 @@
 class MaskedAtomicRMW32Intrinsic
     : Intrinsic<[llvm_i32_ty],
                 [llvm_anyptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
-                [IntrArgMemOnly, NoCapture<0>]>;
+                [IntrArgMemOnly, NoCapture<0>, ImmArg<3>]>;
 
 class MaskedAtomicRMW32WithSextIntrinsic
     : Intrinsic<[llvm_i32_ty],
                 [llvm_anyptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
                  llvm_i32_ty],
-                [IntrArgMemOnly, NoCapture<0>]>;
+                [IntrArgMemOnly, NoCapture<0>, ImmArg<4>]>;
 
 def int_riscv_masked_atomicrmw_xchg_i32 : MaskedAtomicRMW32Intrinsic;
 def int_riscv_masked_atomicrmw_add_i32  : MaskedAtomicRMW32Intrinsic;
@@ -38,18 +38,18 @@
 def int_riscv_masked_cmpxchg_i32
     : Intrinsic<[llvm_i32_ty], [llvm_anyptr_ty, llvm_i32_ty, llvm_i32_ty,
                                 llvm_i32_ty, llvm_i32_ty],
-                [IntrArgMemOnly, NoCapture<0>]>;
+                [IntrArgMemOnly, NoCapture<0>, ImmArg<4>]>;
 
 class MaskedAtomicRMW64Intrinsic
     : Intrinsic<[llvm_i64_ty],
                 [llvm_anyptr_ty, llvm_i64_ty, llvm_i64_ty, llvm_i64_ty],
-                [IntrArgMemOnly, NoCapture<0>]>;
+                [IntrArgMemOnly, NoCapture<0>, ImmArg<3>]>;
 
 class MaskedAtomicRMW64WithSextIntrinsic
     : Intrinsic<[llvm_i64_ty],
                 [llvm_anyptr_ty, llvm_i64_ty, llvm_i64_ty, llvm_i64_ty,
                  llvm_i64_ty],
-                [IntrArgMemOnly, NoCapture<0>]>;
+                [IntrArgMemOnly, NoCapture<0>, ImmArg<4>]>;
 
 def int_riscv_masked_atomicrmw_xchg_i64 : MaskedAtomicRMW64Intrinsic;
 def int_riscv_masked_atomicrmw_add_i64  : MaskedAtomicRMW64Intrinsic;
@@ -63,6 +63,6 @@
 def int_riscv_masked_cmpxchg_i64
     : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty, llvm_i64_ty, llvm_i64_ty,
                                 llvm_i64_ty, llvm_i64_ty],
-                [IntrArgMemOnly, NoCapture<0>]>;
+                [IntrArgMemOnly, NoCapture<0>, ImmArg<4>]>;
 
 } // TargetPrefix = "riscv"
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsSystemZ.td b/linux-x64/clang/include/llvm/IR/IntrinsicsSystemZ.td
index 91e66dd..68ac285 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsSystemZ.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsSystemZ.td
@@ -38,7 +38,8 @@
   : Intrinsic<[result, llvm_i32_ty], [arg, arg], [IntrNoMem]>;
 
 class SystemZBinaryConvIntCC<LLVMType result, LLVMType arg>
-  : Intrinsic<[result, llvm_i32_ty], [arg, llvm_i32_ty], [IntrNoMem]>;
+  : Intrinsic<[result, llvm_i32_ty], [arg, llvm_i32_ty],
+              [IntrNoMem, ImmArg<1>]>;
 
 class SystemZBinaryCC<LLVMType type>
   : SystemZBinaryConvCC<type, type>;
@@ -52,18 +53,20 @@
 
 class SystemZTernaryInt<string name, LLVMType type>
   : GCCBuiltin<"__builtin_s390_" ## name>,
-    Intrinsic<[type], [type, type, llvm_i32_ty], [IntrNoMem]>;
+    Intrinsic<[type], [type, type, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
 
 class SystemZTernaryIntCC<LLVMType type>
-  : Intrinsic<[type, llvm_i32_ty], [type, type, llvm_i32_ty], [IntrNoMem]>;
+  : Intrinsic<[type, llvm_i32_ty], [type, type, llvm_i32_ty],
+              [IntrNoMem, ImmArg<2>]>;
 
 class SystemZQuaternaryInt<string name, LLVMType type>
   : GCCBuiltin<"__builtin_s390_" ## name>,
-    Intrinsic<[type], [type, type, type, llvm_i32_ty], [IntrNoMem]>;
+    Intrinsic<[type], [type, type, type, llvm_i32_ty],
+    [IntrNoMem, ImmArg<3>]>;
 
 class SystemZQuaternaryIntCC<LLVMType type>
   : Intrinsic<[type, llvm_i32_ty], [type, type, type, llvm_i32_ty],
-              [IntrNoMem]>;
+              [IntrNoMem, ImmArg<3>]>;
 
 multiclass SystemZUnaryExtBHF<string name> {
   def b : SystemZUnaryConv<name##"b", llvm_v8i16_ty, llvm_v16i8_ty>;
@@ -179,7 +182,8 @@
   def f : SystemZQuaternaryInt<name##"f", llvm_v4i32_ty>;
 }
 
-multiclass SystemZQuaternaryIntBHFG<string name> : SystemZQuaternaryIntBHF<name> {
+multiclass SystemZQuaternaryIntBHFG<string name> :
+  SystemZQuaternaryIntBHF<name> {
   def g : SystemZQuaternaryInt<name##"g", llvm_v2i64_ty>;
 }
 
@@ -231,11 +235,11 @@
 let TargetPrefix = "s390" in {
   def int_s390_lcbb : GCCBuiltin<"__builtin_s390_lcbb">,
                       Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
-                                [IntrNoMem]>;
+                                [IntrNoMem, ImmArg<1>]>;
 
   def int_s390_vlbb : GCCBuiltin<"__builtin_s390_vlbb">,
                       Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
-                                [IntrReadMem, IntrArgMemOnly]>;
+                                [IntrReadMem, IntrArgMemOnly, ImmArg<1>]>;
 
   def int_s390_vll : GCCBuiltin<"__builtin_s390_vll">,
                      Intrinsic<[llvm_v16i8_ty], [llvm_i32_ty, llvm_ptr_ty],
@@ -244,7 +248,7 @@
   def int_s390_vpdi : GCCBuiltin<"__builtin_s390_vpdi">,
                       Intrinsic<[llvm_v2i64_ty],
                                 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
-                                [IntrNoMem]>;
+                                [IntrNoMem, ImmArg<2>]>;
 
   def int_s390_vperm : GCCBuiltin<"__builtin_s390_vperm">,
                        Intrinsic<[llvm_v16i8_ty],
@@ -310,7 +314,7 @@
   def int_s390_vsldb : GCCBuiltin<"__builtin_s390_vsldb">,
                        Intrinsic<[llvm_v16i8_ty],
                                  [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
-                                 [IntrNoMem]>;
+                                 [IntrNoMem, ImmArg<2>]>;
 
   defm int_s390_vscbi : SystemZBinaryBHFG<"vscbi">;
 
@@ -369,7 +373,7 @@
 
   def int_s390_vfidb : Intrinsic<[llvm_v2f64_ty],
                                  [llvm_v2f64_ty, llvm_i32_ty, llvm_i32_ty],
-                                 [IntrNoMem]>;
+                                 [IntrNoMem, ImmArg<1>, ImmArg<2>]>;
 
   // Instructions from the Vector Enhancements Facility 1
   def int_s390_vbperm : SystemZBinaryConv<"vbperm", llvm_v2i64_ty,
@@ -378,20 +382,20 @@
   def int_s390_vmslg  : GCCBuiltin<"__builtin_s390_vmslg">,
                         Intrinsic<[llvm_v16i8_ty],
                                   [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v16i8_ty,
-                                   llvm_i32_ty], [IntrNoMem]>;
+                                   llvm_i32_ty], [IntrNoMem, ImmArg<3>]>;
 
   def int_s390_vfmaxdb : Intrinsic<[llvm_v2f64_ty],
                                    [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty],
-                                   [IntrNoMem]>;
+                                   [IntrNoMem, ImmArg<2>]>;
   def int_s390_vfmindb : Intrinsic<[llvm_v2f64_ty],
                                    [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty],
-                                   [IntrNoMem]>;
+                                   [IntrNoMem, ImmArg<2>]>;
   def int_s390_vfmaxsb : Intrinsic<[llvm_v4f32_ty],
                                    [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty],
-                                   [IntrNoMem]>;
+                                   [IntrNoMem, ImmArg<2>]>;
   def int_s390_vfminsb : Intrinsic<[llvm_v4f32_ty],
                                    [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty],
-                                   [IntrNoMem]>;
+                                   [IntrNoMem, ImmArg<2>]>;
 
   def int_s390_vfcesbs  : SystemZBinaryConvCC<llvm_v4i32_ty, llvm_v4f32_ty>;
   def int_s390_vfchsbs  : SystemZBinaryConvCC<llvm_v4i32_ty, llvm_v4f32_ty>;
@@ -401,7 +405,7 @@
 
   def int_s390_vfisb : Intrinsic<[llvm_v4f32_ty],
                                  [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty],
-                                 [IntrNoMem]>;
+                                 [IntrNoMem, ImmArg<1>, ImmArg<2>]>;
 
   // Instructions from the Vector Packed Decimal Facility
   def int_s390_vlrl : GCCBuiltin<"__builtin_s390_vlrl">,
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td b/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td
index bfeb706..1731995 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td
@@ -40,8 +40,8 @@
 
 // throw / rethrow
 def int_wasm_throw : Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty],
-                               [Throws, IntrNoReturn]>;
-def int_wasm_rethrow : Intrinsic<[], [], [Throws, IntrNoReturn]>;
+                               [Throws, IntrNoReturn, ImmArg<0>]>;
+def int_wasm_rethrow_in_catch : Intrinsic<[], [], [Throws, IntrNoReturn]>;
 
 // Since wasm does not use landingpad instructions, these instructions return
 // exception pointer and selector values until we lower them in WasmEHPrepare.
@@ -58,7 +58,7 @@
 // by WasmEHPrepare pass to generate landingpad table in EHStreamer. This is
 // used in order to give them the indices in WasmEHPrepare.
 def int_wasm_landingpad_index: Intrinsic<[], [llvm_token_ty, llvm_i32_ty],
-                                         [IntrNoMem]>;
+                                         [IntrNoMem, ImmArg<1>]>;
 
 // Returns LSDA address of the current function.
 def int_wasm_lsda : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
@@ -118,10 +118,10 @@
   Intrinsic<[],
             [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
             [IntrWriteMem, IntrInaccessibleMemOrArgMemOnly, WriteOnly<2>,
-             IntrHasSideEffects]>;
+             IntrHasSideEffects, ImmArg<0>, ImmArg<1>]>;
 def int_wasm_data_drop :
   Intrinsic<[],
             [llvm_i32_ty],
-            [IntrNoDuplicate, IntrHasSideEffects]>;
+            [IntrNoDuplicate, IntrHasSideEffects, ImmArg<0>]>;
 
 } // TargetPrefix = "wasm"
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td b/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td
index a8c8cba..236d312 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td
@@ -13,7 +13,7 @@
 //===----------------------------------------------------------------------===//
 // Interrupt traps
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_int : Intrinsic<[], [llvm_i8_ty]>;
+  def int_x86_int : Intrinsic<[], [llvm_i8_ty], [ImmArg<0>]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -203,12 +203,12 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem, ImmArg<2>]>;
   // NOTE: This comparison intrinsic is not used by clang as long as the
   //       distinction in signaling behaviour is not implemented.
   def int_x86_sse_cmp_ps :
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse_comieq_ss : GCCBuiltin<"__builtin_ia32_comieq">,
               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
                          llvm_v4f32_ty], [IntrNoMem]>;
@@ -277,9 +277,17 @@
 // Control register.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse_stmxcsr :
-              Intrinsic<[], [llvm_ptr_ty], []>;
+              Intrinsic<[], [llvm_ptr_ty],
+                         [IntrWriteMem, IntrArgMemOnly,
+                         // This prevents reordering with ldmxcsr
+                         IntrHasSideEffects]>;
   def int_x86_sse_ldmxcsr :
-              Intrinsic<[], [llvm_ptr_ty], []>;
+              Intrinsic<[], [llvm_ptr_ty],
+                        [IntrReadMem, IntrArgMemOnly, IntrHasSideEffects,
+                         // FIXME: LDMXCSR does not actualy write to memory,
+                         // but Fast and DAG Isel both use writing to memory
+                         // as a proxy for having side effects.
+                         IntrWriteMem]>;
 }
 
 // Misc.
@@ -311,12 +319,12 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse2_cmp_sd : GCCBuiltin<"__builtin_ia32_cmpsd">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem, ImmArg<2>]>;
   // NOTE: This comparison intrinsic is not used by clang as long as the
   //       distinction in signaling behaviour is not implemented.
   def int_x86_sse2_cmp_pd :
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse2_comieq_sd : GCCBuiltin<"__builtin_ia32_comisdeq">,
               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
                          llvm_v2f64_ty], [IntrNoMem]>;
@@ -366,6 +374,12 @@
   def int_x86_sse2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
+  def int_x86_sse2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb128">,
+              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
+                         llvm_v16i8_ty], [IntrNoMem, Commutative]>;
+  def int_x86_sse2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw128">,
+              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
+                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
   def int_x86_sse2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty,
                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
@@ -398,6 +412,7 @@
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
                          llvm_v4i32_ty], [IntrNoMem]>;
 
+  // Oddly these don't require an immediate due to a gcc compatibility issue.
   def int_x86_sse2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_i32_ty], [IntrNoMem]>;
@@ -603,7 +618,7 @@
                          llvm_v16i8_ty], [IntrNoMem]>;
   def int_x86_sse_pshuf_w           : GCCBuiltin<"__builtin_ia32_pshufw">,
               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
-                         [IntrNoMem]>;
+                         [IntrNoMem, ImmArg<1>]>;
 }
 
 // Sign ops
@@ -649,16 +664,16 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse41_round_ss        : GCCBuiltin<"__builtin_ia32_roundss">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse41_round_ps        : GCCBuiltin<"__builtin_ia32_roundps">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
   def int_x86_sse41_round_sd        : GCCBuiltin<"__builtin_ia32_roundsd">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse41_round_pd        : GCCBuiltin<"__builtin_ia32_roundpd">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 }
 
 // Vector min element
@@ -721,20 +736,20 @@
   def int_x86_aesni_aeskeygenassist :
               GCCBuiltin<"__builtin_ia32_aeskeygenassist128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
 }
 
 // PCLMUL instructions
 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
   def int_x86_pclmulqdq : GCCBuiltin<"__builtin_ia32_pclmulqdq128">,
           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<2>]>;
   def int_x86_pclmulqdq_256 : GCCBuiltin<"__builtin_ia32_pclmulqdq256">,
           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<2>]>;
   def int_x86_pclmulqdq_512 : GCCBuiltin<"__builtin_ia32_pclmulqdq512">,
           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<2>]>;
 }
 
 // Vector pack
@@ -748,7 +763,7 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse41_insertps       : GCCBuiltin<"__builtin_ia32_insertps128">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<2>]>;
 }
 
 // Vector blend
@@ -768,17 +783,17 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse41_dppd            : GCCBuiltin<"__builtin_ia32_dppd">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
-                    [IntrNoMem, Commutative]>;
+                    [IntrNoMem, Commutative, ImmArg<2>]>;
   def int_x86_sse41_dpps            : GCCBuiltin<"__builtin_ia32_dpps">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
-                    [IntrNoMem, Commutative]>;
+                    [IntrNoMem, Commutative, ImmArg<2>]>;
 }
 
 // Vector sum of absolute differences
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse41_mpsadbw         : GCCBuiltin<"__builtin_ia32_mpsadbw128">,
           Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_i8_ty],
-                    [IntrNoMem, Commutative]>;
+                    [IntrNoMem, Commutative, ImmArg<2>]>;
 }
 
 // Test instruction with bitwise comparison.
@@ -819,66 +834,66 @@
   def int_x86_sse42_pcmpistrm128  : GCCBuiltin<"__builtin_ia32_pcmpistrm128">,
     Intrinsic<[llvm_v16i8_ty],
         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse42_pcmpistri128  : GCCBuiltin<"__builtin_ia32_pcmpistri128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse42_pcmpistria128 : GCCBuiltin<"__builtin_ia32_pcmpistria128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse42_pcmpistric128 : GCCBuiltin<"__builtin_ia32_pcmpistric128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse42_pcmpistrio128 : GCCBuiltin<"__builtin_ia32_pcmpistrio128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse42_pcmpistris128 : GCCBuiltin<"__builtin_ia32_pcmpistris128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse42_pcmpistriz128 : GCCBuiltin<"__builtin_ia32_pcmpistriz128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<2>]>;
   def int_x86_sse42_pcmpestrm128  : GCCBuiltin<"__builtin_ia32_pcmpestrm128">,
     Intrinsic<[llvm_v16i8_ty],
         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
          llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<4>]>;
   def int_x86_sse42_pcmpestri128  : GCCBuiltin<"__builtin_ia32_pcmpestri128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
          llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<4>]>;
   def int_x86_sse42_pcmpestria128 : GCCBuiltin<"__builtin_ia32_pcmpestria128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
          llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<4>]>;
   def int_x86_sse42_pcmpestric128 : GCCBuiltin<"__builtin_ia32_pcmpestric128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
          llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<4>]>;
   def int_x86_sse42_pcmpestrio128 : GCCBuiltin<"__builtin_ia32_pcmpestrio128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
          llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<4>]>;
   def int_x86_sse42_pcmpestris128 : GCCBuiltin<"__builtin_ia32_pcmpestris128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
          llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<4>]>;
   def int_x86_sse42_pcmpestriz128 : GCCBuiltin<"__builtin_ia32_pcmpestriz128">,
     Intrinsic<[llvm_i32_ty],
         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
          llvm_i8_ty],
-        [IntrNoMem]>;
+        [IntrNoMem, ImmArg<4>]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -887,13 +902,14 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse4a_extrqi : GCCBuiltin<"__builtin_ia32_extrqi">,
     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty],
-              [IntrNoMem]>;
+              [IntrNoMem, ImmArg<1>, ImmArg<2>]>;
   def int_x86_sse4a_extrq  : GCCBuiltin<"__builtin_ia32_extrq">,
     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], [IntrNoMem]>;
 
   def int_x86_sse4a_insertqi : GCCBuiltin<"__builtin_ia32_insertqi">,
     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
-                                llvm_i8_ty, llvm_i8_ty], [IntrNoMem]>;
+                                llvm_i8_ty, llvm_i8_ty],
+              [IntrNoMem, ImmArg<2>, ImmArg<3>]>;
   def int_x86_sse4a_insertq  : GCCBuiltin<"__builtin_ia32_insertq">,
     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 }
@@ -930,10 +946,10 @@
 
   def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">,
         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
-                  llvm_i32_ty], [IntrNoMem]>;
+                  llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">,
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
-                  llvm_i32_ty], [IntrNoMem]>;
+                  llvm_i32_ty], [IntrNoMem, ImmArg<1>]>;
 }
 
 // Horizontal ops
@@ -1085,33 +1101,33 @@
          GCCBuiltin<"__builtin_ia32_vgf2p8affineinvqb_v16qi">,
           Intrinsic<[llvm_v16i8_ty],
           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<2>]>;
   def int_x86_vgf2p8affineinvqb_256 :
          GCCBuiltin<"__builtin_ia32_vgf2p8affineinvqb_v32qi">,
           Intrinsic<[llvm_v32i8_ty],
           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<2>]>;
   def int_x86_vgf2p8affineinvqb_512 :
          GCCBuiltin<"__builtin_ia32_vgf2p8affineinvqb_v64qi">,
           Intrinsic<[llvm_v64i8_ty],
           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_vgf2p8affineqb_128 :
          GCCBuiltin<"__builtin_ia32_vgf2p8affineqb_v16qi">,
           Intrinsic<[llvm_v16i8_ty],
           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<2>]>;
   def int_x86_vgf2p8affineqb_256 :
          GCCBuiltin<"__builtin_ia32_vgf2p8affineqb_v32qi">,
           Intrinsic<[llvm_v32i8_ty],
           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<2>]>;
   def int_x86_vgf2p8affineqb_512 :
          GCCBuiltin<"__builtin_ia32_vgf2p8affineqb_v64qi">,
           Intrinsic<[llvm_v64i8_ty],
           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_vgf2p8mulb_128     :
          GCCBuiltin<"__builtin_ia32_vgf2p8mulb_v16qi">,
@@ -1144,17 +1160,18 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">,
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
-                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem, Commutative]>;
+                  llvm_v8f32_ty, llvm_i8_ty],
+                  [IntrNoMem, Commutative, ImmArg<2>]>;
 }
 
 // Vector compare
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_avx_cmp_pd_256 :
         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
-                  llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
+                  llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx_cmp_ps_256 :
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
-                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
+                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem, ImmArg<2>]>;
 }
 
 // Vector convert
@@ -1221,30 +1238,30 @@
 
   def int_x86_avx512_fpclass_pd_128 :
           Intrinsic<[llvm_v2i1_ty], [llvm_v2f64_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_fpclass_pd_256 :
           Intrinsic<[llvm_v4i1_ty], [llvm_v4f64_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_fpclass_pd_512 :
           Intrinsic<[llvm_v8i1_ty], [llvm_v8f64_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_fpclass_ps_128 :
           Intrinsic<[llvm_v4i1_ty], [llvm_v4f32_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_fpclass_ps_256 :
           Intrinsic<[llvm_v8i1_ty], [llvm_v8f32_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_fpclass_ps_512 :
           Intrinsic<[llvm_v16i1_ty], [llvm_v16f32_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_fpclass_sd :
          GCCBuiltin<"__builtin_ia32_fpclasssd_mask">,
           Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_fpclass_ss :
          GCCBuiltin<"__builtin_ia32_fpclassss_mask">,
           Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
 }
 
 // Vector extract sign mask
@@ -1327,6 +1344,12 @@
   def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty,
                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
+  def int_x86_avx2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb256">,
+              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
+                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
+  def int_x86_avx2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw256">,
+              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
+                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   def int_x86_avx2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw256">,
               Intrinsic<[llvm_v4i64_ty], [llvm_v32i8_ty,
                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
@@ -1359,6 +1382,7 @@
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
                          llvm_v4i32_ty], [IntrNoMem]>;
 
+  // Oddly these don't require an immediate due to a gcc compatibility issue.
   def int_x86_avx2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi256">,
               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
                          llvm_i32_ty], [IntrNoMem]>;
@@ -1391,6 +1415,7 @@
               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
                          llvm_v2i64_ty], [IntrNoMem]>;
 
+  // Oddly these don't require an immediate due to a gcc compatibility issue.
   def int_x86_avx512_psrai_q_128 : GCCBuiltin<"__builtin_ia32_psraqi128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
                          llvm_i32_ty], [IntrNoMem]>;
@@ -1426,6 +1451,7 @@
               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
                          llvm_v2i64_ty], [IntrNoMem]>;
 
+  // Oddly these don't require an immediate due to a gcc compatibility issue.
   def int_x86_avx512_pslli_w_512 : GCCBuiltin<"__builtin_ia32_psllwi512">,
               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
                          llvm_i32_ty], [IntrNoMem]>;
@@ -1676,71 +1702,73 @@
 
 // Gather ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  // NOTE: These can't be ArgMemOnly because you can put the address completely
+  // in the index register.
   def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">,
       Intrinsic<[llvm_v2f64_ty],
         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">,
       Intrinsic<[llvm_v4f64_ty],
         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">,
       Intrinsic<[llvm_v2f64_ty],
         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">,
       Intrinsic<[llvm_v4f64_ty],
         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">,
       Intrinsic<[llvm_v4f32_ty],
         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">,
       Intrinsic<[llvm_v8f32_ty],
         [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">,
       Intrinsic<[llvm_v4f32_ty],
         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">,
       Intrinsic<[llvm_v4f32_ty],
         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">,
       Intrinsic<[llvm_v2i64_ty],
         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">,
       Intrinsic<[llvm_v4i64_ty],
         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">,
       Intrinsic<[llvm_v2i64_ty],
         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">,
       Intrinsic<[llvm_v4i64_ty],
         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">,
       Intrinsic<[llvm_v4i32_ty],
         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">,
       Intrinsic<[llvm_v8i32_ty],
         [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">,
       Intrinsic<[llvm_v4i32_ty],
         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">,
       Intrinsic<[llvm_v4i32_ty],
         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
-        [IntrReadMem, IntrArgMemOnly]>;
+        [IntrReadMem, ImmArg<4>]>;
 }
 
 // Misc.
@@ -1752,7 +1780,7 @@
                          llvm_v32i8_ty], [IntrNoMem]>;
   def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">,
               Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
-                         llvm_i8_ty], [IntrNoMem, Commutative]>;
+                         llvm_i8_ty], [IntrNoMem, Commutative, ImmArg<2>]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -1762,32 +1790,32 @@
   def int_x86_avx512_vfmadd_pd_512 :
           Intrinsic<[llvm_v8f64_ty],
           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_vfmadd_ps_512 :
           Intrinsic<[llvm_v16f32_ty],
           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   // TODO: Can we use 2 vfmadds+shufflevector?
   def int_x86_avx512_vfmaddsub_pd_512 :
           Intrinsic<[llvm_v8f64_ty],
           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_vfmaddsub_ps_512 :
           Intrinsic<[llvm_v16f32_ty],
           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_vfmadd_f64 :
           Intrinsic<[llvm_double_ty],
                     [llvm_double_ty, llvm_double_ty, llvm_double_ty, llvm_i32_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_vfmadd_f32 :
           Intrinsic<[llvm_float_ty],
                     [llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_i32_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_vpmadd52h_uq_128 :
               GCCBuiltin<"__builtin_ia32_vpmadd52huq128">,
@@ -1877,23 +1905,23 @@
   def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                                           llvm_v2i64_ty, llvm_i8_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_xop_vpermil2pd_256 :
               GCCBuiltin<"__builtin_ia32_vpermil2pd256">,
               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
                                           llvm_v4i64_ty, llvm_i8_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
                                           llvm_v4i32_ty, llvm_i8_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<3>]>;
   def int_x86_xop_vpermil2ps_256 :
               GCCBuiltin<"__builtin_ia32_vpermil2ps256">,
               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
                                           llvm_v8i32_ty, llvm_i8_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
@@ -2235,6 +2263,7 @@
               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_x86mmx_ty], [IntrNoMem]>;
 
+  // Oddly these don't require an immediate due to a gcc compatibility issue.
   def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">,
               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
@@ -2372,15 +2401,15 @@
 
   def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">,
               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
-                        llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>;
+                        llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">,
               Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
 
   def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">,
               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
-                        llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                        llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -2501,13 +2530,14 @@
               Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty],
-                        [IntrNoMem]>;
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">,
               Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty,
-                                           llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+                                           llvm_i16_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_mask_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256_mask">,
               Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty, llvm_v8f32_ty,
                                            llvm_i8_ty], [IntrNoMem]>;
@@ -2516,13 +2546,16 @@
                                            llvm_i8_ty], [IntrNoMem]>;
   def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">,
               Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty,
-                                           llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
+                                           llvm_v16i16_ty, llvm_i16_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256_mask">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty,
-                                           llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
+                                           llvm_v8i16_ty, llvm_i8_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph_mask">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty,
-                                           llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
+                                           llvm_v8i16_ty, llvm_i8_ty],
+                        [IntrNoMem, ImmArg<1>]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -2530,9 +2563,11 @@
 
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">,
-        Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+        Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">,
-        Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
+        Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
+                  [IntrNoMem, ImmArg<1>]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -2578,7 +2613,7 @@
   def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">,
               Intrinsic<[], [], []>;
   def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">,
-              Intrinsic<[], [llvm_i8_ty], []>;
+              Intrinsic<[], [llvm_i8_ty], [ImmArg<0>]>;
   def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">,
               Intrinsic<[llvm_i32_ty], [], []>;
 }
@@ -2619,55 +2654,71 @@
 // Conversion ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_avx512_cvttss2si : GCCBuiltin<"__builtin_ia32_vcvttss2si32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvttss2si64 : GCCBuiltin<"__builtin_ia32_vcvttss2si64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_vcvttss2usi32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_vcvttss2usi64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss32">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss64">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_cvttsd2si : GCCBuiltin<"__builtin_ia32_vcvttsd2si32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_vcvttsd2si64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_vcvttsd2usi32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvttsd2usi64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd64">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_vcvtss2usi32 : GCCBuiltin<"__builtin_ia32_vcvtss2usi32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_vcvtss2usi64 : GCCBuiltin<"__builtin_ia32_vcvtss2usi64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_vcvtss2si32 : GCCBuiltin<"__builtin_ia32_vcvtss2si32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_vcvtss2si64 : GCCBuiltin<"__builtin_ia32_vcvtss2si64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_vcvtsd2usi32 : GCCBuiltin<"__builtin_ia32_vcvtsd2usi32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_vcvtsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvtsd2usi64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_vcvtsd2si32 : GCCBuiltin<"__builtin_ia32_vcvtsd2si32">,
-              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_vcvtsd2si64 : GCCBuiltin<"__builtin_ia32_vcvtsd2si64">,
-              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_cvtsi2ss32 : GCCBuiltin<"__builtin_ia32_cvtsi2ss32">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_cvtsi2ss64 : GCCBuiltin<"__builtin_ia32_cvtsi2ss64">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_cvtsi2sd64 : GCCBuiltin<"__builtin_ia32_cvtsi2sd64">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
 }
 
 // Pack ops.
@@ -2690,11 +2741,11 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_avx512_sitofp_round :
           Intrinsic<[llvm_anyfloat_ty], [llvm_anyint_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<1>]>;
 
   def int_x86_avx512_uitofp_round :
           Intrinsic<[llvm_anyfloat_ty], [llvm_anyint_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<1>]>;
 
   def int_x86_avx512_mask_cvtpd2dq_128 :
         GCCBuiltin<"__builtin_ia32_cvtpd2dq128_mask">,
@@ -2706,25 +2757,25 @@
         GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">,
           Intrinsic<[llvm_v8i32_ty],
           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtpd2ps_512 :
         GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">,
           Intrinsic<[llvm_v8f32_ty],
           [llvm_v8f64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtsd2ss_round :
         GCCBuiltin<"__builtin_ia32_cvtsd2ss_round_mask">,
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_v2f64_ty, llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_cvtss2sd_round :
         GCCBuiltin<"__builtin_ia32_cvtss2sd_round_mask">,
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_v4f32_ty, llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_cvtpd2ps :
         GCCBuiltin<"__builtin_ia32_cvtpd2ps_mask">,
@@ -2748,7 +2799,7 @@
         GCCBuiltin<"__builtin_ia32_cvtpd2qq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtpd2udq_128 :
         GCCBuiltin<"__builtin_ia32_cvtpd2udq128_mask">,
@@ -2766,7 +2817,7 @@
         GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">,
           Intrinsic<[llvm_v8i32_ty],
           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtpd2uqq_128 :
         GCCBuiltin<"__builtin_ia32_cvtpd2uqq128_mask">,
@@ -2784,7 +2835,7 @@
         GCCBuiltin<"__builtin_ia32_cvtpd2uqq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtps2dq_128 :
         GCCBuiltin<"__builtin_ia32_cvtps2dq128_mask">,
@@ -2802,13 +2853,13 @@
         GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">,
           Intrinsic<[llvm_v16i32_ty],
           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtps2pd_512 :
         GCCBuiltin<"__builtin_ia32_cvtps2pd512_mask">,
           Intrinsic<[llvm_v8f64_ty],
           [llvm_v8f32_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtps2qq_128 :
         GCCBuiltin<"__builtin_ia32_cvtps2qq128_mask">,
@@ -2826,7 +2877,7 @@
         GCCBuiltin<"__builtin_ia32_cvtps2qq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtps2udq_128 :
         GCCBuiltin<"__builtin_ia32_cvtps2udq128_mask">,
@@ -2844,7 +2895,7 @@
         GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">,
           Intrinsic<[llvm_v16i32_ty],
           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtps2uqq_128 :
         GCCBuiltin<"__builtin_ia32_cvtps2uqq128_mask">,
@@ -2862,7 +2913,7 @@
         GCCBuiltin<"__builtin_ia32_cvtps2uqq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtqq2ps_128 :
         GCCBuiltin<"__builtin_ia32_cvtqq2ps128_mask">,
@@ -2880,7 +2931,7 @@
         GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">,
           Intrinsic<[llvm_v8i32_ty],
           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvttpd2qq_128 :
         GCCBuiltin<"__builtin_ia32_cvttpd2qq128_mask">,
@@ -2898,7 +2949,7 @@
         GCCBuiltin<"__builtin_ia32_cvttpd2qq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvttpd2udq_128 :
         GCCBuiltin<"__builtin_ia32_cvttpd2udq128_mask">,
@@ -2916,7 +2967,7 @@
         GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">,
           Intrinsic<[llvm_v8i32_ty],
           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvttpd2uqq_128 :
         GCCBuiltin<"__builtin_ia32_cvttpd2uqq128_mask">,
@@ -2934,13 +2985,13 @@
         GCCBuiltin<"__builtin_ia32_cvttpd2uqq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvttps2dq_512 :
         GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">,
           Intrinsic<[llvm_v16i32_ty],
           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvttps2qq_128 :
         GCCBuiltin<"__builtin_ia32_cvttps2qq128_mask">,
@@ -2958,7 +3009,7 @@
         GCCBuiltin<"__builtin_ia32_cvttps2qq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvttps2udq_128 :
         GCCBuiltin<"__builtin_ia32_cvttps2udq128_mask">,
@@ -2976,7 +3027,7 @@
         GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">,
           Intrinsic<[llvm_v16i32_ty],
           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvttps2uqq_128 :
         GCCBuiltin<"__builtin_ia32_cvttps2uqq128_mask">,
@@ -2994,7 +3045,7 @@
         GCCBuiltin<"__builtin_ia32_cvttps2uqq512_mask">,
           Intrinsic<[llvm_v8i64_ty],
           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_cvtuqq2ps_128 :
         GCCBuiltin<"__builtin_ia32_cvtuqq2ps128_mask">,
@@ -3004,58 +3055,76 @@
 
   def int_x86_avx512_mask_rndscale_pd_128 : GCCBuiltin<"__builtin_ia32_rndscalepd_128_mask">,
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty,
-                                     llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v2f64_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_rndscale_pd_256 : GCCBuiltin<"__builtin_ia32_rndscalepd_256_mask">,
         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
-                                     llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v4f64_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_rndscale_pd_512 : GCCBuiltin<"__builtin_ia32_rndscalepd_mask">,
         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
-                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                     llvm_i8_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<1>, ImmArg<4>]>;
   def int_x86_avx512_mask_rndscale_ps_128 : GCCBuiltin<"__builtin_ia32_rndscaleps_128_mask">,
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty,
-                                     llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v4f32_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_rndscale_ps_256 : GCCBuiltin<"__builtin_ia32_rndscaleps_256_mask">,
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
-                                     llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v8f32_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_rndscale_ps_512 : GCCBuiltin<"__builtin_ia32_rndscaleps_mask">,
         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
-                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+                                     llvm_i16_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<1>, ImmArg<4>]>;
   def int_x86_avx512_mask_reduce_pd_128 : GCCBuiltin<"__builtin_ia32_reducepd128_mask">,
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty,
-                                     llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v2f64_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_reduce_pd_256 : GCCBuiltin<"__builtin_ia32_reducepd256_mask">,
         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
-                                     llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v4f64_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_reduce_pd_512 : GCCBuiltin<"__builtin_ia32_reducepd512_mask">,
         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
-                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                     llvm_i8_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<1>, ImmArg<4>]>;
   def int_x86_avx512_mask_reduce_ps_128 : GCCBuiltin<"__builtin_ia32_reduceps128_mask">,
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty,
-                                     llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v4f32_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_reduce_ps_256 : GCCBuiltin<"__builtin_ia32_reduceps256_mask">,
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
-                                     llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                     llvm_v8f32_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_reduce_ps_512 : GCCBuiltin<"__builtin_ia32_reduceps512_mask">,
         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
-                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+                                     llvm_i16_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<1>, ImmArg<4>]>;
 def int_x86_avx512_mask_range_pd_128 : GCCBuiltin<"__builtin_ia32_rangepd128_mask">,
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty,
-                                    llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                    llvm_v2f64_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<2>]>;
 def int_x86_avx512_mask_range_pd_256 : GCCBuiltin<"__builtin_ia32_rangepd256_mask">,
         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty,
-                                    llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                    llvm_v4f64_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<2>]>;
 def int_x86_avx512_mask_range_pd_512 : GCCBuiltin<"__builtin_ia32_rangepd512_mask">,
         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty,
-                                    llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty], [IntrNoMem]>;
+                                    llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
+                  [IntrNoMem, ImmArg<2>, ImmArg<5>]>;
 def int_x86_avx512_mask_range_ps_128 : GCCBuiltin<"__builtin_ia32_rangeps128_mask">,
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty,
-                                    llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                    llvm_v4f32_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<2>]>;
 def int_x86_avx512_mask_range_ps_256 : GCCBuiltin<"__builtin_ia32_rangeps256_mask">,
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty,
-                                    llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
+                                    llvm_v8f32_ty,  llvm_i8_ty],
+                  [IntrNoMem, ImmArg<2>]>;
 def int_x86_avx512_mask_range_ps_512 : GCCBuiltin<"__builtin_ia32_rangeps512_mask">,
         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty,
-                                     llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty], [IntrNoMem]>;
+                                     llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
+                  [IntrNoMem, ImmArg<2>, ImmArg<5>]>;
 }
 
 // Vector load with broadcast
@@ -3085,109 +3154,111 @@
 
   def int_x86_avx512_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_avx512_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_avx512_mask_add_ss_round : GCCBuiltin<"__builtin_ia32_addss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_div_ss_round : GCCBuiltin<"__builtin_ia32_divss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_mul_ss_round : GCCBuiltin<"__builtin_ia32_mulss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_sub_ss_round : GCCBuiltin<"__builtin_ia32_subss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_max_ss_round : GCCBuiltin<"__builtin_ia32_maxss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_min_ss_round : GCCBuiltin<"__builtin_ia32_minss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_add_sd_round : GCCBuiltin<"__builtin_ia32_addsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_div_sd_round : GCCBuiltin<"__builtin_ia32_divsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_mul_sd_round : GCCBuiltin<"__builtin_ia32_mulsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_sub_sd_round : GCCBuiltin<"__builtin_ia32_subsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_max_sd_round : GCCBuiltin<"__builtin_ia32_maxsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_min_sd_round : GCCBuiltin<"__builtin_ia32_minsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_rndscale_ss : GCCBuiltin<"__builtin_ia32_rndscaless_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
-                                     [IntrNoMem]>;
+                                     [IntrNoMem, ImmArg<4>, ImmArg<5>]>;
   def int_x86_avx512_mask_rndscale_sd : GCCBuiltin<"__builtin_ia32_rndscalesd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
-                                     [IntrNoMem]>;
+                                     [IntrNoMem, ImmArg<4>, ImmArg<5>]>;
   def int_x86_avx512_mask_range_ss : GCCBuiltin<"__builtin_ia32_rangess128_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
-                                     [IntrNoMem]>;
+                                     [IntrNoMem, ImmArg<4>, ImmArg<5>]>;
   def int_x86_avx512_mask_range_sd : GCCBuiltin<"__builtin_ia32_rangesd128_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
-                                     [IntrNoMem]>;
+                                     [IntrNoMem, ImmArg<4>, ImmArg<5>]>;
   def int_x86_avx512_mask_reduce_ss : GCCBuiltin<"__builtin_ia32_reducess_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
-                                     [IntrNoMem]>;
+                                     [IntrNoMem, ImmArg<4>, ImmArg<5>]>;
   def int_x86_avx512_mask_reduce_sd : GCCBuiltin<"__builtin_ia32_reducesd_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
-                                     [IntrNoMem]>;
+                                     [IntrNoMem, ImmArg<4>, ImmArg<5>]>;
   def int_x86_avx512_mask_scalef_sd : GCCBuiltin<"__builtin_ia32_scalefsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
+                                     [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_scalef_ss : GCCBuiltin<"__builtin_ia32_scalefss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
+                                     [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_scalef_pd_128 : GCCBuiltin<"__builtin_ia32_scalefpd128_mask">,
           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
@@ -3196,7 +3267,8 @@
                     llvm_v4f64_ty, llvm_i8_ty],[IntrNoMem]>;
   def int_x86_avx512_mask_scalef_pd_512 : GCCBuiltin<"__builtin_ia32_scalefpd512_mask">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                    llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty],
+                    [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_scalef_ps_128 : GCCBuiltin<"__builtin_ia32_scalefps128_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
@@ -3205,99 +3277,104 @@
                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   def int_x86_avx512_mask_scalef_ps_512 : GCCBuiltin<"__builtin_ia32_scalefps512_mask">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                    llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+                                       llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty],
+                    [IntrNoMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_sqrt_ss :
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
-                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                    llvm_i8_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_sqrt_sd :
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
-                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                    llvm_i8_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<4>]>;
 
   def int_x86_avx512_sqrt_pd_512 :
-        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty], [IntrNoMem]>;
+        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_sqrt_ps_512 :
-        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty], [IntrNoMem]>;
+        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<1>]>;
   def int_x86_avx512_mask_fixupimm_pd_128 :
          GCCBuiltin<"__builtin_ia32_fixupimmpd128_mask">,
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_maskz_fixupimm_pd_128 :
          GCCBuiltin<"__builtin_ia32_fixupimmpd128_maskz">,
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_mask_fixupimm_pd_256 :
          GCCBuiltin<"__builtin_ia32_fixupimmpd256_mask">,
           Intrinsic<[llvm_v4f64_ty],
           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_maskz_fixupimm_pd_256 :
          GCCBuiltin<"__builtin_ia32_fixupimmpd256_maskz">,
           Intrinsic<[llvm_v4f64_ty],
           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_mask_fixupimm_pd_512 :
          GCCBuiltin<"__builtin_ia32_fixupimmpd512_mask">,
           Intrinsic<[llvm_v8f64_ty],
           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
+          llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_maskz_fixupimm_pd_512 :
          GCCBuiltin<"__builtin_ia32_fixupimmpd512_maskz">,
           Intrinsic<[llvm_v8f64_ty],
           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
+          llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_mask_fixupimm_ps_128 :
          GCCBuiltin<"__builtin_ia32_fixupimmps128_mask">,
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_maskz_fixupimm_ps_128 :
          GCCBuiltin<"__builtin_ia32_fixupimmps128_maskz">,
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_mask_fixupimm_ps_256 :
          GCCBuiltin<"__builtin_ia32_fixupimmps256_mask">,
           Intrinsic<[llvm_v8f32_ty],
           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_maskz_fixupimm_ps_256 :
          GCCBuiltin<"__builtin_ia32_fixupimmps256_maskz">,
           Intrinsic<[llvm_v8f32_ty],
           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_mask_fixupimm_ps_512 :
          GCCBuiltin<"__builtin_ia32_fixupimmps512_mask">,
           Intrinsic<[llvm_v16f32_ty],
           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16i32_ty, llvm_i32_ty,
-          llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+          llvm_i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_maskz_fixupimm_ps_512 :
          GCCBuiltin<"__builtin_ia32_fixupimmps512_maskz">,
           Intrinsic<[llvm_v16f32_ty],
           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16i32_ty, llvm_i32_ty,
-          llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+          llvm_i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_mask_fixupimm_sd :
          GCCBuiltin<"__builtin_ia32_fixupimmsd_mask">,
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
+          llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_maskz_fixupimm_sd :
          GCCBuiltin<"__builtin_ia32_fixupimmsd_maskz">,
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
+          llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_mask_fixupimm_ss :
          GCCBuiltin<"__builtin_ia32_fixupimmss_mask">,
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
+          llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_maskz_fixupimm_ss :
          GCCBuiltin<"__builtin_ia32_fixupimmss_maskz">,
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
+          llvm_i32_ty], [IntrNoMem, ImmArg<3>, ImmArg<5>]>;
   def int_x86_avx512_mask_getexp_pd_128 : GCCBuiltin<"__builtin_ia32_getexppd128_mask">,
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                                     llvm_i8_ty], [IntrNoMem]>;
@@ -3306,7 +3383,8 @@
                                     llvm_i8_ty], [IntrNoMem]>;
   def int_x86_avx512_mask_getexp_pd_512 : GCCBuiltin<"__builtin_ia32_getexppd512_mask">,
         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                    llvm_i8_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_mask_getexp_ps_128 : GCCBuiltin<"__builtin_ia32_getexpps128_mask">,
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
                                      llvm_i8_ty], [IntrNoMem]>;
@@ -3315,62 +3393,65 @@
                                      llvm_i8_ty], [IntrNoMem]>;
   def int_x86_avx512_mask_getexp_ps_512 : GCCBuiltin<"__builtin_ia32_getexpps512_mask">,
         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+                                     llvm_i16_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_mask_getexp_ss : GCCBuiltin<"__builtin_ia32_getexpss128_round_mask">,
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
-                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                    llvm_i8_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_mask_getexp_sd : GCCBuiltin<"__builtin_ia32_getexpsd128_round_mask">,
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
-                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                    llvm_i8_ty, llvm_i32_ty],
+                  [IntrNoMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_getmant_pd_128 :
          GCCBuiltin<"__builtin_ia32_getmantpd128_mask">,
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty,llvm_i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
 
   def int_x86_avx512_mask_getmant_pd_256 :
          GCCBuiltin<"__builtin_ia32_getmantpd256_mask">,
           Intrinsic<[llvm_v4f64_ty],
           [llvm_v4f64_ty,llvm_i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
 
   def int_x86_avx512_mask_getmant_pd_512 :
          GCCBuiltin<"__builtin_ia32_getmantpd512_mask">,
           Intrinsic<[llvm_v8f64_ty],
           [llvm_v8f64_ty,llvm_i32_ty, llvm_v8f64_ty,  llvm_i8_ty,llvm_i32_ty ],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>, ImmArg<4>]>;
 
   def int_x86_avx512_mask_getmant_ps_128 :
          GCCBuiltin<"__builtin_ia32_getmantps128_mask">,
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
 
   def int_x86_avx512_mask_getmant_ps_256 :
          GCCBuiltin<"__builtin_ia32_getmantps256_mask">,
           Intrinsic<[llvm_v8f32_ty],
           [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>]>;
 
   def int_x86_avx512_mask_getmant_ps_512 :
          GCCBuiltin<"__builtin_ia32_getmantps512_mask">,
           Intrinsic<[llvm_v16f32_ty],
           [llvm_v16f32_ty,llvm_i32_ty, llvm_v16f32_ty,llvm_i16_ty,llvm_i32_ty],
-          [IntrNoMem]>;
+          [IntrNoMem, ImmArg<1>, ImmArg<4>]>;
 
   def int_x86_avx512_mask_getmant_ss :
          GCCBuiltin<"__builtin_ia32_getmantss_round_mask">,
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,
-           llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+           llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>, ImmArg<5>]>;
 
   def int_x86_avx512_mask_getmant_sd :
          GCCBuiltin<"__builtin_ia32_getmantsd_round_mask">,
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty,
-           llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+           llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<2>, ImmArg<5>]>;
 
   def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss_mask">,
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
@@ -3425,41 +3506,41 @@
 
   def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">,
             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                                         llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+                                         llvm_i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">,
             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                                        llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                        llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_exp2_ps : GCCBuiltin<"__builtin_ia32_exp2ps_mask">,
             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                                         llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+                                         llvm_i16_ty, llvm_i32_ty], [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_exp2_pd : GCCBuiltin<"__builtin_ia32_exp2pd_mask">,
             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                                        llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                                        llvm_i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_round_mask">,
             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
-                      [IntrNoMem]>;
+                      [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_round_mask">,
             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
-                      [IntrNoMem]>;
+                      [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">,
             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
                                          llvm_i16_ty, llvm_i32_ty],
-                      [IntrNoMem]>;
+                      [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">,
             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
                                         llvm_i8_ty, llvm_i32_ty],
-                      [IntrNoMem]>;
+                      [IntrNoMem, ImmArg<3>]>;
   def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_round_mask">,
             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
-                      [IntrNoMem]>;
+                      [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_round_mask">,
             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
-                      [IntrNoMem]>;
+                      [IntrNoMem, ImmArg<4>]>;
   def int_x86_avx512_psad_bw_512 : GCCBuiltin<"__builtin_ia32_psadbw512">,
               Intrinsic<[llvm_v8i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
                         [IntrNoMem, Commutative]>;
@@ -3472,6 +3553,12 @@
   def int_x86_avx512_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512">,
               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
                          llvm_v32i16_ty], [IntrNoMem, Commutative]>;
+  def int_x86_avx512_pavg_b_512 : GCCBuiltin<"__builtin_ia32_pavgb512">,
+          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
+                    [IntrNoMem]>;
+  def int_x86_avx512_pavg_w_512 : GCCBuiltin<"__builtin_ia32_pavgw512">,
+          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
+                    [IntrNoMem]>;
   def int_x86_avx512_pmaddw_d_512 : GCCBuiltin<"__builtin_ia32_pmaddwd512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v32i16_ty,
                          llvm_v32i16_ty], [IntrNoMem, Commutative]>;
@@ -3482,514 +3569,529 @@
   def int_x86_avx512_dbpsadbw_128 :
          GCCBuiltin<"__builtin_ia32_dbpsadbw128">,
           Intrinsic<[llvm_v8i16_ty],
-                    [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                    [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
+                    [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_avx512_dbpsadbw_256 :
          GCCBuiltin<"__builtin_ia32_dbpsadbw256">,
           Intrinsic<[llvm_v16i16_ty],
-                    [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                    [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
+                    [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_avx512_dbpsadbw_512 :
          GCCBuiltin<"__builtin_ia32_dbpsadbw512">,
           Intrinsic<[llvm_v32i16_ty],
-                    [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                    [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty],
+                    [IntrNoMem, ImmArg<2>]>;
 }
 
 // Gather and Scatter ops
 let TargetPrefix = "x86" in {
   // NOTE: These are deprecated in favor of the versions that take a vXi1 mask.
+  // NOTE: These can't be ArgMemOnly because you can put the address completely
+  // in the index register.
   def int_x86_avx512_gather_dpd_512  :
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_gather_dps_512  :
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty,
                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_gather_qpd_512  :
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_gather_qps_512  :
           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
 
 
   def int_x86_avx512_gather_dpq_512  :
           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_gather_dpi_512  :
           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty,
                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_gather_qpq_512  :
           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_gather_qpi_512  :
           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div2_df :
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div2_di :
           Intrinsic<[llvm_v2i64_ty],
           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div4_df :
           Intrinsic<[llvm_v4f64_ty],
           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div4_di :
           Intrinsic<[llvm_v4i64_ty],
           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div4_sf :
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div4_si :
           Intrinsic<[llvm_v4i32_ty],
           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div8_sf :
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3div8_si :
           Intrinsic<[llvm_v4i32_ty],
           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv2_df :
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv2_di :
           Intrinsic<[llvm_v2i64_ty],
           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv4_df :
           Intrinsic<[llvm_v4f64_ty],
           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv4_di :
           Intrinsic<[llvm_v4i64_ty],
           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv4_sf :
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv4_si :
           Intrinsic<[llvm_v4i32_ty],
           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv8_sf :
           Intrinsic<[llvm_v8f32_ty],
           [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_gather3siv8_si :
           Intrinsic<[llvm_v8i32_ty],
           [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
 // scatter
   // NOTE: These are deprecated in favor of the versions that take a vXi1 mask.
+  // NOTE: These can't be ArgMemOnly because you can put the address completely
+  // in the index register.
   def int_x86_avx512_scatter_dpd_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
                         llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_scatter_dps_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
                        llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_scatter_qpd_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
                      llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_scatter_qps_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
                      llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
 
 
   def int_x86_avx512_scatter_dpq_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
                          llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_scatter_dpi_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
                      llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_scatter_qpq_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty,
                          llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_scatter_qpi_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty,
                          llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv2_df :
         Intrinsic<[],
         [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty],
-        [IntrArgMemOnly]>;
+        [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv2_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv4_df :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv4_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv4_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv4_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv8_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scatterdiv8_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv2_df :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv2_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv4_df :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv4_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv4_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv4_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv8_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_scattersiv8_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   // gather prefetch
+  // NOTE: These can't be ArgMemOnly because you can put the address completely
+  // in the index register.
   def int_x86_avx512_gatherpf_dpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfdpd">,
           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
   def int_x86_avx512_gatherpf_dps_512  : GCCBuiltin<"__builtin_ia32_gatherpfdps">,
           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
   def int_x86_avx512_gatherpf_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfqpd">,
           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
   def int_x86_avx512_gatherpf_qps_512  : GCCBuiltin<"__builtin_ia32_gatherpfqps">,
           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
 
   // scatter prefetch
+  // NOTE: These can't be ArgMemOnly because you can put the address completely
+  // in the index register.
   def int_x86_avx512_scatterpf_dpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfdpd">,
           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
   def int_x86_avx512_scatterpf_dps_512  : GCCBuiltin<"__builtin_ia32_scatterpfdps">,
           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
   def int_x86_avx512_scatterpf_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfqpd">,
           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
   def int_x86_avx512_scatterpf_qps_512  : GCCBuiltin<"__builtin_ia32_scatterpfqps">,
           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
-                     llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
+                     llvm_i32_ty, llvm_i32_ty], [ImmArg<3>, ImmArg<4>]>;
 }
 
 // AVX512 gather/scatter intrinsics that use vXi1 masks.
 let TargetPrefix = "x86" in {
+  // NOTE: These can't be ArgMemOnly because you can put the address completely
+  // in the index register.
   def int_x86_avx512_mask_gather_dpd_512  :
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
                      llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_mask_gather_dps_512  :
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty,
                      llvm_v16i32_ty, llvm_v16i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_mask_gather_qpd_512  :
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_mask_gather_qps_512  :
           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
 
 
   def int_x86_avx512_mask_gather_dpq_512  :
           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
                      llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_mask_gather_dpi_512  :
           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty,
                      llvm_v16i32_ty, llvm_v16i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_mask_gather_qpq_512  :
           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
   def int_x86_avx512_mask_gather_qpi_512  :
           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty,
                      llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty],
-                    [IntrReadMem, IntrArgMemOnly]>;
+                    [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div2_df :
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div2_di :
           Intrinsic<[llvm_v2i64_ty],
           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div4_df :
           Intrinsic<[llvm_v4f64_ty],
           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div4_di :
           Intrinsic<[llvm_v4i64_ty],
           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div4_sf :
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div4_si :
           Intrinsic<[llvm_v4i32_ty],
           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div8_sf :
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3div8_si :
           Intrinsic<[llvm_v4i32_ty],
           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv2_df :
           Intrinsic<[llvm_v2f64_ty],
           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv2_di :
           Intrinsic<[llvm_v2i64_ty],
           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv4_df :
           Intrinsic<[llvm_v4f64_ty],
           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv4_di :
           Intrinsic<[llvm_v4i64_ty],
           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv4_sf :
           Intrinsic<[llvm_v4f32_ty],
           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv4_si :
           Intrinsic<[llvm_v4i32_ty],
           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv8_sf :
           Intrinsic<[llvm_v8f32_ty],
           [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_gather3siv8_si :
           Intrinsic<[llvm_v8i32_ty],
           [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty],
-          [IntrReadMem, IntrArgMemOnly]>;
+          [IntrReadMem, ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatter_dpd_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty,
                         llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_mask_scatter_dps_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v16i1_ty,
                        llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_mask_scatter_qpd_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty,
                      llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_mask_scatter_qps_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty,
                      llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
 
 
+  // NOTE: These can't be ArgMemOnly because you can put the address completely
+  // in the index register.
   def int_x86_avx512_mask_scatter_dpq_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty,
                          llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_mask_scatter_dpi_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v16i1_ty,
                      llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_mask_scatter_qpq_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty,llvm_v8i64_ty, llvm_v8i64_ty,
                          llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
   def int_x86_avx512_mask_scatter_qpi_512  :
           Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i64_ty, llvm_v8i32_ty,
                          llvm_i32_ty],
-                    [IntrArgMemOnly]>;
+                    [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv2_df :
         Intrinsic<[],
         [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty],
-        [IntrArgMemOnly]>;
+        [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv2_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv4_df :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv4_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv4_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv4_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv8_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scatterdiv8_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv2_df :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v2i1_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv2_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v2i1_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv4_df :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv4_di :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv4_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv4_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv8_sf :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 
   def int_x86_avx512_mask_scattersiv8_si :
           Intrinsic<[],
           [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
-          [IntrArgMemOnly]>;
+          [ImmArg<4>]>;
 }
 
 // AVX-512 conflict detection instruction
@@ -4021,10 +4123,12 @@
   // 512-bit
   def int_x86_avx512_vcomi_sd : GCCBuiltin<"__builtin_ia32_vcomisd">,
               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
-                         llvm_v2f64_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_v2f64_ty, llvm_i32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<2>, ImmArg<3>]>;
   def int_x86_avx512_vcomi_ss : GCCBuiltin<"__builtin_ia32_vcomiss">,
               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
-                         llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<2>, ImmArg<3>]>;
 }
 
 // Compress, Expand
@@ -4568,36 +4672,64 @@
           GCCBuiltin<"__builtin_ia32_pternlogd128">,
           Intrinsic<[llvm_v4i32_ty],
                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_pternlog_d_256 :
           GCCBuiltin<"__builtin_ia32_pternlogd256">,
           Intrinsic<[llvm_v8i32_ty],
                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_pternlog_d_512 :
           GCCBuiltin<"__builtin_ia32_pternlogd512">,
           Intrinsic<[llvm_v16i32_ty],
                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty,
-                     llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_pternlog_q_128 :
           GCCBuiltin<"__builtin_ia32_pternlogq128">,
           Intrinsic<[llvm_v2i64_ty],
                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_pternlog_q_256 :
           GCCBuiltin<"__builtin_ia32_pternlogq256">,
           Intrinsic<[llvm_v4i64_ty],
                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
-                    [IntrNoMem]>;
+                    [IntrNoMem, ImmArg<3>]>;
 
   def int_x86_avx512_pternlog_q_512 :
           GCCBuiltin<"__builtin_ia32_pternlogq512">,
           Intrinsic<[llvm_v8i64_ty],
                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty],
+                    [IntrNoMem, ImmArg<3>]>;
+}
+
+// vp2intersect
+let TargetPrefix = "x86" in {
+  def int_x86_avx512_vp2intersect_q_512 :
+          Intrinsic<[llvm_v8i1_ty, llvm_v8i1_ty],
+                    [llvm_v8i64_ty, llvm_v8i64_ty],
+                    [IntrNoMem]>;
+  def int_x86_avx512_vp2intersect_q_256 :
+          Intrinsic<[llvm_v4i1_ty, llvm_v4i1_ty],
+                    [llvm_v4i64_ty, llvm_v4i64_ty],
+                    [IntrNoMem]>;
+  def int_x86_avx512_vp2intersect_q_128 :
+          Intrinsic<[llvm_v2i1_ty, llvm_v2i1_ty],
+                    [llvm_v2i64_ty, llvm_v2i64_ty],
+                    [IntrNoMem]>;
+  def int_x86_avx512_vp2intersect_d_512 :
+          Intrinsic<[llvm_v16i1_ty, llvm_v16i1_ty],
+                    [llvm_v16i32_ty, llvm_v16i32_ty],
+                    [IntrNoMem]>;
+  def int_x86_avx512_vp2intersect_d_256 :
+          Intrinsic<[llvm_v8i1_ty, llvm_v8i1_ty],
+                    [llvm_v8i32_ty, llvm_v8i32_ty],
+                    [IntrNoMem]>;
+  def int_x86_avx512_vp2intersect_d_128 :
+          Intrinsic<[llvm_v4i1_ty, llvm_v4i1_ty],
+                    [llvm_v4i32_ty, llvm_v4i32_ty],
                     [IntrNoMem]>;
 }
 
@@ -4607,31 +4739,35 @@
   //       distinction in signaling behaviour is not implemented.
   def int_x86_avx512_cmp_ps_512 :
               Intrinsic<[llvm_v16i1_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<2>, ImmArg<3>]>;
   def int_x86_avx512_cmp_pd_512 :
               Intrinsic<[llvm_v8i1_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<2>, ImmArg<3>]>;
   def int_x86_avx512_cmp_ps_256 :
               Intrinsic<[llvm_v8i1_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_cmp_pd_256 :
               Intrinsic<[llvm_v4i1_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_cmp_ps_128 :
             Intrinsic<[llvm_v4i1_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                       llvm_i32_ty], [IntrNoMem]>;
+                       llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
   def int_x86_avx512_cmp_pd_128 :
             Intrinsic<[llvm_v2i1_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                       llvm_i32_ty], [IntrNoMem]>;
+                       llvm_i32_ty], [IntrNoMem, ImmArg<2>]>;
 
   def int_x86_avx512_mask_cmp_ss :
         GCCBuiltin<"__builtin_ia32_cmpss_mask">,
               Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                         llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty, llvm_i8_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<2>, ImmArg<4>]>;
   def int_x86_avx512_mask_cmp_sd :
         GCCBuiltin<"__builtin_ia32_cmpsd_mask">,
               Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                         llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                         llvm_i32_ty, llvm_i8_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<2>, ImmArg<4>]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -4639,7 +4775,7 @@
 let TargetPrefix = "x86" in {
   def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">,
         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
-                  [IntrNoMem]>;
+                  [IntrNoMem, ImmArg<2>]>;
   def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">,
       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">,
@@ -4734,3 +4870,51 @@
   def int_x86_invpcid : GCCBuiltin<"__builtin_ia32_invpcid">,
               Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>;
 }
+
+let TargetPrefix = "x86" in {
+  def int_x86_avx512bf16_cvtne2ps2bf16_128:
+              GCCBuiltin<"__builtin_ia32_cvtne2ps2bf16_128">,
+              Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
+              [IntrNoMem]>;
+  def int_x86_avx512bf16_cvtne2ps2bf16_256:
+              GCCBuiltin<"__builtin_ia32_cvtne2ps2bf16_256">,
+              Intrinsic<[llvm_v16i16_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
+              [IntrNoMem]>;
+  def int_x86_avx512bf16_cvtne2ps2bf16_512:
+              GCCBuiltin<"__builtin_ia32_cvtne2ps2bf16_512">,
+              Intrinsic<[llvm_v32i16_ty], [llvm_v16f32_ty, llvm_v16f32_ty],
+              [IntrNoMem]>;
+  // Intrinsic must be masked due to it producing less than 128 bits of results.
+  def int_x86_avx512bf16_mask_cvtneps2bf16_128:
+              Intrinsic<[llvm_v8i16_ty],
+                        [llvm_v4f32_ty, llvm_v8i16_ty, llvm_v4i1_ty],
+                        [IntrNoMem]>;
+  def int_x86_avx512bf16_cvtneps2bf16_256:
+              GCCBuiltin<"__builtin_ia32_cvtneps2bf16_256">,
+              Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx512bf16_cvtneps2bf16_512:
+              GCCBuiltin<"__builtin_ia32_cvtneps2bf16_512">,
+              Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty], [IntrNoMem]>;
+  def int_x86_avx512bf16_dpbf16ps_128:
+              GCCBuiltin<"__builtin_ia32_dpbf16ps_128">,
+              Intrinsic<[llvm_v4f32_ty],
+              [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx512bf16_dpbf16ps_256:
+              GCCBuiltin<"__builtin_ia32_dpbf16ps_256">,
+              Intrinsic<[llvm_v8f32_ty],
+              [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx512bf16_dpbf16ps_512:
+              GCCBuiltin<"__builtin_ia32_dpbf16ps_512">,
+              Intrinsic<[llvm_v16f32_ty],
+              [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16i32_ty], [IntrNoMem]>;
+}
+
+//===----------------------------------------------------------------------===//
+// ENQCMD - Enqueue Stores Instructions
+
+let TargetPrefix = "x86" in {
+  def int_x86_enqcmd : GCCBuiltin<"__builtin_ia32_enqcmd">,
+              Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_ptr_ty], []>;
+  def int_x86_enqcmds : GCCBuiltin<"__builtin_ia32_enqcmds">,
+              Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_ptr_ty], []>;
+}
diff --git a/linux-x64/clang/include/llvm/IR/LLVMContext.h b/linux-x64/clang/include/llvm/IR/LLVMContext.h
index f28480e..c805045 100644
--- a/linux-x64/clang/include/llvm/IR/LLVMContext.h
+++ b/linux-x64/clang/include/llvm/IR/LLVMContext.h
@@ -35,12 +35,8 @@
 class SMDiagnostic;
 class StringRef;
 class Twine;
-
-namespace yaml {
-
-class Output;
-
-} // end namespace yaml
+class RemarkStreamer;
+class raw_ostream;
 
 namespace SyncScope {
 
@@ -103,6 +99,7 @@
     MD_irr_loop = 24,                 // "irr_loop"
     MD_access_group = 25,             // "llvm.access.group"
     MD_callback = 26,                 // "callback"
+    MD_preserve_access_index = 27,    // "llvm.preserve.*.access.index"
   };
 
   /// Known operand bundle tag IDs, which always have the same value.  All
@@ -246,16 +243,23 @@
   /// included in optimization diagnostics.
   void setDiagnosticsHotnessThreshold(uint64_t Threshold);
 
-  /// Return the YAML file used by the backend to save optimization
-  /// diagnostics.  If null, diagnostics are not saved in a file but only
-  /// emitted via the diagnostic handler.
-  yaml::Output *getDiagnosticsOutputFile();
-  /// Set the diagnostics output file used for optimization diagnostics.
+  /// Return the streamer used by the backend to save remark diagnostics. If it
+  /// does not exist, diagnostics are not saved in a file but only emitted via
+  /// the diagnostic handler.
+  RemarkStreamer *getRemarkStreamer();
+  const RemarkStreamer *getRemarkStreamer() const;
+
+  /// Set the diagnostics output used for optimization diagnostics.
+  /// This filename may be embedded in a section for tools to find the
+  /// diagnostics whenever they're needed.
   ///
-  /// By default or if invoked with null, diagnostics are not saved in a file
-  /// but only emitted via the diagnostic handler.  Even if an output file is
-  /// set, the handler is invoked for each diagnostic message.
-  void setDiagnosticsOutputFile(std::unique_ptr<yaml::Output> F);
+  /// If a remark streamer is already set, it will be replaced with
+  /// \p RemarkStreamer.
+  ///
+  /// By default, diagnostics are not saved in a file but only emitted via the
+  /// diagnostic handler.  Even if an output file is set, the handler is invoked
+  /// for each diagnostic message.
+  void setRemarkStreamer(std::unique_ptr<RemarkStreamer> RemarkStreamer);
 
   /// Get the prefix that should be printed in front of a diagnostic of
   ///        the given \p Severity
diff --git a/linux-x64/clang/include/llvm/IR/Metadata.def b/linux-x64/clang/include/llvm/IR/Metadata.def
index d544013..1df60ca 100644
--- a/linux-x64/clang/include/llvm/IR/Metadata.def
+++ b/linux-x64/clang/include/llvm/IR/Metadata.def
@@ -113,6 +113,7 @@
 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode)
 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacro)
 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacroFile)
+HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DICommonBlock)
 
 #undef HANDLE_METADATA
 #undef HANDLE_METADATA_LEAF
diff --git a/linux-x64/clang/include/llvm/IR/Module.h b/linux-x64/clang/include/llvm/IR/Module.h
index 7373b84..f458680 100644
--- a/linux-x64/clang/include/llvm/IR/Module.h
+++ b/linux-x64/clang/include/llvm/IR/Module.h
@@ -28,6 +28,7 @@
 #include "llvm/IR/GlobalIFunc.h"
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/Metadata.h"
+#include "llvm/IR/ProfileSummary.h"
 #include "llvm/IR/SymbolTableListTraits.h"
 #include "llvm/Support/CBindingWrapping.h"
 #include "llvm/Support/CodeGen.h"
@@ -868,10 +869,11 @@
   /// @{
 
   /// Attach profile summary metadata to this module.
-  void setProfileSummary(Metadata *M);
+  void setProfileSummary(Metadata *M, ProfileSummary::Kind Kind);
 
-  /// Returns profile summary metadata
-  Metadata *getProfileSummary();
+  /// Returns profile summary metadata. When IsCS is true, use the context
+  /// sensitive profile summary.
+  Metadata *getProfileSummary(bool IsCS);
   /// @}
 
   /// Returns true if PLT should be avoided for RTLib calls.
diff --git a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h
index bcb3aa0..aacf8cf 100644
--- a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h
+++ b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h
@@ -119,7 +119,7 @@
 
 using GlobalValueSummaryList = std::vector<std::unique_ptr<GlobalValueSummary>>;
 
-struct GlobalValueSummaryInfo {
+struct LLVM_ALIGNAS(8) GlobalValueSummaryInfo {
   union NameOrGV {
     NameOrGV(bool HaveGVs) {
       if (HaveGVs)
@@ -162,7 +162,8 @@
 /// Struct that holds a reference to a particular GUID in a global value
 /// summary.
 struct ValueInfo {
-  PointerIntPair<const GlobalValueSummaryMapTy::value_type *, 2, int>
+  enum Flags { HaveGV = 1, ReadOnly = 2, WriteOnly = 4 };
+  PointerIntPair<const GlobalValueSummaryMapTy::value_type *, 3, int>
       RefAndFlags;
 
   ValueInfo() = default;
@@ -188,15 +189,42 @@
                      : getRef()->second.U.Name;
   }
 
-  bool haveGVs() const { return RefAndFlags.getInt() & 0x1; }
-  bool isReadOnly() const { return RefAndFlags.getInt() & 0x2; }
-  void setReadOnly() { RefAndFlags.setInt(RefAndFlags.getInt() | 0x2); }
+  bool haveGVs() const { return RefAndFlags.getInt() & HaveGV; }
+  bool isReadOnly() const {
+    assert(isValidAccessSpecifier());
+    return RefAndFlags.getInt() & ReadOnly;
+  }
+  bool isWriteOnly() const {
+    assert(isValidAccessSpecifier());
+    return RefAndFlags.getInt() & WriteOnly;
+  }
+  unsigned getAccessSpecifier() const {
+    assert(isValidAccessSpecifier());
+    return RefAndFlags.getInt() & (ReadOnly | WriteOnly);
+  }
+  bool isValidAccessSpecifier() const {
+    unsigned BadAccessMask = ReadOnly | WriteOnly;
+    return (RefAndFlags.getInt() & BadAccessMask) != BadAccessMask;
+  }
+  void setReadOnly() {
+    // We expect ro/wo attribute to set only once during
+    // ValueInfo lifetime.
+    assert(getAccessSpecifier() == 0);
+    RefAndFlags.setInt(RefAndFlags.getInt() | ReadOnly);
+  }
+  void setWriteOnly() {
+    assert(getAccessSpecifier() == 0);
+    RefAndFlags.setInt(RefAndFlags.getInt() | WriteOnly);
+  }
 
   const GlobalValueSummaryMapTy::value_type *getRef() const {
     return RefAndFlags.getPointer();
   }
 
   bool isDSOLocal() const;
+
+  /// Checks if all copies are eligible for auto-hiding (have flag set).
+  bool canAutoHide() const;
 };
 
 inline raw_ostream &operator<<(raw_ostream &OS, const ValueInfo &VI) {
@@ -279,11 +307,23 @@
     /// within the same linkage unit.
     unsigned DSOLocal : 1;
 
+    /// In the per-module summary, indicates that the global value is
+    /// linkonce_odr and global unnamed addr (so eligible for auto-hiding
+    /// via hidden visibility). In the combined summary, indicates that the
+    /// prevailing linkonce_odr copy can be auto-hidden via hidden visibility
+    /// when it is upgraded to weak_odr in the backend. This is legal when
+    /// all copies are eligible for auto-hiding (i.e. all copies were
+    /// linkonce_odr global unnamed addr. If any copy is not (e.g. it was
+    /// originally weak_odr, we cannot auto-hide the prevailing copy as it
+    /// means the symbol was externally visible.
+    unsigned CanAutoHide : 1;
+
     /// Convenience Constructors
     explicit GVFlags(GlobalValue::LinkageTypes Linkage,
-                     bool NotEligibleToImport, bool Live, bool IsLocal)
+                     bool NotEligibleToImport, bool Live, bool IsLocal,
+                     bool CanAutoHide)
         : Linkage(Linkage), NotEligibleToImport(NotEligibleToImport),
-          Live(Live), DSOLocal(IsLocal) {}
+          Live(Live), DSOLocal(IsLocal), CanAutoHide(CanAutoHide) {}
   };
 
 private:
@@ -364,6 +404,10 @@
 
   bool isDSOLocal() const { return Flags.DSOLocal; }
 
+  void setCanAutoHide(bool CanAutoHide) { Flags.CanAutoHide = CanAutoHide; }
+
+  bool canAutoHide() const { return Flags.CanAutoHide; }
+
   /// Flag that this global value cannot be imported.
   void setNotEligibleToImport() { Flags.NotEligibleToImport = true; }
 
@@ -380,25 +424,35 @@
 
 /// Alias summary information.
 class AliasSummary : public GlobalValueSummary {
+  ValueInfo AliaseeValueInfo;
+
+  /// This is the Aliasee in the same module as alias (could get from VI, trades
+  /// memory for time). Note that this pointer may be null (and the value info
+  /// empty) when we have a distributed index where the alias is being imported
+  /// (as a copy of the aliasee), but the aliasee is not.
   GlobalValueSummary *AliaseeSummary;
-  // AliaseeGUID is only set and accessed when we are building a combined index
-  // via the BitcodeReader.
-  GlobalValue::GUID AliaseeGUID;
 
 public:
   AliasSummary(GVFlags Flags)
       : GlobalValueSummary(AliasKind, Flags, ArrayRef<ValueInfo>{}),
-        AliaseeSummary(nullptr), AliaseeGUID(0) {}
+        AliaseeSummary(nullptr) {}
 
   /// Check if this is an alias summary.
   static bool classof(const GlobalValueSummary *GVS) {
     return GVS->getSummaryKind() == AliasKind;
   }
 
-  void setAliasee(GlobalValueSummary *Aliasee) { AliaseeSummary = Aliasee; }
-  void setAliaseeGUID(GlobalValue::GUID GUID) { AliaseeGUID = GUID; }
+  void setAliasee(ValueInfo &AliaseeVI, GlobalValueSummary *Aliasee) {
+    AliaseeValueInfo = AliaseeVI;
+    AliaseeSummary = Aliasee;
+  }
 
-  bool hasAliasee() const { return !!AliaseeSummary; }
+  bool hasAliasee() const {
+    assert(!!AliaseeSummary == (AliaseeValueInfo &&
+                                !AliaseeValueInfo.getSummaryList().empty()) &&
+           "Expect to have both aliasee summary and summary list or neither");
+    return !!AliaseeSummary;
+  }
 
   const GlobalValueSummary &getAliasee() const {
     assert(AliaseeSummary && "Unexpected missing aliasee summary");
@@ -409,10 +463,13 @@
     return const_cast<GlobalValueSummary &>(
                          static_cast<const AliasSummary *>(this)->getAliasee());
   }
-  bool hasAliaseeGUID() const { return AliaseeGUID != 0; }
-  const GlobalValue::GUID &getAliaseeGUID() const {
-    assert(AliaseeGUID && "Unexpected missing aliasee GUID");
-    return AliaseeGUID;
+  ValueInfo getAliaseeVI() const {
+    assert(AliaseeValueInfo && "Unexpected missing aliasee");
+    return AliaseeValueInfo;
+  }
+  GlobalValue::GUID getAliaseeGUID() const {
+    assert(AliaseeValueInfo && "Unexpected missing aliasee");
+    return AliaseeValueInfo.getGUID();
   }
 };
 
@@ -499,7 +556,8 @@
     return FunctionSummary(
         FunctionSummary::GVFlags(
             GlobalValue::LinkageTypes::AvailableExternallyLinkage,
-            /*NotEligibleToImport=*/true, /*Live=*/true, /*IsLocal=*/false),
+            /*NotEligibleToImport=*/true, /*Live=*/true, /*IsLocal=*/false,
+            /*CanAutoHide=*/false),
         /*InsCount=*/0, FunctionSummary::FFlags{}, /*EntryCount=*/0,
         std::vector<ValueInfo>(), std::move(Edges),
         std::vector<GlobalValue::GUID>(),
@@ -551,8 +609,8 @@
           std::move(TypeTestAssumeConstVCalls),
           std::move(TypeCheckedLoadConstVCalls)});
   }
-  // Gets the number of immutable refs in RefEdgeList
-  unsigned immutableRefCount() const;
+  // Gets the number of readonly and writeonly refs in RefEdgeList
+  std::pair<unsigned, unsigned> specialRefCounts() const;
 
   /// Check if this is a function summary.
   static bool classof(const GlobalValueSummary *GVS) {
@@ -665,18 +723,43 @@
   }
 };
 
+/// The ValueInfo and offset for a function within a vtable definition
+/// initializer array.
+struct VirtFuncOffset {
+  VirtFuncOffset(ValueInfo VI, uint64_t Offset)
+      : FuncVI(VI), VTableOffset(Offset) {}
+
+  ValueInfo FuncVI;
+  uint64_t VTableOffset;
+};
+/// List of functions referenced by a particular vtable definition.
+using VTableFuncList = std::vector<VirtFuncOffset>;
+
 /// Global variable summary information to aid decisions and
 /// implementation of importing.
 ///
-/// Global variable summary has extra flag, telling if it is
-/// modified during the program run or not. This affects ThinLTO
-/// internalization
+/// Global variable summary has two extra flag, telling if it is
+/// readonly or writeonly. Both readonly and writeonly variables
+/// can be optimized in the backed: readonly variables can be
+/// const-folded, while writeonly vars can be completely eliminated
+/// together with corresponding stores. We let both things happen
+/// by means of internalizing such variables after ThinLTO import.
 class GlobalVarSummary : public GlobalValueSummary {
+private:
+  /// For vtable definitions this holds the list of functions and
+  /// their corresponding offsets within the initializer array.
+  std::unique_ptr<VTableFuncList> VTableFuncs;
+
 public:
   struct GVarFlags {
-    GVarFlags(bool ReadOnly = false) : ReadOnly(ReadOnly) {}
+    GVarFlags(bool ReadOnly, bool WriteOnly)
+        : MaybeReadOnly(ReadOnly), MaybeWriteOnly(WriteOnly) {}
 
-    unsigned ReadOnly : 1;
+    // In permodule summaries both MaybeReadOnly and MaybeWriteOnly
+    // bits are set, because attribute propagation occurs later on
+    // thin link phase.
+    unsigned MaybeReadOnly : 1;
+    unsigned MaybeWriteOnly : 1;
   } VarFlags;
 
   GlobalVarSummary(GVFlags Flags, GVarFlags VarFlags,
@@ -690,8 +773,21 @@
   }
 
   GVarFlags varflags() const { return VarFlags; }
-  void setReadOnly(bool RO) { VarFlags.ReadOnly = RO; }
-  bool isReadOnly() const { return VarFlags.ReadOnly; }
+  void setReadOnly(bool RO) { VarFlags.MaybeReadOnly = RO; }
+  void setWriteOnly(bool WO) { VarFlags.MaybeWriteOnly = WO; }
+  bool maybeReadOnly() const { return VarFlags.MaybeReadOnly; }
+  bool maybeWriteOnly() const { return VarFlags.MaybeWriteOnly; }
+
+  void setVTableFuncs(VTableFuncList Funcs) {
+    assert(!VTableFuncs);
+    VTableFuncs = llvm::make_unique<VTableFuncList>(std::move(Funcs));
+  }
+
+  ArrayRef<VirtFuncOffset> vTableFuncs() const {
+    if (VTableFuncs)
+      return *VTableFuncs;
+    return {};
+  }
 };
 
 struct TypeTestResolution {
@@ -790,6 +886,29 @@
 using TypeIdSummaryMapTy =
     std::multimap<GlobalValue::GUID, std::pair<std::string, TypeIdSummary>>;
 
+/// The following data structures summarize type metadata information.
+/// For type metadata overview see https://llvm.org/docs/TypeMetadata.html.
+/// Each type metadata includes both the type identifier and the offset of
+/// the address point of the type (the address held by objects of that type
+/// which may not be the beginning of the virtual table). Vtable definitions
+/// are decorated with type metadata for the types they are compatible with.
+///
+/// Holds information about vtable definitions decorated with type metadata:
+/// the vtable definition value and its address point offset in a type
+/// identifier metadata it is decorated (compatible) with.
+struct TypeIdOffsetVtableInfo {
+  TypeIdOffsetVtableInfo(uint64_t Offset, ValueInfo VI)
+      : AddressPointOffset(Offset), VTableVI(VI) {}
+
+  uint64_t AddressPointOffset;
+  ValueInfo VTableVI;
+};
+/// List of vtable definitions decorated by a particular type identifier,
+/// and their corresponding offsets in that type identifier's metadata.
+/// Note that each type identifier may be compatible with multiple vtables, due
+/// to inheritance, which is why this is a vector.
+using TypeIdCompatibleVtableInfo = std::vector<TypeIdOffsetVtableInfo>;
+
 /// Class to hold module path string table and global value map,
 /// and encapsulate methods for operating on them.
 class ModuleSummaryIndex {
@@ -802,9 +921,15 @@
   ModulePathStringTableTy ModulePathStringTable;
 
   /// Mapping from type identifier GUIDs to type identifier and its summary
-  /// information.
+  /// information. Produced by thin link.
   TypeIdSummaryMapTy TypeIdMap;
 
+  /// Mapping from type identifier to information about vtables decorated
+  /// with that type identifier's metadata. Produced by per module summary
+  /// analysis and consumed by thin link. For more information, see description
+  /// above where TypeIdCompatibleVtableInfo is defined.
+  std::map<std::string, TypeIdCompatibleVtableInfo> TypeIdCompatibleVtableMap;
+
   /// Mapping from original ID to GUID. If original ID can map to multiple
   /// GUIDs, it will be mapped to 0.
   std::map<GlobalValue::GUID, GlobalValue::GUID> OidGuidMap;
@@ -1043,22 +1168,28 @@
       OidGuidMap[OrigGUID] = ValueGUID;
   }
 
+  /// Find the summary for ValueInfo \p VI in module \p ModuleId, or nullptr if
+  /// not found.
+  GlobalValueSummary *findSummaryInModule(ValueInfo VI, StringRef ModuleId) const {
+    auto SummaryList = VI.getSummaryList();
+    auto Summary =
+        llvm::find_if(SummaryList,
+                      [&](const std::unique_ptr<GlobalValueSummary> &Summary) {
+                        return Summary->modulePath() == ModuleId;
+                      });
+    if (Summary == SummaryList.end())
+      return nullptr;
+    return Summary->get();
+  }
+
   /// Find the summary for global \p GUID in module \p ModuleId, or nullptr if
   /// not found.
   GlobalValueSummary *findSummaryInModule(GlobalValue::GUID ValueGUID,
                                           StringRef ModuleId) const {
     auto CalleeInfo = getValueInfo(ValueGUID);
-    if (!CalleeInfo) {
+    if (!CalleeInfo)
       return nullptr; // This function does not have a summary
-    }
-    auto Summary =
-        llvm::find_if(CalleeInfo.getSummaryList(),
-                      [&](const std::unique_ptr<GlobalValueSummary> &Summary) {
-                        return Summary->modulePath() == ModuleId;
-                      });
-    if (Summary == CalleeInfo.getSummaryList().end())
-      return nullptr;
-    return Summary->get();
+    return findSummaryInModule(CalleeInfo, ModuleId);
   }
 
   /// Returns the first GlobalValueSummary for \p GV, asserting that there
@@ -1162,6 +1293,29 @@
     return nullptr;
   }
 
+  const std::map<std::string, TypeIdCompatibleVtableInfo> &
+  typeIdCompatibleVtableMap() const {
+    return TypeIdCompatibleVtableMap;
+  }
+
+  /// Return an existing or new TypeIdCompatibleVtableMap entry for \p TypeId.
+  /// This accessor can mutate the map and therefore should not be used in
+  /// the ThinLTO backends.
+  TypeIdCompatibleVtableInfo &
+  getOrInsertTypeIdCompatibleVtableSummary(StringRef TypeId) {
+    return TypeIdCompatibleVtableMap[TypeId];
+  }
+
+  /// For the given \p TypeId, this returns the TypeIdCompatibleVtableMap
+  /// entry if present in the summary map. This may be used when importing.
+  Optional<TypeIdCompatibleVtableInfo>
+  getTypeIdCompatibleVtableSummary(StringRef TypeId) const {
+    auto I = TypeIdCompatibleVtableMap.find(TypeId);
+    if (I == TypeIdCompatibleVtableMap.end())
+      return None;
+    return I->second;
+  }
+
   /// Collect for the given module the list of functions it defines
   /// (GUID -> Summary).
   void collectDefinedFunctionsForModule(StringRef ModulePath,
@@ -1169,8 +1323,16 @@
 
   /// Collect for each module the list of Summaries it defines (GUID ->
   /// Summary).
-  void collectDefinedGVSummariesPerModule(
-      StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries) const;
+  template <class Map>
+  void
+  collectDefinedGVSummariesPerModule(Map &ModuleToDefinedGVSummaries) const {
+    for (auto &GlobalList : *this) {
+      auto GUID = GlobalList.first;
+      for (auto &Summary : GlobalList.second.SummaryList) {
+        ModuleToDefinedGVSummaries[Summary->modulePath()][GUID] = Summary.get();
+      }
+    }
+  }
 
   /// Print to an output stream.
   void print(raw_ostream &OS, bool IsForDebug = false) const;
@@ -1185,7 +1347,7 @@
   void dumpSCCs(raw_ostream &OS);
 
   /// Analyze index and detect unmodified globals
-  void propagateConstants(const DenseSet<GlobalValue::GUID> &PreservedSymbols);
+  void propagateAttributes(const DenseSet<GlobalValue::GUID> &PreservedSymbols);
 };
 
 /// GraphTraits definition to build SCC for the index
diff --git a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h
index c3feeee..26d9c43 100644
--- a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h
+++ b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h
@@ -136,7 +136,7 @@
 
 struct FunctionSummaryYaml {
   unsigned Linkage;
-  bool NotEligibleToImport, Live, IsLocal;
+  bool NotEligibleToImport, Live, IsLocal, CanAutoHide;
   std::vector<uint64_t> Refs;
   std::vector<uint64_t> TypeTests;
   std::vector<FunctionSummary::VFuncId> TypeTestAssumeVCalls,
@@ -180,6 +180,7 @@
     io.mapOptional("NotEligibleToImport", summary.NotEligibleToImport);
     io.mapOptional("Live", summary.Live);
     io.mapOptional("Local", summary.IsLocal);
+    io.mapOptional("CanAutoHide", summary.CanAutoHide);
     io.mapOptional("Refs", summary.Refs);
     io.mapOptional("TypeTests", summary.TypeTests);
     io.mapOptional("TypeTestAssumeVCalls", summary.TypeTestAssumeVCalls);
@@ -222,7 +223,7 @@
       Elem.SummaryList.push_back(llvm::make_unique<FunctionSummary>(
           GlobalValueSummary::GVFlags(
               static_cast<GlobalValue::LinkageTypes>(FSum.Linkage),
-              FSum.NotEligibleToImport, FSum.Live, FSum.IsLocal),
+              FSum.NotEligibleToImport, FSum.Live, FSum.IsLocal, FSum.CanAutoHide),
           /*NumInsts=*/0, FunctionSummary::FFlags{}, /*EntryCount=*/0, Refs,
           ArrayRef<FunctionSummary::EdgeTy>{}, std::move(FSum.TypeTests),
           std::move(FSum.TypeTestAssumeVCalls),
@@ -243,7 +244,8 @@
               FSum->flags().Linkage,
               static_cast<bool>(FSum->flags().NotEligibleToImport),
               static_cast<bool>(FSum->flags().Live),
-              static_cast<bool>(FSum->flags().DSOLocal), Refs,
+              static_cast<bool>(FSum->flags().DSOLocal),
+              static_cast<bool>(FSum->flags().CanAutoHide), Refs,
               FSum->type_tests(), FSum->type_test_assume_vcalls(),
               FSum->type_checked_load_vcalls(),
               FSum->type_test_assume_const_vcalls(),
diff --git a/linux-x64/clang/include/llvm/IR/NoFolder.h b/linux-x64/clang/include/llvm/IR/NoFolder.h
index 7fd3039..0e3c19f 100644
--- a/linux-x64/clang/include/llvm/IR/NoFolder.h
+++ b/linux-x64/clang/include/llvm/IR/NoFolder.h
@@ -203,6 +203,10 @@
     return BinaryOperator::CreateNot(C);
   }
 
+  Instruction *CreateUnOp(Instruction::UnaryOps Opc, Constant *C) const {
+    return UnaryOperator::Create(Opc, C);
+  }
+
   //===--------------------------------------------------------------------===//
   // Memory Instructions
   //===--------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/IR/Operator.h b/linux-x64/clang/include/llvm/IR/Operator.h
index 613d434..8199c65 100644
--- a/linux-x64/clang/include/llvm/IR/Operator.h
+++ b/linux-x64/clang/include/llvm/IR/Operator.h
@@ -187,6 +187,12 @@
 
   FastMathFlags() = default;
 
+  static FastMathFlags getFast() {
+    FastMathFlags FMF;
+    FMF.setFast();
+    return FMF;
+  }
+
   bool any() const { return Flags != 0; }
   bool none() const { return Flags == 0; }
   bool all() const { return Flags == ~0U; }
@@ -379,6 +385,7 @@
     case Instruction::ExtractElement:
     case Instruction::ShuffleVector:
     case Instruction::InsertElement:
+    case Instruction::PHI:
       return false;
     default:
       return V->getType()->isFPOrFPVectorTy();
diff --git a/linux-x64/clang/include/llvm/IR/OptBisect.h b/linux-x64/clang/include/llvm/IR/OptBisect.h
index 8d51b68..1b2b0bd 100644
--- a/linux-x64/clang/include/llvm/IR/OptBisect.h
+++ b/linux-x64/clang/include/llvm/IR/OptBisect.h
@@ -19,12 +19,6 @@
 namespace llvm {
 
 class Pass;
-class Module;
-class Function;
-class BasicBlock;
-class Region;
-class Loop;
-class CallGraphSCC;
 
 /// Extensions to this class implement mechanisms to disable passes and
 /// individual optimizations at compile time.
@@ -32,12 +26,14 @@
 public:
   virtual ~OptPassGate() = default;
 
-  virtual bool shouldRunPass(const Pass *P, const Module &U) { return true; }
-  virtual bool shouldRunPass(const Pass *P, const Function &U)  {return true; }
-  virtual bool shouldRunPass(const Pass *P, const BasicBlock &U)  { return true; }
-  virtual bool shouldRunPass(const Pass *P, const Region &U)  { return true; }
-  virtual bool shouldRunPass(const Pass *P, const Loop &U)  { return true; }
-  virtual bool shouldRunPass(const Pass *P, const CallGraphSCC &U)  { return true; }
+  /// IRDescription is a textual description of the IR unit the pass is running
+  /// over.
+  virtual bool shouldRunPass(const Pass *P, StringRef IRDescription) {
+    return true;
+  }
+
+  /// isEnabled should return true before calling shouldRunPass
+  virtual bool isEnabled() const { return false; }
 };
 
 /// This class implements a mechanism to disable passes and individual
@@ -59,23 +55,19 @@
 
   /// Checks the bisect limit to determine if the specified pass should run.
   ///
-  /// These functions immediately return true if bisection is disabled. If the
-  /// bisect limit is set to -1, the functions print a message describing
+  /// If the bisect limit is set to -1, the function prints a message describing
   /// the pass and the bisect number assigned to it and return true.  Otherwise,
-  /// the functions print a message with the bisect number assigned to the
+  /// the function prints a message with the bisect number assigned to the
   /// pass and indicating whether or not the pass will be run and return true if
   /// the bisect limit has not yet been exceeded or false if it has.
   ///
-  /// Most passes should not call these routines directly. Instead, they are
+  /// Most passes should not call this routine directly. Instead, they are
   /// called through helper routines provided by the pass base classes.  For
   /// instance, function passes should call FunctionPass::skipFunction().
-  bool shouldRunPass(const Pass *P, const Module &U) override;
-  bool shouldRunPass(const Pass *P, const Function &U) override;
-  bool shouldRunPass(const Pass *P, const BasicBlock &U) override;
-  bool shouldRunPass(const Pass *P, const Region &U) override;
-  bool shouldRunPass(const Pass *P, const Loop &U) override;
-  bool shouldRunPass(const Pass *P, const CallGraphSCC &U) override;
+  bool shouldRunPass(const Pass *P, StringRef IRDescription) override;
 
+  /// isEnabled should return true before calling shouldRunPass
+  bool isEnabled() const override { return BisectEnabled; }
 private:
   bool checkPass(const StringRef PassName, const StringRef TargetDesc);
 
diff --git a/linux-x64/clang/include/llvm/IR/PassManager.h b/linux-x64/clang/include/llvm/IR/PassManager.h
index 47bad5b..37fe2a5 100644
--- a/linux-x64/clang/include/llvm/IR/PassManager.h
+++ b/linux-x64/clang/include/llvm/IR/PassManager.h
@@ -286,6 +286,13 @@
                               PA.PreservedIDs.count(ID));
     }
 
+    /// Return true if the checker's analysis was not abandoned, i.e. it was not
+    /// explicitly invalidated. Even if the analysis is not explicitly
+    /// preserved, if the analysis is known stateless, then it is preserved.
+    bool preservedWhenStateless() {
+      return !IsAbandoned;
+    }
+
     /// Returns true if the checker's analysis was not abandoned and either
     ///  - \p AnalysisSetT is explicitly preserved or
     ///  - all analyses are preserved.
diff --git a/linux-x64/clang/include/llvm/IR/PassTimingInfo.h b/linux-x64/clang/include/llvm/IR/PassTimingInfo.h
index ddddbdf..b8d8f11 100644
--- a/linux-x64/clang/include/llvm/IR/PassTimingInfo.h
+++ b/linux-x64/clang/include/llvm/IR/PassTimingInfo.h
@@ -26,10 +26,12 @@
 
 class Pass;
 class PassInstrumentationCallbacks;
+class raw_ostream;
 
 /// If -time-passes has been specified, report the timings immediately and then
-/// reset the timers to zero.
-void reportAndResetTimings();
+/// reset the timers to zero. By default it uses the stream created by
+/// CreateInfoOutputFile().
+void reportAndResetTimings(raw_ostream *OutStream = nullptr);
 
 /// Request the timer for this legacy-pass-manager's pass instance.
 Timer *getPassTimer(Pass *);
@@ -62,18 +64,18 @@
   /// Stack of currently active timers.
   SmallVector<Timer *, 8> TimerStack;
 
+  /// Custom output stream to print timing information into.
+  /// By default (== nullptr) we emit time report into the stream created by
+  /// CreateInfoOutputFile().
+  raw_ostream *OutStream = nullptr;
+
   bool Enabled;
 
 public:
   TimePassesHandler(bool Enabled = TimePassesIsEnabled);
 
   /// Destructor handles the print action if it has not been handled before.
-  ~TimePassesHandler() {
-    // First destroying the timers from TimingData, which deploys all their
-    // collected data into the TG time group member, which later prints itself
-    // when being destroyed.
-    TimingData.clear();
-  }
+  ~TimePassesHandler() { print(); }
 
   /// Prints out timing information and then resets the timers.
   void print();
@@ -84,6 +86,9 @@
 
   void registerCallbacks(PassInstrumentationCallbacks &PIC);
 
+  /// Set a custom output stream for subsequent reporting.
+  void setOutStream(raw_ostream &OutStream);
+
 private:
   /// Dumps information for running/triggered timers, useful for debugging
   LLVM_DUMP_METHOD void dump() const;
diff --git a/linux-x64/clang/include/llvm/IR/PatternMatch.h b/linux-x64/clang/include/llvm/IR/PatternMatch.h
index 6c51d48..1a11af2 100644
--- a/linux-x64/clang/include/llvm/IR/PatternMatch.h
+++ b/linux-x64/clang/include/llvm/IR/PatternMatch.h
@@ -418,6 +418,20 @@
   return cst_pred_ty<is_lowbit_mask>();
 }
 
+struct is_unsigned_less_than {
+  const APInt *Thr;
+  bool isValue(const APInt &C) { return C.ult(*Thr); }
+};
+/// Match an integer or vector with every element unsigned less than the
+/// Threshold. For vectors, this includes constants with undefined elements.
+/// FIXME: is it worth generalizing this to simply take ICmpInst::Predicate?
+inline cst_pred_ty<is_unsigned_less_than>
+m_SpecificInt_ULT(const APInt &Threshold) {
+  cst_pred_ty<is_unsigned_less_than> P;
+  P.Thr = &Threshold;
+  return P;
+}
+
 struct is_nan {
   bool isValue(const APFloat &C) { return C.isNaN(); }
 };
@@ -667,18 +681,26 @@
   FNeg_match(const Op_t &Op) : X(Op) {}
   template <typename OpTy> bool match(OpTy *V) {
     auto *FPMO = dyn_cast<FPMathOperator>(V);
-    if (!FPMO || FPMO->getOpcode() != Instruction::FSub)
-      return false;
-    if (FPMO->hasNoSignedZeros()) {
-      // With 'nsz', any zero goes.
-      if (!cstfp_pred_ty<is_any_zero_fp>().match(FPMO->getOperand(0)))
-        return false;
-    } else {
-      // Without 'nsz', we need fsub -0.0, X exactly.
-      if (!cstfp_pred_ty<is_neg_zero_fp>().match(FPMO->getOperand(0)))
-        return false;
+    if (!FPMO) return false;
+
+    if (FPMO->getOpcode() == Instruction::FNeg)
+      return X.match(FPMO->getOperand(0));
+
+    if (FPMO->getOpcode() == Instruction::FSub) {
+      if (FPMO->hasNoSignedZeros()) {
+        // With 'nsz', any zero goes.
+        if (!cstfp_pred_ty<is_any_zero_fp>().match(FPMO->getOperand(0)))
+          return false;
+      } else {
+        // Without 'nsz', we need fsub -0.0, X exactly.
+        if (!cstfp_pred_ty<is_neg_zero_fp>().match(FPMO->getOperand(0)))
+          return false;
+      }
+
+      return X.match(FPMO->getOperand(1));
     }
-    return X.match(FPMO->getOperand(1));
+
+    return false;
   }
 };
 
diff --git a/linux-x64/clang/include/llvm/IR/ProfileSummary.h b/linux-x64/clang/include/llvm/IR/ProfileSummary.h
index f1d49cc..78635ec 100644
--- a/linux-x64/clang/include/llvm/IR/ProfileSummary.h
+++ b/linux-x64/clang/include/llvm/IR/ProfileSummary.h
@@ -42,11 +42,10 @@
 
 class ProfileSummary {
 public:
-  enum Kind { PSK_Instr, PSK_Sample };
+  enum Kind { PSK_Instr, PSK_CSInstr, PSK_Sample };
 
 private:
   const Kind PSK;
-  static const char *KindStr[2];
   SummaryEntryVector DetailedSummary;
   uint64_t TotalCount, MaxCount, MaxInternalCount, MaxFunctionCount;
   uint32_t NumCounts, NumFunctions;
diff --git a/linux-x64/clang/include/llvm/IR/RemarkStreamer.h b/linux-x64/clang/include/llvm/IR/RemarkStreamer.h
new file mode 100644
index 0000000..9b6d82e
--- /dev/null
+++ b/linux-x64/clang/include/llvm/IR/RemarkStreamer.h
@@ -0,0 +1,106 @@
+//===- llvm/IR/RemarkStreamer.h - Remark Streamer ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the main interface for outputting remarks.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_IR_REMARKSTREAMER_H
+#define LLVM_IR_REMARKSTREAMER_H
+
+#include "llvm/IR/DiagnosticInfo.h"
+#include "llvm/Remarks/RemarkSerializer.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/Regex.h"
+#include "llvm/Support/ToolOutputFile.h"
+#include "llvm/Support/raw_ostream.h"
+#include <string>
+#include <vector>
+
+namespace llvm {
+/// Streamer for remarks.
+class RemarkStreamer {
+  /// The filename that the remark diagnostics are emitted to.
+  const std::string Filename;
+  /// The regex used to filter remarks based on the passes that emit them.
+  Optional<Regex> PassFilter;
+  /// The object used to serialize the remarks to a specific format.
+  std::unique_ptr<remarks::Serializer> Serializer;
+
+  /// Temporary buffer for converting diagnostics into remark objects. This is
+  /// used for the remark arguments that are converted from a vector of
+  /// diagnostic arguments to a vector of remark arguments.
+  SmallVector<remarks::Argument, 8> TmpArgs;
+  /// Convert diagnostics into remark objects. The result uses \p TmpArgs as a
+  /// temporary buffer for the remark arguments, and relies on all the strings
+  /// to be kept in memory until the next call to `toRemark`.
+  /// The lifetime of the members of the result is bound to the lifetime of both
+  /// the remark streamer and the LLVM diagnostics.
+  remarks::Remark toRemark(const DiagnosticInfoOptimizationBase &Diag);
+
+public:
+  RemarkStreamer(StringRef Filename,
+                 std::unique_ptr<remarks::Serializer> Serializer);
+  /// Return the filename that the remark diagnostics are emitted to.
+  StringRef getFilename() const { return Filename; }
+  /// Return stream that the remark diagnostics are emitted to.
+  raw_ostream &getStream() { return Serializer->OS; }
+  /// Return the serializer used for this stream.
+  remarks::Serializer &getSerializer() { return *Serializer; }
+  /// Set a pass filter based on a regex \p Filter.
+  /// Returns an error if the regex is invalid.
+  Error setFilter(StringRef Filter);
+  /// Emit a diagnostic through the streamer.
+  void emit(const DiagnosticInfoOptimizationBase &Diag);
+};
+
+template <typename ThisError>
+struct RemarkSetupErrorInfo : public ErrorInfo<ThisError> {
+  std::string Msg;
+  std::error_code EC;
+
+  RemarkSetupErrorInfo(Error E) {
+    handleAllErrors(std::move(E), [&](const ErrorInfoBase &EIB) {
+      Msg = EIB.message();
+      EC = EIB.convertToErrorCode();
+    });
+  }
+
+  void log(raw_ostream &OS) const override { OS << Msg; }
+  std::error_code convertToErrorCode() const override { return EC; }
+};
+
+struct RemarkSetupFileError : RemarkSetupErrorInfo<RemarkSetupFileError> {
+  static char ID;
+  using RemarkSetupErrorInfo<RemarkSetupFileError>::RemarkSetupErrorInfo;
+};
+
+struct RemarkSetupPatternError : RemarkSetupErrorInfo<RemarkSetupPatternError> {
+  static char ID;
+  using RemarkSetupErrorInfo<RemarkSetupPatternError>::RemarkSetupErrorInfo;
+};
+
+struct RemarkSetupFormatError : RemarkSetupErrorInfo<RemarkSetupFormatError> {
+  static char ID;
+  using RemarkSetupErrorInfo<RemarkSetupFormatError>::RemarkSetupErrorInfo;
+};
+
+enum class RemarksSerializerFormat { Unknown, YAML };
+
+Expected<RemarksSerializerFormat> parseSerializerFormat(StringRef Format);
+
+/// Setup optimization remarks.
+Expected<std::unique_ptr<ToolOutputFile>>
+setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
+                         StringRef RemarksPasses, StringRef RemarksFormat,
+                         bool RemarksWithHotness,
+                         unsigned RemarksHotnessThreshold = 0);
+
+} // end namespace llvm
+
+#endif // LLVM_IR_REMARKSTREAMER_H
diff --git a/linux-x64/clang/include/llvm/IR/RuntimeLibcalls.def b/linux-x64/clang/include/llvm/IR/RuntimeLibcalls.def
index 9d7268d..f6c74d4 100644
--- a/linux-x64/clang/include/llvm/IR/RuntimeLibcalls.def
+++ b/linux-x64/clang/include/llvm/IR/RuntimeLibcalls.def
@@ -254,6 +254,26 @@
 HANDLE_LIBCALL(FMAX_F80, "fmaxl")
 HANDLE_LIBCALL(FMAX_F128, "fmaxl")
 HANDLE_LIBCALL(FMAX_PPCF128, "fmaxl")
+HANDLE_LIBCALL(LROUND_F32, "lroundf")
+HANDLE_LIBCALL(LROUND_F64, "lround")
+HANDLE_LIBCALL(LROUND_F80, "lroundl")
+HANDLE_LIBCALL(LROUND_F128, "lroundl")
+HANDLE_LIBCALL(LROUND_PPCF128, "lroundl")
+HANDLE_LIBCALL(LLROUND_F32, "llroundf")
+HANDLE_LIBCALL(LLROUND_F64, "llround")
+HANDLE_LIBCALL(LLROUND_F80, "llroundl")
+HANDLE_LIBCALL(LLROUND_F128, "llroundl")
+HANDLE_LIBCALL(LLROUND_PPCF128, "llroundl")
+HANDLE_LIBCALL(LRINT_F32, "lrintf")
+HANDLE_LIBCALL(LRINT_F64, "lrint")
+HANDLE_LIBCALL(LRINT_F80, "lrintl")
+HANDLE_LIBCALL(LRINT_F128, "lrintl")
+HANDLE_LIBCALL(LRINT_PPCF128, "lrintl")
+HANDLE_LIBCALL(LLRINT_F32, "llrintf")
+HANDLE_LIBCALL(LLRINT_F64, "llrint")
+HANDLE_LIBCALL(LLRINT_F80, "llrintl")
+HANDLE_LIBCALL(LLRINT_F128, "llrintl")
+HANDLE_LIBCALL(LLRINT_PPCF128, "llrintl")
 
 // Conversion
 HANDLE_LIBCALL(FPEXT_F32_PPCF128, "__gcc_stoq")
@@ -529,6 +549,9 @@
 // Deoptimization
 HANDLE_LIBCALL(DEOPTIMIZE, "__llvm_deoptimize")
 
+// Return address
+HANDLE_LIBCALL(RETURN_ADDRESS, nullptr)
+
 HANDLE_LIBCALL(UNKNOWN_LIBCALL, nullptr)
 
 #undef HANDLE_LIBCALL
diff --git a/linux-x64/clang/include/llvm/IR/SafepointIRVerifier.h b/linux-x64/clang/include/llvm/IR/SafepointIRVerifier.h
index cbdb8bd..ec55279 100644
--- a/linux-x64/clang/include/llvm/IR/SafepointIRVerifier.h
+++ b/linux-x64/clang/include/llvm/IR/SafepointIRVerifier.h
@@ -18,6 +18,8 @@
 #ifndef LLVM_IR_SAFEPOINT_IR_VERIFIER
 #define LLVM_IR_SAFEPOINT_IR_VERIFIER
 
+#include "llvm/IR/PassManager.h"
+
 namespace llvm {
 
 class Function;
@@ -29,6 +31,16 @@
 /// Create an instance of the safepoint verifier pass which can be added to
 /// a pass pipeline to check for relocation bugs.
 FunctionPass *createSafepointIRVerifierPass();
+
+/// Create an instance of the safepoint verifier pass which can be added to
+/// a pass pipeline to check for relocation bugs.
+class SafepointIRVerifierPass : public PassInfoMixin<SafepointIRVerifierPass> {
+
+public:
+  explicit SafepointIRVerifierPass() {}
+
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
 }
 
 #endif // LLVM_IR_SAFEPOINT_IR_VERIFIER
diff --git a/linux-x64/clang/include/llvm/IR/Statepoint.h b/linux-x64/clang/include/llvm/IR/Statepoint.h
index aec0e9b..89f130b 100644
--- a/linux-x64/clang/include/llvm/IR/Statepoint.h
+++ b/linux-x64/clang/include/llvm/IR/Statepoint.h
@@ -76,14 +76,11 @@
 
 protected:
   explicit StatepointBase(InstructionTy *I) {
-    if (isStatepoint(I)) {
-      StatepointCall = cast<CallBaseTy>(I);
-    }
+    StatepointCall = isStatepoint(I) ? cast<CallBaseTy>(I) : nullptr;
   }
 
   explicit StatepointBase(CallBaseTy *Call) {
-    if (isStatepoint(Call))
-      StatepointCall = Call;
+    StatepointCall = isStatepoint(Call) ? Call : nullptr;
   }
 
 public:
diff --git a/linux-x64/clang/include/llvm/IR/Type.h b/linux-x64/clang/include/llvm/IR/Type.h
index 5f9f44e..f2aa490 100644
--- a/linux-x64/clang/include/llvm/IR/Type.h
+++ b/linux-x64/clang/include/llvm/IR/Type.h
@@ -366,6 +366,7 @@
     return ContainedTys[0];
   }
 
+  inline bool getVectorIsScalable() const;
   inline unsigned getVectorNumElements() const;
   Type *getVectorElementType() const {
     assert(getTypeID() == VectorTyID);
diff --git a/linux-x64/clang/include/llvm/IR/Use.h b/linux-x64/clang/include/llvm/IR/Use.h
index 6d29d47..034ca2c 100644
--- a/linux-x64/clang/include/llvm/IR/Use.h
+++ b/linux-x64/clang/include/llvm/IR/Use.h
@@ -139,7 +139,7 @@
   const Use *getImpliedUser() const LLVM_READONLY;
 
   Value *Val = nullptr;
-  Use *Next;
+  Use *Next = nullptr;
   PointerIntPair<Use **, 2, PrevPtrTag, PrevPointerTraits> Prev;
 
   void setPrev(Use **NewPrev) { Prev.setPointer(NewPrev); }
diff --git a/linux-x64/clang/include/llvm/IR/Value.h b/linux-x64/clang/include/llvm/IR/Value.h
index d0de008..3f8caa6 100644
--- a/linux-x64/clang/include/llvm/IR/Value.h
+++ b/linux-x64/clang/include/llvm/IR/Value.h
@@ -493,7 +493,7 @@
   /// swifterror attribute.
   bool isSwiftError() const;
 
-  /// Strip off pointer casts, all-zero GEPs, and aliases.
+  /// Strip off pointer casts, all-zero GEPs, address space casts, and aliases.
   ///
   /// Returns the original uncasted value.  If this is called on a non-pointer
   /// value, it returns 'this'.
@@ -503,6 +503,17 @@
                          static_cast<const Value *>(this)->stripPointerCasts());
   }
 
+  /// Strip off pointer casts, all-zero GEPs, address space casts, and aliases
+  /// but ensures the representation of the result stays the same.
+  ///
+  /// Returns the original uncasted value with the same representation. If this
+  /// is called on a non-pointer value, it returns 'this'.
+  const Value *stripPointerCastsSameRepresentation() const;
+  Value *stripPointerCastsSameRepresentation() {
+    return const_cast<Value *>(static_cast<const Value *>(this)
+                                   ->stripPointerCastsSameRepresentation());
+  }
+
   /// Strip off pointer casts, all-zero GEPs, aliases and invariant group
   /// info.
   ///
diff --git a/linux-x64/clang/include/llvm/InitializePasses.h b/linux-x64/clang/include/llvm/InitializePasses.h
index fe6c171..164d0be 100644
--- a/linux-x64/clang/include/llvm/InitializePasses.h
+++ b/linux-x64/clang/include/llvm/InitializePasses.h
@@ -64,8 +64,9 @@
 void initializeAAResultsWrapperPassPass(PassRegistry&);
 void initializeADCELegacyPassPass(PassRegistry&);
 void initializeAddDiscriminatorsLegacyPassPass(PassRegistry&);
-void initializeAddressSanitizerModulePass(PassRegistry&);
-void initializeAddressSanitizerPass(PassRegistry&);
+void initializeModuleAddressSanitizerLegacyPassPass(PassRegistry &);
+void initializeASanGlobalsMetadataWrapperPassPass(PassRegistry &);
+void initializeAddressSanitizerLegacyPassPass(PassRegistry &);
 void initializeAggressiveInstCombinerLegacyPassPass(PassRegistry&);
 void initializeAliasSetPrinterPass(PassRegistry&);
 void initializeAlignmentFromAssumptionsPass(PassRegistry&);
@@ -73,6 +74,7 @@
 void initializeArgPromotionPass(PassRegistry&);
 void initializeAssumptionCacheTrackerPass(PassRegistry&);
 void initializeAtomicExpandPass(PassRegistry&);
+void initializeAttributorLegacyPassPass(PassRegistry&);
 void initializeBDCELegacyPassPass(PassRegistry&);
 void initializeBarrierNoopPass(PassRegistry&);
 void initializeBasicAAWrapperPassPass(PassRegistry&);
@@ -133,16 +135,15 @@
 void initializeEarlyMachineLICMPass(PassRegistry&);
 void initializeEarlyTailDuplicatePass(PassRegistry&);
 void initializeEdgeBundlesPass(PassRegistry&);
-void initializeEfficiencySanitizerPass(PassRegistry&);
 void initializeEliminateAvailableExternallyLegacyPassPass(PassRegistry&);
 void initializeEntryExitInstrumenterPass(PassRegistry&);
-void initializeExpandISelPseudosPass(PassRegistry&);
 void initializeExpandMemCmpPassPass(PassRegistry&);
 void initializeExpandPostRAPass(PassRegistry&);
 void initializeExpandReductionsPass(PassRegistry&);
 void initializeMakeGuardsExplicitLegacyPassPass(PassRegistry&);
 void initializeExternalAAWrapperPassPass(PassRegistry&);
 void initializeFEntryInserterPass(PassRegistry&);
+void initializeFinalizeISelPass(PassRegistry&);
 void initializeFinalizeMachineBundlesPass(PassRegistry&);
 void initializeFlattenCFGPassPass(PassRegistry&);
 void initializeFloat2IntLegacyPassPass(PassRegistry&);
@@ -162,8 +163,9 @@
 void initializeGlobalSplitPass(PassRegistry&);
 void initializeGlobalsAAWrapperPassPass(PassRegistry&);
 void initializeGuardWideningLegacyPassPass(PassRegistry&);
+void initializeHardwareLoopsPass(PassRegistry&);
 void initializeHotColdSplittingLegacyPassPass(PassRegistry&);
-void initializeHWAddressSanitizerPass(PassRegistry&);
+void initializeHWAddressSanitizerLegacyPassPass(PassRegistry &);
 void initializeIPCPPass(PassRegistry&);
 void initializeIPSCCPLegacyPassPass(PassRegistry&);
 void initializeIRCELegacyPassPass(PassRegistry&);
@@ -180,6 +182,7 @@
 void initializeInstNamerPass(PassRegistry&);
 void initializeInstSimplifyLegacyPassPass(PassRegistry &);
 void initializeInstrProfilingLegacyPassPass(PassRegistry&);
+void initializeInstrOrderFileLegacyPassPass(PassRegistry&);
 void initializeInstructionCombiningPassPass(PassRegistry&);
 void initializeInstructionSelectPass(PassRegistry&);
 void initializeInterleavedAccessPass(PassRegistry&);
@@ -218,6 +221,7 @@
 void initializeLoopDistributeLegacyPass(PassRegistry&);
 void initializeLoopExtractorPass(PassRegistry&);
 void initializeLoopGuardWideningLegacyPassPass(PassRegistry&);
+void initializeLoopFuseLegacyPass(PassRegistry&);
 void initializeLoopIdiomRecognizeLegacyPassPass(PassRegistry&);
 void initializeLoopInfoWrapperPassPass(PassRegistry&);
 void initializeLoopInstSimplifyLegacyPassPass(PassRegistry&);
@@ -277,7 +281,7 @@
 void initializeMemorySSAWrapperPassPass(PassRegistry&);
 void initializeMemorySanitizerLegacyPassPass(PassRegistry&);
 void initializeMergeFunctionsPass(PassRegistry&);
-void initializeMergeICmpsPass(PassRegistry&);
+void initializeMergeICmpsLegacyPassPass(PassRegistry &);
 void initializeMergedLoadStoreMotionLegacyPassPass(PassRegistry&);
 void initializeMetaRenamerPass(PassRegistry&);
 void initializeModuleDebugInfoPrinterPass(PassRegistry&);
@@ -298,6 +302,7 @@
 void initializePGOIndirectCallPromotionLegacyPassPass(PassRegistry&);
 void initializePGOInstrumentationGenLegacyPassPass(PassRegistry&);
 void initializePGOInstrumentationUseLegacyPassPass(PassRegistry&);
+void initializePGOInstrumentationGenCreateVarLegacyPassPass(PassRegistry&);
 void initializePGOMemOPSizeOptLegacyPassPass(PassRegistry&);
 void initializePHIEliminationPass(PassRegistry&);
 void initializePartialInlinerLegacyPassPass(PassRegistry&);
diff --git a/linux-x64/clang/include/llvm/LTO/Caching.h b/linux-x64/clang/include/llvm/LTO/Caching.h
index c20d819..4c4a708 100644
--- a/linux-x64/clang/include/llvm/LTO/Caching.h
+++ b/linux-x64/clang/include/llvm/LTO/Caching.h
@@ -24,8 +24,8 @@
 /// (e.g. in a cache).
 ///
 /// Buffer callbacks must be thread safe.
-typedef std::function<void(unsigned Task, std::unique_ptr<MemoryBuffer> MB)>
-    AddBufferFn;
+using AddBufferFn =
+    std::function<void(unsigned Task, std::unique_ptr<MemoryBuffer> MB)>;
 
 /// Create a local file system cache which uses the given cache directory and
 /// file callback. This function also creates the cache directory if it does not
diff --git a/linux-x64/clang/include/llvm/LTO/Config.h b/linux-x64/clang/include/llvm/LTO/Config.h
index f0e1b1d..fb107e3 100644
--- a/linux-x64/clang/include/llvm/LTO/Config.h
+++ b/linux-x64/clang/include/llvm/LTO/Config.h
@@ -55,6 +55,9 @@
   /// Disable entirely the optimizer, including importing for ThinLTO
   bool CodeGenOnly = false;
 
+  /// Run PGO context sensitive IR instrumentation.
+  bool RunCSIRInstr = false;
+
   /// If this field is set, the set of passes run in the middle-end optimizer
   /// will be the one specified by the string. Only works with the new pass
   /// manager as the old one doesn't have this ability.
@@ -73,6 +76,9 @@
   /// with this triple.
   std::string DefaultTriple;
 
+  /// Context Sensitive PGO profile path.
+  std::string CSIRProfile;
+
   /// Sample PGO profile path.
   std::string SampleProfile;
 
@@ -82,17 +88,29 @@
   /// The directory to store .dwo files.
   std::string DwoDir;
 
+  /// The name for the split debug info file used for the DW_AT_[GNU_]dwo_name
+  /// attribute in the skeleton CU. This should generally only be used when
+  /// running an individual backend directly via thinBackend(), as otherwise
+  /// all objects would use the same .dwo file. Not used as output path.
+  std::string SplitDwarfFile;
+
   /// The path to write a .dwo file to. This should generally only be used when
   /// running an individual backend directly via thinBackend(), as otherwise
-  /// all .dwo files will be written to the same path.
-  std::string DwoPath;
+  /// all .dwo files will be written to the same path. Not used in skeleton CU.
+  std::string SplitDwarfOutput;
 
   /// Optimization remarks file path.
   std::string RemarksFilename = "";
 
+  /// Optimization remarks pass filter.
+  std::string RemarksPasses = "";
+
   /// Whether to emit optimization remarks with hotness informations.
   bool RemarksWithHotness = false;
 
+  /// The format used for serializing remarks (default: YAML).
+  std::string RemarksFormat = "";
+
   /// Whether to emit the pass manager debuggging informations.
   bool DebugPassManager = false;
 
@@ -132,7 +150,7 @@
   ///
   /// Note that in out-of-process backend scenarios, none of the hooks will be
   /// called for ThinLTO tasks.
-  typedef std::function<bool(unsigned Task, const Module &)> ModuleHookFn;
+  using ModuleHookFn = std::function<bool(unsigned Task, const Module &)>;
 
   /// This module hook is called after linking (regular LTO) or loading
   /// (ThinLTO) the module, before modifying it.
@@ -165,8 +183,8 @@
   ///
   /// It is called regardless of whether the backend is in-process, although it
   /// is not called from individual backend processes.
-  typedef std::function<bool(const ModuleSummaryIndex &Index)>
-      CombinedIndexHookFn;
+  using CombinedIndexHookFn =
+      std::function<bool(const ModuleSummaryIndex &Index)>;
   CombinedIndexHookFn CombinedIndexHook;
 
   /// This is a convenience function that configures this Config object to write
diff --git a/linux-x64/clang/include/llvm/LTO/LTO.h b/linux-x64/clang/include/llvm/LTO/LTO.h
index 1f9d764..ca0a8b6 100644
--- a/linux-x64/clang/include/llvm/LTO/LTO.h
+++ b/linux-x64/clang/include/llvm/LTO/LTO.h
@@ -20,6 +20,7 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/IR/DiagnosticInfo.h"
 #include "llvm/IR/ModuleSummaryIndex.h"
+#include "llvm/IR/RemarkStreamer.h"
 #include "llvm/LTO/Config.h"
 #include "llvm/Linker/IRMover.h"
 #include "llvm/Object/IRSymtab.h"
@@ -50,7 +51,8 @@
     function_ref<bool(GlobalValue::GUID, const GlobalValueSummary *)>
         isPrevailing,
     function_ref<void(StringRef, GlobalValue::GUID, GlobalValue::LinkageTypes)>
-        recordNewLinkage);
+        recordNewLinkage,
+    const DenseSet<GlobalValue::GUID> &GUIDPreservedSymbols);
 
 /// Update the linkages in the given \p Index to mark exported values
 /// as external and non-exported values as internal. The ThinLTO backends
@@ -83,8 +85,13 @@
 
 /// Setup optimization remarks.
 Expected<std::unique_ptr<ToolOutputFile>>
-setupOptimizationRemarks(LLVMContext &Context, StringRef LTORemarksFilename,
-                         bool LTOPassRemarksWithHotness, int Count = -1);
+setupOptimizationRemarks(LLVMContext &Context, StringRef RemarksFilename,
+                         StringRef RemarksPasses, StringRef RemarksFormat,
+                         bool RemarksWithHotness, int Count = -1);
+
+/// Setups the output file for saving statistics.
+Expected<std::unique_ptr<ToolOutputFile>>
+setupStatsFile(StringRef StatsFilename);
 
 class LTO;
 struct SymbolResolution;
@@ -109,6 +116,7 @@
   std::vector<std::pair<size_t, size_t>> ModuleSymIndices;
 
   StringRef TargetTriple, SourceFileName, COFFLinkerOpts;
+  std::vector<StringRef> DependentLibraries;
   std::vector<StringRef> ComdatTable;
 
 public:
@@ -130,6 +138,7 @@
     using irsymtab::Symbol::isWeak;
     using irsymtab::Symbol::isIndirect;
     using irsymtab::Symbol::getName;
+    using irsymtab::Symbol::getIRName;
     using irsymtab::Symbol::getVisibility;
     using irsymtab::Symbol::canBeOmittedFromSymbolTable;
     using irsymtab::Symbol::isTLS;
@@ -139,6 +148,7 @@
     using irsymtab::Symbol::getCOFFWeakExternalFallback;
     using irsymtab::Symbol::getSectionName;
     using irsymtab::Symbol::isExecutable;
+    using irsymtab::Symbol::isUsed;
   };
 
   /// A range over the symbols in this InputFile.
@@ -147,6 +157,9 @@
   /// Returns linker options specified in the input file.
   StringRef getCOFFLinkerOpts() const { return COFFLinkerOpts; }
 
+  /// Returns dependent library specifiers from the input file.
+  ArrayRef<StringRef> getDependentLibraries() const { return DependentLibraries; }
+
   /// Returns the path to the InputFile.
   StringRef getName() const;
 
@@ -159,6 +172,9 @@
   // Returns a table with all the comdats used by this file.
   ArrayRef<StringRef> getComdatTable() const { return ComdatTable; }
 
+  // Returns the only BitcodeModule from InputFile.
+  BitcodeModule &getSingleBitcodeModule();
+
 private:
   ArrayRef<Symbol> module_symbols(unsigned I) const {
     const auto &Indices = ModuleSymIndices[I];
@@ -182,8 +198,8 @@
 /// the fly.
 ///
 /// Stream callbacks must be thread safe.
-typedef std::function<std::unique_ptr<NativeObjectStream>(unsigned Task)>
-    AddStreamFn;
+using AddStreamFn =
+    std::function<std::unique_ptr<NativeObjectStream>(unsigned Task)>;
 
 /// This is the type of a native object cache. To request an item from the
 /// cache, pass a unique string as the Key. For hits, the cached file will be
@@ -197,17 +213,16 @@
 ///
 /// if (AddStreamFn AddStream = Cache(Task, Key))
 ///   ProduceContent(AddStream);
-typedef std::function<AddStreamFn(unsigned Task, StringRef Key)>
-    NativeObjectCache;
+using NativeObjectCache =
+    std::function<AddStreamFn(unsigned Task, StringRef Key)>;
 
 /// A ThinBackend defines what happens after the thin-link phase during ThinLTO.
 /// The details of this type definition aren't important; clients can only
 /// create a ThinBackend using one of the create*ThinBackend() functions below.
-typedef std::function<std::unique_ptr<ThinBackendProc>(
+using ThinBackend = std::function<std::unique_ptr<ThinBackendProc>(
     Config &C, ModuleSummaryIndex &CombinedIndex,
     StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries,
-    AddStreamFn AddStream, NativeObjectCache Cache)>
-    ThinBackend;
+    AddStreamFn AddStream, NativeObjectCache Cache)>;
 
 /// This ThinBackend runs the individual backend jobs in-process.
 ThinBackend createInProcessThinBackend(unsigned ParallelismLevel);
@@ -396,7 +411,8 @@
                    const SymbolResolution *&ResI, const SymbolResolution *ResE);
 
   Error runRegularLTO(AddStreamFn AddStream);
-  Error runThinLTO(AddStreamFn AddStream, NativeObjectCache Cache);
+  Error runThinLTO(AddStreamFn AddStream, NativeObjectCache Cache,
+                   const DenseSet<GlobalValue::GUID> &GUIDPreservedSymbols);
 
   Error checkPartiallySplit();
 
diff --git a/linux-x64/clang/include/llvm/LTO/legacy/LTOCodeGenerator.h b/linux-x64/clang/include/llvm/LTO/legacy/LTOCodeGenerator.h
index 37fef19..d3cb4c8 100644
--- a/linux-x64/clang/include/llvm/LTO/legacy/LTOCodeGenerator.h
+++ b/linux-x64/clang/include/llvm/LTO/legacy/LTOCodeGenerator.h
@@ -241,6 +241,7 @@
   TargetMachine::CodeGenFileType FileType = TargetMachine::CGFT_ObjectFile;
   std::unique_ptr<ToolOutputFile> DiagnosticOutputFile;
   bool Freestanding = false;
+  std::unique_ptr<ToolOutputFile> StatsFile = nullptr;
 };
 }
 #endif
diff --git a/linux-x64/clang/include/llvm/LTO/legacy/LTOModule.h b/linux-x64/clang/include/llvm/LTO/legacy/LTOModule.h
index 006521b..84b9b8c 100644
--- a/linux-x64/clang/include/llvm/LTO/legacy/LTOModule.h
+++ b/linux-x64/clang/include/llvm/LTO/legacy/LTOModule.h
@@ -17,6 +17,7 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringSet.h"
 #include "llvm/IR/Module.h"
+#include "llvm/LTO/LTO.h"
 #include "llvm/Object/IRObjectFile.h"
 #include "llvm/Object/ModuleSymbolTable.h"
 #include "llvm/Target/TargetMachine.h"
@@ -47,6 +48,8 @@
 
   std::string LinkerOpts;
 
+  std::string DependentLibraries;
+
   std::unique_ptr<Module> Mod;
   MemoryBufferRef MBRef;
   ModuleSymbolTable SymTab;
@@ -155,9 +158,17 @@
 
   const std::vector<StringRef> &getAsmUndefinedRefs() { return _asm_undefines; }
 
+  static lto::InputFile *createInputFile(const void *buffer, size_t buffer_size,
+                                         const char *path, std::string &out_error);
+
+  static size_t getDependentLibraryCount(lto::InputFile *input);
+
+  static const char *getDependentLibrary(lto::InputFile *input, size_t index, size_t *size);
+
 private:
   /// Parse metadata from the module
   // FIXME: it only parses "llvm.linker.options" metadata at the moment
+  // FIXME: can't access metadata in lazily loaded modules
   void parseMetadata();
 
   /// Parse the symbols from the module and model-level ASM and add them to
diff --git a/linux-x64/clang/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h b/linux-x64/clang/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
index 1730e83..210a2ce 100644
--- a/linux-x64/clang/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
+++ b/linux-x64/clang/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
@@ -19,6 +19,7 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/ADT/Triple.h"
 #include "llvm/IR/ModuleSummaryIndex.h"
+#include "llvm/LTO/LTO.h"
 #include "llvm/Support/CachePruning.h"
 #include "llvm/Support/CodeGen.h"
 #include "llvm/Support/MemoryBuffer.h"
@@ -31,23 +32,6 @@
 class LLVMContext;
 class TargetMachine;
 
-/// Wrapper around MemoryBufferRef, owning the identifier
-class ThinLTOBuffer {
-  std::string OwnedIdentifier;
-  StringRef Buffer;
-
-public:
-  ThinLTOBuffer(StringRef Buffer, StringRef Identifier)
-      : OwnedIdentifier(Identifier), Buffer(Buffer) {}
-
-  MemoryBufferRef getMemBuffer() const {
-    return MemoryBufferRef(Buffer,
-                           {OwnedIdentifier.c_str(), OwnedIdentifier.size()});
-  }
-  StringRef getBuffer() const { return Buffer; }
-  StringRef getBufferIdentifier() const { return OwnedIdentifier; }
-};
-
 /// Helper to gather options relevant to the target machine creation
 struct TargetMachineBuilder {
   Triple TheTriple;
@@ -267,37 +251,49 @@
    * and additionally resolve weak and linkonce symbols.
    * Index is updated to reflect linkage changes from weak resolution.
    */
-  void promote(Module &Module, ModuleSummaryIndex &Index);
+  void promote(Module &Module, ModuleSummaryIndex &Index,
+               const lto::InputFile &File);
 
   /**
    * Compute and emit the imported files for module at \p ModulePath.
    */
   void emitImports(Module &Module, StringRef OutputName,
-                   ModuleSummaryIndex &Index);
+                   ModuleSummaryIndex &Index,
+                   const lto::InputFile &File);
 
   /**
    * Perform cross-module importing for the module identified by
    * ModuleIdentifier.
    */
-  void crossModuleImport(Module &Module, ModuleSummaryIndex &Index);
+  void crossModuleImport(Module &Module, ModuleSummaryIndex &Index,
+                         const lto::InputFile &File);
 
   /**
    * Compute the list of summaries needed for importing into module.
    */
   void gatherImportedSummariesForModule(
       Module &Module, ModuleSummaryIndex &Index,
-      std::map<std::string, GVSummaryMapTy> &ModuleToSummariesForIndex);
+      std::map<std::string, GVSummaryMapTy> &ModuleToSummariesForIndex,
+      const lto::InputFile &File);
 
   /**
    * Perform internalization. Index is updated to reflect linkage changes.
    */
-  void internalize(Module &Module, ModuleSummaryIndex &Index);
+  void internalize(Module &Module, ModuleSummaryIndex &Index,
+                   const lto::InputFile &File);
 
   /**
    * Perform post-importing ThinLTO optimizations.
    */
   void optimize(Module &Module);
 
+  /**
+   * Write temporary object file to SavedObjectDirectoryPath, write symlink
+   * to Cache directory if needed. Returns the path to the generated file in
+   * SavedObjectsDirectoryPath.
+   */
+  std::string writeGeneratedObject(int count, StringRef CacheEntryPath,
+                                   const MemoryBuffer &OutputBuffer);
   /**@}*/
 
 private:
@@ -313,7 +309,7 @@
 
   /// Vector holding the input buffers containing the bitcode modules to
   /// process.
-  std::vector<ThinLTOBuffer> Modules;
+  std::vector<std::unique_ptr<lto::InputFile>> Modules;
 
   /// Set of symbols that need to be preserved outside of the set of bitcode
   /// files.
diff --git a/linux-x64/clang/include/llvm/LinkAllPasses.h b/linux-x64/clang/include/llvm/LinkAllPasses.h
index ec81b16..675d179 100644
--- a/linux-x64/clang/include/llvm/LinkAllPasses.h
+++ b/linux-x64/clang/include/llvm/LinkAllPasses.h
@@ -41,6 +41,7 @@
 #include "llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h"
 #include "llvm/Transforms/IPO.h"
 #include "llvm/Transforms/IPO/AlwaysInliner.h"
+#include "llvm/Transforms/IPO/Attributor.h"
 #include "llvm/Transforms/IPO/FunctionAttrs.h"
 #include "llvm/Transforms/InstCombine/InstCombine.h"
 #include "llvm/Transforms/Instrumentation.h"
@@ -102,6 +103,7 @@
       (void) llvm::createGCOVProfilerPass();
       (void) llvm::createPGOInstrumentationGenLegacyPass();
       (void) llvm::createPGOInstrumentationUseLegacyPass();
+      (void) llvm::createPGOInstrumentationGenCreateVarLegacyPass();
       (void) llvm::createPGOIndirectCallPromotionLegacyPass();
       (void) llvm::createPGOMemOPSizeOptLegacyPass();
       (void) llvm::createInstrProfilingLegacyPass();
@@ -187,10 +189,11 @@
       (void) llvm::createPostDomTree();
       (void) llvm::createInstructionNamerPass();
       (void) llvm::createMetaRenamerPass();
+      (void) llvm::createAttributorLegacyPass();
       (void) llvm::createPostOrderFunctionAttrsLegacyPass();
       (void) llvm::createReversePostOrderFunctionAttrsPass();
       (void) llvm::createMergeFunctionsPass();
-      (void) llvm::createMergeICmpsPass();
+      (void) llvm::createMergeICmpsLegacyPass();
       (void) llvm::createExpandMemCmpPass();
       std::string buf;
       llvm::raw_string_ostream os(buf);
@@ -220,6 +223,7 @@
       (void) llvm::createEliminateAvailableExternallyPass();
       (void) llvm::createScalarizeMaskedMemIntrinPass();
       (void) llvm::createWarnMissedTransformationsPass();
+      (void) llvm::createHardwareLoopsPass();
 
       (void)new llvm::IntervalPartition();
       (void)new llvm::ScalarEvolutionWrapperPass();
diff --git a/linux-x64/clang/include/llvm/MC/MCAsmInfo.h b/linux-x64/clang/include/llvm/MC/MCAsmInfo.h
index e861df5..971e935 100644
--- a/linux-x64/clang/include/llvm/MC/MCAsmInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCAsmInfo.h
@@ -17,16 +17,17 @@
 
 #include "llvm/ADT/StringRef.h"
 #include "llvm/MC/MCDirectives.h"
-#include "llvm/MC/MCDwarf.h"
 #include "llvm/MC/MCTargetOptions.h"
 #include <vector>
 
 namespace llvm {
 
 class MCContext;
+class MCCFIInstruction;
 class MCExpr;
 class MCSection;
 class MCStreamer;
+class MCSubtargetInfo;
 class MCSymbol;
 
 namespace WinEH {
@@ -473,7 +474,13 @@
   bool hasMachoTBSSDirective() const { return HasMachoTBSSDirective; }
   bool hasCOFFAssociativeComdats() const { return HasCOFFAssociativeComdats; }
   bool hasCOFFComdatConstants() const { return HasCOFFComdatConstants; }
-  unsigned getMaxInstLength() const { return MaxInstLength; }
+
+  /// Returns the maximum possible encoded instruction size in bytes. If \p STI
+  /// is null, this should be the maximum size for any subtarget.
+  virtual unsigned getMaxInstLength(const MCSubtargetInfo *STI = nullptr) const {
+    return MaxInstLength;
+  }
+
   unsigned getMinInstAlignment() const { return MinInstAlignment; }
   bool getDollarIsPC() const { return DollarIsPC; }
   const char *getSeparatorString() const { return SeparatorString; }
@@ -597,9 +604,7 @@
     return SupportsExtendedDwarfLocDirective;
   }
 
-  void addInitialFrameState(const MCCFIInstruction &Inst) {
-    InitialFrameState.push_back(Inst);
-  }
+  void addInitialFrameState(const MCCFIInstruction &Inst);
 
   const std::vector<MCCFIInstruction> &getInitialFrameState() const {
     return InitialFrameState;
diff --git a/linux-x64/clang/include/llvm/MC/MCAsmInfoXCOFF.h b/linux-x64/clang/include/llvm/MC/MCAsmInfoXCOFF.h
new file mode 100644
index 0000000..2a72ba7
--- /dev/null
+++ b/linux-x64/clang/include/llvm/MC/MCAsmInfoXCOFF.h
@@ -0,0 +1,25 @@
+//===- MCAsmInfoXCOFF.h - XCOFF asm properties ----------------- *- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_MCASMINFOXCOFF_H
+#define LLVM_MC_MCASMINFOXCOFF_H
+
+#include "llvm/MC/MCAsmInfo.h"
+
+namespace llvm {
+
+class MCAsmInfoXCOFF : public MCAsmInfo {
+  virtual void anchor();
+
+protected:
+  MCAsmInfoXCOFF();
+};
+
+} // end namespace llvm
+
+#endif // LLVM_MC_MCASMINFOXCOFF_H
diff --git a/linux-x64/clang/include/llvm/MC/MCContext.h b/linux-x64/clang/include/llvm/MC/MCContext.h
index b964965..c40cd7c 100644
--- a/linux-x64/clang/include/llvm/MC/MCContext.h
+++ b/linux-x64/clang/include/llvm/MC/MCContext.h
@@ -18,6 +18,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/BinaryFormat/XCOFF.h"
 #include "llvm/MC/MCAsmMacro.h"
 #include "llvm/MC/MCDwarf.h"
 #include "llvm/MC/MCSubtargetInfo.h"
@@ -49,6 +50,7 @@
   class MCSectionELF;
   class MCSectionMachO;
   class MCSectionWasm;
+  class MCSectionXCOFF;
   class MCStreamer;
   class MCSymbol;
   class MCSymbolELF;
@@ -91,6 +93,7 @@
     SpecificBumpPtrAllocator<MCSectionELF> ELFAllocator;
     SpecificBumpPtrAllocator<MCSectionMachO> MachOAllocator;
     SpecificBumpPtrAllocator<MCSectionWasm> WasmAllocator;
+    SpecificBumpPtrAllocator<MCSectionXCOFF> XCOFFAllocator;
 
     /// Bindings of names to symbols.
     SymbolTable Symbols;
@@ -109,6 +112,9 @@
     /// number of section symbols with the same name).
     StringMap<bool, BumpPtrAllocator &> UsedNames;
 
+    /// Keeps track of labels that are used in inline assembly.
+    SymbolTable InlineAsmUsedLabelNames;
+
     /// The next ID to dole out to an unnamed assembler temporary symbol with
     /// a given prefix.
     StringMap<unsigned> NextID;
@@ -246,10 +252,25 @@
       }
     };
 
+    struct XCOFFSectionKey {
+      std::string SectionName;
+      XCOFF::StorageMappingClass MappingClass;
+
+      XCOFFSectionKey(StringRef SectionName,
+                      XCOFF::StorageMappingClass MappingClass)
+          : SectionName(SectionName), MappingClass(MappingClass) {}
+
+      bool operator<(const XCOFFSectionKey &Other) const {
+        return std::tie(SectionName, MappingClass) <
+               std::tie(Other.SectionName, Other.MappingClass);
+      }
+    };
+
     StringMap<MCSectionMachO *> MachOUniquingMap;
     std::map<ELFSectionKey, MCSectionELF *> ELFUniquingMap;
     std::map<COFFSectionKey, MCSectionCOFF *> COFFUniquingMap;
     std::map<WasmSectionKey, MCSectionWasm *> WasmUniquingMap;
+    std::map<XCOFFSectionKey, MCSectionXCOFF *> XCOFFUniquingMap;
     StringMap<bool> RelSecNames;
 
     SpecificBumpPtrAllocator<MCSubtargetInfo> MCSubtargetAllocator;
@@ -359,6 +380,16 @@
     /// APIs.
     const SymbolTable &getSymbols() const { return Symbols; }
 
+    /// isInlineAsmLabel - Return true if the name is a label referenced in
+    /// inline assembly.
+    MCSymbol *getInlineAsmLabel(StringRef Name) const {
+      return InlineAsmUsedLabelNames.lookup(Name);
+    }
+
+    /// registerInlineAsmLabel - Records that the name is a label referenced in
+    /// inline assembly.
+    void registerInlineAsmLabel(MCSymbol *Sym);
+
     /// @}
 
     /// \name Section Management
@@ -440,8 +471,6 @@
                                   SectionKind Kind,
                                   const char *BeginSymName = nullptr);
 
-    MCSectionCOFF *getCOFFSection(StringRef Section);
-
     /// Gets or creates a section equivalent to Sec that is associated with the
     /// section containing KeySym. For example, to create a debug info section
     /// associated with an inline function, pass the normal debug info section
@@ -472,6 +501,11 @@
                                   const MCSymbolWasm *Group, unsigned UniqueID,
                                   const char *BeginSymName);
 
+    MCSectionXCOFF *getXCOFFSection(StringRef Section,
+                                    XCOFF::StorageMappingClass MappingClass,
+                                    SectionKind K,
+                                    const char *BeginSymName = nullptr);
+
     // Create and save a copy of STI and return a reference to the copy.
     MCSubtargetInfo &getSubtargetCopy(const MCSubtargetInfo &STI);
 
@@ -488,12 +522,6 @@
     /// Set the compilation directory for DW_AT_comp_dir
     void setCompilationDir(StringRef S) { CompilationDir = S.str(); }
 
-    /// Get the debug prefix map.
-    const std::map<const std::string, const std::string> &
-    getDebugPrefixMap() const {
-      return DebugPrefixMap;
-    }
-
     /// Add an entry to the debug prefix map.
     void addDebugPrefixMapEntry(const std::string &From, const std::string &To);
 
@@ -511,7 +539,7 @@
     /// Creates an entry in the dwarf file and directory tables.
     Expected<unsigned> getDwarfFile(StringRef Directory, StringRef FileName,
                                     unsigned FileNumber,
-                                    MD5::MD5Result *Checksum,
+                                    Optional<MD5::MD5Result> Checksum,
                                     Optional<StringRef> Source, unsigned CUID);
 
     bool isValidDwarfFileNumber(unsigned FileNumber, unsigned CUID = 0);
@@ -538,13 +566,6 @@
       return getMCDwarfLineTable(CUID).getMCDwarfDirs();
     }
 
-    bool hasMCLineSections() const {
-      for (const auto &Table : MCDwarfLineTablesCUMap)
-        if (!Table.second.getMCDwarfFiles().empty() || Table.second.getLabel())
-          return true;
-      return false;
-    }
-
     unsigned getDwarfCompileUnitID() { return DwarfCompileUnitID; }
 
     void setDwarfCompileUnitID(unsigned CUIndex) {
@@ -554,7 +575,8 @@
     /// Specifies the "root" file and directory of the compilation unit.
     /// These are "file 0" and "directory 0" in DWARF v5.
     void setMCLineTableRootFile(unsigned CUID, StringRef CompilationDir,
-                                StringRef Filename, MD5::MD5Result *Checksum,
+                                StringRef Filename,
+                                Optional<MD5::MD5Result> Checksum,
                                 Optional<StringRef> Source) {
       getMCDwarfLineTable(CUID).setRootFile(CompilationDir, Filename, Checksum,
                                             Source);
@@ -594,6 +616,10 @@
       GenDwarfFileNumber = FileNumber;
     }
 
+    /// Specifies information about the "root file" for assembler clients
+    /// (e.g., llvm-mc). Assumes compilation dir etc. have been set up.
+    void setGenDwarfRootFile(StringRef FileName, StringRef Buffer);
+
     const SetVector<MCSection *> &getGenDwarfSectionSyms() {
       return SectionsForRanges;
     }
diff --git a/linux-x64/clang/include/llvm/MC/MCDwarf.h b/linux-x64/clang/include/llvm/MC/MCDwarf.h
index 8eaa152..1a37aaf 100644
--- a/linux-x64/clang/include/llvm/MC/MCDwarf.h
+++ b/linux-x64/clang/include/llvm/MC/MCDwarf.h
@@ -41,11 +41,14 @@
 class SMLoc;
 class SourceMgr;
 
-/// Instances of this class represent the name of the dwarf
-/// .file directive and its associated dwarf file number in the MC file,
-/// and MCDwarfFile's are created and uniqued by the MCContext class where
-/// the file number for each is its index into the vector of DwarfFiles (note
-/// index 0 is not used and not a valid dwarf file number).
+/// Instances of this class represent the name of the dwarf .file directive and
+/// its associated dwarf file number in the MC file. MCDwarfFile's are created
+/// and uniqued by the MCContext class. In Dwarf 4 file numbers start from 1;
+/// i.e. the entry with file number 1 is the first element in the vector of
+/// DwarfFiles and there is no MCDwarfFile with file number 0. In Dwarf 5 file
+/// numbers start from 0, with the MCDwarfFile with file number 0 being the
+/// primary source file, and file numbers correspond to their index in the
+/// vector.
 struct MCDwarfFile {
   // The base name of the file without its directory path.
   std::string Name;
@@ -55,7 +58,7 @@
 
   /// The MD5 checksum, if there is one. Non-owning pointer to data allocated
   /// in MCContext.
-  MD5::MD5Result *Checksum = nullptr;
+  Optional<MD5::MD5Result> Checksum;
 
   /// The source code of the file. Non-owning reference to data allocated in
   /// MCContext.
@@ -223,8 +226,9 @@
   MCDwarfLineTableHeader() = default;
 
   Expected<unsigned> tryGetFile(StringRef &Directory, StringRef &FileName,
-                                MD5::MD5Result *Checksum,
-                                Optional<StringRef> &Source,
+                                Optional<MD5::MD5Result> Checksum,
+                                Optional<StringRef> Source,
+                                uint16_t DwarfVersion,
                                 unsigned FileNumber = 0);
   std::pair<MCSymbol *, MCSymbol *>
   Emit(MCStreamer *MCOS, MCDwarfLineTableParams Params,
@@ -245,32 +249,50 @@
     return MCDwarfFiles.empty() || (HasAllMD5 == HasAnyMD5);
   }
 
+  void setRootFile(StringRef Directory, StringRef FileName,
+                   Optional<MD5::MD5Result> Checksum,
+                   Optional<StringRef> Source) {
+    CompilationDir = Directory;
+    RootFile.Name = FileName;
+    RootFile.DirIndex = 0;
+    RootFile.Checksum = Checksum;
+    RootFile.Source = Source;
+    trackMD5Usage(Checksum.hasValue());
+    HasSource = Source.hasValue();
+  }
+
+  void resetFileTable() {
+    MCDwarfDirs.clear();
+    MCDwarfFiles.clear();
+    RootFile.Name.clear();
+    resetMD5Usage();
+    HasSource = false;
+  }
+
 private:
   void emitV2FileDirTables(MCStreamer *MCOS) const;
-  void emitV5FileDirTables(MCStreamer *MCOS, Optional<MCDwarfLineStr> &LineStr,
-                           StringRef CtxCompilationDir) const;
+  void emitV5FileDirTables(MCStreamer *MCOS, Optional<MCDwarfLineStr> &LineStr) const;
 };
 
 class MCDwarfDwoLineTable {
   MCDwarfLineTableHeader Header;
+  bool HasSplitLineTable = false;
 
 public:
   void maybeSetRootFile(StringRef Directory, StringRef FileName,
-                        MD5::MD5Result *Checksum, Optional<StringRef> Source) {
+                        Optional<MD5::MD5Result> Checksum,
+                        Optional<StringRef> Source) {
     if (!Header.RootFile.Name.empty())
       return;
-    Header.CompilationDir = Directory;
-    Header.RootFile.Name = FileName;
-    Header.RootFile.DirIndex = 0;
-    Header.RootFile.Checksum = Checksum;
-    Header.RootFile.Source = Source;
-    Header.trackMD5Usage(Checksum);
-    Header.HasSource = Source.hasValue();
+    Header.setRootFile(Directory, FileName, Checksum, Source);
   }
 
   unsigned getFile(StringRef Directory, StringRef FileName,
-                   MD5::MD5Result *Checksum, Optional<StringRef> Source) {
-    return cantFail(Header.tryGetFile(Directory, FileName, Checksum, Source));
+                   Optional<MD5::MD5Result> Checksum, uint16_t DwarfVersion,
+                   Optional<StringRef> Source) {
+    HasSplitLineTable = true;
+    return cantFail(Header.tryGetFile(Directory, FileName, Checksum, Source,
+                                      DwarfVersion));
   }
 
   void Emit(MCStreamer &MCOS, MCDwarfLineTableParams Params,
@@ -290,36 +312,34 @@
               Optional<MCDwarfLineStr> &LineStr) const;
 
   Expected<unsigned> tryGetFile(StringRef &Directory, StringRef &FileName,
-                                MD5::MD5Result *Checksum,
+                                Optional<MD5::MD5Result> Checksum,
                                 Optional<StringRef> Source,
+                                uint16_t DwarfVersion,
                                 unsigned FileNumber = 0);
   unsigned getFile(StringRef &Directory, StringRef &FileName,
-                   MD5::MD5Result *Checksum, Optional<StringRef> &Source,
-                   unsigned FileNumber = 0) {
+                   Optional<MD5::MD5Result> Checksum, Optional<StringRef> Source,
+                   uint16_t DwarfVersion, unsigned FileNumber = 0) {
     return cantFail(tryGetFile(Directory, FileName, Checksum, Source,
-                               FileNumber));
+                               DwarfVersion, FileNumber));
   }
 
   void setRootFile(StringRef Directory, StringRef FileName,
-                   MD5::MD5Result *Checksum, Optional<StringRef> Source) {
+                   Optional<MD5::MD5Result> Checksum, Optional<StringRef> Source) {
     Header.CompilationDir = Directory;
     Header.RootFile.Name = FileName;
     Header.RootFile.DirIndex = 0;
     Header.RootFile.Checksum = Checksum;
     Header.RootFile.Source = Source;
-    Header.trackMD5Usage(Checksum);
+    Header.trackMD5Usage(Checksum.hasValue());
     Header.HasSource = Source.hasValue();
   }
 
-  void resetRootFile() {
-    assert(Header.MCDwarfFiles.empty());
-    Header.RootFile.Name.clear();
-    Header.resetMD5Usage();
-    Header.HasSource = false;
-  }
+  void resetFileTable() { Header.resetFileTable(); }
 
   bool hasRootFile() const { return !Header.RootFile.Name.empty(); }
 
+  const MCDwarfFile &getRootFile() const { return Header.RootFile; }
+
   // Report whether MD5 usage has been consistent (all-or-none).
   bool isMD5UsageConsistent() const { return Header.isMD5UsageConsistent(); }
 
diff --git a/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h b/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h
index 9ff7011..2d441fd 100644
--- a/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h
+++ b/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h
@@ -53,13 +53,14 @@
 
 class MCELFObjectTargetWriter : public MCObjectTargetWriter {
   const uint8_t OSABI;
+  const uint8_t ABIVersion;
   const uint16_t EMachine;
   const unsigned HasRelocationAddend : 1;
   const unsigned Is64Bit : 1;
 
 protected:
   MCELFObjectTargetWriter(bool Is64Bit_, uint8_t OSABI_, uint16_t EMachine_,
-                          bool HasRelocationAddend);
+                          bool HasRelocationAddend_, uint8_t ABIVersion_ = 0);
 
 public:
   virtual ~MCELFObjectTargetWriter() = default;
@@ -97,6 +98,7 @@
   /// \name Accessors
   /// @{
   uint8_t getOSABI() const { return OSABI; }
+  uint8_t getABIVersion() const { return ABIVersion; }
   uint16_t getEMachine() const { return EMachine; }
   bool hasRelocationAddend() const { return HasRelocationAddend; }
   bool is64Bit() const { return Is64Bit; }
diff --git a/linux-x64/clang/include/llvm/MC/MCExpr.h b/linux-x64/clang/include/llvm/MC/MCExpr.h
index 8531630..7d9b265 100644
--- a/linux-x64/clang/include/llvm/MC/MCExpr.h
+++ b/linux-x64/clang/include/llvm/MC/MCExpr.h
@@ -284,16 +284,17 @@
     VK_Hexagon_IE,
     VK_Hexagon_IE_GOT,
 
-    VK_WebAssembly_FUNCTION, // Function table index, rather than virtual addr
-    VK_WebAssembly_GLOBAL,   // Global object index
-    VK_WebAssembly_TYPEINDEX,// Type table index
-    VK_WebAssembly_EVENT,    // Event index
+    VK_WASM_TYPEINDEX, // Reference to a symbol's type (signature)
+    VK_WASM_MBREL,     // Memory address relative to memory base
+    VK_WASM_TBREL,     // Table index relative to table bare
 
     VK_AMDGPU_GOTPCREL32_LO, // symbol@gotpcrel32@lo
     VK_AMDGPU_GOTPCREL32_HI, // symbol@gotpcrel32@hi
     VK_AMDGPU_REL32_LO,      // symbol@rel32@lo
     VK_AMDGPU_REL32_HI,      // symbol@rel32@hi
     VK_AMDGPU_REL64,         // symbol@rel64
+    VK_AMDGPU_ABS32_LO,      // symbol@abs32@lo
+    VK_AMDGPU_ABS32_HI,      // symbol@abs32@hi
 
     VK_TPREL,
     VK_DTPREL
diff --git a/linux-x64/clang/include/llvm/MC/MCFixup.h b/linux-x64/clang/include/llvm/MC/MCFixup.h
index 559a19e..accffb7 100644
--- a/linux-x64/clang/include/llvm/MC/MCFixup.h
+++ b/linux-x64/clang/include/llvm/MC/MCFixup.h
@@ -20,7 +20,8 @@
 
 /// Extensible enumeration to represent the type of a fixup.
 enum MCFixupKind {
-  FK_Data_1 = 0, ///< A one-byte fixup.
+  FK_NONE = 0,   ///< A no-op fixup.
+  FK_Data_1,     ///< A one-byte fixup.
   FK_Data_2,     ///< A two-byte fixup.
   FK_Data_4,     ///< A four-byte fixup.
   FK_Data_8,     ///< A eight-byte fixup.
diff --git a/linux-x64/clang/include/llvm/MC/MCInst.h b/linux-x64/clang/include/llvm/MC/MCInst.h
index 9675b78..8df8096 100644
--- a/linux-x64/clang/include/llvm/MC/MCInst.h
+++ b/linux-x64/clang/include/llvm/MC/MCInst.h
@@ -187,6 +187,7 @@
 
   void clear() { Operands.clear(); }
   void erase(iterator I) { Operands.erase(I); }
+  void erase(iterator First, iterator Last) { Operands.erase(First, Last); }
   size_t size() const { return Operands.size(); }
   iterator begin() { return Operands.begin(); }
   const_iterator begin() const { return Operands.begin(); }
diff --git a/linux-x64/clang/include/llvm/MC/MCInstPrinter.h b/linux-x64/clang/include/llvm/MC/MCInstPrinter.h
index 916aa89..6bbc4bc 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstPrinter.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstPrinter.h
@@ -64,6 +64,10 @@
 
   virtual ~MCInstPrinter();
 
+  /// Customize the printer according to a command line option.
+  /// @return true if the option is recognized and applied.
+  virtual bool applyTargetSpecificCLOption(StringRef Opt) { return false; }
+
   /// Specify a stream to emit comments to.
   void setCommentStream(raw_ostream &OS) { CommentStream = &OS; }
 
diff --git a/linux-x64/clang/include/llvm/MC/MCInstrDesc.h b/linux-x64/clang/include/llvm/MC/MCInstrDesc.h
index ad5a3e9..0aa586d 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstrDesc.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstrDesc.h
@@ -134,6 +134,7 @@
   FoldableAsLoad,
   MayLoad,
   MayStore,
+  MayRaiseFPException,
   Predicable,
   NotDuplicable,
   UnmodeledSideEffects,
@@ -403,6 +404,11 @@
   /// may not actually modify anything, for example.
   bool mayStore() const { return Flags & (1ULL << MCID::MayStore); }
 
+  /// Return true if this instruction may raise a floating-point exception.
+  bool mayRaiseFPException() const {
+    return Flags & (1ULL << MCID::MayRaiseFPException);
+  }
+
   /// Return true if this instruction has side
   /// effects that are not modeled by other flags.  This does not return true
   /// for instructions whose effects are captured by:
diff --git a/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h b/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h
index 0c1ade4..abc87bf 100644
--- a/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h
@@ -159,6 +159,9 @@
   /// FaultMap section.
   MCSection *FaultMapSection;
 
+  /// Remarks section.
+  MCSection *RemarksSection;
+
   /// EH frame section.
   ///
   /// It is initialized on demand so it can be overwritten (with uniquing).
@@ -314,6 +317,7 @@
 
   MCSection *getStackMapSection() const { return StackMapSection; }
   MCSection *getFaultMapSection() const { return FaultMapSection; }
+  MCSection *getRemarksSection() const { return RemarksSection; }
 
   MCSection *getStackSizesSection(const MCSection &TextSec) const;
 
@@ -380,7 +384,7 @@
     return EHFrameSection;
   }
 
-  enum Environment { IsMachO, IsELF, IsCOFF, IsWasm };
+  enum Environment { IsMachO, IsELF, IsCOFF, IsWasm, IsXCOFF };
   Environment getObjectFileType() const { return Env; }
 
   bool isPositionIndependent() const { return PositionIndependent; }
@@ -396,6 +400,7 @@
   void initELFMCObjectFileInfo(const Triple &T, bool Large);
   void initCOFFMCObjectFileInfo(const Triple &T);
   void initWasmMCObjectFileInfo(const Triple &T);
+  void initXCOFFMCObjectFileInfo(const Triple &T);
   MCSection *getDwarfComdatSection(const char *Name, uint64_t Hash) const;
 
 public:
diff --git a/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h b/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h
index c5683b7..849dbd5 100644
--- a/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h
+++ b/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h
@@ -16,6 +16,7 @@
 #include "llvm/MC/MCParser/MCParsedAsmOperand.h"
 #include "llvm/MC/MCParser/MCAsmParserExtension.h"
 #include "llvm/MC/MCTargetOptions.h"
+#include "llvm/MC/SubtargetFeature.h"
 #include "llvm/Support/SMLoc.h"
 #include <cstdint>
 #include <memory>
@@ -202,7 +203,7 @@
   // The instruction encoding is not valid because it requires some target
   // features that are not currently enabled. MissingFeatures has a bit set for
   // each feature that the encoding needs but which is not enabled.
-  static NearMissInfo getMissedFeature(uint64_t MissingFeatures) {
+  static NearMissInfo getMissedFeature(const FeatureBitset &MissingFeatures) {
     NearMissInfo Result;
     Result.Kind = NearMissFeature;
     Result.Features = MissingFeatures;
@@ -254,7 +255,7 @@
 
   // Feature flags required by the instruction, that the current target does
   // not have.
-  uint64_t getFeatures() const {
+  const FeatureBitset& getFeatures() const {
     assert(Kind == NearMissFeature);
     return Features;
   }
@@ -304,7 +305,7 @@
   };
 
   union {
-    uint64_t Features;
+    FeatureBitset Features;
     unsigned PredicateError;
     MissedOpInfo MissedOperand;
     TooFewOperandsInfo TooFewOperands;
@@ -334,7 +335,7 @@
   MCSubtargetInfo &copySTI();
 
   /// AvailableFeatures - The current set of available features.
-  uint64_t AvailableFeatures = 0;
+  FeatureBitset AvailableFeatures;
 
   /// ParsingInlineAsm - Are we parsing ms-style inline assembly?
   bool ParsingInlineAsm = false;
@@ -359,8 +360,12 @@
 
   const MCSubtargetInfo &getSTI() const;
 
-  uint64_t getAvailableFeatures() const { return AvailableFeatures; }
-  void setAvailableFeatures(uint64_t Value) { AvailableFeatures = Value; }
+  const FeatureBitset& getAvailableFeatures() const {
+    return AvailableFeatures;
+  }
+  void setAvailableFeatures(const FeatureBitset& Value) {
+    AvailableFeatures = Value;
+  }
 
   bool isParsingInlineAsm () { return ParsingInlineAsm; }
   void setParsingInlineAsm (bool Value) { ParsingInlineAsm = Value; }
@@ -379,9 +384,6 @@
   virtual bool ParseRegister(unsigned &RegNo, SMLoc &StartLoc,
                              SMLoc &EndLoc) = 0;
 
-  /// Sets frame register corresponding to the current MachineFunction.
-  virtual void SetFrameRegister(unsigned RegNo) {}
-
   /// ParseInstruction - Parse one assembly instruction.
   ///
   /// The parser is positioned following the instruction name. The target
diff --git a/linux-x64/clang/include/llvm/MC/MCSection.h b/linux-x64/clang/include/llvm/MC/MCSection.h
index 27490dc..6fad1ec 100644
--- a/linux-x64/clang/include/llvm/MC/MCSection.h
+++ b/linux-x64/clang/include/llvm/MC/MCSection.h
@@ -37,7 +37,7 @@
 /// current translation unit.  The MCContext class uniques and creates these.
 class MCSection {
 public:
-  enum SectionVariant { SV_COFF = 0, SV_ELF, SV_MachO, SV_Wasm };
+  enum SectionVariant { SV_COFF = 0, SV_ELF, SV_MachO, SV_Wasm, SV_XCOFF };
 
   /// Express the state of bundle locked groups while emitting code.
   enum BundleLockStateType {
diff --git a/linux-x64/clang/include/llvm/MC/MCSectionWasm.h b/linux-x64/clang/include/llvm/MC/MCSectionWasm.h
index 0e576b7..1adc812 100644
--- a/linux-x64/clang/include/llvm/MC/MCSectionWasm.h
+++ b/linux-x64/clang/include/llvm/MC/MCSectionWasm.h
@@ -42,6 +42,9 @@
   // segment
   uint32_t SegmentIndex = 0;
 
+  // Whether this data segment is passive
+  bool IsPassive = false;
+
   friend class MCContext;
   MCSectionWasm(StringRef Section, SectionKind K, const MCSymbolWasm *group,
                 unsigned UniqueID, MCSymbol *Begin)
@@ -75,6 +78,14 @@
   uint32_t getSegmentIndex() const { return SegmentIndex; }
   void setSegmentIndex(uint32_t Index) { SegmentIndex = Index; }
 
+  bool getPassive() const {
+    assert(isWasmData());
+    return IsPassive;
+  }
+  void setPassive(bool V = true) {
+    assert(isWasmData());
+    IsPassive = V;
+  }
   static bool classof(const MCSection *S) { return S->getVariant() == SV_Wasm; }
 };
 
diff --git a/linux-x64/clang/include/llvm/MC/MCSectionXCOFF.h b/linux-x64/clang/include/llvm/MC/MCSectionXCOFF.h
new file mode 100644
index 0000000..2a3f391
--- /dev/null
+++ b/linux-x64/clang/include/llvm/MC/MCSectionXCOFF.h
@@ -0,0 +1,56 @@
+//===- MCSectionXCOFF.h - XCOFF Machine Code Sections -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the MCSectionXCOFF class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_MCSECTIONXCOFF_H
+#define LLVM_MC_MCSECTIONXCOFF_H
+
+#include "llvm/ADT/Twine.h"
+#include "llvm/BinaryFormat/XCOFF.h"
+#include "llvm/MC/MCSection.h"
+
+namespace llvm {
+
+class MCSymbol;
+
+// This class represents an XCOFF `Control Section`, more commonly referred to
+// as a csect. A csect represents the smallest possible unit of data/code which
+// will be relocated as a single block.
+class MCSectionXCOFF final : public MCSection {
+  friend class MCContext;
+
+  StringRef Name;
+  XCOFF::StorageMappingClass MappingClass;
+
+  MCSectionXCOFF(StringRef Section, XCOFF::StorageMappingClass SMC,
+                 SectionKind K, MCSymbol *Begin)
+      : MCSection(SV_XCOFF, K, Begin), Name(Section), MappingClass(SMC) {}
+
+public:
+  ~MCSectionXCOFF();
+
+  static bool classof(const MCSection *S) {
+    return S->getVariant() == SV_XCOFF;
+  }
+
+  StringRef getSectionName() const { return Name; }
+  XCOFF::StorageMappingClass getMappingClass() const { return MappingClass; }
+
+  void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
+                            raw_ostream &OS,
+                            const MCExpr *Subsection) const override;
+  bool UseCodeAlign() const override;
+  bool isVirtualSection() const override;
+};
+
+} // end namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/MC/MCStreamer.h b/linux-x64/clang/include/llvm/MC/MCStreamer.h
index dc2386f..67284fb 100644
--- a/linux-x64/clang/include/llvm/MC/MCStreamer.h
+++ b/linux-x64/clang/include/llvm/MC/MCStreamer.h
@@ -19,7 +19,6 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/MC/MCDirectives.h"
-#include "llvm/MC/MCDwarf.h"
 #include "llvm/MC/MCLinkerOptimizationHint.h"
 #include "llvm/MC/MCSymbol.h"
 #include "llvm/MC/MCWinEH.h"
@@ -43,6 +42,7 @@
 class MCCodeEmitter;
 struct MCCodePaddingContext;
 class MCContext;
+struct MCDwarfFrameInfo;
 class MCExpr;
 class MCInst;
 class MCInstPrinter;
@@ -266,10 +266,8 @@
   /// closed. Otherwise, issue an error and return null.
   WinEH::FrameInfo *EnsureValidWinFrameInfo(SMLoc Loc);
 
-  unsigned getNumFrameInfos() { return DwarfFrameInfos.size(); }
-  ArrayRef<MCDwarfFrameInfo> getDwarfFrameInfos() const {
-    return DwarfFrameInfos;
-  }
+  unsigned getNumFrameInfos();
+  ArrayRef<MCDwarfFrameInfo> getDwarfFrameInfos() const;
 
   bool hasUnfinishedDwarfFrameInfo();
 
@@ -634,7 +632,7 @@
 
   /// Special case of EmitULEB128Value that avoids the client having to
   /// pass in a MCExpr for constant integers.
-  void EmitULEB128IntValue(uint64_t Value);
+  void EmitULEB128IntValue(uint64_t Value, unsigned PadTo = 0);
 
   /// Special case of EmitSLEB128Value that avoids the client having to
   /// pass in a MCExpr for constant integers.
@@ -781,7 +779,7 @@
   /// implements the DWARF2 '.file 4 "foo.c"' assembler directive.
   unsigned EmitDwarfFileDirective(unsigned FileNo, StringRef Directory,
                                   StringRef Filename,
-                                  MD5::MD5Result *Checksum = nullptr,
+                                  Optional<MD5::MD5Result> Checksum = None,
                                   Optional<StringRef> Source = None,
                                   unsigned CUID = 0) {
     return cantFail(
@@ -796,12 +794,12 @@
   /// '.file 4 "dir/foo.c" md5 "..." source "..."' assembler directive.
   virtual Expected<unsigned> tryEmitDwarfFileDirective(
       unsigned FileNo, StringRef Directory, StringRef Filename,
-      MD5::MD5Result *Checksum = nullptr, Optional<StringRef> Source = None,
+      Optional<MD5::MD5Result> Checksum = None, Optional<StringRef> Source = None,
       unsigned CUID = 0);
 
   /// Specify the "root" file of the compilation, using the ".file 0" extension.
   virtual void emitDwarfFile0Directive(StringRef Directory, StringRef Filename,
-                                       MD5::MD5Result *Checksum,
+                                       Optional<MD5::MD5Result> Checksum,
                                        Optional<StringRef> Source,
                                        unsigned CUID = 0);
 
diff --git a/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h b/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h
index c7472a2..9490a6e 100644
--- a/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h
@@ -29,6 +29,45 @@
 class MCInst;
 
 //===----------------------------------------------------------------------===//
+
+/// Used to provide key value pairs for feature and CPU bit flags.
+struct SubtargetFeatureKV {
+  const char *Key;                      ///< K-V key string
+  const char *Desc;                     ///< Help descriptor
+  unsigned Value;                       ///< K-V integer value
+  FeatureBitArray Implies;              ///< K-V bit mask
+
+  /// Compare routine for std::lower_bound
+  bool operator<(StringRef S) const {
+    return StringRef(Key) < S;
+  }
+
+  /// Compare routine for std::is_sorted.
+  bool operator<(const SubtargetFeatureKV &Other) const {
+    return StringRef(Key) < StringRef(Other.Key);
+  }
+};
+
+//===----------------------------------------------------------------------===//
+
+/// Used to provide key value pairs for feature and CPU bit flags.
+struct SubtargetSubTypeKV {
+  const char *Key;                      ///< K-V key string
+  FeatureBitArray Implies;              ///< K-V bit mask
+  const MCSchedModel *SchedModel;
+
+  /// Compare routine for std::lower_bound
+  bool operator<(StringRef S) const {
+    return StringRef(Key) < S;
+  }
+
+  /// Compare routine for std::is_sorted.
+  bool operator<(const SubtargetSubTypeKV &Other) const {
+    return StringRef(Key) < StringRef(Other.Key);
+  }
+};
+
+//===----------------------------------------------------------------------===//
 ///
 /// Generic base class for all target subtargets.
 ///
@@ -36,10 +75,9 @@
   Triple TargetTriple;
   std::string CPU; // CPU being targeted.
   ArrayRef<SubtargetFeatureKV> ProcFeatures;  // Processor feature list
-  ArrayRef<SubtargetFeatureKV> ProcDesc;  // Processor descriptions
+  ArrayRef<SubtargetSubTypeKV> ProcDesc;  // Processor descriptions
 
   // Scheduler machine model
-  const SubtargetInfoKV *ProcSchedModels;
   const MCWriteProcResEntry *WriteProcResTable;
   const MCWriteLatencyEntry *WriteLatencyTable;
   const MCReadAdvanceEntry *ReadAdvanceTable;
@@ -54,8 +92,7 @@
   MCSubtargetInfo(const MCSubtargetInfo &) = default;
   MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS,
                   ArrayRef<SubtargetFeatureKV> PF,
-                  ArrayRef<SubtargetFeatureKV> PD,
-                  const SubtargetInfoKV *ProcSched,
+                  ArrayRef<SubtargetSubTypeKV> PD,
                   const MCWriteProcResEntry *WPR, const MCWriteLatencyEntry *WL,
                   const MCReadAdvanceEntry *RA, const InstrStage *IS,
                   const unsigned *OC, const unsigned *FP);
@@ -104,6 +141,10 @@
   /// all feature bits implied by the flag.
   FeatureBitset ApplyFeatureFlag(StringRef FS);
 
+  /// Set/clear additional feature bits, including all other bits they imply.
+  FeatureBitset SetFeatureBitsTransitively(const FeatureBitset& FB);
+  FeatureBitset ClearFeatureBitsTransitively(const FeatureBitset &FB);
+
   /// Check whether the subtarget features are enabled/disabled as per
   /// the provided string, ignoring all other features.
   bool checkFeatures(StringRef FS) const;
diff --git a/linux-x64/clang/include/llvm/MC/MCSymbol.h b/linux-x64/clang/include/llvm/MC/MCSymbol.h
index 273e5a3..189484d 100644
--- a/linux-x64/clang/include/llvm/MC/MCSymbol.h
+++ b/linux-x64/clang/include/llvm/MC/MCSymbol.h
@@ -48,6 +48,7 @@
     SymbolKindELF,
     SymbolKindMachO,
     SymbolKindWasm,
+    SymbolKindXCOFF,
   };
 
   /// A symbol can contain an Offset, or Value, or be Common, but never more
@@ -57,6 +58,7 @@
     SymContentsOffset,
     SymContentsVariable,
     SymContentsCommon,
+    SymContentsTargetCommon, // Index stores the section index
   };
 
   // Special sentinal value for the absolute pseudo fragment.
@@ -107,7 +109,7 @@
 
   /// This is actually a Contents enumerator, but is unsigned to avoid sign
   /// extension and achieve better bitpacking with MSVC.
-  unsigned SymbolContents : 2;
+  unsigned SymbolContents : 3;
 
   /// The alignment of the symbol, if it is 'common', or -1.
   ///
@@ -285,6 +287,8 @@
 
   bool isWasm() const { return Kind == SymbolKindWasm; }
 
+  bool isXCOFF() const { return Kind == SymbolKindXCOFF; }
+
   /// @}
   /// \name Variable Symbols
   /// @{
@@ -341,10 +345,11 @@
   ///
   /// \param Size - The size of the symbol.
   /// \param Align - The alignment of the symbol.
-  void setCommon(uint64_t Size, unsigned Align) {
+  /// \param Target - Is the symbol a target-specific common-like symbol.
+  void setCommon(uint64_t Size, unsigned Align, bool Target = false) {
     assert(getOffset() == 0);
     CommonSize = Size;
-    SymbolContents = SymContentsCommon;
+    SymbolContents = Target ? SymContentsTargetCommon : SymContentsCommon;
 
     assert((!Align || isPowerOf2_32(Align)) &&
            "Alignment must be a power of 2");
@@ -364,20 +369,28 @@
   ///
   /// \param Size - The size of the symbol.
   /// \param Align - The alignment of the symbol.
+  /// \param Target - Is the symbol a target-specific common-like symbol.
   /// \return True if symbol was already declared as a different type
-  bool declareCommon(uint64_t Size, unsigned Align) {
+  bool declareCommon(uint64_t Size, unsigned Align, bool Target = false) {
     assert(isCommon() || getOffset() == 0);
     if(isCommon()) {
-      if(CommonSize != Size || getCommonAlignment() != Align)
-       return true;
+      if (CommonSize != Size || getCommonAlignment() != Align ||
+          isTargetCommon() != Target)
+        return true;
     } else
-      setCommon(Size, Align);
+      setCommon(Size, Align, Target);
     return false;
   }
 
   /// Is this a 'common' symbol.
   bool isCommon() const {
-    return SymbolContents == SymContentsCommon;
+    return SymbolContents == SymContentsCommon ||
+           SymbolContents == SymContentsTargetCommon;
+  }
+
+  /// Is this a target-specific common-like symbol.
+  bool isTargetCommon() const {
+    return SymbolContents == SymContentsTargetCommon;
   }
 
   MCFragment *getFragment(bool SetUsed = true) const {
diff --git a/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h b/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h
index 88759fe..c50cd0e 100644
--- a/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h
+++ b/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h
@@ -18,6 +18,7 @@
   bool IsWeak = false;
   bool IsHidden = false;
   bool IsComdat = false;
+  mutable bool IsUsedInGOT = false;
   Optional<std::string> ImportModule;
   Optional<std::string> ImportName;
   wasm::WasmSignature *Signature = nullptr;
@@ -78,6 +79,9 @@
   }
   void setImportName(StringRef Name) { ImportName = Name; }
 
+  void setUsedInGOT() const { IsUsedInGOT = true; }
+  bool isUsedInGOT() const { return IsUsedInGOT; }
+
   const wasm::WasmSignature *getSignature() const { return Signature; }
   void setSignature(wasm::WasmSignature *Sig) { Signature = Sig; }
 
diff --git a/linux-x64/clang/include/llvm/MC/MCSymbolXCOFF.h b/linux-x64/clang/include/llvm/MC/MCSymbolXCOFF.h
new file mode 100644
index 0000000..30cbf0b
--- /dev/null
+++ b/linux-x64/clang/include/llvm/MC/MCSymbolXCOFF.h
@@ -0,0 +1,36 @@
+//===- MCSymbolXCOFF.h -  ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_MC_MCSYMBOLXCOFF_H
+#define LLVM_MC_MCSYMBOLXCOFF_H
+
+#include "llvm/BinaryFormat/XCOFF.h"
+#include "llvm/MC/MCSymbol.h"
+
+namespace llvm {
+
+class GlobalValue;
+
+class MCSymbolXCOFF : public MCSymbol {
+  // The IR symbol this MCSymbolXCOFF is based on. It is set on function
+  // entry point symbols when they are the callee operand of a direct call
+  // SDNode.
+  const GlobalValue *GV = nullptr;
+
+public:
+  MCSymbolXCOFF(const StringMapEntry<bool> *Name, bool isTemporary)
+      : MCSymbol(SymbolKindXCOFF, Name, isTemporary) {}
+
+  void setGlobalValue(const GlobalValue *G) { GV = G; }
+  const GlobalValue *getGlobalValue() const { return GV; }
+
+  static bool classof(const MCSymbol *S) { return S->isXCOFF(); }
+};
+
+} // end namespace llvm
+
+#endif // LLVM_MC_MCSYMBOLXCOFF_H
diff --git a/linux-x64/clang/include/llvm/MC/MCTargetOptions.h b/linux-x64/clang/include/llvm/MC/MCTargetOptions.h
index 087d155..f184620 100644
--- a/linux-x64/clang/include/llvm/MC/MCTargetOptions.h
+++ b/linux-x64/clang/include/llvm/MC/MCTargetOptions.h
@@ -15,18 +15,18 @@
 namespace llvm {
 
 enum class ExceptionHandling {
-  None,     /// No exception support
-  DwarfCFI, /// DWARF-like instruction based exceptions
-  SjLj,     /// setjmp/longjmp based exceptions
-  ARM,      /// ARM EHABI
-  WinEH,    /// Windows Exception Handling
-  Wasm,     /// WebAssembly Exception Handling
+  None,     ///< No exception support
+  DwarfCFI, ///< DWARF-like instruction based exceptions
+  SjLj,     ///< setjmp/longjmp based exceptions
+  ARM,      ///< ARM EHABI
+  WinEH,    ///< Windows Exception Handling
+  Wasm,     ///< WebAssembly Exception Handling
 };
 
 enum class DebugCompressionType {
-  None, /// No compression
-  GNU,  /// zlib-gnu style compression
-  Z,    /// zlib style complession
+  None, ///< No compression
+  GNU,  ///< zlib-gnu style compression
+  Z,    ///< zlib style complession
 };
 
 class StringRef;
@@ -38,9 +38,6 @@
     AsmInstrumentationAddress
   };
 
-  /// Enables AddressSanitizer instrumentation at machine level.
-  bool SanitizeAddress : 1;
-
   bool MCRelaxAll : 1;
   bool MCNoExecStack : 1;
   bool MCFatalWarnings : 1;
diff --git a/linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.inc b/linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.inc
index f812946..9f1177f 100644
--- a/linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.inc
+++ b/linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.inc
@@ -18,15 +18,6 @@
 #include "llvm/Support/CommandLine.h"
 using namespace llvm;
 
-static cl::opt<MCTargetOptions::AsmInstrumentation> AsmInstrumentation(
-    "asm-instrumentation", cl::desc("Instrumentation of inline assembly and "
-                                    "assembly source files"),
-    cl::init(MCTargetOptions::AsmInstrumentationNone),
-    cl::values(clEnumValN(MCTargetOptions::AsmInstrumentationNone, "none",
-                          "no instrumentation at all"),
-               clEnumValN(MCTargetOptions::AsmInstrumentationAddress, "address",
-                          "instrument instructions with memory arguments")));
-
 static cl::opt<bool> RelaxAll("mc-relax-all",
                        cl::desc("When used with filetype=obj, "
                                 "relax all fixups in the emitted object file"));
@@ -62,8 +53,6 @@
 
 static MCTargetOptions InitMCTargetOptionsFromFlags() {
   MCTargetOptions Options;
-  Options.SanitizeAddress =
-      (AsmInstrumentation == MCTargetOptions::AsmInstrumentationAddress);
   Options.MCRelaxAll = RelaxAll;
   Options.MCIncrementalLinkerCompatible = IncrementalLinkerCompatible;
   Options.MCPIECopyRelocations = PIECopyRelocations;
diff --git a/linux-x64/clang/include/llvm/MC/MCXCOFFObjectWriter.h b/linux-x64/clang/include/llvm/MC/MCXCOFFObjectWriter.h
new file mode 100644
index 0000000..fe4087f
--- /dev/null
+++ b/linux-x64/clang/include/llvm/MC/MCXCOFFObjectWriter.h
@@ -0,0 +1,41 @@
+//===-- llvm/MC/MCXCOFFObjectWriter.h - XCOFF Object Writer ---------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_MCXCOFFOBJECTWRITER_H
+#define LLVM_MC_MCXCOFFOBJECTWRITER_H
+
+#include "llvm/MC/MCObjectWriter.h"
+
+namespace llvm {
+
+class raw_pwrite_stream;
+
+class MCXCOFFObjectTargetWriter : public MCObjectTargetWriter {
+protected:
+  MCXCOFFObjectTargetWriter(bool Is64Bit);
+
+public:
+  ~MCXCOFFObjectTargetWriter() override;
+
+  Triple::ObjectFormatType getFormat() const override { return Triple::XCOFF; }
+  static bool classof(const MCObjectTargetWriter *W) {
+    return W->getFormat() == Triple::XCOFF;
+  }
+  bool is64Bit() const { return Is64Bit; }
+
+private:
+  bool Is64Bit;
+};
+
+std::unique_ptr<MCObjectWriter>
+createXCOFFObjectWriter(std::unique_ptr<MCXCOFFObjectTargetWriter> MOTW,
+                        raw_pwrite_stream &OS);
+
+} // end namespace llvm
+
+#endif // LLVM_MC_MCXCOFFOBJECTWRITER_H
diff --git a/linux-x64/clang/include/llvm/MC/MCXCOFFStreamer.h b/linux-x64/clang/include/llvm/MC/MCXCOFFStreamer.h
new file mode 100644
index 0000000..159ae48
--- /dev/null
+++ b/linux-x64/clang/include/llvm/MC/MCXCOFFStreamer.h
@@ -0,0 +1,33 @@
+//===- MCXCOFFObjectStreamer.h - MCStreamer XCOFF Object File Interface ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_MCXCOFFSTREAMER_H
+#define LLVM_MC_MCXCOFFSTREAMER_H
+
+#include "llvm/MC/MCObjectStreamer.h"
+
+namespace llvm {
+
+class MCXCOFFStreamer : public MCObjectStreamer {
+public:
+  MCXCOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
+                  std::unique_ptr<MCObjectWriter> OW,
+                  std::unique_ptr<MCCodeEmitter> Emitter);
+
+  bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
+  void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
+                        unsigned ByteAlignment) override;
+  void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
+                    uint64_t Size = 0, unsigned ByteAlignment = 0,
+                    SMLoc Loc = SMLoc()) override;
+  void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override;
+};
+
+} // end namespace llvm
+
+#endif // LLVM_MC_MCXCOFFSTREAMER_H
diff --git a/linux-x64/clang/include/llvm/MC/SubtargetFeature.h b/linux-x64/clang/include/llvm/MC/SubtargetFeature.h
index 5f49d38..fc9565c 100644
--- a/linux-x64/clang/include/llvm/MC/SubtargetFeature.h
+++ b/linux-x64/clang/include/llvm/MC/SubtargetFeature.h
@@ -18,6 +18,7 @@
 #define LLVM_MC_SUBTARGETFEATURE_H
 
 #include "llvm/ADT/StringRef.h"
+#include <array>
 #include <bitset>
 #include <initializer_list>
 #include <string>
@@ -25,11 +26,12 @@
 
 namespace llvm {
 
-template <typename T> class ArrayRef;
 class raw_ostream;
 class Triple;
 
-const unsigned MAX_SUBTARGET_FEATURES = 192;
+const unsigned MAX_SUBTARGET_WORDS = 3;
+const unsigned MAX_SUBTARGET_FEATURES = MAX_SUBTARGET_WORDS * 64;
+
 /// Container class for subtarget features.
 /// This is convenient because std::bitset does not have a constructor
 /// with an initializer list of set bits.
@@ -44,38 +46,34 @@
     for (auto I : Init)
       set(I);
   }
-};
 
-//===----------------------------------------------------------------------===//
-
-/// Used to provide key value pairs for feature and CPU bit flags.
-struct SubtargetFeatureKV {
-  const char *Key;                      ///< K-V key string
-  const char *Desc;                     ///< Help descriptor
-  FeatureBitset Value;                  ///< K-V integer value
-  FeatureBitset Implies;                ///< K-V bit mask
-
-  /// Compare routine for std::lower_bound
-  bool operator<(StringRef S) const {
-    return StringRef(Key) < S;
-  }
-
-  /// Compare routine for std::is_sorted.
-  bool operator<(const SubtargetFeatureKV &Other) const {
-    return StringRef(Key) < StringRef(Other.Key);
+  bool operator < (const FeatureBitset &Other) const {
+    for (unsigned I = 0, E = size(); I != E; ++I) {
+      bool LHS = test(I), RHS = Other.test(I);
+      if (LHS != RHS)
+        return LHS < RHS;
+    }
+    return false;
   }
 };
 
-//===----------------------------------------------------------------------===//
+/// Class used to store the subtarget bits in the tables created by tablegen.
+/// The std::initializer_list constructor of FeatureBitset can't be done at
+/// compile time and requires a static constructor to run at startup.
+class FeatureBitArray {
+  std::array<uint64_t, MAX_SUBTARGET_WORDS> Bits;
 
-/// Used to provide key value pairs for CPU and arbitrary pointers.
-struct SubtargetInfoKV {
-  const char *Key;                      ///< K-V key string
-  const void *Value;                    ///< K-V pointer value
+public:
+  constexpr FeatureBitArray(const std::array<uint64_t, MAX_SUBTARGET_WORDS> &B)
+      : Bits(B) {}
 
-  /// Compare routine for std::lower_bound
-  bool operator<(StringRef S) const {
-    return StringRef(Key) < S;
+  FeatureBitset getAsBitset() const {
+    FeatureBitset Result;
+
+    for (unsigned i = 0, e = Bits.size(); i != e; ++i)
+      Result |= FeatureBitset(Bits[i]) << (64 * i);
+
+    return Result;
   }
 };
 
@@ -101,19 +99,6 @@
   /// Adds Features.
   void AddFeature(StringRef String, bool Enable = true);
 
-  /// Toggles a feature and update the feature bits.
-  static void ToggleFeature(FeatureBitset &Bits, StringRef String,
-                            ArrayRef<SubtargetFeatureKV> FeatureTable);
-
-  /// Applies the feature flag and update the feature bits.
-  static void ApplyFeatureFlag(FeatureBitset &Bits, StringRef Feature,
-                               ArrayRef<SubtargetFeatureKV> FeatureTable);
-
-  /// Returns feature bits of a CPU.
-  FeatureBitset getFeatureBits(StringRef CPU,
-                               ArrayRef<SubtargetFeatureKV> CPUTable,
-                               ArrayRef<SubtargetFeatureKV> FeatureTable);
-
   /// Returns the vector of individual subtarget features.
   const std::vector<std::string> &getFeatures() const { return Features; }
 
@@ -125,6 +110,32 @@
 
   /// Adds the default features for the specified target triple.
   void getDefaultSubtargetFeatures(const Triple& Triple);
+
+  /// Determine if a feature has a flag; '+' or '-'
+  static bool hasFlag(StringRef Feature) {
+    assert(!Feature.empty() && "Empty string");
+    // Get first character
+    char Ch = Feature[0];
+    // Check if first character is '+' or '-' flag
+    return Ch == '+' || Ch =='-';
+  }
+
+  /// Return string stripped of flag.
+  static std::string StripFlag(StringRef Feature) {
+    return hasFlag(Feature) ? Feature.substr(1) : Feature;
+  }
+
+  /// Return true if enable flag; '+'.
+  static inline bool isEnabled(StringRef Feature) {
+    assert(!Feature.empty() && "Empty string");
+    // Get first character
+    char Ch = Feature[0];
+    // Check if first character is '+' for enabled
+    return Ch == '+';
+  }
+
+  /// Splits a string of comma separated items in to a vector of strings.
+  static void Split(std::vector<std::string> &V, StringRef S);
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/MCA/Context.h b/linux-x64/clang/include/llvm/MCA/Context.h
index a9f3e05..503d780 100644
--- a/linux-x64/clang/include/llvm/MCA/Context.h
+++ b/linux-x64/clang/include/llvm/MCA/Context.h
@@ -31,15 +31,21 @@
 /// This is a convenience struct to hold the parameters necessary for creating
 /// the pre-built "default" out-of-order pipeline.
 struct PipelineOptions {
-  PipelineOptions(unsigned DW, unsigned RFS, unsigned LQS, unsigned SQS,
-                  bool NoAlias)
-      : DispatchWidth(DW), RegisterFileSize(RFS), LoadQueueSize(LQS),
-        StoreQueueSize(SQS), AssumeNoAlias(NoAlias) {}
+  PipelineOptions(unsigned UOPQSize, unsigned DecThr, unsigned DW, unsigned RFS,
+                  unsigned LQS, unsigned SQS, bool NoAlias,
+                  bool ShouldEnableBottleneckAnalysis = false)
+      : MicroOpQueueSize(UOPQSize), DecodersThroughput(DecThr),
+        DispatchWidth(DW), RegisterFileSize(RFS), LoadQueueSize(LQS),
+        StoreQueueSize(SQS), AssumeNoAlias(NoAlias),
+        EnableBottleneckAnalysis(ShouldEnableBottleneckAnalysis) {}
+  unsigned MicroOpQueueSize;
+  unsigned DecodersThroughput; // Instructions per cycle.
   unsigned DispatchWidth;
   unsigned RegisterFileSize;
   unsigned LoadQueueSize;
   unsigned StoreQueueSize;
   bool AssumeNoAlias;
+  bool EnableBottleneckAnalysis;
 };
 
 class Context {
diff --git a/linux-x64/clang/include/llvm/MCA/HWEventListener.h b/linux-x64/clang/include/llvm/MCA/HWEventListener.h
index 1857ad2..e11d06d 100644
--- a/linux-x64/clang/include/llvm/MCA/HWEventListener.h
+++ b/linux-x64/clang/include/llvm/MCA/HWEventListener.h
@@ -39,6 +39,7 @@
     // Events generated by the Retire Control Unit.
     Retired,
     // Events generated by the Scheduler.
+    Pending,
     Ready,
     Issued,
     Executed,
@@ -125,6 +126,35 @@
   const InstRef &IR;
 };
 
+// A HWPressureEvent describes an increase in backend pressure caused by
+// the presence of data dependencies or unavailability of pipeline resources.
+class HWPressureEvent {
+public:
+  enum GenericReason {
+    INVALID = 0,
+    // Scheduler was unable to issue all the ready instructions because some
+    // pipeline resources were unavailable.
+    RESOURCES,
+    // Instructions could not be issued because of register data dependencies.
+    REGISTER_DEPS,
+    // Instructions could not be issued because of memory dependencies.
+    MEMORY_DEPS
+  };
+
+  HWPressureEvent(GenericReason reason, ArrayRef<InstRef> Insts,
+                  uint64_t Mask = 0)
+      : Reason(reason), AffectedInstructions(Insts), ResourceMask(Mask) {}
+
+  // Reason for this increase in backend pressure.
+  GenericReason Reason;
+
+  // Instructions affected (i.e. delayed) by this increase in backend pressure.
+  ArrayRef<InstRef> AffectedInstructions;
+
+  // A mask of unavailable processor resources.
+  const uint64_t ResourceMask;
+};
+
 class HWEventListener {
 public:
   // Generic events generated by the pipeline.
@@ -133,6 +163,7 @@
 
   virtual void onEvent(const HWInstructionEvent &Event) {}
   virtual void onEvent(const HWStallEvent &Event) {}
+  virtual void onEvent(const HWPressureEvent &Event) {}
 
   using ResourceRef = std::pair<uint64_t, uint64_t>;
   virtual void onResourceAvailable(const ResourceRef &RRef) {}
diff --git a/linux-x64/clang/include/llvm/MCA/HardwareUnits/LSUnit.h b/linux-x64/clang/include/llvm/MCA/HardwareUnits/LSUnit.h
index b8a9f27..ae9a49c 100644
--- a/linux-x64/clang/include/llvm/MCA/HardwareUnits/LSUnit.h
+++ b/linux-x64/clang/include/llvm/MCA/HardwareUnits/LSUnit.h
@@ -15,21 +15,298 @@
 #ifndef LLVM_MCA_LSUNIT_H
 #define LLVM_MCA_LSUNIT_H
 
-#include "llvm/ADT/SmallSet.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
 #include "llvm/MC/MCSchedule.h"
 #include "llvm/MCA/HardwareUnits/HardwareUnit.h"
+#include "llvm/MCA/Instruction.h"
 
 namespace llvm {
 namespace mca {
 
-class InstRef;
 class Scheduler;
 
-/// A Load/Store Unit implementing a load and store queues.
+/// A node of a memory dependency graph. A MemoryGroup describes a set of
+/// instructions with same memory dependencies.
 ///
-/// This class implements a load queue and a store queue to emulate the
-/// out-of-order execution of memory operations.
-/// Each load (or store) consumes an entry in the load (or store) queue.
+/// By construction, instructions of a MemoryGroup don't depend on each other.
+/// At dispatch stage, instructions are mapped by the LSUnit to MemoryGroups.
+/// A Memory group identifier is then stored as a "token" in field
+/// Instruction::LSUTokenID of each dispatched instructions. That token is used
+/// internally by the LSUnit to track memory dependencies.
+class MemoryGroup {
+  unsigned NumPredecessors;
+  unsigned NumExecutingPredecessors;
+  unsigned NumExecutedPredecessors;
+
+  unsigned NumInstructions;
+  unsigned NumExecuting;
+  unsigned NumExecuted;
+  SmallVector<MemoryGroup *, 4> Succ;
+
+  CriticalDependency CriticalPredecessor;
+  InstRef CriticalMemoryInstruction;
+
+  MemoryGroup(const MemoryGroup &) = delete;
+  MemoryGroup &operator=(const MemoryGroup &) = delete;
+
+public:
+  MemoryGroup()
+      : NumPredecessors(0), NumExecutingPredecessors(0),
+        NumExecutedPredecessors(0), NumInstructions(0), NumExecuting(0),
+        NumExecuted(0), CriticalPredecessor(), CriticalMemoryInstruction() {}
+  MemoryGroup(MemoryGroup &&) = default;
+
+  ArrayRef<MemoryGroup *> getSuccessors() const { return Succ; }
+  unsigned getNumSuccessors() const { return Succ.size(); }
+  unsigned getNumPredecessors() const { return NumPredecessors; }
+  unsigned getNumExecutingPredecessors() const {
+    return NumExecutingPredecessors;
+  }
+  unsigned getNumExecutedPredecessors() const {
+    return NumExecutedPredecessors;
+  }
+  unsigned getNumInstructions() const { return NumInstructions; }
+  unsigned getNumExecuting() const { return NumExecuting; }
+  unsigned getNumExecuted() const { return NumExecuted; }
+
+  const InstRef &getCriticalMemoryInstruction() const {
+    return CriticalMemoryInstruction;
+  }
+  const CriticalDependency &getCriticalPredecessor() const {
+    return CriticalPredecessor;
+  }
+
+  void addSuccessor(MemoryGroup *Group) {
+    Group->NumPredecessors++;
+    assert(!isExecuted() && "Should have been removed!");
+    if (isExecuting())
+      Group->onGroupIssued(CriticalMemoryInstruction);
+    Succ.emplace_back(Group);
+  }
+
+  bool isWaiting() const {
+    return NumPredecessors >
+           (NumExecutingPredecessors + NumExecutedPredecessors);
+  }
+  bool isPending() const {
+    return NumExecutingPredecessors &&
+           ((NumExecutedPredecessors + NumExecutingPredecessors) ==
+            NumPredecessors);
+  }
+  bool isReady() const { return NumExecutedPredecessors == NumPredecessors; }
+  bool isExecuting() const {
+    return NumExecuting && (NumExecuting == (NumInstructions - NumExecuted));
+  }
+  bool isExecuted() const { return NumInstructions == NumExecuted; }
+
+  void onGroupIssued(const InstRef &IR) {
+    assert(!isReady() && "Unexpected group-start event!");
+    NumExecutingPredecessors++;
+
+    unsigned Cycles = IR.getInstruction()->getCyclesLeft();
+    if (CriticalPredecessor.Cycles < Cycles) {
+      CriticalPredecessor.IID = IR.getSourceIndex();
+      CriticalPredecessor.Cycles = Cycles;
+    }
+  }
+
+  void onGroupExecuted() {
+    assert(!isReady() && "Inconsistent state found!");
+    NumExecutingPredecessors--;
+    NumExecutedPredecessors++;
+  }
+
+  void onInstructionIssued(const InstRef &IR) {
+    assert(!isExecuting() && "Invalid internal state!");
+    ++NumExecuting;
+
+    // update the CriticalMemDep.
+    const Instruction &IS = *IR.getInstruction();
+    if ((bool)CriticalMemoryInstruction) {
+      const Instruction &OtherIS = *CriticalMemoryInstruction.getInstruction();
+      if (OtherIS.getCyclesLeft() < IS.getCyclesLeft())
+        CriticalMemoryInstruction = IR;
+    } else {
+      CriticalMemoryInstruction = IR;
+    }
+
+    if (!isExecuting())
+      return;
+
+    // Notify successors that this group started execution.
+    for (MemoryGroup *MG : Succ)
+      MG->onGroupIssued(CriticalMemoryInstruction);
+  }
+
+  void onInstructionExecuted() {
+    assert(isReady() && !isExecuted() && "Invalid internal state!");
+    --NumExecuting;
+    ++NumExecuted;
+
+    if (!isExecuted())
+      return;
+
+    // Notify successors that this group has finished execution.
+    for (MemoryGroup *MG : Succ)
+      MG->onGroupExecuted();
+  }
+
+  void addInstruction() {
+    assert(!getNumSuccessors() && "Cannot add instructions to this group!");
+    ++NumInstructions;
+  }
+
+  void cycleEvent() {
+    if (isWaiting() && CriticalPredecessor.Cycles)
+      CriticalPredecessor.Cycles--;
+  }
+};
+
+/// Abstract base interface for LS (load/store) units in llvm-mca.
+class LSUnitBase : public HardwareUnit {
+  /// Load queue size.
+  ///
+  /// A value of zero for this field means that the load queue is unbounded.
+  /// Processor models can declare the size of a load queue via tablegen (see
+  /// the definition of tablegen class LoadQueue in
+  /// llvm/Target/TargetSchedule.td).
+  unsigned LQSize;
+
+  /// Load queue size.
+  ///
+  /// A value of zero for this field means that the store queue is unbounded.
+  /// Processor models can declare the size of a store queue via tablegen (see
+  /// the definition of tablegen class StoreQueue in
+  /// llvm/Target/TargetSchedule.td).
+  unsigned SQSize;
+
+  unsigned UsedLQEntries;
+  unsigned UsedSQEntries;
+
+  /// True if loads don't alias with stores.
+  ///
+  /// By default, the LS unit assumes that loads and stores don't alias with
+  /// eachother. If this field is set to false, then loads are always assumed to
+  /// alias with stores.
+  const bool NoAlias;
+
+  /// Used to map group identifiers to MemoryGroups.
+  DenseMap<unsigned, std::unique_ptr<MemoryGroup>> Groups;
+  unsigned NextGroupID;
+
+public:
+  LSUnitBase(const MCSchedModel &SM, unsigned LoadQueueSize,
+             unsigned StoreQueueSize, bool AssumeNoAlias);
+
+  virtual ~LSUnitBase();
+
+  /// Returns the total number of entries in the load queue.
+  unsigned getLoadQueueSize() const { return LQSize; }
+
+  /// Returns the total number of entries in the store queue.
+  unsigned getStoreQueueSize() const { return SQSize; }
+
+  unsigned getUsedLQEntries() const { return UsedLQEntries; }
+  unsigned getUsedSQEntries() const { return UsedSQEntries; }
+  unsigned assignLQSlot() { return UsedLQEntries++; }
+  unsigned assignSQSlot() { return UsedSQEntries++; }
+
+  bool assumeNoAlias() const { return NoAlias; }
+
+  enum Status {
+    LSU_AVAILABLE = 0,
+    LSU_LQUEUE_FULL, // Load Queue unavailable
+    LSU_SQUEUE_FULL  // Store Queue unavailable
+  };
+
+  /// This method checks the availability of the load/store buffers.
+  ///
+  /// Returns LSU_AVAILABLE if there are enough load/store queue entries to
+  /// accomodate instruction IR. By default, LSU_AVAILABLE is returned if IR is
+  /// not a memory operation.
+  virtual Status isAvailable(const InstRef &IR) const = 0;
+
+  /// Allocates LS resources for instruction IR.
+  ///
+  /// This method assumes that a previous call to `isAvailable(IR)` succeeded
+  /// with a LSUnitBase::Status value of LSU_AVAILABLE.
+  /// Returns the GroupID associated with this instruction. That value will be
+  /// used to set the LSUTokenID field in class Instruction.
+  virtual unsigned dispatch(const InstRef &IR) = 0;
+
+  bool isSQEmpty() const { return !UsedSQEntries; }
+  bool isLQEmpty() const { return !UsedLQEntries; }
+  bool isSQFull() const { return SQSize && SQSize == UsedSQEntries; }
+  bool isLQFull() const { return LQSize && LQSize == UsedLQEntries; }
+
+  bool isValidGroupID(unsigned Index) const {
+    return Index && (Groups.find(Index) != Groups.end());
+  }
+
+  /// Check if a peviously dispatched instruction IR is now ready for execution.
+  bool isReady(const InstRef &IR) const {
+    unsigned GroupID = IR.getInstruction()->getLSUTokenID();
+    const MemoryGroup &Group = getGroup(GroupID);
+    return Group.isReady();
+  }
+
+  /// Check if instruction IR only depends on memory instructions that are
+  /// currently executing.
+  bool isPending(const InstRef &IR) const {
+    unsigned GroupID = IR.getInstruction()->getLSUTokenID();
+    const MemoryGroup &Group = getGroup(GroupID);
+    return Group.isPending();
+  }
+
+  /// Check if instruction IR is still waiting on memory operations, and the
+  /// wait time is still unknown.
+  bool isWaiting(const InstRef &IR) const {
+    unsigned GroupID = IR.getInstruction()->getLSUTokenID();
+    const MemoryGroup &Group = getGroup(GroupID);
+    return Group.isWaiting();
+  }
+
+  bool hasDependentUsers(const InstRef &IR) const {
+    unsigned GroupID = IR.getInstruction()->getLSUTokenID();
+    const MemoryGroup &Group = getGroup(GroupID);
+    return !Group.isExecuted() && Group.getNumSuccessors();
+  }
+
+  const MemoryGroup &getGroup(unsigned Index) const {
+    assert(isValidGroupID(Index) && "Group doesn't exist!");
+    return *Groups.find(Index)->second;
+  }
+
+  MemoryGroup &getGroup(unsigned Index) {
+    assert(isValidGroupID(Index) && "Group doesn't exist!");
+    return *Groups.find(Index)->second;
+  }
+
+  unsigned createMemoryGroup() {
+    Groups.insert(
+        std::make_pair(NextGroupID, llvm::make_unique<MemoryGroup>()));
+    return NextGroupID++;
+  }
+
+  // Instruction executed event handlers.
+  virtual void onInstructionExecuted(const InstRef &IR);
+
+  virtual void onInstructionIssued(const InstRef &IR) {
+    unsigned GroupID = IR.getInstruction()->getLSUTokenID();
+    Groups[GroupID]->onInstructionIssued(IR);
+  }
+
+  virtual void cycleEvent();
+
+#ifndef NDEBUG
+  void dump() const;
+#endif
+};
+
+/// Default Load/Store Unit (LS Unit) for simulated processors.
+///
+/// Each load (or store) consumes one entry in the load (or store) queue.
 ///
 /// Rules are:
 /// 1) A younger load is allowed to pass an older load only if there are no
@@ -88,26 +365,7 @@
 /// A load/store barrier is "executed" when it becomes the oldest entry in
 /// the load/store queue(s). That also means, all the older loads/stores have
 /// already been executed.
-class LSUnit : public HardwareUnit {
-  // Load queue size.
-  // LQ_Size == 0 means that there are infinite slots in the load queue.
-  unsigned LQ_Size;
-
-  // Store queue size.
-  // SQ_Size == 0 means that there are infinite slots in the store queue.
-  unsigned SQ_Size;
-
-  // If true, loads will never alias with stores. This is the default.
-  bool NoAlias;
-
-  // When a `MayLoad` instruction is dispatched to the schedulers for execution,
-  // the LSUnit reserves an entry in the `LoadQueue` for it.
-  //
-  // LoadQueue keeps track of all the loads that are in-flight. A load
-  // instruction is eventually removed from the LoadQueue when it reaches
-  // completion stage. That means, a load leaves the queue whe it is 'executed',
-  // and its value can be forwarded on the data path to outside units.
-  //
+class LSUnit : public LSUnitBase {
   // This class doesn't know about the latency of a load instruction. So, it
   // conservatively/pessimistically assumes that the latency of a load opcode
   // matches the instruction latency.
@@ -138,66 +396,50 @@
   // alternative approaches that let instructions specify the number of
   // load/store queue entries which they consume at dispatch stage (See
   // PR39830).
-  SmallSet<unsigned, 16> LoadQueue;
-  SmallSet<unsigned, 16> StoreQueue;
-
-  void assignLQSlot(unsigned Index);
-  void assignSQSlot(unsigned Index);
-  bool isReadyNoAlias(unsigned Index) const;
-
+  //
   // An instruction that both 'mayStore' and 'HasUnmodeledSideEffects' is
   // conservatively treated as a store barrier. It forces older store to be
   // executed before newer stores are issued.
-  SmallSet<unsigned, 8> StoreBarriers;
-
+  //
   // An instruction that both 'MayLoad' and 'HasUnmodeledSideEffects' is
   // conservatively treated as a load barrier. It forces older loads to execute
   // before newer loads are issued.
-  SmallSet<unsigned, 8> LoadBarriers;
-
-  bool isSQEmpty() const { return StoreQueue.empty(); }
-  bool isLQEmpty() const { return LoadQueue.empty(); }
-  bool isSQFull() const { return SQ_Size != 0 && StoreQueue.size() == SQ_Size; }
-  bool isLQFull() const { return LQ_Size != 0 && LoadQueue.size() == LQ_Size; }
+  unsigned CurrentLoadGroupID;
+  unsigned CurrentLoadBarrierGroupID;
+  unsigned CurrentStoreGroupID;
 
 public:
-  LSUnit(const MCSchedModel &SM, unsigned LQ = 0, unsigned SQ = 0,
-         bool AssumeNoAlias = false);
+  LSUnit(const MCSchedModel &SM)
+      : LSUnit(SM, /* LQSize */ 0, /* SQSize */ 0, /* NoAlias */ false) {}
+  LSUnit(const MCSchedModel &SM, unsigned LQ, unsigned SQ)
+      : LSUnit(SM, LQ, SQ, /* NoAlias */ false) {}
+  LSUnit(const MCSchedModel &SM, unsigned LQ, unsigned SQ, bool AssumeNoAlias)
+      : LSUnitBase(SM, LQ, SQ, AssumeNoAlias), CurrentLoadGroupID(0),
+        CurrentLoadBarrierGroupID(0), CurrentStoreGroupID(0) {}
 
-#ifndef NDEBUG
-  void dump() const;
-#endif
+  /// Returns LSU_AVAILABLE if there are enough load/store queue entries to
+  /// accomodate instruction IR.
+  Status isAvailable(const InstRef &IR) const override;
 
-  enum Status { LSU_AVAILABLE = 0, LSU_LQUEUE_FULL, LSU_SQUEUE_FULL };
+  /// Allocates LS resources for instruction IR.
+  ///
+  /// This method assumes that a previous call to `isAvailable(IR)` succeeded
+  /// returning LSU_AVAILABLE.
+  ///
+  /// Rules are:
+  /// By default, rules are:
+  /// 1. A store may not pass a previous store.
+  /// 2. A load may not pass a previous store unless flag 'NoAlias' is set.
+  /// 3. A load may pass a previous load.
+  /// 4. A store may not pass a previous load (regardless of flag 'NoAlias').
+  /// 5. A load has to wait until an older load barrier is fully executed.
+  /// 6. A store has to wait until an older store barrier is fully executed.
+  unsigned dispatch(const InstRef &IR) override;
 
-  // Returns LSU_AVAILABLE if there are enough load/store queue entries to serve
-  // IR. It also returns LSU_AVAILABLE if IR is not a memory operation.
-  Status isAvailable(const InstRef &IR) const;
-
-  // Allocates load/store queue resources for IR.
-  //
-  // This method assumes that a previous call to `isAvailable(IR)` returned
-  // LSU_AVAILABLE, and that IR is a memory operation.
-  void dispatch(const InstRef &IR);
-
-  // By default, rules are:
-  // 1. A store may not pass a previous store.
-  // 2. A load may not pass a previous store unless flag 'NoAlias' is set.
-  // 3. A load may pass a previous load.
-  // 4. A store may not pass a previous load (regardless of flag 'NoAlias').
-  // 5. A load has to wait until an older load barrier is fully executed.
-  // 6. A store has to wait until an older store barrier is fully executed.
-  virtual bool isReady(const InstRef &IR) const;
-
-  // Load and store instructions are tracked by their corresponding queues from
-  // dispatch until the "instruction executed" event.
-  // Only when a load instruction reaches the 'Executed' stage, its value
-  // becomes available to the users. At that point, the load no longer needs to
-  // be tracked by the load queue.
   // FIXME: For simplicity, we optimistically assume a similar behavior for
   // store instructions. In practice, store operations don't tend to leave the
   // store queue until they reach the 'Retired' stage (See PR39830).
-  void onInstructionExecuted(const InstRef &IR);
+  void onInstructionExecuted(const InstRef &IR) override;
 };
 
 } // namespace mca
diff --git a/linux-x64/clang/include/llvm/MCA/HardwareUnits/ResourceManager.h b/linux-x64/clang/include/llvm/MCA/HardwareUnits/ResourceManager.h
index 3addaaf..2f91185 100644
--- a/linux-x64/clang/include/llvm/MCA/HardwareUnits/ResourceManager.h
+++ b/linux-x64/clang/include/llvm/MCA/HardwareUnits/ResourceManager.h
@@ -334,9 +334,13 @@
   // Used to quickly identify groups that own a particular resource unit.
   std::vector<uint64_t> Resource2Groups;
 
-  // A table to map processor resource IDs to processor resource masks.
+  // A table that maps processor resource IDs to processor resource masks.
   SmallVector<uint64_t, 8> ProcResID2Mask;
 
+  // A table that maps resource indices to actual processor resource IDs in the
+  // scheduling model.
+  SmallVector<unsigned, 8> ResIndex2ProcResID;
+
   // Keeps track of which resources are busy, and how many cycles are left
   // before those become usable again.
   SmallDenseMap<ResourceRef, unsigned> BusyResources;
diff --git a/linux-x64/clang/include/llvm/MCA/HardwareUnits/Scheduler.h b/linux-x64/clang/include/llvm/MCA/HardwareUnits/Scheduler.h
index f1cfcbe..27beb84 100644
--- a/linux-x64/clang/include/llvm/MCA/HardwareUnits/Scheduler.h
+++ b/linux-x64/clang/include/llvm/MCA/HardwareUnits/Scheduler.h
@@ -80,24 +80,26 @@
   // the instruction stage (see Instruction::InstrStage).
   //
   // An Instruction dispatched to the Scheduler is added to the WaitSet if not
-  // all its register operands are available, and at least one latency is unknown.
-  // By construction, the WaitSet only contains instructions that are in the
-  // IS_DISPATCHED stage.
+  // all its register operands are available, and at least one latency is
+  // unknown.  By construction, the WaitSet only contains instructions that are
+  // in the IS_DISPATCHED stage.
   //
   // An Instruction transitions from the WaitSet to the PendingSet if the
-  // instruction is not ready yet, but the latency of every register read is known.
-  // Instructions in the PendingSet are expected to be in the IS_PENDING stage.
+  // instruction is not ready yet, but the latency of every register read is
+  // known.  Instructions in the PendingSet can only be in the IS_PENDING or
+  // IS_READY stage.  Only IS_READY instructions that are waiting on memory
+  // dependencies can be added to the PendingSet.
   //
   // Instructions in the PendingSet are immediately dominated only by
-  // instructions that have already been issued to the underlying pipelines.
-  // In the presence of bottlenecks caused by data dependencies, the PendingSet
-  // can be inspected to identify problematic data dependencies between
+  // instructions that have already been issued to the underlying pipelines.  In
+  // the presence of bottlenecks caused by data dependencies, the PendingSet can
+  // be inspected to identify problematic data dependencies between
   // instructions.
   //
   // An instruction is moved to the ReadySet when all register operands become
   // available, and all memory dependencies are met.  Instructions that are
-  // moved from the PendingSet to the ReadySet transition in state from
-  // 'IS_PENDING' to 'IS_READY'.
+  // moved from the PendingSet to the ReadySet must transition to the 'IS_READY'
+  // stage.
   //
   // On every cycle, the Scheduler checks if it can promote instructions from the
   // PendingSet to the ReadySet.
@@ -118,6 +120,14 @@
   // Each bit of the mask represents an unavailable resource.
   uint64_t BusyResourceUnits;
 
+  // Counts the number of instructions in the pending set that were dispatched
+  // during this cycle.
+  unsigned NumDispatchedToThePendingSet;
+
+  // True if the previous pipeline Stage was unable to dispatch a full group of
+  // opcodes because scheduler buffers (or LS queues) were unavailable.
+  bool HadTokenStall;
+
   /// Verify the given selection strategy and set the Strategy member
   /// accordingly.  If no strategy is provided, the DefaultSchedulerStrategy is
   /// used.
@@ -139,8 +149,9 @@
   bool promoteToReadySet(SmallVectorImpl<InstRef> &Ready);
 
   // Try to promote instructions from the WaitSet to the PendingSet.
+  // Add promoted instructions to the 'Pending' vector in input.
   // Returns true if at least one instruction was promoted.
-  bool promoteToPendingSet();
+  bool promoteToPendingSet(SmallVectorImpl<InstRef> &Pending);
 
 public:
   Scheduler(const MCSchedModel &Model, LSUnit &Lsu)
@@ -153,7 +164,8 @@
 
   Scheduler(std::unique_ptr<ResourceManager> RM, LSUnit &Lsu,
             std::unique_ptr<SchedulerStrategy> SelectStrategy)
-      : LSU(Lsu), Resources(std::move(RM)), BusyResourceUnits(0) {
+      : LSU(Lsu), Resources(std::move(RM)), BusyResourceUnits(0),
+        NumDispatchedToThePendingSet(0), HadTokenStall(false) {
     initializeStrategy(std::move(SelectStrategy));
   }
 
@@ -166,15 +178,12 @@
     SC_DISPATCH_GROUP_STALL,
   };
 
-  /// Check if the instruction in 'IR' can be dispatched and returns an answer
-  /// in the form of a Status value.
+  /// Check if the instruction in 'IR' can be dispatched during this cycle.
+  /// Return SC_AVAILABLE if both scheduler and LS resources are available.
   ///
-  /// The DispatchStage is responsible for querying the Scheduler before
-  /// dispatching new instructions. This routine is used for performing such
-  /// a query.  If the instruction 'IR' can be dispatched, then true is
-  /// returned, otherwise false is returned with Event set to the stall type.
-  /// Internally, it also checks if the load/store unit is available.
-  Status isAvailable(const InstRef &IR) const;
+  /// This method is also responsible for setting field HadTokenStall if
+  /// IR cannot be dispatched to the Scheduler due to unavailable resources.
+  Status isAvailable(const InstRef &IR);
 
   /// Reserves buffer and LSUnit queue resources that are necessary to issue
   /// this instruction.
@@ -182,11 +191,11 @@
   /// Returns true if instruction IR is ready to be issued to the underlying
   /// pipelines. Note that this operation cannot fail; it assumes that a
   /// previous call to method `isAvailable(IR)` returned `SC_AVAILABLE`.
-  void dispatch(const InstRef &IR);
-
-  /// Returns true if IR is ready to be executed by the underlying pipelines.
-  /// This method assumes that IR has been previously dispatched.
-  bool isReady(const InstRef &IR) const;
+  ///
+  /// If IR is a memory operation, then the Scheduler queries the LS unit to
+  /// obtain a LS token. An LS token is used internally to track memory
+  /// dependencies.
+  bool dispatch(InstRef &IR);
 
   /// Issue an instruction and populates a vector of used pipeline resources,
   /// and a vector of instructions that transitioned to the ready state as a
@@ -194,6 +203,7 @@
   void issueInstruction(
       InstRef &IR,
       SmallVectorImpl<std::pair<ResourceRef, ResourceCycles>> &Used,
+      SmallVectorImpl<InstRef> &Pending,
       SmallVectorImpl<InstRef> &Ready);
 
   /// Returns true if IR has to be issued immediately, or if IR is a zero
@@ -207,9 +217,15 @@
   /// have changed in state, and that are now available to new instructions.
   /// Instructions executed are added to vector Executed, while vector Ready is
   /// populated with instructions that have become ready in this new cycle.
+  /// Vector Pending is popluated by instructions that have transitioned through
+  /// the pending stat during this cycle. The Pending and Ready sets may not be
+  /// disjoint. An instruction is allowed to transition from the WAIT state to
+  /// the READY state (going through the PENDING state) within a single cycle.
+  /// That means, instructions may appear in both the Pending and Ready set.
   void cycleEvent(SmallVectorImpl<ResourceRef> &Freed,
-                  SmallVectorImpl<InstRef> &Ready,
-                  SmallVectorImpl<InstRef> &Executed);
+                  SmallVectorImpl<InstRef> &Executed,
+                  SmallVectorImpl<InstRef> &Pending,
+                  SmallVectorImpl<InstRef> &Ready);
 
   /// Convert a resource mask into a valid llvm processor resource identifier.
   unsigned getResourceID(uint64_t Mask) const {
@@ -221,16 +237,26 @@
   /// resources are not available.
   InstRef select();
 
-  /// Returns a mask of busy resources. Each bit of the mask identifies a unique
-  /// processor resource unit. In the absence of bottlenecks caused by resource
-  /// pressure, the mask value returned by this method is always zero.
-  uint64_t getBusyResourceUnits() const { return BusyResourceUnits; }
-  bool arePipelinesFullyUsed() const {
-    return !Resources->getAvailableProcResUnits();
-  }
   bool isReadySetEmpty() const { return ReadySet.empty(); }
   bool isWaitSetEmpty() const { return WaitSet.empty(); }
 
+  /// This method is called by the ExecuteStage at the end of each cycle to
+  /// identify bottlenecks caused by data dependencies. Vector RegDeps is
+  /// populated by instructions that were not issued because of unsolved
+  /// register dependencies.  Vector MemDeps is populated by instructions that
+  /// were not issued because of unsolved memory dependencies.
+  void analyzeDataDependencies(SmallVectorImpl<InstRef> &RegDeps,
+                               SmallVectorImpl<InstRef> &MemDeps);
+
+  /// Returns a mask of busy resources, and populates vector Insts with
+  /// instructions that could not be issued to the underlying pipelines because
+  /// not all pipeline resources were available.
+  uint64_t analyzeResourcePressure(SmallVectorImpl<InstRef> &Insts);
+
+  // Returns true if the dispatch logic couldn't dispatch a full group due to
+  // unavailable scheduler and/or LS resources.
+  bool hadTokenStall() const { return HadTokenStall; }
+
 #ifndef NDEBUG
   // Update the ready queues.
   void dump() const;
diff --git a/linux-x64/clang/include/llvm/MCA/Instruction.h b/linux-x64/clang/include/llvm/MCA/Instruction.h
index 658b7fe..d4d3f22 100644
--- a/linux-x64/clang/include/llvm/MCA/Instruction.h
+++ b/linux-x64/clang/include/llvm/MCA/Instruction.h
@@ -80,6 +80,15 @@
 
 class ReadState;
 
+/// A critical data dependency descriptor.
+///
+/// Field RegID is set to the invalid register for memory dependencies.
+struct CriticalDependency {
+  unsigned IID;
+  unsigned RegID;
+  unsigned Cycles;
+};
+
 /// Tracks uses of a register definition (e.g. register write).
 ///
 /// Each implicit/explicit register write is associated with an instance of
@@ -123,9 +132,11 @@
 
   // A partial write that is in a false dependency with this write.
   WriteState *PartialWrite;
-
   unsigned DependentWriteCyclesLeft;
 
+  // Critical register dependency for this write.
+  CriticalDependency CRD;
+
   // A list of dependent reads. Users is a set of dependent
   // reads. A dependent read is added to the set only if CyclesLeft
   // is "unknown". As soon as CyclesLeft is 'known', each user in the set
@@ -140,7 +151,7 @@
       : WD(&Desc), CyclesLeft(UNKNOWN_CYCLES), RegisterID(RegID), PRFID(0),
         ClearsSuperRegs(clearsSuperRegs), WritesZero(writesZero),
         IsEliminated(false), DependentWrite(nullptr), PartialWrite(nullptr),
-        DependentWriteCyclesLeft(0) {}
+        DependentWriteCyclesLeft(0), CRD() {}
 
   WriteState(const WriteState &Other) = default;
   WriteState &operator=(const WriteState &Other) = default;
@@ -150,13 +161,21 @@
   unsigned getRegisterID() const { return RegisterID; }
   unsigned getRegisterFileID() const { return PRFID; }
   unsigned getLatency() const { return WD->Latency; }
-
-  void addUser(ReadState *Use, int ReadAdvance);
-  void addUser(WriteState *Use);
-
   unsigned getDependentWriteCyclesLeft() const {
     return DependentWriteCyclesLeft;
   }
+  const WriteState *getDependentWrite() const { return DependentWrite; }
+  const CriticalDependency &getCriticalRegDep() const { return CRD; }
+
+  // This method adds Use to the set of data dependent reads. IID is the
+  // instruction identifier associated with this write. ReadAdvance is the
+  // number of cycles to subtract from the latency of this data dependency.
+  // Use is in a RAW dependency with this write.
+  void addUser(unsigned IID, ReadState *Use, int ReadAdvance);
+
+  // Use is a younger register write that is in a false dependency with this
+  // write. IID is the instruction identifier associated with this write.
+  void addUser(unsigned IID, WriteState *Use);
 
   unsigned getNumUsers() const {
     unsigned NumUsers = Users.size();
@@ -170,7 +189,7 @@
   bool isEliminated() const { return IsEliminated; }
 
   bool isReady() const {
-    if (getDependentWrite())
+    if (DependentWrite)
       return false;
     unsigned CyclesLeft = getDependentWriteCyclesLeft();
     return !CyclesLeft || CyclesLeft < getLatency();
@@ -180,13 +199,8 @@
     return CyclesLeft != UNKNOWN_CYCLES && CyclesLeft <= 0;
   }
 
-  const WriteState *getDependentWrite() const { return DependentWrite; }
-  void setDependentWrite(WriteState *Other) { DependentWrite = Other; }
-  void writeStartEvent(unsigned Cycles) {
-    DependentWriteCyclesLeft = Cycles;
-    DependentWrite = nullptr;
-  }
-
+  void setDependentWrite(const WriteState *Other) { DependentWrite = Other; }
+  void writeStartEvent(unsigned IID, unsigned RegID, unsigned Cycles);
   void setWriteZero() { WritesZero = true; }
   void setEliminated() {
     assert(Users.empty() && "Write is in an inconsistent state.");
@@ -198,7 +212,7 @@
 
   // On every cycle, update CyclesLeft and notify dependent users.
   void cycleEvent();
-  void onInstructionIssued();
+  void onInstructionIssued(unsigned IID);
 
 #ifndef NDEBUG
   void dump() const;
@@ -228,6 +242,8 @@
   // dependent writes (i.e. field DependentWrite) is zero, this value is
   // propagated to field CyclesLeft.
   unsigned TotalCycles;
+  // Longest register dependency.
+  CriticalDependency CRD;
   // This field is set to true only if there are no dependent writes, and
   // there are no `CyclesLeft' to wait.
   bool IsReady;
@@ -239,13 +255,14 @@
 public:
   ReadState(const ReadDescriptor &Desc, unsigned RegID)
       : RD(&Desc), RegisterID(RegID), PRFID(0), DependentWrites(0),
-        CyclesLeft(UNKNOWN_CYCLES), TotalCycles(0), IsReady(true),
+        CyclesLeft(UNKNOWN_CYCLES), TotalCycles(0), CRD(), IsReady(true),
         IsZero(false), IndependentFromDef(false) {}
 
   const ReadDescriptor &getDescriptor() const { return *RD; }
   unsigned getSchedClass() const { return RD->SchedClassID; }
   unsigned getRegisterID() const { return RegisterID; }
   unsigned getRegisterFileID() const { return PRFID; }
+  const CriticalDependency &getCriticalRegDep() const { return CRD; }
 
   bool isPending() const { return !IndependentFromDef && CyclesLeft > 0; }
   bool isReady() const { return IsReady; }
@@ -255,7 +272,7 @@
   void setIndependentFromDef() { IndependentFromDef = true; }
 
   void cycleEvent();
-  void writeStartEvent(unsigned Cycles);
+  void writeStartEvent(unsigned IID, unsigned RegID, unsigned Cycles);
   void setDependentWrites(unsigned Writes) {
     DependentWrites = Writes;
     IsReady = !Writes;
@@ -413,6 +430,7 @@
   // Returns true if this instruction is a candidate for move elimination.
   bool isOptimizableMove() const { return IsOptimizableMove; }
   void setOptimizableMove() { IsOptimizableMove = true; }
+  bool isMemOp() const { return Desc.MayLoad || Desc.MayStore; }
 };
 
 /// An instruction propagated through the simulated instruction pipeline.
@@ -440,12 +458,34 @@
   // Retire Unit token ID for this instruction.
   unsigned RCUTokenID;
 
+  // LS token ID for this instruction.
+  // This field is set to the invalid null token if this is not a memory
+  // operation.
+  unsigned LSUTokenID;
+
+  // Critical register dependency.
+  CriticalDependency CriticalRegDep;
+
+  // Critical memory dependency.
+  CriticalDependency CriticalMemDep;
+
+  // A bitmask of busy processor resource units.
+  // This field is set to zero only if execution is not delayed during this
+  // cycle because of unavailable pipeline resources.
+  uint64_t CriticalResourceMask;
+
+  // True if this instruction has been optimized at register renaming stage.
+  bool IsEliminated;
+
 public:
   Instruction(const InstrDesc &D)
       : InstructionBase(D), Stage(IS_INVALID), CyclesLeft(UNKNOWN_CYCLES),
-        RCUTokenID(0) {}
+        RCUTokenID(0), LSUTokenID(0), CriticalRegDep(), CriticalMemDep(),
+        CriticalResourceMask(0), IsEliminated(false) {}
 
   unsigned getRCUTokenID() const { return RCUTokenID; }
+  unsigned getLSUTokenID() const { return LSUTokenID; }
+  void setLSUTokenID(unsigned LSUTok) { LSUTokenID = LSUTok; }
   int getCyclesLeft() const { return CyclesLeft; }
 
   // Transition to the dispatch stage, and assign a RCUToken to this
@@ -454,8 +494,8 @@
   void dispatch(unsigned RCUTokenID);
 
   // Instruction issued. Transition to the IS_EXECUTING state, and update
-  // all the definitions.
-  void execute();
+  // all the register definitions.
+  void execute(unsigned IID);
 
   // Force a transition from the IS_DISPATCHED state to the IS_READY or
   // IS_PENDING state. State transitions normally occur either at the beginning
@@ -473,21 +513,29 @@
   bool isExecuting() const { return Stage == IS_EXECUTING; }
   bool isExecuted() const { return Stage == IS_EXECUTED; }
   bool isRetired() const { return Stage == IS_RETIRED; }
-
-  bool isEliminated() const {
-    return isReady() && getDefs().size() &&
-           all_of(getDefs(),
-                  [](const WriteState &W) { return W.isEliminated(); });
-  }
+  bool isEliminated() const { return IsEliminated; }
 
   // Forces a transition from state IS_DISPATCHED to state IS_EXECUTED.
   void forceExecuted();
+  void setEliminated() { IsEliminated = true; }
 
   void retire() {
     assert(isExecuted() && "Instruction is in an invalid state!");
     Stage = IS_RETIRED;
   }
 
+  const CriticalDependency &getCriticalRegDep() const { return CriticalRegDep; }
+  const CriticalDependency &getCriticalMemDep() const { return CriticalMemDep; }
+  const CriticalDependency &computeCriticalRegDep();
+  void setCriticalMemDep(const CriticalDependency &MemDep) {
+    CriticalMemDep = MemDep;
+  }
+
+  uint64_t getCriticalResourceMask() const { return CriticalResourceMask; }
+  void setCriticalResourceMask(uint64_t ResourceMask) {
+    CriticalResourceMask = ResourceMask;
+  }
+
   void cycleEvent();
 };
 
@@ -502,13 +550,17 @@
   InstRef(unsigned Index, Instruction *I) : Data(std::make_pair(Index, I)) {}
 
   bool operator==(const InstRef &Other) const { return Data == Other.Data; }
+  bool operator!=(const InstRef &Other) const { return Data != Other.Data; }
+  bool operator<(const InstRef &Other) const {
+    return Data.first < Other.Data.first;
+  }
 
   unsigned getSourceIndex() const { return Data.first; }
   Instruction *getInstruction() { return Data.second; }
   const Instruction *getInstruction() const { return Data.second; }
 
   /// Returns true if this references a valid instruction.
-  operator bool() const { return Data.second != nullptr; }
+  explicit operator bool() const { return Data.second != nullptr; }
 
   /// Invalidate this reference.
   void invalidate() { Data.second = nullptr; }
@@ -556,7 +608,7 @@
     return !WS || WS->isExecuted();
   }
 
-  bool isValid() const { return Data.first != INVALID_IID && Data.second; }
+  bool isValid() const { return Data.second && Data.first != INVALID_IID; }
   bool operator==(const WriteRef &Other) const { return Data == Other.Data; }
 
 #ifndef NDEBUG
diff --git a/linux-x64/clang/include/llvm/MCA/Stages/DispatchStage.h b/linux-x64/clang/include/llvm/MCA/Stages/DispatchStage.h
index e39f03e..d80eded 100644
--- a/linux-x64/clang/include/llvm/MCA/Stages/DispatchStage.h
+++ b/linux-x64/clang/include/llvm/MCA/Stages/DispatchStage.h
@@ -68,9 +68,7 @@
 public:
   DispatchStage(const MCSubtargetInfo &Subtarget, const MCRegisterInfo &MRI,
                 unsigned MaxDispatchWidth, RetireControlUnit &R,
-                RegisterFile &F)
-      : DispatchWidth(MaxDispatchWidth), AvailableEntries(MaxDispatchWidth),
-        CarryOver(0U), CarriedOver(), STI(Subtarget), RCU(R), PRF(F) {}
+                RegisterFile &F);
 
   bool isAvailable(const InstRef &IR) const override;
 
diff --git a/linux-x64/clang/include/llvm/MCA/Stages/ExecuteStage.h b/linux-x64/clang/include/llvm/MCA/Stages/ExecuteStage.h
index ec9eae0..03737e0 100644
--- a/linux-x64/clang/include/llvm/MCA/Stages/ExecuteStage.h
+++ b/linux-x64/clang/include/llvm/MCA/Stages/ExecuteStage.h
@@ -28,6 +28,12 @@
 class ExecuteStage final : public Stage {
   Scheduler &HWS;
 
+  unsigned NumDispatchedOpcodes;
+  unsigned NumIssuedOpcodes;
+
+  // True if this stage should notify listeners of HWPressureEvents.
+  bool EnablePressureEvents;
+
   Error issueInstruction(InstRef &IR);
 
   // Called at the beginning of each cycle to issue already dispatched
@@ -41,7 +47,10 @@
   ExecuteStage &operator=(const ExecuteStage &Other) = delete;
 
 public:
-  ExecuteStage(Scheduler &S) : Stage(), HWS(S) {}
+  ExecuteStage(Scheduler &S) : ExecuteStage(S, false) {}
+  ExecuteStage(Scheduler &S, bool ShouldPerformBottleneckAnalysis)
+      : Stage(), HWS(S), NumDispatchedOpcodes(0), NumIssuedOpcodes(0),
+        EnablePressureEvents(ShouldPerformBottleneckAnalysis) {}
 
   // This stage works under the assumption that the Pipeline will eventually
   // execute a retire stage. We don't need to check if pipelines and/or
@@ -60,12 +69,14 @@
   // Instructions that transitioned to the 'Executed' state are automatically
   // moved to the next stage (i.e. RetireStage).
   Error cycleStart() override;
+  Error cycleEnd() override;
   Error execute(InstRef &IR) override;
 
   void notifyInstructionIssued(
       const InstRef &IR,
       MutableArrayRef<std::pair<ResourceRef, ResourceCycles>> Used) const;
   void notifyInstructionExecuted(const InstRef &IR) const;
+  void notifyInstructionPending(const InstRef &IR) const;
   void notifyInstructionReady(const InstRef &IR) const;
   void notifyResourceAvailable(const ResourceRef &RR) const;
 
diff --git a/linux-x64/clang/include/llvm/MCA/Stages/MicroOpQueueStage.h b/linux-x64/clang/include/llvm/MCA/Stages/MicroOpQueueStage.h
new file mode 100644
index 0000000..50a5ef8
--- /dev/null
+++ b/linux-x64/clang/include/llvm/MCA/Stages/MicroOpQueueStage.h
@@ -0,0 +1,88 @@
+//===---------------------- MicroOpQueueStage.h -----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+///
+/// This file defines a stage that implements a queue of micro opcodes.
+/// It can be used to simulate a hardware micro-op queue that serves opcodes to
+/// the out of order backend.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MCA_MICRO_OP_QUEUE_STAGE_H
+#define LLVM_MCA_MICRO_OP_QUEUE_STAGE_H
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/MCA/Stages/Stage.h"
+
+namespace llvm {
+namespace mca {
+
+/// A stage that simulates a queue of instruction opcodes.
+class MicroOpQueueStage : public Stage {
+  SmallVector<InstRef, 8> Buffer;
+  unsigned NextAvailableSlotIdx;
+  unsigned CurrentInstructionSlotIdx;
+
+  // Limits the number of instructions that can be written to this buffer every
+  // cycle. A value of zero means that there is no limit to the instruction
+  // throughput in input.
+  const unsigned MaxIPC;
+  unsigned CurrentIPC;
+
+  // Number of entries that are available during this cycle.
+  unsigned AvailableEntries;
+
+  // True if instructions dispatched to this stage don't need to wait for the
+  // next cycle before moving to the next stage.
+  // False if this buffer acts as a one cycle delay in the execution pipeline.
+  bool IsZeroLatencyStage;
+
+  MicroOpQueueStage(const MicroOpQueueStage &Other) = delete;
+  MicroOpQueueStage &operator=(const MicroOpQueueStage &Other) = delete;
+
+  // By default, an instruction consumes a number of buffer entries equal to its
+  // number of micro opcodes (see field `InstrDesc::NumMicroOpcodes`).  The
+  // number of entries consumed by an instruction is normalized to the
+  // minimum value between NumMicroOpcodes and the buffer size. This is to avoid
+  // problems with (microcoded) instructions that generate a number of micro
+  // opcodes than doesn't fit in the buffer.
+  unsigned getNormalizedOpcodes(const InstRef &IR) const {
+    unsigned NormalizedOpcodes =
+        std::min(static_cast<unsigned>(Buffer.size()),
+                 IR.getInstruction()->getDesc().NumMicroOps);
+    return NormalizedOpcodes ? NormalizedOpcodes : 1U;
+  }
+
+  Error moveInstructions();
+
+public:
+  MicroOpQueueStage(unsigned Size, unsigned IPC = 0,
+                    bool ZeroLatencyStage = true);
+
+  bool isAvailable(const InstRef &IR) const override {
+    if (MaxIPC && CurrentIPC == MaxIPC)
+      return false;
+    unsigned NormalizedOpcodes = getNormalizedOpcodes(IR);
+    if (NormalizedOpcodes > AvailableEntries)
+      return false;
+    return true;
+  }
+
+  bool hasWorkToComplete() const override {
+    return AvailableEntries != Buffer.size();
+  }
+
+  Error execute(InstRef &IR) override;
+  Error cycleStart() override;
+  Error cycleEnd() override;
+};
+
+} // namespace mca
+} // namespace llvm
+
+#endif // LLVM_MCA_MICRO_OP_QUEUE_STAGE_H
diff --git a/linux-x64/clang/include/llvm/MCA/Support.h b/linux-x64/clang/include/llvm/MCA/Support.h
index fc36ed4..1da097c 100644
--- a/linux-x64/clang/include/llvm/MCA/Support.h
+++ b/linux-x64/clang/include/llvm/MCA/Support.h
@@ -94,6 +94,13 @@
 void computeProcResourceMasks(const MCSchedModel &SM,
                               MutableArrayRef<uint64_t> Masks);
 
+// Returns the index of the highest bit set. For resource masks, the position of
+// the highest bit set can be used to construct a resource mask identifier.
+inline unsigned getResourceStateIndex(uint64_t Mask) {
+  assert(Mask && "Processor Resource Mask cannot be zero!");
+  return (std::numeric_limits<uint64_t>::digits - countLeadingZeros(Mask)) - 1;
+}
+
 /// Compute the reciprocal block throughput from a set of processor resource
 /// cycles. The reciprocal block throughput is computed as the MAX between:
 ///  - NumMicroOps / DispatchWidth
diff --git a/linux-x64/clang/include/llvm/Object/ArchiveWriter.h b/linux-x64/clang/include/llvm/Object/ArchiveWriter.h
index 4e796eb..9e6daf2 100644
--- a/linux-x64/clang/include/llvm/Object/ArchiveWriter.h
+++ b/linux-x64/clang/include/llvm/Object/ArchiveWriter.h
@@ -26,7 +26,6 @@
   sys::TimePoint<std::chrono::seconds> ModTime;
   unsigned UID = 0, GID = 0, Perms = 0644;
 
-  bool IsNew = false;
   NewArchiveMember() = default;
   NewArchiveMember(MemoryBufferRef BufRef);
 
@@ -37,6 +36,8 @@
                                             bool Deterministic);
 };
 
+Expected<std::string> computeArchiveRelativePath(StringRef From, StringRef To);
+
 Error writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
                    bool WriteSymtab, object::Archive::Kind Kind,
                    bool Deterministic, bool Thin,
diff --git a/linux-x64/clang/include/llvm/Object/Binary.h b/linux-x64/clang/include/llvm/Object/Binary.h
index 8ce2d5a..3c3e977 100644
--- a/linux-x64/clang/include/llvm/Object/Binary.h
+++ b/linux-x64/clang/include/llvm/Object/Binary.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_OBJECT_BINARY_H
 #define LLVM_OBJECT_BINARY_H
 
+#include "llvm-c/Types.h"
 #include "llvm/ADT/Triple.h"
 #include "llvm/Object/Error.h"
 #include "llvm/Support/Error.h"
@@ -41,7 +42,9 @@
     ID_Archive,
     ID_MachOUniversalBinary,
     ID_COFFImportFile,
-    ID_IR,                 // LLVM IR
+    ID_IR, // LLVM IR
+
+    ID_Minidump,
 
     ID_WinRes, // Windows resource (.res) file.
 
@@ -49,6 +52,9 @@
     ID_StartObjects,
     ID_COFF,
 
+    ID_XCOFF32, // AIX XCOFF 32-bit
+    ID_XCOFF64, // AIX XCOFF 64-bit
+
     ID_ELF32L, // ELF 32-bit, little endian
     ID_ELF32B, // ELF 32-bit, big endian
     ID_ELF64L, // ELF 64-bit, little endian
@@ -117,6 +123,8 @@
     return TypeID == ID_COFF;
   }
 
+  bool isXCOFF() const { return TypeID == ID_XCOFF32 || TypeID == ID_XCOFF64; }
+
   bool isWasm() const { return TypeID == ID_Wasm; }
 
   bool isCOFFImportFile() const {
@@ -127,6 +135,8 @@
     return TypeID == ID_IR;
   }
 
+  bool isMinidump() const { return TypeID == ID_Minidump; }
+
   bool isLittleEndian() const {
     return !(TypeID == ID_ELF32B || TypeID == ID_ELF64B ||
              TypeID == ID_MachO32B || TypeID == ID_MachO64B);
@@ -155,6 +165,9 @@
   }
 };
 
+// Create wrappers for C Binding types (see CBindingWrapping.h).
+DEFINE_ISA_CONVERSION_FUNCTIONS(Binary, LLVMBinaryRef)
+
 /// Create a Binary from Source, autodetecting the file type.
 ///
 /// @param Source The data to create the Binary from.
diff --git a/linux-x64/clang/include/llvm/Object/COFF.h b/linux-x64/clang/include/llvm/Object/COFF.h
index c22a482..c53cbc4 100644
--- a/linux-x64/clang/include/llvm/Object/COFF.h
+++ b/linux-x64/clang/include/llvm/Object/COFF.h
@@ -897,13 +897,12 @@
   Expected<SymbolRef::Type> getSymbolType(DataRefImpl Symb) const override;
   Expected<section_iterator> getSymbolSection(DataRefImpl Symb) const override;
   void moveSectionNext(DataRefImpl &Sec) const override;
-  std::error_code getSectionName(DataRefImpl Sec,
-                                 StringRef &Res) const override;
+  Expected<StringRef> getSectionName(DataRefImpl Sec) const override;
   uint64_t getSectionAddress(DataRefImpl Sec) const override;
   uint64_t getSectionIndex(DataRefImpl Sec) const override;
   uint64_t getSectionSize(DataRefImpl Sec) const override;
-  std::error_code getSectionContents(DataRefImpl Sec,
-                                     StringRef &Res) const override;
+  Expected<ArrayRef<uint8_t>>
+  getSectionContents(DataRefImpl Sec) const override;
   uint64_t getSectionAlignment(DataRefImpl Sec) const override;
   bool isSectionCompressed(DataRefImpl Sec) const override;
   bool isSectionText(DataRefImpl Sec) const override;
@@ -1033,10 +1032,10 @@
 
   ArrayRef<coff_relocation> getRelocations(const coff_section *Sec) const;
 
-  std::error_code getSectionName(const coff_section *Sec, StringRef &Res) const;
+  Expected<StringRef> getSectionName(const coff_section *Sec) const;
   uint64_t getSectionSize(const coff_section *Sec) const;
-  std::error_code getSectionContents(const coff_section *Sec,
-                                     ArrayRef<uint8_t> &Res) const;
+  Error getSectionContents(const coff_section *Sec,
+                           ArrayRef<uint8_t> &Res) const;
 
   uint64_t getImageBase() const;
   std::error_code getVaPtr(uint64_t VA, uintptr_t &Res) const;
diff --git a/linux-x64/clang/include/llvm/Object/COFFImportFile.h b/linux-x64/clang/include/llvm/Object/COFFImportFile.h
index d051d7f..5aa8364 100644
--- a/linux-x64/clang/include/llvm/Object/COFFImportFile.h
+++ b/linux-x64/clang/include/llvm/Object/COFFImportFile.h
@@ -36,12 +36,11 @@
 
   void moveSymbolNext(DataRefImpl &Symb) const override { ++Symb.p; }
 
-  std::error_code printSymbolName(raw_ostream &OS,
-                                  DataRefImpl Symb) const override {
+  Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override {
     if (Symb.p == 0)
       OS << "__imp_";
     OS << StringRef(Data.getBufferStart() + sizeof(coff_import_header));
-    return std::error_code();
+    return Error::success();
   }
 
   uint32_t getSymbolFlags(DataRefImpl Symb) const override {
@@ -70,9 +69,21 @@
 };
 
 struct COFFShortExport {
+  /// The name of the export as specified in the .def file or on the command
+  /// line, i.e. "foo" in "/EXPORT:foo", and "bar" in "/EXPORT:foo=bar". This
+  /// may lack mangling, such as underscore prefixing and stdcall suffixing.
   std::string Name;
+
+  /// The external, exported name. Only non-empty when export renaming is in
+  /// effect, i.e. "foo" in "/EXPORT:foo=bar".
   std::string ExtName;
+
+  /// The real, mangled symbol name from the object file. Given
+  /// "/export:foo=bar", this could be "_bar@8" if bar is stdcall.
   std::string SymbolName;
+
+  /// Creates a weak alias. This is the name of the weak aliasee. In a .def
+  /// file, this is "baz" in "EXPORTS\nfoo = bar == baz".
   std::string AliasTarget;
 
   uint16_t Ordinal = 0;
diff --git a/linux-x64/clang/include/llvm/Object/ELF.h b/linux-x64/clang/include/llvm/Object/ELF.h
index 1ba32b4..cab2974 100644
--- a/linux-x64/clang/include/llvm/Object/ELF.h
+++ b/linux-x64/clang/include/llvm/Object/ELF.h
@@ -44,10 +44,26 @@
                         (uint8_t)Object[ELF::EI_DATA]);
 }
 
-static inline Error createError(StringRef Err) {
+static inline Error createError(const Twine &Err) {
   return make_error<StringError>(Err, object_error::parse_failed);
 }
 
+template <class ELFT> class ELFFile;
+
+template <class ELFT>
+std::string getSecIndexForError(const ELFFile<ELFT> *Obj,
+                                const typename ELFT::Shdr *Sec) {
+  auto TableOrErr = Obj->sections();
+  if (TableOrErr)
+    return "[index " + std::to_string(Sec - &TableOrErr->front()) + "]";
+  // To make this helper be more convenient for error reporting purposes we
+  // drop the error. But really it should never be triggered. Before this point,
+  // our code should have called 'sections()' and reported a proper error on
+  // failure.
+  llvm::consumeError(TableOrErr.takeError());
+  return "[unknown index]";
+}
+
 template <class ELFT>
 class ELFFile {
 public:
@@ -79,9 +95,7 @@
   using Elf_Relr_Range = typename ELFT::RelrRange;
   using Elf_Phdr_Range = typename ELFT::PhdrRange;
 
-  const uint8_t *base() const {
-    return reinterpret_cast<const uint8_t *>(Buf.data());
-  }
+  const uint8_t *base() const { return Buf.bytes_begin(); }
 
   size_t getBufSize() const { return Buf.size(); }
 
@@ -114,8 +128,8 @@
                              SmallVectorImpl<char> &Result) const;
   uint32_t getRelativeRelocationType() const;
 
-  const char *getDynamicTagAsString(unsigned Arch, uint64_t Type) const;
-  const char *getDynamicTagAsString(uint64_t Type) const;
+  std::string getDynamicTagAsString(unsigned Arch, uint64_t Type) const;
+  std::string getDynamicTagAsString(uint64_t Type) const;
 
   /// Get the symbol for a given relocation.
   Expected<const Elf_Sym *> getRelocationSymbol(const Elf_Rel *Rel,
@@ -164,11 +178,16 @@
   /// Iterate over program header table.
   Expected<Elf_Phdr_Range> program_headers() const {
     if (getHeader()->e_phnum && getHeader()->e_phentsize != sizeof(Elf_Phdr))
-      return createError("invalid e_phentsize");
+      return createError("invalid e_phentsize: " +
+                         Twine(getHeader()->e_phentsize));
     if (getHeader()->e_phoff +
             (getHeader()->e_phnum * getHeader()->e_phentsize) >
         getBufSize())
-      return createError("program headers longer than binary");
+      return createError("program headers are longer than binary of size " +
+                         Twine(getBufSize()) + ": e_phoff = 0x" +
+                         Twine::utohexstr(getHeader()->e_phoff) +
+                         ", e_phnum = " + Twine(getHeader()->e_phnum) +
+                         ", e_phentsize = " + Twine(getHeader()->e_phentsize));
     auto *Begin =
         reinterpret_cast<const Elf_Phdr *>(base() + getHeader()->e_phoff);
     return makeArrayRef(Begin, Begin + getHeader()->e_phnum);
@@ -183,10 +202,12 @@
   ///  be checked after iteration ends.
   Elf_Note_Iterator notes_begin(const Elf_Phdr &Phdr, Error &Err) const {
     if (Phdr.p_type != ELF::PT_NOTE) {
+      // TODO: this error is untested.
       Err = createError("attempt to iterate notes of non-note program header");
       return Elf_Note_Iterator(Err);
     }
     if (Phdr.p_offset + Phdr.p_filesz > getBufSize()) {
+      // TODO: this error is untested.
       Err = createError("invalid program header offset/size");
       return Elf_Note_Iterator(Err);
     }
@@ -202,10 +223,12 @@
   ///  be checked after iteration ends.
   Elf_Note_Iterator notes_begin(const Elf_Shdr &Shdr, Error &Err) const {
     if (Shdr.sh_type != ELF::SHT_NOTE) {
+      // TODO: this error is untested.
       Err = createError("attempt to iterate notes of non-note section");
       return Elf_Note_Iterator(Err);
     }
     if (Shdr.sh_offset + Shdr.sh_size > getBufSize()) {
+      // TODO: this error is untested.
       Err = createError("invalid section offset/size");
       return Elf_Note_Iterator(Err);
     }
@@ -273,7 +296,7 @@
 inline Expected<const typename ELFT::Shdr *>
 getSection(typename ELFT::ShdrRange Sections, uint32_t Index) {
   if (Index >= Sections.size())
-    return createError("invalid section index");
+    return createError("invalid section index: " + Twine(Index));
   return &Sections[Index];
 }
 
@@ -285,7 +308,10 @@
   assert(Sym->st_shndx == ELF::SHN_XINDEX);
   unsigned Index = Sym - FirstSym;
   if (Index >= ShndxTable.size())
-    return createError("index past the end of the symbol table");
+    return createError(
+        "extended symbol index (" + Twine(Index) +
+        ") is past the end of the SHT_SYMTAB_SHNDX section of size " +
+        Twine(ShndxTable.size()));
 
   // The size of the table was checked in getSHNDXTable.
   return ShndxTable[Index];
@@ -335,6 +361,7 @@
 inline Expected<const typename ELFT::Sym *>
 getSymbol(typename ELFT::SymRange Symbols, uint32_t Index) {
   if (Index >= Symbols.size())
+    // TODO: this error is untested.
     return createError("invalid symbol index");
   return &Symbols[Index];
 }
@@ -353,18 +380,26 @@
 Expected<ArrayRef<T>>
 ELFFile<ELFT>::getSectionContentsAsArray(const Elf_Shdr *Sec) const {
   if (Sec->sh_entsize != sizeof(T) && sizeof(T) != 1)
-    return createError("invalid sh_entsize");
+    return createError("section " + getSecIndexForError(this, Sec) +
+                       " has an invalid sh_entsize: " + Twine(Sec->sh_entsize));
 
   uintX_t Offset = Sec->sh_offset;
   uintX_t Size = Sec->sh_size;
 
   if (Size % sizeof(T))
-    return createError("size is not a multiple of sh_entsize");
+    return createError("section " + getSecIndexForError(this, Sec) +
+                       " has an invalid sh_size (" + Twine(Size) +
+                       ") which is not a multiple of its sh_entsize (" +
+                       Twine(Sec->sh_entsize) + ")");
   if ((std::numeric_limits<uintX_t>::max() - Offset < Size) ||
       Offset + Size > Buf.size())
-    return createError("invalid section offset");
+    return createError("section " + getSecIndexForError(this, Sec) +
+                       " has a sh_offset (0x" + Twine::utohexstr(Offset) +
+                       ") + sh_size (0x" + Twine(Size) +
+                       ") that cannot be represented");
 
   if (Offset % alignof(T))
+    // TODO: this error is untested.
     return createError("unaligned data");
 
   const T *Start = reinterpret_cast<const T *>(base() + Offset);
@@ -438,6 +473,7 @@
   if (!Index) // no section string table.
     return "";
   if (Index >= Sections.size())
+    // TODO: this error is untested.
     return createError("invalid section index");
   return getStringTable(&Sections[Index]);
 }
@@ -447,7 +483,9 @@
 template <class ELFT>
 Expected<ELFFile<ELFT>> ELFFile<ELFT>::create(StringRef Object) {
   if (sizeof(Elf_Ehdr) > Object.size())
-    return createError("Invalid buffer");
+    return createError("invalid buffer: the size (" + Twine(Object.size()) +
+                       ") is smaller than an ELF header (" +
+                       Twine(sizeof(Elf_Ehdr)) + ")");
   return ELFFile(Object);
 }
 
@@ -458,16 +496,18 @@
     return ArrayRef<Elf_Shdr>();
 
   if (getHeader()->e_shentsize != sizeof(Elf_Shdr))
-    return createError(
-        "invalid section header entry size (e_shentsize) in ELF header");
+    return createError("invalid e_shentsize in ELF header: " +
+                       Twine(getHeader()->e_shentsize));
 
   const uint64_t FileSize = Buf.size();
-
   if (SectionTableOffset + sizeof(Elf_Shdr) > FileSize)
-    return createError("section header table goes past the end of the file");
+    return createError(
+        "section header table goes past the end of the file: e_shoff = 0x" +
+        Twine::utohexstr(SectionTableOffset));
 
   // Invalid address alignment of section headers
   if (SectionTableOffset & (alignof(Elf_Shdr) - 1))
+    // TODO: this error is untested.
     return createError("invalid alignment of section headers");
 
   const Elf_Shdr *First =
@@ -478,6 +518,7 @@
     NumSections = First->sh_size;
 
   if (NumSections > UINT64_MAX / sizeof(Elf_Shdr))
+    // TODO: this error is untested.
     return createError("section table goes past the end of file");
 
   const uint64_t SectionTableSize = NumSections * sizeof(Elf_Shdr);
@@ -504,10 +545,14 @@
 Expected<const T *> ELFFile<ELFT>::getEntry(const Elf_Shdr *Section,
                                             uint32_t Entry) const {
   if (sizeof(T) != Section->sh_entsize)
+    // TODO: this error is untested.
     return createError("invalid sh_entsize");
   size_t Pos = Section->sh_offset + Entry * sizeof(T);
   if (Pos + sizeof(T) > Buf.size())
-    return createError("invalid section offset");
+    return createError("unable to access section " +
+                       getSecIndexForError(this, Section) + " data at 0x" +
+                       Twine::utohexstr(Pos) +
+                       ": offset goes past the end of file");
   return reinterpret_cast<const T *>(base() + Pos);
 }
 
@@ -533,6 +578,7 @@
     if (*SecNameOrErr == SectionName)
       return &Sec;
   }
+  // TODO: this error is untested.
   return createError("invalid section name");
 }
 
@@ -540,15 +586,24 @@
 Expected<StringRef>
 ELFFile<ELFT>::getStringTable(const Elf_Shdr *Section) const {
   if (Section->sh_type != ELF::SHT_STRTAB)
-    return createError("invalid sh_type for string table, expected SHT_STRTAB");
+    return createError("invalid sh_type for string table section " +
+                       getSecIndexForError(this, Section) +
+                       ": expected SHT_STRTAB, but got " +
+                       object::getELFSectionTypeName(getHeader()->e_machine,
+                                                     Section->sh_type));
   auto V = getSectionContentsAsArray<char>(Section);
   if (!V)
     return V.takeError();
   ArrayRef<char> Data = *V;
   if (Data.empty())
+    // TODO: this error is untested.
     return createError("empty string table");
   if (Data.back() != '\0')
-    return createError("string table non-null terminated");
+    return createError(object::getELFSectionTypeName(getHeader()->e_machine,
+                                                     Section->sh_type) +
+                       " string table section " +
+                       getSecIndexForError(this, Section) +
+                       " is non-null terminated");
   return StringRef(Data.begin(), Data.size());
 }
 
@@ -576,9 +631,13 @@
   const Elf_Shdr &SymTable = **SymTableOrErr;
   if (SymTable.sh_type != ELF::SHT_SYMTAB &&
       SymTable.sh_type != ELF::SHT_DYNSYM)
+    // TODO: this error is untested.
     return createError("invalid sh_type");
   if (V.size() != (SymTable.sh_size / sizeof(Elf_Sym)))
-    return createError("invalid section contents size");
+    return createError("SHT_SYMTAB_SHNDX section has sh_size (" +
+                       Twine(SymTable.sh_size) +
+                       ") which is not equal to the number of symbols (" +
+                       Twine(V.size()) + ")");
   return V;
 }
 
@@ -597,6 +656,7 @@
                                        Elf_Shdr_Range Sections) const {
 
   if (Sec.sh_type != ELF::SHT_SYMTAB && Sec.sh_type != ELF::SHT_DYNSYM)
+    // TODO: this error is untested.
     return createError(
         "invalid sh_type for symbol table, expected SHT_SYMTAB or SHT_DYNSYM");
   auto SectionOrErr = object::getSection<ELFT>(Sections, Sec.sh_link);
@@ -624,7 +684,11 @@
   if (Offset == 0)
     return StringRef();
   if (Offset >= DotShstrtab.size())
-    return createError("invalid string offset");
+    return createError("a section " + getSecIndexForError(this, Section) +
+                       " has an invalid sh_name (0x" +
+                       Twine::utohexstr(Offset) +
+                       ") offset which goes past the end of the "
+                       "section name string table");
   return StringRef(DotShstrtab.data() + Offset);
 }
 
diff --git a/linux-x64/clang/include/llvm/Object/ELFObjectFile.h b/linux-x64/clang/include/llvm/Object/ELFObjectFile.h
index aab7340..86c015e 100644
--- a/linux-x64/clang/include/llvm/Object/ELFObjectFile.h
+++ b/linux-x64/clang/include/llvm/Object/ELFObjectFile.h
@@ -41,6 +41,9 @@
 namespace llvm {
 namespace object {
 
+constexpr int NumElfSymbolTypes = 8;
+extern const llvm::EnumEntry<unsigned> ElfSymbolTypes[NumElfSymbolTypes];
+
 class elf_symbol_iterator;
 
 class ELFObjectFileBase : public ObjectFile {
@@ -51,8 +54,8 @@
 protected:
   ELFObjectFileBase(unsigned int Type, MemoryBufferRef Source);
 
-  virtual uint16_t getEMachine() const = 0;
   virtual uint64_t getSymbolSize(DataRefImpl Symb) const = 0;
+  virtual uint8_t getSymbolBinding(DataRefImpl Symb) const = 0;
   virtual uint8_t getSymbolOther(DataRefImpl Symb) const = 0;
   virtual uint8_t getSymbolELFType(DataRefImpl Symb) const = 0;
 
@@ -61,6 +64,7 @@
   virtual uint64_t getSectionOffset(DataRefImpl Sec) const = 0;
 
   virtual Expected<int64_t> getRelocationAddend(DataRefImpl Rel) const = 0;
+  virtual Error getBuildAttributes(ARMAttributeParser &Attributes) const = 0;
 
 public:
   using elf_symbol_iterator_range = iterator_range<elf_symbol_iterator>;
@@ -86,6 +90,8 @@
 
   virtual uint16_t getEType() const = 0;
 
+  virtual uint16_t getEMachine() const = 0;
+
   std::vector<std::pair<DataRefImpl, uint64_t>> getPltAddresses() const;
 };
 
@@ -141,6 +147,10 @@
     return getObject()->getSymbolSize(getRawDataRefImpl());
   }
 
+  uint8_t getBinding() const {
+    return getObject()->getSymbolBinding(getRawDataRefImpl());
+  }
+
   uint8_t getOther() const {
     return getObject()->getSymbolOther(getRawDataRefImpl());
   }
@@ -148,6 +158,16 @@
   uint8_t getELFType() const {
     return getObject()->getSymbolELFType(getRawDataRefImpl());
   }
+
+  StringRef getELFTypeName() const {
+    uint8_t Type = getELFType();
+    for (auto &EE : ElfSymbolTypes) {
+      if (EE.Value == Type) {
+        return EE.AltName;
+      }
+    }
+    return "";
+  }
 };
 
 class elf_symbol_iterator : public symbol_iterator {
@@ -238,6 +258,7 @@
   uint32_t getSymbolAlignment(DataRefImpl Symb) const override;
   uint64_t getCommonSymbolSizeImpl(DataRefImpl Symb) const override;
   uint32_t getSymbolFlags(DataRefImpl Symb) const override;
+  uint8_t getSymbolBinding(DataRefImpl Symb) const override;
   uint8_t getSymbolOther(DataRefImpl Symb) const override;
   uint8_t getSymbolELFType(DataRefImpl Symb) const override;
   Expected<SymbolRef::Type> getSymbolType(DataRefImpl Symb) const override;
@@ -246,13 +267,12 @@
   Expected<section_iterator> getSymbolSection(DataRefImpl Symb) const override;
 
   void moveSectionNext(DataRefImpl &Sec) const override;
-  std::error_code getSectionName(DataRefImpl Sec,
-                                 StringRef &Res) const override;
+  Expected<StringRef> getSectionName(DataRefImpl Sec) const override;
   uint64_t getSectionAddress(DataRefImpl Sec) const override;
   uint64_t getSectionIndex(DataRefImpl Sec) const override;
   uint64_t getSectionSize(DataRefImpl Sec) const override;
-  std::error_code getSectionContents(DataRefImpl Sec,
-                                     StringRef &Res) const override;
+  Expected<ArrayRef<uint8_t>>
+  getSectionContents(DataRefImpl Sec) const override;
   uint64_t getSectionAlignment(DataRefImpl Sec) const override;
   bool isSectionCompressed(DataRefImpl Sec) const override;
   bool isSectionText(DataRefImpl Sec) const override;
@@ -340,6 +360,28 @@
         (Visibility == ELF::STV_DEFAULT || Visibility == ELF::STV_PROTECTED));
   }
 
+  Error getBuildAttributes(ARMAttributeParser &Attributes) const override {
+    auto SectionsOrErr = EF.sections();
+    if (!SectionsOrErr)
+      return SectionsOrErr.takeError();
+
+    for (const Elf_Shdr &Sec : *SectionsOrErr) {
+      if (Sec.sh_type == ELF::SHT_ARM_ATTRIBUTES) {
+        auto ErrorOrContents = EF.getSectionContents(&Sec);
+        if (!ErrorOrContents)
+          return ErrorOrContents.takeError();
+
+        auto Contents = ErrorOrContents.get();
+        if (Contents[0] != ARMBuildAttrs::Format_Version || Contents.size() == 1)
+          return Error::success();
+
+        Attributes.Parse(Contents, ELFT::TargetEndianness == support::little);
+        break;
+      }
+    }
+    return Error::success();
+  }
+
   // This flag is used for classof, to distinguish ELFObjectFile from
   // its subclass. If more subclasses will be created, this flag will
   // have to become an enum.
@@ -381,28 +423,6 @@
 
   unsigned getPlatformFlags() const override { return EF.getHeader()->e_flags; }
 
-  std::error_code getBuildAttributes(ARMAttributeParser &Attributes) const override {
-    auto SectionsOrErr = EF.sections();
-    if (!SectionsOrErr)
-      return errorToErrorCode(SectionsOrErr.takeError());
-
-    for (const Elf_Shdr &Sec : *SectionsOrErr) {
-      if (Sec.sh_type == ELF::SHT_ARM_ATTRIBUTES) {
-        auto ErrorOrContents = EF.getSectionContents(&Sec);
-        if (!ErrorOrContents)
-          return errorToErrorCode(ErrorOrContents.takeError());
-
-        auto Contents = ErrorOrContents.get();
-        if (Contents[0] != ARMBuildAttrs::Format_Version || Contents.size() == 1)
-          return std::error_code();
-
-        Attributes.Parse(Contents, ELFT::TargetEndianness == support::little);
-        break;
-      }
-    }
-    return std::error_code();
-  }
-
   const ELFFile<ELFT> *getELFFile() const { return &EF; }
 
   bool isDyldType() const { return isDyldELFObject; }
@@ -541,6 +561,11 @@
 }
 
 template <class ELFT>
+uint8_t ELFObjectFile<ELFT>::getSymbolBinding(DataRefImpl Symb) const {
+  return getSymbol(Symb)->getBinding();
+}
+
+template <class ELFT>
 uint8_t ELFObjectFile<ELFT>::getSymbolOther(DataRefImpl Symb) const {
   return getSymbol(Symb)->st_other;
 }
@@ -662,13 +687,8 @@
 }
 
 template <class ELFT>
-std::error_code ELFObjectFile<ELFT>::getSectionName(DataRefImpl Sec,
-                                                    StringRef &Result) const {
-  auto Name = EF.getSectionName(&*getSection(Sec));
-  if (!Name)
-    return errorToErrorCode(Name.takeError());
-  Result = *Name;
-  return std::error_code();
+Expected<StringRef> ELFObjectFile<ELFT>::getSectionName(DataRefImpl Sec) const {
+  return EF.getSectionName(&*getSection(Sec));
 }
 
 template <class ELFT>
@@ -693,16 +713,15 @@
 }
 
 template <class ELFT>
-std::error_code
-ELFObjectFile<ELFT>::getSectionContents(DataRefImpl Sec,
-                                        StringRef &Result) const {
+Expected<ArrayRef<uint8_t>>
+ELFObjectFile<ELFT>::getSectionContents(DataRefImpl Sec) const {
   const Elf_Shdr *EShdr = getSection(Sec);
   if (std::error_code EC =
           checkOffset(getMemoryBufferRef(),
                       (uintptr_t)base() + EShdr->sh_offset, EShdr->sh_size))
-    return EC;
-  Result = StringRef((const char *)base() + EShdr->sh_offset, EShdr->sh_size);
-  return std::error_code();
+    return errorCodeToError(EC);
+  return makeArrayRef((const uint8_t *)base() + EShdr->sh_offset,
+                      EShdr->sh_size);
 }
 
 template <class ELFT>
@@ -758,7 +777,7 @@
     }
   }
   for (const Elf_Shdr &Sec : *SectionsOrErr) {
-    if (is_contained(Offsets, Sec.sh_offset))
+    if (is_contained(Offsets, Sec.sh_addr))
       Res.emplace_back(toDRI(&Sec), this);
   }
   return Res;
@@ -933,15 +952,13 @@
   for (const Elf_Shdr &Sec : *SectionsOrErr) {
     switch (Sec.sh_type) {
     case ELF::SHT_DYNSYM: {
-      if (DotDynSymSec)
-        return createError("More than one dynamic symbol table!");
-      DotDynSymSec = &Sec;
+      if (!DotDynSymSec)
+        DotDynSymSec = &Sec;
       break;
     }
     case ELF::SHT_SYMTAB: {
-      if (DotSymtabSec)
-        return createError("More than one static symbol table!");
-      DotSymtabSec = &Sec;
+      if (!DotSymtabSec)
+        DotSymtabSec = &Sec;
       break;
     }
     case ELF::SHT_SYMTAB_SHNDX: {
@@ -975,7 +992,9 @@
 
 template <class ELFT>
 basic_symbol_iterator ELFObjectFile<ELFT>::symbol_begin() const {
-  DataRefImpl Sym = toDRI(DotSymtabSec, 0);
+  DataRefImpl Sym =
+      toDRI(DotSymtabSec,
+            DotSymtabSec && DotSymtabSec->sh_size >= sizeof(Elf_Sym) ? 1 : 0);
   return basic_symbol_iterator(SymbolRef(Sym, this));
 }
 
diff --git a/linux-x64/clang/include/llvm/Object/ELFTypes.h b/linux-x64/clang/include/llvm/Object/ELFTypes.h
index 45bbd6c..5552208 100644
--- a/linux-x64/clang/include/llvm/Object/ELFTypes.h
+++ b/linux-x64/clang/include/llvm/Object/ELFTypes.h
@@ -592,9 +592,9 @@
 
   template <class NoteIteratorELFT> friend class Elf_Note_Iterator_Impl;
 
+public:
   Elf_Note_Impl(const Elf_Nhdr_Impl<ELFT> &Nhdr) : Nhdr(Nhdr) {}
 
-public:
   /// Get the note's name, excluding the terminating null byte.
   StringRef getName() const {
     if (!Nhdr.n_namesz)
diff --git a/linux-x64/clang/include/llvm/Object/IRObjectFile.h b/linux-x64/clang/include/llvm/Object/IRObjectFile.h
index 39454b0..08b92f1 100644
--- a/linux-x64/clang/include/llvm/Object/IRObjectFile.h
+++ b/linux-x64/clang/include/llvm/Object/IRObjectFile.h
@@ -37,8 +37,7 @@
 public:
   ~IRObjectFile() override;
   void moveSymbolNext(DataRefImpl &Symb) const override;
-  std::error_code printSymbolName(raw_ostream &OS,
-                                  DataRefImpl Symb) const override;
+  Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override;
   uint32_t getSymbolFlags(DataRefImpl Symb) const override;
   basic_symbol_iterator symbol_begin() const override;
   basic_symbol_iterator symbol_end() const override;
diff --git a/linux-x64/clang/include/llvm/Object/IRSymtab.h b/linux-x64/clang/include/llvm/Object/IRSymtab.h
index 0601d99..0bbfc93 100644
--- a/linux-x64/clang/include/llvm/Object/IRSymtab.h
+++ b/linux-x64/clang/include/llvm/Object/IRSymtab.h
@@ -125,12 +125,13 @@
   Str SectionName;
 };
 
+
 struct Header {
   /// Version number of the symtab format. This number should be incremented
   /// when the format changes, but it does not need to be incremented if a
   /// change to LLVM would cause it to create a different symbol table.
   Word Version;
-  enum { kCurrentVersion = 1 };
+  enum { kCurrentVersion = 2 };
 
   /// The producer's version string (LLVM_VERSION_STRING " " LLVM_REVISION).
   /// Consumers should rebuild the symbol table from IR if the producer's
@@ -147,6 +148,9 @@
 
   /// COFF-specific: linker directives.
   Str COFFLinkerOpts;
+
+  /// Dependent Library Specifiers
+  Range<Str> DependentLibraries;
 };
 
 } // end namespace storage
@@ -231,6 +235,7 @@
   ArrayRef<storage::Comdat> Comdats;
   ArrayRef<storage::Symbol> Symbols;
   ArrayRef<storage::Uncommon> Uncommons;
+  ArrayRef<storage::Str> DependentLibraries;
 
   StringRef str(storage::Str S) const { return S.get(Strtab); }
 
@@ -251,6 +256,7 @@
     Comdats = range(header().Comdats);
     Symbols = range(header().Symbols);
     Uncommons = range(header().Uncommons);
+    DependentLibraries = range(header().DependentLibraries);
   }
 
   using symbol_range = iterator_range<object::content_iterator<SymbolRef>>;
@@ -283,6 +289,16 @@
 
   /// COFF-specific: returns linker options specified in the input file.
   StringRef getCOFFLinkerOpts() const { return str(header().COFFLinkerOpts); }
+
+  /// Returns dependent library specifiers
+  std::vector<StringRef> getDependentLibraries() const {
+    std::vector<StringRef> Specifiers;
+    Specifiers.reserve(DependentLibraries.size());
+    for (auto S : DependentLibraries) {
+      Specifiers.push_back(str(S));
+    }
+    return Specifiers;
+  }
 };
 
 /// Ephemeral symbols produced by Reader::symbols() and
diff --git a/linux-x64/clang/include/llvm/Object/MachO.h b/linux-x64/clang/include/llvm/Object/MachO.h
index 79ec8bb..ca9512f 100644
--- a/linux-x64/clang/include/llvm/Object/MachO.h
+++ b/linux-x64/clang/include/llvm/Object/MachO.h
@@ -133,11 +133,9 @@
   BindRebaseSegInfo(const MachOObjectFile *Obj);
 
   // Used to check a Mach-O Bind or Rebase entry for errors when iterating.
-  const char *checkSegAndOffset(int32_t SegIndex, uint64_t SegOffset,
-                                bool endInvalid);
-  const char *checkCountAndSkip(uint32_t Count, uint32_t Skip,
-                                uint8_t PointerSize, int32_t SegIndex,
-                                uint64_t SegOffset);
+  const char* checkSegAndOffsets(int32_t SegIndex, uint64_t SegOffset,
+                                 uint8_t PointerSize, uint32_t Count=1,
+                                 uint32_t Skip=0);
   // Used with valid SegIndex/SegOffset values from checked entries.
   StringRef segmentName(int32_t SegIndex);
   StringRef sectionName(int32_t SegIndex, uint64_t SegOffset);
@@ -295,13 +293,12 @@
   unsigned getSectionID(SectionRef Sec) const;
 
   void moveSectionNext(DataRefImpl &Sec) const override;
-  std::error_code getSectionName(DataRefImpl Sec,
-                                 StringRef &Res) const override;
+  Expected<StringRef> getSectionName(DataRefImpl Sec) const override;
   uint64_t getSectionAddress(DataRefImpl Sec) const override;
   uint64_t getSectionIndex(DataRefImpl Sec) const override;
   uint64_t getSectionSize(DataRefImpl Sec) const override;
-  std::error_code getSectionContents(DataRefImpl Sec,
-                                     StringRef &Res) const override;
+  Expected<ArrayRef<uint8_t>>
+  getSectionContents(DataRefImpl Sec) const override;
   uint64_t getSectionAlignment(DataRefImpl Sec) const override;
   Expected<SectionRef> getSection(unsigned SectionIndex) const;
   Expected<SectionRef> getSection(StringRef SectionName) const;
@@ -412,36 +409,32 @@
                                                  bool is64,
                                                  MachOBindEntry::Kind);
 
-  /// For use with a SegIndex,SegOffset pair in MachOBindEntry::moveNext() to
-  /// validate a MachOBindEntry.
-  const char *BindEntryCheckSegAndOffset(int32_t SegIndex, uint64_t SegOffset,
-                                         bool endInvalid) const {
-    return BindRebaseSectionTable->checkSegAndOffset(SegIndex, SegOffset,
-                                                     endInvalid);
-  }
-  /// For use in MachOBindEntry::moveNext() to validate a MachOBindEntry for
-  /// the BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB opcode.
-  const char *BindEntryCheckCountAndSkip(uint32_t Count, uint32_t Skip,
-                                         uint8_t PointerSize, int32_t SegIndex,
-                                         uint64_t SegOffset) const {
-    return BindRebaseSectionTable->checkCountAndSkip(Count, Skip, PointerSize,
-                                                     SegIndex, SegOffset);
+  // Given a SegIndex, SegOffset, and PointerSize, verify a valid section exists
+  // that fully contains a pointer at that location. Multiple fixups in a bind
+  // (such as with the BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB opcode) can
+  // be tested via the Count and Skip parameters.
+  //
+  // This is used by MachOBindEntry::moveNext() to validate a MachOBindEntry.
+  const char *BindEntryCheckSegAndOffsets(int32_t SegIndex, uint64_t SegOffset,
+                                         uint8_t PointerSize, uint32_t Count=1,
+                                          uint32_t Skip=0) const {
+    return BindRebaseSectionTable->checkSegAndOffsets(SegIndex, SegOffset,
+                                                     PointerSize, Count, Skip);
   }
 
-  /// For use with a SegIndex,SegOffset pair in MachORebaseEntry::moveNext() to
-  /// validate a MachORebaseEntry.
-  const char *RebaseEntryCheckSegAndOffset(int32_t SegIndex, uint64_t SegOffset,
-                                           bool endInvalid) const {
-    return BindRebaseSectionTable->checkSegAndOffset(SegIndex, SegOffset,
-                                                     endInvalid);
-  }
-  /// For use in MachORebaseEntry::moveNext() to validate a MachORebaseEntry for
-  /// the REBASE_OPCODE_DO_*_TIMES* opcodes.
-  const char *RebaseEntryCheckCountAndSkip(uint32_t Count, uint32_t Skip,
-                                         uint8_t PointerSize, int32_t SegIndex,
-                                         uint64_t SegOffset) const {
-    return BindRebaseSectionTable->checkCountAndSkip(Count, Skip, PointerSize,
-                                                     SegIndex, SegOffset);
+  // Given a SegIndex, SegOffset, and PointerSize, verify a valid section exists
+  // that fully contains a pointer at that location. Multiple fixups in a rebase
+  // (such as with the REBASE_OPCODE_DO_*_TIMES* opcodes) can be tested via the
+  // Count and Skip parameters.
+  //
+  // This is used by MachORebaseEntry::moveNext() to validate a MachORebaseEntry
+  const char *RebaseEntryCheckSegAndOffsets(int32_t SegIndex,
+                                            uint64_t SegOffset,
+                                            uint8_t PointerSize,
+                                            uint32_t Count=1,
+                                            uint32_t Skip=0) const {
+    return BindRebaseSectionTable->checkSegAndOffsets(SegIndex, SegOffset,
+                                                      PointerSize, Count, Skip);
   }
 
   /// For use with the SegIndex of a checked Mach-O Bind or Rebase entry to
@@ -578,6 +571,7 @@
                               const char **McpuDefault = nullptr,
                               const char **ArchFlag = nullptr);
   static bool isValidArch(StringRef ArchFlag);
+  static ArrayRef<StringRef> getValidArchs();
   static Triple getHostArch();
 
   bool isRelocatableObject() const override;
@@ -615,6 +609,7 @@
     case MachO::PLATFORM_TVOS: return "tvos";
     case MachO::PLATFORM_WATCHOS: return "watchos";
     case MachO::PLATFORM_BRIDGEOS: return "bridgeos";
+    case MachO::PLATFORM_MACCATALYST: return "macCatalyst";
     case MachO::PLATFORM_IOSSIMULATOR: return "iossimulator";
     case MachO::PLATFORM_TVOSSIMULATOR: return "tvossimulator";
     case MachO::PLATFORM_WATCHOSSIMULATOR: return "watchossimulator";
diff --git a/linux-x64/clang/include/llvm/Object/Minidump.h b/linux-x64/clang/include/llvm/Object/Minidump.h
new file mode 100644
index 0000000..470008d
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Object/Minidump.h
@@ -0,0 +1,165 @@
+//===- Minidump.h - Minidump object file implementation ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_OBJECT_MINIDUMP_H
+#define LLVM_OBJECT_MINIDUMP_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringExtras.h"
+#include "llvm/BinaryFormat/Minidump.h"
+#include "llvm/Object/Binary.h"
+#include "llvm/Support/Error.h"
+
+namespace llvm {
+namespace object {
+
+/// A class providing access to the contents of a minidump file.
+class MinidumpFile : public Binary {
+public:
+  /// Construct a new MinidumpFile object from the given memory buffer. Returns
+  /// an error if this file cannot be identified as a minidump file, or if its
+  /// contents are badly corrupted (i.e. we cannot read the stream directory).
+  static Expected<std::unique_ptr<MinidumpFile>> create(MemoryBufferRef Source);
+
+  static bool classof(const Binary *B) { return B->isMinidump(); }
+
+  /// Returns the contents of the minidump header.
+  const minidump::Header &header() const { return Header; }
+
+  /// Returns the list of streams (stream directory entries) in this file.
+  ArrayRef<minidump::Directory> streams() const { return Streams; }
+
+  /// Returns the raw contents of the stream given by the directory entry.
+  ArrayRef<uint8_t> getRawStream(const minidump::Directory &Stream) const {
+    return getData().slice(Stream.Location.RVA, Stream.Location.DataSize);
+  }
+
+  /// Returns the raw contents of the stream of the given type, or None if the
+  /// file does not contain a stream of this type.
+  Optional<ArrayRef<uint8_t>> getRawStream(minidump::StreamType Type) const;
+
+  /// Returns the raw contents of an object given by the LocationDescriptor. An
+  /// error is returned if the descriptor points outside of the minidump file.
+  Expected<ArrayRef<uint8_t>>
+  getRawData(minidump::LocationDescriptor Desc) const {
+    return getDataSlice(getData(), Desc.RVA, Desc.DataSize);
+  }
+
+  /// Returns the minidump string at the given offset. An error is returned if
+  /// we fail to parse the string, or the string is invalid UTF16.
+  Expected<std::string> getString(size_t Offset) const;
+
+  /// Returns the contents of the SystemInfo stream, cast to the appropriate
+  /// type. An error is returned if the file does not contain this stream, or
+  /// the stream is smaller than the size of the SystemInfo structure. The
+  /// internal consistency of the stream is not checked in any way.
+  Expected<const minidump::SystemInfo &> getSystemInfo() const {
+    return getStream<minidump::SystemInfo>(minidump::StreamType::SystemInfo);
+  }
+
+  /// Returns the module list embedded in the ModuleList stream. An error is
+  /// returned if the file does not contain this stream, or if the stream is
+  /// not large enough to contain the number of modules declared in the stream
+  /// header. The consistency of the Module entries themselves is not checked in
+  /// any way.
+  Expected<ArrayRef<minidump::Module>> getModuleList() const {
+    return getListStream<minidump::Module>(minidump::StreamType::ModuleList);
+  }
+
+  /// Returns the thread list embedded in the ThreadList stream. An error is
+  /// returned if the file does not contain this stream, or if the stream is
+  /// not large enough to contain the number of threads declared in the stream
+  /// header. The consistency of the Thread entries themselves is not checked in
+  /// any way.
+  Expected<ArrayRef<minidump::Thread>> getThreadList() const {
+    return getListStream<minidump::Thread>(minidump::StreamType::ThreadList);
+  }
+
+  /// Returns the list of memory ranges embedded in the MemoryList stream. An
+  /// error is returned if the file does not contain this stream, or if the
+  /// stream is not large enough to contain the number of memory descriptors
+  /// declared in the stream header. The consistency of the MemoryDescriptor
+  /// entries themselves is not checked in any way.
+  Expected<ArrayRef<minidump::MemoryDescriptor>> getMemoryList() const {
+    return getListStream<minidump::MemoryDescriptor>(
+        minidump::StreamType::MemoryList);
+  }
+
+private:
+  static Error createError(StringRef Str) {
+    return make_error<GenericBinaryError>(Str, object_error::parse_failed);
+  }
+
+  static Error createEOFError() {
+    return make_error<GenericBinaryError>("Unexpected EOF",
+                                          object_error::unexpected_eof);
+  }
+
+  /// Return a slice of the given data array, with bounds checking.
+  static Expected<ArrayRef<uint8_t>> getDataSlice(ArrayRef<uint8_t> Data,
+                                                  size_t Offset, size_t Size);
+
+  /// Return the slice of the given data array as an array of objects of the
+  /// given type. The function checks that the input array is large enough to
+  /// contain the correct number of objects of the given type.
+  template <typename T>
+  static Expected<ArrayRef<T>> getDataSliceAs(ArrayRef<uint8_t> Data,
+                                              size_t Offset, size_t Count);
+
+  MinidumpFile(MemoryBufferRef Source, const minidump::Header &Header,
+               ArrayRef<minidump::Directory> Streams,
+               DenseMap<minidump::StreamType, std::size_t> StreamMap)
+      : Binary(ID_Minidump, Source), Header(Header), Streams(Streams),
+        StreamMap(std::move(StreamMap)) {}
+
+  ArrayRef<uint8_t> getData() const {
+    return arrayRefFromStringRef(Data.getBuffer());
+  }
+
+  /// Return the stream of the given type, cast to the appropriate type. Checks
+  /// that the stream is large enough to hold an object of this type.
+  template <typename T>
+  Expected<const T &> getStream(minidump::StreamType Stream) const;
+
+  /// Return the contents of a stream which contains a list of fixed-size items,
+  /// prefixed by the list size.
+  template <typename T>
+  Expected<ArrayRef<T>> getListStream(minidump::StreamType Stream) const;
+
+  const minidump::Header &Header;
+  ArrayRef<minidump::Directory> Streams;
+  DenseMap<minidump::StreamType, std::size_t> StreamMap;
+};
+
+template <typename T>
+Expected<const T &> MinidumpFile::getStream(minidump::StreamType Stream) const {
+  if (auto OptionalStream = getRawStream(Stream)) {
+    if (OptionalStream->size() >= sizeof(T))
+      return *reinterpret_cast<const T *>(OptionalStream->data());
+    return createEOFError();
+  }
+  return createError("No such stream");
+}
+
+template <typename T>
+Expected<ArrayRef<T>> MinidumpFile::getDataSliceAs(ArrayRef<uint8_t> Data,
+                                                   size_t Offset,
+                                                   size_t Count) {
+  // Check for overflow.
+  if (Count > std::numeric_limits<size_t>::max() / sizeof(T))
+    return createEOFError();
+  auto ExpectedArray = getDataSlice(Data, Offset, sizeof(T) * Count);
+  if (!ExpectedArray)
+    return ExpectedArray.takeError();
+  return ArrayRef<T>(reinterpret_cast<const T *>(ExpectedArray->data()), Count);
+}
+
+} // end namespace object
+} // end namespace llvm
+
+#endif // LLVM_OBJECT_MINIDUMP_H
diff --git a/linux-x64/clang/include/llvm/Object/ObjectFile.h b/linux-x64/clang/include/llvm/Object/ObjectFile.h
index f13775c..483a348 100644
--- a/linux-x64/clang/include/llvm/Object/ObjectFile.h
+++ b/linux-x64/clang/include/llvm/Object/ObjectFile.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_OBJECT_OBJECTFILE_H
 #define LLVM_OBJECT_OBJECTFILE_H
 
+#include "llvm/ADT/DenseMapInfo.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/iterator_range.h"
@@ -97,7 +98,7 @@
   uint64_t getAddress() const;
   uint64_t getIndex() const;
   uint64_t getSize() const;
-  std::error_code getContents(StringRef &Result) const;
+  Expected<StringRef> getContents() const;
 
   /// Get the alignment of this section as the actual value (not log 2).
   uint64_t getAlignment() const;
@@ -135,6 +136,30 @@
   const ObjectFile *getObject() const;
 };
 
+struct SectionedAddress {
+  // TODO: constructors could be removed when C++14 would be adopted.
+  SectionedAddress() {}
+  SectionedAddress(uint64_t Addr, uint64_t SectIdx)
+      : Address(Addr), SectionIndex(SectIdx) {}
+
+  const static uint64_t UndefSection = UINT64_MAX;
+
+  uint64_t Address = 0;
+  uint64_t SectionIndex = UndefSection;
+};
+
+inline bool operator<(const SectionedAddress &LHS,
+                      const SectionedAddress &RHS) {
+  return std::tie(LHS.SectionIndex, LHS.Address) <
+         std::tie(RHS.SectionIndex, RHS.Address);
+}
+
+inline bool operator==(const SectionedAddress &LHS,
+                       const SectionedAddress &RHS) {
+  return std::tie(LHS.SectionIndex, LHS.Address) ==
+         std::tie(RHS.SectionIndex, RHS.Address);
+}
+
 /// This is a value type class that represents a single symbol in the list of
 /// symbols in the object file.
 class SymbolRef : public BasicSymbolRef {
@@ -219,7 +244,7 @@
   friend class SymbolRef;
 
   virtual Expected<StringRef> getSymbolName(DataRefImpl Symb) const = 0;
-  std::error_code printSymbolName(raw_ostream &OS,
+  Error printSymbolName(raw_ostream &OS,
                                   DataRefImpl Symb) const override;
   virtual Expected<uint64_t> getSymbolAddress(DataRefImpl Symb) const = 0;
   virtual uint64_t getSymbolValueImpl(DataRefImpl Symb) const = 0;
@@ -233,13 +258,12 @@
   friend class SectionRef;
 
   virtual void moveSectionNext(DataRefImpl &Sec) const = 0;
-  virtual std::error_code getSectionName(DataRefImpl Sec,
-                                         StringRef &Res) const = 0;
+  virtual Expected<StringRef> getSectionName(DataRefImpl Sec) const = 0;
   virtual uint64_t getSectionAddress(DataRefImpl Sec) const = 0;
   virtual uint64_t getSectionIndex(DataRefImpl Sec) const = 0;
   virtual uint64_t getSectionSize(DataRefImpl Sec) const = 0;
-  virtual std::error_code getSectionContents(DataRefImpl Sec,
-                                             StringRef &Res) const = 0;
+  virtual Expected<ArrayRef<uint8_t>>
+  getSectionContents(DataRefImpl Sec) const = 0;
   virtual uint64_t getSectionAlignment(DataRefImpl Sec) const = 0;
   virtual bool isSectionCompressed(DataRefImpl Sec) const = 0;
   virtual bool isSectionText(DataRefImpl Sec) const = 0;
@@ -307,11 +331,6 @@
   /// Create a triple from the data in this object file.
   Triple makeTriple() const;
 
-  virtual std::error_code
-    getBuildAttributes(ARMAttributeParser &Attributes) const {
-      return std::error_code();
-    }
-
   /// Maps a debug section name to a standard DWARF section name.
   virtual StringRef mapDebugSectionName(StringRef Name) const { return Name; }
 
@@ -340,6 +359,9 @@
   createCOFFObjectFile(MemoryBufferRef Object);
 
   static Expected<std::unique_ptr<ObjectFile>>
+  createXCOFFObjectFile(MemoryBufferRef Object, unsigned FileType);
+
+  static Expected<std::unique_ptr<ObjectFile>>
   createELFObjectFile(MemoryBufferRef Object);
 
   static Expected<std::unique_ptr<MachOObjectFile>>
@@ -395,14 +417,16 @@
   , OwningObject(Owner) {}
 
 inline bool SectionRef::operator==(const SectionRef &Other) const {
-  return SectionPimpl == Other.SectionPimpl;
+  return OwningObject == Other.OwningObject &&
+         SectionPimpl == Other.SectionPimpl;
 }
 
 inline bool SectionRef::operator!=(const SectionRef &Other) const {
-  return SectionPimpl != Other.SectionPimpl;
+  return !(*this == Other);
 }
 
 inline bool SectionRef::operator<(const SectionRef &Other) const {
+  assert(OwningObject == Other.OwningObject);
   return SectionPimpl < Other.SectionPimpl;
 }
 
@@ -411,7 +435,11 @@
 }
 
 inline std::error_code SectionRef::getName(StringRef &Result) const {
-  return OwningObject->getSectionName(SectionPimpl, Result);
+  Expected<StringRef> NameOrErr = OwningObject->getSectionName(SectionPimpl);
+  if (!NameOrErr)
+    return errorToErrorCode(NameOrErr.takeError());
+  Result = *NameOrErr;
+  return std::error_code();
 }
 
 inline uint64_t SectionRef::getAddress() const {
@@ -426,8 +454,12 @@
   return OwningObject->getSectionSize(SectionPimpl);
 }
 
-inline std::error_code SectionRef::getContents(StringRef &Result) const {
-  return OwningObject->getSectionContents(SectionPimpl, Result);
+inline Expected<StringRef> SectionRef::getContents() const {
+  Expected<ArrayRef<uint8_t>> Res =
+      OwningObject->getSectionContents(SectionPimpl);
+  if (!Res)
+    return Res.takeError();
+  return StringRef(reinterpret_cast<const char *>(Res->data()), Res->size());
 }
 
 inline uint64_t SectionRef::getAlignment() const {
@@ -530,6 +562,25 @@
 
 } // end namespace object
 
+template <> struct DenseMapInfo<object::SectionRef> {
+  static bool isEqual(const object::SectionRef &A,
+                      const object::SectionRef &B) {
+    return A == B;
+  }
+  static object::SectionRef getEmptyKey() {
+    return object::SectionRef({}, nullptr);
+  }
+  static object::SectionRef getTombstoneKey() {
+    object::DataRefImpl TS;
+    TS.p = (uintptr_t)-1;
+    return object::SectionRef(TS, nullptr);
+  }
+  static unsigned getHashValue(const object::SectionRef &Sec) {
+    object::DataRefImpl Raw = Sec.getRawDataRefImpl();
+    return hash_combine(Raw.p, Raw.d.a, Raw.d.b);
+  }
+};
+
 } // end namespace llvm
 
 #endif // LLVM_OBJECT_OBJECTFILE_H
diff --git a/linux-x64/clang/include/llvm/Object/RelocVisitor.h b/linux-x64/clang/include/llvm/Object/RelocVisitor.h
deleted file mode 100644
index 76f3fab..0000000
--- a/linux-x64/clang/include/llvm/Object/RelocVisitor.h
+++ /dev/null
@@ -1,362 +0,0 @@
-//===- RelocVisitor.h - Visitor for object file relocations -----*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file provides a wrapper around all the different types of relocations
-// in different file formats, such that a client can handle them in a unified
-// manner by only implementing a minimal number of functions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_OBJECT_RELOCVISITOR_H
-#define LLVM_OBJECT_RELOCVISITOR_H
-
-#include "llvm/ADT/Triple.h"
-#include "llvm/BinaryFormat/ELF.h"
-#include "llvm/BinaryFormat/MachO.h"
-#include "llvm/Object/COFF.h"
-#include "llvm/Object/ELFObjectFile.h"
-#include "llvm/Object/MachO.h"
-#include "llvm/Object/ObjectFile.h"
-#include "llvm/Object/Wasm.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/ErrorHandling.h"
-#include <cstdint>
-#include <system_error>
-
-namespace llvm {
-namespace object {
-
-/// Base class for object file relocation visitors.
-class RelocVisitor {
-public:
-  explicit RelocVisitor(const ObjectFile &Obj) : ObjToVisit(Obj) {}
-
-  // TODO: Should handle multiple applied relocations via either passing in the
-  // previously computed value or just count paired relocations as a single
-  // visit.
-  uint64_t visit(uint32_t Rel, RelocationRef R, uint64_t Value = 0) {
-    if (isa<ELFObjectFileBase>(ObjToVisit))
-      return visitELF(Rel, R, Value);
-    if (isa<COFFObjectFile>(ObjToVisit))
-      return visitCOFF(Rel, R, Value);
-    if (isa<MachOObjectFile>(ObjToVisit))
-      return visitMachO(Rel, R, Value);
-    if (isa<WasmObjectFile>(ObjToVisit))
-      return visitWasm(Rel, R, Value);
-
-    HasError = true;
-    return 0;
-  }
-
-  bool error() { return HasError; }
-
-private:
-  const ObjectFile &ObjToVisit;
-  bool HasError = false;
-
-  uint64_t visitELF(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (ObjToVisit.getBytesInAddress() == 8) { // 64-bit object file
-      switch (ObjToVisit.getArch()) {
-      case Triple::x86_64:
-        return visitX86_64(Rel, R, Value);
-      case Triple::aarch64:
-      case Triple::aarch64_be:
-        return visitAarch64(Rel, R, Value);
-      case Triple::bpfel:
-      case Triple::bpfeb:
-        return visitBpf(Rel, R, Value);
-      case Triple::mips64el:
-      case Triple::mips64:
-        return visitMips64(Rel, R, Value);
-      case Triple::ppc64le:
-      case Triple::ppc64:
-        return visitPPC64(Rel, R, Value);
-      case Triple::systemz:
-        return visitSystemz(Rel, R, Value);
-      case Triple::sparcv9:
-        return visitSparc64(Rel, R, Value);
-      case Triple::amdgcn:
-        return visitAmdgpu(Rel, R, Value);
-      default:
-        HasError = true;
-        return 0;
-      }
-    }
-
-    // 32-bit object file
-    assert(ObjToVisit.getBytesInAddress() == 4 &&
-           "Invalid word size in object file");
-
-    switch (ObjToVisit.getArch()) {
-    case Triple::x86:
-      return visitX86(Rel, R, Value);
-    case Triple::ppc:
-      return visitPPC32(Rel, R, Value);
-    case Triple::arm:
-    case Triple::armeb:
-      return visitARM(Rel, R, Value);
-    case Triple::avr:
-      return visitAVR(Rel, R, Value);
-    case Triple::lanai:
-      return visitLanai(Rel, R, Value);
-    case Triple::mipsel:
-    case Triple::mips:
-      return visitMips32(Rel, R, Value);
-    case Triple::sparc:
-      return visitSparc32(Rel, R, Value);
-    case Triple::hexagon:
-      return visitHexagon(Rel, R, Value);
-    default:
-      HasError = true;
-      return 0;
-    }
-  }
-
-  int64_t getELFAddend(RelocationRef R) {
-    Expected<int64_t> AddendOrErr = ELFRelocationRef(R).getAddend();
-    handleAllErrors(AddendOrErr.takeError(), [](const ErrorInfoBase &EI) {
-      report_fatal_error(EI.message());
-    });
-    return *AddendOrErr;
-  }
-
-  uint64_t visitX86_64(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_X86_64_NONE:
-      return 0;
-    case ELF::R_X86_64_64:
-    case ELF::R_X86_64_DTPOFF32:
-    case ELF::R_X86_64_DTPOFF64:
-      return Value + getELFAddend(R);
-    case ELF::R_X86_64_PC32:
-      return Value + getELFAddend(R) - R.getOffset();
-    case ELF::R_X86_64_32:
-    case ELF::R_X86_64_32S:
-      return (Value + getELFAddend(R)) & 0xFFFFFFFF;
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitAarch64(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_AARCH64_ABS32: {
-      int64_t Res = Value + getELFAddend(R);
-      if (Res < INT32_MIN || Res > UINT32_MAX)
-        HasError = true;
-      return static_cast<uint32_t>(Res);
-    }
-    case ELF::R_AARCH64_ABS64:
-      return Value + getELFAddend(R);
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitBpf(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_BPF_64_32:
-      return Value & 0xFFFFFFFF;
-    case ELF::R_BPF_64_64:
-      return Value;
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitMips64(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_MIPS_32:
-      return (Value + getELFAddend(R)) & 0xFFFFFFFF;
-    case ELF::R_MIPS_64:
-      return Value + getELFAddend(R);
-    case ELF::R_MIPS_TLS_DTPREL64:
-      return Value + getELFAddend(R) - 0x8000;
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitPPC64(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_PPC64_ADDR32:
-      return (Value + getELFAddend(R)) & 0xFFFFFFFF;
-    case ELF::R_PPC64_ADDR64:
-      return Value + getELFAddend(R);
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitSystemz(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_390_32: {
-      int64_t Res = Value + getELFAddend(R);
-      if (Res < INT32_MIN || Res > UINT32_MAX)
-        HasError = true;
-      return static_cast<uint32_t>(Res);
-    }
-    case ELF::R_390_64:
-      return Value + getELFAddend(R);
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitSparc64(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_SPARC_32:
-    case ELF::R_SPARC_64:
-    case ELF::R_SPARC_UA32:
-    case ELF::R_SPARC_UA64:
-      return Value + getELFAddend(R);
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitAmdgpu(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_AMDGPU_ABS32:
-    case ELF::R_AMDGPU_ABS64:
-      return Value + getELFAddend(R);
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitX86(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (Rel) {
-    case ELF::R_386_NONE:
-      return 0;
-    case ELF::R_386_32:
-      return Value;
-    case ELF::R_386_PC32:
-      return Value - R.getOffset();
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitPPC32(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (Rel == ELF::R_PPC_ADDR32)
-      return (Value + getELFAddend(R)) & 0xFFFFFFFF;
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitARM(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (Rel == ELF::R_ARM_ABS32) {
-      if ((int64_t)Value < INT32_MIN || (int64_t)Value > UINT32_MAX)
-        HasError = true;
-      return static_cast<uint32_t>(Value);
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitAVR(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (Rel == ELF::R_AVR_16) {
-      return (Value + getELFAddend(R)) & 0xFFFF;
-    } else if (Rel == ELF::R_AVR_32) {
-      return (Value + getELFAddend(R)) & 0xFFFFFFFF;
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitLanai(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (Rel == ELF::R_LANAI_32)
-      return (Value + getELFAddend(R)) & 0xFFFFFFFF;
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitMips32(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    // FIXME: Take in account implicit addends to get correct results.
-    if (Rel == ELF::R_MIPS_32)
-      return Value & 0xFFFFFFFF;
-    if (Rel == ELF::R_MIPS_TLS_DTPREL32)
-      return Value & 0xFFFFFFFF;
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitSparc32(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (Rel == ELF::R_SPARC_32 || Rel == ELF::R_SPARC_UA32)
-      return Value + getELFAddend(R);
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitHexagon(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (Rel == ELF::R_HEX_32)
-      return Value + getELFAddend(R);
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitCOFF(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    switch (ObjToVisit.getArch()) {
-    case Triple::x86:
-      switch (Rel) {
-      case COFF::IMAGE_REL_I386_SECREL:
-      case COFF::IMAGE_REL_I386_DIR32:
-        return static_cast<uint32_t>(Value);
-      }
-      break;
-    case Triple::x86_64:
-      switch (Rel) {
-      case COFF::IMAGE_REL_AMD64_SECREL:
-        return static_cast<uint32_t>(Value);
-      case COFF::IMAGE_REL_AMD64_ADDR64:
-        return Value;
-      }
-      break;
-    default:
-      break;
-    }
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitMachO(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (ObjToVisit.getArch() == Triple::x86_64 &&
-        Rel == MachO::X86_64_RELOC_UNSIGNED)
-      return Value;
-    HasError = true;
-    return 0;
-  }
-
-  uint64_t visitWasm(uint32_t Rel, RelocationRef R, uint64_t Value) {
-    if (ObjToVisit.getArch() == Triple::wasm32) {
-      switch (Rel) {
-      case wasm::R_WASM_FUNCTION_INDEX_LEB:
-      case wasm::R_WASM_TABLE_INDEX_SLEB:
-      case wasm::R_WASM_TABLE_INDEX_I32:
-      case wasm::R_WASM_MEMORY_ADDR_LEB:
-      case wasm::R_WASM_MEMORY_ADDR_SLEB:
-      case wasm::R_WASM_MEMORY_ADDR_I32:
-      case wasm::R_WASM_TYPE_INDEX_LEB:
-      case wasm::R_WASM_GLOBAL_INDEX_LEB:
-      case wasm::R_WASM_FUNCTION_OFFSET_I32:
-      case wasm::R_WASM_SECTION_OFFSET_I32:
-      case wasm::R_WASM_EVENT_INDEX_LEB:
-        // For wasm section, its offset at 0 -- ignoring Value
-        return 0;
-      }
-    }
-    HasError = true;
-    return 0;
-  }
-};
-
-} // end namespace object
-} // end namespace llvm
-
-#endif // LLVM_OBJECT_RELOCVISITOR_H
diff --git a/linux-x64/clang/include/llvm/Object/RelocationResolver.h b/linux-x64/clang/include/llvm/Object/RelocationResolver.h
new file mode 100644
index 0000000..1246dcc
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Object/RelocationResolver.h
@@ -0,0 +1,42 @@
+//===- RelocVisitor.h - Visitor for object file relocations -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file provides a wrapper around all the different types of relocations
+// in different file formats, such that a client can handle them in a unified
+// manner by only implementing a minimal number of functions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_OBJECT_RELOCVISITOR_H
+#define LLVM_OBJECT_RELOCVISITOR_H
+
+#include "llvm/ADT/Triple.h"
+#include "llvm/BinaryFormat/ELF.h"
+#include "llvm/BinaryFormat/MachO.h"
+#include "llvm/Object/COFF.h"
+#include "llvm/Object/ELFObjectFile.h"
+#include "llvm/Object/MachO.h"
+#include "llvm/Object/ObjectFile.h"
+#include "llvm/Object/Wasm.h"
+#include "llvm/Support/Casting.h"
+#include "llvm/Support/ErrorHandling.h"
+#include <cstdint>
+#include <system_error>
+
+namespace llvm {
+namespace object {
+
+using RelocationResolver = uint64_t (*)(RelocationRef R, uint64_t S, uint64_t A);
+
+std::pair<bool (*)(uint64_t), RelocationResolver>
+getRelocationResolver(const ObjectFile &Obj);
+
+} // end namespace object
+} // end namespace llvm
+
+#endif // LLVM_OBJECT_RELOCVISITOR_H
diff --git a/linux-x64/clang/include/llvm/Object/StackMapParser.h b/linux-x64/clang/include/llvm/Object/StackMapParser.h
index 8817516..ed44efb 100644
--- a/linux-x64/clang/include/llvm/Object/StackMapParser.h
+++ b/linux-x64/clang/include/llvm/Object/StackMapParser.h
@@ -19,8 +19,9 @@
 
 namespace llvm {
 
+/// A parser for the latest stackmap format.  At the moment, latest=V2.
 template <support::endianness Endianness>
-class StackMapV2Parser {
+class StackMapParser {
 public:
   template <typename AccessorT>
   class AccessorIterator {
@@ -49,7 +50,7 @@
 
   /// Accessor for function records.
   class FunctionAccessor {
-    friend class StackMapV2Parser;
+    friend class StackMapParser;
 
   public:
     /// Get the function address.
@@ -81,7 +82,7 @@
 
   /// Accessor for constants.
   class ConstantAccessor {
-    friend class StackMapV2Parser;
+    friend class StackMapParser;
 
   public:
     /// Return the value of this constant.
@@ -105,7 +106,7 @@
 
   /// Accessor for location records.
   class LocationAccessor {
-    friend class StackMapV2Parser;
+    friend class StackMapParser;
     friend class RecordAccessor;
 
   public:
@@ -114,6 +115,12 @@
       return LocationKind(P[KindOffset]);
     }
 
+    /// Get the Size for this location.
+    unsigned getSizeInBytes() const {
+        return read<uint16_t>(P + SizeOffset);
+
+    }
+
     /// Get the Dwarf register number for this location.
     uint16_t getDwarfRegNum() const {
       return read<uint16_t>(P + DwarfRegNumOffset);
@@ -148,16 +155,17 @@
     }
 
     static const int KindOffset = 0;
-    static const int DwarfRegNumOffset = KindOffset + sizeof(uint16_t);
-    static const int SmallConstantOffset = DwarfRegNumOffset + sizeof(uint16_t);
-    static const int LocationAccessorSize = sizeof(uint64_t);
+    static const int SizeOffset = KindOffset + sizeof(uint16_t);
+    static const int DwarfRegNumOffset = SizeOffset + sizeof(uint16_t);
+    static const int SmallConstantOffset = DwarfRegNumOffset + sizeof(uint32_t);
+    static const int LocationAccessorSize = sizeof(uint64_t) + sizeof(uint32_t);
 
     const uint8_t *P;
   };
 
   /// Accessor for stackmap live-out fields.
   class LiveOutAccessor {
-    friend class StackMapV2Parser;
+    friend class StackMapParser;
     friend class RecordAccessor;
 
   public:
@@ -188,7 +196,7 @@
 
   /// Accessor for stackmap records.
   class RecordAccessor {
-    friend class StackMapV2Parser;
+    friend class StackMapParser;
 
   public:
     using location_iterator = AccessorIterator<LocationAccessor>;
@@ -263,8 +271,9 @@
     RecordAccessor(const uint8_t *P) : P(P) {}
 
     unsigned getNumLiveOutsOffset() const {
-      return LocationListOffset + LocationSize * getNumLocations() +
-             sizeof(uint16_t);
+      unsigned LocOffset = 
+          ((LocationListOffset + LocationSize * getNumLocations()) + 7) & ~0x7; 
+      return LocOffset + sizeof(uint16_t);
     }
 
     unsigned getSizeInBytes() const {
@@ -284,7 +293,7 @@
       InstructionOffsetOffset + sizeof(uint32_t) + sizeof(uint16_t);
     static const unsigned LocationListOffset =
       NumLocationsOffset + sizeof(uint16_t);
-    static const unsigned LocationSize = sizeof(uint64_t);
+    static const unsigned LocationSize = sizeof(uint64_t) + sizeof(uint32_t);
     static const unsigned LiveOutSize = sizeof(uint32_t);
 
     const uint8_t *P;
@@ -292,12 +301,12 @@
 
   /// Construct a parser for a version-2 stackmap. StackMap data will be read
   /// from the given array.
-  StackMapV2Parser(ArrayRef<uint8_t> StackMapSection)
+  StackMapParser(ArrayRef<uint8_t> StackMapSection)
       : StackMapSection(StackMapSection) {
     ConstantsListOffset = FunctionListOffset + getNumFunctions() * FunctionSize;
 
-    assert(StackMapSection[0] == 2 &&
-           "StackMapV2Parser can only parse version 2 stackmaps");
+    assert(StackMapSection[0] == 3 &&
+           "StackMapParser can only parse version 3 stackmaps");
 
     unsigned CurrentRecordOffset =
       ConstantsListOffset + getNumConstants() * ConstantSize;
@@ -313,8 +322,8 @@
   using constant_iterator = AccessorIterator<ConstantAccessor>;
   using record_iterator = AccessorIterator<RecordAccessor>;
 
-  /// Get the version number of this stackmap. (Always returns 2).
-  unsigned getVersion() const { return 2; }
+  /// Get the version number of this stackmap. (Always returns 3).
+  unsigned getVersion() const { return 3; }
 
   /// Get the number of functions in the stack map.
   uint32_t getNumFunctions() const {
diff --git a/linux-x64/clang/include/llvm/Object/SymbolicFile.h b/linux-x64/clang/include/llvm/Object/SymbolicFile.h
index 6d95d7a..1398fa1 100644
--- a/linux-x64/clang/include/llvm/Object/SymbolicFile.h
+++ b/linux-x64/clang/include/llvm/Object/SymbolicFile.h
@@ -126,7 +126,7 @@
 
   void moveNext();
 
-  std::error_code printName(raw_ostream &OS) const;
+  Error printName(raw_ostream &OS) const;
 
   /// Get symbol flags (bitwise OR of SymbolRef::Flags)
   uint32_t getFlags() const;
@@ -145,8 +145,7 @@
   // virtual interface.
   virtual void moveSymbolNext(DataRefImpl &Symb) const = 0;
 
-  virtual std::error_code printSymbolName(raw_ostream &OS,
-                                          DataRefImpl Symb) const = 0;
+  virtual Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const = 0;
 
   virtual uint32_t getSymbolFlags(DataRefImpl Symb) const = 0;
 
@@ -193,7 +192,7 @@
   return OwningObject->moveSymbolNext(SymbolPimpl);
 }
 
-inline std::error_code BasicSymbolRef::printName(raw_ostream &OS) const {
+inline Error BasicSymbolRef::printName(raw_ostream &OS) const {
   return OwningObject->printSymbolName(OS, SymbolPimpl);
 }
 
diff --git a/linux-x64/clang/include/llvm/Object/Wasm.h b/linux-x64/clang/include/llvm/Object/Wasm.h
index a0a2c4b..e130ea3 100644
--- a/linux-x64/clang/include/llvm/Object/Wasm.h
+++ b/linux-x64/clang/include/llvm/Object/Wasm.h
@@ -130,6 +130,9 @@
 
   const wasm::WasmDylinkInfo &dylinkInfo() const { return DylinkInfo; }
   const wasm::WasmProducerInfo &getProducerInfo() const { return ProducerInfo; }
+  ArrayRef<wasm::WasmFeatureEntry> getTargetFeatures() const {
+    return TargetFeatures;
+  }
   ArrayRef<wasm::WasmSignature> types() const { return Signatures; }
   ArrayRef<uint32_t> functionTypes() const { return FunctionTypes; }
   ArrayRef<wasm::WasmImport> imports() const { return Imports; }
@@ -168,13 +171,12 @@
 
   // Overrides from SectionRef.
   void moveSectionNext(DataRefImpl &Sec) const override;
-  std::error_code getSectionName(DataRefImpl Sec,
-                                 StringRef &Res) const override;
+  Expected<StringRef> getSectionName(DataRefImpl Sec) const override;
   uint64_t getSectionAddress(DataRefImpl Sec) const override;
   uint64_t getSectionIndex(DataRefImpl Sec) const override;
   uint64_t getSectionSize(DataRefImpl Sec) const override;
-  std::error_code getSectionContents(DataRefImpl Sec,
-                                     StringRef &Res) const override;
+  Expected<ArrayRef<uint8_t>>
+  getSectionContents(DataRefImpl Sec) const override;
   uint64_t getSectionAlignment(DataRefImpl Sec) const override;
   bool isSectionCompressed(DataRefImpl Sec) const override;
   bool isSectionText(DataRefImpl Sec) const override;
@@ -244,6 +246,7 @@
   Error parseElemSection(ReadContext &Ctx);
   Error parseCodeSection(ReadContext &Ctx);
   Error parseDataSection(ReadContext &Ctx);
+  Error parseDataCountSection(ReadContext &Ctx);
 
   // Custom section types
   Error parseDylinkSection(ReadContext &Ctx);
@@ -252,12 +255,14 @@
   Error parseLinkingSectionSymtab(ReadContext &Ctx);
   Error parseLinkingSectionComdat(ReadContext &Ctx);
   Error parseProducersSection(ReadContext &Ctx);
+  Error parseTargetFeaturesSection(ReadContext &Ctx);
   Error parseRelocSection(StringRef Name, ReadContext &Ctx);
 
   wasm::WasmObjectHeader Header;
   std::vector<WasmSection> Sections;
   wasm::WasmDylinkInfo DylinkInfo;
   wasm::WasmProducerInfo ProducerInfo;
+  std::vector<wasm::WasmFeatureEntry> TargetFeatures;
   std::vector<wasm::WasmSignature> Signatures;
   std::vector<uint32_t> FunctionTypes;
   std::vector<wasm::WasmTable> Tables;
@@ -268,6 +273,7 @@
   std::vector<wasm::WasmExport> Exports;
   std::vector<wasm::WasmElemSegment> ElemSegments;
   std::vector<WasmSegment> DataSegments;
+  llvm::Optional<size_t> DataCount;
   std::vector<wasm::WasmFunction> Functions;
   std::vector<WasmSymbol> Symbols;
   std::vector<wasm::WasmFunctionName> DebugNames;
@@ -288,40 +294,51 @@
 public:
   // We define orders for all core wasm sections and known custom sections.
   enum : int {
+    // Sentinel, must be zero
+    WASM_SEC_ORDER_NONE = 0,
+
     // Core sections
-    // The order of standard sections is precisely given by the spec.
-    WASM_SEC_ORDER_TYPE = 1,
-    WASM_SEC_ORDER_IMPORT = 2,
-    WASM_SEC_ORDER_FUNCTION = 3,
-    WASM_SEC_ORDER_TABLE = 4,
-    WASM_SEC_ORDER_MEMORY = 5,
-    WASM_SEC_ORDER_GLOBAL = 6,
-    WASM_SEC_ORDER_EVENT = 7,
-    WASM_SEC_ORDER_EXPORT = 8,
-    WASM_SEC_ORDER_START = 9,
-    WASM_SEC_ORDER_ELEM = 10,
-    WASM_SEC_ORDER_DATACOUNT = 11,
-    WASM_SEC_ORDER_CODE = 12,
-    WASM_SEC_ORDER_DATA = 13,
+    WASM_SEC_ORDER_TYPE,
+    WASM_SEC_ORDER_IMPORT,
+    WASM_SEC_ORDER_FUNCTION,
+    WASM_SEC_ORDER_TABLE,
+    WASM_SEC_ORDER_MEMORY,
+    WASM_SEC_ORDER_GLOBAL,
+    WASM_SEC_ORDER_EVENT,
+    WASM_SEC_ORDER_EXPORT,
+    WASM_SEC_ORDER_START,
+    WASM_SEC_ORDER_ELEM,
+    WASM_SEC_ORDER_DATACOUNT,
+    WASM_SEC_ORDER_CODE,
+    WASM_SEC_ORDER_DATA,
 
     // Custom sections
     // "dylink" should be the very first section in the module
-    WASM_SEC_ORDER_DYLINK = 0,
+    WASM_SEC_ORDER_DYLINK,
     // "linking" section requires DATA section in order to validate data symbols
-    WASM_SEC_ORDER_LINKING = 100,
+    WASM_SEC_ORDER_LINKING,
     // Must come after "linking" section in order to validate reloc indexes.
-    WASM_SEC_ORDER_RELOC = 101,
+    WASM_SEC_ORDER_RELOC,
     // "name" section must appear after DATA. Comes after "linking" to allow
     // symbol table to set default function name.
-    WASM_SEC_ORDER_NAME = 102,
+    WASM_SEC_ORDER_NAME,
     // "producers" section must appear after "name" section.
-    WASM_SEC_ORDER_PRODUCERS = 103
+    WASM_SEC_ORDER_PRODUCERS,
+    // "target_features" section must appear after producers section
+    WASM_SEC_ORDER_TARGET_FEATURES,
+
+    // Must be last
+    WASM_NUM_SEC_ORDERS
+
   };
 
+  // Sections that may or may not be present, but cannot be predecessors
+  static int DisallowedPredecessors[WASM_NUM_SEC_ORDERS][WASM_NUM_SEC_ORDERS];
+
   bool isValidSectionOrder(unsigned ID, StringRef CustomSectionName = "");
 
 private:
-  int LastOrder = -1; // Lastly seen known section's order
+  bool Seen[WASM_NUM_SEC_ORDERS] = {}; // Sections that have been seen already
 
   // Returns -1 for unknown sections.
   int getSectionOrder(unsigned ID, StringRef CustomSectionName = "");
diff --git a/linux-x64/clang/include/llvm/Object/WindowsMachineFlag.h b/linux-x64/clang/include/llvm/Object/WindowsMachineFlag.h
new file mode 100644
index 0000000..acc6afc
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Object/WindowsMachineFlag.h
@@ -0,0 +1,33 @@
+//===- WindowsMachineFlag.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Functions for implementing the /machine: flag.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLDRIVERS_MACHINEFLAG_MACHINEFLAG_H
+#define LLVM_TOOLDRIVERS_MACHINEFLAG_MACHINEFLAG_H
+
+namespace llvm {
+
+class StringRef;
+namespace COFF {
+enum MachineTypes : unsigned;
+}
+
+// Returns a user-readable string for ARMNT, ARM64, AMD64, I386.
+// Other MachineTypes values must not be passed in.
+StringRef machineToStr(COFF::MachineTypes MT);
+
+// Maps /machine: arguments to a MachineTypes value.
+// Only returns ARMNT, ARM64, AMD64, I386, or IMAGE_FILE_MACHINE_UNKNOWN.
+COFF::MachineTypes getMachineType(StringRef S);
+
+}
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Object/WindowsResource.h b/linux-x64/clang/include/llvm/Object/WindowsResource.h
index fd04e60..356dcb0 100644
--- a/linux-x64/clang/include/llvm/Object/WindowsResource.h
+++ b/linux-x64/clang/include/llvm/Object/WindowsResource.h
@@ -37,11 +37,14 @@
 #include "llvm/Support/ConvertUTF.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/Error.h"
-#include "llvm/Support/ScopedPrinter.h"
 
 #include <map>
 
 namespace llvm {
+
+class raw_ostream;
+class ScopedPrinter;
+
 namespace object {
 
 class WindowsResource;
@@ -117,6 +120,7 @@
                                            const WindowsResource *Owner);
 
   BinaryStreamReader Reader;
+  const WindowsResource *Owner;
   bool IsStringType;
   ArrayRef<UTF16> Type;
   uint16_t TypeID;
@@ -148,7 +152,7 @@
 public:
   class TreeNode;
   WindowsResourceParser();
-  Error parse(WindowsResource *WR);
+  Error parse(WindowsResource *WR, std::vector<std::string> &Duplicates);
   void printTree(raw_ostream &OS) const;
   const TreeNode &getTree() const { return Root; }
   const ArrayRef<std::vector<uint8_t>> getData() const { return Data; }
@@ -184,21 +188,25 @@
     static std::unique_ptr<TreeNode> createIDNode();
     static std::unique_ptr<TreeNode> createDataNode(uint16_t MajorVersion,
                                                     uint16_t MinorVersion,
-                                                    uint32_t Characteristics);
+                                                    uint32_t Characteristics,
+                                                    uint32_t Origin);
 
     explicit TreeNode(bool IsStringNode);
     TreeNode(uint16_t MajorVersion, uint16_t MinorVersion,
-             uint32_t Characteristics);
+             uint32_t Characteristics, uint32_t Origin);
 
-    void addEntry(const ResourceEntryRef &Entry, bool &IsNewTypeString,
-                  bool &IsNewNameString);
+    bool addEntry(const ResourceEntryRef &Entry, uint32_t Origin,
+                  bool &IsNewTypeString, bool &IsNewNameString,
+                  TreeNode *&Result);
     TreeNode &addTypeNode(const ResourceEntryRef &Entry, bool &IsNewTypeString);
     TreeNode &addNameNode(const ResourceEntryRef &Entry, bool &IsNewNameString);
-    TreeNode &addLanguageNode(const ResourceEntryRef &Entry);
-    TreeNode &addChild(uint32_t ID, bool IsDataNode = false,
-                       uint16_t MajorVersion = 0, uint16_t MinorVersion = 0,
-                       uint32_t Characteristics = 0);
-    TreeNode &addChild(ArrayRef<UTF16> NameRef, bool &IsNewString);
+    bool addLanguageNode(const ResourceEntryRef &Entry, uint32_t Origin,
+                         TreeNode *&Result);
+    bool addDataChild(uint32_t ID, uint16_t MajorVersion, uint16_t MinorVersion,
+                      uint32_t Characteristics, uint32_t Origin,
+                      TreeNode *&Result);
+    TreeNode &addIDChild(uint32_t ID);
+    TreeNode &addNameChild(ArrayRef<UTF16> NameRef, bool &IsNewString);
 
     bool IsDataNode = false;
     uint32_t StringIndex;
@@ -208,18 +216,26 @@
     uint16_t MajorVersion = 0;
     uint16_t MinorVersion = 0;
     uint32_t Characteristics = 0;
+
+    // The .res file that defined this TreeNode, for diagnostics.
+    // Index into InputFilenames.
+    uint32_t Origin;
   };
 
 private:
   TreeNode Root;
   std::vector<std::vector<uint8_t>> Data;
   std::vector<std::vector<UTF16>> StringTable;
+
+  std::vector<std::string> InputFilenames;
 };
 
 Expected<std::unique_ptr<MemoryBuffer>>
 writeWindowsResourceCOFF(llvm::COFF::MachineTypes MachineType,
-                         const WindowsResourceParser &Parser);
+                         const WindowsResourceParser &Parser,
+                         uint32_t TimeDateStamp);
 
+void printResourceTypeName(uint16_t TypeID, raw_ostream &OS);
 } // namespace object
 } // namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/Object/XCOFFObjectFile.h b/linux-x64/clang/include/llvm/Object/XCOFFObjectFile.h
new file mode 100644
index 0000000..cdee712
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Object/XCOFFObjectFile.h
@@ -0,0 +1,268 @@
+//===- XCOFFObjectFile.h - XCOFF object file implementation -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the XCOFFObjectFile class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_OBJECT_XCOFFOBJECTFILE_H
+#define LLVM_OBJECT_XCOFFOBJECTFILE_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/iterator_range.h"
+#include "llvm/BinaryFormat/Magic.h"
+#include "llvm/BinaryFormat/XCOFF.h"
+#include "llvm/MC/SubtargetFeature.h"
+#include "llvm/Object/Binary.h"
+#include "llvm/Object/Error.h"
+#include "llvm/Object/ObjectFile.h"
+#include "llvm/Object/SymbolicFile.h"
+#include "llvm/Support/Casting.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include <cassert>
+#include <cstdint>
+#include <memory>
+#include <system_error>
+
+namespace llvm {
+namespace object {
+
+struct XCOFFFileHeader32 {
+  support::ubig16_t Magic;
+  support::ubig16_t NumberOfSections;
+
+  // Unix time value, value of 0 indicates no timestamp.
+  // Negative values are reserved.
+  support::big32_t TimeStamp;
+
+  support::ubig32_t SymbolTableOffset; // File offset to symbol table.
+  support::big32_t NumberOfSymTableEntries;
+  support::ubig16_t AuxHeaderSize;
+  support::ubig16_t Flags;
+};
+
+struct XCOFFFileHeader64 {
+  support::ubig16_t Magic;
+  support::ubig16_t NumberOfSections;
+
+  // Unix time value, value of 0 indicates no timestamp.
+  // Negative values are reserved.
+  support::big32_t TimeStamp;
+
+  support::ubig64_t SymbolTableOffset; // File offset to symbol table.
+  support::ubig16_t AuxHeaderSize;
+  support::ubig16_t Flags;
+  support::ubig32_t NumberOfSymTableEntries;
+};
+
+struct XCOFFSectionHeader32 {
+  char Name[XCOFF::SectionNameSize];
+  support::ubig32_t PhysicalAddress;
+  support::ubig32_t VirtualAddress;
+  support::ubig32_t SectionSize;
+  support::ubig32_t FileOffsetToRawData;
+  support::ubig32_t FileOffsetToRelocationInfo;
+  support::ubig32_t FileOffsetToLineNumberInfo;
+  support::ubig16_t NumberOfRelocations;
+  support::ubig16_t NumberOfLineNumbers;
+  support::big32_t Flags;
+
+  StringRef getName() const;
+};
+
+struct XCOFFSectionHeader64 {
+  char Name[XCOFF::SectionNameSize];
+  support::ubig64_t PhysicalAddress;
+  support::ubig64_t VirtualAddress;
+  support::ubig64_t SectionSize;
+  support::big64_t FileOffsetToRawData;
+  support::big64_t FileOffsetToRelocationInfo;
+  support::big64_t FileOffsetToLineNumberInfo;
+  support::ubig32_t NumberOfRelocations;
+  support::ubig32_t NumberOfLineNumbers;
+  support::big32_t Flags;
+  char Padding[4];
+
+  StringRef getName() const;
+};
+
+struct XCOFFSymbolEntry {
+  enum { NAME_IN_STR_TBL_MAGIC = 0x0 };
+  typedef struct {
+    support::big32_t Magic; // Zero indicates name in string table.
+    support::ubig32_t Offset;
+  } NameInStrTblType;
+
+  typedef struct {
+    uint8_t LanguageId;
+    uint8_t CpuTypeId;
+  } CFileLanguageIdAndTypeIdType;
+
+  union {
+    char SymbolName[XCOFF::SymbolNameSize];
+    NameInStrTblType NameInStrTbl;
+  };
+
+  support::ubig32_t Value; // Symbol value; storage class-dependent.
+  support::big16_t SectionNumber;
+
+  union {
+    support::ubig16_t SymbolType;
+    CFileLanguageIdAndTypeIdType CFileLanguageIdAndTypeId;
+  };
+
+  XCOFF::StorageClass StorageClass;
+  uint8_t NumberOfAuxEntries;
+};
+
+struct XCOFFStringTable {
+  uint32_t Size;
+  const char *Data;
+};
+
+class XCOFFObjectFile : public ObjectFile {
+private:
+  const void *FileHeader = nullptr;
+  const void *SectionHeaderTable = nullptr;
+
+  const XCOFFSymbolEntry *SymbolTblPtr = nullptr;
+  XCOFFStringTable StringTable = {0, nullptr};
+
+  const XCOFFFileHeader32 *fileHeader32() const;
+  const XCOFFFileHeader64 *fileHeader64() const;
+
+  const XCOFFSectionHeader32 *sectionHeaderTable32() const;
+  const XCOFFSectionHeader64 *sectionHeaderTable64() const;
+
+  size_t getFileHeaderSize() const;
+  size_t getSectionHeaderSize() const;
+
+  const XCOFFSectionHeader32 *toSection32(DataRefImpl Ref) const;
+  const XCOFFSectionHeader64 *toSection64(DataRefImpl Ref) const;
+  void checkSectionAddress(uintptr_t Addr, uintptr_t TableAddr) const;
+  uintptr_t getSectionHeaderTableAddress() const;
+
+  // This returns a pointer to the start of the storage for the name field of
+  // the 32-bit or 64-bit SectionHeader struct. This string is *not* necessarily
+  // null-terminated.
+  const char *getSectionNameInternal(DataRefImpl Sec) const;
+
+  int32_t getSectionFlags(DataRefImpl Sec) const;
+
+  static bool isReservedSectionNumber(int16_t SectionNumber);
+  Expected<DataRefImpl> getSectionByNum(int16_t Num) const;
+
+  // Constructor and "create" factory function. The constructor is only a thin
+  // wrapper around the base constructor. The "create" function fills out the
+  // XCOFF-specific information and performs the error checking along the way.
+  XCOFFObjectFile(unsigned Type, MemoryBufferRef Object);
+  static Expected<std::unique_ptr<XCOFFObjectFile>> create(unsigned Type,
+                                                           MemoryBufferRef MBR);
+
+  // Helper for parsing the StringTable. Returns an 'Error' if parsing failed
+  // and an XCOFFStringTable if parsing succeeded.
+  static Expected<XCOFFStringTable> parseStringTable(const XCOFFObjectFile *Obj,
+                                                     uint64_t Offset);
+
+  // Make a friend so it can call the private 'create' function.
+  friend Expected<std::unique_ptr<ObjectFile>>
+  ObjectFile::createXCOFFObjectFile(MemoryBufferRef Object, unsigned FileType);
+
+public:
+  // Interface inherited from base classes.
+  void moveSymbolNext(DataRefImpl &Symb) const override;
+  uint32_t getSymbolFlags(DataRefImpl Symb) const override;
+  basic_symbol_iterator symbol_begin() const override;
+  basic_symbol_iterator symbol_end() const override;
+
+  Expected<StringRef> getSymbolName(DataRefImpl Symb) const override;
+  Expected<uint64_t> getSymbolAddress(DataRefImpl Symb) const override;
+  uint64_t getSymbolValueImpl(DataRefImpl Symb) const override;
+  uint64_t getCommonSymbolSizeImpl(DataRefImpl Symb) const override;
+  Expected<SymbolRef::Type> getSymbolType(DataRefImpl Symb) const override;
+  Expected<section_iterator> getSymbolSection(DataRefImpl Symb) const override;
+
+  void moveSectionNext(DataRefImpl &Sec) const override;
+  Expected<StringRef> getSectionName(DataRefImpl Sec) const override;
+  uint64_t getSectionAddress(DataRefImpl Sec) const override;
+  uint64_t getSectionIndex(DataRefImpl Sec) const override;
+  uint64_t getSectionSize(DataRefImpl Sec) const override;
+  Expected<ArrayRef<uint8_t>>
+  getSectionContents(DataRefImpl Sec) const override;
+  uint64_t getSectionAlignment(DataRefImpl Sec) const override;
+  bool isSectionCompressed(DataRefImpl Sec) const override;
+  bool isSectionText(DataRefImpl Sec) const override;
+  bool isSectionData(DataRefImpl Sec) const override;
+  bool isSectionBSS(DataRefImpl Sec) const override;
+
+  bool isSectionVirtual(DataRefImpl Sec) const override;
+  relocation_iterator section_rel_begin(DataRefImpl Sec) const override;
+  relocation_iterator section_rel_end(DataRefImpl Sec) const override;
+
+  void moveRelocationNext(DataRefImpl &Rel) const override;
+  uint64_t getRelocationOffset(DataRefImpl Rel) const override;
+  symbol_iterator getRelocationSymbol(DataRefImpl Rel) const override;
+  uint64_t getRelocationType(DataRefImpl Rel) const override;
+  void getRelocationTypeName(DataRefImpl Rel,
+                             SmallVectorImpl<char> &Result) const override;
+
+  section_iterator section_begin() const override;
+  section_iterator section_end() const override;
+  uint8_t getBytesInAddress() const override;
+  StringRef getFileFormatName() const override;
+  Triple::ArchType getArch() const override;
+  SubtargetFeatures getFeatures() const override;
+  Expected<uint64_t> getStartAddress() const override;
+  bool isRelocatableObject() const override;
+
+  // Below here is the non-inherited interface.
+  bool is64Bit() const;
+
+  const XCOFFSymbolEntry *getPointerToSymbolTable() const {
+    assert(!is64Bit() && "Symbol table handling not supported yet.");
+    return SymbolTblPtr;
+  }
+
+  Expected<StringRef>
+  getSymbolSectionName(const XCOFFSymbolEntry *SymEntPtr) const;
+
+  const XCOFFSymbolEntry *toSymbolEntry(DataRefImpl Ref) const;
+
+  // File header related interfaces.
+  uint16_t getMagic() const;
+  uint16_t getNumberOfSections() const;
+  int32_t getTimeStamp() const;
+
+  // Symbol table offset and entry count are handled differently between
+  // XCOFF32 and XCOFF64.
+  uint32_t getSymbolTableOffset32() const;
+  uint64_t getSymbolTableOffset64() const;
+
+  // Note that this value is signed and might return a negative value. Negative
+  // values are reserved for future use.
+  int32_t getRawNumberOfSymbolTableEntries32() const;
+
+  // The sanitized value appropriate to use as an index into the symbol table.
+  uint32_t getLogicalNumberOfSymbolTableEntries32() const;
+
+  uint32_t getNumberOfSymbolTableEntries64() const;
+
+  uint16_t getOptionalHeaderSize() const;
+  uint16_t getFlags() const;
+
+  // Section header table related interfaces.
+  ArrayRef<XCOFFSectionHeader32> sections32() const;
+  ArrayRef<XCOFFSectionHeader64> sections64() const;
+}; // XCOFFObjectFile
+
+} // namespace object
+} // namespace llvm
+
+#endif // LLVM_OBJECT_XCOFFOBJECTFILE_H
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h
index e194e59..68a0fc3 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h
@@ -52,6 +52,7 @@
 // Just use 64, since it can hold 32-bit values too.
 LLVM_YAML_STRONG_TYPEDEF(uint64_t, ELF_SHF)
 LLVM_YAML_STRONG_TYPEDEF(uint16_t, ELF_SHN)
+LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STB)
 LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STT)
 LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STV)
 LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STO)
@@ -74,6 +75,11 @@
   ELF_EM Machine;
   ELF_EF Flags;
   llvm::yaml::Hex64 Entry;
+
+  Optional<llvm::yaml::Hex16> SHEntSize;
+  Optional<llvm::yaml::Hex16> SHOffset;
+  Optional<llvm::yaml::Hex16> SHNum;
+  Optional<llvm::yaml::Hex16> SHStrNdx;
 };
 
 struct SectionName {
@@ -86,25 +92,24 @@
   llvm::yaml::Hex64 VAddr;
   llvm::yaml::Hex64 PAddr;
   Optional<llvm::yaml::Hex64> Align;
+  Optional<llvm::yaml::Hex64> FileSize;
+  Optional<llvm::yaml::Hex64> MemSize;
+  Optional<llvm::yaml::Hex64> Offset;
   std::vector<SectionName> Sections;
 };
 
 struct Symbol {
   StringRef Name;
+  Optional<uint32_t> NameIndex;
   ELF_STT Type;
   StringRef Section;
   Optional<ELF_SHN> Index;
+  ELF_STB Binding;
   llvm::yaml::Hex64 Value;
   llvm::yaml::Hex64 Size;
   uint8_t Other;
 };
 
-struct LocalGlobalWeakSymbols {
-  std::vector<Symbol> Local;
-  std::vector<Symbol> Global;
-  std::vector<Symbol> Weak;
-};
-
 struct SectionOrType {
   StringRef sectionNameOrType;
 };
@@ -121,23 +126,31 @@
     RawContent,
     Relocation,
     NoBits,
+    Verdef,
+    Verneed,
+    Symver,
     MipsABIFlags
   };
   SectionKind Kind;
   StringRef Name;
   ELF_SHT Type;
-  ELF_SHF Flags;
+  Optional<ELF_SHF> Flags;
   llvm::yaml::Hex64 Address;
   StringRef Link;
   llvm::yaml::Hex64 AddressAlign;
   Optional<llvm::yaml::Hex64> EntSize;
 
+  // This can be used to override the sh_offset field. It does not place the
+  // section data at the offset specified. Useful for creating invalid objects.
+  Optional<llvm::yaml::Hex64> ShOffset;
+
   Section(SectionKind Kind) : Kind(Kind) {}
   virtual ~Section();
 };
 
 struct DynamicSection : Section {
   std::vector<DynamicEntry> Entries;
+  Optional<yaml::BinaryRef> Content;
 
   DynamicSection() : Section(SectionKind::Dynamic) {}
 
@@ -147,8 +160,9 @@
 };
 
 struct RawContentSection : Section {
-  yaml::BinaryRef Content;
-  llvm::yaml::Hex64 Size;
+  Optional<yaml::BinaryRef> Content;
+  Optional<llvm::yaml::Hex64> Size;
+  Optional<llvm::yaml::Hex64> Info;
 
   RawContentSection() : Section(SectionKind::RawContent) {}
 
@@ -167,6 +181,59 @@
   }
 };
 
+struct VernauxEntry {
+  uint32_t Hash;
+  uint16_t Flags;
+  uint16_t Other;
+  StringRef Name;
+};
+
+struct VerneedEntry {
+  uint16_t Version;
+  StringRef File;
+  std::vector<VernauxEntry> AuxV;
+};
+
+struct VerneedSection : Section {
+  std::vector<VerneedEntry> VerneedV;
+  llvm::yaml::Hex64 Info;
+
+  VerneedSection() : Section(SectionKind::Verneed) {}
+
+  static bool classof(const Section *S) {
+    return S->Kind == SectionKind::Verneed;
+  }
+};
+
+struct SymverSection : Section {
+  std::vector<uint16_t> Entries;
+
+  SymverSection() : Section(SectionKind::Symver) {}
+
+  static bool classof(const Section *S) {
+    return S->Kind == SectionKind::Symver;
+  }
+};
+
+struct VerdefEntry {
+  uint16_t Version;
+  uint16_t Flags;
+  uint16_t VersionNdx;
+  uint32_t Hash;
+  std::vector<StringRef> VerNames;
+};
+
+struct VerdefSection : Section {
+  std::vector<VerdefEntry> Entries;
+  llvm::yaml::Hex64 Info;
+
+  VerdefSection() : Section(SectionKind::Verdef) {}
+
+  static bool classof(const Section *S) {
+    return S->Kind == SectionKind::Verdef;
+  }
+};
+
 struct Group : Section {
   // Members of a group contain a flag and a list of section indices
   // that are part of the group.
@@ -227,8 +294,8 @@
   // cleaner and nicer if we read them from the YAML as a separate
   // top-level key, which automatically ensures that invariants like there
   // being a single SHT_SYMTAB section are upheld.
-  LocalGlobalWeakSymbols Symbols;
-  LocalGlobalWeakSymbols DynamicSymbols;
+  std::vector<Symbol> Symbols;
+  std::vector<Symbol> DynamicSymbols;
 };
 
 } // end namespace ELFYAML
@@ -238,6 +305,9 @@
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::ProgramHeader)
 LLVM_YAML_IS_SEQUENCE_VECTOR(std::unique_ptr<llvm::ELFYAML::Section>)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::Symbol)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::VerdefEntry)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::VernauxEntry)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::VerneedEntry)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::Relocation)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::SectionOrType)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::SectionName)
@@ -297,6 +367,10 @@
   static void enumeration(IO &IO, ELFYAML::ELF_SHN &Value);
 };
 
+template <> struct ScalarEnumerationTraits<ELFYAML::ELF_STB> {
+  static void enumeration(IO &IO, ELFYAML::ELF_STB &Value);
+};
+
 template <>
 struct ScalarEnumerationTraits<ELFYAML::ELF_STT> {
   static void enumeration(IO &IO, ELFYAML::ELF_STT &Value);
@@ -372,15 +446,22 @@
   static StringRef validate(IO &IO, ELFYAML::Symbol &Symbol);
 };
 
-template <>
-struct MappingTraits<ELFYAML::LocalGlobalWeakSymbols> {
-  static void mapping(IO &IO, ELFYAML::LocalGlobalWeakSymbols &Symbols);
-};
-
 template <> struct MappingTraits<ELFYAML::DynamicEntry> {
   static void mapping(IO &IO, ELFYAML::DynamicEntry &Rel);
 };
 
+template <> struct MappingTraits<ELFYAML::VerdefEntry> {
+  static void mapping(IO &IO, ELFYAML::VerdefEntry &E);
+};
+
+template <> struct MappingTraits<ELFYAML::VerneedEntry> {
+  static void mapping(IO &IO, ELFYAML::VerneedEntry &E);
+};
+
+template <> struct MappingTraits<ELFYAML::VernauxEntry> {
+  static void mapping(IO &IO, ELFYAML::VernauxEntry &E);
+};
+
 template <> struct MappingTraits<ELFYAML::Relocation> {
   static void mapping(IO &IO, ELFYAML::Relocation &Rel);
 };
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/MinidumpYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/MinidumpYAML.h
new file mode 100644
index 0000000..39fdd62
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ObjectYAML/MinidumpYAML.h
@@ -0,0 +1,239 @@
+//===- MinidumpYAML.h - Minidump YAMLIO implementation ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_OBJECTYAML_MINIDUMPYAML_H
+#define LLVM_OBJECTYAML_MINIDUMPYAML_H
+
+#include "llvm/BinaryFormat/Minidump.h"
+#include "llvm/Object/Minidump.h"
+#include "llvm/ObjectYAML/YAML.h"
+#include "llvm/Support/YAMLTraits.h"
+
+namespace llvm {
+namespace MinidumpYAML {
+
+/// The base class for all minidump streams. The "Type" of the stream
+/// corresponds to the Stream Type field in the minidump file. The "Kind" field
+/// specifies how are we going to treat it. For highly specialized streams (e.g.
+/// SystemInfo), there is a 1:1 mapping between Types and Kinds, but in general
+/// one stream Kind can be used to represent multiple stream Types (e.g. any
+/// unrecognised stream Type will be handled via RawContentStream). The mapping
+/// from Types to Kinds is fixed and given by the static getKind function.
+struct Stream {
+  enum class StreamKind {
+    MemoryList,
+    ModuleList,
+    RawContent,
+    SystemInfo,
+    TextContent,
+    ThreadList,
+  };
+
+  Stream(StreamKind Kind, minidump::StreamType Type) : Kind(Kind), Type(Type) {}
+  virtual ~Stream(); // anchor
+
+  const StreamKind Kind;
+  const minidump::StreamType Type;
+
+  /// Get the stream Kind used for representing streams of a given Type.
+  static StreamKind getKind(minidump::StreamType Type);
+
+  /// Create an empty stream of the given Type.
+  static std::unique_ptr<Stream> create(minidump::StreamType Type);
+
+  /// Create a stream from the given stream directory entry.
+  static Expected<std::unique_ptr<Stream>>
+  create(const minidump::Directory &StreamDesc,
+         const object::MinidumpFile &File);
+};
+
+namespace detail {
+/// A stream representing a list of abstract entries in a minidump stream. Its
+/// instantiations can be used to represent the ModuleList stream and other
+/// streams with a similar structure.
+template <typename EntryT> struct ListStream : public Stream {
+  using entry_type = EntryT;
+
+  std::vector<entry_type> Entries;
+
+  explicit ListStream(std::vector<entry_type> Entries = {})
+      : Stream(EntryT::Kind, EntryT::Type), Entries(std::move(Entries)) {}
+
+  static bool classof(const Stream *S) { return S->Kind == EntryT::Kind; }
+};
+
+/// A structure containing all data belonging to a single minidump module.
+struct ParsedModule {
+  static constexpr Stream::StreamKind Kind = Stream::StreamKind::ModuleList;
+  static constexpr minidump::StreamType Type = minidump::StreamType::ModuleList;
+
+  minidump::Module Entry;
+  std::string Name;
+  yaml::BinaryRef CvRecord;
+  yaml::BinaryRef MiscRecord;
+};
+
+/// A structure containing all data belonging to a single minidump thread.
+struct ParsedThread {
+  static constexpr Stream::StreamKind Kind = Stream::StreamKind::ThreadList;
+  static constexpr minidump::StreamType Type = minidump::StreamType::ThreadList;
+
+  minidump::Thread Entry;
+  yaml::BinaryRef Stack;
+  yaml::BinaryRef Context;
+};
+
+/// A structure containing all data describing a single memory region.
+struct ParsedMemoryDescriptor {
+  static constexpr Stream::StreamKind Kind = Stream::StreamKind::MemoryList;
+  static constexpr minidump::StreamType Type = minidump::StreamType::MemoryList;
+
+  minidump::MemoryDescriptor Entry;
+  yaml::BinaryRef Content;
+};
+} // namespace detail
+
+using ModuleListStream = detail::ListStream<detail::ParsedModule>;
+using ThreadListStream = detail::ListStream<detail::ParsedThread>;
+using MemoryListStream = detail::ListStream<detail::ParsedMemoryDescriptor>;
+
+/// A minidump stream represented as a sequence of hex bytes. This is used as a
+/// fallback when no other stream kind is suitable.
+struct RawContentStream : public Stream {
+  yaml::BinaryRef Content;
+  yaml::Hex32 Size;
+
+  RawContentStream(minidump::StreamType Type, ArrayRef<uint8_t> Content = {})
+      : Stream(StreamKind::RawContent, Type), Content(Content),
+        Size(Content.size()) {}
+
+  static bool classof(const Stream *S) {
+    return S->Kind == StreamKind::RawContent;
+  }
+};
+
+/// SystemInfo minidump stream.
+struct SystemInfoStream : public Stream {
+  minidump::SystemInfo Info;
+  std::string CSDVersion;
+
+  explicit SystemInfoStream(const minidump::SystemInfo &Info,
+                            std::string CSDVersion)
+      : Stream(StreamKind::SystemInfo, minidump::StreamType::SystemInfo),
+        Info(Info), CSDVersion(std::move(CSDVersion)) {}
+
+  SystemInfoStream()
+      : Stream(StreamKind::SystemInfo, minidump::StreamType::SystemInfo) {
+    memset(&Info, 0, sizeof(Info));
+  }
+
+  static bool classof(const Stream *S) {
+    return S->Kind == StreamKind::SystemInfo;
+  }
+};
+
+/// A StringRef, which is printed using YAML block notation.
+LLVM_YAML_STRONG_TYPEDEF(StringRef, BlockStringRef)
+
+/// A minidump stream containing textual data (typically, the contents of a
+/// /proc/<pid> file on linux).
+struct TextContentStream : public Stream {
+  BlockStringRef Text;
+
+  TextContentStream(minidump::StreamType Type, StringRef Text = {})
+      : Stream(StreamKind::TextContent, Type), Text(Text) {}
+
+  static bool classof(const Stream *S) {
+    return S->Kind == StreamKind::TextContent;
+  }
+};
+
+/// The top level structure representing a minidump object, consisting of a
+/// minidump header, and zero or more streams. To construct an Object from a
+/// minidump file, use the static create function. To serialize to/from yaml,
+/// use the appropriate streaming operator on a yaml stream.
+struct Object {
+  Object() = default;
+  Object(const Object &) = delete;
+  Object &operator=(const Object &) = delete;
+  Object(Object &&) = default;
+  Object &operator=(Object &&) = default;
+
+  Object(const minidump::Header &Header,
+         std::vector<std::unique_ptr<Stream>> Streams)
+      : Header(Header), Streams(std::move(Streams)) {}
+
+  /// The minidump header.
+  minidump::Header Header;
+
+  /// The list of streams in this minidump object.
+  std::vector<std::unique_ptr<Stream>> Streams;
+
+  static Expected<Object> create(const object::MinidumpFile &File);
+};
+
+/// Serialize the minidump file represented by Obj to OS in binary form.
+void writeAsBinary(Object &Obj, raw_ostream &OS);
+
+/// Serialize the yaml string as a minidump file to OS in binary form.
+Error writeAsBinary(StringRef Yaml, raw_ostream &OS);
+
+} // namespace MinidumpYAML
+
+namespace yaml {
+template <> struct BlockScalarTraits<MinidumpYAML::BlockStringRef> {
+  static void output(const MinidumpYAML::BlockStringRef &Text, void *,
+                     raw_ostream &OS) {
+    OS << Text;
+  }
+
+  static StringRef input(StringRef Scalar, void *,
+                         MinidumpYAML::BlockStringRef &Text) {
+    Text = Scalar;
+    return "";
+  }
+};
+
+template <> struct MappingTraits<std::unique_ptr<MinidumpYAML::Stream>> {
+  static void mapping(IO &IO, std::unique_ptr<MinidumpYAML::Stream> &S);
+  static StringRef validate(IO &IO, std::unique_ptr<MinidumpYAML::Stream> &S);
+};
+
+template <> struct MappingContextTraits<minidump::MemoryDescriptor, BinaryRef> {
+  static void mapping(IO &IO, minidump::MemoryDescriptor &Memory,
+                      BinaryRef &Content);
+};
+
+} // namespace yaml
+
+} // namespace llvm
+
+LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::minidump::ProcessorArchitecture)
+LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::minidump::OSPlatform)
+LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::minidump::StreamType)
+
+LLVM_YAML_DECLARE_MAPPING_TRAITS(llvm::minidump::CPUInfo::ArmInfo)
+LLVM_YAML_DECLARE_MAPPING_TRAITS(llvm::minidump::CPUInfo::OtherInfo)
+LLVM_YAML_DECLARE_MAPPING_TRAITS(llvm::minidump::CPUInfo::X86Info)
+LLVM_YAML_DECLARE_MAPPING_TRAITS(llvm::minidump::VSFixedFileInfo)
+
+LLVM_YAML_DECLARE_MAPPING_TRAITS(
+    llvm::MinidumpYAML::MemoryListStream::entry_type)
+LLVM_YAML_DECLARE_MAPPING_TRAITS(
+    llvm::MinidumpYAML::ModuleListStream::entry_type)
+LLVM_YAML_DECLARE_MAPPING_TRAITS(
+    llvm::MinidumpYAML::ThreadListStream::entry_type)
+
+LLVM_YAML_IS_SEQUENCE_VECTOR(std::unique_ptr<llvm::MinidumpYAML::Stream>)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MinidumpYAML::MemoryListStream::entry_type)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MinidumpYAML::ModuleListStream::entry_type)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MinidumpYAML::ThreadListStream::entry_type)
+
+LLVM_YAML_DECLARE_MAPPING_TRAITS(llvm::MinidumpYAML::Object)
+
+#endif // LLVM_OBJECTYAML_MINIDUMPYAML_H
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/ObjectYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/ObjectYAML.h
index 56f5f39..0015fd3 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/ObjectYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/ObjectYAML.h
@@ -12,6 +12,7 @@
 #include "llvm/ObjectYAML/COFFYAML.h"
 #include "llvm/ObjectYAML/ELFYAML.h"
 #include "llvm/ObjectYAML/MachOYAML.h"
+#include "llvm/ObjectYAML/MinidumpYAML.h"
 #include "llvm/ObjectYAML/WasmYAML.h"
 #include "llvm/Support/YAMLTraits.h"
 #include <memory>
@@ -26,6 +27,7 @@
   std::unique_ptr<COFFYAML::Object> Coff;
   std::unique_ptr<MachOYAML::Object> MachO;
   std::unique_ptr<MachOYAML::UniversalBinary> FatMachO;
+  std::unique_ptr<MinidumpYAML::Object> Minidump;
   std::unique_ptr<WasmYAML::Object> Wasm;
 };
 
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h
index f5260bb..2411dc7 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h
@@ -38,6 +38,7 @@
 LLVM_YAML_STRONG_TYPEDEF(uint32_t, SegmentFlags)
 LLVM_YAML_STRONG_TYPEDEF(uint32_t, LimitFlags)
 LLVM_YAML_STRONG_TYPEDEF(uint32_t, ComdatKind)
+LLVM_YAML_STRONG_TYPEDEF(uint32_t, FeaturePolicyPrefix)
 
 struct FileHeader {
   yaml::Hex32 Version;
@@ -111,8 +112,9 @@
 };
 
 struct DataSegment {
-  uint32_t MemoryIndex;
   uint32_t SectionOffset;
+  uint32_t InitFlags;
+  uint32_t MemoryIndex;
   wasm::WasmInitExpr Offset;
   yaml::BinaryRef Content;
 };
@@ -127,6 +129,11 @@
   std::string Version;
 };
 
+struct FeatureEntry {
+  FeaturePolicyPrefix Prefix;
+  std::string Name;
+};
+
 struct SegmentInfo {
   uint32_t Index;
   StringRef Name;
@@ -241,6 +248,17 @@
   std::vector<ProducerEntry> SDKs;
 };
 
+struct TargetFeaturesSection : CustomSection {
+  TargetFeaturesSection() : CustomSection("target_features") {}
+
+  static bool classof(const Section *S) {
+    auto C = dyn_cast<CustomSection>(S);
+    return C && C->Name == "target_features";
+  }
+
+  std::vector<FeatureEntry> Features;
+};
+
 struct TypeSection : Section {
   TypeSection() : Section(wasm::WASM_SEC_TYPE) {}
 
@@ -361,6 +379,16 @@
   std::vector<DataSegment> Segments;
 };
 
+struct DataCountSection : Section {
+  DataCountSection() : Section(wasm::WASM_SEC_DATACOUNT) {}
+
+  static bool classof(const Section *S) {
+    return S->Type == wasm::WASM_SEC_DATACOUNT;
+  }
+
+  uint32_t Count;
+};
+
 struct Object {
   FileHeader Header;
   std::vector<std::unique_ptr<Section>> Sections;
@@ -384,6 +412,7 @@
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Relocation)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::NameEntry)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::ProducerEntry)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::FeatureEntry)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::SegmentInfo)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::SymbolInfo)
 LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::InitFunction)
@@ -466,6 +495,14 @@
   static void mapping(IO &IO, WasmYAML::ProducerEntry &ProducerEntry);
 };
 
+template <> struct ScalarEnumerationTraits<WasmYAML::FeaturePolicyPrefix> {
+  static void enumeration(IO &IO, WasmYAML::FeaturePolicyPrefix &Prefix);
+};
+
+template <> struct MappingTraits<WasmYAML::FeatureEntry> {
+  static void mapping(IO &IO, WasmYAML::FeatureEntry &FeatureEntry);
+};
+
 template <> struct MappingTraits<WasmYAML::SegmentInfo> {
   static void mapping(IO &IO, WasmYAML::SegmentInfo &SegmentInfo);
 };
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/XCOFFYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/XCOFFYAML.h
new file mode 100644
index 0000000..f99004e
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ObjectYAML/XCOFFYAML.h
@@ -0,0 +1,71 @@
+//===----- XCOFFYAML.h - XCOFF YAMLIO implementation ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares classes for handling the YAML representation of XCOFF.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_OBJECTYAML_XCOFFYAML_H
+#define LLVM_OBJECTYAML_XCOFFYAML_H
+
+#include "llvm/BinaryFormat/XCOFF.h"
+#include "llvm/ObjectYAML/YAML.h"
+#include <vector>
+
+namespace llvm {
+namespace XCOFFYAML {
+
+struct FileHeader {
+  llvm::yaml::Hex16 Magic;
+  uint16_t NumberOfSections;
+  int32_t TimeStamp;
+  llvm::yaml::Hex32 SymbolTableOffset; // File offset to symbol table.
+  int32_t NumberOfSymTableEntries;
+  uint16_t AuxHeaderSize;
+  llvm::yaml::Hex16 Flags;
+};
+
+struct Symbol {
+  StringRef SymbolName;
+  llvm::yaml::Hex32 Value; // Symbol value; storage class-dependent.
+  StringRef SectionName;
+  llvm::yaml::Hex16 Type;
+  XCOFF::StorageClass StorageClass;
+  uint8_t NumberOfAuxEntries; // Number of auxiliary entries
+};
+
+struct Object {
+  FileHeader Header;
+  std::vector<Symbol> Symbols;
+  Object();
+};
+} // namespace XCOFFYAML
+} // namespace llvm
+LLVM_YAML_IS_SEQUENCE_VECTOR(XCOFFYAML::Symbol)
+namespace llvm {
+namespace yaml {
+
+template <> struct ScalarEnumerationTraits<XCOFF::StorageClass> {
+  static void enumeration(IO &IO, XCOFF::StorageClass &Value);
+};
+
+template <> struct MappingTraits<XCOFFYAML::FileHeader> {
+  static void mapping(IO &IO, XCOFFYAML::FileHeader &H);
+};
+
+template <> struct MappingTraits<XCOFFYAML::Object> {
+  static void mapping(IO &IO, XCOFFYAML::Object &Obj);
+};
+
+template <> struct MappingTraits<XCOFFYAML::Symbol> {
+  static void mapping(IO &IO, XCOFFYAML::Symbol &S);
+};
+
+} // namespace yaml
+} // namespace llvm
+
+#endif // LLVM_OBJECTYAML_XCOFFYAML_H
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/YAML.h b/linux-x64/clang/include/llvm/ObjectYAML/YAML.h
index a14bfbc..3701410 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/YAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/YAML.h
@@ -73,8 +73,7 @@
 public:
   BinaryRef() = default;
   BinaryRef(ArrayRef<uint8_t> Data) : Data(Data), DataIsHexString(false) {}
-  BinaryRef(StringRef Data)
-      : Data(reinterpret_cast<const uint8_t *>(Data.data()), Data.size()) {}
+  BinaryRef(StringRef Data) : Data(arrayRefFromStringRef(Data)) {}
 
   /// The number of bytes that are represented by this BinaryRef.
   /// This is the number of bytes that writeAsBinary() will write.
diff --git a/linux-x64/clang/include/llvm/Option/Arg.h b/linux-x64/clang/include/llvm/Option/Arg.h
index d3623a0..22e2bcf 100644
--- a/linux-x64/clang/include/llvm/Option/Arg.h
+++ b/linux-x64/clang/include/llvm/Option/Arg.h
@@ -58,6 +58,11 @@
   /// The argument values, as C strings.
   SmallVector<const char *, 2> Values;
 
+  /// If this arg was created through an alias, this is the original alias arg.
+  /// For example, *this might be "-finput-charset=utf-8" and Alias might
+  /// point to an arg representing "/source-charset:utf-8".
+  std::unique_ptr<Arg> Alias;
+
 public:
   Arg(const Option Opt, StringRef Spelling, unsigned Index,
       const Arg *BaseArg = nullptr);
@@ -70,7 +75,15 @@
   ~Arg();
 
   const Option &getOption() const { return Opt; }
+
+  /// Returns the used prefix and name of the option:
+  /// For `--foo=bar`, returns `--foo=`.
+  /// This is often the wrong function to call:
+  /// * Use `getValue()` to get `bar`.
+  /// * Use `getAsString()` to get a string suitable for printing an Arg in
+  ///   a diagnostic.
   StringRef getSpelling() const { return Spelling; }
+
   unsigned getIndex() const { return Index; }
 
   /// Return the base argument which generated this arg.
@@ -82,6 +95,11 @@
   }
   void setBaseArg(const Arg *BaseArg) { this->BaseArg = BaseArg; }
 
+  /// Args are converted to their unaliased form.  For args that originally
+  /// came from an alias, this returns the alias the arg was produced from.
+  const Arg* getAlias() const { return Alias.get(); }
+  void setAlias(std::unique_ptr<Arg> Alias) { this->Alias = std::move(Alias); }
+
   bool getOwnsValues() const { return OwnsValues; }
   void setOwnsValues(bool Value) const { OwnsValues = Value; }
 
@@ -119,8 +137,10 @@
   void print(raw_ostream &O) const;
   void dump() const;
 
-  /// Return a formatted version of the argument and
-  /// its values, for debugging and diagnostics.
+  /// Return a formatted version of the argument and its values, for
+  /// diagnostics. Since this is for diagnostics, if this Arg was produced
+  /// through an alias, this returns the string representation of the alias
+  /// that the user wrote.
   std::string getAsString(const ArgList &Args) const;
 };
 
diff --git a/linux-x64/clang/include/llvm/Option/ArgList.h b/linux-x64/clang/include/llvm/Option/ArgList.h
index a0cd2b8..74bfadc 100644
--- a/linux-x64/clang/include/llvm/Option/ArgList.h
+++ b/linux-x64/clang/include/llvm/Option/ArgList.h
@@ -301,10 +301,12 @@
   bool hasFlag(OptSpecifier Pos, OptSpecifier PosAlias, OptSpecifier Neg,
                bool Default = true) const;
 
-  /// AddLastArg - Render only the last argument match \p Id0, if present.
-  void AddLastArg(ArgStringList &Output, OptSpecifier Id0) const;
-  void AddLastArg(ArgStringList &Output, OptSpecifier Id0,
-                  OptSpecifier Id1) const;
+  /// Render only the last argument match \p Id0, if present.
+  template<typename ...OptSpecifiers>
+  void AddLastArg(ArgStringList &Output, OptSpecifiers ...Ids) const {
+    if (Arg *A = getLastArg(Ids...)) // Calls claim() on all Ids's Args.
+      A->render(*this, Output);
+  }
 
   /// AddAllArgsExcept - Render all arguments matching any of the given ids
   /// and not matching any of the excluded ids.
diff --git a/linux-x64/clang/include/llvm/Option/Option.h b/linux-x64/clang/include/llvm/Option/Option.h
index c11487e..33813d2 100644
--- a/linux-x64/clang/include/llvm/Option/Option.h
+++ b/linux-x64/clang/include/llvm/Option/Option.h
@@ -206,6 +206,11 @@
   ///                start.
   Arg *accept(const ArgList &Args, unsigned &Index, unsigned ArgSize) const;
 
+private:
+  Arg *acceptInternal(const ArgList &Args, unsigned &Index,
+                      unsigned ArgSize) const;
+
+public:
   void print(raw_ostream &O) const;
   void dump() const;
 };
diff --git a/linux-x64/clang/include/llvm/Passes/PassBuilder.h b/linux-x64/clang/include/llvm/Passes/PassBuilder.h
index 9c915c6..5e66605 100644
--- a/linux-x64/clang/include/llvm/Passes/PassBuilder.h
+++ b/linux-x64/clang/include/llvm/Passes/PassBuilder.h
@@ -31,28 +31,76 @@
 
 /// A struct capturing PGO tunables.
 struct PGOOptions {
-  PGOOptions(std::string ProfileGenFile = "", std::string ProfileUseFile = "",
-             std::string SampleProfileFile = "",
-             std::string ProfileRemappingFile = "",
-             bool RunProfileGen = false, bool SamplePGOSupport = false)
-      : ProfileGenFile(ProfileGenFile), ProfileUseFile(ProfileUseFile),
-        SampleProfileFile(SampleProfileFile),
-        ProfileRemappingFile(ProfileRemappingFile),
-        RunProfileGen(RunProfileGen),
-        SamplePGOSupport(SamplePGOSupport || !SampleProfileFile.empty()) {
-    assert((RunProfileGen ||
-            !SampleProfileFile.empty() ||
-            !ProfileUseFile.empty() ||
-            SamplePGOSupport) && "Illegal PGOOptions.");
+  enum PGOAction { NoAction, IRInstr, IRUse, SampleUse };
+  enum CSPGOAction { NoCSAction, CSIRInstr, CSIRUse };
+  PGOOptions(std::string ProfileFile = "", std::string CSProfileGenFile = "",
+             std::string ProfileRemappingFile = "", PGOAction Action = NoAction,
+             CSPGOAction CSAction = NoCSAction, bool SamplePGOSupport = false)
+      : ProfileFile(ProfileFile), CSProfileGenFile(CSProfileGenFile),
+        ProfileRemappingFile(ProfileRemappingFile), Action(Action),
+        CSAction(CSAction),
+        SamplePGOSupport(SamplePGOSupport || Action == SampleUse) {
+    // Note, we do allow ProfileFile.empty() for Action=IRUse LTO can
+    // callback with IRUse action without ProfileFile.
+
+    // If there is a CSAction, PGOAction cannot be IRInstr or SampleUse.
+    assert(this->CSAction == NoCSAction ||
+           (this->Action != IRInstr && this->Action != SampleUse));
+
+    // For CSIRInstr, CSProfileGenFile also needs to be nonempty.
+    assert(this->CSAction != CSIRInstr || !this->CSProfileGenFile.empty());
+
+    // If CSAction is CSIRUse, PGOAction needs to be IRUse as they share
+    // a profile.
+    assert(this->CSAction != CSIRUse || this->Action == IRUse);
+
+    // If neither Action nor CSAction, SamplePGOSupport needs to be true.
+    assert(this->Action != NoAction || this->CSAction != NoCSAction ||
+           this->SamplePGOSupport);
   }
-  std::string ProfileGenFile;
-  std::string ProfileUseFile;
-  std::string SampleProfileFile;
+  std::string ProfileFile;
+  std::string CSProfileGenFile;
   std::string ProfileRemappingFile;
-  bool RunProfileGen;
+  PGOAction Action;
+  CSPGOAction CSAction;
   bool SamplePGOSupport;
 };
 
+/// Tunable parameters for passes in the default pipelines.
+class PipelineTuningOptions {
+public:
+  /// Constructor sets pipeline tuning defaults based on cl::opts. Each option
+  /// can be set in the PassBuilder when using a LLVM as a library.
+  PipelineTuningOptions();
+
+  /// Tuning option to set loop interleaving on/off. Its default value is that
+  /// of the flag: `-interleave-loops`.
+  bool LoopInterleaving;
+
+  /// Tuning option to enable/disable loop vectorization. Its default value is
+  /// that of the flag: `-vectorize-loops`.
+  bool LoopVectorization;
+
+  /// Tuning option to enable/disable slp loop vectorization. Its default value
+  /// is that of the flag: `vectorize-slp`.
+  bool SLPVectorization;
+
+  /// Tuning option to enable/disable loop unrolling. Its default value is true.
+  bool LoopUnrolling;
+
+  /// Tuning option to forget all SCEV loops in LoopUnroll. Its default value
+  /// is that of the flag: `-forget-scev-loop-unroll`.
+  bool ForgetAllSCEVInLoopUnroll;
+
+  /// Tuning option to cap the number of calls to retrive clobbering accesses in
+  /// MemorySSA, in LICM.
+  unsigned LicmMssaOptCap;
+
+  /// Tuning option to disable promotion to scalars in LICM with MemorySSA, if
+  /// the number of access is too large.
+  unsigned LicmMssaNoAccForPromotionCap;
+};
+
 /// This class provides access to building LLVM's passes.
 ///
 /// Its members provide the baseline state available to passes during their
@@ -61,6 +109,7 @@
 /// construction.
 class PassBuilder {
   TargetMachine *TM;
+  PipelineTuningOptions PTO;
   Optional<PGOOptions> PGOOpt;
   PassInstrumentationCallbacks *PIC;
 
@@ -84,9 +133,9 @@
   enum class ThinLTOPhase {
     /// No ThinLTO behavior needed.
     None,
-    // ThinLTO prelink (summary) phase.
+    /// ThinLTO prelink (summary) phase.
     PreLink,
-    // ThinLTO postlink (backend compile) phase.
+    /// ThinLTO postlink (backend compile) phase.
     PostLink
   };
 
@@ -177,14 +226,15 @@
   };
 
   explicit PassBuilder(TargetMachine *TM = nullptr,
+                       PipelineTuningOptions PTO = PipelineTuningOptions(),
                        Optional<PGOOptions> PGOOpt = None,
                        PassInstrumentationCallbacks *PIC = nullptr)
-      : TM(TM), PGOOpt(PGOOpt), PIC(PIC) {}
+      : TM(TM), PTO(PTO), PGOOpt(PGOOpt), PIC(PIC) {}
 
   /// Cross register the analysis managers through their proxies.
   ///
   /// This is an interface that can be used to cross register each
-  // AnalysisManager with all the others analysis managers.
+  /// AnalysisManager with all the others analysis managers.
   void crossRegisterProxies(LoopAnalysisManager &LAM,
                             FunctionAnalysisManager &FAM,
                             CGSCCAnalysisManager &CGAM,
@@ -274,7 +324,8 @@
   /// require some transformations for semantic reasons, they should explicitly
   /// build them.
   ModulePassManager buildModuleOptimizationPipeline(OptimizationLevel Level,
-                                                    bool DebugLogging = false);
+                                                    bool DebugLogging = false,
+                                                    bool LTOPreLink = false);
 
   /// Build a per-module default optimization pipeline.
   ///
@@ -288,7 +339,8 @@
   /// require some transformations for semantic reasons, they should explicitly
   /// build them.
   ModulePassManager buildPerModuleDefaultPipeline(OptimizationLevel Level,
-                                                  bool DebugLogging = false);
+                                                  bool DebugLogging = false,
+                                                  bool LTOPreLink = false);
 
   /// Build a pre-link, ThinLTO-targeting default optimization pipeline to
   /// a pass manager.
@@ -391,7 +443,7 @@
   /// {{@ Parse a textual pass pipeline description into a specific PassManager
   ///
   /// Automatic deduction of an appropriate pass manager stack is not supported.
-  /// For example, to insert a loop pass 'lpass' into a FunctinoPassManager,
+  /// For example, to insert a loop pass 'lpass' into a FunctionPassManager,
   /// this is the valid pipeline text:
   ///
   ///   function(lpass)
@@ -605,9 +657,8 @@
                                 bool VerifyEachPass, bool DebugLogging);
 
   void addPGOInstrPasses(ModulePassManager &MPM, bool DebugLogging,
-                         OptimizationLevel Level, bool RunProfileGen,
-                         std::string ProfileGenFile,
-                         std::string ProfileUseFile,
+                         OptimizationLevel Level, bool RunProfileGen, bool IsCS,
+                         std::string ProfileFile,
                          std::string ProfileRemappingFile);
 
   void invokePeepholeEPCallbacks(FunctionPassManager &, OptimizationLevel);
diff --git a/linux-x64/clang/include/llvm/Passes/StandardInstrumentations.h b/linux-x64/clang/include/llvm/Passes/StandardInstrumentations.h
index 5672543..3d3002e 100644
--- a/linux-x64/clang/include/llvm/Passes/StandardInstrumentations.h
+++ b/linux-x64/clang/include/llvm/Passes/StandardInstrumentations.h
@@ -63,6 +63,8 @@
   StandardInstrumentations() = default;
 
   void registerCallbacks(PassInstrumentationCallbacks &PIC);
+
+  TimePassesHandler &getTimePasses() { return TimePasses; }
 };
 } // namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
index dbb1976..57a2aae 100644
--- a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
+++ b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
@@ -203,9 +203,15 @@
   BinaryCoverageReader(const BinaryCoverageReader &) = delete;
   BinaryCoverageReader &operator=(const BinaryCoverageReader &) = delete;
 
+  static Expected<std::vector<std::unique_ptr<BinaryCoverageReader>>>
+  create(MemoryBufferRef ObjectBuffer, StringRef Arch,
+         SmallVectorImpl<std::unique_ptr<MemoryBuffer>> &ObjectFileBuffers);
+
   static Expected<std::unique_ptr<BinaryCoverageReader>>
-  create(std::unique_ptr<MemoryBuffer> &ObjectBuffer,
-         StringRef Arch);
+  createCoverageReaderFromBuffer(StringRef Coverage,
+                                 InstrProfSymtab &&ProfileNames,
+                                 uint8_t BytesInAddress,
+                                 support::endianness Endian);
 
   Error readNextRecord(CoverageMappingRecord &Record) override;
 };
diff --git a/linux-x64/clang/include/llvm/ProfileData/GCOV.h b/linux-x64/clang/include/llvm/ProfileData/GCOV.h
index 27b76b5..004ff3f 100644
--- a/linux-x64/clang/include/llvm/ProfileData/GCOV.h
+++ b/linux-x64/clang/include/llvm/ProfileData/GCOV.h
@@ -44,9 +44,10 @@
 
 /// A struct for passing gcov options between functions.
 struct Options {
-  Options(bool A, bool B, bool C, bool F, bool P, bool U, bool L, bool N)
+  Options(bool A, bool B, bool C, bool F, bool P, bool U, bool L, bool N, bool X)
       : AllBlocks(A), BranchInfo(B), BranchCount(C), FuncCoverage(F),
-        PreservePaths(P), UncondBranch(U), LongFileNames(L), NoOutput(N) {}
+        PreservePaths(P), UncondBranch(U), LongFileNames(L), NoOutput(N),
+        HashFilenames(X) {}
 
   bool AllBlocks;
   bool BranchInfo;
@@ -56,6 +57,7 @@
   bool UncondBranch;
   bool LongFileNames;
   bool NoOutput;
+  bool HashFilenames;
 };
 
 } // end namespace GCOV
@@ -316,12 +318,6 @@
     uint64_t Count = 0;
   };
 
-  struct SortDstEdgesFunctor {
-    bool operator()(const GCOVEdge *E1, const GCOVEdge *E2) {
-      return E1->Dst.Number < E2->Dst.Number;
-    }
-  };
-
 public:
   using EdgeIterator = SmallVectorImpl<GCOVEdge *>::const_iterator;
   using BlockVector = SmallVector<const GCOVBlock *, 4>;
diff --git a/linux-x64/clang/include/llvm/ProfileData/InstrProf.h b/linux-x64/clang/include/llvm/ProfileData/InstrProf.h
index 9ea1b9b..c7d764a 100644
--- a/linux-x64/clang/include/llvm/ProfileData/InstrProf.h
+++ b/linux-x64/clang/include/llvm/ProfileData/InstrProf.h
@@ -234,7 +234,7 @@
 bool canRenameComdatFunc(const Function &F, bool CheckAddressTaken = false);
 
 enum InstrProfValueKind : uint32_t {
-#define VALUE_PROF_KIND(Enumerator, Value) Enumerator = Value,
+#define VALUE_PROF_KIND(Enumerator, Value, Descr) Enumerator = Value,
 #include "llvm/ProfileData/InstrProfData.inc"
 };
 
@@ -590,6 +590,70 @@
   return PGOName.drop_front(S + 1);
 }
 
+// To store the sums of profile count values, or the percentage of
+// the sums of the total count values.
+struct CountSumOrPercent {
+  uint64_t NumEntries;
+  double CountSum;
+  double ValueCounts[IPVK_Last - IPVK_First + 1];
+  CountSumOrPercent() : NumEntries(0), CountSum(0.0f), ValueCounts() {}
+  void reset() {
+    NumEntries = 0;
+    CountSum = 0.0f;
+    for (unsigned I = 0; I < IPVK_Last - IPVK_First + 1; I++)
+      ValueCounts[I] = 0.0f;
+  }
+};
+
+// Function level or program level overlap information.
+struct OverlapStats {
+  enum OverlapStatsLevel { ProgramLevel, FunctionLevel };
+  // Sum of the total count values for the base profile.
+  CountSumOrPercent Base;
+  // Sum of the total count values for the test profile.
+  CountSumOrPercent Test;
+  // Overlap lap score. Should be in range of [0.0f to 1.0f].
+  CountSumOrPercent Overlap;
+  CountSumOrPercent Mismatch;
+  CountSumOrPercent Unique;
+  OverlapStatsLevel Level;
+  const std::string *BaseFilename;
+  const std::string *TestFilename;
+  StringRef FuncName;
+  uint64_t FuncHash;
+  bool Valid;
+
+  OverlapStats(OverlapStatsLevel L = ProgramLevel)
+      : Level(L), BaseFilename(nullptr), TestFilename(nullptr), FuncHash(0),
+        Valid(false) {}
+
+  void dump(raw_fd_ostream &OS) const;
+
+  void setFuncInfo(StringRef Name, uint64_t Hash) {
+    FuncName = Name;
+    FuncHash = Hash;
+  }
+
+  Error accumuateCounts(const std::string &BaseFilename,
+                        const std::string &TestFilename, bool IsCS);
+  void addOneMismatch(const CountSumOrPercent &MismatchFunc);
+  void addOneUnique(const CountSumOrPercent &UniqueFunc);
+
+  static inline double score(uint64_t Val1, uint64_t Val2, double Sum1,
+                             double Sum2) {
+    if (Sum1 < 1.0f || Sum2 < 1.0f)
+      return 0.0f;
+    return std::min(Val1 / Sum1, Val2 / Sum2);
+  }
+};
+
+// This is used to filter the functions whose overlap information
+// to be output.
+struct OverlapFuncFilters {
+  uint64_t ValueCutoff;
+  const std::string NameFilter;
+};
+
 struct InstrProfValueSiteRecord {
   /// Value profiling data pairs at a given value site.
   std::list<InstrProfValueData> ValueData;
@@ -615,6 +679,10 @@
              function_ref<void(instrprof_error)> Warn);
   /// Scale up value profile data counts.
   void scale(uint64_t Weight, function_ref<void(instrprof_error)> Warn);
+
+  /// Compute the overlap b/w this record and Input record.
+  void overlap(InstrProfValueSiteRecord &Input, uint32_t ValueKind,
+               OverlapStats &Overlap, OverlapStats &FuncLevelOverlap);
 };
 
 /// Profiling information for a single function.
@@ -703,6 +771,18 @@
   /// Clear value data entries
   void clearValueData() { ValueData = nullptr; }
 
+  /// Compute the sums of all counts and store in Sum.
+  void accumuateCounts(CountSumOrPercent &Sum) const;
+
+  /// Compute the overlap b/w this IntrprofRecord and Other.
+  void overlap(InstrProfRecord &Other, OverlapStats &Overlap,
+               OverlapStats &FuncLevelOverlap, uint64_t ValueCutoff);
+
+  /// Compute the overlap of value profile counts.
+  void overlapValueProfData(uint32_t ValueKind, InstrProfRecord &Src,
+                            OverlapStats &Overlap,
+                            OverlapStats &FuncLevelOverlap);
+
 private:
   struct ValueProfData {
     std::vector<InstrProfValueSiteRecord> IndirectCallSites;
@@ -767,10 +847,20 @@
   StringRef Name;
   uint64_t Hash;
 
+  // We reserve this bit as the flag for context sensitive profile record.
+  static const int CS_FLAG_IN_FUNC_HASH = 60;
+
   NamedInstrProfRecord() = default;
   NamedInstrProfRecord(StringRef Name, uint64_t Hash,
                        std::vector<uint64_t> Counts)
       : InstrProfRecord(std::move(Counts)), Name(Name), Hash(Hash) {}
+
+  static bool hasCSFlagInHash(uint64_t FuncHash) {
+    return ((FuncHash >> CS_FLAG_IN_FUNC_HASH) & 1);
+  }
+  static void setCSFlagInHash(uint64_t &FuncHash) {
+    FuncHash |= ((uint64_t)1 << CS_FLAG_IN_FUNC_HASH);
+  }
 };
 
 uint32_t InstrProfRecord::getNumValueKinds() const {
@@ -1004,6 +1094,8 @@
 // from control data struct is changed from raw pointer to Name's MD5 value.
 // Version 4: ValueDataBegin and ValueDataSizes fields are removed from the
 // raw header.
+// Version 5: Bit 60 of FuncHash is reserved for the flag for the context
+// sensitive records.
 const uint64_t Version = INSTR_PROF_RAW_VERSION;
 
 template <class IntPtrT> inline uint64_t getMagic();
@@ -1040,9 +1132,12 @@
 void getMemOPSizeRangeFromOption(StringRef Str, int64_t &RangeStart,
                                  int64_t &RangeLast);
 
+// Create a COMDAT variable INSTR_PROF_RAW_VERSION_VAR to make the runtime
+// aware this is an ir_level profile so it can set the version flag.
+void createIRLevelProfileFlagVar(Module &M, bool IsCS);
+
 // Create the variable for the profile file name.
 void createProfileFileNameVar(Module &M, StringRef InstrProfileOutput);
 
 } // end namespace llvm
-
 #endif // LLVM_PROFILEDATA_INSTRPROF_H
diff --git a/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc b/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc
index e1e2df5..749781b 100644
--- a/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc
+++ b/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc
@@ -169,7 +169,7 @@
 
 /* VALUE_PROF_KIND start */
 #ifndef VALUE_PROF_KIND
-#define VALUE_PROF_KIND(Enumerator, Value)
+#define VALUE_PROF_KIND(Enumerator, Value, Descr)
 #else
 #define INSTR_PROF_DATA_DEFINED
 #endif
@@ -182,16 +182,16 @@
  * For this remapping the ProfData is used.  ProfData contains both the function
  * name hash and the function address.
  */
-VALUE_PROF_KIND(IPVK_IndirectCallTarget, 0)
+VALUE_PROF_KIND(IPVK_IndirectCallTarget, 0, "indirect call target")
 /* For memory intrinsic functions size profiling. */
-VALUE_PROF_KIND(IPVK_MemOPSize, 1)
+VALUE_PROF_KIND(IPVK_MemOPSize, 1, "memory intrinsic functions size")
 /* 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_MemOPSize)
+VALUE_PROF_KIND(IPVK_First, IPVK_IndirectCallTarget, "first")
+VALUE_PROF_KIND(IPVK_Last, IPVK_MemOPSize, "last")
 
 #undef VALUE_PROF_KIND
 /* VALUE_PROF_KIND end */
@@ -265,6 +265,9 @@
 INSTR_PROF_SECT_ENTRY(IPSK_covmap, \
                       INSTR_PROF_QUOTE(INSTR_PROF_COVMAP_COMMON), \
                       INSTR_PROF_COVMAP_COFF, "__LLVM_COV,")
+INSTR_PROF_SECT_ENTRY(IPSK_orderfile, \
+                      INSTR_PROF_QUOTE(INSTR_PROF_ORDERFILE_COMMON), \
+                      INSTR_PROF_QUOTE(INSTR_PROF_ORDERFILE_COFF), "__DATA,")
 
 #undef INSTR_PROF_SECT_ENTRY
 #endif
@@ -635,10 +638,12 @@
  * version for other variants of profile. We set the lowest bit of the upper 8
  * bits (i.e. bit 56) to 1 to indicate if this is an IR-level instrumentaiton
  * generated profile, and 0 if this is a Clang FE generated profile.
+ * 1 in bit 57 indicates there are context-sensitive records in the profile.
  */
 #define VARIANT_MASKS_ALL 0xff00000000000000ULL
 #define GET_VERSION(V) ((V) & ~VARIANT_MASKS_ALL)
 #define VARIANT_MASK_IR_PROF (0x1ULL << 56)
+#define VARIANT_MASK_CSIR_PROF (0x1ULL << 57)
 #define INSTR_PROF_RAW_VERSION_VAR __llvm_profile_raw_version
 #define INSTR_PROF_PROFILE_RUNTIME_VAR __llvm_profile_runtime
 
@@ -654,6 +659,7 @@
 #define INSTR_PROF_VALS_COMMON __llvm_prf_vals
 #define INSTR_PROF_VNODES_COMMON __llvm_prf_vnds
 #define INSTR_PROF_COVMAP_COMMON __llvm_covmap
+#define INSTR_PROF_ORDERFILE_COMMON __llvm_orderfile
 /* Windows section names. Because these section names contain dollar characters,
  * they must be quoted.
  */
@@ -663,6 +669,7 @@
 #define INSTR_PROF_VALS_COFF ".lprfv$M"
 #define INSTR_PROF_VNODES_COFF ".lprfnd$M"
 #define INSTR_PROF_COVMAP_COFF ".lcovmap$M"
+#define INSTR_PROF_ORDERFILE_COFF ".lorderfile$M"
 
 #ifdef _WIN32
 /* Runtime section names and name strings.  */
@@ -676,6 +683,7 @@
 /* Value profile nodes section. */
 #define INSTR_PROF_VNODES_SECT_NAME INSTR_PROF_VNODES_COFF
 #define INSTR_PROF_COVMAP_SECT_NAME INSTR_PROF_COVMAP_COFF
+#define INSTR_PROF_ORDERFILE_SECT_NAME INSTR_PROF_ORDERFILE_COFF
 #else
 /* Runtime section names and name strings.  */
 #define INSTR_PROF_DATA_SECT_NAME INSTR_PROF_QUOTE(INSTR_PROF_DATA_COMMON)
@@ -688,8 +696,18 @@
 /* Value profile nodes section. */
 #define INSTR_PROF_VNODES_SECT_NAME INSTR_PROF_QUOTE(INSTR_PROF_VNODES_COMMON)
 #define INSTR_PROF_COVMAP_SECT_NAME INSTR_PROF_QUOTE(INSTR_PROF_COVMAP_COMMON)
+/* Order file instrumentation. */
+#define INSTR_PROF_ORDERFILE_SECT_NAME                                         \
+  INSTR_PROF_QUOTE(INSTR_PROF_ORDERFILE_COMMON)
 #endif
 
+#define INSTR_PROF_ORDERFILE_BUFFER_NAME _llvm_order_file_buffer
+#define INSTR_PROF_ORDERFILE_BUFFER_NAME_STR                                   \
+  INSTR_PROF_QUOTE(INSTR_PROF_ORDERFILE_BUFFER_NAME)
+#define INSTR_PROF_ORDERFILE_BUFFER_IDX_NAME _llvm_order_file_buffer_idx
+#define INSTR_PROF_ORDERFILE_BUFFER_IDX_NAME_STR                               \
+  INSTR_PROF_QUOTE(INSTR_PROF_ORDERFILE_BUFFER_IDX_NAME)
+
 /* Macros to define start/stop section symbol for a given
  * section on Linux. For instance
  * INSTR_PROF_SECT_START(INSTR_PROF_DATA_SECT_NAME) will
@@ -723,6 +741,12 @@
 
 #endif /* INSTR_PROF_DATA_INC */
 
+#ifndef INSTR_ORDER_FILE_INC
+// The maximal # of functions: 128*1024 (the buffer size will be 128*4 KB).
+#define INSTR_ORDER_FILE_BUFFER_SIZE 131072
+#define INSTR_ORDER_FILE_BUFFER_BITS 17
+#define INSTR_ORDER_FILE_BUFFER_MASK 0x1ffff
+#endif /* INSTR_ORDER_FILE_INC */
 #else
 #undef INSTR_PROF_DATA_DEFINED
 #endif
diff --git a/linux-x64/clang/include/llvm/ProfileData/InstrProfReader.h b/linux-x64/clang/include/llvm/ProfileData/InstrProfReader.h
index d465420..73751fa 100644
--- a/linux-x64/clang/include/llvm/ProfileData/InstrProfReader.h
+++ b/linux-x64/clang/include/llvm/ProfileData/InstrProfReader.h
@@ -77,6 +77,8 @@
 
   virtual bool isIRLevelProfile() const = 0;
 
+  virtual bool hasCSIRLevelProfile() const = 0;
+
   /// Return the PGO symtab. There are three different readers:
   /// Raw, Text, and Indexed profile readers. The first two types
   /// of readers are used only by llvm-profdata tool, while the indexed
@@ -89,6 +91,9 @@
   /// compiler.
   virtual InstrProfSymtab &getSymtab() = 0;
 
+  /// Compute the sum of counts and return in Sum.
+  void accumuateCounts(CountSumOrPercent &Sum, bool IsCS);
+
 protected:
   std::unique_ptr<InstrProfSymtab> Symtab;
 
@@ -142,6 +147,7 @@
   /// Iterator over the profile data.
   line_iterator Line;
   bool IsIRLevelProfile = false;
+  bool HasCSIRLevelProfile = false;
 
   Error readValueProfileData(InstrProfRecord &Record);
 
@@ -156,6 +162,8 @@
 
   bool isIRLevelProfile() const override { return IsIRLevelProfile; }
 
+  bool hasCSIRLevelProfile() const override { return HasCSIRLevelProfile; }
+
   /// Read the header.
   Error readHeader() override;
 
@@ -212,6 +220,10 @@
     return (Version & VARIANT_MASK_IR_PROF) != 0;
   }
 
+  bool hasCSIRLevelProfile() const override {
+    return (Version & VARIANT_MASK_CSIR_PROF) != 0;
+  }
+
   InstrProfSymtab &getSymtab() override {
     assert(Symtab.get());
     return *Symtab.get();
@@ -341,6 +353,7 @@
   virtual void setValueProfDataEndianness(support::endianness Endianness) = 0;
   virtual uint64_t getVersion() const = 0;
   virtual bool isIRLevelProfile() const = 0;
+  virtual bool hasCSIRLevelProfile() const = 0;
   virtual Error populateSymtab(InstrProfSymtab &) = 0;
 };
 
@@ -385,6 +398,10 @@
     return (FormatVersion & VARIANT_MASK_IR_PROF) != 0;
   }
 
+  bool hasCSIRLevelProfile() const override {
+    return (FormatVersion & VARIANT_MASK_CSIR_PROF) != 0;
+  }
+
   Error populateSymtab(InstrProfSymtab &Symtab) override {
     return Symtab.create(HashTable->keys());
   }
@@ -412,13 +429,16 @@
   std::unique_ptr<InstrProfReaderRemapper> Remapper;
   /// Profile summary data.
   std::unique_ptr<ProfileSummary> Summary;
+  /// Context sensitive profile summary data.
+  std::unique_ptr<ProfileSummary> CS_Summary;
   // Index to the current record in the record array.
   unsigned RecordIndex;
 
   // Read the profile summary. Return a pointer pointing to one byte past the
   // end of the summary data if it exists or the input \c Cur.
+  // \c UseCS indicates whether to use the context-sensitive profile summary.
   const unsigned char *readSummary(IndexedInstrProf::ProfVersion Version,
-                                   const unsigned char *Cur);
+                                   const unsigned char *Cur, bool UseCS);
 
 public:
   IndexedInstrProfReader(
@@ -432,6 +452,9 @@
   /// Return the profile version.
   uint64_t getVersion() const { return Index->getVersion(); }
   bool isIRLevelProfile() const override { return Index->isIRLevelProfile(); }
+  bool hasCSIRLevelProfile() const override {
+    return Index->hasCSIRLevelProfile();
+  }
 
   /// Return true if the given buffer is in an indexed instrprof format.
   static bool hasFormat(const MemoryBuffer &DataBuffer);
@@ -450,7 +473,16 @@
                           std::vector<uint64_t> &Counts);
 
   /// Return the maximum of all known function counts.
-  uint64_t getMaximumFunctionCount() { return Summary->getMaxFunctionCount(); }
+  /// \c UseCS indicates whether to use the context-sensitive count.
+  uint64_t getMaximumFunctionCount(bool UseCS) {
+    if (UseCS) {
+      assert(CS_Summary && "No context sensitive profile summary");
+      return CS_Summary->getMaxFunctionCount();
+    } else {
+      assert(Summary && "No profile summary");
+      return Summary->getMaxFunctionCount();
+    }
+  }
 
   /// Factory method to create an indexed reader.
   static Expected<std::unique_ptr<IndexedInstrProfReader>>
@@ -469,7 +501,18 @@
   // to be used by llvm-profdata (for dumping). Avoid using this when
   // the client is the compiler.
   InstrProfSymtab &getSymtab() override;
-  ProfileSummary &getSummary() { return *(Summary.get()); }
+
+  /// Return the profile summary.
+  /// \c UseCS indicates whether to use the context-sensitive summary.
+  ProfileSummary &getSummary(bool UseCS) {
+    if (UseCS) {
+      assert(CS_Summary && "No context sensitive summary");
+      return *(CS_Summary.get());
+    } else {
+      assert(Summary && "No profile summary");
+      return *(Summary.get());
+    }
+  }
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/ProfileData/InstrProfWriter.h b/linux-x64/clang/include/llvm/ProfileData/InstrProfWriter.h
index b0ab31d..5882fa2 100644
--- a/linux-x64/clang/include/llvm/ProfileData/InstrProfWriter.h
+++ b/linux-x64/clang/include/llvm/ProfileData/InstrProfWriter.h
@@ -33,7 +33,8 @@
 class InstrProfWriter {
 public:
   using ProfilingData = SmallDenseMap<uint64_t, InstrProfRecord>;
-  enum ProfKind { PF_Unknown = 0, PF_FE, PF_IRLevel };
+  // PF_IRLevelWithCS is the profile from context sensitive IR instrumentation.
+  enum ProfKind { PF_Unknown = 0, PF_FE, PF_IRLevel, PF_IRLevelWithCS };
 
 private:
   bool Sparse;
@@ -74,20 +75,36 @@
   std::unique_ptr<MemoryBuffer> writeBuffer();
 
   /// Set the ProfileKind. Report error if mixing FE and IR level profiles.
-  Error setIsIRLevelProfile(bool IsIRLevel) {
+  /// \c WithCS indicates if this is for contenxt sensitive instrumentation.
+  Error setIsIRLevelProfile(bool IsIRLevel, bool WithCS) {
     if (ProfileKind == PF_Unknown) {
-      ProfileKind = IsIRLevel ? PF_IRLevel: PF_FE;
+      if (IsIRLevel)
+        ProfileKind = WithCS ? PF_IRLevelWithCS : PF_IRLevel;
+      else
+        ProfileKind = PF_FE;
       return Error::success();
     }
-    return (IsIRLevel == (ProfileKind == PF_IRLevel))
-               ? Error::success()
-               : make_error<InstrProfError>(
-                     instrprof_error::unsupported_version);
+
+    if (((ProfileKind != PF_FE) && !IsIRLevel) ||
+        ((ProfileKind == PF_FE) && IsIRLevel))
+      return make_error<InstrProfError>(instrprof_error::unsupported_version);
+
+    // When merging a context-sensitive profile (WithCS == true) with an IRLevel
+    // profile, set the kind to PF_IRLevelWithCS.
+    if (ProfileKind == PF_IRLevel && WithCS)
+      ProfileKind = PF_IRLevelWithCS;
+
+    return Error::success();
   }
 
   // Internal interface for testing purpose only.
   void setValueProfDataEndianness(support::endianness Endianness);
   void setOutputSparse(bool Sparse);
+  // Compute the overlap b/w this object and Other. Program level result is
+  // stored in Overlap and function level result is stored in FuncLevelOverlap.
+  void overlapRecord(NamedInstrProfRecord &&Other, OverlapStats &Overlap,
+                     OverlapStats &FuncLevelOverlap,
+                     const OverlapFuncFilters &FuncFilter);
 
 private:
   void addRecord(StringRef Name, uint64_t Hash, InstrProfRecord &&I,
diff --git a/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h b/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h
index b52f886..f98a343 100644
--- a/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h
+++ b/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h
@@ -83,7 +83,8 @@
   SampleProfileSummaryBuilder(std::vector<uint32_t> Cutoffs)
       : ProfileSummaryBuilder(std::move(Cutoffs)) {}
 
-  void addRecord(const sampleprof::FunctionSamples &FS);
+  void addRecord(const sampleprof::FunctionSamples &FS,
+                 bool isCallsiteSample = false);
   std::unique_ptr<ProfileSummary> getSummary();
 };
 
diff --git a/linux-x64/clang/include/llvm/ProfileData/SampleProf.h b/linux-x64/clang/include/llvm/ProfileData/SampleProf.h
index ca3e2de..7fbc857 100644
--- a/linux-x64/clang/include/llvm/ProfileData/SampleProf.h
+++ b/linux-x64/clang/include/llvm/ProfileData/SampleProf.h
@@ -410,6 +410,34 @@
     return getNameInModule(Name, M);
   }
 
+  /// Return the canonical name for a function, taking into account
+  /// suffix elision policy attributes.
+  static StringRef getCanonicalFnName(const Function &F) {
+    static const char *knownSuffixes[] = { ".llvm.", ".part." };
+    auto AttrName = "sample-profile-suffix-elision-policy";
+    auto Attr = F.getFnAttribute(AttrName).getValueAsString();
+    if (Attr == "" || Attr == "all") {
+      return F.getName().split('.').first;
+    } else if (Attr == "selected") {
+      StringRef Cand(F.getName());
+      for (const auto &Suf : knownSuffixes) {
+        StringRef Suffix(Suf);
+        auto It = Cand.rfind(Suffix);
+        if (It == StringRef::npos)
+          return Cand;
+        auto Dit = Cand.rfind('.');
+        if (Dit == It + Suffix.size() - 1)
+          Cand = Cand.substr(0, It);
+      }
+      return Cand;
+    } else if (Attr == "none") {
+      return F.getName();
+    } else {
+      assert(false && "internal error: unknown suffix elision policy");
+    }
+    return F.getName();
+  }
+
   /// Translate \p Name into its original name in Module.
   /// When the Format is not SPF_Compact_Binary, \p Name needs no translation.
   /// When the Format is SPF_Compact_Binary, \p Name in current FunctionSamples
@@ -465,11 +493,9 @@
         /// built in post-thin-link phase and var promotion has been done,
         /// we need to add the substring of function name without the suffix
         /// into the GUIDToFuncNameMap.
-        auto pos = OrigName.find('.');
-        if (pos != StringRef::npos) {
-          StringRef NewName = OrigName.substr(0, pos);
-          GUIDToFuncNameMap.insert({Function::getGUID(NewName), NewName});
-        }
+        StringRef CanonName = getCanonicalFnName(F);
+        if (CanonName != OrigName)
+          GUIDToFuncNameMap.insert({Function::getGUID(CanonName), CanonName});
       }
       CurrentModule = &M;
     }
@@ -546,10 +572,9 @@
   SampleSorter(const std::map<LocationT, SampleT> &Samples) {
     for (const auto &I : Samples)
       V.push_back(&I);
-    std::stable_sort(V.begin(), V.end(),
-                     [](const SamplesWithLoc *A, const SamplesWithLoc *B) {
-                       return A->first < B->first;
-                     });
+    llvm::stable_sort(V, [](const SamplesWithLoc *A, const SamplesWithLoc *B) {
+      return A->first < B->first;
+    });
   }
 
   const SamplesWithLocList &get() const { return V; }
diff --git a/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h b/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h
index 32b8f91..969cdea 100644
--- a/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h
+++ b/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h
@@ -286,10 +286,11 @@
 
   /// Return the samples collected for function \p F.
   FunctionSamples *getSamplesFor(const Function &F) {
-    // The function name may have been updated by adding suffix. In sample
-    // profile, the function names are all stripped, so we need to strip
-    // the function name suffix before matching with profile.
-    return getSamplesFor(F.getName().split('.').first);
+    // The function name may have been updated by adding suffix. Call
+    // a helper to (optionally) strip off suffixes so that we can
+    // match against the original function name in the profile.
+    StringRef CanonName = FunctionSamples::getCanonicalFnName(F);
+    return getSamplesFor(CanonName);
   }
 
   /// Return the samples collected for function \p F.
diff --git a/linux-x64/clang/include/llvm/Remarks/Remark.h b/linux-x64/clang/include/llvm/Remarks/Remark.h
new file mode 100644
index 0000000..d916728
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Remarks/Remark.h
@@ -0,0 +1,101 @@
+//===-- llvm/Remarks/Remark.h - The remark type -----------------*- C++/-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines an abstraction for handling remarks.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_REMARKS_REMARK_H
+#define LLVM_REMARKS_REMARK_H
+
+#include "llvm-c/Remarks.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/CBindingWrapping.h"
+#include <string>
+
+namespace llvm {
+namespace remarks {
+
+constexpr uint64_t Version = 0;
+constexpr StringRef Magic("REMARKS", 7);
+
+/// The debug location used to track a remark back to the source file.
+struct RemarkLocation {
+  /// Absolute path of the source file corresponding to this remark.
+  StringRef SourceFilePath;
+  unsigned SourceLine;
+  unsigned SourceColumn;
+};
+
+// Create wrappers for C Binding types (see CBindingWrapping.h).
+DEFINE_SIMPLE_CONVERSION_FUNCTIONS(RemarkLocation, LLVMRemarkDebugLocRef)
+
+/// A key-value pair with a debug location that is used to display the remarks
+/// at the right place in the source.
+struct Argument {
+  StringRef Key;
+  // FIXME: We might want to be able to store other types than strings here.
+  StringRef Val;
+  // If set, the debug location corresponding to the value.
+  Optional<RemarkLocation> Loc;
+};
+
+// Create wrappers for C Binding types (see CBindingWrapping.h).
+DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Argument, LLVMRemarkArgRef)
+
+/// The type of the remark.
+enum class Type {
+  Unknown,
+  Passed,
+  Missed,
+  Analysis,
+  AnalysisFPCommute,
+  AnalysisAliasing,
+  Failure,
+  LastTypeValue = Failure
+};
+
+/// A remark type used for both emission and parsing.
+struct Remark {
+  /// The type of the remark.
+  Type RemarkType = Type::Unknown;
+
+  /// Name of the pass that triggers the emission of this remark.
+  StringRef PassName;
+
+  /// Textual identifier for the remark (single-word, camel-case). Can be used
+  /// by external tools reading the output file for remarks to identify the
+  /// remark.
+  StringRef RemarkName;
+
+  /// Mangled name of the function that triggers the emssion of this remark.
+  StringRef FunctionName;
+
+  /// The location in the source file of the remark.
+  Optional<RemarkLocation> Loc;
+
+  /// If profile information is available, this is the number of times the
+  /// corresponding code was executed in a profile instrumentation run.
+  Optional<uint64_t> Hotness;
+
+  /// Arguments collected via the streaming interface.
+  ArrayRef<Argument> Args;
+
+  /// Return a message composed from the arguments as a string.
+  std::string getArgsAsMsg() const;
+};
+
+// Create wrappers for C Binding types (see CBindingWrapping.h).
+DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Remark, LLVMRemarkEntryRef)
+
+} // end namespace remarks
+} // end namespace llvm
+
+#endif /* LLVM_REMARKS_REMARK_H */
diff --git a/linux-x64/clang/include/llvm/Remarks/RemarkParser.h b/linux-x64/clang/include/llvm/Remarks/RemarkParser.h
new file mode 100644
index 0000000..457b2fb
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Remarks/RemarkParser.h
@@ -0,0 +1,68 @@
+//===-- llvm/Remarks/Remark.h - The remark type -----------------*- C++/-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file provides an interface for parsing remarks in LLVM.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_REMARKS_REMARK_PARSER_H
+#define LLVM_REMARKS_REMARK_PARSER_H
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Remarks/Remark.h"
+#include "llvm/Support/Error.h"
+#include <memory>
+
+namespace llvm {
+namespace remarks {
+
+struct ParserImpl;
+struct ParsedStringTable;
+
+enum class ParserFormat { YAML };
+
+/// Parser used to parse a raw buffer to remarks::Remark objects.
+struct Parser {
+  /// The hidden implementation of the parser.
+  std::unique_ptr<ParserImpl> Impl;
+
+  /// Create a parser parsing \p Buffer to Remark objects.
+  /// This constructor should be only used for parsing remarks without a string
+  /// table.
+  Parser(ParserFormat Format, StringRef Buffer);
+
+  /// Create a parser parsing \p Buffer to Remark objects, using \p StrTab as a
+  /// string table.
+  Parser(ParserFormat Format, StringRef Buffer,
+         const ParsedStringTable &StrTab);
+
+  // Needed because ParserImpl is an incomplete type.
+  ~Parser();
+
+  /// Returns an empty Optional if it reached the end.
+  /// Returns a valid remark otherwise.
+  Expected<const Remark *> getNext() const;
+};
+
+/// In-memory representation of the string table parsed from a buffer (e.g. the
+/// remarks section).
+struct ParsedStringTable {
+  /// The buffer mapped from the section contents.
+  StringRef Buffer;
+  /// Collection of offsets in the buffer for each string entry.
+  SmallVector<size_t, 8> Offsets;
+
+  Expected<StringRef> operator[](size_t Index) const;
+  ParsedStringTable(StringRef Buffer);
+};
+
+} // end namespace remarks
+} // end namespace llvm
+
+#endif /* LLVM_REMARKS_REMARK_PARSER_H */
diff --git a/linux-x64/clang/include/llvm/Remarks/RemarkSerializer.h b/linux-x64/clang/include/llvm/Remarks/RemarkSerializer.h
new file mode 100644
index 0000000..def5c2e
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Remarks/RemarkSerializer.h
@@ -0,0 +1,68 @@
+//===-- RemarkSerializer.h - Remark serialization interface -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file provides an interface for serializing remarks to different formats.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_REMARKS_REMARK_SERIALIZER_H
+#define LLVM_REMARKS_REMARK_SERIALIZER_H
+
+#include "llvm/Remarks/Remark.h"
+#include "llvm/Remarks/RemarkStringTable.h"
+#include "llvm/Support/YAMLTraits.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+namespace remarks {
+
+/// This is the base class for a remark serializer.
+/// It includes support for using a string table while emitting.
+struct Serializer {
+  /// The open raw_ostream that the remark diagnostics are emitted to.
+  raw_ostream &OS;
+  /// The string table containing all the unique strings used in the output.
+  /// The table can be serialized to be consumed after the compilation.
+  Optional<StringTable> StrTab;
+
+  Serializer(raw_ostream &OS) : OS(OS), StrTab() {}
+
+  /// This is just an interface.
+  virtual ~Serializer() = default;
+  virtual void emit(const Remark &Remark) = 0;
+};
+
+/// Wether the serializer should use a string table while emitting.
+enum class UseStringTable { No, Yes };
+
+/// Serialize the remarks to YAML. One remark entry looks like this:
+/// --- !<TYPE>
+/// Pass:            <PASSNAME>
+/// Name:            <REMARKNAME>
+/// DebugLoc:        { File: <SOURCEFILENAME>, Line: <SOURCELINE>,
+///                    Column: <SOURCECOLUMN> }
+/// Function:        <FUNCTIONNAME>
+/// Args:
+///   - <KEY>: <VALUE>
+///     DebugLoc:        { File: <FILE>, Line: <LINE>, Column: <COL> }
+/// ...
+struct YAMLSerializer : public Serializer {
+  /// The YAML streamer.
+  yaml::Output YAMLOutput;
+
+  YAMLSerializer(raw_ostream &OS,
+                 UseStringTable UseStringTable = remarks::UseStringTable::No);
+
+  /// Emit a remark to the stream.
+  void emit(const Remark &Remark) override;
+};
+
+} // end namespace remarks
+} // end namespace llvm
+
+#endif /* LLVM_REMARKS_REMARK_SERIALIZER_H */
diff --git a/linux-x64/clang/include/llvm/Remarks/RemarkStringTable.h b/linux-x64/clang/include/llvm/Remarks/RemarkStringTable.h
new file mode 100644
index 0000000..f9b4fdb
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Remarks/RemarkStringTable.h
@@ -0,0 +1,59 @@
+//===-- RemarkStringTable.h - Serializing string table ----------*- C++/-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This class is used to deduplicate and serialize a string table used for
+// generating remarks.
+//
+// For parsing a string table, use ParsedStringTable in RemarkParser.h
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_REMARKS_REMARK_STRING_TABLE_H
+#define LLVM_REMARKS_REMARK_STRING_TABLE_H
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Allocator.h"
+#include <vector>
+
+namespace llvm {
+
+class raw_ostream;
+
+namespace remarks {
+
+/// The string table used for serializing remarks.
+/// This table can be for example serialized in a section to be consumed after
+/// the compilation.
+struct StringTable {
+  /// Allocator holding all the memory used by the map.
+  BumpPtrAllocator Allocator;
+  /// The string table containing all the unique strings used in the output.
+  /// It maps a string to an unique ID.
+  StringMap<unsigned, BumpPtrAllocator &> StrTab;
+  /// Total size of the string table when serialized.
+  size_t SerializedSize = 0;
+
+  StringTable() : Allocator(), StrTab(Allocator) {}
+  /// Add a string to the table. It returns an unique ID of the string.
+  std::pair<unsigned, StringRef> add(StringRef Str);
+  /// Serialize the string table to a stream. It is serialized as a little
+  /// endian uint64 (the size of the table in bytes) followed by a sequence of
+  /// NULL-terminated strings, where the N-th string is the string with the ID N
+  /// in the StrTab map.
+  void serialize(raw_ostream &OS) const;
+  /// Serialize the string table to a vector. This allows users to do the actual
+  /// writing to file/memory/other.
+  /// The string with the ID == N should be the N-th element in the vector.
+  std::vector<StringRef> serialize() const;
+};
+
+} // end namespace remarks
+} // end namespace llvm
+
+#endif /* LLVM_REMARKS_REMARK_STRING_TABLE_H */
diff --git a/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def b/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def
index d8c69c2..e152f38 100644
--- a/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def
+++ b/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def
@@ -50,78 +50,92 @@
 #define AARCH64_ARCH_EXT_NAME(NAME, ID, FEATURE, NEGFEATURE)
 #endif
 // FIXME: This would be nicer were it tablegen
-AARCH64_ARCH_EXT_NAME("invalid",  AArch64::AEK_INVALID,  nullptr,  nullptr)
-AARCH64_ARCH_EXT_NAME("none",     AArch64::AEK_NONE,     nullptr,  nullptr)
-AARCH64_ARCH_EXT_NAME("crc",      AArch64::AEK_CRC,      "+crc",   "-crc")
-AARCH64_ARCH_EXT_NAME("lse",      AArch64::AEK_LSE,      "+lse",   "-lse")
-AARCH64_ARCH_EXT_NAME("rdm",      AArch64::AEK_RDM,      "+rdm",   "-rdm")
-AARCH64_ARCH_EXT_NAME("crypto",   AArch64::AEK_CRYPTO,   "+crypto","-crypto")
-AARCH64_ARCH_EXT_NAME("sm4",      AArch64::AEK_SM4,      "+sm4",   "-sm4")
-AARCH64_ARCH_EXT_NAME("sha3",     AArch64::AEK_SHA3,     "+sha3",  "-sha3")
-AARCH64_ARCH_EXT_NAME("sha2",     AArch64::AEK_SHA2,     "+sha2",  "-sha2")
-AARCH64_ARCH_EXT_NAME("aes",      AArch64::AEK_AES,      "+aes",   "-aes")
-AARCH64_ARCH_EXT_NAME("dotprod",  AArch64::AEK_DOTPROD,  "+dotprod","-dotprod")
-AARCH64_ARCH_EXT_NAME("fp",       AArch64::AEK_FP,       "+fp-armv8",  "-fp-armv8")
-AARCH64_ARCH_EXT_NAME("simd",     AArch64::AEK_SIMD,     "+neon",  "-neon")
-AARCH64_ARCH_EXT_NAME("fp16",     AArch64::AEK_FP16,     "+fullfp16",  "-fullfp16")
-AARCH64_ARCH_EXT_NAME("fp16fml",  AArch64::AEK_FP16FML,  "+fp16fml", "-fp16fml")
-AARCH64_ARCH_EXT_NAME("profile",  AArch64::AEK_PROFILE,  "+spe",  "-spe")
-AARCH64_ARCH_EXT_NAME("ras",      AArch64::AEK_RAS,      "+ras",  "-ras")
-AARCH64_ARCH_EXT_NAME("sve",      AArch64::AEK_SVE,      "+sve",  "-sve")
-AARCH64_ARCH_EXT_NAME("rcpc",     AArch64::AEK_RCPC,     "+rcpc", "-rcpc")
-AARCH64_ARCH_EXT_NAME("rng",      AArch64::AEK_RAND,     "+rand",  "-rand")
-AARCH64_ARCH_EXT_NAME("memtag",   AArch64::AEK_MTE,      "+mte",   "-mte")
-AARCH64_ARCH_EXT_NAME("ssbs",     AArch64::AEK_SSBS,     "+ssbs",  "-ssbs")
-AARCH64_ARCH_EXT_NAME("sb",       AArch64::AEK_SB,       "+sb",    "-sb")
-AARCH64_ARCH_EXT_NAME("predres",  AArch64::AEK_PREDRES,  "+predres", "-predres")
+AARCH64_ARCH_EXT_NAME("invalid",   AArch64::AEK_INVALID,  nullptr,  nullptr)
+AARCH64_ARCH_EXT_NAME("none",      AArch64::AEK_NONE,     nullptr,  nullptr)
+AARCH64_ARCH_EXT_NAME("crc",       AArch64::AEK_CRC,      "+crc",   "-crc")
+AARCH64_ARCH_EXT_NAME("lse",       AArch64::AEK_LSE,      "+lse",   "-lse")
+AARCH64_ARCH_EXT_NAME("rdm",       AArch64::AEK_RDM,      "+rdm",   "-rdm")
+AARCH64_ARCH_EXT_NAME("crypto",    AArch64::AEK_CRYPTO,   "+crypto","-crypto")
+AARCH64_ARCH_EXT_NAME("sm4",       AArch64::AEK_SM4,      "+sm4",   "-sm4")
+AARCH64_ARCH_EXT_NAME("sha3",      AArch64::AEK_SHA3,     "+sha3",  "-sha3")
+AARCH64_ARCH_EXT_NAME("sha2",      AArch64::AEK_SHA2,     "+sha2",  "-sha2")
+AARCH64_ARCH_EXT_NAME("aes",       AArch64::AEK_AES,      "+aes",   "-aes")
+AARCH64_ARCH_EXT_NAME("dotprod",   AArch64::AEK_DOTPROD,  "+dotprod","-dotprod")
+AARCH64_ARCH_EXT_NAME("fp",        AArch64::AEK_FP,       "+fp-armv8",  "-fp-armv8")
+AARCH64_ARCH_EXT_NAME("simd",      AArch64::AEK_SIMD,     "+neon",  "-neon")
+AARCH64_ARCH_EXT_NAME("fp16",      AArch64::AEK_FP16,     "+fullfp16",  "-fullfp16")
+AARCH64_ARCH_EXT_NAME("fp16fml",   AArch64::AEK_FP16FML,  "+fp16fml", "-fp16fml")
+AARCH64_ARCH_EXT_NAME("profile",   AArch64::AEK_PROFILE,  "+spe",  "-spe")
+AARCH64_ARCH_EXT_NAME("ras",       AArch64::AEK_RAS,      "+ras",  "-ras")
+AARCH64_ARCH_EXT_NAME("sve",       AArch64::AEK_SVE,      "+sve",  "-sve")
+AARCH64_ARCH_EXT_NAME("sve2",      AArch64::AEK_SVE2,     "+sve2", "-sve2")
+AARCH64_ARCH_EXT_NAME("sve2-aes",  AArch64::AEK_SVE2AES,  "+sve2-aes", "-sve2-aes")
+AARCH64_ARCH_EXT_NAME("sve2-sm4",  AArch64::AEK_SVE2SM4,  "+sve2-sm4", "-sve2-sm4")
+AARCH64_ARCH_EXT_NAME("sve2-sha3", AArch64::AEK_SVE2SHA3, "+sve2-sha3", "-sve2-sha3")
+AARCH64_ARCH_EXT_NAME("bitperm",   AArch64::AEK_BITPERM,  "+bitperm", "-bitperm")
+AARCH64_ARCH_EXT_NAME("rcpc",      AArch64::AEK_RCPC,     "+rcpc", "-rcpc")
+AARCH64_ARCH_EXT_NAME("rng",       AArch64::AEK_RAND,     "+rand",  "-rand")
+AARCH64_ARCH_EXT_NAME("memtag",    AArch64::AEK_MTE,      "+mte",   "-mte")
+AARCH64_ARCH_EXT_NAME("ssbs",      AArch64::AEK_SSBS,     "+ssbs",  "-ssbs")
+AARCH64_ARCH_EXT_NAME("sb",        AArch64::AEK_SB,       "+sb",    "-sb")
+AARCH64_ARCH_EXT_NAME("predres",   AArch64::AEK_PREDRES,  "+predres", "-predres")
 #undef AARCH64_ARCH_EXT_NAME
 
 #ifndef AARCH64_CPU_NAME
 #define AARCH64_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT)
 #endif
 AARCH64_CPU_NAME("cortex-a35", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("cortex-a53", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, true,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("cortex-a55", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
                  (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC))
 AARCH64_CPU_NAME("cortex-a57", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("cortex-a72", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("cortex-a73", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("cortex-a75", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
                  (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC))
+AARCH64_CPU_NAME("cortex-a76", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
+                 (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC |
+                  AArch64::AEK_SSBS))
+AARCH64_CPU_NAME("cortex-a76ae", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
+                 (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC |
+                  AArch64::AEK_SSBS))
 AARCH64_CPU_NAME("cyclone", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_NONE))
+                 (AArch64::AEK_NONE))
 AARCH64_CPU_NAME("exynos-m1", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("exynos-m2", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("exynos-m4", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD))
+                 (AArch64::AEK_DOTPROD | AArch64::AEK_FP16))
+AARCH64_CPU_NAME("exynos-m5", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
+                 (AArch64::AEK_DOTPROD | AArch64::AEK_FP16))
 AARCH64_CPU_NAME("falkor", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC | AArch64::AEK_RDM))
+                 (AArch64::AEK_CRC | AArch64::AEK_RDM))
 AARCH64_CPU_NAME("saphira", ARMV8_3A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_PROFILE))
+                 (AArch64::AEK_PROFILE))
 AARCH64_CPU_NAME("kryo", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC))
+                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("thunderx2t99", ARMV8_1A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_NONE))
+                 (AArch64::AEK_NONE))
 AARCH64_CPU_NAME("thunderx", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
+                 (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
 AARCH64_CPU_NAME("thunderxt88", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
+                 (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
 AARCH64_CPU_NAME("thunderxt81", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
+                 (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
 AARCH64_CPU_NAME("thunderxt83", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
+                 (AArch64::AEK_CRC | AArch64::AEK_PROFILE))
 AARCH64_CPU_NAME("tsv110", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
-                 (AArch64::AEK_PROFILE | AArch64::AEK_FP16 | AArch64::AEK_FP16FML |
-                  AArch64::AEK_DOTPROD))
+                 (AArch64::AEK_DOTPROD |
+                  AArch64::AEK_FP16 | AArch64::AEK_FP16FML |
+                  AArch64::AEK_PROFILE))
 // Invalid CPU
 AARCH64_CPU_NAME("invalid", INVALID, FK_INVALID, true, AArch64::AEK_INVALID)
 #undef AARCH64_CPU_NAME
diff --git a/linux-x64/clang/include/llvm/Support/AArch64TargetParser.h b/linux-x64/clang/include/llvm/Support/AArch64TargetParser.h
index faf1c5c..965d385 100644
--- a/linux-x64/clang/include/llvm/Support/AArch64TargetParser.h
+++ b/linux-x64/clang/include/llvm/Support/AArch64TargetParser.h
@@ -49,6 +49,11 @@
   AEK_SSBS =        1 << 20,
   AEK_SB =          1 << 21,
   AEK_PREDRES =     1 << 22,
+  AEK_SVE2 =        1 << 23,
+  AEK_SVE2AES =     1 << 24,
+  AEK_SVE2SM4 =     1 << 25,
+  AEK_SVE2SHA3 =    1 << 26,
+  AEK_BITPERM =     1 << 27,
 };
 
 enum class ArchKind {
diff --git a/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h b/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h
index f43be51..f7f1ec4 100644
--- a/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h
+++ b/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h
@@ -74,6 +74,7 @@
   HiddenPrintfBuffer     = 11,
   HiddenDefaultQueue     = 12,
   HiddenCompletionAction = 13,
+  HiddenMultiGridSyncArg = 14,
   Unknown                = 0xff
 };
 
@@ -156,6 +157,8 @@
 constexpr char TypeName[] = "TypeName";
 /// Key for Kernel::Arg::Metadata::mSize.
 constexpr char Size[] = "Size";
+/// Key for Kernel::Arg::Metadata::mOffset.
+constexpr char Offset[] = "Offset";
 /// Key for Kernel::Arg::Metadata::mAlign.
 constexpr char Align[] = "Align";
 /// Key for Kernel::Arg::Metadata::mValueKind.
@@ -188,6 +191,8 @@
   std::string mTypeName = std::string();
   /// Size in bytes. Required.
   uint32_t mSize = 0;
+  /// Offset in bytes. Required for code object v3, unused for code object v2.
+  uint32_t mOffset = 0;
   /// Alignment in bytes. Required.
   uint32_t mAlign = 0;
   /// Value kind. Required.
@@ -452,11 +457,30 @@
 //===----------------------------------------------------------------------===//
 namespace PALMD {
 
-/// PAL metadata assembler directive.
+/// PAL metadata (old linear format) assembler directive.
 constexpr char AssemblerDirective[] = ".amd_amdgpu_pal_metadata";
 
+/// PAL metadata (new MsgPack format) beginning assembler directive.
+constexpr char AssemblerDirectiveBegin[] = ".amdgpu_pal_metadata";
+
+/// PAL metadata (new MsgPack format) ending assembler directive.
+constexpr char AssemblerDirectiveEnd[] = ".end_amdgpu_pal_metadata";
+
 /// PAL metadata keys.
 enum Key : uint32_t {
+  R_2E12_COMPUTE_PGM_RSRC1 = 0x2e12,
+  R_2D4A_SPI_SHADER_PGM_RSRC1_LS = 0x2d4a,
+  R_2D0A_SPI_SHADER_PGM_RSRC1_HS = 0x2d0a,
+  R_2CCA_SPI_SHADER_PGM_RSRC1_ES = 0x2cca,
+  R_2C8A_SPI_SHADER_PGM_RSRC1_GS = 0x2c8a,
+  R_2C4A_SPI_SHADER_PGM_RSRC1_VS = 0x2c4a,
+  R_2C0A_SPI_SHADER_PGM_RSRC1_PS = 0x2c0a,
+  R_2E00_COMPUTE_DISPATCH_INITIATOR = 0x2e00,
+  R_A1B3_SPI_PS_INPUT_ENA = 0xa1b3,
+  R_A1B4_SPI_PS_INPUT_ADDR = 0xa1b4,
+  R_A1B6_SPI_PS_IN_CONTROL = 0xa1b6,
+  R_A2D5_VGT_SHADER_STAGES_EN = 0xa2d5,
+
   LS_NUM_USED_VGPRS = 0x10000021,
   HS_NUM_USED_VGPRS = 0x10000022,
   ES_NUM_USED_VGPRS = 0x10000023,
@@ -482,12 +506,6 @@
   CS_SCRATCH_SIZE = 0x1000004a
 };
 
-/// PAL metadata represented as a vector.
-typedef std::vector<uint32_t> Metadata;
-
-/// Converts \p PALMetadata to \p String.
-std::error_code toString(const Metadata &PALMetadata, std::string &String);
-
 } // end namespace PALMD
 } // end namespace AMDGPU
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Support/AMDHSAKernelDescriptor.h b/linux-x64/clang/include/llvm/Support/AMDHSAKernelDescriptor.h
index dca1a31..d1c2147 100644
--- a/linux-x64/clang/include/llvm/Support/AMDHSAKernelDescriptor.h
+++ b/linux-x64/clang/include/llvm/Support/AMDHSAKernelDescriptor.h
@@ -88,8 +88,11 @@
   COMPUTE_PGM_RSRC1(ENABLE_IEEE_MODE, 23, 1),
   COMPUTE_PGM_RSRC1(BULKY, 24, 1),
   COMPUTE_PGM_RSRC1(CDBG_USER, 25, 1),
-  COMPUTE_PGM_RSRC1(FP16_OVFL, 26, 1), // GFX9+
-  COMPUTE_PGM_RSRC1(RESERVED0, 27, 5),
+  COMPUTE_PGM_RSRC1(FP16_OVFL, 26, 1),    // GFX9+
+  COMPUTE_PGM_RSRC1(RESERVED0, 27, 2),
+  COMPUTE_PGM_RSRC1(WGP_MODE, 29, 1),     // GFX10+
+  COMPUTE_PGM_RSRC1(MEM_ORDERED, 30, 1),  // GFX10+
+  COMPUTE_PGM_RSRC1(FWD_PROGRESS, 31, 1), // GFX10+
 };
 #undef COMPUTE_PGM_RSRC1
 
@@ -119,6 +122,15 @@
 };
 #undef COMPUTE_PGM_RSRC2
 
+// Compute program resource register 3. Must match hardware definition.
+#define COMPUTE_PGM_RSRC3(NAME, SHIFT, WIDTH) \
+  AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_ ## NAME, SHIFT, WIDTH)
+enum : int32_t {
+  COMPUTE_PGM_RSRC3(SHARED_VGPR_COUNT, 0, 4), // GFX10+
+  COMPUTE_PGM_RSRC3(RESERVED0, 4, 28),
+};
+#undef COMPUTE_PGM_RSRC3
+
 // Kernel code properties. Must be kept backwards compatible.
 #define KERNEL_CODE_PROPERTY(NAME, SHIFT, WIDTH) \
   AMDHSA_BITS_ENUM_ENTRY(KERNEL_CODE_PROPERTY_ ## NAME, SHIFT, WIDTH)
@@ -130,7 +142,9 @@
   KERNEL_CODE_PROPERTY(ENABLE_SGPR_DISPATCH_ID, 4, 1),
   KERNEL_CODE_PROPERTY(ENABLE_SGPR_FLAT_SCRATCH_INIT, 5, 1),
   KERNEL_CODE_PROPERTY(ENABLE_SGPR_PRIVATE_SEGMENT_SIZE, 6, 1),
-  KERNEL_CODE_PROPERTY(RESERVED0, 7, 9),
+  KERNEL_CODE_PROPERTY(RESERVED0, 7, 3),
+  KERNEL_CODE_PROPERTY(ENABLE_WAVEFRONT_SIZE32, 10, 1), // GFX10+
+  KERNEL_CODE_PROPERTY(RESERVED1, 11, 5),
 };
 #undef KERNEL_CODE_PROPERTY
 
@@ -140,7 +154,8 @@
   uint32_t private_segment_fixed_size;
   uint8_t reserved0[8];
   int64_t kernel_code_entry_byte_offset;
-  uint8_t reserved1[24];
+  uint8_t reserved1[20];
+  uint32_t compute_pgm_rsrc3; // GFX10+
   uint32_t compute_pgm_rsrc1;
   uint32_t compute_pgm_rsrc2;
   uint16_t kernel_code_properties;
@@ -166,6 +181,9 @@
     offsetof(kernel_descriptor_t, reserved1) == 24,
     "invalid offset for reserved1");
 static_assert(
+    offsetof(kernel_descriptor_t, compute_pgm_rsrc3) == 44,
+    "invalid offset for compute_pgm_rsrc3");
+static_assert(
     offsetof(kernel_descriptor_t, compute_pgm_rsrc1) == 48,
     "invalid offset for compute_pgm_rsrc1");
 static_assert(
diff --git a/linux-x64/clang/include/llvm/Support/ARMAttributeParser.h b/linux-x64/clang/include/llvm/Support/ARMAttributeParser.h
index c7aeaf9..f6c39ab 100644
--- a/linux-x64/clang/include/llvm/Support/ARMAttributeParser.h
+++ b/linux-x64/clang/include/llvm/Support/ARMAttributeParser.h
@@ -53,6 +53,8 @@
                  uint32_t &Offset);
   void Advanced_SIMD_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
                           uint32_t &Offset);
+  void MVE_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
+                uint32_t &Offset);
   void PCS_config(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
                   uint32_t &Offset);
   void ABI_PCS_R9_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
diff --git a/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h b/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h
index 1299c0b..90481ea 100644
--- a/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h
+++ b/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h
@@ -67,6 +67,7 @@
   MPextension_use           = 42, // recoded from 70 (ABI r2.08)
   DIV_use                   = 44,
   DSP_extension             = 46,
+  MVE_arch                  = 48,
   also_compatible_with      = 65,
   conformance               = 67,
   Virtualization_use        = 68,
@@ -110,6 +111,7 @@
   v8_R     = 15,  // e.g. Cortex R52
   v8_M_Base= 16,  // v8_M_Base AArch32
   v8_M_Main= 17,  // v8_M_Main AArch32
+  v8_1_M_Main=21, // v8_1_M_Main AArch32
 };
 
 enum CPUArchProfile {               // (=7), uleb128
@@ -151,6 +153,10 @@
   AllowNeonARMv8 = 3, // ARM v8-A SIMD was permitted
   AllowNeonARMv8_1a = 4,// ARM v8.1-A SIMD was permitted (RDMA)
 
+  // Tag_MVE_arch, (=48), uleb128
+  AllowMVEInteger = 1, // integer-only MVE was permitted
+  AllowMVEIntegerAndFloat = 2, // both integer and floating point MVE were permitted
+
   // Tag_ABI_PCS_R9_use, (=14), uleb128
   R9IsGPR = 0,        // R9 used as v6 (just another callee-saved register)
   R9IsSB = 1,         // R9 used as a global static base rgister
diff --git a/linux-x64/clang/include/llvm/Support/ARMTargetParser.def b/linux-x64/clang/include/llvm/Support/ARMTargetParser.def
index 35f8333..593480f 100644
--- a/linux-x64/clang/include/llvm/Support/ARMTargetParser.def
+++ b/linux-x64/clang/include/llvm/Support/ARMTargetParser.def
@@ -31,6 +31,8 @@
 ARM_FPU("fpv5-d16", FK_FPV5_D16, FPUVersion::VFPV5, NeonSupportLevel::None, FPURestriction::D16)
 ARM_FPU("fpv5-sp-d16", FK_FPV5_SP_D16, FPUVersion::VFPV5, NeonSupportLevel::None, FPURestriction::SP_D16)
 ARM_FPU("fp-armv8", FK_FP_ARMV8, FPUVersion::VFPV5, NeonSupportLevel::None, FPURestriction::None)
+ARM_FPU("fp-armv8-fullfp16-d16", FK_FP_ARMV8_FULLFP16_D16, FPUVersion::VFPV5_FULLFP16, NeonSupportLevel::None, FPURestriction::D16)
+ARM_FPU("fp-armv8-fullfp16-sp-d16", FK_FP_ARMV8_FULLFP16_SP_D16, FPUVersion::VFPV5_FULLFP16, NeonSupportLevel::None, FPURestriction::SP_D16)
 ARM_FPU("neon", FK_NEON, FPUVersion::VFPV3, NeonSupportLevel::Neon, FPURestriction::None)
 ARM_FPU("neon-fp16", FK_NEON_FP16, FPUVersion::VFPV3_FP16, NeonSupportLevel::Neon, FPURestriction::None)
 ARM_FPU("neon-vfpv4", FK_NEON_VFPV4, FPUVersion::VFPV4, NeonSupportLevel::Neon, FPURestriction::None)
@@ -118,6 +120,8 @@
           ARMBuildAttrs::CPUArch::v8_M_Base, FK_NONE, ARM::AEK_HWDIVTHUMB)
 ARM_ARCH("armv8-m.main", ARMV8MMainline, "8-M.Mainline", "v8m.main",
           ARMBuildAttrs::CPUArch::v8_M_Main, FK_FPV5_D16, ARM::AEK_HWDIVTHUMB)
+ARM_ARCH("armv8.1-m.main", ARMV8_1MMainline, "8.1-M.Mainline", "v8.1m.main",
+          ARMBuildAttrs::CPUArch::v8_1_M_Main, FK_FP_ARMV8_FULLFP16_SP_D16, ARM::AEK_HWDIVTHUMB | ARM::AEK_RAS | ARM::AEK_LOB)
 // Non-standard Arch names.
 ARM_ARCH("iwmmxt", IWMMXT, "iwmmxt", "", ARMBuildAttrs::CPUArch::v5TE,
           FK_NONE, ARM::AEK_NONE)
@@ -144,6 +148,8 @@
 ARM_ARCH_EXT_NAME("dotprod",  ARM::AEK_DOTPROD,  "+dotprod","-dotprod")
 ARM_ARCH_EXT_NAME("dsp",      ARM::AEK_DSP,      "+dsp",   "-dsp")
 ARM_ARCH_EXT_NAME("fp",       ARM::AEK_FP,       nullptr,  nullptr)
+ARM_ARCH_EXT_NAME("mve",      ARM::AEK_SIMD,     "+mve",   "-mve")
+ARM_ARCH_EXT_NAME("mve.fp",   (ARM::AEK_SIMD | ARM::AEK_FP), "+mve.fp", "-mve.fp")
 ARM_ARCH_EXT_NAME("idiv",     (ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB), nullptr, nullptr)
 ARM_ARCH_EXT_NAME("mp",       ARM::AEK_MP,       nullptr,  nullptr)
 ARM_ARCH_EXT_NAME("simd",     ARM::AEK_SIMD,     nullptr,  nullptr)
@@ -158,6 +164,7 @@
 ARM_ARCH_EXT_NAME("xscale",   ARM::AEK_XSCALE,   nullptr,  nullptr)
 ARM_ARCH_EXT_NAME("fp16fml",  ARM::AEK_FP16FML,  "+fp16fml", "-fp16fml")
 ARM_ARCH_EXT_NAME("sb",       ARM::AEK_SB,       "+sb",      "-sb")
+ARM_ARCH_EXT_NAME("lob",      ARM::AEK_LOB,      "+lob",   "-lob")
 #undef ARM_ARCH_EXT_NAME
 
 #ifndef ARM_HW_DIV_NAME
@@ -251,6 +258,7 @@
 ARM_CPU_NAME("cortex-m7", ARMV7EM, FK_FPV5_D16, false, ARM::AEK_NONE)
 ARM_CPU_NAME("cortex-m23", ARMV8MBaseline, FK_NONE, false, ARM::AEK_NONE)
 ARM_CPU_NAME("cortex-m33", ARMV8MMainline, FK_FPV5_SP_D16, false, ARM::AEK_DSP)
+ARM_CPU_NAME("cortex-m35p", ARMV8MMainline, FK_FPV5_SP_D16, false, ARM::AEK_DSP)
 ARM_CPU_NAME("cortex-a32", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("cortex-a35", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("cortex-a53", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
@@ -261,12 +269,18 @@
 ARM_CPU_NAME("cortex-a73", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("cortex-a75", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
             (ARM::AEK_FP16 | ARM::AEK_DOTPROD))
+ARM_CPU_NAME("cortex-a76", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
+            (ARM::AEK_FP16 | ARM::AEK_DOTPROD))
+ARM_CPU_NAME("cortex-a76ae", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
+            (ARM::AEK_FP16 | ARM::AEK_DOTPROD))
 ARM_CPU_NAME("cyclone", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("exynos-m1", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("exynos-m2", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("exynos-m4", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
              (ARM::AEK_FP16 | ARM::AEK_DOTPROD))
+ARM_CPU_NAME("exynos-m5", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
+             (ARM::AEK_FP16 | ARM::AEK_DOTPROD))
 ARM_CPU_NAME("kryo", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 // Non-standard Arch names.
 ARM_CPU_NAME("iwmmxt", IWMMXT, FK_NONE, true, ARM::AEK_NONE)
diff --git a/linux-x64/clang/include/llvm/Support/ARMTargetParser.h b/linux-x64/clang/include/llvm/Support/ARMTargetParser.h
index edd47ef..4b9070d 100644
--- a/linux-x64/clang/include/llvm/Support/ARMTargetParser.h
+++ b/linux-x64/clang/include/llvm/Support/ARMTargetParser.h
@@ -45,6 +45,13 @@
   AEK_AES     =     1 << 16,
   AEK_FP16FML =     1 << 17,
   AEK_SB      =     1 << 18,
+  AEK_SVE2 =        1 << 19,
+  AEK_SVE2AES =     1 << 20,
+  AEK_SVE2SM4 =     1 << 21,
+  AEK_SVE2SHA3 =    1 << 22,
+  AEK_BITPERM =     1 << 23,
+  AEK_FP_DP   =     1 << 24,
+  AEK_LOB     =     1 << 25,
   // Unsupported extensions.
   AEK_OS = 0x8000000,
   AEK_IWMMXT = 0x10000000,
@@ -126,7 +133,8 @@
   VFPV3,
   VFPV3_FP16,
   VFPV4,
-  VFPV5
+  VFPV5,
+  VFPV5_FULLFP16,
 };
 
 // An FPU name restricts the FPU in one of three ways:
@@ -233,6 +241,8 @@
 StringRef getSubArch(ArchKind AK);
 StringRef getArchExtName(unsigned ArchExtKind);
 StringRef getArchExtFeature(StringRef ArchExt);
+bool appendArchExtFeatures(StringRef CPU, ARM::ArchKind AK, StringRef ArchExt,
+                           std::vector<StringRef> &Features);
 StringRef getHWDivName(unsigned HWDivKind);
 
 // Information by Name
diff --git a/linux-x64/clang/include/llvm/Support/ARMWinEH.h b/linux-x64/clang/include/llvm/Support/ARMWinEH.h
index b1b821b..857a0d3 100644
--- a/linux-x64/clang/include/llvm/Support/ARMWinEH.h
+++ b/linux-x64/clang/include/llvm/Support/ARMWinEH.h
@@ -382,7 +382,7 @@
     return ((Data[0] & 0x00400000) >> 22);
   }
 
-  uint8_t EpilogueCount() const {
+  uint16_t EpilogueCount() const {
     if (HeaderWords(*this) == 1) {
       if (isAArch64)
         return (Data[0] & 0x07C00000) >> 22;
diff --git a/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h b/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h
index 32e5728..d8fddde 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h
@@ -96,6 +96,18 @@
     return Error::success();
   }
 
+  /// Read an unsigned LEB128 encoded value.
+  ///
+  /// \returns a success error code if the data was successfully read, otherwise
+  /// returns an appropriate error code.
+  Error readULEB128(uint64_t &Dest);
+
+  /// Read a signed LEB128 encoded value.
+  ///
+  /// \returns a success error code if the data was successfully read, otherwise
+  /// returns an appropriate error code.
+  Error readSLEB128(int64_t &Dest);
+
   /// Read a null terminated string from \p Dest.  Whether a copy occurs depends
   /// on the implementation of the underlying stream.  Updates the stream's
   /// offset to point after the newly read data.
diff --git a/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h b/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h
index ae019c8..86d2389 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h
@@ -79,6 +79,20 @@
     return writeInteger<U>(static_cast<U>(Num));
   }
 
+  /// Write the unsigned integer Value to the underlying stream using ULEB128
+  /// encoding.
+  ///
+  /// \returns a success error code if the data was successfully written,
+  /// otherwise returns an appropriate error code.
+  Error writeULEB128(uint64_t Value);
+
+  /// Write the unsigned integer Value to the underlying stream using ULEB128
+  /// encoding.
+  ///
+  /// \returns a success error code if the data was successfully written,
+  /// otherwise returns an appropriate error code.
+  Error writeSLEB128(int64_t Value);
+
   /// Write the string \p Str to the underlying stream followed by a null
   /// terminator.  On success, updates the offset so that subsequent writes
   /// occur at the next unwritten position.  \p Str need not be null terminated
diff --git a/linux-x64/clang/include/llvm/Support/BranchProbability.h b/linux-x64/clang/include/llvm/Support/BranchProbability.h
index dd0aba0..cd9d369 100644
--- a/linux-x64/clang/include/llvm/Support/BranchProbability.h
+++ b/linux-x64/clang/include/llvm/Support/BranchProbability.h
@@ -118,6 +118,13 @@
     return *this;
   }
 
+  BranchProbability &operator/=(BranchProbability RHS) {
+    assert(N != UnknownN && RHS.N != UnknownN &&
+           "Unknown probability cannot participate in arithmetics.");
+    N = (static_cast<uint64_t>(N) * D + RHS.N / 2) / RHS.N;
+    return *this;
+  }
+
   BranchProbability &operator/=(uint32_t RHS) {
     assert(N != UnknownN &&
            "Unknown probability cannot participate in arithmetics.");
@@ -128,27 +135,38 @@
 
   BranchProbability operator+(BranchProbability RHS) const {
     BranchProbability Prob(*this);
-    return Prob += RHS;
+    Prob += RHS;
+    return Prob;
   }
 
   BranchProbability operator-(BranchProbability RHS) const {
     BranchProbability Prob(*this);
-    return Prob -= RHS;
+    Prob -= RHS;
+    return Prob;
   }
 
   BranchProbability operator*(BranchProbability RHS) const {
     BranchProbability Prob(*this);
-    return Prob *= RHS;
+    Prob *= RHS;
+    return Prob;
   }
 
   BranchProbability operator*(uint32_t RHS) const {
     BranchProbability Prob(*this);
-    return Prob *= RHS;
+    Prob *= RHS;
+    return Prob;
+  }
+
+  BranchProbability operator/(BranchProbability RHS) const {
+    BranchProbability Prob(*this);
+    Prob /= RHS;
+    return Prob;
   }
 
   BranchProbability operator/(uint32_t RHS) const {
     BranchProbability Prob(*this);
-    return Prob /= RHS;
+    Prob /= RHS;
+    return Prob;
   }
 
   bool operator==(BranchProbability RHS) const { return N == RHS.N; }
diff --git a/linux-x64/clang/include/llvm/Support/CRC.h b/linux-x64/clang/include/llvm/Support/CRC.h
new file mode 100644
index 0000000..6ea8e3e
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/CRC.h
@@ -0,0 +1,25 @@
+//===-- llvm/Support/CRC.h - Cyclic Redundancy Check-------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains basic functions for calculating Cyclic Redundancy Check
+// or CRC.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_CRC_H
+#define LLVM_SUPPORT_CRC_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/DataTypes.h"
+
+namespace llvm {
+/// zlib independent CRC32 calculation.
+uint32_t crc32(uint32_t CRC, StringRef S);
+} // end namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/Casting.h b/linux-x64/clang/include/llvm/Support/Casting.h
index cddee36..46bdedb 100644
--- a/linux-x64/clang/include/llvm/Support/Casting.h
+++ b/linux-x64/clang/include/llvm/Support/Casting.h
@@ -143,6 +143,16 @@
                        typename simplify_type<const Y>::SimpleType>::doit(Val);
 }
 
+// isa_and_nonnull<X> - Functionally identical to isa, except that a null value
+// is accepted.
+//
+template <class X, class Y>
+LLVM_NODISCARD inline bool isa_and_nonnull(const Y &Val) {
+  if (!Val)
+    return false;
+  return isa<X>(Val);
+}
+
 //===----------------------------------------------------------------------===//
 //                          cast<x> Support Templates
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h b/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h
index 8f7fbde..8a50e3d 100644
--- a/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h
+++ b/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h
@@ -49,6 +49,15 @@
   return checkedOp(LHS, RHS, &llvm::APInt::sadd_ov);
 }
 
+/// Subtract two signed integers \p LHS and \p RHS.
+/// \return Optional of sum if no signed overflow occurred,
+/// \c None otherwise.
+template <typename T>
+typename std::enable_if<std::is_signed<T>::value, llvm::Optional<T>>::type
+checkedSub(T LHS, T RHS) {
+  return checkedOp(LHS, RHS, &llvm::APInt::ssub_ov);
+}
+
 /// Multiply two signed integers \p LHS and \p RHS.
 /// \return Optional of product if no signed overflow occurred,
 /// \c None otherwise.
diff --git a/linux-x64/clang/include/llvm/Support/CodeGen.h b/linux-x64/clang/include/llvm/Support/CodeGen.h
index 3175b29..a3f423e 100644
--- a/linux-x64/clang/include/llvm/Support/CodeGen.h
+++ b/linux-x64/clang/include/llvm/Support/CodeGen.h
@@ -18,13 +18,14 @@
 
   // Relocation model types.
   namespace Reloc {
-  enum Model { Static, PIC_, DynamicNoPIC, ROPI, RWPI, ROPI_RWPI };
+    // Cannot be named PIC due to collision with -DPIC
+    enum Model { Static, PIC_, DynamicNoPIC, ROPI, RWPI, ROPI_RWPI };
   }
 
   // Code model types.
   namespace CodeModel {
     // Sync changes with CodeGenCWrappers.h.
-  enum Model { Tiny, Small, Kernel, Medium, Large };
+    enum Model { Tiny, Small, Kernel, Medium, Large };
   }
 
   namespace PICLevel {
diff --git a/linux-x64/clang/include/llvm/Support/CommandLine.h b/linux-x64/clang/include/llvm/Support/CommandLine.h
index a78020f..3cc2c3c 100644
--- a/linux-x64/clang/include/llvm/Support/CommandLine.h
+++ b/linux-x64/clang/include/llvm/Support/CommandLine.h
@@ -66,7 +66,8 @@
 bool ParseCommandLineOptions(int argc, const char *const *argv,
                              StringRef Overview = "",
                              raw_ostream *Errs = nullptr,
-                             const char *EnvVar = nullptr);
+                             const char *EnvVar = nullptr,
+                             bool LongOptionsUseDoubleDash = false);
 
 //===----------------------------------------------------------------------===//
 // ParseEnvironmentOptions - Environment variable option processing alternate
@@ -158,23 +159,27 @@
 // AlwaysPrefix - Only allow the behavior enabled by the Prefix flag and reject
 // the Option=Value form.
 //
-// Grouping - With this option enabled, multiple letter options are allowed to
-// bunch together with only a single hyphen for the whole group.  This allows
-// emulation of the behavior that ls uses for example: ls -la === ls -l -a
-//
 
 enum FormattingFlags {
   NormalFormatting = 0x00, // Nothing special
   Positional = 0x01,       // Is a positional argument, no '-' required
   Prefix = 0x02,           // Can this option directly prefix its value?
-  AlwaysPrefix = 0x03,     // Can this option only directly prefix its value?
-  Grouping = 0x04          // Can this option group with other options?
+  AlwaysPrefix = 0x03      // Can this option only directly prefix its value?
 };
 
 enum MiscFlags {             // Miscellaneous flags to adjust argument
   CommaSeparated = 0x01,     // Should this cl::list split between commas?
   PositionalEatsArgs = 0x02, // Should this positional cl::list eat -args?
-  Sink = 0x04                // Should this cl::list eat all unknown options?
+  Sink = 0x04,               // Should this cl::list eat all unknown options?
+
+  // Grouping - Can this option group with other options?
+  // If this is enabled, multiple letter options are allowed to bunch together
+  // with only a single hyphen for the whole group.  This allows emulation
+  // of the behavior that ls uses for example: ls -la === ls -l -a
+  Grouping = 0x08,
+
+  // Default option
+  DefaultOption = 0x10
 };
 
 //===----------------------------------------------------------------------===//
@@ -260,26 +265,27 @@
   // Out of line virtual function to provide home for the class.
   virtual void anchor();
 
-  int NumOccurrences = 0; // The number of times specified
+  uint16_t NumOccurrences; // The number of times specified
   // Occurrences, HiddenFlag, and Formatting are all enum types but to avoid
   // problems with signed enums in bitfields.
-  unsigned Occurrences : 3; // enum NumOccurrencesFlag
+  uint16_t Occurrences : 3; // enum NumOccurrencesFlag
   // not using the enum type for 'Value' because zero is an implementation
   // detail representing the non-value
-  unsigned Value : 2;
-  unsigned HiddenFlag : 2; // enum OptionHidden
-  unsigned Formatting : 3; // enum FormattingFlags
-  unsigned Misc : 3;
-  unsigned Position = 0;       // Position of last occurrence of the option
-  unsigned AdditionalVals = 0; // Greater than 0 for multi-valued option.
+  uint16_t Value : 2;
+  uint16_t HiddenFlag : 2; // enum OptionHidden
+  uint16_t Formatting : 2; // enum FormattingFlags
+  uint16_t Misc : 5;
+  uint16_t FullyInitialized : 1; // Has addArgument been called?
+  uint16_t Position;             // Position of last occurrence of the option
+  uint16_t AdditionalVals;       // Greater than 0 for multi-valued option.
 
 public:
   StringRef ArgStr;   // The argument string itself (ex: "help", "o")
   StringRef HelpStr;  // The descriptive text message for -help
   StringRef ValueStr; // String describing what the value of this option is
-  OptionCategory *Category; // The Category this option belongs to
-  SmallPtrSet<SubCommand *, 4> Subs; // The subcommands this option belongs to.
-  bool FullyInitialized = false; // Has addArgument been called?
+  SmallVector<OptionCategory *, 1>
+      Categories;                    // The Categories this option belongs to
+  SmallPtrSet<SubCommand *, 1> Subs; // The subcommands this option belongs to.
 
   inline enum NumOccurrencesFlag getNumOccurrencesFlag() const {
     return (enum NumOccurrencesFlag)Occurrences;
@@ -305,6 +311,7 @@
   bool hasArgStr() const { return !ArgStr.empty(); }
   bool isPositional() const { return getFormattingFlag() == cl::Positional; }
   bool isSink() const { return getMiscFlags() & cl::Sink; }
+  bool isDefaultOption() const { return getMiscFlags() & cl::DefaultOption; }
 
   bool isConsumeAfter() const {
     return getNumOccurrencesFlag() == cl::ConsumeAfter;
@@ -328,14 +335,17 @@
   void setFormattingFlag(enum FormattingFlags V) { Formatting = V; }
   void setMiscFlag(enum MiscFlags M) { Misc |= M; }
   void setPosition(unsigned pos) { Position = pos; }
-  void setCategory(OptionCategory &C) { Category = &C; }
+  void addCategory(OptionCategory &C);
   void addSubCommand(SubCommand &S) { Subs.insert(&S); }
 
 protected:
   explicit Option(enum NumOccurrencesFlag OccurrencesFlag,
                   enum OptionHidden Hidden)
-      : Occurrences(OccurrencesFlag), Value(0), HiddenFlag(Hidden),
-        Formatting(NormalFormatting), Misc(0), Category(&GeneralCategory) {}
+      : NumOccurrences(0), Occurrences(OccurrencesFlag), Value(0),
+        HiddenFlag(Hidden), Formatting(NormalFormatting), Misc(0),
+        FullyInitialized(false), Position(0), AdditionalVals(0) {
+    Categories.push_back(&GeneralCategory);
+  }
 
   inline void setNumAdditionalVals(unsigned n) { AdditionalVals = n; }
 
@@ -381,7 +391,7 @@
   }
 
   inline int getNumOccurrences() const { return NumOccurrences; }
-  inline void reset() { NumOccurrences = 0; }
+  void reset();
 };
 
 //===----------------------------------------------------------------------===//
@@ -446,7 +456,7 @@
 
   cat(OptionCategory &c) : Category(c) {}
 
-  template <class Opt> void apply(Opt &O) const { O.setCategory(Category); }
+  template <class Opt> void apply(Opt &O) const { O.addCategory(Category); }
 };
 
 // sub - Specify the subcommand that this option belongs to.
@@ -822,6 +832,8 @@
 public:
   basic_parser_impl(Option &) {}
 
+  virtual ~basic_parser_impl() {}
+
   enum ValueExpected getValueExpectedFlagDefault() const {
     return ValueRequired;
   }
@@ -849,8 +861,6 @@
   virtual void anchor();
 
 protected:
-  ~basic_parser_impl() = default;
-
   // A helper for basic_parser::printOptionDiff.
   void printOptionName(const Option &O, size_t GlobalWidth) const;
 };
@@ -864,15 +874,12 @@
   using OptVal = OptionValue<DataType>;
 
   basic_parser(Option &O) : basic_parser_impl(O) {}
-
-protected:
-  ~basic_parser() = default;
 };
 
 //--------------------------------------------------
 // parser<bool>
 //
-template <> class parser<bool> final : public basic_parser<bool> {
+template <> class parser<bool> : public basic_parser<bool> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -899,8 +906,7 @@
 
 //--------------------------------------------------
 // parser<boolOrDefault>
-template <>
-class parser<boolOrDefault> final : public basic_parser<boolOrDefault> {
+template <> class parser<boolOrDefault> : public basic_parser<boolOrDefault> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -926,7 +932,7 @@
 //--------------------------------------------------
 // parser<int>
 //
-template <> class parser<int> final : public basic_parser<int> {
+template <> class parser<int> : public basic_parser<int> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -948,7 +954,7 @@
 //--------------------------------------------------
 // parser<unsigned>
 //
-template <> class parser<unsigned> final : public basic_parser<unsigned> {
+template <> class parser<unsigned> : public basic_parser<unsigned> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -968,11 +974,33 @@
 extern template class basic_parser<unsigned>;
 
 //--------------------------------------------------
+// parser<unsigned long>
+//
+template <>
+class parser<unsigned long> final : public basic_parser<unsigned long> {
+public:
+  parser(Option &O) : basic_parser(O) {}
+
+  // parse - Return true on error.
+  bool parse(Option &O, StringRef ArgName, StringRef Arg, unsigned long &Val);
+
+  // getValueName - Overload in subclass to provide a better default value.
+  StringRef getValueName() const override { return "ulong"; }
+
+  void printOptionDiff(const Option &O, unsigned long V, OptVal Default,
+                       size_t GlobalWidth) const;
+
+  // An out-of-line virtual method to provide a 'home' for this class.
+  void anchor() override;
+};
+
+extern template class basic_parser<unsigned long>;
+
+//--------------------------------------------------
 // parser<unsigned long long>
 //
 template <>
-class parser<unsigned long long> final
-    : public basic_parser<unsigned long long> {
+class parser<unsigned long long> : public basic_parser<unsigned long long> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -981,7 +1009,7 @@
              unsigned long long &Val);
 
   // getValueName - Overload in subclass to provide a better default value.
-  StringRef getValueName() const override { return "uint"; }
+  StringRef getValueName() const override { return "ulong"; }
 
   void printOptionDiff(const Option &O, unsigned long long V, OptVal Default,
                        size_t GlobalWidth) const;
@@ -995,7 +1023,7 @@
 //--------------------------------------------------
 // parser<double>
 //
-template <> class parser<double> final : public basic_parser<double> {
+template <> class parser<double> : public basic_parser<double> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -1017,7 +1045,7 @@
 //--------------------------------------------------
 // parser<float>
 //
-template <> class parser<float> final : public basic_parser<float> {
+template <> class parser<float> : public basic_parser<float> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -1039,7 +1067,7 @@
 //--------------------------------------------------
 // parser<std::string>
 //
-template <> class parser<std::string> final : public basic_parser<std::string> {
+template <> class parser<std::string> : public basic_parser<std::string> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -1064,7 +1092,7 @@
 //--------------------------------------------------
 // parser<char>
 //
-template <> class parser<char> final : public basic_parser<char> {
+template <> class parser<char> : public basic_parser<char> {
 public:
   parser(Option &O) : basic_parser(O) {}
 
@@ -1177,7 +1205,11 @@
 };
 
 template <> struct applicator<MiscFlags> {
-  static void opt(MiscFlags MF, Option &O) { O.setMiscFlag(MF); }
+  static void opt(MiscFlags MF, Option &O) {
+    assert((MF != Grouping || O.ArgStr.size() == 1) &&
+           "cl::Grouping can only apply to single charater Options.");
+    O.setMiscFlag(MF);
+  }
 };
 
 // apply method - Apply modifiers to an option in a type safe way.
@@ -1397,6 +1429,8 @@
 public:
   list_storage() = default;
 
+  void clear() {}
+
   bool setLocation(Option &O, StorageClass &L) {
     if (Location)
       return O.error("cl::location(x) specified more than once!");
@@ -1448,6 +1482,10 @@
   reference operator[](size_type pos) { return Storage[pos]; }
   const_reference operator[](size_type pos) const { return Storage[pos]; }
 
+  void clear() {
+    Storage.clear();
+  }
+
   iterator erase(const_iterator pos) { return Storage.erase(pos); }
   iterator erase(const_iterator first, const_iterator last) {
     return Storage.erase(first, last);
@@ -1525,7 +1563,10 @@
   void printOptionValue(size_t /*GlobalWidth*/, bool /*Force*/) const override {
   }
 
-  void setDefault() override {}
+  void setDefault() override {
+    Positions.clear();
+    list_storage<DataType, StorageClass>::clear();
+  }
 
   void done() {
     addArgument();
@@ -1731,7 +1772,10 @@
       error("cl::alias must have argument name specified!");
     if (!AliasFor)
       error("cl::alias must have an cl::aliasopt(option) specified!");
+    if (!Subs.empty())
+      error("cl::alias must not have cl::sub(), aliased option's cl::sub() will be used!");
     Subs = AliasFor->Subs;
+    Categories = AliasFor->Categories;
     addArgument();
   }
 
diff --git a/linux-x64/clang/include/llvm/Support/Compiler.h b/linux-x64/clang/include/llvm/Support/Compiler.h
index a81488a..3f4f465 100644
--- a/linux-x64/clang/include/llvm/Support/Compiler.h
+++ b/linux-x64/clang/include/llvm/Support/Compiler.h
@@ -254,6 +254,15 @@
 #define LLVM_FALLTHROUGH
 #endif
 
+/// LLVM_REQUIRE_CONSTANT_INITIALIZATION - Apply this to globals to ensure that
+/// they are constant initialized.
+#if __has_cpp_attribute(clang::require_constant_initialization)
+#define LLVM_REQUIRE_CONSTANT_INITIALIZATION                                   \
+  [[clang::require_constant_initialization]]
+#else
+#define LLVM_REQUIRE_CONSTANT_INITIALIZATION
+#endif
+
 /// LLVM_EXTENSION - Support compilers where we have a keyword to suppress
 /// pedantic diagnostics.
 #ifdef __GNUC__
diff --git a/linux-x64/clang/include/llvm/Support/Endian.h b/linux-x64/clang/include/llvm/Support/Endian.h
index a0632bb..d8be944 100644
--- a/linux-x64/clang/include/llvm/Support/Endian.h
+++ b/linux-x64/clang/include/llvm/Support/Endian.h
@@ -203,10 +203,14 @@
 
 namespace detail {
 
-template<typename value_type,
-         endianness endian,
-         std::size_t alignment>
+template<typename ValueType,
+         endianness Endian,
+         std::size_t Alignment>
 struct packed_endian_specific_integral {
+  using value_type = ValueType;
+  static constexpr endianness endian = Endian;
+  static constexpr std::size_t alignment = Alignment;
+
   packed_endian_specific_integral() = default;
 
   explicit packed_endian_specific_integral(value_type val) { *this = val; }
@@ -334,6 +338,17 @@
 using unaligned_int64_t =
     detail::packed_endian_specific_integral<int64_t, native, unaligned>;
 
+template <typename T>
+using little_t = detail::packed_endian_specific_integral<T, little, unaligned>;
+template <typename T>
+using big_t = detail::packed_endian_specific_integral<T, big, unaligned>;
+
+template <typename T>
+using aligned_little_t =
+    detail::packed_endian_specific_integral<T, little, aligned>;
+template <typename T>
+using aligned_big_t = detail::packed_endian_specific_integral<T, big, aligned>;
+
 namespace endian {
 
 template <typename T> inline T read(const void *P, endianness E) {
diff --git a/linux-x64/clang/include/llvm/Support/Error.h b/linux-x64/clang/include/llvm/Support/Error.h
index 23a48ed..299fce7 100644
--- a/linux-x64/clang/include/llvm/Support/Error.h
+++ b/linux-x64/clang/include/llvm/Support/Error.h
@@ -1160,8 +1160,8 @@
 
 /// Create formatted StringError object.
 template <typename... Ts>
-Error createStringError(std::error_code EC, char const *Fmt,
-                        const Ts &... Vals) {
+inline Error createStringError(std::error_code EC, char const *Fmt,
+                               const Ts &... Vals) {
   std::string Buffer;
   raw_string_ostream Stream(Buffer);
   Stream << format(Fmt, Vals...);
@@ -1170,6 +1170,12 @@
 
 Error createStringError(std::error_code EC, char const *Msg);
 
+template <typename... Ts>
+inline Error createStringError(std::errc EC, char const *Fmt,
+                               const Ts &... Vals) {
+  return createStringError(std::make_error_code(EC), Fmt, Vals...);
+}
+
 /// This class wraps a filename and another Error.
 ///
 /// In some cases, an error needs to live along a 'source' name, in order to
@@ -1177,11 +1183,14 @@
 class FileError final : public ErrorInfo<FileError> {
 
   friend Error createFileError(const Twine &, Error);
+  friend Error createFileError(const Twine &, size_t, Error);
 
 public:
   void log(raw_ostream &OS) const override {
     assert(Err && !FileName.empty() && "Trying to log after takeError().");
     OS << "'" << FileName << "': ";
+    if (Line.hasValue())
+      OS << "line " << Line.getValue() << ": ";
     Err->log(OS);
   }
 
@@ -1193,26 +1202,36 @@
   static char ID;
 
 private:
-  FileError(const Twine &F, std::unique_ptr<ErrorInfoBase> E) {
+  FileError(const Twine &F, Optional<size_t> LineNum,
+            std::unique_ptr<ErrorInfoBase> E) {
     assert(E && "Cannot create FileError from Error success value.");
     assert(!F.isTriviallyEmpty() &&
            "The file name provided to FileError must not be empty.");
     FileName = F.str();
     Err = std::move(E);
+    Line = std::move(LineNum);
   }
 
-  static Error build(const Twine &F, Error E) {
-    return Error(std::unique_ptr<FileError>(new FileError(F, E.takePayload())));
+  static Error build(const Twine &F, Optional<size_t> Line, Error E) {
+    return Error(
+        std::unique_ptr<FileError>(new FileError(F, Line, E.takePayload())));
   }
 
   std::string FileName;
+  Optional<size_t> Line;
   std::unique_ptr<ErrorInfoBase> Err;
 };
 
 /// Concatenate a source file path and/or name with an Error. The resulting
 /// Error is unchecked.
 inline Error createFileError(const Twine &F, Error E) {
-  return FileError::build(F, std::move(E));
+  return FileError::build(F, Optional<size_t>(), std::move(E));
+}
+
+/// Concatenate a source file path and/or name with line number and an Error.
+/// The resulting Error is unchecked.
+inline Error createFileError(const Twine &F, size_t Line, Error E) {
+  return FileError::build(F, Optional<size_t>(Line), std::move(E));
 }
 
 /// Concatenate a source file path and/or name with a std::error_code 
@@ -1221,6 +1240,12 @@
   return createFileError(F, errorCodeToError(EC));
 }
 
+/// Concatenate a source file path and/or name with line number and
+/// std::error_code to form an Error object.
+inline Error createFileError(const Twine &F, size_t Line, std::error_code EC) {
+  return createFileError(F, Line, errorCodeToError(EC));
+}
+
 Error createFileError(const Twine &F, ErrorSuccess) = delete;
 
 /// Helper for check-and-exit error handling.
diff --git a/linux-x64/clang/include/llvm/Support/FileCheck.h b/linux-x64/clang/include/llvm/Support/FileCheck.h
index 01e9362..b3a8433 100644
--- a/linux-x64/clang/include/llvm/Support/FileCheck.h
+++ b/linux-x64/clang/include/llvm/Support/FileCheck.h
@@ -36,9 +36,174 @@
   bool VerboseVerbose = false;
 };
 
+//===----------------------------------------------------------------------===//
+// Numeric substitution handling code.
+//===----------------------------------------------------------------------===//
+
+/// Class representing a numeric variable and its associated current value.
+class FileCheckNumericVariable {
+private:
+  /// Name of the numeric variable.
+  StringRef Name;
+
+  /// Value of numeric variable, if defined, or None otherwise.
+  Optional<uint64_t> Value;
+
+  /// Line number where this variable is defined. Used to determine whether a
+  /// variable is defined on the same line as a given use.
+  size_t DefLineNumber;
+
+public:
+  /// Constructor for a variable \p Name defined at line \p DefLineNumber.
+  FileCheckNumericVariable(size_t DefLineNumber, StringRef Name)
+      : Name(Name), DefLineNumber(DefLineNumber) {}
+
+  /// Constructor for numeric variable \p Name with a known \p Value at parse
+  /// time (e.g. the @LINE numeric variable).
+  FileCheckNumericVariable(StringRef Name, uint64_t Value)
+      : Name(Name), Value(Value), DefLineNumber(0) {}
+
+  /// \returns name of this numeric variable.
+  StringRef getName() const { return Name; }
+
+  /// \returns this variable's value.
+  Optional<uint64_t> getValue() const { return Value; }
+
+  /// Sets value of this numeric variable, if undefined. Triggers an assertion
+  /// failure if the variable is actually defined.
+  void setValue(uint64_t Value);
+
+  /// Clears value of this numeric variable, regardless of whether it is
+  /// currently defined or not.
+  void clearValue();
+
+  /// \returns the line number where this variable is defined.
+  size_t getDefLineNumber() { return DefLineNumber; }
+};
+
+/// Type of functions evaluating a given binary operation.
+using binop_eval_t = uint64_t (*)(uint64_t, uint64_t);
+
+/// Class to represent an undefined variable error which prints that variable's
+/// name between quotes when printed.
+class FileCheckUndefVarError : public ErrorInfo<FileCheckUndefVarError> {
+private:
+  StringRef VarName;
+
+public:
+  static char ID;
+
+  FileCheckUndefVarError(StringRef VarName) : VarName(VarName) {}
+
+  StringRef getVarName() const { return VarName; }
+
+  std::error_code convertToErrorCode() const override {
+    return inconvertibleErrorCode();
+  }
+
+  /// Print name of variable associated with this error.
+  void log(raw_ostream &OS) const override {
+    OS << "\"";
+    OS.write_escaped(VarName) << "\"";
+  }
+};
+
+/// Class representing an expression consisting of either a single numeric
+/// variable or a binary operation between a numeric variable and an
+/// immediate.
+class FileCheckExpression {
+private:
+  /// Left operand.
+  FileCheckNumericVariable *LeftOp;
+
+  /// Right operand.
+  uint64_t RightOp;
+
+  /// Pointer to function that can evaluate this binary operation.
+  binop_eval_t EvalBinop;
+
+public:
+  FileCheckExpression(binop_eval_t EvalBinop,
+                      FileCheckNumericVariable *OperandLeft,
+                      uint64_t OperandRight)
+      : LeftOp(OperandLeft), RightOp(OperandRight), EvalBinop(EvalBinop) {}
+
+  /// Evaluates the value of this expression, using EvalBinop to perform the
+  /// binary operation it consists of. \returns an error if the numeric
+  /// variable used is undefined, or the expression value otherwise.
+  Expected<uint64_t> eval() const;
+};
+
+class FileCheckPatternContext;
+
+/// Class representing a substitution to perform in the RegExStr string.
+class FileCheckSubstitution {
+protected:
+  /// Pointer to a class instance holding, among other things, the table with
+  /// the values of live string variables at the start of any given CHECK line.
+  /// Used for substituting string variables with the text they were defined
+  /// as. Expressions are linked to the numeric variables they use at
+  /// parse time and directly access the value of the numeric variable to
+  /// evaluate their value.
+  FileCheckPatternContext *Context;
+
+  /// The string that needs to be substituted for something else. For a
+  /// string variable this is its name, otherwise this is the whole expression.
+  StringRef FromStr;
+
+  // Index in RegExStr of where to do the substitution.
+  size_t InsertIdx;
+
+public:
+  FileCheckSubstitution(FileCheckPatternContext *Context, StringRef VarName,
+                        size_t InsertIdx)
+      : Context(Context), FromStr(VarName), InsertIdx(InsertIdx) {}
+
+  virtual ~FileCheckSubstitution() = default;
+
+  /// \returns the string to be substituted for something else.
+  StringRef getFromString() const { return FromStr; }
+
+  /// \returns the index where the substitution is to be performed in RegExStr.
+  size_t getIndex() const { return InsertIdx; }
+
+  /// \returns a string containing the result of the substitution represented
+  /// by this class instance or an error if substitution failed.
+  virtual Expected<std::string> getResult() const = 0;
+};
+
+class FileCheckStringSubstitution : public FileCheckSubstitution {
+public:
+  FileCheckStringSubstitution(FileCheckPatternContext *Context,
+                              StringRef VarName, size_t InsertIdx)
+      : FileCheckSubstitution(Context, VarName, InsertIdx) {}
+
+  /// \returns the text that the string variable in this substitution matched
+  /// when defined, or an error if the variable is undefined.
+  Expected<std::string> getResult() const override;
+};
+
+class FileCheckNumericSubstitution : public FileCheckSubstitution {
+private:
+  /// Pointer to the class representing the expression whose value is to be
+  /// substituted.
+  FileCheckExpression *Expression;
+
+public:
+  FileCheckNumericSubstitution(FileCheckPatternContext *Context,
+                               StringRef ExpressionStr,
+                               FileCheckExpression *Expression,
+                               size_t InsertIdx)
+      : FileCheckSubstitution(Context, ExpressionStr, InsertIdx),
+        Expression(Expression) {}
+
+  /// \returns a string containing the result of evaluating the expression in
+  /// this substitution, or an error if evaluation failed.
+  Expected<std::string> getResult() const override;
+};
 
 //===----------------------------------------------------------------------===//
-// Pattern Handling Code.
+// Pattern handling code.
 //===----------------------------------------------------------------------===//
 
 namespace Check {
@@ -77,12 +242,142 @@
   int getCount() const { return Count; }
   FileCheckType &setCount(int C);
 
+  // \returns a description of \p Prefix.
   std::string getDescription(StringRef Prefix) const;
 };
-}
+} // namespace Check
 
 struct FileCheckDiag;
 
+/// Class holding the FileCheckPattern global state, shared by all patterns:
+/// tables holding values of variables and whether they are defined or not at
+/// any given time in the matching process.
+class FileCheckPatternContext {
+  friend class FileCheckPattern;
+
+private:
+  /// When matching a given pattern, this holds the value of all the string
+  /// variables defined in previous patterns. In a pattern, only the last
+  /// definition for a given variable is recorded in this table.
+  /// Back-references are used for uses after any the other definition.
+  StringMap<StringRef> GlobalVariableTable;
+
+  /// Map of all string variables defined so far. Used at parse time to detect
+  /// a name conflict between a numeric variable and a string variable when
+  /// the former is defined on a later line than the latter.
+  StringMap<bool> DefinedVariableTable;
+
+  /// When matching a given pattern, this holds the pointers to the classes
+  /// representing the numeric variables defined in previous patterns. When
+  /// matching a pattern all definitions for that pattern are recorded in the
+  /// NumericVariableDefs table in the FileCheckPattern instance of that
+  /// pattern.
+  StringMap<FileCheckNumericVariable *> GlobalNumericVariableTable;
+
+  /// Pointer to the class instance representing the @LINE pseudo variable for
+  /// easily updating its value.
+  FileCheckNumericVariable *LineVariable = nullptr;
+
+  /// Vector holding pointers to all parsed expressions. Used to automatically
+  /// free the expressions once they are guaranteed to no longer be used.
+  std::vector<std::unique_ptr<FileCheckExpression>> Expressions;
+
+  /// Vector holding pointers to all parsed numeric variables. Used to
+  /// automatically free them once they are guaranteed to no longer be used.
+  std::vector<std::unique_ptr<FileCheckNumericVariable>> NumericVariables;
+
+  /// Vector holding pointers to all substitutions. Used to automatically free
+  /// them once they are guaranteed to no longer be used.
+  std::vector<std::unique_ptr<FileCheckSubstitution>> Substitutions;
+
+public:
+  /// \returns the value of string variable \p VarName or an error if no such
+  /// variable has been defined.
+  Expected<StringRef> getPatternVarValue(StringRef VarName);
+
+  /// Defines string and numeric variables from definitions given on the
+  /// command line, passed as a vector of [#]VAR=VAL strings in
+  /// \p CmdlineDefines. \returns an error list containing diagnostics against
+  /// \p SM for all definition parsing failures, if any, or Success otherwise.
+  Error defineCmdlineVariables(std::vector<std::string> &CmdlineDefines,
+                               SourceMgr &SM);
+
+  /// Create @LINE pseudo variable. Value is set when pattern are being
+  /// matched.
+  void createLineVariable();
+
+  /// Undefines local variables (variables whose name does not start with a '$'
+  /// sign), i.e. removes them from GlobalVariableTable and from
+  /// GlobalNumericVariableTable and also clears the value of numeric
+  /// variables.
+  void clearLocalVars();
+
+private:
+  /// Makes a new expression instance and registers it for destruction when
+  /// the context is destroyed.
+  FileCheckExpression *makeExpression(binop_eval_t EvalBinop,
+                                      FileCheckNumericVariable *OperandLeft,
+                                      uint64_t OperandRight);
+
+  /// Makes a new numeric variable and registers it for destruction when the
+  /// context is destroyed.
+  template <class... Types>
+  FileCheckNumericVariable *makeNumericVariable(Types... args);
+
+  /// Makes a new string substitution and registers it for destruction when the
+  /// context is destroyed.
+  FileCheckSubstitution *makeStringSubstitution(StringRef VarName,
+                                                size_t InsertIdx);
+
+  /// Makes a new numeric substitution and registers it for destruction when
+  /// the context is destroyed.
+  FileCheckSubstitution *
+  makeNumericSubstitution(StringRef ExpressionStr,
+                          FileCheckExpression *Expression, size_t InsertIdx);
+};
+
+/// Class to represent an error holding a diagnostic with location information
+/// used when printing it.
+class FileCheckErrorDiagnostic : public ErrorInfo<FileCheckErrorDiagnostic> {
+private:
+  SMDiagnostic Diagnostic;
+
+public:
+  static char ID;
+
+  FileCheckErrorDiagnostic(SMDiagnostic &&Diag) : Diagnostic(Diag) {}
+
+  std::error_code convertToErrorCode() const override {
+    return inconvertibleErrorCode();
+  }
+
+  /// Print diagnostic associated with this error when printing the error.
+  void log(raw_ostream &OS) const override { Diagnostic.print(nullptr, OS); }
+
+  static Error get(const SourceMgr &SM, SMLoc Loc, const Twine &ErrMsg) {
+    return make_error<FileCheckErrorDiagnostic>(
+        SM.GetMessage(Loc, SourceMgr::DK_Error, ErrMsg));
+  }
+
+  static Error get(const SourceMgr &SM, StringRef Buffer, const Twine &ErrMsg) {
+    return get(SM, SMLoc::getFromPointer(Buffer.data()), ErrMsg);
+  }
+};
+
+class FileCheckNotFoundError : public ErrorInfo<FileCheckNotFoundError> {
+public:
+  static char ID;
+
+  std::error_code convertToErrorCode() const override {
+    return inconvertibleErrorCode();
+  }
+
+  /// Print diagnostic associated with this error when printing the error.
+  void log(raw_ostream &OS) const override {
+    OS << "String not found in input";
+  }
+};
+
 class FileCheckPattern {
   SMLoc PatternLoc;
 
@@ -94,43 +389,132 @@
   /// a fixed string to match.
   std::string RegExStr;
 
-  /// Entries in this vector map to uses of a variable in the pattern, e.g.
-  /// "foo[[bar]]baz".  In this case, the RegExStr will contain "foobaz" and
-  /// we'll get an entry in this vector that tells us to insert the value of
-  /// bar at offset 3.
-  std::vector<std::pair<StringRef, unsigned>> VariableUses;
+  /// Entries in this vector represent a substitution of a string variable or
+  /// an expression in the RegExStr regex at match time. For example, in the
+  /// case of a CHECK directive with the pattern "foo[[bar]]baz[[#N+1]]",
+  /// RegExStr will contain "foobaz" and we'll get two entries in this vector
+  /// that tells us to insert the value of string variable "bar" at offset 3
+  /// and the value of expression "N+1" at offset 6.
+  std::vector<FileCheckSubstitution *> Substitutions;
 
-  /// Maps definitions of variables to their parenthesized capture numbers.
+  /// Maps names of string variables defined in a pattern to the number of
+  /// their parenthesis group in RegExStr capturing their last definition.
   ///
-  /// E.g. for the pattern "foo[[bar:.*]]baz", VariableDefs will map "bar" to
-  /// 1.
+  /// E.g. for the pattern "foo[[bar:.*]]baz([[bar]][[QUUX]][[bar:.*]])",
+  /// RegExStr will be "foo(.*)baz(\1<quux value>(.*))" where <quux value> is
+  /// the value captured for QUUX on the earlier line where it was defined, and
+  /// VariableDefs will map "bar" to the third parenthesis group which captures
+  /// the second definition of "bar".
+  ///
+  /// Note: uses std::map rather than StringMap to be able to get the key when
+  /// iterating over values.
   std::map<StringRef, unsigned> VariableDefs;
 
+  /// Structure representing the definition of a numeric variable in a pattern.
+  /// It holds the pointer to the class representing the numeric variable whose
+  /// value is being defined and the number of the parenthesis group in
+  /// RegExStr to capture that value.
+  struct FileCheckNumericVariableMatch {
+    /// Pointer to class representing the numeric variable whose value is being
+    /// defined.
+    FileCheckNumericVariable *DefinedNumericVariable;
+
+    /// Number of the parenthesis group in RegExStr that captures the value of
+    /// this numeric variable definition.
+    unsigned CaptureParenGroup;
+  };
+
+  /// Holds the number of the parenthesis group in RegExStr and pointer to the
+  /// corresponding FileCheckNumericVariable class instance of all numeric
+  /// variable definitions. Used to set the matched value of all those
+  /// variables.
+  StringMap<FileCheckNumericVariableMatch> NumericVariableDefs;
+
+  /// Pointer to a class instance holding the global state shared by all
+  /// patterns:
+  /// - separate tables with the values of live string and numeric variables
+  ///   respectively at the start of any given CHECK line;
+  /// - table holding whether a string variable has been defined at any given
+  ///   point during the parsing phase.
+  FileCheckPatternContext *Context;
+
   Check::FileCheckType CheckTy;
 
-  /// Contains the number of line this pattern is in.
-  unsigned LineNumber;
+  /// Line number for this CHECK pattern. Used to determine whether a variable
+  /// definition is made on an earlier line to the one with this CHECK.
+  size_t LineNumber;
 
 public:
-  explicit FileCheckPattern(Check::FileCheckType Ty)
-      : CheckTy(Ty) {}
+  FileCheckPattern(Check::FileCheckType Ty, FileCheckPatternContext *Context,
+                   size_t Line)
+      : Context(Context), CheckTy(Ty), LineNumber(Line) {}
 
-  /// Returns the location in source code.
+  /// \returns the location in source code.
   SMLoc getLoc() const { return PatternLoc; }
 
-  bool ParsePattern(StringRef PatternStr, StringRef Prefix, SourceMgr &SM,
-                    unsigned LineNumber, const FileCheckRequest &Req);
-  size_t Match(StringRef Buffer, size_t &MatchLen,
-               StringMap<StringRef> &VariableTable) const;
-  void PrintVariableUses(const SourceMgr &SM, StringRef Buffer,
-                         const StringMap<StringRef> &VariableTable,
-                         SMRange MatchRange = None) const;
-  void PrintFuzzyMatch(const SourceMgr &SM, StringRef Buffer,
-                       const StringMap<StringRef> &VariableTable,
+  /// \returns the pointer to the global state for all patterns in this
+  /// FileCheck instance.
+  FileCheckPatternContext *getContext() const { return Context; }
+
+  /// \returns whether \p C is a valid first character for a variable name.
+  static bool isValidVarNameStart(char C);
+  /// Parses the string at the start of \p Str for a variable name. \returns
+  /// an error holding a diagnostic against \p SM if parsing fail, or the
+  /// name of the variable otherwise. In the latter case, sets \p IsPseudo to
+  /// indicate if it is a pseudo variable and strips \p Str from the variable
+  /// name.
+  static Expected<StringRef> parseVariable(StringRef &Str, bool &IsPseudo,
+                                           const SourceMgr &SM);
+  /// Parses \p Expr for the name of a numeric variable to be defined at line
+  /// \p LineNumber. \returns a pointer to the class instance representing that
+  /// variable, creating it if needed, or an error holding a diagnostic against
+  /// \p SM should defining such a variable be invalid.
+  static Expected<FileCheckNumericVariable *>
+  parseNumericVariableDefinition(StringRef &Expr,
+                                 FileCheckPatternContext *Context,
+                                 size_t LineNumber, const SourceMgr &SM);
+  /// Parses \p Expr for a numeric substitution block. \returns the class
+  /// representing the AST of the expression whose value must be substituted,
+  /// or an error holding a diagnostic against \p SM if parsing fails. If
+  /// substitution was successful, sets \p DefinedNumericVariable to point to
+  /// the class representing the numeric variable defined in this numeric
+  /// substitution block, or None if this block does not define any variable.
+  Expected<FileCheckExpression *> parseNumericSubstitutionBlock(
+      StringRef Expr,
+      Optional<FileCheckNumericVariable *> &DefinedNumericVariable,
+      const SourceMgr &SM) const;
+  /// Parses the pattern in \p PatternStr and initializes this FileCheckPattern
+  /// instance accordingly.
+  ///
+  /// \p Prefix provides which prefix is being matched, \p Req describes the
+  /// global options that influence the parsing such as whitespace
+  /// canonicalization, \p SM provides the SourceMgr used for error reports.
+  /// \returns true in case of an error, false otherwise.
+  bool parsePattern(StringRef PatternStr, StringRef Prefix, SourceMgr &SM,
+                    const FileCheckRequest &Req);
+  /// Matches the pattern string against the input buffer \p Buffer
+  ///
+  /// \returns the position that is matched or an error indicating why matching
+  /// failed. If there is a match, updates \p MatchLen with the size of the
+  /// matched string.
+  ///
+  /// The GlobalVariableTable StringMap in the FileCheckPatternContext class
+  /// instance provides the current values of FileCheck string variables and
+  /// is updated if this match defines new values. Likewise, the
+  /// GlobalNumericVariableTable StringMap in the same class provides the
+  /// current values of FileCheck numeric variables and is updated if this
+  /// match defines new numeric values.
+  Expected<size_t> match(StringRef Buffer, size_t &MatchLen,
+                         const SourceMgr &SM) const;
+  /// Prints the value of successful substitutions or the name of the undefined
+  /// string or numeric variable preventing a successful substitution.
+  void printSubstitutions(const SourceMgr &SM, StringRef Buffer,
+                          SMRange MatchRange = None) const;
+  void printFuzzyMatch(const SourceMgr &SM, StringRef Buffer,
                        std::vector<FileCheckDiag> *Diags) const;
 
   bool hasVariable() const {
-    return !(VariableUses.empty() && VariableDefs.empty());
+    return !(Substitutions.empty() && VariableDefs.empty());
   }
 
   Check::FileCheckType getCheckTy() const { return CheckTy; }
@@ -140,11 +524,28 @@
 private:
   bool AddRegExToRegEx(StringRef RS, unsigned &CurParen, SourceMgr &SM);
   void AddBackrefToRegEx(unsigned BackrefNum);
-  unsigned
-  ComputeMatchDistance(StringRef Buffer,
-                       const StringMap<StringRef> &VariableTable) const;
-  bool EvaluateExpression(StringRef Expr, std::string &Value) const;
+  /// Computes an arbitrary estimate for the quality of matching this pattern
+  /// at the start of \p Buffer; a distance of zero should correspond to a
+  /// perfect match.
+  unsigned computeMatchDistance(StringRef Buffer) const;
+  /// Finds the closing sequence of a regex variable usage or definition.
+  ///
+  /// \p Str has to point in the beginning of the definition (right after the
+  /// opening sequence). \p SM holds the SourceMgr used for error repporting.
+  ///  \returns the offset of the closing sequence within Str, or npos if it
+  /// was not found.
   size_t FindRegexVarEnd(StringRef Str, SourceMgr &SM);
+
+  /// Parses \p Expr for the use of a numeric variable. \returns the pointer to
+  /// the class instance representing that variable if successful, or an error
+  /// holding a diagnostic against \p SM otherwise.
+  Expected<FileCheckNumericVariable *>
+  parseNumericVariableUse(StringRef &Expr, const SourceMgr &SM) const;
+  /// Parses \p Expr for a binary operation.
+  /// \returns the class representing the binary operation of the expression,
+  /// or an error holding a diagnostic against \p SM otherwise.
+  Expected<FileCheckExpression *> parseBinop(StringRef &Expr,
+                                             const SourceMgr &SM) const;
 };
 
 //===----------------------------------------------------------------------===//
@@ -222,20 +623,27 @@
   FileCheckString(const FileCheckPattern &P, StringRef S, SMLoc L)
       : Pat(P), Prefix(S), Loc(L) {}
 
+  /// Matches check string and its "not strings" and/or "dag strings".
   size_t Check(const SourceMgr &SM, StringRef Buffer, bool IsLabelScanMode,
-               size_t &MatchLen, StringMap<StringRef> &VariableTable,
-               FileCheckRequest &Req, std::vector<FileCheckDiag> *Diags) const;
+               size_t &MatchLen, FileCheckRequest &Req,
+               std::vector<FileCheckDiag> *Diags) const;
 
+  /// Verifies that there is a single line in the given \p Buffer. Errors are
+  /// reported against \p SM.
   bool CheckNext(const SourceMgr &SM, StringRef Buffer) const;
+  /// Verifies that there is no newline in the given \p Buffer. Errors are
+  /// reported against \p SM.
   bool CheckSame(const SourceMgr &SM, StringRef Buffer) const;
+  /// Verifies that none of the strings in \p NotStrings are found in the given
+  /// \p Buffer. Errors are reported against \p SM and diagnostics recorded in
+  /// \p Diags according to the verbosity level set in \p Req.
   bool CheckNot(const SourceMgr &SM, StringRef Buffer,
                 const std::vector<const FileCheckPattern *> &NotStrings,
-                StringMap<StringRef> &VariableTable,
                 const FileCheckRequest &Req,
                 std::vector<FileCheckDiag> *Diags) const;
+  /// Matches "dag strings" and their mixed "not strings".
   size_t CheckDag(const SourceMgr &SM, StringRef Buffer,
                   std::vector<const FileCheckPattern *> &NotStrings,
-                  StringMap<StringRef> &VariableTable,
                   const FileCheckRequest &Req,
                   std::vector<FileCheckDiag> *Diags) const;
 };
@@ -244,6 +652,7 @@
 /// use information from the request.
 class FileCheck {
   FileCheckRequest Req;
+  FileCheckPatternContext PatternContext;
 
 public:
   FileCheck(FileCheckRequest Req) : Req(Req) {}
@@ -255,24 +664,27 @@
   // library.
   Regex buildCheckPrefixRegex();
 
-  /// Read the check file, which specifies the sequence of expected strings.
+  /// Reads the check file from \p Buffer and records the expected strings it
+  /// contains in the \p CheckStrings vector. Errors are reported against
+  /// \p SM.
   ///
-  /// The strings are added to the CheckStrings vector. Returns true in case of
-  /// an error, false otherwise.
+  /// Only expected strings whose prefix is one of those listed in \p PrefixRE
+  /// are recorded. \returns true in case of an error, false otherwise.
   bool ReadCheckFile(SourceMgr &SM, StringRef Buffer, Regex &PrefixRE,
                      std::vector<FileCheckString> &CheckStrings);
 
   bool ValidateCheckPrefixes();
 
-  /// Canonicalize whitespaces in the file. Line endings are replaced with
+  /// Canonicalizes whitespaces in the file. Line endings are replaced with
   /// UNIX-style '\n'.
   StringRef CanonicalizeFile(MemoryBuffer &MB,
                              SmallVectorImpl<char> &OutputBuffer);
 
-  /// Check the input to FileCheck provided in the \p Buffer against the \p
-  /// CheckStrings read from the check file.
+  /// Checks the input to FileCheck provided in the \p Buffer against the
+  /// \p CheckStrings read from the check file and record diagnostics emitted
+  /// in \p Diags. Errors are recorded against \p SM.
   ///
-  /// Returns false if the input fails to satisfy the checks.
+  /// \returns false if the input fails to satisfy the checks.
   bool CheckInput(SourceMgr &SM, StringRef Buffer,
                   ArrayRef<FileCheckString> CheckStrings,
                   std::vector<FileCheckDiag> *Diags = nullptr);
diff --git a/linux-x64/clang/include/llvm/Support/FileSystem.h b/linux-x64/clang/include/llvm/Support/FileSystem.h
index 156250f..3f2c939 100644
--- a/linux-x64/clang/include/llvm/Support/FileSystem.h
+++ b/linux-x64/clang/include/llvm/Support/FileSystem.h
@@ -648,16 +648,32 @@
 /// A version for when a file descriptor is already available.
 std::error_code status(int FD, file_status &Result);
 
+#ifdef _WIN32
+/// A version for when a file descriptor is already available.
+std::error_code status(file_t FD, file_status &Result);
+#endif
+
+/// Get file creation mode mask of the process.
+///
+/// @returns Mask reported by umask(2)
+/// @note There is no umask on Windows. This function returns 0 always
+///       on Windows. This function does not return an error_code because
+///       umask(2) never fails. It is not thread safe.
+unsigned getUmask();
+
 /// Set file permissions.
 ///
 /// @param Path File to set permissions on.
 /// @param Permissions New file permissions.
+/// @param RespectUmask If true then Permissions will be changed to respect the
+///        umask of the current process.
 /// @returns errc::success if the permissions were successfully set, otherwise
 ///          a platform-specific error_code.
 /// @note On Windows, all permissions except *_write are ignored. Using any of
 ///       owner_write, group_write, or all_write will make the file writable.
 ///       Otherwise, the file will be marked as read-only.
-std::error_code setPermissions(const Twine &Path, perms Permissions);
+std::error_code setPermissions(const Twine &Path, perms Permissions,
+                               bool RespectUmask = false);
 
 /// Get file permissions.
 ///
@@ -764,11 +780,32 @@
   OF_UpdateAtime = 16,
 };
 
+/// Create a potentially unique file name but does not create it.
+///
+/// Generates a unique path suitable for a temporary file but does not
+/// open or create the file. The name is based on \a Model with '%'
+/// replaced by a random char in [0-9a-f]. If \a MakeAbsolute is true
+/// then the system's temp directory is prepended first. If \a MakeAbsolute
+/// is false the current directory will be used instead.
+///
+/// This function does not check if the file exists. If you want to be sure
+/// that the file does not yet exist, you should use use enough '%' characters
+/// in your model to ensure this. Each '%' gives 4-bits of entropy so you can
+/// use 32 of them to get 128 bits of entropy.
+///
+/// Example: clang-%%-%%-%%-%%-%%.s => clang-a0-b1-c2-d3-e4.s
+///
+/// @param Model Name to base unique path off of.
+/// @param ResultPath Set to the file's path.
+/// @param MakeAbsolute Whether to use the system temp directory.
+void createUniquePath(const Twine &Model, SmallVectorImpl<char> &ResultPath,
+                      bool MakeAbsolute);
+
 /// Create a uniquely named file.
 ///
 /// Generates a unique path suitable for a temporary file and then opens it as a
-/// file. The name is based on \a model with '%' replaced by a random char in
-/// [0-9a-f]. If \a model is not an absolute path, the temporary file will be
+/// file. The name is based on \a Model with '%' replaced by a random char in
+/// [0-9a-f]. If \a Model is not an absolute path, the temporary file will be
 /// created in the current directory.
 ///
 /// Example: clang-%%-%%-%%-%%-%%.s => clang-a0-b1-c2-d3-e4.s
@@ -931,6 +968,51 @@
                                 FileAccess Access, OpenFlags Flags,
                                 unsigned Mode = 0666);
 
+/// Converts from a Posix file descriptor number to a native file handle.
+/// On Windows, this retreives the underlying handle. On non-Windows, this is a
+/// no-op.
+file_t convertFDToNativeFile(int FD);
+
+#ifndef _WIN32
+inline file_t convertFDToNativeFile(int FD) { return FD; }
+#endif
+
+/// Return an open handle to standard in. On Unix, this is typically FD 0.
+/// Returns kInvalidFile when the stream is closed.
+file_t getStdinHandle();
+
+/// Return an open handle to standard out. On Unix, this is typically FD 1.
+/// Returns kInvalidFile when the stream is closed.
+file_t getStdoutHandle();
+
+/// Return an open handle to standard error. On Unix, this is typically FD 2.
+/// Returns kInvalidFile when the stream is closed.
+file_t getStderrHandle();
+
+/// Reads \p Buf.size() bytes from \p FileHandle into \p Buf. The number of
+/// bytes actually read is returned in \p BytesRead. On Unix, this is equivalent
+/// to `*BytesRead = ::read(FD, Buf.data(), Buf.size())`, with error reporting.
+/// BytesRead will contain zero when reaching EOF.
+///
+/// @param FileHandle File to read from.
+/// @param Buf Buffer to read into.
+/// @param BytesRead Output parameter of the number of bytes read.
+/// @returns The error, if any, or errc::success.
+std::error_code readNativeFile(file_t FileHandle, MutableArrayRef<char> Buf,
+                               size_t *BytesRead);
+
+/// Reads \p Buf.size() bytes from \p FileHandle at offset \p Offset into \p
+/// Buf. If 'pread' is available, this will use that, otherwise it will use
+/// 'lseek'. Bytes requested beyond the end of the file will be zero
+/// initialized.
+///
+/// @param FileHandle File to read from.
+/// @param Buf Buffer to read into.
+/// @param Offset Offset into the file at which the read should occur.
+/// @returns The error, if any, or errc::success.
+std::error_code readNativeFileSlice(file_t FileHandle,
+                                    MutableArrayRef<char> Buf, size_t Offset);
+
 /// @brief Opens the file with the given name in a write-only or read-write
 /// mode, returning its open file descriptor. If the file does not exist, it
 /// is created.
@@ -1050,11 +1132,15 @@
                       SmallVectorImpl<char> *RealPath = nullptr);
 
 /// @brief Close the file object.  This should be used instead of ::close for
-/// portability.
+/// portability. On error, the caller should assume the file is closed, as is
+/// the case for Process::SafelyCloseFileDescriptor
 ///
 /// @param F On input, this is the file to close.  On output, the file is
 /// set to kInvalidFile.
-void closeFile(file_t &F);
+///
+/// @returns An error code if closing the file failed. Typically, an error here
+/// means that the filesystem may have failed to perform some buffered writes.
+std::error_code closeFile(file_t &F);
 
 std::error_code getUniqueID(const Twine Path, UniqueID &Result);
 
@@ -1084,21 +1170,19 @@
   size_t Size;
   void *Mapping;
 #ifdef _WIN32
-  void *FileHandle;
+  sys::fs::file_t FileHandle;
 #endif
   mapmode Mode;
 
-  std::error_code init(int FD, uint64_t Offset, mapmode Mode);
+  std::error_code init(sys::fs::file_t FD, uint64_t Offset, mapmode Mode);
 
 public:
   mapped_file_region() = delete;
   mapped_file_region(mapped_file_region&) = delete;
   mapped_file_region &operator =(mapped_file_region&) = delete;
 
-  /// \param fd An open file descriptor to map. mapped_file_region takes
-  ///   ownership if closefd is true. It must have been opended in the correct
-  ///   mode.
-  mapped_file_region(int fd, mapmode mode, size_t length, uint64_t offset,
+  /// \param fd An open file descriptor to map. Does not take ownership of fd.
+  mapped_file_region(sys::fs::file_t fd, mapmode mode, size_t length, uint64_t offset,
                      std::error_code &ec);
 
   ~mapped_file_region();
diff --git a/linux-x64/clang/include/llvm/Support/GenericDomTree.h b/linux-x64/clang/include/llvm/Support/GenericDomTree.h
index 53a613e..9962080 100644
--- a/linux-x64/clang/include/llvm/Support/GenericDomTree.h
+++ b/linux-x64/clang/include/llvm/Support/GenericDomTree.h
@@ -669,14 +669,12 @@
 
     // The postdom tree can have a null root if there are no returns.
     if (getRootNode()) PrintDomTree<NodeT>(getRootNode(), O, 1);
-    if (IsPostDominator) {
-      O << "Roots: ";
-      for (const NodePtr Block : Roots) {
-        Block->printAsOperand(O, false);
-        O << " ";
-      }
-      O << "\n";
+    O << "Roots: ";
+    for (const NodePtr Block : Roots) {
+      Block->printAsOperand(O, false);
+      O << " ";
     }
+    O << "\n";
   }
 
 public:
diff --git a/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h b/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h
index 69cc721..ccceba8 100644
--- a/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h
+++ b/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h
@@ -15,9 +15,12 @@
 ///   Loukas Georgiadis, Princeton University, November 2005, pp. 21-23:
 ///   ftp://ftp.cs.princeton.edu/reports/2005/737.pdf
 ///
-/// This implements the O(n*log(n)) versions of EVAL and LINK, because it turns
-/// out that the theoretically slower O(n*log(n)) implementation is actually
-/// faster than the almost-linear O(n*alpha(n)) version, even for large CFGs.
+/// Semi-NCA algorithm runs in O(n^2) worst-case time but usually slightly
+/// faster than Simple Lengauer-Tarjan in practice.
+///
+/// O(n^2) worst cases happen when the computation of nearest common ancestors
+/// requires O(n) average time, which is very unlikely in real world. If this
+/// ever turns out to be an issue, consider implementing a hybrid algorithm.
 ///
 /// The file uses the Depth Based Search algorithm to perform incremental
 /// updates (insertion and deletions). The implemented algorithm is based on
@@ -254,42 +257,47 @@
     return LastNum;
   }
 
-  NodePtr eval(NodePtr VIn, unsigned LastLinked) {
-    auto &VInInfo = NodeToInfo[VIn];
-    if (VInInfo.DFSNum < LastLinked)
-      return VIn;
+  // V is a predecessor of W. eval() returns V if V < W, otherwise the minimum
+  // of sdom(U), where U > W and there is a virtual forest path from U to V. The
+  // virtual forest consists of linked edges of processed vertices.
+  //
+  // We can follow Parent pointers (virtual forest edges) to determine the
+  // ancestor U with minimum sdom(U). But it is slow and thus we employ the path
+  // compression technique to speed up to O(m*log(n)). Theoretically the virtual
+  // forest can be organized as balanced trees to achieve almost linear
+  // O(m*alpha(m,n)) running time. But it requires two auxiliary arrays (Size
+  // and Child) and is unlikely to be faster than the simple implementation.
+  //
+  // For each vertex V, its Label points to the vertex with the minimal sdom(U)
+  // (Semi) in its path from V (included) to NodeToInfo[V].Parent (excluded).
+  NodePtr eval(NodePtr V, unsigned LastLinked,
+               SmallVectorImpl<InfoRec *> &Stack) {
+    InfoRec *VInfo = &NodeToInfo[V];
+    if (VInfo->Parent < LastLinked)
+      return VInfo->Label;
 
-    SmallVector<NodePtr, 32> Work;
-    SmallPtrSet<NodePtr, 32> Visited;
+    // Store ancestors except the last (root of a virtual tree) into a stack.
+    assert(Stack.empty());
+    do {
+      Stack.push_back(VInfo);
+      VInfo = &NodeToInfo[NumToNode[VInfo->Parent]];
+    } while (VInfo->Parent >= LastLinked);
 
-    if (VInInfo.Parent >= LastLinked)
-      Work.push_back(VIn);
-
-    while (!Work.empty()) {
-      NodePtr V = Work.back();
-      auto &VInfo = NodeToInfo[V];
-      NodePtr VAncestor = NumToNode[VInfo.Parent];
-
-      // Process Ancestor first
-      if (Visited.insert(VAncestor).second && VInfo.Parent >= LastLinked) {
-        Work.push_back(VAncestor);
-        continue;
-      }
-      Work.pop_back();
-
-      // Update VInfo based on Ancestor info
-      if (VInfo.Parent < LastLinked)
-        continue;
-
-      auto &VAInfo = NodeToInfo[VAncestor];
-      NodePtr VAncestorLabel = VAInfo.Label;
-      NodePtr VLabel = VInfo.Label;
-      if (NodeToInfo[VAncestorLabel].Semi < NodeToInfo[VLabel].Semi)
-        VInfo.Label = VAncestorLabel;
-      VInfo.Parent = VAInfo.Parent;
-    }
-
-    return VInInfo.Label;
+    // Path compression. Point each vertex's Parent to the root and update its
+    // Label if any of its ancestors (PInfo->Label) has a smaller Semi.
+    const InfoRec *PInfo = VInfo;
+    const InfoRec *PLabelInfo = &NodeToInfo[PInfo->Label];
+    do {
+      VInfo = Stack.pop_back_val();
+      VInfo->Parent = PInfo->Parent;
+      const InfoRec *VLabelInfo = &NodeToInfo[VInfo->Label];
+      if (PLabelInfo->Semi < VLabelInfo->Semi)
+        VInfo->Label = PInfo->Label;
+      else
+        PLabelInfo = VLabelInfo;
+      PInfo = VInfo;
+    } while (!Stack.empty());
+    return VInfo->Label;
   }
 
   // This function requires DFS to be run before calling it.
@@ -303,6 +311,7 @@
     }
 
     // Step #1: Calculate the semidominators of all vertices.
+    SmallVector<InfoRec *, 32> EvalStack;
     for (unsigned i = NextDFSNum - 1; i >= 2; --i) {
       NodePtr W = NumToNode[i];
       auto &WInfo = NodeToInfo[W];
@@ -318,7 +327,7 @@
         if (TN && TN->getLevel() < MinLevel)
           continue;
 
-        unsigned SemiU = NodeToInfo[eval(N, i + 1)].Semi;
+        unsigned SemiU = NodeToInfo[eval(N, i + 1, EvalStack)].Semi;
         if (SemiU < WInfo.Semi) WInfo.Semi = SemiU;
       }
     }
@@ -619,21 +628,22 @@
 
   // Helper struct used during edge insertions.
   struct InsertionInfo {
-    using BucketElementTy = std::pair<unsigned, TreeNodePtr>;
-    struct DecreasingLevel {
-      bool operator()(const BucketElementTy &First,
-                      const BucketElementTy &Second) const {
-        return First.first > Second.first;
+    struct Compare {
+      bool operator()(TreeNodePtr LHS, TreeNodePtr RHS) const {
+        return LHS->getLevel() < RHS->getLevel();
       }
     };
 
-    std::priority_queue<BucketElementTy, SmallVector<BucketElementTy, 8>,
-        DecreasingLevel>
-        Bucket;  // Queue of tree nodes sorted by level in descending order.
-    SmallDenseSet<TreeNodePtr, 8> Affected;
-    SmallDenseMap<TreeNodePtr, unsigned, 8> Visited;
-    SmallVector<TreeNodePtr, 8> AffectedQueue;
-    SmallVector<TreeNodePtr, 8> VisitedNotAffectedQueue;
+    // Bucket queue of tree nodes ordered by descending level. For simplicity,
+    // we use a priority_queue here.
+    std::priority_queue<TreeNodePtr, SmallVector<TreeNodePtr, 8>,
+                        Compare>
+        Bucket;
+    SmallDenseSet<TreeNodePtr, 8> Visited;
+    SmallVector<TreeNodePtr, 8> Affected;
+#ifndef NDEBUG
+    SmallVector<TreeNodePtr, 8> VisitedUnaffected;
+#endif
   };
 
   static void InsertEdge(DomTreeT &DT, const BatchUpdatePtr BUI,
@@ -688,6 +698,17 @@
     return true;
   }
 
+  static bool isPermutation(const SmallVectorImpl<NodePtr> &A,
+                            const SmallVectorImpl<NodePtr> &B) {
+    if (A.size() != B.size())
+      return false;
+    SmallPtrSet<NodePtr, 4> Set(A.begin(), A.end());
+    for (NodePtr N : B)
+      if (Set.count(N) == 0)
+        return false;
+    return true;
+  }
+
   // Updates the set of roots after insertion or deletion. This ensures that
   // roots are the same when after a series of updates and when the tree would
   // be built from scratch.
@@ -701,9 +722,8 @@
       return;
 
     // Recalculate the set of roots.
-    auto Roots = FindRoots(DT, BUI);
-    if (DT.Roots.size() != Roots.size() ||
-        !std::is_permutation(DT.Roots.begin(), DT.Roots.end(), Roots.begin())) {
+    RootsT Roots = FindRoots(DT, BUI);
+    if (!isPermutation(DT.Roots, Roots)) {
       // The roots chosen in the CFG have changed. This is because the
       // incremental algorithm does not really know or use the set of roots and
       // can make a different (implicit) decision about which node within an
@@ -714,7 +734,6 @@
       // It may be possible to update the tree without recalculating it, but
       // we do not know yet how to do it, and it happens rarely in practise.
       CalculateFromScratch(DT, BUI);
-      return;
     }
   }
 
@@ -736,130 +755,115 @@
     assert(NCD);
 
     LLVM_DEBUG(dbgs() << "\t\tNCA == " << BlockNamePrinter(NCD) << "\n");
-    const TreeNodePtr ToIDom = To->getIDom();
+    const unsigned NCDLevel = NCD->getLevel();
 
-    // Nothing affected -- NCA property holds.
-    // (Based on the lemma 2.5 from the second paper.)
-    if (NCD == To || NCD == ToIDom) return;
+    // Based on Lemma 2.5 from the second paper, after insertion of (From,To), v
+    // is affected iff depth(NCD)+1 < depth(v) && a path P from To to v exists
+    // where every w on P s.t. depth(v) <= depth(w)
+    //
+    // This reduces to a widest path problem (maximizing the depth of the
+    // minimum vertex in the path) which can be solved by a modified version of
+    // Dijkstra with a bucket queue (named depth-based search in the paper).
 
-    // Identify and collect affected nodes.
+    // To is in the path, so depth(NCD)+1 < depth(v) <= depth(To). Nothing
+    // affected if this does not hold.
+    if (NCDLevel + 1 >= To->getLevel())
+      return;
+
     InsertionInfo II;
-    LLVM_DEBUG(dbgs() << "Marking " << BlockNamePrinter(To)
-                      << " as affected\n");
-    II.Affected.insert(To);
-    const unsigned ToLevel = To->getLevel();
-    LLVM_DEBUG(dbgs() << "Putting " << BlockNamePrinter(To)
-                      << " into a Bucket\n");
-    II.Bucket.push({ToLevel, To});
+    SmallVector<TreeNodePtr, 8> UnaffectedOnCurrentLevel;
+    II.Bucket.push(To);
+    II.Visited.insert(To);
 
     while (!II.Bucket.empty()) {
-      const TreeNodePtr CurrentNode = II.Bucket.top().second;
-      const unsigned  CurrentLevel = CurrentNode->getLevel();
+      TreeNodePtr TN = II.Bucket.top();
       II.Bucket.pop();
-      LLVM_DEBUG(dbgs() << "\tAdding to Visited and AffectedQueue: "
-                        << BlockNamePrinter(CurrentNode) << "\n");
+      II.Affected.push_back(TN);
 
-      II.Visited.insert({CurrentNode, CurrentLevel});
-      II.AffectedQueue.push_back(CurrentNode);
+      const unsigned CurrentLevel = TN->getLevel();
+      LLVM_DEBUG(dbgs() << "Mark " << BlockNamePrinter(TN) <<
+                 "as affected, CurrentLevel " << CurrentLevel << "\n");
 
-      // Discover and collect affected successors of the current node.
-      VisitInsertion(DT, BUI, CurrentNode, CurrentLevel, NCD, II);
+      assert(TN->getBlock() && II.Visited.count(TN) && "Preconditions!");
+
+      while (true) {
+        // Unlike regular Dijkstra, we have an inner loop to expand more
+        // vertices. The first iteration is for the (affected) vertex popped
+        // from II.Bucket and the rest are for vertices in
+        // UnaffectedOnCurrentLevel, which may eventually expand to affected
+        // vertices.
+        //
+        // Invariant: there is an optimal path from `To` to TN with the minimum
+        // depth being CurrentLevel.
+        for (const NodePtr Succ :
+             ChildrenGetter<IsPostDom>::Get(TN->getBlock(), BUI)) {
+          const TreeNodePtr SuccTN = DT.getNode(Succ);
+          assert(SuccTN &&
+                 "Unreachable successor found at reachable insertion");
+          const unsigned SuccLevel = SuccTN->getLevel();
+
+          LLVM_DEBUG(dbgs() << "\tSuccessor " << BlockNamePrinter(Succ)
+                            << ", level = " << SuccLevel << "\n");
+
+          // There is an optimal path from `To` to Succ with the minimum depth
+          // being min(CurrentLevel, SuccLevel).
+          //
+          // If depth(NCD)+1 < depth(Succ) is not satisfied, Succ is unaffected
+          // and no affected vertex may be reached by a path passing through it.
+          // Stop here. Also, Succ may be visited by other predecessors but the
+          // first visit has the optimal path. Stop if Succ has been visited.
+          if (SuccLevel <= NCDLevel + 1 || !II.Visited.insert(SuccTN).second)
+            continue;
+
+          if (SuccLevel > CurrentLevel) {
+            // Succ is unaffected but it may (transitively) expand to affected
+            // vertices. Store it in UnaffectedOnCurrentLevel.
+            LLVM_DEBUG(dbgs() << "\t\tMarking visited not affected "
+                              << BlockNamePrinter(Succ) << "\n");
+            UnaffectedOnCurrentLevel.push_back(SuccTN);
+#ifndef NDEBUG
+            II.VisitedUnaffected.push_back(SuccTN);
+#endif
+          } else {
+            // The condition is satisfied (Succ is affected). Add Succ to the
+            // bucket queue.
+            LLVM_DEBUG(dbgs() << "\t\tAdd " << BlockNamePrinter(Succ)
+                              << " to a Bucket\n");
+            II.Bucket.push(SuccTN);
+          }
+        }
+
+        if (UnaffectedOnCurrentLevel.empty())
+          break;
+        TN = UnaffectedOnCurrentLevel.pop_back_val();
+        LLVM_DEBUG(dbgs() << " Next: " << BlockNamePrinter(TN) << "\n");
+      }
     }
 
     // Finish by updating immediate dominators and levels.
     UpdateInsertion(DT, BUI, NCD, II);
   }
 
-  // Visits an affected node and collect its affected successors.
-  static void VisitInsertion(DomTreeT &DT, const BatchUpdatePtr BUI,
-                             const TreeNodePtr TN, const unsigned RootLevel,
-                             const TreeNodePtr NCD, InsertionInfo &II) {
-    const unsigned NCDLevel = NCD->getLevel();
-    LLVM_DEBUG(dbgs() << "Visiting " << BlockNamePrinter(TN) << ",  RootLevel "
-                      << RootLevel << "\n");
-
-    SmallVector<TreeNodePtr, 8> Stack = {TN};
-    assert(TN->getBlock() && II.Visited.count(TN) && "Preconditions!");
-
-    SmallPtrSet<TreeNodePtr, 8> Processed;
-
-    do {
-      TreeNodePtr Next = Stack.pop_back_val();
-      LLVM_DEBUG(dbgs() << " Next: " << BlockNamePrinter(Next) << "\n");
-
-      for (const NodePtr Succ :
-           ChildrenGetter<IsPostDom>::Get(Next->getBlock(), BUI)) {
-        const TreeNodePtr SuccTN = DT.getNode(Succ);
-        assert(SuccTN && "Unreachable successor found at reachable insertion");
-        const unsigned SuccLevel = SuccTN->getLevel();
-
-        LLVM_DEBUG(dbgs() << "\tSuccessor " << BlockNamePrinter(Succ)
-                          << ", level = " << SuccLevel << "\n");
-
-        // Do not process the same node multiple times.
-        if (Processed.count(Next) > 0)
-          continue;
-
-        // Succ dominated by subtree From -- not affected.
-        // (Based on the lemma 2.5 from the second paper.)
-        if (SuccLevel > RootLevel) {
-          LLVM_DEBUG(dbgs() << "\t\tDominated by subtree From\n");
-          if (II.Visited.count(SuccTN) != 0) {
-            LLVM_DEBUG(dbgs() << "\t\t\talready visited at level "
-                              << II.Visited[SuccTN] << "\n\t\t\tcurrent level "
-                              << RootLevel << ")\n");
-
-            // A node can be necessary to visit again if we see it again at
-            // a lower level than before.
-            if (II.Visited[SuccTN] >= RootLevel)
-              continue;
-          }
-
-          LLVM_DEBUG(dbgs() << "\t\tMarking visited not affected "
-                            << BlockNamePrinter(Succ) << "\n");
-          II.Visited.insert({SuccTN, RootLevel});
-          II.VisitedNotAffectedQueue.push_back(SuccTN);
-          Stack.push_back(SuccTN);
-        } else if ((SuccLevel > NCDLevel + 1) &&
-            II.Affected.count(SuccTN) == 0) {
-          LLVM_DEBUG(dbgs() << "\t\tMarking affected and adding "
-                            << BlockNamePrinter(Succ) << " to a Bucket\n");
-          II.Affected.insert(SuccTN);
-          II.Bucket.push({SuccLevel, SuccTN});
-        }
-      }
-
-      Processed.insert(Next);
-    } while (!Stack.empty());
-  }
-
   // Updates immediate dominators and levels after insertion.
   static void UpdateInsertion(DomTreeT &DT, const BatchUpdatePtr BUI,
                               const TreeNodePtr NCD, InsertionInfo &II) {
     LLVM_DEBUG(dbgs() << "Updating NCD = " << BlockNamePrinter(NCD) << "\n");
 
-    for (const TreeNodePtr TN : II.AffectedQueue) {
+    for (const TreeNodePtr TN : II.Affected) {
       LLVM_DEBUG(dbgs() << "\tIDom(" << BlockNamePrinter(TN)
                         << ") = " << BlockNamePrinter(NCD) << "\n");
       TN->setIDom(NCD);
     }
 
-    UpdateLevelsAfterInsertion(II);
+#ifndef NDEBUG
+    for (const TreeNodePtr TN : II.VisitedUnaffected)
+      assert(TN->getLevel() == TN->getIDom()->getLevel() + 1 &&
+             "TN should have been updated by an affected ancestor");
+#endif
+
     if (IsPostDom) UpdateRootsAfterUpdate(DT, BUI);
   }
 
-  static void UpdateLevelsAfterInsertion(InsertionInfo &II) {
-    LLVM_DEBUG(
-        dbgs() << "Updating levels for visited but not affected nodes\n");
-
-    for (const TreeNodePtr TN : II.VisitedNotAffectedQueue) {
-      LLVM_DEBUG(dbgs() << "\tlevel(" << BlockNamePrinter(TN) << ") = ("
-                        << BlockNamePrinter(TN->getIDom()) << ") "
-                        << TN->getIDom()->getLevel() << " + 1\n");
-      TN->UpdateLevel();
-    }
-  }
-
   // Handles insertion to previously unreachable nodes.
   static void InsertUnreachable(DomTreeT &DT, const BatchUpdatePtr BUI,
                                 const TreeNodePtr From, const NodePtr To) {
@@ -1181,6 +1185,10 @@
       BUI.FuturePredecessors[U.getTo()].push_back({U.getFrom(), U.getKind()});
     }
 
+#if 0
+    // FIXME: The LLVM_DEBUG macro only plays well with a modular
+    // build of LLVM when the header is marked as textual, but doing
+    // so causes redefinition errors.
     LLVM_DEBUG(dbgs() << "About to apply " << NumLegalized << " updates\n");
     LLVM_DEBUG(if (NumLegalized < 32) for (const auto &U
                                            : reverse(BUI.Updates)) {
@@ -1189,6 +1197,7 @@
       dbgs() << "\n";
     });
     LLVM_DEBUG(dbgs() << "\n");
+#endif
 
     // Recalculate the DominatorTree when the number of updates
     // exceeds a threshold, which usually makes direct updating slower than
@@ -1214,8 +1223,13 @@
   static void ApplyNextUpdate(DomTreeT &DT, BatchUpdateInfo &BUI) {
     assert(!BUI.Updates.empty() && "No updates to apply!");
     UpdateT CurrentUpdate = BUI.Updates.pop_back_val();
+#if 0
+    // FIXME: The LLVM_DEBUG macro only plays well with a modular
+    // build of LLVM when the header is marked as textual, but doing
+    // so causes redefinition errors.
     LLVM_DEBUG(dbgs() << "Applying update: ");
     LLVM_DEBUG(CurrentUpdate.dump(); dbgs() << "\n");
+#endif
 
     // Move to the next snapshot of the CFG by removing the reverse-applied
     // current update. Since updates are performed in the same order they are
@@ -1269,9 +1283,7 @@
     }
 
     RootsT ComputedRoots = FindRoots(DT, nullptr);
-    if (DT.Roots.size() != ComputedRoots.size() ||
-        !std::is_permutation(DT.Roots.begin(), DT.Roots.end(),
-                             ComputedRoots.begin())) {
+    if (!isPermutation(DT.Roots, ComputedRoots)) {
       errs() << "Tree has different roots than freshly computed ones!\n";
       errs() << "\tPDT roots: ";
       for (const NodePtr N : DT.Roots) errs() << BlockNamePrinter(N) << ", ";
diff --git a/linux-x64/clang/include/llvm/Support/GenericIteratedDominanceFrontier.h b/linux-x64/clang/include/llvm/Support/GenericIteratedDominanceFrontier.h
new file mode 100644
index 0000000..fcd2133
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/GenericIteratedDominanceFrontier.h
@@ -0,0 +1,210 @@
+//===- IteratedDominanceFrontier.h - Calculate IDF --------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// Compute iterated dominance frontiers using a linear time algorithm.
+///
+/// The algorithm used here is based on:
+///
+///   Sreedhar and Gao. A linear time algorithm for placing phi-nodes.
+///   In Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of
+///   Programming Languages
+///   POPL '95. ACM, New York, NY, 62-73.
+///
+/// It has been modified to not explicitly use the DJ graph data structure and
+/// to directly compute pruned SSA using per-variable liveness information.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_GENERIC_IDF_H
+#define LLVM_SUPPORT_GENERIC_IDF_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/GenericDomTree.h"
+#include <queue>
+
+namespace llvm {
+
+namespace IDFCalculatorDetail {
+
+/// Generic utility class used for getting the children of a basic block.
+/// May be specialized if, for example, one wouldn't like to return nullpointer
+/// successors.
+template <class NodeTy, bool IsPostDom> struct ChildrenGetterTy {
+  using NodeRef = typename GraphTraits<NodeTy>::NodeRef;
+  using ChildrenTy = SmallVector<NodeRef, 8>;
+
+  ChildrenTy get(const NodeRef &N);
+};
+
+} // end of namespace IDFCalculatorDetail
+
+/// Determine the iterated dominance frontier, given a set of defining
+/// blocks, and optionally, a set of live-in blocks.
+///
+/// In turn, the results can be used to place phi nodes.
+///
+/// This algorithm is a linear time computation of Iterated Dominance Frontiers,
+/// pruned using the live-in set.
+/// By default, liveness is not used to prune the IDF computation.
+/// The template parameters should be of a CFG block type.
+template <class NodeTy, bool IsPostDom> class IDFCalculatorBase {
+public:
+  using OrderedNodeTy =
+      typename std::conditional<IsPostDom, Inverse<NodeTy *>, NodeTy *>::type;
+  using ChildrenGetterTy =
+      IDFCalculatorDetail::ChildrenGetterTy<NodeTy, IsPostDom>;
+
+  IDFCalculatorBase(DominatorTreeBase<NodeTy, IsPostDom> &DT) : DT(DT) {}
+
+  IDFCalculatorBase(DominatorTreeBase<NodeTy, IsPostDom> &DT,
+                    const ChildrenGetterTy &C)
+      : DT(DT), ChildrenGetter(C) {}
+
+  /// Give the IDF calculator the set of blocks in which the value is
+  /// defined.  This is equivalent to the set of starting blocks it should be
+  /// calculating the IDF for (though later gets pruned based on liveness).
+  ///
+  /// Note: This set *must* live for the entire lifetime of the IDF calculator.
+  void setDefiningBlocks(const SmallPtrSetImpl<NodeTy *> &Blocks) {
+    DefBlocks = &Blocks;
+  }
+
+  /// Give the IDF calculator the set of blocks in which the value is
+  /// live on entry to the block.   This is used to prune the IDF calculation to
+  /// not include blocks where any phi insertion would be dead.
+  ///
+  /// Note: This set *must* live for the entire lifetime of the IDF calculator.
+  void setLiveInBlocks(const SmallPtrSetImpl<NodeTy *> &Blocks) {
+    LiveInBlocks = &Blocks;
+    useLiveIn = true;
+  }
+
+  /// Reset the live-in block set to be empty, and tell the IDF
+  /// calculator to not use liveness anymore.
+  void resetLiveInBlocks() {
+    LiveInBlocks = nullptr;
+    useLiveIn = false;
+  }
+
+  /// Calculate iterated dominance frontiers
+  ///
+  /// This uses the linear-time phi algorithm based on DJ-graphs mentioned in
+  /// the file-level comment.  It performs DF->IDF pruning using the live-in
+  /// set, to avoid computing the IDF for blocks where an inserted PHI node
+  /// would be dead.
+  void calculate(SmallVectorImpl<NodeTy *> &IDFBlocks);
+
+private:
+  DominatorTreeBase<NodeTy, IsPostDom> &DT;
+  ChildrenGetterTy ChildrenGetter;
+  bool useLiveIn = false;
+  const SmallPtrSetImpl<NodeTy *> *LiveInBlocks;
+  const SmallPtrSetImpl<NodeTy *> *DefBlocks;
+};
+
+//===----------------------------------------------------------------------===//
+// Implementation.
+//===----------------------------------------------------------------------===//
+
+namespace IDFCalculatorDetail {
+
+template <class NodeTy, bool IsPostDom>
+typename ChildrenGetterTy<NodeTy, IsPostDom>::ChildrenTy
+ChildrenGetterTy<NodeTy, IsPostDom>::get(
+    const ChildrenGetterTy<NodeTy, IsPostDom>::NodeRef &N) {
+  using OrderedNodeTy =
+      typename IDFCalculatorBase<NodeTy, IsPostDom>::OrderedNodeTy;
+
+  auto Children = children<OrderedNodeTy>(N);
+  return {Children.begin(), Children.end()};
+}
+
+} // end of namespace IDFCalculatorDetail
+
+template <class NodeTy, bool IsPostDom>
+void IDFCalculatorBase<NodeTy, IsPostDom>::calculate(
+    SmallVectorImpl<NodeTy *> &PHIBlocks) {
+  // Use a priority queue keyed on dominator tree level so that inserted nodes
+  // are handled from the bottom of the dominator tree upwards. We also augment
+  // the level with a DFS number to ensure that the blocks are ordered in a
+  // deterministic way.
+  using DomTreeNodePair =
+      std::pair<DomTreeNodeBase<NodeTy> *, std::pair<unsigned, unsigned>>;
+  using IDFPriorityQueue =
+      std::priority_queue<DomTreeNodePair, SmallVector<DomTreeNodePair, 32>,
+                          less_second>;
+
+  IDFPriorityQueue PQ;
+
+  DT.updateDFSNumbers();
+
+  for (NodeTy *BB : *DefBlocks) {
+    if (DomTreeNodeBase<NodeTy> *Node = DT.getNode(BB))
+      PQ.push({Node, std::make_pair(Node->getLevel(), Node->getDFSNumIn())});
+  }
+
+  SmallVector<DomTreeNodeBase<NodeTy> *, 32> Worklist;
+  SmallPtrSet<DomTreeNodeBase<NodeTy> *, 32> VisitedPQ;
+  SmallPtrSet<DomTreeNodeBase<NodeTy> *, 32> VisitedWorklist;
+
+  while (!PQ.empty()) {
+    DomTreeNodePair RootPair = PQ.top();
+    PQ.pop();
+    DomTreeNodeBase<NodeTy> *Root = RootPair.first;
+    unsigned RootLevel = RootPair.second.first;
+
+    // Walk all dominator tree children of Root, inspecting their CFG edges with
+    // targets elsewhere on the dominator tree. Only targets whose level is at
+    // most Root's level are added to the iterated dominance frontier of the
+    // definition set.
+
+    Worklist.clear();
+    Worklist.push_back(Root);
+    VisitedWorklist.insert(Root);
+
+    while (!Worklist.empty()) {
+      DomTreeNodeBase<NodeTy> *Node = Worklist.pop_back_val();
+      NodeTy *BB = Node->getBlock();
+      // Succ is the successor in the direction we are calculating IDF, so it is
+      // successor for IDF, and predecessor for Reverse IDF.
+      auto DoWork = [&](NodeTy *Succ) {
+        DomTreeNodeBase<NodeTy> *SuccNode = DT.getNode(Succ);
+
+        const unsigned SuccLevel = SuccNode->getLevel();
+        if (SuccLevel > RootLevel)
+          return;
+
+        if (!VisitedPQ.insert(SuccNode).second)
+          return;
+
+        NodeTy *SuccBB = SuccNode->getBlock();
+        if (useLiveIn && !LiveInBlocks->count(SuccBB))
+          return;
+
+        PHIBlocks.emplace_back(SuccBB);
+        if (!DefBlocks->count(SuccBB))
+          PQ.push(std::make_pair(
+              SuccNode, std::make_pair(SuccLevel, SuccNode->getDFSNumIn())));
+      };
+
+      for (auto Succ : ChildrenGetter.get(BB))
+        DoWork(Succ);
+
+      for (auto DomChild : *Node) {
+        if (VisitedWorklist.insert(DomChild).second)
+          Worklist.push_back(DomChild);
+      }
+    }
+  }
+}
+
+} // end of namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/JSON.h b/linux-x64/clang/include/llvm/Support/JSON.h
index e3cb950..0ca4109 100644
--- a/linux-x64/clang/include/llvm/Support/JSON.h
+++ b/linux-x64/clang/include/llvm/Support/JSON.h
@@ -21,6 +21,9 @@
 /// - a convention and helpers for mapping between json::Value and user-defined
 ///   types. See fromJSON(), ObjectMapper, and the class comment on Value.
 ///
+/// - an output API json::OStream which can emit JSON without materializing
+///   all structures as json::Value.
+///
 /// Typically, JSON data would be read from an external source, parsed into
 /// a Value, and then converted into some native data structure before doing
 /// real work on it. (And vice versa when writing).
@@ -36,7 +39,7 @@
 ///
 /// - LLVM bitstream is a space- and CPU- efficient binary format. Typically it
 ///   encodes LLVM IR ("bitcode"), but it can be a container for other data.
-///   Low-level reader/writer libraries are in Bitcode/Bitstream*.h
+///   Low-level reader/writer libraries are in Bitstream/Bitstream*.h
 ///
 //===---------------------------------------------------------------------===//
 
@@ -95,7 +98,7 @@
   using iterator = Storage::iterator;
   using const_iterator = Storage::const_iterator;
 
-  explicit Object() = default;
+  Object() = default;
   // KV is a trivial key-value struct for list-initialization.
   // (using std::pair forces extra copies).
   struct KV;
@@ -156,7 +159,7 @@
   using iterator = std::vector<Value>::iterator;
   using const_iterator = std::vector<Value>::const_iterator;
 
-  explicit Array() = default;
+  Array() = default;
   explicit Array(std::initializer_list<Value> Elements);
   template <typename Collection> explicit Array(const Collection &C) {
     for (const auto &V : C)
@@ -179,6 +182,7 @@
 
   bool empty() const { return V.empty(); }
   size_t size() const { return V.size(); }
+  void reserve(size_t S) { V.reserve(S); }
 
   void clear() { V.clear(); }
   void push_back(const Value &E) { V.push_back(E); }
@@ -309,8 +313,8 @@
     create<std::string>(std::move(V));
   }
   Value(const llvm::SmallVectorImpl<char> &V)
-      : Value(std::string(V.begin(), V.end())){};
-  Value(const llvm::formatv_object_base &V) : Value(V.str()){};
+      : Value(std::string(V.begin(), V.end())) {}
+  Value(const llvm::formatv_object_base &V) : Value(V.str()) {}
   // Strings: types with reference semantics. Must be valid UTF-8.
   Value(StringRef V) : Type(T_StringRef) {
     create<llvm::StringRef>(V);
@@ -436,11 +440,6 @@
     return LLVM_LIKELY(Type == T_Array) ? &as<json::Array>() : nullptr;
   }
 
-  /// Serializes this Value to JSON, writing it to the provided stream.
-  /// The formatting is compact (no extra whitespace) and deterministic.
-  /// For pretty-printing, use the formatv() format_provider below.
-  friend llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Value &);
-
 private:
   void destroy();
   void copyFrom(const Value &M);
@@ -461,9 +460,7 @@
     return *static_cast<T *>(Storage);
   }
 
-  template <typename Indenter>
-  void print(llvm::raw_ostream &, const Indenter &) const;
-  friend struct llvm::format_provider<llvm::json::Value>;
+  friend class OStream;
 
   enum ValueType : char {
     T_Null,
@@ -485,7 +482,6 @@
 
 bool operator==(const Value &, const Value &);
 inline bool operator!=(const Value &L, const Value &R) { return !(L == R); }
-llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Value &);
 
 /// ObjectKey is a used to capture keys in Object. Like Value but:
 ///   - only strings are allowed
@@ -698,6 +694,154 @@
     return llvm::inconvertibleErrorCode();
   }
 };
+
+/// json::OStream allows writing well-formed JSON without materializing
+/// all structures as json::Value ahead of time.
+/// It's faster, lower-level, and less safe than OS << json::Value.
+///
+/// Only one "top-level" object can be written to a stream.
+/// Simplest usage involves passing lambdas (Blocks) to fill in containers:
+///
+///   json::OStream J(OS);
+///   J.array([&]{
+///     for (const Event &E : Events)
+///       J.object([&] {
+///         J.attribute("timestamp", int64_t(E.Time));
+///         J.attributeArray("participants", [&] {
+///           for (const Participant &P : E.Participants)
+///             J.string(P.toString());
+///         });
+///       });
+///   });
+///
+/// This would produce JSON like:
+///
+///   [
+///     {
+///       "timestamp": 19287398741,
+///       "participants": [
+///         "King Kong",
+///         "Miley Cyrus",
+///         "Cleopatra"
+///       ]
+///     },
+///     ...
+///   ]
+///
+/// The lower level begin/end methods (arrayBegin()) are more flexible but
+/// care must be taken to pair them correctly:
+///
+///   json::OStream J(OS);
+//    J.arrayBegin();
+///   for (const Event &E : Events) {
+///     J.objectBegin();
+///     J.attribute("timestamp", int64_t(E.Time));
+///     J.attributeBegin("participants");
+///     for (const Participant &P : E.Participants)
+///       J.value(P.toString());
+///     J.attributeEnd();
+///     J.objectEnd();
+///   }
+///   J.arrayEnd();
+///
+/// If the call sequence isn't valid JSON, asserts will fire in debug mode.
+/// This can be mismatched begin()/end() pairs, trying to emit attributes inside
+/// an array, and so on.
+/// With asserts disabled, this is undefined behavior.
+class OStream {
+ public:
+  using Block = llvm::function_ref<void()>;
+  // If IndentSize is nonzero, output is pretty-printed.
+  explicit OStream(llvm::raw_ostream &OS, unsigned IndentSize = 0)
+      : OS(OS), IndentSize(IndentSize) {
+    Stack.emplace_back();
+  }
+  ~OStream() {
+    assert(Stack.size() == 1 && "Unmatched begin()/end()");
+    assert(Stack.back().Ctx == Singleton);
+    assert(Stack.back().HasValue && "Did not write top-level value");
+  }
+
+  /// Flushes the underlying ostream. OStream does not buffer internally.
+  void flush() { OS.flush(); }
+
+  // High level functions to output a value.
+  // Valid at top-level (exactly once), in an attribute value (exactly once),
+  // or in an array (any number of times).
+
+  /// Emit a self-contained value (number, string, vector<string> etc).
+  void value(const Value &V);
+  /// Emit an array whose elements are emitted in the provided Block.
+  void array(Block Contents) {
+    arrayBegin();
+    Contents();
+    arrayEnd();
+  }
+  /// Emit an object whose elements are emitted in the provided Block.
+  void object(Block Contents) {
+    objectBegin();
+    Contents();
+    objectEnd();
+  }
+
+  // High level functions to output object attributes.
+  // Valid only within an object (any number of times).
+
+  /// Emit an attribute whose value is self-contained (number, vector<int> etc).
+  void attribute(llvm::StringRef Key, const Value& Contents) {
+    attributeImpl(Key, [&] { value(Contents); });
+  }
+  /// Emit an attribute whose value is an array with elements from the Block.
+  void attributeArray(llvm::StringRef Key, Block Contents) {
+    attributeImpl(Key, [&] { array(Contents); });
+  }
+  /// Emit an attribute whose value is an object with attributes from the Block.
+  void attributeObject(llvm::StringRef Key, Block Contents) {
+    attributeImpl(Key, [&] { object(Contents); });
+  }
+
+  // Low-level begin/end functions to output arrays, objects, and attributes.
+  // Must be correctly paired. Allowed contexts are as above.
+
+  void arrayBegin();
+  void arrayEnd();
+  void objectBegin();
+  void objectEnd();
+  void attributeBegin(llvm::StringRef Key);
+  void attributeEnd();
+
+ private:
+  void attributeImpl(llvm::StringRef Key, Block Contents) {
+    attributeBegin(Key);
+    Contents();
+    attributeEnd();
+  }
+
+  void valueBegin();
+  void newline();
+
+  enum Context {
+    Singleton, // Top level, or object attribute.
+    Array,
+    Object,
+  };
+  struct State {
+    Context Ctx = Singleton;
+    bool HasValue = false;
+  };
+  llvm::SmallVector<State, 16> Stack; // Never empty.
+  llvm::raw_ostream &OS;
+  unsigned IndentSize;
+  unsigned Indent = 0;
+};
+
+/// Serializes this Value to JSON, writing it to the provided stream.
+/// The formatting is compact (no extra whitespace) and deterministic.
+/// For pretty-printing, use the formatv() format_provider below.
+inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Value &V) {
+  OStream(OS).value(V);
+  return OS;
+}
 } // namespace json
 
 /// Allow printing json::Value with formatv().
diff --git a/linux-x64/clang/include/llvm/Support/KnownBits.h b/linux-x64/clang/include/llvm/Support/KnownBits.h
index 8983a06..07fd94e 100644
--- a/linux-x64/clang/include/llvm/Support/KnownBits.h
+++ b/linux-x64/clang/include/llvm/Support/KnownBits.h
@@ -109,25 +109,36 @@
 
   /// Truncate the underlying known Zero and One bits. This is equivalent
   /// to truncating the value we're tracking.
-  KnownBits trunc(unsigned BitWidth) {
+  KnownBits trunc(unsigned BitWidth) const {
     return KnownBits(Zero.trunc(BitWidth), One.trunc(BitWidth));
   }
 
-  /// Zero extends the underlying known Zero and One bits. This is equivalent
-  /// to zero extending the value we're tracking.
-  KnownBits zext(unsigned BitWidth) {
-    return KnownBits(Zero.zext(BitWidth), One.zext(BitWidth));
+  /// Extends the underlying known Zero and One bits.
+  /// By setting ExtendedBitsAreKnownZero=true this will be equivalent to
+  /// zero extending the value we're tracking.
+  /// With ExtendedBitsAreKnownZero=false the extended bits are set to unknown.
+  KnownBits zext(unsigned BitWidth, bool ExtendedBitsAreKnownZero) const {
+    unsigned OldBitWidth = getBitWidth();
+    APInt NewZero = Zero.zext(BitWidth);
+    if (ExtendedBitsAreKnownZero)
+      NewZero.setBitsFrom(OldBitWidth);
+    return KnownBits(NewZero, One.zext(BitWidth));
   }
 
   /// Sign extends the underlying known Zero and One bits. This is equivalent
   /// to sign extending the value we're tracking.
-  KnownBits sext(unsigned BitWidth) {
+  KnownBits sext(unsigned BitWidth) const {
     return KnownBits(Zero.sext(BitWidth), One.sext(BitWidth));
   }
 
-  /// Zero extends or truncates the underlying known Zero and One bits. This is
-  /// equivalent to zero extending or truncating the value we're tracking.
-  KnownBits zextOrTrunc(unsigned BitWidth) {
+  /// Extends or truncates the underlying known Zero and One bits. When
+  /// extending the extended bits can either be set as known zero (if
+  /// ExtendedBitsAreKnownZero=true) or as unknown (if
+  /// ExtendedBitsAreKnownZero=false).
+  KnownBits zextOrTrunc(unsigned BitWidth,
+                        bool ExtendedBitsAreKnownZero) const {
+    if (BitWidth > getBitWidth())
+      return zext(BitWidth, ExtendedBitsAreKnownZero);
     return KnownBits(Zero.zextOrTrunc(BitWidth), One.zextOrTrunc(BitWidth));
   }
 
@@ -191,6 +202,10 @@
     return getBitWidth() - Zero.countPopulation();
   }
 
+  /// Compute known bits resulting from adding LHS, RHS and a 1-bit Carry.
+  static KnownBits computeForAddCarry(
+      const KnownBits &LHS, const KnownBits &RHS, const KnownBits &Carry);
+
   /// Compute known bits resulting from adding LHS and RHS.
   static KnownBits computeForAddSub(bool Add, bool NSW, const KnownBits &LHS,
                                     KnownBits RHS);
diff --git a/linux-x64/clang/include/llvm/Support/LEB128.h b/linux-x64/clang/include/llvm/Support/LEB128.h
index eb43c85..a02b83c 100644
--- a/linux-x64/clang/include/llvm/Support/LEB128.h
+++ b/linux-x64/clang/include/llvm/Support/LEB128.h
@@ -165,6 +165,8 @@
   int64_t Value = 0;
   unsigned Shift = 0;
   uint8_t Byte;
+  if (error)
+    *error = nullptr;
   do {
     if (end && p == end) {
       if (error)
@@ -174,11 +176,11 @@
       return 0;
     }
     Byte = *p++;
-    Value |= (int64_t(Byte & 0x7f) << Shift);
+    Value |= (uint64_t(Byte & 0x7f) << Shift);
     Shift += 7;
   } while (Byte >= 128);
-  // Sign extend negative numbers.
-  if (Byte & 0x40)
+  // Sign extend negative numbers if needed.
+  if (Shift < 64 && (Byte & 0x40))
     Value |= (-1ULL) << Shift;
   if (n)
     *n = (unsigned)(p - orig_p);
diff --git a/linux-x64/clang/include/llvm/Support/LowLevelTypeImpl.h b/linux-x64/clang/include/llvm/Support/LowLevelTypeImpl.h
index efe5c51..0e02b6e 100644
--- a/linux-x64/clang/include/llvm/Support/LowLevelTypeImpl.h
+++ b/linux-x64/clang/include/llvm/Support/LowLevelTypeImpl.h
@@ -111,6 +111,12 @@
     return getScalarSizeInBits() * getNumElements();
   }
 
+  /// Returns the total size of the type in bytes, i.e. number of whole bytes
+  /// needed to represent the size in bits. Must only be called on sized types.
+  unsigned getSizeInBytes() const {
+    return (getSizeInBits() + 7) / 8;
+  }
+
   LLT getScalarType() const {
     return isVector() ? getElementType() : *this;
   }
diff --git a/linux-x64/clang/include/llvm/Support/MachineValueType.h b/linux-x64/clang/include/llvm/Support/MachineValueType.h
index 7651b28..a9b130f 100644
--- a/linux-x64/clang/include/llvm/Support/MachineValueType.h
+++ b/linux-x64/clang/include/llvm/Support/MachineValueType.h
@@ -86,58 +86,65 @@
       v64i16         =  39,   // 64 x i16
       v128i16        =  40,   //128 x i16
 
-      v1i32          =  41,   //  1 x i32
-      v2i32          =  42,   //  2 x i32
-      v4i32          =  43,   //  4 x i32
-      v8i32          =  44,   //  8 x i32
-      v16i32         =  45,   // 16 x i32
-      v32i32         =  46,   // 32 x i32
-      v64i32         =  47,   // 64 x i32
+      v1i32          =  41,   //    1 x i32
+      v2i32          =  42,   //    2 x i32
+      v3i32          =  43,   //    3 x i32
+      v4i32          =  44,   //    4 x i32
+      v5i32          =  45,   //    5 x i32
+      v8i32          =  46,   //    8 x i32
+      v16i32         =  47,   //   16 x i32
+      v32i32         =  48,   //   32 x i32
+      v64i32         =  49,   //   64 x i32
+      v128i32        =  50,   //  128 x i32
+      v256i32        =  51,   //  256 x i32
+      v512i32        =  52,   //  512 x i32
+      v1024i32       =  53,   // 1024 x i32
+      v2048i32       =  54,   // 2048 x i32
 
-      v1i64          =  48,   //  1 x i64
-      v2i64          =  49,   //  2 x i64
-      v4i64          =  50,   //  4 x i64
-      v8i64          =  51,   //  8 x i64
-      v16i64         =  52,   // 16 x i64
-      v32i64         =  53,   // 32 x i64
+      v1i64          =  55,   //  1 x i64
+      v2i64          =  56,   //  2 x i64
+      v4i64          =  57,   //  4 x i64
+      v8i64          =  58,   //  8 x i64
+      v16i64         =  59,   // 16 x i64
+      v32i64         =  60,   // 32 x i64
 
-      v1i128         =  54,   //  1 x i128
+      v1i128         =  61,   //  1 x i128
 
       // Scalable integer types
-      nxv1i1         =  55,   // n x  1 x i1
-      nxv2i1         =  56,   // n x  2 x i1
-      nxv4i1         =  57,   // n x  4 x i1
-      nxv8i1         =  58,   // n x  8 x i1
-      nxv16i1        =  59,   // n x 16 x i1
-      nxv32i1        =  60,   // n x 32 x i1
+      nxv1i1         =  62,   // n x  1 x i1
+      nxv2i1         =  63,   // n x  2 x i1
+      nxv4i1         =  64,   // n x  4 x i1
+      nxv8i1         =  65,   // n x  8 x i1
+      nxv16i1        =  66,   // n x 16 x i1
+      nxv32i1        =  67,   // n x 32 x i1
 
-      nxv1i8         =  61,   // n x  1 x i8
-      nxv2i8         =  62,   // n x  2 x i8
-      nxv4i8         =  63,   // n x  4 x i8
-      nxv8i8         =  64,   // n x  8 x i8
-      nxv16i8        =  65,   // n x 16 x i8
-      nxv32i8        =  66,   // n x 32 x i8
+      nxv1i8         =  68,   // n x  1 x i8
+      nxv2i8         =  69,   // n x  2 x i8
+      nxv4i8         =  70,   // n x  4 x i8
+      nxv8i8         =  71,   // n x  8 x i8
+      nxv16i8        =  72,   // n x 16 x i8
+      nxv32i8        =  73,   // n x 32 x i8
 
-      nxv1i16        =  67,   // n x  1 x i16
-      nxv2i16        =  68,   // n x  2 x i16
-      nxv4i16        =  69,   // n x  4 x i16
-      nxv8i16        =  70,   // n x  8 x i16
-      nxv16i16       =  71,   // n x 16 x i16
-      nxv32i16       =  72,   // n x 32 x i16
+      nxv1i16        =  74,   // n x  1 x i16
+      nxv2i16        =  75,   // n x  2 x i16
+      nxv4i16        =  76,   // n x  4 x i16
+      nxv8i16        =  77,   // n x  8 x i16
+      nxv16i16       =  78,   // n x 16 x i16
+      nxv32i16       =  79,   // n x 32 x i16
 
-      nxv1i32        =  73,   // n x  1 x i32
-      nxv2i32        =  74,   // n x  2 x i32
-      nxv4i32        =  75,   // n x  4 x i32
-      nxv8i32        =  76,   // n x  8 x i32
-      nxv16i32       =  77,   // n x 16 x i32
-      nxv32i32       =  78,   // n x 32 x i32
+      nxv1i32        =  80,   // n x  1 x i32
+      nxv2i32        =  81,   // n x  2 x i32
+      nxv4i32        =  82,   // n x  4 x i32
+      nxv8i32        =  83,   // n x  8 x i32
+      nxv16i32       =  84,   // n x 16 x i32
+      nxv32i32       =  85,   // n x 32 x i32
 
-      nxv1i64        =  79,   // n x  1 x i64
-      nxv2i64        =  80,   // n x  2 x i64
-      nxv4i64        =  81,   // n x  4 x i64
-      nxv8i64        =  82,   // n x  8 x i64
-      nxv16i64       =  83,   // n x 16 x i64
-      nxv32i64       =  84,   // n x 32 x i64
+      nxv1i64        =  86,   // n x  1 x i64
+      nxv2i64        =  87,   // n x  2 x i64
+      nxv4i64        =  88,   // n x  4 x i64
+      nxv8i64        =  89,   // n x  8 x i64
+      nxv16i64       =  90,   // n x 16 x i64
+      nxv32i64       =  91,   // n x 32 x i64
 
       FIRST_INTEGER_VECTOR_VALUETYPE = v1i1,
       LAST_INTEGER_VECTOR_VALUETYPE = nxv32i64,
@@ -145,31 +152,40 @@
       FIRST_INTEGER_SCALABLE_VALUETYPE = nxv1i1,
       LAST_INTEGER_SCALABLE_VALUETYPE = nxv32i64,
 
-      v2f16          =  85,   //  2 x f16
-      v4f16          =  86,   //  4 x f16
-      v8f16          =  87,   //  8 x f16
-      v1f32          =  88,   //  1 x f32
-      v2f32          =  89,   //  2 x f32
-      v4f32          =  90,   //  4 x f32
-      v8f32          =  91,   //  8 x f32
-      v16f32         =  92,   // 16 x f32
-      v1f64          =  93,   //  1 x f64
-      v2f64          =  94,   //  2 x f64
-      v4f64          =  95,   //  4 x f64
-      v8f64          =  96,   //  8 x f64
+      v2f16          =  92,   //    2 x f16
+      v4f16          =  93,   //    4 x f16
+      v8f16          =  94,   //    8 x f16
+      v1f32          =  95,   //    1 x f32
+      v2f32          =  96,   //    2 x f32
+      v3f32          =  97,   //    3 x f32
+      v4f32          =  98,   //    4 x f32
+      v5f32          =  99,   //    5 x f32
+      v8f32          =  100,  //    8 x f32
+      v16f32         =  101,  //   16 x f32
+      v32f32         =  102,  //   32 x f32
+      v64f32         =  103,  //   64 x f32
+      v128f32        =  104,  //  128 x f32
+      v256f32        =  105,  //  256 x f32
+      v512f32        =  106,  //  512 x f32
+      v1024f32       =  107,  // 1024 x f32
+      v2048f32       =  108,  // 2048 x f32
+      v1f64          =  109,  //    1 x f64
+      v2f64          =  110,  //    2 x f64
+      v4f64          =  111,  //    4 x f64
+      v8f64          =  112,  //    8 x f64
 
-      nxv2f16        =  97,   // n x  2 x f16
-      nxv4f16        =  98,   // n x  4 x f16
-      nxv8f16        =  99,   // n x  8 x f16
-      nxv1f32        = 100,   // n x  1 x f32
-      nxv2f32        = 101,   // n x  2 x f32
-      nxv4f32        = 102,   // n x  4 x f32
-      nxv8f32        = 103,   // n x  8 x f32
-      nxv16f32       = 104,   // n x 16 x f32
-      nxv1f64        = 105,   // n x  1 x f64
-      nxv2f64        = 106,   // n x  2 x f64
-      nxv4f64        = 107,   // n x  4 x f64
-      nxv8f64        = 108,   // n x  8 x f64
+      nxv2f16        =  113,  // n x  2 x f16
+      nxv4f16        =  114,  // n x  4 x f16
+      nxv8f16        =  115,  // n x  8 x f16
+      nxv1f32        =  116,  // n x  1 x f32
+      nxv2f32        =  117,  // n x  2 x f32
+      nxv4f32        =  118,  // n x  4 x f32
+      nxv8f32        =  119,  // n x  8 x f32
+      nxv16f32       =  120,  // n x 16 x f32
+      nxv1f64        =  121,  // n x  1 x f64
+      nxv2f64        =  122,  // n x  2 x f64
+      nxv4f64        =  123,  // n x  4 x f64
+      nxv8f64        =  124,  // n x  8 x f64
 
       FIRST_FP_VECTOR_VALUETYPE = v2f16,
       LAST_FP_VECTOR_VALUETYPE = nxv8f64,
@@ -180,25 +196,25 @@
       FIRST_VECTOR_VALUETYPE = v1i1,
       LAST_VECTOR_VALUETYPE  = nxv8f64,
 
-      x86mmx         =  109,   // This is an X86 MMX value
+      x86mmx         =  125,   // This is an X86 MMX value
 
-      Glue           =  110,   // This glues nodes together during pre-RA sched
+      Glue           =  126,   // This glues nodes together during pre-RA sched
 
-      isVoid         =  111,   // This has no value
+      isVoid         =  127,   // This has no value
 
-      Untyped        =  112,   // This value takes a register, but has
+      Untyped        =  128,   // This value takes a register, but has
                                // unspecified type.  The register class
                                // will be determined by the opcode.
 
-      ExceptRef      = 113,    // WebAssembly's except_ref type
+      ExceptRef      = 129,    // WebAssembly's except_ref type
 
       FIRST_VALUETYPE = 1,     // This is always the beginning of the list.
-      LAST_VALUETYPE =  114,   // This always remains at the end of the list.
+      LAST_VALUETYPE =  130,   // This always remains at the end of the list.
 
       // This is the current maximum for LAST_VALUETYPE.
       // MVT::MAX_ALLOWED_VALUETYPE is used for asserts and to size bit vectors
       // This value must be a multiple of 32.
-      MAX_ALLOWED_VALUETYPE = 128,
+      MAX_ALLOWED_VALUETYPE = 160,
 
       // A value of type llvm::TokenTy
       token          = 248,
@@ -463,11 +479,18 @@
       case nxv32i16: return i16;
       case v1i32:
       case v2i32:
+      case v3i32:
       case v4i32:
+      case v5i32:
       case v8i32:
       case v16i32:
       case v32i32:
       case v64i32:
+      case v128i32:
+      case v256i32:
+      case v512i32:
+      case v1024i32:
+      case v2048i32:
       case nxv1i32:
       case nxv2i32:
       case nxv4i32:
@@ -495,9 +518,18 @@
       case nxv8f16: return f16;
       case v1f32:
       case v2f32:
+      case v3f32:
       case v4f32:
+      case v5f32:
       case v8f32:
       case v16f32:
+      case v32f32:
+      case v64f32:
+      case v128f32:
+      case v256f32:
+      case v512f32:
+      case v1024f32:
+      case v2048f32:
       case nxv1f32:
       case nxv2f32:
       case nxv4f32:
@@ -518,21 +550,33 @@
       switch (SimpleTy) {
       default:
         llvm_unreachable("Not a vector MVT!");
-      case v1024i1: return 1024;
-      case v512i1: return 512;
-      case v256i8: return 256;
+      case v2048i32:
+      case v2048f32: return 2048;
+      case v1024i1:
+      case v1024i32:
+      case v1024f32: return 1024;
+      case v512i1:
+      case v512i32:
+      case v512f32: return 512;
+      case v256i8:
+      case v256i32:
+      case v256f32: return 256;
       case v128i1:
       case v128i8:
-      case v128i16: return 128;
+      case v128i16:
+      case v128i32:
+      case v128f32: return 128;
       case v64i1:
       case v64i8:
       case v64i16:
-      case v64i32: return 64;
+      case v64i32:
+      case v64f32: return 64;
       case v32i1:
       case v32i8:
       case v32i16:
       case v32i32:
       case v32i64:
+      case v32f32:
       case nxv32i1:
       case nxv32i8:
       case nxv32i16:
@@ -566,6 +610,8 @@
       case nxv8f16:
       case nxv8f32:
       case nxv8f64: return 8;
+      case v5i32:
+      case v5f32: return 5;
       case v4i1:
       case v4i8:
       case v4i16:
@@ -582,6 +628,8 @@
       case nxv4f16:
       case nxv4f32:
       case nxv4f64: return 4;
+      case v3i32:
+      case v3f32: return 3;
       case v2i1:
       case v2i8:
       case v2i16:
@@ -692,6 +740,8 @@
       case nxv2f32:
       case nxv1f64: return 64;
       case f80 :  return 80;
+      case v3i32:
+      case v3f32: return 96;
       case f128:
       case ppcf128:
       case i128:
@@ -711,6 +761,8 @@
       case nxv8f16:
       case nxv4f32:
       case nxv2f64: return 128;
+      case v5i32:
+      case v5f32: return 160;
       case v32i8:
       case v16i16:
       case v8i32:
@@ -740,13 +792,25 @@
       case v64i16:
       case v32i32:
       case v16i64:
+      case v32f32:
       case nxv32i32:
       case nxv16i64: return 1024;
       case v256i8:
       case v128i16:
       case v64i32:
       case v32i64:
+      case v64f32:
       case nxv32i64: return 2048;
+      case v128i32:
+      case v128f32:  return 4096;
+      case v256i32:
+      case v256f32:  return 8192;
+      case v512i32:
+      case v512f32:  return 16384;
+      case v1024i32:
+      case v1024f32:  return 32768;
+      case v2048i32:
+      case v2048f32:  return 65536;
       case ExceptRef: return 0; // opaque type
       }
     }
@@ -861,13 +925,20 @@
         if (NumElements == 128) return MVT::v128i16;
         break;
       case MVT::i32:
-        if (NumElements == 1)  return MVT::v1i32;
-        if (NumElements == 2)  return MVT::v2i32;
-        if (NumElements == 4)  return MVT::v4i32;
-        if (NumElements == 8)  return MVT::v8i32;
-        if (NumElements == 16) return MVT::v16i32;
-        if (NumElements == 32) return MVT::v32i32;
-        if (NumElements == 64) return MVT::v64i32;
+        if (NumElements == 1)    return MVT::v1i32;
+        if (NumElements == 2)    return MVT::v2i32;
+        if (NumElements == 3)    return MVT::v3i32;
+        if (NumElements == 4)    return MVT::v4i32;
+        if (NumElements == 5)    return MVT::v5i32;
+        if (NumElements == 8)    return MVT::v8i32;
+        if (NumElements == 16)   return MVT::v16i32;
+        if (NumElements == 32)   return MVT::v32i32;
+        if (NumElements == 64)   return MVT::v64i32;
+        if (NumElements == 128)  return MVT::v128i32;
+        if (NumElements == 256)  return MVT::v256i32;
+        if (NumElements == 512)  return MVT::v512i32;
+        if (NumElements == 1024) return MVT::v1024i32;
+        if (NumElements == 2048) return MVT::v2048i32;
         break;
       case MVT::i64:
         if (NumElements == 1)  return MVT::v1i64;
@@ -886,11 +957,20 @@
         if (NumElements == 8)  return MVT::v8f16;
         break;
       case MVT::f32:
-        if (NumElements == 1)  return MVT::v1f32;
-        if (NumElements == 2)  return MVT::v2f32;
-        if (NumElements == 4)  return MVT::v4f32;
-        if (NumElements == 8)  return MVT::v8f32;
-        if (NumElements == 16) return MVT::v16f32;
+        if (NumElements == 1)    return MVT::v1f32;
+        if (NumElements == 2)    return MVT::v2f32;
+        if (NumElements == 3)    return MVT::v3f32;
+        if (NumElements == 4)    return MVT::v4f32;
+        if (NumElements == 5)    return MVT::v5f32;
+        if (NumElements == 8)    return MVT::v8f32;
+        if (NumElements == 16)   return MVT::v16f32;
+        if (NumElements == 32)   return MVT::v32f32;
+        if (NumElements == 64)   return MVT::v64f32;
+        if (NumElements == 128)  return MVT::v128f32;
+        if (NumElements == 256)  return MVT::v256f32;
+        if (NumElements == 512)  return MVT::v512f32;
+        if (NumElements == 1024) return MVT::v1024f32;
+        if (NumElements == 2048) return MVT::v2048f32;
         break;
       case MVT::f64:
         if (NumElements == 1)  return MVT::v1f64;
diff --git a/linux-x64/clang/include/llvm/Support/ManagedStatic.h b/linux-x64/clang/include/llvm/Support/ManagedStatic.h
index 441f24e..e65bb05 100644
--- a/linux-x64/clang/include/llvm/Support/ManagedStatic.h
+++ b/linux-x64/clang/include/llvm/Support/ManagedStatic.h
@@ -32,18 +32,41 @@
   static void call(void *Ptr) { delete[](T *)Ptr; }
 };
 
+// ManagedStatic must be initialized to zero, and it must *not* have a dynamic
+// initializer because managed statics are often created while running other
+// dynamic initializers. In standard C++11, the best way to accomplish this is
+// with a constexpr default constructor. However, different versions of the
+// Visual C++ compiler have had bugs where, even though the constructor may be
+// constexpr, a dynamic initializer may be emitted depending on optimization
+// settings. For the affected versions of MSVC, use the old linker
+// initialization pattern of not providing a constructor and leaving the fields
+// uninitialized.
+#if !defined(_MSC_VER) || defined(__clang__)
+#define LLVM_USE_CONSTEXPR_CTOR
+#endif
+
 /// ManagedStaticBase - Common base class for ManagedStatic instances.
 class ManagedStaticBase {
 protected:
+#ifdef LLVM_USE_CONSTEXPR_CTOR
+  mutable std::atomic<void *> Ptr{};
+  mutable void (*DeleterFn)(void *) = nullptr;
+  mutable const ManagedStaticBase *Next = nullptr;
+#else
   // This should only be used as a static variable, which guarantees that this
   // will be zero initialized.
   mutable std::atomic<void *> Ptr;
-  mutable void (*DeleterFn)(void*);
+  mutable void (*DeleterFn)(void *);
   mutable const ManagedStaticBase *Next;
+#endif
 
   void RegisterManagedStatic(void *(*creator)(), void (*deleter)(void*)) const;
 
 public:
+#ifdef LLVM_USE_CONSTEXPR_CTOR
+  constexpr ManagedStaticBase() = default;
+#endif
+
   /// isConstructed - Return true if this object has not been created yet.
   bool isConstructed() const { return Ptr != nullptr; }
 
diff --git a/linux-x64/clang/include/llvm/Support/MathExtras.h b/linux-x64/clang/include/llvm/Support/MathExtras.h
index e902a72..85d5a5a 100644
--- a/linux-x64/clang/include/llvm/Support/MathExtras.h
+++ b/linux-x64/clang/include/llvm/Support/MathExtras.h
@@ -51,14 +51,14 @@
 
 namespace detail {
 template <typename T, std::size_t SizeOfT> struct TrailingZerosCounter {
-  static std::size_t count(T Val, ZeroBehavior) {
+  static unsigned count(T Val, ZeroBehavior) {
     if (!Val)
       return std::numeric_limits<T>::digits;
     if (Val & 0x1)
       return 0;
 
     // Bisection method.
-    std::size_t ZeroBits = 0;
+    unsigned ZeroBits = 0;
     T Shift = std::numeric_limits<T>::digits >> 1;
     T Mask = std::numeric_limits<T>::max() >> Shift;
     while (Shift) {
@@ -75,7 +75,7 @@
 
 #if __GNUC__ >= 4 || defined(_MSC_VER)
 template <typename T> struct TrailingZerosCounter<T, 4> {
-  static std::size_t count(T Val, ZeroBehavior ZB) {
+  static unsigned count(T Val, ZeroBehavior ZB) {
     if (ZB != ZB_Undefined && Val == 0)
       return 32;
 
@@ -91,7 +91,7 @@
 
 #if !defined(_MSC_VER) || defined(_M_X64)
 template <typename T> struct TrailingZerosCounter<T, 8> {
-  static std::size_t count(T Val, ZeroBehavior ZB) {
+  static unsigned count(T Val, ZeroBehavior ZB) {
     if (ZB != ZB_Undefined && Val == 0)
       return 64;
 
@@ -116,7 +116,7 @@
 /// \param ZB the behavior on an input of 0. Only ZB_Width and ZB_Undefined are
 ///   valid arguments.
 template <typename T>
-std::size_t countTrailingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
+unsigned countTrailingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
   static_assert(std::numeric_limits<T>::is_integer &&
                     !std::numeric_limits<T>::is_signed,
                 "Only unsigned integral types are allowed.");
@@ -125,12 +125,12 @@
 
 namespace detail {
 template <typename T, std::size_t SizeOfT> struct LeadingZerosCounter {
-  static std::size_t count(T Val, ZeroBehavior) {
+  static unsigned count(T Val, ZeroBehavior) {
     if (!Val)
       return std::numeric_limits<T>::digits;
 
     // Bisection method.
-    std::size_t ZeroBits = 0;
+    unsigned ZeroBits = 0;
     for (T Shift = std::numeric_limits<T>::digits >> 1; Shift; Shift >>= 1) {
       T Tmp = Val >> Shift;
       if (Tmp)
@@ -144,7 +144,7 @@
 
 #if __GNUC__ >= 4 || defined(_MSC_VER)
 template <typename T> struct LeadingZerosCounter<T, 4> {
-  static std::size_t count(T Val, ZeroBehavior ZB) {
+  static unsigned count(T Val, ZeroBehavior ZB) {
     if (ZB != ZB_Undefined && Val == 0)
       return 32;
 
@@ -160,7 +160,7 @@
 
 #if !defined(_MSC_VER) || defined(_M_X64)
 template <typename T> struct LeadingZerosCounter<T, 8> {
-  static std::size_t count(T Val, ZeroBehavior ZB) {
+  static unsigned count(T Val, ZeroBehavior ZB) {
     if (ZB != ZB_Undefined && Val == 0)
       return 64;
 
@@ -185,7 +185,7 @@
 /// \param ZB the behavior on an input of 0. Only ZB_Width and ZB_Undefined are
 ///   valid arguments.
 template <typename T>
-std::size_t countLeadingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
+unsigned countLeadingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
   static_assert(std::numeric_limits<T>::is_integer &&
                     !std::numeric_limits<T>::is_signed,
                 "Only unsigned integral types are allowed.");
@@ -458,7 +458,7 @@
 /// \param ZB the behavior on an input of all ones. Only ZB_Width and
 /// ZB_Undefined are valid arguments.
 template <typename T>
-std::size_t countLeadingOnes(T Value, ZeroBehavior ZB = ZB_Width) {
+unsigned countLeadingOnes(T Value, ZeroBehavior ZB = ZB_Width) {
   static_assert(std::numeric_limits<T>::is_integer &&
                     !std::numeric_limits<T>::is_signed,
                 "Only unsigned integral types are allowed.");
@@ -474,7 +474,7 @@
 /// \param ZB the behavior on an input of all ones. Only ZB_Width and
 /// ZB_Undefined are valid arguments.
 template <typename T>
-std::size_t countTrailingOnes(T Value, ZeroBehavior ZB = ZB_Width) {
+unsigned countTrailingOnes(T Value, ZeroBehavior ZB = ZB_Width) {
   static_assert(std::numeric_limits<T>::is_integer &&
                     !std::numeric_limits<T>::is_signed,
                 "Only unsigned integral types are allowed.");
diff --git a/linux-x64/clang/include/llvm/Support/MemAlloc.h b/linux-x64/clang/include/llvm/Support/MemAlloc.h
index ed076ff..0e58691 100644
--- a/linux-x64/clang/include/llvm/Support/MemAlloc.h
+++ b/linux-x64/clang/include/llvm/Support/MemAlloc.h
@@ -24,23 +24,41 @@
 
 LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_malloc(size_t Sz) {
   void *Result = std::malloc(Sz);
-  if (Result == nullptr)
+  if (Result == nullptr) {
+    // It is implementation-defined whether allocation occurs if the space
+    // requested is zero (ISO/IEC 9899:2018 7.22.3). Retry, requesting
+    // non-zero, if the space requested was zero.
+    if (Sz == 0)
+      return safe_malloc(1);
     report_bad_alloc_error("Allocation failed");
+  }
   return Result;
 }
 
 LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_calloc(size_t Count,
                                                         size_t Sz) {
   void *Result = std::calloc(Count, Sz);
-  if (Result == nullptr)
+  if (Result == nullptr) {
+    // It is implementation-defined whether allocation occurs if the space
+    // requested is zero (ISO/IEC 9899:2018 7.22.3). Retry, requesting
+    // non-zero, if the space requested was zero.
+    if (Count == 0 || Sz == 0)
+      return safe_malloc(1);
     report_bad_alloc_error("Allocation failed");
+  }
   return Result;
 }
 
 LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_realloc(void *Ptr, size_t Sz) {
   void *Result = std::realloc(Ptr, Sz);
-  if (Result == nullptr)
+  if (Result == nullptr) {
+    // It is implementation-defined whether allocation occurs if the space
+    // requested is zero (ISO/IEC 9899:2018 7.22.3). Retry, requesting
+    // non-zero, if the space requested was zero.
+    if (Sz == 0)
+      return safe_malloc(1);
     report_bad_alloc_error("Allocation failed");
+  }
   return Result;
 }
 
diff --git a/linux-x64/clang/include/llvm/Support/Memory.h b/linux-x64/clang/include/llvm/Support/Memory.h
index 2f4cafe..6f22dd7 100644
--- a/linux-x64/clang/include/llvm/Support/Memory.h
+++ b/linux-x64/clang/include/llvm/Support/Memory.h
@@ -18,6 +18,10 @@
 #include <system_error>
 
 namespace llvm {
+
+// Forward declare raw_ostream: it is used for debug dumping below.
+class raw_ostream;
+
 namespace sys {
 
   /// This class encapsulates the notion of a memory block which has an address
@@ -27,14 +31,18 @@
   /// Memory block abstraction.
   class MemoryBlock {
   public:
-    MemoryBlock() : Address(nullptr), Size(0) { }
-    MemoryBlock(void *addr, size_t size) : Address(addr), Size(size) { }
+    MemoryBlock() : Address(nullptr), AllocatedSize(0) {}
+    MemoryBlock(void *addr, size_t allocatedSize)
+        : Address(addr), AllocatedSize(allocatedSize) {}
     void *base() const { return Address; }
-    size_t size() const { return Size; }
-
+    /// The size as it was allocated. This is always greater or equal to the
+    /// size that was originally requested.
+    size_t allocatedSize() const { return AllocatedSize; }
+  
   private:
     void *Address;    ///< Address of first byte of memory area
-    size_t Size;      ///< Size, in bytes of the memory area
+    size_t AllocatedSize; ///< Size, in bytes of the memory area
+    unsigned Flags = 0;
     friend class Memory;
   };
 
@@ -45,9 +53,11 @@
   class Memory {
   public:
     enum ProtectionFlags {
-      MF_READ  = 0x1000000,
+      MF_READ = 0x1000000,
       MF_WRITE = 0x2000000,
-      MF_EXEC  = 0x4000000
+      MF_EXEC = 0x4000000,
+      MF_RWE_MASK = 0x7000000,
+      MF_HUGE_HINT = 0x0000001
     };
 
     /// This method allocates a block of memory that is suitable for loading
@@ -132,13 +142,22 @@
       Memory::releaseMappedMemory(M);
     }
     void *base() const { return M.base(); }
-    size_t size() const { return M.size(); }
+    /// The size as it was allocated. This is always greater or equal to the
+    /// size that was originally requested.
+    size_t allocatedSize() const { return M.allocatedSize(); }
     MemoryBlock getMemoryBlock() const { return M; }
   private:
     MemoryBlock M;
   };
 
-}
-}
+#ifndef NDEBUG
+  /// Debugging output for Memory::ProtectionFlags.
+  raw_ostream &operator<<(raw_ostream &OS, const Memory::ProtectionFlags &PF);
+
+  /// Debugging output for MemoryBlock.
+  raw_ostream &operator<<(raw_ostream &OS, const MemoryBlock &MB);
+#endif // ifndef NDEBUG
+  }    // end namespace sys
+  }    // end namespace llvm
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/MemoryBuffer.h b/linux-x64/clang/include/llvm/Support/MemoryBuffer.h
index 4405269..b5196cd 100644
--- a/linux-x64/clang/include/llvm/Support/MemoryBuffer.h
+++ b/linux-x64/clang/include/llvm/Support/MemoryBuffer.h
@@ -90,7 +90,7 @@
   /// MemoryBuffer. The slice is specified by an \p Offset and \p MapSize.
   /// Since this is in the middle of a file, the buffer is not null terminated.
   static ErrorOr<std::unique_ptr<MemoryBuffer>>
-  getOpenFileSlice(int FD, const Twine &Filename, uint64_t MapSize,
+  getOpenFileSlice(sys::fs::file_t FD, const Twine &Filename, uint64_t MapSize,
                    int64_t Offset, bool IsVolatile = false);
 
   /// Given an already-open file descriptor, read the file and return a
@@ -100,7 +100,7 @@
   /// can change outside the user's control, e.g. when libclang tries to parse
   /// while the user is editing/updating the file or if the file is on an NFS.
   static ErrorOr<std::unique_ptr<MemoryBuffer>>
-  getOpenFile(int FD, const Twine &Filename, uint64_t FileSize,
+  getOpenFile(sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize,
               bool RequiresNullTerminator = true, bool IsVolatile = false);
 
   /// Open the specified memory range as a MemoryBuffer. Note that InputData
@@ -264,7 +264,7 @@
 
 public:
   MemoryBufferRef() = default;
-  MemoryBufferRef(MemoryBuffer& Buffer)
+  MemoryBufferRef(const MemoryBuffer& Buffer)
       : Buffer(Buffer.getBuffer()), Identifier(Buffer.getBufferIdentifier()) {}
   MemoryBufferRef(StringRef Buffer, StringRef Identifier)
       : Buffer(Buffer), Identifier(Identifier) {}
diff --git a/linux-x64/clang/include/llvm/Support/Parallel.h b/linux-x64/clang/include/llvm/Support/Parallel.h
index 9843b95..eab9b49 100644
--- a/linux-x64/clang/include/llvm/Support/Parallel.h
+++ b/linux-x64/clang/include/llvm/Support/Parallel.h
@@ -73,8 +73,12 @@
 
 class TaskGroup {
   Latch L;
+  bool Parallel;
 
 public:
+  TaskGroup();
+  ~TaskGroup();
+
   void spawn(std::function<void()> f);
 
   void sync() const { L.sync(); }
diff --git a/linux-x64/clang/include/llvm/Support/Process.h b/linux-x64/clang/include/llvm/Support/Process.h
index 9a70304..67e3791 100644
--- a/linux-x64/clang/include/llvm/Support/Process.h
+++ b/linux-x64/clang/include/llvm/Support/Process.h
@@ -28,6 +28,7 @@
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/Chrono.h"
 #include "llvm/Support/DataTypes.h"
+#include "llvm/Support/Error.h"
 #include <system_error>
 
 namespace llvm {
@@ -41,7 +42,25 @@
 /// current executing process.
 class Process {
 public:
-  static unsigned getPageSize();
+  /// Get the process's page size.
+  /// This may fail if the underlying syscall returns an error. In most cases,
+  /// page size information is used for optimization, and this error can be
+  /// safely discarded by calling consumeError, and an estimated page size
+  /// substituted instead.
+  static Expected<unsigned> getPageSize();
+
+  /// Get the process's estimated page size.
+  /// This function always succeeds, but if the underlying syscall to determine
+  /// the page size fails then this will silently return an estimated page size.
+  /// The estimated page size is guaranteed to be a power of 2.
+  static unsigned getPageSizeEstimate() {
+    if (auto PageSize = getPageSize())
+      return *PageSize;
+    else {
+      consumeError(PageSize.takeError());
+      return 4096;
+    }
+  }
 
   /// Return process memory usage.
   /// This static function will return the total amount of memory allocated
diff --git a/linux-x64/clang/include/llvm/Support/SMTAPI.h b/linux-x64/clang/include/llvm/Support/SMTAPI.h
new file mode 100644
index 0000000..24dcd12
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/SMTAPI.h
@@ -0,0 +1,447 @@
+//===- SMTAPI.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines a SMT generic Solver API, which will be the base class
+//  for every SMT solver specific class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_SMTAPI_H
+#define LLVM_SUPPORT_SMTAPI_H
+
+#include "llvm/ADT/APFloat.h"
+#include "llvm/ADT/APSInt.h"
+#include "llvm/ADT/FoldingSet.h"
+#include "llvm/Support/raw_ostream.h"
+#include <memory>
+
+namespace llvm {
+
+/// Generic base class for SMT sorts
+class SMTSort {
+public:
+  SMTSort() = default;
+  virtual ~SMTSort() = default;
+
+  /// Returns true if the sort is a bitvector, calls isBitvectorSortImpl().
+  virtual bool isBitvectorSort() const { return isBitvectorSortImpl(); }
+
+  /// Returns true if the sort is a floating-point, calls isFloatSortImpl().
+  virtual bool isFloatSort() const { return isFloatSortImpl(); }
+
+  /// Returns true if the sort is a boolean, calls isBooleanSortImpl().
+  virtual bool isBooleanSort() const { return isBooleanSortImpl(); }
+
+  /// Returns the bitvector size, fails if the sort is not a bitvector
+  /// Calls getBitvectorSortSizeImpl().
+  virtual unsigned getBitvectorSortSize() const {
+    assert(isBitvectorSort() && "Not a bitvector sort!");
+    unsigned Size = getBitvectorSortSizeImpl();
+    assert(Size && "Size is zero!");
+    return Size;
+  };
+
+  /// Returns the floating-point size, fails if the sort is not a floating-point
+  /// Calls getFloatSortSizeImpl().
+  virtual unsigned getFloatSortSize() const {
+    assert(isFloatSort() && "Not a floating-point sort!");
+    unsigned Size = getFloatSortSizeImpl();
+    assert(Size && "Size is zero!");
+    return Size;
+  };
+
+  virtual void Profile(llvm::FoldingSetNodeID &ID) const = 0;
+
+  bool operator<(const SMTSort &Other) const {
+    llvm::FoldingSetNodeID ID1, ID2;
+    Profile(ID1);
+    Other.Profile(ID2);
+    return ID1 < ID2;
+  }
+
+  friend bool operator==(SMTSort const &LHS, SMTSort const &RHS) {
+    return LHS.equal_to(RHS);
+  }
+
+  virtual void print(raw_ostream &OS) const = 0;
+
+  LLVM_DUMP_METHOD void dump() const;
+
+protected:
+  /// Query the SMT solver and returns true if two sorts are equal (same kind
+  /// and bit width). This does not check if the two sorts are the same objects.
+  virtual bool equal_to(SMTSort const &other) const = 0;
+
+  /// Query the SMT solver and checks if a sort is bitvector.
+  virtual bool isBitvectorSortImpl() const = 0;
+
+  /// Query the SMT solver and checks if a sort is floating-point.
+  virtual bool isFloatSortImpl() const = 0;
+
+  /// Query the SMT solver and checks if a sort is boolean.
+  virtual bool isBooleanSortImpl() const = 0;
+
+  /// Query the SMT solver and returns the sort bit width.
+  virtual unsigned getBitvectorSortSizeImpl() const = 0;
+
+  /// Query the SMT solver and returns the sort bit width.
+  virtual unsigned getFloatSortSizeImpl() const = 0;
+};
+
+/// Shared pointer for SMTSorts, used by SMTSolver API.
+using SMTSortRef = const SMTSort *;
+
+/// Generic base class for SMT exprs
+class SMTExpr {
+public:
+  SMTExpr() = default;
+  virtual ~SMTExpr() = default;
+
+  bool operator<(const SMTExpr &Other) const {
+    llvm::FoldingSetNodeID ID1, ID2;
+    Profile(ID1);
+    Other.Profile(ID2);
+    return ID1 < ID2;
+  }
+
+  virtual void Profile(llvm::FoldingSetNodeID &ID) const = 0;
+
+  friend bool operator==(SMTExpr const &LHS, SMTExpr const &RHS) {
+    return LHS.equal_to(RHS);
+  }
+
+  virtual void print(raw_ostream &OS) const = 0;
+
+  LLVM_DUMP_METHOD void dump() const;
+
+protected:
+  /// Query the SMT solver and returns true if two sorts are equal (same kind
+  /// and bit width). This does not check if the two sorts are the same objects.
+  virtual bool equal_to(SMTExpr const &other) const = 0;
+};
+
+/// Shared pointer for SMTExprs, used by SMTSolver API.
+using SMTExprRef = const SMTExpr *;
+
+/// Generic base class for SMT Solvers
+///
+/// This class is responsible for wrapping all sorts and expression generation,
+/// through the mk* methods. It also provides methods to create SMT expressions
+/// straight from clang's AST, through the from* methods.
+class SMTSolver {
+public:
+  SMTSolver() = default;
+  virtual ~SMTSolver() = default;
+
+  LLVM_DUMP_METHOD void dump() const;
+
+  // Returns an appropriate floating-point sort for the given bitwidth.
+  SMTSortRef getFloatSort(unsigned BitWidth) {
+    switch (BitWidth) {
+    case 16:
+      return getFloat16Sort();
+    case 32:
+      return getFloat32Sort();
+    case 64:
+      return getFloat64Sort();
+    case 128:
+      return getFloat128Sort();
+    default:;
+    }
+    llvm_unreachable("Unsupported floating-point bitwidth!");
+  }
+
+  // Returns a boolean sort.
+  virtual SMTSortRef getBoolSort() = 0;
+
+  // Returns an appropriate bitvector sort for the given bitwidth.
+  virtual SMTSortRef getBitvectorSort(const unsigned BitWidth) = 0;
+
+  // Returns a floating-point sort of width 16
+  virtual SMTSortRef getFloat16Sort() = 0;
+
+  // Returns a floating-point sort of width 32
+  virtual SMTSortRef getFloat32Sort() = 0;
+
+  // Returns a floating-point sort of width 64
+  virtual SMTSortRef getFloat64Sort() = 0;
+
+  // Returns a floating-point sort of width 128
+  virtual SMTSortRef getFloat128Sort() = 0;
+
+  // Returns an appropriate sort for the given AST.
+  virtual SMTSortRef getSort(const SMTExprRef &AST) = 0;
+
+  /// Given a constraint, adds it to the solver
+  virtual void addConstraint(const SMTExprRef &Exp) const = 0;
+
+  /// Creates a bitvector addition operation
+  virtual SMTExprRef mkBVAdd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector subtraction operation
+  virtual SMTExprRef mkBVSub(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector multiplication operation
+  virtual SMTExprRef mkBVMul(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed modulus operation
+  virtual SMTExprRef mkBVSRem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned modulus operation
+  virtual SMTExprRef mkBVURem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed division operation
+  virtual SMTExprRef mkBVSDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned division operation
+  virtual SMTExprRef mkBVUDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector logical shift left operation
+  virtual SMTExprRef mkBVShl(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector arithmetic shift right operation
+  virtual SMTExprRef mkBVAshr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector logical shift right operation
+  virtual SMTExprRef mkBVLshr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector negation operation
+  virtual SMTExprRef mkBVNeg(const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector not operation
+  virtual SMTExprRef mkBVNot(const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector xor operation
+  virtual SMTExprRef mkBVXor(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector or operation
+  virtual SMTExprRef mkBVOr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector and operation
+  virtual SMTExprRef mkBVAnd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned less-than operation
+  virtual SMTExprRef mkBVUlt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed less-than operation
+  virtual SMTExprRef mkBVSlt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned greater-than operation
+  virtual SMTExprRef mkBVUgt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed greater-than operation
+  virtual SMTExprRef mkBVSgt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned less-equal-than operation
+  virtual SMTExprRef mkBVUle(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed less-equal-than operation
+  virtual SMTExprRef mkBVSle(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned greater-equal-than operation
+  virtual SMTExprRef mkBVUge(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed greater-equal-than operation
+  virtual SMTExprRef mkBVSge(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean not operation
+  virtual SMTExprRef mkNot(const SMTExprRef &Exp) = 0;
+
+  /// Creates a boolean equality operation
+  virtual SMTExprRef mkEqual(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean and operation
+  virtual SMTExprRef mkAnd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean or operation
+  virtual SMTExprRef mkOr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean ite operation
+  virtual SMTExprRef mkIte(const SMTExprRef &Cond, const SMTExprRef &T,
+                           const SMTExprRef &F) = 0;
+
+  /// Creates a bitvector sign extension operation
+  virtual SMTExprRef mkBVSignExt(unsigned i, const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector zero extension operation
+  virtual SMTExprRef mkBVZeroExt(unsigned i, const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector extract operation
+  virtual SMTExprRef mkBVExtract(unsigned High, unsigned Low,
+                                 const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector concat operation
+  virtual SMTExprRef mkBVConcat(const SMTExprRef &LHS,
+                                const SMTExprRef &RHS) = 0;
+
+  /// Creates a predicate that checks for overflow in a bitvector addition
+  /// operation
+  virtual SMTExprRef mkBVAddNoOverflow(const SMTExprRef &LHS,
+                                       const SMTExprRef &RHS,
+                                       bool isSigned) = 0;
+
+  /// Creates a predicate that checks for underflow in a signed bitvector
+  /// addition operation
+  virtual SMTExprRef mkBVAddNoUnderflow(const SMTExprRef &LHS,
+                                        const SMTExprRef &RHS) = 0;
+
+  /// Creates a predicate that checks for overflow in a signed bitvector
+  /// subtraction operation
+  virtual SMTExprRef mkBVSubNoOverflow(const SMTExprRef &LHS,
+                                       const SMTExprRef &RHS) = 0;
+
+  /// Creates a predicate that checks for underflow in a bitvector subtraction
+  /// operation
+  virtual SMTExprRef mkBVSubNoUnderflow(const SMTExprRef &LHS,
+                                        const SMTExprRef &RHS,
+                                        bool isSigned) = 0;
+
+  /// Creates a predicate that checks for overflow in a signed bitvector
+  /// division/modulus operation
+  virtual SMTExprRef mkBVSDivNoOverflow(const SMTExprRef &LHS,
+                                        const SMTExprRef &RHS) = 0;
+
+  /// Creates a predicate that checks for overflow in a bitvector negation
+  /// operation
+  virtual SMTExprRef mkBVNegNoOverflow(const SMTExprRef &Exp) = 0;
+
+  /// Creates a predicate that checks for overflow in a bitvector multiplication
+  /// operation
+  virtual SMTExprRef mkBVMulNoOverflow(const SMTExprRef &LHS,
+                                       const SMTExprRef &RHS,
+                                       bool isSigned) = 0;
+
+  /// Creates a predicate that checks for underflow in a signed bitvector
+  /// multiplication operation
+  virtual SMTExprRef mkBVMulNoUnderflow(const SMTExprRef &LHS,
+                                        const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point negation operation
+  virtual SMTExprRef mkFPNeg(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isInfinite operation
+  virtual SMTExprRef mkFPIsInfinite(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isNaN operation
+  virtual SMTExprRef mkFPIsNaN(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isNormal operation
+  virtual SMTExprRef mkFPIsNormal(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isZero operation
+  virtual SMTExprRef mkFPIsZero(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point multiplication operation
+  virtual SMTExprRef mkFPMul(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point division operation
+  virtual SMTExprRef mkFPDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point remainder operation
+  virtual SMTExprRef mkFPRem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point addition operation
+  virtual SMTExprRef mkFPAdd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point subtraction operation
+  virtual SMTExprRef mkFPSub(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point less-than operation
+  virtual SMTExprRef mkFPLt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point greater-than operation
+  virtual SMTExprRef mkFPGt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point less-than-or-equal operation
+  virtual SMTExprRef mkFPLe(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point greater-than-or-equal operation
+  virtual SMTExprRef mkFPGe(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point equality operation
+  virtual SMTExprRef mkFPEqual(const SMTExprRef &LHS,
+                               const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point conversion from floatint-point to floating-point
+  /// operation
+  virtual SMTExprRef mkFPtoFP(const SMTExprRef &From, const SMTSortRef &To) = 0;
+
+  /// Creates a floating-point conversion from signed bitvector to
+  /// floatint-point operation
+  virtual SMTExprRef mkSBVtoFP(const SMTExprRef &From,
+                               const SMTSortRef &To) = 0;
+
+  /// Creates a floating-point conversion from unsigned bitvector to
+  /// floatint-point operation
+  virtual SMTExprRef mkUBVtoFP(const SMTExprRef &From,
+                               const SMTSortRef &To) = 0;
+
+  /// Creates a floating-point conversion from floatint-point to signed
+  /// bitvector operation
+  virtual SMTExprRef mkFPtoSBV(const SMTExprRef &From, unsigned ToWidth) = 0;
+
+  /// Creates a floating-point conversion from floatint-point to unsigned
+  /// bitvector operation
+  virtual SMTExprRef mkFPtoUBV(const SMTExprRef &From, unsigned ToWidth) = 0;
+
+  /// Creates a new symbol, given a name and a sort
+  virtual SMTExprRef mkSymbol(const char *Name, SMTSortRef Sort) = 0;
+
+  // Returns an appropriate floating-point rounding mode.
+  virtual SMTExprRef getFloatRoundingMode() = 0;
+
+  // If the a model is available, returns the value of a given bitvector symbol
+  virtual llvm::APSInt getBitvector(const SMTExprRef &Exp, unsigned BitWidth,
+                                    bool isUnsigned) = 0;
+
+  // If the a model is available, returns the value of a given boolean symbol
+  virtual bool getBoolean(const SMTExprRef &Exp) = 0;
+
+  /// Constructs an SMTExprRef from a boolean.
+  virtual SMTExprRef mkBoolean(const bool b) = 0;
+
+  /// Constructs an SMTExprRef from a finite APFloat.
+  virtual SMTExprRef mkFloat(const llvm::APFloat Float) = 0;
+
+  /// Constructs an SMTExprRef from an APSInt and its bit width
+  virtual SMTExprRef mkBitvector(const llvm::APSInt Int, unsigned BitWidth) = 0;
+
+  /// Given an expression, extract the value of this operand in the model.
+  virtual bool getInterpretation(const SMTExprRef &Exp, llvm::APSInt &Int) = 0;
+
+  /// Given an expression extract the value of this operand in the model.
+  virtual bool getInterpretation(const SMTExprRef &Exp,
+                                 llvm::APFloat &Float) = 0;
+
+  /// Check if the constraints are satisfiable
+  virtual Optional<bool> check() const = 0;
+
+  /// Push the current solver state
+  virtual void push() = 0;
+
+  /// Pop the previous solver state
+  virtual void pop(unsigned NumStates = 1) = 0;
+
+  /// Reset the solver and remove all constraints.
+  virtual void reset() = 0;
+
+  /// Checks if the solver supports floating-points.
+  virtual bool isFPSupported() = 0;
+
+  virtual void print(raw_ostream &OS) const = 0;
+};
+
+/// Shared pointer for SMTSolvers.
+using SMTSolverRef = std::shared_ptr<SMTSolver>;
+
+/// Convenience method to create and Z3Solver object
+SMTSolverRef CreateZ3Solver();
+
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/ScalableSize.h b/linux-x64/clang/include/llvm/Support/ScalableSize.h
new file mode 100644
index 0000000..96bf043
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/ScalableSize.h
@@ -0,0 +1,43 @@
+//===- ScalableSize.h - Scalable vector size info ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file provides a struct that can be used to query the size of IR types
+// which may be scalable vectors. It provides convenience operators so that
+// it can be used in much the same way as a single scalar value.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_SCALABLESIZE_H
+#define LLVM_SUPPORT_SCALABLESIZE_H
+
+namespace llvm {
+
+class ElementCount {
+public:
+  unsigned Min;  // Minimum number of vector elements.
+  bool Scalable; // If true, NumElements is a multiple of 'Min' determined
+                 // at runtime rather than compile time.
+
+  ElementCount(unsigned Min, bool Scalable)
+  : Min(Min), Scalable(Scalable) {}
+
+  ElementCount operator*(unsigned RHS) {
+    return { Min * RHS, Scalable };
+  }
+  ElementCount operator/(unsigned RHS) {
+    return { Min / RHS, Scalable };
+  }
+
+  bool operator==(const ElementCount& RHS) const {
+    return Min == RHS.Min && Scalable == RHS.Scalable;
+  }
+};
+
+} // end namespace llvm
+
+#endif // LLVM_SUPPORT_SCALABLESIZE_H
diff --git a/linux-x64/clang/include/llvm/Support/ScopedPrinter.h b/linux-x64/clang/include/llvm/Support/ScopedPrinter.h
index 1699655..88daedc 100644
--- a/linux-x64/clang/include/llvm/Support/ScopedPrinter.h
+++ b/linux-x64/clang/include/llvm/Support/ScopedPrinter.h
@@ -1,4 +1,4 @@
-//===-- ScopedPrinter.h ---------------------------------------------------===//
+//===-- ScopedPrinter.h ----------------------------------------*- C++ -*--===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
diff --git a/linux-x64/clang/include/llvm/Support/Signposts.h b/linux-x64/clang/include/llvm/Support/Signposts.h
new file mode 100644
index 0000000..b5a8c3d
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/Signposts.h
@@ -0,0 +1,43 @@
+//===-- llvm/Support/Signposts.h - Interval debug annotations ---*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file Some OS's provide profilers that allow applications to provide custom
+/// annotations to the profiler. For example, on Xcode 10 and later 'signposts'
+/// can be emitted by the application and these will be rendered to the Points
+/// of Interest track on the instruments timeline.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_SIGNPOSTS_H
+#define LLVM_SUPPORT_SIGNPOSTS_H
+
+namespace llvm {
+class SignpostEmitterImpl;
+class Timer;
+
+/// Manages the emission of signposts into the recording method supported by
+/// the OS.
+class SignpostEmitter {
+  SignpostEmitterImpl *Impl;
+
+public:
+  SignpostEmitter();
+  ~SignpostEmitter();
+
+  bool isEnabled() const;
+
+  /// Begin a signposted interval for the given timer.
+  void startTimerInterval(Timer *T);
+  /// End a signposted interval for the given timer.
+  void endTimerInterval(Timer *T);
+};
+
+} // end namespace llvm
+
+#endif // ifndef LLVM_SUPPORT_SIGNPOSTS_H
diff --git a/linux-x64/clang/include/llvm/Support/SwapByteOrder.h b/linux-x64/clang/include/llvm/Support/SwapByteOrder.h
index f58b4d9..06a447a 100644
--- a/linux-x64/clang/include/llvm/Support/SwapByteOrder.h
+++ b/linux-x64/clang/include/llvm/Support/SwapByteOrder.h
@@ -17,6 +17,7 @@
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/DataTypes.h"
 #include <cstddef>
+#include <type_traits>
 #if defined(_MSC_VER) && !defined(_DEBUG)
 #include <stdlib.h>
 #endif
@@ -115,6 +116,13 @@
   return out.d;
 }
 
+template <typename T>
+inline typename std::enable_if<std::is_enum<T>::value, T>::type
+getSwappedBytes(T C) {
+  return static_cast<T>(
+      getSwappedBytes(static_cast<typename std::underlying_type<T>::type>(C)));
+}
+
 template<typename T>
 inline void swapByteOrder(T &Value) {
   Value = getSwappedBytes(Value);
diff --git a/linux-x64/clang/include/llvm/Support/TargetOpcodes.def b/linux-x64/clang/include/llvm/Support/TargetOpcodes.def
index 6612274..fa02463 100644
--- a/linux-x64/clang/include/llvm/Support/TargetOpcodes.def
+++ b/linux-x64/clang/include/llvm/Support/TargetOpcodes.def
@@ -316,6 +316,9 @@
 HANDLE_TARGET_OPCODE(G_ATOMICRMW_UMAX)
 HANDLE_TARGET_OPCODE(G_ATOMICRMW_UMIN)
 
+// Generic atomic fence
+HANDLE_TARGET_OPCODE(G_FENCE)
+
 /// Generic conditional branch instruction.
 HANDLE_TARGET_OPCODE(G_BRCOND)
 
@@ -481,6 +484,12 @@
 /// Generic FP absolute value.
 HANDLE_TARGET_OPCODE(G_FABS)
 
+/// FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.  NOTE: This does
+/// not require that X and Y have the same type, just that they are both
+/// floating point. X and the result must have the same type.  FCOPYSIGN(f32,
+/// f64) is allowed.
+HANDLE_TARGET_OPCODE(G_FCOPYSIGN)
+
 /// Generic FP canonicalize value.
 HANDLE_TARGET_OPCODE(G_FCANONICALIZE)
 
@@ -491,9 +500,24 @@
 /// *down* to the given alignment.
 HANDLE_TARGET_OPCODE(G_PTR_MASK)
 
+/// Generic signed integer minimum.
+HANDLE_TARGET_OPCODE(G_SMIN)
+
+/// Generic signed integer maximum.
+HANDLE_TARGET_OPCODE(G_SMAX)
+
+/// Generic unsigned integer maximum.
+HANDLE_TARGET_OPCODE(G_UMIN)
+
+/// Generic unsigned integer maximum.
+HANDLE_TARGET_OPCODE(G_UMAX)
+
 /// Generic BRANCH instruction. This is an unconditional branch.
 HANDLE_TARGET_OPCODE(G_BR)
 
+/// Generic branch to jump table entry.
+HANDLE_TARGET_OPCODE(G_BRJT)
+
 /// Generic insertelement.
 HANDLE_TARGET_OPCODE(G_INSERT_VECTOR_ELT)
 
@@ -536,18 +560,27 @@
 /// Floating point floor.
 HANDLE_TARGET_OPCODE(G_FFLOOR)
 
+/// Floating point round to next integer.
+HANDLE_TARGET_OPCODE(G_FRINT)
+
+/// Floating point round to nearest integer.
+HANDLE_TARGET_OPCODE(G_FNEARBYINT)
+
 /// Generic AddressSpaceCast.
 HANDLE_TARGET_OPCODE(G_ADDRSPACE_CAST)
 
 /// Generic block address
 HANDLE_TARGET_OPCODE(G_BLOCK_ADDR)
 
+/// Generic jump table address
+HANDLE_TARGET_OPCODE(G_JUMP_TABLE)
+
 // TODO: Add more generic opcodes as we move along.
 
 /// Marker for the end of the generic opcode.
 /// This is used to check if an opcode is in the range of the
 /// generic opcodes.
-HANDLE_TARGET_OPCODE_MARKER(PRE_ISEL_GENERIC_OPCODE_END, G_BLOCK_ADDR)
+HANDLE_TARGET_OPCODE_MARKER(PRE_ISEL_GENERIC_OPCODE_END, G_JUMP_TABLE)
 
 /// BUILTIN_OP_END - This must be the last enum value in this list.
 /// The target-specific post-isel opcode values start here.
diff --git a/linux-x64/clang/include/llvm/Support/TargetParser.h b/linux-x64/clang/include/llvm/Support/TargetParser.h
index 7efd022..a7e1a75 100644
--- a/linux-x64/clang/include/llvm/Support/TargetParser.h
+++ b/linux-x64/clang/include/llvm/Support/TargetParser.h
@@ -121,10 +121,15 @@
   GK_GFX902 = 61,
   GK_GFX904 = 62,
   GK_GFX906 = 63,
+  GK_GFX908 = 64,
   GK_GFX909 = 65,
 
+  GK_GFX1010 = 71,
+  GK_GFX1011 = 72,
+  GK_GFX1012 = 73,
+
   GK_AMDGCN_FIRST = GK_GFX600,
-  GK_AMDGCN_LAST = GK_GFX909,
+  GK_AMDGCN_LAST = GK_GFX1012,
 };
 
 /// Instruction set architecture version.
diff --git a/linux-x64/clang/include/llvm/Support/TargetRegistry.h b/linux-x64/clang/include/llvm/Support/TargetRegistry.h
index 5854d57..bf75650 100644
--- a/linux-x64/clang/include/llvm/Support/TargetRegistry.h
+++ b/linux-x64/clang/include/llvm/Support/TargetRegistry.h
@@ -100,6 +100,11 @@
                                std::unique_ptr<MCObjectWriter> &&OW,
                                std::unique_ptr<MCCodeEmitter> &&CE,
                                bool RelaxAll);
+MCStreamer *createXCOFFStreamer(MCContext &Ctx,
+                                std::unique_ptr<MCAsmBackend> &&TAB,
+                                std::unique_ptr<MCObjectWriter> &&OW,
+                                std::unique_ptr<MCCodeEmitter> &&CE,
+                                bool RelaxAll);
 
 MCRelocationInfo *createMCRelocationInfo(const Triple &TT, MCContext &Ctx);
 
@@ -470,7 +475,7 @@
                                      bool DWARFMustBeAtTheEnd) const {
     MCStreamer *S;
     switch (T.getObjectFormat()) {
-    default:
+    case Triple::UnknownObjectFormat:
       llvm_unreachable("Unknown object format");
     case Triple::COFF:
       assert(T.isOSWindows() && "only Windows COFF is supported");
@@ -504,6 +509,10 @@
         S = createWasmStreamer(Ctx, std::move(TAB), std::move(OW),
                                std::move(Emitter), RelaxAll);
       break;
+    case Triple::XCOFF:
+        S = createXCOFFStreamer(Ctx, std::move(TAB), std::move(OW),
+                                std::move(Emitter), RelaxAll);
+      break;
     }
     if (ObjectTargetStreamerCtorFn)
       ObjectTargetStreamerCtorFn(*S, STI);
diff --git a/linux-x64/clang/include/llvm/Support/Threading.h b/linux-x64/clang/include/llvm/Support/Threading.h
index 23b115f..46d413d 100644
--- a/linux-x64/clang/include/llvm/Support/Threading.h
+++ b/linux-x64/clang/include/llvm/Support/Threading.h
@@ -32,6 +32,9 @@
 // implementations like libstdc++ are known to have problems on NetBSD,
 // OpenBSD and PowerPC.
 #define LLVM_THREADING_USE_STD_CALL_ONCE 1
+#elif defined(LLVM_ON_UNIX) &&                                                 \
+    ((defined(__ppc__) || defined(__PPC__)) && defined(__LITTLE_ENDIAN__))
+#define LLVM_THREADING_USE_STD_CALL_ONCE 1
 #else
 #define LLVM_THREADING_USE_STD_CALL_ONCE 0
 #endif
@@ -164,6 +167,19 @@
   /// purposes, and as with setting a thread's name no indication of whether
   /// the operation succeeded or failed is returned.
   void get_thread_name(SmallVectorImpl<char> &Name);
+
+  enum class ThreadPriority {
+    Background = 0,
+    Default = 1,
+  };
+  /// If priority is Background tries to lower current threads priority such
+  /// that it does not affect foreground tasks significantly. Can be used for
+  /// long-running, latency-insensitive tasks to make sure cpu is not hogged by
+  /// this task.
+  /// If the priority is default tries to restore current threads priority to
+  /// default scheduling priority.
+  enum class SetThreadPriorityResult { FAILURE, SUCCESS };
+  SetThreadPriorityResult set_thread_priority(ThreadPriority Priority);
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/TimeProfiler.h b/linux-x64/clang/include/llvm/Support/TimeProfiler.h
new file mode 100644
index 0000000..72b6f71
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/TimeProfiler.h
@@ -0,0 +1,76 @@
+//===- llvm/Support/TimeProfiler.h - Hierarchical Time Profiler -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_TIME_PROFILER_H
+#define LLVM_SUPPORT_TIME_PROFILER_H
+
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+
+struct TimeTraceProfiler;
+extern TimeTraceProfiler *TimeTraceProfilerInstance;
+
+/// Initialize the time trace profiler.
+/// This sets up the global \p TimeTraceProfilerInstance
+/// variable to be the profiler instance.
+void timeTraceProfilerInitialize();
+
+/// Cleanup the time trace profiler, if it was initialized.
+void timeTraceProfilerCleanup();
+
+/// Is the time trace profiler enabled, i.e. initialized?
+inline bool timeTraceProfilerEnabled() {
+  return TimeTraceProfilerInstance != nullptr;
+}
+
+/// Write profiling data to output file.
+/// Data produced is JSON, in Chrome "Trace Event" format, see
+/// https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview
+void timeTraceProfilerWrite(raw_pwrite_stream &OS);
+
+/// Manually begin a time section, with the given \p Name and \p Detail.
+/// Profiler copies the string data, so the pointers can be given into
+/// temporaries. Time sections can be hierarchical; every Begin must have a
+/// matching End pair but they can nest.
+void timeTraceProfilerBegin(StringRef Name, StringRef Detail);
+void timeTraceProfilerBegin(StringRef Name,
+                            llvm::function_ref<std::string()> Detail);
+
+/// Manually end the last time section.
+void timeTraceProfilerEnd();
+
+/// The TimeTraceScope is a helper class to call the begin and end functions
+/// of the time trace profiler.  When the object is constructed, it begins
+/// the section; and when it is destroyed, it stops it. If the time profiler
+/// is not initialized, the overhead is a single branch.
+struct TimeTraceScope {
+
+  TimeTraceScope() = delete;
+  TimeTraceScope(const TimeTraceScope &) = delete;
+  TimeTraceScope &operator=(const TimeTraceScope &) = delete;
+  TimeTraceScope(TimeTraceScope &&) = delete;
+  TimeTraceScope &operator=(TimeTraceScope &&) = delete;
+
+  TimeTraceScope(StringRef Name, StringRef Detail) {
+    if (TimeTraceProfilerInstance != nullptr)
+      timeTraceProfilerBegin(Name, Detail);
+  }
+  TimeTraceScope(StringRef Name, llvm::function_ref<std::string()> Detail) {
+    if (TimeTraceProfilerInstance != nullptr)
+      timeTraceProfilerBegin(Name, Detail);
+  }
+  ~TimeTraceScope() {
+    if (TimeTraceProfilerInstance != nullptr)
+      timeTraceProfilerEnd();
+  }
+};
+
+} // end namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/Timer.h b/linux-x64/clang/include/llvm/Support/Timer.h
index 09f7422..76c9bc7 100644
--- a/linux-x64/clang/include/llvm/Support/Timer.h
+++ b/linux-x64/clang/include/llvm/Support/Timer.h
@@ -205,8 +205,9 @@
     Description.assign(NewDescription.begin(), NewDescription.end());
   }
 
-  /// Print any started timers in this group.
-  void print(raw_ostream &OS);
+  /// Print any started timers in this group, optionally resetting timers after
+  /// printing them.
+  void print(raw_ostream &OS, bool ResetAfterPrint = false);
 
   /// Clear all timers in this group.
   void clear();
@@ -233,7 +234,7 @@
   friend void PrintStatisticsJSON(raw_ostream &OS);
   void addTimer(Timer &T);
   void removeTimer(Timer &T);
-  void prepareToPrintList();
+  void prepareToPrintList(bool reset_time = false);
   void PrintQueuedTimers(raw_ostream &OS);
   void printJSONValue(raw_ostream &OS, const PrintRecord &R,
                       const char *suffix, double Value);
diff --git a/linux-x64/clang/include/llvm/Support/VCSRevision.h b/linux-x64/clang/include/llvm/Support/VCSRevision.h
index a6a8b9c..3ad6886 100644
--- a/linux-x64/clang/include/llvm/Support/VCSRevision.h
+++ b/linux-x64/clang/include/llvm/Support/VCSRevision.h
@@ -1,2 +1,2 @@
-#define LLVM_REVISION "60cf23e54e46c807513f7a36d0a7b777920b5881"
-#define LLVM_REPOSITORY "/buildbot/tmp/tmpCdFZ_W"
+#define LLVM_REVISION "e0caee08e5f09b374a27a676d04978c81fcb1928"
+#define LLVM_REPOSITORY "/buildbot/tmp/tmpyQwgD_"
diff --git a/linux-x64/clang/include/llvm/Support/VirtualFileSystem.h b/linux-x64/clang/include/llvm/Support/VirtualFileSystem.h
index 7b7c9f8..31c9e85 100644
--- a/linux-x64/clang/include/llvm/Support/VirtualFileSystem.h
+++ b/linux-x64/clang/include/llvm/Support/VirtualFileSystem.h
@@ -58,15 +58,15 @@
 
   Status() = default;
   Status(const llvm::sys::fs::file_status &Status);
-  Status(StringRef Name, llvm::sys::fs::UniqueID UID,
+  Status(const Twine &Name, llvm::sys::fs::UniqueID UID,
          llvm::sys::TimePoint<> MTime, uint32_t User, uint32_t Group,
          uint64_t Size, llvm::sys::fs::file_type Type,
          llvm::sys::fs::perms Perms);
 
   /// Get a copy of a Status with a different name.
-  static Status copyWithNewName(const Status &In, StringRef NewName);
+  static Status copyWithNewName(const Status &In, const Twine &NewName);
   static Status copyWithNewName(const llvm::sys::fs::file_status &In,
-                                StringRef NewName);
+                                const Twine &NewName);
 
   /// Returns the name that should be used for this file or directory.
   StringRef getName() const { return Name; }
@@ -298,8 +298,16 @@
 
 /// Gets an \p vfs::FileSystem for the 'real' file system, as seen by
 /// the operating system.
+/// The working directory is linked to the process's working directory.
+/// (This is usually thread-hostile).
 IntrusiveRefCntPtr<FileSystem> getRealFileSystem();
 
+/// Create an \p vfs::FileSystem for the 'real' file system, as seen by
+/// the operating system.
+/// It has its own working directory, independent of (but initially equal to)
+/// that of the process.
+std::unique_ptr<FileSystem> createPhysicalFileSystem();
+
 /// A file system that allows overlaying one \p AbstractFileSystem on top
 /// of another.
 ///
@@ -335,15 +343,24 @@
 
   using iterator = FileSystemList::reverse_iterator;
   using const_iterator = FileSystemList::const_reverse_iterator;
+  using reverse_iterator = FileSystemList::iterator;
+  using const_reverse_iterator = FileSystemList::const_iterator;
 
   /// Get an iterator pointing to the most recently added file system.
   iterator overlays_begin() { return FSList.rbegin(); }
   const_iterator overlays_begin() const { return FSList.rbegin(); }
 
-  /// Get an iterator pointing one-past the least recently added file
-  /// system.
+  /// Get an iterator pointing one-past the least recently added file system.
   iterator overlays_end() { return FSList.rend(); }
   const_iterator overlays_end() const { return FSList.rend(); }
+
+  /// Get an iterator pointing to the least recently added file system.
+  reverse_iterator overlays_rbegin() { return FSList.begin(); }
+  const_reverse_iterator overlays_rbegin() const { return FSList.begin(); }
+
+  /// Get an iterator pointing one-past the most recently added file system.
+  reverse_iterator overlays_rend() { return FSList.end(); }
+  const_reverse_iterator overlays_rend() const { return FSList.end(); }
 };
 
 /// By default, this delegates all calls to the underlying file system. This
diff --git a/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h b/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h
index 83c8671..baf842b 100644
--- a/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h
+++ b/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h
@@ -46,29 +46,23 @@
 // Attributes of an instruction that must be known before the opcode can be
 // processed correctly.  Most of these indicate the presence of particular
 // prefixes, but ATTR_64BIT is simply an attribute of the decoding context.
-#define ATTRIBUTE_BITS                  \
-  ENUM_ENTRY(ATTR_NONE,   0x00)         \
-  ENUM_ENTRY(ATTR_64BIT,  (0x1 << 0))   \
-  ENUM_ENTRY(ATTR_XS,     (0x1 << 1))   \
-  ENUM_ENTRY(ATTR_XD,     (0x1 << 2))   \
-  ENUM_ENTRY(ATTR_REXW,   (0x1 << 3))   \
-  ENUM_ENTRY(ATTR_OPSIZE, (0x1 << 4))   \
-  ENUM_ENTRY(ATTR_ADSIZE, (0x1 << 5))   \
-  ENUM_ENTRY(ATTR_VEX,    (0x1 << 6))   \
-  ENUM_ENTRY(ATTR_VEXL,   (0x1 << 7))   \
-  ENUM_ENTRY(ATTR_EVEX,   (0x1 << 8))   \
-  ENUM_ENTRY(ATTR_EVEXL,  (0x1 << 9))   \
-  ENUM_ENTRY(ATTR_EVEXL2, (0x1 << 10))  \
-  ENUM_ENTRY(ATTR_EVEXK,  (0x1 << 11))  \
-  ENUM_ENTRY(ATTR_EVEXKZ, (0x1 << 12))  \
-  ENUM_ENTRY(ATTR_EVEXB,  (0x1 << 13))
-
-#define ENUM_ENTRY(n, v) n = v,
 enum attributeBits {
-  ATTRIBUTE_BITS
-  ATTR_max
+  ATTR_NONE   = 0x00,
+  ATTR_64BIT  = 0x1 << 0,
+  ATTR_XS     = 0x1 << 1,
+  ATTR_XD     = 0x1 << 2,
+  ATTR_REXW   = 0x1 << 3,
+  ATTR_OPSIZE = 0x1 << 4,
+  ATTR_ADSIZE = 0x1 << 5,
+  ATTR_VEX    = 0x1 << 6,
+  ATTR_VEXL   = 0x1 << 7,
+  ATTR_EVEX   = 0x1 << 8,
+  ATTR_EVEXL2 = 0x1 << 9,
+  ATTR_EVEXK  = 0x1 << 10,
+  ATTR_EVEXKZ = 0x1 << 11,
+  ATTR_EVEXB  = 0x1 << 12,
+  ATTR_max    = 0x1 << 13,
 };
-#undef ENUM_ENTRY
 
 // Combinations of the above attributes that are relevant to instruction
 // decode. Although other combinations are possible, they can be reduced to
@@ -393,6 +387,7 @@
   ENUM_ENTRY(ENCODING_IRC,    "Immediate for static rounding control")         \
   ENUM_ENTRY(ENCODING_Rv,     "Register code of operand size added to the "    \
                               "opcode byte")                                   \
+  ENUM_ENTRY(ENCODING_CC,     "Condition code encoded in opcode")              \
   ENUM_ENTRY(ENCODING_DUP,    "Duplicate of another operand; ID is encoded "   \
                               "in type")                                       \
   ENUM_ENTRY(ENCODING_SI,     "Source index; encoded in OpSize/Adsize prefix") \
@@ -414,9 +409,6 @@
   ENUM_ENTRY(TYPE_R32,        "4-byte")                                        \
   ENUM_ENTRY(TYPE_R64,        "8-byte")                                        \
   ENUM_ENTRY(TYPE_IMM,        "immediate operand")                             \
-  ENUM_ENTRY(TYPE_IMM3,       "1-byte immediate operand between 0 and 7")      \
-  ENUM_ENTRY(TYPE_IMM5,       "1-byte immediate operand between 0 and 31")     \
-  ENUM_ENTRY(TYPE_AVX512ICC,  "1-byte immediate operand for AVX512 icmp")      \
   ENUM_ENTRY(TYPE_UIMM8,      "1-byte unsigned immediate operand")             \
   ENUM_ENTRY(TYPE_M,          "Memory operand")                                \
   ENUM_ENTRY(TYPE_MVSIBX,     "Memory operand using XMM index")                \
@@ -431,6 +423,7 @@
   ENUM_ENTRY(TYPE_YMM,        "32-byte")                                       \
   ENUM_ENTRY(TYPE_ZMM,        "64-byte")                                       \
   ENUM_ENTRY(TYPE_VK,         "mask register")                                 \
+  ENUM_ENTRY(TYPE_VK_PAIR,    "mask register pair")                            \
   ENUM_ENTRY(TYPE_SEGMENTREG, "Segment register operand")                      \
   ENUM_ENTRY(TYPE_DEBUGREG,   "Debug register operand")                        \
   ENUM_ENTRY(TYPE_CONTROLREG, "Control register operand")                      \
diff --git a/linux-x64/clang/include/llvm/Support/X86TargetParser.def b/linux-x64/clang/include/llvm/Support/X86TargetParser.def
index fb82228..1749be3 100644
--- a/linux-x64/clang/include/llvm/Support/X86TargetParser.def
+++ b/linux-x64/clang/include/llvm/Support/X86TargetParser.def
@@ -33,6 +33,8 @@
 #ifndef X86_CPU_TYPE
 #define X86_CPU_TYPE(ARCHNAME, ENUM)
 #endif
+// The first part of this list must match what is implemented in libgcc and
+// compilert-rt. Clang uses this to know how to implement __builtin_cpu_is.
 X86_CPU_TYPE_COMPAT_WITH_ALIAS("bonnell",       INTEL_BONNELL,       "bonnell", "atom")
 X86_CPU_TYPE_COMPAT           ("core2",         INTEL_CORE2,         "core2")
 X86_CPU_TYPE_COMPAT           ("nehalem",       INTEL_COREI7,        "corei7")
@@ -79,6 +81,8 @@
 #define X86_CPU_SUBTYPE(ARCHNAME, ENUM)
 #endif
 
+// The first part of this list must match what is implemented in libgcc and
+// compilert-rt. Clang uses this to know how to implement __builtin_cpu_is.
 X86_CPU_SUBTYPE_COMPAT("nehalem",        INTEL_COREI7_NEHALEM,        "nehalem")
 X86_CPU_SUBTYPE_COMPAT("westmere",       INTEL_COREI7_WESTMERE,       "westmere")
 X86_CPU_SUBTYPE_COMPAT("sandybridge",    INTEL_COREI7_SANDYBRIDGE,    "sandybridge")
@@ -98,14 +102,16 @@
 X86_CPU_SUBTYPE_COMPAT("cannonlake",     INTEL_COREI7_CANNONLAKE,     "cannonlake")
 X86_CPU_SUBTYPE_COMPAT("icelake-client", INTEL_COREI7_ICELAKE_CLIENT, "icelake-client")
 X86_CPU_SUBTYPE_COMPAT("icelake-server", INTEL_COREI7_ICELAKE_SERVER, "icelake-server")
+X86_CPU_SUBTYPE_COMPAT("znver2",         AMDFAM17H_ZNVER2,            "znver2")
+X86_CPU_SUBTYPE_COMPAT("cascadelake",    INTEL_COREI7_CASCADELAKE,    "cascadelake")
 // Entries below this are not in libgcc/compiler-rt.
 X86_CPU_SUBTYPE       ("core2",          INTEL_CORE2_65)
 X86_CPU_SUBTYPE       ("penryn",         INTEL_CORE2_45)
-X86_CPU_SUBTYPE       ("cascadelake",    INTEL_COREI7_CASCADELAKE)
 X86_CPU_SUBTYPE       ("k6",             AMDPENTIUM_K6)
 X86_CPU_SUBTYPE       ("k6-2",           AMDPENTIUM_K62)
 X86_CPU_SUBTYPE       ("k6-3",           AMDPENTIUM_K63)
 X86_CPU_SUBTYPE       ("geode",          AMDPENTIUM_GEODE)
+X86_CPU_SUBTYPE       ("cooperlake",     INTEL_COREI7_COOPERLAKE)
 #undef X86_CPU_SUBTYPE_COMPAT
 #undef X86_CPU_SUBTYPE
 
@@ -160,5 +166,6 @@
 X86_FEATURE       (66, FEATURE_EM64T)
 X86_FEATURE       (67, FEATURE_CLFLUSHOPT)
 X86_FEATURE       (68, FEATURE_SHA)
+X86_FEATURE       (69, FEATURE_AVX512BF16)
 #undef X86_FEATURE_COMPAT
 #undef X86_FEATURE
diff --git a/linux-x64/clang/include/llvm/Support/YAMLTraits.h b/linux-x64/clang/include/llvm/Support/YAMLTraits.h
index e991f3b..2185cd7 100644
--- a/linux-x64/clang/include/llvm/Support/YAMLTraits.h
+++ b/linux-x64/clang/include/llvm/Support/YAMLTraits.h
@@ -101,8 +101,7 @@
 ///           io.enumCase(value, "green", cGreen);
 ///         }
 ///       };
-template<typename T>
-struct ScalarEnumerationTraits {
+template <typename T, typename Enable = void> struct ScalarEnumerationTraits {
   // Must provide:
   // static void enumeration(IO &io, T &value);
 };
@@ -118,8 +117,7 @@
 ///          io.bitSetCase(value, "round", flagRound);
 ///        }
 ///      };
-template<typename T>
-struct ScalarBitSetTraits {
+template <typename T, typename Enable = void> struct ScalarBitSetTraits {
   // Must provide:
   // static void bitset(IO &io, T &value);
 };
@@ -145,8 +143,7 @@
 ///      }
 ///      static QuotingType mustQuote(StringRef) { return QuotingType::Single; }
 ///    };
-template<typename T>
-struct ScalarTraits {
+template <typename T, typename Enable = void> struct ScalarTraits {
   // Must provide:
   //
   // Function to write the value as a string:
@@ -863,8 +860,8 @@
     mapOptionalWithContext(Key, Val, Ctx);
   }
 
-  template <typename T>
-  void mapOptional(const char *Key, T &Val, const T &Default) {
+  template <typename T, typename DefaultT>
+  void mapOptional(const char *Key, T &Val, const DefaultT &Default) {
     EmptyContext Ctx;
     mapOptionalWithContext(Key, Val, Default, Ctx);
   }
@@ -890,10 +887,13 @@
     this->processKey(Key, Val, false, Ctx);
   }
 
-  template <typename T, typename Context>
-  void mapOptionalWithContext(const char *Key, T &Val, const T &Default,
+  template <typename T, typename Context, typename DefaultT>
+  void mapOptionalWithContext(const char *Key, T &Val, const DefaultT &Default,
                               Context &Ctx) {
-    this->processKeyWithDefault(Key, Val, Default, false, Ctx);
+    static_assert(std::is_convertible<DefaultT, T>::value,
+                  "Default type must be implicitly convertible to value type!");
+    this->processKeyWithDefault(Key, Val, static_cast<const T &>(Default),
+                                false, Ctx);
   }
 
 private:
@@ -977,7 +977,7 @@
   bool DoClear;
   if ( io.beginBitSetScalar(DoClear) ) {
     if ( DoClear )
-      Val = static_cast<T>(0);
+      Val = T();
     ScalarBitSetTraits<T>::bitset(io, Val);
     io.endBitSetScalar();
   }
@@ -1242,12 +1242,14 @@
   static QuotingType mustQuote(StringRef) { return QuotingType::None; }
 };
 
-// For endian types, we just use the existing ScalarTraits for the underlying
-// type.  This way endian aware types are supported whenever a ScalarTraits
-// is defined for the underlying type.
+// For endian types, we use existing scalar Traits class for the underlying
+// type.  This way endian aware types are supported whenever the traits are
+// defined for the underlying type.
 template <typename value_type, support::endianness endian, size_t alignment>
-struct ScalarTraits<support::detail::packed_endian_specific_integral<
-    value_type, endian, alignment>> {
+struct ScalarTraits<
+    support::detail::packed_endian_specific_integral<value_type, endian,
+                                                     alignment>,
+    typename std::enable_if<has_ScalarTraits<value_type>::value>::type> {
   using endian_type =
       support::detail::packed_endian_specific_integral<value_type, endian,
                                                        alignment>;
@@ -1268,6 +1270,38 @@
   }
 };
 
+template <typename value_type, support::endianness endian, size_t alignment>
+struct ScalarEnumerationTraits<
+    support::detail::packed_endian_specific_integral<value_type, endian,
+                                                     alignment>,
+    typename std::enable_if<
+        has_ScalarEnumerationTraits<value_type>::value>::type> {
+  using endian_type =
+      support::detail::packed_endian_specific_integral<value_type, endian,
+                                                       alignment>;
+
+  static void enumeration(IO &io, endian_type &E) {
+    value_type V = E;
+    ScalarEnumerationTraits<value_type>::enumeration(io, V);
+    E = V;
+  }
+};
+
+template <typename value_type, support::endianness endian, size_t alignment>
+struct ScalarBitSetTraits<
+    support::detail::packed_endian_specific_integral<value_type, endian,
+                                                     alignment>,
+    typename std::enable_if<has_ScalarBitSetTraits<value_type>::value>::type> {
+  using endian_type =
+      support::detail::packed_endian_specific_integral<value_type, endian,
+                                                       alignment>;
+  static void bitset(IO &io, endian_type &E) {
+    value_type V = E;
+    ScalarBitSetTraits<value_type>::bitset(io, V);
+    E = V;
+  }
+};
+
 // Utility for use within MappingTraits<>::mapping() method
 // to [de]normalize an object for use with YAML conversion.
 template <typename TNorm, typename TFinal>
@@ -1871,6 +1905,11 @@
                       typename std::enable_if<CheckIsBool<
                           SequenceElementTraits<T>::flow>::value>::type>
     : SequenceTraitsImpl<SmallVector<T, N>, SequenceElementTraits<T>::flow> {};
+template <typename T>
+struct SequenceTraits<SmallVectorImpl<T>,
+                      typename std::enable_if<CheckIsBool<
+                          SequenceElementTraits<T>::flow>::value>::type>
+    : SequenceTraitsImpl<SmallVectorImpl<T>, SequenceElementTraits<T>::flow> {};
 
 // Sequences of fundamental types use flow formatting.
 template <typename T>
diff --git a/linux-x64/clang/include/llvm/Support/raw_ostream.h b/linux-x64/clang/include/llvm/Support/raw_ostream.h
index 1eb13c7..48bb623 100644
--- a/linux-x64/clang/include/llvm/Support/raw_ostream.h
+++ b/linux-x64/clang/include/llvm/Support/raw_ostream.h
@@ -345,7 +345,7 @@
   explicit raw_pwrite_stream(bool Unbuffered = false)
       : raw_ostream(Unbuffered) {}
   void pwrite(const char *Ptr, size_t Size, uint64_t Offset) {
-#ifndef NDBEBUG
+#ifndef NDEBUG
     uint64_t Pos = tell();
     // /dev/null always reports a pos of 0, so we cannot perform this check
     // in that case.
diff --git a/linux-x64/clang/include/llvm/TableGen/Record.h b/linux-x64/clang/include/llvm/TableGen/Record.h
index e4a07bb..bf7f022 100644
--- a/linux-x64/clang/include/llvm/TableGen/Record.h
+++ b/linux-x64/clang/include/llvm/TableGen/Record.h
@@ -623,10 +623,11 @@
 
 class CodeInit : public TypedInit {
   StringRef Value;
+  SMLoc Loc;
 
-  explicit CodeInit(StringRef V)
+  explicit CodeInit(StringRef V, const SMLoc &Loc)
       : TypedInit(IK_CodeInit, static_cast<RecTy *>(CodeRecTy::get())),
-        Value(V) {}
+        Value(V), Loc(Loc) {}
 
 public:
   CodeInit(const StringInit &) = delete;
@@ -636,9 +637,10 @@
     return I->getKind() == IK_CodeInit;
   }
 
-  static CodeInit *get(StringRef);
+  static CodeInit *get(StringRef, const SMLoc &Loc);
 
   StringRef getValue() const { return Value; }
+  const SMLoc &getLoc() const { return Loc; }
 
   Init *convertInitializerTo(RecTy *Ty) const override;
 
@@ -798,8 +800,9 @@
 /// !op (X, Y) - Combine two inits.
 class BinOpInit : public OpInit, public FoldingSetNode {
 public:
-  enum BinaryOp : uint8_t { ADD, AND, OR, SHL, SRA, SRL, LISTCONCAT,
-                            STRCONCAT, CONCAT, EQ, NE, LE, LT, GE, GT };
+  enum BinaryOp : uint8_t { ADD, MUL, AND, OR, SHL, SRA, SRL, LISTCONCAT,
+                            LISTSPLAT, STRCONCAT, CONCAT, EQ, NE, LE, LT, GE,
+                            GT };
 
 private:
   Init *LHS, *RHS;
@@ -818,6 +821,8 @@
   static BinOpInit *get(BinaryOp opc, Init *lhs, Init *rhs,
                         RecTy *Type);
   static Init *getStrConcat(Init *lhs, Init *rhs);
+  static Init *getListConcat(TypedInit *lhs, Init *rhs);
+  static Init *getListSplat(TypedInit *lhs, Init *rhs);
 
   void Profile(FoldingSetNodeID &ID) const;
 
diff --git a/linux-x64/clang/include/llvm/Target/GenericOpcodes.td b/linux-x64/clang/include/llvm/Target/GenericOpcodes.td
index e4b452e..11fbf62 100644
--- a/linux-x64/clang/include/llvm/Target/GenericOpcodes.td
+++ b/linux-x64/clang/include/llvm/Target/GenericOpcodes.td
@@ -169,6 +169,12 @@
   let hasSideEffects = 0;
 }
 
+def G_JUMP_TABLE : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins unknown:$jti);
+  let hasSideEffects = 0;
+}
+
 //------------------------------------------------------------------------------
 // Binary ops.
 //------------------------------------------------------------------------------
@@ -308,6 +314,38 @@
   let hasSideEffects = 0;
 }
 
+// Generic signed integer minimum.
+def G_SMIN : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src1, type0:$src2);
+  let hasSideEffects = 0;
+  let isCommutable = 1;
+}
+
+// Generic signed integer maximum.
+def G_SMAX : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src1, type0:$src2);
+  let hasSideEffects = 0;
+  let isCommutable = 1;
+}
+
+// Generic unsigned integer minimum.
+def G_UMIN : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src1, type0:$src2);
+  let hasSideEffects = 0;
+  let isCommutable = 1;
+}
+
+// Generic unsigned integer maximum.
+def G_UMAX : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src1, type0:$src2);
+  let hasSideEffects = 0;
+  let isCommutable = 1;
+}
+
 //------------------------------------------------------------------------------
 // Overflow ops
 //------------------------------------------------------------------------------
@@ -455,6 +493,12 @@
   let hasSideEffects = 0;
 }
 
+def G_FCOPYSIGN : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src0, type1:$src1);
+  let hasSideEffects = 0;
+}
+
 def G_FCANONICALIZE : GenericInstruction {
   let OutOperandList = (outs type0:$dst);
   let InOperandList = (ins type0:$src);
@@ -592,6 +636,20 @@
   let hasSideEffects = 0;
 }
 
+// Floating point round to next integer.
+def G_FRINT : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src1);
+  let hasSideEffects = 0;
+}
+
+// Floating point round to the nearest integer.
+def G_FNEARBYINT : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src1);
+  let hasSideEffects = 0;
+}
+
 //------------------------------------------------------------------------------
 // Opcodes for LLVM Intrinsics
 //------------------------------------------------------------------------------
@@ -685,6 +743,12 @@
 def G_ATOMICRMW_UMAX : G_ATOMICRMW_OP;
 def G_ATOMICRMW_UMIN : G_ATOMICRMW_OP;
 
+def G_FENCE : GenericInstruction {
+  let OutOperandList = (outs);
+  let InOperandList = (ins i32imm:$ordering, i32imm:$scope);
+  let hasSideEffects = 1;
+}
+
 //------------------------------------------------------------------------------
 // Variadic ops
 //------------------------------------------------------------------------------
@@ -799,6 +863,15 @@
   let isTerminator = 1;
 }
 
+// Generic branch to jump table entry
+def G_BRJT : GenericInstruction {
+  let OutOperandList = (outs);
+  let InOperandList = (ins ptype0:$tbl, unknown:$jti, type1:$idx);
+  let hasSideEffects = 0;
+  let isBranch = 1;
+  let isTerminator = 1;
+}
+
 //------------------------------------------------------------------------------
 // Vector ops
 //------------------------------------------------------------------------------
diff --git a/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td b/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td
index 6b0434a..6cc58d6 100644
--- a/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td
+++ b/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td
@@ -49,6 +49,8 @@
 def : GINodeEquiv<G_ADD, add>;
 def : GINodeEquiv<G_SUB, sub>;
 def : GINodeEquiv<G_MUL, mul>;
+def : GINodeEquiv<G_UMULH, mulhu>;
+def : GINodeEquiv<G_SMULH, mulhs>;
 def : GINodeEquiv<G_SDIV, sdiv>;
 def : GINodeEquiv<G_UDIV, udiv>;
 def : GINodeEquiv<G_SREM, srem>;
@@ -76,6 +78,7 @@
 def : GINodeEquiv<G_FPOW, fpow>;
 def : GINodeEquiv<G_FEXP2, fexp2>;
 def : GINodeEquiv<G_FLOG2, flog2>;
+def : GINodeEquiv<G_FCANONICALIZE, fcanonicalize>;
 def : GINodeEquiv<G_INTRINSIC, intrinsic_wo_chain>;
 // ISD::INTRINSIC_VOID can also be handled with G_INTRINSIC_W_SIDE_EFFECTS.
 def : GINodeEquiv<G_INTRINSIC_W_SIDE_EFFECTS, intrinsic_void>;
@@ -88,12 +91,19 @@
 def : GINodeEquiv<G_CTTZ_ZERO_UNDEF, cttz_zero_undef>;
 def : GINodeEquiv<G_CTPOP, ctpop>;
 def : GINodeEquiv<G_EXTRACT_VECTOR_ELT, vector_extract>;
+def : GINodeEquiv<G_CONCAT_VECTORS, concat_vectors>;
 def : GINodeEquiv<G_FCEIL, fceil>;
 def : GINodeEquiv<G_FCOS, fcos>;
 def : GINodeEquiv<G_FSIN, fsin>;
 def : GINodeEquiv<G_FABS, fabs>;
 def : GINodeEquiv<G_FSQRT, fsqrt>;
 def : GINodeEquiv<G_FFLOOR, ffloor>;
+def : GINodeEquiv<G_FRINT, frint>;
+def : GINodeEquiv<G_FNEARBYINT, fnearbyint>;
+def : GINodeEquiv<G_SMIN, smin>;
+def : GINodeEquiv<G_SMAX, smax>;
+def : GINodeEquiv<G_UMIN, umin>;
+def : GINodeEquiv<G_UMAX, umax>;
 
 // Broadly speaking G_LOAD is equivalent to ISD::LOAD but there are some
 // complications that tablegen must take care of. For example, Predicates such
@@ -128,6 +138,7 @@
 def : GINodeEquiv<G_ATOMICRMW_MAX, atomic_load_max>;
 def : GINodeEquiv<G_ATOMICRMW_UMIN, atomic_load_umin>;
 def : GINodeEquiv<G_ATOMICRMW_UMAX, atomic_load_umax>;
+def : GINodeEquiv<G_FENCE, atomic_fence>;
 
 // Specifies the GlobalISel equivalents for SelectionDAG's ComplexPattern.
 // Should be used on defs that subclass GIComplexOperandMatcher<>.
diff --git a/linux-x64/clang/include/llvm/Target/Target.td b/linux-x64/clang/include/llvm/Target/Target.td
index 380e848..d58662e 100644
--- a/linux-x64/clang/include/llvm/Target/Target.td
+++ b/linux-x64/clang/include/llvm/Target/Target.td
@@ -121,6 +121,10 @@
 // this register class when printing.
 class RegAltNameIndex {
   string Namespace = "";
+
+  // A set to be used if the name for a register is not defined in this set.
+  // This allows creating name sets with only a few alternative names.
+  RegAltNameIndex FallbackRegAltNameIndex = ?;
 }
 def NoRegAltName : RegAltNameIndex;
 
@@ -394,11 +398,49 @@
 
 class Predicate; // Forward def
 
+class InstructionEncoding {
+  // Size of encoded instruction.
+  int Size;
+
+  // The "namespace" in which this instruction exists, on targets like ARM
+  // which multiple ISA namespaces exist.
+  string DecoderNamespace = "";
+
+  // List of predicates which will be turned into isel matching code.
+  list<Predicate> Predicates = [];
+
+  string DecoderMethod = "";
+
+  // Is the instruction decoder method able to completely determine if the
+  // given instruction is valid or not. If the TableGen definition of the
+  // instruction specifies bitpattern A??B where A and B are static bits, the
+  // hasCompleteDecoder flag says whether the decoder method fully handles the
+  // ?? space, i.e. if it is a final arbiter for the instruction validity.
+  // If not then the decoder attempts to continue decoding when the decoder
+  // method fails.
+  //
+  // This allows to handle situations where the encoding is not fully
+  // orthogonal. Example:
+  // * InstA with bitpattern 0b0000????,
+  // * InstB with bitpattern 0b000000?? but the associated decoder method
+  //   DecodeInstB() returns Fail when ?? is 0b00 or 0b11.
+  //
+  // The decoder tries to decode a bitpattern that matches both InstA and
+  // InstB bitpatterns first as InstB (because it is the most specific
+  // encoding). In the default case (hasCompleteDecoder = 1), when
+  // DecodeInstB() returns Fail the bitpattern gets rejected. By setting
+  // hasCompleteDecoder = 0 in InstB, the decoder is informed that
+  // DecodeInstB() is not able to determine if all possible values of ?? are
+  // valid or not. If DecodeInstB() returns Fail the decoder will attempt to
+  // decode the bitpattern as InstA too.
+  bit hasCompleteDecoder = 1;
+}
+
 //===----------------------------------------------------------------------===//
 // Instruction set description - These classes correspond to the C++ classes in
 // the Target/TargetInstrInfo.h file.
 //
-class Instruction {
+class Instruction : InstructionEncoding {
   string Namespace = "";
 
   dag OutOperandList;       // An dag containing the MI def operand list.
@@ -423,10 +465,6 @@
   // from the opcode.
   int Size = 0;
 
-  // DecoderNamespace - The "namespace" in which this instruction exists, on
-  // targets like ARM which multiple ISA namespaces exist.
-  string DecoderNamespace = "";
-
   // Code size, for instruction selection.
   // FIXME: What does this actually mean?
   int CodeSize = 0;
@@ -452,11 +490,16 @@
   bit canFoldAsLoad = 0;    // Can this be folded as a simple memory operand?
   bit mayLoad      = ?;     // Is it possible for this inst to read memory?
   bit mayStore     = ?;     // Is it possible for this inst to write memory?
+  bit mayRaiseFPException = 0; // Can this raise a floating-point exception?
   bit isConvertibleToThreeAddress = 0;  // Can this 2-addr instruction promote?
   bit isCommutable = 0;     // Is this 3 operand instruction commutable?
   bit isTerminator = 0;     // Is this part of the terminator for a basic block?
   bit isReMaterializable = 0; // Is this instruction re-materializable?
-  bit isPredicable = 0;     // Is this instruction predicable?
+  bit isPredicable = 0;     // 1 means this instruction is predicable
+                            // even if it does not have any operand
+                            // tablegen can identify as a predicate
+  bit isUnpredicable = 0;   // 1 means this instruction is not predicable
+                            // even if it _does_ have a predicate operand
   bit hasDelaySlot = 0;     // Does this instruction have an delay slot?
   bit usesCustomInserter = 0; // Pseudo instr needing special help.
   bit hasPostISelHook = 0;  // To be *adjusted* after isel by target hook.
@@ -523,31 +566,6 @@
   string DisableEncoding = "";
 
   string PostEncoderMethod = "";
-  string DecoderMethod = "";
-
-  // Is the instruction decoder method able to completely determine if the
-  // given instruction is valid or not. If the TableGen definition of the
-  // instruction specifies bitpattern A??B where A and B are static bits, the
-  // hasCompleteDecoder flag says whether the decoder method fully handles the
-  // ?? space, i.e. if it is a final arbiter for the instruction validity.
-  // If not then the decoder attempts to continue decoding when the decoder
-  // method fails.
-  //
-  // This allows to handle situations where the encoding is not fully
-  // orthogonal. Example:
-  // * InstA with bitpattern 0b0000????,
-  // * InstB with bitpattern 0b000000?? but the associated decoder method
-  //   DecodeInstB() returns Fail when ?? is 0b00 or 0b11.
-  //
-  // The decoder tries to decode a bitpattern that matches both InstA and
-  // InstB bitpatterns first as InstB (because it is the most specific
-  // encoding). In the default case (hasCompleteDecoder = 1), when
-  // DecodeInstB() returns Fail the bitpattern gets rejected. By setting
-  // hasCompleteDecoder = 0 in InstB, the decoder is informed that
-  // DecodeInstB() is not able to determine if all possible values of ?? are
-  // valid or not. If DecodeInstB() returns Fail the decoder will attempt to
-  // decode the bitpattern as InstA too.
-  bit hasCompleteDecoder = 1;
 
   /// Target-specific flags. This becomes the TSFlags field in TargetInstrDesc.
   bits<64> TSFlags = 0;
@@ -584,6 +602,13 @@
   bit FastISelShouldIgnore = 0;
 }
 
+/// Defines an additional encoding that disassembles to the given instruction
+/// Like Instruction, the Inst and SoftFail fields are omitted to allow targets
+// to specify their size.
+class AdditionalEncoding<Instruction I> : InstructionEncoding {
+  Instruction AliasOf = I;
+}
+
 /// PseudoInstExpansion - Expansion information for a pseudo-instruction.
 /// Which instruction it expands to and how the operands map from the
 /// pseudo.
@@ -908,7 +933,7 @@
 }
 
 // Standard Pseudo Instructions.
-// This list must match TargetOpcodes.h and CodeGenTarget.cpp.
+// This list must match TargetOpcodes.def.
 // Only these instructions are allowed in the TargetOpcode namespace.
 // Ensure mayLoad and mayStore have a default value, so as not to break
 // targets that set guessInstructionProperties=0. Any local definition of
@@ -1045,7 +1070,7 @@
   let OutOperandList = (outs);
   let InOperandList = (ins variable_ops);
   let AsmString = "BUNDLE";
-  let hasSideEffects = 1;
+  let hasSideEffects = 0;
 }
 def LIFETIME_START : StandardPseudoInstruction {
   let OutOperandList = (outs);
@@ -1182,7 +1207,7 @@
   let hasSideEffects = 1;
 }
 def ICALL_BRANCH_FUNNEL : StandardPseudoInstruction {
-  let OutOperandList = (outs unknown:$dst);
+  let OutOperandList = (outs);
   let InOperandList = (ins variable_ops);
   let AsmString = "";
   let hasSideEffects = 1;
diff --git a/linux-x64/clang/include/llvm/Target/TargetCallingConv.td b/linux-x64/clang/include/llvm/Target/TargetCallingConv.td
index 11ed4f5..1bc03cf 100644
--- a/linux-x64/clang/include/llvm/Target/TargetCallingConv.td
+++ b/linux-x64/clang/include/llvm/Target/TargetCallingConv.td
@@ -82,6 +82,15 @@
 /// CCIfNotVarArg - If the current function is not vararg - apply the action
 class CCIfNotVarArg<CCAction A> : CCIf<"!State.isVarArg()", A> {}
 
+/// CCIfPtrAddrSpace - If the top-level parent of the current argument has
+/// pointer type in the specified address-space.
+class CCIfPtrAddrSpace<int AS, CCAction A>
+    : CCIf<"(ArgFlags.isPointer() && ArgFlags.getPointerAddrSpace() == " # AS # ")", A> {}
+
+/// CCIfPtr - If the top-level parent of the current argument had
+/// pointer type in some address-space.
+class CCIfPtr<CCAction A> : CCIf<"ArgFlags.isPointer()", A> {}
+
 /// CCAssignToReg - This action matches if there is a register in the specified
 /// list that is still available.  If so, it assigns the value to the first
 /// available register and succeeds.
diff --git a/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h b/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h
index f96e353..7e094a1 100644
--- a/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h
@@ -79,6 +79,9 @@
   /// Emit the module-level metadata that the platform cares about.
   virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M) const {}
 
+  /// Get the module-level metadata that the platform cares about.
+  virtual void getModuleMetadata(Module &M) {}
+
   /// Given a constant with the SectionKind, return a section that it should be
   /// placed in.
   virtual MCSection *getSectionForConstant(const DataLayout &DL,
diff --git a/linux-x64/clang/include/llvm/Target/TargetMachine.h b/linux-x64/clang/include/llvm/Target/TargetMachine.h
index 7dd9b99..cdf9f8b 100644
--- a/linux-x64/clang/include/llvm/Target/TargetMachine.h
+++ b/linux-x64/clang/include/llvm/Target/TargetMachine.h
@@ -35,6 +35,9 @@
 class MCSymbol;
 class raw_pwrite_stream;
 class PassManagerBuilder;
+struct PerFunctionMIParsingState;
+class SMDiagnostic;
+class SMRange;
 class Target;
 class TargetIntrinsicInfo;
 class TargetIRAnalysis;
@@ -49,6 +52,10 @@
 }
 using legacy::PassManagerBase;
 
+namespace yaml {
+struct MachineFunctionInfo;
+}
+
 //===----------------------------------------------------------------------===//
 ///
 /// Primary interface to the complete machine description for the target
@@ -114,6 +121,27 @@
     return nullptr;
   }
 
+  /// Allocate and return a default initialized instance of the YAML
+  /// representation for the MachineFunctionInfo.
+  virtual yaml::MachineFunctionInfo *createDefaultFuncInfoYAML() const {
+    return nullptr;
+  }
+
+  /// Allocate and initialize an instance of the YAML representation of the
+  /// MachineFunctionInfo.
+  virtual yaml::MachineFunctionInfo *
+  convertFuncInfoToYAML(const MachineFunction &MF) const {
+    return nullptr;
+  }
+
+  /// Parse out the target's MachineFunctionInfo from the YAML reprsentation.
+  virtual bool parseMachineFunctionInfo(const yaml::MachineFunctionInfo &,
+                                        PerFunctionMIParsingState &PFS,
+                                        SMDiagnostic &Error,
+                                        SMRange &SourceRange) const {
+    return false;
+  }
+
   /// This method returns a pointer to the specified type of
   /// TargetSubtargetInfo.  In debug builds, it verifies that the object being
   /// returned is of the correct type.
@@ -362,9 +390,9 @@
   if (CM) {
     // By default, targets do not support the tiny and kernel models.
     if (*CM == CodeModel::Tiny)
-      report_fatal_error("Target does not support the tiny CodeModel");
+      report_fatal_error("Target does not support the tiny CodeModel", false);
     if (*CM == CodeModel::Kernel)
-      report_fatal_error("Target does not support the kernel CodeModel");
+      report_fatal_error("Target does not support the kernel CodeModel", false);
     return *CM;
   }
   return Default;
diff --git a/linux-x64/clang/include/llvm/Target/TargetOptions.h b/linux-x64/clang/include/llvm/Target/TargetOptions.h
index 6b76a11..8cc2a60 100644
--- a/linux-x64/clang/include/llvm/Target/TargetOptions.h
+++ b/linux-x64/clang/include/llvm/Target/TargetOptions.h
@@ -118,7 +118,8 @@
           NoTrapAfterNoreturn(false), EmulatedTLS(false),
           ExplicitEmulatedTLS(false), EnableIPRA(false),
           EmitStackSizeSection(false), EnableMachineOutliner(false),
-          SupportsDefaultOutlining(false), EmitAddrsig(false) {}
+          SupportsDefaultOutlining(false), EmitAddrsig(false),
+          EnableDebugEntryValues(false) {}
 
     /// PrintMachineCode - This flag is enabled when the -print-machineinstrs
     /// option is specified on the command line, and should enable debugging
@@ -252,6 +253,9 @@
     /// Emit address-significance table.
     unsigned EmitAddrsig : 1;
 
+    /// Emit debug info about parameter's entry values.
+    unsigned EnableDebugEntryValues : 1;
+
     /// FloatABIType - This setting is set by -float-abi=xxx option is specfied
     /// on the command line. This setting may either be Default, Soft, or Hard.
     /// Default selects the target's default behavior. Soft selects the ABI for
diff --git a/linux-x64/clang/include/llvm/Target/TargetSchedule.td b/linux-x64/clang/include/llvm/Target/TargetSchedule.td
index cbfad5f..a36d259 100644
--- a/linux-x64/clang/include/llvm/Target/TargetSchedule.td
+++ b/linux-x64/clang/include/llvm/Target/TargetSchedule.td
@@ -135,7 +135,7 @@
 //
 // An optional Super resource may be given to model these resources as
 // a subset of the more general super resources. Using one of these
-// resources implies using one of the super resoruces.
+// resources implies using one of the super resources.
 //
 // ProcResourceUnits normally model a few buffered resources within an
 // out-of-order engine. Buffered resources may be held for multiple
diff --git a/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td b/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td
index 174d97a..3b5c767 100644
--- a/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td
+++ b/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td
@@ -391,6 +391,7 @@
 def usubsat    : SDNode<"ISD::USUBSAT"   , SDTIntBinOp>;
 
 def smulfix    : SDNode<"ISD::SMULFIX"   , SDTIntScaledBinOp, [SDNPCommutative]>;
+def smulfixsat : SDNode<"ISD::SMULFIXSAT", SDTIntScaledBinOp, [SDNPCommutative]>;
 def umulfix    : SDNode<"ISD::UMULFIX"   , SDTIntScaledBinOp, [SDNPCommutative]>;
 
 def sext_inreg : SDNode<"ISD::SIGN_EXTEND_INREG", SDTExtInreg>;
@@ -450,6 +451,11 @@
 def fnearbyint : SDNode<"ISD::FNEARBYINT" , SDTFPUnaryOp>;
 def fround     : SDNode<"ISD::FROUND"     , SDTFPUnaryOp>;
 
+def lround     : SDNode<"ISD::LROUND"     , SDTFPToIntOp>;
+def llround    : SDNode<"ISD::LLROUND"    , SDTFPToIntOp>;
+def lrint      : SDNode<"ISD::LRINT"      , SDTFPToIntOp>;
+def llrint     : SDNode<"ISD::LLRINT"     , SDTFPToIntOp>;
+
 def fpround    : SDNode<"ISD::FP_ROUND"   , SDTFPRoundOp>;
 def fpextend   : SDNode<"ISD::FP_EXTEND"  , SDTFPExtendOp>;
 def fcopysign  : SDNode<"ISD::FCOPYSIGN"  , SDTFPSignOp>;
@@ -461,6 +467,53 @@
 def f16_to_fp  : SDNode<"ISD::FP16_TO_FP" , SDTIntToFPOp>;
 def fp_to_f16  : SDNode<"ISD::FP_TO_FP16" , SDTFPToIntOp>;
 
+def strict_fadd       : SDNode<"ISD::STRICT_FADD",
+                               SDTFPBinOp, [SDNPHasChain, SDNPCommutative]>;
+def strict_fsub       : SDNode<"ISD::STRICT_FSUB",
+                               SDTFPBinOp, [SDNPHasChain]>;
+def strict_fmul       : SDNode<"ISD::STRICT_FMUL",
+                               SDTFPBinOp, [SDNPHasChain, SDNPCommutative]>;
+def strict_fdiv       : SDNode<"ISD::STRICT_FDIV",
+                               SDTFPBinOp, [SDNPHasChain]>;
+def strict_frem       : SDNode<"ISD::STRICT_FREM",
+                               SDTFPBinOp, [SDNPHasChain]>;
+def strict_fma        : SDNode<"ISD::STRICT_FMA",
+                               SDTFPTernaryOp, [SDNPHasChain]>;
+def strict_fsqrt      : SDNode<"ISD::STRICT_FSQRT",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fsin       : SDNode<"ISD::STRICT_FSIN",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fcos       : SDNode<"ISD::STRICT_FCOS",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fexp2      : SDNode<"ISD::STRICT_FEXP2",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fpow       : SDNode<"ISD::STRICT_FPOW",
+                               SDTFPBinOp, [SDNPHasChain]>;
+def strict_flog2      : SDNode<"ISD::STRICT_FLOG2",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_frint      : SDNode<"ISD::STRICT_FRINT",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fnearbyint : SDNode<"ISD::STRICT_FNEARBYINT",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fceil      : SDNode<"ISD::STRICT_FCEIL",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_ffloor     : SDNode<"ISD::STRICT_FFLOOR",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fround     : SDNode<"ISD::STRICT_FROUND",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_ftrunc     : SDNode<"ISD::STRICT_FTRUNC",
+                               SDTFPUnaryOp, [SDNPHasChain]>;
+def strict_fminnum    : SDNode<"ISD::STRICT_FMINNUM",
+                               SDTFPBinOp, [SDNPHasChain,
+                                            SDNPCommutative, SDNPAssociative]>;
+def strict_fmaxnum    : SDNode<"ISD::STRICT_FMAXNUM",
+                               SDTFPBinOp, [SDNPHasChain,
+                                            SDNPCommutative, SDNPAssociative]>;
+def strict_fpround    : SDNode<"ISD::STRICT_FP_ROUND",
+                               SDTFPRoundOp, [SDNPHasChain]>;
+def strict_fpextend   : SDNode<"ISD::STRICT_FP_EXTEND",
+                               SDTFPExtendOp, [SDNPHasChain]>;
+
 def setcc      : SDNode<"ISD::SETCC"      , SDTSetCC>;
 def select     : SDNode<"ISD::SELECT"     , SDTSelect>;
 def vselect    : SDNode<"ISD::VSELECT"    , SDTVSelect>;
@@ -527,9 +580,9 @@
 def atomic_store     : SDNode<"ISD::ATOMIC_STORE", SDTAtomicStore,
                     [SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
 
-def masked_store : SDNode<"ISD::MSTORE",  SDTMaskedStore,
+def masked_st    : SDNode<"ISD::MSTORE",  SDTMaskedStore,
                        [SDNPHasChain, SDNPMayStore, SDNPMemOperand]>;
-def masked_load  : SDNode<"ISD::MLOAD",  SDTMaskedLoad,
+def masked_ld    : SDNode<"ISD::MLOAD",  SDTMaskedLoad,
                        [SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;
 
 // Do not use ld, st directly. Use load, extload, sextload, zextload, store,
@@ -782,14 +835,11 @@
 def vtInt      : PatLeaf<(vt),  [{ return N->getVT().isInteger(); }]>;
 def vtFP       : PatLeaf<(vt),  [{ return N->getVT().isFloatingPoint(); }]>;
 
-def immAllOnesV: PatLeaf<(build_vector), [{
-  return ISD::isBuildVectorAllOnes(N);
-}]>;
-def immAllZerosV: PatLeaf<(build_vector), [{
-  return ISD::isBuildVectorAllZeros(N);
-}]>;
-
-
+// Use ISD::isBuildVectorAllOnes or ISD::isBuildVectorAllZeros to look for
+// the corresponding build_vector. Will look through bitcasts except when used
+// as a pattern root.
+def immAllOnesV; // ISD::isBuildVectorAllOnes
+def immAllZerosV; // ISD::isBuildVectorAllZeros
 
 // Other helper fragments.
 def not  : PatFrag<(ops node:$in), (xor node:$in, -1)>;
@@ -1174,6 +1224,87 @@
 def setne  : PatFrag<(ops node:$lhs, node:$rhs),
                      (setcc node:$lhs, node:$rhs, SETNE)>;
 
+// We don't have strict FP extended loads as single DAG nodes, but we can
+// still provide convenience fragments to match those operations.
+def strict_extloadf32 : PatFrag<(ops node:$ptr),
+                                (strict_fpextend (f32 (load node:$ptr)))>;
+def strict_extloadf64 : PatFrag<(ops node:$ptr),
+                                (strict_fpextend (f64 (load node:$ptr)))>;
+
+// Convenience fragments to match both strict and non-strict fp operations
+def any_fadd       : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_fadd node:$lhs, node:$rhs),
+                               (fadd node:$lhs, node:$rhs)]>;
+def any_fsub       : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_fsub node:$lhs, node:$rhs),
+                               (fsub node:$lhs, node:$rhs)]>;
+def any_fmul       : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_fmul node:$lhs, node:$rhs),
+                               (fmul node:$lhs, node:$rhs)]>;
+def any_fdiv       : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_fdiv node:$lhs, node:$rhs),
+                               (fdiv node:$lhs, node:$rhs)]>;
+def any_frem       : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_frem node:$lhs, node:$rhs),
+                               (frem node:$lhs, node:$rhs)]>;
+def any_fma        : PatFrags<(ops node:$src1, node:$src2, node:$src3),
+                              [(strict_fma node:$src1, node:$src2, node:$src3),
+                               (fma node:$src1, node:$src2, node:$src3)]>;
+def any_fsqrt      : PatFrags<(ops node:$src),
+                              [(strict_fsqrt node:$src),
+                               (fsqrt node:$src)]>;
+def any_fsin       : PatFrags<(ops node:$src),
+                              [(strict_fsin node:$src),
+                               (fsin node:$src)]>;
+def any_fcos       : PatFrags<(ops node:$src),
+                              [(strict_fcos node:$src),
+                               (fcos node:$src)]>;
+def any_fexp2      : PatFrags<(ops node:$src),
+                              [(strict_fexp2 node:$src),
+                               (fexp2 node:$src)]>;
+def any_fpow       : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_fpow node:$lhs, node:$rhs),
+                               (fpow node:$lhs, node:$rhs)]>;
+def any_flog2      : PatFrags<(ops node:$src),
+                              [(strict_flog2 node:$src),
+                               (flog2 node:$src)]>;
+def any_frint      : PatFrags<(ops node:$src),
+                              [(strict_frint node:$src),
+                               (frint node:$src)]>;
+def any_fnearbyint : PatFrags<(ops node:$src),
+                              [(strict_fnearbyint node:$src),
+                               (fnearbyint node:$src)]>;
+def any_fceil      : PatFrags<(ops node:$src),
+                              [(strict_fceil node:$src),
+                               (fceil node:$src)]>;
+def any_ffloor     : PatFrags<(ops node:$src),
+                              [(strict_ffloor node:$src),
+                               (ffloor node:$src)]>;
+def any_fround     : PatFrags<(ops node:$src),
+                              [(strict_fround node:$src),
+                               (fround node:$src)]>;
+def any_ftrunc     : PatFrags<(ops node:$src),
+                              [(strict_ftrunc node:$src),
+                               (ftrunc node:$src)]>;
+def any_fmaxnum    : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_fmaxnum node:$lhs, node:$rhs),
+                               (fmaxnum node:$lhs, node:$rhs)]>;
+def any_fminnum    : PatFrags<(ops node:$lhs, node:$rhs),
+                              [(strict_fminnum node:$lhs, node:$rhs),
+                               (fminnum node:$lhs, node:$rhs)]>;
+def any_fpround    : PatFrags<(ops node:$src),
+                              [(strict_fpround node:$src),
+                               (fpround node:$src)]>;
+def any_fpextend   : PatFrags<(ops node:$src),
+                              [(strict_fpextend node:$src),
+                               (fpextend node:$src)]>;
+def any_extloadf32 : PatFrags<(ops node:$ptr),
+                              [(strict_extloadf32 node:$ptr),
+                               (extloadf32 node:$ptr)]>;
+def any_extloadf64 : PatFrags<(ops node:$ptr),
+                              [(strict_extloadf64 node:$ptr),
+                               (extloadf64 node:$ptr)]>;
+
 multiclass binary_atomic_op_ord<SDNode atomic_op> {
   def #NAME#_monotonic : PatFrag<(ops node:$ptr, node:$val),
       (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$val)> {
diff --git a/linux-x64/clang/include/llvm/Testing/Support/Annotations.h b/linux-x64/clang/include/llvm/Testing/Support/Annotations.h
new file mode 100644
index 0000000..aad1a44
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Testing/Support/Annotations.h
@@ -0,0 +1,90 @@
+//===--- Annotations.h - Annotated source code for tests ---------*- C++-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_TESTING_SUPPORT_ANNOTATIONS_H
+#define LLVM_TESTING_SUPPORT_ANNOTATIONS_H
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include <tuple>
+#include <vector>
+
+namespace llvm {
+
+/// Annotations lets you mark points and ranges inside source code, for tests:
+///
+///    Annotations Example(R"cpp(
+///       int complete() { x.pri^ }         // ^ indicates a point
+///       void err() { [["hello" == 42]]; } // [[this is a range]]
+///       $definition^class Foo{};          // points can be named: "definition"
+///       $fail[[static_assert(false, "")]] // ranges can be named too: "fail"
+///    )cpp");
+///
+///    StringRef Code = Example.code();             // annotations stripped.
+///    std::vector<size_t> PP = Example.points();   // all unnamed points
+///    size_t P = Example.point();                  // there must be exactly one
+///    llvm::Range R = Example.range("fail");       // find named ranges
+///
+/// Points/ranges are coordinated into `code()` which is stripped of
+/// annotations.
+///
+/// Ranges may be nested (and points can be inside ranges), but there's no way
+/// to define general overlapping ranges.
+///
+/// FIXME: the choice of the marking syntax makes it impossible to represent
+///        some of the C++ and Objective C constructs (including common ones
+///        like C++ attributes). We can fix this by:
+///          1. introducing an escaping mechanism for the special characters,
+///          2. making characters for marking points and ranges configurable,
+///          3. changing the syntax to something less commonly used,
+///          4. ...
+class Annotations {
+public:
+  /// Two offsets pointing to a continuous substring. End is not included, i.e.
+  /// represents a half-open range.
+  struct Range {
+    size_t Begin = 0;
+    size_t End = 0;
+
+    friend bool operator==(const Range &L, const Range &R) {
+      return std::tie(L.Begin, L.End) == std::tie(R.Begin, R.End);
+    }
+    friend bool operator!=(const Range &L, const Range &R) { return !(L == R); }
+  };
+
+  /// Parses the annotations from Text. Crashes if it's malformed.
+  Annotations(llvm::StringRef Text);
+
+  /// The input text with all annotations stripped.
+  /// All points and ranges are relative to this stripped text.
+  llvm::StringRef code() const { return Code; }
+
+  /// Returns the position of the point marked by ^ (or $name^) in the text.
+  /// Crashes if there isn't exactly one.
+  size_t point(llvm::StringRef Name = "") const;
+  /// Returns the position of all points marked by ^ (or $name^) in the text.
+  std::vector<size_t> points(llvm::StringRef Name = "") const;
+
+  /// Returns the location of the range marked by [[ ]] (or $name[[ ]]).
+  /// Crashes if there isn't exactly one.
+  Range range(llvm::StringRef Name = "") const;
+  /// Returns the location of all ranges marked by [[ ]] (or $name[[ ]]).
+  std::vector<Range> ranges(llvm::StringRef Name = "") const;
+
+private:
+  std::string Code;
+  llvm::StringMap<llvm::SmallVector<size_t, 1>> Points;
+  llvm::StringMap<llvm::SmallVector<Range, 1>> Ranges;
+};
+
+llvm::raw_ostream &operator<<(llvm::raw_ostream &O,
+                              const llvm::Annotations::Range &R);
+
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h b/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h
index a0f034d..38726b1 100644
--- a/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h
+++ b/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h
@@ -9,9 +9,11 @@
 #ifndef LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
 #define LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
 
+#include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/raw_os_ostream.h"
+#include "gmock/gmock-matchers.h"
 #include "gtest/gtest-printers.h"
 
 #include <string>
@@ -53,11 +55,56 @@
     PrintTo(static_cast<const ErrorHolder &>(Item), Out);
   }
 }
+
+template <class InnerMatcher> class ValueIsMatcher {
+public:
+  explicit ValueIsMatcher(InnerMatcher ValueMatcher)
+      : ValueMatcher(ValueMatcher) {}
+
+  template <class T>
+  operator ::testing::Matcher<const llvm::Optional<T> &>() const {
+    return ::testing::MakeMatcher(
+        new Impl<T>(::testing::SafeMatcherCast<T>(ValueMatcher)));
+  }
+
+  template <class T>
+  class Impl : public ::testing::MatcherInterface<const llvm::Optional<T> &> {
+  public:
+    explicit Impl(const ::testing::Matcher<T> &ValueMatcher)
+        : ValueMatcher(ValueMatcher) {}
+
+    bool MatchAndExplain(const llvm::Optional<T> &Input,
+                         testing::MatchResultListener *L) const override {
+      return Input && ValueMatcher.MatchAndExplain(Input.getValue(), L);
+    }
+
+    void DescribeTo(std::ostream *OS) const override {
+      *OS << "has a value that ";
+      ValueMatcher.DescribeTo(OS);
+    }
+    void DescribeNegationTo(std::ostream *OS) const override {
+      *OS << "does not have a value that ";
+      ValueMatcher.DescribeTo(OS);
+    }
+
+  private:
+    testing::Matcher<T> ValueMatcher;
+  };
+
+private:
+  InnerMatcher ValueMatcher;
+};
 } // namespace detail
 
+/// Matches an llvm::Optional<T> with a value that conforms to an inner matcher.
+/// To match llvm::None you could use Eq(llvm::None).
+template <class InnerMatcher>
+detail::ValueIsMatcher<InnerMatcher> ValueIs(const InnerMatcher &ValueMatcher) {
+  return detail::ValueIsMatcher<InnerMatcher>(ValueMatcher);
+}
 namespace unittest {
 SmallString<128> getInputFileDirectory(const char *Argv0);
-}
+} // namespace unittest
 } // namespace llvm
 
 #endif
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/Architecture.def b/linux-x64/clang/include/llvm/TextAPI/MachO/Architecture.def
new file mode 100644
index 0000000..4c695fe
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/Architecture.def
@@ -0,0 +1,38 @@
+//===- llvm/TextAPI/MachO/Architecture.def - Architecture -----------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef ARCHINFO
+#define ARCHINFO(arch)
+#endif
+
+///
+/// X86 architectures sorted by cpu type and sub type id.
+///
+ARCHINFO(i386, MachO::CPU_TYPE_I386, MachO::CPU_SUBTYPE_I386_ALL)
+ARCHINFO(x86_64, MachO::CPU_TYPE_X86_64, MachO::CPU_SUBTYPE_X86_64_ALL)
+ARCHINFO(x86_64h, MachO::CPU_TYPE_X86_64, MachO::CPU_SUBTYPE_X86_64_H)
+
+
+///
+/// ARM architectures sorted by cpu sub type id.
+///
+ARCHINFO(armv4t, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V4T)
+ARCHINFO(armv6, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V6)
+ARCHINFO(armv5, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V5TEJ)
+ARCHINFO(armv7, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7)
+ARCHINFO(armv7s, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7S)
+ARCHINFO(armv7k, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7K)
+ARCHINFO(armv6m, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V6M)
+ARCHINFO(armv7m, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7M)
+ARCHINFO(armv7em, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7EM)
+
+
+///
+/// ARM64 architectures sorted by cpu sub type id.
+///
+ARCHINFO(arm64, MachO::CPU_TYPE_ARM64, MachO::CPU_SUBTYPE_ARM64_ALL)
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/Architecture.h b/linux-x64/clang/include/llvm/TextAPI/MachO/Architecture.h
new file mode 100644
index 0000000..055baeb
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/Architecture.h
@@ -0,0 +1,47 @@
+//===- llvm/TextAPI/MachO/Architecture.h - Architecture ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Defines the architecture enum and helper methods.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_MACHO_ARCHITECTURE_H
+#define LLVM_TEXTAPI_MACHO_ARCHITECTURE_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+namespace MachO {
+
+/// Defines the architecture slices that are supported by Text-based Stub files.
+enum Architecture : uint8_t {
+#define ARCHINFO(Arch, Type, SubType) AK_##Arch,
+#include "llvm/TextAPI/MachO/Architecture.def"
+#undef ARCHINFO
+  AK_unknown, // this has to go last.
+};
+
+/// Convert a CPU Type and Subtype pair to an architecture slice.
+Architecture getArchitectureFromCpuType(uint32_t CPUType, uint32_t CPUSubType);
+
+/// Convert a name to an architecture slice.
+Architecture getArchitectureFromName(StringRef Name);
+
+/// Convert an architecture slice to a string.
+StringRef getArchitectureName(Architecture Arch);
+
+/// Convert an architecture slice to a CPU Type and Subtype pair.
+std::pair<uint32_t, uint32_t> getCPUTypeFromArchitecture(Architecture Arch);
+
+raw_ostream &operator<<(raw_ostream &OS, Architecture Arch);
+
+} // end namespace MachO.
+} // end namespace llvm.
+
+#endif // LLVM_TEXTAPI_MACHO_ARCHITECTURE_H
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/ArchitectureSet.h b/linux-x64/clang/include/llvm/TextAPI/MachO/ArchitectureSet.h
new file mode 100644
index 0000000..d8dfc7f
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/ArchitectureSet.h
@@ -0,0 +1,159 @@
+//===- llvm/TextAPI/MachO/ArchitectureSet.h - ArchitectureSet ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Defines the architecture set.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_MACHO_ARCHITECTURE_SET_H
+#define LLVM_TEXTAPI_MACHO_ARCHITECTURE_SET_H
+
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/TextAPI/MachO/Architecture.h"
+#include <cstddef>
+#include <iterator>
+#include <limits>
+#include <vector>
+
+namespace llvm {
+namespace MachO {
+
+class ArchitectureSet {
+private:
+  using ArchSetType = uint32_t;
+
+  const static ArchSetType EndIndexVal =
+      std::numeric_limits<ArchSetType>::max();
+  ArchSetType ArchSet{0};
+
+public:
+  constexpr ArchitectureSet() = default;
+  constexpr ArchitectureSet(ArchSetType Raw) : ArchSet(Raw) {}
+  ArchitectureSet(Architecture Arch) : ArchitectureSet() { set(Arch); }
+  ArchitectureSet(const std::vector<Architecture> &Archs);
+
+  void set(Architecture Arch) {
+    if (Arch == AK_unknown)
+      return;
+    ArchSet |= 1U << static_cast<int>(Arch);
+  }
+
+  void clear(Architecture Arch) { ArchSet &= ~(1U << static_cast<int>(Arch)); }
+
+  bool has(Architecture Arch) const {
+    return ArchSet & (1U << static_cast<int>(Arch));
+  }
+
+  bool contains(ArchitectureSet Archs) const {
+    return (ArchSet & Archs.ArchSet) == Archs.ArchSet;
+  }
+
+  size_t count() const;
+
+  bool empty() const { return ArchSet == 0; }
+
+  ArchSetType rawValue() const { return ArchSet; }
+
+  template <typename Ty>
+  class arch_iterator
+      : public std::iterator<std::forward_iterator_tag, Architecture, size_t> {
+  private:
+    ArchSetType Index;
+    Ty *ArchSet;
+
+    void findNextSetBit() {
+      if (Index == EndIndexVal)
+        return;
+      while (++Index < sizeof(Ty) * 8) {
+        if (*ArchSet & (1UL << Index))
+          return;
+      }
+
+      Index = EndIndexVal;
+    }
+
+  public:
+    arch_iterator(Ty *ArchSet, ArchSetType Index = 0)
+        : Index(Index), ArchSet(ArchSet) {
+      if (Index != EndIndexVal && !(*ArchSet & (1UL << Index)))
+        findNextSetBit();
+    }
+
+    Architecture operator*() const { return static_cast<Architecture>(Index); }
+
+    arch_iterator &operator++() {
+      findNextSetBit();
+      return *this;
+    }
+
+    arch_iterator operator++(int) {
+      auto tmp = *this;
+      findNextSetBit();
+      return tmp;
+    }
+
+    bool operator==(const arch_iterator &o) const {
+      return std::tie(Index, ArchSet) == std::tie(o.Index, o.ArchSet);
+    }
+
+    bool operator!=(const arch_iterator &o) const { return !(*this == o); }
+  };
+
+  ArchitectureSet operator&(const ArchitectureSet &o) {
+    return {ArchSet & o.ArchSet};
+  }
+
+  ArchitectureSet operator|(const ArchitectureSet &o) {
+    return {ArchSet | o.ArchSet};
+  }
+
+  ArchitectureSet &operator|=(const ArchitectureSet &o) {
+    ArchSet |= o.ArchSet;
+    return *this;
+  }
+
+  ArchitectureSet &operator|=(const Architecture &Arch) {
+    set(Arch);
+    return *this;
+  }
+
+  bool operator==(const ArchitectureSet &o) const {
+    return ArchSet == o.ArchSet;
+  }
+
+  bool operator!=(const ArchitectureSet &o) const {
+    return ArchSet != o.ArchSet;
+  }
+
+  bool operator<(const ArchitectureSet &o) const { return ArchSet < o.ArchSet; }
+
+  using iterator = arch_iterator<ArchSetType>;
+  using const_iterator = arch_iterator<const ArchSetType>;
+
+  iterator begin() { return {&ArchSet}; }
+  iterator end() { return {&ArchSet, EndIndexVal}; }
+
+  const_iterator begin() const { return {&ArchSet}; }
+  const_iterator end() const { return {&ArchSet, EndIndexVal}; }
+
+  operator std::string() const;
+  operator std::vector<Architecture>() const;
+  void print(raw_ostream &OS) const;
+};
+
+inline ArchitectureSet operator|(const Architecture &lhs,
+                                 const Architecture &rhs) {
+  return ArchitectureSet(lhs) | ArchitectureSet(rhs);
+}
+
+raw_ostream &operator<<(raw_ostream &OS, ArchitectureSet Set);
+
+} // end namespace MachO.
+} // end namespace llvm.
+
+#endif // LLVM_TEXTAPI_MACHO_ARCHITECTURE_SET_H
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/InterfaceFile.h b/linux-x64/clang/include/llvm/TextAPI/MachO/InterfaceFile.h
new file mode 100644
index 0000000..e722449
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/InterfaceFile.h
@@ -0,0 +1,436 @@
+//===- llvm/TextAPI/MachO/IntefaceFile.h - TAPI Interface File --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// A generic and abstract interface representation for linkable objects. This
+// could be an MachO executable, bundle, dylib, or text-based stub file.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_MACHO_INTERFACE_FILE_H
+#define LLVM_TEXTAPI_MACHO_INTERFACE_FILE_H
+
+#include "llvm/ADT/BitmaskEnum.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/Hashing.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/iterator.h"
+#include "llvm/BinaryFormat/MachO.h"
+#include "llvm/BinaryFormat/Magic.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/Error.h"
+#include "llvm/TextAPI/MachO/Architecture.h"
+#include "llvm/TextAPI/MachO/ArchitectureSet.h"
+#include "llvm/TextAPI/MachO/PackedVersion.h"
+#include "llvm/TextAPI/MachO/Symbol.h"
+
+namespace llvm {
+namespace MachO {
+
+/// Defines the list of MachO platforms.
+enum class PlatformKind : unsigned {
+  unknown,
+  macOS = MachO::PLATFORM_MACOS,
+  iOS = MachO::PLATFORM_IOS,
+  tvOS = MachO::PLATFORM_TVOS,
+  watchOS = MachO::PLATFORM_WATCHOS,
+  bridgeOS = MachO::PLATFORM_BRIDGEOS,
+};
+
+/// Defines a list of Objective-C constraints.
+enum class ObjCConstraintType : unsigned {
+  /// No constraint.
+  None = 0,
+
+  /// Retain/Release.
+  Retain_Release = 1,
+
+  /// Retain/Release for Simulator.
+  Retain_Release_For_Simulator = 2,
+
+  /// Retain/Release or Garbage Collection.
+  Retain_Release_Or_GC = 3,
+
+  /// Garbage Collection.
+  GC = 4,
+};
+
+// clang-format off
+
+/// Defines the file type this file represents.
+enum FileType : unsigned {
+  /// Invalid file type.
+  Invalid = 0U,
+
+  /// Text-based stub file (.tbd) version 1.0
+  TBD_V1  = 1U <<  0,
+
+  /// Text-based stub file (.tbd) version 2.0
+  TBD_V2  = 1U <<  1,
+
+  /// Text-based stub file (.tbd) version 3.0
+  TBD_V3  = 1U <<  2,
+
+  All     = ~0U,
+
+  LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/All),
+};
+
+// clang-format on
+
+/// Reference to an interface file.
+class InterfaceFileRef {
+public:
+  InterfaceFileRef() = default;
+
+  InterfaceFileRef(StringRef InstallName) : InstallName(InstallName) {}
+
+  InterfaceFileRef(StringRef InstallName, ArchitectureSet Archs)
+      : InstallName(InstallName), Architectures(Archs) {}
+
+  StringRef getInstallName() const { return InstallName; };
+  void addArchitectures(ArchitectureSet Archs) { Architectures |= Archs; }
+  ArchitectureSet getArchitectures() const { return Architectures; }
+  bool hasArchitecture(Architecture Arch) const {
+    return Architectures.has(Arch);
+  }
+
+  bool operator==(const InterfaceFileRef &O) const {
+    return std::tie(InstallName, Architectures) ==
+           std::tie(O.InstallName, O.Architectures);
+  }
+
+  bool operator<(const InterfaceFileRef &O) const {
+    return std::tie(InstallName, Architectures) <
+           std::tie(O.InstallName, O.Architectures);
+  }
+
+private:
+  std::string InstallName;
+  ArchitectureSet Architectures;
+};
+
+} // end namespace MachO.
+
+struct SymbolsMapKey {
+  MachO::SymbolKind Kind;
+  StringRef Name;
+
+  SymbolsMapKey(MachO::SymbolKind Kind, StringRef Name)
+      : Kind(Kind), Name(Name) {}
+};
+template <> struct DenseMapInfo<SymbolsMapKey> {
+  static inline SymbolsMapKey getEmptyKey() {
+    return SymbolsMapKey(MachO::SymbolKind::GlobalSymbol, StringRef{});
+  }
+
+  static inline SymbolsMapKey getTombstoneKey() {
+    return SymbolsMapKey(MachO::SymbolKind::ObjectiveCInstanceVariable,
+                         StringRef{});
+  }
+
+  static unsigned getHashValue(const SymbolsMapKey &Key) {
+    return hash_combine(hash_value(Key.Kind), hash_value(Key.Name));
+  }
+
+  static bool isEqual(const SymbolsMapKey &LHS, const SymbolsMapKey &RHS) {
+    return std::tie(LHS.Kind, LHS.Name) == std::tie(RHS.Kind, RHS.Name);
+  }
+};
+
+namespace MachO {
+
+/// Defines the interface file.
+class InterfaceFile {
+public:
+  /// Set the path from which this file was generated (if applicable).
+  ///
+  /// \param Path_ The path to the source file.
+  void setPath(StringRef Path_) { Path = Path_; }
+
+  /// Get the path from which this file was generated (if applicable).
+  ///
+  /// \return The path to the source file or empty.
+  StringRef getPath() const { return Path; }
+
+  /// Set the file type.
+  ///
+  /// This is used by the YAML writer to identify the specification it should
+  /// use for writing the file.
+  ///
+  /// \param Kind The file type.
+  void setFileType(FileType Kind) { FileKind = Kind; }
+
+  /// Get the file type.
+  ///
+  /// \return The file type.
+  FileType getFileType() const { return FileKind; }
+
+  /// Set the platform.
+  void setPlatform(PlatformKind Platform_) { Platform = Platform_; }
+
+  /// Get the platform.
+  PlatformKind getPlatform() const { return Platform; }
+
+  /// Specify the set of supported architectures by this file.
+  void setArchitectures(ArchitectureSet Architectures_) {
+    Architectures = Architectures_;
+  }
+
+  /// Add the set of supported architectures by this file.
+  void addArchitectures(ArchitectureSet Architectures_) {
+    Architectures |= Architectures_;
+  }
+
+  /// Add supported architecture by this file..
+  void addArch(Architecture Arch) { Architectures.set(Arch); }
+
+  /// Get the set of supported architectures.
+  ArchitectureSet getArchitectures() const { return Architectures; }
+
+  /// Set the install name of the library.
+  void setInstallName(StringRef InstallName_) { InstallName = InstallName_; }
+
+  /// Get the install name of the library.
+  StringRef getInstallName() const { return InstallName; }
+
+  /// Set the current version of the library.
+  void setCurrentVersion(PackedVersion Version) { CurrentVersion = Version; }
+
+  /// Get the current version of the library.
+  PackedVersion getCurrentVersion() const { return CurrentVersion; }
+
+  /// Set the compatibility version of the library.
+  void setCompatibilityVersion(PackedVersion Version) {
+    CompatibilityVersion = Version;
+  }
+
+  /// Get the compatibility version of the library.
+  PackedVersion getCompatibilityVersion() const { return CompatibilityVersion; }
+
+  /// Set the Swift ABI version of the library.
+  void setSwiftABIVersion(uint8_t Version) { SwiftABIVersion = Version; }
+
+  /// Get the Swift ABI version of the library.
+  uint8_t getSwiftABIVersion() const { return SwiftABIVersion; }
+
+  /// Specify if the library uses two-level namespace (or flat namespace).
+  void setTwoLevelNamespace(bool V = true) { IsTwoLevelNamespace = V; }
+
+  /// Check if the library uses two-level namespace.
+  bool isTwoLevelNamespace() const { return IsTwoLevelNamespace; }
+
+  /// Specify if the library is application extension safe (or not).
+  void setApplicationExtensionSafe(bool V = true) { IsAppExtensionSafe = V; }
+
+  /// Check if the library is application extension safe.
+  bool isApplicationExtensionSafe() const { return IsAppExtensionSafe; }
+
+  /// Set the Objective-C constraint.
+  void setObjCConstraint(ObjCConstraintType Constraint) {
+    ObjcConstraint = Constraint;
+  }
+
+  /// Get the Objective-C constraint.
+  ObjCConstraintType getObjCConstraint() const { return ObjcConstraint; }
+
+  /// Specify if this file was generated during InstallAPI (or not).
+  void setInstallAPI(bool V = true) { IsInstallAPI = V; }
+
+  /// Check if this file was generated during InstallAPI.
+  bool isInstallAPI() const { return IsInstallAPI; }
+
+  /// Set the parent umbrella framework.
+  void setParentUmbrella(StringRef Parent) { ParentUmbrella = Parent; }
+
+  /// Get the parent umbrella framework.
+  StringRef getParentUmbrella() const { return ParentUmbrella; }
+
+  /// Add an allowable client.
+  ///
+  /// Mach-O Dynamic libraries have the concept of allowable clients that are
+  /// checked during static link time. The name of the application or library
+  /// that is being generated needs to match one of the allowable clients or the
+  /// linker refuses to link this library.
+  ///
+  /// \param Name The name of the client that is allowed to link this library.
+  /// \param Architectures The set of architecture for which this applies.
+  void addAllowableClient(StringRef Name, ArchitectureSet Architectures);
+
+  /// Get the list of allowable clients.
+  ///
+  /// \return Returns a list of allowable clients.
+  const std::vector<InterfaceFileRef> &allowableClients() const {
+    return AllowableClients;
+  }
+
+  /// Add a re-exported library.
+  ///
+  /// \param InstallName The name of the library to re-export.
+  /// \param Architectures The set of architecture for which this applies.
+  void addReexportedLibrary(StringRef InstallName,
+                            ArchitectureSet Architectures);
+
+  /// Get the list of re-exported libraries.
+  ///
+  /// \return Returns a list of re-exported libraries.
+  const std::vector<InterfaceFileRef> &reexportedLibraries() const {
+    return ReexportedLibraries;
+  }
+
+  /// Add an architecture/UUID pair.
+  ///
+  /// \param Arch The architecture for which this applies.
+  /// \param UUID The UUID of the library for the specified architecture.
+  void addUUID(Architecture Arch, StringRef UUID);
+
+  /// Add an architecture/UUID pair.
+  ///
+  /// \param Arch The architecture for which this applies.
+  /// \param UUID The UUID of the library for the specified architecture.
+  void addUUID(Architecture Arch, uint8_t UUID[16]);
+
+  /// Get the list of architecture/UUID pairs.
+  ///
+  /// \return Returns a list of architecture/UUID pairs.
+  const std::vector<std::pair<Architecture, std::string>> &uuids() const {
+    return UUIDs;
+  }
+
+  /// Add a symbol to the symbols list or extend an existing one.
+  void addSymbol(SymbolKind Kind, StringRef Name, ArchitectureSet Architectures,
+                 SymbolFlags Flags = SymbolFlags::None);
+
+  using SymbolMapType = DenseMap<SymbolsMapKey, Symbol *>;
+  struct const_symbol_iterator
+      : public iterator_adaptor_base<
+            const_symbol_iterator, SymbolMapType::const_iterator,
+            std::forward_iterator_tag, const Symbol *, ptrdiff_t,
+            const Symbol *, const Symbol *> {
+    const_symbol_iterator() = default;
+
+    template <typename U>
+    const_symbol_iterator(U &&u)
+        : iterator_adaptor_base(std::forward<U &&>(u)) {}
+
+    reference operator*() const { return I->second; }
+    pointer operator->() const { return I->second; }
+  };
+  using const_symbol_range = iterator_range<const_symbol_iterator>;
+
+  // Custom iterator to return only exported symbols.
+  struct const_export_iterator
+      : public iterator_adaptor_base<
+            const_export_iterator, const_symbol_iterator,
+            std::forward_iterator_tag, const Symbol *> {
+    const_symbol_iterator _end;
+
+    void skipToNextSymbol() {
+      while (I != _end && I->isUndefined())
+        ++I;
+    }
+
+    const_export_iterator() = default;
+    template <typename U>
+    const_export_iterator(U &&it, U &&end)
+        : iterator_adaptor_base(std::forward<U &&>(it)),
+          _end(std::forward<U &&>(end)) {
+      skipToNextSymbol();
+    }
+
+    const_export_iterator &operator++() {
+      ++I;
+      skipToNextSymbol();
+      return *this;
+    }
+
+    const_export_iterator operator++(int) {
+      const_export_iterator tmp(*this);
+      ++(*this);
+      return tmp;
+    }
+  };
+  using const_export_range = llvm::iterator_range<const_export_iterator>;
+
+  // Custom iterator to return only undefined symbols.
+  struct const_undefined_iterator
+      : public iterator_adaptor_base<
+            const_undefined_iterator, const_symbol_iterator,
+            std::forward_iterator_tag, const Symbol *> {
+    const_symbol_iterator _end;
+
+    void skipToNextSymbol() {
+      while (I != _end && !I->isUndefined())
+        ++I;
+    }
+
+    const_undefined_iterator() = default;
+    template <typename U>
+    const_undefined_iterator(U &&it, U &&end)
+        : iterator_adaptor_base(std::forward<U &&>(it)),
+          _end(std::forward<U &&>(end)) {
+      skipToNextSymbol();
+    }
+
+    const_undefined_iterator &operator++() {
+      ++I;
+      skipToNextSymbol();
+      return *this;
+    }
+
+    const_undefined_iterator operator++(int) {
+      const_undefined_iterator tmp(*this);
+      ++(*this);
+      return tmp;
+    }
+  };
+  using const_undefined_range = llvm::iterator_range<const_undefined_iterator>;
+
+  const_symbol_range symbols() const {
+    return {Symbols.begin(), Symbols.end()};
+  }
+  const_export_range exports() const {
+    return {{Symbols.begin(), Symbols.end()}, {Symbols.end(), Symbols.end()}};
+  }
+  const_undefined_range undefineds() const {
+    return {{Symbols.begin(), Symbols.end()}, {Symbols.end(), Symbols.end()}};
+  }
+
+private:
+  llvm::BumpPtrAllocator Allocator;
+  StringRef copyString(StringRef String) {
+    if (String.empty())
+      return {};
+
+    void *Ptr = Allocator.Allocate(String.size(), 1);
+    memcpy(Ptr, String.data(), String.size());
+    return StringRef(reinterpret_cast<const char *>(Ptr), String.size());
+  }
+
+  std::string Path;
+  FileType FileKind;
+  PlatformKind Platform;
+  ArchitectureSet Architectures;
+  std::string InstallName;
+  PackedVersion CurrentVersion;
+  PackedVersion CompatibilityVersion;
+  uint8_t SwiftABIVersion{0};
+  bool IsTwoLevelNamespace{false};
+  bool IsAppExtensionSafe{false};
+  bool IsInstallAPI{false};
+  ObjCConstraintType ObjcConstraint = ObjCConstraintType::None;
+  std::string ParentUmbrella;
+  std::vector<InterfaceFileRef> AllowableClients;
+  std::vector<InterfaceFileRef> ReexportedLibraries;
+  std::vector<std::pair<Architecture, std::string>> UUIDs;
+  SymbolMapType Symbols;
+};
+
+} // end namespace MachO.
+} // end namespace llvm.
+
+#endif // LLVM_TEXTAPI_MACHO_INTERFACE_FILE_H
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/PackedVersion.h b/linux-x64/clang/include/llvm/TextAPI/MachO/PackedVersion.h
new file mode 100644
index 0000000..2d01380
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/PackedVersion.h
@@ -0,0 +1,64 @@
+//===- llvm/TextAPI/MachO/PackedVersion.h - PackedVersion -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Defines the Mach-O packed version format.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_MACHO_PACKED_VERSION_H
+#define LLVM_TEXTAPI_MACHO_PACKED_VERSION_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+namespace MachO {
+
+class PackedVersion {
+  uint32_t Version{0};
+
+public:
+  constexpr PackedVersion() = default;
+  explicit constexpr PackedVersion(uint32_t RawVersion) : Version(RawVersion) {}
+  PackedVersion(unsigned Major, unsigned Minor, unsigned Subminor)
+      : Version((Major << 16) | ((Minor & 0xff) << 8) | (Subminor & 0xff)) {}
+
+  bool empty() const { return Version == 0; }
+
+  /// Retrieve the major version number.
+  unsigned getMajor() const { return Version >> 16; }
+
+  /// Retrieve the minor version number, if provided.
+  unsigned getMinor() const { return (Version >> 8) & 0xff; }
+
+  /// Retrieve the subminor version number, if provided.
+  unsigned getSubminor() const { return Version & 0xff; }
+
+  bool parse32(StringRef Str);
+  std::pair<bool, bool> parse64(StringRef Str);
+
+  bool operator<(const PackedVersion &O) const { return Version < O.Version; }
+
+  bool operator==(const PackedVersion &O) const { return Version == O.Version; }
+
+  bool operator!=(const PackedVersion &O) const { return Version != O.Version; }
+
+  uint32_t rawValue() const { return Version; }
+
+  void print(raw_ostream &OS) const;
+};
+
+inline raw_ostream &operator<<(raw_ostream &OS, const PackedVersion &Version) {
+  Version.print(OS);
+  return OS;
+}
+
+} // end namespace MachO.
+} // end namespace llvm.
+
+#endif // LLVM_TEXTAPI_MACHO_PACKED_VERSION_H
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/Symbol.h b/linux-x64/clang/include/llvm/TextAPI/MachO/Symbol.h
new file mode 100644
index 0000000..3c7ff5e
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/Symbol.h
@@ -0,0 +1,96 @@
+//===- llvm/TextAPI/Symbol.h - TAPI Symbol ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_MACHO_SYMBOL_H
+#define LLVM_TEXTAPI_MACHO_SYMBOL_H
+
+#include "llvm/ADT/BitmaskEnum.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/TextAPI/MachO/ArchitectureSet.h"
+
+namespace llvm {
+namespace MachO {
+
+// clang-format off
+
+/// Symbol flags.
+enum class SymbolFlags : uint8_t {
+  /// No flags
+  None             = 0,
+
+  /// Thread-local value symbol
+  ThreadLocalValue = 1U << 0,
+
+  /// Weak defined symbol
+  WeakDefined      = 1U << 1,
+
+  /// Weak referenced symbol
+  WeakReferenced   = 1U << 2,
+
+  /// Undefined
+  Undefined        = 1U << 3,
+
+  LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/Undefined),
+};
+
+// clang-format on
+
+enum class SymbolKind : uint8_t {
+  GlobalSymbol,
+  ObjectiveCClass,
+  ObjectiveCClassEHType,
+  ObjectiveCInstanceVariable,
+};
+
+class Symbol {
+public:
+  constexpr Symbol(SymbolKind Kind, StringRef Name,
+                   ArchitectureSet Architectures, SymbolFlags Flags)
+      : Name(Name), Architectures(Architectures), Kind(Kind), Flags(Flags) {}
+
+  SymbolKind getKind() const { return Kind; }
+  StringRef getName() const { return Name; }
+  ArchitectureSet getArchitectures() const { return Architectures; }
+  void addArchitectures(ArchitectureSet Archs) { Architectures |= Archs; }
+  SymbolFlags getFlags() const { return Flags; }
+
+  bool isWeakDefined() const {
+    return (Flags & SymbolFlags::WeakDefined) == SymbolFlags::WeakDefined;
+  }
+
+  bool isWeakReferenced() const {
+    return (Flags & SymbolFlags::WeakReferenced) == SymbolFlags::WeakReferenced;
+  }
+
+  bool isThreadLocalValue() const {
+    return (Flags & SymbolFlags::ThreadLocalValue) ==
+           SymbolFlags::ThreadLocalValue;
+  }
+
+  bool isUndefined() const {
+    return (Flags & SymbolFlags::Undefined) == SymbolFlags::Undefined;
+  }
+
+#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
+  void dump(raw_ostream &OS) const;
+  void dump() const { dump(llvm::errs()); }
+#endif
+
+private:
+  StringRef Name;
+  ArchitectureSet Architectures;
+  SymbolKind Kind;
+  SymbolFlags Flags;
+};
+
+} // end namespace MachO.
+} // end namespace llvm.
+
+#endif // LLVM_TEXTAPI_MACHO_SYMBOL_H
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/TextAPIReader.h b/linux-x64/clang/include/llvm/TextAPI/MachO/TextAPIReader.h
new file mode 100644
index 0000000..6d9c09d
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/TextAPIReader.h
@@ -0,0 +1,34 @@
+//===--- TextAPIReader.h - Text API Reader ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_MACHO_READER_H
+#define LLVM_TEXTAPI_MACHO_READER_H
+
+#include "llvm/Support/Error.h"
+#include "llvm/Support/MemoryBuffer.h"
+
+namespace llvm {
+namespace MachO {
+
+class InterfaceFile;
+
+class TextAPIReader {
+public:
+  static Expected<std::unique_ptr<InterfaceFile>>
+  get(std::unique_ptr<MemoryBuffer> InputBuffer);
+
+  static Expected<std::unique_ptr<InterfaceFile>>
+  getUnmanaged(llvm::MemoryBuffer *InputBuffer);
+
+  TextAPIReader() = delete;
+};
+
+} // end namespace MachO.
+} // end namespace llvm.
+
+#endif // LLVM_TEXTAPI_MACHO_READER_H
diff --git a/linux-x64/clang/include/llvm/TextAPI/MachO/TextAPIWriter.h b/linux-x64/clang/include/llvm/TextAPI/MachO/TextAPIWriter.h
new file mode 100644
index 0000000..2a45bb8
--- /dev/null
+++ b/linux-x64/clang/include/llvm/TextAPI/MachO/TextAPIWriter.h
@@ -0,0 +1,29 @@
+//===--- TextAPIWriter.h - Text API Writer ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_MACHO_WRITER_H
+#define LLVM_TEXTAPI_MACHO_WRITER_H
+
+#include "llvm/Support/MemoryBuffer.h"
+
+namespace llvm {
+namespace MachO {
+
+class InterfaceFile;
+
+class TextAPIWriter {
+public:
+  TextAPIWriter() = delete;
+
+  static Error writeToStream(raw_ostream &os, const InterfaceFile &);
+};
+
+} // end namespace MachO.
+} // end namespace llvm.
+
+#endif // LLVM_TEXTAPI_MACHO_WRITER_H
diff --git a/linux-x64/clang/include/llvm/ToolDrivers/llvm-lib/LibDriver.h b/linux-x64/clang/include/llvm/ToolDrivers/llvm-lib/LibDriver.h
index 7d0735f..23a2fc3 100644
--- a/linux-x64/clang/include/llvm/ToolDrivers/llvm-lib/LibDriver.h
+++ b/linux-x64/clang/include/llvm/ToolDrivers/llvm-lib/LibDriver.h
@@ -18,6 +18,7 @@
 template <typename T> class ArrayRef;
 
 int libDriverMain(ArrayRef<const char *> ARgs);
+
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO.h b/linux-x64/clang/include/llvm/Transforms/IPO.h
index 4f7a1ba..de0c80f 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO.h
@@ -182,6 +182,10 @@
 ModulePass *
 createBlockExtractorPass(const SmallVectorImpl<BasicBlock *> &BlocksToExtract,
                          bool EraseFunctions);
+ModulePass *
+createBlockExtractorPass(const SmallVectorImpl<SmallVector<BasicBlock *, 16>>
+                             &GroupsOfBlocksToExtract,
+                         bool EraseFunctions);
 
 /// createStripDeadPrototypesPass - This pass removes any function declarations
 /// (prototypes) that are not used.
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO/Attributor.h b/linux-x64/clang/include/llvm/Transforms/IPO/Attributor.h
new file mode 100644
index 0000000..8f0f9eb
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/IPO/Attributor.h
@@ -0,0 +1,685 @@
+//===- Attributor.h --- Module-wide attribute deduction ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Attributor: An inter procedural (abstract) "attribute" deduction framework.
+//
+// The Attributor framework is an inter procedural abstract analysis (fixpoint
+// iteration analysis). The goal is to allow easy deduction of new attributes as
+// well as information exchange between abstract attributes in-flight.
+//
+// The Attributor class is the driver and the link between the various abstract
+// attributes. The Attributor will iterate until a fixpoint state is reached by
+// all abstract attributes in-flight, or until it will enforce a pessimistic fix
+// point because an iteration limit is reached.
+//
+// Abstract attributes, derived from the AbstractAttribute class, actually
+// describe properties of the code. They can correspond to actual LLVM-IR
+// attributes, or they can be more general, ultimately unrelated to LLVM-IR
+// attributes. The latter is useful when an abstract attributes provides
+// information to other abstract attributes in-flight but we might not want to
+// manifest the information. The Attributor allows to query in-flight abstract
+// attributes through the `Attributor::getAAFor` method (see the method
+// description for an example). If the method is used by an abstract attribute
+// P, and it results in an abstract attribute Q, the Attributor will
+// automatically capture a potential dependence from Q to P. This dependence
+// will cause P to be reevaluated whenever Q changes in the future.
+//
+// The Attributor will only reevaluated abstract attributes that might have
+// changed since the last iteration. That means that the Attribute will not
+// revisit all instructions/blocks/functions in the module but only query
+// an update from a subset of the abstract attributes.
+//
+// The update method `AbstractAttribute::updateImpl` is implemented by the
+// specific "abstract attribute" subclasses. The method is invoked whenever the
+// currently assumed state (see the AbstractState class) might not be valid
+// anymore. This can, for example, happen if the state was dependent on another
+// abstract attribute that changed. In every invocation, the update method has
+// to adjust the internal state of an abstract attribute to a point that is
+// justifiable by the underlying IR and the current state of abstract attributes
+// in-flight. Since the IR is given and assumed to be valid, the information
+// derived from it can be assumed to hold. However, information derived from
+// other abstract attributes is conditional on various things. If the justifying
+// state changed, the `updateImpl` has to revisit the situation and potentially
+// find another justification or limit the optimistic assumes made.
+//
+// Change is the key in this framework. Until a state of no-change, thus a
+// fixpoint, is reached, the Attributor will query the abstract attributes
+// in-flight to re-evaluate their state. If the (current) state is too
+// optimistic, hence it cannot be justified anymore through other abstract
+// attributes or the state of the IR, the state of the abstract attribute will
+// have to change. Generally, we assume abstract attribute state to be a finite
+// height lattice and the update function to be monotone. However, these
+// conditions are not enforced because the iteration limit will guarantee
+// termination. If an optimistic fixpoint is reached, or a pessimistic fix
+// point is enforced after a timeout, the abstract attributes are tasked to
+// manifest their result in the IR for passes to come.
+//
+// Attribute manifestation is not mandatory. If desired, there is support to
+// generate a single LLVM-IR attribute already in the AbstractAttribute base
+// class. In the simplest case, a subclass overloads
+// `AbstractAttribute::getManifestPosition()` and
+// `AbstractAttribute::getAttrKind()` to return the appropriate values. The
+// Attributor manifestation framework will then create and place a new attribute
+// if it is allowed to do so (based on the abstract state). Other use cases can
+// be achieved by overloading other abstract attribute methods.
+//
+//
+// The "mechanics" of adding a new "abstract attribute":
+// - Define a class (transitively) inheriting from AbstractAttribute and one
+//   (which could be the same) that (transitively) inherits from AbstractState.
+//   For the latter, consider the already available BooleanState and
+//   IntegerState if they fit your needs, e.g., you require only a bit-encoding.
+// - Implement all pure methods. Also use overloading if the attribute is not
+//   conforming with the "default" behavior: A (set of) LLVM-IR attribute(s) for
+//   an argument, call site argument, function return value, or function. See
+//   the class and method descriptions for more information on the two
+//   "Abstract" classes and their respective methods.
+// - Register opportunities for the new abstract attribute in the
+//   `Attributor::identifyDefaultAbstractAttributes` method if it should be
+//   counted as a 'default' attribute.
+// - Add sufficient tests.
+// - Add a Statistics object for bookkeeping. If it is a simple (set of)
+//   attribute(s) manifested through the Attributor manifestation framework, see
+//   the bookkeeping function in Attributor.cpp.
+// - If instructions with a certain opcode are interesting to the attribute, add
+//   that opcode to the switch in `Attributor::identifyAbstractAttributes`. This
+//   will make it possible to query all those instructions through the
+//   `InformationCache::getOpcodeInstMapForFunction` interface and eliminate the
+//   need to traverse the IR repeatedly.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_IPO_ATTRIBUTOR_H
+#define LLVM_TRANSFORMS_IPO_ATTRIBUTOR_H
+
+#include "llvm/Analysis/LazyCallGraph.h"
+#include "llvm/IR/CallSite.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+struct AbstractAttribute;
+struct InformationCache;
+
+class Function;
+
+/// Simple enum class that forces the status to be spelled out explicitly.
+///
+///{
+enum class ChangeStatus {
+  CHANGED,
+  UNCHANGED,
+};
+
+ChangeStatus operator|(ChangeStatus l, ChangeStatus r);
+ChangeStatus operator&(ChangeStatus l, ChangeStatus r);
+///}
+
+/// The fixpoint analysis framework that orchestrates the attribute deduction.
+///
+/// The Attributor provides a general abstract analysis framework (guided
+/// fixpoint iteration) as well as helper functions for the deduction of
+/// (LLVM-IR) attributes. However, also other code properties can be deduced,
+/// propagated, and ultimately manifested through the Attributor framework. This
+/// is particularly useful if these properties interact with attributes and a
+/// co-scheduled deduction allows to improve the solution. Even if not, thus if
+/// attributes/properties are completely isolated, they should use the
+/// Attributor framework to reduce the number of fixpoint iteration frameworks
+/// in the code base. Note that the Attributor design makes sure that isolated
+/// attributes are not impacted, in any way, by others derived at the same time
+/// if there is no cross-reasoning performed.
+///
+/// The public facing interface of the Attributor is kept simple and basically
+/// allows abstract attributes to one thing, query abstract attributes
+/// in-flight. There are two reasons to do this:
+///    a) The optimistic state of one abstract attribute can justify an
+///       optimistic state of another, allowing to framework to end up with an
+///       optimistic (=best possible) fixpoint instead of one based solely on
+///       information in the IR.
+///    b) This avoids reimplementing various kinds of lookups, e.g., to check
+///       for existing IR attributes, in favor of a single lookups interface
+///       provided by an abstract attribute subclass.
+///
+/// NOTE: The mechanics of adding a new "concrete" abstract attribute are
+///       described in the file comment.
+struct Attributor {
+  ~Attributor() { DeleteContainerPointers(AllAbstractAttributes); }
+
+  /// Run the analyses until a fixpoint is reached or enforced (timeout).
+  ///
+  /// The attributes registered with this Attributor can be used after as long
+  /// as the Attributor is not destroyed (it owns the attributes now).
+  ///
+  /// \Returns CHANGED if the IR was changed, otherwise UNCHANGED.
+  ChangeStatus run();
+
+  /// Lookup an abstract attribute of type \p AAType anchored at value \p V and
+  /// argument number \p ArgNo. If no attribute is found and \p V is a call base
+  /// instruction, the called function is tried as a value next. Thus, the
+  /// returned abstract attribute might be anchored at the callee of \p V.
+  ///
+  /// This method is the only (supported) way an abstract attribute can retrieve
+  /// information from another abstract attribute. As an example, take an
+  /// abstract attribute that determines the memory access behavior for a
+  /// argument (readnone, readonly, ...). It should use `getAAFor` to get the
+  /// most optimistic information for other abstract attributes in-flight, e.g.
+  /// the one reasoning about the "captured" state for the argument or the one
+  /// reasoning on the memory access behavior of the function as a whole.
+  template <typename AAType>
+  const AAType *getAAFor(AbstractAttribute &QueryingAA, const Value &V,
+                         int ArgNo = -1) {
+    static_assert(std::is_base_of<AbstractAttribute, AAType>::value,
+                  "Cannot query an attribute with a type not derived from "
+                  "'AbstractAttribute'!");
+    assert(AAType::ID != Attribute::None &&
+           "Cannot lookup generic abstract attributes!");
+
+    // Determine the argument number automatically for llvm::Arguments.
+    if (auto *Arg = dyn_cast<Argument>(&V))
+      ArgNo = Arg->getArgNo();
+
+    // If a function was given together with an argument number, perform the
+    // lookup for the actual argument instead. Don't do it for variadic
+    // arguments.
+    if (ArgNo >= 0 && isa<Function>(&V) &&
+        cast<Function>(&V)->arg_size() > (size_t)ArgNo)
+      return getAAFor<AAType>(
+          QueryingAA, *(cast<Function>(&V)->arg_begin() + ArgNo), ArgNo);
+
+    // Lookup the abstract attribute of type AAType. If found, return it after
+    // registering a dependence of QueryingAA on the one returned attribute.
+    const auto &KindToAbstractAttributeMap = AAMap.lookup({&V, ArgNo});
+    if (AAType *AA = static_cast<AAType *>(
+            KindToAbstractAttributeMap.lookup(AAType::ID))) {
+      QueryMap[AA].insert(&QueryingAA);
+      return AA;
+    }
+
+    // If no abstract attribute was found and we look for a call site argument,
+    // defer to the actual argument instead.
+    ImmutableCallSite ICS(&V);
+    if (ICS && ICS.getCalledValue())
+      return getAAFor<AAType>(QueryingAA, *ICS.getCalledValue(), ArgNo);
+
+    // No matching attribute found
+    return nullptr;
+  }
+
+  /// Introduce a new abstract attribute into the fixpoint analysis.
+  ///
+  /// Note that ownership of the attribute is given to the Attributor. It will
+  /// invoke delete for the Attributor on destruction of the Attributor.
+  ///
+  /// Attributes are identified by
+  ///  (1) their anchored value (see AA.getAnchoredValue()),
+  ///  (2) their argument number (\p ArgNo, or Argument::getArgNo()), and
+  ///  (3) their default attribute kind (see AAType::ID).
+  template <typename AAType> AAType &registerAA(AAType &AA, int ArgNo = -1) {
+    static_assert(std::is_base_of<AbstractAttribute, AAType>::value,
+                  "Cannot register an attribute with a type not derived from "
+                  "'AbstractAttribute'!");
+
+    // Determine the anchor value and the argument number which are used to
+    // lookup the attribute together with AAType::ID.
+    Value &AnchoredVal = AA.getAnchoredValue();
+    if (auto *Arg = dyn_cast<Argument>(&AnchoredVal))
+      ArgNo = Arg->getArgNo();
+
+    // Put the attribute in the lookup map structure and the container we use to
+    // keep track of all attributes.
+    AAMap[{&AnchoredVal, ArgNo}][AAType::ID] = &AA;
+    AllAbstractAttributes.push_back(&AA);
+    return AA;
+  }
+
+  /// Determine opportunities to derive 'default' attributes in \p F and create
+  /// abstract attribute objects for them.
+  ///
+  /// \param F The function that is checked for attribute opportunities.
+  /// \param InfoCache A cache for information queryable by the new attributes.
+  /// \param Whitelist If not null, a set limiting the attribute opportunities.
+  ///
+  /// Note that abstract attribute instances are generally created even if the
+  /// IR already contains the information they would deduce. The most important
+  /// reason for this is the single interface, the one of the abstract attribute
+  /// instance, which can be queried without the need to look at the IR in
+  /// various places.
+  void identifyDefaultAbstractAttributes(
+      Function &F, InformationCache &InfoCache,
+      DenseSet</* Attribute::AttrKind */ unsigned> *Whitelist = nullptr);
+
+private:
+  /// The set of all abstract attributes.
+  ///{
+  using AAVector = SmallVector<AbstractAttribute *, 64>;
+  AAVector AllAbstractAttributes;
+  ///}
+
+  /// A nested map to lookup abstract attributes based on the anchored value and
+  /// an argument positions (or -1) on the outer level, and attribute kinds
+  /// (Attribute::AttrKind) on the inner level.
+  ///{
+  using KindToAbstractAttributeMap = DenseMap<unsigned, AbstractAttribute *>;
+  DenseMap<std::pair<const Value *, int>, KindToAbstractAttributeMap> AAMap;
+  ///}
+
+  /// A map from abstract attributes to the ones that queried them through calls
+  /// to the getAAFor<...>(...) method.
+  ///{
+  using QueryMapTy =
+      DenseMap<AbstractAttribute *, SetVector<AbstractAttribute *>>;
+  QueryMapTy QueryMap;
+  ///}
+};
+
+/// Data structure to hold cached (LLVM-IR) information.
+///
+/// All attributes are given an InformationCache object at creation time to
+/// avoid inspection of the IR by all of them individually. This default
+/// InformationCache will hold information required by 'default' attributes,
+/// thus the ones deduced when Attributor::identifyDefaultAbstractAttributes(..)
+/// is called.
+///
+/// If custom abstract attributes, registered manually through
+/// Attributor::registerAA(...), need more information, especially if it is not
+/// reusable, it is advised to inherit from the InformationCache and cast the
+/// instance down in the abstract attributes.
+struct InformationCache {
+  /// A map type from opcodes to instructions with this opcode.
+  using OpcodeInstMapTy = DenseMap<unsigned, SmallVector<Instruction *, 32>>;
+
+  /// Return the map that relates "interesting" opcodes with all instructions
+  /// with that opcode in \p F.
+  OpcodeInstMapTy &getOpcodeInstMapForFunction(Function &F) {
+    return FuncInstOpcodeMap[&F];
+  }
+
+  /// A vector type to hold instructions.
+  using InstructionVectorTy = std::vector<Instruction *>;
+
+  /// Return the instructions in \p F that may read or write memory.
+  InstructionVectorTy &getReadOrWriteInstsForFunction(Function &F) {
+    return FuncRWInstsMap[&F];
+  }
+
+private:
+  /// A map type from functions to opcode to instruction maps.
+  using FuncInstOpcodeMapTy = DenseMap<Function *, OpcodeInstMapTy>;
+
+  /// A map type from functions to their read or write instructions.
+  using FuncRWInstsMapTy = DenseMap<Function *, InstructionVectorTy>;
+
+  /// A nested map that remembers all instructions in a function with a certain
+  /// instruction opcode (Instruction::getOpcode()).
+  FuncInstOpcodeMapTy FuncInstOpcodeMap;
+
+  /// A map from functions to their instructions that may read or write memory.
+  FuncRWInstsMapTy FuncRWInstsMap;
+
+  /// Give the Attributor access to the members so
+  /// Attributor::identifyDefaultAbstractAttributes(...) can initialize them.
+  friend struct Attributor;
+};
+
+/// An interface to query the internal state of an abstract attribute.
+///
+/// The abstract state is a minimal interface that allows the Attributor to
+/// communicate with the abstract attributes about their internal state without
+/// enforcing or exposing implementation details, e.g., the (existence of an)
+/// underlying lattice.
+///
+/// It is sufficient to be able to query if a state is (1) valid or invalid, (2)
+/// at a fixpoint, and to indicate to the state that (3) an optimistic fixpoint
+/// was reached or (4) a pessimistic fixpoint was enforced.
+///
+/// All methods need to be implemented by the subclass. For the common use case,
+/// a single boolean state or a bit-encoded state, the BooleanState and
+/// IntegerState classes are already provided. An abstract attribute can inherit
+/// from them to get the abstract state interface and additional methods to
+/// directly modify the state based if needed. See the class comments for help.
+struct AbstractState {
+  virtual ~AbstractState() {}
+
+  /// Return if this abstract state is in a valid state. If false, no
+  /// information provided should be used.
+  virtual bool isValidState() const = 0;
+
+  /// Return if this abstract state is fixed, thus does not need to be updated
+  /// if information changes as it cannot change itself.
+  virtual bool isAtFixpoint() const = 0;
+
+  /// Indicate that the abstract state should converge to the optimistic state.
+  ///
+  /// This will usually make the optimistically assumed state the known to be
+  /// true state.
+  virtual void indicateOptimisticFixpoint() = 0;
+
+  /// Indicate that the abstract state should converge to the pessimistic state.
+  ///
+  /// This will usually revert the optimistically assumed state to the known to
+  /// be true state.
+  virtual void indicatePessimisticFixpoint() = 0;
+};
+
+/// Simple state with integers encoding.
+///
+/// The interface ensures that the assumed bits are always a subset of the known
+/// bits. Users can only add known bits and, except through adding known bits,
+/// they can only remove assumed bits. This should guarantee monotoniticy and
+/// thereby the existence of a fixpoint (if used corretly). The fixpoint is
+/// reached when the assumed and known state/bits are equal. Users can
+/// force/inidicate a fixpoint. If an optimistic one is indicated, the known
+/// state will catch up with the assumed one, for a pessimistic fixpoint it is
+/// the other way around.
+struct IntegerState : public AbstractState {
+  /// Undrlying integer type, we assume 32 bits to be enough.
+  using base_t = uint32_t;
+
+  /// Initialize the (best) state.
+  IntegerState(base_t BestState = ~0) : Assumed(BestState) {}
+
+  /// Return the worst possible representable state.
+  static constexpr base_t getWorstState() { return 0; }
+
+  /// See AbstractState::isValidState()
+  /// NOTE: For now we simply pretend that the worst possible state is invalid.
+  bool isValidState() const override { return Assumed != getWorstState(); }
+
+  /// See AbstractState::isAtFixpoint()
+  bool isAtFixpoint() const override { return Assumed == Known; }
+
+  /// See AbstractState::indicateOptimisticFixpoint(...)
+  void indicateOptimisticFixpoint() override { Known = Assumed; }
+
+  /// See AbstractState::indicatePessimisticFixpoint(...)
+  void indicatePessimisticFixpoint() override { Assumed = Known; }
+
+  /// Return the known state encoding
+  base_t getKnown() const { return Known; }
+
+  /// Return the assumed state encoding.
+  base_t getAssumed() const { return Assumed; }
+
+  /// Return true if the bits set in \p BitsEncoding are "known bits".
+  bool isKnown(base_t BitsEncoding) const {
+    return (Known & BitsEncoding) == BitsEncoding;
+  }
+
+  /// Return true if the bits set in \p BitsEncoding are "assumed bits".
+  bool isAssumed(base_t BitsEncoding) const {
+    return (Assumed & BitsEncoding) == BitsEncoding;
+  }
+
+  /// Add the bits in \p BitsEncoding to the "known bits".
+  IntegerState &addKnownBits(base_t Bits) {
+    // Make sure we never miss any "known bits".
+    Assumed |= Bits;
+    Known |= Bits;
+    return *this;
+  }
+
+  /// Remove the bits in \p BitsEncoding from the "assumed bits" if not known.
+  IntegerState &removeAssumedBits(base_t BitsEncoding) {
+    // Make sure we never loose any "known bits".
+    Assumed = (Assumed & ~BitsEncoding) | Known;
+    return *this;
+  }
+
+  /// Keep only "assumed bits" also set in \p BitsEncoding but all known ones.
+  IntegerState &intersectAssumedBits(base_t BitsEncoding) {
+    // Make sure we never loose any "known bits".
+    Assumed = (Assumed & BitsEncoding) | Known;
+    return *this;
+  }
+
+private:
+  /// The known state encoding in an integer of type base_t.
+  base_t Known = getWorstState();
+
+  /// The assumed state encoding in an integer of type base_t.
+  base_t Assumed;
+};
+
+/// Simple wrapper for a single bit (boolean) state.
+struct BooleanState : public IntegerState {
+  BooleanState() : IntegerState(1){};
+};
+
+/// Base struct for all "concrete attribute" deductions.
+///
+/// The abstract attribute is a minimal interface that allows the Attributor to
+/// orchestrate the abstract/fixpoint analysis. The design allows to hide away
+/// implementation choices made for the subclasses but also to structure their
+/// implementation and simplify the use of other abstract attributes in-flight.
+///
+/// To allow easy creation of new attributes, most methods have default
+/// implementations. The ones that do not are generally straight forward, except
+/// `AbstractAttribute::updateImpl` which is the location of most reasoning
+/// associated with the abstract attribute. The update is invoked by the
+/// Attributor in case the situation used to justify the current optimistic
+/// state might have changed. The Attributor determines this automatically
+/// by monitoring the `Attributor::getAAFor` calls made by abstract attributes.
+///
+/// The `updateImpl` method should inspect the IR and other abstract attributes
+/// in-flight to justify the best possible (=optimistic) state. The actual
+/// implementation is, similar to the underlying abstract state encoding, not
+/// exposed. In the most common case, the `updateImpl` will go through a list of
+/// reasons why its optimistic state is valid given the current information. If
+/// any combination of them holds and is sufficient to justify the current
+/// optimistic state, the method shall return UNCHAGED. If not, the optimistic
+/// state is adjusted to the situation and the method shall return CHANGED.
+///
+/// If the manifestation of the "concrete attribute" deduced by the subclass
+/// differs from the "default" behavior, which is a (set of) LLVM-IR
+/// attribute(s) for an argument, call site argument, function return value, or
+/// function, the `AbstractAttribute::manifest` method should be overloaded.
+///
+/// NOTE: If the state obtained via getState() is INVALID, thus if
+///       AbstractAttribute::getState().isValidState() returns false, no
+///       information provided by the methods of this class should be used.
+/// NOTE: The Attributor currently has certain limitations to what we can do.
+///       As a general rule of thumb, "concrete" abstract attributes should *for
+///       now* only perform "backward" information propagation. That means
+///       optimistic information obtained through abstract attributes should
+///       only be used at positions that precede the origin of the information
+///       with regards to the program flow. More practically, information can
+///       *now* be propagated from instructions to their enclosing function, but
+///       *not* from call sites to the called function. The mechanisms to allow
+///       both directions will be added in the future.
+/// NOTE: The mechanics of adding a new "concrete" abstract attribute are
+///       described in the file comment.
+struct AbstractAttribute {
+
+  /// The positions attributes can be manifested in.
+  enum ManifestPosition {
+    MP_ARGUMENT,           ///< An attribute for a function argument.
+    MP_CALL_SITE_ARGUMENT, ///< An attribute for a call site argument.
+    MP_FUNCTION,           ///< An attribute for a function as a whole.
+    MP_RETURNED,           ///< An attribute for the function return value.
+  };
+
+  /// An abstract attribute associated with \p AssociatedVal and anchored at
+  /// \p AnchoredVal.
+  ///
+  /// \param AssociatedVal The value this abstract attribute is associated with.
+  /// \param AnchoredVal The value this abstract attributes is anchored at.
+  /// \param InfoCache Cached information accessible to the abstract attribute.
+  AbstractAttribute(Value *AssociatedVal, Value &AnchoredVal,
+                    InformationCache &InfoCache)
+      : AssociatedVal(AssociatedVal), AnchoredVal(AnchoredVal),
+        InfoCache(InfoCache) {}
+
+  /// An abstract attribute associated with and anchored at \p V.
+  AbstractAttribute(Value &V, InformationCache &InfoCache)
+      : AbstractAttribute(&V, V, InfoCache) {}
+
+  /// Virtual destructor.
+  virtual ~AbstractAttribute() {}
+
+  /// Initialize the state with the information in the Attributor \p A.
+  ///
+  /// This function is called by the Attributor once all abstract attributes
+  /// have been identified. It can and shall be used for task like:
+  ///  - identify existing knowledge in the IR and use it for the "known state"
+  ///  - perform any work that is not going to change over time, e.g., determine
+  ///    a subset of the IR, or attributes in-flight, that have to be looked at
+  ///    in the `updateImpl` method.
+  virtual void initialize(Attributor &A) {}
+
+  /// Return the internal abstract state for inspection.
+  virtual const AbstractState &getState() const = 0;
+
+  /// Return the value this abstract attribute is anchored with.
+  ///
+  /// The anchored value might not be the associated value if the latter is not
+  /// sufficient to determine where arguments will be manifested. This is mostly
+  /// the case for call site arguments as the value is not sufficient to
+  /// pinpoint them. Instead, we can use the call site as an anchor.
+  ///
+  ///{
+  Value &getAnchoredValue() { return AnchoredVal; }
+  const Value &getAnchoredValue() const { return AnchoredVal; }
+  ///}
+
+  /// Return the llvm::Function surrounding the anchored value.
+  ///
+  ///{
+  Function &getAnchorScope();
+  const Function &getAnchorScope() const;
+  ///}
+
+  /// Return the value this abstract attribute is associated with.
+  ///
+  /// The abstract state usually represents this value.
+  ///
+  ///{
+  virtual Value *getAssociatedValue() { return AssociatedVal; }
+  virtual const Value *getAssociatedValue() const { return AssociatedVal; }
+  ///}
+
+  /// Return the position this abstract state is manifested in.
+  virtual ManifestPosition getManifestPosition() const = 0;
+
+  /// Return the kind that identifies the abstract attribute implementation.
+  virtual Attribute::AttrKind getAttrKind() const = 0;
+
+  /// Return the deduced attributes in \p Attrs.
+  virtual void getDeducedAttributes(SmallVectorImpl<Attribute> &Attrs) const {
+    LLVMContext &Ctx = AnchoredVal.getContext();
+    Attrs.emplace_back(Attribute::get(Ctx, getAttrKind()));
+  }
+
+  /// Helper functions, for debug purposes only.
+  ///{
+  virtual void print(raw_ostream &OS) const;
+  void dump() const { print(dbgs()); }
+
+  /// This function should return the "summarized" assumed state as string.
+  virtual const std::string getAsStr() const = 0;
+  ///}
+
+  /// Allow the Attributor access to the protected methods.
+  friend struct Attributor;
+
+protected:
+  /// Hook for the Attributor to trigger an update of the internal state.
+  ///
+  /// If this attribute is already fixed, this method will return UNCHANGED,
+  /// otherwise it delegates to `AbstractAttribute::updateImpl`.
+  ///
+  /// \Return CHANGED if the internal state changed, otherwise UNCHANGED.
+  ChangeStatus update(Attributor &A);
+
+  /// Hook for the Attributor to trigger the manifestation of the information
+  /// represented by the abstract attribute in the LLVM-IR.
+  ///
+  /// \Return CHANGED if the IR was altered, otherwise UNCHANGED.
+  virtual ChangeStatus manifest(Attributor &A);
+
+  /// Return the internal abstract state for careful modification.
+  virtual AbstractState &getState() = 0;
+
+  /// The actual update/transfer function which has to be implemented by the
+  /// derived classes.
+  ///
+  /// If it is called, the environment has changed and we have to determine if
+  /// the current information is still valid or adjust it otherwise.
+  ///
+  /// \Return CHANGED if the internal state changed, otherwise UNCHANGED.
+  virtual ChangeStatus updateImpl(Attributor &A) = 0;
+
+  /// The value this abstract attribute is associated with.
+  Value *AssociatedVal;
+
+  /// The value this abstract attribute is anchored at.
+  Value &AnchoredVal;
+
+  /// The information cache accessible to this abstract attribute.
+  InformationCache &InfoCache;
+};
+
+/// Forward declarations of output streams for debug purposes.
+///
+///{
+raw_ostream &operator<<(raw_ostream &OS, const AbstractAttribute &AA);
+raw_ostream &operator<<(raw_ostream &OS, ChangeStatus S);
+raw_ostream &operator<<(raw_ostream &OS, AbstractAttribute::ManifestPosition);
+raw_ostream &operator<<(raw_ostream &OS, const AbstractState &State);
+///}
+
+struct AttributorPass : public PassInfoMixin<AttributorPass> {
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+};
+
+Pass *createAttributorLegacyPass();
+
+/// ----------------------------------------------------------------------------
+///                       Abstract Attribute Classes
+/// ----------------------------------------------------------------------------
+
+/// An abstract attribute for the returned values of a function.
+struct AAReturnedValues : public AbstractAttribute {
+  /// See AbstractAttribute::AbstractAttribute(...).
+  AAReturnedValues(Function &F, InformationCache &InfoCache)
+      : AbstractAttribute(F, InfoCache) {}
+
+  /// Check \p Pred on all returned values.
+  ///
+  /// This method will evaluate \p Pred on returned values and return
+  /// true if (1) all returned values are known, and (2) \p Pred returned true
+  /// for all returned values.
+  virtual bool
+  checkForallReturnedValues(std::function<bool(Value &)> &Pred) const = 0;
+
+  /// See AbstractAttribute::getAttrKind()
+  virtual Attribute::AttrKind getAttrKind() const override { return ID; }
+
+  /// The identifier used by the Attributor for this class of attributes.
+  static constexpr Attribute::AttrKind ID = Attribute::Returned;
+};
+
+struct AANoUnwind : public AbstractAttribute {
+    /// An abstract interface for all nosync attributes.
+    AANoUnwind(Value &V, InformationCache &InfoCache)
+        : AbstractAttribute(V, InfoCache) {}
+
+    /// See AbstractAttribute::getAttrKind()/
+    virtual Attribute::AttrKind getAttrKind() const override { return ID; }
+
+    static constexpr Attribute::AttrKind ID = Attribute::NoUnwind;
+
+    /// Returns true if nounwind is assumed.
+    virtual bool isAssumedNoUnwind() const = 0;
+
+    /// Returns true if nounwind is known.
+    virtual bool isKnownNoUnwind() const = 0;
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_IPO_FUNCTIONATTRS_H
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO/Internalize.h b/linux-x64/clang/include/llvm/Transforms/IPO/Internalize.h
index a7efd3e..6c1e19e 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO/Internalize.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO/Internalize.h
@@ -21,11 +21,11 @@
 #ifndef LLVM_TRANSFORMS_IPO_INTERNALIZE_H
 #define LLVM_TRANSFORMS_IPO_INTERNALIZE_H
 
+#include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/StringSet.h"
 #include "llvm/IR/GlobalValue.h"
 #include "llvm/IR/PassManager.h"
 #include <functional>
-#include <set>
 
 namespace llvm {
 class Module;
@@ -44,11 +44,11 @@
   /// Internalize GV if it is possible to do so, i.e. it is not externally
   /// visible and is not a member of an externally visible comdat.
   bool maybeInternalize(GlobalValue &GV,
-                        const std::set<const Comdat *> &ExternalComdats);
+                        const DenseSet<const Comdat *> &ExternalComdats);
   /// If GV is part of a comdat and is externally visible, keep track of its
   /// comdat so that we don't internalize any of its members.
   void checkComdatVisibility(GlobalValue &GV,
-                             std::set<const Comdat *> &ExternalComdats);
+                             DenseSet<const Comdat *> &ExternalComdats);
 
 public:
   InternalizePass();
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO/PassManagerBuilder.h b/linux-x64/clang/include/llvm/Transforms/IPO/PassManagerBuilder.h
index f82cfdc..63ff00a 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO/PassManagerBuilder.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO/PassManagerBuilder.h
@@ -57,7 +57,7 @@
 ///   ...
 class PassManagerBuilder {
 public:
-  /// Extensions are passed the builder itself (so they can see how it is
+  /// Extensions are passed to the builder itself (so they can see how it is
   /// configured) as well as the pass manager to add stuff to.
   typedef std::function<void(const PassManagerBuilder &Builder,
                              legacy::PassManagerBase &PM)>
@@ -112,6 +112,16 @@
     /// passes at the end of the main CallGraphSCC passes and before any
     /// function simplification passes run by CGPassManager.
     EP_CGSCCOptimizerLate,
+
+    /// EP_FullLinkTimeOptimizationEarly - This extensions point allow adding
+    /// passes that
+    /// run at Link Time, before Full Link Time Optimization.
+    EP_FullLinkTimeOptimizationEarly,
+
+    /// EP_FullLinkTimeOptimizationLast - This extensions point allow adding
+    /// passes that
+    /// run at Link Time, after Full Link Time Optimization.
+    EP_FullLinkTimeOptimizationLast,
   };
 
   /// The Optimization Level - Specify the basic optimization level.
@@ -142,13 +152,14 @@
   const ModuleSummaryIndex *ImportSummary = nullptr;
 
   bool DisableTailCalls;
-  bool DisableUnitAtATime;
   bool DisableUnrollLoops;
   bool SLPVectorize;
   bool LoopVectorize;
+  bool LoopsInterleaved;
   bool RerollLoops;
   bool NewGVN;
   bool DisableGVNLoadPRE;
+  bool ForgetAllSCEVInLoopUnroll;
   bool VerifyInput;
   bool VerifyOutput;
   bool MergeFunctions;
@@ -156,9 +167,15 @@
   bool PrepareForThinLTO;
   bool PerformThinLTO;
   bool DivergentTarget;
+  unsigned LicmMssaOptCap;
+  unsigned LicmMssaNoAccForPromotionCap;
 
   /// Enable profile instrumentation pass.
   bool EnablePGOInstrGen;
+  /// Enable profile context sensitive instrumentation pass.
+  bool EnablePGOCSInstrGen;
+  /// Enable profile context sensitive profile use pass.
+  bool EnablePGOCSInstrUse;
   /// Profile data file name that the instrumentation will be written to.
   std::string PGOInstrGen;
   /// Path of the profile data file.
@@ -185,7 +202,7 @@
   void addInitialAliasAnalysisPasses(legacy::PassManagerBase &PM) const;
   void addLTOOptimizationPasses(legacy::PassManagerBase &PM);
   void addLateLTOOptimizationPasses(legacy::PassManagerBase &PM);
-  void addPGOInstrPasses(legacy::PassManagerBase &MPM);
+  void addPGOInstrPasses(legacy::PassManagerBase &MPM, bool IsCS);
   void addFunctionSimplificationPasses(legacy::PassManagerBase &MPM);
   void addInstructionCombiningPass(legacy::PassManagerBase &MPM) const;
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation.h
index 29cb281..8b70d29 100644
--- a/linux-x64/clang/include/llvm/Transforms/Instrumentation.h
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation.h
@@ -87,10 +87,14 @@
 ModulePass *createGCOVProfilerPass(const GCOVOptions &Options =
                                    GCOVOptions::getDefault());
 
-// PGO Instrumention
-ModulePass *createPGOInstrumentationGenLegacyPass();
+// PGO Instrumention. Parameter IsCS indicates if this is the context senstive
+// instrumentation.
+ModulePass *createPGOInstrumentationGenLegacyPass(bool IsCS = false);
 ModulePass *
-createPGOInstrumentationUseLegacyPass(StringRef Filename = StringRef(""));
+createPGOInstrumentationUseLegacyPass(StringRef Filename = StringRef(""),
+                                      bool IsCS = false);
+ModulePass *createPGOInstrumentationGenCreateVarLegacyPass(
+    StringRef CSInstrName = StringRef(""));
 ModulePass *createPGOIndirectCallPromotionLegacyPass(bool InLTO = false,
                                                      bool SamplePGO = false);
 FunctionPass *createPGOMemOPSizeOptLegacyPass();
@@ -132,48 +136,27 @@
   // Use atomic profile counter increments.
   bool Atomic = false;
 
+  // Use BFI to guide register promotion
+  bool UseBFIInPromotion = false;
+
   // Name of the profile file to use as output
   std::string InstrProfileOutput;
 
   InstrProfOptions() = default;
 };
 
-/// Insert frontend instrumentation based profiling.
+/// Insert frontend instrumentation based profiling. Parameter IsCS indicates if
+// this is the context senstive instrumentation.
 ModulePass *createInstrProfilingLegacyPass(
-    const InstrProfOptions &Options = InstrProfOptions());
+    const InstrProfOptions &Options = InstrProfOptions(), bool IsCS = false);
 
-// Insert AddressSanitizer (address sanity checking) instrumentation
-FunctionPass *createAddressSanitizerFunctionPass(bool CompileKernel = false,
-                                                 bool Recover = false,
-                                                 bool UseAfterScope = false);
-ModulePass *createAddressSanitizerModulePass(bool CompileKernel = false,
-                                             bool Recover = false,
-                                             bool UseGlobalsGC = true,
-                                             bool UseOdrIndicator = true);
-
-FunctionPass *createHWAddressSanitizerPass(bool CompileKernel = false,
-                                           bool Recover = false);
+ModulePass *createInstrOrderFilePass();
 
 // Insert DataFlowSanitizer (dynamic data flow analysis) instrumentation
 ModulePass *createDataFlowSanitizerPass(
     const std::vector<std::string> &ABIListFiles = std::vector<std::string>(),
     void *(*getArgTLS)() = nullptr, void *(*getRetValTLS)() = nullptr);
 
-// Options for EfficiencySanitizer sub-tools.
-struct EfficiencySanitizerOptions {
-  enum Type {
-    ESAN_None = 0,
-    ESAN_CacheFrag,
-    ESAN_WorkingSet,
-  } ToolType = ESAN_None;
-
-  EfficiencySanitizerOptions() = default;
-};
-
-// Insert EfficiencySanitizer instrumentation.
-ModulePass *createEfficiencySanitizerPass(
-    const EfficiencySanitizerOptions &Options = EfficiencySanitizerOptions());
-
 // Options for sanitizer coverage instrumentation.
 struct SanitizerCoverageOptions {
   enum Type {
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation/AddressSanitizer.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
new file mode 100644
index 0000000..40007a9
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
@@ -0,0 +1,143 @@
+//===--------- Definition of the AddressSanitizer class ---------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the AddressSanitizer class which is a port of the legacy
+// AddressSanitizer pass to use the new PassManager infrastructure.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_ADDRESSSANITIZERPASS_H
+#define LLVM_TRANSFORMS_INSTRUMENTATION_ADDRESSSANITIZERPASS_H
+
+#include "llvm/IR/Function.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+/// Frontend-provided metadata for source location.
+struct LocationMetadata {
+  StringRef Filename;
+  int LineNo = 0;
+  int ColumnNo = 0;
+
+  LocationMetadata() = default;
+
+  bool empty() const { return Filename.empty(); }
+  void parse(MDNode *MDN);
+};
+
+/// Frontend-provided metadata for global variables.
+class GlobalsMetadata {
+public:
+  struct Entry {
+    LocationMetadata SourceLoc;
+    StringRef Name;
+    bool IsDynInit = false;
+    bool IsBlacklisted = false;
+
+    Entry() = default;
+  };
+
+  /// Create a default uninitialized GlobalsMetadata instance.
+  GlobalsMetadata() = default;
+
+  /// Create an initialized GlobalsMetadata instance.
+  GlobalsMetadata(Module &M);
+
+  /// Returns metadata entry for a given global.
+  Entry get(GlobalVariable *G) const {
+    auto Pos = Entries.find(G);
+    return (Pos != Entries.end()) ? Pos->second : Entry();
+  }
+
+  /// Handle invalidation from the pass manager.
+  /// These results are never invalidated.
+  bool invalidate(Module &, const PreservedAnalyses &,
+                  ModuleAnalysisManager::Invalidator &) {
+    return false;
+  }
+  bool invalidate(Function &, const PreservedAnalyses &,
+                  FunctionAnalysisManager::Invalidator &) {
+    return false;
+  }
+
+private:
+  DenseMap<GlobalVariable *, Entry> Entries;
+};
+
+/// The ASanGlobalsMetadataAnalysis initializes and returns a GlobalsMetadata
+/// object. More specifically, ASan requires looking at all globals registered
+/// in 'llvm.asan.globals' before running, which only depends on reading module
+/// level metadata. This analysis is required to run before running the
+/// AddressSanitizerPass since it collects that metadata.
+/// The legacy pass manager equivalent of this is ASanGlobalsMetadataLegacyPass.
+class ASanGlobalsMetadataAnalysis
+    : public AnalysisInfoMixin<ASanGlobalsMetadataAnalysis> {
+public:
+  using Result = GlobalsMetadata;
+
+  Result run(Module &, ModuleAnalysisManager &);
+
+private:
+  friend AnalysisInfoMixin<ASanGlobalsMetadataAnalysis>;
+  static AnalysisKey Key;
+};
+
+/// Public interface to the address sanitizer pass for instrumenting code to
+/// check for various memory errors at runtime.
+///
+/// The sanitizer itself is a function pass that works by inserting various
+/// calls to the ASan runtime library functions. The runtime library essentially
+/// replaces malloc() and free() with custom implementations that allow regions
+/// surrounding requested memory to be checked for invalid accesses.
+class AddressSanitizerPass : public PassInfoMixin<AddressSanitizerPass> {
+public:
+  explicit AddressSanitizerPass(bool CompileKernel = false,
+                                bool Recover = false,
+                                bool UseAfterScope = false);
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+
+private:
+  bool CompileKernel;
+  bool Recover;
+  bool UseAfterScope;
+};
+
+/// Public interface to the address sanitizer module pass for instrumenting code
+/// to check for various memory errors.
+///
+/// This adds 'asan.module_ctor' to 'llvm.global_ctors'. This pass may also
+/// run intependently of the function address sanitizer.
+class ModuleAddressSanitizerPass
+    : public PassInfoMixin<ModuleAddressSanitizerPass> {
+public:
+  explicit ModuleAddressSanitizerPass(bool CompileKernel = false,
+                                      bool Recover = false,
+                                      bool UseGlobalGC = true,
+                                      bool UseOdrIndicator = false);
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+
+private:
+  bool CompileKernel;
+  bool Recover;
+  bool UseGlobalGC;
+  bool UseOdrIndicator;
+};
+
+// Insert AddressSanitizer (address sanity checking) instrumentation
+FunctionPass *createAddressSanitizerFunctionPass(bool CompileKernel = false,
+                                                 bool Recover = false,
+                                                 bool UseAfterScope = false);
+ModulePass *createModuleAddressSanitizerLegacyPassPass(
+    bool CompileKernel = false, bool Recover = false, bool UseGlobalsGC = true,
+    bool UseOdrIndicator = true);
+
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation/HWAddressSanitizer.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation/HWAddressSanitizer.h
new file mode 100644
index 0000000..e34cf6c
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation/HWAddressSanitizer.h
@@ -0,0 +1,41 @@
+//===--------- Definition of the HWAddressSanitizer class -------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the Hardware AddressSanitizer class which is a port of the
+// legacy HWAddressSanitizer pass to use the new PassManager infrastructure.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_HWADDRESSSANITIZERPASS_H
+#define LLVM_TRANSFORMS_INSTRUMENTATION_HWADDRESSSANITIZERPASS_H
+
+#include "llvm/IR/Function.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+/// This is a public interface to the hardware address sanitizer pass for
+/// instrumenting code to check for various memory errors at runtime, similar to
+/// AddressSanitizer but based on partial hardware assistance.
+class HWAddressSanitizerPass : public PassInfoMixin<HWAddressSanitizerPass> {
+public:
+  explicit HWAddressSanitizerPass(bool CompileKernel = false,
+                                  bool Recover = false);
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
+
+private:
+  bool CompileKernel;
+  bool Recover;
+};
+
+FunctionPass *createHWAddressSanitizerLegacyPassPass(bool CompileKernel = false,
+                                                     bool Recover = false);
+
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation/InstrOrderFile.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation/InstrOrderFile.h
new file mode 100644
index 0000000..f1245d8
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation/InstrOrderFile.h
@@ -0,0 +1,28 @@
+//===- InstrOrderFile.h ---- Late IR instrumentation for order file ----===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_INSTRORDERFILE_H
+#define LLVM_TRANSFORMS_INSTRORDERFILE_H
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+class Module;
+
+/// The instrumentation pass for recording function order.
+class InstrOrderFilePass : public PassInfoMixin<InstrOrderFilePass> {
+public:
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_INSTRORDERFILE_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation/InstrProfiling.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation/InstrProfiling.h
index 4fad650..8f76d4a 100644
--- a/linux-x64/clang/include/llvm/Transforms/Instrumentation/InstrProfiling.h
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation/InstrProfiling.h
@@ -34,8 +34,9 @@
 /// instrumentation pass.
 class InstrProfiling : public PassInfoMixin<InstrProfiling> {
 public:
-  InstrProfiling() = default;
-  InstrProfiling(const InstrProfOptions &Options) : Options(Options) {}
+  InstrProfiling() : IsCS(false) {}
+  InstrProfiling(const InstrProfOptions &Options, bool IsCS = false)
+      : Options(Options), IsCS(IsCS) {}
 
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
   bool run(Module &M, const TargetLibraryInfo &TLI);
@@ -60,6 +61,9 @@
   GlobalVariable *NamesVar;
   size_t NamesSize;
 
+  // Is this lowering for the context-sensitive instrumentation.
+  bool IsCS;
+
   // vector of counter load/store pairs to be register promoted.
   std::vector<LoadStorePair> PromotionCandidates;
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation/PGOInstrumentation.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation/PGOInstrumentation.h
index 4f22e28..21cf291 100644
--- a/linux-x64/clang/include/llvm/Transforms/Instrumentation/PGOInstrumentation.h
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation/PGOInstrumentation.h
@@ -27,22 +27,46 @@
 class Module;
 
 /// The instrumentation (profile-instr-gen) pass for IR based PGO.
+// We use this pass to create COMDAT profile variables for context
+// sensitive PGO (CSPGO). The reason to have a pass for this is CSPGO
+// can be run after LTO/ThinLTO linking. Lld linker needs to see
+// all the COMDAT variables before linking. So we have this pass
+// always run before linking for CSPGO.
+class PGOInstrumentationGenCreateVar
+    : public PassInfoMixin<PGOInstrumentationGenCreateVar> {
+public:
+  PGOInstrumentationGenCreateVar(std::string CSInstrName = "")
+      : CSInstrName(CSInstrName) {}
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+
+private:
+  std::string CSInstrName;
+};
+
+/// The instrumentation (profile-instr-gen) pass for IR based PGO.
 class PGOInstrumentationGen : public PassInfoMixin<PGOInstrumentationGen> {
 public:
+  PGOInstrumentationGen(bool IsCS = false) : IsCS(IsCS) {}
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+
+private:
+  // If this is a context sensitive instrumentation.
+  bool IsCS;
 };
 
 /// The profile annotation (profile-instr-use) pass for IR based PGO.
 class PGOInstrumentationUse : public PassInfoMixin<PGOInstrumentationUse> {
 public:
   PGOInstrumentationUse(std::string Filename = "",
-                        std::string RemappingFilename = "");
+                        std::string RemappingFilename = "", bool IsCS = false);
 
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
 
 private:
   std::string ProfileFileName;
   std::string ProfileRemappingFileName;
+  // If this is a context sensitive instrumentation.
+  bool IsCS;
 };
 
 /// The indirect function call promotion pass.
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation/PoisonChecking.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation/PoisonChecking.h
new file mode 100644
index 0000000..606d3c2
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation/PoisonChecking.h
@@ -0,0 +1,25 @@
+//===- PoisonChecking.h - ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_POISON_CHECKING_H
+#define LLVM_TRANSFORMS_INSTRUMENTATION_POISON_CHECKING_H
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+struct PoisonCheckingPass : public PassInfoMixin<PoisonCheckingPass> {
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
+
+}
+
+
+#endif  // LLVM_TRANSFORMS_INSTRUMENTATION_POISON_CHECKING_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar.h b/linux-x64/clang/include/llvm/Transforms/Scalar.h
index 97a4c06..f9360b5 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar.h
@@ -137,6 +137,8 @@
 // LICM - This pass is a loop invariant code motion and memory promotion pass.
 //
 Pass *createLICMPass();
+Pass *createLICMPass(unsigned LicmMssaOptCap,
+                     unsigned LicmMssaNoAccForPromotionCap);
 
 //===----------------------------------------------------------------------===//
 //
@@ -183,11 +185,13 @@
 // LoopUnroll - This pass is a simple loop unrolling pass.
 //
 Pass *createLoopUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false,
-                           int Threshold = -1, int Count = -1,
-                           int AllowPartial = -1, int Runtime = -1,
-                           int UpperBound = -1, int AllowPeeling = -1);
+                           bool ForgetAllSCEV = false, int Threshold = -1,
+                           int Count = -1, int AllowPartial = -1,
+                           int Runtime = -1, int UpperBound = -1,
+                           int AllowPeeling = -1);
 // Create an unrolling pass for full unrolling that uses exact trip count only.
-Pass *createSimpleLoopUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false);
+Pass *createSimpleLoopUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false,
+                                 bool ForgetAllSCEV = false);
 
 //===----------------------------------------------------------------------===//
 //
@@ -367,7 +371,7 @@
 //
 // MergeICmps - Merge integer comparison chains into a memcmp
 //
-Pass *createMergeICmpsPass();
+Pass *createMergeICmpsLegacyPass();
 
 //===----------------------------------------------------------------------===//
 //
@@ -379,9 +383,10 @@
 //
 // InferAddressSpaces - Modify users of addrspacecast instructions with values
 // in the source address space if using the destination address space is slower
-// on the target.
+// on the target. If AddressSpace is left to its default value, it will be
+// obtained from the TargetTransformInfo.
 //
-FunctionPass *createInferAddressSpacesPass();
+FunctionPass *createInferAddressSpacesPass(unsigned AddressSpace = ~0u);
 extern char &InferAddressSpacesID;
 
 //===----------------------------------------------------------------------===//
@@ -458,6 +463,12 @@
 
 //===----------------------------------------------------------------------===//
 //
+// LoopFuse - Fuse loops.
+//
+FunctionPass *createLoopFusePass();
+
+//===----------------------------------------------------------------------===//
+//
 // LoopLoadElimination - Perform loop-aware load elimination.
 //
 FunctionPass *createLoopLoadEliminationPass();
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h b/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h
index 29311ca..6b0fc9c 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h
@@ -55,6 +55,7 @@
 class Function;
 class GlobalVariable;
 class Instruction;
+class ProfileSummaryInfo;
 class TargetTransformInfo;
 
 /// A private "module" namespace for types and utilities used by
@@ -124,9 +125,10 @@
 
   // Glue for old PM.
   bool runImpl(Function &F, TargetTransformInfo &TTI, DominatorTree &DT,
-               BlockFrequencyInfo *BFI, BasicBlock &Entry);
+               BlockFrequencyInfo *BFI, BasicBlock &Entry,
+               ProfileSummaryInfo *PSI);
 
-  void releaseMemory() {
+  void cleanup() {
     ClonedCastMap.clear();
     ConstIntCandVec.clear();
     for (auto MapEntry : ConstGEPCandMap)
@@ -148,6 +150,7 @@
   LLVMContext *Ctx;
   const DataLayout *DL;
   BasicBlock *Entry;
+  ProfileSummaryInfo *PSI;
 
   /// Keeps track of constant candidates found in the function.
   using ConstCandVecType = std::vector<consthoist::ConstantCandidate>;
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/GuardWidening.h b/linux-x64/clang/include/llvm/Transforms/Scalar/GuardWidening.h
index 3adea05..06dc9ac 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/GuardWidening.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/GuardWidening.h
@@ -16,7 +16,9 @@
 #ifndef LLVM_TRANSFORMS_SCALAR_GUARD_WIDENING_H
 #define LLVM_TRANSFORMS_SCALAR_GUARD_WIDENING_H
 
+#include "llvm/Analysis/LoopInfo.h"
 #include "llvm/IR/PassManager.h"
+#include "llvm/Transforms/Scalar/LoopPassManager.h"
 
 namespace llvm {
 
@@ -24,6 +26,8 @@
 
 struct GuardWideningPass : public PassInfoMixin<GuardWideningPass> {
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+  PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
+                        LoopStandardAnalysisResults &AR, LPMUpdater &U);
 };
 }
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LICM.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LICM.h
index ea947ea..f0ea928 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/LICM.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LICM.h
@@ -38,9 +38,21 @@
 
 namespace llvm {
 
+extern cl::opt<unsigned> SetLicmMssaOptCap;
+extern cl::opt<unsigned> SetLicmMssaNoAccForPromotionCap;
+
 /// Performs Loop Invariant Code Motion Pass.
 class LICMPass : public PassInfoMixin<LICMPass> {
+  unsigned LicmMssaOptCap;
+  unsigned LicmMssaNoAccForPromotionCap;
+
 public:
+  LICMPass()
+      : LicmMssaOptCap(SetLicmMssaOptCap),
+        LicmMssaNoAccForPromotionCap(SetLicmMssaNoAccForPromotionCap) {}
+  LICMPass(unsigned LicmMssaOptCap, unsigned LicmMssaNoAccForPromotionCap)
+      : LicmMssaOptCap(LicmMssaOptCap),
+        LicmMssaNoAccForPromotionCap(LicmMssaNoAccForPromotionCap) {}
   PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
                         LoopStandardAnalysisResults &AR, LPMUpdater &U);
 };
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopFuse.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopFuse.h
new file mode 100644
index 0000000..d3a02db
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopFuse.h
@@ -0,0 +1,30 @@
+//===- LoopFuse.h - Loop Fusion Pass ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This file implements the Loop Fusion pass.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_SCALAR_LOOPFUSE_H
+#define LLVM_TRANSFORMS_SCALAR_LOOPFUSE_H
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class Function;
+
+class LoopFusePass : public PassInfoMixin<LoopFusePass> {
+public:
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_SCALAR_LOOPFUSE_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopUnrollPass.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopUnrollPass.h
index 1445373..a84d889 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopUnrollPass.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopUnrollPass.h
@@ -15,6 +15,8 @@
 
 namespace llvm {
 
+extern cl::opt<bool> ForgetSCEVInLoopUnroll;
+
 class Function;
 class Loop;
 class LPMUpdater;
@@ -28,9 +30,16 @@
   /// metadata are considered. All other loops are skipped.
   const bool OnlyWhenForced;
 
+  /// If true, forget all loops when unrolling. If false, forget top-most loop
+  /// of the currently processed loops, which removes one entry at a time from
+  /// the internal SCEV records. For large loops, the former is faster.
+  const bool ForgetSCEV;
+
 public:
-  explicit LoopFullUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false)
-      : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced) {}
+  explicit LoopFullUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false,
+                              bool ForgetSCEV = false)
+      : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced),
+        ForgetSCEV(ForgetSCEV) {}
 
   PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
                         LoopStandardAnalysisResults &AR, LPMUpdater &U);
@@ -60,8 +69,15 @@
   /// metadata are considered. All other loops are skipped.
   bool OnlyWhenForced;
 
-  LoopUnrollOptions(int OptLevel = 2, bool OnlyWhenForced = false)
-      : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced) {}
+  /// If true, forget all loops when unrolling. If false, forget top-most loop
+  /// of the currently processed loops, which removes one entry at a time from
+  /// the internal SCEV records. For large loops, the former is faster.
+  const bool ForgetSCEV;
+
+  LoopUnrollOptions(int OptLevel = 2, bool OnlyWhenForced = false,
+                    bool ForgetSCEV = false)
+      : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced),
+        ForgetSCEV(ForgetSCEV) {}
 
   /// Enables or disables partial unrolling. When disabled only full unrolling
   /// is allowed.
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/MergeICmps.h b/linux-x64/clang/include/llvm/Transforms/Scalar/MergeICmps.h
new file mode 100644
index 0000000..63bdbf8
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/MergeICmps.h
@@ -0,0 +1,25 @@
+//===- MergeICmps.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_SCALAR_MERGEICMPS_H
+#define LLVM_TRANSFORMS_SCALAR_MERGEICMPS_H
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class Function;
+
+struct MergeICmpsPass
+    : PassInfoMixin<MergeICmpsPass> {
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_SCALAR_MERGEICMPS_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h b/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h
index 487471c..2db8d8c 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h
@@ -82,7 +82,14 @@
   static const unsigned GlobalReassociateLimit = 10;
   static const unsigned NumBinaryOps =
       Instruction::BinaryOpsEnd - Instruction::BinaryOpsBegin;
-  DenseMap<std::pair<Value *, Value *>, unsigned> PairMap[NumBinaryOps];
+
+  struct PairMapValue {
+    WeakVH Value1;
+    WeakVH Value2;
+    unsigned Score;
+    bool isValid() const { return Value1 && Value2; }
+  };
+  DenseMap<std::pair<Value *, Value *>, PairMapValue> PairMap[NumBinaryOps];
 
   bool MadeChange;
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h b/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h
index bd3a072..864a0cb 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h
@@ -18,7 +18,6 @@
 #include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/IR/PassManager.h"
-#include "llvm/Support/Compiler.h"
 #include <vector>
 
 namespace llvm {
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h b/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h
index 4e76328..4d861ff 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h
@@ -35,6 +35,7 @@
 class MDNode;
 class MemoryDependenceResults;
 class MemorySSAUpdater;
+class PostDominatorTree;
 class ReturnInst;
 class TargetLibraryInfo;
 class Value;
@@ -61,6 +62,12 @@
                       DomTreeUpdater *DTU = nullptr,
                       bool KeepOneInputPHIs = false);
 
+/// Delete all basic blocks from \p F that are not reachable from its entry
+/// node. If \p KeepOneInputPHIs is true, one-input Phis in successors of
+/// blocks being deleted will be preserved.
+bool EliminateUnreachableBlocks(Function &F, DomTreeUpdater *DTU = nullptr,
+                                bool KeepOneInputPHIs = false);
+
 /// We know that BB has one predecessor. If there are any single-entry PHI nodes
 /// in it, fold them away. This handles the case when all entries to the PHI
 /// nodes in a block are guaranteed equal, such as when the block has exactly
@@ -103,16 +110,19 @@
 /// during critical edge splitting.
 struct CriticalEdgeSplittingOptions {
   DominatorTree *DT;
+  PostDominatorTree *PDT;
   LoopInfo *LI;
   MemorySSAUpdater *MSSAU;
   bool MergeIdenticalEdges = false;
   bool KeepOneInputPHIs = false;
   bool PreserveLCSSA = false;
+  bool IgnoreUnreachableDests = false;
 
   CriticalEdgeSplittingOptions(DominatorTree *DT = nullptr,
                                LoopInfo *LI = nullptr,
-                               MemorySSAUpdater *MSSAU = nullptr)
-      : DT(DT), LI(LI), MSSAU(MSSAU) {}
+                               MemorySSAUpdater *MSSAU = nullptr,
+                               PostDominatorTree *PDT = nullptr)
+      : DT(DT), PDT(PDT), LI(LI), MSSAU(MSSAU) {}
 
   CriticalEdgeSplittingOptions &setMergeIdenticalEdges() {
     MergeIdenticalEdges = true;
@@ -128,6 +138,11 @@
     PreserveLCSSA = true;
     return *this;
   }
+
+  CriticalEdgeSplittingOptions &setIgnoreUnreachableDests() {
+    IgnoreUnreachableDests = true;
+    return *this;
+  }
 };
 
 /// If this edge is a critical edge, insert a new node to split the critical
@@ -270,7 +285,8 @@
 ///   SplitBefore
 ///   Tail
 ///
-/// If Unreachable is true, then ThenBlock ends with
+/// If \p ThenBlock is not specified, a new block will be created for it.
+/// If \p Unreachable is true, the newly created block will end with
 /// UnreachableInst, otherwise it branches to Tail.
 /// Returns the NewBasicBlock's terminator.
 ///
@@ -279,7 +295,8 @@
                                        bool Unreachable,
                                        MDNode *BranchWeights = nullptr,
                                        DominatorTree *DT = nullptr,
-                                       LoopInfo *LI = nullptr);
+                                       LoopInfo *LI = nullptr,
+                                       BasicBlock *ThenBlock = nullptr);
 
 /// SplitBlockAndInsertIfThenElse is similar to SplitBlockAndInsertIfThen,
 /// but also creates the ElseBlock.
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h b/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h
index 6c61cbe..8421c31 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h
@@ -70,12 +70,22 @@
   /// Emit a call to the strcpy function to the builder, for the specified
   /// pointer arguments.
   Value *emitStrCpy(Value *Dst, Value *Src, IRBuilder<> &B,
-                    const TargetLibraryInfo *TLI, StringRef Name = "strcpy");
+                    const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the stpcpy function to the builder, for the specified
+  /// pointer arguments.
+  Value *emitStpCpy(Value *Dst, Value *Src, IRBuilder<> &B,
+                    const TargetLibraryInfo *TLI);
 
   /// Emit a call to the strncpy function to the builder, for the specified
   /// pointer arguments and length.
   Value *emitStrNCpy(Value *Dst, Value *Src, Value *Len, IRBuilder<> &B,
-                     const TargetLibraryInfo *TLI, StringRef Name = "strncpy");
+                     const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the stpncpy function to the builder, for the specified
+  /// pointer arguments and length.
+  Value *emitStpNCpy(Value *Dst, Value *Src, Value *Len, IRBuilder<> &B,
+                     const TargetLibraryInfo *TLI);
 
   /// Emit a call to the __memcpy_chk function to the builder. This expects that
   /// the Len and ObjSize have type 'intptr_t' and Dst/Src are pointers.
@@ -92,6 +102,47 @@
   Value *emitMemCmp(Value *Ptr1, Value *Ptr2, Value *Len, IRBuilder<> &B,
                     const DataLayout &DL, const TargetLibraryInfo *TLI);
 
+  /// Emit a call to the bcmp function.
+  Value *emitBCmp(Value *Ptr1, Value *Ptr2, Value *Len, IRBuilder<> &B,
+                  const DataLayout &DL, const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the memccpy function.
+  Value *emitMemCCpy(Value *Ptr1, Value *Ptr2, Value *Val, Value *Len,
+                     IRBuilder<> &B, const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the snprintf function.
+  Value *emitSNPrintf(Value *Dest, Value *Size, Value *Fmt,
+                      ArrayRef<Value *> Args, IRBuilder<> &B,
+                      const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the sprintf function.
+  Value *emitSPrintf(Value *Dest, Value *Fmt, ArrayRef<Value *> VariadicArgs,
+                     IRBuilder<> &B, const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the strcat function.
+  Value *emitStrCat(Value *Dest, Value *Src, IRBuilder<> &B,
+                    const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the strlcpy function.
+  Value *emitStrLCpy(Value *Dest, Value *Src, Value *Size, IRBuilder<> &B,
+                     const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the strlcat function.
+  Value *emitStrLCat(Value *Dest, Value *Src, Value *Size, IRBuilder<> &B,
+                     const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the strncat function.
+  Value *emitStrNCat(Value *Dest, Value *Src, Value *Size, IRBuilder<> &B,
+                     const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the vsnprintf function.
+  Value *emitVSNPrintf(Value *Dest, Value *Size, Value *Fmt, Value *VAList,
+                       IRBuilder<> &B, const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the vsprintf function.
+  Value *emitVSPrintf(Value *Dest, Value *Fmt, Value *VAList, IRBuilder<> &B,
+                      const TargetLibraryInfo *TLI);
+
   /// Emit a call to the unary function named 'Name' (e.g.  'floor'). This
   /// function is known to take a single of type matching 'Op' and returns one
   /// value with the same type. If 'Op' is a long double, 'l' is added as the
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h b/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h
index 86775b1..872ab9c 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h
@@ -229,10 +229,7 @@
 /// and all varargs at the callsite will be passed to any calls to
 /// ForwardVarArgsTo. The caller of InlineFunction has to make sure any varargs
 /// are only used by ForwardVarArgsTo.
-InlineResult InlineFunction(CallInst *C, InlineFunctionInfo &IFI,
-                            AAResults *CalleeAAR = nullptr,
-                            bool InsertLifetime = true);
-InlineResult InlineFunction(InvokeInst *II, InlineFunctionInfo &IFI,
+InlineResult InlineFunction(CallBase *CB, InlineFunctionInfo &IFI,
                             AAResults *CalleeAAR = nullptr,
                             bool InsertLifetime = true);
 InlineResult InlineFunction(CallSite CS, InlineFunctionInfo &IFI,
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/Local.h b/linux-x64/clang/include/llvm/Transforms/Utils/Local.h
index 641b645..ff516f2 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/Local.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/Local.h
@@ -231,7 +231,8 @@
 /// If this basic block is ONLY a setcc and a branch, and if a predecessor
 /// branches to us and one of our successors, fold the setcc into the
 /// predecessor and use logical operations to pick the right destination.
-bool FoldBranchToCommonDest(BranchInst *BI, unsigned BonusInstThreshold = 1);
+bool FoldBranchToCommonDest(BranchInst *BI, MemorySSAUpdater *MSSAU = nullptr,
+                            unsigned BonusInstThreshold = 1);
 
 /// This function takes a virtual register computed by an Instruction and
 /// replaces it with a slot in the stack frame, allocated via alloca.
@@ -315,7 +316,7 @@
 /// (between the optional Deref operations). Offset can be negative.
 bool replaceDbgDeclare(Value *Address, Value *NewAddress,
                        Instruction *InsertBefore, DIBuilder &Builder,
-                       bool DerefBefore, int Offset, bool DerefAfter);
+                       uint8_t DIExprFlags, int Offset);
 
 /// Replaces llvm.dbg.declare instruction when the alloca it describes
 /// is replaced with a new value. If Deref is true, an additional
@@ -324,8 +325,8 @@
 /// optional Deref operations). Offset can be negative. The new
 /// llvm.dbg.declare is inserted immediately after AI.
 bool replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
-                                DIBuilder &Builder, bool DerefBefore,
-                                int Offset, bool DerefAfter);
+                                DIBuilder &Builder, uint8_t DIExprFlags,
+                                int Offset);
 
 /// Replaces multiple llvm.dbg.value instructions when the alloca it describes
 /// is replaced with a new value. If Offset is non-zero, a constant displacement
@@ -335,6 +336,10 @@
 void replaceDbgValueForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
                               DIBuilder &Builder, int Offset = 0);
 
+/// Finds alloca where the value comes from.
+AllocaInst *findAllocaForValue(Value *V,
+                               DenseMap<Value *, AllocaInst *> &AllocaForValue);
+
 /// Assuming the instruction \p I is going to be deleted, attempt to salvage
 /// debug users of \p I by writing the effect of \p I in a DIExpression.
 /// Returns true if any debug users were updated.
@@ -377,7 +382,8 @@
 /// instruction, making it and the rest of the code in the block dead.
 unsigned changeToUnreachable(Instruction *I, bool UseLLVMTrap,
                              bool PreserveLCSSA = false,
-                             DomTreeUpdater *DTU = nullptr);
+                             DomTreeUpdater *DTU = nullptr,
+                             MemorySSAUpdater *MSSAU = nullptr);
 
 /// Convert the CallInst to InvokeInst with the specified unwind edge basic
 /// block.  This also splits the basic block where CI is located, because
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h b/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h
index 938e46d..2c1df79 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h
@@ -45,6 +45,8 @@
 
 namespace llvm {
 
+class MemorySSAUpdater;
+
 /// This pass is responsible for loop canonicalization.
 class LoopSimplifyPass : public PassInfoMixin<LoopSimplifyPass> {
 public:
@@ -55,9 +57,11 @@
 ///
 /// This takes a potentially un-simplified loop L (and its children) and turns
 /// it into a simplified loop nest with preheaders and single backedges. It will
-/// update \c AliasAnalysis and \c ScalarEvolution analyses if they're non-null.
+/// update \c DominatorTree, \c LoopInfo, \c ScalarEvolution and \c MemorySSA
+/// analyses if they're non-null, and LCSSA if \c PreserveLCSSA is true.
 bool simplifyLoop(Loop *L, DominatorTree *DT, LoopInfo *LI, ScalarEvolution *SE,
-                  AssumptionCache *AC, bool PreserveLCSSA);
+                  AssumptionCache *AC, MemorySSAUpdater *MSSAU,
+                  bool PreserveLCSSA);
 
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h b/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h
index a5883ac..68bdded 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h
@@ -51,7 +51,7 @@
 class TargetTransformInfo;
 
 BasicBlock *InsertPreheaderForLoop(Loop *L, DominatorTree *DT, LoopInfo *LI,
-                                   bool PreserveLCSSA);
+                                   MemorySSAUpdater *MSSAU, bool PreserveLCSSA);
 
 /// Ensure that all exit blocks of the loop are dedicated exits.
 ///
@@ -59,7 +59,7 @@
 /// predecessors to use a dedicated loop exit block. We update the dominator
 /// tree and loop info if provided, and will preserve LCSSA if requested.
 bool formDedicatedExitBlocks(Loop *L, DominatorTree *DT, LoopInfo *LI,
-                             bool PreserveLCSSA);
+                             MemorySSAUpdater *MSSAU, bool PreserveLCSSA);
 
 /// Ensures LCSSA form for every instruction from the Worklist in the scope of
 /// innermost containing loop.
@@ -101,6 +101,14 @@
 bool formLCSSARecursively(Loop &L, DominatorTree &DT, LoopInfo *LI,
                           ScalarEvolution *SE);
 
+struct SinkAndHoistLICMFlags {
+  bool NoOfMemAccTooLarge;
+  unsigned LicmMssaOptCounter;
+  unsigned LicmMssaOptCap;
+  unsigned LicmMssaNoAccForPromotionCap;
+  bool IsSink;
+};
+
 /// Walk the specified region of the CFG (defined by all blocks
 /// dominated by the specified block, and that are in the current loop) in
 /// reverse depth first order w.r.t the DominatorTree. This allows us to visit
@@ -112,7 +120,7 @@
 bool sinkRegion(DomTreeNode *, AliasAnalysis *, LoopInfo *, DominatorTree *,
                 TargetLibraryInfo *, TargetTransformInfo *, Loop *,
                 AliasSetTracker *, MemorySSAUpdater *, ICFLoopSafetyInfo *,
-                bool, int &, OptimizationRemarkEmitter *);
+                SinkAndHoistLICMFlags &, OptimizationRemarkEmitter *);
 
 /// Walk the specified region of the CFG (defined by all blocks
 /// dominated by the specified block, and that are in the current loop) in depth
@@ -124,8 +132,8 @@
 /// ORE. It returns changed status.
 bool hoistRegion(DomTreeNode *, AliasAnalysis *, LoopInfo *, DominatorTree *,
                  TargetLibraryInfo *, Loop *, AliasSetTracker *,
-                 MemorySSAUpdater *, ICFLoopSafetyInfo *, bool, int &,
-                 OptimizationRemarkEmitter *);
+                 MemorySSAUpdater *, ICFLoopSafetyInfo *,
+                 SinkAndHoistLICMFlags &, OptimizationRemarkEmitter *);
 
 /// This function deletes dead loops. The caller of this function needs to
 /// guarantee that the loop is infact dead.
@@ -276,8 +284,7 @@
 bool canSinkOrHoistInst(Instruction &I, AAResults *AA, DominatorTree *DT,
                         Loop *CurLoop, AliasSetTracker *CurAST,
                         MemorySSAUpdater *MSSAU, bool TargetExecutesOncePerLoop,
-                        bool NoOfMemAccessesTooLarge,
-                        int *LicmMssaOptCap = nullptr,
+                        SinkAndHoistLICMFlags *LICMFlags = nullptr,
                         OptimizationRemarkEmitter *ORE = nullptr);
 
 /// Returns a Min/Max operation corresponding to MinMaxRecurrenceKind.
@@ -293,6 +300,7 @@
                     ArrayRef<Value *> RedOps = None);
 
 /// Generates a vector reduction using shufflevectors to reduce the value.
+/// Fast-math-flags are propagated using the IRBuilder's setting.
 Value *getShuffleReduction(IRBuilder<> &Builder, Value *Src, unsigned Op,
                            RecurrenceDescriptor::MinMaxRecurrenceKind
                                MinMaxKind = RecurrenceDescriptor::MRK_Invalid,
@@ -303,6 +311,7 @@
 /// additional information supplied in \p Flags.
 /// The target is queried to determine if intrinsics or shuffle sequences are
 /// required to implement the reduction.
+/// Fast-math-flags are propagated using the IRBuilder's setting.
 Value *createSimpleTargetReduction(IRBuilder<> &B,
                                    const TargetTransformInfo *TTI,
                                    unsigned Opcode, Value *Src,
@@ -313,6 +322,7 @@
 /// Create a generic target reduction using a recurrence descriptor \p Desc
 /// The target is queried to determine if intrinsics or shuffle sequences are
 /// required to implement the reduction.
+/// Fast-math-flags are propagated using the RecurrenceDescriptor.
 Value *createTargetReduction(IRBuilder<> &B, const TargetTransformInfo *TTI,
                              RecurrenceDescriptor &Desc, Value *Src,
                              bool NoNaN = false);
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h b/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h
index 44eef09..2572094 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h
@@ -28,6 +28,8 @@
 class BasicBlock;
 class Function;
 class OptimizationRemarkEmitter;
+class BlockFrequencyInfo;
+class ProfileSummaryInfo;
 
 /// This class implements simplifications for calls to fortified library
 /// functions (__st*cpy_chk, __memcpy_chk, __memmove_chk, __memset_chk), to,
@@ -55,14 +57,41 @@
   Value *optimizeMemMoveChk(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemSetChk(CallInst *CI, IRBuilder<> &B);
 
-  // Str/Stp cpy are similar enough to be handled in the same functions.
+  /// Str/Stp cpy are similar enough to be handled in the same functions.
   Value *optimizeStrpCpyChk(CallInst *CI, IRBuilder<> &B, LibFunc Func);
   Value *optimizeStrpNCpyChk(CallInst *CI, IRBuilder<> &B, LibFunc Func);
+  Value *optimizeMemCCpyChk(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeSNPrintfChk(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeSPrintfChk(CallInst *CI,IRBuilder<> &B);
+  Value *optimizeStrCatChk(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeStrLCat(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeStrNCatChk(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeStrLCpyChk(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeVSNPrintfChk(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeVSPrintfChk(CallInst *CI, IRBuilder<> &B);
 
   /// Checks whether the call \p CI to a fortified libcall is foldable
   /// to the non-fortified version.
+  ///
+  /// \param CI the call to the fortified libcall.
+  ///
+  /// \param ObjSizeOp the index of the object size parameter of this chk
+  /// function. Not optional since this is mandatory.
+  ///
+  /// \param SizeOp optionally set to the parameter index of an explicit buffer
+  /// size argument. For instance, set to '2' for __strncpy_chk.
+  ///
+  /// \param StrOp optionally set to the parameter index of the source string
+  /// parameter to strcpy-like functions, where only the strlen of the source
+  /// will be writtin into the destination.
+  ///
+  /// \param FlagsOp optionally set to the parameter index of a 'flags'
+  /// parameter. These are used by an implementation to opt-into stricter
+  /// checking.
   bool isFortifiedCallFoldable(CallInst *CI, unsigned ObjSizeOp,
-                               unsigned SizeOp, bool isString);
+                               Optional<unsigned> SizeOp = None,
+                               Optional<unsigned> StrOp = None,
+                               Optional<unsigned> FlagsOp = None);
 };
 
 /// LibCallSimplifier - This class implements a collection of optimizations
@@ -74,6 +103,8 @@
   const DataLayout &DL;
   const TargetLibraryInfo *TLI;
   OptimizationRemarkEmitter &ORE;
+  BlockFrequencyInfo *BFI;
+  ProfileSummaryInfo *PSI;
   bool UnsafeFPShrink;
   function_ref<void(Instruction *, Value *)> Replacer;
   function_ref<void(Instruction *)> Eraser;
@@ -101,6 +132,7 @@
   LibCallSimplifier(
       const DataLayout &DL, const TargetLibraryInfo *TLI,
       OptimizationRemarkEmitter &ORE,
+      BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI,
       function_ref<void(Instruction *, Value *)> Replacer =
           &replaceAllUsesWithDefault,
       function_ref<void(Instruction *)> Eraser = &eraseFromParentDefault);
@@ -133,6 +165,8 @@
   Value *optimizeStrStr(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemChr(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemCmp(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeBCmp(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeMemCmpBCmpCommon(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemCpy(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemMove(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemSet(CallInst *CI, IRBuilder<> &B);
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SizeOpts.h b/linux-x64/clang/include/llvm/Transforms/Utils/SizeOpts.h
new file mode 100644
index 0000000..1a052c6
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/SizeOpts.h
@@ -0,0 +1,34 @@
+//===- llvm/Transforms/Utils/SizeOpts.h - size optimization -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains some shared code size optimization related code.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_UTILS_SIZEOPTS_H
+#define LLVM_TRANSFORMS_UTILS_SIZEOPTS_H
+
+namespace llvm {
+
+class BasicBlock;
+class BlockFrequencyInfo;
+class Function;
+class ProfileSummaryInfo;
+
+/// Returns true if function \p F is suggested to be size-optimized base on the
+/// profile.
+bool shouldOptimizeForSize(Function *F, ProfileSummaryInfo *PSI,
+                           BlockFrequencyInfo *BFI);
+/// Returns true if basic block \p BB is suggested to be size-optimized base
+/// on the profile.
+bool shouldOptimizeForSize(BasicBlock *BB, ProfileSummaryInfo *PSI,
+                           BlockFrequencyInfo *BFI);
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_UTILS_SIZEOPTS_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h b/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h
index 8f3824e..593ca26 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h
@@ -24,11 +24,13 @@
 
 class AssumptionCache;
 class BasicBlock;
+class BlockFrequencyInfo;
 class DependenceInfo;
 class DominatorTree;
 class Loop;
 class LoopInfo;
 class MDNode;
+class ProfileSummaryInfo;
 class OptimizationRemarkEmitter;
 class ScalarEvolution;
 
@@ -62,22 +64,31 @@
   FullyUnrolled
 };
 
-LoopUnrollResult UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
-                            bool Force, bool AllowRuntime,
-                            bool AllowExpensiveTripCount, bool PreserveCondBr,
-                            bool PreserveOnlyFirst, unsigned TripMultiple,
-                            unsigned PeelCount, bool UnrollRemainder,
-                            LoopInfo *LI, ScalarEvolution *SE,
-                            DominatorTree *DT, AssumptionCache *AC,
-                            OptimizationRemarkEmitter *ORE, bool PreserveLCSSA,
-                            Loop **RemainderLoop = nullptr);
+struct UnrollLoopOptions {
+  unsigned Count;
+  unsigned TripCount;
+  bool Force;
+  bool AllowRuntime;
+  bool AllowExpensiveTripCount;
+  bool PreserveCondBr;
+  bool PreserveOnlyFirst;
+  unsigned TripMultiple;
+  unsigned PeelCount;
+  bool UnrollRemainder;
+  bool ForgetAllSCEV;
+};
+
+LoopUnrollResult UnrollLoop(Loop *L, UnrollLoopOptions ULO, LoopInfo *LI,
+                            ScalarEvolution *SE, DominatorTree *DT,
+                            AssumptionCache *AC, OptimizationRemarkEmitter *ORE,
+                            bool PreserveLCSSA, Loop **RemainderLoop = nullptr);
 
 bool UnrollRuntimeLoopRemainder(Loop *L, unsigned Count,
                                 bool AllowExpensiveTripCount,
                                 bool UseEpilogRemainder, bool UnrollRemainder,
-                                LoopInfo *LI, ScalarEvolution *SE,
-                                DominatorTree *DT, AssumptionCache *AC,
-                                bool PreserveLCSSA,
+                                bool ForgetAllSCEV, LoopInfo *LI,
+                                ScalarEvolution *SE, DominatorTree *DT,
+                                AssumptionCache *AC, bool PreserveLCSSA,
                                 Loop **ResultLoop = nullptr);
 
 void computePeelCount(Loop *L, unsigned LoopSize,
@@ -108,9 +119,6 @@
                         TargetTransformInfo::UnrollingPreferences &UP,
                         bool &UseUpperBound);
 
-BasicBlock *foldBlockIntoPredecessor(BasicBlock *BB, LoopInfo *LI,
-                                     ScalarEvolution *SE, DominatorTree *DT);
-
 void remapInstruction(Instruction *I, ValueToValueMapTy &VMap);
 
 void simplifyLoopAfterUnroll(Loop *L, bool SimplifyIVs, LoopInfo *LI,
@@ -120,7 +128,8 @@
 MDNode *GetUnrollMetadata(MDNode *LoopID, StringRef Name);
 
 TargetTransformInfo::UnrollingPreferences gatherUnrollingPreferences(
-    Loop *L, ScalarEvolution &SE, const TargetTransformInfo &TTI, int OptLevel,
+    Loop *L, ScalarEvolution &SE, const TargetTransformInfo &TTI,
+    BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI, int OptLevel,
     Optional<unsigned> UserThreshold, Optional<unsigned> UserCount,
     Optional<bool> UserAllowPartial, Optional<bool> UserRuntime,
     Optional<bool> UserUpperBound, Optional<bool> UserAllowPeeling);
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize.h b/linux-x64/clang/include/llvm/Transforms/Vectorize.h
index a411b56..88a0e49 100644
--- a/linux-x64/clang/include/llvm/Transforms/Vectorize.h
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize.h
@@ -109,8 +109,9 @@
 //
 // LoopVectorize - Create a loop vectorization pass.
 //
-Pass *createLoopVectorizePass(bool InterleaveOnlyWhenForced = false,
-                              bool VectorizeOnlyWhenForced = false);
+Pass *createLoopVectorizePass();
+Pass *createLoopVectorizePass(bool InterleaveOnlyWhenForced,
+                              bool VectorizeOnlyWhenForced);
 
 //===----------------------------------------------------------------------===//
 //
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h
index ea0a1c2..b144006 100644
--- a/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h
@@ -205,12 +205,13 @@
 public:
   LoopVectorizationLegality(
       Loop *L, PredicatedScalarEvolution &PSE, DominatorTree *DT,
-      TargetLibraryInfo *TLI, AliasAnalysis *AA, Function *F,
-      std::function<const LoopAccessInfo &(Loop &)> *GetLAA, LoopInfo *LI,
-      OptimizationRemarkEmitter *ORE, LoopVectorizationRequirements *R,
-      LoopVectorizeHints *H, DemandedBits *DB, AssumptionCache *AC)
-      : TheLoop(L), LI(LI), PSE(PSE), TLI(TLI), DT(DT), GetLAA(GetLAA),
-        ORE(ORE), Requirements(R), Hints(H), DB(DB), AC(AC) {}
+      TargetTransformInfo *TTI, TargetLibraryInfo *TLI, AliasAnalysis *AA,
+      Function *F, std::function<const LoopAccessInfo &(Loop &)> *GetLAA,
+      LoopInfo *LI, OptimizationRemarkEmitter *ORE,
+      LoopVectorizationRequirements *R, LoopVectorizeHints *H, DemandedBits *DB,
+      AssumptionCache *AC)
+      : TheLoop(L), LI(LI), PSE(PSE), TTI(TTI), TLI(TLI), DT(DT),
+        GetLAA(GetLAA), ORE(ORE), Requirements(R), Hints(H), DB(DB), AC(AC) {}
 
   /// ReductionList contains the reduction descriptors for all
   /// of the reductions that were found in the loop.
@@ -371,18 +372,6 @@
   void addInductionPhi(PHINode *Phi, const InductionDescriptor &ID,
                        SmallPtrSetImpl<Value *> &AllowedExit);
 
-  /// Create an analysis remark that explains why vectorization failed
-  ///
-  /// \p RemarkName is the identifier for the remark.  If \p I is passed it is
-  /// an instruction that prevents vectorization.  Otherwise the loop is used
-  /// for the location of the remark.  \return the remark object that can be
-  /// streamed to.
-  OptimizationRemarkAnalysis
-  createMissedAnalysis(StringRef RemarkName, Instruction *I = nullptr) const {
-    return createLVMissedAnalysis(Hints->vectorizeAnalysisPassName(),
-                                  RemarkName, TheLoop, I);
-  }
-
   /// If an access has a symbolic strides, this maps the pointer value to
   /// the stride symbol.
   const ValueToValueMap *getSymbolicStrides() {
@@ -393,6 +382,14 @@
     return LAI ? &LAI->getSymbolicStrides() : nullptr;
   }
 
+  /// Reports a vectorization illegality: print \p DebugMsg for debugging
+  /// purposes along with the corresponding optimization remark \p RemarkName.
+  /// If \p I is passed it is an instruction that prevents vectorization.
+  /// Otherwise the loop is used for the location of the remark.
+  void reportVectorizationFailure(const StringRef DebugMsg,
+      const StringRef OREMsg, const StringRef ORETag,
+      Instruction *I = nullptr) const;
+
   /// The loop that we evaluate.
   Loop *TheLoop;
 
@@ -406,6 +403,9 @@
   /// unrolling.
   PredicatedScalarEvolution &PSE;
 
+  /// Target Transform Info.
+  TargetTransformInfo *TTI;
+
   /// Target Library Info.
   TargetLibraryInfo *TLI;
 
@@ -465,7 +465,7 @@
   /// Used to emit an analysis of any legality issues.
   LoopVectorizeHints *Hints;
 
-  /// The demanded bits analsyis is used to compute the minimum type size in
+  /// The demanded bits analysis is used to compute the minimum type size in
   /// which a reduction can be computed.
   DemandedBits *DB;
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h
index cdbe5f6..d1ec06a 100644
--- a/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h
@@ -71,19 +71,63 @@
 class LoopAccessInfo;
 class LoopInfo;
 class OptimizationRemarkEmitter;
+class ProfileSummaryInfo;
 class ScalarEvolution;
 class TargetLibraryInfo;
 class TargetTransformInfo;
 
+extern cl::opt<bool> EnableLoopInterleaving;
+extern cl::opt<bool> EnableLoopVectorization;
+
+struct LoopVectorizeOptions {
+  /// If false, consider all loops for interleaving.
+  /// If true, only loops that explicitly request interleaving are considered.
+  bool InterleaveOnlyWhenForced;
+
+  /// If false, consider all loops for vectorization.
+  /// If true, only loops that explicitly request vectorization are considered.
+  bool VectorizeOnlyWhenForced;
+
+  /// The current defaults when creating the pass with no arguments are:
+  /// EnableLoopInterleaving = true and EnableLoopVectorization = true. This
+  /// means that interleaving default is consistent with the cl::opt flag, while
+  /// vectorization is not.
+  /// FIXME: The default for EnableLoopVectorization in the cl::opt should be
+  /// set to true, and the corresponding change to account for this be made in
+  /// opt.cpp. The initializations below will become:
+  /// InterleaveOnlyWhenForced(!EnableLoopInterleaving)
+  /// VectorizeOnlyWhenForced(!EnableLoopVectorization).
+  LoopVectorizeOptions()
+      : InterleaveOnlyWhenForced(false), VectorizeOnlyWhenForced(false) {}
+  LoopVectorizeOptions(bool InterleaveOnlyWhenForced,
+                       bool VectorizeOnlyWhenForced)
+      : InterleaveOnlyWhenForced(InterleaveOnlyWhenForced),
+        VectorizeOnlyWhenForced(VectorizeOnlyWhenForced) {}
+
+  LoopVectorizeOptions &setInterleaveOnlyWhenForced(bool Value) {
+    InterleaveOnlyWhenForced = Value;
+    return *this;
+  }
+
+  LoopVectorizeOptions &setVectorizeOnlyWhenForced(bool Value) {
+    VectorizeOnlyWhenForced = Value;
+    return *this;
+  }
+};
+
 /// The LoopVectorize Pass.
 struct LoopVectorizePass : public PassInfoMixin<LoopVectorizePass> {
   /// If false, consider all loops for interleaving.
   /// If true, only loops that explicitly request interleaving are considered.
-  bool InterleaveOnlyWhenForced = false;
+  bool InterleaveOnlyWhenForced;
 
   /// If false, consider all loops for vectorization.
   /// If true, only loops that explicitly request vectorization are considered.
-  bool VectorizeOnlyWhenForced = false;
+  bool VectorizeOnlyWhenForced;
+
+  LoopVectorizePass(LoopVectorizeOptions Opts = {})
+      : InterleaveOnlyWhenForced(Opts.InterleaveOnlyWhenForced),
+        VectorizeOnlyWhenForced(Opts.VectorizeOnlyWhenForced) {}
 
   ScalarEvolution *SE;
   LoopInfo *LI;
@@ -96,6 +140,7 @@
   AssumptionCache *AC;
   std::function<const LoopAccessInfo &(Loop &)> *GetLAA;
   OptimizationRemarkEmitter *ORE;
+  ProfileSummaryInfo *PSI;
 
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 
@@ -105,7 +150,7 @@
                BlockFrequencyInfo &BFI_, TargetLibraryInfo *TLI_,
                DemandedBits &DB_, AliasAnalysis &AA_, AssumptionCache &AC_,
                std::function<const LoopAccessInfo &(Loop &)> &GetLAA_,
-               OptimizationRemarkEmitter &ORE);
+               OptimizationRemarkEmitter &ORE_, ProfileSummaryInfo *PSI_);
 
   bool processLoop(Loop *L);
 };
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h b/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h
index 9be7055..ac6afb7 100644
--- a/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h
@@ -55,6 +55,8 @@
 
 } // end namespace slpvectorizer
 
+extern cl::opt<bool> RunSLPVectorization;
+
 struct SLPVectorizerPass : public PassInfoMixin<SLPVectorizerPass> {
   using StoreList = SmallVector<StoreInst *, 8>;
   using StoreListMap = MapVector<Value *, StoreList>;